{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack:///./node_modules/@fullcalendar/core/internal-common.js","webpack:///./node_modules/preact/dist/preact.module.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./node_modules/flatpickr/dist/esm/utils/dom.js","webpack:///./node_modules/jquery/src/core.js","webpack:///./node_modules/@hotwired/stimulus/dist/stimulus.js","webpack:///./node_modules/chart.js/dist/chart.js","webpack:///./node_modules/flatpickr/dist/esm/utils/index.js","webpack:///./node_modules/flatpickr/dist/esm/utils/dates.js","webpack:///./node_modules/jquery/src/var/isFunction.js","webpack:///./node_modules/jquery/src/var/document.js","webpack:///./node_modules/jquery/src/selector.js","webpack:///./node_modules/@fullcalendar/core/index.js","webpack:///./node_modules/flatpickr/dist/esm/utils/formatting.js","webpack:///./node_modules/jquery/src/jquery.js","webpack:///./node_modules/jquery/src/core/init.js","webpack:///./node_modules/flatpickr/dist/esm/types/options.js","webpack:///./node_modules/jquery/src/data/var/dataPriv.js","webpack:///./node_modules/jquery/src/var/rnothtmlwhite.js","webpack:///./node_modules/jquery/src/var/support.js","webpack:///./node_modules/jquery/src/core/nodeName.js","webpack:///./node_modules/jquery/src/core/access.js","webpack:///./node_modules/flatpickr/dist/esm/l10n/default.js","webpack:///./node_modules/jquery/src/core/toType.js","webpack:///./node_modules/jquery/src/traversing.js","webpack:///./node_modules/jquery/src/deferred.js","webpack:///./node_modules/jquery/src/event.js","webpack:///./node_modules/jquery/src/ajax.js","webpack:///./node_modules/flatpickr/dist/l10n/de.js","webpack:///./node_modules/@fullcalendar/daygrid/internal.js","webpack:///./node_modules/@popperjs/core/lib/enums.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack:///./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/math.js","webpack:///./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack:///./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/within.js","webpack:///./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack:///./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack:///./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack:///./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack:///./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack:///./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack:///./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack:///./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack:///./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack:///./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack:///./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack:///./node_modules/@popperjs/core/lib/createPopper.js","webpack:///./node_modules/@popperjs/core/lib/utils/debounce.js","webpack:///./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack:///./node_modules/bootstrap/dist/js/bootstrap.esm.js","webpack:///./node_modules/@popperjs/core/lib/popper.js","webpack:///./node_modules/@popperjs/core/lib/popper-lite.js","webpack:///./node_modules/@fullcalendar/core/locales/de.js","webpack:///./node_modules/@fullcalendar/timegrid/internal.js","webpack:///./node_modules/@fullcalendar/timegrid/index.js","webpack:///./node_modules/jquery/src/var/arr.js","webpack:///./node_modules/jquery/src/var/isWindow.js","webpack:///./node_modules/jquery/src/core/camelCase.js","webpack:///./node_modules/jquery/src/css.js","webpack:///./node_modules/@kurkle/color/dist/color.esm.js","webpack:///./node_modules/@fullcalendar/daygrid/index.js","webpack:///./node_modules/@fullcalendar/list/internal.js","webpack:///./node_modules/@fullcalendar/list/index.js","webpack:///./node_modules/jquery/src/var/slice.js","webpack:///./node_modules/jquery/src/var/class2type.js","webpack:///./node_modules/jquery/src/core/isAttached.js","webpack:///./node_modules/jquery/src/var/documentElement.js","webpack:///./node_modules/jquery/src/manipulation.js","webpack:///./node_modules/jquery/src/var/indexOf.js","webpack:///./node_modules/jquery/src/var/hasOwn.js","webpack:///./node_modules/jquery/src/callbacks.js","webpack:///./node_modules/jquery/src/data/var/acceptData.js","webpack:///./node_modules/jquery/src/queue.js","webpack:///./node_modules/jquery/src/effects.js","webpack:///./node_modules/jquery/src/var/rcssNum.js","webpack:///./node_modules/jquery/src/css/var/cssExpand.js","webpack:///./node_modules/jquery/src/var/rcheckableType.js","webpack:///./node_modules/jquery/src/css/var/rnumnonpx.js","webpack:///./node_modules/jquery/src/css/support.js","webpack:///./node_modules/jquery/src/attributes/support.js","webpack:///./node_modules/jquery/src/core/stripAndCollapse.js","webpack:///./node_modules/jquery/src/event/trigger.js","webpack:///./node_modules/preact/hooks/dist/hooks.module.js","webpack:///./node_modules/preact/compat/dist/compat.module.js","webpack:///./node_modules/jquery/src/var/concat.js","webpack:///./node_modules/jquery/src/var/push.js","webpack:///./node_modules/jquery/src/var/toString.js","webpack:///./node_modules/jquery/src/var/fnToString.js","webpack:///./node_modules/jquery/src/core/DOMEval.js","webpack:///./node_modules/jquery/src/traversing/var/rneedsContext.js","webpack:///./node_modules/jquery/src/core/var/rsingleTag.js","webpack:///./node_modules/jquery/src/traversing/findFilter.js","webpack:///./node_modules/jquery/src/core/ready.js","webpack:///./node_modules/jquery/src/data/Data.js","webpack:///./node_modules/jquery/src/data/var/dataUser.js","webpack:///./node_modules/jquery/src/var/pnum.js","webpack:///./node_modules/jquery/src/css/var/isHiddenWithinTree.js","webpack:///./node_modules/jquery/src/css/var/swap.js","webpack:///./node_modules/jquery/src/css/adjustCSS.js","webpack:///./node_modules/jquery/src/manipulation/var/rtagName.js","webpack:///./node_modules/jquery/src/manipulation/var/rscriptType.js","webpack:///./node_modules/jquery/src/manipulation/wrapMap.js","webpack:///./node_modules/jquery/src/manipulation/getAll.js","webpack:///./node_modules/jquery/src/manipulation/setGlobalEval.js","webpack:///./node_modules/jquery/src/manipulation/buildFragment.js","webpack:///./node_modules/jquery/src/css/var/getStyles.js","webpack:///./node_modules/jquery/src/css/curCSS.js","webpack:///./node_modules/jquery/src/css/addGetHookIf.js","webpack:///./node_modules/jquery/src/css/finalPropName.js","webpack:///./node_modules/jquery/src/attributes/prop.js","webpack:///./node_modules/jquery/src/ajax/var/nonce.js","webpack:///./node_modules/jquery/src/ajax/var/rquery.js","webpack:///./node_modules/jquery/src/serialize.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js","webpack:///./node_modules/@fullcalendar/interaction/index.js","webpack:///./app/javascript/controllers/datetime_controller.js","webpack:///./app/javascript/packs/application.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///./node_modules/jquery/src/var/getProto.js","webpack:///./node_modules/jquery/src/var/ObjectFunctionString.js","webpack:///./node_modules/jquery/src/selector-sizzle.js","webpack:///./node_modules/jquery/external/sizzle/dist/sizzle.js","webpack:///./node_modules/jquery/src/traversing/var/dir.js","webpack:///./node_modules/jquery/src/traversing/var/siblings.js","webpack:///./node_modules/jquery/src/deferred/exceptionHook.js","webpack:///./node_modules/jquery/src/core/readyException.js","webpack:///./node_modules/jquery/src/data.js","webpack:///./node_modules/jquery/src/queue/delay.js","webpack:///./node_modules/jquery/src/css/showHide.js","webpack:///./node_modules/jquery/src/manipulation/support.js","webpack:///./node_modules/jquery/src/css/var/rboxStyle.js","webpack:///./node_modules/jquery/src/effects/Tween.js","webpack:///./node_modules/jquery/src/attributes.js","webpack:///./node_modules/jquery/src/attributes/attr.js","webpack:///./node_modules/jquery/src/attributes/classes.js","webpack:///./node_modules/jquery/src/attributes/val.js","webpack:///./node_modules/jquery/src/event/focusin.js","webpack:///./node_modules/jquery/src/event/support.js","webpack:///./node_modules/jquery/src/manipulation/_evalUrl.js","webpack:///./node_modules/jquery/src/ajax/var/location.js","webpack:///./node_modules/jquery/src/ajax/parseXML.js","webpack:///./node_modules/jquery/src/wrap.js","webpack:///./node_modules/jquery/src/css/hiddenVisibleSelectors.js","webpack:///./node_modules/jquery/src/ajax/xhr.js","webpack:///./node_modules/jquery/src/ajax/script.js","webpack:///./node_modules/jquery/src/ajax/jsonp.js","webpack:///./node_modules/jquery/src/ajax/load.js","webpack:///./node_modules/jquery/src/core/parseHTML.js","webpack:///./node_modules/jquery/src/core/support.js","webpack:///./node_modules/jquery/src/event/ajax.js","webpack:///./node_modules/jquery/src/effects/animatedSelector.js","webpack:///./node_modules/jquery/src/offset.js","webpack:///./node_modules/jquery/src/dimensions.js","webpack:///./node_modules/jquery/src/deprecated.js","webpack:///./node_modules/jquery/src/event/alias.js","webpack:///./node_modules/jquery/src/exports/amd.js","webpack:///./node_modules/jquery/src/exports/global.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/trix/dist/trix.esm.min.js","webpack:///./app/javascript/fullcalendar/fullcalendar.js","webpack:///./node_modules/toastr/toastr.js","webpack:///./node_modules/toastr/node_modules/jquery/dist/jquery.js","webpack:///(webpack)/buildin/amd-define.js","webpack:///./app/javascript/src/global.js","webpack:///./app/javascript/src/static_pages.js","webpack:///./app/javascript/src/groups.js","webpack:///./app/javascript/src/types.js","webpack:///./app/javascript/src/users.js","webpack:///./app/javascript/src/bookings.js","webpack:///./node_modules/tom-select/dist/js/tom-select.complete.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./node_modules/flatpickr/dist/esm/index.js","webpack:///./node_modules/flatpickr/dist/esm/utils/polyfills.js","webpack:///./node_modules/chartkick/dist/chartkick.esm.js","webpack:///./node_modules/chart.js/auto/auto.js","webpack:///./node_modules/date-fns/constants.js","webpack:///./node_modules/date-fns/constructFrom.js","webpack:///./node_modules/date-fns/toDate.js","webpack:///./node_modules/date-fns/locale/en-US/_lib/formatDistance.js","webpack:///./node_modules/date-fns/locale/_lib/buildFormatLongFn.js","webpack:///./node_modules/date-fns/locale/en-US/_lib/formatLong.js","webpack:///./node_modules/date-fns/locale/en-US/_lib/formatRelative.js","webpack:///./node_modules/date-fns/locale/_lib/buildLocalizeFn.js","webpack:///./node_modules/date-fns/locale/en-US/_lib/localize.js","webpack:///./node_modules/date-fns/locale/_lib/buildMatchFn.js","webpack:///./node_modules/date-fns/locale/en-US/_lib/match.js","webpack:///./node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","webpack:///./node_modules/date-fns/locale/en-US.js","webpack:///./node_modules/date-fns/_lib/format/longFormatters.js","webpack:///./node_modules/date-fns/_lib/protectedTokens.js","webpack:///./node_modules/date-fns/_lib/defaultOptions.js","webpack:///./node_modules/date-fns/getDefaultOptions.js","webpack:///./node_modules/date-fns/transpose.js","webpack:///./node_modules/date-fns/parse/_lib/Setter.js","webpack:///./node_modules/date-fns/parse/_lib/Parser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/EraParser.js","webpack:///./node_modules/date-fns/parse/_lib/constants.js","webpack:///./node_modules/date-fns/parse/_lib/utils.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/YearParser.js","webpack:///./node_modules/date-fns/startOfWeek.js","webpack:///./node_modules/date-fns/getWeekYear.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.js","webpack:///./node_modules/date-fns/startOfISOWeek.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/QuarterParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/MonthParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.js","webpack:///./node_modules/date-fns/startOfWeekYear.js","webpack:///./node_modules/date-fns/getWeek.js","webpack:///./node_modules/date-fns/setWeek.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.js","webpack:///./node_modules/date-fns/getISOWeekYear.js","webpack:///./node_modules/date-fns/startOfISOWeekYear.js","webpack:///./node_modules/date-fns/getISOWeek.js","webpack:///./node_modules/date-fns/setISOWeek.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/DateParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.js","webpack:///./node_modules/date-fns/addDays.js","webpack:///./node_modules/date-fns/setDay.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/DayParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/LocalDayParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.js","webpack:///./node_modules/date-fns/getISODay.js","webpack:///./node_modules/date-fns/setISODay.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/ISODayParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/AMPMParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/MinuteParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/SecondParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.js","webpack:///./node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.js","webpack:///./node_modules/date-fns/parse/_lib/parsers.js","webpack:///./node_modules/date-fns/parse.js","webpack:///./node_modules/date-fns/parseISO.js","webpack:///./node_modules/date-fns/isDate.js","webpack:///./node_modules/date-fns/isValid.js","webpack:///./node_modules/date-fns/_lib/normalizeDates.js","webpack:///./node_modules/date-fns/startOfDay.js","webpack:///./node_modules/date-fns/differenceInCalendarDays.js","webpack:///./node_modules/date-fns/startOfYear.js","webpack:///./node_modules/date-fns/getDayOfYear.js","webpack:///./node_modules/date-fns/_lib/addLeadingZeros.js","webpack:///./node_modules/date-fns/_lib/format/lightFormatters.js","webpack:///./node_modules/date-fns/_lib/format/formatters.js","webpack:///./node_modules/date-fns/format.js","webpack:///./node_modules/date-fns/addMilliseconds.js","webpack:///./node_modules/date-fns/addSeconds.js","webpack:///./node_modules/date-fns/addMinutes.js","webpack:///./node_modules/date-fns/addHours.js","webpack:///./node_modules/date-fns/addWeeks.js","webpack:///./node_modules/date-fns/addMonths.js","webpack:///./node_modules/date-fns/addQuarters.js","webpack:///./node_modules/date-fns/addYears.js","webpack:///./node_modules/date-fns/differenceInMilliseconds.js","webpack:///./node_modules/date-fns/_lib/getRoundingMethod.js","webpack:///./node_modules/date-fns/differenceInSeconds.js","webpack:///./node_modules/date-fns/differenceInMinutes.js","webpack:///./node_modules/date-fns/differenceInHours.js","webpack:///./node_modules/date-fns/differenceInDays.js","webpack:///./node_modules/date-fns/differenceInWeeks.js","webpack:///./node_modules/date-fns/compareAsc.js","webpack:///./node_modules/date-fns/differenceInCalendarMonths.js","webpack:///./node_modules/date-fns/endOfDay.js","webpack:///./node_modules/date-fns/endOfMonth.js","webpack:///./node_modules/date-fns/isLastDayOfMonth.js","webpack:///./node_modules/date-fns/differenceInMonths.js","webpack:///./node_modules/date-fns/differenceInQuarters.js","webpack:///./node_modules/date-fns/differenceInCalendarYears.js","webpack:///./node_modules/date-fns/differenceInYears.js","webpack:///./node_modules/date-fns/startOfSecond.js","webpack:///./node_modules/date-fns/startOfMinute.js","webpack:///./node_modules/date-fns/startOfHour.js","webpack:///./node_modules/date-fns/startOfMonth.js","webpack:///./node_modules/date-fns/startOfQuarter.js","webpack:///./node_modules/date-fns/endOfSecond.js","webpack:///./node_modules/date-fns/endOfMinute.js","webpack:///./node_modules/date-fns/endOfHour.js","webpack:///./node_modules/date-fns/endOfWeek.js","webpack:///./node_modules/date-fns/endOfQuarter.js","webpack:///./node_modules/date-fns/endOfYear.js","webpack:///./node_modules/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.esm.js","webpack:///./node_modules/chartkick/chart.js/chart.esm.js","webpack:///./app/javascript/controllers/application.js","webpack:///./app/javascript/controllers/selectize_controller.js","webpack:///./app/javascript/controllers/tooltips_controller.js","webpack:///./app/javascript/controllers/countdown_controller.js","webpack:///./app/javascript/controllers/user_info_controller.js","webpack:///./app/javascript/controllers/cookie_consent_controller.js","webpack:///./app/javascript/controllers/direct_booking_controller.js","webpack:///./app/javascript/controllers/flatpickr_controller.js","webpack:///./app/javascript/controllers/offtimes_controller.js","webpack:///./app/javascript/controllers/submit_form_controller.js","webpack:///./app/javascript/controllers/toggle_controller.js","webpack:///./app/javascript/controllers/disable_with_checkbox_controller.js","webpack:///./app/javascript/controllers/tomselect_controller.js","webpack:///./app/javascript/controllers/modal_controller.js","webpack:///./app/javascript/controllers/toast_controller.js","webpack:///./node_modules/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.esm.js","webpack:///./app/javascript/controllers/chart_controller.js","webpack:///./app/javascript/controllers/availability_controller.js","webpack:///./app/javascript/controllers/calendar_controller.js","webpack:///./app/javascript/controllers/index.js","webpack:///./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack:///./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js","webpack:///./node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js","webpack:///./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js","webpack:///./node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js","webpack:///./node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js","webpack:///./node_modules/@rails/actiontext/app/javascript/actiontext/attachment_upload.js","webpack:///./node_modules/@rails/actiontext/app/javascript/actiontext/index.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","__webpack_require__","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","s","_toConsumableArray","arr","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","iter","iterator","from","_iterableToArray","_unsupportedIterableToArray","TypeError","_nonIterableSpread","_defineProperty","obj","configurable","writable","_defineProperties","props","descriptor","_typeof","constructor","_createForOfIteratorHelper","allowArrayLike","it","F","done","_e","f","normalCompletion","didErr","step","next","_e2","return","minLen","toString","test","len","arr2","noop","id","uid","isNullOrUndef","isObject","isNumberFinite","Number","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","endsWith","parseFloat","toDimension","callback","fn","args","thisArg","apply","each","loopable","reverse","keys","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","index","clone","source","map","klen","k","isValidKey","indexOf","_merger","options","tval","sval","merge","sources","current","merger","mergeIf","_mergerIf","keyResolvers","v","x","y","_getKeyResolver","_step","tmp","_iterator","split","_splitKey","_step2","_iterator2","resolveObjectKey","_capitalize","str","charAt","toUpperCase","defined","isFunction","setsEqual","a","b","size","_step3","_iterator3","item","has","_isClickEvent","PI","Math","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","epsilon","abs","niceNum","range","roundedRange","round","niceRange","pow","floor","fraction","_factorize","result","sqrt","sort","pop","isNumber","isNaN","almostWhole","rounded","_setMinAndMaxByKey","array","min","max","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","start","end","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","arguments","_lookup","table","cmp","mid","hi","lo","_lookupByKey","last","ti","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","forEach","method","base","_len","_key","res","this","unlistenArrayEvents","stub","splice","_arrayUnique","items","set","Set","requestAnimFrame","requestAnimationFrame","throttled","argsToUse","ticking","_len2","_key2","debounce","delay","_len3","_key3","_toLeftRightCenter","align","_alignStartEnd","_textX","left","right","rtl","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","count","_sorted","iScale","_parsed","axis","_iScale$getUserBounds","getUserBounds","minDefined","maxDefined","getPixelForValue","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","assign","atEdge","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","color","getHoverColor","saturate","darken","hexString","numbers","colors","intlCache","Map","formatNumber","num","locale","cacheKey","JSON","stringify","formatter","Intl","NumberFormat","getNumberFormat","format","formatters","numeric","tickValue","ticks","notation","chart","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","includes","Ticks","overrides","descriptors","getScope$1","node","_set","root","scope","Defaults","_descriptors","_appliers","instance","Constructor","_classCallCheck","animation","backgroundColor","borderColor","datasets","devicePixelRatio","context","platform","getDevicePixelRatio","elements","events","font","family","style","lineHeight","weight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","protoProps","staticProps","targetScope","targetName","_Object$definePropert","scopeObject","targetScopeObject","privateName","defineProperties","local","appliers","_this","defaults","_scriptable","startsWith","_indexable","_fallback","duration","easing","loop","to","properties","active","resize","show","animations","visible","hide","autoPadding","padding","top","bottom","display","offset","beginAtZero","bounds","clip","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","_ctx","tickColor","border","dash","dashOffset","width","title","text","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","route","_measureText","gc","longest","string","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","j","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","height","drawPoint","drawPointLegend","w","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","rotate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","point","area","margin","clipArea","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","setRenderOpts","opts","translation","fillStyle","textAlign","textBaseline","decorateText","line","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","lines","strokeWidth","strokeColor","backdrop","strokeText","maxWidth","fillText","addRoundedRectPath","h","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","match","_readValueToProps","_step4","ret","objProps","read","prop","_iterator4","toTRBL","toTRBLCorners","toPadding","toFont","fallback","parseInt","warn","toFontString","inputs","info","cacheable","_addGrace","minmax","change","keepZero","add","createContext","parentContext","_createResolver","scopes","_cache","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","concat","Proxy","deleteProperty","_keys","_cached","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","_scopes","getPrototypeOf","getKeysFromAllScopes","ownKeys","storage","_storage","_attachContext","proxy","subProxy","descriptorDefaults","_cacheable","_proxy","_context","_subProxy","_stack","setContext","override","receiver","isScriptable","getValue","join","delete","needsSubResolver","createSubResolver","_resolveScriptable","isIndexable","filter","_step5","_iterator5","resolver","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_proxy$_scriptable","_proxy$_indexable","_proxy$_allKeys","_allKeys","readKey","prefix","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","_step6","_iterator6","_rootScopes","allScopes","addScopesFromKey","_getTarget","subGetTarget","_step7","_iterator7","_step8","_iterator8","_step9","_iterator9","_step10","_iterator10","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_this$_parsing$key","_parsing","parsed","parse","EPSILON","getPoint","skip","getValueAxis","monotoneAdjust","deltaK","mK","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointsLen","pointAfter","monotoneCompute","pointBefore","valueAxis","iPixel","vPixel","capControlPoint","pt","_updateBezierControlPoints","controlPoints","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","spanGaps","cubicInterpolationMode","slopeDelta","splineCurveMonotone","prev","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","ownerDocument","defaultView","positions","getPositionedStyle","styles","suffix","pos","getRelativePosition","borderBox","boxSizing","paddings","borders","_getCanvasPosition","touches","offsetX","offsetY","box","shadowRoot","useOffsetPos","getBoundingClientRect","clientX","clientY","getCanvasPosition","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","maxHeight","containerSize","container","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","addEventListener","removeEventListener","readUsedSize","el","getPropertyValue","getStyle","_pointInLine","p1","p2","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRtlAdapter","rectX","_x","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_x2","_itemWidth","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","_ref","_boundSegment","segment","prevValue","startBound","endBound","_propertyFn2","_getSegment","_propertyFn","getSegment","inside","subStart","shouldStart","shouldStop","_boundSegments","segments","sub","_computeSegments","segmentOptions","_loop","_findStartAndEnd","findStartAndEnd","splitByStyles","cur","stop","solidSegments","_fullLoop","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","dir","_step11","_iterator11","styleChanged","p0","p0DataIndex","p1DataIndex","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","replacer","_slicedToArray","_arrayWithHoles","_i","_s","_arr","_n","_d","_iterableToArrayLimit","_nonIterableRest","_wrapNativeSuper","Class","Function","Wrapper","_construct","_getPrototypeOf","_setPrototypeOf","Parent","_isNativeReflectConstruct","construct","_inherits","subClass","superClass","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","Super","NewTarget","_possibleConstructorReturn","self","_assertThisInitialized","ReferenceError","sham","Boolean","valueOf","_createClass","_e3","queriedNonceValue","styleTexts","styleEls","injectStyles","styleText","styleEl","appendStylesTo","ensureElHasStyles","isConnected","getRootNode","registerStylesRoot","rootNode","querySelector","nonce","metaWithNonce","hasAttribute","getAttribute","elWithNonce","queryNonceValue","getNonceValue","parentEl","insertBefore","firstChild","hydrateStylesRoot","sheet","ruleCnt","cssRules","styleStr","trim","insertRule","DelayedRunner","drainedOption","isRunning","isDirty","pauseDepths","timeoutId","isPaused","tryDrain","force","depth","drained","_clearTimeout","removeElement","removeChild","elementClosest","selector","closest","documentElement","contains","elementMatches","parentElement","nodeType","matchesSelector","msMatchesSelector","PIXEL_PROP_RE","applyStyle","propName","applyStyleProp","val","getEventTargetViaRoot","ev","_a","_b","composedPath","guid$1","getUniqueDomId","preventDefault","listenBySelector","eventType","handler","attachedHandler","matchedChild","buildDelegationHandler","listenToHoverBySelector","onMouseEnter","onMouseLeave","currentMatchedChild","mouseOverEv","realOnMouseLeave","mouseLeaveEv","transitionEventNames","whenTransitionDone","realCallback","eventName","createAriaClickAttrs","createAriaKeyboardAttrs","tabIndex","onKeyDown","guidNumber","guid","String","disableCursor","body","classList","enableCursor","remove","preventSelection","userSelect","webkitUserSelect","allowSelection","preventContextMenu","allowContextMenu","compareByFieldSpec","obj0","obj1","fieldSpec","func","localeCompare","flexibleCompare","field","order","padStart","substr","formatWithOrdinals","fallbackText","reduce","arg","replace","compareNumbers","isInt","computeSmallestCellWidth","cellEl","allWidthEl","contentWidthEl","INTERNAL_UNITS","PARSE_RE","createDuration","input","unit","exec","years","months","days","milliseconds","parseString","parseObject","year","month","day","hours","hour","minutes","minute","seconds","second","millisecond","ms","weeks","week","specifiedWeeks","durationsEqual","d0","d1","addDurations","subtractDurations","multiplyDuration","asRoughDays","dur","asRoughMs","wholeDivideDurations","numerator","denominator","localRes","greatestDurationDenominator","isArraysEqual","equalityFunc","DAY_IDS","addWeeks","dateToUtcArray","arrayToUtcDate","addDays","addMs","diffWeeks","m0","m1","diffDays","diffWholeDays","timeAsMs","startOfDay","getUTCFullYear","getUTCMonth","getUTCDate","weekOfGivenYear","marker","dow","doy","firstWeekStart","firstWeekOffset","dayStart","fwd","getUTCDay","dateToLocalArray","date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","arrayToLocalDate","Date","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","UTC","isValidDate","buildIsoString","timeZoneOffset","stripZeroTime","toISOString","formatTimeZoneOffset","formatDayString","formatIsoMonthStr","formatIsoTimeString","doIso","mins","memoize","workerFunc","resEquality","teardownFunc","currentArgs","currentRes","newArgs","memoizeObjArg","currentArg","newArg","isPropsEqual","EXTENDED_SETTINGS_AND_SEVERITIES","separator","omitZeroMinute","meridiem","omitCommas","STANDARD_DATE_PROP_SEVERITIES","timeZoneName","era","weekday","MERIDIEM_RE","COMMA_RE","MULTI_SPACE_RE","LTR_RE","UTC_RE","NativeFormatter","formatSettings","standardDateProps","extendedSettings","severity","buildFormattingFunc","betterDefaultSeparator","diffSeverity","ca","getMarkerYear","getMarkerMonth","getMarkerDay","computeMarkerDiffSeverity","calendarSystem","biggestUnitForPartial","full0","full1","partialFormattingFunc","biggestUnit","partialOptions","computePartialFormattingOptions","partial0","partial1","insertion","i0","found0","before0","after0","i1","found1","before1","after1","before","after","findCommonInsertion","defaultSeparator","standardDatePropCnt","weekText","weekTextLong","parts","simpleNumberFormat","formatWeekNumber","computeWeekNumber","sanitizeSettings","timeZone","zeroFormat","normalFormat","DateTimeFormat","codes","zeroProps","tzoStr","replaced","injectTzoStr","toLocaleLowerCase","postProcess","buildNativeFormattingFunc","expandZonedMarker","dateInfo","markerToArray","createVerboseFormattingArg","startInfo","localeCodes","CmdFormatter","cmdStr","cmdFormatter","FuncFormatter","createFormatter","BASE_OPTION_REFINERS","navLinkDayClick","identity","navLinkWeekClick","bootstrapFontAwesome","buttonIcons","customButtons","defaultAllDayEventDuration","defaultTimedEventDuration","nextDayThreshold","scrollTime","scrollTimeReset","slotMinTime","slotMaxTime","dayPopoverFormat","slotDuration","snapDuration","headerToolbar","footerToolbar","defaultRangeSeparator","titleRangeSeparator","forceEventDuration","dayHeaders","dayHeaderFormat","dayHeaderClassNames","dayHeaderContent","dayHeaderDidMount","dayHeaderWillUnmount","dayCellClassNames","dayCellContent","dayCellDidMount","dayCellWillUnmount","initialView","weekends","weekNumberCalculation","weekNumbers","weekNumberClassNames","weekNumberContent","weekNumberDidMount","weekNumberWillUnmount","editable","viewClassNames","viewDidMount","viewWillUnmount","nowIndicator","nowIndicatorClassNames","nowIndicatorContent","nowIndicatorDidMount","nowIndicatorWillUnmount","showNonCurrentDates","lazyFetching","startParam","endParam","timeZoneParam","locales","themeSystem","dragRevertDuration","dragScroll","allDayMaintainDuration","unselectAuto","dropAccept","eventOrder","token","specs","tokens","substring","eventOrderStrict","handleWindowResize","windowResizeDelay","longPressDelay","eventDragMinDistance","expandRows","contentHeight","weekNumberFormat","eventResizableFromStart","displayEventTime","displayEventEnd","progressiveEventRendering","businessHours","initialDate","now","eventDataTransform","stickyHeaderDates","stickyFooterScrollbar","viewHeight","defaultAllDay","eventSourceFailure","eventSourceSuccess","eventDisplay","eventStartEditable","eventDurationEditable","eventOverlap","eventConstraint","eventAllow","eventBackgroundColor","eventBorderColor","eventTextColor","eventColor","eventClassNames","eventContent","eventDidMount","eventWillUnmount","selectConstraint","selectOverlap","selectAllow","droppable","unselectCancel","slotLabelFormat","slotLaneClassNames","slotLaneContent","slotLaneDidMount","slotLaneWillUnmount","slotLabelClassNames","slotLabelContent","slotLabelDidMount","slotLabelWillUnmount","dayMaxEvents","dayMaxEventRows","dayMinWidth","slotLabelInterval","allDayText","allDayClassNames","allDayContent","allDayDidMount","allDayWillUnmount","slotMinWidth","navLinks","eventTimeFormat","rerenderDelay","moreLinkText","moreLinkHint","selectMinDistance","selectable","selectLongPressDelay","eventLongPressDelay","selectMirror","eventMaxStack","eventMinHeight","eventMinWidth","eventShortHeight","slotEventOverlap","firstDay","dayCount","dateAlignment","dateIncrement","hiddenDays","fixedWeekCount","validRange","visibleRange","titleFormat","eventInteractive","noEventsText","viewHint","navLinkHint","closeHint","timeHint","eventHint","moreLinkClick","moreLinkClassNames","moreLinkContent","moreLinkDidMount","moreLinkWillUnmount","monthStartFormat","handleCustomRendering","customRenderingMetaMap","customRenderingReplaces","BASE_OPTION_DEFAULTS","center","CALENDAR_LISTENER_REFINERS","datesSet","eventsSet","eventAdd","eventChange","eventRemove","windowResize","eventClick","eventMouseEnter","eventMouseLeave","select","unselect","loading","_unmount","_beforeprint","_afterprint","_noEventDrop","_noEventResize","_resize","_scrollRequest","CALENDAR_OPTION_REFINERS","buttonText","buttonHints","views","initialEvents","eventSources","COMPLEX_OPTION_COMPARATORS","isMaybeObjectsEqual","isMaybeArraysEqual","VIEW_OPTION_REFINERS","component","buttonTextKey","dateProfileGeneratorClass","usesMinMaxTime","classNames","content","didMount","willUnmount","mergeRawOptions","optionSets","mergeProps","refineProps","refiners","refined","extra","_propName","raw","propObjs","complexPropsMap","dest","complexObjs","unshift","_name","filterHash","hash","filtered","mapHash","newHash","arrayToHash","hashValuesToArray","HANDLER_RE","getUnequalProps","compareObjs","oldProps","newProps","equalityFuncs","isObjValsEqual","_key4","val0","val1","comparator","theClass","calendarSystemClassMap","GregorianCalendarSystem","ISO_RE","DateEnv","settings","isNamedTimeZone","namedTimeZoneImpl","canComputeOffset","createCalendarSystem","weekDow","weekDoy","weekNumberFunc","createMarkerMeta","timestampToMarker","isTimeUnspecified","forcedTzo","_parse","arrayToMarker","diffWholeYears","diffWholeMonths","diffWholeWeeks","diffHours","diffMinutes","diffSeconds","diff","asRoughMonths","startOfYear","startOfMonth","startOfWeek","startOfHour","startOfMinute","startOfSecond","toDate","nextW","weekOfYear","dateOptions","offsetForMarker","isEndExclusive","formatRange","forcedStartTzo","forcedEndTzo","extraOptions","omitTimeZoneOffset","omitTime","timestampToArray","getTimezoneOffset","offsetForArray","Theme","calendarOptions","iconOverrideOption","setIconOverride","iconOverrideHash","iconClassesCopy","buttonName","iconClasses","applyIconOverridePrefix","className","iconOverridePrefix","classes","isRtl","rtlIconClasses","baseIconClass","customButtonProps","iconOverrideCustomButtonOption","flushSync","runBeforeFlush","oldDebounceRendering","debounceRendering","callbackQ","FakeComponent","_preact$Component","_super","setState","ContextType","origProvider","Provider","_this4","isNew","getChildContext","children","subs","shouldComponentUpdate","_props","forceUpdate","old","componentWillUnmount","ScrollResponder","execFunc","emitter","_this5","handleScrollRequest","queuedRequest","drain","on","fireInitialScroll","off","isDatesNew","time","ViewContextType","buildViewContext","viewSpec","viewApi","viewOptions","dateProfileGenerator","dateEnv","theme","pluginHooks","dispatch","getCurrentData","calendarApi","registerInteractiveComponent","unregisterInteractiveComponent","addResizeHandler","removeResizeHandler","createScrollResponder","PureComponent","_Component","_super2","nextProps","nextState","debug","log","state","propEquality","stateEquality","newState","addPropsEquality","addStateEquality","contextType","BaseComponent","_PureComponent","_super3","setRef","ref","ContentInjector","_BaseComponent","_super4","_this6","queuedDomNodes","currentDomNodes","handleEl","generatorName","hasCustomRenderingHandler","updateElRef","elRef","innerContent","currentGeneratorMeta","customGenerator","defaultGenerator","renderProps","attrs","buildElAttrs","useDefault","customGeneratorRes","dangerouslySetInnerHTML","__html","html","domNodes","elTag","applyQueueudDomNodes","triggerCustomRendering","isActive","_context$options","generatorMeta","containerEl","reportNewContainerEl","elClasses","isTruthy","newNode","extraClassNames","elAttrs","elStyle","RenderId","ContentContainer","_Component2","_super5","_this7","InnerContent","InnerContentInjector","didMountMisfire","componentDidMount","classNameGenerator","generatedClassNames","renderId","containerComponent","parentProps","ViewContainer","_BaseComponent2","_super6","view","buildViewClassNames","invertRanges","ranges","constraintRange","dateRange","invertedRanges","compareRanges","range0","range1","intersectRanges","newRange","rangesIntersect","rangeContainsRange","outerRange","innerRange","rangeContainsMarker","constrainMarkerToRange","computeAlignedDayRange","timedRange","dayCnt","computeVisibleDayRange","startDay","endDay","endTimeMS","isMultiDayRange","diffDates","date0","date1","largeUnit","m0day","m1day","reduceCurrentDate","currentDate","action","dateMarker","getInitialDate","initialDateInput","createMarker","getNow","nowInput","createNowMarker","DateProfileGenerator","nowDate","initHiddenDays","currentDateProfile","forceToValid","prevDate","subtract","startOf","currentRangeUnit","build","nextDate","currentInfo","isRangeAllDay","renderRange","activeRange","isValid","buildValidRange","trimHiddenDays","buildCurrentRangeInfo","buildRenderRange","adjustActiveRange","currentRange","buildDateIncrement","validRangeInput","simpleInput","refineRange","durationUnit","buildRangeFromDuration","buildRangeFromDayCount","buildCustomVisibleRange","greatestWholeUnit","getFallbackDuration","_this$props","_this$props2","computeRes","isHiddenDay","skipHiddenDays","_this$props3","runningCount","visibleRangeInput","customAlignment","rangeInput","isHiddenDayHash","inc","isExclusive","createEventInstance","defId","instanceId","parseRecurring","recurringTypes","allDay","allDayGuess","typeData","typeId","expandRecurring","eventStore","framingRange","defs","instances","recurringDef","def","expandRecurringRanges","eventDef","markers","expand","EVENT_NON_DATE_REFINERS","groupId","url","interactive","EVENT_DATE_REFINERS","EVENT_REFINERS","extendedProps","parseEvent","eventSource","allowOpenRange","buildEventRefiners","defIdMap","instanceIdMap","_refineEventDef","refineEventDef","computeIsDefaultAllDay","recurringRes","parseEventDef","sourceId","singleRes","parseSingle","_def","hasEnd","publicId","EVENT_UI_REFINERS","eventRefiners","ui","createEventUi","eventDefMemberAdders","memberAdder","freeze","startMeta","endMeta","startMarker","endMarker","startInput","parseEvents","rawEvents","tuple","eventTupleToStore","getRelevantEvents","newStore","filterEventStoreDefs","lookDef","def0","def1","createEmptyEventStore","mergeEventStores","store0","store1","filterFunc","parseClassNames","startEditable","durationEditable","constraint","overlap","allow","textColor","EMPTY_EVENT_UI","constraints","allows","normalizeConstraint","combineEventUis","uis","combineTwoEventUis","item0","item1","EVENT_SOURCE_REFINERS","success","failure","parseEventSource","rawObj","buildEventSourceRefiners","_refineProps","metaRes","buildEventSourceMeta","_raw","isFetching","latestFetchId","fetchRange","sourceDefId","eventSourceRefiners","eventSourceDefs","parseMeta","reduceEventStore","dateProfile","fetchId","subset","transformRawEvents","excludeEventsBySourceId","receiveRawEvents","existingEventStore","_buildPublicIdMaps","_publicId","buildPublicIdMaps","resetRawEvents","expandRange","addEvent","master","filteredDefs","filteredInstances","excludeSubEventStore","calEachTransform","sourceEachTransform","transformEachRawEvent","refinedEvents","rawEvent","refinedEvent","rezoneEventStoreDates","oldDateEnv","newDateEnv","Emitter","handlers","thisContext","addToHash","removeFromHash","attachedHandlers","optionHandler","_key5","DEF_DEFAULTS","startTime","endTime","daysOfWeek","parseBusinessHours","rawDefs","rawDef","refineInputs","triggerDateSelect","selection","pev","trigger","buildDateSpanApiWithContext","jsEvent","origEvent","dateSpan","span","dateSpanTransforms","transform","buildRangeApi","getDefaultEventEnd","applyMutationToEventStore","eventConfigBase","mutation","eventConfigs","compileEventUis","applyMutationToEventDef","_def3","applyMutationToEventInstance","eventConfig","standardProps","startDelta","endDelta","copy","eventDefMutationAppliers","applier","eventInstance","forceAllDay","clearEnd","datesDelta","EventSourceImpl","internalEventSource","sourceIds","isRefetch","EventImpl","_instance","mutate","instanceRange","granularity","maintainDuration","endInput","deltaInput","formatInput","relevantEvents","oldEvent","relatedEvents","buildEventApis","revert","asStore","eventApiToStore","formatIso","startStr","endStr","collapseColor","collapseExtendedProps","toPlainObject","eventApi","excludeInstance","eventApis","excludeInstanceId","sliceEventStore","eventUiBases","inverseBgByGroupId","inverseBgByDefId","defByGroupId","bgRanges","fgRanges","eventUis","_def4","_ui2","origRange","normalRange","slicedRange","isStart","isEnd","_step12","_iterator12","invertedRange","_def5","_ui3","_defId","_step13","_iterator13","_invertedRange","bg","fg","hasBgRendering","setElSeg","seg","fcSeg","getElSeg","eventDefs","compileEventUi","sortEventSegs","segs","eventOrderSpecs","objs","buildSegCompareObj","fieldSpecs","compareByFieldSpecs","_seg","eventRange","computeSegDraggable","_step14","transformers","isDraggableTransformers","_seg$eventRange","_iterator14","transformer","computeSegStartResizable","computeSegEndResizable","buildSegTimeText","timeFormat","defaultDisplayEventTime","defaultDisplayEventEnd","startOverride","endOverride","wholeEventStart","wholeEventEnd","segStart","segEnd","isStartDay","isEndDay","getSegMeta","todayRange","segRange","isPast","isFuture","isToday","getEventClassNames","isMirror","isDraggable","isStartResizable","isEndResizable","isDragging","isResizing","isSelected","buildEventRangeKey","getSegAnchorAttrs","_seg$eventRange2","href","hasHandlers","STANDARD_PROPS","parseDateSpan","defaultDuration","_refineProps2","parseOpenDateSpan","isDateSpansEqual","span0","span1","_propName2","isSpanPropsEqual","buildRangeApiWithTimeZone","fabricateEventRange","unpromisify","normalizedSuccessCallback","normalizedFailureCallback","isResolved","wrappedSuccess","wrappedFailure","then","canVGrowWithinCell","JsonRequestError","_Error","_super7","response","_this8","requestJson","params","fetchOptions","URLSearchParams","headers","fetch","fetchRes","ok","json","parsedResponse","getCanVGrowWithinCell","position","innerHTML","possible","offsetHeight","computeCanVGrowWithinCell","CalendarRoot","_BaseComponent3","_super8","_this9","forPrint","handleBeforePrint","handleAfterPrint","isHeightAuto","getClass","Interaction","isHitComboAllowed","parseInteractionSettings","useEventCenter","interactionSettingsToStore","interactionSettingsStore","CalendarImpl","currentDataManager","optionName","rawOptionValue","currentCalendarOptionsInput","availableRawLocales","handlerName","currentCalendarOptionsRefiners","_this$currentDataMana","_key6","viewType","dateOrRange","_this10","batchRendering","spec","viewSpecs","getUnitViewSpec","_this$getCurrentData","toolbarConfig","viewTypes","header","viewsWithButtons","footer","singleUnit","addYears","zonedDateInput","dateOrObj","endDate","selectionInput","dateSelection","triggerDateUnselect","eventInput","sourceInput","triggerEventAdd","sourceApi","getEventSourceById","newEventApi","_this11","_state$eventStore","currentData","sourceHash","sourceApis","internalId","timeInput","pointInsideRect","intersectRects","rect1","rect2","constrainPoint","getRectCenter","diffPoints","point1","point2","EMPTY_EVENT_STORE","Splitter","getKeysForEventDefs","_getKeysForEventDefs","splitDateSelection","_splitDateSpan","splitEventStore","_splitEventStore","splitIndividualUi","_splitIndividualUi","splitEventDrag","_splitInteraction","splitEventResize","eventUiBuilders","_this12","keyInfos","getKeyInfo","defKeys","dateSelections","individualUi","eventStores","eventDrags","eventDrag","eventResizes","eventResize","splitProps","buildEventUiForKey","keyInfo","buildEventUi","eventSelection","dateSpans","_step15","_iterator15","getKeysForDateSpan","_this13","getKeysForEventDef","splitStores","_step16","_iterator16","_step17","_iterator17","_key7","splitHashes","_step18","_iterator18","splitStates","affectedStores","affectedEvents","mutatedKeysByDefId","mutatedEvents","mutatedStores","populate","isEvent","_key8","allUi","eventUiForKey","baseParts","stuff","getDateMeta","isDisabled","isOther","getDayClassNames","DAY_FORMAT","WEEK_FORMAT","buildNavLinkAttrs","isTabbable","dateStr","zonedDate","handleInteraction","customAction","zoomTo","_scrollbarWidths","_isRtlScrollbarOnLeft","getIsRtlScrollbarOnLeft","outerEl","overflow","computeIsRtlScrollbarOnLeft","getScrollbarWidths","computeScrollbarWidthsForEl","computeScrollbarWidths","offsetWidth","computeEdges","getPadding","computedStyle","borderLeft","borderLeftWidth","borderRight","borderRightWidth","borderTop","borderTopWidth","borderBottom","borderBottomWidth","badScrollbarWidths","scrollbarLeftRight","scrollbarBottom","scrollbarLeft","scrollbarRight","paddingLeft","paddingRight","paddingTop","paddingBottom","computeInnerRect","goWithinPadding","doFromWindowViewport","outerRect","computeRect","edges","pageXOffset","pageYOffset","getClippingParents","parents","HTMLElement","overflowY","overflowX","PositionCache","originEl","els","isHorizontal","isVertical","originClientRect","buildElHorizontals","buildElVerticals","originClientLeft","_step20","lefts","rights","_iterator20","originClientTop","_step21","tops","bottoms","_iterator21","leftPosition","topPosition","leftIndex","topIndex","otherCache","similarNumArrays","ScrollController","getScrollHeight","getClientHeight","getScrollWidth","getClientWidth","getMaxScrollTop","getMaxScrollLeft","getScrollTop","getScrollLeft","ElementScrollController","_ScrollController","_super9","_this14","scrollTop","scrollLeft","scrollWidth","scrollHeight","WindowScrollController","_ScrollController2","_super10","scroll","DateComponent","_BaseComponent4","_super11","_this15","positionLeft","positionTop","elWidth","elHeight","SegHierarchy","getEntryThickness","entry","thickness","strictOrder","allowReslicing","maxCoord","maxStackCnt","levelCoords","entriesByLevel","stackCnts","_step22","hiddenEntries","_iterator22","insertEntry","findInsertion","isInsertionValid","insertEntryAt","handleInvalidInsertion","levelCoord","stackCnt","touchingEntry","hiddenEntry","intersectSpans","splitEntry","barrier","entrySpan","barrierSpan","lateral","insertAt","level","buildEntryKey","newEntry","levelCnt","candidateCoord","touchingLevel","touchingLateral","trackingLevel","trackingCoord","trackingEntries","trackingEntry","searchRes","binarySearch","getEntrySpanEnd","lateralIndex","trackingEntryBottom","destLevel","destLateral","rects","_step23","entries","_iterator23","groupIntersectingEntries","_step24","merges","_iterator24","_step25","filteredMerges","hungryMerge","_iterator25","searchVal","getItemVal","startIndex","endIndex","middleIndex","middleVal","ElementDragging","bool","config","DRAG_META_REFINERS","parseDragMeta","_refineProps3","leftoverProps","CLASS_NAME","renderInner$1","TableDateCell","_BaseComponent5","_super12","_this$context","dayMeta","navLinkAttrs","colCnt","extraRenderProps","role","colSpan","extraDataAttrs","InnerContainer","isSticky","WEEKDAY_FORMAT","TableDowCell","_BaseComponent6","_super13","_this$context2","dateMeta","NowTimer","_Component3","_super14","_this16","initialNowDate","initialNowQueriedMs","computeTiming","currentState","prevProps","unroundedNow","currentUnitStart","nextUnitStart","waitMs","buildDayRange","_setTimeout","_this17","_this$computeTiming","_clearTimeout2","DayHeader","_BaseComponent7","_super15","_this18","createDayHeaderFormatter","_this$props4","dates","datesRepDistinctDays","renderIntro","explicitFormat","dateCnt","computeFallbackHeaderFormat","DaySeriesModel","indices","dayIndex","cnt","firstIndex","getDateDayIndex","lastIndex","clippedFirstIndex","clippedLastIndex","ceil","dayOffset","DayTableModel","daySeries","breakOnWeeks","daysPerRow","rowCnt","cells","buildCells","headerDates","buildHeaderDates","rows","row","col","buildCell","seriesSeg","sliceRange","nextIndex","firstCol","lastCol","Slicer","sliceBusinessHours","_sliceBusinessHours","sliceDateSelection","_sliceDateSpan","_sliceEventStore","sliceEventDrag","_sliceInteraction","sliceEventResize","forceDayIfListItem","_len4","extraArgs","_key9","eventSegs","dateSelectionSegs","businessHourSegs","fgEventSegs","bgEventSegs","_len5","_key10","_len6","_key11","computeActiveRange","rangeRes","_len7","_key12","sliceEventRanges","_len8","_key13","affectedInstances","activeDateSpanRange","_len9","_key14","_step26","_iterator26","eventRanges","_step27","_iterator27","sliceEventRange","_step28","_iterator28","isComponentAllDay","isInteractionValid","isNewPropsValid","isDateSelectionValid","calendarState","isPropsValid","dateSpanMeta","filterConfig","isInteractionPropsValid","isDateSelectionPropsValid","subjectEventStore","subjectDefs","subjectInstances","subjectConfigs","selectionConfig","removals","otherEventStore","otherDefs","otherInstances","otherConfigs","subjectInstanceId","subjectInstance","subjectRange","subjectConfig","subjectDef","allConstraintsPass","eventOverlapFunc","otherInstanceId","otherInstance","_step29","calendarEventStore","_iterator29","subjectAllow","subjectDateSpan","origDef","origInstance","relevantEventStore","relevantDefs","relevantInstances","selectionRange","selectOverlapFunc","relevantInstanceId","relevantInstance","_step30","_iterator30","selectionAllow","businessHoursUnexpanded","_step31","_iterator31","anyRangesContainRange","constraintToRanges","eventStoreToRanges","outerRanges","_step32","_iterator32","VISIBLE_HIDDEN_RE","Scroller","_BaseComponent8","_super16","_this19","liquid","liquidIsAbsolute","isAbsolute","overcomeLeft","overcomeRight","overcomeBottom","marginLeft","marginRight","marginBottom","realClientWidth","getYScrollbarWidth","realClientHeight","getXScrollbarWidth","RefMap","masterCallback","_this20","currentMap","depths","callbackMap","handleValue","removed","added","_this21","refCallback","collectFromHash","_computeShrinkWidth","chunkEls","_step33","largestWidth","_iterator33","containers","allMatches","querySelectorAll","findElements","shrinkCell","getSectionHasLiquidHeight","sectionConfig","isColPropsEqual","cols0","cols1","renderMicroColGroup","cols","shrinkWidth","_step34","colNodes","_iterator34","colProps","sanitizeShrinkWidth","minWidth","getSectionClassNames","wholeTableVGrow","renderScrollShim","tableMinWidth","getStickyHeaderDates","getStickyFooterScrollbar","SimpleScrollGrid","_BaseComponent9","_super17","_this22","processCols","scrollerRefs","scrollerElRefs","_handleScrollerEl","forceYScrollbars","scrollerClientWidths","scrollerClientHeights","handleSizing","safeSetState","computeShrinkWidth","computeScrollerDims","sectionConfigs","sections","microColGroupNode","getScrollGridClassNames","collapsibleWidth","currentConfig","configCnt","configI","headSectionNodes","bodySectionNodes","footSectionNodes","renderSection","isBuggy","roleAttrs","isHeader","outerContent","renderChunkTd","chunkConfig","_this$state","needsYScrolling","getAllowYScrolling","isLiquid","sectionKey","tableClassName","syncRowHeights","tableColGroupNode","rowContent","renderChunkContent","rowSyncHeights","reportRowHeightChange","createRef","scrollerEl","section","_step37","_iterator37","getSectionByKey","scrollerElRef","_step35","_iterator35","hasShrinkWidth","getAll","scrollbarWidth","scroller","_step36","_iterator36","_sectionKey","harnessEl","EventContainer","_BaseComponent10","_super18","_this23","timeText","disableDragging","disableResizing","isDateSelecting","StandardEvent","_BaseComponent11","_super19","defaultTimeFormat","renderInnerContent$1","eventContentArg","innerProps","NowIndicatorContainer","Consumer","isAxis","DAY_NUM_FORMAT","DayCellContainer","_BaseComponent12","_super20","_this24","refineRenderProps","isMonthStart","showDayNumber","hasCustomDayCellContent","dayNumberText","BgEvent","_BaseComponent13","_super21","renderInnerContent","renderFill","fillType","WeekNumberContainer","defaultFormat","renderInner","Popover","_BaseComponent14","_super22","_this25","titleId","handleRootEl","rootEl","handleDocumentMouseDown","handleCloseClick","handleDocumentKeyDown","onClose","_this$context3","extraAttrs","getIconClass","updateSize","_this$props5","alignmentEl","alignGridTop","alignmentRect","_step19","clippingParents","_iterator19","intersection","computeClippedClientRect","popoverDims","popoverTop","popoverLeft","origin","offsetParent","MorePopover","_DateComponent","_super23","_this26","_this$context4","startDate","forceTimed","extraDateSpan","dayEl","layer","MoreLinkContainer","_BaseComponent15","_super24","_this27","isPopoverOpen","popoverId","handleLinkEl","linkEl","handleClick","_assertThisInitialize","computeRange","buildPublicSeg","_seg$eventRange3","allDayDate","allSegs","hiddenSegs","handlePopoverClose","_this28","moreCnt","hint","shortText","renderMoreLinkInner","alignmentElRef","popoverContent","updateParentEl","computeEarliestSegStart","pickLatestEnd","pickEarliestStart","seg0","seg1","u","defaultProps","__k","__","__b","__e","__d","__c","__h","__v","vnode","_","g","cssText","toLowerCase","removeAttribute","A","P","C","T","$","__r","__P","M","__n","ownerSVGElement","N","H","I","z","L","nextSibling","q","S","some","__E","render","B","_sb","__s","getDerivedStateFromProps","componentWillMount","componentWillReceiveProps","componentWillUpdate","componentDidUpdate","getSnapshotBeforeUpdate","O","diffed","localName","createTextNode","createElementNS","is","childNodes","attributes","checked","unmount","D","E","G","getDerivedStateFromError","componentDidCatch","toggleClass","elem","tag","textContent","clearNode","findParent","condition","createNumberInput","inputClassName","wrapper","numInput","arrowUp","arrowDown","navigator","userAgent","pattern","getEventTarget","getProto","_slice","class2type","hasOwn","fnToString","ObjectFunctionString","support","isWindow","DOMEval","toType","version","jQuery","init","rtrim","isArrayLike","jquery","toArray","pushStack","elems","prevObject","first","eq","extend","copyIsArray","deep","isPlainObject","expando","random","isReady","msg","proto","Ctor","isEmptyObject","globalEval","code","makeArray","results","inArray","grep","invert","callbackExpect","asyncGeneratorStep","gen","_next","_throw","EventListener","eventTarget","eventOptions","unorderedBindings","binding","extendedEvent","_stopImmediatePropagation","stopImmediatePropagation","immediatePropagationStopped","extendEvent","bindings","handleEvent","rightIndex","Dispatcher","application","eventListenerMaps","started","eventListeners","eventListener","connect","disconnect","fetchEventListenerForBinding","bindingConnected","bindingDisconnected","detail","handleError","fetchEventListener","eventListenerMap","fetchEventListenerMapForEventTarget","createEventListener","descriptorPattern","parseEventTarget","eventTargetName","camelize","char","capitalize","dasherize","Action","tagName","defaultEventNames","getDefaultEventNameForElement","identifier","methodName","eventNameSuffix","Element","getParamsFromEventTargetAttributes","RegExp","o_O","typecast","descriptorString","Binding","willBeInvokedByEvent","invokeWithEvent","controller","currentTarget","actionEvent","logDebugActivity","containsElement","ElementObserver","delegate","mutationObserverInit","childList","subtree","mutationObserver","MutationObserver","mutations","processMutations","observe","refresh","takeRecords","matchElementsInTree","_Array$from","_i2","_Array$from2","_element","addElement","processMutation","processAttributeChange","attributeName","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","elementAttributeChanged","matchElement","nodes","_i3","_Array$from3","elementFromNode","processTree","_i4","_Array$from4","elementIsActive","tree","processor","Node","ELEMENT_NODE","elementMatched","elementUnmatched","AttributeObserver","elementObserver","pause","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","StringMapObserver","_this2","stringMap","attributeOldValue","knownAttributeNames","refreshAttribute","oldValue","getStringMapKeyForAttribute","stringMapKeyAdded","stringMapValueChanged","_oldValue","stringMapKeyRemoved","currentAttributeNames","recordedAttributeNames","attribute","_add","del","prune","Multimap","valuesByKey","_ref2","_ref3","_ref4","_ref5","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","_this$refreshTokensFo2","refreshTokensForElement","unmatchedTokens","matchedTokens","tokensUnmatched","getValuesForKey","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","findIndex","_ref6","_ref7","tokensAreEqual","tokenString","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","WeakMap","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","schema","clear","forToken","connectAction","disconnectAction","ValueObserver","stringMapObserver","valueDescriptorMap","invokeChangedCallbacksForDefaultValues","hasValue","invokeChangedCallback","writer","valueDescriptorNameMap","valueDescriptors","_ref9","rawValue","rawOldValue","changedMethodName","changedMethod","reader","hasMethodName","TargetObserver","targetsByName","disconnectAllTargets","_ref10","connectTarget","_ref11","disconnectTarget","targetConnected","targetDisconnected","Context","functionName","controllerConstructor","bindingObserver","dispatcher","valueObserver","targetObserver","initialize","invokeControllerMethod","readInheritableStaticArrayValues","propertyName","ancestors","getAncestorsForConstructor","definition","getOwnStaticArrayValues","readInheritableStaticObjectPairs","pairs","getOwnStaticObjectPairs","bless","shadowConstructor","shadowProperties","getOwnKeys","shadowingDescriptor","getShadowedDescriptor","getShadowProperties","shadow","blessedProperties","blessing","getBlessedProperties","getOwnPropertySymbols","getOwnPropertyNames","extendWithReflect","extended","_constructor","Module","blessDefinition","contextsByScope","connectedContexts","fetchContextForScope","ClassMap","getDataKey","getAttributeNameForKey","DataMap","Guide","logger","warnedKeysByObject","warnedKeys","attributeValueContainsToken","TargetSet","find","targetNames","findTarget","findLegacyTarget","targets","findAllTargets","findAllLegacyTargets","getSelectorForTargetName","findElement","findAllElements","targetAttributeForScope","getLegacySelectorForTargetName","deprecate","targetDescriptor","targetAttribute","revisedAttributeName","guide","Scope","controllerSelector","queryElements","controllerAttribute","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","scopesByIdentifier","fetchScopesByIdentifierForElement","createScopeForElementAndIdentifier","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","contexts","unloadIdentifier","connectModule","disconnectModule","connectContextForScope","disconnectContextForScope","defaultSchema","Application","logFormattedMessage","router","_start","mark","_callee","wrap","readyState","shouldLoad","load","rest","definitions","loadDefinition","identifiers","getContextForElementAndIdentifier","groupCollapsed","groupEnd","parseValueDefinitionPair","_ref15","_ref16","typeDefinition","typeFromObject","typeObject","parseValueTypeConstant","defaultValueType","parseValueTypeDefault","default","parseValueTypeObject","typeFromDefaultValue","typeFromConstant","parseValueTypeDefinition","constant","defaultValuesByType","defaultValueForDefinition","hasCustomDefaultValue","readers","writers","valueDescriptorForTokenAndTypeDefinition","boolean","number","writeJSON","Controller","_ref17","_ref17$target","_ref17$detail","_ref17$prefix","_ref17$bubbles","bubbles","_ref17$cancelable","cancelable","CustomEvent","dispatchEvent","blessings","classDefinition","_ref12","getAttributeName","targetDefinition","_ref13","findAll","valueDefinitionPairs","propertyDescriptorMap","valueDefinitionPair","valueDescriptor","_ref14","write","propertiesForValueDefinitionPair","enumerableOnly","symbols","sym","_objectSpread","getOwnPropertyDescriptors","_get","_superPropBase","desc","Animator","_request","_charts","_running","_lastDate","anims","callbacks","numSteps","initial","currentStep","_update","_refresh","remaining","running","draw","_active","_total","tick","_notify","charts","complete","progress","cb","_getAnims","_this$_getAnims$items","acc","_duration","cancel","animator","transparent","interpolators","factor","c0","c1","valid","mix","Animation","cfg","currentValue","_fn","_easing","_target","_prop","_from","_to","_promises","elapsed","rej","resolved","Animations","_properties","configure","animationOptions","animatedProps","_animationOptions","option","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","wait","awaitAll","update","_animateOptions","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","_applyStack","stack","dsIndex","otherValue","singleMode","isStacked","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","_cachedMeta","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_index","_top","_bottom","_visualValues","getFirstScaleId","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","linkScales","_stacked","addElements","isPluginEnabled","dataset","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","iAxisKey","vAxisKey","adata","_adata$i","convertObjectDataToArray","_meta","isExtensible","_dataCheck","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","labels","getLabels","singleScale","_parsed$i","_this$_parsing","_this$_parsing$xAxisK","xAxisKey","_this$_parsing$yAxisK","yAxisKey","parsedValue","NaN","canStack","otherScale","_getOtherScale","hidden","createStack","NEGATIVE_INFINITY","_getUserBounds","_scale$getUserBounds","otherMin","otherMax","_skip","updateRangeFromParsed","getParsed","label","getLabelForValue","_clip","defaultClip","getMaxOverflow","disabled","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","createDataContext","createDatasetContext","_resolveElementOptions","elementType","_this3","sharing","datasetElementScopeKeys","names","resolveNamedOptions","transition","datasetAnimationScopeKeys","sharedOptions","_animationsDisabled","firstOpts","previouslySharedOptions","getSharedOptions","includeOptions","updateSharedOptions","_resolveAnimations","_setStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","_args2","_dataChanges","_sync","newCount","computeMinSampleSize","curr","$bar","visibleMetas","getAllParsedValues","getAllScaleValues","_length","updateMinAndPrev","getPixelForTick","parseValue","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","_borderProps","horizontal","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","setInflateAmount","ratio","inflateAmount","BarController","_DatasetController","_this$_parsing2","_this$_parsing2$xAxis","_this$_parsing2$yAxis","bars","reset","getBasePixel","ruler","_getRuler","_this$_getSharedOptio","_getSharedOptions","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","updateElement","grouped","currentParsed","iScaleValue","skipNull","_getStacks","pixels","barThickness","_startPixel","_endPixel","stackCount","_getStackCount","categoryPercentage","barPercentage","_this$_cachedMeta","_this$options","baseValue","minBarLength","actualBase","floating","applyStack","getDataVisibility","barSign","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","percent","computeFlexCategoryTraits","computeFitCategoryTraits","stackIndex","_getStackIndex","_index_","_value_","BubbleController","_DatasetController2","_this$_cachedMeta2","_this$_getSharedOptio2","DoughnutController","_DatasetController3","innerRadius","outerRadius","circumference","isDatasetVisible","_getRotation","_getCircumference","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","_this$_getRotationExt","_getRotationExtents","_getRatioAndOffset","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","_this$_getSharedOptio3","_circumference","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","generateLabels","_chart$legend$options2","fontColor","legendItem","toggleDataVisibility","LineController","_DatasetController4","_meta$data","_dataset","_getStartAndCountOfVi","_decimated","animated","_this$_cachedMeta3","_this$_getSharedOptio4","_this$options2","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","PolarAreaController","_DatasetController5","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","_chart$legend$options3","angleLines","circular","pointLabels","PieController","_DoughnutController","RadarController","_DatasetController6","pointPosition","getPointPositionForValue","ScatterController","_DatasetController7","_meta$data2","_getStartAndCountOfVi2","registry","getElement","_this$_cachedMeta4","_this$options3","controllers","abstract","adapters","_date","DateAdapterBase","members","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","getSortedVisibleDatasetMetas","_metasets$i","_index2","_binarySearch","getIntersectItems","useFinalPosition","isPointInArea","inRange","getNearestCartesianItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestItems","_element$getProps","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","layout","stackWeight","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","fullSize","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refit","refitBoxes","_updateDims","setBoxDims","placeBoxes","userPadding","_height","_width","_layers","layoutItem","minPadding","layoutBoxes","_box","_box$options","_box$options$stackWei","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","handleMaxPadding","BasePlatform","BasicPlatform","_BasePlatform","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","removeListener","nodeListContains","nodeList","createAttachObserver","observer","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","unlistenDevicePixelRatioChanges","createProxyAndListen","_getRelativePosition","native","fromNativeEvent","addListener","DomPlatform","_BasePlatform2","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","detach","_this$getProps","final","tickOpts","determinedMaxTicks","_tickSize","maxScale","maxChart","_maxLength","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","enabled","getMajorIndices","numMajorIndices","newTicks","skipMajors","evenMajorSpacing","getEvenSpacing","factors","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","defaultRoutes","offsetFromEdge","getTicksLimit","ticksLength","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_Element","_margins","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","_this$getUserBounds","metas","getMinMax","xLabels","yLabels","_computeLabelItems","beforeUpdate","_this$options4","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","notifyPlugins","_callHooks","beforeTickToLabelConversion","afterTickToLabelConversion","maxLabelDiagonal","numTicks","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","_this$options5","titleOpts","gridOpts","titleHeight","_this$_getLabelSizes","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","_this$options6","_this$options6$ticks","isRotated","labelsBelowTicks","offsetLeft","offsetRight","_this$options7","generateTickLabels","_computeLabelSizes","tickFont","fontString","nestedLabel","caches","widths","heights","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","idx","decimal","getBaseValue","createTickContext","optionTicks","rot","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","positionAxisID","_positionAxisID2","_value2","limit","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","lineCount","textOffset","tickAndPadding","hTickAndPadding","_getXAxisLabelAlignment","_getYAxisLabelAlignment","_ret","_positionAxisID3","_value3","halfCount","tickTextAlign","labelPadding","_this$options8","_this$options9","_this$options9$ticks","_computeGridLineItems","drawLine","setLineDash","lineDashOffset","_this$options10","lastLineWidth","_computeLabelArea","getLabelItems","renderTextOptions","_this$options11","_titleArgs","titleX","titleY","_positionAxisID","_value","titleArgs","drawBackground","drawGrid","drawBorder","drawTitle","drawLabels","tz","gz","bz","axisID","fontSize","TypedRegistry","isPrototypeOf","parentScope","isIChartComponent","register","itemDefaults","routes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","Registry","_typedRegistries","_each","_len10","typedRegistry","reg","_getRegistryForType","isForType","_exec","itemReg","camelMethod","PluginService","_init","hook","_createDescriptors","plugin","_oldCache","_notifyStateChanges","localIds","getPlugin","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","idMatchesAxis","axisFromPosition","determineAxis","_len11","scaleOptions","_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","mainScope","resetCache","keyLists","_cachedScopes","_getResolver","getResolver","subPrefixes","needContext","subResolver","_getResolver2","resolverCache","hasFunction","_descriptors2","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","getChart","moveNumericKeys","intKey","getSizeForArea","Chart","userConfig","initialCanvas","existingChart","chartOptionScopes","OffscreenCanvas","_detectPlatform","updateConfig","acquireContext","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","listen","_initialize","_this$options12","bindEvents","_resizeBeforeDraw","newSize","newRatio","onResize","scalesOptions","axisOptions","scaleOpts","updated","isRadial","dposition","dtype","scaleType","getScale","hasUpdated","_destroyDatasetMeta","newControllers","_removeUnreferencedMetasets","updateIndex","ControllerClass","getController","_defaults$datasets$ty","_updateMetasets","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","invalidate","buildOrUpdateControllers","buildOrUpdateElements","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","ensureScalesHaveIDs","buildOrUpdateScales","existingEvents","newEvents","unbindEvents","_getUniformDataChanges","_ref8","datasetCount","makeSet","changeSet","noArea","_this17$_layers","_idx","_i5","_ilen","_updateDataset","_this$_resizeBeforeDr","layers","_drawDatasets","_drawDataset","useClip","getDatasetArea","setDatasetVisibility","_updateVisibility","_destroy","_stop","releaseContext","_this$canvas","toDataURL","bindUserEvents","bindResponsiveEvents","detached","_remove","isAttached","activeElements","lastActive","notify","pluginId","replay","hoverOptions","deactivated","activated","updateHoverStyle","inChartArea","eventFilter","_handleEvent","_this$_active","_getActiveElements","isClick","lastEvent","determineLastEvent","getElementsAtEventForMode","invalidatePlugins","parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","pixelMargin","innerR","spacingOffset","alpha","avNogSpacingRadius","angleOffset","_parseBorderRadius$","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","_pCenter","innerMidAdjustedAngle","_pCenter2","p8","_pCenter3","outerStartX","outerStartY","outerEndX","outerEndY","fullCircles","inner","lineJoin","angleMargin","clipArc","ArcElement","_Element2","chartX","chartY","_getAngleFromPoint2","_this$getProps2","rAdjust","nonZeroBetween","betweenAngles","withinRadius","_this$getProps3","_this$options13","halfAngle","halfRadius","radiusOffset","drawArc","setStyle","lineCap","pathVars","_params$start","paramsStart","_params$end","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","_pathVars","lineMethod","stepped","getLineMethod","_ref10$move","fastPathSegment","prevX","lastY","_pathVars2","_ref11$move","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","_draw","path","_path","strokePathWithCache","segmentMethod","strokePathDirect","LineElement","_Element3","_points","_segments","_pointsUpdated","_interpolate","_getInterpolationMethod","_segments$i","interpolated","inRange$1","hitRadius","PointElement","_Element4","mouseX","mouseY","_this$getProps4","_this$getProps5","hoverRadius","getBarBounds","bar","half","_bar$getProps","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","outer","_inRange","skipX","skipY","addNormalRectPath","inflateRect","amount","refRect","BarElement","_Element5","_this$options14","_boundingRects","addRectPath","_this$getProps6","BORDER_COLORS","BACKGROUND_COLORS","getBorderColor","getBackgroundColor","getColorizer","colorizeDoughnutDataset","colorizePolarAreaDataset","colorizeDefaultDataset","containsColorsDefinitions","plugin_colors","forceOverride","_args","_chart$config","chartOptions","containsColorDefenition","colorizer","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","_getStartAndCountOfVi3","getStartAndCountOfVisiblePointsSimplified","threshold","decimated","samples","maxAreaPoint","maxArea","nextA","bucketWidth","sampledIndex","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","_data$a","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","xMin","dx","intermediateIndex1","intermediateIndex2","minMaxDecimation","destroy","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","_ref12$x","_ref12$y","linePoints","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","_findPoint","findPoint","interpolate","pointValue","firstValue","lastValue","simpleArc","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_source$scale","_getTargetPixel","computeLinearBoundary","computeBoundary","_drawfill","lineOpts","_ref14$above","above","_ref14$below","clipVertical","doFill","clipY","lineLoop","tpoints","tgt","subBounds","fillSource","_src$style","_src$style$background","notShape","clipBounds","interpolatedLineTo","targetLoop","_scale$chart$chartAre","interpolatedPoint","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","_labelOpts$boxHeight","boxHeight","_labelOpts$boxWidth","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_Element6","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_getBoxSize","_fitRows","_fitCols","hitboxes","totalHeight","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","_calculateItemSize","legendItemText","calculateItemWidth","fontLineHeight","calculateLegendItemHeight","calculateItemHeight","calculateItemSize","_this$options15","rtlHelper","hitbox","_hitbox","cursor","_this29","defaultColor","halfFontSize","_getBoxSize2","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","onLeave","isListened","hoveredItem","_getLegendItemAt","sameItem","plugin_legend","adjustHitBoxes","afterEvent","ci","_chart$legend$options","useBorderRadius","Title","_Element7","_this30","_padding","textSize","fontOpts","_this$_drawArgs","_drawArgs","plugin_title","titleBlock","createTitle","plugin_subtitle","positioners","average","xSet","tooltipPosition","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","_controller$getLabelA","getLabelAndValue","formattedValue","getTooltipSize","tooltip","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","_chart$chartArea","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","_toTRBLCorners","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","defaultCallbacks","beforeTitle","tooltipItems","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","_Element8","_this31","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","_this32","bodyItems","scoped","_this33","itemSort","_createItems","getTitle","getBeforeBody","getBody","getAfterBody","getFooter","positionAndSize","backgroundPoint","external","tooltipPoint","caretPosition","getCaretPosition","x3","y3","_toTRBLCorners2","ptX","ptY","titleColor","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","_drawColorBox","footerAlign","footerColor","tooltipSize","_toTRBLCorners3","drawCaret","quadraticCurveTo","animX","animY","_updateAnimationTarget","hasTooltipContent","globalAlpha","drawBody","drawFooter","_this34","_ref18","positionChanged","_positionChanged","_ignoreReplayEvents","_this35","plugin_tooltip","afterInit","afterDraw","_willRender","Colors","Decimation","Filler","SubTitle","findOrAddLabel","addedLabels","addIfString","lastIndexOf","_getLabelForValue","CategoryScale","_Scale","_this36","_startValue","_valueRange","_addedLabels","_ref20","_index3","_this$getUserBounds2","_this$getMinMax","getDecimalForPixel","relativeLabelSize","minSpacing","_ref21","LinearScaleBase","_Scale2","_this37","_endValue","_this$getUserBounds3","setMin","setMax","minSign","maxSign","maxTicks","stepSize","computeTickLimit","getTickLimit","generationOptions","dataRange","niceMin","niceMax","numSpaces","precision","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","decimalPlaces","generateTicks$1","_maxDigits","LinearScale","_LinearScaleBase","_this$getMinMax2","handleTickRangeOptions","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","generateTicks","_ref22","minExp","exp","startExp","lastTick","LogarithmicScale","_Scale3","_this38","_zero","_this$getMinMax3","_this$getUserBounds4","getTickBackdropHeight","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","updateLimits","setCenterPoint","_pointLabelItems","_opts$pointLabels","itemOpts","createPointLabelItem","isNotOverlapped","buildPointLabelItems","hLimits","vLimits","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","RadialLinearScale","_LinearScaleBase2","_this39","_this$getMinMax4","_this40","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","_this$_pointLabelItem","_this$options16","_this41","drawPointLabels","gridLineOpts","drawRadiusLine","_this42","animate","INTERVALS","common","quarter","UNITS","sorter","adapter","_adapter","_scale$_parseOpts","_parseOpts","parser","isoWeekday","determineUnitForAutoTicks","minUnit","capacity","interval","MAX_SAFE_INTEGER","addTick","timestamps","_lookup2","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_Scale4","_this43","_unit","_majorUnit","_offsets","_normalized","displayFormats","formats","normalized","_this$getUserBounds5","_applyBounds","_getLabelBounds","endOf","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","_format","fmt","minorFormat","majorFormat","_tickFormatFunction","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","_getLabelSize","prevSource","nextSource","prevTarget","nextTarget","_lookupByKey2","_table$lo","_table$hi","_lookupByKey3","_table$lo2","_table$hi2","TimeSeriesScale","_TimeScale","_super25","_this44","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables","pad","int","arrayify","createDateFormatter","_c","l10n","isMobile","dateObj","frmt","overrideLocale","formatDate","createDateParser","givenFormat","timeless","customLocale","parsedDate","dateOrig","getTime","toFixed","dateFormat","datestr","parseDate","matched","ops","matchIndex","regexStr","isBackSlash","escaped","noCalendar","setHours","errorHandler","compareDates","date2","isBetween","ts","ts1","ts2","calculateSecondsSinceMidnight","parseSeconds","secondsSinceMidnight","DAY","getDefaultHours","defaultHour","defaultMinute","defaultSeconds","minDate","minHour","minMinutes","minSeconds","maxDate","maxHr","maxMinutes","globalLocales","MINIMAL_RAW_EN_LOCALE","prevYear","nextYear","today","list","RAW_EN_LOCALE","eventCnt","organizeRawLocales","explicitRawLocales","defaultCode","allRawLocales","rawLocaleMap","en","rawLocale","buildLocale","inputSingular","available","codeArg","simpleId","queryRawLocale","parseLocale","queryLocale","merged","createPlugin","premiumReleaseDate","deps","reducers","isLoadingFuncs","contextInit","eventDragMutationMassagers","dateSelectionTransformers","datePointTransforms","viewPropsTransformers","externalDefTransforms","viewContainerAppends","eventDropTransformers","componentInteractions","calendarInteractions","themeClasses","namedTimeZonedImpl","elementDraggingImpl","optionChangeHandlers","scrollGridImpl","listenerRefiners","optionRefiners","propSetHandlers","buildBuildPluginHooks","currentHooks","currentOverrideDefs","currentGlobalDefs","overrideDefs","globalDefs","pluginDefs","currentPluginIds","hooks","addDefs","hooks0","hooks1","pluginName","currentId","compareOptionalDates","buildPluginHooks","StandardTheme","_Theme","ensureViewDef","defaultConfigs","overrideConfigs","viewDef","defaultConfig","overrideConfig","queryProp","theComponent","superType","superDef","rawOptions","buildViewDef","parseViewConfigs","parseViewConfig","createViewHookComponent","viewProps","buildViewSpecs","defaultInputs","optionOverrides","dynamicOptionOverrides","localeDefaults","viewDefs","compileViewDefs","durationInput","singleUnitOverrides","durationInputMap","createDurationCached","denom","queryButtonText","optionsSubset","buttonTextMap","queryButtonTitle","buttonKey","optionDefaults","buttonTextOverride","buttonTextDefault","buttonTitleOverride","buttonHint","buttonTitleDefault","buildViewSpec","tableCellShaded","buttonGroup","button","buttonActive","close","initEventSources","addSources","rawSources","rawSource","parseInitialSources","reduceEventSources","eventSourceHash","fetchDirtySources","fetchSourcesByIds","excludeStaticSources","receiveResponse","computeEventSourcesLoading","doesSourceNeedRange","isSourceDirty","prevSources","sourceIdHash","nextSources","fetchSource","sourceDef","errorHandled","ignoreRange","reduceDateSelection","currentSelection","reduceSelectedEvent","currentInstanceId","eventInstanceId","reduceEventDrag","currentDrag","newDrag","reduceEventResize","currentResize","newResize","parseToolbars","calendarOptionOverrides","parseToolbar","sectionStrHash","sectionWidgets","hasTitle","sectionName","sectionRes","parseSection","widgets","sectionStr","calendarCustomButtons","calendarButtonTextOverrides","calendarButtonText","calendarButtonHintOverrides","calendarButtonHints","sectionSubstrs","buttonGroupStr","buttonClick","buttonIcon","click","getCustomButtonIconClass","changeView","textFallback","prevOrNext","navUnit","ViewImpl","viewTitle","handleEventSources","unfoundSources","newInputs","inputFound","unfoundSource","_newInputs","newInput","addEventSource","globalPlugins","successCallback","errorCallback","extraParams","requestParams","customRequestParams","buildRequestParams","startRecur","endRecur","recurringData","clippedFramingRange","dowHash","dayMarker","instanceStarts","instanceStart","expandRanges","_events","TaskRunner","runTaskOption","queue","delayedRunner","task","resume","completedTasks","runTask","buildTitle","buildTitleFormat","CalendarDataManager","computeCurrentViewData","_computeCurrentViewData","buildDateEnv","buildDateEnv$1","buildTheme","buildDateProfileGenerator","buildViewApi","buildViewUiProps","buildEventUiBySource","buildEventUiBases","parseContextBusinessHours","actionRunner","_handleAction","updateData","currentCalendarOptionsRefined","currentViewOptionsInput","currentViewOptionsRefined","optionsForRefining","optionsForHandling","optionsData","computeOptionsData","currentViewType","currentViewData","setThisContext","setOptions","calendarContext","initialState","renderableEventStore","contextAndState","reducer","computeIsLoading","changedOptionNames","_this$optionsForRefin","reduceDynamicOptionOverrides","reduceViewType","dp","buildPrev","buildNext","reduceDateProfile","_this$buildViewUiProp","eventUiSingleBase","eventUiBySource","wasLoading","isLoading","onAction","oldData","changeHandlers","oldCalendarOptions","newCalendarOptions","onData","stableOptionOverrides","stableDynamicOptionOverrides","stableCalendarOptionsData","_this$processRawCalen","processRawCalendarOptions","refinedOptions","availableLocaleData","warnUnknownOptions","_this$optionsForHandl","_mergeRawOptions","currentRaw","currentRefined","anyChanges","_this$processRawViewO","processRawViewOptions","explicitLocale","isLoadingFunc","viewName","ToolbarSection","widgetGroups","widgetGroup","renderWidgetGroup","isOnlyButtons","widget","isPressed","activeButton","isTodayEnabled","isPrevEnabled","isNextEnabled","buttonClasses","groupClassName","Toolbar","startContent","endContent","model","extraClassName","forceLtr","centerContent","ViewHarness","updateAvailableWidth","handleResize","labeledById","EventClicking","_Interaction","handleSegClick","segEl","isValidSegDownEl","hasUrlContainer","defaultPrevented","location","EventHovering","_Interaction2","handleEventElRemove","currentSegEl","handleSegLeave","handleSegEnter","triggerEvent","removeHoverListeners","publicEvName","CalendarContent","buildViewPropTransformers","buildToolbarProps","headerRef","footerRef","interactionsStore","viewLabelId","settingsInput","interactions","TheInteractionClass","resizeRunner","viewAspectRatio","toolbarProps","viewVGrow","viewContext","renderView","buildAppendContent","CalendarInteractionClass","ViewComponent","todayInfo","prevInfo","nextInfo","theClasses","TheClass","Calendar","_CalendarImpl","isRendering","isRendered","currentClassNames","customContentRenderId","handleAction","renderRunner","handleData","handleRenderRequest","setClassNames","setHeight","wasRendering","resetOptions","_className","doNothing","monthToStr","monthNumber","shorthand","revFormat","monthName","setMonth","longhand","J","setDate","K","amPM","shortMonth","setSeconds","U","unixSeconds","W","weekNum","weekNumber","getDay","firstDayOfWeek","Y","setFullYear","Z","ISODate","setMinutes","unixMillSeconds","tokenRegex","weekdays","ordinal","getWeek","rsingleTag","rootjQuery","rquickExpr","parseHTML","attr","ready","HOOKS","_disable","allowInput","allowInvalidPreload","altFormat","altInput","altInputClass","ariaDateFormat","autoFillDefaultTime","clickOpens","closeOnSelect","conjunction","disable","disableMobile","enableSeconds","enableTime","givenDate","week1","hourIncrement","ignoredFocusElements","inline","minuteIncrement","monthSelectorType","nextArrow","onChange","onDayCreate","onDestroy","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition","positionElement","prevArrow","shorthandCurrentMonth","showMonths","static","time_24hr","Data","nodeName","access","chainable","emptyGet","bulk","english","daysInMonth","nth","rangeSeparator","weekAbbreviation","scrollTitle","toggleTitle","yearAriaLabel","monthAriaLabel","hourAriaLabel","minuteAriaLabel","_siblings","rneedsContext","rparentsprev","guaranteedUnique","contents","sibling","selectors","uniqueSort","prevAll","addBack","parentsUntil","until","nextAll","nextUntil","prevUntil","siblings","contentDocument","Identity","Thrower","ex","adoptValue","noValue","fail","Deferred","tuples","Callbacks","_state","_promise","always","deferred","pipe","fns","newDefer","returned","onFulfilled","onRejected","maxDepth","special","that","mightThrow","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","lock","fire","fireWith","when","singleValue","resolveContexts","resolveValues","updateFunc","rnothtmlwhite","rcheckableType","dataPriv","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","activeElement","safeActiveElement","_on","types","one","origFn","leverageNative","namespace","notAsync","saved","isTrigger","delegateType","stopPropagation","Event","global","handleObjIn","eventHandle","handleObj","namespaces","origType","elemData","handle","triggered","bindType","needsContext","expr","delegateCount","setup","mappedTypes","origCount","hasData","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","isImmediatePropagationStopped","rnamespace","postDispatch","_handlers","sel","matchedHandlers","matchedSelectors","addProp","originalEvent","noBubble","_default","beforeunload","returnValue","isDefaultPrevented","relatedTarget","timeStamp","isSimulated","altKey","changedTouches","ctrlKey","eventPhase","metaKey","pageX","pageY","shiftKey","charCode","keyCode","buttons","pointerId","pointerType","screenX","screenY","targetTouches","toElement","which","focus","blur","mouseenter","mouseleave","related","rquery","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","prefilters","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","originalOptions","jqXHR","inspected","seekingTransport","inspect","selected","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","lastModified","etag","isLocal","protocol","processData","async","contentType","accepts","xml","responseFields","converters","parseXML","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","completed","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","_statusCode","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","param","traditional","hasContent","ifModified","beforeSend","send","nativeStatusText","responses","isSuccess","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","factory","fp","flatpickr","l10ns","German","de","TableView","headerElRef","headerRowContent","bodyContent","ScrollGrid","chunks","colGroups","splitSegsByRow","byRow","splitSegsByFirstCol","byCol","splitInteractionByRow","DEFAULT_TABLE_EVENT_TIME_FORMAT","hasListItemDisplay","TableBlockEvent","TableListItemEvent","TableCellMoreLink","compileSegs","_this$compileSegs","singlePlacements","invisibleSegs","isForcedInvisible","visibility","placement","isVisible","DEFAULT_WEEK_NUM_FORMAT","TableCell","_DateComponent2","rootElRef","dayNumberId","currentStart","currentEnd","currentEndIncl","currentFirstYear","getYear","currentFirstMonth","currentLastYear","currentLastMonth","shouldDisplayMonthStart","renderTopInner","innerElRef","minHeight","showWeekNumber","forceDayTop","fgContentElRef","fgContent","marginTop","moreMarginTop","bgContent","generateSegKey","generateSegUid","computeFgSegPlacement","segHeights","maxContentHeight","hierarchy","DayGridSegHierarchy","segEntry","segUid","hiddenConsumes","segInputs","unknownHeightSegs","addSegs","_placeRects","allRects","rectsByEachCol","_col4","groupRectsByEachCol","singleColPlacements","multiColPlacements","leftoverMargins","currentHeight","currentMarginTop","resliceSeg","absoluteTop","multiPlacements","_rect","_seg3","isFirstCol","placeRects","toRects","moreCnts","moreMarginTops","_unknownHeightSegs","_col","_seg2","hiddenSpan","_col3","_col2","spanStart","spanEnd","_SegHierarchy","forceHidden","excludeHidden","touchingEntryId","TableRow","_DateComponent3","cellElRefs","frameElRefs","fgElRefs","segHarnessRefs","framePositions","isForced","updateSizing","businessHoursByCol","bgEventSegsByCol","highlightSegsByCol","getHighlightSegs","mirrorSegsByCol","getMirrorSegs","_computeFgSegPlacemen","cell","normalFgNodes","renderFgSegs","mirrorFgNodes","mirrorSegs","colPlacements","topsByInstanceId","buildAbsoluteTopHash","buildMirrorPlacements","showDayNumbers","showWeekNumbers","renderFillSegs","cellMinHeight","prevState","currentProps","segPlacements","leftRightCss","isExternalSizingChange","frameEls","newPositionCache","similarTo","oldSegHeights","newSegHeights","querySegHeights","limitByContentHeight","computeMaxContentHeight","segElMap","firstKey","fcContainerEl","elMap","TableRows","_DateComponent4","splitBusinessHourSegs","splitBgEventSegs","splitFgEventSegs","splitDateSelectionSegs","rowRefs","businessHourSegsByRow","bgEventSegsByRow","fgEventSegsByRow","dateSelectionSegsByRow","eventDragByRow","eventResizeByRow","renderRowIntro","isSegAllDay","firstCellEl","getCellEls","rowPositions","collect","rowObj","colPositions","leftToIndex","topToIndex","getCellRange","getCellEl","Table","_DateComponent5","needsScrollReset","limitViaBalanced","colGroupNode","requestScrollReset","flushScrollReset","subjectEl","getScrollSubjectEl","scrollEl","DayTableSlicer","_Slicer","dayTableModel","DayTable","_DateComponent6","slicer","tableRef","sliceProps","headerAlignElRef","DayTableView","_TableView","buildDayTableModel","headerContent","contentArg","renderHScrollLayout","renderSimpleLayout","TableDateProfileGenerator","_DateProfileGenerator","endOfWeek","snapToWeek","lastMonthRenderStart","buildDayTableRenderRange","auto","basePlacements","viewport","variationPlacements","beforeRead","afterRead","beforeMain","main","afterMain","beforeWrite","afterWrite","modifierPhases","getNodeName","getWindow","isElement","isHTMLElement","isShadowRoot","ShadowRoot","phase","effect","initialStyles","popper","strategy","arrow","reference","requires","getBasePlacement","getUAString","uaData","userAgentData","brands","brand","isLayoutViewport","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","visualViewport","addVisualOffsets","offsetTop","getLayoutRect","child","isSameNode","isTableElement","getDocumentElement","getParentNode","assignedSlot","getTrueOffsetParent","getOffsetParent","isFirefox","currentNode","css","perspective","contain","willChange","getContainingBlock","getMainAxisFromPlacement","within","mergePaddingObject","paddingObject","expandToHashMap","hashMap","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","axisProp","centerOffset","_options$element","requiresIfExists","getVariation","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","hasX","hasY","sideX","sideY","win","heightProp","widthProp","_Object$assign","commonStyles","roundOffsetsByDPR","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","_options$scroll","_options$resize","scrollParents","scrollParent","getOppositePlacement","getOppositeVariationPlacement","getWindowScroll","getWindowScrollBarX","isScrollParent","_getComputedStyle","getScrollParent","listScrollParents","_element$ownerDocumen","isBody","updatedList","rectToClientRect","getClientRectFromMixedType","clippingParent","layoutViewport","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","getDocumentRect","getClippingRect","rootBoundary","mainClippingParents","clipperElement","firstClippingParent","clippingRect","accRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","placements","_options$allowedAutoP","allowedPlacements","overflows","computeAutoPlacement","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","checks","every","check","fittingPlacement","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","_options$offset","invertDistance","skidding","distanceAndSkiddingToXY","_data$state$placement","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","withinMaxClamp","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","modifiers","modifier","dep","depModifier","DEFAULT_OPTIONS","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","isDestroyed","setOptionsAction","cleanupModifierEffects","orderModifiers","existing","_ref$options","cleanupFn","noopFn","_state$elements","_state$orderedModifie","_state$orderedModifie2","onFirstUpdate","_KEY_TO_DIRECTION","elementMap","instanceMap","TRANSITION_END","parseSelector","CSS","escape","getTransitionDurationFromElement","_window$getComputedSt","transitionDuration","transitionDelay","floatTransitionDuration","floatTransitionDelay","triggerTransitionEnd","getClientRects","elementIsVisible","closedDetails","summary","findShadowRoot","attachShadow","reflow","getjQuery","DOMContentLoadedCallbacks","isRTL","defineJQueryPlugin","NAME","JQUERY_NO_CONFLICT","jQueryInterface","noConflict","_DOMContentLoadedCall","_callback","execute","possibleCallback","executeAfterTransition","transitionElement","waitForTransition","durationPadding","emulatedDuration","called","getNextActiveElement","shouldGetNext","isCycleAllowed","listLength","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","nativeEvents","makeEventUid","getElementEvents","findHandler","callable","delegationSelector","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","addHandler","oneOff","_normalizeParameters2","wrapFunction","previousFunction","domElements","hydrateObj","EventHandler","bootstrapDelegationHandler","bootstrapHandler","removeHandler","removeNamespacedHandlers","storeElementEvent","_Object$entries","handlerKey","_normalizeParameters4","inNamespace","isNamespace","_Object$keys","_Object$entries2","keyHandlers","jQueryEvent","nativeDispatch","evt","_Object$entries3","_unused","normalizeData","decodeURIComponent","normalizeDataKey","chr","Manipulator","bsKeys","pureKey","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","Default","configTypes","DefaultType","_i6","_Object$entries4","expectedTypes","valueType","_Config","_getConfig","DATA_KEY","EVENT_KEY","isAnimated","getInstance","getSelector","hrefAttribute","SelectorEngine","findOne","ancestor","previousElementSibling","nextElementSibling","focusableChildren","focusables","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","clickEvent","getOrCreateInstance","EVENT_KEY$b","EVENT_CLOSE","EVENT_CLOSED","Alert","_queueCallback","_destroyElement","dispose","EVENT_KEY$a","SELECTOR_DATA_TOGGLE$5","EVENT_CLICK_DATA_API$6","Button","toggle","EVENT_KEY$9","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","Default$c","endCallback","leftCallback","rightCallback","DefaultType$c","Swipe","_Config2","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_eventIsPointerPenTouch","_handleSwipe","absDeltaX","_end","_move","maxTouchPoints","EVENT_KEY$8","DATA_API_KEY$5","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN$1","EVENT_MOUSEENTER$1","EVENT_MOUSELEAVE$1","EVENT_DRAG_START","EVENT_LOAD_DATA_API$3","EVENT_CLICK_DATA_API$5","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE$2","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","KEY_TO_DIRECTION","Default$b","keyboard","ride","touch","DefaultType$b","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","_clearInterval","_updateInterval","setInterval","nextWhenVisible","_getItems","activeIndex","_getItemIndex","_getActive","defaultInterval","_keydown","_maybeEnableCycle","_addTouchEventListeners","img","swipeConfig","_directionToOrder","activeIndicator","newActiveIndicator","elementInterval","isNext","nextElement","nextElementIndex","_orderToDirection","slideEvent","isCycling","_setActiveIndicatorElement","directionalClassName","orderClassName","completeCallBack","_isAnimated","clearInterval","carousel","slideIndex","EVENT_KEY$7","EVENT_SHOW$6","EVENT_SHOWN$6","EVENT_HIDE$6","EVENT_HIDDEN$6","EVENT_CLICK_DATA_API$4","CLASS_NAME_SHOW$7","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_DEEPER_CHILDREN","SELECTOR_DATA_TOGGLE$4","Default$a","DefaultType$a","Collapse","_isTransitioning","_triggerArray","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","activeChildren","_getFirstLevelChildren","_getDimension","capitalizedDimension","scrollSize","triggerArray","isOpen","NAME$a","EVENT_KEY$6","DATA_API_KEY$3","ARROW_UP_KEY$1","ARROW_DOWN_KEY$1","EVENT_HIDE$5","EVENT_HIDDEN$5","EVENT_SHOW$5","EVENT_SHOWN$5","EVENT_CLICK_DATA_API$3","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_SHOW$6","SELECTOR_DATA_TOGGLE$3","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","Default$9","autoClose","popperConfig","DefaultType$9","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","_completeHide","referenceElement","_getPopperConfig","parentDropdown","popperData","defaultBsPopperConfig","_getPlacement","_getOffset","isMenuTarget","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","_selectMenuItem","dataApiKeydownHandler","clearMenus","NAME$9","CLASS_NAME_SHOW$5","EVENT_MOUSEDOWN","Default$8","clickCallback","rootElement","DefaultType$8","Backdrop","_Config3","_isAppended","_append","_getElement","_emulateAnimation","append","EVENT_KEY$5","EVENT_FOCUSIN$2","EVENT_KEYDOWN_TAB","TAB_NAV_BACKWARD","Default$7","autofocus","trapElement","DefaultType$7","FocusTrap","_Config4","_isActive","_lastTabNavDirection","_handleFocusin","_handleKeydown","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","documentWidth","innerWidth","getWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_resetElementAttributes","_saveInitialAttribute","styleProperty","_applyManipulationCallback","actualValue","removeProperty","callBack","EVENT_KEY$4","EVENT_HIDE$4","EVENT_HIDE_PREVENTED$1","EVENT_HIDDEN$4","EVENT_SHOW$4","EVENT_SHOWN$4","EVENT_RESIZE$1","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS$1","EVENT_CLICK_DATA_API$2","CLASS_NAME_OPEN","CLASS_NAME_SHOW$4","CLASS_NAME_STATIC","Default$6","DefaultType$6","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","deactivate","_hideModal","modalBody","activate","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","initialOverflowY","isBodyOverflowing","_property","showEvent","alreadyOpen","EVENT_KEY$3","DATA_API_KEY$1","EVENT_LOAD_DATA_API$2","CLASS_NAME_SHOW$3","CLASS_NAME_SHOWING$1","CLASS_NAME_HIDING","OPEN_SELECTOR","EVENT_SHOW$3","EVENT_SHOWN$3","EVENT_HIDE$3","EVENT_HIDE_PREVENTED","EVENT_HIDDEN$3","EVENT_RESIZE","EVENT_CLICK_DATA_API$1","EVENT_KEYDOWN_DISMISS","Default$5","DefaultType$5","Offcanvas","DefaultAllowlist","br","div","em","hr","h1","h2","h3","h4","h5","h6","li","ol","pre","small","sup","strong","ul","uriAttributes","SAFE_URL_PATTERN","allowedAttribute","allowedAttributeList","nodeValue","attributeRegex","regex","Default$4","allowList","extraClass","sanitize","sanitizeFn","template","DefaultType$4","DefaultContentType","TemplateFactory","_Config5","_resolvePossibleFunction","getContent","_checkContent","templateWrapper","_maybeSanitize","_i7","_Object$entries5","_setContent","_template$classList","_i8","_Object$entries6","_ref24","templateElement","_putElementInTemplate","unsafeHtml","sanitizeFunction","createdDocument","DOMParser","parseFromString","_ref19","elementName","attributeList","allowedAttributes","sanitizeHtml","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE$2","CLASS_NAME_SHOW$2","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$3","customClass","DefaultType$3","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","_getTipElement","_ref26","_ref27","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","toHtml","tipId","getUID","changeContent","_getDelegateConfig","attachment","_initializeOnDelegatedTarget","eventIn","eventOut","_this45","_this46","dataAttributes","_i9","_Object$keys2","dataAttribute","_i10","_Object$entries7","_ref30","Default$2","DefaultType$2","_Tooltip","_getContent","_ref32","EVENT_KEY$2","EVENT_ACTIVATE","EVENT_CLICK","EVENT_LOAD_DATA_API$1","CLASS_NAME_ACTIVE$1","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LINKS","SELECTOR_LINK_ITEMS","Default$1","rootMargin","smoothScroll","DefaultType$1","ScrollSpy","_this47","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","_getNewObserver","_this48","observableSection","scrollTo","behavior","_this49","IntersectionObserver","_observerCallback","_this50","targetElement","_process","userScrollsDown","isIntersecting","entryIsLowerThanPrevious","_clearActiveClass","anchor","decodeURI","_activateParents","listGroup","spy","EVENT_KEY$1","EVENT_HIDE$1","EVENT_HIDDEN$1","EVENT_SHOW$1","EVENT_SHOWN$1","EVENT_CLICK_DATA_API","EVENT_KEYDOWN","EVENT_LOAD_DATA_API","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","HOME_KEY","END_KEY","CLASS_NAME_ACTIVE","CLASS_NAME_FADE$1","CLASS_NAME_SHOW$1","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_INNER","SELECTOR_DATA_TOGGLE","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_this51","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_this52","_toggleDropDown","_this53","nextActiveElement","preventScroll","_this54","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","EVENT_FOCUSIN","EVENT_FOCUSOUT","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","autohide","Toast","_this55","_hasMouseInteraction","_hasKeyboardInteraction","_this56","_maybeScheduleHide","_this57","isShown","_this58","isInteracting","_this59","_onInteraction","affix","l17","_Splitter","AllDaySplitter","timed","DEFAULT_SLAT_LABEL_FORMAT","TimeColsAxisCell","isLabeled","isoTimeStr","labelFormat","TimeBodyAxis","slatMetas","slatMeta","TimeColsView","allDaySplitter","slatCoords","handleScrollTopRequest","renderHeadAxis","rowKey","frameHeight","renderTableRowAxis","rowHeight","renderAllDayInner","handleSlatCoords","timeContent","isNowIndicator","nowIndicatorTop","safeComputeTop","_this$context$options","TimeColsSlatsCoords","startOfDayDate","timeMs","computeTimeTop","slatIndex","slatRemainder","slatCoverage","getHeight","TimeColsSlatsBody","slatElRefs","TimeColsSlats","onCoords","splitSegsByCol","segsByCol","splitInteractionByCol","TimeColMoreLink","renderPlainFgSegs","buildPositioning","topLevelNodes","totalThickness","stretchNode","hiddenGroups","web","buildNode","siblingRange","subjectLevel","subjectLateral","subjectEntry","afterSubject","searchIndex","lateralStart","lateralEnd","findNextLevelSegs","nextLevelRes","buildNodes","nextLevelNodes","buildWeb","startCoord","prevThickness","endCoord","allThickness","thicknessFraction","newChildren","childNode","_res","newThickness","segRects","processNode","stackDepth","stackForward","processNodes","webToRects","cmpDescPressures","extractNode","keyFunc","workFunc","computeSegVCoords","colDate","vcoords","computeDateTop","DEFAULT_TIME_FORMAT","TimeColEvent","isShort","TimeCol","isSelectMirror","interactionAffectedInstances","sortedFgSegs","renderNowIndicator","nowIndicatorSegs","segIsInvisible","forcedKey","renderPositionedFgSegs","_this$context$options2","segVCoords","dumbSegs","_buildPositioning","segRect","_dumbSegs","dumbSeg","computeFgSegPlacements","renderHiddenGroups","segPlacement","vStyle","computeSegVStyle","hStyle","computeSegHStyle","isInset","hiddenGroup","segEntries","positionCss","segHCoords","shouldOverlap","nearCoord","farCoord","zIndex","hiddenInstances","TimeColsContent","splitNowIndicatorSegs","nowIndicatorSegsByRow","updateCoords","onColCoords","TimeCols","processSlotOptions","onScrollTopRequest","handleColCoords","colCoords","onSlatCoords","scrollResponder","_this$processSlotOpti","snapsPerSlot","colIndex","slatTop","slatHeight","partial","snapIndex","dayDate","snapDurationOverride","DayTimeColsSlicer","dayRanges","DayTimeCols","buildDayRanges","timeColsRef","sliceNowDate","STOCK_SUB_DURATIONS","buildSlatMetas","explicitLabelInterval","slatTime","slatIterator","labelInterval","slotsPerLabel","computeLabelInterval","_TimeColsView","DayTimeColsView","buildTimeColsModel","hasAttachedAxis","hasDetachedAxis","allDaySlot","getAllDayMaxEventProps","timeGridContent","OPTION_REFINERS","timeGrid","timeGridDay","timeGridWeek","rmsPrefix","rdashAlpha","fcamelCase","letter","camelCase","rcssNum","rnumnonpx","cssExpand","getStyles","swap","curCSS","adjustCSS","addGetHookIf","finalPropName","rdisplayswap","rcustomProp","cssShow","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","boxModelAdjustment","isBorderBox","computedVal","getWidthOrHeight","boxSizingReliable","valueIsBorderBox","offsetProp","cssHooks","computed","cssNumber","cssProps","origName","isCustomProp","clearCloneStyle","scrollboxSizeBuggy","scrollboxSize","reliableMarginLeft","expanded","lim","p2b","n2b","b2n","n2p","map$1","hex","_hexString","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb","rgb2hsl","hueValue","calln","hsl2rgb","hue","hueParse","hwb2rgb","hsv2rgb","X","V","R","Q","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","nameParse","nk","unpacked","tkeys","unpack","RGB_RE","modHSL","fromObject","functionParse","rgbParse","Color","_rgb","_valid","_hslString","w2","c2","w1","rgb1","rgb2","deg","_rotate","dayGrid","dayGridDay","dayGridWeek","dayGridMonth","dayGridYear","ListViewHeaderRow","textId","cellId","listDayFormat","sideText","listDaySideFormat","sideNavLinkAttrs","ListViewEventRow","timeHeaderId","eventHeaderId","dateHeaderId","interactiveAttrs","renderEventInnerContent","doAllDay","buildTimeContent","ListView","computeDateVars","eventStoreToSegs","_eventStoreToSegs","dateHeaderIdRoot","setRootEl","_this$computeDateVars","dayDates","renderSegList","renderEmptyMessage","noEventsContent","renderNoEventsInner","noEventsClassNames","noEventsDidMount","noEventsWillUnmount","segsByDay","groupSegsByDay","innerNodes","daySegs","dayStr","eventRangesToSegs","eventRangeToSegs","viewEnd","createFalsableFormatter","listDay","listWeek","listMonth","listYear","composed","rtagName","rscriptType","wrapMap","setGlobalEval","buildFragment","dataUser","acceptData","rxhtmlTag","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","pdataOld","pdataCur","udataOld","udataCur","fixInput","domManip","collection","ignored","fragment","scripts","hasScripts","doc","iNoClone","valueIsFunction","checkClone","_evalUrl","noModule","keepData","cleanData","htmlPrefilter","dataAndEvents","deepDataAndEvents","srcElements","destElements","cloneNode","inPage","noCloneChecked","isXMLDoc","empty","prepend","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","insert","flag","createOptions","firing","memory","_fired","_locked","firingIndex","once","stopOnFalse","unique","locked","fired","owner","dequeue","startLength","_queueHooks","setter","clearQueue","defer","isHiddenWithinTree","showHide","fxNow","inProgress","rfxtypes","rrun","schedule","fx","createFxNow","genFx","includeWidth","createTween","tween","tweeners","stopped","currentTime","tweens","run","specialEasing","originalProperties","Tween","gotoEnd","propFilter","timer","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","prefilter","speed","opt","speeds","fadeTo","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","pnum","computeStyleTests","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","backgroundClip","pixelBoxStyles","pixelPosition","checkOn","optSelected","radioValue","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","__H","__N","__V","cancelAnimationFrame","isPureReactComponent","__f","for","__u","__a","__R","__O","revealOrder","containerInfo","isReactComponent","cancelBubble","persist","nn","class","tn","multiple","$$typeof","preservedScriptAttributes","winnow","qualifier","not","readyList","catch","readyException","readyWait","doScroll","valueParts","adjusted","maxIterations","initialInUnit","thead","tr","td","optgroup","tbody","tfoot","colgroup","caption","th","getElementsByTagName","refElements","rhtml","createDocumentFragment","lastChild","opener","rboxStyle","conditionFn","hookFn","cssPrefixes","emptyStyle","vendorProps","capName","vendorPropName","rfocusable","rclickable","removeProp","propFix","nType","propHooks","tabindex","selectedIndex","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","valueOrFunction","encodeURIComponent","serialize","serializeArray","webpackPolyfill","paths","sparkMd5","createCommonjsModule","hex_chr","md5cycle","md5blk","md5blks","charCodeAt","md5blk_array","md51","tail","md51_array","subarray","Uint8Array","rhex","toUtf8","unescape","utf8Str2ArrayBuffer","returnUInt8Array","buff","ArrayBuffer","arrayBuffer2Utf8Str","fromCharCode","concatenateArrayBuffers","byteLength","buffer","hexToBinaryString","bytes","SparkMD5","clamp","targetArray","sourceArray","begin","appendBinary","_buff","_hash","_finish","getState","hashBinary","classCallCheck","createClass","fileSlice","File","mozSlice","webkitSlice","FileChecksum","file","chunkSize","chunkCount","chunkIndex","md5Buffer","fileReader","FileReader","fileReaderDidLoad","fileReaderDidError","readNextChunk","binaryDigest","base64digest","btoa","readAsArrayBuffer","eventInit","createEvent","initEvent","toArray$1","BlobRecord","checksum","filename","content_type","byte_size","xhr","XMLHttpRequest","responseType","csrfToken","getMetaValue","requestDidLoad","requestDidError","blob","direct_upload","directUploadData","toJSON","_xhr","BlobUpload","_blob$directUploadDat","DirectUpload","upload","messages","DirectUploadController","directUpload","hiddenInput","insertAdjacentElement","dispatchError","signed_id","loaded","alert","uploadRequestDidProgress","DirectUploadsController","form","files","createDirectUploadControllers","startNextController","processingAttribute","submitButtonsByForm","didClick","didSubmitForm","didSubmitRemoteElement","handleFormSubmissionEvent","enable","submitForm","ActiveStorage","touchMouseIgnoreWait","ignoreMouseDepth","listenerCnt","isWindowTouchMoveCancelled","PointerDragging","handleSelector","shouldIgnoreMove","shouldWatchScroll","isTouchDragging","wasTouchScroll","handleMouseDown","shouldIgnoreMouse","isPrimaryMouseButton","tryStart","createEventFromMouse","initScrollWatch","handleMouseMove","handleMouseUp","recordCoords","cleanup","handleTouchStart","createEventFromTouch","targetEl","handleTouchMove","handleTouchEnd","handleTouchScroll","handleScroll","prevScrollX","prevPageX","prevScrollY","prevPageY","isTouch","origPageX","origPageY","onWindowTouchMove","querySubjectEl","downEl","destroyScrollWatch","isFirst","ElementMirror","sourceEl","mirrorEl","sourceElRect","revertDuration","origScreenX","origScreenY","updateElPosition","needsRevertAnimation","doRevertAnimation","finalSourceElRect","getMirrorEl","ScrollGeomCache","scrollController","doesListening","handleScrollChange","origScrollTop","origScrollLeft","computeClientRect","setScrollTop","setScrollLeft","ElementScrollGeomCache","_ScrollGeomCache","WindowScrollGeomCache","_ScrollGeomCache2","performance","AutoScroller","isEnabled","scrollQuery","edgeThreshold","maxVelocity","pointerScreenX","pointerScreenY","isAnimating","scrollCaches","everMovedUp","everMovedDown","everMovedLeft","everMovedRight","computeBestEdge","handleSide","msSinceRequest","requestAnimation","scrollStartEl","buildCaches","handleMove","yDelta","xDelta","scrollCache","invDistance","velocity","bestSide","leftDist","rightDist","topDist","bottomDist","canScrollUp","canScrollDown","canScrollLeft","canScrollRight","queryScrollEls","query","FeaturefulElementDragging","_ElementDragging","touchScrollAllowed","mirrorNeedsRevert","isDelayEnded","isDistanceSurpassed","delayTimeoutId","onPointerDown","pointer","setIsVisible","startDelay","handleDistanceSurpassed","onPointerMove","autoScroller","onPointerUp","tryStopDrag","handleDelayEnd","tryStartDrag","cancelTouchScroll","stopDrag","OffsetTracker","origRect","HitDragging","dragging","droppableStore","useSubjectCenter","requireInitial","initialHit","movingHit","finalHit","handlePointerDown","prepareHits","processFirstCoord","setIgnoreMove","handleDragStart","handleDragMove","handlePointerUp","releaseHits","handleDragEnd","subjectRect","origPoint","adjustedPoint","queryHitForOffset","slicedSubjectRect","coordAdjust","forceHandle","hit","isHitsEqual","offsetTrackers","interactionSettings","bestHit","offsetTracker","isWithinClipping","originLeft","computeLeft","originTop","computeTop","queryHit","componentId","hit0","hit1","buildDatePointApiWithContext","DateClicking","isValidDateDownEl","_this8$hitDragging","hitDragging","DateSelecting","dragSelection","_assertThisInitialize3","canSelect","getComponentTouchDelay$1","handleHitUpdate","isFinal","isInvalid","dateSpan0","dateSpan1","joinHitsIntoSelection","EventDragging","_Interaction3","subjectSeg","receivingContext","validMutation","mutatedRelevantEvents","origTarget","_assertThisInitialize4","initialContext","getComponentTouchDelay","fixedMirrorParent","receivingOptions","massagers","massager","computeEventMutation","displayDrag","setMirrorNeedsRevert","setMirrorIsVisible","_assertThisInitialize5","clearDrag","updatedEventApi","eventChangeArg","transformed","eventRemoveArg","draggedEl","addedEventDef","addedEventInstance","addedEventApi","eventAddArg","SELECTOR","nextContext","prevContext","initialCalendar","EventResizing","_Interaction4","draggingSegEl","draggingSeg","querySegEl","isFromStart","computeMutation","UnselectAuto","isRecentPointerDateSelect","matchesCancel","matchesEvent","onSelect","selectInfo","onDocumentPointerDown","onDocumentPointerUp","documentPointer","LISTENER_REFINERS","dateClick","eventDragStart","eventDragStop","eventDrop","eventResizeStart","eventResizeStop","drop","eventReceive","eventLeave","dataAttrPrefix","newTypeIds","type_ids","initializeAll","setStartTimeRange","tmpStartDate","selectedStartDate","tmpEndDate","end_date_suggestion","max_duration","endDateInstance","business_hours","hasStartTimeTarget","startTimeInstance","initializeTimePicker","updateStartTime","startDateInstance","selectedDates","fetchStartTimeRange","updateEndTime","selectedEndDate","fetchEndTimeRange","fetchDisabledDatesForStartDateMonth","currentMonth","currentYear","setDisabledDates","fetchPartiallyAvailableDatesForStartDateMonth","partially_available_dates","fetchDisabledDatesForEndDateMonth","hasStartDateTarget","daysWithLowAvailability","initializeDatePicker","startDateTarget","minDateValue","dObj","dStr","dayElem","startTimeTarget","hasCurrentTimeTarget","currentTimeTarget","endDateTarget","endTimeInstance","endTimeTarget","setHandlers","tomselect","TomSelect","clearOptions","addOptions","setValue","unavailable_dates","setEndTimeRange","_flatpickr","disabledDays","onlyEnd","require","toastr","Rails","linkClickSelector","buttonClickSelector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","loadCSPNonce","cspNonce","mozMatchesSelector","oMatchesSelector","webkitMatchesSelector","getData","setData","csrfParam","CSRFProtection","refreshCSRFTokens","initCustomEvent","stopEverything","AcceptHeaders","createXHR","prepareOptions","processResponse","responseText","OPENED","accept","withCredentials","onreadystatechange","DONE","isCrossDomain","serializeElement","additionalParam","formElements","allowAction","handleConfirm","confirm","answer","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","replacement","originalText","handleMethod","formContent","link","isRemote","handleRemote","enctype","FormData","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","rails","_rails_loaded","Sizzle","pseudos","getText","isXML","escapeSelector","Expr","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","push_native","booleans","whitespace","rwhitespace","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rinputs","rheader","rnative","rsibling","runescape","funescape","escapedWhitespace","high","rcssescape","fcssescape","ch","asCodePoint","unloadHandler","inDisabledFieldset","addCombinator","seed","nid","groups","newSelector","newContext","getElementsByClassName","qsa","toSelector","testContext","qsaError","cacheLength","markFunction","assert","addHandle","attrHandle","siblingCheck","sourceIndex","createInputPseudo","createButtonPseudo","createDisabledPseudo","createPositionalPseudo","argument","matchIndexes","namespaceURI","hasCompare","subWindow","attachEvent","createComment","getById","getElementsByName","attrId","getAttributeNode","disconnectedMatch","compareDocumentPosition","adown","bup","sortDetached","aup","ap","bp","specified","duplicates","detectDuplicates","sortStable","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","operator","what","simple","forward","ofType","uniqueCache","outerCache","nodeIndex","useCache","uniqueID","pseudo","setFilters","matcher","unmatched","lang","elemLang","hasFocus","radio","checkbox","password","image","submit","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","_sizzle","truncate","rerrorNames","rbrace","rmultiDash","dataAttr","removeData","_removeData","defaultDisplayMap","getDefaultDisplay","eased","swing","boolHook","removeAttr","attrHooks","attrNames","lowercaseName","stripAndCollapse","classesToArray","addClass","curValue","clazz","finalValue","removeClass","stateVal","isValidValue","hasClass","rreturn","valHooks","optionSet","focusin","attaches","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","xhrSuccessStatus","xhrSupported","cors","username","xhrFields","onabort","ontimeout","binary","scriptAttrs","scriptCharset","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","createHTMLDocument","implementation","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","parentOffset","Height","Width","defaultExtra","funcName","unbind","undelegate","holdReady","hold","parseJSON","isNumeric","fnOver","fnOut","noGlobal","_jQuery","_$","runtime","Op","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","define","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","_invoke","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","displayName","isGeneratorFunction","genFun","ctor","awrap","skipTempReset","rootRecord","rval","exception","loc","caught","hasCatch","hasFinally","finallyEntry","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","_isNativeFunction","_e59","_e60","et","preview","presentation","quote","nestable","heading1","terminal","breakOnReturn","group","htmlAttributes","plaintext","bulletList","bullet","listAttribute","numberList","attachmentGallery","exclusive","composesExistingText","recentAndroid","samsungAndroid","forcesObjectResizing","supportsInputEvents","InputEvent","ADD_ATTR","SAFE_FOR_XML","RETURN_DOM","attachFiles","bold","bullets","byte","captionPlaceholder","indent","italic","outdent","redo","strike","undo","unlink","urlPlaceholder","GB","KB","MB","PB","TB","_n2","onElement","matchingSelector","withCallback","inPhase","times","untilNode","previousSibling","onlyNodesOfType","usingFilter","expandEntityReferences","NodeFilter","SHOW_ELEMENT","SHOW_TEXT","SHOW_COMMENT","SHOW_ALL","createTreeWalker","contenteditable","_t2","_e4","strict","COMMENT_NODE","trixCursorTarget","TEXT_NODE","level2Enabled","getLevel","pickFiles","fileInputId","removeBlankTableCells","tableCellSeparator","tableRowSeparator","inheritable","fontStyle","groupTagName","frozen","getDefaultHTML","attachments","blockAttributes","browser","attachmentCaption","attachmentCaptionEditor","attachmentMetadata","attachmentMetadataContainer","attachmentName","attachmentProgress","attachmentSize","attachmentToolbar","dompurify","fileSize","keyNames","textAttributes","toolbar","_H","toMethod","toProperty","optional","_q","ucs2String","codepoints","ucs2Length","_this$codepoints","fromCodepoints","fromUCS2String","codePointAt","tt","fromCodePoint","_r2","_e5","nt","rt","_q2","contentsForInspection","_n3","fromJSON","ot","at","lt","dirName","ut","ht","dt","gt","bt","mt","ft","vt","At","yt","xt","_e6","Ct","Et","_t3","St","Rt","kt","_n4","Tt","wt","Nt","Lt","_wt2","It","Dt","_wt4","_wt6","Ot","_q3","selectionManagers","selectionDidChange","notifySelectionManagersOfSelectionChange","Ft","Pt","getSelection","rangeCount","Mt","getRangeAt","_t","Bt","removeAllRanges","addRange","jt","startContainer","endContainer","Wt","Ut","Vt","zt","isEqualTo","qt","utf16String","_o","_s2","Ht","_rt","Gt","Jt","Kt","$t","Yt","getKeys","_t4","_e7","toObject","getKeysCommonToHash","_t5","_n5","Xt","asTree","objects","groupObjects","getObjects","getCacheKey","canBeGrouped","canBeGroupedWith","Zt","_q4","Qt","te","trixStoreKey","ee","_q5","performing","performed","succeeded","perform","proxyMethod","ie","_q6","childViews","rootView","createNodes","parentView","findViewForObject","getCachedViewForObject","recordChildView","createChildView","cacheViewForObject","viewClass","ne","getAllChildViews","findElementForObject","_e8","getViewCache","isViewCachingEnabled","viewCache","shouldCacheViews","_e9","_ie","objectGroup","findOrCreateCachedChildView","createContainerElement","getChildViews","getNodes","getDepth","re","se","isFrozen","ae","le","ce","ue","seal","he","ge","ke","me","Te","pe","fe","be","ve","Ae","ye","xe","Ce","Ee","Se","Re","we","_r3","_t6","Le","_e10","De","_i11","_n6","Ne","_i12","Ie","Oe","Fe","Pe","Me","Be","je","We","Ue","Ve","ze","qe","He","Je","Ke","Ge","Ye","$e","Ze","ARIA_ATTR","ATTR_WHITESPACE","CUSTOM_ELEMENT","DATA_ATTR","DOCTYPE_NAME","ERB_EXPR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","MUSTACHE_EXPR","TMPLIT_EXPR","oi","si","currentScript","DocumentFragment","HTMLTemplateElement","_e$NamedNodeMap","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","trustedTypes","_t7","_n7","createNodeIterator","importNode","afterSanitizeAttributes","afterSanitizeElements","afterSanitizeShadowDOM","beforeSanitizeAttributes","beforeSanitizeElements","beforeSanitizeShadowDOM","uponSanitizeAttribute","uponSanitizeElement","uponSanitizeShadowNode","tagNameCheck","attributeNameCheck","allowCustomizedBuiltInElements","PARSER_MEDIA_TYPE","ALLOWED_TAGS","ALLOWED_ATTR","ALLOWED_NAMESPACES","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","FORBID_CONTENTS","FORBID_TAGS","FORBID_ATTR","USE_PROFILES","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","FORCE_BODY","SANITIZE_DOM","SANITIZE_NAMED_PROPS","KEEP_CONTENT","IN_PLACE","ALLOWED_URI_REGEXP","NAMESPACE","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","CUSTOM_ELEMENT_HANDLING","svg","svgFilters","mathMl","ADD_TAGS","TRUSTED_TYPES_POLICY","createHTML","createScriptURL","createPolicy","_e11","createDocument","SHOW_PROCESSING_INSTRUCTION","SHOW_CDATA_SECTION","hasChildNodes","allowedTags","_e12","_i13","_n8","_r4","__removalCount","attrName","attrValue","keepAttr","forceKeepAttr","getAttributeType","setAttributeNS","nextNode","_e13","shadowroot","shadowrootmode","outerHTML","doctype","setConfig","clearConfig","isValidAttribute","addHook","removeHook","removeHooks","removeAllHooks","ai","_q7","forbiddenProtocols","forbiddenElements","sanitizeElements","normalizeListElementNesting","_i14","elementIsRemovable","sanitizeElement","elementIsForbidden","elementIsntSerializable","getHTML","di","gi","_ie2","uploadProgressDelegate","attachmentPiece","piece","getClassName","getHref","setHTML","createContentNodes","createCaptionElement","isPending","progressElement","getUploadProgress","trixMutable","mi","getCaption","_e14","_i15","_n9","getCaptionConfig","getFilename","getFormattedFilesize","_i16","_n10","getType","getExtension","trixAttachment","trixContentType","getContentType","trixId","isEmpty","trixAttributes","trixSerialize","pi","findProgressElement","fi","_gi","previewDelegate","updateAttributesForImage","getURL","getPreviewURL","_i17","bi","_ie3","getAttributes","textConfig","createAttachmentNodes","createStringNodes","_i18","isPreviewable","_t8","_e15","_i19","_n11","_e16","_e17","preserveSpaces","_o2","_e18","_t9","_e19","_i20","_n12","isLast","followsWhitespace","vi","_ie4","getPieces","_r5","_o3","_s3","Ai","yi","xi","_ie5","block","_i21","getLastAttribute","_n13","shouldAddExtraNewlineElement","_e20","_i22","_r6","_mt","_mt$htmlAttributes","_t10","getBlockBreakPosition","_t11","Ci","_ie6","elementStore","shadowElement","_t12","getBlocks","Si","createDocumentFragmentForSync","didSync","Ei","garbageCollectCachedViews","sync","Ri","ki","Ti","wi","toPrimitive","Li","Di","Oi","Ii","Ni","Fi","Pi","Mi","Bi","throw","_rt2","copyWithAttributes","hasSameConstructorAs","hasSameStringValueAsPiece","hasSameAttributesAsPiece","ji","_ee","Image","naturalWidth","naturalHeight","Wi","_rt3","releaseFile","didChangeAttributes","attachmentDidChangeAttributes","preloadURL","previewablePattern","preloadFile","releasePreloadedFile","uploadProgress","attachmentDidChangeUploadProgress","previewURL","preloadingURL","attachmentDidChangePreviewURL","preload","fileObjectURL","URL","createObjectURL","revokeObjectURL","setAttributes","setPreviewURL","attributesForFile","setFile","filesize","Ui","_i23","ensureAttachmentExclusivelyHasAttribute","removeProhibitedAttributes","permittedAttributes","registerType","Vi","_i24","zi","_rt4","_this$splitObjectAtPo2","splitObjectAtPosition","insertSplittableListAtIndex","replaceObjectAtIndex","_this$splitObjectsAtR2","splitObjectsAtRange","_this$splitObjectsAtR4","_this$splitObjectsAtR6","_this$constructor$spl2","_this$splitObjectAtPo4","Hi","Ji","findIndexAndOffsetAtPosition","_this$findIndexAndOff2","_t13$splitAtOffset2","getObjectAtIndex","splitAtOffset","_s4","_a2","getLength","canBeConsolidatedWith","consolidateWith","consolidate","_n14","_n15","_r7","endPosition","qi","_n16","_r8","Ki","_rt5","pieceList","copyWithPieceList","insertTextAtPosition","insertSplittableListAtPosition","removeObjectsInRange","removeTextAtRange","getTextAtRange","addAttributesAtRange","transformObjectsInRange","copyWithAdditionalAttributes","copyWithoutAttribute","getObjectAtPosition","fromCommonAttributesOfObjects","getCommonAttributes","getCommonAttributesAtRange","getSplittableListInRange","getStringAtRange","getAttachmentPieces","_n17","getAttachmentAndPositionById","getRangeOfAttachment","getEndPosition","isBlockBreak","eachObject","selectSplittableList","isSerializable","toConsole","getDirection","Gi","_rt6","Yi","copyWithText","copyUsingObjectMap","rn","getAttributeLevel","getNestableAttributes","getLastNestableAttribute","_e21","_i25","hasAttributes","textForStringWithAttributes","getTextWithoutBlockBreak","appendText","Qi","_t14","_e22","$i","Zi","Xi","blockBreak","_rt7","blockList","getBlockAtIndex","consolidateBlocks","_this$locationFromPos","locationFromPosition","getBlockAtPosition","removeObjectAtIndex","getBaseBlockAttributes","_e27","copyWithBaseBlockAttributes","getBlockCount","_t15","insertTextAtRange","_e28","insertDocumentAtRange","_this$locationFromPos2","editObjectAtIndex","_t17","locationRangeFromRange","getStringAtPosition","_t18","_i26","_n18","_r9","_o4","_t20","getDocumentAtRange","_o$getBlocks","_o$getBlocks2","eachBlockAtRange","addAttribute","addAttributeAtRange","eachBlock","removeAttributeAtRange","getTextAtIndex","updateAttributesForAttachment","addHTMLAttribute","replaceBlock","expandRangeToLineBreaksAndSplitBlocks","_e31","removeLastListAttributeAtRange","exceptAttributeName","convertLineBreaksToBlockBreaksInRange","removeBlockAttributesAtRange","removeLastTerminalAttributeAtRange","consolidateBlocksAtRange","copyWithoutAttributes","_t24","findLineBreakInDirectionFromPosition","positionFromLocation","insertBlockBreakAtRange","_t25","_t29","consolidateFromIndexToIndex","_this$locationFromPos7","getPieceAtPosition","_this$locationFromPos8","editCount","_t31","_t32","getCommonAttributesAtPosition","_e32","_i27","sn","_this$locationFromPos9","getAttributesAtPosition","_this$locationFromPos10","_Array$from6","getExpandedRangeForAttributeAtOffset","_loop2","_e33","_r10","getAttachments","_e34","_n19","_r11","_o5","_e35","withValue","_t35","findPositionAtIndexAndOffset","_Array$from8","getTexts","toSerializableText","an","ln","cn","_q8","blocks","blockElements","processedElements","createHiddenContainer","containerElement","_t36","gn","translateBlockElementMarginsToNewlines","removeHiddenContainer","isInsignificantTextNode","appendBlockForTextNode","processTextNode","appendBlockForElement","processElement","currentBlockElement","isBlockElement","appendStringWithAttributes","_t37","getBlockAttributes","_n20","getBlockHTMLAttributes","currentBlock","appendBlockForAttributesWithElement","_e36","_n21","_e37","findParentBlockElement","appendEmptyBlock","un","mn","getTextAttributes","_i28","appendAttachmentWithAttributes","isExtraBR","_i29","_t38","_n22","needsTableSeparator","appendPiece","_n23","_r12","_o6","findBlockElementAncestors","_i30","_n24","_t39","_r13","_o7","_i31","pn","hn","_i32","getMarginOfDefaultBlockElement","_e38","_i33","getMarginOfBlockElementAtIndex","prependStringToTextAtIndex","appendStringToTextAtIndex","dn","whiteSpace","FILTER_REJECT","FILTER_ACCEPT","bn","vn","An","yn","xn","getDocument","toSerializableDocument","toJSONString","_e39","_i34","_n25","Cn","En","_q9","_super26","attachmentManager","requestRemovalOfAttachment","Sn","_q10","_super27","managedAttachments","manageAttachment","_e40","_i35","attachmentIsManaged","attachmentManagerDidRequestRemovalOfAttachment","Rn","composition","getSelectedRange","startPosition","startLocation","endLocation","breaksOnReturn","previousCharacter","nextCharacter","isListItem","kn","_q11","_super28","currentAttributes","revision","refreshAttachments","compositionDidChangeDocument","selectedRange","compositionWillLoadSnapshot","setSelection","compositionDidLoadSnapshot","updatePosition","notifyDelegateOfInsertionAtRange","insertDocument","getCurrentTextAttributes","insertText","shouldDecreaseListLevel","decreaseListLevel","shouldPrependListItem","_e41","copyWithoutText","shouldInsertBlockBreak","insertBlockBreak","shouldRemoveLastBlockAttribute","removeLastBlockAttribute","shouldBreakFormattedBlock","breakFormattedBlock","insertString","mergeDocumentAtRange","copyUsingObjectsFromDocument","getLocationRange","rangeFromLocationRange","insertFiles","compositionShouldAcceptFile","_i36","attachmentForFile","insertAttachments","textForAttachmentWithAttributes","shouldManageMovingCursorInDirection","canDecreaseBlockAttributeLevel","_t40","getBlock","decreaseBlockAttributeLevel","getExpandedRangeInDirection","getAttachmentAtRange","editAttachment","moveTextFromRangeToPosition","stopEditingAttachment","_Array$from12","removeCurrentAttribute","placeholderPosition","getPosition","setSelectedRange","setCurrentAttribute","canSetCurrentBlockAttribute","canSetCurrentTextAttribute","getSelectedDocument","_i37","_Array$from13","isTerminalBlock","setBlockAttribute","setTextAttribute","notifyDelegateOfCurrentAttributesChange","_n26","setHTMLAttributeAtPosition","_Array$from15","_t42","canSetCurrentAttribute","applyBlockAttributeAtRange","removeBlockAttribute","updateCurrentAttributes","removeTextAttribute","getNestingLevel","_t43","getPreviousBlock","getListItemAttributes","decreaseNestingLevel","increaseNestingLevel","ignoreLock","_e42","_e43","_i38","hasCurrentAttribute","compositionDidRequestChangingSelectionToLocationRange","getSelectionManager","setLocationRange","targetLocationRange","withTargetLocationRange","createLocationRangeFromDOMRange","_Array$from18","_Array$from19","translateUTF16PositionFromOffset","editingAttachment","_n27","_t44","expandSelectionAroundCommonAttribute","getRangeOfCommonAttributeAtPosition","getSelectedAttachments","positionIsCursorTarget","locationIsCursorTarget","compositionDidRemoveAttachment","compositionDidAddAttachment","compositionDidEditAttachment","compositionDidChangeAttachmentPreviewURL","compositionDidStartEditingAttachment","compositionDidStopEditingAttachment","removeAttributeForAttachment","removeLastAttribute","_e44","compositionDidChangeCurrentAttributes","compositionDidPerformInsertionAtRange","toUTF16String","offsetFromUCS2Offset","offsetToUCS2Offset","Tn","_q12","_super29","undoEntries","redoEntries","consolidatable","wn","_i39","createEntry","description","_e45","loadSnapshot","snapshot","_e46","getSnapshot","Ln","Dn","applyBlockAttribute","findRangesOfBlocks","findRangesOfPieces","getCharacterAtPosition","moveSelectedRangeForward","findRangesForBlockAttribute","findRangesForTextAttribute","Nn","In","On","selectionManager","undoManager","loadDocument","deleteInDirection","insertAttachment","insertFile","insertHTML","insertLineBreak","getClientRectAtLocationRange","expandSelectionInDirection","moveCursorInDirection","setHTMLAtributeAtPosition","canDecreaseNestingLevel","canIncreaseNestingLevel","canRedo","canUndo","_ref23","recordUndoEntry","Fn","findAttachmentElementParentForNode","_s5","Pn","_this$findNodeAndOffs2","findNodeAndOffsetFromLocation","getSignificantNodesForIndex","_r14","_o8","Mn","_o9","Bn","jn","caretPositionFromPoint","_document$caretPositi","_t45","offsetNode","_r15","createRange","setStart","caretRangeFromPoint","createTextRange","_t46","_t47","moveToPoint","Wn","_q13","_super30","didMouseDown","locationMapper","pointMapper","lockCount","currentLocationRange","lockedLocationRange","createDOMRangeFromLocationRange","updateCurrentLocationRange","getLocationAtPoint","getClientRectsForDOMRange","_t48","collapsed","selectionIsCollapsed","domRangeWithinElement","findLocationFromContainerAndOffset","startOffset","endOffset","pauseTemporarily","paused","locationRangeDidChange","findContainerAndOffsetFromLocation","_t49","setEnd","createDOMRangeFromPoint","ar","Un","Attachment","AttachmentManager","AttachmentPiece","Block","Composition","Document","Editor","HTMLParser","HTMLSanitizer","LineBreakInsertion","LocationMapper","ManagedAttachment","Piece","PointMapper","SelectionManager","SplittableList","StringPiece","Text","UndoManager","Vn","ObjectView","AttachmentView","BlockView","DocumentView","PieceView","PreviewableAttachmentView","TextView","zn","qn","Hn","Jn","do","undos","Kn","_q14","_super31","trixAction","didClickToolbar","didClickActionButton","placeholder","didInputCaption","didKeyDownCaption","didChangeCaption","didBlurCaption","editCaption","install","makeElementMutable","addToolbar","installCaptionEditor","savePendingCaption","didUninstallAttachmentEditor","pendingCaption","_r16","attachmentEditorDidRequestUpdatingAttributesForAttachment","attachmentEditorDidRequestRemovingAttributeForAttachment","attachmentEditorDidRequestRemovalOfAttachment","attachmentEditorDidRequestDeselectingAttachment","Gn","_q15","_super32","didFocus","didBlur","didClickAttachment","documentView","focused","compositionControllerDidFocus","blurPromise","compositionControllerDidBlur","findAttachmentForElement","compositionControllerDidSelectAttachment","isEditingAttachment","canSyncDocumentView","isSynced","compositionControllerWillSyncDocumentView","compositionControllerDidSyncDocumentView","compositionControllerDidRender","invalidateViewForObject","enableViewCaching","disableViewCaching","attachmentEditor","uninstallAttachmentEditor","getAttachmentPieceForAttachment","uninstall","compositionControllerWillUpdateAttachment","compositionControllerDidRequestRemovalOfAttachment","compositionControllerDidRequestDeselectingAttachment","getAttachmentById","Yn","_q16","_super33","$n","Xn","Zn","characterData","characterDataOldValue","Qn","_q17","_super34","didMutate","_this$mutations","findSignificantMutations","elementDidMutate","getMutationSummary","mutationIsSignificant","nodeIsMutable","_i40","_Array$from20","nodesModifiedByMutation","_e47","nodeIsSignificant","getTextMutationSummary","_this$getTextChangesF","getTextChangesFromCharacterData","additions","deletions","getTextChangesFromChildList","textAdded","textDeleted","getMutationsByType","_n28","_r17","_o10","_zt","_zt2","_zt3","_zt4","_i41","_Array$from21","_i42","er","_ee2","_super35","ir","previousEvent","checkSamsungKeyboardBuggyModeStart","checkSamsungKeyboardBuggyModeEnd","buggyMode","insertingLongTextAfterUnidentifiedChar","nr","innerText","inputType","isBeforeInputInsertText","previousEventWasUnidentifiedKeydown","or","rr","sr","_q18","_super36","_t50","flakyKeyboardDetector","handlerFor","inputControllerDidRequestRender","inputControllerDidRequestReparse","requestRender","_this60","handleInput","inputControllerWillAttachFiles","responder","_this61","shouldIgnore","inputControllerWillHandleInput","inputControllerDidHandleInput","lr","cr","ur","_sr","_super37","_this62","resetInputSummary","_e48","inputSummary","_i43","isComposing","inputControllerDidAllowUnhandledInput","mutationIsExpected","requestReparse","preferDocument","didDelete","_t51","_i44","positionIsBlockBreak","compositionInput","getEndData","fr","isEnded","setInputSummary","_e49","_i45","Files","_this63","keydown","didInput","_n29","keyName","_e50","_i46","inputControllerDidReceiveKeyboardCommand","keypress","mr","inputControllerWillPerformTyping","selectionIsExpanded","textInput","_t52","dragenter","dragstart","serializeSelectionToDataTransfer","dataTransfer","draggedRange","inputControllerDidStartDrag","dragover","canAcceptDataTransfer","_n30","draggingPoint","inputControllerDidReceiveDragOverPoint","dragend","inputControllerDidCancelDrag","setLocationRangeFromPointRange","inputControllerWillMoveText","moveTextFromRange","_t53","fromJSONString","cut","clipboardData","inputControllerWillCutText","paste","_this64","testClipboardData","clipboard","pr","_t54","createLinkHTML","inputControllerWillPaste","inputControllerDidPaste","_t55","getAsFile","_e51","dr","getPastedHTMLUsingHiddenElement","compositionstart","getCompositionInput","compositionupdate","compositionend","beforeinput","backspace","tab","selectionIsInCursorTarget","control","alt","gr","_e52","_t56","_i47","_n31","_t57","_i48","_q19","_super38","_this65","inputController","isSignificant","insertPlaceholder","_t58","selectPlaceholder","forgetPlaceholder","canApplyToDocument","_sr2","_super39","_this66","scheduledRender","composing","reparse","afterRender","withTargetDOMRange","inputControllerWillPerformFormatting","toggleCurrentAttribute","_this67","_ref25","getTargetDOMRange","minLength","getTargetRanges","_t59","vr","_i49","Er","_e53","_i50","withEvent","xr","Cr","inputTypes","scheduleRender","selectionContainsAttachments","Sr","Ar","_i51","_e54","ArrowLeft","ArrowRight","Backspace","shouldManageDeletingInDirection","deleteByComposition","deleteByCut","deleteByDrag","deleteByDragRange","deleteCompositionText","deleteContent","deleteContentBackward","deleteContentForward","deleteEntireSoftLine","deleteHardLineBackward","deleteHardLineForward","deleteSoftLineBackward","deleteSoftLineForward","deleteWordBackward","deleteWordForward","formatBackColor","activateAttributeIfSupported","formatBold","toggleAttributeIfSupported","formatFontColor","formatFontName","formatIndent","formatItalic","formatJustifyCenter","formatJustifyFull","formatJustifyLeft","formatJustifyRight","formatOutdent","formatRemove","_i52","getCurrentAttributes","formatSetBlockTextDirection","formatSetInlineTextDirection","formatStrikeThrough","formatSubscript","formatSuperscript","formatUnderline","historyRedo","inputControllerWillPerformRedo","historyUndo","inputControllerWillPerformUndo","insertCompositionText","insertFromComposition","insertFromDrop","insertFromPaste","_this68","_n32","_o11","yr","insertFromYank","insertLink","insertOrderedList","insertParagraph","insertReplacementText","_this69","insertTranspose","insertUnorderedList","Rr","kr","Tr","wr","Lr","Dr","Nr","Ir","Fr","Or","Pr","_q20","_super40","_this70","didClickAttributeButton","didClickDialogButton","didKeyDownDialogInput","actions","resetDialogInputs","toolbarDidClickButton","getDialog","toggleDialog","toolbarDidInvokeAction","toolbarDidToggleAttribute","refreshAttributeButtons","_i53","_n33","hideDialog","refreshActionButtons","_this71","eachActionButton","_this72","eachAttributeButton","dialogIsVisible","_i54","_Array$from22","_t60","_i55","showDialog","toolbarWillShowDialog","_e55","toolbarDidShowDialog","willValidate","setCustomValidity","checkValidity","isSafeAttribute","toolbarDidUpdateAttribute","toolbarDidRemoveAttribute","toolbarDidHideDialog","Mr","_Yn","_super41","_this73","editorElement","compositionController","toolbarController","toolbarElement","editor","loadHTML","registerSelectionManager","unregisterSelectionManager","replaceHTML","notifyEditorElement","handlingInput","updateAttributes","updateCurrentActions","pasting","pastedRange","rerenderViewForObject","unmanageAttachment","attachmentLocationRange","getLocationRangeOfAttachment","installAttachmentEditorForAttachment","loadingSnapshot","isFocused","requestedLocationRange","compositionRevisionWhenLocationRangeRequested","refreshViewCache","removeAttachment","editorWillSyncDocumentView","clearSelection","editorDidSyncDocumentView","unlock","renderedCompositionRevision","runEditorFilters","isFocusedInvisibly","requestedRender","recordTypingUndoEntry","recordFormattingUndoEntry","applyKeyboardCommand","locationRangeBeforeDrag","invokeAction","selectionFrozen","expandSelectionForEditing","freezeSelection","dialogName","thawSelection","actionIsExternal","actionName","invokingElement","_e56","canInvokeAction","getCurrentActions","currentActions","updateActions","_this74","_t61","getSerializableElement","setFormValue","documentChangedSinceLastRender","updateInputElement","getUndoContext","getLocationContext","getTimeContext","canActivateAttribute","Br","AttachmentEditorController","CompositionController","EditorController","InputController","Level0InputController","Level2InputController","ToolbarController","_r","SelectionChangeObserver","jr","FileVerificationOperation","ImagePreloadOperation","Wr","_HTMLElement","_super42","Ur","zr","qr","Hr","queryCommandSupported","execCommand","_t62","Jr","Kr","Gr","WeakSet","Yr","attachInternals","$r","inputElement","toggleAttribute","validity","validationMessage","reportValidity","_this$element","required","setValidity","valueMissing","customError","Xr","Zr","Qr","_this75","eo","io","_HTMLElement2","_super43","_this76","formAssociated","_t63","_e57","_t64","_e58","editorController","_this77","Vr","connectedCallback","disconnectedCallback","no","VERSION","core","models","observers","operations","TrixEditorElement","TrixToolbarElement","Filter","attachmentGalleryFilter","Trix","customElements","bookings_json_url","getFinalUrl","url_partial","url_string","port","hostname","getTimeTableURL","tt_id","add_zeros","update_inputs","toLocaleString","time_table","slot","daynr","updateJSON","newRecord","updated_booking_json","selectOverlapAllowed","calendarEl","calendar","timeGridPlugin","interactionPlugin","deLocale","selectionInfo","new_event","getEventById","addedEvent","remove_selection","eventResizeInfo","eventDropInfo","setProp","dayGridPlugin","listPlugin","bookingTypeCalendarWithoutTimeTable","$container","previousToast","toastId","toastType","$toastElement","getOptions","getContainer","clearToast","toastsToClear","clearContainer","removeToast","optionsOverride","iconClass","subscribe","warning","containerId","positionClass","createContainer","hideMethod","hideDuration","hideEasing","publish","preventDuplicates","shouldExit","intervalId","$titleElement","$messageElement","$progressElement","$closeElement","closeHtml","progressBar","hideEta","maxHideTime","toastClass","escapeHtml","titleClass","setTitle","messageClass","setMessage","closeButton","closeClass","progressClass","newestOnTop","ariaValue","setAria","showMethod","showDuration","showEasing","onShown","timeOut","hideToast","updateProgress","closeOnHover","stickAround","delayedHideToast","onclick","tapToDismiss","onCloseClick","closeMethod","closeDuration","closeEasing","onHidden","extendedTimeOut","percentage","flat","even","_elem","odd","pushNative","nonHex","_argument","_matchIndexes","_dir","primary","_all","rtrimCSS","reliableTrDimensionsVal","reliableTrDimensions","trChild","trStyle","parserErrorElem","_callback2","$dropdown","$dropdownToggle","$dropdownMenu","showClass","matchMedia","$this","keyup","titles","fileName","_marked","forEvents","unicode_map","multi_char_reg","MicroEvent","fct","event_array","arrayToPattern","chars","maxValueLength","sequencePattern","hasDuplicates","prev_char_count","prev_pattern","setToPattern","escape_regex","unicodeLength","allSubstrings","subresult","code_points","latin_convert","latin_condensed","latin","unicode","convert_pat","asciifold","_asciifold","code_point_min","code_point_max","folded","code_point","t0","generateMap","unicode_sets","addMatching","to_add","folded_set","patt","generateSets","multi_char","multi_char_patt","mapSequence","strings","min_replacement","chars_replaced","substringsToPattern","sub_pat","sequencesToPattern","sequences","sequence","seq","substrs","inSequences","needle_seq","needle_parts","part","needle_part","Sequence","last_piece","last_part","last_substr","clone_last_len","getPattern","_code_points","_char","match_str","overlapping","added_types","_clone","new_seq","old_seq","getAttr","getAttrNesting","scoreValue","score","search","propToArray","iterate$1","Sifter","diacritics","respect_word_boundaries","weights","field_regex","words","word","field_match","prepareSearch","_getScoreFunction","token_count","fields","field_count","getAttrFn","scoreObject","sum","_getSortFunction","implicit_score","sort_flds","sort_empty","get_field","fld","sort_fld","optsUser","nesting","fn_score","fn_sort","iterate","getDom","isHtmlString","tpl","dom_el","event_name","applyCSS","addClasses","elmts","norm_classes","classesArray","castAsArray","cls","removeClasses","_classes","parentMatch","getTail","amongst","setAttr","replaceNode","highlight","highlightChildren","highlightRecursive","spannode","middlebit","splitText","middleclone","highlightText","removeHighlight","KEY_SHORTCUT","optgroups","delimiter","splitOn","createOnBlur","createFilter","openOnFocus","shouldOpen","maxOptions","maxItems","hideSelected","addPrecedence","selectOnTab","allowEmptyOption","loadThrottle","loadingClass","optgroupField","valueField","labelField","disabledField","optgroupLabelField","optgroupValueField","lockOptgroupOrder","sortField","searchField","searchConjunction","wrapperClass","controlClass","dropdownClass","dropdownContentClass","itemClass","optionClass","dropdownParent","controlInput","copyClassesToDropdown","hidePlaceholder","hash_key","get_hash","escape_html","debounce_events","event_args","isKeyDown","key_name","getId","existing_id","addSlashes","getSettings","settings_user","attr_data","field_label","field_value","field_disabled","field_optgroup","field_optgroup_label","field_optgroup_value","tag_name","optionsMap","group_count","readData","addOption","settings_element","option_data","$option","optgroup_data","data_raw","init_textbox","Interface","instance_i","_MicroPlugin","input_arg","user_settings","control_input","dropdown","dropdown_content","focus_node","is_select_tag","inputId","sifter","isRequired","isLocked","isInputHidden","isSetup","ignoreFocus","ignoreHover","hasOptions","currentResults","caretPos","loadedSearches","activeOption","activeItems","userOptions","initializePlugins","setupCallbacks","setupTemplates","_render","inputMode","passive_event","listboxId","control_id","escapeQuery","label_click","label_id","classes_plugins","target_match","onOptionHover","capture","onOptionSelect","onItemSelect","onKeyPress","onInput","onBlur","onFocus","onPaste","doc_mousedown","inputState","win_scroll","positionDropdown","revertSettings","refreshState","updateOriginalInput","refreshItems","registerOptionGroup","templates","get_settings","setupOptions","lastQuery","clearActiveItems","pastedText","inputValue","splitInput","addItem","createItem","character","selectAll","getAdjacent","setActiveOption","advanceSelection","deleteSelection","refreshOptions","wasFocused","showInput","setActiveItem","setCaret","closeAfterSelect","canLoad","loadCallback","clearActiveOption","silent","addItems","getLastActive","setActiveItemClass","removeActiveItem","hideInput","last_active","scrollToOption","height_menu","height_item","scrollBehavior","controlChildren","setTextboxValue","getScoreFunction","getSearchOptions","calculateScore","hashed","has_create_option","active_group","triggerDropdown","groups_order","same_query","active_option","show_dropdown","opt_value","opt_hash","option_el","getOption","group_fragment","$id","grp_a","grp_b","$order","group_heading","group_options","group_html","tok","add_template","canCreate","active_index","user_created","dat","hashed_id","item_new","index_item","value_old","value_new","data_old","getItem","uncacheValue","option_new","removeItem","boundFilter","clearFilter","$div","last_item","wasFull","isFull","insertAtCaret","removeOption","output","_output","created","refreshValidityState","wrap_classList","empty_option","has_selected","AddSelected","scrollY","scrollX","selectionStart","selectionEnd","rm_items","rm_item","shouldDelete","onDelete","adjacent","moveCaret","new_pos","templateName","new_fn","orig_method","result_new","_Interface","_class","requested","loadPlugin","orig_onOptionSelect","UpdateCheckbox","HTMLInputElement","orig_render_option","rendered","sortable","orig_lock","orig_unlock","$control","forcePlaceholderSize","helper","headerClass","titleRowClass","labelClass","close_link","orig_onBlur","test_input","_transfer_styles","style_name","orig_deleteSelection","orig_keydown","orig_render_item","close_button","load_more_opt","orig_canLoad","orig_clearActiveOption","orig_loadCallback","pagination","loading_more","default_values","shouldLoadMore","firstUrl","canLoadMore","setNextUrl","next_url","getUrl","first_option","no_more_results","originalModule","__webpack_amd_options__","__assign","__spreadArrays","il","jl","FlatpickrInstance","instanceConfig","getClosestActiveElement","calendarContainer","bindToInstance","setCalendarWidth","daysContainer","daysWidth","weekWrapper","updateTime","defaultDate","latestSelectedDateObj","newValue","isHourElem","hourElement","isMinuteElem","minuteElement","incrementNumInput","timeWrapper","_input","setHoursFromInputs","updateValue","_debouncedChange","secondElement","limitMinHours","minTime","minDateHasTime","limitMaxHours","maxTime","maxDateHasTime","minBound","maxBound","setHoursFromDate","onYearInput","changeYear","triggerChange","jumpToDate","jumpDate","jumpTo","oldYear","oldMonth","buildMonthSwitch","redraw","timeIncrement","inputElem","createDay","_dayNumber","dateIsEnabled","dayElement","todayDateElem","isDateSelected","selectedDateElem","isDateInRange","insertAdjacentHTML","focusOnDayElem","targetNode","onMouseOver","getFirstAvailableDay","startMonth","endMonth","focusOnDay","dayFocused","isInView","startElem","givenMonth","loopDelta","numMonthDays","changeMonth","getNextAvailableDay","buildMonthDays","firstOfMonth","prevMonthDays","utils","getDaysInMonth","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayNumber","dayNum","dayContainer","buildDays","frag","shouldBuildMonth","monthsDropdownContainer","buildMonth","monthElement","monthNavFragment","selectedMonth","yearInput","yearElement","buildMonths","monthNav","prevMonthNav","yearElements","monthElements","nextMonthNav","buildWeekdays","weekdayContainer","updateWeekdays","isOffset","_hidePrevMonthArrow","_hideNextMonthArrow","updateNavigationCurrentMonth","isCalendarElem","documentClick","eventTarget_1","isCalendarElement","lostFocus","isIgnored","timeContainer","newYear","newYearNum","isNewYear","dateToCheck","valueChanged","trimEnd","getDateStr","allowKeydown","allowInlineKeydown","isTimeObj","focusAndClose","selectDate","delta_1","currentYearElement","pluginElements","cellClass","hoverDate","rangeStartDate","rangeEndDate","containsDisabled","minRange","maxRange","rContainer","timestamp","outOfRange","positionCalendar","minMaxDateSetter","inverseDateObj","getInputElem","setupLocale","customPositionElement","_positionElement","calendarHeight","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","distanceFromBottom","innerHeight","showOnTop","isCenter","isRight","rightMost","centerMost","editableSheet","styleSheets","getDocumentStyleSheet","bodyWidth","centerLeft","centerIndex","centerStyle","centerBefore","msMaxTouchPoints","selectedDate","shouldChangeMonth","single","loadedPlugins","_bind","_setHoursFromDate","_positionCalendar","triggerChangeEvent","toInitial","mobileInput","_initialDate","_createElement","wasOpen","CALLBACKS","setSelectedDate","updatePositionElement","inputDate","parseDateRules","rule","specificFormat","mobileFormatStr","onMonthNavClick","isPrevMonth","isNextMonth","boolOpts","_enable","timeMode","defaultDateFormat","defaultAltFormat","_minDate","_maxDate","minMaxTimeSetter","_minTime","_maxTime","pluginConf","parseConfig","setupInputs","preloadedDate","setupDates","__hidePrevMonthArrow","__hideNextMonthArrow","innerContainer","buildWeeks","hourInput","minuteInput","military2ampm","secondInput","buildTime","customAppend","setupMobile","debouncedResize","ontouchstart","selText","isSafari","HTMLCollection","NodeList","localize","setDefaults","fp_incr","_loop_1","args_1","variable","obj2","DATE_PATTERN","toStr","toFloat","toArr","jsOptionsFunc","hideLegend","setStacked","setXtitle","setYtitle","series","singleSeriesFormat","negativeValues","xtitle","ytitle","library","sortByTime","sortByNumberSeries","sortByNumber","calculateTimeUnit","maxDay","dayOfWeek","isDate","byteSuffixes","formatValue","byteScale","suffixIdx","toPrecision","zeros","thousands","seriesOption","baseOptions","defaultOptions$2","defaultColors","hideLegend$2","setTitle$2","setBarMin$1","setBarMax$1","setStacked$2","setXtitle$2","setYtitle$2","addOpacity","notnull","calculateScale","maxAbsY","setFormatOptions$1","chartType","numericOptions","formatOptions","dataPoint","valueLabel","xtype","jsOptions$2","prepareData","prepareBubbleData","prepareNumberData","i$1","i$2","key$1","j$1","prepareDefaultData","createDataTable","pointChart","pointBackgroundColor","pointHoverBackgroundColor","pointHitRadius","pointHoverBorderWidth","pointRadius","pointHoverRadius","timeUnit","timeDiff","unitStepSize","defaultExport$2","renderLineChart","drawChart","renderPieChart","donut","renderColumnChart","barOptions","maxLabelSize","setLabelSize","renderAreaChart","renderBarChart","renderScatterChart","renderBubbleChart","destroyed","defaultOptions$1","yAxis","credits","plotOptions","areaspline","useUTC","hideLegend$1","verticalAlign","setTitle$1","jsOptions$1","stackedValue","stacking","setFormatOptions","pointFormatter","pointFormat","defaultExport$1","curve","symbol","pie","innerSize","categories","newSeries","d$1","d2","renderTo","fontName","pointSize","textStyle","curveType","hAxis","titleTextStyle","gridlines","baselineColor","viewWindow","setBarMin","setBarMax","jsOptions","defaultExport","this$1$1","waitForLoaded","pieHole","visualization","DataTable","addColumn","addRows","areaOpacity","renderGeoChart","colorAxis","rows2","renderTimeline","clearChart","pack","runCallbacks","loadOptions","packages","__config","language","mapsApiKey","LineChart","Timeline","GeoChart","columnType","sortedLabels","isDay","i$3","addAdapter","adapterType","product","getAdapterType","callAdapter","fnName","adapterName","Highcharts","google","__adapterObject","Chartkick","setDefaultOptions","eachChart","chartId","destroyAll","use","formatSeriesData","keyType","formatSeriesBubble","detectXTypeWithFunction","processSeries","noDatetime","rawData","copySeries","discrete","dataEmpty","detectXType","processSimple","perfectData","pendingRequests","runningRequests","runNext","setText","chartError","noPrefix","errorCatcher","__render","fetchDataSource","dataSource","showLoading","renderChart","download","__downloadAttached","__enterEvent","toImage","__leaveEvent","addDownloadButton","elementId","startRefresh","getDataSource","getChartObject","getAdapter","__updateOptions","refreshData","sep","stopRefresh","background","tmpCanvas","tmpCtx","toBase64Image","updateRefresh","__processData","__chartName","PieChart","ColumnChart","BarChart","AreaChart","ScatterChart","BubbleChart","autoDestroy","millisecondsInWeek","millisecondsInMinute","millisecondsInHour","constructFromSymbol","constructFrom","formatDistanceLocale","lessThanXSeconds","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","buildFormatLongFn","defaultWidth","formatLong","full","long","medium","short","dateTime","formatRelativeLocale","lastWeek","yesterday","tomorrow","nextWeek","buildLocalizeFn","valuesArray","formattingValues","defaultFormattingWidth","_defaultWidth","argumentCallback","ordinalNumber","dirtyNumber","rem100","narrow","abbreviated","wide","dayPeriod","am","pm","midnight","noon","morning","afternoon","evening","night","buildMatchFn","matchPattern","matchPatterns","defaultMatchWidth","matchResult","matchedString","parsePatterns","defaultParseWidth","findKey","valueCallback","predicate","parsePattern","any","enUS","formatDistance","tokenValue","addSuffix","comparison","formatRelative","_baseDate","weekStartsOn","firstWeekContainsDate","dateLongFormatter","timeLongFormatter","longFormatters","dateTimeFormat","datePattern","timePattern","dayOfYearTokenRE","weekYearTokenRE","throwTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","warnOrThrowProtectedError","_message","subject","RangeError","getDefaultOptions","transpose","date_","_constructor$prototyp","isConstructor","Setter","subPriority","_utcDate","ValueSetter","_Setter","validateValue","priority","flags","_Setter2","DateTimezoneSetter","timestampIsSet","Parser","dateString","validate","EraParser","_Parser","incompatibleTokens","numericPatterns","timezonePatterns","mapValue","parseFnResult","mapFn","parseNumericPattern","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","normalizeTwoDigitYear","twoDigitYear","isCommonEra","absCurrentYear","rangeEnd","trunc","isLeapYearIndex","YearParser","isTwoDigitYear","normalizedTwoDigitYear","_options$weekStartsOn","_options$locale","_options$locale$optio","_defaultOptions$local","_defaultOptions$local2","in","getWeekYear","_options$firstWeekCon","firstWeekOfNextYear","startOfNextYear","firstWeekOfThisYear","startOfThisYear","LocalWeekYearParser","startOfISOWeek","ISOWeekYearParser","_flags","firstWeekOfYear","ExtendedYearParser","QuarterParser","StandAloneQuarterParser","MonthParser","StandAloneMonthParser","startOfWeekYear","firstWeek","setWeek","LocalWeekParser","getISOWeekYear","fourthOfJanuaryOfNextYear","fourthOfJanuaryOfThisYear","startOfISOWeekYear","fourthOfJanuary","getISOWeek","setISOWeek","ISOWeekParser","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","DateParser","isLeapYear","DayOfYearParser","subpriority","setDay","currentDay","DayParser","LocalDayParser","wholeWeekDays","StandAloneLocalDayParser","getISODay","setISODay","ISODayParser","AMPMParser","AMPMMidnightParser","DayPeriodParser","Hour1to12Parser","isPM","Hour0to23Parser","Hour0To11Parser","Hour1To24Parser","MinuteParser","SecondParser","FractionOfSecondParser","setMilliseconds","getTimezoneOffsetInMilliseconds","utcDate","setUTCFullYear","ISOTimezoneWithZParser","ISOTimezoneParser","TimestampSecondsParser","TimestampMillisecondsParser","parsers","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","notWhitespaceRegExp","unescapedLatinCharacterRegExp","formatStr","referenceDate","_options$locale2","_options$locale2$opti","_options$locale3","_options$locale3$opti","_defaultOptions$local3","_defaultOptions$local4","invalidDate","subFnOptions","setters","firstCharacter","longFormatter","usedTokens","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","incompatibleToken","usedToken","fullToken","uniquePrioritySetters","setterArray","parseISO","_options$additionalDi","additionalDigits","dateStrings","timeString","patterns","dateTimeDelimiter","timeZoneDelimiter","timezone","splitDateString","parseYearResult","captures","restDateString","century","parseYear","dateRegex","isWeekDate","dayOfYear","parseDateUnit","_year","validateWeekDate","isoWeekYear","fourthOfJanuaryDay","setUTCDate","dayOfISOWeekYear","daysInMonths","validateDate","validateDayOfYearDate","timeRegex","parseTimeUnit","validateTime","parseTime","tmpDate","timezoneString","timezoneRegex","_hours","validateTimezone","parseTimezone","normalizeDates","differenceInCalendarDays","laterDate","earlierDate","_normalizeDates2","laterDate_","earlierDate_","laterStartOfDay","earlierStartOfDay","laterTimestamp","earlierTimestamp","getDayOfYear","addLeadingZeros","targetLength","lightFormatters","signedYear","numberOfDigits","dayPeriodEnum","signedWeekYear","weekYear","isoWeek","localDayOfWeek","isoDayOfWeek","dayPeriodEnumValue","_localize","timezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","absOffset","originalDate","isToken","preprocessor","formatterOptions","addMilliseconds","addSeconds","addMinutes","setTime","addHours","addMonths","dayOfMonth","endOfDesiredMonth","addQuarters","differenceInMilliseconds","getRoundingMethod","differenceInSeconds","roundingMethod","differenceInMinutes","dateLeft","dateRight","differenceInHours","differenceInDays","compareLocalAsc","difference","differenceInWeeks","compareAsc","differenceInCalendarMonths","endOfDay","endOfMonth","isLastDayOfMonth","differenceInMonths","workingLaterDate","isLastMonthNotFull","differenceInQuarters","differenceInCalendarYears","differenceInYears","startOfQuarter","endOfSecond","endOfMinute","endOfHour","endOfQuarter","endOfYear","FORMATS","_id","Stimulus","remove_button","initializeByClass","disableRemoval","tooltipTriggerEl","startCountdown","updateCountdown","timeRemainingValue","formattedTime","timeRemaining","sendRequest","showData","user_id","infoTarget","hasConsent","showBanner","cookie","getCookieExpirationDate","hideBanner","expirationDate","toUTCString","fetch_types","itemsTarget","typesTarget","fetchDisabledDates","startInstance","typesValue","fetchOpeningTimes","setTimeRange","startTarget","hasEndTarget","endInstance","endTarget","start_hour","start_minute","end_hour","end_minute","withTime","shown_element","selectTarget","individualTarget","allVirtualTypesTarget","allNonVirtualTypesTarget","formIdValue","requestSubmit","nearestToggleGroup","formId","toggleGroup","toggleTargets","unless","hideOnToggle","hintTarget","checkboxTarget","inputTarget","initTomSelect","dropdown_input","modal","openValue","autohideValue","onclickValue","variantValue","textValue","titleValue","variant","visibleElements","filterElements","nearestItems","evenPoint","getPointByAxis","getNearestItem","getElements","inRangeByAxis","rotated","cx","cy","isOlderPart","act","req","inLimit","hitSize","clampAll","inBoxRange","hitTolerance","inRangeX","inRangeY","inLabelRange","getElementCenterPoint","isPercentString","toPercent","toPositivePercent","boxAppering","defaultInitAnimation","doughnutLabel","polygon","getSize","positivePercent","measureLabelRectangle","labelSize","xAdjust","yAdjust","hasPadding","positionObj","toPosition","calculateLabelPosition$1","shouldFit","fitRatio","autoFit","toFonts","optFont","fonts","isBoundToPoint","xValue","yValue","adjust","initAnimationProperties","initAnim","applyDefault","execCallback","loadHooks","hooksContainer","widthCache","isImageOrCanvas","setBorderStyle","setShadowStyle","shadowColor","backgroundShadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","measureLabelSize","mapKey","fontsKey","calculateLabelSize","drawBox","borderShadowColor","drawLabel","elementValue","optColor","calculateTextAlignment","miterLimit","setTextStrokeStyle","lhs","applyLabelDecoration","applyLabelContent","notRadius","drawPointStyle","drawCallout","pointX","pointY","callout","calloutPosition","xPoints","yPoints","rotatedPoint","resolveCalloutAutoPosition","resolveCalloutPosition","isPointInRange","_getCalloutSeparatorC","separatorStart","separatorEnd","getCalloutSeparatorAdjust","getCalloutSeparatorCoord","_getCalloutSideCoord","sideStart","sideEnd","getCalloutSideAdjust","getCalloutSideCoord","limitedLineScale","xScaleID","startProp","endProp","yScaleID","scaleValue","retrieveScaleID","axes","getDimensionByScale","getChartPoint","resolveBoxProperties","xDim","getChartDimensionByScale","xMax","yDim","yMin","yMax","resolvePointProperties","adjustCenterX","adjustCenterY","getChartCircle","resolveLineProperties","resolveFullLineProperties","scaleId","_limitedLineScale$sca","dim","resolveLimitedLineProperties","resolveBoxAndLabelProperties","initProperties","optionScope","resolveLabelElementProperties$1","calculatePosition","boxOpts","_labelOpts$padding","padEnd","calculateX","calculateY","moveHooks","eventHooks","listened","moveListened","hovered","dispatchMoveEvents","handleMoveEvents","handleClickEvents","checkElements","elementHooks","invokeHook","hooked","callbackHook","adjustScaleRange","annotations","scaleIDOption","_annotation2","getScaleLimits","changeScaleLimit","suggestedLimit","scaleLimitDefined","verifyScaleIDs","annotation","verifyProperties","_arr2","BoxAnnotation","_rotated","DoughnutLabelAnnotation","_centerX","_centerY","_radius","_startAngle","_endAngle","_counterclockwise","_fitRatio","autoHide","isControllerVisible","_getControllerMeta","_meta$controller","square","space","angles","yk2","r2","getAngles","controllerMeta","getControllerMeta","hypo","getFitRatio","boxSize","LabelAnnotation","_visible","hBorderWidth","getLabelSize","_resolveBoxProperties","pointInLine","interpolateX","interpolateY","sqr","coordInCurve","cp","pointInCurve","coordAngleInCurve","LineAnnotation","mx","my","isPointInStroke","isOnLabel","xx","yy","_element$getProps2","dy","lenSq","intersects","rangeLimit","inAxisRange","_getArrowHeads2","getArrowHeads","startOpts","endOpts","startAdjust","endAdjust","ps","drawArrowHeadOnCurve","drawCurve","_getArrowHeads","drawArrowHead","isLineInArea","_limitPointToArea","limitPointToArea","_limitPointToArea2","limitLineToArea","controlPoint","getControlPoint","labelProperties","sizes","calculateAutoRotation","rotatedSize","spaceAround","calculateTAdjust","calculateT","xCoordinateSizes","yCoordinateSizes","adjustLabelCoordinate","calculateLabelPosition","resolveLabelElementProperties","arrowHeadsDefaults","lineSize","lineW","lineH","coordinate","halfSize","arrowStartOpts","arrowHeads","arrowEndOpts","getLineAdjust","arrowOpts","arrowOffsetX","_ref28","_ref29","EllipseAnnotation","xRadius","yRadius","cosAngle","sinAngle","pointInEllipse","PointAnnotation","inPointRange","PolygonAnnotation","isInside","bY","bX","pointIsInPolygon","axisPoints","sides","elProps","buildPointElement","_ref31","annotationTypes","directUpdater","hooks$1","optDefs","resolveObj","resolveType","animOpts","resolveAnimations","resyncElements","annotationOptions","getOrCreateElement","resolveElementProperties","toSkip","updateSubElements","resolveAnnotationOptions","mainElement","subElements","subElement","elementClass","_Object$keys3","chartStates","isNotDoughnutLabel","beforeRegister","pkg","ver","requireVersion","afterRegister","afterUnregister","unregister","beforeInit","verifyScaleOptions","updateListeners","updateHooks","afterDatasetsDraw","beforeEvent","afterDestroy","getAnnotations","_getAnnotationElementsAtEventForMode","caller","drawableElements","getDrawableElements","drawElement","annotationPlugin","chartDataValue","optionsValue","chartData","hasEndTimeTarget","hasEndDateTarget","urlValue","typeTargets","start_date","start_time","end_date","end_time","booking_id","bookingIdValue","queryString","showInfo","availability","buttonTarget","bookingId","eventsValue","SelectizeController","TooltipsController","DatetimeController","CountdownController","UserInfoController","CookieConsentController","DirectBookingController","FlatpickrController","OfftimesController","SubmitFormController","ToggleController","DisableWithCheckbox","Tomselect","ModalController","ToastController","ChartController","AvailabilityController","CalendarController","_templateObject","_templateObject2","_taggedTemplateLiteral","_asyncToGenerator","polyfillWrapFlushCallback","BuiltInHTMLElement","wrapperForTheName","raise","errorConstructor","submitter","DOMException","validateSubmitter","FrameLoadingStyle","submittersByForm","clickCaptured","candidate","vendor","SubmitEvent","FrameElement","delegateConstructor","sourceURLReloaded","loadingStyleChanged","completeChanged","sourceURLChanged","disabledChanged","lazy","eager","frameLoadingStyleFromString","isPreview","expandURL","locatable","baseURI","getAnchor","anchorMatch","getAction","pathname","getPathComponents","getLastPathComponent","isPrefixedBy","baseURL","getPrefix","locationIsVisitable","rootLocation","getRequestURL","toCacheKey","FetchMethod","FetchResponse","redirected","isHTML","activateScriptElement","createdScriptElement","getMetaContent","destinationElement","sourceElement","copyElementAttributes","nextAnimationFrame","nextEventLoopTick","parseHTMLDocument","unindent","uuid","markAsBusy","_elements","clearBusyState","_elements2","waitForLoad","timeoutInMilliseconds","getHistoryMethodForAction","history","replaceState","pushState","isAction","getVisitAction","getMetaElement","findClosestRecursively","FormSubmissionState","FormEnctype","FetchRequest","abortController","AbortController","resolveRequestPromise","defaultHeaders","_allowRequestToBeIntercepted","_receive","_perform","searchParams","prepareRequest","allowRequestToBeIntercepted","requestStarted","receive","willDelegateErrorHandling","requestErrored","requestFinished","_callee2","fetchResponse","_context2","requestPreventedHandlingResponse","requestSucceededWithResponse","requestFailedWithResponse","credentials","redirect","isSafe","signal","abortSignal","referrer","Accept","_callee3","requestInterception","_context3","AppearanceObserver","lastEntry","elementAppearedInViewport","intersectionObserver","unobserve","StreamMessage","streamElement","inertScriptElement","importStreamElements","FormSubmission","formElement","mustRedirect","initialized","formData","buildFormData","mergeFormDataEntries","fetchRequest","post","put","patch","fetchMethodFromString","formElementAction","urlEncoded","stringFormData","encoding","multipart","plain","formEnctypeFromString","_callee4","_FormSubmissionState","requesting","confirmationMessage","_context4","confirmMethod","_FormSubmissionState2","stopping","cookieName","getCookieValue","requestAcceptsTurboStreamResponse","acceptResponseType","waiting","setSubmitsWith","formSubmission","formSubmissionStarted","clientError","serverError","formSubmissionFailedWithResponse","requestMustRedirect","responseSucceededWithoutRedirect","formSubmissionErrored","receiving","formSubmissionSucceededWithResponse","resetSubmitterText","formSubmissionFinished","submitsWith","originalSubmitText","_submitter","Snapshot","getElementForAnchor","queryPermanentElementsAll","_getPermanentElementById","permanentElementMap","permanentElements","currentPermanentElement","newPermanentElement","getPermanentElementById","FormSubmitObserver","submitCaptured","submitBubbled","submissionDoesNotDismissDialog","HTMLIFrameElement","submissionDoesNotTargetIFrame","willSubmitForm","formSubmitted","View","resolveRenderPromise","resolveInterceptionPromise","_renderSnapshot","_prepareToRenderSnapshot","scrollToElement","focusElement","scrollToPosition","scrollToAnchor","scrollIntoView","scrollRoot","_callee5","renderer","shouldRender","renderInterception","_context5","newSnapshot","renderPromise","prepareToRenderSnapshot","renderElement","allowsImmediateRender","renderSnapshot","viewRenderedSnapshot","preloadOnLoadLinksForView","finishRenderingSnapshot","reloadReason","_x3","reason","viewInvalidated","_callee6","_context6","markAsPreview","prepareToRender","_x4","_callee7","_context7","_x5","finishRendering","FrameView","_View","LinkInterceptor","clickBubbled","respondsToEventTarget","linkClicked","shouldInterceptLinkClick","linkClickIntercepted","willVisit","_event","LinkClickObserver","MouseEvent","clickEventIsSignificant","findLinkFromClickTarget","doesNotTargetIFrame","_location2","getLocationForLink","willFollowLinkToLocation","followedLinkToLocation","isContentEditable","FormLinkClickObserver","linkInterceptor","willSubmitFormLinkToLocation","turboFrame","turboAction","turboConfirm","submittedFormLinkToLocation","Bardo","_preservingPermanentElements","_this$permanentElemen","enteringBardo","replaceNewPermanentElementWithPlaceholder","replaceCurrentPermanentElementWithClone","replacePlaceholderWithPermanentElement","leavingBardo","permanentElement","createPlaceholderForPermanentElement","getPlaceholderById","placeholders","_callee8","bardo","_context8","enter","leave","_x6","_x7","_x8","Renderer","currentSnapshot","willRender","resolvingFunctions","_preservingPermanentElements2","_callee9","_context9","preservingPermanentElements","_x9","connectedSnapshot","firstAutofocusableElement","elementIsFocusable","getPermanentElementMapForSnapshot","_Renderer","FrameRenderer","_render2","_callee10","_context10","loadFrameElement","scrollFrameIntoView","focusFirstAutofocusableElement","activateScriptElements","willRenderFrame","currentElement","newElement","autoscroll","readScrollBehavior","newScriptElements","activatedScriptElement","destinationRange","selectNodeContents","deleteContents","frameElement","sourceRange","extractContents","ProgressBar","hiding","trickle","stylesheetElement","createStylesheetElement","createProgressElement","installStylesheetElement","installProgressElement","startTrickling","fadeProgressElement","uninstallProgressElement","stopTrickling","animationDuration","trickleInterval","defaultCSS","HeadSnapshot","_Snapshot","detailsByOuterHTML","elementIsNoscript","elementWithoutNonce","details","tracked","elementIsTracked","getElementsMatchingTypeNotInSnapshot","matchedType","_this17$detailsByOute","findMetaElementByName","elementIsMetaElementWithName","elementIsScript","elementIsStylesheet","TimingMetric","VisitState","PageSnapshot","_Snapshot2","headSnapshot","clonedElement","selectElements","clonedSelectElements","selectedOptions","_option","getSetting","cacheControlValue","fromDocument","SystemStatusCode","historyChanged","visitCachedSnapshot","updateHistory","shouldCacheSnapshot","acceptsStreamResponse","Visit","restorationIdentifier","timingMetrics","followedRedirect","scrolled","snapshotCached","snapshotHTML","isSamePage","locationWithActionIsSamePage","_render3","_requestFailedWithResponse","_requestSucceededWithResponse","getRestorationDataForIdentifier","recordTimingMetric","visitStart","visitStarted","cancelRender","canceled","visitEnd","followRedirect","visitCompleted","failed","visitFailed","hasPreloadedResponse","simulateRequest","shouldIssueRequest","startRequest","recordResponse","finishRequest","requestStart","visitRequestStarted","isSuccessful","visitRequestCompleted","visitRequestFailedWithStatusCode","requestEnd","visitRequestFinished","_this$response","responseHTML","_callee11","_context11","cacheSnapshot","renderPage","fromHTMLString","performScroll","visitRendered","renderError","getCachedSnapshotForLocation","getPreloadedSnapshot","hasAnchor","getCachedSnapshot","_callee12","_context12","redirectedToLocation","visitProposedToLocation","_callee13","_context13","changeHistory","_response","_callee14","_context14","contentTypeMismatch","_x10","_x11","_callee15","_context15","_x12","_x13","_error","networkFailure","forceReloaded","scrollToRestoredPosition","scrollToTop","visitScrolledToSamePageLocation","lastRenderedLocation","scrollPosition","restorationData","metric","hasCachedSnapshot","_callee16","_context16","frame","_x14","PageStage","BrowserAdapter","session","showProgressBar","startVisit","visit","loadCachedSnapshot","issueRequest","goToSamePageAnchor","showVisitProgressBarAfterDelay","loadResponse","timeoutFailure","reload","_visit","hideVisitProgressBar","_formSubmission","showFormProgressBarAfterDelay","hideFormProgressBar","visitProgressBarTimeout","progressBarDelay","formProgressBarTimeout","CacheObserver","deprecatedSelector","removeTemporaryElements","temporaryElements","temporaryElementsWithDeprecation","FrameRedirector","formSubmitObserver","_location","shouldRedirect","findFrameElement","shouldSubmit","submissionIsNavigatable","elementIsNavigatable","History","pageLoaded","onPopState","shouldHandlePopState","turbo","historyPoppedToLocationWithRestorationIdentifier","onPageLoad","_callee17","_context17","_x15","additionalData","previousScrollRestoration","scrollRestoration","pageIsLoaded","Navigator","_formSubmissionFailedWithResponse","_formSubmissionSucceededWithResponse","allowsVisitingLocationWithAction","currentVisit","_callee18","visitOptions","_context18","clearSnapshotCache","getActionForFormSubmission","proposeVisit","_x16","_x17","_callee19","_context19","_x18","_x19","currentAnchor","isRestorationToTop","oldURL","newURL","PageObserver","stage","interpretReadyState","pageIsInteractive","pageIsComplete","pageWillUnload","pageBecameInteractive","ScrollObserver","onScroll","scrollPositionChanged","StreamMessageRenderer","permanentElementsInDocument","permanentElementInDocument","elementInStream","getPermanentElementMapForFragment","StreamObserver","inspectFetchResponse","fetchResponseFromEvent","fetchResponseIsStream","receiveMessageResponse","receiveMessageEvent","receiveMessageHTML","_receiveMessageResponse","streamSourceIsConnected","_callee20","_context20","_x20","receivedMessageFromStream","_Renderer2","ErrorRenderer","_render4","_callee21","_context21","replaceHeadAndBody","_document","newHead","scriptElements","replaceableElement","_document2","_Renderer3","PageRenderer","_assignNewBody","_mergeProvisionalElements","_copyNewHeadStylesheetElements","_replaceBody","_mergeHead","_render5","_prepareToRender","isVisitable","trackedElementsAreIdentical","_callee22","_context22","mergeHead","_callee23","_context23","replaceBody","_callee24","mergedHeadElements","newStylesheetElements","_context24","mergeProvisionalElements","copyNewHeadStylesheetElements","copyNewHeadScriptElements","_callee26","_context26","_callee25","_context25","activateNewBody","assignNewBody","currentHeadSnapshot","trackedElementSignature","newHeadSnapshot","_callee27","loadingElements","_context27","newHeadStylesheetElements","newHeadScriptElements","_callee28","newHeadElements","_element2","_context28","newHeadProvisionalElements","currentHeadProvisionalElements","isCurrentElementInElementList","elementList","isEqualNode","adoptNode","activateNewBodyScriptElements","newBodyScriptElements","_callee29","_context29","getStylesheetElementsNotInSnapshot","getScriptElementsNotInSnapshot","provisionalElements","HTMLBodyElement","SnapshotCache","snapshots","_View2","PageView","_cacheSnapshot","snapshotCache","_callee30","_location3","cachedSnapshot","_args30","_context30","isCacheable","viewWillCacheSnapshot","fromElement","Preloader","_preloadURL","_callee31","_context31","_x21","Session","preloader","pageObserver","cacheObserver","linkClickObserver","scrollObserver","streamObserver","formLinkClickObserver","frameRedirector","streamMessageRenderer","drive","formMode","connectStreamSource","disconnectStreamSource","pageInvalidated","updateRestorationData","applicationAllowsFollowingLinkToLocation","getActionForLink","applicationAllowsVisitingLocation","extendURLWithDeprecatedProperties","notifyApplicationAfterVisitingLocation","notifyApplicationAfterPageLoad","getTimingMetrics","notifyApplicationAfterVisitingSamePageLocation","assumeControlOfScrollRestoration","relinquishControlOfScrollRestoration","renderStreamMessage","notifyApplicationBeforeCachingSnapshot","notifyApplicationBeforeRender","_snapshot","_isPreview","notifyApplicationAfterRender","notifyApplicationAfterFrameLoad","notifyApplicationAfterFrameRender","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","newBody","timing","HashChangeEvent","submitterIsNavigatable","withinFrame","deprecatedLocationPropertyDescriptors","absoluteURL","Cache","setCacheControl","StreamActions","targetElements","templateContent","removeDuplicateTargetChildren","navigator$1","Turbo","registerAdapter","setProgressBarDelay","setConfirmMethod","setFormMode","TurboFrameMissingError","FrameController","fetchResponseLoaded","_fetchResponse","currentFetchRequest","resolveVisitPromise","connected","hasBeenLoaded","ignoredAttributes","previousFrameElement","replaceChildren","appearanceObserver","_extractForeignFrameElement","_visitResponse","_handleUnvisitableFrameResponse","_visit2","_loadFrameResponse","_requestFailedWithResponse2","_requestSucceededWithResponse2","_loadResponse","_loadSourceURL","loadingStyle","loadSourceURL","isIgnoringChangesTo","ignoringChangesToAttribute","_callee32","_context32","sourceURL","_callee33","_document3","_context33","loadFrameResponse","handleUnvisitableFrameResponse","_x22","proposeVisitIfNavigatedWithAction","shouldInterceptNavigation","navigateFrame","currentNavigationElement","_callee34","_context34","_x23","_x24","_callee35","_context35","_x25","_x26","_ref33","_ref34","newFrame","_newElement","_callee36","newFrameElement","_context36","extractForeignFrameElement","frameRendered","frameLoaded","willHandleFrameMissingFromResponse","handleFrameMissingFromResponse","_x27","_x28","_callee37","_context37","_x29","withCurrentNavigationElement","pageSnapshot","_callee38","_context38","visitResponse","_x30","_ref35","_callee39","_args39","_context39","Response","_x31","missing","throwFrameMissingError","_callee40","wrapped","_context40","_x32","getFrameElementById","_callee41","_context41","activateElement","_x33","formActionIsVisitable","currentURL","consumer","StreamElement","_renderElement","_render6","_connectedCallback","_callee42","_context42","_callee44","_context44","_callee43","_context43","beforeRenderEvent","duplicateChildren","existingChildren","flatMap","newChildrenIds","actionFunction","targetElementsById","targetElementsByQuery","newStream","_callee45","_context45","performAction","_x34","StreamSourceElement","_HTMLElement3","streamSource","WebSocket","EventSource","getConsumer","_getConsumer","setConsumer","newConsumer","_createConsumer","_yield$import","createConsumer","subscribeTo","_subscribeTo","channel","mixin","_yield$getConsumer","subscriptions","walk","TurboCableStreamSourceElement","received","dispatchMessageEvent","subscriptionConnected","disconnected","subscriptionDisconnected","subscription","unsubscribe","MessageEvent","signed_stream_name","isBodyInit","formMethod","HTMLButtonElement","determineFormMethod","overrideMethod","determineFetchMethod","AttachmentUpload","directUploadUrl","directUploadDidComplete","setUploadProgress","sgid","attachable_sgid","createBlobUrl","signedId","blobUrlTemplate"],"mappings":"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","file":"js/application-7b691bffa52c62c82e09.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"2\":\"vendors~actioncable\"}[chunkId]||chunkId) + \"-\" + {\"2\":\"9981f0443370a5b7e14f\"}[chunkId] + \".chunk.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 96);\n","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/*!\n * Chart.js v4.4.5\n * https://www.chartjs.org\n * (c) 2024 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n/**\n * @namespace Chart.helpers\n */\n\n/**\n* An empty function that can be used, for example, for optional callback.\n*/\n\nfunction noop() {\n  /* noop */\n}\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\n\n\nvar uid = function () {\n  var id = 0;\n  return function () {\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 */\n\n\nfunction isNullOrUndef(value) {\n  return value === null || typeof value === 'undefined';\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 */\n\n\nfunction isArray(value) {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n\n  var type = Object.prototype.toString.call(value);\n\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n\n  return false;\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 */\n\n\nfunction isObject(value) {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */\n\n\nfunction isNumberFinite(value) {\n  return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\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 */\n\n\nfunction finiteOrDefault(value, defaultValue) {\n  return isNumberFinite(value) ? value : defaultValue;\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 */\n\n\nfunction valueOrDefault(value, defaultValue) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\n\nvar toPercentage = function toPercentage(value, dimension) {\n  return typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\n};\n\nvar toDimension = function toDimension(value, dimension) {\n  return typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +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 */\n\n\nfunction callback(fn, args, thisArg) {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\n\nfunction each(loopable, fn, thisArg, reverse) {\n  var i, len, keys;\n\n  if (isArray(loopable)) {\n    len = loopable.length;\n\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\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\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 */\n\n\nfunction _elementsEqual(a0, a1) {\n  var i, ilen, v0, v1;\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 * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\n\n\nfunction clone(source) {\n  if (isArray(source)) {\n    return source.map(clone);\n  }\n\n  if (isObject(source)) {\n    var target = Object.create(null);\n    var keys = Object.keys(source);\n    var klen = keys.length;\n    var 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) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\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 */\n\n\nfunction _merger(key, target, source, options) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  var tval = target[key];\n  var 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\nfunction merge(target, source, options) {\n  var sources = isArray(source) ? source : [source];\n  var ilen = sources.length;\n\n  if (!isObject(target)) {\n    return target;\n  }\n\n  options = options || {};\n  var merger = options.merger || _merger;\n  var current;\n\n  for (var i = 0; i < ilen; ++i) {\n    current = sources[i];\n\n    if (!isObject(current)) {\n      continue;\n    }\n\n    var keys = Object.keys(current);\n\n    for (var k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, current, options);\n    }\n  }\n\n  return target;\n}\n\nfunction mergeIf(target, source) {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  return merge(target, source, {\n    merger: _mergerIf\n  });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\n\n\nfunction _mergerIf(key, target, source) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  var tval = target[key];\n  var 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 * @private\n */\n\n\nfunction _deprecated(scope, value, previous, current) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n  }\n} // resolveObjectKey resolver cache\n\n\nvar keyResolvers = {\n  // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n  '': function _(v) {\n    return v;\n  },\n  // default resolvers\n  x: function x(o) {\n    return o.x;\n  },\n  y: function y(o) {\n    return o.y;\n  }\n};\n/**\n * @private\n */\n\nfunction _splitKey(key) {\n  var parts = key.split('.');\n  var keys = [];\n  var tmp = '';\n\n  var _iterator = _createForOfIteratorHelper(parts),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var part = _step.value;\n      tmp += part;\n\n      if (tmp.endsWith('\\\\')) {\n        tmp = tmp.slice(0, -1) + '.';\n      } else {\n        keys.push(tmp);\n        tmp = '';\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  return keys;\n}\n\nfunction _getKeyResolver(key) {\n  var keys = _splitKey(key);\n\n  return function (obj) {\n    var _iterator2 = _createForOfIteratorHelper(keys),\n        _step2;\n\n    try {\n      for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n        var k = _step2.value;\n\n        if (k === '') {\n          break;\n        }\n\n        obj = obj && obj[k];\n      }\n    } catch (err) {\n      _iterator2.e(err);\n    } finally {\n      _iterator2.f();\n    }\n\n    return obj;\n  };\n}\n\nfunction resolveObjectKey(obj, key) {\n  var resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n\n  return resolver(obj);\n}\n/**\n * @private\n */\n\n\nfunction _capitalize(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nvar defined = function defined(value) {\n  return typeof value !== 'undefined';\n};\n\nvar isFunction = function isFunction(value) {\n  return typeof value === 'function';\n}; // Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\n\n\nvar setsEqual = function setsEqual(a, b) {\n  if (a.size !== b.size) {\n    return false;\n  }\n\n  var _iterator3 = _createForOfIteratorHelper(a),\n      _step3;\n\n  try {\n    for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n      var item = _step3.value;\n\n      if (!b.has(item)) {\n        return false;\n      }\n    }\n  } catch (err) {\n    _iterator3.e(err);\n  } finally {\n    _iterator3.f();\n  }\n\n  return true;\n};\n/**\n * @param e - The event\n * @private\n */\n\n\nfunction _isClickEvent(e) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\n\nvar PI = Math.PI;\nvar TAU = 2 * PI;\nvar PITAU = TAU + PI;\nvar INFINITY = Number.POSITIVE_INFINITY;\nvar RAD_PER_DEG = PI / 180;\nvar HALF_PI = PI / 2;\nvar QUARTER_PI = PI / 4;\nvar TWO_THIRDS_PI = PI * 2 / 3;\nvar log10 = Math.log10;\nvar sign = Math.sign;\n\nfunction almostEquals(x, y, epsilon) {\n  return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\n\n\nfunction niceNum(range) {\n  var roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  var niceRange = Math.pow(10, Math.floor(log10(range)));\n  var fraction = range / niceRange;\n  var niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\n\n\nfunction _factorize(value) {\n  var result = [];\n  var sqrt = Math.sqrt(value);\n  var i;\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\n  if (sqrt === (sqrt | 0)) {\n    result.push(sqrt);\n  }\n\n  result.sort(function (a, b) {\n    return a - b;\n  }).pop();\n  return result;\n}\n\nfunction isNumber(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n}\n\nfunction almostWhole(x, epsilon) {\n  var rounded = Math.round(x);\n  return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */\n\n\nfunction _setMinAndMaxByKey(array, target, property) {\n  var i, ilen, value;\n\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\n\nfunction toRadians(degrees) {\n  return degrees * (PI / 180);\n}\n\nfunction toDegrees(radians) {\n  return radians * (180 / PI);\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 */\n\n\nfunction _decimalPlaces(x) {\n  if (!isNumberFinite(x)) {\n    return;\n  }\n\n  var e = 1;\n  var p = 0;\n\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n\n  return p;\n} // Gets the angle from vertical upright to the point about a centre.\n\n\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n  var distanceFromXCenter = anglePoint.x - centrePoint.x;\n  var distanceFromYCenter = anglePoint.y - centrePoint.y;\n  var radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n  var 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: angle,\n    distance: radialDistanceFromCenter\n  };\n}\n\nfunction distanceBetweenPoints(pt1, pt2) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\n\n\nfunction _angleDiff(a, b) {\n  return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\n\n\nfunction _normalizeAngle(a) {\n  return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */\n\n\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n  var a = _normalizeAngle(angle);\n\n  var s = _normalizeAngle(start);\n\n  var e = _normalizeAngle(end);\n\n  var angleToStart = _normalizeAngle(s - a);\n\n  var angleToEnd = _normalizeAngle(e - a);\n\n  var startToAngle = _normalizeAngle(a - s);\n\n  var endToAngle = _normalizeAngle(a - e);\n\n  return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\n\n\nfunction _limitValue(value, min, max) {\n  return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */\n\n\nfunction _int16Range(value) {\n  return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\n\n\nfunction _isBetween(value, start, end) {\n  var epsilon = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1e-6;\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n  cmp = cmp || function (index) {\n    return table[index] < value;\n  };\n\n  var hi = table.length - 1;\n  var lo = 0;\n  var mid;\n\n  while (hi - lo > 1) {\n    mid = lo + hi >> 1;\n\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n\n  return {\n    lo: lo,\n    hi: 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 */\n\n\nvar _lookupByKey = function _lookupByKey(table, key, value, last) {\n  return _lookup(table, value, last ? function (index) {\n    var ti = table[index][key];\n    return ti < value || ti === value && table[index + 1][key] === value;\n  } : function (index) {\n    return table[index][key] < value;\n  });\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 */\n\n\nvar _rlookupByKey = function _rlookupByKey(table, key, value) {\n  return _lookup(table, value, function (index) {\n    return table[index][key] >= value;\n  });\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 */\n\n\nfunction _filterBetween(values, min, max) {\n  var start = 0;\n  var end = values.length;\n\n  while (start < end && values[start] < min) {\n    start++;\n  }\n\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n\n  return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\n\nvar arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\n\nfunction listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n\n    return;\n  }\n\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n  arrayEvents.forEach(function (key) {\n    var method = '_onData' + _capitalize(key);\n\n    var base = array[key];\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value: function value() {\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        var res = base.apply(this, args);\n\n        array._chartjs.listeners.forEach(function (object) {\n          if (typeof object[method] === 'function') {\n            object[method].apply(object, args);\n          }\n        });\n\n        return res;\n      }\n    });\n  });\n}\n\nfunction unlistenArrayEvents(array, listener) {\n  var stub = array._chartjs;\n\n  if (!stub) {\n    return;\n  }\n\n  var listeners = stub.listeners;\n  var index = listeners.indexOf(listener);\n\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n\n  if (listeners.length > 0) {\n    return;\n  }\n\n  arrayEvents.forEach(function (key) {\n    delete array[key];\n  });\n  delete array._chartjs;\n}\n/**\n * @param items\n */\n\n\nfunction _arrayUnique(items) {\n  var set = new Set(items);\n\n  if (set.size === items.length) {\n    return items;\n  }\n\n  return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/\n\n\nvar requestAnimFrame = function () {\n  if (typeof window === 'undefined') {\n    return function (callback) {\n      return callback();\n    };\n  }\n\n  return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\n\n\nfunction throttled(fn, thisArg) {\n  var argsToUse = [];\n  var ticking = false;\n  return function () {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    // Save the args for use later\n    argsToUse = args;\n\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, function () {\n        ticking = false;\n        fn.apply(thisArg, argsToUse);\n      });\n    }\n  };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */\n\n\nfunction debounce(fn, delay) {\n  var timeout;\n  return function () {\n    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n\n    return delay;\n  };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\n\n\nvar _toLeftRightCenter = function _toLeftRightCenter(align) {\n  return 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 */\n\n\nvar _alignStartEnd = function _alignStartEnd(align, start, end) {\n  return 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 */\n\n\nvar _textX = function _textX(align, left, right, rtl) {\n  var check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */\n\n\nfunction _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n  var pointCount = points.length;\n  var start = 0;\n  var count = pointCount;\n\n  if (meta._sorted) {\n    var iScale = meta.iScale,\n        _parsed = meta._parsed;\n    var axis = iScale.axis;\n\n    var _iScale$getUserBounds = iScale.getUserBounds(),\n        min = _iScale$getUserBounds.min,\n        max = _iScale$getUserBounds.max,\n        minDefined = _iScale$getUserBounds.minDefined,\n        maxDefined = _iScale$getUserBounds.maxDefined;\n\n    if (minDefined) {\n      start = _limitValue(Math.min( // @ts-expect-error Need to type _parsed\n      _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n      animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n    }\n\n    if (maxDefined) {\n      count = _limitValue(Math.max( // @ts-expect-error Need to type _parsed\n      _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n      animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n\n  return {\n    start: start,\n    count: count\n  };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\n\n\nfunction _scaleRangesChanged(meta) {\n  var xScale = meta.xScale,\n      yScale = meta.yScale,\n      _scaleRanges = meta._scaleRanges;\n  var newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n\n  var changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n\nvar atEdge = function atEdge(t) {\n  return t === 0 || t === 1;\n};\n\nvar elasticIn = function elasticIn(t, s, p) {\n  return -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\n};\n\nvar elasticOut = function elasticOut(t, s, p) {\n  return 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 */\n\n\nvar effects = {\n  linear: function linear(t) {\n    return t;\n  },\n  easeInQuad: function easeInQuad(t) {\n    return t * t;\n  },\n  easeOutQuad: function easeOutQuad(t) {\n    return -t * (t - 2);\n  },\n  easeInOutQuad: function easeInOutQuad(t) {\n    return (t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1);\n  },\n  easeInCubic: function easeInCubic(t) {\n    return t * t * t;\n  },\n  easeOutCubic: function easeOutCubic(t) {\n    return (t -= 1) * t * t + 1;\n  },\n  easeInOutCubic: function easeInOutCubic(t) {\n    return (t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2);\n  },\n  easeInQuart: function easeInQuart(t) {\n    return t * t * t * t;\n  },\n  easeOutQuart: function easeOutQuart(t) {\n    return -((t -= 1) * t * t * t - 1);\n  },\n  easeInOutQuart: function easeInOutQuart(t) {\n    return (t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2);\n  },\n  easeInQuint: function easeInQuint(t) {\n    return t * t * t * t * t;\n  },\n  easeOutQuint: function easeOutQuint(t) {\n    return (t -= 1) * t * t * t * t + 1;\n  },\n  easeInOutQuint: function easeInOutQuint(t) {\n    return (t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2);\n  },\n  easeInSine: function easeInSine(t) {\n    return -Math.cos(t * HALF_PI) + 1;\n  },\n  easeOutSine: function easeOutSine(t) {\n    return Math.sin(t * HALF_PI);\n  },\n  easeInOutSine: function easeInOutSine(t) {\n    return -0.5 * (Math.cos(PI * t) - 1);\n  },\n  easeInExpo: function easeInExpo(t) {\n    return t === 0 ? 0 : Math.pow(2, 10 * (t - 1));\n  },\n  easeOutExpo: function easeOutExpo(t) {\n    return t === 1 ? 1 : -Math.pow(2, -10 * t) + 1;\n  },\n  easeInOutExpo: function easeInOutExpo(t) {\n    return atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2);\n  },\n  easeInCirc: function easeInCirc(t) {\n    return t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1);\n  },\n  easeOutCirc: function easeOutCirc(t) {\n    return Math.sqrt(1 - (t -= 1) * t);\n  },\n  easeInOutCirc: function easeInOutCirc(t) {\n    return (t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n  },\n  easeInElastic: function easeInElastic(t) {\n    return atEdge(t) ? t : elasticIn(t, 0.075, 0.3);\n  },\n  easeOutElastic: function easeOutElastic(t) {\n    return atEdge(t) ? t : elasticOut(t, 0.075, 0.3);\n  },\n  easeInOutElastic: function easeInOutElastic(t) {\n    var s = 0.1125;\n    var p = 0.45;\n    return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n  easeInBack: function easeInBack(t) {\n    var s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n  easeOutBack: function easeOutBack(t) {\n    var s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n  easeInOutBack: function easeInOutBack(t) {\n    var s = 1.70158;\n\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n    }\n\n    return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n  },\n  easeInBounce: function easeInBounce(t) {\n    return 1 - effects.easeOutBounce(1 - t);\n  },\n  easeOutBounce: function easeOutBounce(t) {\n    var m = 7.5625;\n    var d = 2.75;\n\n    if (t < 1 / d) {\n      return m * t * t;\n    }\n\n    if (t < 2 / d) {\n      return m * (t -= 1.5 / d) * t + 0.75;\n    }\n\n    if (t < 2.5 / d) {\n      return m * (t -= 2.25 / d) * t + 0.9375;\n    }\n\n    return m * (t -= 2.625 / d) * t + 0.984375;\n  },\n  easeInOutBounce: function easeInOutBounce(t) {\n    return t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\n  }\n};\n\nfunction isPatternOrGradient(value) {\n  if (value && _typeof(value) === 'object') {\n    var type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n\n  return false;\n}\n\nfunction color(value) {\n  return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nfunction getHoverColor(value) {\n  return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nvar numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nvar colors = ['color', 'borderColor', 'backgroundColor'];\n\nfunction 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  defaults.describe('animation', {\n    _fallback: false,\n    _indexable: false,\n    _scriptable: function _scriptable(name) {\n      return 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  defaults.describe('animations', {\n    _fallback: 'animation'\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\n        }\n      }\n    },\n    hide: {\n      animations: {\n        colors: {\n          to: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          easing: 'linear',\n          fn: function fn(v) {\n            return v | 0;\n          }\n        }\n      }\n    }\n  });\n}\n\nfunction 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\nvar intlCache = new Map();\n\nfunction getNumberFormat(locale, options) {\n  options = options || {};\n  var cacheKey = locale + JSON.stringify(options);\n  var formatter = intlCache.get(cacheKey);\n\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n\n  return formatter;\n}\n\nfunction formatNumber(num, locale, options) {\n  return getNumberFormat(locale, options).format(num);\n}\n\nvar formatters = {\n  values: function values(value) {\n    return isArray(value) ? value : '' + value;\n  },\n  numeric: function numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n\n    var locale = this.chart.options.locale;\n    var notation;\n    var delta = tickValue;\n\n    if (ticks.length > 1) {\n      var maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n\n      delta = calculateDelta(tickValue, ticks);\n    }\n\n    var logDelta = log10(Math.abs(delta));\n    var numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n    var options = {\n      notation: notation,\n      minimumFractionDigits: numDecimal,\n      maximumFractionDigits: numDecimal\n    };\n    Object.assign(options, this.options.ticks.format);\n    return formatNumber(tickValue, locale, options);\n  },\n  logarithmic: function logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n\n    var remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n\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\n    return '';\n  }\n};\n\nfunction calculateDelta(tickValue, ticks) {\n  var delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    delta = tickValue - Math.floor(tickValue);\n  }\n\n  return delta;\n}\n\nvar Ticks = {\n  formatters: formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n  defaults.set('scale', {\n    display: true,\n    offset: false,\n    reverse: false,\n    beginAtZero: false,\n    bounds: 'ticks',\n    clip: true,\n    grace: 0,\n    grid: {\n      display: true,\n      lineWidth: 1,\n      drawOnChartArea: true,\n      drawTicks: true,\n      tickLength: 8,\n      tickWidth: function tickWidth(_ctx, options) {\n        return options.lineWidth;\n      },\n      tickColor: function tickColor(_ctx, options) {\n        return options.color;\n      },\n      offset: false\n    },\n    border: {\n      display: true,\n      dash: [],\n      dashOffset: 0.0,\n      width: 1\n    },\n    title: {\n      display: false,\n      text: '',\n      padding: {\n        top: 4,\n        bottom: 4\n      }\n    },\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      callback: Ticks.formatters.values,\n      minor: {},\n      major: {},\n      align: 'center',\n      crossAlign: 'near',\n      showLabelBackdrop: false,\n      backdropColor: 'rgba(255, 255, 255, 0.75)',\n      backdropPadding: 2\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  defaults.describe('scale', {\n    _fallback: false,\n    _scriptable: function _scriptable(name) {\n      return !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser';\n    },\n    _indexable: function _indexable(name) {\n      return name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash';\n    }\n  });\n  defaults.describe('scales', {\n    _fallback: 'scale'\n  });\n  defaults.describe('scale.ticks', {\n    _scriptable: function _scriptable(name) {\n      return name !== 'backdropPadding' && name !== 'callback';\n    },\n    _indexable: function _indexable(name) {\n      return name !== 'backdropPadding';\n    }\n  });\n}\n\nvar overrides = Object.create(null);\nvar descriptors = Object.create(null);\n\nfunction getScope$1(node, key) {\n  if (!key) {\n    return node;\n  }\n\n  var keys = key.split('.');\n\n  for (var i = 0, n = keys.length; i < n; ++i) {\n    var k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n\n  return node;\n}\n\nfunction _set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope$1(root, scope), values);\n  }\n\n  return merge(getScope$1(root, ''), scope);\n}\n\nvar Defaults = /*#__PURE__*/function () {\n  function Defaults(_descriptors, _appliers) {\n    _classCallCheck(this, Defaults);\n\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\n    this.devicePixelRatio = function (context) {\n      return context.chart.platform.getDevicePixelRatio();\n    };\n\n    this.elements = {};\n    this.events = ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'];\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\n    this.hoverBackgroundColor = function (ctx, options) {\n      return getHoverColor(options.backgroundColor);\n    };\n\n    this.hoverBorderColor = function (ctx, options) {\n      return getHoverColor(options.borderColor);\n    };\n\n    this.hoverColor = function (ctx, options) {\n      return getHoverColor(options.color);\n    };\n\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    this.describe(_descriptors);\n    this.apply(_appliers);\n  }\n\n  _createClass(Defaults, [{\n    key: \"set\",\n    value: function set(scope, values) {\n      return _set(this, scope, values);\n    }\n  }, {\n    key: \"get\",\n    value: function get(scope) {\n      return getScope$1(this, scope);\n    }\n  }, {\n    key: \"describe\",\n    value: function describe(scope, values) {\n      return _set(descriptors, scope, values);\n    }\n  }, {\n    key: \"override\",\n    value: function override(scope, values) {\n      return _set(overrides, scope, values);\n    }\n  }, {\n    key: \"route\",\n    value: function route(scope, name, targetScope, targetName) {\n      var _Object$definePropert;\n\n      var scopeObject = getScope$1(this, scope);\n      var targetScopeObject = getScope$1(this, targetScope);\n      var privateName = '_' + name;\n      Object.defineProperties(scopeObject, (_Object$definePropert = {}, _defineProperty(_Object$definePropert, privateName, {\n        value: scopeObject[name],\n        writable: true\n      }), _defineProperty(_Object$definePropert, name, {\n        enumerable: true,\n        get: function get() {\n          var local = this[privateName];\n          var target = targetScopeObject[targetName];\n\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n\n          return valueOrDefault(local, target);\n        },\n        set: function set(value) {\n          this[privateName] = value;\n        }\n      }), _Object$definePropert));\n    }\n  }, {\n    key: \"apply\",\n    value: function apply(appliers) {\n      var _this = this;\n\n      appliers.forEach(function (apply) {\n        return apply(_this);\n      });\n    }\n  }]);\n\n  return Defaults;\n}();\n\nvar defaults = /* #__PURE__ */new Defaults({\n  _scriptable: function _scriptable(name) {\n    return !name.startsWith('on');\n  },\n  _indexable: function _indexable(name) {\n    return name !== 'events';\n  },\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false\n  }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\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 */\n\nfunction toFontString(font) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n\n  return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */\n\n\nfunction _measureText(ctx, data, gc, longest, string) {\n  var textWidth = data[string];\n\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n\n  return longest;\n}\n/**\n * @private\n */\n// eslint-disable-next-line complexity\n\n\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n  cache = cache || {};\n  var data = cache.data = cache.data || {};\n  var 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  ctx.font = font;\n  var longest = 0;\n  var ilen = arrayOfThings.length;\n  var i, j, jlen, thing, nestedThing;\n\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i]; // Undefined strings and arrays should not be measured\n\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]; // Undefined strings and arrays should not be measured\n\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  var gcLen = gc.length / 2;\n\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n\n    gc.splice(0, gcLen);\n  }\n\n  return longest;\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 */\n\n\nfunction _alignPixel(chart, pixel, width) {\n  var devicePixelRatio = chart.currentDevicePixelRatio;\n  var halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */\n\n\nfunction clearCanvas(canvas, ctx) {\n  if (!ctx && !canvas) {\n    return;\n  }\n\n  ctx = ctx || canvas.getContext('2d');\n  ctx.save(); // canvas.width and canvas.height do not consider the canvas transform,\n  // while clearRect does\n\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\n\nfunction drawPoint(ctx, options, x, y) {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  drawPointLegend(ctx, options, x, y, null);\n} // eslint-disable-next-line complexity\n\n\nfunction drawPointLegend(ctx, options, x, y, w) {\n  var type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n  var style = options.pointStyle;\n  var rotation = options.rotation;\n  var radius = options.radius;\n  var rad = (rotation || 0) * RAD_PER_DEG;\n\n  if (style && _typeof(style) === 'object') {\n    type = style.toString();\n\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\n      ctx.closePath();\n      break;\n\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\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\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\n      rad += QUARTER_PI;\n\n    /* falls through */\n\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\n    case 'crossRot':\n      rad += QUARTER_PI;\n\n    /* falls through */\n\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\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\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\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\n    case false:\n      ctx.closePath();\n      break;\n  }\n\n  ctx.fill();\n\n  if (options.borderWidth > 0) {\n    ctx.stroke();\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 */\n\n\nfunction _isPointInArea(point, area, margin) {\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 && point.y > area.top - margin && point.y < area.bottom + margin;\n}\n\nfunction clipArea(ctx, area) {\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\nfunction unclipArea(ctx) {\n  ctx.restore();\n}\n/**\n * @private\n */\n\n\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n\n  if (mode === 'middle') {\n    var 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\n  ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */\n\n\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n\n  ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\n\nfunction setRenderOpts(ctx, opts) {\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(ctx, x, y, line, opts) {\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    var metrics = ctx.measureText(line);\n    var left = x - metrics.actualBoundingBoxLeft;\n    var right = x + metrics.actualBoundingBoxRight;\n    var top = y - metrics.actualBoundingBoxAscent;\n    var bottom = y + metrics.actualBoundingBoxDescent;\n    var yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\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, opts) {\n  var oldColor = ctx.fillStyle;\n  ctx.fillStyle = opts.color;\n  ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n  ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */\n\n\nfunction renderText(ctx, text, x, y, font) {\n  var opts = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n  var lines = isArray(text) ? text : [text];\n  var stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  var i, line;\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    y += Number(font.lineHeight);\n  }\n\n  ctx.restore();\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 */\n\n\nfunction addRoundedRectPath(ctx, rect) {\n  var x = rect.x,\n      y = rect.y,\n      w = rect.w,\n      h = rect.h,\n      radius = rect.radius; // top left arc\n\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true); // line from top left to bottom left\n\n  ctx.lineTo(x, y + h - radius.bottomLeft); // bottom left arc\n\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true); // line from bottom left to bottom right\n\n  ctx.lineTo(x + w - radius.bottomRight, y + h); // bottom right arc\n\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true); // line from bottom right to top right\n\n  ctx.lineTo(x + w, y + radius.topRight); // top right arc\n\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true); // line from top right to top left\n\n  ctx.lineTo(x + radius.topLeft, y);\n}\n\nvar LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nvar FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\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*/\n\nfunction toLineHeight(value, size) {\n  var matches = ('' + value).match(LINE_HEIGHT);\n\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\n    case '%':\n      value /= 100;\n      break;\n  }\n\n  return size * value;\n}\n\nvar numberOrZero = function numberOrZero(v) {\n  return +v || 0;\n};\n\nfunction _readValueToProps(value, props) {\n  var ret = {};\n  var objProps = isObject(props);\n  var keys = objProps ? Object.keys(props) : props;\n  var read = isObject(value) ? objProps ? function (prop) {\n    return valueOrDefault(value[prop], value[props[prop]]);\n  } : function (prop) {\n    return value[prop];\n  } : function () {\n    return value;\n  };\n\n  var _iterator4 = _createForOfIteratorHelper(keys),\n      _step4;\n\n  try {\n    for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n      var prop = _step4.value;\n      ret[prop] = numberOrZero(read(prop));\n    }\n  } catch (err) {\n    _iterator4.e(err);\n  } finally {\n    _iterator4.f();\n  }\n\n  return ret;\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 */\n\n\nfunction toTRBL(value) {\n  return _readValueToProps(value, {\n    top: 'y',\n    right: 'x',\n    bottom: 'y',\n    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 */\n\n\nfunction toTRBLCorners(value) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\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 */\n\n\nfunction toPadding(value) {\n  var obj = toTRBL(value);\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n  return obj;\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\n\nfunction toFont(options, fallback) {\n  options = options || {};\n  fallback = fallback || defaults.font;\n  var size = valueOrDefault(options.size, fallback.size);\n\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n\n  var style = valueOrDefault(options.style, fallback.style);\n\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = undefined;\n  }\n\n  var font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size: size,\n    style: style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n  font.string = toFontString(font);\n  return font;\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 */\n\n\nfunction resolve(inputs, context, index, info) {\n  var cacheable = true;\n  var i, ilen, value;\n\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n\n    if (value === undefined) {\n      continue;\n    }\n\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n\n      return value;\n    }\n  }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\n\n\nfunction _addGrace(minmax, grace, beginAtZero) {\n  var min = minmax.min,\n      max = minmax.max;\n  var change = toDimension(grace, (max - min) / 2);\n\n  var keepZero = function keepZero(value, add) {\n    return beginAtZero && value === 0 ? 0 : value + add;\n  };\n\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\n\nfunction createContext(parentContext, context) {\n  return Object.assign(Object.create(parentContext), context);\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 */\n\n\nfunction _createResolver(scopes) {\n  var _cache;\n\n  var prefixes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [''];\n  var rootScopes = arguments.length > 2 ? arguments[2] : undefined;\n  var fallback = arguments.length > 3 ? arguments[3] : undefined;\n  var getTarget = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function () {\n    return scopes[0];\n  };\n  var finalRootScopes = rootScopes || scopes;\n\n  if (typeof fallback === 'undefined') {\n    fallback = _resolve('_fallback', scopes);\n  }\n\n  var cache = (_cache = {}, _defineProperty(_cache, Symbol.toStringTag, 'Object'), _defineProperty(_cache, \"_cacheable\", true), _defineProperty(_cache, \"_scopes\", scopes), _defineProperty(_cache, \"_rootScopes\", finalRootScopes), _defineProperty(_cache, \"_fallback\", fallback), _defineProperty(_cache, \"_getTarget\", getTarget), _defineProperty(_cache, \"override\", function override(scope) {\n    return _createResolver([scope].concat(_toConsumableArray(scopes)), prefixes, finalRootScopes, fallback);\n  }), _cache);\n  return new Proxy(cache, {\n    /**\n    * A trap for the delete operator.\n    */\n    deleteProperty: function deleteProperty(target, prop) {\n      delete target[prop]; // remove from cache\n\n      delete target._keys; // remove cached keys\n\n      delete scopes[0][prop]; // remove from top level scope\n\n      return true;\n    },\n\n    /**\n    * A trap for getting property values.\n    */\n    get: function get(target, prop) {\n      return _cached(target, prop, function () {\n        return _resolveWithPrefixes(prop, prefixes, scopes, target);\n      });\n    },\n\n    /**\n    * A trap for Object.getOwnPropertyDescriptor.\n    * Also used by Object.hasOwnProperty.\n    */\n    getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n\n    /**\n    * A trap for Object.getPrototypeOf.\n    */\n    getPrototypeOf: function getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n\n    /**\n    * A trap for the in operator.\n    */\n    has: function has(target, prop) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n\n    /**\n    * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n    */\n    ownKeys: function ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n\n    /**\n    * A trap for setting property values.\n    */\n    set: function set(target, prop, value) {\n      var storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value; // set to top level scope + cache\n\n      delete target._keys; // remove cached keys\n\n      return true;\n    }\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 */\n\n\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n  var cache = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: function setContext(ctx) {\n      return _attachContext(proxy, ctx, subProxy, descriptorDefaults);\n    },\n    override: function override(scope) {\n      return _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults);\n    }\n  };\n  return new Proxy(cache, {\n    /**\n    * A trap for the delete operator.\n    */\n    deleteProperty: function deleteProperty(target, prop) {\n      delete target[prop]; // remove from cache\n\n      delete proxy[prop]; // remove from proxy\n\n      return true;\n    },\n\n    /**\n    * A trap for getting property values.\n    */\n    get: function get(target, prop, receiver) {\n      return _cached(target, prop, function () {\n        return _resolveWithContext(target, prop, receiver);\n      });\n    },\n\n    /**\n    * A trap for Object.getOwnPropertyDescriptor.\n    * Also used by Object.hasOwnProperty.\n    */\n    getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n        enumerable: true,\n        configurable: true\n      } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n\n    /**\n    * A trap for Object.getPrototypeOf.\n    */\n    getPrototypeOf: function getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n\n    /**\n    * A trap for the in operator.\n    */\n    has: function has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n\n    /**\n    * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n    */\n    ownKeys: function ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n\n    /**\n    * A trap for setting property values.\n    */\n    set: function set(target, prop, value) {\n      proxy[prop] = value; // set to proxy\n\n      delete target[prop]; // remove from cache\n\n      return true;\n    }\n  });\n}\n/**\n * @private\n */\n\n\nfunction _descriptors(proxy) {\n  var defaults = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    scriptable: true,\n    indexable: true\n  };\n\n  var _proxy$_scriptable = proxy._scriptable,\n      _scriptable = _proxy$_scriptable === void 0 ? defaults.scriptable : _proxy$_scriptable,\n      _proxy$_indexable = proxy._indexable,\n      _indexable = _proxy$_indexable === void 0 ? defaults.indexable : _proxy$_indexable,\n      _proxy$_allKeys = proxy._allKeys,\n      _allKeys = _proxy$_allKeys === void 0 ? defaults.allKeys : _proxy$_allKeys;\n\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : function () {\n      return _scriptable;\n    },\n    isIndexable: isFunction(_indexable) ? _indexable : function () {\n      return _indexable;\n    }\n  };\n}\n\nvar readKey = function readKey(prefix, name) {\n  return prefix ? prefix + _capitalize(name) : name;\n};\n\nvar needsSubResolver = function needsSubResolver(prop, value) {\n  return isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\n};\n\nfunction _cached(target, prop, resolve) {\n  if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n    return target[prop];\n  }\n\n  var value = resolve(); // cache the resolved value\n\n  target[prop] = value;\n  return value;\n}\n\nfunction _resolveWithContext(target, prop, receiver) {\n  var _proxy = target._proxy,\n      _context = target._context,\n      _subProxy = target._subProxy,\n      descriptors = target._descriptors;\n  var value = _proxy[prop]; // resolve from proxy\n  // resolve with context\n\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\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\n  return value;\n}\n\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n  var _proxy = target._proxy,\n      _context = target._context,\n      _subProxy = target._subProxy,\n      _stack = target._stack;\n\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n\n  _stack.add(prop);\n\n  var value = getValue(_context, _subProxy || receiver);\n\n  _stack.delete(prop);\n\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\n  return value;\n}\n\nfunction _resolveArray(prop, value, target, isIndexable) {\n  var _proxy = target._proxy,\n      _context = target._context,\n      _subProxy = target._subProxy,\n      descriptors = target._descriptors;\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    var arr = value;\n\n    var scopes = _proxy._scopes.filter(function (s) {\n      return s !== arr;\n    });\n\n    value = [];\n\n    var _iterator5 = _createForOfIteratorHelper(arr),\n        _step5;\n\n    try {\n      for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n        var item = _step5.value;\n        var resolver = createSubResolver(scopes, _proxy, prop, item);\n        value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n      }\n    } catch (err) {\n      _iterator5.e(err);\n    } finally {\n      _iterator5.f();\n    }\n  }\n\n  return value;\n}\n\nfunction resolveFallback(fallback, prop, value) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nvar getScope = function getScope(key, parent) {\n  return key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n};\n\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n  var _iterator6 = _createForOfIteratorHelper(parentScopes),\n      _step6;\n\n  try {\n    for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n      var parent = _step6.value;\n      var scope = getScope(key, parent);\n\n      if (scope) {\n        set.add(scope);\n        var fallback = resolveFallback(scope._fallback, key, value);\n\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  } catch (err) {\n    _iterator6.e(err);\n  } finally {\n    _iterator6.f();\n  }\n\n  return false;\n}\n\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n  var rootScopes = resolver._rootScopes;\n  var fallback = resolveFallback(resolver._fallback, prop, value);\n  var allScopes = [].concat(_toConsumableArray(parentScopes), _toConsumableArray(rootScopes));\n  var set = new Set();\n  set.add(value);\n  var key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n\n  if (key === null) {\n    return false;\n  }\n\n  if (typeof fallback !== 'undefined' && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n\n    if (key === null) {\n      return false;\n    }\n  }\n\n  return _createResolver(Array.from(set), [''], rootScopes, fallback, function () {\n    return subGetTarget(resolver, prop, value);\n  });\n}\n\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n\n  return key;\n}\n\nfunction subGetTarget(resolver, prop, value) {\n  var parent = resolver._getTarget();\n\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n\n  var target = parent[prop];\n\n  if (isArray(target) && isObject(value)) {\n    // For array of objects, the object is used to store updated values\n    return value;\n  }\n\n  return target || {};\n}\n\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n  var value;\n\n  var _iterator7 = _createForOfIteratorHelper(prefixes),\n      _step7;\n\n  try {\n    for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n      var prefix = _step7.value;\n      value = _resolve(readKey(prefix, prop), scopes);\n\n      if (typeof value !== 'undefined') {\n        return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n      }\n    }\n  } catch (err) {\n    _iterator7.e(err);\n  } finally {\n    _iterator7.f();\n  }\n}\n\nfunction _resolve(key, scopes) {\n  var _iterator8 = _createForOfIteratorHelper(scopes),\n      _step8;\n\n  try {\n    for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n      var scope = _step8.value;\n\n      if (!scope) {\n        continue;\n      }\n\n      var value = scope[key];\n\n      if (typeof value !== 'undefined') {\n        return value;\n      }\n    }\n  } catch (err) {\n    _iterator8.e(err);\n  } finally {\n    _iterator8.f();\n  }\n}\n\nfunction getKeysFromAllScopes(target) {\n  var keys = target._keys;\n\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n\n  return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes) {\n  var set = new Set();\n\n  var _iterator9 = _createForOfIteratorHelper(scopes),\n      _step9;\n\n  try {\n    for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n      var scope = _step9.value;\n\n      var _iterator10 = _createForOfIteratorHelper(Object.keys(scope).filter(function (k) {\n        return !k.startsWith('_');\n      })),\n          _step10;\n\n      try {\n        for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n          var key = _step10.value;\n          set.add(key);\n        }\n      } catch (err) {\n        _iterator10.e(err);\n      } finally {\n        _iterator10.f();\n      }\n    }\n  } catch (err) {\n    _iterator9.e(err);\n  } finally {\n    _iterator9.f();\n  }\n\n  return Array.from(set);\n}\n\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n  var iScale = meta.iScale;\n  var _this$_parsing$key = this._parsing.key,\n      key = _this$_parsing$key === void 0 ? 'r' : _this$_parsing$key;\n  var parsed = new Array(count);\n  var 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      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n\n  return parsed;\n}\n\nvar EPSILON = Number.EPSILON || 1e-14;\n\nvar getPoint = function getPoint(points, i) {\n  return i < points.length && !points[i].skip && points[i];\n};\n\nvar getValueAxis = function getValueAxis(indexAxis) {\n  return indexAxis === 'x' ? 'y' : 'x';\n};\n\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n  // Props to Rob Spencer at scaled innovation for his post on splining between points\n  // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n  // This function must also respect \"skipped\" points\n  var previous = firstPoint.skip ? middlePoint : firstPoint;\n  var current = middlePoint;\n  var next = afterPoint.skip ? middlePoint : afterPoint;\n  var d01 = distanceBetweenPoints(current, previous);\n  var d12 = distanceBetweenPoints(next, current);\n  var s01 = d01 / (d01 + d12);\n  var s12 = d12 / (d01 + d12); // If all points are the same, s01 & s02 will be inf\n\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n  var fa = t * s01; // scaling factor for triangle Ta\n\n  var fb = t * s12;\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 * Adjust tangents to ensure monotonic properties\n */\n\n\nfunction monotoneAdjust(points, deltaK, mK) {\n  var pointsLen = points.length;\n  var alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n  var pointAfter = getPoint(points, 0);\n\n  for (var i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n\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\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, mK) {\n  var indexAxis = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'x';\n  var valueAxis = getValueAxis(indexAxis);\n  var pointsLen = points.length;\n  var delta, pointBefore, pointCurrent;\n  var pointAfter = getPoint(points, 0);\n\n  for (var i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n\n    if (!pointCurrent) {\n      continue;\n    }\n\n    var iPixel = pointCurrent[indexAxis];\n    var vPixel = pointCurrent[valueAxis];\n\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[\"cp1\".concat(indexAxis)] = iPixel - delta;\n      pointCurrent[\"cp1\".concat(valueAxis)] = vPixel - delta * mK[i];\n    }\n\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[\"cp2\".concat(indexAxis)] = iPixel + delta;\n      pointCurrent[\"cp2\".concat(valueAxis)] = vPixel + delta * mK[i];\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 */\n\n\nfunction splineCurveMonotone(points) {\n  var indexAxis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x';\n  var valueAxis = getValueAxis(indexAxis);\n  var pointsLen = points.length;\n  var deltaK = Array(pointsLen).fill(0);\n  var mK = Array(pointsLen); // Calculate slopes (deltaK) and initialize tangents (mK)\n\n  var i, pointBefore, pointCurrent;\n  var 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\n    if (!pointCurrent) {\n      continue;\n    }\n\n    if (pointAfter) {\n      var slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis]; // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n\n    mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n\n  monotoneAdjust(points, deltaK, mK);\n  monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt, min, max) {\n  return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points, area) {\n  var i, ilen, point, inArea, inAreaPrev;\n\n  var inAreaNext = _isPointInArea(points[0], area);\n\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\n    if (!inArea) {\n      continue;\n    }\n\n    point = points[i];\n\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\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 * @private\n */\n\n\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n  var i, ilen, point, controlPoints; // Only consider points that are drawn in case the spanGaps option is used\n\n  if (options.spanGaps) {\n    points = points.filter(function (pt) {\n      return !pt.skip;\n    });\n  }\n\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    var prev = loop ? points[points.length - 1] : points[0];\n\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\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/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */\n\n/**\n* @private\n*/\n\n\nfunction _isDomSupported() {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */\n\n\nfunction _getParentNode(domNode) {\n  var parent = domNode.parentNode;\n\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = parent.host;\n  }\n\n  return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\n\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n  var valueInPixels;\n\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\nvar getComputedStyle = function getComputedStyle(element) {\n  return element.ownerDocument.defaultView.getComputedStyle(element, null);\n};\n\nfunction getStyle(el, property) {\n  return getComputedStyle(el).getPropertyValue(property);\n}\n\nvar positions = ['top', 'right', 'bottom', 'left'];\n\nfunction getPositionedStyle(styles, style, suffix) {\n  var result = {};\n  suffix = suffix ? '-' + suffix : '';\n\n  for (var i = 0; i < 4; i++) {\n    var pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\n\nvar useOffsetPos = function useOffsetPos(x, y, target) {\n  return (x > 0 || y > 0) && (!target || !target.shadowRoot);\n};\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\n\n\nfunction getCanvasPosition(e, canvas) {\n  var touches = e.touches;\n  var source = touches && touches.length ? touches[0] : e;\n  var offsetX = source.offsetX,\n      offsetY = source.offsetY;\n  var box = false;\n  var x, y;\n\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    var rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n\n  return {\n    x: x,\n    y: y,\n    box: 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\n\nfunction getRelativePosition(event, chart) {\n  if ('native' in event) {\n    return event;\n  }\n\n  var canvas = chart.canvas,\n      currentDevicePixelRatio = chart.currentDevicePixelRatio;\n  var style = getComputedStyle(canvas);\n  var borderBox = style.boxSizing === 'border-box';\n  var paddings = getPositionedStyle(style, 'padding');\n  var borders = getPositionedStyle(style, 'border', 'width');\n\n  var _getCanvasPosition = getCanvasPosition(event, canvas),\n      x = _getCanvasPosition.x,\n      y = _getCanvasPosition.y,\n      box = _getCanvasPosition.box;\n\n  var xOffset = paddings.left + (box && borders.left);\n  var yOffset = paddings.top + (box && borders.top);\n  var width = chart.width,\n      height = chart.height;\n\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\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, width, height) {\n  var maxWidth, maxHeight;\n\n  if (width === undefined || height === undefined) {\n    var container = canvas && _getParentNode(canvas);\n\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      var rect = container.getBoundingClientRect(); // this is the border box of the container\n\n      var containerStyle = getComputedStyle(container);\n      var containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      var 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\n  return {\n    width: width,\n    height: height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\n\nvar round1 = function round1(v) {\n  return Math.round(v * 10) / 10;\n}; // eslint-disable-next-line complexity\n\n\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n  var style = getComputedStyle(canvas);\n  var margins = getPositionedStyle(style, 'margin');\n  var maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  var maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  var containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  var width = containerSize.width,\n      height = containerSize.height;\n\n  if (style.boxSizing === 'content-box') {\n    var borders = getPositionedStyle(style, 'border', 'width');\n    var paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\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\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  var 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 {\n    width: width,\n    height: 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 */\n\n\nfunction retinaScale(chart, forceRatio, forceStyle) {\n  var pixelRatio = forceRatio || 1;\n  var deviceHeight = Math.floor(chart.height * pixelRatio);\n  var deviceWidth = Math.floor(chart.width * pixelRatio);\n  chart.height = Math.floor(chart.height);\n  chart.width = Math.floor(chart.width);\n  var canvas = chart.canvas; // 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\n  if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n    canvas.style.height = \"\".concat(chart.height, \"px\");\n    canvas.style.width = \"\".concat(chart.width, \"px\");\n  }\n\n  if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n    chart.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\n  return false;\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 */\n\n\nvar supportsEventListenerOptions = function () {\n  var passiveSupported = false;\n\n  try {\n    var options = {\n      get passive() {\n        passiveSupported = true;\n        return false;\n      }\n\n    };\n\n    if (_isDomSupported()) {\n      window.addEventListener('test', null, options);\n      window.removeEventListener('test', null, options);\n    }\n  } catch (e) {// continue regardless of error\n  }\n\n  return passiveSupported;\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\n\nfunction readUsedSize(element, property) {\n  var value = getStyle(element, property);\n  var matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n/**\n * @private\n */\n\n\nfunction _pointInLine(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\n/**\n * @private\n */\n\n\nfunction _steppedInterpolation(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n  };\n}\n/**\n * @private\n */\n\n\nfunction _bezierInterpolation(p1, p2, t, mode) {\n  var cp1 = {\n    x: p1.cp2x,\n    y: p1.cp2y\n  };\n  var cp2 = {\n    x: p2.cp1x,\n    y: p2.cp1y\n  };\n\n  var a = _pointInLine(p1, cp1, t);\n\n  var b = _pointInLine(cp1, cp2, t);\n\n  var c = _pointInLine(cp2, p2, t);\n\n  var d = _pointInLine(a, b, t);\n\n  var e = _pointInLine(b, c, t);\n\n  return _pointInLine(d, e, t);\n}\n\nvar getRightToLeftAdapter = function getRightToLeftAdapter(rectX, width) {\n  return {\n    x: function x(_x) {\n      return rectX + rectX + width - _x;\n    },\n    setWidth: function setWidth(w) {\n      width = w;\n    },\n    textAlign: function textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus: function xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr: function leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    }\n  };\n};\n\nvar getLeftToRightAdapter = function getLeftToRightAdapter() {\n  return {\n    x: function x(_x2) {\n      return _x2;\n    },\n    setWidth: function setWidth(w) {},\n    textAlign: function textAlign(align) {\n      return align;\n    },\n    xPlus: function xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr: function leftForLtr(x, _itemWidth) {\n      return x;\n    }\n  };\n};\n\nfunction getRtlAdapter(rtl, rectX, width) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nfunction overrideTextDirection(ctx, direction) {\n  var style, original;\n\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [style.getPropertyValue('direction'), style.getPropertyPriority('direction')];\n    style.setProperty('direction', direction, 'important');\n    ctx.prevTextDirection = original;\n  }\n}\n\nfunction restoreTextDirection(ctx, original) {\n  if (original !== undefined) {\n    delete ctx.prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle\n    };\n  }\n\n  return {\n    between: _isBetween,\n    compare: function compare(a, b) {\n      return a - b;\n    },\n    normalize: function normalize(x) {\n      return x;\n    }\n  };\n}\n\nfunction normalizeSegment(_ref) {\n  var start = _ref.start,\n      end = _ref.end,\n      count = _ref.count,\n      loop = _ref.loop,\n      style = _ref.style;\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style: style\n  };\n}\n\nfunction getSegment(segment, points, bounds) {\n  var property = bounds.property,\n      startBound = bounds.start,\n      endBound = bounds.end;\n\n  var _propertyFn = propertyFn(property),\n      between = _propertyFn.between,\n      normalize = _propertyFn.normalize;\n\n  var count = points.length;\n  var start = segment.start,\n      end = segment.end,\n      loop = segment.loop;\n  var i, ilen;\n\n  if (loop) {\n    start += count;\n    end += count;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n\n      start--;\n      end--;\n    }\n\n    start %= count;\n    end %= count;\n  }\n\n  if (end < start) {\n    end += count;\n  }\n\n  return {\n    start: start,\n    end: end,\n    loop: loop,\n    style: segment.style\n  };\n}\n\nfunction _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n\n  var property = bounds.property,\n      startBound = bounds.start,\n      endBound = bounds.end;\n  var count = points.length;\n\n  var _propertyFn2 = propertyFn(property),\n      compare = _propertyFn2.compare,\n      between = _propertyFn2.between,\n      normalize = _propertyFn2.normalize;\n\n  var _getSegment = getSegment(segment, points, bounds),\n      start = _getSegment.start,\n      end = _getSegment.end,\n      loop = _getSegment.loop,\n      style = _getSegment.style;\n\n  var result = [];\n  var inside = false;\n  var subStart = null;\n  var value, point, prevValue;\n\n  var startIsBefore = function startIsBefore() {\n    return between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  };\n\n  var endIsBefore = function endIsBefore() {\n    return compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  };\n\n  var shouldStart = function shouldStart() {\n    return inside || startIsBefore();\n  };\n\n  var shouldStop = function shouldStop() {\n    return !inside || endIsBefore();\n  };\n\n  for (var 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({\n        start: subStart,\n        end: i,\n        loop: loop,\n        count: count,\n        style: style\n      }));\n      subStart = null;\n    }\n\n    prev = i;\n    prevValue = value;\n  }\n\n  if (subStart !== null) {\n    result.push(normalizeSegment({\n      start: subStart,\n      end: end,\n      loop: loop,\n      count: count,\n      style: style\n    }));\n  }\n\n  return result;\n}\n\nfunction _boundSegments(line, bounds) {\n  var result = [];\n  var segments = line.segments;\n\n  for (var i = 0; i < segments.length; i++) {\n    var sub = _boundSegment(segments[i], line.points, bounds);\n\n    if (sub.length) {\n      result.push.apply(result, _toConsumableArray(sub));\n    }\n  }\n\n  return result;\n}\n\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  var start = 0;\n  var end = count - 1;\n\n  if (loop && !spanGaps) {\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n\n  while (start < count && points[start].skip) {\n    start++;\n  }\n\n  start %= count;\n\n  if (loop) {\n    end += start;\n  }\n\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n\n  end %= count;\n  return {\n    start: start,\n    end: end\n  };\n}\n\nfunction solidSegments(points, start, max, loop) {\n  var count = points.length;\n  var result = [];\n  var last = start;\n  var prev = points[start];\n  var end;\n\n  for (end = start + 1; end <= max; ++end) {\n    var cur = points[end % count];\n\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({\n          start: start % count,\n          end: (end - 1) % count,\n          loop: loop\n        });\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n\n      if (prev.skip) {\n        start = end;\n      }\n    }\n\n    prev = cur;\n  }\n\n  if (last !== null) {\n    result.push({\n      start: start % count,\n      end: last % count,\n      loop: loop\n    });\n  }\n\n  return result;\n}\n\nfunction _computeSegments(line, segmentOptions) {\n  var points = line.points;\n  var spanGaps = line.options.spanGaps;\n  var count = points.length;\n\n  if (!count) {\n    return [];\n  }\n\n  var loop = !!line._loop;\n\n  var _findStartAndEnd = findStartAndEnd(points, count, loop, spanGaps),\n      start = _findStartAndEnd.start,\n      end = _findStartAndEnd.end;\n\n  if (spanGaps === true) {\n    return splitByStyles(line, [{\n      start: start,\n      end: end,\n      loop: loop\n    }], points, segmentOptions);\n  }\n\n  var max = end < start ? end + count : end;\n  var completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  var chartContext = line._chart.getContext();\n\n  var baseStyle = readStyle(line.options);\n  var datasetIndex = line._datasetIndex,\n      spanGaps = line.options.spanGaps;\n  var count = points.length;\n  var result = [];\n  var prevStyle = baseStyle;\n  var start = segments[0].start;\n  var i = start;\n\n  function addStyle(s, e, l, st) {\n    var dir = spanGaps ? -1 : 1;\n\n    if (s === e) {\n      return;\n    }\n\n    s += count;\n\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n\n    while (points[e % count].skip) {\n      e += dir;\n    }\n\n    if (s % count !== e % count) {\n      result.push({\n        start: s % count,\n        end: e % count,\n        loop: l,\n        style: st\n      });\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n\n  var _iterator11 = _createForOfIteratorHelper(segments),\n      _step11;\n\n  try {\n    for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n      var segment = _step11.value;\n      start = spanGaps ? start : segment.start;\n      var prev = points[start % count];\n      var style = void 0;\n\n      for (i = start + 1; i <= segment.end; i++) {\n        var 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: datasetIndex\n        })));\n\n        if (styleChanged(style, prevStyle)) {\n          addStyle(start, i - 1, segment.loop, prevStyle);\n        }\n\n        prev = pt;\n        prevStyle = style;\n      }\n\n      if (start < i - 1) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n    }\n  } catch (err) {\n    _iterator11.e(err);\n  } finally {\n    _iterator11.f();\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\n  var cache = [];\n\n  var replacer = function replacer(key, value) {\n    if (!isPatternOrGradient(value)) {\n      return value;\n    }\n\n    if (!cache.includes(value)) {\n      cache.push(value);\n    }\n\n    return cache.indexOf(value);\n  };\n\n  return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, fontString as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, overrideTextDirection as aA, _textX as aB, restoreTextDirection as aC, drawPointLegend as aD, distanceBetweenPoints as aE, noop as aF, _setMinAndMaxByKey as aG, niceNum as aH, almostWhole as aI, almostEquals as aJ, _decimalPlaces as aK, Ticks as aL, log10 as aM, _longestText as aN, _filterBetween as aO, _lookup as aP, isPatternOrGradient as aQ, getHoverColor as aR, clone as aS, _merger as aT, _mergerIf as aU, _deprecated as aV, _splitKey as aW, toFontString as aX, splineCurve as aY, splineCurveMonotone as aZ, getStyle as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, _elementsEqual as ah, _isClickEvent as ai, _isBetween as aj, _readValueToProps as ak, _updateBezierControlPoints as al, _computeSegments as am, _boundSegments as an, _steppedInterpolation as ao, _bezierInterpolation as ap, _pointInLine as aq, _steppedLineTo as ar, _bezierCurveTo as as, drawPoint as at, addRoundedRectPath as au, toTRBL as av, toTRBLCorners as aw, _boundSegment as ax, _normalizeAngle as ay, getRtlAdapter as az, isArray as b, toLineHeight as b0, PITAU as b1, INFINITY as b2, RAD_PER_DEG as b3, QUARTER_PI as b4, TWO_THIRDS_PI as b5, _angleDiff as b6, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport * as preact from 'preact';\nimport { Component, createElement, isValidElement, Fragment } from 'preact';\nimport { createPortal } from 'preact/compat';\nvar styleTexts = [];\nvar styleEls = new Map();\n\nfunction injectStyles(styleText) {\n  styleTexts.push(styleText);\n  styleEls.forEach(function (styleEl) {\n    appendStylesTo(styleEl, styleText);\n  });\n}\n\nfunction ensureElHasStyles(el) {\n  if (el.isConnected && // sometimes true if SSR system simulates DOM\n  el.getRootNode // sometimes undefined if SSR system simulates DOM\n  ) {\n    registerStylesRoot(el.getRootNode());\n  }\n}\n\nfunction registerStylesRoot(rootNode) {\n  var styleEl = styleEls.get(rootNode);\n\n  if (!styleEl || !styleEl.isConnected) {\n    styleEl = rootNode.querySelector('style[data-fullcalendar]');\n\n    if (!styleEl) {\n      styleEl = document.createElement('style');\n      styleEl.setAttribute('data-fullcalendar', '');\n      var nonce = getNonceValue();\n\n      if (nonce) {\n        styleEl.nonce = nonce;\n      }\n\n      var parentEl = rootNode === document ? document.head : rootNode;\n      var insertBefore = rootNode === document ? parentEl.querySelector('script,link[rel=stylesheet],link[as=style],style') : parentEl.firstChild;\n      parentEl.insertBefore(styleEl, insertBefore);\n    }\n\n    styleEls.set(rootNode, styleEl);\n    hydrateStylesRoot(styleEl);\n  }\n}\n\nfunction hydrateStylesRoot(styleEl) {\n  var _iterator = _createForOfIteratorHelper(styleTexts),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var styleText = _step.value;\n      appendStylesTo(styleEl, styleText);\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n}\n\nfunction appendStylesTo(styleEl, styleText) {\n  var sheet = styleEl.sheet;\n  var ruleCnt = sheet.cssRules.length;\n  styleText.split('}').forEach(function (styleStr, i) {\n    styleStr = styleStr.trim();\n\n    if (styleStr) {\n      sheet.insertRule(styleStr + '}', ruleCnt + i);\n    }\n  });\n} // nonce\n// -------------------------------------------------------------------------------------------------\n\n\nvar queriedNonceValue;\n\nfunction getNonceValue() {\n  if (queriedNonceValue === undefined) {\n    queriedNonceValue = queryNonceValue();\n  }\n\n  return queriedNonceValue;\n}\n/*\nTODO: discourage meta tag and instead put nonce attribute on placeholder <style> tag\n*/\n\n\nfunction queryNonceValue() {\n  var metaWithNonce = document.querySelector('meta[name=\"csp-nonce\"]');\n\n  if (metaWithNonce && metaWithNonce.hasAttribute('content')) {\n    return metaWithNonce.getAttribute('content');\n  }\n\n  var elWithNonce = document.querySelector('script[nonce]');\n\n  if (elWithNonce) {\n    return elWithNonce.nonce || '';\n  }\n\n  return '';\n} // main\n// -------------------------------------------------------------------------------------------------\n\n\nif (typeof document !== 'undefined') {\n  registerStylesRoot(document);\n}\n\nvar css_248z = \":root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc{display:flex;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{padding:0;vertical-align:top}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid var(--fc-border-color)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url(\\\"data:application/x-font-ttf;charset=utf-8;base64,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\\\") format(\\\"truetype\\\")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:\\\"\\\\e900\\\"}.fc-icon-chevron-right:before{content:\\\"\\\\e901\\\"}.fc-icon-chevrons-left:before{content:\\\"\\\\e902\\\"}.fc-icon-chevrons-right:before{content:\\\"\\\\e903\\\"}.fc-icon-minus-square:before{content:\\\"\\\\e904\\\"}.fc-icon-plus-square:before{content:\\\"\\\\e905\\\"}.fc-icon-x:before{content:\\\"\\\\e906\\\"}.fc .fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc .fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc .fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc .fc-toolbar{align-items:center;display:flex;justify-content:space-between}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-scroller-harness{direction:ltr;overflow:hidden;position:relative}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--fc-border-color)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{table-layout:fixed;width:100%}.fc .fc-scrollgrid table{border-left-style:hidden;border-right-style:hidden;border-top-style:hidden}.fc .fc-scrollgrid{border-bottom-width:0;border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-left-width:0;border-top-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-non-business{background:var(--fc-non-business-color)}.fc .fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc .fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc .fc-highlight{background:var(--fc-highlight-color)}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:var(--fc-neutral-bg-color)}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:\\\"\\\";left:-20px;position:absolute;right:-20px;top:-20px}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:\\\"\\\";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:\\\"\\\";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-h-event .fc-event-main{color:var(--fc-event-text-color)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;left:0;max-width:100%;overflow:hidden;right:0;vertical-align:top}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc .fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc .fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}\";\ninjectStyles(css_248z);\n\nvar DelayedRunner = /*#__PURE__*/function () {\n  function DelayedRunner(drainedOption) {\n    _classCallCheck(this, DelayedRunner);\n\n    this.drainedOption = drainedOption;\n    this.isRunning = false;\n    this.isDirty = false;\n    this.pauseDepths = {};\n    this.timeoutId = 0;\n  }\n\n  _createClass(DelayedRunner, [{\n    key: \"request\",\n    value: function request(delay) {\n      this.isDirty = true;\n\n      if (!this.isPaused()) {\n        this.clearTimeout();\n\n        if (delay == null) {\n          this.tryDrain();\n        } else {\n          this.timeoutId = setTimeout( // NOT OPTIMAL! TODO: look at debounce\n          this.tryDrain.bind(this), delay);\n        }\n      }\n    }\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      var pauseDepths = this.pauseDepths;\n      pauseDepths[scope] = (pauseDepths[scope] || 0) + 1;\n      this.clearTimeout();\n    }\n  }, {\n    key: \"resume\",\n    value: function resume() {\n      var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      var force = arguments.length > 1 ? arguments[1] : undefined;\n      var pauseDepths = this.pauseDepths;\n\n      if (scope in pauseDepths) {\n        if (force) {\n          delete pauseDepths[scope];\n        } else {\n          pauseDepths[scope] -= 1;\n          var depth = pauseDepths[scope];\n\n          if (depth <= 0) {\n            delete pauseDepths[scope];\n          }\n        }\n\n        this.tryDrain();\n      }\n    }\n  }, {\n    key: \"isPaused\",\n    value: function isPaused() {\n      return Object.keys(this.pauseDepths).length;\n    }\n  }, {\n    key: \"tryDrain\",\n    value: function tryDrain() {\n      if (!this.isRunning && !this.isPaused()) {\n        this.isRunning = true;\n\n        while (this.isDirty) {\n          this.isDirty = false;\n          this.drained(); // might set isDirty to true again\n        }\n\n        this.isRunning = false;\n      }\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.clearTimeout();\n      this.isDirty = false;\n      this.pauseDepths = {};\n    }\n  }, {\n    key: \"clearTimeout\",\n    value: function (_clearTimeout) {\n      function clearTimeout() {\n        return _clearTimeout.apply(this, arguments);\n      }\n\n      clearTimeout.toString = function () {\n        return _clearTimeout.toString();\n      };\n\n      return clearTimeout;\n    }(function () {\n      if (this.timeoutId) {\n        clearTimeout(this.timeoutId);\n        this.timeoutId = 0;\n      }\n    })\n  }, {\n    key: \"drained\",\n    value: function drained() {\n      if (this.drainedOption) {\n        this.drainedOption();\n      }\n    }\n  }]);\n\n  return DelayedRunner;\n}();\n\nfunction removeElement(el) {\n  if (el.parentNode) {\n    el.parentNode.removeChild(el);\n  }\n} // Querying\n// ----------------------------------------------------------------------------------------------------------------\n\n\nfunction elementClosest(el, selector) {\n  if (el.closest) {\n    return el.closest(selector); // really bad fallback for IE\n    // from https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\n  }\n\n  if (!document.documentElement.contains(el)) {\n    return null;\n  }\n\n  do {\n    if (elementMatches(el, selector)) {\n      return el;\n    }\n\n    el = el.parentElement || el.parentNode;\n  } while (el !== null && el.nodeType === 1);\n\n  return null;\n}\n\nfunction elementMatches(el, selector) {\n  var method = el.matches || el.matchesSelector || el.msMatchesSelector;\n  return method.call(el, selector);\n} // accepts multiple subject els\n// returns a real array. good for methods like forEach\n// TODO: accept the document\n\n\nfunction findElements(container, selector) {\n  var containers = container instanceof HTMLElement ? [container] : container;\n  var allMatches = [];\n\n  for (var i = 0; i < containers.length; i += 1) {\n    var matches = containers[i].querySelectorAll(selector);\n\n    for (var j = 0; j < matches.length; j += 1) {\n      allMatches.push(matches[j]);\n    }\n  }\n\n  return allMatches;\n} // accepts multiple subject els\n// only queries direct child elements // TODO: rename to findDirectChildren!\n\n\nfunction findDirectChildren(parent, selector) {\n  var parents = parent instanceof HTMLElement ? [parent] : parent;\n  var allMatches = [];\n\n  for (var i = 0; i < parents.length; i += 1) {\n    var childNodes = parents[i].children; // only ever elements\n\n    for (var j = 0; j < childNodes.length; j += 1) {\n      var childNode = childNodes[j];\n\n      if (!selector || elementMatches(childNode, selector)) {\n        allMatches.push(childNode);\n      }\n    }\n  }\n\n  return allMatches;\n} // Style\n// ----------------------------------------------------------------------------------------------------------------\n\n\nvar PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i;\n\nfunction applyStyle(el, props) {\n  for (var propName in props) {\n    applyStyleProp(el, propName, props[propName]);\n  }\n}\n\nfunction applyStyleProp(el, name, val) {\n  if (val == null) {\n    el.style[name] = '';\n  } else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {\n    el.style[name] = \"\".concat(val, \"px\");\n  } else {\n    el.style[name] = val;\n  }\n} // Event Handling\n// ----------------------------------------------------------------------------------------------------------------\n// if intercepting bubbled events at the document/window/body level,\n// and want to see originating element (the 'target'), use this util instead\n// of `ev.target` because it goes within web-component boundaries.\n\n\nfunction getEventTargetViaRoot(ev) {\n  var _a, _b;\n\n  return (_b = (_a = ev.composedPath) === null || _a === void 0 ? void 0 : _a.call(ev)[0]) !== null && _b !== void 0 ? _b : ev.target;\n} // Unique ID for DOM attribute\n\n\nvar guid$1 = 0;\n\nfunction getUniqueDomId() {\n  guid$1 += 1;\n  return 'fc-dom-' + guid$1;\n} // Stops a mouse/touch event from doing it's native browser action\n\n\nfunction preventDefault(ev) {\n  ev.preventDefault();\n} // Event Delegation\n// ----------------------------------------------------------------------------------------------------------------\n\n\nfunction buildDelegationHandler(selector, handler) {\n  return function (ev) {\n    var matchedChild = elementClosest(ev.target, selector);\n\n    if (matchedChild) {\n      handler.call(matchedChild, ev, matchedChild);\n    }\n  };\n}\n\nfunction listenBySelector(container, eventType, selector, handler) {\n  var attachedHandler = buildDelegationHandler(selector, handler);\n  container.addEventListener(eventType, attachedHandler);\n  return function () {\n    container.removeEventListener(eventType, attachedHandler);\n  };\n}\n\nfunction listenToHoverBySelector(container, selector, onMouseEnter, onMouseLeave) {\n  var currentMatchedChild;\n  return listenBySelector(container, 'mouseover', selector, function (mouseOverEv, matchedChild) {\n    if (matchedChild !== currentMatchedChild) {\n      currentMatchedChild = matchedChild;\n      onMouseEnter(mouseOverEv, matchedChild);\n\n      var realOnMouseLeave = function realOnMouseLeave(mouseLeaveEv) {\n        currentMatchedChild = null;\n        onMouseLeave(mouseLeaveEv, matchedChild);\n        matchedChild.removeEventListener('mouseleave', realOnMouseLeave);\n      }; // listen to the next mouseleave, and then unattach\n\n\n      matchedChild.addEventListener('mouseleave', realOnMouseLeave);\n    }\n  });\n} // Animation\n// ----------------------------------------------------------------------------------------------------------------\n\n\nvar transitionEventNames = ['webkitTransitionEnd', 'otransitionend', 'oTransitionEnd', 'msTransitionEnd', 'transitionend']; // triggered only when the next single subsequent transition finishes\n\nfunction whenTransitionDone(el, callback) {\n  var realCallback = function realCallback(ev) {\n    callback(ev);\n    transitionEventNames.forEach(function (eventName) {\n      el.removeEventListener(eventName, realCallback);\n    });\n  };\n\n  transitionEventNames.forEach(function (eventName) {\n    el.addEventListener(eventName, realCallback); // cross-browser way to determine when the transition finishes\n  });\n} // ARIA workarounds\n// ----------------------------------------------------------------------------------------------------------------\n\n\nfunction createAriaClickAttrs(handler) {\n  return Object.assign({\n    onClick: handler\n  }, createAriaKeyboardAttrs(handler));\n}\n\nfunction createAriaKeyboardAttrs(handler) {\n  return {\n    tabIndex: 0,\n    onKeyDown: function onKeyDown(ev) {\n      if (ev.key === 'Enter' || ev.key === ' ') {\n        handler(ev);\n        ev.preventDefault(); // if space, don't scroll down page\n      }\n    }\n  };\n}\n\nvar guidNumber = 0;\n\nfunction guid() {\n  guidNumber += 1;\n  return String(guidNumber);\n}\n/* FullCalendar-specific DOM Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n// Make the mouse cursor express that an event is not allowed in the current area\n\n\nfunction disableCursor() {\n  document.body.classList.add('fc-not-allowed');\n} // Returns the mouse cursor to its original look\n\n\nfunction enableCursor() {\n  document.body.classList.remove('fc-not-allowed');\n}\n/* Selection\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nfunction preventSelection(el) {\n  el.style.userSelect = 'none';\n  el.style.webkitUserSelect = 'none';\n  el.addEventListener('selectstart', preventDefault);\n}\n\nfunction allowSelection(el) {\n  el.style.userSelect = '';\n  el.style.webkitUserSelect = '';\n  el.removeEventListener('selectstart', preventDefault);\n}\n/* Context Menu\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nfunction preventContextMenu(el) {\n  el.addEventListener('contextmenu', preventDefault);\n}\n\nfunction allowContextMenu(el) {\n  el.removeEventListener('contextmenu', preventDefault);\n}\n\nfunction parseFieldSpecs(input) {\n  var specs = [];\n  var tokens = [];\n  var i;\n  var token;\n\n  if (typeof input === 'string') {\n    tokens = input.split(/\\s*,\\s*/);\n  } else if (typeof input === 'function') {\n    tokens = [input];\n  } else if (Array.isArray(input)) {\n    tokens = input;\n  }\n\n  for (i = 0; i < tokens.length; i += 1) {\n    token = tokens[i];\n\n    if (typeof token === 'string') {\n      specs.push(token.charAt(0) === '-' ? {\n        field: token.substring(1),\n        order: -1\n      } : {\n        field: token,\n        order: 1\n      });\n    } else if (typeof token === 'function') {\n      specs.push({\n        func: token\n      });\n    }\n  }\n\n  return specs;\n}\n\nfunction compareByFieldSpecs(obj0, obj1, fieldSpecs) {\n  var i;\n  var cmp;\n\n  for (i = 0; i < fieldSpecs.length; i += 1) {\n    cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i]);\n\n    if (cmp) {\n      return cmp;\n    }\n  }\n\n  return 0;\n}\n\nfunction compareByFieldSpec(obj0, obj1, fieldSpec) {\n  if (fieldSpec.func) {\n    return fieldSpec.func(obj0, obj1);\n  }\n\n  return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field]) * (fieldSpec.order || 1);\n}\n\nfunction flexibleCompare(a, b) {\n  if (!a && !b) {\n    return 0;\n  }\n\n  if (b == null) {\n    return -1;\n  }\n\n  if (a == null) {\n    return 1;\n  }\n\n  if (typeof a === 'string' || typeof b === 'string') {\n    return String(a).localeCompare(String(b));\n  }\n\n  return a - b;\n}\n/* String Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nfunction padStart(val, len) {\n  var s = String(val);\n  return '000'.substr(0, len - s.length) + s;\n}\n\nfunction formatWithOrdinals(formatter, args, fallbackText) {\n  if (typeof formatter === 'function') {\n    return formatter.apply(void 0, _toConsumableArray(args));\n  }\n\n  if (typeof formatter === 'string') {\n    // non-blank string\n    return args.reduce(function (str, arg, index) {\n      return str.replace('$' + index, arg || '');\n    }, formatter);\n  }\n\n  return fallbackText;\n}\n/* Number Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\nfunction isInt(n) {\n  return n % 1 === 0;\n}\n/* FC-specific DOM dimension stuff\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nfunction computeSmallestCellWidth(cellEl) {\n  var allWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-frame');\n  var contentWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-cushion');\n\n  if (!allWidthEl) {\n    throw new Error('needs fc-scrollgrid-shrink-frame className'); // TODO: use const\n  }\n\n  if (!contentWidthEl) {\n    throw new Error('needs fc-scrollgrid-shrink-cushion className');\n  }\n\n  return cellEl.getBoundingClientRect().width - allWidthEl.getBoundingClientRect().width + // the cell padding+border\n  contentWidthEl.getBoundingClientRect().width;\n}\n\nvar INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds'];\nvar PARSE_RE = /^(-?)(?:(\\d+)\\.)?(\\d+):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d\\d\\d))?)?/; // Parsing and Creation\n\nfunction createDuration(input, unit) {\n  if (typeof input === 'string') {\n    return parseString(input);\n  }\n\n  if (_typeof(input) === 'object' && input) {\n    // non-null object\n    return parseObject(input);\n  }\n\n  if (typeof input === 'number') {\n    return parseObject(_defineProperty({}, unit || 'milliseconds', input));\n  }\n\n  return null;\n}\n\nfunction parseString(s) {\n  var m = PARSE_RE.exec(s);\n\n  if (m) {\n    var sign = m[1] ? -1 : 1;\n    return {\n      years: 0,\n      months: 0,\n      days: sign * (m[2] ? parseInt(m[2], 10) : 0),\n      milliseconds: sign * ((m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours\n      (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes\n      (m[5] ? parseInt(m[5], 10) : 0) * 1000 + (m[6] ? parseInt(m[6], 10) : 0) // ms\n      )\n    };\n  }\n\n  return null;\n}\n\nfunction parseObject(obj) {\n  var duration = {\n    years: obj.years || obj.year || 0,\n    months: obj.months || obj.month || 0,\n    days: obj.days || obj.day || 0,\n    milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours\n    (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes\n    (obj.seconds || obj.second || 0) * 1000 + (obj.milliseconds || obj.millisecond || obj.ms || 0) // ms\n\n  };\n  var weeks = obj.weeks || obj.week;\n\n  if (weeks) {\n    duration.days += weeks * 7;\n    duration.specifiedWeeks = true;\n  }\n\n  return duration;\n} // Equality\n\n\nfunction durationsEqual(d0, d1) {\n  return d0.years === d1.years && d0.months === d1.months && d0.days === d1.days && d0.milliseconds === d1.milliseconds;\n}\n\nfunction asCleanDays(dur) {\n  if (!dur.years && !dur.months && !dur.milliseconds) {\n    return dur.days;\n  }\n\n  return 0;\n} // Simple Math\n\n\nfunction addDurations(d0, d1) {\n  return {\n    years: d0.years + d1.years,\n    months: d0.months + d1.months,\n    days: d0.days + d1.days,\n    milliseconds: d0.milliseconds + d1.milliseconds\n  };\n}\n\nfunction subtractDurations(d1, d0) {\n  return {\n    years: d1.years - d0.years,\n    months: d1.months - d0.months,\n    days: d1.days - d0.days,\n    milliseconds: d1.milliseconds - d0.milliseconds\n  };\n}\n\nfunction multiplyDuration(d, n) {\n  return {\n    years: d.years * n,\n    months: d.months * n,\n    days: d.days * n,\n    milliseconds: d.milliseconds * n\n  };\n} // Conversions\n// \"Rough\" because they are based on average-case Gregorian months/years\n\n\nfunction asRoughYears(dur) {\n  return asRoughDays(dur) / 365;\n}\n\nfunction asRoughMonths(dur) {\n  return asRoughDays(dur) / 30;\n}\n\nfunction asRoughDays(dur) {\n  return asRoughMs(dur) / 864e5;\n}\n\nfunction asRoughMinutes(dur) {\n  return asRoughMs(dur) / (1000 * 60);\n}\n\nfunction asRoughSeconds(dur) {\n  return asRoughMs(dur) / 1000;\n}\n\nfunction asRoughMs(dur) {\n  return dur.years * (365 * 864e5) + dur.months * (30 * 864e5) + dur.days * 864e5 + dur.milliseconds;\n} // Advanced Math\n\n\nfunction wholeDivideDurations(numerator, denominator) {\n  var res = null;\n\n  for (var i = 0; i < INTERNAL_UNITS.length; i += 1) {\n    var unit = INTERNAL_UNITS[i];\n\n    if (denominator[unit]) {\n      var localRes = numerator[unit] / denominator[unit];\n\n      if (!isInt(localRes) || res !== null && res !== localRes) {\n        return null;\n      }\n\n      res = localRes;\n    } else if (numerator[unit]) {\n      // needs to divide by something but can't!\n      return null;\n    }\n  }\n\n  return res;\n}\n\nfunction greatestDurationDenominator(dur) {\n  var ms = dur.milliseconds;\n\n  if (ms) {\n    if (ms % 1000 !== 0) {\n      return {\n        unit: 'millisecond',\n        value: ms\n      };\n    }\n\n    if (ms % (1000 * 60) !== 0) {\n      return {\n        unit: 'second',\n        value: ms / 1000\n      };\n    }\n\n    if (ms % (1000 * 60 * 60) !== 0) {\n      return {\n        unit: 'minute',\n        value: ms / (1000 * 60)\n      };\n    }\n\n    if (ms) {\n      return {\n        unit: 'hour',\n        value: ms / (1000 * 60 * 60)\n      };\n    }\n  }\n\n  if (dur.days) {\n    if (dur.specifiedWeeks && dur.days % 7 === 0) {\n      return {\n        unit: 'week',\n        value: dur.days / 7\n      };\n    }\n\n    return {\n      unit: 'day',\n      value: dur.days\n    };\n  }\n\n  if (dur.months) {\n    return {\n      unit: 'month',\n      value: dur.months\n    };\n  }\n\n  if (dur.years) {\n    return {\n      unit: 'year',\n      value: dur.years\n    };\n  }\n\n  return {\n    unit: 'millisecond',\n    value: 0\n  };\n} // TODO: new util arrayify?\n\n\nfunction removeExact(array, exactVal) {\n  var removeCnt = 0;\n  var i = 0;\n\n  while (i < array.length) {\n    if (array[i] === exactVal) {\n      array.splice(i, 1);\n      removeCnt += 1;\n    } else {\n      i += 1;\n    }\n  }\n\n  return removeCnt;\n}\n\nfunction isArraysEqual(a0, a1, equalityFunc) {\n  if (a0 === a1) {\n    return true;\n  }\n\n  var len = a0.length;\n  var i;\n\n  if (len !== a1.length) {\n    // not array? or not same length?\n    return false;\n  }\n\n  for (i = 0; i < len; i += 1) {\n    if (!(equalityFunc ? equalityFunc(a0[i], a1[i]) : a0[i] === a1[i])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nvar DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']; // Adding\n\nfunction addWeeks(m, n) {\n  var a = dateToUtcArray(m);\n  a[2] += n * 7;\n  return arrayToUtcDate(a);\n}\n\nfunction addDays(m, n) {\n  var a = dateToUtcArray(m);\n  a[2] += n;\n  return arrayToUtcDate(a);\n}\n\nfunction addMs(m, n) {\n  var a = dateToUtcArray(m);\n  a[6] += n;\n  return arrayToUtcDate(a);\n} // Diffing (all return floats)\n// TODO: why not use ranges?\n\n\nfunction diffWeeks(m0, m1) {\n  return diffDays(m0, m1) / 7;\n}\n\nfunction diffDays(m0, m1) {\n  return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24);\n}\n\nfunction diffHours(m0, m1) {\n  return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60);\n}\n\nfunction diffMinutes(m0, m1) {\n  return (m1.valueOf() - m0.valueOf()) / (1000 * 60);\n}\n\nfunction diffSeconds(m0, m1) {\n  return (m1.valueOf() - m0.valueOf()) / 1000;\n}\n\nfunction diffDayAndTime(m0, m1) {\n  var m0day = startOfDay(m0);\n  var m1day = startOfDay(m1);\n  return {\n    years: 0,\n    months: 0,\n    days: Math.round(diffDays(m0day, m1day)),\n    milliseconds: m1.valueOf() - m1day.valueOf() - (m0.valueOf() - m0day.valueOf())\n  };\n} // Diffing Whole Units\n\n\nfunction diffWholeWeeks(m0, m1) {\n  var d = diffWholeDays(m0, m1);\n\n  if (d !== null && d % 7 === 0) {\n    return d / 7;\n  }\n\n  return null;\n}\n\nfunction diffWholeDays(m0, m1) {\n  if (timeAsMs(m0) === timeAsMs(m1)) {\n    return Math.round(diffDays(m0, m1));\n  }\n\n  return null;\n} // Start-Of\n\n\nfunction startOfDay(m) {\n  return arrayToUtcDate([m.getUTCFullYear(), m.getUTCMonth(), m.getUTCDate()]);\n}\n\nfunction startOfHour(m) {\n  return arrayToUtcDate([m.getUTCFullYear(), m.getUTCMonth(), m.getUTCDate(), m.getUTCHours()]);\n}\n\nfunction startOfMinute(m) {\n  return arrayToUtcDate([m.getUTCFullYear(), m.getUTCMonth(), m.getUTCDate(), m.getUTCHours(), m.getUTCMinutes()]);\n}\n\nfunction startOfSecond(m) {\n  return arrayToUtcDate([m.getUTCFullYear(), m.getUTCMonth(), m.getUTCDate(), m.getUTCHours(), m.getUTCMinutes(), m.getUTCSeconds()]);\n} // Week Computation\n\n\nfunction weekOfYear(marker, dow, doy) {\n  var y = marker.getUTCFullYear();\n  var w = weekOfGivenYear(marker, y, dow, doy);\n\n  if (w < 1) {\n    return weekOfGivenYear(marker, y - 1, dow, doy);\n  }\n\n  var nextW = weekOfGivenYear(marker, y + 1, dow, doy);\n\n  if (nextW >= 1) {\n    return Math.min(w, nextW);\n  }\n\n  return w;\n}\n\nfunction weekOfGivenYear(marker, year, dow, doy) {\n  var firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)]);\n  var dayStart = startOfDay(marker);\n  var days = Math.round(diffDays(firstWeekStart, dayStart));\n  return Math.floor(days / 7) + 1; // zero-indexed\n} // start-of-first-week - start-of-year\n\n\nfunction firstWeekOffset(year, dow, doy) {\n  // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n  var fwd = 7 + dow - doy; // first-week day local weekday -- which local weekday is fwd\n\n  var fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7;\n  return -fwdlw + fwd - 1;\n} // Array Conversion\n\n\nfunction dateToLocalArray(date) {\n  return [date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()];\n}\n\nfunction arrayToLocalDate(a) {\n  return new Date(a[0], a[1] || 0, a[2] == null ? 1 : a[2], // day of month\n  a[3] || 0, a[4] || 0, a[5] || 0);\n}\n\nfunction dateToUtcArray(date) {\n  return [date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds()];\n}\n\nfunction arrayToUtcDate(a) {\n  // according to web standards (and Safari), a month index is required.\n  // massage if only given a year.\n  if (a.length === 1) {\n    a = a.concat([0]);\n  }\n\n  return new Date(Date.UTC.apply(Date, _toConsumableArray(a)));\n} // Other Utils\n\n\nfunction isValidDate(m) {\n  return !isNaN(m.valueOf());\n}\n\nfunction timeAsMs(m) {\n  return m.getUTCHours() * 1000 * 60 * 60 + m.getUTCMinutes() * 1000 * 60 + m.getUTCSeconds() * 1000 + m.getUTCMilliseconds();\n} // timeZoneOffset is in minutes\n\n\nfunction buildIsoString(marker, timeZoneOffset) {\n  var stripZeroTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var s = marker.toISOString();\n  s = s.replace('.000', '');\n\n  if (stripZeroTime) {\n    s = s.replace('T00:00:00Z', '');\n  }\n\n  if (s.length > 10) {\n    // time part wasn't stripped, can add timezone info\n    if (timeZoneOffset == null) {\n      s = s.replace('Z', '');\n    } else if (timeZoneOffset !== 0) {\n      s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true));\n    } // otherwise, its UTC-0 and we want to keep the Z\n\n  }\n\n  return s;\n} // formats the date, but with no time part\n// TODO: somehow merge with buildIsoString and stripZeroTime\n// TODO: rename. omit \"string\"\n\n\nfunction formatDayString(marker) {\n  return marker.toISOString().replace(/T.*$/, '');\n}\n\nfunction formatIsoMonthStr(marker) {\n  return marker.toISOString().match(/^\\d{4}-\\d{2}/)[0];\n} // TODO: use Date::toISOString and use everything after the T?\n\n\nfunction formatIsoTimeString(marker) {\n  return padStart(marker.getUTCHours(), 2) + ':' + padStart(marker.getUTCMinutes(), 2) + ':' + padStart(marker.getUTCSeconds(), 2);\n}\n\nfunction formatTimeZoneOffset(minutes) {\n  var doIso = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  var sign = minutes < 0 ? '-' : '+';\n  var abs = Math.abs(minutes);\n  var hours = Math.floor(abs / 60);\n  var mins = Math.round(abs % 60);\n\n  if (doIso) {\n    return \"\".concat(sign + padStart(hours, 2), \":\").concat(padStart(mins, 2));\n  }\n\n  return \"GMT\".concat(sign).concat(hours).concat(mins ? \":\".concat(padStart(mins, 2)) : '');\n}\n\nfunction memoize(workerFunc, resEquality, teardownFunc) {\n  var currentArgs;\n  var currentRes;\n  return function () {\n    for (var _len = arguments.length, newArgs = new Array(_len), _key = 0; _key < _len; _key++) {\n      newArgs[_key] = arguments[_key];\n    }\n\n    if (!currentArgs) {\n      currentRes = workerFunc.apply(this, newArgs);\n    } else if (!isArraysEqual(currentArgs, newArgs)) {\n      if (teardownFunc) {\n        teardownFunc(currentRes);\n      }\n\n      var res = workerFunc.apply(this, newArgs);\n\n      if (!resEquality || !resEquality(res, currentRes)) {\n        currentRes = res;\n      }\n    }\n\n    currentArgs = newArgs;\n    return currentRes;\n  };\n}\n\nfunction memoizeObjArg(workerFunc, resEquality, teardownFunc) {\n  var _this = this;\n\n  var currentArg;\n  var currentRes;\n  return function (newArg) {\n    if (!currentArg) {\n      currentRes = workerFunc.call(_this, newArg);\n    } else if (!isPropsEqual(currentArg, newArg)) {\n      if (teardownFunc) {\n        teardownFunc(currentRes);\n      }\n\n      var res = workerFunc.call(_this, newArg);\n\n      if (!resEquality || !resEquality(res, currentRes)) {\n        currentRes = res;\n      }\n    }\n\n    currentArg = newArg;\n    return currentRes;\n  };\n}\n\nfunction memoizeArraylike( // used at all?\nworkerFunc, resEquality, teardownFunc) {\n  var _this2 = this;\n\n  var currentArgSets = [];\n  var currentResults = [];\n  return function (newArgSets) {\n    var currentLen = currentArgSets.length;\n    var newLen = newArgSets.length;\n    var i = 0;\n\n    for (; i < currentLen; i += 1) {\n      if (!newArgSets[i]) {\n        // one of the old sets no longer exists\n        if (teardownFunc) {\n          teardownFunc(currentResults[i]);\n        }\n      } else if (!isArraysEqual(currentArgSets[i], newArgSets[i])) {\n        if (teardownFunc) {\n          teardownFunc(currentResults[i]);\n        }\n\n        var res = workerFunc.apply(_this2, newArgSets[i]);\n\n        if (!resEquality || !resEquality(res, currentResults[i])) {\n          currentResults[i] = res;\n        }\n      }\n    }\n\n    for (; i < newLen; i += 1) {\n      currentResults[i] = workerFunc.apply(_this2, newArgSets[i]);\n    }\n\n    currentArgSets = newArgSets;\n    currentResults.splice(newLen); // remove excess\n\n    return currentResults;\n  };\n}\n\nfunction memoizeHashlike(workerFunc, resEquality, teardownFunc) {\n  var _this3 = this;\n\n  var currentArgHash = {};\n  var currentResHash = {};\n  return function (newArgHash) {\n    var newResHash = {};\n\n    for (var key in newArgHash) {\n      if (!currentResHash[key]) {\n        newResHash[key] = workerFunc.apply(_this3, newArgHash[key]);\n      } else if (!isArraysEqual(currentArgHash[key], newArgHash[key])) {\n        if (teardownFunc) {\n          teardownFunc(currentResHash[key]);\n        }\n\n        var res = workerFunc.apply(_this3, newArgHash[key]);\n        newResHash[key] = resEquality && resEquality(res, currentResHash[key]) ? currentResHash[key] : res;\n      } else {\n        newResHash[key] = currentResHash[key];\n      }\n    }\n\n    currentArgHash = newArgHash;\n    currentResHash = newResHash;\n    return newResHash;\n  };\n}\n\nvar EXTENDED_SETTINGS_AND_SEVERITIES = {\n  week: 3,\n  separator: 0,\n  omitZeroMinute: 0,\n  meridiem: 0,\n  omitCommas: 0\n};\nvar STANDARD_DATE_PROP_SEVERITIES = {\n  timeZoneName: 7,\n  era: 6,\n  year: 5,\n  month: 4,\n  day: 2,\n  weekday: 2,\n  hour: 1,\n  minute: 1,\n  second: 1\n};\nvar MERIDIEM_RE = /\\s*([ap])\\.?m\\.?/i; // eats up leading spaces too\n\nvar COMMA_RE = /,/g; // we need re for globalness\n\nvar MULTI_SPACE_RE = /\\s+/g;\nvar LTR_RE = /\\u200e/g; // control character\n\nvar UTC_RE = /UTC|GMT/;\n\nvar NativeFormatter = /*#__PURE__*/function () {\n  function NativeFormatter(formatSettings) {\n    _classCallCheck(this, NativeFormatter);\n\n    var standardDateProps = {};\n    var extendedSettings = {};\n    var severity = 0;\n\n    for (var name in formatSettings) {\n      if (name in EXTENDED_SETTINGS_AND_SEVERITIES) {\n        extendedSettings[name] = formatSettings[name];\n        severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name], severity);\n      } else {\n        standardDateProps[name] = formatSettings[name];\n\n        if (name in STANDARD_DATE_PROP_SEVERITIES) {\n          // TODO: what about hour12? no severity\n          severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name], severity);\n        }\n      }\n    }\n\n    this.standardDateProps = standardDateProps;\n    this.extendedSettings = extendedSettings;\n    this.severity = severity;\n    this.buildFormattingFunc = memoize(buildFormattingFunc);\n  }\n\n  _createClass(NativeFormatter, [{\n    key: \"format\",\n    value: function format(date, context) {\n      return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date);\n    }\n  }, {\n    key: \"formatRange\",\n    value: function formatRange(start, end, context, betterDefaultSeparator) {\n      var standardDateProps = this.standardDateProps,\n          extendedSettings = this.extendedSettings;\n      var diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem);\n\n      if (!diffSeverity) {\n        return this.format(start, context);\n      }\n\n      var biggestUnitForPartial = diffSeverity;\n\n      if (biggestUnitForPartial > 1 && (standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') && (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') && (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')) {\n        biggestUnitForPartial = 1; // make it look like the dates are only different in terms of time\n      }\n\n      var full0 = this.format(start, context);\n      var full1 = this.format(end, context);\n\n      if (full0 === full1) {\n        return full0;\n      }\n\n      var partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial);\n      var partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context);\n      var partial0 = partialFormattingFunc(start);\n      var partial1 = partialFormattingFunc(end);\n      var insertion = findCommonInsertion(full0, partial0, full1, partial1);\n      var separator = extendedSettings.separator || betterDefaultSeparator || context.defaultSeparator || '';\n\n      if (insertion) {\n        return insertion.before + partial0 + separator + partial1 + insertion.after;\n      }\n\n      return full0 + separator + full1;\n    }\n  }, {\n    key: \"getLargestUnit\",\n    value: function getLargestUnit() {\n      switch (this.severity) {\n        case 7:\n        case 6:\n        case 5:\n          return 'year';\n\n        case 4:\n          return 'month';\n\n        case 3:\n          return 'week';\n\n        case 2:\n          return 'day';\n\n        default:\n          return 'time';\n        // really?\n      }\n    }\n  }]);\n\n  return NativeFormatter;\n}();\n\nfunction buildFormattingFunc(standardDateProps, extendedSettings, context) {\n  var standardDatePropCnt = Object.keys(standardDateProps).length;\n\n  if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') {\n    return function (date) {\n      return formatTimeZoneOffset(date.timeZoneOffset);\n    };\n  }\n\n  if (standardDatePropCnt === 0 && extendedSettings.week) {\n    return function (date) {\n      return formatWeekNumber(context.computeWeekNumber(date.marker), context.weekText, context.weekTextLong, context.locale, extendedSettings.week);\n    };\n  }\n\n  return buildNativeFormattingFunc(standardDateProps, extendedSettings, context);\n}\n\nfunction buildNativeFormattingFunc(standardDateProps, extendedSettings, context) {\n  standardDateProps = Object.assign({}, standardDateProps); // copy\n\n  extendedSettings = Object.assign({}, extendedSettings); // copy\n\n  sanitizeSettings(standardDateProps, extendedSettings);\n  standardDateProps.timeZone = 'UTC'; // we leverage the only guaranteed timeZone for our UTC markers\n\n  var normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps);\n  var zeroFormat; // needed?\n\n  if (extendedSettings.omitZeroMinute) {\n    var zeroProps = Object.assign({}, standardDateProps);\n    delete zeroProps.minute; // seconds and ms were already considered in sanitizeSettings\n\n    zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps);\n  }\n\n  return function (date) {\n    var marker = date.marker;\n    var format;\n\n    if (zeroFormat && !marker.getUTCMinutes()) {\n      format = zeroFormat;\n    } else {\n      format = normalFormat;\n    }\n\n    var s = format.format(marker);\n    return postProcess(s, date, standardDateProps, extendedSettings, context);\n  };\n}\n\nfunction sanitizeSettings(standardDateProps, extendedSettings) {\n  // deal with a browser inconsistency where formatting the timezone\n  // requires that the hour/minute be present.\n  if (standardDateProps.timeZoneName) {\n    if (!standardDateProps.hour) {\n      standardDateProps.hour = '2-digit';\n    }\n\n    if (!standardDateProps.minute) {\n      standardDateProps.minute = '2-digit';\n    }\n  } // only support short timezone names\n\n\n  if (standardDateProps.timeZoneName === 'long') {\n    standardDateProps.timeZoneName = 'short';\n  } // if requesting to display seconds, MUST display minutes\n\n\n  if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {\n    delete extendedSettings.omitZeroMinute;\n  }\n}\n\nfunction postProcess(s, date, standardDateProps, extendedSettings, context) {\n  s = s.replace(LTR_RE, ''); // remove left-to-right control chars. do first. good for other regexes\n\n  if (standardDateProps.timeZoneName === 'short') {\n    s = injectTzoStr(s, context.timeZone === 'UTC' || date.timeZoneOffset == null ? 'UTC' : // important to normalize for IE, which does \"GMT\"\n    formatTimeZoneOffset(date.timeZoneOffset));\n  }\n\n  if (extendedSettings.omitCommas) {\n    s = s.replace(COMMA_RE, '').trim();\n  }\n\n  if (extendedSettings.omitZeroMinute) {\n    s = s.replace(':00', ''); // zeroFormat doesn't always achieve this\n  } // ^ do anything that might create adjacent spaces before this point,\n  // because MERIDIEM_RE likes to eat up loading spaces\n\n\n  if (extendedSettings.meridiem === false) {\n    s = s.replace(MERIDIEM_RE, '').trim();\n  } else if (extendedSettings.meridiem === 'narrow') {\n    // a/p\n    s = s.replace(MERIDIEM_RE, function (m0, m1) {\n      return m1.toLocaleLowerCase();\n    });\n  } else if (extendedSettings.meridiem === 'short') {\n    // am/pm\n    s = s.replace(MERIDIEM_RE, function (m0, m1) {\n      return \"\".concat(m1.toLocaleLowerCase(), \"m\");\n    });\n  } else if (extendedSettings.meridiem === 'lowercase') {\n    // other meridiem transformers already converted to lowercase\n    s = s.replace(MERIDIEM_RE, function (m0) {\n      return m0.toLocaleLowerCase();\n    });\n  }\n\n  s = s.replace(MULTI_SPACE_RE, ' ');\n  s = s.trim();\n  return s;\n}\n\nfunction injectTzoStr(s, tzoStr) {\n  var replaced = false;\n  s = s.replace(UTC_RE, function () {\n    replaced = true;\n    return tzoStr;\n  }); // IE11 doesn't include UTC/GMT in the original string, so append to end\n\n  if (!replaced) {\n    s += \" \".concat(tzoStr);\n  }\n\n  return s;\n}\n\nfunction formatWeekNumber(num, weekText, weekTextLong, locale, display) {\n  var parts = [];\n\n  if (display === 'long') {\n    parts.push(weekTextLong);\n  } else if (display === 'short' || display === 'narrow') {\n    parts.push(weekText);\n  }\n\n  if (display === 'long' || display === 'short') {\n    parts.push(' ');\n  }\n\n  parts.push(locale.simpleNumberFormat.format(num));\n\n  if (locale.options.direction === 'rtl') {\n    // TODO: use control characters instead?\n    parts.reverse();\n  }\n\n  return parts.join('');\n} // Range Formatting Utils\n// 0 = exactly the same\n// 1 = different by time\n// and bigger\n\n\nfunction computeMarkerDiffSeverity(d0, d1, ca) {\n  if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {\n    return 5;\n  }\n\n  if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {\n    return 4;\n  }\n\n  if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {\n    return 2;\n  }\n\n  if (timeAsMs(d0) !== timeAsMs(d1)) {\n    return 1;\n  }\n\n  return 0;\n}\n\nfunction computePartialFormattingOptions(options, biggestUnit) {\n  var partialOptions = {};\n\n  for (var name in options) {\n    if (!(name in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone)\n    STANDARD_DATE_PROP_SEVERITIES[name] <= biggestUnit) {\n      partialOptions[name] = options[name];\n    }\n  }\n\n  return partialOptions;\n}\n\nfunction findCommonInsertion(full0, partial0, full1, partial1) {\n  var i0 = 0;\n\n  while (i0 < full0.length) {\n    var found0 = full0.indexOf(partial0, i0);\n\n    if (found0 === -1) {\n      break;\n    }\n\n    var before0 = full0.substr(0, found0);\n    i0 = found0 + partial0.length;\n    var after0 = full0.substr(i0);\n    var i1 = 0;\n\n    while (i1 < full1.length) {\n      var found1 = full1.indexOf(partial1, i1);\n\n      if (found1 === -1) {\n        break;\n      }\n\n      var before1 = full1.substr(0, found1);\n      i1 = found1 + partial1.length;\n      var after1 = full1.substr(i1);\n\n      if (before0 === before1 && after0 === after1) {\n        return {\n          before: before0,\n          after: after0\n        };\n      }\n    }\n  }\n\n  return null;\n}\n\nfunction expandZonedMarker(dateInfo, calendarSystem) {\n  var a = calendarSystem.markerToArray(dateInfo.marker);\n  return {\n    marker: dateInfo.marker,\n    timeZoneOffset: dateInfo.timeZoneOffset,\n    array: a,\n    year: a[0],\n    month: a[1],\n    day: a[2],\n    hour: a[3],\n    minute: a[4],\n    second: a[5],\n    millisecond: a[6]\n  };\n}\n\nfunction createVerboseFormattingArg(start, end, context, betterDefaultSeparator) {\n  var startInfo = expandZonedMarker(start, context.calendarSystem);\n  var endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null;\n  return {\n    date: startInfo,\n    start: startInfo,\n    end: endInfo,\n    timeZone: context.timeZone,\n    localeCodes: context.locale.codes,\n    defaultSeparator: betterDefaultSeparator || context.defaultSeparator\n  };\n}\n/*\nTODO: fix the terminology of \"formatter\" vs \"formatting func\"\n*/\n\n/*\nAt the time of instantiation, this object does not know which cmd-formatting system it will use.\nIt receives this at the time of formatting, as a setting.\n*/\n\n\nvar CmdFormatter = /*#__PURE__*/function () {\n  function CmdFormatter(cmdStr) {\n    _classCallCheck(this, CmdFormatter);\n\n    this.cmdStr = cmdStr;\n  }\n\n  _createClass(CmdFormatter, [{\n    key: \"format\",\n    value: function format(date, context, betterDefaultSeparator) {\n      return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, betterDefaultSeparator));\n    }\n  }, {\n    key: \"formatRange\",\n    value: function formatRange(start, end, context, betterDefaultSeparator) {\n      return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, betterDefaultSeparator));\n    }\n  }]);\n\n  return CmdFormatter;\n}();\n\nvar FuncFormatter = /*#__PURE__*/function () {\n  function FuncFormatter(func) {\n    _classCallCheck(this, FuncFormatter);\n\n    this.func = func;\n  }\n\n  _createClass(FuncFormatter, [{\n    key: \"format\",\n    value: function format(date, context, betterDefaultSeparator) {\n      return this.func(createVerboseFormattingArg(date, null, context, betterDefaultSeparator));\n    }\n  }, {\n    key: \"formatRange\",\n    value: function formatRange(start, end, context, betterDefaultSeparator) {\n      return this.func(createVerboseFormattingArg(start, end, context, betterDefaultSeparator));\n    }\n  }]);\n\n  return FuncFormatter;\n}();\n\nfunction createFormatter(input) {\n  if (_typeof(input) === 'object' && input) {\n    // non-null object\n    return new NativeFormatter(input);\n  }\n\n  if (typeof input === 'string') {\n    return new CmdFormatter(input);\n  }\n\n  if (typeof input === 'function') {\n    return new FuncFormatter(input);\n  }\n\n  return null;\n} // base options\n// ------------\n\n\nvar BASE_OPTION_REFINERS = {\n  navLinkDayClick: identity,\n  navLinkWeekClick: identity,\n  duration: createDuration,\n  bootstrapFontAwesome: identity,\n  buttonIcons: identity,\n  customButtons: identity,\n  defaultAllDayEventDuration: createDuration,\n  defaultTimedEventDuration: createDuration,\n  nextDayThreshold: createDuration,\n  scrollTime: createDuration,\n  scrollTimeReset: Boolean,\n  slotMinTime: createDuration,\n  slotMaxTime: createDuration,\n  dayPopoverFormat: createFormatter,\n  slotDuration: createDuration,\n  snapDuration: createDuration,\n  headerToolbar: identity,\n  footerToolbar: identity,\n  defaultRangeSeparator: String,\n  titleRangeSeparator: String,\n  forceEventDuration: Boolean,\n  dayHeaders: Boolean,\n  dayHeaderFormat: createFormatter,\n  dayHeaderClassNames: identity,\n  dayHeaderContent: identity,\n  dayHeaderDidMount: identity,\n  dayHeaderWillUnmount: identity,\n  dayCellClassNames: identity,\n  dayCellContent: identity,\n  dayCellDidMount: identity,\n  dayCellWillUnmount: identity,\n  initialView: String,\n  aspectRatio: Number,\n  weekends: Boolean,\n  weekNumberCalculation: identity,\n  weekNumbers: Boolean,\n  weekNumberClassNames: identity,\n  weekNumberContent: identity,\n  weekNumberDidMount: identity,\n  weekNumberWillUnmount: identity,\n  editable: Boolean,\n  viewClassNames: identity,\n  viewDidMount: identity,\n  viewWillUnmount: identity,\n  nowIndicator: Boolean,\n  nowIndicatorClassNames: identity,\n  nowIndicatorContent: identity,\n  nowIndicatorDidMount: identity,\n  nowIndicatorWillUnmount: identity,\n  showNonCurrentDates: Boolean,\n  lazyFetching: Boolean,\n  startParam: String,\n  endParam: String,\n  timeZoneParam: String,\n  timeZone: String,\n  locales: identity,\n  locale: identity,\n  themeSystem: String,\n  dragRevertDuration: Number,\n  dragScroll: Boolean,\n  allDayMaintainDuration: Boolean,\n  unselectAuto: Boolean,\n  dropAccept: identity,\n  eventOrder: parseFieldSpecs,\n  eventOrderStrict: Boolean,\n  handleWindowResize: Boolean,\n  windowResizeDelay: Number,\n  longPressDelay: Number,\n  eventDragMinDistance: Number,\n  expandRows: Boolean,\n  height: identity,\n  contentHeight: identity,\n  direction: String,\n  weekNumberFormat: createFormatter,\n  eventResizableFromStart: Boolean,\n  displayEventTime: Boolean,\n  displayEventEnd: Boolean,\n  weekText: String,\n  weekTextLong: String,\n  progressiveEventRendering: Boolean,\n  businessHours: identity,\n  initialDate: identity,\n  now: identity,\n  eventDataTransform: identity,\n  stickyHeaderDates: identity,\n  stickyFooterScrollbar: identity,\n  viewHeight: identity,\n  defaultAllDay: Boolean,\n  eventSourceFailure: identity,\n  eventSourceSuccess: identity,\n  eventDisplay: String,\n  eventStartEditable: Boolean,\n  eventDurationEditable: Boolean,\n  eventOverlap: identity,\n  eventConstraint: identity,\n  eventAllow: identity,\n  eventBackgroundColor: String,\n  eventBorderColor: String,\n  eventTextColor: String,\n  eventColor: String,\n  eventClassNames: identity,\n  eventContent: identity,\n  eventDidMount: identity,\n  eventWillUnmount: identity,\n  selectConstraint: identity,\n  selectOverlap: identity,\n  selectAllow: identity,\n  droppable: Boolean,\n  unselectCancel: String,\n  slotLabelFormat: identity,\n  slotLaneClassNames: identity,\n  slotLaneContent: identity,\n  slotLaneDidMount: identity,\n  slotLaneWillUnmount: identity,\n  slotLabelClassNames: identity,\n  slotLabelContent: identity,\n  slotLabelDidMount: identity,\n  slotLabelWillUnmount: identity,\n  dayMaxEvents: identity,\n  dayMaxEventRows: identity,\n  dayMinWidth: Number,\n  slotLabelInterval: createDuration,\n  allDayText: String,\n  allDayClassNames: identity,\n  allDayContent: identity,\n  allDayDidMount: identity,\n  allDayWillUnmount: identity,\n  slotMinWidth: Number,\n  navLinks: Boolean,\n  eventTimeFormat: createFormatter,\n  rerenderDelay: Number,\n  moreLinkText: identity,\n  moreLinkHint: identity,\n  selectMinDistance: Number,\n  selectable: Boolean,\n  selectLongPressDelay: Number,\n  eventLongPressDelay: Number,\n  selectMirror: Boolean,\n  eventMaxStack: Number,\n  eventMinHeight: Number,\n  eventMinWidth: Number,\n  eventShortHeight: Number,\n  slotEventOverlap: Boolean,\n  plugins: identity,\n  firstDay: Number,\n  dayCount: Number,\n  dateAlignment: String,\n  dateIncrement: createDuration,\n  hiddenDays: identity,\n  fixedWeekCount: Boolean,\n  validRange: identity,\n  visibleRange: identity,\n  titleFormat: identity,\n  eventInteractive: Boolean,\n  // only used by list-view, but languages define the value, so we need it in base options\n  noEventsText: String,\n  viewHint: identity,\n  navLinkHint: identity,\n  closeHint: String,\n  timeHint: String,\n  eventHint: String,\n  moreLinkClick: identity,\n  moreLinkClassNames: identity,\n  moreLinkContent: identity,\n  moreLinkDidMount: identity,\n  moreLinkWillUnmount: identity,\n  monthStartFormat: createFormatter,\n  // for connectors\n  // (can't be part of plugin system b/c must be provided at runtime)\n  handleCustomRendering: identity,\n  customRenderingMetaMap: identity,\n  customRenderingReplaces: Boolean\n}; // do NOT give a type here. need `typeof BASE_OPTION_DEFAULTS` to give real results.\n// raw values.\n\nvar BASE_OPTION_DEFAULTS = {\n  eventDisplay: 'auto',\n  defaultRangeSeparator: ' - ',\n  titleRangeSeparator: \" \\u2013 \",\n  defaultTimedEventDuration: '01:00:00',\n  defaultAllDayEventDuration: {\n    day: 1\n  },\n  forceEventDuration: false,\n  nextDayThreshold: '00:00:00',\n  dayHeaders: true,\n  initialView: '',\n  aspectRatio: 1.35,\n  headerToolbar: {\n    start: 'title',\n    center: '',\n    end: 'today prev,next'\n  },\n  weekends: true,\n  weekNumbers: false,\n  weekNumberCalculation: 'local',\n  editable: false,\n  nowIndicator: false,\n  scrollTime: '06:00:00',\n  scrollTimeReset: true,\n  slotMinTime: '00:00:00',\n  slotMaxTime: '24:00:00',\n  showNonCurrentDates: true,\n  lazyFetching: true,\n  startParam: 'start',\n  endParam: 'end',\n  timeZoneParam: 'timeZone',\n  timeZone: 'local',\n  locales: [],\n  locale: '',\n  themeSystem: 'standard',\n  dragRevertDuration: 500,\n  dragScroll: true,\n  allDayMaintainDuration: false,\n  unselectAuto: true,\n  dropAccept: '*',\n  eventOrder: 'start,-duration,allDay,title',\n  dayPopoverFormat: {\n    month: 'long',\n    day: 'numeric',\n    year: 'numeric'\n  },\n  handleWindowResize: true,\n  windowResizeDelay: 100,\n  longPressDelay: 1000,\n  eventDragMinDistance: 5,\n  expandRows: false,\n  navLinks: false,\n  selectable: false,\n  eventMinHeight: 15,\n  eventMinWidth: 30,\n  eventShortHeight: 30,\n  monthStartFormat: {\n    month: 'long',\n    day: 'numeric'\n  }\n}; // calendar listeners\n// ------------------\n\nvar CALENDAR_LISTENER_REFINERS = {\n  datesSet: identity,\n  eventsSet: identity,\n  eventAdd: identity,\n  eventChange: identity,\n  eventRemove: identity,\n  windowResize: identity,\n  eventClick: identity,\n  eventMouseEnter: identity,\n  eventMouseLeave: identity,\n  select: identity,\n  unselect: identity,\n  loading: identity,\n  // internal\n  _unmount: identity,\n  _beforeprint: identity,\n  _afterprint: identity,\n  _noEventDrop: identity,\n  _noEventResize: identity,\n  _resize: identity,\n  _scrollRequest: identity\n}; // calendar-specific options\n// -------------------------\n\nvar CALENDAR_OPTION_REFINERS = {\n  buttonText: identity,\n  buttonHints: identity,\n  views: identity,\n  plugins: identity,\n  initialEvents: identity,\n  events: identity,\n  eventSources: identity\n};\n\nvar COMPLEX_OPTION_COMPARATORS = _defineProperty({\n  headerToolbar: isMaybeObjectsEqual,\n  footerToolbar: isMaybeObjectsEqual,\n  buttonText: isMaybeObjectsEqual,\n  buttonHints: isMaybeObjectsEqual,\n  buttonIcons: isMaybeObjectsEqual,\n  dateIncrement: isMaybeObjectsEqual,\n  plugins: isMaybeArraysEqual,\n  events: isMaybeArraysEqual,\n  eventSources: isMaybeArraysEqual\n}, 'resources', isMaybeArraysEqual);\n\nfunction isMaybeObjectsEqual(a, b) {\n  if (_typeof(a) === 'object' && _typeof(b) === 'object' && a && b) {\n    // both non-null objects\n    return isPropsEqual(a, b);\n  }\n\n  return a === b;\n}\n\nfunction isMaybeArraysEqual(a, b) {\n  if (Array.isArray(a) && Array.isArray(b)) {\n    return isArraysEqual(a, b);\n  }\n\n  return a === b;\n} // view-specific options\n// ---------------------\n\n\nvar VIEW_OPTION_REFINERS = {\n  type: String,\n  component: identity,\n  buttonText: String,\n  buttonTextKey: String,\n  dateProfileGeneratorClass: identity,\n  usesMinMaxTime: Boolean,\n  classNames: identity,\n  content: identity,\n  didMount: identity,\n  willUnmount: identity\n}; // util funcs\n// ----------------------------------------------------------------------------------------------------\n\nfunction mergeRawOptions(optionSets) {\n  return mergeProps(optionSets, COMPLEX_OPTION_COMPARATORS);\n}\n\nfunction refineProps(input, refiners) {\n  var refined = {};\n  var extra = {};\n\n  for (var propName in refiners) {\n    if (propName in input) {\n      refined[propName] = refiners[propName](input[propName]);\n    }\n  }\n\n  for (var _propName in input) {\n    if (!(_propName in refiners)) {\n      extra[_propName] = input[_propName];\n    }\n  }\n\n  return {\n    refined: refined,\n    extra: extra\n  };\n}\n\nfunction identity(raw) {\n  return raw;\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty; // Merges an array of objects into a single object.\n// The second argument allows for an array of property names who's object values will be merged together.\n\nfunction mergeProps(propObjs, complexPropsMap) {\n  var dest = {};\n\n  if (complexPropsMap) {\n    for (var name in complexPropsMap) {\n      if (complexPropsMap[name] === isMaybeObjectsEqual) {\n        // implies that it's object-mergeable\n        var complexObjs = []; // collect the trailing object values, stopping when a non-object is discovered\n\n        for (var i = propObjs.length - 1; i >= 0; i -= 1) {\n          var val = propObjs[i][name];\n\n          if (_typeof(val) === 'object' && val) {\n            // non-null object\n            complexObjs.unshift(val);\n          } else if (val !== undefined) {\n            dest[name] = val; // if there were no objects, this value will be used\n\n            break;\n          }\n        } // if the trailing values were objects, use the merged value\n\n\n        if (complexObjs.length) {\n          dest[name] = mergeProps(complexObjs);\n        }\n      }\n    }\n  } // copy values into the destination, going from last to first\n\n\n  for (var _i = propObjs.length - 1; _i >= 0; _i -= 1) {\n    var props = propObjs[_i];\n\n    for (var _name in props) {\n      if (!(_name in dest)) {\n        // if already assigned by previous props or complex props, don't reassign\n        dest[_name] = props[_name];\n      }\n    }\n  }\n\n  return dest;\n}\n\nfunction filterHash(hash, func) {\n  var filtered = {};\n\n  for (var key in hash) {\n    if (func(hash[key], key)) {\n      filtered[key] = hash[key];\n    }\n  }\n\n  return filtered;\n}\n\nfunction mapHash(hash, func) {\n  var newHash = {};\n\n  for (var key in hash) {\n    newHash[key] = func(hash[key], key);\n  }\n\n  return newHash;\n}\n\nfunction arrayToHash(a) {\n  var hash = {};\n\n  var _iterator2 = _createForOfIteratorHelper(a),\n      _step2;\n\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var item = _step2.value;\n      hash[item] = true;\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n\n  return hash;\n} // TODO: reassess browser support\n// https://caniuse.com/?search=object.values\n\n\nfunction hashValuesToArray(obj) {\n  var a = [];\n\n  for (var key in obj) {\n    a.push(obj[key]);\n  }\n\n  return a;\n}\n\nfunction isPropsEqual(obj0, obj1) {\n  if (obj0 === obj1) {\n    return true;\n  }\n\n  for (var key in obj0) {\n    if (hasOwnProperty.call(obj0, key)) {\n      if (!(key in obj1)) {\n        return false;\n      }\n    }\n  }\n\n  for (var _key2 in obj1) {\n    if (hasOwnProperty.call(obj1, _key2)) {\n      if (obj0[_key2] !== obj1[_key2]) {\n        return false;\n      }\n    }\n  }\n\n  return true;\n}\n\nvar HANDLER_RE = /^on[A-Z]/;\n\nfunction isNonHandlerPropsEqual(obj0, obj1) {\n  var keys = getUnequalProps(obj0, obj1);\n\n  var _iterator3 = _createForOfIteratorHelper(keys),\n      _step3;\n\n  try {\n    for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n      var key = _step3.value;\n\n      if (!HANDLER_RE.test(key)) {\n        return false;\n      }\n    }\n  } catch (err) {\n    _iterator3.e(err);\n  } finally {\n    _iterator3.f();\n  }\n\n  return true;\n}\n\nfunction getUnequalProps(obj0, obj1) {\n  var keys = [];\n\n  for (var key in obj0) {\n    if (hasOwnProperty.call(obj0, key)) {\n      if (!(key in obj1)) {\n        keys.push(key);\n      }\n    }\n  }\n\n  for (var _key3 in obj1) {\n    if (hasOwnProperty.call(obj1, _key3)) {\n      if (obj0[_key3] !== obj1[_key3]) {\n        keys.push(_key3);\n      }\n    }\n  }\n\n  return keys;\n}\n\nfunction compareObjs(oldProps, newProps) {\n  var equalityFuncs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  if (oldProps === newProps) {\n    return true;\n  }\n\n  for (var key in newProps) {\n    if (key in oldProps && isObjValsEqual(oldProps[key], newProps[key], equalityFuncs[key])) ;else {\n      return false;\n    }\n  } // check for props that were omitted in the new\n\n\n  for (var _key4 in oldProps) {\n    if (!(_key4 in newProps)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n/*\nassumed \"true\" equality for handler names like \"onReceiveSomething\"\n*/\n\n\nfunction isObjValsEqual(val0, val1, comparator) {\n  if (val0 === val1 || comparator === true) {\n    return true;\n  }\n\n  if (comparator) {\n    return comparator(val0, val1);\n  }\n\n  return false;\n}\n\nfunction collectFromHash(hash) {\n  var startIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var endIndex = arguments.length > 2 ? arguments[2] : undefined;\n  var step = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n  var res = [];\n\n  if (endIndex == null) {\n    endIndex = Object.keys(hash).length;\n  }\n\n  for (var i = startIndex; i < endIndex; i += step) {\n    var val = hash[i];\n\n    if (val !== undefined) {\n      // will disregard undefined for sparse arrays\n      res.push(val);\n    }\n  }\n\n  return res;\n}\n\nvar calendarSystemClassMap = {};\n\nfunction registerCalendarSystem(name, theClass) {\n  calendarSystemClassMap[name] = theClass;\n}\n\nfunction createCalendarSystem(name) {\n  return new calendarSystemClassMap[name]();\n}\n\nvar GregorianCalendarSystem = /*#__PURE__*/function () {\n  function GregorianCalendarSystem() {\n    _classCallCheck(this, GregorianCalendarSystem);\n  }\n\n  _createClass(GregorianCalendarSystem, [{\n    key: \"getMarkerYear\",\n    value: function getMarkerYear(d) {\n      return d.getUTCFullYear();\n    }\n  }, {\n    key: \"getMarkerMonth\",\n    value: function getMarkerMonth(d) {\n      return d.getUTCMonth();\n    }\n  }, {\n    key: \"getMarkerDay\",\n    value: function getMarkerDay(d) {\n      return d.getUTCDate();\n    }\n  }, {\n    key: \"arrayToMarker\",\n    value: function arrayToMarker(arr) {\n      return arrayToUtcDate(arr);\n    }\n  }, {\n    key: \"markerToArray\",\n    value: function markerToArray(marker) {\n      return dateToUtcArray(marker);\n    }\n  }]);\n\n  return GregorianCalendarSystem;\n}();\n\nregisterCalendarSystem('gregory', GregorianCalendarSystem);\nvar ISO_RE = /^\\s*(\\d{4})(-?(\\d{2})(-?(\\d{2})([T ](\\d{2}):?(\\d{2})(:?(\\d{2})(\\.(\\d+))?)?(Z|(([-+])(\\d{2})(:?(\\d{2}))?))?)?)?)?$/;\n\nfunction _parse(str) {\n  var m = ISO_RE.exec(str);\n\n  if (m) {\n    var marker = new Date(Date.UTC(Number(m[1]), m[3] ? Number(m[3]) - 1 : 0, Number(m[5] || 1), Number(m[7] || 0), Number(m[8] || 0), Number(m[10] || 0), m[12] ? Number(\"0.\".concat(m[12])) * 1000 : 0));\n\n    if (isValidDate(marker)) {\n      var timeZoneOffset = null;\n\n      if (m[13]) {\n        timeZoneOffset = (m[15] === '-' ? -1 : 1) * (Number(m[16] || 0) * 60 + Number(m[18] || 0));\n      }\n\n      return {\n        marker: marker,\n        isTimeUnspecified: !m[6],\n        timeZoneOffset: timeZoneOffset\n      };\n    }\n  }\n\n  return null;\n}\n\nvar DateEnv = /*#__PURE__*/function () {\n  function DateEnv(settings) {\n    _classCallCheck(this, DateEnv);\n\n    var timeZone = this.timeZone = settings.timeZone;\n    var isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC';\n\n    if (settings.namedTimeZoneImpl && isNamedTimeZone) {\n      this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone);\n    }\n\n    this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl);\n    this.calendarSystem = createCalendarSystem(settings.calendarSystem);\n    this.locale = settings.locale;\n    this.weekDow = settings.locale.week.dow;\n    this.weekDoy = settings.locale.week.doy;\n\n    if (settings.weekNumberCalculation === 'ISO') {\n      this.weekDow = 1;\n      this.weekDoy = 4;\n    }\n\n    if (typeof settings.firstDay === 'number') {\n      this.weekDow = settings.firstDay;\n    }\n\n    if (typeof settings.weekNumberCalculation === 'function') {\n      this.weekNumberFunc = settings.weekNumberCalculation;\n    }\n\n    this.weekText = settings.weekText != null ? settings.weekText : settings.locale.options.weekText;\n    this.weekTextLong = (settings.weekTextLong != null ? settings.weekTextLong : settings.locale.options.weekTextLong) || this.weekText;\n    this.cmdFormatter = settings.cmdFormatter;\n    this.defaultSeparator = settings.defaultSeparator;\n  } // Creating / Parsing\n\n\n  _createClass(DateEnv, [{\n    key: \"createMarker\",\n    value: function createMarker(input) {\n      var meta = this.createMarkerMeta(input);\n\n      if (meta === null) {\n        return null;\n      }\n\n      return meta.marker;\n    }\n  }, {\n    key: \"createNowMarker\",\n    value: function createNowMarker() {\n      if (this.canComputeOffset) {\n        return this.timestampToMarker(new Date().valueOf());\n      } // if we can't compute the current date val for a timezone,\n      // better to give the current local date vals than UTC\n\n\n      return arrayToUtcDate(dateToLocalArray(new Date()));\n    }\n  }, {\n    key: \"createMarkerMeta\",\n    value: function createMarkerMeta(input) {\n      if (typeof input === 'string') {\n        return this.parse(input);\n      }\n\n      var marker = null;\n\n      if (typeof input === 'number') {\n        marker = this.timestampToMarker(input);\n      } else if (input instanceof Date) {\n        input = input.valueOf();\n\n        if (!isNaN(input)) {\n          marker = this.timestampToMarker(input);\n        }\n      } else if (Array.isArray(input)) {\n        marker = arrayToUtcDate(input);\n      }\n\n      if (marker === null || !isValidDate(marker)) {\n        return null;\n      }\n\n      return {\n        marker: marker,\n        isTimeUnspecified: false,\n        forcedTzo: null\n      };\n    }\n  }, {\n    key: \"parse\",\n    value: function parse(s) {\n      var parts = _parse(s);\n\n      if (parts === null) {\n        return null;\n      }\n\n      var marker = parts.marker;\n      var forcedTzo = null;\n\n      if (parts.timeZoneOffset !== null) {\n        if (this.canComputeOffset) {\n          marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000);\n        } else {\n          forcedTzo = parts.timeZoneOffset;\n        }\n      }\n\n      return {\n        marker: marker,\n        isTimeUnspecified: parts.isTimeUnspecified,\n        forcedTzo: forcedTzo\n      };\n    } // Accessors\n\n  }, {\n    key: \"getYear\",\n    value: function getYear(marker) {\n      return this.calendarSystem.getMarkerYear(marker);\n    }\n  }, {\n    key: \"getMonth\",\n    value: function getMonth(marker) {\n      return this.calendarSystem.getMarkerMonth(marker);\n    }\n  }, {\n    key: \"getDay\",\n    value: function getDay(marker) {\n      return this.calendarSystem.getMarkerDay(marker);\n    } // Adding / Subtracting\n\n  }, {\n    key: \"add\",\n    value: function add(marker, dur) {\n      var a = this.calendarSystem.markerToArray(marker);\n      a[0] += dur.years;\n      a[1] += dur.months;\n      a[2] += dur.days;\n      a[6] += dur.milliseconds;\n      return this.calendarSystem.arrayToMarker(a);\n    }\n  }, {\n    key: \"subtract\",\n    value: function subtract(marker, dur) {\n      var a = this.calendarSystem.markerToArray(marker);\n      a[0] -= dur.years;\n      a[1] -= dur.months;\n      a[2] -= dur.days;\n      a[6] -= dur.milliseconds;\n      return this.calendarSystem.arrayToMarker(a);\n    }\n  }, {\n    key: \"addYears\",\n    value: function addYears(marker, n) {\n      var a = this.calendarSystem.markerToArray(marker);\n      a[0] += n;\n      return this.calendarSystem.arrayToMarker(a);\n    }\n  }, {\n    key: \"addMonths\",\n    value: function addMonths(marker, n) {\n      var a = this.calendarSystem.markerToArray(marker);\n      a[1] += n;\n      return this.calendarSystem.arrayToMarker(a);\n    } // Diffing Whole Units\n\n  }, {\n    key: \"diffWholeYears\",\n    value: function diffWholeYears(m0, m1) {\n      var calendarSystem = this.calendarSystem;\n\n      if (timeAsMs(m0) === timeAsMs(m1) && calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) && calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)) {\n        return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0);\n      }\n\n      return null;\n    }\n  }, {\n    key: \"diffWholeMonths\",\n    value: function diffWholeMonths(m0, m1) {\n      var calendarSystem = this.calendarSystem;\n\n      if (timeAsMs(m0) === timeAsMs(m1) && calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)) {\n        return calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0) + (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12;\n      }\n\n      return null;\n    } // Range / Duration\n\n  }, {\n    key: \"greatestWholeUnit\",\n    value: function greatestWholeUnit(m0, m1) {\n      var n = this.diffWholeYears(m0, m1);\n\n      if (n !== null) {\n        return {\n          unit: 'year',\n          value: n\n        };\n      }\n\n      n = this.diffWholeMonths(m0, m1);\n\n      if (n !== null) {\n        return {\n          unit: 'month',\n          value: n\n        };\n      }\n\n      n = diffWholeWeeks(m0, m1);\n\n      if (n !== null) {\n        return {\n          unit: 'week',\n          value: n\n        };\n      }\n\n      n = diffWholeDays(m0, m1);\n\n      if (n !== null) {\n        return {\n          unit: 'day',\n          value: n\n        };\n      }\n\n      n = diffHours(m0, m1);\n\n      if (isInt(n)) {\n        return {\n          unit: 'hour',\n          value: n\n        };\n      }\n\n      n = diffMinutes(m0, m1);\n\n      if (isInt(n)) {\n        return {\n          unit: 'minute',\n          value: n\n        };\n      }\n\n      n = diffSeconds(m0, m1);\n\n      if (isInt(n)) {\n        return {\n          unit: 'second',\n          value: n\n        };\n      }\n\n      return {\n        unit: 'millisecond',\n        value: m1.valueOf() - m0.valueOf()\n      };\n    }\n  }, {\n    key: \"countDurationsBetween\",\n    value: function countDurationsBetween(m0, m1, d) {\n      // TODO: can use greatestWholeUnit\n      var diff;\n\n      if (d.years) {\n        diff = this.diffWholeYears(m0, m1);\n\n        if (diff !== null) {\n          return diff / asRoughYears(d);\n        }\n      }\n\n      if (d.months) {\n        diff = this.diffWholeMonths(m0, m1);\n\n        if (diff !== null) {\n          return diff / asRoughMonths(d);\n        }\n      }\n\n      if (d.days) {\n        diff = diffWholeDays(m0, m1);\n\n        if (diff !== null) {\n          return diff / asRoughDays(d);\n        }\n      }\n\n      return (m1.valueOf() - m0.valueOf()) / asRoughMs(d);\n    } // Start-Of\n    // these DON'T return zoned-dates. only UTC start-of dates\n\n  }, {\n    key: \"startOf\",\n    value: function startOf(m, unit) {\n      if (unit === 'year') {\n        return this.startOfYear(m);\n      }\n\n      if (unit === 'month') {\n        return this.startOfMonth(m);\n      }\n\n      if (unit === 'week') {\n        return this.startOfWeek(m);\n      }\n\n      if (unit === 'day') {\n        return startOfDay(m);\n      }\n\n      if (unit === 'hour') {\n        return startOfHour(m);\n      }\n\n      if (unit === 'minute') {\n        return startOfMinute(m);\n      }\n\n      if (unit === 'second') {\n        return startOfSecond(m);\n      }\n\n      return null;\n    }\n  }, {\n    key: \"startOfYear\",\n    value: function startOfYear(m) {\n      return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(m)]);\n    }\n  }, {\n    key: \"startOfMonth\",\n    value: function startOfMonth(m) {\n      return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(m), this.calendarSystem.getMarkerMonth(m)]);\n    }\n  }, {\n    key: \"startOfWeek\",\n    value: function startOfWeek(m) {\n      return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(m), this.calendarSystem.getMarkerMonth(m), m.getUTCDate() - (m.getUTCDay() - this.weekDow + 7) % 7]);\n    } // Week Number\n\n  }, {\n    key: \"computeWeekNumber\",\n    value: function computeWeekNumber(marker) {\n      if (this.weekNumberFunc) {\n        return this.weekNumberFunc(this.toDate(marker));\n      }\n\n      return weekOfYear(marker, this.weekDow, this.weekDoy);\n    } // TODO: choke on timeZoneName: long\n\n  }, {\n    key: \"format\",\n    value: function format(marker, formatter) {\n      var dateOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      return formatter.format({\n        marker: marker,\n        timeZoneOffset: dateOptions.forcedTzo != null ? dateOptions.forcedTzo : this.offsetForMarker(marker)\n      }, this);\n    }\n  }, {\n    key: \"formatRange\",\n    value: function formatRange(start, end, formatter) {\n      var dateOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n      if (dateOptions.isEndExclusive) {\n        end = addMs(end, -1);\n      }\n\n      return formatter.formatRange({\n        marker: start,\n        timeZoneOffset: dateOptions.forcedStartTzo != null ? dateOptions.forcedStartTzo : this.offsetForMarker(start)\n      }, {\n        marker: end,\n        timeZoneOffset: dateOptions.forcedEndTzo != null ? dateOptions.forcedEndTzo : this.offsetForMarker(end)\n      }, this, dateOptions.defaultSeparator);\n    }\n    /*\n    DUMB: the omitTime arg is dumb. if we omit the time, we want to omit the timezone offset. and if we do that,\n    might as well use buildIsoString or some other util directly\n    */\n\n  }, {\n    key: \"formatIso\",\n    value: function formatIso(marker) {\n      var extraOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var timeZoneOffset = null;\n\n      if (!extraOptions.omitTimeZoneOffset) {\n        if (extraOptions.forcedTzo != null) {\n          timeZoneOffset = extraOptions.forcedTzo;\n        } else {\n          timeZoneOffset = this.offsetForMarker(marker);\n        }\n      }\n\n      return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime);\n    } // TimeZone\n\n  }, {\n    key: \"timestampToMarker\",\n    value: function timestampToMarker(ms) {\n      if (this.timeZone === 'local') {\n        return arrayToUtcDate(dateToLocalArray(new Date(ms)));\n      }\n\n      if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {\n        return new Date(ms);\n      }\n\n      return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms));\n    }\n  }, {\n    key: \"offsetForMarker\",\n    value: function offsetForMarker(m) {\n      if (this.timeZone === 'local') {\n        return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset(); // convert \"inverse\" offset to \"normal\" offset\n      }\n\n      if (this.timeZone === 'UTC') {\n        return 0;\n      }\n\n      if (this.namedTimeZoneImpl) {\n        return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m));\n      }\n\n      return null;\n    } // Conversion\n\n  }, {\n    key: \"toDate\",\n    value: function toDate(m, forcedTzo) {\n      if (this.timeZone === 'local') {\n        return arrayToLocalDate(dateToUtcArray(m));\n      }\n\n      if (this.timeZone === 'UTC') {\n        return new Date(m.valueOf()); // make sure it's a copy\n      }\n\n      if (!this.namedTimeZoneImpl) {\n        return new Date(m.valueOf() - (forcedTzo || 0));\n      }\n\n      return new Date(m.valueOf() - this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60);\n    }\n  }]);\n\n  return DateEnv;\n}();\n\nvar Theme = /*#__PURE__*/function () {\n  function Theme(calendarOptions) {\n    _classCallCheck(this, Theme);\n\n    if (this.iconOverrideOption) {\n      this.setIconOverride(calendarOptions[this.iconOverrideOption]);\n    }\n  }\n\n  _createClass(Theme, [{\n    key: \"setIconOverride\",\n    value: function setIconOverride(iconOverrideHash) {\n      var iconClassesCopy;\n      var buttonName;\n\n      if (_typeof(iconOverrideHash) === 'object' && iconOverrideHash) {\n        // non-null object\n        iconClassesCopy = Object.assign({}, this.iconClasses);\n\n        for (buttonName in iconOverrideHash) {\n          iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);\n        }\n\n        this.iconClasses = iconClassesCopy;\n      } else if (iconOverrideHash === false) {\n        this.iconClasses = {};\n      }\n    }\n  }, {\n    key: \"applyIconOverridePrefix\",\n    value: function applyIconOverridePrefix(className) {\n      var prefix = this.iconOverridePrefix;\n\n      if (prefix && className.indexOf(prefix) !== 0) {\n        // if not already present\n        className = prefix + className;\n      }\n\n      return className;\n    }\n  }, {\n    key: \"getClass\",\n    value: function getClass(key) {\n      return this.classes[key] || '';\n    }\n  }, {\n    key: \"getIconClass\",\n    value: function getIconClass(buttonName, isRtl) {\n      var className;\n\n      if (isRtl && this.rtlIconClasses) {\n        className = this.rtlIconClasses[buttonName] || this.iconClasses[buttonName];\n      } else {\n        className = this.iconClasses[buttonName];\n      }\n\n      if (className) {\n        return \"\".concat(this.baseIconClass, \" \").concat(className);\n      }\n\n      return '';\n    }\n  }, {\n    key: \"getCustomButtonIconClass\",\n    value: function getCustomButtonIconClass(customButtonProps) {\n      var className;\n\n      if (this.iconOverrideCustomButtonOption) {\n        className = customButtonProps[this.iconOverrideCustomButtonOption];\n\n        if (className) {\n          return \"\".concat(this.baseIconClass, \" \").concat(this.applyIconOverridePrefix(className));\n        }\n      }\n\n      return '';\n    }\n  }]);\n\n  return Theme;\n}();\n\nTheme.prototype.classes = {};\nTheme.prototype.iconClasses = {};\nTheme.prototype.baseIconClass = '';\nTheme.prototype.iconOverridePrefix = '';\n/*\nNOTE: this can be a public API, especially createElement for hooks.\nSee examples/typescript-scheduler/src/index.ts\n*/\n\nfunction flushSync(runBeforeFlush) {\n  runBeforeFlush();\n  var oldDebounceRendering = preact.options.debounceRendering; // orig\n\n  var callbackQ = [];\n\n  function execCallbackSync(callback) {\n    callbackQ.push(callback);\n  }\n\n  preact.options.debounceRendering = execCallbackSync;\n  preact.render(preact.createElement(FakeComponent, {}), document.createElement('div'));\n\n  while (callbackQ.length) {\n    callbackQ.shift()();\n  }\n\n  preact.options.debounceRendering = oldDebounceRendering;\n}\n\nvar FakeComponent = /*#__PURE__*/function (_preact$Component) {\n  _inherits(FakeComponent, _preact$Component);\n\n  var _super = _createSuper(FakeComponent);\n\n  function FakeComponent() {\n    _classCallCheck(this, FakeComponent);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(FakeComponent, [{\n    key: \"render\",\n    value: function render() {\n      return preact.createElement('div', {});\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.setState({});\n    }\n  }]);\n\n  return FakeComponent;\n}(preact.Component); // TODO: use preact/compat instead?\n\n\nfunction createContext(defaultValue) {\n  var ContextType = preact.createContext(defaultValue);\n  var origProvider = ContextType.Provider;\n\n  ContextType.Provider = function () {\n    var _this4 = this;\n\n    var isNew = !this.getChildContext;\n    var children = origProvider.apply(this, arguments); // eslint-disable-line prefer-rest-params\n\n    if (isNew) {\n      var subs = [];\n\n      this.shouldComponentUpdate = function (_props) {\n        if (_this4.props.value !== _props.value) {\n          subs.forEach(function (c) {\n            c.context = _props.value;\n            c.forceUpdate();\n          });\n        }\n      };\n\n      this.sub = function (c) {\n        subs.push(c);\n        var old = c.componentWillUnmount;\n\n        c.componentWillUnmount = function () {\n          subs.splice(subs.indexOf(c), 1);\n          old && old.call(c);\n        };\n      };\n    }\n\n    return children;\n  };\n\n  return ContextType;\n}\n\nvar ScrollResponder = /*#__PURE__*/function () {\n  function ScrollResponder(execFunc, emitter, scrollTime, scrollTimeReset) {\n    var _this5 = this;\n\n    _classCallCheck(this, ScrollResponder);\n\n    this.execFunc = execFunc;\n    this.emitter = emitter;\n    this.scrollTime = scrollTime;\n    this.scrollTimeReset = scrollTimeReset;\n\n    this.handleScrollRequest = function (request) {\n      _this5.queuedRequest = Object.assign({}, _this5.queuedRequest || {}, request);\n\n      _this5.drain();\n    };\n\n    emitter.on('_scrollRequest', this.handleScrollRequest);\n    this.fireInitialScroll();\n  }\n\n  _createClass(ScrollResponder, [{\n    key: \"detach\",\n    value: function detach() {\n      this.emitter.off('_scrollRequest', this.handleScrollRequest);\n    }\n  }, {\n    key: \"update\",\n    value: function update(isDatesNew) {\n      if (isDatesNew && this.scrollTimeReset) {\n        this.fireInitialScroll(); // will drain\n      } else {\n        this.drain();\n      }\n    }\n  }, {\n    key: \"fireInitialScroll\",\n    value: function fireInitialScroll() {\n      this.handleScrollRequest({\n        time: this.scrollTime\n      });\n    }\n  }, {\n    key: \"drain\",\n    value: function drain() {\n      if (this.queuedRequest && this.execFunc(this.queuedRequest)) {\n        this.queuedRequest = null;\n      }\n    }\n  }]);\n\n  return ScrollResponder;\n}();\n\nvar ViewContextType = createContext({}); // for Components\n\nfunction buildViewContext(viewSpec, viewApi, viewOptions, dateProfileGenerator, dateEnv, theme, pluginHooks, dispatch, getCurrentData, emitter, calendarApi, registerInteractiveComponent, unregisterInteractiveComponent) {\n  return {\n    dateEnv: dateEnv,\n    options: viewOptions,\n    pluginHooks: pluginHooks,\n    emitter: emitter,\n    dispatch: dispatch,\n    getCurrentData: getCurrentData,\n    calendarApi: calendarApi,\n    viewSpec: viewSpec,\n    viewApi: viewApi,\n    dateProfileGenerator: dateProfileGenerator,\n    theme: theme,\n    isRtl: viewOptions.direction === 'rtl',\n    addResizeHandler: function addResizeHandler(handler) {\n      emitter.on('_resize', handler);\n    },\n    removeResizeHandler: function removeResizeHandler(handler) {\n      emitter.off('_resize', handler);\n    },\n    createScrollResponder: function createScrollResponder(execFunc) {\n      return new ScrollResponder(execFunc, emitter, createDuration(viewOptions.scrollTime), viewOptions.scrollTimeReset);\n    },\n    registerInteractiveComponent: registerInteractiveComponent,\n    unregisterInteractiveComponent: unregisterInteractiveComponent\n  };\n}\n/* eslint max-classes-per-file: off */\n\n\nvar PureComponent = /*#__PURE__*/function (_Component) {\n  _inherits(PureComponent, _Component);\n\n  var _super2 = _createSuper(PureComponent);\n\n  function PureComponent() {\n    _classCallCheck(this, PureComponent);\n\n    return _super2.apply(this, arguments);\n  }\n\n  _createClass(PureComponent, [{\n    key: \"shouldComponentUpdate\",\n    value: function shouldComponentUpdate(nextProps, nextState) {\n      if (this.debug) {\n        // eslint-disable-next-line no-console\n        console.log(getUnequalProps(nextProps, this.props), getUnequalProps(nextState, this.state));\n      }\n\n      return !compareObjs(this.props, nextProps, this.propEquality) || !compareObjs(this.state, nextState, this.stateEquality);\n    } // HACK for freakin' React StrictMode\n\n  }, {\n    key: \"safeSetState\",\n    value: function safeSetState(newState) {\n      if (!compareObjs(this.state, Object.assign(Object.assign({}, this.state), newState), this.stateEquality)) {\n        this.setState(newState);\n      }\n    }\n  }]);\n\n  return PureComponent;\n}(Component);\n\nPureComponent.addPropsEquality = addPropsEquality;\nPureComponent.addStateEquality = addStateEquality;\nPureComponent.contextType = ViewContextType;\nPureComponent.prototype.propEquality = {};\nPureComponent.prototype.stateEquality = {};\n\nvar BaseComponent = /*#__PURE__*/function (_PureComponent) {\n  _inherits(BaseComponent, _PureComponent);\n\n  var _super3 = _createSuper(BaseComponent);\n\n  function BaseComponent() {\n    _classCallCheck(this, BaseComponent);\n\n    return _super3.apply(this, arguments);\n  }\n\n  return BaseComponent;\n}(PureComponent);\n\nBaseComponent.contextType = ViewContextType;\n\nfunction addPropsEquality(propEquality) {\n  var hash = Object.create(this.prototype.propEquality);\n  Object.assign(hash, propEquality);\n  this.prototype.propEquality = hash;\n}\n\nfunction addStateEquality(stateEquality) {\n  var hash = Object.create(this.prototype.stateEquality);\n  Object.assign(hash, stateEquality);\n  this.prototype.stateEquality = hash;\n} // use other one\n\n\nfunction setRef(ref, current) {\n  if (typeof ref === 'function') {\n    ref(current);\n  } else if (ref) {\n    // see https://github.com/facebook/react/issues/13029\n    ref.current = current;\n  }\n}\n\nvar ContentInjector = /*#__PURE__*/function (_BaseComponent) {\n  _inherits(ContentInjector, _BaseComponent);\n\n  var _super4 = _createSuper(ContentInjector);\n\n  function ContentInjector() {\n    var _this6;\n\n    _classCallCheck(this, ContentInjector);\n\n    _this6 = _super4.apply(this, arguments);\n    _this6.id = guid();\n    _this6.queuedDomNodes = [];\n    _this6.currentDomNodes = [];\n\n    _this6.handleEl = function (el) {\n      var options = _this6.context.options;\n      var generatorName = _this6.props.generatorName;\n\n      if (!options.customRenderingReplaces || !hasCustomRenderingHandler(generatorName, options)) {\n        _this6.updateElRef(el);\n      }\n    };\n\n    _this6.updateElRef = function (el) {\n      if (_this6.props.elRef) {\n        setRef(_this6.props.elRef, el);\n      }\n    };\n\n    return _this6;\n  }\n\n  _createClass(ContentInjector, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          context = this.context;\n      var options = context.options;\n      var customGenerator = props.customGenerator,\n          defaultGenerator = props.defaultGenerator,\n          renderProps = props.renderProps;\n      var attrs = buildElAttrs(props, [], this.handleEl);\n      var useDefault = false;\n      var innerContent;\n      var queuedDomNodes = [];\n      var currentGeneratorMeta;\n\n      if (customGenerator != null) {\n        var customGeneratorRes = typeof customGenerator === 'function' ? customGenerator(renderProps, createElement) : customGenerator;\n\n        if (customGeneratorRes === true) {\n          useDefault = true;\n        } else {\n          var isObject = customGeneratorRes && _typeof(customGeneratorRes) === 'object'; // non-null\n\n          if (isObject && 'html' in customGeneratorRes) {\n            attrs.dangerouslySetInnerHTML = {\n              __html: customGeneratorRes.html\n            };\n          } else if (isObject && 'domNodes' in customGeneratorRes) {\n            queuedDomNodes = Array.prototype.slice.call(customGeneratorRes.domNodes);\n          } else if (isObject ? isValidElement(customGeneratorRes) // vdom node\n          : typeof customGeneratorRes !== 'function' // primitive value (like string or number)\n          ) {\n            // use in vdom\n            innerContent = customGeneratorRes;\n          } else {\n            // an exotic object for handleCustomRendering\n            currentGeneratorMeta = customGeneratorRes;\n          }\n        }\n      } else {\n        useDefault = !hasCustomRenderingHandler(props.generatorName, options);\n      }\n\n      if (useDefault && defaultGenerator) {\n        innerContent = defaultGenerator(renderProps);\n      }\n\n      this.queuedDomNodes = queuedDomNodes;\n      this.currentGeneratorMeta = currentGeneratorMeta;\n      return createElement(props.elTag, attrs, innerContent);\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.applyQueueudDomNodes();\n      this.triggerCustomRendering(true);\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      this.applyQueueudDomNodes();\n      this.triggerCustomRendering(true);\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.triggerCustomRendering(false); // TODO: different API for removal?\n    }\n  }, {\n    key: \"triggerCustomRendering\",\n    value: function triggerCustomRendering(isActive) {\n      var _a;\n\n      var props = this.props,\n          context = this.context;\n      var _context$options = context.options,\n          handleCustomRendering = _context$options.handleCustomRendering,\n          customRenderingMetaMap = _context$options.customRenderingMetaMap;\n\n      if (handleCustomRendering) {\n        var generatorMeta = (_a = this.currentGeneratorMeta) !== null && _a !== void 0 ? _a : customRenderingMetaMap === null || customRenderingMetaMap === void 0 ? void 0 : customRenderingMetaMap[props.generatorName];\n\n        if (generatorMeta) {\n          handleCustomRendering(Object.assign(Object.assign({\n            id: this.id,\n            isActive: isActive,\n            containerEl: this.base,\n            reportNewContainerEl: this.updateElRef,\n            // front-end framework tells us about new container els\n            generatorMeta: generatorMeta\n          }, props), {\n            elClasses: (props.elClasses || []).filter(isTruthy)\n          }));\n        }\n      }\n    }\n  }, {\n    key: \"applyQueueudDomNodes\",\n    value: function applyQueueudDomNodes() {\n      var queuedDomNodes = this.queuedDomNodes,\n          currentDomNodes = this.currentDomNodes;\n      var el = this.base;\n\n      if (!isArraysEqual(queuedDomNodes, currentDomNodes)) {\n        currentDomNodes.forEach(removeElement);\n\n        var _iterator4 = _createForOfIteratorHelper(queuedDomNodes),\n            _step4;\n\n        try {\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n            var newNode = _step4.value;\n            el.appendChild(newNode);\n          }\n        } catch (err) {\n          _iterator4.e(err);\n        } finally {\n          _iterator4.f();\n        }\n\n        this.currentDomNodes = queuedDomNodes;\n      }\n    }\n  }]);\n\n  return ContentInjector;\n}(BaseComponent);\n\nContentInjector.addPropsEquality({\n  elClasses: isArraysEqual,\n  elStyle: isPropsEqual,\n  elAttrs: isNonHandlerPropsEqual,\n  renderProps: isPropsEqual\n}); // Util\n\n/*\nDoes UI-framework provide custom way of rendering that does not use Preact VDOM\nAND does the calendar's options define custom rendering?\nAKA. Should we NOT render the default content?\n*/\n\nfunction hasCustomRenderingHandler(generatorName, options) {\n  var _a;\n\n  return Boolean(options.handleCustomRendering && generatorName && ((_a = options.customRenderingMetaMap) === null || _a === void 0 ? void 0 : _a[generatorName]));\n}\n\nfunction buildElAttrs(props, extraClassNames, elRef) {\n  var attrs = Object.assign(Object.assign({}, props.elAttrs), {\n    ref: elRef\n  });\n\n  if (props.elClasses || extraClassNames) {\n    attrs.className = (props.elClasses || []).concat(extraClassNames || []).concat(attrs.className || []).filter(Boolean).join(' ');\n  }\n\n  if (props.elStyle) {\n    attrs.style = props.elStyle;\n  }\n\n  return attrs;\n}\n\nfunction isTruthy(val) {\n  return Boolean(val);\n}\n\nvar RenderId = createContext(0);\n\nvar ContentContainer = /*#__PURE__*/function (_Component2) {\n  _inherits(ContentContainer, _Component2);\n\n  var _super5 = _createSuper(ContentContainer);\n\n  function ContentContainer() {\n    var _this7;\n\n    _classCallCheck(this, ContentContainer);\n\n    _this7 = _super5.apply(this, arguments);\n    _this7.InnerContent = InnerContentInjector.bind(undefined, _assertThisInitialized(_this7));\n\n    _this7.handleEl = function (el) {\n      _this7.el = el;\n\n      if (_this7.props.elRef) {\n        setRef(_this7.props.elRef, el);\n\n        if (el && _this7.didMountMisfire) {\n          _this7.componentDidMount();\n        }\n      }\n    };\n\n    return _this7;\n  }\n\n  _createClass(ContentContainer, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      var generatedClassNames = generateClassNames(props.classNameGenerator, props.renderProps);\n\n      if (props.children) {\n        var elAttrs = buildElAttrs(props, generatedClassNames, this.handleEl);\n        var children = props.children(this.InnerContent, props.renderProps, elAttrs);\n\n        if (props.elTag) {\n          return createElement(props.elTag, elAttrs, children);\n        } else {\n          return children;\n        }\n      } else {\n        return createElement(ContentInjector, Object.assign(Object.assign({}, props), {\n          elRef: this.handleEl,\n          elTag: props.elTag || 'div',\n          elClasses: (props.elClasses || []).concat(generatedClassNames),\n          renderId: this.context\n        }));\n      }\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var _a, _b;\n\n      if (this.el) {\n        (_b = (_a = this.props).didMount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), {\n          el: this.el\n        }));\n      } else {\n        this.didMountMisfire = true;\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      var _a, _b;\n\n      (_b = (_a = this.props).willUnmount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), {\n        el: this.el\n      }));\n    }\n  }]);\n\n  return ContentContainer;\n}(Component);\n\nContentContainer.contextType = RenderId;\n\nfunction InnerContentInjector(containerComponent, props) {\n  var parentProps = containerComponent.props;\n  return createElement(ContentInjector, Object.assign({\n    renderProps: parentProps.renderProps,\n    generatorName: parentProps.generatorName,\n    customGenerator: parentProps.customGenerator,\n    defaultGenerator: parentProps.defaultGenerator,\n    renderId: containerComponent.context\n  }, props));\n} // Utils\n\n\nfunction generateClassNames(classNameGenerator, renderProps) {\n  var classNames = typeof classNameGenerator === 'function' ? classNameGenerator(renderProps) : classNameGenerator || [];\n  return typeof classNames === 'string' ? [classNames] : classNames;\n}\n\nvar ViewContainer = /*#__PURE__*/function (_BaseComponent2) {\n  _inherits(ViewContainer, _BaseComponent2);\n\n  var _super6 = _createSuper(ViewContainer);\n\n  function ViewContainer() {\n    _classCallCheck(this, ViewContainer);\n\n    return _super6.apply(this, arguments);\n  }\n\n  _createClass(ViewContainer, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          context = this.context;\n      var options = context.options;\n      var renderProps = {\n        view: context.viewApi\n      };\n      return createElement(ContentContainer, Object.assign({}, props, {\n        elTag: props.elTag || 'div',\n        elClasses: [].concat(_toConsumableArray(buildViewClassNames(props.viewSpec)), _toConsumableArray(props.elClasses || [])),\n        renderProps: renderProps,\n        classNameGenerator: options.viewClassNames,\n        generatorName: undefined,\n        didMount: options.viewDidMount,\n        willUnmount: options.viewWillUnmount\n      }), function () {\n        return props.children;\n      });\n    }\n  }]);\n\n  return ViewContainer;\n}(BaseComponent);\n\nfunction buildViewClassNames(viewSpec) {\n  return [\"fc-\".concat(viewSpec.type, \"-view\"), 'fc-view'];\n}\n\nfunction parseRange(input, dateEnv) {\n  var start = null;\n  var end = null;\n\n  if (input.start) {\n    start = dateEnv.createMarker(input.start);\n  }\n\n  if (input.end) {\n    end = dateEnv.createMarker(input.end);\n  }\n\n  if (!start && !end) {\n    return null;\n  }\n\n  if (start && end && end < start) {\n    return null;\n  }\n\n  return {\n    start: start,\n    end: end\n  };\n} // SIDE-EFFECT: will mutate ranges.\n// Will return a new array result.\n\n\nfunction invertRanges(ranges, constraintRange) {\n  var invertedRanges = [];\n  var start = constraintRange.start; // the end of the previous range. the start of the new range\n\n  var i;\n  var dateRange; // ranges need to be in order. required for our date-walking algorithm\n\n  ranges.sort(compareRanges);\n\n  for (i = 0; i < ranges.length; i += 1) {\n    dateRange = ranges[i]; // add the span of time before the event (if there is any)\n\n    if (dateRange.start > start) {\n      // compare millisecond time (skip any ambig logic)\n      invertedRanges.push({\n        start: start,\n        end: dateRange.start\n      });\n    }\n\n    if (dateRange.end > start) {\n      start = dateRange.end;\n    }\n  } // add the span of time after the last event (if there is any)\n\n\n  if (start < constraintRange.end) {\n    // compare millisecond time (skip any ambig logic)\n    invertedRanges.push({\n      start: start,\n      end: constraintRange.end\n    });\n  }\n\n  return invertedRanges;\n}\n\nfunction compareRanges(range0, range1) {\n  return range0.start.valueOf() - range1.start.valueOf(); // earlier ranges go first\n}\n\nfunction intersectRanges(range0, range1) {\n  var start = range0.start,\n      end = range0.end;\n  var newRange = null;\n\n  if (range1.start !== null) {\n    if (start === null) {\n      start = range1.start;\n    } else {\n      start = new Date(Math.max(start.valueOf(), range1.start.valueOf()));\n    }\n  }\n\n  if (range1.end != null) {\n    if (end === null) {\n      end = range1.end;\n    } else {\n      end = new Date(Math.min(end.valueOf(), range1.end.valueOf()));\n    }\n  }\n\n  if (start === null || end === null || start < end) {\n    newRange = {\n      start: start,\n      end: end\n    };\n  }\n\n  return newRange;\n}\n\nfunction rangesEqual(range0, range1) {\n  return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) && (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf());\n}\n\nfunction rangesIntersect(range0, range1) {\n  return (range0.end === null || range1.start === null || range0.end > range1.start) && (range0.start === null || range1.end === null || range0.start < range1.end);\n}\n\nfunction rangeContainsRange(outerRange, innerRange) {\n  return (outerRange.start === null || innerRange.start !== null && innerRange.start >= outerRange.start) && (outerRange.end === null || innerRange.end !== null && innerRange.end <= outerRange.end);\n}\n\nfunction rangeContainsMarker(range, date) {\n  return (range.start === null || date >= range.start) && (range.end === null || date < range.end);\n} // If the given date is not within the given range, move it inside.\n// (If it's past the end, make it one millisecond before the end).\n\n\nfunction constrainMarkerToRange(date, range) {\n  if (range.start != null && date < range.start) {\n    return range.start;\n  }\n\n  if (range.end != null && date >= range.end) {\n    return new Date(range.end.valueOf() - 1);\n  }\n\n  return date;\n}\n/* Date stuff that doesn't belong in datelib core\n----------------------------------------------------------------------------------------------------------------------*/\n// given a timed range, computes an all-day range that has the same exact duration,\n// but whose start time is aligned with the start of the day.\n\n\nfunction computeAlignedDayRange(timedRange) {\n  var dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1;\n  var start = startOfDay(timedRange.start);\n  var end = addDays(start, dayCnt);\n  return {\n    start: start,\n    end: end\n  };\n} // given a timed range, computes an all-day range based on how for the end date bleeds into the next day\n// TODO: give nextDayThreshold a default arg\n\n\nfunction computeVisibleDayRange(timedRange) {\n  var nextDayThreshold = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createDuration(0);\n  var startDay = null;\n  var endDay = null;\n\n  if (timedRange.end) {\n    endDay = startOfDay(timedRange.end);\n    var endTimeMS = timedRange.end.valueOf() - endDay.valueOf(); // # of milliseconds into `endDay`\n    // If the end time is actually inclusively part of the next day and is equal to or\n    // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\n    // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\n\n    if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {\n      endDay = addDays(endDay, 1);\n    }\n  }\n\n  if (timedRange.start) {\n    startDay = startOfDay(timedRange.start); // the beginning of the day the range starts\n    // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\n\n    if (endDay && endDay <= startDay) {\n      endDay = addDays(startDay, 1);\n    }\n  }\n\n  return {\n    start: startDay,\n    end: endDay\n  };\n} // spans from one day into another?\n\n\nfunction isMultiDayRange(range) {\n  var visibleRange = computeVisibleDayRange(range);\n  return diffDays(visibleRange.start, visibleRange.end) > 1;\n}\n\nfunction diffDates(date0, date1, dateEnv, largeUnit) {\n  if (largeUnit === 'year') {\n    return createDuration(dateEnv.diffWholeYears(date0, date1), 'year');\n  }\n\n  if (largeUnit === 'month') {\n    return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month');\n  }\n\n  return diffDayAndTime(date0, date1); // returns a duration\n}\n\nfunction reduceCurrentDate(currentDate, action) {\n  switch (action.type) {\n    case 'CHANGE_DATE':\n      return action.dateMarker;\n\n    default:\n      return currentDate;\n  }\n}\n\nfunction getInitialDate(options, dateEnv) {\n  var initialDateInput = options.initialDate; // compute the initial ambig-timezone date\n\n  if (initialDateInput != null) {\n    return dateEnv.createMarker(initialDateInput);\n  }\n\n  return getNow(options.now, dateEnv); // getNow already returns unzoned\n}\n\nfunction getNow(nowInput, dateEnv) {\n  if (typeof nowInput === 'function') {\n    nowInput = nowInput();\n  }\n\n  if (nowInput == null) {\n    return dateEnv.createNowMarker();\n  }\n\n  return dateEnv.createMarker(nowInput);\n}\n\nvar DateProfileGenerator = /*#__PURE__*/function () {\n  function DateProfileGenerator(props) {\n    _classCallCheck(this, DateProfileGenerator);\n\n    this.props = props;\n    this.nowDate = getNow(props.nowInput, props.dateEnv);\n    this.initHiddenDays();\n  }\n  /* Date Range Computation\n  ------------------------------------------------------------------------------------------------------------------*/\n  // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\n\n\n  _createClass(DateProfileGenerator, [{\n    key: \"buildPrev\",\n    value: function buildPrev(currentDateProfile, currentDate, forceToValid) {\n      var dateEnv = this.props.dateEnv;\n      var prevDate = dateEnv.subtract(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n      currentDateProfile.dateIncrement);\n      return this.build(prevDate, -1, forceToValid);\n    } // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\n\n  }, {\n    key: \"buildNext\",\n    value: function buildNext(currentDateProfile, currentDate, forceToValid) {\n      var dateEnv = this.props.dateEnv;\n      var nextDate = dateEnv.add(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month\n      currentDateProfile.dateIncrement);\n      return this.build(nextDate, 1, forceToValid);\n    } // Builds a structure holding dates/ranges for rendering around the given date.\n    // Optional direction param indicates whether the date is being incremented/decremented\n    // from its previous value. decremented = -1, incremented = 1 (default).\n\n  }, {\n    key: \"build\",\n    value: function build(currentDate, direction) {\n      var forceToValid = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      var props = this.props;\n      var validRange;\n      var currentInfo;\n      var isRangeAllDay;\n      var renderRange;\n      var activeRange;\n      var isValid;\n      validRange = this.buildValidRange();\n      validRange = this.trimHiddenDays(validRange);\n\n      if (forceToValid) {\n        currentDate = constrainMarkerToRange(currentDate, validRange);\n      }\n\n      currentInfo = this.buildCurrentRangeInfo(currentDate, direction);\n      isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);\n      renderRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.range), currentInfo.unit, isRangeAllDay);\n      renderRange = this.trimHiddenDays(renderRange);\n      activeRange = renderRange;\n\n      if (!props.showNonCurrentDates) {\n        activeRange = intersectRanges(activeRange, currentInfo.range);\n      }\n\n      activeRange = this.adjustActiveRange(activeRange);\n      activeRange = intersectRanges(activeRange, validRange); // might return null\n      // it's invalid if the originally requested date is not contained,\n      // or if the range is completely outside of the valid range.\n\n      isValid = rangesIntersect(currentInfo.range, validRange); // HACK: constrain to render-range so `currentDate` is more useful to view rendering\n\n      if (!rangeContainsMarker(renderRange, currentDate)) {\n        currentDate = renderRange.start;\n      }\n\n      return {\n        currentDate: currentDate,\n        // constraint for where prev/next operations can go and where events can be dragged/resized to.\n        // an object with optional start and end properties.\n        validRange: validRange,\n        // range the view is formally responsible for.\n        // for example, a month view might have 1st-31st, excluding padded dates\n        currentRange: currentInfo.range,\n        // name of largest unit being displayed, like \"month\" or \"week\"\n        currentRangeUnit: currentInfo.unit,\n        isRangeAllDay: isRangeAllDay,\n        // dates that display events and accept drag-n-drop\n        // will be `null` if no dates accept events\n        activeRange: activeRange,\n        // date range with a rendered skeleton\n        // includes not-active days that need some sort of DOM\n        renderRange: renderRange,\n        // Duration object that denotes the first visible time of any given day\n        slotMinTime: props.slotMinTime,\n        // Duration object that denotes the exclusive visible end time of any given day\n        slotMaxTime: props.slotMaxTime,\n        isValid: isValid,\n        // how far the current date will move for a prev/next operation\n        dateIncrement: this.buildDateIncrement(currentInfo.duration) // pass a fallback (might be null) ^\n\n      };\n    } // Builds an object with optional start/end properties.\n    // Indicates the minimum/maximum dates to display.\n    // not responsible for trimming hidden days.\n\n  }, {\n    key: \"buildValidRange\",\n    value: function buildValidRange() {\n      var input = this.props.validRangeInput;\n      var simpleInput = typeof input === 'function' ? input.call(this.props.calendarApi, this.nowDate) : input;\n      return this.refineRange(simpleInput) || {\n        start: null,\n        end: null\n      }; // completely open-ended\n    } // Builds a structure with info about the \"current\" range, the range that is\n    // highlighted as being the current month for example.\n    // See build() for a description of `direction`.\n    // Guaranteed to have `range` and `unit` properties. `duration` is optional.\n\n  }, {\n    key: \"buildCurrentRangeInfo\",\n    value: function buildCurrentRangeInfo(date, direction) {\n      var props = this.props;\n      var duration = null;\n      var unit = null;\n      var range = null;\n      var dayCount;\n\n      if (props.duration) {\n        duration = props.duration;\n        unit = props.durationUnit;\n        range = this.buildRangeFromDuration(date, direction, duration, unit);\n      } else if (dayCount = this.props.dayCount) {\n        unit = 'day';\n        range = this.buildRangeFromDayCount(date, direction, dayCount);\n      } else if (range = this.buildCustomVisibleRange(date)) {\n        unit = props.dateEnv.greatestWholeUnit(range.start, range.end).unit;\n      } else {\n        duration = this.getFallbackDuration();\n        unit = greatestDurationDenominator(duration).unit;\n        range = this.buildRangeFromDuration(date, direction, duration, unit);\n      }\n\n      return {\n        duration: duration,\n        unit: unit,\n        range: range\n      };\n    }\n  }, {\n    key: \"getFallbackDuration\",\n    value: function getFallbackDuration() {\n      return createDuration({\n        day: 1\n      });\n    } // Returns a new activeRange to have time values (un-ambiguate)\n    // slotMinTime or slotMaxTime causes the range to expand.\n\n  }, {\n    key: \"adjustActiveRange\",\n    value: function adjustActiveRange(range) {\n      var _this$props = this.props,\n          dateEnv = _this$props.dateEnv,\n          usesMinMaxTime = _this$props.usesMinMaxTime,\n          slotMinTime = _this$props.slotMinTime,\n          slotMaxTime = _this$props.slotMaxTime;\n      var start = range.start,\n          end = range.end;\n\n      if (usesMinMaxTime) {\n        // expand active range if slotMinTime is negative (why not when positive?)\n        if (asRoughDays(slotMinTime) < 0) {\n          start = startOfDay(start); // necessary?\n\n          start = dateEnv.add(start, slotMinTime);\n        } // expand active range if slotMaxTime is beyond one day (why not when negative?)\n\n\n        if (asRoughDays(slotMaxTime) > 1) {\n          end = startOfDay(end); // necessary?\n\n          end = addDays(end, -1);\n          end = dateEnv.add(end, slotMaxTime);\n        }\n      }\n\n      return {\n        start: start,\n        end: end\n      };\n    } // Builds the \"current\" range when it is specified as an explicit duration.\n    // `unit` is the already-computed greatestDurationDenominator unit of duration.\n\n  }, {\n    key: \"buildRangeFromDuration\",\n    value: function buildRangeFromDuration(date, direction, duration, unit) {\n      var _this$props2 = this.props,\n          dateEnv = _this$props2.dateEnv,\n          dateAlignment = _this$props2.dateAlignment;\n      var start;\n      var end;\n      var res; // compute what the alignment should be\n\n      if (!dateAlignment) {\n        var dateIncrement = this.props.dateIncrement;\n\n        if (dateIncrement) {\n          // use the smaller of the two units\n          if (asRoughMs(dateIncrement) < asRoughMs(duration)) {\n            dateAlignment = greatestDurationDenominator(dateIncrement).unit;\n          } else {\n            dateAlignment = unit;\n          }\n        } else {\n          dateAlignment = unit;\n        }\n      } // if the view displays a single day or smaller\n\n\n      if (asRoughDays(duration) <= 1) {\n        if (this.isHiddenDay(start)) {\n          start = this.skipHiddenDays(start, direction);\n          start = startOfDay(start);\n        }\n      }\n\n      function computeRes() {\n        start = dateEnv.startOf(date, dateAlignment);\n        end = dateEnv.add(start, duration);\n        res = {\n          start: start,\n          end: end\n        };\n      }\n\n      computeRes(); // if range is completely enveloped by hidden days, go past the hidden days\n\n      if (!this.trimHiddenDays(res)) {\n        date = this.skipHiddenDays(date, direction);\n        computeRes();\n      }\n\n      return res;\n    } // Builds the \"current\" range when a dayCount is specified.\n\n  }, {\n    key: \"buildRangeFromDayCount\",\n    value: function buildRangeFromDayCount(date, direction, dayCount) {\n      var _this$props3 = this.props,\n          dateEnv = _this$props3.dateEnv,\n          dateAlignment = _this$props3.dateAlignment;\n      var runningCount = 0;\n      var start = date;\n      var end;\n\n      if (dateAlignment) {\n        start = dateEnv.startOf(start, dateAlignment);\n      }\n\n      start = startOfDay(start);\n      start = this.skipHiddenDays(start, direction);\n      end = start;\n\n      do {\n        end = addDays(end, 1);\n\n        if (!this.isHiddenDay(end)) {\n          runningCount += 1;\n        }\n      } while (runningCount < dayCount);\n\n      return {\n        start: start,\n        end: end\n      };\n    } // Builds a normalized range object for the \"visible\" range,\n    // which is a way to define the currentRange and activeRange at the same time.\n\n  }, {\n    key: \"buildCustomVisibleRange\",\n    value: function buildCustomVisibleRange(date) {\n      var props = this.props;\n      var input = props.visibleRangeInput;\n      var simpleInput = typeof input === 'function' ? input.call(props.calendarApi, props.dateEnv.toDate(date)) : input;\n      var range = this.refineRange(simpleInput);\n\n      if (range && (range.start == null || range.end == null)) {\n        return null;\n      }\n\n      return range;\n    } // Computes the range that will represent the element/cells for *rendering*,\n    // but which may have voided days/times.\n    // not responsible for trimming hidden days.\n\n  }, {\n    key: \"buildRenderRange\",\n    value: function buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay) {\n      return currentRange;\n    } // Compute the duration value that should be added/substracted to the current date\n    // when a prev/next operation happens.\n\n  }, {\n    key: \"buildDateIncrement\",\n    value: function buildDateIncrement(fallback) {\n      var dateIncrement = this.props.dateIncrement;\n      var customAlignment;\n\n      if (dateIncrement) {\n        return dateIncrement;\n      }\n\n      if (customAlignment = this.props.dateAlignment) {\n        return createDuration(1, customAlignment);\n      }\n\n      if (fallback) {\n        return fallback;\n      }\n\n      return createDuration({\n        days: 1\n      });\n    }\n  }, {\n    key: \"refineRange\",\n    value: function refineRange(rangeInput) {\n      if (rangeInput) {\n        var range = parseRange(rangeInput, this.props.dateEnv);\n\n        if (range) {\n          range = computeVisibleDayRange(range);\n        }\n\n        return range;\n      }\n\n      return null;\n    }\n    /* Hidden Days\n    ------------------------------------------------------------------------------------------------------------------*/\n    // Initializes internal variables related to calculating hidden days-of-week\n\n  }, {\n    key: \"initHiddenDays\",\n    value: function initHiddenDays() {\n      var hiddenDays = this.props.hiddenDays || []; // array of day-of-week indices that are hidden\n\n      var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\n\n      var dayCnt = 0;\n      var i;\n\n      if (this.props.weekends === false) {\n        hiddenDays.push(0, 6); // 0=sunday, 6=saturday\n      }\n\n      for (i = 0; i < 7; i += 1) {\n        if (!(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)) {\n          dayCnt += 1;\n        }\n      }\n\n      if (!dayCnt) {\n        throw new Error('invalid hiddenDays'); // all days were hidden? bad.\n      }\n\n      this.isHiddenDayHash = isHiddenDayHash;\n    } // Remove days from the beginning and end of the range that are computed as hidden.\n    // If the whole range is trimmed off, returns null\n\n  }, {\n    key: \"trimHiddenDays\",\n    value: function trimHiddenDays(range) {\n      var start = range.start,\n          end = range.end;\n\n      if (start) {\n        start = this.skipHiddenDays(start);\n      }\n\n      if (end) {\n        end = this.skipHiddenDays(end, -1, true);\n      }\n\n      if (start == null || end == null || start < end) {\n        return {\n          start: start,\n          end: end\n        };\n      }\n\n      return null;\n    } // Is the current day hidden?\n    // `day` is a day-of-week index (0-6), or a Date (used for UTC)\n\n  }, {\n    key: \"isHiddenDay\",\n    value: function isHiddenDay(day) {\n      if (day instanceof Date) {\n        day = day.getUTCDay();\n      }\n\n      return this.isHiddenDayHash[day];\n    } // Incrementing the current day until it is no longer a hidden day, returning a copy.\n    // DOES NOT CONSIDER validRange!\n    // If the initial value of `date` is not a hidden day, don't do anything.\n    // Pass `isExclusive` as `true` if you are dealing with an end date.\n    // `inc` defaults to `1` (increment one day forward each time)\n\n  }, {\n    key: \"skipHiddenDays\",\n    value: function skipHiddenDays(date) {\n      var inc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      var isExclusive = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      while (this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]) {\n        date = addDays(date, inc);\n      }\n\n      return date;\n    }\n  }]);\n\n  return DateProfileGenerator;\n}();\n\nfunction createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) {\n  return {\n    instanceId: guid(),\n    defId: defId,\n    range: range,\n    forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,\n    forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo\n  };\n}\n\nfunction parseRecurring(refined, defaultAllDay, dateEnv, recurringTypes) {\n  for (var i = 0; i < recurringTypes.length; i += 1) {\n    var parsed = recurringTypes[i].parse(refined, dateEnv);\n\n    if (parsed) {\n      var allDay = refined.allDay;\n\n      if (allDay == null) {\n        allDay = defaultAllDay;\n\n        if (allDay == null) {\n          allDay = parsed.allDayGuess;\n\n          if (allDay == null) {\n            allDay = false;\n          }\n        }\n      }\n\n      return {\n        allDay: allDay,\n        duration: parsed.duration,\n        typeData: parsed.typeData,\n        typeId: i\n      };\n    }\n  }\n\n  return null;\n}\n\nfunction expandRecurring(eventStore, framingRange, context) {\n  var dateEnv = context.dateEnv,\n      pluginHooks = context.pluginHooks,\n      options = context.options;\n  var defs = eventStore.defs,\n      instances = eventStore.instances; // remove existing recurring instances\n  // TODO: bad. always expand events as a second step\n\n  instances = filterHash(instances, function (instance) {\n    return !defs[instance.defId].recurringDef;\n  });\n\n  for (var defId in defs) {\n    var def = defs[defId];\n\n    if (def.recurringDef) {\n      var duration = def.recurringDef.duration;\n\n      if (!duration) {\n        duration = def.allDay ? options.defaultAllDayEventDuration : options.defaultTimedEventDuration;\n      }\n\n      var starts = expandRecurringRanges(def, duration, framingRange, dateEnv, pluginHooks.recurringTypes);\n\n      var _iterator5 = _createForOfIteratorHelper(starts),\n          _step5;\n\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var start = _step5.value;\n          var instance = createEventInstance(defId, {\n            start: start,\n            end: dateEnv.add(start, duration)\n          });\n          instances[instance.instanceId] = instance;\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n    }\n  }\n\n  return {\n    defs: defs,\n    instances: instances\n  };\n}\n/*\nEvent MUST have a recurringDef\n*/\n\n\nfunction expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) {\n  var typeDef = recurringTypes[eventDef.recurringDef.typeId];\n  var markers = typeDef.expand(eventDef.recurringDef.typeData, {\n    start: dateEnv.subtract(framingRange.start, duration),\n    end: framingRange.end\n  }, dateEnv); // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to\n\n  if (eventDef.allDay) {\n    markers = markers.map(startOfDay);\n  }\n\n  return markers;\n}\n\nvar EVENT_NON_DATE_REFINERS = {\n  id: String,\n  groupId: String,\n  title: String,\n  url: String,\n  interactive: Boolean\n};\nvar EVENT_DATE_REFINERS = {\n  start: identity,\n  end: identity,\n  date: identity,\n  allDay: Boolean\n};\nvar EVENT_REFINERS = Object.assign(Object.assign(Object.assign({}, EVENT_NON_DATE_REFINERS), EVENT_DATE_REFINERS), {\n  extendedProps: identity\n});\n\nfunction parseEvent(raw, eventSource, context, allowOpenRange) {\n  var refiners = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : buildEventRefiners(context);\n  var defIdMap = arguments.length > 5 ? arguments[5] : undefined;\n  var instanceIdMap = arguments.length > 6 ? arguments[6] : undefined;\n\n  var _refineEventDef = refineEventDef(raw, context, refiners),\n      refined = _refineEventDef.refined,\n      extra = _refineEventDef.extra;\n\n  var defaultAllDay = computeIsDefaultAllDay(eventSource, context);\n  var recurringRes = parseRecurring(refined, defaultAllDay, context.dateEnv, context.pluginHooks.recurringTypes);\n\n  if (recurringRes) {\n    var def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', recurringRes.allDay, Boolean(recurringRes.duration), context, defIdMap);\n    def.recurringDef = {\n      typeId: recurringRes.typeId,\n      typeData: recurringRes.typeData,\n      duration: recurringRes.duration\n    };\n    return {\n      def: def,\n      instance: null\n    };\n  }\n\n  var singleRes = parseSingle(refined, defaultAllDay, context, allowOpenRange);\n\n  if (singleRes) {\n    var _def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', singleRes.allDay, singleRes.hasEnd, context, defIdMap);\n\n    var instance = createEventInstance(_def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo);\n\n    if (instanceIdMap && _def.publicId && instanceIdMap[_def.publicId]) {\n      instance.instanceId = instanceIdMap[_def.publicId];\n    }\n\n    return {\n      def: _def,\n      instance: instance\n    };\n  }\n\n  return null;\n}\n\nfunction refineEventDef(raw, context) {\n  var refiners = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : buildEventRefiners(context);\n  return refineProps(raw, refiners);\n}\n\nfunction buildEventRefiners(context) {\n  return Object.assign(Object.assign(Object.assign({}, EVENT_UI_REFINERS), EVENT_REFINERS), context.pluginHooks.eventRefiners);\n}\n/*\nWill NOT populate extendedProps with the leftover properties.\nWill NOT populate date-related props.\n*/\n\n\nfunction parseEventDef(refined, extra, sourceId, allDay, hasEnd, context, defIdMap) {\n  var def = {\n    title: refined.title || '',\n    groupId: refined.groupId || '',\n    publicId: refined.id || '',\n    url: refined.url || '',\n    recurringDef: null,\n    defId: (defIdMap && refined.id ? defIdMap[refined.id] : '') || guid(),\n    sourceId: sourceId,\n    allDay: allDay,\n    hasEnd: hasEnd,\n    interactive: refined.interactive,\n    ui: createEventUi(refined, context),\n    extendedProps: Object.assign(Object.assign({}, refined.extendedProps || {}), extra)\n  };\n\n  var _iterator6 = _createForOfIteratorHelper(context.pluginHooks.eventDefMemberAdders),\n      _step6;\n\n  try {\n    for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n      var memberAdder = _step6.value;\n      Object.assign(def, memberAdder(refined));\n    } // help out EventImpl from having user modify props\n\n  } catch (err) {\n    _iterator6.e(err);\n  } finally {\n    _iterator6.f();\n  }\n\n  Object.freeze(def.ui.classNames);\n  Object.freeze(def.extendedProps);\n  return def;\n}\n\nfunction parseSingle(refined, defaultAllDay, context, allowOpenRange) {\n  var allDay = refined.allDay;\n  var startMeta;\n  var startMarker = null;\n  var hasEnd = false;\n  var endMeta;\n  var endMarker = null;\n  var startInput = refined.start != null ? refined.start : refined.date;\n  startMeta = context.dateEnv.createMarkerMeta(startInput);\n\n  if (startMeta) {\n    startMarker = startMeta.marker;\n  } else if (!allowOpenRange) {\n    return null;\n  }\n\n  if (refined.end != null) {\n    endMeta = context.dateEnv.createMarkerMeta(refined.end);\n  }\n\n  if (allDay == null) {\n    if (defaultAllDay != null) {\n      allDay = defaultAllDay;\n    } else {\n      // fall back to the date props LAST\n      allDay = (!startMeta || startMeta.isTimeUnspecified) && (!endMeta || endMeta.isTimeUnspecified);\n    }\n  }\n\n  if (allDay && startMarker) {\n    startMarker = startOfDay(startMarker);\n  }\n\n  if (endMeta) {\n    endMarker = endMeta.marker;\n\n    if (allDay) {\n      endMarker = startOfDay(endMarker);\n    }\n\n    if (startMarker && endMarker <= startMarker) {\n      endMarker = null;\n    }\n  }\n\n  if (endMarker) {\n    hasEnd = true;\n  } else if (!allowOpenRange) {\n    hasEnd = context.options.forceEventDuration || false;\n    endMarker = context.dateEnv.add(startMarker, allDay ? context.options.defaultAllDayEventDuration : context.options.defaultTimedEventDuration);\n  }\n\n  return {\n    allDay: allDay,\n    hasEnd: hasEnd,\n    range: {\n      start: startMarker,\n      end: endMarker\n    },\n    forcedStartTzo: startMeta ? startMeta.forcedTzo : null,\n    forcedEndTzo: endMeta ? endMeta.forcedTzo : null\n  };\n}\n\nfunction computeIsDefaultAllDay(eventSource, context) {\n  var res = null;\n\n  if (eventSource) {\n    res = eventSource.defaultAllDay;\n  }\n\n  if (res == null) {\n    res = context.options.defaultAllDay;\n  }\n\n  return res;\n}\n\nfunction parseEvents(rawEvents, eventSource, context, allowOpenRange, defIdMap, instanceIdMap) {\n  var eventStore = createEmptyEventStore();\n  var eventRefiners = buildEventRefiners(context);\n\n  var _iterator7 = _createForOfIteratorHelper(rawEvents),\n      _step7;\n\n  try {\n    for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n      var rawEvent = _step7.value;\n      var tuple = parseEvent(rawEvent, eventSource, context, allowOpenRange, eventRefiners, defIdMap, instanceIdMap);\n\n      if (tuple) {\n        eventTupleToStore(tuple, eventStore);\n      }\n    }\n  } catch (err) {\n    _iterator7.e(err);\n  } finally {\n    _iterator7.f();\n  }\n\n  return eventStore;\n}\n\nfunction eventTupleToStore(tuple) {\n  var eventStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createEmptyEventStore();\n  eventStore.defs[tuple.def.defId] = tuple.def;\n\n  if (tuple.instance) {\n    eventStore.instances[tuple.instance.instanceId] = tuple.instance;\n  }\n\n  return eventStore;\n} // retrieves events that have the same groupId as the instance specified by `instanceId`\n// or they are the same as the instance.\n// why might instanceId not be in the store? an event from another calendar?\n\n\nfunction getRelevantEvents(eventStore, instanceId) {\n  var instance = eventStore.instances[instanceId];\n\n  if (instance) {\n    var def = eventStore.defs[instance.defId]; // get events/instances with same group\n\n    var newStore = filterEventStoreDefs(eventStore, function (lookDef) {\n      return isEventDefsGrouped(def, lookDef);\n    }); // add the original\n    // TODO: wish we could use eventTupleToStore or something like it\n\n    newStore.defs[def.defId] = def;\n    newStore.instances[instance.instanceId] = instance;\n    return newStore;\n  }\n\n  return createEmptyEventStore();\n}\n\nfunction isEventDefsGrouped(def0, def1) {\n  return Boolean(def0.groupId && def0.groupId === def1.groupId);\n}\n\nfunction createEmptyEventStore() {\n  return {\n    defs: {},\n    instances: {}\n  };\n}\n\nfunction mergeEventStores(store0, store1) {\n  return {\n    defs: Object.assign(Object.assign({}, store0.defs), store1.defs),\n    instances: Object.assign(Object.assign({}, store0.instances), store1.instances)\n  };\n}\n\nfunction filterEventStoreDefs(eventStore, filterFunc) {\n  var defs = filterHash(eventStore.defs, filterFunc);\n  var instances = filterHash(eventStore.instances, function (instance) {\n    return defs[instance.defId] // still exists?\n    ;\n  });\n  return {\n    defs: defs,\n    instances: instances\n  };\n}\n\nfunction excludeSubEventStore(master, sub) {\n  var defs = master.defs,\n      instances = master.instances;\n  var filteredDefs = {};\n  var filteredInstances = {};\n\n  for (var defId in defs) {\n    if (!sub.defs[defId]) {\n      // not explicitly excluded\n      filteredDefs[defId] = defs[defId];\n    }\n  }\n\n  for (var instanceId in instances) {\n    if (!sub.instances[instanceId] && // not explicitly excluded\n    filteredDefs[instances[instanceId].defId] // def wasn't filtered away\n    ) {\n      filteredInstances[instanceId] = instances[instanceId];\n    }\n  }\n\n  return {\n    defs: filteredDefs,\n    instances: filteredInstances\n  };\n}\n\nfunction normalizeConstraint(input, context) {\n  if (Array.isArray(input)) {\n    return parseEvents(input, null, context, true); // allowOpenRange=true\n  }\n\n  if (_typeof(input) === 'object' && input) {\n    // non-null object\n    return parseEvents([input], null, context, true); // allowOpenRange=true\n  }\n\n  if (input != null) {\n    return String(input);\n  }\n\n  return null;\n}\n\nfunction parseClassNames(raw) {\n  if (Array.isArray(raw)) {\n    return raw;\n  }\n\n  if (typeof raw === 'string') {\n    return raw.split(/\\s+/);\n  }\n\n  return [];\n} // TODO: better called \"EventSettings\" or \"EventConfig\"\n// TODO: move this file into structs\n// TODO: separate constraint/overlap/allow, because selection uses only that, not other props\n\n\nvar EVENT_UI_REFINERS = {\n  display: String,\n  editable: Boolean,\n  startEditable: Boolean,\n  durationEditable: Boolean,\n  constraint: identity,\n  overlap: identity,\n  allow: identity,\n  className: parseClassNames,\n  classNames: parseClassNames,\n  color: String,\n  backgroundColor: String,\n  borderColor: String,\n  textColor: String\n};\nvar EMPTY_EVENT_UI = {\n  display: null,\n  startEditable: null,\n  durationEditable: null,\n  constraints: [],\n  overlap: null,\n  allows: [],\n  backgroundColor: '',\n  borderColor: '',\n  textColor: '',\n  classNames: []\n};\n\nfunction createEventUi(refined, context) {\n  var constraint = normalizeConstraint(refined.constraint, context);\n  return {\n    display: refined.display || null,\n    startEditable: refined.startEditable != null ? refined.startEditable : refined.editable,\n    durationEditable: refined.durationEditable != null ? refined.durationEditable : refined.editable,\n    constraints: constraint != null ? [constraint] : [],\n    overlap: refined.overlap != null ? refined.overlap : null,\n    allows: refined.allow != null ? [refined.allow] : [],\n    backgroundColor: refined.backgroundColor || refined.color || '',\n    borderColor: refined.borderColor || refined.color || '',\n    textColor: refined.textColor || '',\n    classNames: (refined.className || []).concat(refined.classNames || []) // join singular and plural\n\n  };\n} // TODO: prevent against problems with <2 args!\n\n\nfunction combineEventUis(uis) {\n  return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI);\n}\n\nfunction combineTwoEventUis(item0, item1) {\n  return {\n    display: item1.display != null ? item1.display : item0.display,\n    startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,\n    durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,\n    constraints: item0.constraints.concat(item1.constraints),\n    overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap,\n    allows: item0.allows.concat(item1.allows),\n    backgroundColor: item1.backgroundColor || item0.backgroundColor,\n    borderColor: item1.borderColor || item0.borderColor,\n    textColor: item1.textColor || item0.textColor,\n    classNames: item0.classNames.concat(item1.classNames)\n  };\n}\n\nvar EVENT_SOURCE_REFINERS = {\n  id: String,\n  defaultAllDay: Boolean,\n  url: String,\n  format: String,\n  events: identity,\n  eventDataTransform: identity,\n  // for any network-related sources\n  success: identity,\n  failure: identity\n};\n\nfunction parseEventSource(raw, context) {\n  var refiners = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : buildEventSourceRefiners(context);\n  var rawObj;\n\n  if (typeof raw === 'string') {\n    rawObj = {\n      url: raw\n    };\n  } else if (typeof raw === 'function' || Array.isArray(raw)) {\n    rawObj = {\n      events: raw\n    };\n  } else if (_typeof(raw) === 'object' && raw) {\n    // not null\n    rawObj = raw;\n  }\n\n  if (rawObj) {\n    var _refineProps = refineProps(rawObj, refiners),\n        refined = _refineProps.refined,\n        extra = _refineProps.extra;\n\n    var metaRes = buildEventSourceMeta(refined, context);\n\n    if (metaRes) {\n      return {\n        _raw: raw,\n        isFetching: false,\n        latestFetchId: '',\n        fetchRange: null,\n        defaultAllDay: refined.defaultAllDay,\n        eventDataTransform: refined.eventDataTransform,\n        success: refined.success,\n        failure: refined.failure,\n        publicId: refined.id || '',\n        sourceId: guid(),\n        sourceDefId: metaRes.sourceDefId,\n        meta: metaRes.meta,\n        ui: createEventUi(refined, context),\n        extendedProps: extra\n      };\n    }\n  }\n\n  return null;\n}\n\nfunction buildEventSourceRefiners(context) {\n  return Object.assign(Object.assign(Object.assign({}, EVENT_UI_REFINERS), EVENT_SOURCE_REFINERS), context.pluginHooks.eventSourceRefiners);\n}\n\nfunction buildEventSourceMeta(raw, context) {\n  var defs = context.pluginHooks.eventSourceDefs;\n\n  for (var i = defs.length - 1; i >= 0; i -= 1) {\n    // later-added plugins take precedence\n    var def = defs[i];\n    var meta = def.parseMeta(raw);\n\n    if (meta) {\n      return {\n        sourceDefId: i,\n        meta: meta\n      };\n    }\n  }\n\n  return null;\n}\n\nfunction reduceEventStore(eventStore, action, eventSources, dateProfile, context) {\n  switch (action.type) {\n    case 'RECEIVE_EVENTS':\n      // raw\n      return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, context);\n\n    case 'RESET_RAW_EVENTS':\n      return resetRawEvents(eventStore, eventSources[action.sourceId], action.rawEvents, dateProfile.activeRange, context);\n\n    case 'ADD_EVENTS':\n      // already parsed, but not expanded\n      return addEvent(eventStore, action.eventStore, // new ones\n      dateProfile ? dateProfile.activeRange : null, context);\n\n    case 'RESET_EVENTS':\n      return action.eventStore;\n\n    case 'MERGE_EVENTS':\n      // already parsed and expanded\n      return mergeEventStores(eventStore, action.eventStore);\n\n    case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n\n    case 'NEXT':\n    case 'CHANGE_DATE':\n    case 'CHANGE_VIEW_TYPE':\n      if (dateProfile) {\n        return expandRecurring(eventStore, dateProfile.activeRange, context);\n      }\n\n      return eventStore;\n\n    case 'REMOVE_EVENTS':\n      return excludeSubEventStore(eventStore, action.eventStore);\n\n    case 'REMOVE_EVENT_SOURCE':\n      return excludeEventsBySourceId(eventStore, action.sourceId);\n\n    case 'REMOVE_ALL_EVENT_SOURCES':\n      return filterEventStoreDefs(eventStore, function (eventDef) {\n        return !eventDef.sourceId // only keep events with no source id\n        ;\n      });\n\n    case 'REMOVE_ALL_EVENTS':\n      return createEmptyEventStore();\n\n    default:\n      return eventStore;\n  }\n}\n\nfunction receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, context) {\n  if (eventSource && // not already removed\n  fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources\n  ) {\n    var subset = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context);\n\n    if (fetchRange) {\n      subset = expandRecurring(subset, fetchRange, context);\n    }\n\n    return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);\n  }\n\n  return eventStore;\n}\n\nfunction resetRawEvents(existingEventStore, eventSource, rawEvents, activeRange, context) {\n  var _buildPublicIdMaps = buildPublicIdMaps(existingEventStore),\n      defIdMap = _buildPublicIdMaps.defIdMap,\n      instanceIdMap = _buildPublicIdMaps.instanceIdMap;\n\n  var newEventStore = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context, false, defIdMap, instanceIdMap);\n  return expandRecurring(newEventStore, activeRange, context);\n}\n\nfunction transformRawEvents(rawEvents, eventSource, context) {\n  var calEachTransform = context.options.eventDataTransform;\n  var sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;\n\n  if (sourceEachTransform) {\n    rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);\n  }\n\n  if (calEachTransform) {\n    rawEvents = transformEachRawEvent(rawEvents, calEachTransform);\n  }\n\n  return rawEvents;\n}\n\nfunction transformEachRawEvent(rawEvents, func) {\n  var refinedEvents;\n\n  if (!func) {\n    refinedEvents = rawEvents;\n  } else {\n    refinedEvents = [];\n\n    var _iterator8 = _createForOfIteratorHelper(rawEvents),\n        _step8;\n\n    try {\n      for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n        var rawEvent = _step8.value;\n        var refinedEvent = func(rawEvent);\n\n        if (refinedEvent) {\n          refinedEvents.push(refinedEvent);\n        } else if (refinedEvent == null) {\n          refinedEvents.push(rawEvent);\n        } // if a different falsy value, do nothing\n\n      }\n    } catch (err) {\n      _iterator8.e(err);\n    } finally {\n      _iterator8.f();\n    }\n  }\n\n  return refinedEvents;\n}\n\nfunction addEvent(eventStore, subset, expandRange, context) {\n  if (expandRange) {\n    subset = expandRecurring(subset, expandRange, context);\n  }\n\n  return mergeEventStores(eventStore, subset);\n}\n\nfunction rezoneEventStoreDates(eventStore, oldDateEnv, newDateEnv) {\n  var defs = eventStore.defs;\n  var instances = mapHash(eventStore.instances, function (instance) {\n    var def = defs[instance.defId];\n\n    if (def.allDay) {\n      return instance; // isn't dependent on timezone\n    }\n\n    return Object.assign(Object.assign({}, instance), {\n      range: {\n        start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),\n        end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo))\n      },\n      forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo,\n      forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo\n    });\n  });\n  return {\n    defs: defs,\n    instances: instances\n  };\n}\n\nfunction excludeEventsBySourceId(eventStore, sourceId) {\n  return filterEventStoreDefs(eventStore, function (eventDef) {\n    return eventDef.sourceId !== sourceId;\n  });\n} // QUESTION: why not just return instances? do a general object-property-exclusion util\n\n\nfunction excludeInstances(eventStore, removals) {\n  return {\n    defs: eventStore.defs,\n    instances: filterHash(eventStore.instances, function (instance) {\n      return !removals[instance.instanceId];\n    })\n  };\n}\n\nfunction buildPublicIdMaps(eventStore) {\n  var defs = eventStore.defs,\n      instances = eventStore.instances;\n  var defIdMap = {};\n  var instanceIdMap = {};\n\n  for (var defId in defs) {\n    var def = defs[defId];\n    var publicId = def.publicId;\n\n    if (publicId) {\n      defIdMap[publicId] = defId;\n    }\n  }\n\n  for (var instanceId in instances) {\n    var instance = instances[instanceId];\n    var _def2 = defs[instance.defId];\n    var _publicId = _def2.publicId;\n\n    if (_publicId) {\n      instanceIdMap[_publicId] = instanceId;\n    }\n  }\n\n  return {\n    defIdMap: defIdMap,\n    instanceIdMap: instanceIdMap\n  };\n}\n\nvar Emitter = /*#__PURE__*/function () {\n  function Emitter() {\n    _classCallCheck(this, Emitter);\n\n    this.handlers = {};\n    this.thisContext = null;\n  }\n\n  _createClass(Emitter, [{\n    key: \"setThisContext\",\n    value: function setThisContext(thisContext) {\n      this.thisContext = thisContext;\n    }\n  }, {\n    key: \"setOptions\",\n    value: function setOptions(options) {\n      this.options = options;\n    }\n  }, {\n    key: \"on\",\n    value: function on(type, handler) {\n      addToHash(this.handlers, type, handler);\n    }\n  }, {\n    key: \"off\",\n    value: function off(type, handler) {\n      removeFromHash(this.handlers, type, handler);\n    }\n  }, {\n    key: \"trigger\",\n    value: function trigger(type) {\n      var attachedHandlers = this.handlers[type] || [];\n      var optionHandler = this.options && this.options[type];\n      var handlers = [].concat(optionHandler || [], attachedHandlers);\n\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key5 = 1; _key5 < _len2; _key5++) {\n        args[_key5 - 1] = arguments[_key5];\n      }\n\n      var _iterator9 = _createForOfIteratorHelper(handlers),\n          _step9;\n\n      try {\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n          var handler = _step9.value;\n          handler.apply(this.thisContext, args);\n        }\n      } catch (err) {\n        _iterator9.e(err);\n      } finally {\n        _iterator9.f();\n      }\n    }\n  }, {\n    key: \"hasHandlers\",\n    value: function hasHandlers(type) {\n      return Boolean(this.handlers[type] && this.handlers[type].length || this.options && this.options[type]);\n    }\n  }]);\n\n  return Emitter;\n}();\n\nfunction addToHash(hash, type, handler) {\n  (hash[type] || (hash[type] = [])).push(handler);\n}\n\nfunction removeFromHash(hash, type, handler) {\n  if (handler) {\n    if (hash[type]) {\n      hash[type] = hash[type].filter(function (func) {\n        return func !== handler;\n      });\n    }\n  } else {\n    delete hash[type]; // remove all handler funcs for this type\n  }\n}\n\nvar DEF_DEFAULTS = {\n  startTime: '09:00',\n  endTime: '17:00',\n  daysOfWeek: [1, 2, 3, 4, 5],\n  display: 'inverse-background',\n  classNames: 'fc-non-business',\n  groupId: '_businessHours' // so multiple defs get grouped\n\n};\n/*\nTODO: pass around as EventDefHash!!!\n*/\n\nfunction parseBusinessHours(input, context) {\n  return parseEvents(refineInputs(input), null, context);\n}\n\nfunction refineInputs(input) {\n  var rawDefs;\n\n  if (input === true) {\n    rawDefs = [{}]; // will get DEF_DEFAULTS verbatim\n  } else if (Array.isArray(input)) {\n    // if specifying an array, every sub-definition NEEDS a day-of-week\n    rawDefs = input.filter(function (rawDef) {\n      return rawDef.daysOfWeek;\n    });\n  } else if (_typeof(input) === 'object' && input) {\n    // non-null object\n    rawDefs = [input];\n  } else {\n    // is probably false\n    rawDefs = [];\n  }\n\n  rawDefs = rawDefs.map(function (rawDef) {\n    return Object.assign(Object.assign({}, DEF_DEFAULTS), rawDef);\n  });\n  return rawDefs;\n}\n\nfunction triggerDateSelect(selection, pev, context) {\n  context.emitter.trigger('select', Object.assign(Object.assign({}, buildDateSpanApiWithContext(selection, context)), {\n    jsEvent: pev ? pev.origEvent : null,\n    view: context.viewApi || context.calendarApi.view\n  }));\n}\n\nfunction triggerDateUnselect(pev, context) {\n  context.emitter.trigger('unselect', {\n    jsEvent: pev ? pev.origEvent : null,\n    view: context.viewApi || context.calendarApi.view\n  });\n}\n\nfunction buildDateSpanApiWithContext(dateSpan, context) {\n  var props = {};\n\n  var _iterator10 = _createForOfIteratorHelper(context.pluginHooks.dateSpanTransforms),\n      _step10;\n\n  try {\n    for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n      var transform = _step10.value;\n      Object.assign(props, transform(dateSpan, context));\n    }\n  } catch (err) {\n    _iterator10.e(err);\n  } finally {\n    _iterator10.f();\n  }\n\n  Object.assign(props, buildDateSpanApi(dateSpan, context.dateEnv));\n  return props;\n} // Given an event's allDay status and start date, return what its fallback end date should be.\n// TODO: rename to computeDefaultEventEnd\n\n\nfunction getDefaultEventEnd(allDay, marker, context) {\n  var dateEnv = context.dateEnv,\n      options = context.options;\n  var end = marker;\n\n  if (allDay) {\n    end = startOfDay(end);\n    end = dateEnv.add(end, options.defaultAllDayEventDuration);\n  } else {\n    end = dateEnv.add(end, options.defaultTimedEventDuration);\n  }\n\n  return end;\n} // applies the mutation to ALL defs/instances within the event store\n\n\nfunction applyMutationToEventStore(eventStore, eventConfigBase, mutation, context) {\n  var eventConfigs = compileEventUis(eventStore.defs, eventConfigBase);\n  var dest = createEmptyEventStore();\n\n  for (var defId in eventStore.defs) {\n    var def = eventStore.defs[defId];\n    dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, context);\n  }\n\n  for (var instanceId in eventStore.instances) {\n    var instance = eventStore.instances[instanceId];\n    var _def3 = dest.defs[instance.defId]; // important to grab the newly modified def\n\n    dest.instances[instanceId] = applyMutationToEventInstance(instance, _def3, eventConfigs[instance.defId], mutation, context);\n  }\n\n  return dest;\n}\n\nfunction applyMutationToEventDef(eventDef, eventConfig, mutation, context) {\n  var standardProps = mutation.standardProps || {}; // if hasEnd has not been specified, guess a good value based on deltas.\n  // if duration will change, there's no way the default duration will persist,\n  // and thus, we need to mark the event as having a real end\n\n  if (standardProps.hasEnd == null && eventConfig.durationEditable && (mutation.startDelta || mutation.endDelta)) {\n    standardProps.hasEnd = true; // TODO: is this mutation okay?\n  }\n\n  var copy = Object.assign(Object.assign(Object.assign({}, eventDef), standardProps), {\n    ui: Object.assign(Object.assign({}, eventDef.ui), standardProps.ui)\n  });\n\n  if (mutation.extendedProps) {\n    copy.extendedProps = Object.assign(Object.assign({}, copy.extendedProps), mutation.extendedProps);\n  }\n\n  var _iterator11 = _createForOfIteratorHelper(context.pluginHooks.eventDefMutationAppliers),\n      _step11;\n\n  try {\n    for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n      var applier = _step11.value;\n      applier(copy, mutation, context);\n    }\n  } catch (err) {\n    _iterator11.e(err);\n  } finally {\n    _iterator11.f();\n  }\n\n  if (!copy.hasEnd && context.options.forceEventDuration) {\n    copy.hasEnd = true;\n  }\n\n  return copy;\n}\n\nfunction applyMutationToEventInstance(eventInstance, eventDef, // must first be modified by applyMutationToEventDef\neventConfig, mutation, context) {\n  var dateEnv = context.dateEnv;\n  var forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true;\n  var clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false;\n  var copy = Object.assign({}, eventInstance);\n\n  if (forceAllDay) {\n    copy.range = computeAlignedDayRange(copy.range);\n  }\n\n  if (mutation.datesDelta && eventConfig.startEditable) {\n    copy.range = {\n      start: dateEnv.add(copy.range.start, mutation.datesDelta),\n      end: dateEnv.add(copy.range.end, mutation.datesDelta)\n    };\n  }\n\n  if (mutation.startDelta && eventConfig.durationEditable) {\n    copy.range = {\n      start: dateEnv.add(copy.range.start, mutation.startDelta),\n      end: copy.range.end\n    };\n  }\n\n  if (mutation.endDelta && eventConfig.durationEditable) {\n    copy.range = {\n      start: copy.range.start,\n      end: dateEnv.add(copy.range.end, mutation.endDelta)\n    };\n  }\n\n  if (clearEnd) {\n    copy.range = {\n      start: copy.range.start,\n      end: getDefaultEventEnd(eventDef.allDay, copy.range.start, context)\n    };\n  } // in case event was all-day but the supplied deltas were not\n  // better util for this?\n\n\n  if (eventDef.allDay) {\n    copy.range = {\n      start: startOfDay(copy.range.start),\n      end: startOfDay(copy.range.end)\n    };\n  } // handle invalid durations\n\n\n  if (copy.range.end < copy.range.start) {\n    copy.range.end = getDefaultEventEnd(eventDef.allDay, copy.range.start, context);\n  }\n\n  return copy;\n}\n\nvar EventSourceImpl = /*#__PURE__*/function () {\n  function EventSourceImpl(context, internalEventSource) {\n    _classCallCheck(this, EventSourceImpl);\n\n    this.context = context;\n    this.internalEventSource = internalEventSource;\n  }\n\n  _createClass(EventSourceImpl, [{\n    key: \"remove\",\n    value: function remove() {\n      this.context.dispatch({\n        type: 'REMOVE_EVENT_SOURCE',\n        sourceId: this.internalEventSource.sourceId\n      });\n    }\n  }, {\n    key: \"refetch\",\n    value: function refetch() {\n      this.context.dispatch({\n        type: 'FETCH_EVENT_SOURCES',\n        sourceIds: [this.internalEventSource.sourceId],\n        isRefetch: true\n      });\n    }\n  }, {\n    key: \"id\",\n    get: function get() {\n      return this.internalEventSource.publicId;\n    }\n  }, {\n    key: \"url\",\n    get: function get() {\n      return this.internalEventSource.meta.url;\n    }\n  }, {\n    key: \"format\",\n    get: function get() {\n      return this.internalEventSource.meta.format; // TODO: bad. not guaranteed\n    }\n  }]);\n\n  return EventSourceImpl;\n}();\n\nvar EventImpl = /*#__PURE__*/function () {\n  // instance will be null if expressing a recurring event that has no current instances,\n  // OR if trying to validate an incoming external event that has no dates assigned\n  function EventImpl(context, def, instance) {\n    _classCallCheck(this, EventImpl);\n\n    this._context = context;\n    this._def = def;\n    this._instance = instance || null;\n  }\n  /*\n  TODO: make event struct more responsible for this\n  */\n\n\n  _createClass(EventImpl, [{\n    key: \"setProp\",\n    value: function setProp(name, val) {\n      if (name in EVENT_DATE_REFINERS) {\n        console.warn('Could not set date-related prop \\'name\\'. Use one of the date-related methods instead.'); // TODO: make proper aliasing system?\n      } else if (name === 'id') {\n        val = EVENT_NON_DATE_REFINERS[name](val);\n        this.mutate({\n          standardProps: {\n            publicId: val\n          } // hardcoded internal name\n\n        });\n      } else if (name in EVENT_NON_DATE_REFINERS) {\n        val = EVENT_NON_DATE_REFINERS[name](val);\n        this.mutate({\n          standardProps: _defineProperty({}, name, val)\n        });\n      } else if (name in EVENT_UI_REFINERS) {\n        var ui = EVENT_UI_REFINERS[name](val);\n\n        if (name === 'color') {\n          ui = {\n            backgroundColor: val,\n            borderColor: val\n          };\n        } else if (name === 'editable') {\n          ui = {\n            startEditable: val,\n            durationEditable: val\n          };\n        } else {\n          ui = _defineProperty({}, name, val);\n        }\n\n        this.mutate({\n          standardProps: {\n            ui: ui\n          }\n        });\n      } else {\n        console.warn(\"Could not set prop '\".concat(name, \"'. Use setExtendedProp instead.\"));\n      }\n    }\n  }, {\n    key: \"setExtendedProp\",\n    value: function setExtendedProp(name, val) {\n      this.mutate({\n        extendedProps: _defineProperty({}, name, val)\n      });\n    }\n  }, {\n    key: \"setStart\",\n    value: function setStart(startInput) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var dateEnv = this._context.dateEnv;\n      var start = dateEnv.createMarker(startInput);\n\n      if (start && this._instance) {\n        // TODO: warning if parsed bad\n        var instanceRange = this._instance.range;\n        var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); // what if parsed bad!?\n\n        if (options.maintainDuration) {\n          this.mutate({\n            datesDelta: startDelta\n          });\n        } else {\n          this.mutate({\n            startDelta: startDelta\n          });\n        }\n      }\n    }\n  }, {\n    key: \"setEnd\",\n    value: function setEnd(endInput) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var dateEnv = this._context.dateEnv;\n      var end;\n\n      if (endInput != null) {\n        end = dateEnv.createMarker(endInput);\n\n        if (!end) {\n          return; // TODO: warning if parsed bad\n        }\n      }\n\n      if (this._instance) {\n        if (end) {\n          var endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity);\n          this.mutate({\n            endDelta: endDelta\n          });\n        } else {\n          this.mutate({\n            standardProps: {\n              hasEnd: false\n            }\n          });\n        }\n      }\n    }\n  }, {\n    key: \"setDates\",\n    value: function setDates(startInput, endInput) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      var dateEnv = this._context.dateEnv;\n      var standardProps = {\n        allDay: options.allDay\n      };\n      var start = dateEnv.createMarker(startInput);\n      var end;\n\n      if (!start) {\n        return; // TODO: warning if parsed bad\n      }\n\n      if (endInput != null) {\n        end = dateEnv.createMarker(endInput);\n\n        if (!end) {\n          // TODO: warning if parsed bad\n          return;\n        }\n      }\n\n      if (this._instance) {\n        var instanceRange = this._instance.range; // when computing the diff for an event being converted to all-day,\n        // compute diff off of the all-day values the way event-mutation does.\n\n        if (options.allDay === true) {\n          instanceRange = computeAlignedDayRange(instanceRange);\n        }\n\n        var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity);\n\n        if (end) {\n          var endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity);\n\n          if (durationsEqual(startDelta, endDelta)) {\n            this.mutate({\n              datesDelta: startDelta,\n              standardProps: standardProps\n            });\n          } else {\n            this.mutate({\n              startDelta: startDelta,\n              endDelta: endDelta,\n              standardProps: standardProps\n            });\n          }\n        } else {\n          // means \"clear the end\"\n          standardProps.hasEnd = false;\n          this.mutate({\n            datesDelta: startDelta,\n            standardProps: standardProps\n          });\n        }\n      }\n    }\n  }, {\n    key: \"moveStart\",\n    value: function moveStart(deltaInput) {\n      var delta = createDuration(deltaInput);\n\n      if (delta) {\n        // TODO: warning if parsed bad\n        this.mutate({\n          startDelta: delta\n        });\n      }\n    }\n  }, {\n    key: \"moveEnd\",\n    value: function moveEnd(deltaInput) {\n      var delta = createDuration(deltaInput);\n\n      if (delta) {\n        // TODO: warning if parsed bad\n        this.mutate({\n          endDelta: delta\n        });\n      }\n    }\n  }, {\n    key: \"moveDates\",\n    value: function moveDates(deltaInput) {\n      var delta = createDuration(deltaInput);\n\n      if (delta) {\n        // TODO: warning if parsed bad\n        this.mutate({\n          datesDelta: delta\n        });\n      }\n    }\n  }, {\n    key: \"setAllDay\",\n    value: function setAllDay(allDay) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var standardProps = {\n        allDay: allDay\n      };\n      var maintainDuration = options.maintainDuration;\n\n      if (maintainDuration == null) {\n        maintainDuration = this._context.options.allDayMaintainDuration;\n      }\n\n      if (this._def.allDay !== allDay) {\n        standardProps.hasEnd = maintainDuration;\n      }\n\n      this.mutate({\n        standardProps: standardProps\n      });\n    }\n  }, {\n    key: \"formatRange\",\n    value: function formatRange(formatInput) {\n      var dateEnv = this._context.dateEnv;\n      var instance = this._instance;\n      var formatter = createFormatter(formatInput);\n\n      if (this._def.hasEnd) {\n        return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {\n          forcedStartTzo: instance.forcedStartTzo,\n          forcedEndTzo: instance.forcedEndTzo\n        });\n      }\n\n      return dateEnv.format(instance.range.start, formatter, {\n        forcedTzo: instance.forcedStartTzo\n      });\n    }\n  }, {\n    key: \"mutate\",\n    value: function mutate(mutation) {\n      var instance = this._instance;\n\n      if (instance) {\n        var def = this._def;\n        var context = this._context;\n\n        var _context$getCurrentDa = context.getCurrentData(),\n            eventStore = _context$getCurrentDa.eventStore;\n\n        var relevantEvents = getRelevantEvents(eventStore, instance.instanceId);\n        var eventConfigBase = {\n          '': {\n            display: '',\n            startEditable: true,\n            durationEditable: true,\n            constraints: [],\n            overlap: null,\n            allows: [],\n            backgroundColor: '',\n            borderColor: '',\n            textColor: '',\n            classNames: []\n          }\n        };\n        relevantEvents = applyMutationToEventStore(relevantEvents, eventConfigBase, mutation, context);\n        var oldEvent = new EventImpl(context, def, instance); // snapshot\n\n        this._def = relevantEvents.defs[def.defId];\n        this._instance = relevantEvents.instances[instance.instanceId];\n        context.dispatch({\n          type: 'MERGE_EVENTS',\n          eventStore: relevantEvents\n        });\n        context.emitter.trigger('eventChange', {\n          oldEvent: oldEvent,\n          event: this,\n          relatedEvents: buildEventApis(relevantEvents, context, instance),\n          revert: function revert() {\n            context.dispatch({\n              type: 'RESET_EVENTS',\n              eventStore: eventStore // the ORIGINAL store\n\n            });\n          }\n        });\n      }\n    }\n  }, {\n    key: \"remove\",\n    value: function remove() {\n      var context = this._context;\n      var asStore = eventApiToStore(this);\n      context.dispatch({\n        type: 'REMOVE_EVENTS',\n        eventStore: asStore\n      });\n      context.emitter.trigger('eventRemove', {\n        event: this,\n        relatedEvents: [],\n        revert: function revert() {\n          context.dispatch({\n            type: 'MERGE_EVENTS',\n            eventStore: asStore\n          });\n        }\n      });\n    }\n  }, {\n    key: \"source\",\n    get: function get() {\n      var sourceId = this._def.sourceId;\n\n      if (sourceId) {\n        return new EventSourceImpl(this._context, this._context.getCurrentData().eventSources[sourceId]);\n      }\n\n      return null;\n    }\n  }, {\n    key: \"start\",\n    get: function get() {\n      return this._instance ? this._context.dateEnv.toDate(this._instance.range.start) : null;\n    }\n  }, {\n    key: \"end\",\n    get: function get() {\n      return this._instance && this._def.hasEnd ? this._context.dateEnv.toDate(this._instance.range.end) : null;\n    }\n  }, {\n    key: \"startStr\",\n    get: function get() {\n      var instance = this._instance;\n\n      if (instance) {\n        return this._context.dateEnv.formatIso(instance.range.start, {\n          omitTime: this._def.allDay,\n          forcedTzo: instance.forcedStartTzo\n        });\n      }\n\n      return '';\n    }\n  }, {\n    key: \"endStr\",\n    get: function get() {\n      var instance = this._instance;\n\n      if (instance && this._def.hasEnd) {\n        return this._context.dateEnv.formatIso(instance.range.end, {\n          omitTime: this._def.allDay,\n          forcedTzo: instance.forcedEndTzo\n        });\n      }\n\n      return '';\n    } // computable props that all access the def\n    // TODO: find a TypeScript-compatible way to do this at scale\n\n  }, {\n    key: \"id\",\n    get: function get() {\n      return this._def.publicId;\n    }\n  }, {\n    key: \"groupId\",\n    get: function get() {\n      return this._def.groupId;\n    }\n  }, {\n    key: \"allDay\",\n    get: function get() {\n      return this._def.allDay;\n    }\n  }, {\n    key: \"title\",\n    get: function get() {\n      return this._def.title;\n    }\n  }, {\n    key: \"url\",\n    get: function get() {\n      return this._def.url;\n    }\n  }, {\n    key: \"display\",\n    get: function get() {\n      return this._def.ui.display || 'auto';\n    } // bad. just normalize the type earlier\n\n  }, {\n    key: \"startEditable\",\n    get: function get() {\n      return this._def.ui.startEditable;\n    }\n  }, {\n    key: \"durationEditable\",\n    get: function get() {\n      return this._def.ui.durationEditable;\n    }\n  }, {\n    key: \"constraint\",\n    get: function get() {\n      return this._def.ui.constraints[0] || null;\n    }\n  }, {\n    key: \"overlap\",\n    get: function get() {\n      return this._def.ui.overlap;\n    }\n  }, {\n    key: \"allow\",\n    get: function get() {\n      return this._def.ui.allows[0] || null;\n    }\n  }, {\n    key: \"backgroundColor\",\n    get: function get() {\n      return this._def.ui.backgroundColor;\n    }\n  }, {\n    key: \"borderColor\",\n    get: function get() {\n      return this._def.ui.borderColor;\n    }\n  }, {\n    key: \"textColor\",\n    get: function get() {\n      return this._def.ui.textColor;\n    } // NOTE: user can't modify these because Object.freeze was called in event-def parsing\n\n  }, {\n    key: \"classNames\",\n    get: function get() {\n      return this._def.ui.classNames;\n    }\n  }, {\n    key: \"extendedProps\",\n    get: function get() {\n      return this._def.extendedProps;\n    }\n  }, {\n    key: \"toPlainObject\",\n    value: function toPlainObject() {\n      var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var def = this._def;\n      var ui = def.ui;\n      var startStr = this.startStr,\n          endStr = this.endStr;\n      var res = {\n        allDay: def.allDay\n      };\n\n      if (def.title) {\n        res.title = def.title;\n      }\n\n      if (startStr) {\n        res.start = startStr;\n      }\n\n      if (endStr) {\n        res.end = endStr;\n      }\n\n      if (def.publicId) {\n        res.id = def.publicId;\n      }\n\n      if (def.groupId) {\n        res.groupId = def.groupId;\n      }\n\n      if (def.url) {\n        res.url = def.url;\n      }\n\n      if (ui.display && ui.display !== 'auto') {\n        res.display = ui.display;\n      } // TODO: what about recurring-event properties???\n      // TODO: include startEditable/durationEditable/constraint/overlap/allow\n\n\n      if (settings.collapseColor && ui.backgroundColor && ui.backgroundColor === ui.borderColor) {\n        res.color = ui.backgroundColor;\n      } else {\n        if (ui.backgroundColor) {\n          res.backgroundColor = ui.backgroundColor;\n        }\n\n        if (ui.borderColor) {\n          res.borderColor = ui.borderColor;\n        }\n      }\n\n      if (ui.textColor) {\n        res.textColor = ui.textColor;\n      }\n\n      if (ui.classNames.length) {\n        res.classNames = ui.classNames;\n      }\n\n      if (Object.keys(def.extendedProps).length) {\n        if (settings.collapseExtendedProps) {\n          Object.assign(res, def.extendedProps);\n        } else {\n          res.extendedProps = def.extendedProps;\n        }\n      }\n\n      return res;\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this.toPlainObject();\n    }\n  }]);\n\n  return EventImpl;\n}();\n\nfunction eventApiToStore(eventApi) {\n  var def = eventApi._def;\n  var instance = eventApi._instance;\n  return {\n    defs: _defineProperty({}, def.defId, def),\n    instances: instance ? _defineProperty({}, instance.instanceId, instance) : {}\n  };\n}\n\nfunction buildEventApis(eventStore, context, excludeInstance) {\n  var defs = eventStore.defs,\n      instances = eventStore.instances;\n  var eventApis = [];\n  var excludeInstanceId = excludeInstance ? excludeInstance.instanceId : '';\n\n  for (var id in instances) {\n    var instance = instances[id];\n    var def = defs[instance.defId];\n\n    if (instance.instanceId !== excludeInstanceId) {\n      eventApis.push(new EventImpl(context, def, instance));\n    }\n  }\n\n  return eventApis;\n}\n/*\nSpecifying nextDayThreshold signals that all-day ranges should be sliced.\n*/\n\n\nfunction sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshold) {\n  var inverseBgByGroupId = {};\n  var inverseBgByDefId = {};\n  var defByGroupId = {};\n  var bgRanges = [];\n  var fgRanges = [];\n  var eventUis = compileEventUis(eventStore.defs, eventUiBases);\n\n  for (var defId in eventStore.defs) {\n    var def = eventStore.defs[defId];\n    var ui = eventUis[def.defId];\n\n    if (ui.display === 'inverse-background') {\n      if (def.groupId) {\n        inverseBgByGroupId[def.groupId] = [];\n\n        if (!defByGroupId[def.groupId]) {\n          defByGroupId[def.groupId] = def;\n        }\n      } else {\n        inverseBgByDefId[defId] = [];\n      }\n    }\n  }\n\n  for (var instanceId in eventStore.instances) {\n    var instance = eventStore.instances[instanceId];\n    var _def4 = eventStore.defs[instance.defId];\n    var _ui2 = eventUis[_def4.defId];\n    var origRange = instance.range;\n    var normalRange = !_def4.allDay && nextDayThreshold ? computeVisibleDayRange(origRange, nextDayThreshold) : origRange;\n    var slicedRange = intersectRanges(normalRange, framingRange);\n\n    if (slicedRange) {\n      if (_ui2.display === 'inverse-background') {\n        if (_def4.groupId) {\n          inverseBgByGroupId[_def4.groupId].push(slicedRange);\n        } else {\n          inverseBgByDefId[instance.defId].push(slicedRange);\n        }\n      } else if (_ui2.display !== 'none') {\n        (_ui2.display === 'background' ? bgRanges : fgRanges).push({\n          def: _def4,\n          ui: _ui2,\n          instance: instance,\n          range: slicedRange,\n          isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),\n          isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf()\n        });\n      }\n    }\n  }\n\n  for (var groupId in inverseBgByGroupId) {\n    // BY GROUP\n    var ranges = inverseBgByGroupId[groupId];\n    var invertedRanges = invertRanges(ranges, framingRange);\n\n    var _iterator12 = _createForOfIteratorHelper(invertedRanges),\n        _step12;\n\n    try {\n      for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n        var invertedRange = _step12.value;\n        var _def5 = defByGroupId[groupId];\n        var _ui3 = eventUis[_def5.defId];\n        bgRanges.push({\n          def: _def5,\n          ui: _ui3,\n          instance: null,\n          range: invertedRange,\n          isStart: false,\n          isEnd: false\n        });\n      }\n    } catch (err) {\n      _iterator12.e(err);\n    } finally {\n      _iterator12.f();\n    }\n  }\n\n  for (var _defId in inverseBgByDefId) {\n    var _ranges = inverseBgByDefId[_defId];\n\n    var _invertedRanges = invertRanges(_ranges, framingRange);\n\n    var _iterator13 = _createForOfIteratorHelper(_invertedRanges),\n        _step13;\n\n    try {\n      for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n        var _invertedRange = _step13.value;\n        bgRanges.push({\n          def: eventStore.defs[_defId],\n          ui: eventUis[_defId],\n          instance: null,\n          range: _invertedRange,\n          isStart: false,\n          isEnd: false\n        });\n      }\n    } catch (err) {\n      _iterator13.e(err);\n    } finally {\n      _iterator13.f();\n    }\n  }\n\n  return {\n    bg: bgRanges,\n    fg: fgRanges\n  };\n}\n\nfunction hasBgRendering(def) {\n  return def.ui.display === 'background' || def.ui.display === 'inverse-background';\n}\n\nfunction setElSeg(el, seg) {\n  el.fcSeg = seg;\n}\n\nfunction getElSeg(el) {\n  return el.fcSeg || el.parentNode.fcSeg || // for the harness\n  null;\n} // event ui computation\n\n\nfunction compileEventUis(eventDefs, eventUiBases) {\n  return mapHash(eventDefs, function (eventDef) {\n    return compileEventUi(eventDef, eventUiBases);\n  });\n}\n\nfunction compileEventUi(eventDef, eventUiBases) {\n  var uis = [];\n\n  if (eventUiBases['']) {\n    uis.push(eventUiBases['']);\n  }\n\n  if (eventUiBases[eventDef.defId]) {\n    uis.push(eventUiBases[eventDef.defId]);\n  }\n\n  uis.push(eventDef.ui);\n  return combineEventUis(uis);\n}\n\nfunction sortEventSegs(segs, eventOrderSpecs) {\n  var objs = segs.map(buildSegCompareObj);\n  objs.sort(function (obj0, obj1) {\n    return compareByFieldSpecs(obj0, obj1, eventOrderSpecs);\n  });\n  return objs.map(function (c) {\n    return c._seg;\n  });\n} // returns a object with all primitive props that can be compared\n\n\nfunction buildSegCompareObj(seg) {\n  var eventRange = seg.eventRange;\n  var eventDef = eventRange.def;\n  var range = eventRange.instance ? eventRange.instance.range : eventRange.range;\n  var start = range.start ? range.start.valueOf() : 0; // TODO: better support for open-range events\n\n  var end = range.end ? range.end.valueOf() : 0; // \"\n\n  return Object.assign(Object.assign(Object.assign({}, eventDef.extendedProps), eventDef), {\n    id: eventDef.publicId,\n    start: start,\n    end: end,\n    duration: end - start,\n    allDay: Number(eventDef.allDay),\n    _seg: seg\n  });\n}\n\nfunction computeSegDraggable(seg, context) {\n  var pluginHooks = context.pluginHooks;\n  var transformers = pluginHooks.isDraggableTransformers;\n  var _seg$eventRange = seg.eventRange,\n      def = _seg$eventRange.def,\n      ui = _seg$eventRange.ui;\n  var val = ui.startEditable;\n\n  var _iterator14 = _createForOfIteratorHelper(transformers),\n      _step14;\n\n  try {\n    for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n      var transformer = _step14.value;\n      val = transformer(val, def, ui, context);\n    }\n  } catch (err) {\n    _iterator14.e(err);\n  } finally {\n    _iterator14.f();\n  }\n\n  return val;\n}\n\nfunction computeSegStartResizable(seg, context) {\n  return seg.isStart && seg.eventRange.ui.durationEditable && context.options.eventResizableFromStart;\n}\n\nfunction computeSegEndResizable(seg, context) {\n  return seg.isEnd && seg.eventRange.ui.durationEditable;\n}\n\nfunction buildSegTimeText(seg, timeFormat, context, defaultDisplayEventTime, // defaults to true\ndefaultDisplayEventEnd, // defaults to true\nstartOverride, endOverride) {\n  var dateEnv = context.dateEnv,\n      options = context.options;\n  var displayEventTime = options.displayEventTime,\n      displayEventEnd = options.displayEventEnd;\n  var eventDef = seg.eventRange.def;\n  var eventInstance = seg.eventRange.instance;\n\n  if (displayEventTime == null) {\n    displayEventTime = defaultDisplayEventTime !== false;\n  }\n\n  if (displayEventEnd == null) {\n    displayEventEnd = defaultDisplayEventEnd !== false;\n  }\n\n  var wholeEventStart = eventInstance.range.start;\n  var wholeEventEnd = eventInstance.range.end;\n  var segStart = startOverride || seg.start || seg.eventRange.range.start;\n  var segEnd = endOverride || seg.end || seg.eventRange.range.end;\n  var isStartDay = startOfDay(wholeEventStart).valueOf() === startOfDay(segStart).valueOf();\n  var isEndDay = startOfDay(addMs(wholeEventEnd, -1)).valueOf() === startOfDay(addMs(segEnd, -1)).valueOf();\n\n  if (displayEventTime && !eventDef.allDay && (isStartDay || isEndDay)) {\n    segStart = isStartDay ? wholeEventStart : segStart;\n    segEnd = isEndDay ? wholeEventEnd : segEnd;\n\n    if (displayEventEnd && eventDef.hasEnd) {\n      return dateEnv.formatRange(segStart, segEnd, timeFormat, {\n        forcedStartTzo: startOverride ? null : eventInstance.forcedStartTzo,\n        forcedEndTzo: endOverride ? null : eventInstance.forcedEndTzo\n      });\n    }\n\n    return dateEnv.format(segStart, timeFormat, {\n      forcedTzo: startOverride ? null : eventInstance.forcedStartTzo // nooooo, same\n\n    });\n  }\n\n  return '';\n}\n\nfunction getSegMeta(seg, todayRange, nowDate) {\n  var segRange = seg.eventRange.range;\n  return {\n    isPast: segRange.end <= (nowDate || todayRange.start),\n    isFuture: segRange.start >= (nowDate || todayRange.end),\n    isToday: todayRange && rangeContainsMarker(todayRange, segRange.start)\n  };\n}\n\nfunction getEventClassNames(props) {\n  var classNames = ['fc-event'];\n\n  if (props.isMirror) {\n    classNames.push('fc-event-mirror');\n  }\n\n  if (props.isDraggable) {\n    classNames.push('fc-event-draggable');\n  }\n\n  if (props.isStartResizable || props.isEndResizable) {\n    classNames.push('fc-event-resizable');\n  }\n\n  if (props.isDragging) {\n    classNames.push('fc-event-dragging');\n  }\n\n  if (props.isResizing) {\n    classNames.push('fc-event-resizing');\n  }\n\n  if (props.isSelected) {\n    classNames.push('fc-event-selected');\n  }\n\n  if (props.isStart) {\n    classNames.push('fc-event-start');\n  }\n\n  if (props.isEnd) {\n    classNames.push('fc-event-end');\n  }\n\n  if (props.isPast) {\n    classNames.push('fc-event-past');\n  }\n\n  if (props.isToday) {\n    classNames.push('fc-event-today');\n  }\n\n  if (props.isFuture) {\n    classNames.push('fc-event-future');\n  }\n\n  return classNames;\n}\n\nfunction buildEventRangeKey(eventRange) {\n  return eventRange.instance ? eventRange.instance.instanceId : \"\".concat(eventRange.def.defId, \":\").concat(eventRange.range.start.toISOString()); // inverse-background events don't have specific instances. TODO: better solution\n}\n\nfunction getSegAnchorAttrs(seg, context) {\n  var _seg$eventRange2 = seg.eventRange,\n      def = _seg$eventRange2.def,\n      instance = _seg$eventRange2.instance;\n  var url = def.url;\n\n  if (url) {\n    return {\n      href: url\n    };\n  }\n\n  var emitter = context.emitter,\n      options = context.options;\n  var eventInteractive = options.eventInteractive;\n\n  if (eventInteractive == null) {\n    eventInteractive = def.interactive;\n\n    if (eventInteractive == null) {\n      eventInteractive = Boolean(emitter.hasHandlers('eventClick'));\n    }\n  } // mock what happens in EventClicking\n\n\n  if (eventInteractive) {\n    // only attach keyboard-related handlers because click handler is already done in EventClicking\n    return createAriaKeyboardAttrs(function (ev) {\n      emitter.trigger('eventClick', {\n        el: ev.target,\n        event: new EventImpl(context, def, instance),\n        jsEvent: ev,\n        view: context.viewApi\n      });\n    });\n  }\n\n  return {};\n}\n\nvar STANDARD_PROPS = {\n  start: identity,\n  end: identity,\n  allDay: Boolean\n};\n\nfunction parseDateSpan(raw, dateEnv, defaultDuration) {\n  var span = parseOpenDateSpan(raw, dateEnv);\n  var range = span.range;\n\n  if (!range.start) {\n    return null;\n  }\n\n  if (!range.end) {\n    if (defaultDuration == null) {\n      return null;\n    }\n\n    range.end = dateEnv.add(range.start, defaultDuration);\n  }\n\n  return span;\n}\n/*\nTODO: somehow combine with parseRange?\nWill return null if the start/end props were present but parsed invalidly.\n*/\n\n\nfunction parseOpenDateSpan(raw, dateEnv) {\n  var _refineProps2 = refineProps(raw, STANDARD_PROPS),\n      standardProps = _refineProps2.refined,\n      extra = _refineProps2.extra;\n\n  var startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null;\n  var endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null;\n  var allDay = standardProps.allDay;\n\n  if (allDay == null) {\n    allDay = startMeta && startMeta.isTimeUnspecified && (!endMeta || endMeta.isTimeUnspecified);\n  }\n\n  return Object.assign({\n    range: {\n      start: startMeta ? startMeta.marker : null,\n      end: endMeta ? endMeta.marker : null\n    },\n    allDay: allDay\n  }, extra);\n}\n\nfunction isDateSpansEqual(span0, span1) {\n  return rangesEqual(span0.range, span1.range) && span0.allDay === span1.allDay && isSpanPropsEqual(span0, span1);\n} // the NON-DATE-RELATED props\n\n\nfunction isSpanPropsEqual(span0, span1) {\n  for (var propName in span1) {\n    if (propName !== 'range' && propName !== 'allDay') {\n      if (span0[propName] !== span1[propName]) {\n        return false;\n      }\n    }\n  } // are there any props that span0 has that span1 DOESN'T have?\n  // both have range/allDay, so no need to special-case.\n\n\n  for (var _propName2 in span0) {\n    if (!(_propName2 in span1)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction buildDateSpanApi(span, dateEnv) {\n  return Object.assign(Object.assign({}, buildRangeApi(span.range, dateEnv, span.allDay)), {\n    allDay: span.allDay\n  });\n}\n\nfunction buildRangeApiWithTimeZone(range, dateEnv, omitTime) {\n  return Object.assign(Object.assign({}, buildRangeApi(range, dateEnv, omitTime)), {\n    timeZone: dateEnv.timeZone\n  });\n}\n\nfunction buildRangeApi(range, dateEnv, omitTime) {\n  return {\n    start: dateEnv.toDate(range.start),\n    end: dateEnv.toDate(range.end),\n    startStr: dateEnv.formatIso(range.start, {\n      omitTime: omitTime\n    }),\n    endStr: dateEnv.formatIso(range.end, {\n      omitTime: omitTime\n    })\n  };\n}\n\nfunction fabricateEventRange(dateSpan, eventUiBases, context) {\n  var res = refineEventDef({\n    editable: false\n  }, context);\n  var def = parseEventDef(res.refined, res.extra, '', // sourceId\n  dateSpan.allDay, true, // hasEnd\n  context);\n  return {\n    def: def,\n    ui: compileEventUi(def, eventUiBases),\n    instance: createEventInstance(def.defId, dateSpan.range),\n    range: dateSpan.range,\n    isStart: true,\n    isEnd: true\n  };\n}\n/*\ngiven a function that resolves a result asynchronously.\nthe function can either call passed-in success and failure callbacks,\nor it can return a promise.\nif you need to pass additional params to func, bind them first.\n*/\n\n\nfunction unpromisify(func, normalizedSuccessCallback, normalizedFailureCallback) {\n  // guard against success/failure callbacks being called more than once\n  // and guard against a promise AND callback being used together.\n  var isResolved = false;\n\n  var wrappedSuccess = function wrappedSuccess(res) {\n    if (!isResolved) {\n      isResolved = true;\n      normalizedSuccessCallback(res);\n    }\n  };\n\n  var wrappedFailure = function wrappedFailure(error) {\n    if (!isResolved) {\n      isResolved = true;\n      normalizedFailureCallback(error);\n    }\n  };\n\n  var res = func(wrappedSuccess, wrappedFailure);\n\n  if (res && typeof res.then === 'function') {\n    res.then(wrappedSuccess, wrappedFailure);\n  }\n}\n\nvar JsonRequestError = /*#__PURE__*/function (_Error) {\n  _inherits(JsonRequestError, _Error);\n\n  var _super7 = _createSuper(JsonRequestError);\n\n  function JsonRequestError(message, response) {\n    var _this8;\n\n    _classCallCheck(this, JsonRequestError);\n\n    _this8 = _super7.call(this, message);\n    _this8.response = response;\n    return _this8;\n  }\n\n  return JsonRequestError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nfunction requestJson(method, url, params) {\n  method = method.toUpperCase();\n  var fetchOptions = {\n    method: method\n  };\n\n  if (method === 'GET') {\n    url += (url.indexOf('?') === -1 ? '?' : '&') + new URLSearchParams(params);\n  } else {\n    fetchOptions.body = new URLSearchParams(params);\n    fetchOptions.headers = {\n      'Content-Type': 'application/x-www-form-urlencoded'\n    };\n  }\n\n  return fetch(url, fetchOptions).then(function (fetchRes) {\n    if (fetchRes.ok) {\n      return fetchRes.json().then(function (parsedResponse) {\n        return [parsedResponse, fetchRes];\n      }, function () {\n        throw new JsonRequestError('Failure parsing JSON', fetchRes);\n      });\n    } else {\n      throw new JsonRequestError('Request failed', fetchRes);\n    }\n  });\n}\n\nvar canVGrowWithinCell;\n\nfunction getCanVGrowWithinCell() {\n  if (canVGrowWithinCell == null) {\n    canVGrowWithinCell = computeCanVGrowWithinCell();\n  }\n\n  return canVGrowWithinCell;\n}\n\nfunction computeCanVGrowWithinCell() {\n  // for SSR, because this function is call immediately at top-level\n  // TODO: just make this logic execute top-level, immediately, instead of doing lazily\n  if (typeof document === 'undefined') {\n    return true;\n  }\n\n  var el = document.createElement('div');\n  el.style.position = 'absolute';\n  el.style.top = '0px';\n  el.style.left = '0px';\n  el.innerHTML = '<table><tr><td><div></div></td></tr></table>';\n  el.querySelector('table').style.height = '100px';\n  el.querySelector('div').style.height = '100%';\n  document.body.appendChild(el);\n  var div = el.querySelector('div');\n  var possible = div.offsetHeight > 0;\n  document.body.removeChild(el);\n  return possible;\n}\n\nvar CalendarRoot = /*#__PURE__*/function (_BaseComponent3) {\n  _inherits(CalendarRoot, _BaseComponent3);\n\n  var _super8 = _createSuper(CalendarRoot);\n\n  function CalendarRoot() {\n    var _this9;\n\n    _classCallCheck(this, CalendarRoot);\n\n    _this9 = _super8.apply(this, arguments);\n    _this9.state = {\n      forPrint: false\n    };\n\n    _this9.handleBeforePrint = function () {\n      flushSync(function () {\n        _this9.setState({\n          forPrint: true\n        });\n      });\n    };\n\n    _this9.handleAfterPrint = function () {\n      flushSync(function () {\n        _this9.setState({\n          forPrint: false\n        });\n      });\n    };\n\n    return _this9;\n  }\n\n  _createClass(CalendarRoot, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      var options = props.options;\n      var forPrint = this.state.forPrint;\n      var isHeightAuto = forPrint || options.height === 'auto' || options.contentHeight === 'auto';\n      var height = !isHeightAuto && options.height != null ? options.height : '';\n      var classNames = ['fc', forPrint ? 'fc-media-print' : 'fc-media-screen', \"fc-direction-\".concat(options.direction), props.theme.getClass('root')];\n\n      if (!getCanVGrowWithinCell()) {\n        classNames.push('fc-liquid-hack');\n      }\n\n      return props.children(classNames, height, isHeightAuto, forPrint);\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var emitter = this.props.emitter;\n      emitter.on('_beforeprint', this.handleBeforePrint);\n      emitter.on('_afterprint', this.handleAfterPrint);\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      var emitter = this.props.emitter;\n      emitter.off('_beforeprint', this.handleBeforePrint);\n      emitter.off('_afterprint', this.handleAfterPrint);\n    }\n  }]);\n\n  return CalendarRoot;\n}(BaseComponent);\n\nvar Interaction = /*#__PURE__*/function () {\n  function Interaction(settings) {\n    _classCallCheck(this, Interaction);\n\n    this.component = settings.component;\n    this.isHitComboAllowed = settings.isHitComboAllowed || null;\n  }\n\n  _createClass(Interaction, [{\n    key: \"destroy\",\n    value: function destroy() {}\n  }]);\n\n  return Interaction;\n}();\n\nfunction parseInteractionSettings(component, input) {\n  return {\n    component: component,\n    el: input.el,\n    useEventCenter: input.useEventCenter != null ? input.useEventCenter : true,\n    isHitComboAllowed: input.isHitComboAllowed || null\n  };\n}\n\nfunction interactionSettingsToStore(settings) {\n  return _defineProperty({}, settings.component.uid, settings);\n} // global state\n\n\nvar interactionSettingsStore = {};\n\nvar CalendarImpl = /*#__PURE__*/function () {\n  function CalendarImpl() {\n    _classCallCheck(this, CalendarImpl);\n  }\n\n  _createClass(CalendarImpl, [{\n    key: \"getCurrentData\",\n    value: function getCurrentData() {\n      return this.currentDataManager.getCurrentData();\n    }\n  }, {\n    key: \"dispatch\",\n    value: function dispatch(action) {\n      this.currentDataManager.dispatch(action);\n    }\n  }, {\n    key: \"view\",\n    get: function get() {\n      return this.getCurrentData().viewApi;\n    }\n  }, {\n    key: \"batchRendering\",\n    value: function batchRendering(callback) {\n      callback();\n    }\n  }, {\n    key: \"updateSize\",\n    value: function updateSize() {\n      this.trigger('_resize', true);\n    } // Options\n    // -----------------------------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"setOption\",\n    value: function setOption(name, val) {\n      this.dispatch({\n        type: 'SET_OPTION',\n        optionName: name,\n        rawOptionValue: val\n      });\n    }\n  }, {\n    key: \"getOption\",\n    value: function getOption(name) {\n      return this.currentDataManager.currentCalendarOptionsInput[name];\n    }\n  }, {\n    key: \"getAvailableLocaleCodes\",\n    value: function getAvailableLocaleCodes() {\n      return Object.keys(this.getCurrentData().availableRawLocales);\n    } // Trigger\n    // -----------------------------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"on\",\n    value: function on(handlerName, handler) {\n      var currentDataManager = this.currentDataManager;\n\n      if (currentDataManager.currentCalendarOptionsRefiners[handlerName]) {\n        currentDataManager.emitter.on(handlerName, handler);\n      } else {\n        console.warn(\"Unknown listener name '\".concat(handlerName, \"'\"));\n      }\n    }\n  }, {\n    key: \"off\",\n    value: function off(handlerName, handler) {\n      this.currentDataManager.emitter.off(handlerName, handler);\n    } // not meant for public use\n\n  }, {\n    key: \"trigger\",\n    value: function trigger(handlerName) {\n      var _this$currentDataMana;\n\n      for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key6 = 1; _key6 < _len3; _key6++) {\n        args[_key6 - 1] = arguments[_key6];\n      }\n\n      (_this$currentDataMana = this.currentDataManager.emitter).trigger.apply(_this$currentDataMana, [handlerName].concat(args));\n    } // View\n    // -----------------------------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"changeView\",\n    value: function changeView(viewType, dateOrRange) {\n      var _this10 = this;\n\n      this.batchRendering(function () {\n        _this10.unselect();\n\n        if (dateOrRange) {\n          if (dateOrRange.start && dateOrRange.end) {\n            // a range\n            _this10.dispatch({\n              type: 'CHANGE_VIEW_TYPE',\n              viewType: viewType\n            });\n\n            _this10.dispatch({\n              type: 'SET_OPTION',\n              optionName: 'visibleRange',\n              rawOptionValue: dateOrRange\n            });\n          } else {\n            var _this10$getCurrentDat = _this10.getCurrentData(),\n                dateEnv = _this10$getCurrentDat.dateEnv;\n\n            _this10.dispatch({\n              type: 'CHANGE_VIEW_TYPE',\n              viewType: viewType,\n              dateMarker: dateEnv.createMarker(dateOrRange)\n            });\n          }\n        } else {\n          _this10.dispatch({\n            type: 'CHANGE_VIEW_TYPE',\n            viewType: viewType\n          });\n        }\n      });\n    } // Forces navigation to a view for the given date.\n    // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\n    // needs to change\n\n  }, {\n    key: \"zoomTo\",\n    value: function zoomTo(dateMarker, viewType) {\n      var state = this.getCurrentData();\n      var spec;\n      viewType = viewType || 'day'; // day is default zoom\n\n      spec = state.viewSpecs[viewType] || this.getUnitViewSpec(viewType);\n      this.unselect();\n\n      if (spec) {\n        this.dispatch({\n          type: 'CHANGE_VIEW_TYPE',\n          viewType: spec.type,\n          dateMarker: dateMarker\n        });\n      } else {\n        this.dispatch({\n          type: 'CHANGE_DATE',\n          dateMarker: dateMarker\n        });\n      }\n    } // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\n    // Preference is given to views that have corresponding buttons.\n\n  }, {\n    key: \"getUnitViewSpec\",\n    value: function getUnitViewSpec(unit) {\n      var _this$getCurrentData = this.getCurrentData(),\n          viewSpecs = _this$getCurrentData.viewSpecs,\n          toolbarConfig = _this$getCurrentData.toolbarConfig;\n\n      var viewTypes = [].concat(toolbarConfig.header ? toolbarConfig.header.viewsWithButtons : [], toolbarConfig.footer ? toolbarConfig.footer.viewsWithButtons : []);\n      var i;\n      var spec;\n\n      for (var viewType in viewSpecs) {\n        viewTypes.push(viewType);\n      }\n\n      for (i = 0; i < viewTypes.length; i += 1) {\n        spec = viewSpecs[viewTypes[i]];\n\n        if (spec) {\n          if (spec.singleUnit === unit) {\n            return spec;\n          }\n        }\n      }\n\n      return null;\n    } // Current Date\n    // -----------------------------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"prev\",\n    value: function prev() {\n      this.unselect();\n      this.dispatch({\n        type: 'PREV'\n      });\n    }\n  }, {\n    key: \"next\",\n    value: function next() {\n      this.unselect();\n      this.dispatch({\n        type: 'NEXT'\n      });\n    }\n  }, {\n    key: \"prevYear\",\n    value: function prevYear() {\n      var state = this.getCurrentData();\n      this.unselect();\n      this.dispatch({\n        type: 'CHANGE_DATE',\n        dateMarker: state.dateEnv.addYears(state.currentDate, -1)\n      });\n    }\n  }, {\n    key: \"nextYear\",\n    value: function nextYear() {\n      var state = this.getCurrentData();\n      this.unselect();\n      this.dispatch({\n        type: 'CHANGE_DATE',\n        dateMarker: state.dateEnv.addYears(state.currentDate, 1)\n      });\n    }\n  }, {\n    key: \"today\",\n    value: function today() {\n      var state = this.getCurrentData();\n      this.unselect();\n      this.dispatch({\n        type: 'CHANGE_DATE',\n        dateMarker: getNow(state.calendarOptions.now, state.dateEnv)\n      });\n    }\n  }, {\n    key: \"gotoDate\",\n    value: function gotoDate(zonedDateInput) {\n      var state = this.getCurrentData();\n      this.unselect();\n      this.dispatch({\n        type: 'CHANGE_DATE',\n        dateMarker: state.dateEnv.createMarker(zonedDateInput)\n      });\n    }\n  }, {\n    key: \"incrementDate\",\n    value: function incrementDate(deltaInput) {\n      var state = this.getCurrentData();\n      var delta = createDuration(deltaInput);\n\n      if (delta) {\n        // else, warn about invalid input?\n        this.unselect();\n        this.dispatch({\n          type: 'CHANGE_DATE',\n          dateMarker: state.dateEnv.add(state.currentDate, delta)\n        });\n      }\n    }\n  }, {\n    key: \"getDate\",\n    value: function getDate() {\n      var state = this.getCurrentData();\n      return state.dateEnv.toDate(state.currentDate);\n    } // Date Formatting Utils\n    // -----------------------------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"formatDate\",\n    value: function formatDate(d, formatter) {\n      var _this$getCurrentData2 = this.getCurrentData(),\n          dateEnv = _this$getCurrentData2.dateEnv;\n\n      return dateEnv.format(dateEnv.createMarker(d), createFormatter(formatter));\n    } // `settings` is for formatter AND isEndExclusive\n\n  }, {\n    key: \"formatRange\",\n    value: function formatRange(d0, d1, settings) {\n      var _this$getCurrentData3 = this.getCurrentData(),\n          dateEnv = _this$getCurrentData3.dateEnv;\n\n      return dateEnv.formatRange(dateEnv.createMarker(d0), dateEnv.createMarker(d1), createFormatter(settings), settings);\n    }\n  }, {\n    key: \"formatIso\",\n    value: function formatIso(d, omitTime) {\n      var _this$getCurrentData4 = this.getCurrentData(),\n          dateEnv = _this$getCurrentData4.dateEnv;\n\n      return dateEnv.formatIso(dateEnv.createMarker(d), {\n        omitTime: omitTime\n      });\n    } // Date Selection / Event Selection / DayClick\n    // -----------------------------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"select\",\n    value: function select(dateOrObj, endDate) {\n      var selectionInput;\n\n      if (endDate == null) {\n        if (dateOrObj.start != null) {\n          selectionInput = dateOrObj;\n        } else {\n          selectionInput = {\n            start: dateOrObj,\n            end: null\n          };\n        }\n      } else {\n        selectionInput = {\n          start: dateOrObj,\n          end: endDate\n        };\n      }\n\n      var state = this.getCurrentData();\n      var selection = parseDateSpan(selectionInput, state.dateEnv, createDuration({\n        days: 1\n      }));\n\n      if (selection) {\n        // throw parse error otherwise?\n        this.dispatch({\n          type: 'SELECT_DATES',\n          selection: selection\n        });\n        triggerDateSelect(selection, null, state);\n      }\n    }\n  }, {\n    key: \"unselect\",\n    value: function unselect(pev) {\n      var state = this.getCurrentData();\n\n      if (state.dateSelection) {\n        this.dispatch({\n          type: 'UNSELECT_DATES'\n        });\n        triggerDateUnselect(pev, state);\n      }\n    } // Public Events API\n    // -----------------------------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"addEvent\",\n    value: function addEvent(eventInput, sourceInput) {\n      if (eventInput instanceof EventImpl) {\n        var def = eventInput._def;\n        var instance = eventInput._instance;\n        var currentData = this.getCurrentData(); // not already present? don't want to add an old snapshot\n\n        if (!currentData.eventStore.defs[def.defId]) {\n          this.dispatch({\n            type: 'ADD_EVENTS',\n            eventStore: eventTupleToStore({\n              def: def,\n              instance: instance\n            }) // TODO: better util for two args?\n\n          });\n          this.triggerEventAdd(eventInput);\n        }\n\n        return eventInput;\n      }\n\n      var state = this.getCurrentData();\n      var eventSource;\n\n      if (sourceInput instanceof EventSourceImpl) {\n        eventSource = sourceInput.internalEventSource;\n      } else if (typeof sourceInput === 'boolean') {\n        if (sourceInput) {\n          // true. part of the first event source\n          var _hashValuesToArray = hashValuesToArray(state.eventSources);\n\n          var _hashValuesToArray2 = _slicedToArray(_hashValuesToArray, 1);\n\n          eventSource = _hashValuesToArray2[0];\n        }\n      } else if (sourceInput != null) {\n        // an ID. accepts a number too\n        var sourceApi = this.getEventSourceById(sourceInput); // TODO: use an internal function\n\n        if (!sourceApi) {\n          console.warn(\"Could not find an event source with ID \\\"\".concat(sourceInput, \"\\\"\")); // TODO: test\n\n          return null;\n        }\n\n        eventSource = sourceApi.internalEventSource;\n      }\n\n      var tuple = parseEvent(eventInput, eventSource, state, false);\n\n      if (tuple) {\n        var newEventApi = new EventImpl(state, tuple.def, tuple.def.recurringDef ? null : tuple.instance);\n        this.dispatch({\n          type: 'ADD_EVENTS',\n          eventStore: eventTupleToStore(tuple)\n        });\n        this.triggerEventAdd(newEventApi);\n        return newEventApi;\n      }\n\n      return null;\n    }\n  }, {\n    key: \"triggerEventAdd\",\n    value: function triggerEventAdd(eventApi) {\n      var _this11 = this;\n\n      var _this$getCurrentData5 = this.getCurrentData(),\n          emitter = _this$getCurrentData5.emitter;\n\n      emitter.trigger('eventAdd', {\n        event: eventApi,\n        relatedEvents: [],\n        revert: function revert() {\n          _this11.dispatch({\n            type: 'REMOVE_EVENTS',\n            eventStore: eventApiToStore(eventApi)\n          });\n        }\n      });\n    } // TODO: optimize\n\n  }, {\n    key: \"getEventById\",\n    value: function getEventById(id) {\n      var state = this.getCurrentData();\n      var _state$eventStore = state.eventStore,\n          defs = _state$eventStore.defs,\n          instances = _state$eventStore.instances;\n      id = String(id);\n\n      for (var defId in defs) {\n        var def = defs[defId];\n\n        if (def.publicId === id) {\n          if (def.recurringDef) {\n            return new EventImpl(state, def, null);\n          }\n\n          for (var instanceId in instances) {\n            var instance = instances[instanceId];\n\n            if (instance.defId === def.defId) {\n              return new EventImpl(state, def, instance);\n            }\n          }\n        }\n      }\n\n      return null;\n    }\n  }, {\n    key: \"getEvents\",\n    value: function getEvents() {\n      var currentData = this.getCurrentData();\n      return buildEventApis(currentData.eventStore, currentData);\n    }\n  }, {\n    key: \"removeAllEvents\",\n    value: function removeAllEvents() {\n      this.dispatch({\n        type: 'REMOVE_ALL_EVENTS'\n      });\n    } // Public Event Sources API\n    // -----------------------------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"getEventSources\",\n    value: function getEventSources() {\n      var state = this.getCurrentData();\n      var sourceHash = state.eventSources;\n      var sourceApis = [];\n\n      for (var internalId in sourceHash) {\n        sourceApis.push(new EventSourceImpl(state, sourceHash[internalId]));\n      }\n\n      return sourceApis;\n    }\n  }, {\n    key: \"getEventSourceById\",\n    value: function getEventSourceById(id) {\n      var state = this.getCurrentData();\n      var sourceHash = state.eventSources;\n      id = String(id);\n\n      for (var sourceId in sourceHash) {\n        if (sourceHash[sourceId].publicId === id) {\n          return new EventSourceImpl(state, sourceHash[sourceId]);\n        }\n      }\n\n      return null;\n    }\n  }, {\n    key: \"addEventSource\",\n    value: function addEventSource(sourceInput) {\n      var state = this.getCurrentData();\n\n      if (sourceInput instanceof EventSourceImpl) {\n        // not already present? don't want to add an old snapshot\n        if (!state.eventSources[sourceInput.internalEventSource.sourceId]) {\n          this.dispatch({\n            type: 'ADD_EVENT_SOURCES',\n            sources: [sourceInput.internalEventSource]\n          });\n        }\n\n        return sourceInput;\n      }\n\n      var eventSource = parseEventSource(sourceInput, state);\n\n      if (eventSource) {\n        // TODO: error otherwise?\n        this.dispatch({\n          type: 'ADD_EVENT_SOURCES',\n          sources: [eventSource]\n        });\n        return new EventSourceImpl(state, eventSource);\n      }\n\n      return null;\n    }\n  }, {\n    key: \"removeAllEventSources\",\n    value: function removeAllEventSources() {\n      this.dispatch({\n        type: 'REMOVE_ALL_EVENT_SOURCES'\n      });\n    }\n  }, {\n    key: \"refetchEvents\",\n    value: function refetchEvents() {\n      this.dispatch({\n        type: 'FETCH_EVENT_SOURCES',\n        isRefetch: true\n      });\n    } // Scroll\n    // -----------------------------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"scrollToTime\",\n    value: function scrollToTime(timeInput) {\n      var time = createDuration(timeInput);\n\n      if (time) {\n        this.trigger('_scrollRequest', {\n          time: time\n        });\n      }\n    }\n  }]);\n\n  return CalendarImpl;\n}();\n\nfunction pointInsideRect(point, rect) {\n  return point.left >= rect.left && point.left < rect.right && point.top >= rect.top && point.top < rect.bottom;\n} // Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\n\n\nfunction intersectRects(rect1, rect2) {\n  var res = {\n    left: Math.max(rect1.left, rect2.left),\n    right: Math.min(rect1.right, rect2.right),\n    top: Math.max(rect1.top, rect2.top),\n    bottom: Math.min(rect1.bottom, rect2.bottom)\n  };\n\n  if (res.left < res.right && res.top < res.bottom) {\n    return res;\n  }\n\n  return false;\n}\n\nfunction translateRect(rect, deltaX, deltaY) {\n  return {\n    left: rect.left + deltaX,\n    right: rect.right + deltaX,\n    top: rect.top + deltaY,\n    bottom: rect.bottom + deltaY\n  };\n} // Returns a new point that will have been moved to reside within the given rectangle\n\n\nfunction constrainPoint(point, rect) {\n  return {\n    left: Math.min(Math.max(point.left, rect.left), rect.right),\n    top: Math.min(Math.max(point.top, rect.top), rect.bottom)\n  };\n} // Returns a point that is the center of the given rectangle\n\n\nfunction getRectCenter(rect) {\n  return {\n    left: (rect.left + rect.right) / 2,\n    top: (rect.top + rect.bottom) / 2\n  };\n} // Subtracts point2's coordinates from point1's coordinates, returning a delta\n\n\nfunction diffPoints(point1, point2) {\n  return {\n    left: point1.left - point2.left,\n    top: point1.top - point2.top\n  };\n}\n\nvar EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere\n\nvar Splitter = /*#__PURE__*/function () {\n  function Splitter() {\n    _classCallCheck(this, Splitter);\n\n    this.getKeysForEventDefs = memoize(this._getKeysForEventDefs);\n    this.splitDateSelection = memoize(this._splitDateSpan);\n    this.splitEventStore = memoize(this._splitEventStore);\n    this.splitIndividualUi = memoize(this._splitIndividualUi);\n    this.splitEventDrag = memoize(this._splitInteraction);\n    this.splitEventResize = memoize(this._splitInteraction);\n    this.eventUiBuilders = {}; // TODO: typescript protection\n  }\n\n  _createClass(Splitter, [{\n    key: \"splitProps\",\n    value: function splitProps(props) {\n      var _this12 = this;\n\n      var keyInfos = this.getKeyInfo(props);\n      var defKeys = this.getKeysForEventDefs(props.eventStore);\n      var dateSelections = this.splitDateSelection(props.dateSelection);\n      var individualUi = this.splitIndividualUi(props.eventUiBases, defKeys); // the individual *bases*\n\n      var eventStores = this.splitEventStore(props.eventStore, defKeys);\n      var eventDrags = this.splitEventDrag(props.eventDrag);\n      var eventResizes = this.splitEventResize(props.eventResize);\n      var splitProps = {};\n      this.eventUiBuilders = mapHash(keyInfos, function (info, key) {\n        return _this12.eventUiBuilders[key] || memoize(buildEventUiForKey);\n      });\n\n      for (var key in keyInfos) {\n        var keyInfo = keyInfos[key];\n        var eventStore = eventStores[key] || EMPTY_EVENT_STORE;\n        var buildEventUi = this.eventUiBuilders[key];\n        splitProps[key] = {\n          businessHours: keyInfo.businessHours || props.businessHours,\n          dateSelection: dateSelections[key] || null,\n          eventStore: eventStore,\n          eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),\n          eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',\n          eventDrag: eventDrags[key] || null,\n          eventResize: eventResizes[key] || null\n        };\n      }\n\n      return splitProps;\n    }\n  }, {\n    key: \"_splitDateSpan\",\n    value: function _splitDateSpan(dateSpan) {\n      var dateSpans = {};\n\n      if (dateSpan) {\n        var keys = this.getKeysForDateSpan(dateSpan);\n\n        var _iterator15 = _createForOfIteratorHelper(keys),\n            _step15;\n\n        try {\n          for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n            var key = _step15.value;\n            dateSpans[key] = dateSpan;\n          }\n        } catch (err) {\n          _iterator15.e(err);\n        } finally {\n          _iterator15.f();\n        }\n      }\n\n      return dateSpans;\n    }\n  }, {\n    key: \"_getKeysForEventDefs\",\n    value: function _getKeysForEventDefs(eventStore) {\n      var _this13 = this;\n\n      return mapHash(eventStore.defs, function (eventDef) {\n        return _this13.getKeysForEventDef(eventDef);\n      });\n    }\n  }, {\n    key: \"_splitEventStore\",\n    value: function _splitEventStore(eventStore, defKeys) {\n      var defs = eventStore.defs,\n          instances = eventStore.instances;\n      var splitStores = {};\n\n      for (var defId in defs) {\n        var _iterator16 = _createForOfIteratorHelper(defKeys[defId]),\n            _step16;\n\n        try {\n          for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n            var key = _step16.value;\n\n            if (!splitStores[key]) {\n              splitStores[key] = createEmptyEventStore();\n            }\n\n            splitStores[key].defs[defId] = defs[defId];\n          }\n        } catch (err) {\n          _iterator16.e(err);\n        } finally {\n          _iterator16.f();\n        }\n      }\n\n      for (var instanceId in instances) {\n        var instance = instances[instanceId];\n\n        var _iterator17 = _createForOfIteratorHelper(defKeys[instance.defId]),\n            _step17;\n\n        try {\n          for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n            var _key7 = _step17.value;\n\n            if (splitStores[_key7]) {\n              // must have already been created\n              splitStores[_key7].instances[instanceId] = instance;\n            }\n          }\n        } catch (err) {\n          _iterator17.e(err);\n        } finally {\n          _iterator17.f();\n        }\n      }\n\n      return splitStores;\n    }\n  }, {\n    key: \"_splitIndividualUi\",\n    value: function _splitIndividualUi(eventUiBases, defKeys) {\n      var splitHashes = {};\n\n      for (var defId in eventUiBases) {\n        if (defId) {\n          // not the '' key\n          var _iterator18 = _createForOfIteratorHelper(defKeys[defId]),\n              _step18;\n\n          try {\n            for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n              var key = _step18.value;\n\n              if (!splitHashes[key]) {\n                splitHashes[key] = {};\n              }\n\n              splitHashes[key][defId] = eventUiBases[defId];\n            }\n          } catch (err) {\n            _iterator18.e(err);\n          } finally {\n            _iterator18.f();\n          }\n        }\n      }\n\n      return splitHashes;\n    }\n  }, {\n    key: \"_splitInteraction\",\n    value: function _splitInteraction(interaction) {\n      var splitStates = {};\n\n      if (interaction) {\n        var affectedStores = this._splitEventStore(interaction.affectedEvents, this._getKeysForEventDefs(interaction.affectedEvents)); // can't rely on defKeys because event data is mutated\n\n\n        var mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents);\n\n        var mutatedStores = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId);\n\n        var populate = function populate(key) {\n          if (!splitStates[key]) {\n            splitStates[key] = {\n              affectedEvents: affectedStores[key] || EMPTY_EVENT_STORE,\n              mutatedEvents: mutatedStores[key] || EMPTY_EVENT_STORE,\n              isEvent: interaction.isEvent\n            };\n          }\n        };\n\n        for (var key in affectedStores) {\n          populate(key);\n        }\n\n        for (var _key8 in mutatedStores) {\n          populate(_key8);\n        }\n      }\n\n      return splitStates;\n    }\n  }]);\n\n  return Splitter;\n}();\n\nfunction buildEventUiForKey(allUi, eventUiForKey, individualUi) {\n  var baseParts = [];\n\n  if (allUi) {\n    baseParts.push(allUi);\n  }\n\n  if (eventUiForKey) {\n    baseParts.push(eventUiForKey);\n  }\n\n  var stuff = {\n    '': combineEventUis(baseParts)\n  };\n\n  if (individualUi) {\n    Object.assign(stuff, individualUi);\n  }\n\n  return stuff;\n}\n\nfunction getDateMeta(date, todayRange, nowDate, dateProfile) {\n  return {\n    dow: date.getUTCDay(),\n    isDisabled: Boolean(dateProfile && !rangeContainsMarker(dateProfile.activeRange, date)),\n    isOther: Boolean(dateProfile && !rangeContainsMarker(dateProfile.currentRange, date)),\n    isToday: Boolean(todayRange && rangeContainsMarker(todayRange, date)),\n    isPast: Boolean(nowDate ? date < nowDate : todayRange ? date < todayRange.start : false),\n    isFuture: Boolean(nowDate ? date > nowDate : todayRange ? date >= todayRange.end : false)\n  };\n}\n\nfunction getDayClassNames(meta, theme) {\n  var classNames = ['fc-day', \"fc-day-\".concat(DAY_IDS[meta.dow])];\n\n  if (meta.isDisabled) {\n    classNames.push('fc-day-disabled');\n  } else {\n    if (meta.isToday) {\n      classNames.push('fc-day-today');\n      classNames.push(theme.getClass('today'));\n    }\n\n    if (meta.isPast) {\n      classNames.push('fc-day-past');\n    }\n\n    if (meta.isFuture) {\n      classNames.push('fc-day-future');\n    }\n\n    if (meta.isOther) {\n      classNames.push('fc-day-other');\n    }\n  }\n\n  return classNames;\n}\n\nfunction getSlotClassNames(meta, theme) {\n  var classNames = ['fc-slot', \"fc-slot-\".concat(DAY_IDS[meta.dow])];\n\n  if (meta.isDisabled) {\n    classNames.push('fc-slot-disabled');\n  } else {\n    if (meta.isToday) {\n      classNames.push('fc-slot-today');\n      classNames.push(theme.getClass('today'));\n    }\n\n    if (meta.isPast) {\n      classNames.push('fc-slot-past');\n    }\n\n    if (meta.isFuture) {\n      classNames.push('fc-slot-future');\n    }\n  }\n\n  return classNames;\n}\n\nvar DAY_FORMAT = createFormatter({\n  year: 'numeric',\n  month: 'long',\n  day: 'numeric'\n});\nvar WEEK_FORMAT = createFormatter({\n  week: 'long'\n});\n\nfunction buildNavLinkAttrs(context, dateMarker) {\n  var viewType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'day';\n  var isTabbable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n  var dateEnv = context.dateEnv,\n      options = context.options,\n      calendarApi = context.calendarApi;\n  var dateStr = dateEnv.format(dateMarker, viewType === 'week' ? WEEK_FORMAT : DAY_FORMAT);\n\n  if (options.navLinks) {\n    var zonedDate = dateEnv.toDate(dateMarker);\n\n    var handleInteraction = function handleInteraction(ev) {\n      var customAction = viewType === 'day' ? options.navLinkDayClick : viewType === 'week' ? options.navLinkWeekClick : null;\n\n      if (typeof customAction === 'function') {\n        customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev);\n      } else {\n        if (typeof customAction === 'string') {\n          viewType = customAction;\n        }\n\n        calendarApi.zoomTo(dateMarker, viewType);\n      }\n    };\n\n    return Object.assign({\n      title: formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr),\n      'data-navlink': ''\n    }, isTabbable ? createAriaClickAttrs(handleInteraction) : {\n      onClick: handleInteraction\n    });\n  }\n\n  return {\n    'aria-label': dateStr\n  };\n}\n\nvar _isRtlScrollbarOnLeft = null;\n\nfunction getIsRtlScrollbarOnLeft() {\n  if (_isRtlScrollbarOnLeft === null) {\n    _isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft();\n  }\n\n  return _isRtlScrollbarOnLeft;\n}\n\nfunction computeIsRtlScrollbarOnLeft() {\n  var outerEl = document.createElement('div');\n  applyStyle(outerEl, {\n    position: 'absolute',\n    top: -1000,\n    left: 0,\n    border: 0,\n    padding: 0,\n    overflow: 'scroll',\n    direction: 'rtl'\n  });\n  outerEl.innerHTML = '<div></div>';\n  document.body.appendChild(outerEl);\n  var innerEl = outerEl.firstChild;\n  var res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;\n  removeElement(outerEl);\n  return res;\n}\n\nvar _scrollbarWidths;\n\nfunction getScrollbarWidths() {\n  if (!_scrollbarWidths) {\n    _scrollbarWidths = computeScrollbarWidths();\n  }\n\n  return _scrollbarWidths;\n}\n\nfunction computeScrollbarWidths() {\n  var el = document.createElement('div');\n  el.style.overflow = 'scroll';\n  el.style.position = 'absolute';\n  el.style.top = '-9999px';\n  el.style.left = '-9999px';\n  document.body.appendChild(el);\n  var res = computeScrollbarWidthsForEl(el);\n  document.body.removeChild(el);\n  return res;\n} // WARNING: will include border\n\n\nfunction computeScrollbarWidthsForEl(el) {\n  return {\n    x: el.offsetHeight - el.clientHeight,\n    y: el.offsetWidth - el.clientWidth\n  };\n}\n\nfunction computeEdges(el) {\n  var getPadding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  var computedStyle = window.getComputedStyle(el);\n  var borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0;\n  var borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0;\n  var borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0;\n  var borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0;\n  var badScrollbarWidths = computeScrollbarWidthsForEl(el); // includes border!\n\n  var scrollbarLeftRight = badScrollbarWidths.y - borderLeft - borderRight;\n  var scrollbarBottom = badScrollbarWidths.x - borderTop - borderBottom;\n  var res = {\n    borderLeft: borderLeft,\n    borderRight: borderRight,\n    borderTop: borderTop,\n    borderBottom: borderBottom,\n    scrollbarBottom: scrollbarBottom,\n    scrollbarLeft: 0,\n    scrollbarRight: 0\n  };\n\n  if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') {\n    // is the scrollbar on the left side?\n    res.scrollbarLeft = scrollbarLeftRight;\n  } else {\n    res.scrollbarRight = scrollbarLeftRight;\n  }\n\n  if (getPadding) {\n    res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0;\n    res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0;\n    res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0;\n    res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0;\n  }\n\n  return res;\n}\n\nfunction computeInnerRect(el) {\n  var goWithinPadding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  var doFromWindowViewport = arguments.length > 2 ? arguments[2] : undefined;\n  var outerRect = doFromWindowViewport ? el.getBoundingClientRect() : computeRect(el);\n  var edges = computeEdges(el, goWithinPadding);\n  var res = {\n    left: outerRect.left + edges.borderLeft + edges.scrollbarLeft,\n    right: outerRect.right - edges.borderRight - edges.scrollbarRight,\n    top: outerRect.top + edges.borderTop,\n    bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom\n  };\n\n  if (goWithinPadding) {\n    res.left += edges.paddingLeft;\n    res.right -= edges.paddingRight;\n    res.top += edges.paddingTop;\n    res.bottom -= edges.paddingBottom;\n  }\n\n  return res;\n}\n\nfunction computeRect(el) {\n  var rect = el.getBoundingClientRect();\n  return {\n    left: rect.left + window.pageXOffset,\n    top: rect.top + window.pageYOffset,\n    right: rect.right + window.pageXOffset,\n    bottom: rect.bottom + window.pageYOffset\n  };\n}\n\nfunction computeClippedClientRect(el) {\n  var clippingParents = getClippingParents(el);\n  var rect = el.getBoundingClientRect();\n\n  var _iterator19 = _createForOfIteratorHelper(clippingParents),\n      _step19;\n\n  try {\n    for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n      var clippingParent = _step19.value;\n      var intersection = intersectRects(rect, clippingParent.getBoundingClientRect());\n\n      if (intersection) {\n        rect = intersection;\n      } else {\n        return null;\n      }\n    }\n  } catch (err) {\n    _iterator19.e(err);\n  } finally {\n    _iterator19.f();\n  }\n\n  return rect;\n} // does not return window\n\n\nfunction getClippingParents(el) {\n  var parents = [];\n\n  while (el instanceof HTMLElement) {\n    // will stop when gets to document or null\n    var computedStyle = window.getComputedStyle(el);\n\n    if (computedStyle.position === 'fixed') {\n      break;\n    }\n\n    if (/(auto|scroll)/.test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {\n      parents.push(el);\n    }\n\n    el = el.parentNode;\n  }\n\n  return parents;\n}\n/*\nRecords offset information for a set of elements, relative to an origin element.\nCan record the left/right OR the top/bottom OR both.\nProvides methods for querying the cache by position.\n*/\n\n\nvar PositionCache = /*#__PURE__*/function () {\n  function PositionCache(originEl, els, isHorizontal, isVertical) {\n    _classCallCheck(this, PositionCache);\n\n    this.els = els;\n    var originClientRect = this.originClientRect = originEl.getBoundingClientRect(); // relative to viewport top-left\n\n    if (isHorizontal) {\n      this.buildElHorizontals(originClientRect.left);\n    }\n\n    if (isVertical) {\n      this.buildElVerticals(originClientRect.top);\n    }\n  } // Populates the left/right internal coordinate arrays\n\n\n  _createClass(PositionCache, [{\n    key: \"buildElHorizontals\",\n    value: function buildElHorizontals(originClientLeft) {\n      var lefts = [];\n      var rights = [];\n\n      var _iterator20 = _createForOfIteratorHelper(this.els),\n          _step20;\n\n      try {\n        for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\n          var el = _step20.value;\n          var rect = el.getBoundingClientRect();\n          lefts.push(rect.left - originClientLeft);\n          rights.push(rect.right - originClientLeft);\n        }\n      } catch (err) {\n        _iterator20.e(err);\n      } finally {\n        _iterator20.f();\n      }\n\n      this.lefts = lefts;\n      this.rights = rights;\n    } // Populates the top/bottom internal coordinate arrays\n\n  }, {\n    key: \"buildElVerticals\",\n    value: function buildElVerticals(originClientTop) {\n      var tops = [];\n      var bottoms = [];\n\n      var _iterator21 = _createForOfIteratorHelper(this.els),\n          _step21;\n\n      try {\n        for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n          var el = _step21.value;\n          var rect = el.getBoundingClientRect();\n          tops.push(rect.top - originClientTop);\n          bottoms.push(rect.bottom - originClientTop);\n        }\n      } catch (err) {\n        _iterator21.e(err);\n      } finally {\n        _iterator21.f();\n      }\n\n      this.tops = tops;\n      this.bottoms = bottoms;\n    } // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\n    // If no intersection is made, returns undefined.\n\n  }, {\n    key: \"leftToIndex\",\n    value: function leftToIndex(leftPosition) {\n      var lefts = this.lefts,\n          rights = this.rights;\n      var len = lefts.length;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        if (leftPosition >= lefts[i] && leftPosition < rights[i]) {\n          return i;\n        }\n      }\n\n      return undefined; // TODO: better\n    } // Given a top offset (from document top), returns the index of the el that it vertically intersects.\n    // If no intersection is made, returns undefined.\n\n  }, {\n    key: \"topToIndex\",\n    value: function topToIndex(topPosition) {\n      var tops = this.tops,\n          bottoms = this.bottoms;\n      var len = tops.length;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        if (topPosition >= tops[i] && topPosition < bottoms[i]) {\n          return i;\n        }\n      }\n\n      return undefined; // TODO: better\n    } // Gets the width of the element at the given index\n\n  }, {\n    key: \"getWidth\",\n    value: function getWidth(leftIndex) {\n      return this.rights[leftIndex] - this.lefts[leftIndex];\n    } // Gets the height of the element at the given index\n\n  }, {\n    key: \"getHeight\",\n    value: function getHeight(topIndex) {\n      return this.bottoms[topIndex] - this.tops[topIndex];\n    }\n  }, {\n    key: \"similarTo\",\n    value: function similarTo(otherCache) {\n      return similarNumArrays(this.tops || [], otherCache.tops || []) && similarNumArrays(this.bottoms || [], otherCache.bottoms || []) && similarNumArrays(this.lefts || [], otherCache.lefts || []) && similarNumArrays(this.rights || [], otherCache.rights || []);\n    }\n  }]);\n\n  return PositionCache;\n}();\n\nfunction similarNumArrays(a, b) {\n  var len = a.length;\n\n  if (len !== b.length) {\n    return false;\n  }\n\n  for (var i = 0; i < len; i++) {\n    if (Math.round(a[i]) !== Math.round(b[i])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n/* eslint max-classes-per-file: \"off\" */\n\n/*\nAn object for getting/setting scroll-related information for an element.\nInternally, this is done very differently for window versus DOM element,\nso this object serves as a common interface.\n*/\n\n\nvar ScrollController = /*#__PURE__*/function () {\n  function ScrollController() {\n    _classCallCheck(this, ScrollController);\n  }\n\n  _createClass(ScrollController, [{\n    key: \"getMaxScrollTop\",\n    value: function getMaxScrollTop() {\n      return this.getScrollHeight() - this.getClientHeight();\n    }\n  }, {\n    key: \"getMaxScrollLeft\",\n    value: function getMaxScrollLeft() {\n      return this.getScrollWidth() - this.getClientWidth();\n    }\n  }, {\n    key: \"canScrollVertically\",\n    value: function canScrollVertically() {\n      return this.getMaxScrollTop() > 0;\n    }\n  }, {\n    key: \"canScrollHorizontally\",\n    value: function canScrollHorizontally() {\n      return this.getMaxScrollLeft() > 0;\n    }\n  }, {\n    key: \"canScrollUp\",\n    value: function canScrollUp() {\n      return this.getScrollTop() > 0;\n    }\n  }, {\n    key: \"canScrollDown\",\n    value: function canScrollDown() {\n      return this.getScrollTop() < this.getMaxScrollTop();\n    }\n  }, {\n    key: \"canScrollLeft\",\n    value: function canScrollLeft() {\n      return this.getScrollLeft() > 0;\n    }\n  }, {\n    key: \"canScrollRight\",\n    value: function canScrollRight() {\n      return this.getScrollLeft() < this.getMaxScrollLeft();\n    }\n  }]);\n\n  return ScrollController;\n}();\n\nvar ElementScrollController = /*#__PURE__*/function (_ScrollController) {\n  _inherits(ElementScrollController, _ScrollController);\n\n  var _super9 = _createSuper(ElementScrollController);\n\n  function ElementScrollController(el) {\n    var _this14;\n\n    _classCallCheck(this, ElementScrollController);\n\n    _this14 = _super9.call(this);\n    _this14.el = el;\n    return _this14;\n  }\n\n  _createClass(ElementScrollController, [{\n    key: \"getScrollTop\",\n    value: function getScrollTop() {\n      return this.el.scrollTop;\n    }\n  }, {\n    key: \"getScrollLeft\",\n    value: function getScrollLeft() {\n      return this.el.scrollLeft;\n    }\n  }, {\n    key: \"setScrollTop\",\n    value: function setScrollTop(top) {\n      this.el.scrollTop = top;\n    }\n  }, {\n    key: \"setScrollLeft\",\n    value: function setScrollLeft(left) {\n      this.el.scrollLeft = left;\n    }\n  }, {\n    key: \"getScrollWidth\",\n    value: function getScrollWidth() {\n      return this.el.scrollWidth;\n    }\n  }, {\n    key: \"getScrollHeight\",\n    value: function getScrollHeight() {\n      return this.el.scrollHeight;\n    }\n  }, {\n    key: \"getClientHeight\",\n    value: function getClientHeight() {\n      return this.el.clientHeight;\n    }\n  }, {\n    key: \"getClientWidth\",\n    value: function getClientWidth() {\n      return this.el.clientWidth;\n    }\n  }]);\n\n  return ElementScrollController;\n}(ScrollController);\n\nvar WindowScrollController = /*#__PURE__*/function (_ScrollController2) {\n  _inherits(WindowScrollController, _ScrollController2);\n\n  var _super10 = _createSuper(WindowScrollController);\n\n  function WindowScrollController() {\n    _classCallCheck(this, WindowScrollController);\n\n    return _super10.apply(this, arguments);\n  }\n\n  _createClass(WindowScrollController, [{\n    key: \"getScrollTop\",\n    value: function getScrollTop() {\n      return window.pageYOffset;\n    }\n  }, {\n    key: \"getScrollLeft\",\n    value: function getScrollLeft() {\n      return window.pageXOffset;\n    }\n  }, {\n    key: \"setScrollTop\",\n    value: function setScrollTop(n) {\n      window.scroll(window.pageXOffset, n);\n    }\n  }, {\n    key: \"setScrollLeft\",\n    value: function setScrollLeft(n) {\n      window.scroll(n, window.pageYOffset);\n    }\n  }, {\n    key: \"getScrollWidth\",\n    value: function getScrollWidth() {\n      return document.documentElement.scrollWidth;\n    }\n  }, {\n    key: \"getScrollHeight\",\n    value: function getScrollHeight() {\n      return document.documentElement.scrollHeight;\n    }\n  }, {\n    key: \"getClientHeight\",\n    value: function getClientHeight() {\n      return document.documentElement.clientHeight;\n    }\n  }, {\n    key: \"getClientWidth\",\n    value: function getClientWidth() {\n      return document.documentElement.clientWidth;\n    }\n  }]);\n\n  return WindowScrollController;\n}(ScrollController);\n/*\nan INTERACTABLE date component\n\nPURPOSES:\n- hook up to fg, fill, and mirror renderers\n- interface for dragging and hits\n*/\n\n\nvar DateComponent = /*#__PURE__*/function (_BaseComponent4) {\n  _inherits(DateComponent, _BaseComponent4);\n\n  var _super11 = _createSuper(DateComponent);\n\n  function DateComponent() {\n    var _this15;\n\n    _classCallCheck(this, DateComponent);\n\n    _this15 = _super11.apply(this, arguments);\n    _this15.uid = guid();\n    return _this15;\n  } // Hit System\n  // -----------------------------------------------------------------------------------------------------------------\n\n\n  _createClass(DateComponent, [{\n    key: \"prepareHits\",\n    value: function prepareHits() {}\n  }, {\n    key: \"queryHit\",\n    value: function queryHit(positionLeft, positionTop, elWidth, elHeight) {\n      return null; // this should be abstract\n    } // Pointer Interaction Utils\n    // -----------------------------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"isValidSegDownEl\",\n    value: function isValidSegDownEl(el) {\n      return !this.props.eventDrag && // HACK\n      !this.props.eventResize && // HACK\n      !elementClosest(el, '.fc-event-mirror');\n    }\n  }, {\n    key: \"isValidDateDownEl\",\n    value: function isValidDateDownEl(el) {\n      return !elementClosest(el, '.fc-event:not(.fc-bg-event)') && !elementClosest(el, '.fc-more-link') && // a \"more..\" link\n      !elementClosest(el, 'a[data-navlink]') && // a clickable nav link\n      !elementClosest(el, '.fc-popover'); // hack\n    }\n  }]);\n\n  return DateComponent;\n}(BaseComponent);\n\nvar NamedTimeZoneImpl = function NamedTimeZoneImpl(timeZoneName) {\n  _classCallCheck(this, NamedTimeZoneImpl);\n\n  this.timeZoneName = timeZoneName;\n};\n\nvar SegHierarchy = /*#__PURE__*/function () {\n  function SegHierarchy() {\n    var getEntryThickness = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function (entry) {\n      // if no thickness known, assume 1 (if 0, so small it always fits)\n      return entry.thickness || 1;\n    };\n\n    _classCallCheck(this, SegHierarchy);\n\n    this.getEntryThickness = getEntryThickness; // settings\n\n    this.strictOrder = false;\n    this.allowReslicing = false;\n    this.maxCoord = -1; // -1 means no max\n\n    this.maxStackCnt = -1; // -1 means no max\n\n    this.levelCoords = []; // ordered\n\n    this.entriesByLevel = []; // parallel with levelCoords\n\n    this.stackCnts = {}; // TODO: use better technique!?\n  }\n\n  _createClass(SegHierarchy, [{\n    key: \"addSegs\",\n    value: function addSegs(inputs) {\n      var hiddenEntries = [];\n\n      var _iterator22 = _createForOfIteratorHelper(inputs),\n          _step22;\n\n      try {\n        for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {\n          var input = _step22.value;\n          this.insertEntry(input, hiddenEntries);\n        }\n      } catch (err) {\n        _iterator22.e(err);\n      } finally {\n        _iterator22.f();\n      }\n\n      return hiddenEntries;\n    }\n  }, {\n    key: \"insertEntry\",\n    value: function insertEntry(entry, hiddenEntries) {\n      var insertion = this.findInsertion(entry);\n\n      if (this.isInsertionValid(insertion, entry)) {\n        this.insertEntryAt(entry, insertion);\n      } else {\n        this.handleInvalidInsertion(insertion, entry, hiddenEntries);\n      }\n    }\n  }, {\n    key: \"isInsertionValid\",\n    value: function isInsertionValid(insertion, entry) {\n      return (this.maxCoord === -1 || insertion.levelCoord + this.getEntryThickness(entry) <= this.maxCoord) && (this.maxStackCnt === -1 || insertion.stackCnt < this.maxStackCnt);\n    }\n  }, {\n    key: \"handleInvalidInsertion\",\n    value: function handleInvalidInsertion(insertion, entry, hiddenEntries) {\n      if (this.allowReslicing && insertion.touchingEntry) {\n        var hiddenEntry = Object.assign(Object.assign({}, entry), {\n          span: intersectSpans(entry.span, insertion.touchingEntry.span)\n        });\n        hiddenEntries.push(hiddenEntry);\n        this.splitEntry(entry, insertion.touchingEntry, hiddenEntries);\n      } else {\n        hiddenEntries.push(entry);\n      }\n    }\n    /*\n    Does NOT add what hit the `barrier` into hiddenEntries. Should already be done.\n    */\n\n  }, {\n    key: \"splitEntry\",\n    value: function splitEntry(entry, barrier, hiddenEntries) {\n      var entrySpan = entry.span;\n      var barrierSpan = barrier.span;\n\n      if (entrySpan.start < barrierSpan.start) {\n        this.insertEntry({\n          index: entry.index,\n          thickness: entry.thickness,\n          span: {\n            start: entrySpan.start,\n            end: barrierSpan.start\n          }\n        }, hiddenEntries);\n      }\n\n      if (entrySpan.end > barrierSpan.end) {\n        this.insertEntry({\n          index: entry.index,\n          thickness: entry.thickness,\n          span: {\n            start: barrierSpan.end,\n            end: entrySpan.end\n          }\n        }, hiddenEntries);\n      }\n    }\n  }, {\n    key: \"insertEntryAt\",\n    value: function insertEntryAt(entry, insertion) {\n      var entriesByLevel = this.entriesByLevel,\n          levelCoords = this.levelCoords;\n\n      if (insertion.lateral === -1) {\n        // create a new level\n        insertAt(levelCoords, insertion.level, insertion.levelCoord);\n        insertAt(entriesByLevel, insertion.level, [entry]);\n      } else {\n        // insert into existing level\n        insertAt(entriesByLevel[insertion.level], insertion.lateral, entry);\n      }\n\n      this.stackCnts[buildEntryKey(entry)] = insertion.stackCnt;\n    }\n    /*\n    does not care about limits\n    */\n\n  }, {\n    key: \"findInsertion\",\n    value: function findInsertion(newEntry) {\n      var levelCoords = this.levelCoords,\n          entriesByLevel = this.entriesByLevel,\n          strictOrder = this.strictOrder,\n          stackCnts = this.stackCnts;\n      var levelCnt = levelCoords.length;\n      var candidateCoord = 0;\n      var touchingLevel = -1;\n      var touchingLateral = -1;\n      var touchingEntry = null;\n      var stackCnt = 0;\n\n      for (var trackingLevel = 0; trackingLevel < levelCnt; trackingLevel += 1) {\n        var trackingCoord = levelCoords[trackingLevel]; // if the current level is past the placed entry, we have found a good empty space and can stop.\n        // if strictOrder, keep finding more lateral intersections.\n\n        if (!strictOrder && trackingCoord >= candidateCoord + this.getEntryThickness(newEntry)) {\n          break;\n        }\n\n        var trackingEntries = entriesByLevel[trackingLevel];\n        var trackingEntry = void 0;\n        var searchRes = binarySearch(trackingEntries, newEntry.span.start, getEntrySpanEnd); // find first entry after newEntry's end\n\n        var lateralIndex = searchRes[0] + searchRes[1]; // if exact match (which doesn't collide), go to next one\n\n        while ( // loop through entries that horizontally intersect\n        (trackingEntry = trackingEntries[lateralIndex]) && // but not past the whole entry list\n        trackingEntry.span.start < newEntry.span.end // and not entirely past newEntry\n        ) {\n          var trackingEntryBottom = trackingCoord + this.getEntryThickness(trackingEntry); // intersects into the top of the candidate?\n\n          if (trackingEntryBottom > candidateCoord) {\n            candidateCoord = trackingEntryBottom;\n            touchingEntry = trackingEntry;\n            touchingLevel = trackingLevel;\n            touchingLateral = lateralIndex;\n          } // butts up against top of candidate? (will happen if just intersected as well)\n\n\n          if (trackingEntryBottom === candidateCoord) {\n            // accumulate the highest possible stackCnt of the trackingEntries that butt up\n            stackCnt = Math.max(stackCnt, stackCnts[buildEntryKey(trackingEntry)] + 1);\n          }\n\n          lateralIndex += 1;\n        }\n      } // the destination level will be after touchingEntry's level. find it\n\n\n      var destLevel = 0;\n\n      if (touchingEntry) {\n        destLevel = touchingLevel + 1;\n\n        while (destLevel < levelCnt && levelCoords[destLevel] < candidateCoord) {\n          destLevel += 1;\n        }\n      } // if adding to an existing level, find where to insert\n\n\n      var destLateral = -1;\n\n      if (destLevel < levelCnt && levelCoords[destLevel] === candidateCoord) {\n        destLateral = binarySearch(entriesByLevel[destLevel], newEntry.span.end, getEntrySpanEnd)[0];\n      }\n\n      return {\n        touchingLevel: touchingLevel,\n        touchingLateral: touchingLateral,\n        touchingEntry: touchingEntry,\n        stackCnt: stackCnt,\n        levelCoord: candidateCoord,\n        level: destLevel,\n        lateral: destLateral\n      };\n    } // sorted by levelCoord (lowest to highest)\n\n  }, {\n    key: \"toRects\",\n    value: function toRects() {\n      var entriesByLevel = this.entriesByLevel,\n          levelCoords = this.levelCoords;\n      var levelCnt = entriesByLevel.length;\n      var rects = [];\n\n      for (var level = 0; level < levelCnt; level += 1) {\n        var entries = entriesByLevel[level];\n        var levelCoord = levelCoords[level];\n\n        var _iterator23 = _createForOfIteratorHelper(entries),\n            _step23;\n\n        try {\n          for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {\n            var entry = _step23.value;\n            rects.push(Object.assign(Object.assign({}, entry), {\n              thickness: this.getEntryThickness(entry),\n              levelCoord: levelCoord\n            }));\n          }\n        } catch (err) {\n          _iterator23.e(err);\n        } finally {\n          _iterator23.f();\n        }\n      }\n\n      return rects;\n    }\n  }]);\n\n  return SegHierarchy;\n}();\n\nfunction getEntrySpanEnd(entry) {\n  return entry.span.end;\n}\n\nfunction buildEntryKey(entry) {\n  return entry.index + ':' + entry.span.start;\n} // returns groups with entries sorted by input order\n\n\nfunction groupIntersectingEntries(entries) {\n  var merges = [];\n\n  var _iterator24 = _createForOfIteratorHelper(entries),\n      _step24;\n\n  try {\n    for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {\n      var entry = _step24.value;\n      var filteredMerges = [];\n      var hungryMerge = {\n        span: entry.span,\n        entries: [entry]\n      };\n\n      var _iterator25 = _createForOfIteratorHelper(merges),\n          _step25;\n\n      try {\n        for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {\n          var merge = _step25.value;\n\n          if (intersectSpans(merge.span, hungryMerge.span)) {\n            hungryMerge = {\n              entries: merge.entries.concat(hungryMerge.entries),\n              span: joinSpans(merge.span, hungryMerge.span)\n            };\n          } else {\n            filteredMerges.push(merge);\n          }\n        }\n      } catch (err) {\n        _iterator25.e(err);\n      } finally {\n        _iterator25.f();\n      }\n\n      filteredMerges.push(hungryMerge);\n      merges = filteredMerges;\n    }\n  } catch (err) {\n    _iterator24.e(err);\n  } finally {\n    _iterator24.f();\n  }\n\n  return merges;\n}\n\nfunction joinSpans(span0, span1) {\n  return {\n    start: Math.min(span0.start, span1.start),\n    end: Math.max(span0.end, span1.end)\n  };\n}\n\nfunction intersectSpans(span0, span1) {\n  var start = Math.max(span0.start, span1.start);\n  var end = Math.min(span0.end, span1.end);\n\n  if (start < end) {\n    return {\n      start: start,\n      end: end\n    };\n  }\n\n  return null;\n} // general util\n// ---------------------------------------------------------------------------------------------------------------------\n\n\nfunction insertAt(arr, index, item) {\n  arr.splice(index, 0, item);\n}\n\nfunction binarySearch(a, searchVal, getItemVal) {\n  var startIndex = 0;\n  var endIndex = a.length; // exclusive\n\n  if (!endIndex || searchVal < getItemVal(a[startIndex])) {\n    // no items OR before first item\n    return [0, 0];\n  }\n\n  if (searchVal > getItemVal(a[endIndex - 1])) {\n    // after last item\n    return [endIndex, 0];\n  }\n\n  while (startIndex < endIndex) {\n    var middleIndex = Math.floor(startIndex + (endIndex - startIndex) / 2);\n    var middleVal = getItemVal(a[middleIndex]);\n\n    if (searchVal < middleVal) {\n      endIndex = middleIndex;\n    } else if (searchVal > middleVal) {\n      startIndex = middleIndex + 1;\n    } else {\n      // equal!\n      return [middleIndex, 1];\n    }\n  }\n\n  return [startIndex, 0];\n}\n/*\nAn abstraction for a dragging interaction originating on an event.\nDoes higher-level things than PointerDragger, such as possibly:\n- a \"mirror\" that moves with the pointer\n- a minimum number of pixels or other criteria for a true drag to begin\n\nsubclasses must emit:\n- pointerdown\n- dragstart\n- dragmove\n- pointerup\n- dragend\n*/\n\n\nvar ElementDragging = /*#__PURE__*/function () {\n  function ElementDragging(el, selector) {\n    _classCallCheck(this, ElementDragging);\n\n    this.emitter = new Emitter();\n  }\n\n  _createClass(ElementDragging, [{\n    key: \"destroy\",\n    value: function destroy() {}\n  }, {\n    key: \"setMirrorIsVisible\",\n    value: function setMirrorIsVisible(bool) {// optional if subclass doesn't want to support a mirror\n    }\n  }, {\n    key: \"setMirrorNeedsRevert\",\n    value: function setMirrorNeedsRevert(bool) {// optional if subclass doesn't want to support a mirror\n    }\n  }, {\n    key: \"setAutoScrollEnabled\",\n    value: function setAutoScrollEnabled(bool) {// optional\n    }\n  }]);\n\n  return ElementDragging;\n}(); // TODO: get rid of this in favor of options system,\n// tho it's really easy to access this globally rather than pass thru options.\n\n\nvar config = {};\n/*\nInformation about what will happen when an external element is dragged-and-dropped\nonto a calendar. Contains information for creating an event.\n*/\n\nvar DRAG_META_REFINERS = {\n  startTime: createDuration,\n  duration: createDuration,\n  create: Boolean,\n  sourceId: String\n};\n\nfunction parseDragMeta(raw) {\n  var _refineProps3 = refineProps(raw, DRAG_META_REFINERS),\n      refined = _refineProps3.refined,\n      extra = _refineProps3.extra;\n\n  return {\n    startTime: refined.startTime || null,\n    duration: refined.duration || null,\n    create: refined.create != null ? refined.create : true,\n    sourceId: refined.sourceId,\n    leftoverProps: extra\n  };\n} // Computes a default column header formatting string if `colFormat` is not explicitly defined\n\n\nfunction computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {\n  // if more than one week row, or if there are a lot of columns with not much space,\n  // put just the day numbers will be in each cell\n  if (!datesRepDistinctDays || dayCnt > 10) {\n    return createFormatter({\n      weekday: 'short'\n    }); // \"Sat\"\n  }\n\n  if (dayCnt > 1) {\n    return createFormatter({\n      weekday: 'short',\n      month: 'numeric',\n      day: 'numeric',\n      omitCommas: true\n    }); // \"Sat 11/12\"\n  }\n\n  return createFormatter({\n    weekday: 'long'\n  }); // \"Saturday\"\n}\n\nvar CLASS_NAME = 'fc-col-header-cell'; // do the cushion too? no\n\nfunction renderInner$1(renderProps) {\n  return renderProps.text;\n} // BAD name for this class now. used in the Header\n\n\nvar TableDateCell = /*#__PURE__*/function (_BaseComponent5) {\n  _inherits(TableDateCell, _BaseComponent5);\n\n  var _super12 = _createSuper(TableDateCell);\n\n  function TableDateCell() {\n    _classCallCheck(this, TableDateCell);\n\n    return _super12.apply(this, arguments);\n  }\n\n  _createClass(TableDateCell, [{\n    key: \"render\",\n    value: function render() {\n      var _this$context = this.context,\n          dateEnv = _this$context.dateEnv,\n          options = _this$context.options,\n          theme = _this$context.theme,\n          viewApi = _this$context.viewApi;\n      var props = this.props;\n      var date = props.date,\n          dateProfile = props.dateProfile;\n      var dayMeta = getDateMeta(date, props.todayRange, null, dateProfile);\n      var classNames = [CLASS_NAME].concat(getDayClassNames(dayMeta, theme));\n      var text = dateEnv.format(date, props.dayHeaderFormat); // if colCnt is 1, we are already in a day-view and don't need a navlink\n\n      var navLinkAttrs = !dayMeta.isDisabled && props.colCnt > 1 ? buildNavLinkAttrs(this.context, date) : {};\n      var renderProps = Object.assign(Object.assign(Object.assign({\n        date: dateEnv.toDate(date),\n        view: viewApi\n      }, props.extraRenderProps), {\n        text: text\n      }), dayMeta);\n      return createElement(ContentContainer, {\n        elTag: \"th\",\n        elClasses: classNames,\n        elAttrs: Object.assign({\n          role: 'columnheader',\n          colSpan: props.colSpan,\n          'data-date': !dayMeta.isDisabled ? formatDayString(date) : undefined\n        }, props.extraDataAttrs),\n        renderProps: renderProps,\n        generatorName: \"dayHeaderContent\",\n        customGenerator: options.dayHeaderContent,\n        defaultGenerator: renderInner$1,\n        classNameGenerator: options.dayHeaderClassNames,\n        didMount: options.dayHeaderDidMount,\n        willUnmount: options.dayHeaderWillUnmount\n      }, function (InnerContainer) {\n        return createElement(\"div\", {\n          className: \"fc-scrollgrid-sync-inner\"\n        }, !dayMeta.isDisabled && createElement(InnerContainer, {\n          elTag: \"a\",\n          elAttrs: navLinkAttrs,\n          elClasses: ['fc-col-header-cell-cushion', props.isSticky && 'fc-sticky']\n        }));\n      });\n    }\n  }]);\n\n  return TableDateCell;\n}(BaseComponent);\n\nvar WEEKDAY_FORMAT = createFormatter({\n  weekday: 'long'\n});\n\nvar TableDowCell = /*#__PURE__*/function (_BaseComponent6) {\n  _inherits(TableDowCell, _BaseComponent6);\n\n  var _super13 = _createSuper(TableDowCell);\n\n  function TableDowCell() {\n    _classCallCheck(this, TableDowCell);\n\n    return _super13.apply(this, arguments);\n  }\n\n  _createClass(TableDowCell, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      var _this$context2 = this.context,\n          dateEnv = _this$context2.dateEnv,\n          theme = _this$context2.theme,\n          viewApi = _this$context2.viewApi,\n          options = _this$context2.options;\n      var date = addDays(new Date(259200000), props.dow); // start with Sun, 04 Jan 1970 00:00:00 GMT\n\n      var dateMeta = {\n        dow: props.dow,\n        isDisabled: false,\n        isFuture: false,\n        isPast: false,\n        isToday: false,\n        isOther: false\n      };\n      var text = dateEnv.format(date, props.dayHeaderFormat);\n      var renderProps = Object.assign(Object.assign(Object.assign(Object.assign({\n        // TODO: make this public?\n        date: date\n      }, dateMeta), {\n        view: viewApi\n      }), props.extraRenderProps), {\n        text: text\n      });\n      return createElement(ContentContainer, {\n        elTag: \"th\",\n        elClasses: [CLASS_NAME].concat(_toConsumableArray(getDayClassNames(dateMeta, theme)), _toConsumableArray(props.extraClassNames || [])),\n        elAttrs: Object.assign({\n          role: 'columnheader',\n          colSpan: props.colSpan\n        }, props.extraDataAttrs),\n        renderProps: renderProps,\n        generatorName: \"dayHeaderContent\",\n        customGenerator: options.dayHeaderContent,\n        defaultGenerator: renderInner$1,\n        classNameGenerator: options.dayHeaderClassNames,\n        didMount: options.dayHeaderDidMount,\n        willUnmount: options.dayHeaderWillUnmount\n      }, function (InnerContent) {\n        return createElement(\"div\", {\n          className: \"fc-scrollgrid-sync-inner\"\n        }, createElement(InnerContent, {\n          elTag: \"a\",\n          elClasses: ['fc-col-header-cell-cushion', props.isSticky && 'fc-sticky'],\n          elAttrs: {\n            'aria-label': dateEnv.format(date, WEEKDAY_FORMAT)\n          }\n        }));\n      });\n    }\n  }]);\n\n  return TableDowCell;\n}(BaseComponent);\n\nvar NowTimer = /*#__PURE__*/function (_Component3) {\n  _inherits(NowTimer, _Component3);\n\n  var _super14 = _createSuper(NowTimer);\n\n  function NowTimer(props, context) {\n    var _this16;\n\n    _classCallCheck(this, NowTimer);\n\n    _this16 = _super14.call(this, props, context);\n    _this16.initialNowDate = getNow(context.options.now, context.dateEnv);\n    _this16.initialNowQueriedMs = new Date().valueOf();\n    _this16.state = _this16.computeTiming().currentState;\n    return _this16;\n  }\n\n  _createClass(NowTimer, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          state = this.state;\n      return props.children(state.nowDate, state.todayRange);\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.setTimeout();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      if (prevProps.unit !== this.props.unit) {\n        this.clearTimeout();\n        this.setTimeout();\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.clearTimeout();\n    }\n  }, {\n    key: \"computeTiming\",\n    value: function computeTiming() {\n      var props = this.props,\n          context = this.context;\n      var unroundedNow = addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs);\n      var currentUnitStart = context.dateEnv.startOf(unroundedNow, props.unit);\n      var nextUnitStart = context.dateEnv.add(currentUnitStart, createDuration(1, props.unit));\n      var waitMs = nextUnitStart.valueOf() - unroundedNow.valueOf(); // there is a max setTimeout ms value (https://stackoverflow.com/a/3468650/96342)\n      // ensure no longer than a day\n\n      waitMs = Math.min(1000 * 60 * 60 * 24, waitMs);\n      return {\n        currentState: {\n          nowDate: currentUnitStart,\n          todayRange: buildDayRange(currentUnitStart)\n        },\n        nextState: {\n          nowDate: nextUnitStart,\n          todayRange: buildDayRange(nextUnitStart)\n        },\n        waitMs: waitMs\n      };\n    }\n  }, {\n    key: \"setTimeout\",\n    value: function (_setTimeout) {\n      function setTimeout() {\n        return _setTimeout.apply(this, arguments);\n      }\n\n      setTimeout.toString = function () {\n        return _setTimeout.toString();\n      };\n\n      return setTimeout;\n    }(function () {\n      var _this17 = this;\n\n      var _this$computeTiming = this.computeTiming(),\n          nextState = _this$computeTiming.nextState,\n          waitMs = _this$computeTiming.waitMs;\n\n      this.timeoutId = setTimeout(function () {\n        _this17.setState(nextState, function () {\n          _this17.setTimeout();\n        });\n      }, waitMs);\n    })\n  }, {\n    key: \"clearTimeout\",\n    value: function (_clearTimeout2) {\n      function clearTimeout() {\n        return _clearTimeout2.apply(this, arguments);\n      }\n\n      clearTimeout.toString = function () {\n        return _clearTimeout2.toString();\n      };\n\n      return clearTimeout;\n    }(function () {\n      if (this.timeoutId) {\n        clearTimeout(this.timeoutId);\n      }\n    })\n  }]);\n\n  return NowTimer;\n}(Component);\n\nNowTimer.contextType = ViewContextType;\n\nfunction buildDayRange(date) {\n  var start = startOfDay(date);\n  var end = addDays(start, 1);\n  return {\n    start: start,\n    end: end\n  };\n}\n\nvar DayHeader = /*#__PURE__*/function (_BaseComponent7) {\n  _inherits(DayHeader, _BaseComponent7);\n\n  var _super15 = _createSuper(DayHeader);\n\n  function DayHeader() {\n    var _this18;\n\n    _classCallCheck(this, DayHeader);\n\n    _this18 = _super15.apply(this, arguments);\n    _this18.createDayHeaderFormatter = memoize(createDayHeaderFormatter);\n    return _this18;\n  }\n\n  _createClass(DayHeader, [{\n    key: \"render\",\n    value: function render() {\n      var context = this.context;\n      var _this$props4 = this.props,\n          dates = _this$props4.dates,\n          dateProfile = _this$props4.dateProfile,\n          datesRepDistinctDays = _this$props4.datesRepDistinctDays,\n          renderIntro = _this$props4.renderIntro;\n      var dayHeaderFormat = this.createDayHeaderFormatter(context.options.dayHeaderFormat, datesRepDistinctDays, dates.length);\n      return createElement(NowTimer, {\n        unit: \"day\"\n      }, function (nowDate, todayRange) {\n        return createElement(\"tr\", {\n          role: \"row\"\n        }, renderIntro && renderIntro('day'), dates.map(function (date) {\n          return datesRepDistinctDays ? createElement(TableDateCell, {\n            key: date.toISOString(),\n            date: date,\n            dateProfile: dateProfile,\n            todayRange: todayRange,\n            colCnt: dates.length,\n            dayHeaderFormat: dayHeaderFormat\n          }) : createElement(TableDowCell, {\n            key: date.getUTCDay(),\n            dow: date.getUTCDay(),\n            dayHeaderFormat: dayHeaderFormat\n          });\n        }));\n      });\n    }\n  }]);\n\n  return DayHeader;\n}(BaseComponent);\n\nfunction createDayHeaderFormatter(explicitFormat, datesRepDistinctDays, dateCnt) {\n  return explicitFormat || computeFallbackHeaderFormat(datesRepDistinctDays, dateCnt);\n}\n\nvar DaySeriesModel = /*#__PURE__*/function () {\n  function DaySeriesModel(range, dateProfileGenerator) {\n    _classCallCheck(this, DaySeriesModel);\n\n    var date = range.start;\n    var end = range.end;\n    var indices = [];\n    var dates = [];\n    var dayIndex = -1;\n\n    while (date < end) {\n      // loop each day from start to end\n      if (dateProfileGenerator.isHiddenDay(date)) {\n        indices.push(dayIndex + 0.5); // mark that it's between indices\n      } else {\n        dayIndex += 1;\n        indices.push(dayIndex);\n        dates.push(date);\n      }\n\n      date = addDays(date, 1);\n    }\n\n    this.dates = dates;\n    this.indices = indices;\n    this.cnt = dates.length;\n  }\n\n  _createClass(DaySeriesModel, [{\n    key: \"sliceRange\",\n    value: function sliceRange(range) {\n      var firstIndex = this.getDateDayIndex(range.start); // inclusive first index\n\n      var lastIndex = this.getDateDayIndex(addDays(range.end, -1)); // inclusive last index\n\n      var clippedFirstIndex = Math.max(0, firstIndex);\n      var clippedLastIndex = Math.min(this.cnt - 1, lastIndex); // deal with in-between indices\n\n      clippedFirstIndex = Math.ceil(clippedFirstIndex); // in-between starts round to next cell\n\n      clippedLastIndex = Math.floor(clippedLastIndex); // in-between ends round to prev cell\n\n      if (clippedFirstIndex <= clippedLastIndex) {\n        return {\n          firstIndex: clippedFirstIndex,\n          lastIndex: clippedLastIndex,\n          isStart: firstIndex === clippedFirstIndex,\n          isEnd: lastIndex === clippedLastIndex\n        };\n      }\n\n      return null;\n    } // Given a date, returns its chronolocial cell-index from the first cell of the grid.\n    // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\n    // If before the first offset, returns a negative number.\n    // If after the last offset, returns an offset past the last cell offset.\n    // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\n\n  }, {\n    key: \"getDateDayIndex\",\n    value: function getDateDayIndex(date) {\n      var indices = this.indices;\n      var dayOffset = Math.floor(diffDays(this.dates[0], date));\n\n      if (dayOffset < 0) {\n        return indices[0] - 1;\n      }\n\n      if (dayOffset >= indices.length) {\n        return indices[indices.length - 1] + 1;\n      }\n\n      return indices[dayOffset];\n    }\n  }]);\n\n  return DaySeriesModel;\n}();\n\nvar DayTableModel = /*#__PURE__*/function () {\n  function DayTableModel(daySeries, breakOnWeeks) {\n    _classCallCheck(this, DayTableModel);\n\n    var dates = daySeries.dates;\n    var daysPerRow;\n    var firstDay;\n    var rowCnt;\n\n    if (breakOnWeeks) {\n      // count columns until the day-of-week repeats\n      firstDay = dates[0].getUTCDay();\n\n      for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow += 1) {\n        if (dates[daysPerRow].getUTCDay() === firstDay) {\n          break;\n        }\n      }\n\n      rowCnt = Math.ceil(dates.length / daysPerRow);\n    } else {\n      rowCnt = 1;\n      daysPerRow = dates.length;\n    }\n\n    this.rowCnt = rowCnt;\n    this.colCnt = daysPerRow;\n    this.daySeries = daySeries;\n    this.cells = this.buildCells();\n    this.headerDates = this.buildHeaderDates();\n  }\n\n  _createClass(DayTableModel, [{\n    key: \"buildCells\",\n    value: function buildCells() {\n      var rows = [];\n\n      for (var row = 0; row < this.rowCnt; row += 1) {\n        var cells = [];\n\n        for (var col = 0; col < this.colCnt; col += 1) {\n          cells.push(this.buildCell(row, col));\n        }\n\n        rows.push(cells);\n      }\n\n      return rows;\n    }\n  }, {\n    key: \"buildCell\",\n    value: function buildCell(row, col) {\n      var date = this.daySeries.dates[row * this.colCnt + col];\n      return {\n        key: date.toISOString(),\n        date: date\n      };\n    }\n  }, {\n    key: \"buildHeaderDates\",\n    value: function buildHeaderDates() {\n      var dates = [];\n\n      for (var col = 0; col < this.colCnt; col += 1) {\n        dates.push(this.cells[0][col].date);\n      }\n\n      return dates;\n    }\n  }, {\n    key: \"sliceRange\",\n    value: function sliceRange(range) {\n      var colCnt = this.colCnt;\n      var seriesSeg = this.daySeries.sliceRange(range);\n      var segs = [];\n\n      if (seriesSeg) {\n        var firstIndex = seriesSeg.firstIndex,\n            lastIndex = seriesSeg.lastIndex;\n        var index = firstIndex;\n\n        while (index <= lastIndex) {\n          var row = Math.floor(index / colCnt);\n          var nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1);\n          segs.push({\n            row: row,\n            firstCol: index % colCnt,\n            lastCol: (nextIndex - 1) % colCnt,\n            isStart: seriesSeg.isStart && index === firstIndex,\n            isEnd: seriesSeg.isEnd && nextIndex - 1 === lastIndex\n          });\n          index = nextIndex;\n        }\n      }\n\n      return segs;\n    }\n  }]);\n\n  return DayTableModel;\n}();\n\nvar Slicer = /*#__PURE__*/function () {\n  function Slicer() {\n    _classCallCheck(this, Slicer);\n\n    this.sliceBusinessHours = memoize(this._sliceBusinessHours);\n    this.sliceDateSelection = memoize(this._sliceDateSpan);\n    this.sliceEventStore = memoize(this._sliceEventStore);\n    this.sliceEventDrag = memoize(this._sliceInteraction);\n    this.sliceEventResize = memoize(this._sliceInteraction);\n    this.forceDayIfListItem = false; // hack\n  }\n\n  _createClass(Slicer, [{\n    key: \"sliceProps\",\n    value: function sliceProps(props, dateProfile, nextDayThreshold, context) {\n      var eventUiBases = props.eventUiBases;\n\n      for (var _len4 = arguments.length, extraArgs = new Array(_len4 > 4 ? _len4 - 4 : 0), _key9 = 4; _key9 < _len4; _key9++) {\n        extraArgs[_key9 - 4] = arguments[_key9];\n      }\n\n      var eventSegs = this.sliceEventStore.apply(this, [props.eventStore, eventUiBases, dateProfile, nextDayThreshold].concat(extraArgs));\n      return {\n        dateSelectionSegs: this.sliceDateSelection.apply(this, [props.dateSelection, dateProfile, nextDayThreshold, eventUiBases, context].concat(extraArgs)),\n        businessHourSegs: this.sliceBusinessHours.apply(this, [props.businessHours, dateProfile, nextDayThreshold, context].concat(extraArgs)),\n        fgEventSegs: eventSegs.fg,\n        bgEventSegs: eventSegs.bg,\n        eventDrag: this.sliceEventDrag.apply(this, [props.eventDrag, eventUiBases, dateProfile, nextDayThreshold].concat(extraArgs)),\n        eventResize: this.sliceEventResize.apply(this, [props.eventResize, eventUiBases, dateProfile, nextDayThreshold].concat(extraArgs)),\n        eventSelection: props.eventSelection\n      }; // TODO: give interactionSegs?\n    }\n  }, {\n    key: \"sliceNowDate\",\n    value: function sliceNowDate( // does not memoize\n    date, dateProfile, nextDayThreshold, context) {\n      for (var _len5 = arguments.length, extraArgs = new Array(_len5 > 4 ? _len5 - 4 : 0), _key10 = 4; _key10 < _len5; _key10++) {\n        extraArgs[_key10 - 4] = arguments[_key10];\n      }\n\n      return this._sliceDateSpan.apply(this, [{\n        range: {\n          start: date,\n          end: addMs(date, 1)\n        },\n        allDay: false\n      }, // add 1 ms, protect against null range\n      dateProfile, nextDayThreshold, {}, context].concat(extraArgs));\n    }\n  }, {\n    key: \"_sliceBusinessHours\",\n    value: function _sliceBusinessHours(businessHours, dateProfile, nextDayThreshold, context) {\n      if (!businessHours) {\n        return [];\n      }\n\n      for (var _len6 = arguments.length, extraArgs = new Array(_len6 > 4 ? _len6 - 4 : 0), _key11 = 4; _key11 < _len6; _key11++) {\n        extraArgs[_key11 - 4] = arguments[_key11];\n      }\n\n      return this._sliceEventStore.apply(this, [expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), context), {}, dateProfile, nextDayThreshold].concat(extraArgs)).bg;\n    }\n  }, {\n    key: \"_sliceEventStore\",\n    value: function _sliceEventStore(eventStore, eventUiBases, dateProfile, nextDayThreshold) {\n      if (eventStore) {\n        var rangeRes = sliceEventStore(eventStore, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);\n\n        for (var _len7 = arguments.length, extraArgs = new Array(_len7 > 4 ? _len7 - 4 : 0), _key12 = 4; _key12 < _len7; _key12++) {\n          extraArgs[_key12 - 4] = arguments[_key12];\n        }\n\n        return {\n          bg: this.sliceEventRanges(rangeRes.bg, extraArgs),\n          fg: this.sliceEventRanges(rangeRes.fg, extraArgs)\n        };\n      }\n\n      return {\n        bg: [],\n        fg: []\n      };\n    }\n  }, {\n    key: \"_sliceInteraction\",\n    value: function _sliceInteraction(interaction, eventUiBases, dateProfile, nextDayThreshold) {\n      if (!interaction) {\n        return null;\n      }\n\n      var rangeRes = sliceEventStore(interaction.mutatedEvents, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);\n\n      for (var _len8 = arguments.length, extraArgs = new Array(_len8 > 4 ? _len8 - 4 : 0), _key13 = 4; _key13 < _len8; _key13++) {\n        extraArgs[_key13 - 4] = arguments[_key13];\n      }\n\n      return {\n        segs: this.sliceEventRanges(rangeRes.fg, extraArgs),\n        affectedInstances: interaction.affectedEvents.instances,\n        isEvent: interaction.isEvent\n      };\n    }\n  }, {\n    key: \"_sliceDateSpan\",\n    value: function _sliceDateSpan(dateSpan, dateProfile, nextDayThreshold, eventUiBases, context) {\n      if (!dateSpan) {\n        return [];\n      }\n\n      var activeRange = computeActiveRange(dateProfile, Boolean(nextDayThreshold));\n      var activeDateSpanRange = intersectRanges(dateSpan.range, activeRange);\n\n      if (activeDateSpanRange) {\n        dateSpan = Object.assign(Object.assign({}, dateSpan), {\n          range: activeDateSpanRange\n        });\n        var eventRange = fabricateEventRange(dateSpan, eventUiBases, context);\n\n        for (var _len9 = arguments.length, extraArgs = new Array(_len9 > 5 ? _len9 - 5 : 0), _key14 = 5; _key14 < _len9; _key14++) {\n          extraArgs[_key14 - 5] = arguments[_key14];\n        }\n\n        var segs = this.sliceRange.apply(this, [dateSpan.range].concat(extraArgs));\n\n        var _iterator26 = _createForOfIteratorHelper(segs),\n            _step26;\n\n        try {\n          for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {\n            var seg = _step26.value;\n            seg.eventRange = eventRange;\n          }\n        } catch (err) {\n          _iterator26.e(err);\n        } finally {\n          _iterator26.f();\n        }\n\n        return segs;\n      }\n\n      return [];\n    }\n    /*\n    \"complete\" seg means it has component and eventRange\n    */\n\n  }, {\n    key: \"sliceEventRanges\",\n    value: function sliceEventRanges(eventRanges, extraArgs) {\n      var segs = [];\n\n      var _iterator27 = _createForOfIteratorHelper(eventRanges),\n          _step27;\n\n      try {\n        for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {\n          var eventRange = _step27.value;\n          segs.push.apply(segs, _toConsumableArray(this.sliceEventRange(eventRange, extraArgs)));\n        }\n      } catch (err) {\n        _iterator27.e(err);\n      } finally {\n        _iterator27.f();\n      }\n\n      return segs;\n    }\n    /*\n    \"complete\" seg means it has component and eventRange\n    */\n\n  }, {\n    key: \"sliceEventRange\",\n    value: function sliceEventRange(eventRange, extraArgs) {\n      var dateRange = eventRange.range; // hack to make multi-day events that are being force-displayed as list-items to take up only one day\n\n      if (this.forceDayIfListItem && eventRange.ui.display === 'list-item') {\n        dateRange = {\n          start: dateRange.start,\n          end: addDays(dateRange.start, 1)\n        };\n      }\n\n      var segs = this.sliceRange.apply(this, [dateRange].concat(_toConsumableArray(extraArgs)));\n\n      var _iterator28 = _createForOfIteratorHelper(segs),\n          _step28;\n\n      try {\n        for (_iterator28.s(); !(_step28 = _iterator28.n()).done;) {\n          var seg = _step28.value;\n          seg.eventRange = eventRange;\n          seg.isStart = eventRange.isStart && seg.isStart;\n          seg.isEnd = eventRange.isEnd && seg.isEnd;\n        }\n      } catch (err) {\n        _iterator28.e(err);\n      } finally {\n        _iterator28.f();\n      }\n\n      return segs;\n    }\n  }]);\n\n  return Slicer;\n}();\n/*\nfor incorporating slotMinTime/slotMaxTime if appropriate\nTODO: should be part of DateProfile!\nTimelineDateProfile already does this btw\n*/\n\n\nfunction computeActiveRange(dateProfile, isComponentAllDay) {\n  var range = dateProfile.activeRange;\n\n  if (isComponentAllDay) {\n    return range;\n  }\n\n  return {\n    start: addMs(range.start, dateProfile.slotMinTime.milliseconds),\n    end: addMs(range.end, dateProfile.slotMaxTime.milliseconds - 864e5) // 864e5 = ms in a day\n\n  };\n} // high-level segmenting-aware tester functions\n// ------------------------------------------------------------------------------------------------------------------------\n\n\nfunction isInteractionValid(interaction, dateProfile, context) {\n  var instances = interaction.mutatedEvents.instances;\n\n  for (var instanceId in instances) {\n    if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {\n      return false;\n    }\n  }\n\n  return isNewPropsValid({\n    eventDrag: interaction\n  }, context); // HACK: the eventDrag props is used for ALL interactions\n}\n\nfunction isDateSelectionValid(dateSelection, dateProfile, context) {\n  if (!rangeContainsRange(dateProfile.validRange, dateSelection.range)) {\n    return false;\n  }\n\n  return isNewPropsValid({\n    dateSelection: dateSelection\n  }, context);\n}\n\nfunction isNewPropsValid(newProps, context) {\n  var calendarState = context.getCurrentData();\n  var props = Object.assign({\n    businessHours: calendarState.businessHours,\n    dateSelection: '',\n    eventStore: calendarState.eventStore,\n    eventUiBases: calendarState.eventUiBases,\n    eventSelection: '',\n    eventDrag: null,\n    eventResize: null\n  }, newProps);\n  return (context.pluginHooks.isPropsValid || isPropsValid)(props, context);\n}\n\nfunction isPropsValid(state, context) {\n  var dateSpanMeta = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var filterConfig = arguments.length > 3 ? arguments[3] : undefined;\n\n  if (state.eventDrag && !isInteractionPropsValid(state, context, dateSpanMeta, filterConfig)) {\n    return false;\n  }\n\n  if (state.dateSelection && !isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig)) {\n    return false;\n  }\n\n  return true;\n} // Moving Event Validation\n// ------------------------------------------------------------------------------------------------------------------------\n\n\nfunction isInteractionPropsValid(state, context, dateSpanMeta, filterConfig) {\n  var currentState = context.getCurrentData();\n  var interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions\n\n  var subjectEventStore = interaction.mutatedEvents;\n  var subjectDefs = subjectEventStore.defs;\n  var subjectInstances = subjectEventStore.instances;\n  var subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ? state.eventUiBases : {\n    '': currentState.selectionConfig\n  });\n\n  if (filterConfig) {\n    subjectConfigs = mapHash(subjectConfigs, filterConfig);\n  } // exclude the subject events. TODO: exclude defs too?\n\n\n  var otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances);\n  var otherDefs = otherEventStore.defs;\n  var otherInstances = otherEventStore.instances;\n  var otherConfigs = compileEventUis(otherDefs, state.eventUiBases);\n\n  for (var subjectInstanceId in subjectInstances) {\n    var subjectInstance = subjectInstances[subjectInstanceId];\n    var subjectRange = subjectInstance.range;\n    var subjectConfig = subjectConfigs[subjectInstance.defId];\n    var subjectDef = subjectDefs[subjectInstance.defId]; // constraint\n\n    if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, context)) {\n      return false;\n    } // overlap\n\n\n    var eventOverlap = context.options.eventOverlap;\n    var eventOverlapFunc = typeof eventOverlap === 'function' ? eventOverlap : null;\n\n    for (var otherInstanceId in otherInstances) {\n      var otherInstance = otherInstances[otherInstanceId]; // intersect! evaluate\n\n      if (rangesIntersect(subjectRange, otherInstance.range)) {\n        var otherOverlap = otherConfigs[otherInstance.defId].overlap; // consider the other event's overlap. only do this if the subject event is a \"real\" event\n\n        if (otherOverlap === false && interaction.isEvent) {\n          return false;\n        }\n\n        if (subjectConfig.overlap === false) {\n          return false;\n        }\n\n        if (eventOverlapFunc && !eventOverlapFunc(new EventImpl(context, otherDefs[otherInstance.defId], otherInstance), // still event\n        new EventImpl(context, subjectDef, subjectInstance))) {\n          return false;\n        }\n      }\n    } // allow (a function)\n\n\n    var calendarEventStore = currentState.eventStore; // need global-to-calendar, not local to component (splittable)state\n\n    var _iterator29 = _createForOfIteratorHelper(subjectConfig.allows),\n        _step29;\n\n    try {\n      for (_iterator29.s(); !(_step29 = _iterator29.n()).done;) {\n        var subjectAllow = _step29.value;\n        var subjectDateSpan = Object.assign(Object.assign({}, dateSpanMeta), {\n          range: subjectInstance.range,\n          allDay: subjectDef.allDay\n        });\n        var origDef = calendarEventStore.defs[subjectDef.defId];\n        var origInstance = calendarEventStore.instances[subjectInstanceId];\n        var eventApi = void 0;\n\n        if (origDef) {\n          // was previously in the calendar\n          eventApi = new EventImpl(context, origDef, origInstance);\n        } else {\n          // was an external event\n          eventApi = new EventImpl(context, subjectDef); // no instance, because had no dates\n        }\n\n        if (!subjectAllow(buildDateSpanApiWithContext(subjectDateSpan, context), eventApi)) {\n          return false;\n        }\n      }\n    } catch (err) {\n      _iterator29.e(err);\n    } finally {\n      _iterator29.f();\n    }\n  }\n\n  return true;\n} // Date Selection Validation\n// ------------------------------------------------------------------------------------------------------------------------\n\n\nfunction isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig) {\n  var relevantEventStore = state.eventStore;\n  var relevantDefs = relevantEventStore.defs;\n  var relevantInstances = relevantEventStore.instances;\n  var selection = state.dateSelection;\n  var selectionRange = selection.range;\n\n  var _context$getCurrentDa2 = context.getCurrentData(),\n      selectionConfig = _context$getCurrentDa2.selectionConfig;\n\n  if (filterConfig) {\n    selectionConfig = filterConfig(selectionConfig);\n  } // constraint\n\n\n  if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, context)) {\n    return false;\n  } // overlap\n\n\n  var selectOverlap = context.options.selectOverlap;\n  var selectOverlapFunc = typeof selectOverlap === 'function' ? selectOverlap : null;\n\n  for (var relevantInstanceId in relevantInstances) {\n    var relevantInstance = relevantInstances[relevantInstanceId]; // intersect! evaluate\n\n    if (rangesIntersect(selectionRange, relevantInstance.range)) {\n      if (selectionConfig.overlap === false) {\n        return false;\n      }\n\n      if (selectOverlapFunc && !selectOverlapFunc(new EventImpl(context, relevantDefs[relevantInstance.defId], relevantInstance), null)) {\n        return false;\n      }\n    }\n  } // allow (a function)\n\n\n  var _iterator30 = _createForOfIteratorHelper(selectionConfig.allows),\n      _step30;\n\n  try {\n    for (_iterator30.s(); !(_step30 = _iterator30.n()).done;) {\n      var selectionAllow = _step30.value;\n      var fullDateSpan = Object.assign(Object.assign({}, dateSpanMeta), selection);\n\n      if (!selectionAllow(buildDateSpanApiWithContext(fullDateSpan, context), null)) {\n        return false;\n      }\n    }\n  } catch (err) {\n    _iterator30.e(err);\n  } finally {\n    _iterator30.f();\n  }\n\n  return true;\n} // Constraint Utils\n// ------------------------------------------------------------------------------------------------------------------------\n\n\nfunction allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, context) {\n  var _iterator31 = _createForOfIteratorHelper(constraints),\n      _step31;\n\n  try {\n    for (_iterator31.s(); !(_step31 = _iterator31.n()).done;) {\n      var constraint = _step31.value;\n\n      if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, context), subjectRange)) {\n        return false;\n      }\n    }\n  } catch (err) {\n    _iterator31.e(err);\n  } finally {\n    _iterator31.f();\n  }\n\n  return true;\n}\n\nfunction constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours\notherEventStore, // for if constraint is an even group ID\nbusinessHoursUnexpanded, // for if constraint is 'businessHours'\ncontext) {\n  if (constraint === 'businessHours') {\n    return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, context));\n  }\n\n  if (typeof constraint === 'string') {\n    // an group ID\n    return eventStoreToRanges(filterEventStoreDefs(otherEventStore, function (eventDef) {\n      return eventDef.groupId === constraint;\n    }));\n  }\n\n  if (_typeof(constraint) === 'object' && constraint) {\n    // non-null object\n    return eventStoreToRanges(expandRecurring(constraint, subjectRange, context));\n  }\n\n  return []; // if it's false\n} // TODO: move to event-store file?\n\n\nfunction eventStoreToRanges(eventStore) {\n  var instances = eventStore.instances;\n  var ranges = [];\n\n  for (var instanceId in instances) {\n    ranges.push(instances[instanceId].range);\n  }\n\n  return ranges;\n} // TODO: move to geom file?\n\n\nfunction anyRangesContainRange(outerRanges, innerRange) {\n  var _iterator32 = _createForOfIteratorHelper(outerRanges),\n      _step32;\n\n  try {\n    for (_iterator32.s(); !(_step32 = _iterator32.n()).done;) {\n      var outerRange = _step32.value;\n\n      if (rangeContainsRange(outerRange, innerRange)) {\n        return true;\n      }\n    }\n  } catch (err) {\n    _iterator32.e(err);\n  } finally {\n    _iterator32.f();\n  }\n\n  return false;\n}\n\nvar VISIBLE_HIDDEN_RE = /^(visible|hidden)$/;\n\nvar Scroller = /*#__PURE__*/function (_BaseComponent8) {\n  _inherits(Scroller, _BaseComponent8);\n\n  var _super16 = _createSuper(Scroller);\n\n  function Scroller() {\n    var _this19;\n\n    _classCallCheck(this, Scroller);\n\n    _this19 = _super16.apply(this, arguments);\n\n    _this19.handleEl = function (el) {\n      _this19.el = el;\n      setRef(_this19.props.elRef, el);\n    };\n\n    return _this19;\n  }\n\n  _createClass(Scroller, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      var liquid = props.liquid,\n          liquidIsAbsolute = props.liquidIsAbsolute;\n      var isAbsolute = liquid && liquidIsAbsolute;\n      var className = ['fc-scroller'];\n\n      if (liquid) {\n        if (liquidIsAbsolute) {\n          className.push('fc-scroller-liquid-absolute');\n        } else {\n          className.push('fc-scroller-liquid');\n        }\n      }\n\n      return createElement(\"div\", {\n        ref: this.handleEl,\n        className: className.join(' '),\n        style: {\n          overflowX: props.overflowX,\n          overflowY: props.overflowY,\n          left: isAbsolute && -(props.overcomeLeft || 0) || '',\n          right: isAbsolute && -(props.overcomeRight || 0) || '',\n          bottom: isAbsolute && -(props.overcomeBottom || 0) || '',\n          marginLeft: !isAbsolute && -(props.overcomeLeft || 0) || '',\n          marginRight: !isAbsolute && -(props.overcomeRight || 0) || '',\n          marginBottom: !isAbsolute && -(props.overcomeBottom || 0) || '',\n          maxHeight: props.maxHeight || ''\n        }\n      }, props.children);\n    }\n  }, {\n    key: \"needsXScrolling\",\n    value: function needsXScrolling() {\n      if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {\n        return false;\n      } // testing scrollWidth>clientWidth is unreliable cross-browser when pixel heights aren't integers.\n      // much more reliable to see if children are taller than the scroller, even tho doesn't account for\n      // inner-child margins and absolute positioning\n\n\n      var el = this.el;\n      var realClientWidth = this.el.getBoundingClientRect().width - this.getYScrollbarWidth();\n      var children = el.children;\n\n      for (var i = 0; i < children.length; i += 1) {\n        var childEl = children[i];\n\n        if (childEl.getBoundingClientRect().width > realClientWidth) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n  }, {\n    key: \"needsYScrolling\",\n    value: function needsYScrolling() {\n      if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {\n        return false;\n      } // testing scrollHeight>clientHeight is unreliable cross-browser when pixel heights aren't integers.\n      // much more reliable to see if children are taller than the scroller, even tho doesn't account for\n      // inner-child margins and absolute positioning\n\n\n      var el = this.el;\n      var realClientHeight = this.el.getBoundingClientRect().height - this.getXScrollbarWidth();\n      var children = el.children;\n\n      for (var i = 0; i < children.length; i += 1) {\n        var childEl = children[i];\n\n        if (childEl.getBoundingClientRect().height > realClientHeight) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n  }, {\n    key: \"getXScrollbarWidth\",\n    value: function getXScrollbarWidth() {\n      if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {\n        return 0;\n      }\n\n      return this.el.offsetHeight - this.el.clientHeight; // only works because we guarantee no borders. TODO: add to CSS with important?\n    }\n  }, {\n    key: \"getYScrollbarWidth\",\n    value: function getYScrollbarWidth() {\n      if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {\n        return 0;\n      }\n\n      return this.el.offsetWidth - this.el.clientWidth; // only works because we guarantee no borders. TODO: add to CSS with important?\n    }\n  }]);\n\n  return Scroller;\n}(BaseComponent);\n/*\nTODO: somehow infer OtherArgs from masterCallback?\nTODO: infer RefType from masterCallback if provided\n*/\n\n\nvar RefMap = /*#__PURE__*/function () {\n  function RefMap(masterCallback) {\n    var _this20 = this;\n\n    _classCallCheck(this, RefMap);\n\n    this.masterCallback = masterCallback;\n    this.currentMap = {};\n    this.depths = {};\n    this.callbackMap = {};\n\n    this.handleValue = function (val, key) {\n      var depths = _this20.depths,\n          currentMap = _this20.currentMap;\n      var removed = false;\n      var added = false;\n\n      if (val !== null) {\n        // for bug... ACTUALLY: can probably do away with this now that callers don't share numeric indices anymore\n        removed = key in currentMap;\n        currentMap[key] = val;\n        depths[key] = (depths[key] || 0) + 1;\n        added = true;\n      } else {\n        depths[key] -= 1;\n\n        if (!depths[key]) {\n          delete currentMap[key];\n          delete _this20.callbackMap[key];\n          removed = true;\n        }\n      }\n\n      if (_this20.masterCallback) {\n        if (removed) {\n          _this20.masterCallback(null, String(key));\n        }\n\n        if (added) {\n          _this20.masterCallback(val, String(key));\n        }\n      }\n    };\n  }\n\n  _createClass(RefMap, [{\n    key: \"createRef\",\n    value: function createRef(key) {\n      var _this21 = this;\n\n      var refCallback = this.callbackMap[key];\n\n      if (!refCallback) {\n        refCallback = this.callbackMap[key] = function (val) {\n          _this21.handleValue(val, String(key));\n        };\n      }\n\n      return refCallback;\n    } // TODO: check callers that don't care about order. should use getAll instead\n    // NOTE: this method has become less valuable now that we are encouraged to map order by some other index\n    // TODO: provide ONE array-export function, buildArray, which fails on non-numeric indexes. caller can manipulate and \"collect\"\n\n  }, {\n    key: \"collect\",\n    value: function collect(startIndex, endIndex, step) {\n      return collectFromHash(this.currentMap, startIndex, endIndex, step);\n    }\n  }, {\n    key: \"getAll\",\n    value: function getAll() {\n      return hashValuesToArray(this.currentMap);\n    }\n  }]);\n\n  return RefMap;\n}();\n\nfunction _computeShrinkWidth(chunkEls) {\n  var shrinkCells = findElements(chunkEls, '.fc-scrollgrid-shrink');\n  var largestWidth = 0;\n\n  var _iterator33 = _createForOfIteratorHelper(shrinkCells),\n      _step33;\n\n  try {\n    for (_iterator33.s(); !(_step33 = _iterator33.n()).done;) {\n      var shrinkCell = _step33.value;\n      largestWidth = Math.max(largestWidth, computeSmallestCellWidth(shrinkCell));\n    }\n  } catch (err) {\n    _iterator33.e(err);\n  } finally {\n    _iterator33.f();\n  }\n\n  return Math.ceil(largestWidth); // <table> elements work best with integers. round up to ensure contents fits\n}\n\nfunction getSectionHasLiquidHeight(props, sectionConfig) {\n  return props.liquid && sectionConfig.liquid; // does the section do liquid-height? (need to have whole scrollgrid liquid-height as well)\n}\n\nfunction getAllowYScrolling(props, sectionConfig) {\n  return sectionConfig.maxHeight != null || // if its possible for the height to max out, we might need scrollbars\n  getSectionHasLiquidHeight(props, sectionConfig); // if the section is liquid height, it might condense enough to require scrollbars\n} // TODO: ONLY use `arg`. force out internal function to use same API\n\n\nfunction renderChunkContent(sectionConfig, chunkConfig, arg, isHeader) {\n  var expandRows = arg.expandRows;\n  var content = typeof chunkConfig.content === 'function' ? chunkConfig.content(arg) : createElement('table', {\n    role: 'presentation',\n    className: [chunkConfig.tableClassName, sectionConfig.syncRowHeights ? 'fc-scrollgrid-sync-table' : ''].join(' '),\n    style: {\n      minWidth: arg.tableMinWidth,\n      width: arg.clientWidth,\n      height: expandRows ? arg.clientHeight : '' // css `height` on a <table> serves as a min-height\n\n    }\n  }, arg.tableColGroupNode, createElement(isHeader ? 'thead' : 'tbody', {\n    role: 'presentation'\n  }, typeof chunkConfig.rowContent === 'function' ? chunkConfig.rowContent(arg) : chunkConfig.rowContent));\n  return content;\n}\n\nfunction isColPropsEqual(cols0, cols1) {\n  return isArraysEqual(cols0, cols1, isPropsEqual);\n}\n\nfunction renderMicroColGroup(cols, shrinkWidth) {\n  var colNodes = [];\n  /*\n  for ColProps with spans, it would have been great to make a single <col span=\"\">\n  HOWEVER, Chrome was getting messing up distributing the width to <td>/<th> elements with colspans.\n  SOLUTION: making individual <col> elements makes Chrome behave.\n  */\n\n  var _iterator34 = _createForOfIteratorHelper(cols),\n      _step34;\n\n  try {\n    for (_iterator34.s(); !(_step34 = _iterator34.n()).done;) {\n      var colProps = _step34.value;\n      var span = colProps.span || 1;\n\n      for (var i = 0; i < span; i += 1) {\n        colNodes.push(createElement(\"col\", {\n          style: {\n            width: colProps.width === 'shrink' ? sanitizeShrinkWidth(shrinkWidth) : colProps.width || '',\n            minWidth: colProps.minWidth || ''\n          }\n        }));\n      }\n    }\n  } catch (err) {\n    _iterator34.e(err);\n  } finally {\n    _iterator34.f();\n  }\n\n  return createElement.apply(void 0, ['colgroup', {}].concat(colNodes));\n}\n\nfunction sanitizeShrinkWidth(shrinkWidth) {\n  /* why 4? if we do 0, it will kill any border, which are needed for computeSmallestCellWidth\n  4 accounts for 2 2-pixel borders. TODO: better solution? */\n  return shrinkWidth == null ? 4 : shrinkWidth;\n}\n\nfunction hasShrinkWidth(cols) {\n  var _iterator35 = _createForOfIteratorHelper(cols),\n      _step35;\n\n  try {\n    for (_iterator35.s(); !(_step35 = _iterator35.n()).done;) {\n      var col = _step35.value;\n\n      if (col.width === 'shrink') {\n        return true;\n      }\n    }\n  } catch (err) {\n    _iterator35.e(err);\n  } finally {\n    _iterator35.f();\n  }\n\n  return false;\n}\n\nfunction getScrollGridClassNames(liquid, context) {\n  var classNames = ['fc-scrollgrid', context.theme.getClass('table')];\n\n  if (liquid) {\n    classNames.push('fc-scrollgrid-liquid');\n  }\n\n  return classNames;\n}\n\nfunction getSectionClassNames(sectionConfig, wholeTableVGrow) {\n  var classNames = ['fc-scrollgrid-section', \"fc-scrollgrid-section-\".concat(sectionConfig.type), sectionConfig.className // used?\n  ];\n\n  if (wholeTableVGrow && sectionConfig.liquid && sectionConfig.maxHeight == null) {\n    classNames.push('fc-scrollgrid-section-liquid');\n  }\n\n  if (sectionConfig.isSticky) {\n    classNames.push('fc-scrollgrid-section-sticky');\n  }\n\n  return classNames;\n}\n\nfunction renderScrollShim(arg) {\n  return createElement(\"div\", {\n    className: \"fc-scrollgrid-sticky-shim\",\n    style: {\n      width: arg.clientWidth,\n      minWidth: arg.tableMinWidth\n    }\n  });\n}\n\nfunction getStickyHeaderDates(options) {\n  var stickyHeaderDates = options.stickyHeaderDates;\n\n  if (stickyHeaderDates == null || stickyHeaderDates === 'auto') {\n    stickyHeaderDates = options.height === 'auto' || options.viewHeight === 'auto';\n  }\n\n  return stickyHeaderDates;\n}\n\nfunction getStickyFooterScrollbar(options) {\n  var stickyFooterScrollbar = options.stickyFooterScrollbar;\n\n  if (stickyFooterScrollbar == null || stickyFooterScrollbar === 'auto') {\n    stickyFooterScrollbar = options.height === 'auto' || options.viewHeight === 'auto';\n  }\n\n  return stickyFooterScrollbar;\n}\n\nvar SimpleScrollGrid = /*#__PURE__*/function (_BaseComponent9) {\n  _inherits(SimpleScrollGrid, _BaseComponent9);\n\n  var _super17 = _createSuper(SimpleScrollGrid);\n\n  function SimpleScrollGrid() {\n    var _this22;\n\n    _classCallCheck(this, SimpleScrollGrid);\n\n    _this22 = _super17.apply(this, arguments);\n    _this22.processCols = memoize(function (a) {\n      return a;\n    }, isColPropsEqual); // so we get same `cols` props every time\n    // yucky to memoize VNodes, but much more efficient for consumers\n\n    _this22.renderMicroColGroup = memoize(renderMicroColGroup);\n    _this22.scrollerRefs = new RefMap();\n    _this22.scrollerElRefs = new RefMap(_this22._handleScrollerEl.bind(_assertThisInitialized(_this22)));\n    _this22.state = {\n      shrinkWidth: null,\n      forceYScrollbars: false,\n      scrollerClientWidths: {},\n      scrollerClientHeights: {}\n    }; // TODO: can do a really simple print-view. dont need to join rows\n\n    _this22.handleSizing = function () {\n      _this22.safeSetState(Object.assign({\n        shrinkWidth: _this22.computeShrinkWidth()\n      }, _this22.computeScrollerDims()));\n    };\n\n    return _this22;\n  }\n\n  _createClass(SimpleScrollGrid, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          state = this.state,\n          context = this.context;\n      var sectionConfigs = props.sections || [];\n      var cols = this.processCols(props.cols);\n      var microColGroupNode = this.renderMicroColGroup(cols, state.shrinkWidth);\n      var classNames = getScrollGridClassNames(props.liquid, context);\n\n      if (props.collapsibleWidth) {\n        classNames.push('fc-scrollgrid-collapsible');\n      } // TODO: make DRY\n\n\n      var configCnt = sectionConfigs.length;\n      var configI = 0;\n      var currentConfig;\n      var headSectionNodes = [];\n      var bodySectionNodes = [];\n      var footSectionNodes = [];\n\n      while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'header') {\n        headSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));\n        configI += 1;\n      }\n\n      while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'body') {\n        bodySectionNodes.push(this.renderSection(currentConfig, microColGroupNode, false));\n        configI += 1;\n      }\n\n      while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'footer') {\n        footSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));\n        configI += 1;\n      } // firefox bug: when setting height on table and there is a thead or tfoot,\n      // the necessary height:100% on the liquid-height body section forces the *whole* table to be taller. (bug #5524)\n      // use getCanVGrowWithinCell as a way to detect table-stupid firefox.\n      // if so, use a simpler dom structure, jam everything into a lone tbody.\n\n\n      var isBuggy = !getCanVGrowWithinCell();\n      var roleAttrs = {\n        role: 'rowgroup'\n      };\n      return createElement('table', {\n        role: 'grid',\n        className: classNames.join(' '),\n        style: {\n          height: props.height\n        }\n      }, Boolean(!isBuggy && headSectionNodes.length) && createElement.apply(void 0, ['thead', roleAttrs].concat(headSectionNodes)), Boolean(!isBuggy && bodySectionNodes.length) && createElement.apply(void 0, ['tbody', roleAttrs].concat(bodySectionNodes)), Boolean(!isBuggy && footSectionNodes.length) && createElement.apply(void 0, ['tfoot', roleAttrs].concat(footSectionNodes)), isBuggy && createElement.apply(void 0, ['tbody', roleAttrs].concat(headSectionNodes, bodySectionNodes, footSectionNodes)));\n    }\n  }, {\n    key: \"renderSection\",\n    value: function renderSection(sectionConfig, microColGroupNode, isHeader) {\n      if ('outerContent' in sectionConfig) {\n        return createElement(Fragment, {\n          key: sectionConfig.key\n        }, sectionConfig.outerContent);\n      }\n\n      return createElement(\"tr\", {\n        key: sectionConfig.key,\n        role: \"presentation\",\n        className: getSectionClassNames(sectionConfig, this.props.liquid).join(' ')\n      }, this.renderChunkTd(sectionConfig, microColGroupNode, sectionConfig.chunk, isHeader));\n    }\n  }, {\n    key: \"renderChunkTd\",\n    value: function renderChunkTd(sectionConfig, microColGroupNode, chunkConfig, isHeader) {\n      if ('outerContent' in chunkConfig) {\n        return chunkConfig.outerContent;\n      }\n\n      var props = this.props;\n      var _this$state = this.state,\n          forceYScrollbars = _this$state.forceYScrollbars,\n          scrollerClientWidths = _this$state.scrollerClientWidths,\n          scrollerClientHeights = _this$state.scrollerClientHeights;\n      var needsYScrolling = getAllowYScrolling(props, sectionConfig); // TODO: do lazily. do in section config?\n\n      var isLiquid = getSectionHasLiquidHeight(props, sectionConfig); // for `!props.liquid` - is WHOLE scrollgrid natural height?\n      // TODO: do same thing in advanced scrollgrid? prolly not b/c always has horizontal scrollbars\n\n      var overflowY = !props.liquid ? 'visible' : forceYScrollbars ? 'scroll' : !needsYScrolling ? 'hidden' : 'auto';\n      var sectionKey = sectionConfig.key;\n      var content = renderChunkContent(sectionConfig, chunkConfig, {\n        tableColGroupNode: microColGroupNode,\n        tableMinWidth: '',\n        clientWidth: !props.collapsibleWidth && scrollerClientWidths[sectionKey] !== undefined ? scrollerClientWidths[sectionKey] : null,\n        clientHeight: scrollerClientHeights[sectionKey] !== undefined ? scrollerClientHeights[sectionKey] : null,\n        expandRows: sectionConfig.expandRows,\n        syncRowHeights: false,\n        rowSyncHeights: [],\n        reportRowHeightChange: function reportRowHeightChange() {}\n      }, isHeader);\n      return createElement(isHeader ? 'th' : 'td', {\n        ref: chunkConfig.elRef,\n        role: 'presentation'\n      }, createElement(\"div\", {\n        className: \"fc-scroller-harness\".concat(isLiquid ? ' fc-scroller-harness-liquid' : '')\n      }, createElement(Scroller, {\n        ref: this.scrollerRefs.createRef(sectionKey),\n        elRef: this.scrollerElRefs.createRef(sectionKey),\n        overflowY: overflowY,\n        overflowX: !props.liquid ? 'visible' : 'hidden'\n        /* natural height? */\n        ,\n        maxHeight: sectionConfig.maxHeight,\n        liquid: isLiquid,\n        liquidIsAbsolute // because its within a harness\n        : true\n      }, content)));\n    }\n  }, {\n    key: \"_handleScrollerEl\",\n    value: function _handleScrollerEl(scrollerEl, key) {\n      var section = getSectionByKey(this.props.sections, key);\n\n      if (section) {\n        setRef(section.chunk.scrollerElRef, scrollerEl);\n      }\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.handleSizing();\n      this.context.addResizeHandler(this.handleSizing);\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      // TODO: need better solution when state contains non-sizing things\n      this.handleSizing();\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.context.removeResizeHandler(this.handleSizing);\n    }\n  }, {\n    key: \"computeShrinkWidth\",\n    value: function computeShrinkWidth() {\n      return hasShrinkWidth(this.props.cols) ? _computeShrinkWidth(this.scrollerElRefs.getAll()) : 0;\n    }\n  }, {\n    key: \"computeScrollerDims\",\n    value: function computeScrollerDims() {\n      var scrollbarWidth = getScrollbarWidths();\n      var scrollerRefs = this.scrollerRefs,\n          scrollerElRefs = this.scrollerElRefs;\n      var forceYScrollbars = false;\n      var scrollerClientWidths = {};\n      var scrollerClientHeights = {};\n\n      for (var sectionKey in scrollerRefs.currentMap) {\n        var scroller = scrollerRefs.currentMap[sectionKey];\n\n        if (scroller && scroller.needsYScrolling()) {\n          forceYScrollbars = true;\n          break;\n        }\n      }\n\n      var _iterator36 = _createForOfIteratorHelper(this.props.sections),\n          _step36;\n\n      try {\n        for (_iterator36.s(); !(_step36 = _iterator36.n()).done;) {\n          var section = _step36.value;\n          var _sectionKey = section.key;\n          var scrollerEl = scrollerElRefs.currentMap[_sectionKey];\n\n          if (scrollerEl) {\n            var harnessEl = scrollerEl.parentNode; // TODO: weird way to get this. need harness b/c doesn't include table borders\n\n            scrollerClientWidths[_sectionKey] = Math.floor(harnessEl.getBoundingClientRect().width - (forceYScrollbars ? scrollbarWidth.y // use global because scroller might not have scrollbars yet but will need them in future\n            : 0));\n            scrollerClientHeights[_sectionKey] = Math.floor(harnessEl.getBoundingClientRect().height);\n          }\n        }\n      } catch (err) {\n        _iterator36.e(err);\n      } finally {\n        _iterator36.f();\n      }\n\n      return {\n        forceYScrollbars: forceYScrollbars,\n        scrollerClientWidths: scrollerClientWidths,\n        scrollerClientHeights: scrollerClientHeights\n      };\n    }\n  }]);\n\n  return SimpleScrollGrid;\n}(BaseComponent);\n\nSimpleScrollGrid.addStateEquality({\n  scrollerClientWidths: isPropsEqual,\n  scrollerClientHeights: isPropsEqual\n});\n\nfunction getSectionByKey(sections, key) {\n  var _iterator37 = _createForOfIteratorHelper(sections),\n      _step37;\n\n  try {\n    for (_iterator37.s(); !(_step37 = _iterator37.n()).done;) {\n      var section = _step37.value;\n\n      if (section.key === key) {\n        return section;\n      }\n    }\n  } catch (err) {\n    _iterator37.e(err);\n  } finally {\n    _iterator37.f();\n  }\n\n  return null;\n}\n\nvar EventContainer = /*#__PURE__*/function (_BaseComponent10) {\n  _inherits(EventContainer, _BaseComponent10);\n\n  var _super18 = _createSuper(EventContainer);\n\n  function EventContainer() {\n    var _this23;\n\n    _classCallCheck(this, EventContainer);\n\n    _this23 = _super18.apply(this, arguments);\n\n    _this23.handleEl = function (el) {\n      _this23.el = el;\n\n      if (el) {\n        setElSeg(el, _this23.props.seg);\n      }\n    };\n\n    return _this23;\n  }\n\n  _createClass(EventContainer, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          context = this.context;\n      var options = context.options;\n      var seg = props.seg;\n      var eventRange = seg.eventRange;\n      var ui = eventRange.ui;\n      var renderProps = {\n        event: new EventImpl(context, eventRange.def, eventRange.instance),\n        view: context.viewApi,\n        timeText: props.timeText,\n        textColor: ui.textColor,\n        backgroundColor: ui.backgroundColor,\n        borderColor: ui.borderColor,\n        isDraggable: !props.disableDragging && computeSegDraggable(seg, context),\n        isStartResizable: !props.disableResizing && computeSegStartResizable(seg, context),\n        isEndResizable: !props.disableResizing && computeSegEndResizable(seg),\n        isMirror: Boolean(props.isDragging || props.isResizing || props.isDateSelecting),\n        isStart: Boolean(seg.isStart),\n        isEnd: Boolean(seg.isEnd),\n        isPast: Boolean(props.isPast),\n        isFuture: Boolean(props.isFuture),\n        isToday: Boolean(props.isToday),\n        isSelected: Boolean(props.isSelected),\n        isDragging: Boolean(props.isDragging),\n        isResizing: Boolean(props.isResizing)\n      };\n      return createElement(ContentContainer, Object.assign({}, props\n      /* contains children */\n      , {\n        elRef: this.handleEl,\n        elClasses: [].concat(_toConsumableArray(getEventClassNames(renderProps)), _toConsumableArray(seg.eventRange.ui.classNames), _toConsumableArray(props.elClasses || [])),\n        renderProps: renderProps,\n        generatorName: \"eventContent\",\n        customGenerator: options.eventContent,\n        defaultGenerator: props.defaultGenerator,\n        classNameGenerator: options.eventClassNames,\n        didMount: options.eventDidMount,\n        willUnmount: options.eventWillUnmount\n      }));\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      if (this.el && this.props.seg !== prevProps.seg) {\n        setElSeg(this.el, this.props.seg);\n      }\n    }\n  }]);\n\n  return EventContainer;\n}(BaseComponent); // should not be a purecomponent\n\n\nvar StandardEvent = /*#__PURE__*/function (_BaseComponent11) {\n  _inherits(StandardEvent, _BaseComponent11);\n\n  var _super19 = _createSuper(StandardEvent);\n\n  function StandardEvent() {\n    _classCallCheck(this, StandardEvent);\n\n    return _super19.apply(this, arguments);\n  }\n\n  _createClass(StandardEvent, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          context = this.context;\n      var options = context.options;\n      var seg = props.seg;\n      var ui = seg.eventRange.ui;\n      var timeFormat = options.eventTimeFormat || props.defaultTimeFormat;\n      var timeText = buildSegTimeText(seg, timeFormat, context, props.defaultDisplayEventTime, props.defaultDisplayEventEnd);\n      return createElement(EventContainer, Object.assign({}, props\n      /* includes elRef */\n      , {\n        elTag: \"a\",\n        elStyle: {\n          borderColor: ui.borderColor,\n          backgroundColor: ui.backgroundColor\n        },\n        elAttrs: getSegAnchorAttrs(seg, context),\n        defaultGenerator: renderInnerContent$1,\n        timeText: timeText\n      }), function (InnerContent, eventContentArg) {\n        return createElement(Fragment, null, createElement(InnerContent, {\n          elTag: \"div\",\n          elClasses: ['fc-event-main'],\n          elStyle: {\n            color: eventContentArg.textColor\n          }\n        }), Boolean(eventContentArg.isStartResizable) && createElement(\"div\", {\n          className: \"fc-event-resizer fc-event-resizer-start\"\n        }), Boolean(eventContentArg.isEndResizable) && createElement(\"div\", {\n          className: \"fc-event-resizer fc-event-resizer-end\"\n        }));\n      });\n    }\n  }]);\n\n  return StandardEvent;\n}(BaseComponent);\n\nfunction renderInnerContent$1(innerProps) {\n  return createElement(\"div\", {\n    className: \"fc-event-main-frame\"\n  }, innerProps.timeText && createElement(\"div\", {\n    className: \"fc-event-time\"\n  }, innerProps.timeText), createElement(\"div\", {\n    className: \"fc-event-title-container\"\n  }, createElement(\"div\", {\n    className: \"fc-event-title fc-sticky\"\n  }, innerProps.event.title || createElement(Fragment, null, \"\\xA0\"))));\n}\n\nvar NowIndicatorContainer = function NowIndicatorContainer(props) {\n  return createElement(ViewContextType.Consumer, null, function (context) {\n    var options = context.options;\n    var renderProps = {\n      isAxis: props.isAxis,\n      date: context.dateEnv.toDate(props.date),\n      view: context.viewApi\n    };\n    return createElement(ContentContainer, Object.assign({}, props\n    /* includes children */\n    , {\n      elTag: props.elTag || 'div',\n      renderProps: renderProps,\n      generatorName: \"nowIndicatorContent\",\n      customGenerator: options.nowIndicatorContent,\n      classNameGenerator: options.nowIndicatorClassNames,\n      didMount: options.nowIndicatorDidMount,\n      willUnmount: options.nowIndicatorWillUnmount\n    }));\n  });\n};\n\nvar DAY_NUM_FORMAT = createFormatter({\n  day: 'numeric'\n});\n\nvar DayCellContainer = /*#__PURE__*/function (_BaseComponent12) {\n  _inherits(DayCellContainer, _BaseComponent12);\n\n  var _super20 = _createSuper(DayCellContainer);\n\n  function DayCellContainer() {\n    var _this24;\n\n    _classCallCheck(this, DayCellContainer);\n\n    _this24 = _super20.apply(this, arguments);\n    _this24.refineRenderProps = memoizeObjArg(refineRenderProps);\n    return _this24;\n  }\n\n  _createClass(DayCellContainer, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          context = this.context;\n      var options = context.options;\n      var renderProps = this.refineRenderProps({\n        date: props.date,\n        dateProfile: props.dateProfile,\n        todayRange: props.todayRange,\n        isMonthStart: props.isMonthStart || false,\n        showDayNumber: props.showDayNumber,\n        extraRenderProps: props.extraRenderProps,\n        viewApi: context.viewApi,\n        dateEnv: context.dateEnv,\n        monthStartFormat: options.monthStartFormat\n      });\n      return createElement(ContentContainer, Object.assign({}, props\n      /* includes children */\n      , {\n        elClasses: [].concat(_toConsumableArray(getDayClassNames(renderProps, context.theme)), _toConsumableArray(props.elClasses || [])),\n        elAttrs: Object.assign(Object.assign({}, props.elAttrs), renderProps.isDisabled ? {} : {\n          'data-date': formatDayString(props.date)\n        }),\n        renderProps: renderProps,\n        generatorName: \"dayCellContent\",\n        customGenerator: options.dayCellContent,\n        defaultGenerator: props.defaultGenerator,\n        classNameGenerator: // don't use custom classNames if disabled\n        renderProps.isDisabled ? undefined : options.dayCellClassNames,\n        didMount: options.dayCellDidMount,\n        willUnmount: options.dayCellWillUnmount\n      }));\n    }\n  }]);\n\n  return DayCellContainer;\n}(BaseComponent);\n\nfunction hasCustomDayCellContent(options) {\n  return Boolean(options.dayCellContent || hasCustomRenderingHandler('dayCellContent', options));\n}\n\nfunction refineRenderProps(raw) {\n  var date = raw.date,\n      dateEnv = raw.dateEnv,\n      dateProfile = raw.dateProfile,\n      isMonthStart = raw.isMonthStart;\n  var dayMeta = getDateMeta(date, raw.todayRange, null, dateProfile);\n  var dayNumberText = raw.showDayNumber ? dateEnv.format(date, isMonthStart ? raw.monthStartFormat : DAY_NUM_FORMAT) : '';\n  return Object.assign(Object.assign(Object.assign({\n    date: dateEnv.toDate(date),\n    view: raw.viewApi\n  }, dayMeta), {\n    isMonthStart: isMonthStart,\n    dayNumberText: dayNumberText\n  }), raw.extraRenderProps);\n}\n\nvar BgEvent = /*#__PURE__*/function (_BaseComponent13) {\n  _inherits(BgEvent, _BaseComponent13);\n\n  var _super21 = _createSuper(BgEvent);\n\n  function BgEvent() {\n    _classCallCheck(this, BgEvent);\n\n    return _super21.apply(this, arguments);\n  }\n\n  _createClass(BgEvent, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      var seg = props.seg;\n      return createElement(EventContainer, {\n        elTag: \"div\",\n        elClasses: ['fc-bg-event'],\n        elStyle: {\n          backgroundColor: seg.eventRange.ui.backgroundColor\n        },\n        defaultGenerator: renderInnerContent,\n        seg: seg,\n        timeText: \"\",\n        isDragging: false,\n        isResizing: false,\n        isDateSelecting: false,\n        isSelected: false,\n        isPast: props.isPast,\n        isFuture: props.isFuture,\n        isToday: props.isToday,\n        disableDragging: true,\n        disableResizing: true\n      });\n    }\n  }]);\n\n  return BgEvent;\n}(BaseComponent);\n\nfunction renderInnerContent(props) {\n  var title = props.event.title;\n  return title && createElement(\"div\", {\n    className: \"fc-event-title\"\n  }, props.event.title);\n}\n\nfunction renderFill(fillType) {\n  return createElement(\"div\", {\n    className: \"fc-\".concat(fillType)\n  });\n}\n\nvar WeekNumberContainer = function WeekNumberContainer(props) {\n  return createElement(ViewContextType.Consumer, null, function (context) {\n    var dateEnv = context.dateEnv,\n        options = context.options;\n    var date = props.date;\n    var format = options.weekNumberFormat || props.defaultFormat;\n    var num = dateEnv.computeWeekNumber(date); // TODO: somehow use for formatting as well?\n\n    var text = dateEnv.format(date, format);\n    var renderProps = {\n      num: num,\n      text: text,\n      date: date\n    };\n    return createElement(ContentContainer // why isn't WeekNumberContentArg being auto-detected?\n    , Object.assign({}, props\n    /* includes children */\n    , {\n      renderProps: renderProps,\n      generatorName: \"weekNumberContent\",\n      customGenerator: options.weekNumberContent,\n      defaultGenerator: renderInner,\n      classNameGenerator: options.weekNumberClassNames,\n      didMount: options.weekNumberDidMount,\n      willUnmount: options.weekNumberWillUnmount\n    }));\n  });\n};\n\nfunction renderInner(innerProps) {\n  return innerProps.text;\n}\n\nvar PADDING_FROM_VIEWPORT = 10;\n\nvar Popover = /*#__PURE__*/function (_BaseComponent14) {\n  _inherits(Popover, _BaseComponent14);\n\n  var _super22 = _createSuper(Popover);\n\n  function Popover() {\n    var _this25;\n\n    _classCallCheck(this, Popover);\n\n    _this25 = _super22.apply(this, arguments);\n    _this25.state = {\n      titleId: getUniqueDomId()\n    };\n\n    _this25.handleRootEl = function (el) {\n      _this25.rootEl = el;\n\n      if (_this25.props.elRef) {\n        setRef(_this25.props.elRef, el);\n      }\n    }; // Triggered when the user clicks *anywhere* in the document, for the autoHide feature\n\n\n    _this25.handleDocumentMouseDown = function (ev) {\n      // only hide the popover if the click happened outside the popover\n      var target = getEventTargetViaRoot(ev);\n\n      if (!_this25.rootEl.contains(target)) {\n        _this25.handleCloseClick();\n      }\n    };\n\n    _this25.handleDocumentKeyDown = function (ev) {\n      if (ev.key === 'Escape') {\n        _this25.handleCloseClick();\n      }\n    };\n\n    _this25.handleCloseClick = function () {\n      var onClose = _this25.props.onClose;\n\n      if (onClose) {\n        onClose();\n      }\n    };\n\n    return _this25;\n  }\n\n  _createClass(Popover, [{\n    key: \"render\",\n    value: function render() {\n      var _this$context3 = this.context,\n          theme = _this$context3.theme,\n          options = _this$context3.options;\n      var props = this.props,\n          state = this.state;\n      var classNames = ['fc-popover', theme.getClass('popover')].concat(props.extraClassNames || []);\n      return createPortal(createElement(\"div\", Object.assign({}, props.extraAttrs, {\n        id: props.id,\n        className: classNames.join(' '),\n        \"aria-labelledby\": state.titleId,\n        ref: this.handleRootEl\n      }), createElement(\"div\", {\n        className: 'fc-popover-header ' + theme.getClass('popoverHeader')\n      }, createElement(\"span\", {\n        className: \"fc-popover-title\",\n        id: state.titleId\n      }, props.title), createElement(\"span\", {\n        className: 'fc-popover-close ' + theme.getIconClass('close'),\n        title: options.closeHint,\n        onClick: this.handleCloseClick\n      })), createElement(\"div\", {\n        className: 'fc-popover-body ' + theme.getClass('popoverContent')\n      }, props.children)), props.parentEl);\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      document.addEventListener('mousedown', this.handleDocumentMouseDown);\n      document.addEventListener('keydown', this.handleDocumentKeyDown);\n      this.updateSize();\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      document.removeEventListener('mousedown', this.handleDocumentMouseDown);\n      document.removeEventListener('keydown', this.handleDocumentKeyDown);\n    }\n  }, {\n    key: \"updateSize\",\n    value: function updateSize() {\n      var isRtl = this.context.isRtl;\n      var _this$props5 = this.props,\n          alignmentEl = _this$props5.alignmentEl,\n          alignGridTop = _this$props5.alignGridTop;\n      var rootEl = this.rootEl;\n      var alignmentRect = computeClippedClientRect(alignmentEl);\n\n      if (alignmentRect) {\n        var popoverDims = rootEl.getBoundingClientRect(); // position relative to viewport\n\n        var popoverTop = alignGridTop ? elementClosest(alignmentEl, '.fc-scrollgrid').getBoundingClientRect().top : alignmentRect.top;\n        var popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left; // constrain\n\n        popoverTop = Math.max(popoverTop, PADDING_FROM_VIEWPORT);\n        popoverLeft = Math.min(popoverLeft, document.documentElement.clientWidth - PADDING_FROM_VIEWPORT - popoverDims.width);\n        popoverLeft = Math.max(popoverLeft, PADDING_FROM_VIEWPORT);\n        var origin = rootEl.offsetParent.getBoundingClientRect();\n        applyStyle(rootEl, {\n          top: popoverTop - origin.top,\n          left: popoverLeft - origin.left\n        });\n      }\n    }\n  }]);\n\n  return Popover;\n}(BaseComponent);\n\nvar MorePopover = /*#__PURE__*/function (_DateComponent) {\n  _inherits(MorePopover, _DateComponent);\n\n  var _super23 = _createSuper(MorePopover);\n\n  function MorePopover() {\n    var _this26;\n\n    _classCallCheck(this, MorePopover);\n\n    _this26 = _super23.apply(this, arguments);\n\n    _this26.handleRootEl = function (rootEl) {\n      _this26.rootEl = rootEl;\n\n      if (rootEl) {\n        _this26.context.registerInteractiveComponent(_assertThisInitialized(_this26), {\n          el: rootEl,\n          useEventCenter: false\n        });\n      } else {\n        _this26.context.unregisterInteractiveComponent(_assertThisInitialized(_this26));\n      }\n    };\n\n    return _this26;\n  }\n\n  _createClass(MorePopover, [{\n    key: \"render\",\n    value: function render() {\n      var _this$context4 = this.context,\n          options = _this$context4.options,\n          dateEnv = _this$context4.dateEnv;\n      var props = this.props;\n      var startDate = props.startDate,\n          todayRange = props.todayRange,\n          dateProfile = props.dateProfile;\n      var title = dateEnv.format(startDate, options.dayPopoverFormat);\n      return createElement(DayCellContainer, {\n        elRef: this.handleRootEl,\n        date: startDate,\n        dateProfile: dateProfile,\n        todayRange: todayRange\n      }, function (InnerContent, renderProps, elAttrs) {\n        return createElement(Popover, {\n          elRef: elAttrs.ref,\n          id: props.id,\n          title: title,\n          extraClassNames: ['fc-more-popover'].concat(elAttrs.className || []),\n          extraAttrs: elAttrs\n          /* TODO: make these time-based when not whole-day? */\n          ,\n          parentEl: props.parentEl,\n          alignmentEl: props.alignmentEl,\n          alignGridTop: props.alignGridTop,\n          onClose: props.onClose\n        }, hasCustomDayCellContent(options) && createElement(InnerContent, {\n          elTag: \"div\",\n          elClasses: ['fc-more-popover-misc']\n        }), props.children);\n      });\n    }\n  }, {\n    key: \"queryHit\",\n    value: function queryHit(positionLeft, positionTop, elWidth, elHeight) {\n      var rootEl = this.rootEl,\n          props = this.props;\n\n      if (positionLeft >= 0 && positionLeft < elWidth && positionTop >= 0 && positionTop < elHeight) {\n        return {\n          dateProfile: props.dateProfile,\n          dateSpan: Object.assign({\n            allDay: !props.forceTimed,\n            range: {\n              start: props.startDate,\n              end: props.endDate\n            }\n          }, props.extraDateSpan),\n          dayEl: rootEl,\n          rect: {\n            left: 0,\n            top: 0,\n            right: elWidth,\n            bottom: elHeight\n          },\n          layer: 1 // important when comparing with hits from other components\n\n        };\n      }\n\n      return null;\n    }\n  }]);\n\n  return MorePopover;\n}(DateComponent);\n\nvar MoreLinkContainer = /*#__PURE__*/function (_BaseComponent15) {\n  _inherits(MoreLinkContainer, _BaseComponent15);\n\n  var _super24 = _createSuper(MoreLinkContainer);\n\n  function MoreLinkContainer() {\n    var _this27;\n\n    _classCallCheck(this, MoreLinkContainer);\n\n    _this27 = _super24.apply(this, arguments);\n    _this27.state = {\n      isPopoverOpen: false,\n      popoverId: getUniqueDomId()\n    };\n\n    _this27.handleLinkEl = function (linkEl) {\n      _this27.linkEl = linkEl;\n\n      if (_this27.props.elRef) {\n        setRef(_this27.props.elRef, linkEl);\n      }\n    };\n\n    _this27.handleClick = function (ev) {\n      var _assertThisInitialize = _assertThisInitialized(_this27),\n          props = _assertThisInitialize.props,\n          context = _assertThisInitialize.context;\n\n      var moreLinkClick = context.options.moreLinkClick;\n      var date = computeRange(props).start;\n\n      function buildPublicSeg(seg) {\n        var _seg$eventRange3 = seg.eventRange,\n            def = _seg$eventRange3.def,\n            instance = _seg$eventRange3.instance,\n            range = _seg$eventRange3.range;\n        return {\n          event: new EventImpl(context, def, instance),\n          start: context.dateEnv.toDate(range.start),\n          end: context.dateEnv.toDate(range.end),\n          isStart: seg.isStart,\n          isEnd: seg.isEnd\n        };\n      }\n\n      if (typeof moreLinkClick === 'function') {\n        moreLinkClick = moreLinkClick({\n          date: date,\n          allDay: Boolean(props.allDayDate),\n          allSegs: props.allSegs.map(buildPublicSeg),\n          hiddenSegs: props.hiddenSegs.map(buildPublicSeg),\n          jsEvent: ev,\n          view: context.viewApi\n        });\n      }\n\n      if (!moreLinkClick || moreLinkClick === 'popover') {\n        _this27.setState({\n          isPopoverOpen: true\n        });\n      } else if (typeof moreLinkClick === 'string') {\n        // a view name\n        context.calendarApi.zoomTo(date, moreLinkClick);\n      }\n    };\n\n    _this27.handlePopoverClose = function () {\n      _this27.setState({\n        isPopoverOpen: false\n      });\n    };\n\n    return _this27;\n  }\n\n  _createClass(MoreLinkContainer, [{\n    key: \"render\",\n    value: function render() {\n      var _this28 = this;\n\n      var props = this.props,\n          state = this.state;\n      return createElement(ViewContextType.Consumer, null, function (context) {\n        var viewApi = context.viewApi,\n            options = context.options,\n            calendarApi = context.calendarApi;\n        var moreLinkText = options.moreLinkText;\n        var moreCnt = props.moreCnt;\n        var range = computeRange(props);\n        var text = typeof moreLinkText === 'function' // TODO: eventually use formatWithOrdinals\n        ? moreLinkText.call(calendarApi, moreCnt) : \"+\".concat(moreCnt, \" \").concat(moreLinkText);\n        var hint = formatWithOrdinals(options.moreLinkHint, [moreCnt], text);\n        var renderProps = {\n          num: moreCnt,\n          shortText: \"+\".concat(moreCnt),\n          text: text,\n          view: viewApi\n        };\n        return createElement(Fragment, null, Boolean(props.moreCnt) && createElement(ContentContainer, {\n          elTag: props.elTag || 'a',\n          elRef: _this28.handleLinkEl,\n          elClasses: [].concat(_toConsumableArray(props.elClasses || []), ['fc-more-link']),\n          elStyle: props.elStyle,\n          elAttrs: Object.assign(Object.assign(Object.assign({}, props.elAttrs), createAriaClickAttrs(_this28.handleClick)), {\n            title: hint,\n            'aria-expanded': state.isPopoverOpen,\n            'aria-controls': state.isPopoverOpen ? state.popoverId : ''\n          }),\n          renderProps: renderProps,\n          generatorName: \"moreLinkContent\",\n          customGenerator: options.moreLinkContent,\n          defaultGenerator: props.defaultGenerator || renderMoreLinkInner,\n          classNameGenerator: options.moreLinkClassNames,\n          didMount: options.moreLinkDidMount,\n          willUnmount: options.moreLinkWillUnmount\n        }, props.children), state.isPopoverOpen && createElement(MorePopover, {\n          id: state.popoverId,\n          startDate: range.start,\n          endDate: range.end,\n          dateProfile: props.dateProfile,\n          todayRange: props.todayRange,\n          extraDateSpan: props.extraDateSpan,\n          parentEl: _this28.parentEl,\n          alignmentEl: props.alignmentElRef ? props.alignmentElRef.current : _this28.linkEl,\n          alignGridTop: props.alignGridTop,\n          forceTimed: props.forceTimed,\n          onClose: _this28.handlePopoverClose\n        }, props.popoverContent()));\n      });\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.updateParentEl();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      this.updateParentEl();\n    }\n  }, {\n    key: \"updateParentEl\",\n    value: function updateParentEl() {\n      if (this.linkEl) {\n        this.parentEl = elementClosest(this.linkEl, '.fc-view-harness');\n      }\n    }\n  }]);\n\n  return MoreLinkContainer;\n}(BaseComponent);\n\nfunction renderMoreLinkInner(props) {\n  return props.text;\n}\n\nfunction computeRange(props) {\n  if (props.allDayDate) {\n    return {\n      start: props.allDayDate,\n      end: addDays(props.allDayDate, 1)\n    };\n  }\n\n  var hiddenSegs = props.hiddenSegs;\n  return {\n    start: computeEarliestSegStart(hiddenSegs),\n    end: computeLatestSegEnd(hiddenSegs)\n  };\n}\n\nfunction computeEarliestSegStart(segs) {\n  return segs.reduce(pickEarliestStart).eventRange.range.start;\n}\n\nfunction pickEarliestStart(seg0, seg1) {\n  return seg0.eventRange.range.start < seg1.eventRange.range.start ? seg0 : seg1;\n}\n\nfunction computeLatestSegEnd(segs) {\n  return segs.reduce(pickLatestEnd).eventRange.range.end;\n}\n\nfunction pickLatestEnd(seg0, seg1) {\n  return seg0.eventRange.range.end > seg1.eventRange.range.end ? seg0 : seg1;\n}\n\nvar Store = /*#__PURE__*/function () {\n  function Store() {\n    _classCallCheck(this, Store);\n\n    this.handlers = [];\n  }\n\n  _createClass(Store, [{\n    key: \"set\",\n    value: function set(value) {\n      this.currentValue = value;\n\n      var _iterator38 = _createForOfIteratorHelper(this.handlers),\n          _step38;\n\n      try {\n        for (_iterator38.s(); !(_step38 = _iterator38.n()).done;) {\n          var handler = _step38.value;\n          handler(value);\n        }\n      } catch (err) {\n        _iterator38.e(err);\n      } finally {\n        _iterator38.f();\n      }\n    }\n  }, {\n    key: \"subscribe\",\n    value: function subscribe(handler) {\n      this.handlers.push(handler);\n\n      if (this.currentValue !== undefined) {\n        handler(this.currentValue);\n      }\n    }\n  }]);\n\n  return Store;\n}();\n/*\nSubscribers will get a LIST of CustomRenderings\n*/\n\n\nvar CustomRenderingStore = /*#__PURE__*/function (_Store) {\n  _inherits(CustomRenderingStore, _Store);\n\n  var _super25 = _createSuper(CustomRenderingStore);\n\n  function CustomRenderingStore() {\n    var _this29;\n\n    _classCallCheck(this, CustomRenderingStore);\n\n    _this29 = _super25.apply(this, arguments);\n    _this29.map = new Map();\n    return _this29;\n  } // for consistent order\n\n\n  _createClass(CustomRenderingStore, [{\n    key: \"handle\",\n    value: function handle(customRendering) {\n      var map = this.map;\n      var updated = false;\n\n      if (customRendering.isActive) {\n        map.set(customRendering.id, customRendering);\n        updated = true;\n      } else if (map.has(customRendering.id)) {\n        map.delete(customRendering.id);\n        updated = true;\n      }\n\n      if (updated) {\n        this.set(map);\n      }\n    }\n  }]);\n\n  return CustomRenderingStore;\n}(Store);\n\nexport { elementClosest as $, memoizeObjArg as A, BaseComponent as B, ContentContainer as C, DelayedRunner as D, isPropsEqual as E, Emitter as F, getInitialDate as G, rangeContainsMarker as H, createEmptyEventStore as I, reduceCurrentDate as J, reduceEventStore as K, rezoneEventStoreDates as L, mergeRawOptions as M, BASE_OPTION_REFINERS as N, CALENDAR_LISTENER_REFINERS as O, CALENDAR_OPTION_REFINERS as P, COMPLEX_OPTION_COMPARATORS as Q, VIEW_OPTION_REFINERS as R, DateEnv as S, Theme as T, DateProfileGenerator as U, ViewContextType as V, createEventUi as W, parseBusinessHours as X, setRef as Y, Interaction as Z, getElSeg as _, mapHash as a, getSlotClassNames as a$, EventImpl as a0, listenBySelector as a1, listenToHoverBySelector as a2, PureComponent as a3, buildViewContext as a4, getUniqueDomId as a5, parseInteractionSettings as a6, interactionSettingsStore as a7, getNow as a8, CalendarImpl as a9, diffDates as aA, removeExact as aB, memoizeArraylike as aC, memoizeHashlike as aD, intersectRects as aE, pointInsideRect as aF, constrainPoint as aG, getRectCenter as aH, diffPoints as aI, translateRect as aJ, compareObjs as aK, collectFromHash as aL, findElements as aM, findDirectChildren as aN, removeElement as aO, applyStyle as aP, elementMatches as aQ, getEventTargetViaRoot as aR, parseClassNames as aS, getCanVGrowWithinCell as aT, mergeEventStores as aU, getRelevantEvents as aV, eventTupleToStore as aW, combineEventUis as aX, Splitter as aY, getDayClassNames as aZ, getDateMeta as a_, flushSync as aa, CalendarRoot as ab, RenderId as ac, ensureElHasStyles as ad, applyStyleProp as ae, sliceEventStore as af, JsonRequestError as ag, createContext as ah, refineProps as ai, createEventInstance as aj, parseEventDef as ak, refineEventDef as al, padStart as am, isInt as an, parseFieldSpecs as ao, compareByFieldSpecs as ap, flexibleCompare as aq, preventSelection as ar, allowSelection as as, preventContextMenu as at, allowContextMenu as au, compareNumbers as av, enableCursor as aw, disableCursor as ax, computeVisibleDayRange as ay, isMultiDayRange as az, buildViewClassNames as b, SimpleScrollGrid as b$, buildNavLinkAttrs as b0, preventDefault as b1, whenTransitionDone as b2, computeInnerRect as b3, computeEdges as b4, getClippingParents as b5, computeRect as b6, rangesEqual as b7, rangesIntersect as b8, rangeContainsRange as b9, SegHierarchy as bA, buildEntryKey as bB, getEntrySpanEnd as bC, binarySearch as bD, groupIntersectingEntries as bE, intersectSpans as bF, interactionSettingsToStore as bG, ElementDragging as bH, config as bI, parseDragMeta as bJ, DayHeader as bK, computeFallbackHeaderFormat as bL, TableDateCell as bM, TableDowCell as bN, DaySeriesModel as bO, hasBgRendering as bP, buildSegTimeText as bQ, sortEventSegs as bR, getSegMeta as bS, buildEventRangeKey as bT, getSegAnchorAttrs as bU, DayTableModel as bV, Slicer as bW, applyMutationToEventStore as bX, isPropsValid as bY, isInteractionValid as bZ, isDateSelectionValid as b_, PositionCache as ba, ScrollController as bb, ElementScrollController as bc, WindowScrollController as bd, DateComponent as be, isDateSpansEqual as bf, addMs as bg, addWeeks as bh, diffWeeks as bi, diffWholeWeeks as bj, diffDayAndTime as bk, diffDays as bl, isValidDate as bm, asCleanDays as bn, multiplyDuration as bo, addDurations as bp, asRoughMinutes as bq, asRoughSeconds as br, asRoughMs as bs, wholeDivideDurations as bt, formatIsoTimeString as bu, formatDayString as bv, buildIsoString as bw, formatIsoMonthStr as bx, NamedTimeZoneImpl as by, _parse as bz, greatestDurationDenominator as c, hasShrinkWidth as c0, renderMicroColGroup as c1, getScrollGridClassNames as c2, getSectionClassNames as c3, getSectionHasLiquidHeight as c4, getAllowYScrolling as c5, renderChunkContent as c6, _computeShrinkWidth as c7, sanitizeShrinkWidth as c8, isColPropsEqual as c9, renderScrollShim as ca, getStickyFooterScrollbar as cb, getStickyHeaderDates as cc, Scroller as cd, getScrollbarWidths as ce, RefMap as cf, getIsRtlScrollbarOnLeft as cg, NowTimer as ch, ScrollResponder as ci, StandardEvent as cj, NowIndicatorContainer as ck, DayCellContainer as cl, hasCustomDayCellContent as cm, EventContainer as cn, renderFill as co, BgEvent as cp, WeekNumberContainer as cq, MoreLinkContainer as cr, computeEarliestSegStart as cs, ViewContainer as ct, triggerDateSelect as cu, getDefaultEventEnd as cv, injectStyles as cw, buildElAttrs as cx, CustomRenderingStore as cy, createDuration as d, BASE_OPTION_DEFAULTS as e, arrayToHash as f, guid as g, filterHash as h, isArraysEqual as i, buildEventSourceRefiners as j, formatWithOrdinals as k, buildRangeApiWithTimeZone as l, mergeProps as m, identity as n, intersectRanges as o, parseEventSource as p, startOfDay as q, requestJson as r, subtractDurations as s, addDays as t, unpromisify as u, hashValuesToArray as v, buildEventApis as w, createFormatter as x, diffWholeDays as y, memoize as z };","var n,\n    l,\n    u,\n    i,\n    t,\n    r,\n    o,\n    f,\n    e,\n    c = {},\n    s = [],\n    a = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n\nfunction h(n, l) {\n  for (var u in l) {\n    n[u] = l[u];\n  }\n\n  return n;\n}\n\nfunction v(n) {\n  var l = n.parentNode;\n  l && l.removeChild(n);\n}\n\nfunction y(l, u, i) {\n  var t,\n      r,\n      o,\n      f = {};\n\n  for (o in u) {\n    \"key\" == o ? t = u[o] : \"ref\" == o ? r = u[o] : f[o] = u[o];\n  }\n\n  if (arguments.length > 2 && (f.children = arguments.length > 3 ? n.call(arguments, 2) : i), \"function\" == typeof l && null != l.defaultProps) for (o in l.defaultProps) {\n    void 0 === f[o] && (f[o] = l.defaultProps[o]);\n  }\n  return p(l, f, t, r, null);\n}\n\nfunction p(n, i, t, r, o) {\n  var f = {\n    type: n,\n    props: i,\n    key: t,\n    ref: r,\n    __k: null,\n    __: null,\n    __b: 0,\n    __e: null,\n    __d: void 0,\n    __c: null,\n    __h: null,\n    constructor: void 0,\n    __v: null == o ? ++u : o\n  };\n  return null == o && null != l.vnode && l.vnode(f), f;\n}\n\nfunction d() {\n  return {\n    current: null\n  };\n}\n\nfunction _(n) {\n  return n.children;\n}\n\nfunction k(n, l, u, i, t) {\n  var r;\n\n  for (r in u) {\n    \"children\" === r || \"key\" === r || r in l || g(n, r, null, u[r], i);\n  }\n\n  for (r in l) {\n    t && \"function\" != typeof l[r] || \"children\" === r || \"key\" === r || \"value\" === r || \"checked\" === r || u[r] === l[r] || g(n, r, l[r], u[r], i);\n  }\n}\n\nfunction b(n, l, u) {\n  \"-\" === l[0] ? n.setProperty(l, null == u ? \"\" : u) : n[l] = null == u ? \"\" : \"number\" != typeof u || a.test(l) ? u : u + \"px\";\n}\n\nfunction g(n, l, u, i, t) {\n  var r;\n\n  n: if (\"style\" === l) {\n    if (\"string\" == typeof u) n.style.cssText = u;else {\n      if (\"string\" == typeof i && (n.style.cssText = i = \"\"), i) for (l in i) {\n        u && l in u || b(n.style, l, \"\");\n      }\n      if (u) for (l in u) {\n        i && u[l] === i[l] || b(n.style, l, u[l]);\n      }\n    }\n  } else if (\"o\" === l[0] && \"n\" === l[1]) r = l !== (l = l.replace(/Capture$/, \"\")), l = l.toLowerCase() in n ? l.toLowerCase().slice(2) : l.slice(2), n.l || (n.l = {}), n.l[l + r] = u, u ? i || n.addEventListener(l, r ? w : m, r) : n.removeEventListener(l, r ? w : m, r);else if (\"dangerouslySetInnerHTML\" !== l) {\n    if (t) l = l.replace(/xlink(H|:h)/, \"h\").replace(/sName$/, \"s\");else if (\"width\" !== l && \"height\" !== l && \"href\" !== l && \"list\" !== l && \"form\" !== l && \"tabIndex\" !== l && \"download\" !== l && l in n) try {\n      n[l] = null == u ? \"\" : u;\n      break n;\n    } catch (n) {}\n    \"function\" == typeof u || (null == u || !1 === u && -1 == l.indexOf(\"-\") ? n.removeAttribute(l) : n.setAttribute(l, u));\n  }\n}\n\nfunction m(n) {\n  t = !0;\n\n  try {\n    return this.l[n.type + !1](l.event ? l.event(n) : n);\n  } finally {\n    t = !1;\n  }\n}\n\nfunction w(n) {\n  t = !0;\n\n  try {\n    return this.l[n.type + !0](l.event ? l.event(n) : n);\n  } finally {\n    t = !1;\n  }\n}\n\nfunction x(n, l) {\n  this.props = n, this.context = l;\n}\n\nfunction A(n, l) {\n  if (null == l) return n.__ ? A(n.__, n.__.__k.indexOf(n) + 1) : null;\n\n  for (var u; l < n.__k.length; l++) {\n    if (null != (u = n.__k[l]) && null != u.__e) return u.__e;\n  }\n\n  return \"function\" == typeof n.type ? A(n) : null;\n}\n\nfunction P(n) {\n  var l, u;\n\n  if (null != (n = n.__) && null != n.__c) {\n    for (n.__e = n.__c.base = null, l = 0; l < n.__k.length; l++) {\n      if (null != (u = n.__k[l]) && null != u.__e) {\n        n.__e = n.__c.base = u.__e;\n        break;\n      }\n    }\n\n    return P(n);\n  }\n}\n\nfunction C(n) {\n  t ? setTimeout(n) : f(n);\n}\n\nfunction T(n) {\n  (!n.__d && (n.__d = !0) && r.push(n) && !$.__r++ || o !== l.debounceRendering) && ((o = l.debounceRendering) || C)($);\n}\n\nfunction $() {\n  var n, l, u, i, t, o, f, e;\n\n  for (r.sort(function (n, l) {\n    return n.__v.__b - l.__v.__b;\n  }); n = r.shift();) {\n    n.__d && (l = r.length, i = void 0, t = void 0, f = (o = (u = n).__v).__e, (e = u.__P) && (i = [], (t = h({}, o)).__v = o.__v + 1, M(e, o, t, u.__n, void 0 !== e.ownerSVGElement, null != o.__h ? [f] : null, i, null == f ? A(o) : f, o.__h), N(i, o), o.__e != f && P(o)), r.length > l && r.sort(function (n, l) {\n      return n.__v.__b - l.__v.__b;\n    }));\n  }\n\n  $.__r = 0;\n}\n\nfunction H(n, l, u, i, t, r, o, f, e, a) {\n  var h,\n      v,\n      y,\n      d,\n      k,\n      b,\n      g,\n      m = i && i.__k || s,\n      w = m.length;\n\n  for (u.__k = [], h = 0; h < l.length; h++) {\n    if (null != (d = u.__k[h] = null == (d = l[h]) || \"boolean\" == typeof d ? null : \"string\" == typeof d || \"number\" == typeof d || \"bigint\" == typeof d ? p(null, d, null, null, d) : Array.isArray(d) ? p(_, {\n      children: d\n    }, null, null, null) : d.__b > 0 ? p(d.type, d.props, d.key, d.ref ? d.ref : null, d.__v) : d)) {\n      if (d.__ = u, d.__b = u.__b + 1, null === (y = m[h]) || y && d.key == y.key && d.type === y.type) m[h] = void 0;else for (v = 0; v < w; v++) {\n        if ((y = m[v]) && d.key == y.key && d.type === y.type) {\n          m[v] = void 0;\n          break;\n        }\n\n        y = null;\n      }\n      M(n, d, y = y || c, t, r, o, f, e, a), k = d.__e, (v = d.ref) && y.ref != v && (g || (g = []), y.ref && g.push(y.ref, null, d), g.push(v, d.__c || k, d)), null != k ? (null == b && (b = k), \"function\" == typeof d.type && d.__k === y.__k ? d.__d = e = I(d, e, n) : e = z(n, d, y, m, k, e), \"function\" == typeof u.type && (u.__d = e)) : e && y.__e == e && e.parentNode != n && (e = A(y));\n    }\n  }\n\n  for (u.__e = b, h = w; h--;) {\n    null != m[h] && (\"function\" == typeof u.type && null != m[h].__e && m[h].__e == u.__d && (u.__d = L(i).nextSibling), q(m[h], m[h]));\n  }\n\n  if (g) for (h = 0; h < g.length; h++) {\n    S(g[h], g[++h], g[++h]);\n  }\n}\n\nfunction I(n, l, u) {\n  for (var i, t = n.__k, r = 0; t && r < t.length; r++) {\n    (i = t[r]) && (i.__ = n, l = \"function\" == typeof i.type ? I(i, l, u) : z(u, i, i, t, i.__e, l));\n  }\n\n  return l;\n}\n\nfunction j(n, l) {\n  return l = l || [], null == n || \"boolean\" == typeof n || (Array.isArray(n) ? n.some(function (n) {\n    j(n, l);\n  }) : l.push(n)), l;\n}\n\nfunction z(n, l, u, i, t, r) {\n  var o, f, e;\n  if (void 0 !== l.__d) o = l.__d, l.__d = void 0;else if (null == u || t != r || null == t.parentNode) n: if (null == r || r.parentNode !== n) n.appendChild(t), o = null;else {\n    for (f = r, e = 0; (f = f.nextSibling) && e < i.length; e += 1) {\n      if (f == t) break n;\n    }\n\n    n.insertBefore(t, r), o = r;\n  }\n  return void 0 !== o ? o : t.nextSibling;\n}\n\nfunction L(n) {\n  var l, u, i;\n  if (null == n.type || \"string\" == typeof n.type) return n.__e;\n  if (n.__k) for (l = n.__k.length - 1; l >= 0; l--) {\n    if ((u = n.__k[l]) && (i = L(u))) return i;\n  }\n  return null;\n}\n\nfunction M(n, u, i, t, r, o, f, e, c) {\n  var s,\n      a,\n      v,\n      y,\n      p,\n      d,\n      k,\n      b,\n      g,\n      m,\n      w,\n      A,\n      P,\n      C,\n      T,\n      $ = u.type;\n  if (void 0 !== u.constructor) return null;\n  null != i.__h && (c = i.__h, e = u.__e = i.__e, u.__h = null, o = [e]), (s = l.__b) && s(u);\n\n  try {\n    n: if (\"function\" == typeof $) {\n      if (b = u.props, g = (s = $.contextType) && t[s.__c], m = s ? g ? g.props.value : s.__ : t, i.__c ? k = (a = u.__c = i.__c).__ = a.__E : (\"prototype\" in $ && $.prototype.render ? u.__c = a = new $(b, m) : (u.__c = a = new x(b, m), a.constructor = $, a.render = B), g && g.sub(a), a.props = b, a.state || (a.state = {}), a.context = m, a.__n = t, v = a.__d = !0, a.__h = [], a._sb = []), null == a.__s && (a.__s = a.state), null != $.getDerivedStateFromProps && (a.__s == a.state && (a.__s = h({}, a.__s)), h(a.__s, $.getDerivedStateFromProps(b, a.__s))), y = a.props, p = a.state, a.__v = u, v) null == $.getDerivedStateFromProps && null != a.componentWillMount && a.componentWillMount(), null != a.componentDidMount && a.__h.push(a.componentDidMount);else {\n        if (null == $.getDerivedStateFromProps && b !== y && null != a.componentWillReceiveProps && a.componentWillReceiveProps(b, m), !a.__e && null != a.shouldComponentUpdate && !1 === a.shouldComponentUpdate(b, a.__s, m) || u.__v === i.__v) {\n          for (u.__v !== i.__v && (a.props = b, a.state = a.__s, a.__d = !1), u.__e = i.__e, u.__k = i.__k, u.__k.forEach(function (n) {\n            n && (n.__ = u);\n          }), w = 0; w < a._sb.length; w++) {\n            a.__h.push(a._sb[w]);\n          }\n\n          a._sb = [], a.__h.length && f.push(a);\n          break n;\n        }\n\n        null != a.componentWillUpdate && a.componentWillUpdate(b, a.__s, m), null != a.componentDidUpdate && a.__h.push(function () {\n          a.componentDidUpdate(y, p, d);\n        });\n      }\n\n      if (a.context = m, a.props = b, a.__P = n, A = l.__r, P = 0, \"prototype\" in $ && $.prototype.render) {\n        for (a.state = a.__s, a.__d = !1, A && A(u), s = a.render(a.props, a.state, a.context), C = 0; C < a._sb.length; C++) {\n          a.__h.push(a._sb[C]);\n        }\n\n        a._sb = [];\n      } else do {\n        a.__d = !1, A && A(u), s = a.render(a.props, a.state, a.context), a.state = a.__s;\n      } while (a.__d && ++P < 25);\n\n      a.state = a.__s, null != a.getChildContext && (t = h(h({}, t), a.getChildContext())), v || null == a.getSnapshotBeforeUpdate || (d = a.getSnapshotBeforeUpdate(y, p)), T = null != s && s.type === _ && null == s.key ? s.props.children : s, H(n, Array.isArray(T) ? T : [T], u, i, t, r, o, f, e, c), a.base = u.__e, u.__h = null, a.__h.length && f.push(a), k && (a.__E = a.__ = null), a.__e = !1;\n    } else null == o && u.__v === i.__v ? (u.__k = i.__k, u.__e = i.__e) : u.__e = O(i.__e, u, i, t, r, o, f, c);\n\n    (s = l.diffed) && s(u);\n  } catch (n) {\n    u.__v = null, (c || null != o) && (u.__e = e, u.__h = !!c, o[o.indexOf(e)] = null), l.__e(n, u, i);\n  }\n}\n\nfunction N(n, u) {\n  l.__c && l.__c(u, n), n.some(function (u) {\n    try {\n      n = u.__h, u.__h = [], n.some(function (n) {\n        n.call(u);\n      });\n    } catch (n) {\n      l.__e(n, u.__v);\n    }\n  });\n}\n\nfunction O(l, u, i, t, r, o, f, e) {\n  var s,\n      a,\n      h,\n      y = i.props,\n      p = u.props,\n      d = u.type,\n      _ = 0;\n  if (\"svg\" === d && (r = !0), null != o) for (; _ < o.length; _++) {\n    if ((s = o[_]) && \"setAttribute\" in s == !!d && (d ? s.localName === d : 3 === s.nodeType)) {\n      l = s, o[_] = null;\n      break;\n    }\n  }\n\n  if (null == l) {\n    if (null === d) return document.createTextNode(p);\n    l = r ? document.createElementNS(\"http://www.w3.org/2000/svg\", d) : document.createElement(d, p.is && p), o = null, e = !1;\n  }\n\n  if (null === d) y === p || e && l.data === p || (l.data = p);else {\n    if (o = o && n.call(l.childNodes), a = (y = i.props || c).dangerouslySetInnerHTML, h = p.dangerouslySetInnerHTML, !e) {\n      if (null != o) for (y = {}, _ = 0; _ < l.attributes.length; _++) {\n        y[l.attributes[_].name] = l.attributes[_].value;\n      }\n      (h || a) && (h && (a && h.__html == a.__html || h.__html === l.innerHTML) || (l.innerHTML = h && h.__html || \"\"));\n    }\n\n    if (k(l, p, y, r, e), h) u.__k = [];else if (_ = u.props.children, H(l, Array.isArray(_) ? _ : [_], u, i, t, r && \"foreignObject\" !== d, o, f, o ? o[0] : i.__k && A(i, 0), e), null != o) for (_ = o.length; _--;) {\n      null != o[_] && v(o[_]);\n    }\n    e || (\"value\" in p && void 0 !== (_ = p.value) && (_ !== l.value || \"progress\" === d && !_ || \"option\" === d && _ !== y.value) && g(l, \"value\", _, y.value, !1), \"checked\" in p && void 0 !== (_ = p.checked) && _ !== l.checked && g(l, \"checked\", _, y.checked, !1));\n  }\n  return l;\n}\n\nfunction S(n, u, i) {\n  try {\n    \"function\" == typeof n ? n(u) : n.current = u;\n  } catch (n) {\n    l.__e(n, i);\n  }\n}\n\nfunction q(n, u, i) {\n  var t, r;\n\n  if (l.unmount && l.unmount(n), (t = n.ref) && (t.current && t.current !== n.__e || S(t, null, u)), null != (t = n.__c)) {\n    if (t.componentWillUnmount) try {\n      t.componentWillUnmount();\n    } catch (n) {\n      l.__e(n, u);\n    }\n    t.base = t.__P = null, n.__c = void 0;\n  }\n\n  if (t = n.__k) for (r = 0; r < t.length; r++) {\n    t[r] && q(t[r], u, i || \"function\" != typeof n.type);\n  }\n  i || null == n.__e || v(n.__e), n.__ = n.__e = n.__d = void 0;\n}\n\nfunction B(n, l, u) {\n  return this.constructor(n, u);\n}\n\nfunction D(u, i, t) {\n  var r, o, f;\n  l.__ && l.__(u, i), o = (r = \"function\" == typeof t) ? null : t && t.__k || i.__k, f = [], M(i, u = (!r && t || i).__k = y(_, null, [u]), o || c, c, void 0 !== i.ownerSVGElement, !r && t ? [t] : o ? null : i.firstChild ? n.call(i.childNodes) : null, f, !r && t ? t : o ? o.__e : i.firstChild, r), N(f, u);\n}\n\nfunction E(n, l) {\n  D(n, l, E);\n}\n\nfunction F(l, u, i) {\n  var t,\n      r,\n      o,\n      f = h({}, l.props);\n\n  for (o in u) {\n    \"key\" == o ? t = u[o] : \"ref\" == o ? r = u[o] : f[o] = u[o];\n  }\n\n  return arguments.length > 2 && (f.children = arguments.length > 3 ? n.call(arguments, 2) : i), p(l.type, f, t || l.key, r || l.ref, null);\n}\n\nfunction G(n, l) {\n  var u = {\n    __c: l = \"__cC\" + e++,\n    __: n,\n    Consumer: function Consumer(n, l) {\n      return n.children(l);\n    },\n    Provider: function Provider(n) {\n      var u, i;\n      return this.getChildContext || (u = [], (i = {})[l] = this, this.getChildContext = function () {\n        return i;\n      }, this.shouldComponentUpdate = function (n) {\n        this.props.value !== n.value && u.some(function (n) {\n          n.__e = !0, T(n);\n        });\n      }, this.sub = function (n) {\n        u.push(n);\n        var l = n.componentWillUnmount;\n\n        n.componentWillUnmount = function () {\n          u.splice(u.indexOf(n), 1), l && l.call(n);\n        };\n      }), n.children;\n    }\n  };\n  return u.Provider.__ = u.Consumer.contextType = u;\n}\n\nn = s.slice, l = {\n  __e: function __e(n, l, u, i) {\n    for (var t, r, o; l = l.__;) {\n      if ((t = l.__c) && !t.__) try {\n        if ((r = t.constructor) && null != r.getDerivedStateFromError && (t.setState(r.getDerivedStateFromError(n)), o = t.__d), null != t.componentDidCatch && (t.componentDidCatch(n, i || {}), o = t.__d), o) return t.__E = t;\n      } catch (l) {\n        n = l;\n      }\n    }\n\n    throw n;\n  }\n}, u = 0, i = function i(n) {\n  return null != n && void 0 === n.constructor;\n}, t = !1, x.prototype.setState = function (n, l) {\n  var u;\n  u = null != this.__s && this.__s !== this.state ? this.__s : this.__s = h({}, this.state), \"function\" == typeof n && (n = n(h({}, u), this.props)), n && h(u, n), null != n && this.__v && (l && this._sb.push(l), T(this));\n}, x.prototype.forceUpdate = function (n) {\n  this.__v && (this.__e = !0, n && this.__h.push(n), T(this));\n}, x.prototype.render = _, r = [], f = \"function\" == typeof Promise ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, $.__r = 0, e = 0;\nexport { x as Component, _ as Fragment, F as cloneElement, G as createContext, y as createElement, d as createRef, y as h, E as hydrate, i as isValidElement, l as options, D as render, j as toChildArray };","module.exports = require(\"regenerator-runtime\");\n","export function toggleClass(elem, className, bool) {\n  if (bool === true) return elem.classList.add(className);\n  elem.classList.remove(className);\n}\nexport function createElement(tag, className, content) {\n  var e = window.document.createElement(tag);\n  className = className || \"\";\n  content = content || \"\";\n  e.className = className;\n  if (content !== undefined) e.textContent = content;\n  return e;\n}\nexport function clearNode(node) {\n  while (node.firstChild) {\n    node.removeChild(node.firstChild);\n  }\n}\nexport function findParent(node, condition) {\n  if (condition(node)) return node;else if (node.parentNode) return findParent(node.parentNode, condition);\n  return undefined;\n}\nexport function createNumberInput(inputClassName, opts) {\n  var wrapper = createElement(\"div\", \"numInputWrapper\"),\n      numInput = createElement(\"input\", \"numInput \" + inputClassName),\n      arrowUp = createElement(\"span\", \"arrowUp\"),\n      arrowDown = createElement(\"span\", \"arrowDown\");\n\n  if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n    numInput.type = \"number\";\n  } else {\n    numInput.type = \"text\";\n    numInput.pattern = \"\\\\d*\";\n  }\n\n  if (opts !== undefined) for (var key in opts) {\n    numInput.setAttribute(key, opts[key]);\n  }\n  wrapper.appendChild(numInput);\n  wrapper.appendChild(arrowUp);\n  wrapper.appendChild(arrowDown);\n  return wrapper;\n}\nexport function getEventTarget(event) {\n  try {\n    if (typeof event.composedPath === \"function\") {\n      var path = event.composedPath();\n      return path[0];\n    }\n\n    return event.target;\n  } catch (error) {\n    return event.target;\n  }\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\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\ndefine([\"./var/arr\", \"./var/document\", \"./var/getProto\", \"./var/slice\", \"./var/concat\", \"./var/push\", \"./var/indexOf\", \"./var/class2type\", \"./var/toString\", \"./var/hasOwn\", \"./var/fnToString\", \"./var/ObjectFunctionString\", \"./var/support\", \"./var/isFunction\", \"./var/isWindow\", \"./core/DOMEval\", \"./core/toType\"], function (arr, document, getProto, _slice, concat, push, indexOf, class2type, toString, hasOwn, fnToString, ObjectFunctionString, support, isFunction, isWindow, DOMEval, toType) {\n  \"use strict\";\n\n  var version = \"3.4.1\",\n      // Define a local copy of jQuery\n  jQuery = function jQuery(selector, context) {\n    // The jQuery object is actually just the init constructor 'enhanced'\n    // Need init if jQuery is called (just allow error to be thrown if not included)\n    return new jQuery.fn.init(selector, context);\n  },\n      // Support: Android <=4.0 only\n  // Make sure we trim BOM and NBSP\n  rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n  jQuery.fn = jQuery.prototype = {\n    // The current version of jQuery being used\n    jquery: version,\n    constructor: jQuery,\n    // The default length of a jQuery object is 0\n    length: 0,\n    toArray: function toArray() {\n      return _slice.call(this);\n    },\n    // Get the Nth element in the matched element set OR\n    // Get the whole matched element set as a clean array\n    get: function get(num) {\n      // Return all the elements in a clean array\n      if (num == null) {\n        return _slice.call(this);\n      } // Return just the one element from the set\n\n\n      return num < 0 ? this[num + this.length] : this[num];\n    },\n    // Take an array of elements and push it onto the stack\n    // (returning the new matched element set)\n    pushStack: function pushStack(elems) {\n      // Build a new jQuery matched element set\n      var ret = jQuery.merge(this.constructor(), elems); // Add the old object onto the stack (as a reference)\n\n      ret.prevObject = this; // Return the newly-formed element set\n\n      return ret;\n    },\n    // Execute a callback for every element in the matched set.\n    each: function each(callback) {\n      return jQuery.each(this, callback);\n    },\n    map: function map(callback) {\n      return this.pushStack(jQuery.map(this, function (elem, i) {\n        return callback.call(elem, i, elem);\n      }));\n    },\n    slice: function slice() {\n      return this.pushStack(_slice.apply(this, arguments));\n    },\n    first: function first() {\n      return this.eq(0);\n    },\n    last: function last() {\n      return this.eq(-1);\n    },\n    eq: function eq(i) {\n      var len = this.length,\n          j = +i + (i < 0 ? len : 0);\n      return this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n    },\n    end: function end() {\n      return this.prevObject || this.constructor();\n    },\n    // For internal use only.\n    // Behaves like an Array's method, not like a jQuery method.\n    push: push,\n    sort: arr.sort,\n    splice: arr.splice\n  };\n\n  jQuery.extend = jQuery.fn.extend = function () {\n    var options,\n        name,\n        src,\n        copy,\n        copyIsArray,\n        clone,\n        target = arguments[0] || {},\n        i = 1,\n        length = arguments.length,\n        deep = false; // Handle a deep copy situation\n\n    if (typeof target === \"boolean\") {\n      deep = target; // Skip the boolean and the target\n\n      target = arguments[i] || {};\n      i++;\n    } // Handle case when target is a string or something (possible in deep copy)\n\n\n    if (_typeof(target) !== \"object\" && !isFunction(target)) {\n      target = {};\n    } // Extend jQuery itself if only one argument is passed\n\n\n    if (i === length) {\n      target = this;\n      i--;\n    }\n\n    for (; i < length; i++) {\n      // Only deal with non-null/undefined values\n      if ((options = arguments[i]) != null) {\n        // Extend the base object\n        for (name in options) {\n          copy = options[name]; // Prevent Object.prototype pollution\n          // Prevent never-ending loop\n\n          if (name === \"__proto__\" || target === copy) {\n            continue;\n          } // Recurse if we're merging plain objects or arrays\n\n\n          if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n            src = target[name]; // Ensure proper type for the source value\n\n            if (copyIsArray && !Array.isArray(src)) {\n              clone = [];\n            } else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n              clone = {};\n            } else {\n              clone = src;\n            }\n\n            copyIsArray = false; // Never move original objects, clone them\n\n            target[name] = jQuery.extend(deep, clone, copy); // Don't bring in undefined values\n          } else if (copy !== undefined) {\n            target[name] = copy;\n          }\n        }\n      }\n    } // Return the modified object\n\n\n    return target;\n  };\n\n  jQuery.extend({\n    // Unique for each copy of jQuery on the page\n    expando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n    // Assume jQuery is ready without the ready module\n    isReady: true,\n    error: function error(msg) {\n      throw new Error(msg);\n    },\n    noop: function noop() {},\n    isPlainObject: function isPlainObject(obj) {\n      var proto, Ctor; // Detect obvious negatives\n      // Use toString instead of jQuery.type to catch host objects\n\n      if (!obj || toString.call(obj) !== \"[object Object]\") {\n        return false;\n      }\n\n      proto = getProto(obj); // Objects with no prototype (e.g., `Object.create( null )`) are plain\n\n      if (!proto) {\n        return true;\n      } // Objects with prototype are plain iff they were constructed by a global Object function\n\n\n      Ctor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n      return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n    },\n    isEmptyObject: function isEmptyObject(obj) {\n      var name;\n\n      for (name in obj) {\n        return false;\n      }\n\n      return true;\n    },\n    // Evaluates a script in a global context\n    globalEval: function globalEval(code, options) {\n      DOMEval(code, {\n        nonce: options && options.nonce\n      });\n    },\n    each: function each(obj, callback) {\n      var length,\n          i = 0;\n\n      if (isArrayLike(obj)) {\n        length = obj.length;\n\n        for (; i < length; i++) {\n          if (callback.call(obj[i], i, obj[i]) === false) {\n            break;\n          }\n        }\n      } else {\n        for (i in obj) {\n          if (callback.call(obj[i], i, obj[i]) === false) {\n            break;\n          }\n        }\n      }\n\n      return obj;\n    },\n    // Support: Android <=4.0 only\n    trim: function trim(text) {\n      return text == null ? \"\" : (text + \"\").replace(rtrim, \"\");\n    },\n    // results is for internal usage only\n    makeArray: function makeArray(arr, results) {\n      var ret = results || [];\n\n      if (arr != null) {\n        if (isArrayLike(Object(arr))) {\n          jQuery.merge(ret, typeof arr === \"string\" ? [arr] : arr);\n        } else {\n          push.call(ret, arr);\n        }\n      }\n\n      return ret;\n    },\n    inArray: function inArray(elem, arr, i) {\n      return arr == null ? -1 : indexOf.call(arr, elem, i);\n    },\n    // Support: Android <=4.0 only, PhantomJS 1 only\n    // push.apply(_, arraylike) throws on ancient WebKit\n    merge: function merge(first, second) {\n      var len = +second.length,\n          j = 0,\n          i = first.length;\n\n      for (; j < len; j++) {\n        first[i++] = second[j];\n      }\n\n      first.length = i;\n      return first;\n    },\n    grep: function grep(elems, callback, invert) {\n      var callbackInverse,\n          matches = [],\n          i = 0,\n          length = elems.length,\n          callbackExpect = !invert; // Go through the array, only saving the items\n      // that pass the validator function\n\n      for (; i < length; i++) {\n        callbackInverse = !callback(elems[i], i);\n\n        if (callbackInverse !== callbackExpect) {\n          matches.push(elems[i]);\n        }\n      }\n\n      return matches;\n    },\n    // arg is for internal usage only\n    map: function map(elems, callback, arg) {\n      var length,\n          value,\n          i = 0,\n          ret = []; // Go through the array, translating each of the items to their new values\n\n      if (isArrayLike(elems)) {\n        length = elems.length;\n\n        for (; i < length; i++) {\n          value = callback(elems[i], i, arg);\n\n          if (value != null) {\n            ret.push(value);\n          }\n        } // Go through every key on the object,\n\n      } else {\n        for (i in elems) {\n          value = callback(elems[i], i, arg);\n\n          if (value != null) {\n            ret.push(value);\n          }\n        }\n      } // Flatten any nested arrays\n\n\n      return concat.apply([], ret);\n    },\n    // A global GUID counter for objects\n    guid: 1,\n    // jQuery.support is not used in Core but other projects attach their\n    // properties to it so it needs to exist.\n    support: support\n  });\n\n  if (typeof Symbol === \"function\") {\n    jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n  } // Populate the class2type map\n\n\n  jQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"), function (i, name) {\n    class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n  });\n\n  function isArrayLike(obj) {\n    // Support: real iOS 8.2 only (not reproducible in simulator)\n    // `in` check used to prevent JIT error (gh-2145)\n    // hasOwn isn't used here due to false negatives\n    // regarding Nodelist length in IE\n    var length = !!obj && \"length\" in obj && obj.length,\n        type = toType(obj);\n\n    if (isFunction(obj) || isWindow(obj)) {\n      return false;\n    }\n\n    return type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;\n  }\n\n  return jQuery;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport _regeneratorRuntime from \"@babel/runtime/regenerator\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/*\nStimulus 3.0.1\nCopyright © 2021 Basecamp, LLC\n */\nvar EventListener = /*#__PURE__*/function () {\n  function EventListener(eventTarget, eventName, eventOptions) {\n    _classCallCheck(this, EventListener);\n\n    this.eventTarget = eventTarget;\n    this.eventName = eventName;\n    this.eventOptions = eventOptions;\n    this.unorderedBindings = new Set();\n  }\n\n  _createClass(EventListener, [{\n    key: \"connect\",\n    value: function connect() {\n      this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n  }, {\n    key: \"disconnect\",\n    value: function disconnect() {\n      this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n  }, {\n    key: \"bindingConnected\",\n    value: function bindingConnected(binding) {\n      this.unorderedBindings.add(binding);\n    }\n  }, {\n    key: \"bindingDisconnected\",\n    value: function bindingDisconnected(binding) {\n      this.unorderedBindings.delete(binding);\n    }\n  }, {\n    key: \"handleEvent\",\n    value: function handleEvent(event) {\n      var extendedEvent = extendEvent(event);\n\n      var _iterator = _createForOfIteratorHelper(this.bindings),\n          _step;\n\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var binding = _step.value;\n\n          if (extendedEvent.immediatePropagationStopped) {\n            break;\n          } else {\n            binding.handleEvent(extendedEvent);\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n  }, {\n    key: \"bindings\",\n    get: function get() {\n      return Array.from(this.unorderedBindings).sort(function (left, right) {\n        var leftIndex = left.index,\n            rightIndex = right.index;\n        return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n      });\n    }\n  }]);\n\n  return EventListener;\n}();\n\nfunction extendEvent(event) {\n  if (\"immediatePropagationStopped\" in event) {\n    return event;\n  } else {\n    var _stopImmediatePropagation = event.stopImmediatePropagation;\n    return Object.assign(event, {\n      immediatePropagationStopped: false,\n      stopImmediatePropagation: function stopImmediatePropagation() {\n        this.immediatePropagationStopped = true;\n\n        _stopImmediatePropagation.call(this);\n      }\n    });\n  }\n}\n\nvar Dispatcher = /*#__PURE__*/function () {\n  function Dispatcher(application) {\n    _classCallCheck(this, Dispatcher);\n\n    this.application = application;\n    this.eventListenerMaps = new Map();\n    this.started = false;\n  }\n\n  _createClass(Dispatcher, [{\n    key: \"start\",\n    value: function start() {\n      if (!this.started) {\n        this.started = true;\n        this.eventListeners.forEach(function (eventListener) {\n          return eventListener.connect();\n        });\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (this.started) {\n        this.started = false;\n        this.eventListeners.forEach(function (eventListener) {\n          return eventListener.disconnect();\n        });\n      }\n    }\n  }, {\n    key: \"eventListeners\",\n    get: function get() {\n      return Array.from(this.eventListenerMaps.values()).reduce(function (listeners, map) {\n        return listeners.concat(Array.from(map.values()));\n      }, []);\n    }\n  }, {\n    key: \"bindingConnected\",\n    value: function bindingConnected(binding) {\n      this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n  }, {\n    key: \"bindingDisconnected\",\n    value: function bindingDisconnected(binding) {\n      this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n    }\n  }, {\n    key: \"handleError\",\n    value: function handleError(error, message) {\n      var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      this.application.handleError(error, \"Error \".concat(message), detail);\n    }\n  }, {\n    key: \"fetchEventListenerForBinding\",\n    value: function fetchEventListenerForBinding(binding) {\n      var eventTarget = binding.eventTarget,\n          eventName = binding.eventName,\n          eventOptions = binding.eventOptions;\n      return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n  }, {\n    key: \"fetchEventListener\",\n    value: function fetchEventListener(eventTarget, eventName, eventOptions) {\n      var eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n      var cacheKey = this.cacheKey(eventName, eventOptions);\n      var eventListener = eventListenerMap.get(cacheKey);\n\n      if (!eventListener) {\n        eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n        eventListenerMap.set(cacheKey, eventListener);\n      }\n\n      return eventListener;\n    }\n  }, {\n    key: \"createEventListener\",\n    value: function createEventListener(eventTarget, eventName, eventOptions) {\n      var eventListener = new EventListener(eventTarget, eventName, eventOptions);\n\n      if (this.started) {\n        eventListener.connect();\n      }\n\n      return eventListener;\n    }\n  }, {\n    key: \"fetchEventListenerMapForEventTarget\",\n    value: function fetchEventListenerMapForEventTarget(eventTarget) {\n      var eventListenerMap = this.eventListenerMaps.get(eventTarget);\n\n      if (!eventListenerMap) {\n        eventListenerMap = new Map();\n        this.eventListenerMaps.set(eventTarget, eventListenerMap);\n      }\n\n      return eventListenerMap;\n    }\n  }, {\n    key: \"cacheKey\",\n    value: function cacheKey(eventName, eventOptions) {\n      var parts = [eventName];\n      Object.keys(eventOptions).sort().forEach(function (key) {\n        parts.push(\"\".concat(eventOptions[key] ? \"\" : \"!\").concat(key));\n      });\n      return parts.join(\":\");\n    }\n  }]);\n\n  return Dispatcher;\n}();\n\nvar descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;\n\nfunction parseActionDescriptorString(descriptorString) {\n  var source = descriptorString.trim();\n  var matches = source.match(descriptorPattern) || [];\n  return {\n    eventTarget: parseEventTarget(matches[4]),\n    eventName: matches[2],\n    eventOptions: matches[9] ? parseEventOptions(matches[9]) : {},\n    identifier: matches[5],\n    methodName: matches[7]\n  };\n}\n\nfunction parseEventTarget(eventTargetName) {\n  if (eventTargetName == \"window\") {\n    return window;\n  } else if (eventTargetName == \"document\") {\n    return document;\n  }\n}\n\nfunction parseEventOptions(eventOptions) {\n  return eventOptions.split(\":\").reduce(function (options, token) {\n    return Object.assign(options, _defineProperty({}, token.replace(/^!/, \"\"), !/^!/.test(token)));\n  }, {});\n}\n\nfunction stringifyEventTarget(eventTarget) {\n  if (eventTarget == window) {\n    return \"window\";\n  } else if (eventTarget == document) {\n    return \"document\";\n  }\n}\n\nfunction camelize(value) {\n  return value.replace(/(?:[_-])([a-z0-9])/g, function (_, char) {\n    return char.toUpperCase();\n  });\n}\n\nfunction capitalize(value) {\n  return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\nfunction dasherize(value) {\n  return value.replace(/([A-Z])/g, function (_, char) {\n    return \"-\".concat(char.toLowerCase());\n  });\n}\n\nfunction tokenize(value) {\n  return value.match(/[^\\s]+/g) || [];\n}\n\nvar Action = /*#__PURE__*/function () {\n  function Action(element, index, descriptor) {\n    _classCallCheck(this, Action);\n\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  }\n\n  _createClass(Action, [{\n    key: \"toString\",\n    value: function toString() {\n      var eventNameSuffix = this.eventTargetName ? \"@\".concat(this.eventTargetName) : \"\";\n      return \"\".concat(this.eventName).concat(eventNameSuffix, \"->\").concat(this.identifier, \"#\").concat(this.methodName);\n    }\n  }, {\n    key: \"params\",\n    get: function get() {\n      if (this.eventTarget instanceof Element) {\n        return this.getParamsFromEventTargetAttributes(this.eventTarget);\n      } else {\n        return {};\n      }\n    }\n  }, {\n    key: \"getParamsFromEventTargetAttributes\",\n    value: function getParamsFromEventTargetAttributes(eventTarget) {\n      var params = {};\n      var pattern = new RegExp(\"^data-\".concat(this.identifier, \"-(.+)-param$\"));\n      var attributes = Array.from(eventTarget.attributes);\n      attributes.forEach(function (_ref) {\n        var name = _ref.name,\n            value = _ref.value;\n        var match = name.match(pattern);\n        var key = match && match[1];\n\n        if (key) {\n          Object.assign(params, _defineProperty({}, camelize(key), typecast(value)));\n        }\n      });\n      return params;\n    }\n  }, {\n    key: \"eventTargetName\",\n    get: function get() {\n      return stringifyEventTarget(this.eventTarget);\n    }\n  }], [{\n    key: \"forToken\",\n    value: function forToken(token) {\n      return new this(token.element, token.index, parseActionDescriptorString(token.content));\n    }\n  }]);\n\n  return Action;\n}();\n\nvar defaultEventNames = {\n  \"a\": function a(e) {\n    return \"click\";\n  },\n  \"button\": function button(e) {\n    return \"click\";\n  },\n  \"form\": function form(e) {\n    return \"submit\";\n  },\n  \"details\": function details(e) {\n    return \"toggle\";\n  },\n  \"input\": function input(e) {\n    return e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\";\n  },\n  \"select\": function select(e) {\n    return \"change\";\n  },\n  \"textarea\": function textarea(e) {\n    return \"input\";\n  }\n};\n\nfunction getDefaultEventNameForElement(element) {\n  var tagName = element.tagName.toLowerCase();\n\n  if (tagName in defaultEventNames) {\n    return defaultEventNames[tagName](element);\n  }\n}\n\nfunction error(message) {\n  throw new Error(message);\n}\n\nfunction typecast(value) {\n  try {\n    return JSON.parse(value);\n  } catch (o_O) {\n    return value;\n  }\n}\n\nvar Binding = /*#__PURE__*/function () {\n  function Binding(context, action) {\n    _classCallCheck(this, Binding);\n\n    this.context = context;\n    this.action = action;\n  }\n\n  _createClass(Binding, [{\n    key: \"index\",\n    get: function get() {\n      return this.action.index;\n    }\n  }, {\n    key: \"eventTarget\",\n    get: function get() {\n      return this.action.eventTarget;\n    }\n  }, {\n    key: \"eventOptions\",\n    get: function get() {\n      return this.action.eventOptions;\n    }\n  }, {\n    key: \"identifier\",\n    get: function get() {\n      return this.context.identifier;\n    }\n  }, {\n    key: \"handleEvent\",\n    value: function handleEvent(event) {\n      if (this.willBeInvokedByEvent(event)) {\n        this.invokeWithEvent(event);\n      }\n    }\n  }, {\n    key: \"eventName\",\n    get: function get() {\n      return this.action.eventName;\n    }\n  }, {\n    key: \"method\",\n    get: function get() {\n      var method = this.controller[this.methodName];\n\n      if (typeof method == \"function\") {\n        return method;\n      }\n\n      throw new Error(\"Action \\\"\".concat(this.action, \"\\\" references undefined method \\\"\").concat(this.methodName, \"\\\"\"));\n    }\n  }, {\n    key: \"invokeWithEvent\",\n    value: function invokeWithEvent(event) {\n      var target = event.target,\n          currentTarget = event.currentTarget;\n\n      try {\n        var params = this.action.params;\n        var actionEvent = Object.assign(event, {\n          params: params\n        });\n        this.method.call(this.controller, actionEvent);\n        this.context.logDebugActivity(this.methodName, {\n          event: event,\n          target: target,\n          currentTarget: currentTarget,\n          action: this.methodName\n        });\n      } catch (error) {\n        var identifier = this.identifier,\n            controller = this.controller,\n            element = this.element,\n            index = this.index;\n        var detail = {\n          identifier: identifier,\n          controller: controller,\n          element: element,\n          index: index,\n          event: event\n        };\n        this.context.handleError(error, \"invoking action \\\"\".concat(this.action, \"\\\"\"), detail);\n      }\n    }\n  }, {\n    key: \"willBeInvokedByEvent\",\n    value: function willBeInvokedByEvent(event) {\n      var eventTarget = event.target;\n\n      if (this.element === eventTarget) {\n        return true;\n      } else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n        return this.scope.containsElement(eventTarget);\n      } else {\n        return this.scope.containsElement(this.action.element);\n      }\n    }\n  }, {\n    key: \"controller\",\n    get: function get() {\n      return this.context.controller;\n    }\n  }, {\n    key: \"methodName\",\n    get: function get() {\n      return this.action.methodName;\n    }\n  }, {\n    key: \"element\",\n    get: function get() {\n      return this.scope.element;\n    }\n  }, {\n    key: \"scope\",\n    get: function get() {\n      return this.context.scope;\n    }\n  }]);\n\n  return Binding;\n}();\n\nvar ElementObserver = /*#__PURE__*/function () {\n  function ElementObserver(element, delegate) {\n    var _this = this;\n\n    _classCallCheck(this, ElementObserver);\n\n    this.mutationObserverInit = {\n      attributes: true,\n      childList: true,\n      subtree: true\n    };\n    this.element = element;\n    this.started = false;\n    this.delegate = delegate;\n    this.elements = new Set();\n    this.mutationObserver = new MutationObserver(function (mutations) {\n      return _this.processMutations(mutations);\n    });\n  }\n\n  _createClass(ElementObserver, [{\n    key: \"start\",\n    value: function start() {\n      if (!this.started) {\n        this.started = true;\n        this.mutationObserver.observe(this.element, this.mutationObserverInit);\n        this.refresh();\n      }\n    }\n  }, {\n    key: \"pause\",\n    value: function pause(callback) {\n      if (this.started) {\n        this.mutationObserver.disconnect();\n        this.started = false;\n      }\n\n      callback();\n\n      if (!this.started) {\n        this.mutationObserver.observe(this.element, this.mutationObserverInit);\n        this.started = true;\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (this.started) {\n        this.mutationObserver.takeRecords();\n        this.mutationObserver.disconnect();\n        this.started = false;\n      }\n    }\n  }, {\n    key: \"refresh\",\n    value: function refresh() {\n      if (this.started) {\n        var matches = new Set(this.matchElementsInTree());\n\n        for (var _i = 0, _Array$from = Array.from(this.elements); _i < _Array$from.length; _i++) {\n          var element = _Array$from[_i];\n\n          if (!matches.has(element)) {\n            this.removeElement(element);\n          }\n        }\n\n        for (var _i2 = 0, _Array$from2 = Array.from(matches); _i2 < _Array$from2.length; _i2++) {\n          var _element = _Array$from2[_i2];\n          this.addElement(_element);\n        }\n      }\n    }\n  }, {\n    key: \"processMutations\",\n    value: function processMutations(mutations) {\n      if (this.started) {\n        var _iterator2 = _createForOfIteratorHelper(mutations),\n            _step2;\n\n        try {\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n            var mutation = _step2.value;\n            this.processMutation(mutation);\n          }\n        } catch (err) {\n          _iterator2.e(err);\n        } finally {\n          _iterator2.f();\n        }\n      }\n    }\n  }, {\n    key: \"processMutation\",\n    value: function processMutation(mutation) {\n      if (mutation.type == \"attributes\") {\n        this.processAttributeChange(mutation.target, mutation.attributeName);\n      } else if (mutation.type == \"childList\") {\n        this.processRemovedNodes(mutation.removedNodes);\n        this.processAddedNodes(mutation.addedNodes);\n      }\n    }\n  }, {\n    key: \"processAttributeChange\",\n    value: function processAttributeChange(node, attributeName) {\n      var element = node;\n\n      if (this.elements.has(element)) {\n        if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n          this.delegate.elementAttributeChanged(element, attributeName);\n        } else {\n          this.removeElement(element);\n        }\n      } else if (this.matchElement(element)) {\n        this.addElement(element);\n      }\n    }\n  }, {\n    key: \"processRemovedNodes\",\n    value: function processRemovedNodes(nodes) {\n      for (var _i3 = 0, _Array$from3 = Array.from(nodes); _i3 < _Array$from3.length; _i3++) {\n        var node = _Array$from3[_i3];\n        var element = this.elementFromNode(node);\n\n        if (element) {\n          this.processTree(element, this.removeElement);\n        }\n      }\n    }\n  }, {\n    key: \"processAddedNodes\",\n    value: function processAddedNodes(nodes) {\n      for (var _i4 = 0, _Array$from4 = Array.from(nodes); _i4 < _Array$from4.length; _i4++) {\n        var node = _Array$from4[_i4];\n        var element = this.elementFromNode(node);\n\n        if (element && this.elementIsActive(element)) {\n          this.processTree(element, this.addElement);\n        }\n      }\n    }\n  }, {\n    key: \"matchElement\",\n    value: function matchElement(element) {\n      return this.delegate.matchElement(element);\n    }\n  }, {\n    key: \"matchElementsInTree\",\n    value: function matchElementsInTree() {\n      var tree = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.element;\n      return this.delegate.matchElementsInTree(tree);\n    }\n  }, {\n    key: \"processTree\",\n    value: function processTree(tree, processor) {\n      var _iterator3 = _createForOfIteratorHelper(this.matchElementsInTree(tree)),\n          _step3;\n\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var element = _step3.value;\n          processor.call(this, element);\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n    }\n  }, {\n    key: \"elementFromNode\",\n    value: function elementFromNode(node) {\n      if (node.nodeType == Node.ELEMENT_NODE) {\n        return node;\n      }\n    }\n  }, {\n    key: \"elementIsActive\",\n    value: function elementIsActive(element) {\n      if (element.isConnected != this.element.isConnected) {\n        return false;\n      } else {\n        return this.element.contains(element);\n      }\n    }\n  }, {\n    key: \"addElement\",\n    value: function addElement(element) {\n      if (!this.elements.has(element)) {\n        if (this.elementIsActive(element)) {\n          this.elements.add(element);\n\n          if (this.delegate.elementMatched) {\n            this.delegate.elementMatched(element);\n          }\n        }\n      }\n    }\n  }, {\n    key: \"removeElement\",\n    value: function removeElement(element) {\n      if (this.elements.has(element)) {\n        this.elements.delete(element);\n\n        if (this.delegate.elementUnmatched) {\n          this.delegate.elementUnmatched(element);\n        }\n      }\n    }\n  }]);\n\n  return ElementObserver;\n}();\n\nvar AttributeObserver = /*#__PURE__*/function () {\n  function AttributeObserver(element, attributeName, delegate) {\n    _classCallCheck(this, AttributeObserver);\n\n    this.attributeName = attributeName;\n    this.delegate = delegate;\n    this.elementObserver = new ElementObserver(element, this);\n  }\n\n  _createClass(AttributeObserver, [{\n    key: \"element\",\n    get: function get() {\n      return this.elementObserver.element;\n    }\n  }, {\n    key: \"selector\",\n    get: function get() {\n      return \"[\".concat(this.attributeName, \"]\");\n    }\n  }, {\n    key: \"start\",\n    value: function start() {\n      this.elementObserver.start();\n    }\n  }, {\n    key: \"pause\",\n    value: function pause(callback) {\n      this.elementObserver.pause(callback);\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      this.elementObserver.stop();\n    }\n  }, {\n    key: \"refresh\",\n    value: function refresh() {\n      this.elementObserver.refresh();\n    }\n  }, {\n    key: \"started\",\n    get: function get() {\n      return this.elementObserver.started;\n    }\n  }, {\n    key: \"matchElement\",\n    value: function matchElement(element) {\n      return element.hasAttribute(this.attributeName);\n    }\n  }, {\n    key: \"matchElementsInTree\",\n    value: function matchElementsInTree(tree) {\n      var match = this.matchElement(tree) ? [tree] : [];\n      var matches = Array.from(tree.querySelectorAll(this.selector));\n      return match.concat(matches);\n    }\n  }, {\n    key: \"elementMatched\",\n    value: function elementMatched(element) {\n      if (this.delegate.elementMatchedAttribute) {\n        this.delegate.elementMatchedAttribute(element, this.attributeName);\n      }\n    }\n  }, {\n    key: \"elementUnmatched\",\n    value: function elementUnmatched(element) {\n      if (this.delegate.elementUnmatchedAttribute) {\n        this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n      }\n    }\n  }, {\n    key: \"elementAttributeChanged\",\n    value: function elementAttributeChanged(element, attributeName) {\n      if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n        this.delegate.elementAttributeValueChanged(element, attributeName);\n      }\n    }\n  }]);\n\n  return AttributeObserver;\n}();\n\nvar StringMapObserver = /*#__PURE__*/function () {\n  function StringMapObserver(element, delegate) {\n    var _this2 = this;\n\n    _classCallCheck(this, StringMapObserver);\n\n    this.element = element;\n    this.delegate = delegate;\n    this.started = false;\n    this.stringMap = new Map();\n    this.mutationObserver = new MutationObserver(function (mutations) {\n      return _this2.processMutations(mutations);\n    });\n  }\n\n  _createClass(StringMapObserver, [{\n    key: \"start\",\n    value: function start() {\n      if (!this.started) {\n        this.started = true;\n        this.mutationObserver.observe(this.element, {\n          attributes: true,\n          attributeOldValue: true\n        });\n        this.refresh();\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (this.started) {\n        this.mutationObserver.takeRecords();\n        this.mutationObserver.disconnect();\n        this.started = false;\n      }\n    }\n  }, {\n    key: \"refresh\",\n    value: function refresh() {\n      if (this.started) {\n        var _iterator4 = _createForOfIteratorHelper(this.knownAttributeNames),\n            _step4;\n\n        try {\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n            var attributeName = _step4.value;\n            this.refreshAttribute(attributeName, null);\n          }\n        } catch (err) {\n          _iterator4.e(err);\n        } finally {\n          _iterator4.f();\n        }\n      }\n    }\n  }, {\n    key: \"processMutations\",\n    value: function processMutations(mutations) {\n      if (this.started) {\n        var _iterator5 = _createForOfIteratorHelper(mutations),\n            _step5;\n\n        try {\n          for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n            var mutation = _step5.value;\n            this.processMutation(mutation);\n          }\n        } catch (err) {\n          _iterator5.e(err);\n        } finally {\n          _iterator5.f();\n        }\n      }\n    }\n  }, {\n    key: \"processMutation\",\n    value: function processMutation(mutation) {\n      var attributeName = mutation.attributeName;\n\n      if (attributeName) {\n        this.refreshAttribute(attributeName, mutation.oldValue);\n      }\n    }\n  }, {\n    key: \"refreshAttribute\",\n    value: function refreshAttribute(attributeName, oldValue) {\n      var key = this.delegate.getStringMapKeyForAttribute(attributeName);\n\n      if (key != null) {\n        if (!this.stringMap.has(attributeName)) {\n          this.stringMapKeyAdded(key, attributeName);\n        }\n\n        var value = this.element.getAttribute(attributeName);\n\n        if (this.stringMap.get(attributeName) != value) {\n          this.stringMapValueChanged(value, key, oldValue);\n        }\n\n        if (value == null) {\n          var _oldValue = this.stringMap.get(attributeName);\n\n          this.stringMap.delete(attributeName);\n          if (_oldValue) this.stringMapKeyRemoved(key, attributeName, _oldValue);\n        } else {\n          this.stringMap.set(attributeName, value);\n        }\n      }\n    }\n  }, {\n    key: \"stringMapKeyAdded\",\n    value: function stringMapKeyAdded(key, attributeName) {\n      if (this.delegate.stringMapKeyAdded) {\n        this.delegate.stringMapKeyAdded(key, attributeName);\n      }\n    }\n  }, {\n    key: \"stringMapValueChanged\",\n    value: function stringMapValueChanged(value, key, oldValue) {\n      if (this.delegate.stringMapValueChanged) {\n        this.delegate.stringMapValueChanged(value, key, oldValue);\n      }\n    }\n  }, {\n    key: \"stringMapKeyRemoved\",\n    value: function stringMapKeyRemoved(key, attributeName, oldValue) {\n      if (this.delegate.stringMapKeyRemoved) {\n        this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n      }\n    }\n  }, {\n    key: \"knownAttributeNames\",\n    get: function get() {\n      return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n  }, {\n    key: \"currentAttributeNames\",\n    get: function get() {\n      return Array.from(this.element.attributes).map(function (attribute) {\n        return attribute.name;\n      });\n    }\n  }, {\n    key: \"recordedAttributeNames\",\n    get: function get() {\n      return Array.from(this.stringMap.keys());\n    }\n  }]);\n\n  return StringMapObserver;\n}();\n\nfunction _add(map, key, value) {\n  fetch(map, key).add(value);\n}\n\nfunction del(map, key, value) {\n  fetch(map, key).delete(value);\n  prune(map, key);\n}\n\nfunction fetch(map, key) {\n  var values = map.get(key);\n\n  if (!values) {\n    values = new Set();\n    map.set(key, values);\n  }\n\n  return values;\n}\n\nfunction prune(map, key) {\n  var values = map.get(key);\n\n  if (values != null && values.size == 0) {\n    map.delete(key);\n  }\n}\n\nvar Multimap = /*#__PURE__*/function () {\n  function Multimap() {\n    _classCallCheck(this, Multimap);\n\n    this.valuesByKey = new Map();\n  }\n\n  _createClass(Multimap, [{\n    key: \"keys\",\n    get: function get() {\n      return Array.from(this.valuesByKey.keys());\n    }\n  }, {\n    key: \"values\",\n    get: function get() {\n      var sets = Array.from(this.valuesByKey.values());\n      return sets.reduce(function (values, set) {\n        return values.concat(Array.from(set));\n      }, []);\n    }\n  }, {\n    key: \"size\",\n    get: function get() {\n      var sets = Array.from(this.valuesByKey.values());\n      return sets.reduce(function (size, set) {\n        return size + set.size;\n      }, 0);\n    }\n  }, {\n    key: \"add\",\n    value: function add(key, value) {\n      _add(this.valuesByKey, key, value);\n    }\n  }, {\n    key: \"delete\",\n    value: function _delete(key, value) {\n      del(this.valuesByKey, key, value);\n    }\n  }, {\n    key: \"has\",\n    value: function has(key, value) {\n      var values = this.valuesByKey.get(key);\n      return values != null && values.has(value);\n    }\n  }, {\n    key: \"hasKey\",\n    value: function hasKey(key) {\n      return this.valuesByKey.has(key);\n    }\n  }, {\n    key: \"hasValue\",\n    value: function hasValue(value) {\n      var sets = Array.from(this.valuesByKey.values());\n      return sets.some(function (set) {\n        return set.has(value);\n      });\n    }\n  }, {\n    key: \"getValuesForKey\",\n    value: function getValuesForKey(key) {\n      var values = this.valuesByKey.get(key);\n      return values ? Array.from(values) : [];\n    }\n  }, {\n    key: \"getKeysForValue\",\n    value: function getKeysForValue(value) {\n      return Array.from(this.valuesByKey).filter(function (_ref2) {\n        var _ref3 = _slicedToArray(_ref2, 2),\n            key = _ref3[0],\n            values = _ref3[1];\n\n        return values.has(value);\n      }).map(function (_ref4) {\n        var _ref5 = _slicedToArray(_ref4, 2),\n            key = _ref5[0],\n            values = _ref5[1];\n\n        return key;\n      });\n    }\n  }]);\n\n  return Multimap;\n}();\n\nvar IndexedMultimap = /*#__PURE__*/function (_Multimap) {\n  _inherits(IndexedMultimap, _Multimap);\n\n  var _super = _createSuper(IndexedMultimap);\n\n  function IndexedMultimap() {\n    var _this3;\n\n    _classCallCheck(this, IndexedMultimap);\n\n    _this3 = _super.call(this);\n    _this3.keysByValue = new Map();\n    return _this3;\n  }\n\n  _createClass(IndexedMultimap, [{\n    key: \"values\",\n    get: function get() {\n      return Array.from(this.keysByValue.keys());\n    }\n  }, {\n    key: \"add\",\n    value: function add(key, value) {\n      _get(_getPrototypeOf(IndexedMultimap.prototype), \"add\", this).call(this, key, value);\n\n      _add(this.keysByValue, value, key);\n    }\n  }, {\n    key: \"delete\",\n    value: function _delete(key, value) {\n      _get(_getPrototypeOf(IndexedMultimap.prototype), \"delete\", this).call(this, key, value);\n\n      del(this.keysByValue, value, key);\n    }\n  }, {\n    key: \"hasValue\",\n    value: function hasValue(value) {\n      return this.keysByValue.has(value);\n    }\n  }, {\n    key: \"getKeysForValue\",\n    value: function getKeysForValue(value) {\n      var set = this.keysByValue.get(value);\n      return set ? Array.from(set) : [];\n    }\n  }]);\n\n  return IndexedMultimap;\n}(Multimap);\n\nvar TokenListObserver = /*#__PURE__*/function () {\n  function TokenListObserver(element, attributeName, delegate) {\n    _classCallCheck(this, TokenListObserver);\n\n    this.attributeObserver = new AttributeObserver(element, attributeName, this);\n    this.delegate = delegate;\n    this.tokensByElement = new Multimap();\n  }\n\n  _createClass(TokenListObserver, [{\n    key: \"started\",\n    get: function get() {\n      return this.attributeObserver.started;\n    }\n  }, {\n    key: \"start\",\n    value: function start() {\n      this.attributeObserver.start();\n    }\n  }, {\n    key: \"pause\",\n    value: function pause(callback) {\n      this.attributeObserver.pause(callback);\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      this.attributeObserver.stop();\n    }\n  }, {\n    key: \"refresh\",\n    value: function refresh() {\n      this.attributeObserver.refresh();\n    }\n  }, {\n    key: \"element\",\n    get: function get() {\n      return this.attributeObserver.element;\n    }\n  }, {\n    key: \"attributeName\",\n    get: function get() {\n      return this.attributeObserver.attributeName;\n    }\n  }, {\n    key: \"elementMatchedAttribute\",\n    value: function elementMatchedAttribute(element) {\n      this.tokensMatched(this.readTokensForElement(element));\n    }\n  }, {\n    key: \"elementAttributeValueChanged\",\n    value: function elementAttributeValueChanged(element) {\n      var _this$refreshTokensFo = this.refreshTokensForElement(element),\n          _this$refreshTokensFo2 = _slicedToArray(_this$refreshTokensFo, 2),\n          unmatchedTokens = _this$refreshTokensFo2[0],\n          matchedTokens = _this$refreshTokensFo2[1];\n\n      this.tokensUnmatched(unmatchedTokens);\n      this.tokensMatched(matchedTokens);\n    }\n  }, {\n    key: \"elementUnmatchedAttribute\",\n    value: function elementUnmatchedAttribute(element) {\n      this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n  }, {\n    key: \"tokensMatched\",\n    value: function tokensMatched(tokens) {\n      var _this4 = this;\n\n      tokens.forEach(function (token) {\n        return _this4.tokenMatched(token);\n      });\n    }\n  }, {\n    key: \"tokensUnmatched\",\n    value: function tokensUnmatched(tokens) {\n      var _this5 = this;\n\n      tokens.forEach(function (token) {\n        return _this5.tokenUnmatched(token);\n      });\n    }\n  }, {\n    key: \"tokenMatched\",\n    value: function tokenMatched(token) {\n      this.delegate.tokenMatched(token);\n      this.tokensByElement.add(token.element, token);\n    }\n  }, {\n    key: \"tokenUnmatched\",\n    value: function tokenUnmatched(token) {\n      this.delegate.tokenUnmatched(token);\n      this.tokensByElement.delete(token.element, token);\n    }\n  }, {\n    key: \"refreshTokensForElement\",\n    value: function refreshTokensForElement(element) {\n      var previousTokens = this.tokensByElement.getValuesForKey(element);\n      var currentTokens = this.readTokensForElement(element);\n      var firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(function (_ref6) {\n        var _ref7 = _slicedToArray(_ref6, 2),\n            previousToken = _ref7[0],\n            currentToken = _ref7[1];\n\n        return !tokensAreEqual(previousToken, currentToken);\n      });\n\n      if (firstDifferingIndex == -1) {\n        return [[], []];\n      } else {\n        return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n      }\n    }\n  }, {\n    key: \"readTokensForElement\",\n    value: function readTokensForElement(element) {\n      var attributeName = this.attributeName;\n      var tokenString = element.getAttribute(attributeName) || \"\";\n      return parseTokenString(tokenString, element, attributeName);\n    }\n  }]);\n\n  return TokenListObserver;\n}();\n\nfunction parseTokenString(tokenString, element, attributeName) {\n  return tokenString.trim().split(/\\s+/).filter(function (content) {\n    return content.length;\n  }).map(function (content, index) {\n    return {\n      element: element,\n      attributeName: attributeName,\n      content: content,\n      index: index\n    };\n  });\n}\n\nfunction zip(left, right) {\n  var length = Math.max(left.length, right.length);\n  return Array.from({\n    length: length\n  }, function (_, index) {\n    return [left[index], right[index]];\n  });\n}\n\nfunction tokensAreEqual(left, right) {\n  return left && right && left.index == right.index && left.content == right.content;\n}\n\nvar ValueListObserver = /*#__PURE__*/function () {\n  function ValueListObserver(element, attributeName, delegate) {\n    _classCallCheck(this, ValueListObserver);\n\n    this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n    this.delegate = delegate;\n    this.parseResultsByToken = new WeakMap();\n    this.valuesByTokenByElement = new WeakMap();\n  }\n\n  _createClass(ValueListObserver, [{\n    key: \"started\",\n    get: function get() {\n      return this.tokenListObserver.started;\n    }\n  }, {\n    key: \"start\",\n    value: function start() {\n      this.tokenListObserver.start();\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      this.tokenListObserver.stop();\n    }\n  }, {\n    key: \"refresh\",\n    value: function refresh() {\n      this.tokenListObserver.refresh();\n    }\n  }, {\n    key: \"element\",\n    get: function get() {\n      return this.tokenListObserver.element;\n    }\n  }, {\n    key: \"attributeName\",\n    get: function get() {\n      return this.tokenListObserver.attributeName;\n    }\n  }, {\n    key: \"tokenMatched\",\n    value: function tokenMatched(token) {\n      var element = token.element;\n\n      var _this$fetchParseResul = this.fetchParseResultForToken(token),\n          value = _this$fetchParseResul.value;\n\n      if (value) {\n        this.fetchValuesByTokenForElement(element).set(token, value);\n        this.delegate.elementMatchedValue(element, value);\n      }\n    }\n  }, {\n    key: \"tokenUnmatched\",\n    value: function tokenUnmatched(token) {\n      var element = token.element;\n\n      var _this$fetchParseResul2 = this.fetchParseResultForToken(token),\n          value = _this$fetchParseResul2.value;\n\n      if (value) {\n        this.fetchValuesByTokenForElement(element).delete(token);\n        this.delegate.elementUnmatchedValue(element, value);\n      }\n    }\n  }, {\n    key: \"fetchParseResultForToken\",\n    value: function fetchParseResultForToken(token) {\n      var parseResult = this.parseResultsByToken.get(token);\n\n      if (!parseResult) {\n        parseResult = this.parseToken(token);\n        this.parseResultsByToken.set(token, parseResult);\n      }\n\n      return parseResult;\n    }\n  }, {\n    key: \"fetchValuesByTokenForElement\",\n    value: function fetchValuesByTokenForElement(element) {\n      var valuesByToken = this.valuesByTokenByElement.get(element);\n\n      if (!valuesByToken) {\n        valuesByToken = new Map();\n        this.valuesByTokenByElement.set(element, valuesByToken);\n      }\n\n      return valuesByToken;\n    }\n  }, {\n    key: \"parseToken\",\n    value: function parseToken(token) {\n      try {\n        var value = this.delegate.parseValueForToken(token);\n        return {\n          value: value\n        };\n      } catch (error) {\n        return {\n          error: error\n        };\n      }\n    }\n  }]);\n\n  return ValueListObserver;\n}();\n\nvar BindingObserver = /*#__PURE__*/function () {\n  function BindingObserver(context, delegate) {\n    _classCallCheck(this, BindingObserver);\n\n    this.context = context;\n    this.delegate = delegate;\n    this.bindingsByAction = new Map();\n  }\n\n  _createClass(BindingObserver, [{\n    key: \"start\",\n    value: function start() {\n      if (!this.valueListObserver) {\n        this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n        this.valueListObserver.start();\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (this.valueListObserver) {\n        this.valueListObserver.stop();\n        delete this.valueListObserver;\n        this.disconnectAllActions();\n      }\n    }\n  }, {\n    key: \"element\",\n    get: function get() {\n      return this.context.element;\n    }\n  }, {\n    key: \"identifier\",\n    get: function get() {\n      return this.context.identifier;\n    }\n  }, {\n    key: \"actionAttribute\",\n    get: function get() {\n      return this.schema.actionAttribute;\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return this.context.schema;\n    }\n  }, {\n    key: \"bindings\",\n    get: function get() {\n      return Array.from(this.bindingsByAction.values());\n    }\n  }, {\n    key: \"connectAction\",\n    value: function connectAction(action) {\n      var binding = new Binding(this.context, action);\n      this.bindingsByAction.set(action, binding);\n      this.delegate.bindingConnected(binding);\n    }\n  }, {\n    key: \"disconnectAction\",\n    value: function disconnectAction(action) {\n      var binding = this.bindingsByAction.get(action);\n\n      if (binding) {\n        this.bindingsByAction.delete(action);\n        this.delegate.bindingDisconnected(binding);\n      }\n    }\n  }, {\n    key: \"disconnectAllActions\",\n    value: function disconnectAllActions() {\n      var _this6 = this;\n\n      this.bindings.forEach(function (binding) {\n        return _this6.delegate.bindingDisconnected(binding);\n      });\n      this.bindingsByAction.clear();\n    }\n  }, {\n    key: \"parseValueForToken\",\n    value: function parseValueForToken(token) {\n      var action = Action.forToken(token);\n\n      if (action.identifier == this.identifier) {\n        return action;\n      }\n    }\n  }, {\n    key: \"elementMatchedValue\",\n    value: function elementMatchedValue(element, action) {\n      this.connectAction(action);\n    }\n  }, {\n    key: \"elementUnmatchedValue\",\n    value: function elementUnmatchedValue(element, action) {\n      this.disconnectAction(action);\n    }\n  }]);\n\n  return BindingObserver;\n}();\n\nvar ValueObserver = /*#__PURE__*/function () {\n  function ValueObserver(context, receiver) {\n    _classCallCheck(this, ValueObserver);\n\n    this.context = context;\n    this.receiver = receiver;\n    this.stringMapObserver = new StringMapObserver(this.element, this);\n    this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    this.invokeChangedCallbacksForDefaultValues();\n  }\n\n  _createClass(ValueObserver, [{\n    key: \"start\",\n    value: function start() {\n      this.stringMapObserver.start();\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      this.stringMapObserver.stop();\n    }\n  }, {\n    key: \"element\",\n    get: function get() {\n      return this.context.element;\n    }\n  }, {\n    key: \"controller\",\n    get: function get() {\n      return this.context.controller;\n    }\n  }, {\n    key: \"getStringMapKeyForAttribute\",\n    value: function getStringMapKeyForAttribute(attributeName) {\n      if (attributeName in this.valueDescriptorMap) {\n        return this.valueDescriptorMap[attributeName].name;\n      }\n    }\n  }, {\n    key: \"stringMapKeyAdded\",\n    value: function stringMapKeyAdded(key, attributeName) {\n      var descriptor = this.valueDescriptorMap[attributeName];\n\n      if (!this.hasValue(key)) {\n        this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n      }\n    }\n  }, {\n    key: \"stringMapValueChanged\",\n    value: function stringMapValueChanged(value, name, oldValue) {\n      var descriptor = this.valueDescriptorNameMap[name];\n      if (value === null) return;\n\n      if (oldValue === null) {\n        oldValue = descriptor.writer(descriptor.defaultValue);\n      }\n\n      this.invokeChangedCallback(name, value, oldValue);\n    }\n  }, {\n    key: \"stringMapKeyRemoved\",\n    value: function stringMapKeyRemoved(key, attributeName, oldValue) {\n      var descriptor = this.valueDescriptorNameMap[key];\n\n      if (this.hasValue(key)) {\n        this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n      } else {\n        this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n      }\n    }\n  }, {\n    key: \"invokeChangedCallbacksForDefaultValues\",\n    value: function invokeChangedCallbacksForDefaultValues() {\n      var _iterator6 = _createForOfIteratorHelper(this.valueDescriptors),\n          _step6;\n\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var _ref9 = _step6.value;\n          var key = _ref9.key;\n          var name = _ref9.name;\n          var defaultValue = _ref9.defaultValue;\n          var writer = _ref9.writer;\n\n          if (defaultValue != undefined && !this.controller.data.has(key)) {\n            this.invokeChangedCallback(name, writer(defaultValue), undefined);\n          }\n        }\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n    }\n  }, {\n    key: \"invokeChangedCallback\",\n    value: function invokeChangedCallback(name, rawValue, rawOldValue) {\n      var changedMethodName = \"\".concat(name, \"Changed\");\n      var changedMethod = this.receiver[changedMethodName];\n\n      if (typeof changedMethod == \"function\") {\n        var descriptor = this.valueDescriptorNameMap[name];\n        var value = descriptor.reader(rawValue);\n        var oldValue = rawOldValue;\n\n        if (rawOldValue) {\n          oldValue = descriptor.reader(rawOldValue);\n        }\n\n        changedMethod.call(this.receiver, value, oldValue);\n      }\n    }\n  }, {\n    key: \"valueDescriptors\",\n    get: function get() {\n      var valueDescriptorMap = this.valueDescriptorMap;\n      return Object.keys(valueDescriptorMap).map(function (key) {\n        return valueDescriptorMap[key];\n      });\n    }\n  }, {\n    key: \"valueDescriptorNameMap\",\n    get: function get() {\n      var _this7 = this;\n\n      var descriptors = {};\n      Object.keys(this.valueDescriptorMap).forEach(function (key) {\n        var descriptor = _this7.valueDescriptorMap[key];\n        descriptors[descriptor.name] = descriptor;\n      });\n      return descriptors;\n    }\n  }, {\n    key: \"hasValue\",\n    value: function hasValue(attributeName) {\n      var descriptor = this.valueDescriptorNameMap[attributeName];\n      var hasMethodName = \"has\".concat(capitalize(descriptor.name));\n      return this.receiver[hasMethodName];\n    }\n  }]);\n\n  return ValueObserver;\n}();\n\nvar TargetObserver = /*#__PURE__*/function () {\n  function TargetObserver(context, delegate) {\n    _classCallCheck(this, TargetObserver);\n\n    this.context = context;\n    this.delegate = delegate;\n    this.targetsByName = new Multimap();\n  }\n\n  _createClass(TargetObserver, [{\n    key: \"start\",\n    value: function start() {\n      if (!this.tokenListObserver) {\n        this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n        this.tokenListObserver.start();\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (this.tokenListObserver) {\n        this.disconnectAllTargets();\n        this.tokenListObserver.stop();\n        delete this.tokenListObserver;\n      }\n    }\n  }, {\n    key: \"tokenMatched\",\n    value: function tokenMatched(_ref10) {\n      var element = _ref10.element,\n          name = _ref10.content;\n\n      if (this.scope.containsElement(element)) {\n        this.connectTarget(element, name);\n      }\n    }\n  }, {\n    key: \"tokenUnmatched\",\n    value: function tokenUnmatched(_ref11) {\n      var element = _ref11.element,\n          name = _ref11.content;\n      this.disconnectTarget(element, name);\n    }\n  }, {\n    key: \"connectTarget\",\n    value: function connectTarget(element, name) {\n      var _this8 = this;\n\n      var _a;\n\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(function () {\n          return _this8.delegate.targetConnected(element, name);\n        });\n      }\n    }\n  }, {\n    key: \"disconnectTarget\",\n    value: function disconnectTarget(element, name) {\n      var _this9 = this;\n\n      var _a;\n\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(function () {\n          return _this9.delegate.targetDisconnected(element, name);\n        });\n      }\n    }\n  }, {\n    key: \"disconnectAllTargets\",\n    value: function disconnectAllTargets() {\n      var _iterator7 = _createForOfIteratorHelper(this.targetsByName.keys),\n          _step7;\n\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var name = _step7.value;\n\n          var _iterator8 = _createForOfIteratorHelper(this.targetsByName.getValuesForKey(name)),\n              _step8;\n\n          try {\n            for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n              var element = _step8.value;\n              this.disconnectTarget(element, name);\n            }\n          } catch (err) {\n            _iterator8.e(err);\n          } finally {\n            _iterator8.f();\n          }\n        }\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n    }\n  }, {\n    key: \"attributeName\",\n    get: function get() {\n      return \"data-\".concat(this.context.identifier, \"-target\");\n    }\n  }, {\n    key: \"element\",\n    get: function get() {\n      return this.context.element;\n    }\n  }, {\n    key: \"scope\",\n    get: function get() {\n      return this.context.scope;\n    }\n  }]);\n\n  return TargetObserver;\n}();\n\nvar Context = /*#__PURE__*/function () {\n  function Context(module, scope) {\n    var _this10 = this;\n\n    _classCallCheck(this, Context);\n\n    this.logDebugActivity = function (functionName) {\n      var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var identifier = _this10.identifier,\n          controller = _this10.controller,\n          element = _this10.element;\n      detail = Object.assign({\n        identifier: identifier,\n        controller: controller,\n        element: element\n      }, detail);\n\n      _this10.application.logDebugActivity(_this10.identifier, functionName, detail);\n    };\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\n    try {\n      this.controller.initialize();\n      this.logDebugActivity(\"initialize\");\n    } catch (error) {\n      this.handleError(error, \"initializing controller\");\n    }\n  }\n\n  _createClass(Context, [{\n    key: \"connect\",\n    value: function connect() {\n      this.bindingObserver.start();\n      this.valueObserver.start();\n      this.targetObserver.start();\n\n      try {\n        this.controller.connect();\n        this.logDebugActivity(\"connect\");\n      } catch (error) {\n        this.handleError(error, \"connecting controller\");\n      }\n    }\n  }, {\n    key: \"disconnect\",\n    value: function disconnect() {\n      try {\n        this.controller.disconnect();\n        this.logDebugActivity(\"disconnect\");\n      } catch (error) {\n        this.handleError(error, \"disconnecting controller\");\n      }\n\n      this.targetObserver.stop();\n      this.valueObserver.stop();\n      this.bindingObserver.stop();\n    }\n  }, {\n    key: \"application\",\n    get: function get() {\n      return this.module.application;\n    }\n  }, {\n    key: \"identifier\",\n    get: function get() {\n      return this.module.identifier;\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return this.application.schema;\n    }\n  }, {\n    key: \"dispatcher\",\n    get: function get() {\n      return this.application.dispatcher;\n    }\n  }, {\n    key: \"element\",\n    get: function get() {\n      return this.scope.element;\n    }\n  }, {\n    key: \"parentElement\",\n    get: function get() {\n      return this.element.parentElement;\n    }\n  }, {\n    key: \"handleError\",\n    value: function handleError(error, message) {\n      var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      var identifier = this.identifier,\n          controller = this.controller,\n          element = this.element;\n      detail = Object.assign({\n        identifier: identifier,\n        controller: controller,\n        element: element\n      }, detail);\n      this.application.handleError(error, \"Error \".concat(message), detail);\n    }\n  }, {\n    key: \"targetConnected\",\n    value: function targetConnected(element, name) {\n      this.invokeControllerMethod(\"\".concat(name, \"TargetConnected\"), element);\n    }\n  }, {\n    key: \"targetDisconnected\",\n    value: function targetDisconnected(element, name) {\n      this.invokeControllerMethod(\"\".concat(name, \"TargetDisconnected\"), element);\n    }\n  }, {\n    key: \"invokeControllerMethod\",\n    value: function invokeControllerMethod(methodName) {\n      var controller = this.controller;\n\n      if (typeof controller[methodName] == \"function\") {\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n\n        controller[methodName].apply(controller, args);\n      }\n    }\n  }]);\n\n  return Context;\n}();\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n  var ancestors = getAncestorsForConstructor(constructor);\n  return Array.from(ancestors.reduce(function (values, constructor) {\n    getOwnStaticArrayValues(constructor, propertyName).forEach(function (name) {\n      return values.add(name);\n    });\n    return values;\n  }, new Set()));\n}\n\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n  var ancestors = getAncestorsForConstructor(constructor);\n  return ancestors.reduce(function (pairs, constructor) {\n    pairs.push.apply(pairs, _toConsumableArray(getOwnStaticObjectPairs(constructor, propertyName)));\n    return pairs;\n  }, []);\n}\n\nfunction getAncestorsForConstructor(constructor) {\n  var ancestors = [];\n\n  while (constructor) {\n    ancestors.push(constructor);\n    constructor = Object.getPrototypeOf(constructor);\n  }\n\n  return ancestors.reverse();\n}\n\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n  var definition = constructor[propertyName];\n  return Array.isArray(definition) ? definition : [];\n}\n\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n  var definition = constructor[propertyName];\n  return definition ? Object.keys(definition).map(function (key) {\n    return [key, definition[key]];\n  }) : [];\n}\n\nfunction bless(constructor) {\n  return shadow(constructor, getBlessedProperties(constructor));\n}\n\nfunction shadow(constructor, properties) {\n  var shadowConstructor = extend(constructor);\n  var shadowProperties = getShadowProperties(constructor.prototype, properties);\n  Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n  return shadowConstructor;\n}\n\nfunction getBlessedProperties(constructor) {\n  var blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n  return blessings.reduce(function (blessedProperties, blessing) {\n    var properties = blessing(constructor);\n\n    for (var key in properties) {\n      var descriptor = blessedProperties[key] || {};\n      blessedProperties[key] = Object.assign(descriptor, properties[key]);\n    }\n\n    return blessedProperties;\n  }, {});\n}\n\nfunction getShadowProperties(prototype, properties) {\n  return getOwnKeys(properties).reduce(function (shadowProperties, key) {\n    var descriptor = getShadowedDescriptor(prototype, properties, key);\n\n    if (descriptor) {\n      Object.assign(shadowProperties, _defineProperty({}, key, descriptor));\n    }\n\n    return shadowProperties;\n  }, {});\n}\n\nfunction getShadowedDescriptor(prototype, properties, key) {\n  var shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n  var shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n\n  if (!shadowedByValue) {\n    var descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n\n    if (shadowingDescriptor) {\n      descriptor.get = shadowingDescriptor.get || descriptor.get;\n      descriptor.set = shadowingDescriptor.set || descriptor.set;\n    }\n\n    return descriptor;\n  }\n}\n\nvar getOwnKeys = function () {\n  if (typeof Object.getOwnPropertySymbols == \"function\") {\n    return function (object) {\n      return [].concat(_toConsumableArray(Object.getOwnPropertyNames(object)), _toConsumableArray(Object.getOwnPropertySymbols(object)));\n    };\n  } else {\n    return Object.getOwnPropertyNames;\n  }\n}();\n\nvar extend = function () {\n  function extendWithReflect(constructor) {\n    function extended() {\n      return Reflect.construct(constructor, arguments, this instanceof extended ? this.constructor : void 0);\n    }\n\n    extended.prototype = Object.create(constructor.prototype, {\n      constructor: {\n        value: extended\n      }\n    });\n    Reflect.setPrototypeOf(extended, constructor);\n    return extended;\n  }\n\n  function testReflectExtension() {\n    var a = function a() {\n      this.a.call(this);\n    };\n\n    var b = extendWithReflect(a);\n\n    b.prototype.a = function () {};\n\n    return new b();\n  }\n\n  try {\n    testReflectExtension();\n    return extendWithReflect;\n  } catch (error) {\n    return function (constructor) {\n      return /*#__PURE__*/function (_constructor) {\n        _inherits(extended, _constructor);\n\n        var _super2 = _createSuper(extended);\n\n        function extended() {\n          _classCallCheck(this, extended);\n\n          return _super2.apply(this, arguments);\n        }\n\n        return extended;\n      }(constructor);\n    };\n  }\n}();\n\nfunction blessDefinition(definition) {\n  return {\n    identifier: definition.identifier,\n    controllerConstructor: bless(definition.controllerConstructor)\n  };\n}\n\nvar Module = /*#__PURE__*/function () {\n  function Module(application, definition) {\n    _classCallCheck(this, Module);\n\n    this.application = application;\n    this.definition = blessDefinition(definition);\n    this.contextsByScope = new WeakMap();\n    this.connectedContexts = new Set();\n  }\n\n  _createClass(Module, [{\n    key: \"identifier\",\n    get: function get() {\n      return this.definition.identifier;\n    }\n  }, {\n    key: \"controllerConstructor\",\n    get: function get() {\n      return this.definition.controllerConstructor;\n    }\n  }, {\n    key: \"contexts\",\n    get: function get() {\n      return Array.from(this.connectedContexts);\n    }\n  }, {\n    key: \"connectContextForScope\",\n    value: function connectContextForScope(scope) {\n      var context = this.fetchContextForScope(scope);\n      this.connectedContexts.add(context);\n      context.connect();\n    }\n  }, {\n    key: \"disconnectContextForScope\",\n    value: function disconnectContextForScope(scope) {\n      var context = this.contextsByScope.get(scope);\n\n      if (context) {\n        this.connectedContexts.delete(context);\n        context.disconnect();\n      }\n    }\n  }, {\n    key: \"fetchContextForScope\",\n    value: function fetchContextForScope(scope) {\n      var context = this.contextsByScope.get(scope);\n\n      if (!context) {\n        context = new Context(this, scope);\n        this.contextsByScope.set(scope, context);\n      }\n\n      return context;\n    }\n  }]);\n\n  return Module;\n}();\n\nvar ClassMap = /*#__PURE__*/function () {\n  function ClassMap(scope) {\n    _classCallCheck(this, ClassMap);\n\n    this.scope = scope;\n  }\n\n  _createClass(ClassMap, [{\n    key: \"has\",\n    value: function has(name) {\n      return this.data.has(this.getDataKey(name));\n    }\n  }, {\n    key: \"get\",\n    value: function get(name) {\n      return this.getAll(name)[0];\n    }\n  }, {\n    key: \"getAll\",\n    value: function getAll(name) {\n      var tokenString = this.data.get(this.getDataKey(name)) || \"\";\n      return tokenize(tokenString);\n    }\n  }, {\n    key: \"getAttributeName\",\n    value: function getAttributeName(name) {\n      return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n  }, {\n    key: \"getDataKey\",\n    value: function getDataKey(name) {\n      return \"\".concat(name, \"-class\");\n    }\n  }, {\n    key: \"data\",\n    get: function get() {\n      return this.scope.data;\n    }\n  }]);\n\n  return ClassMap;\n}();\n\nvar DataMap = /*#__PURE__*/function () {\n  function DataMap(scope) {\n    _classCallCheck(this, DataMap);\n\n    this.scope = scope;\n  }\n\n  _createClass(DataMap, [{\n    key: \"element\",\n    get: function get() {\n      return this.scope.element;\n    }\n  }, {\n    key: \"identifier\",\n    get: function get() {\n      return this.scope.identifier;\n    }\n  }, {\n    key: \"get\",\n    value: function get(key) {\n      var name = this.getAttributeNameForKey(key);\n      return this.element.getAttribute(name);\n    }\n  }, {\n    key: \"set\",\n    value: function set(key, value) {\n      var name = this.getAttributeNameForKey(key);\n      this.element.setAttribute(name, value);\n      return this.get(key);\n    }\n  }, {\n    key: \"has\",\n    value: function has(key) {\n      var name = this.getAttributeNameForKey(key);\n      return this.element.hasAttribute(name);\n    }\n  }, {\n    key: \"delete\",\n    value: function _delete(key) {\n      if (this.has(key)) {\n        var name = this.getAttributeNameForKey(key);\n        this.element.removeAttribute(name);\n        return true;\n      } else {\n        return false;\n      }\n    }\n  }, {\n    key: \"getAttributeNameForKey\",\n    value: function getAttributeNameForKey(key) {\n      return \"data-\".concat(this.identifier, \"-\").concat(dasherize(key));\n    }\n  }]);\n\n  return DataMap;\n}();\n\nvar Guide = /*#__PURE__*/function () {\n  function Guide(logger) {\n    _classCallCheck(this, Guide);\n\n    this.warnedKeysByObject = new WeakMap();\n    this.logger = logger;\n  }\n\n  _createClass(Guide, [{\n    key: \"warn\",\n    value: function warn(object, key, message) {\n      var warnedKeys = this.warnedKeysByObject.get(object);\n\n      if (!warnedKeys) {\n        warnedKeys = new Set();\n        this.warnedKeysByObject.set(object, warnedKeys);\n      }\n\n      if (!warnedKeys.has(key)) {\n        warnedKeys.add(key);\n        this.logger.warn(message, object);\n      }\n    }\n  }]);\n\n  return Guide;\n}();\n\nfunction attributeValueContainsToken(attributeName, token) {\n  return \"[\".concat(attributeName, \"~=\\\"\").concat(token, \"\\\"]\");\n}\n\nvar TargetSet = /*#__PURE__*/function () {\n  function TargetSet(scope) {\n    _classCallCheck(this, TargetSet);\n\n    this.scope = scope;\n  }\n\n  _createClass(TargetSet, [{\n    key: \"element\",\n    get: function get() {\n      return this.scope.element;\n    }\n  }, {\n    key: \"identifier\",\n    get: function get() {\n      return this.scope.identifier;\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return this.scope.schema;\n    }\n  }, {\n    key: \"has\",\n    value: function has(targetName) {\n      return this.find(targetName) != null;\n    }\n  }, {\n    key: \"find\",\n    value: function find() {\n      var _this11 = this;\n\n      for (var _len2 = arguments.length, targetNames = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        targetNames[_key2] = arguments[_key2];\n      }\n\n      return targetNames.reduce(function (target, targetName) {\n        return target || _this11.findTarget(targetName) || _this11.findLegacyTarget(targetName);\n      }, undefined);\n    }\n  }, {\n    key: \"findAll\",\n    value: function findAll() {\n      var _this12 = this;\n\n      for (var _len3 = arguments.length, targetNames = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        targetNames[_key3] = arguments[_key3];\n      }\n\n      return targetNames.reduce(function (targets, targetName) {\n        return [].concat(_toConsumableArray(targets), _toConsumableArray(_this12.findAllTargets(targetName)), _toConsumableArray(_this12.findAllLegacyTargets(targetName)));\n      }, []);\n    }\n  }, {\n    key: \"findTarget\",\n    value: function findTarget(targetName) {\n      var selector = this.getSelectorForTargetName(targetName);\n      return this.scope.findElement(selector);\n    }\n  }, {\n    key: \"findAllTargets\",\n    value: function findAllTargets(targetName) {\n      var selector = this.getSelectorForTargetName(targetName);\n      return this.scope.findAllElements(selector);\n    }\n  }, {\n    key: \"getSelectorForTargetName\",\n    value: function getSelectorForTargetName(targetName) {\n      var attributeName = this.schema.targetAttributeForScope(this.identifier);\n      return attributeValueContainsToken(attributeName, targetName);\n    }\n  }, {\n    key: \"findLegacyTarget\",\n    value: function findLegacyTarget(targetName) {\n      var selector = this.getLegacySelectorForTargetName(targetName);\n      return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n  }, {\n    key: \"findAllLegacyTargets\",\n    value: function findAllLegacyTargets(targetName) {\n      var _this13 = this;\n\n      var selector = this.getLegacySelectorForTargetName(targetName);\n      return this.scope.findAllElements(selector).map(function (element) {\n        return _this13.deprecate(element, targetName);\n      });\n    }\n  }, {\n    key: \"getLegacySelectorForTargetName\",\n    value: function getLegacySelectorForTargetName(targetName) {\n      var targetDescriptor = \"\".concat(this.identifier, \".\").concat(targetName);\n      return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n  }, {\n    key: \"deprecate\",\n    value: function deprecate(element, targetName) {\n      if (element) {\n        var identifier = this.identifier;\n        var attributeName = this.schema.targetAttribute;\n        var revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n        this.guide.warn(element, \"target:\".concat(targetName), \"Please replace \".concat(attributeName, \"=\\\"\").concat(identifier, \".\").concat(targetName, \"\\\" with \").concat(revisedAttributeName, \"=\\\"\").concat(targetName, \"\\\". \") + \"The \".concat(attributeName, \" attribute is deprecated and will be removed in a future version of Stimulus.\"));\n      }\n\n      return element;\n    }\n  }, {\n    key: \"guide\",\n    get: function get() {\n      return this.scope.guide;\n    }\n  }]);\n\n  return TargetSet;\n}();\n\nvar Scope = /*#__PURE__*/function () {\n  function Scope(schema, element, identifier, logger) {\n    var _this14 = this;\n\n    _classCallCheck(this, Scope);\n\n    this.targets = new TargetSet(this);\n    this.classes = new ClassMap(this);\n    this.data = new DataMap(this);\n\n    this.containsElement = function (element) {\n      return element.closest(_this14.controllerSelector) === _this14.element;\n    };\n\n    this.schema = schema;\n    this.element = element;\n    this.identifier = identifier;\n    this.guide = new Guide(logger);\n  }\n\n  _createClass(Scope, [{\n    key: \"findElement\",\n    value: function findElement(selector) {\n      return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n  }, {\n    key: \"findAllElements\",\n    value: function findAllElements(selector) {\n      return [].concat(_toConsumableArray(this.element.matches(selector) ? [this.element] : []), _toConsumableArray(this.queryElements(selector).filter(this.containsElement)));\n    }\n  }, {\n    key: \"queryElements\",\n    value: function queryElements(selector) {\n      return Array.from(this.element.querySelectorAll(selector));\n    }\n  }, {\n    key: \"controllerSelector\",\n    get: function get() {\n      return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n  }]);\n\n  return Scope;\n}();\n\nvar ScopeObserver = /*#__PURE__*/function () {\n  function ScopeObserver(element, schema, delegate) {\n    _classCallCheck(this, ScopeObserver);\n\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\n  _createClass(ScopeObserver, [{\n    key: \"start\",\n    value: function start() {\n      this.valueListObserver.start();\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      this.valueListObserver.stop();\n    }\n  }, {\n    key: \"controllerAttribute\",\n    get: function get() {\n      return this.schema.controllerAttribute;\n    }\n  }, {\n    key: \"parseValueForToken\",\n    value: function parseValueForToken(token) {\n      var element = token.element,\n          identifier = token.content;\n      var scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n      var scope = scopesByIdentifier.get(identifier);\n\n      if (!scope) {\n        scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n        scopesByIdentifier.set(identifier, scope);\n      }\n\n      return scope;\n    }\n  }, {\n    key: \"elementMatchedValue\",\n    value: function elementMatchedValue(element, value) {\n      var referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n      this.scopeReferenceCounts.set(value, referenceCount);\n\n      if (referenceCount == 1) {\n        this.delegate.scopeConnected(value);\n      }\n    }\n  }, {\n    key: \"elementUnmatchedValue\",\n    value: function elementUnmatchedValue(element, value) {\n      var referenceCount = this.scopeReferenceCounts.get(value);\n\n      if (referenceCount) {\n        this.scopeReferenceCounts.set(value, referenceCount - 1);\n\n        if (referenceCount == 1) {\n          this.delegate.scopeDisconnected(value);\n        }\n      }\n    }\n  }, {\n    key: \"fetchScopesByIdentifierForElement\",\n    value: function fetchScopesByIdentifierForElement(element) {\n      var scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n\n      if (!scopesByIdentifier) {\n        scopesByIdentifier = new Map();\n        this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n      }\n\n      return scopesByIdentifier;\n    }\n  }]);\n\n  return ScopeObserver;\n}();\n\nvar Router = /*#__PURE__*/function () {\n  function Router(application) {\n    _classCallCheck(this, Router);\n\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\n  _createClass(Router, [{\n    key: \"element\",\n    get: function get() {\n      return this.application.element;\n    }\n  }, {\n    key: \"schema\",\n    get: function get() {\n      return this.application.schema;\n    }\n  }, {\n    key: \"logger\",\n    get: function get() {\n      return this.application.logger;\n    }\n  }, {\n    key: \"controllerAttribute\",\n    get: function get() {\n      return this.schema.controllerAttribute;\n    }\n  }, {\n    key: \"modules\",\n    get: function get() {\n      return Array.from(this.modulesByIdentifier.values());\n    }\n  }, {\n    key: \"contexts\",\n    get: function get() {\n      return this.modules.reduce(function (contexts, module) {\n        return contexts.concat(module.contexts);\n      }, []);\n    }\n  }, {\n    key: \"start\",\n    value: function start() {\n      this.scopeObserver.start();\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      this.scopeObserver.stop();\n    }\n  }, {\n    key: \"loadDefinition\",\n    value: function loadDefinition(definition) {\n      this.unloadIdentifier(definition.identifier);\n      var module = new Module(this.application, definition);\n      this.connectModule(module);\n    }\n  }, {\n    key: \"unloadIdentifier\",\n    value: function unloadIdentifier(identifier) {\n      var module = this.modulesByIdentifier.get(identifier);\n\n      if (module) {\n        this.disconnectModule(module);\n      }\n    }\n  }, {\n    key: \"getContextForElementAndIdentifier\",\n    value: function getContextForElementAndIdentifier(element, identifier) {\n      var module = this.modulesByIdentifier.get(identifier);\n\n      if (module) {\n        return module.contexts.find(function (context) {\n          return context.element == element;\n        });\n      }\n    }\n  }, {\n    key: \"handleError\",\n    value: function handleError(error, message, detail) {\n      this.application.handleError(error, message, detail);\n    }\n  }, {\n    key: \"createScopeForElementAndIdentifier\",\n    value: function createScopeForElementAndIdentifier(element, identifier) {\n      return new Scope(this.schema, element, identifier, this.logger);\n    }\n  }, {\n    key: \"scopeConnected\",\n    value: function scopeConnected(scope) {\n      this.scopesByIdentifier.add(scope.identifier, scope);\n      var module = this.modulesByIdentifier.get(scope.identifier);\n\n      if (module) {\n        module.connectContextForScope(scope);\n      }\n    }\n  }, {\n    key: \"scopeDisconnected\",\n    value: function scopeDisconnected(scope) {\n      this.scopesByIdentifier.delete(scope.identifier, scope);\n      var module = this.modulesByIdentifier.get(scope.identifier);\n\n      if (module) {\n        module.disconnectContextForScope(scope);\n      }\n    }\n  }, {\n    key: \"connectModule\",\n    value: function connectModule(module) {\n      this.modulesByIdentifier.set(module.identifier, module);\n      var scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n      scopes.forEach(function (scope) {\n        return module.connectContextForScope(scope);\n      });\n    }\n  }, {\n    key: \"disconnectModule\",\n    value: function disconnectModule(module) {\n      this.modulesByIdentifier.delete(module.identifier);\n      var scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n      scopes.forEach(function (scope) {\n        return module.disconnectContextForScope(scope);\n      });\n    }\n  }]);\n\n  return Router;\n}();\n\nvar defaultSchema = {\n  controllerAttribute: \"data-controller\",\n  actionAttribute: \"data-action\",\n  targetAttribute: \"data-target\",\n  targetAttributeForScope: function targetAttributeForScope(identifier) {\n    return \"data-\".concat(identifier, \"-target\");\n  }\n};\n\nvar Application = /*#__PURE__*/function () {\n  function Application() {\n    var _this15 = this;\n\n    var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.documentElement;\n    var schema = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultSchema;\n\n    _classCallCheck(this, Application);\n\n    this.logger = console;\n    this.debug = false;\n\n    this.logDebugActivity = function (identifier, functionName) {\n      var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      if (_this15.debug) {\n        _this15.logFormattedMessage(identifier, functionName, detail);\n      }\n    };\n\n    this.element = element;\n    this.schema = schema;\n    this.dispatcher = new Dispatcher(this);\n    this.router = new Router(this);\n  }\n\n  _createClass(Application, [{\n    key: \"start\",\n    value: function () {\n      var _start = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {\n        return _regeneratorRuntime.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return domReady();\n\n              case 2:\n                this.logDebugActivity(\"application\", \"starting\");\n                this.dispatcher.start();\n                this.router.start();\n                this.logDebugActivity(\"application\", \"start\");\n\n              case 6:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function start() {\n        return _start.apply(this, arguments);\n      }\n\n      return start;\n    }()\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      this.logDebugActivity(\"application\", \"stopping\");\n      this.dispatcher.stop();\n      this.router.stop();\n      this.logDebugActivity(\"application\", \"stop\");\n    }\n  }, {\n    key: \"register\",\n    value: function register(identifier, controllerConstructor) {\n      if (controllerConstructor.shouldLoad) {\n        this.load({\n          identifier: identifier,\n          controllerConstructor: controllerConstructor\n        });\n      }\n    }\n  }, {\n    key: \"load\",\n    value: function load(head) {\n      var _this16 = this;\n\n      for (var _len4 = arguments.length, rest = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n        rest[_key4 - 1] = arguments[_key4];\n      }\n\n      var definitions = Array.isArray(head) ? head : [head].concat(rest);\n      definitions.forEach(function (definition) {\n        return _this16.router.loadDefinition(definition);\n      });\n    }\n  }, {\n    key: \"unload\",\n    value: function unload(head) {\n      var _this17 = this;\n\n      for (var _len5 = arguments.length, rest = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n        rest[_key5 - 1] = arguments[_key5];\n      }\n\n      var identifiers = Array.isArray(head) ? head : [head].concat(rest);\n      identifiers.forEach(function (identifier) {\n        return _this17.router.unloadIdentifier(identifier);\n      });\n    }\n  }, {\n    key: \"controllers\",\n    get: function get() {\n      return this.router.contexts.map(function (context) {\n        return context.controller;\n      });\n    }\n  }, {\n    key: \"getControllerForElementAndIdentifier\",\n    value: function getControllerForElementAndIdentifier(element, identifier) {\n      var context = this.router.getContextForElementAndIdentifier(element, identifier);\n      return context ? context.controller : null;\n    }\n  }, {\n    key: \"handleError\",\n    value: function handleError(error, message, detail) {\n      var _a;\n\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  }, {\n    key: \"logFormattedMessage\",\n    value: function logFormattedMessage(identifier, functionName) {\n      var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      detail = Object.assign({\n        application: this\n      }, detail);\n      this.logger.groupCollapsed(\"\".concat(identifier, \" #\").concat(functionName));\n      this.logger.log(\"details:\", Object.assign({}, detail));\n      this.logger.groupEnd();\n    }\n  }], [{\n    key: \"start\",\n    value: function start(element, schema) {\n      var application = new Application(element, schema);\n      application.start();\n      return application;\n    }\n  }]);\n\n  return Application;\n}();\n\nfunction domReady() {\n  return new Promise(function (resolve) {\n    if (document.readyState == \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", function () {\n        return resolve();\n      });\n    } else {\n      resolve();\n    }\n  });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n  var classes = readInheritableStaticArrayValues(constructor, \"classes\");\n  return classes.reduce(function (properties, classDefinition) {\n    return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n  }, {});\n}\n\nfunction propertiesForClassDefinition(key) {\n  var _ref12;\n\n  return _ref12 = {}, _defineProperty(_ref12, \"\".concat(key, \"Class\"), {\n    get: function get() {\n      var classes = this.classes;\n\n      if (classes.has(key)) {\n        return classes.get(key);\n      } else {\n        var attribute = classes.getAttributeName(key);\n        throw new Error(\"Missing attribute \\\"\".concat(attribute, \"\\\"\"));\n      }\n    }\n  }), _defineProperty(_ref12, \"\".concat(key, \"Classes\"), {\n    get: function get() {\n      return this.classes.getAll(key);\n    }\n  }), _defineProperty(_ref12, \"has\".concat(capitalize(key), \"Class\"), {\n    get: function get() {\n      return this.classes.has(key);\n    }\n  }), _ref12;\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n  var targets = readInheritableStaticArrayValues(constructor, \"targets\");\n  return targets.reduce(function (properties, targetDefinition) {\n    return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n  }, {});\n}\n\nfunction propertiesForTargetDefinition(name) {\n  var _ref13;\n\n  return _ref13 = {}, _defineProperty(_ref13, \"\".concat(name, \"Target\"), {\n    get: function get() {\n      var target = this.targets.find(name);\n\n      if (target) {\n        return target;\n      } else {\n        throw new Error(\"Missing target element \\\"\".concat(name, \"\\\" for \\\"\").concat(this.identifier, \"\\\" controller\"));\n      }\n    }\n  }), _defineProperty(_ref13, \"\".concat(name, \"Targets\"), {\n    get: function get() {\n      return this.targets.findAll(name);\n    }\n  }), _defineProperty(_ref13, \"has\".concat(capitalize(name), \"Target\"), {\n    get: function get() {\n      return this.targets.has(name);\n    }\n  }), _ref13;\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n  var valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n  var propertyDescriptorMap = {\n    valueDescriptorMap: {\n      get: function get() {\n        var _this18 = this;\n\n        return valueDefinitionPairs.reduce(function (result, valueDefinitionPair) {\n          var valueDescriptor = parseValueDefinitionPair(valueDefinitionPair);\n\n          var attributeName = _this18.data.getAttributeNameForKey(valueDescriptor.key);\n\n          return Object.assign(result, _defineProperty({}, attributeName, valueDescriptor));\n        }, {});\n      }\n    }\n  };\n  return valueDefinitionPairs.reduce(function (properties, valueDefinitionPair) {\n    return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n  }, propertyDescriptorMap);\n}\n\nfunction propertiesForValueDefinitionPair(valueDefinitionPair) {\n  var _ref14;\n\n  var definition = parseValueDefinitionPair(valueDefinitionPair);\n  var key = definition.key,\n      name = definition.name,\n      read = definition.reader,\n      write = definition.writer;\n  return _ref14 = {}, _defineProperty(_ref14, name, {\n    get: function get() {\n      var value = this.data.get(key);\n\n      if (value !== null) {\n        return read(value);\n      } else {\n        return definition.defaultValue;\n      }\n    },\n    set: function set(value) {\n      if (value === undefined) {\n        this.data.delete(key);\n      } else {\n        this.data.set(key, write(value));\n      }\n    }\n  }), _defineProperty(_ref14, \"has\".concat(capitalize(name)), {\n    get: function get() {\n      return this.data.has(key) || definition.hasCustomDefaultValue;\n    }\n  }), _ref14;\n}\n\nfunction parseValueDefinitionPair(_ref15) {\n  var _ref16 = _slicedToArray(_ref15, 2),\n      token = _ref16[0],\n      typeDefinition = _ref16[1];\n\n  return valueDescriptorForTokenAndTypeDefinition(token, typeDefinition);\n}\n\nfunction parseValueTypeConstant(constant) {\n  switch (constant) {\n    case Array:\n      return \"array\";\n\n    case Boolean:\n      return \"boolean\";\n\n    case Number:\n      return \"number\";\n\n    case Object:\n      return \"object\";\n\n    case String:\n      return \"string\";\n  }\n}\n\nfunction parseValueTypeDefault(defaultValue) {\n  switch (_typeof(defaultValue)) {\n    case \"boolean\":\n      return \"boolean\";\n\n    case \"number\":\n      return \"number\";\n\n    case \"string\":\n      return \"string\";\n  }\n\n  if (Array.isArray(defaultValue)) return \"array\";\n  if (Object.prototype.toString.call(defaultValue) === \"[object Object]\") return \"object\";\n}\n\nfunction parseValueTypeObject(typeObject) {\n  var typeFromObject = parseValueTypeConstant(typeObject.type);\n\n  if (typeFromObject) {\n    var defaultValueType = parseValueTypeDefault(typeObject.default);\n\n    if (typeFromObject !== defaultValueType) {\n      throw new Error(\"Type \\\"\".concat(typeFromObject, \"\\\" must match the type of the default value. Given default value: \\\"\").concat(typeObject.default, \"\\\" as \\\"\").concat(defaultValueType, \"\\\"\"));\n    }\n\n    return typeFromObject;\n  }\n}\n\nfunction parseValueTypeDefinition(typeDefinition) {\n  var typeFromObject = parseValueTypeObject(typeDefinition);\n  var typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n  var typeFromConstant = parseValueTypeConstant(typeDefinition);\n  var type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n  if (type) return type;\n  throw new Error(\"Unknown value type \\\"\".concat(typeDefinition, \"\\\"\"));\n}\n\nfunction defaultValueForDefinition(typeDefinition) {\n  var constant = parseValueTypeConstant(typeDefinition);\n  if (constant) return defaultValuesByType[constant];\n  var defaultValue = typeDefinition.default;\n  if (defaultValue !== undefined) return defaultValue;\n  return typeDefinition;\n}\n\nfunction valueDescriptorForTokenAndTypeDefinition(token, typeDefinition) {\n  var key = \"\".concat(dasherize(token), \"-value\");\n  var type = parseValueTypeDefinition(typeDefinition);\n  return {\n    type: type,\n    key: key,\n    name: camelize(key),\n\n    get defaultValue() {\n      return defaultValueForDefinition(typeDefinition);\n    },\n\n    get hasCustomDefaultValue() {\n      return parseValueTypeDefault(typeDefinition) !== undefined;\n    },\n\n    reader: readers[type],\n    writer: writers[type] || writers.default\n  };\n}\n\nvar defaultValuesByType = {\n  get array() {\n    return [];\n  },\n\n  boolean: false,\n  number: 0,\n\n  get object() {\n    return {};\n  },\n\n  string: \"\"\n};\nvar readers = {\n  array: function array(value) {\n    var array = JSON.parse(value);\n\n    if (!Array.isArray(array)) {\n      throw new TypeError(\"Expected array\");\n    }\n\n    return array;\n  },\n  boolean: function boolean(value) {\n    return !(value == \"0\" || value == \"false\");\n  },\n  number: function number(value) {\n    return Number(value);\n  },\n  object: function object(value) {\n    var object = JSON.parse(value);\n\n    if (object === null || _typeof(object) != \"object\" || Array.isArray(object)) {\n      throw new TypeError(\"Expected object\");\n    }\n\n    return object;\n  },\n  string: function string(value) {\n    return value;\n  }\n};\nvar writers = {\n  default: writeString,\n  array: writeJSON,\n  object: writeJSON\n};\n\nfunction writeJSON(value) {\n  return JSON.stringify(value);\n}\n\nfunction writeString(value) {\n  return \"\".concat(value);\n}\n\nvar Controller = /*#__PURE__*/function () {\n  function Controller(context) {\n    _classCallCheck(this, Controller);\n\n    this.context = context;\n  }\n\n  _createClass(Controller, [{\n    key: \"application\",\n    get: function get() {\n      return this.context.application;\n    }\n  }, {\n    key: \"scope\",\n    get: function get() {\n      return this.context.scope;\n    }\n  }, {\n    key: \"element\",\n    get: function get() {\n      return this.scope.element;\n    }\n  }, {\n    key: \"identifier\",\n    get: function get() {\n      return this.scope.identifier;\n    }\n  }, {\n    key: \"targets\",\n    get: function get() {\n      return this.scope.targets;\n    }\n  }, {\n    key: \"classes\",\n    get: function get() {\n      return this.scope.classes;\n    }\n  }, {\n    key: \"data\",\n    get: function get() {\n      return this.scope.data;\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {}\n  }, {\n    key: \"connect\",\n    value: function connect() {}\n  }, {\n    key: \"disconnect\",\n    value: function disconnect() {}\n  }, {\n    key: \"dispatch\",\n    value: function dispatch(eventName) {\n      var _ref17 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n          _ref17$target = _ref17.target,\n          target = _ref17$target === void 0 ? this.element : _ref17$target,\n          _ref17$detail = _ref17.detail,\n          detail = _ref17$detail === void 0 ? {} : _ref17$detail,\n          _ref17$prefix = _ref17.prefix,\n          prefix = _ref17$prefix === void 0 ? this.identifier : _ref17$prefix,\n          _ref17$bubbles = _ref17.bubbles,\n          bubbles = _ref17$bubbles === void 0 ? true : _ref17$bubbles,\n          _ref17$cancelable = _ref17.cancelable,\n          cancelable = _ref17$cancelable === void 0 ? true : _ref17$cancelable;\n\n      var type = prefix ? \"\".concat(prefix, \":\").concat(eventName) : eventName;\n      var event = new CustomEvent(type, {\n        detail: detail,\n        bubbles: bubbles,\n        cancelable: cancelable\n      });\n      target.dispatchEvent(event);\n      return event;\n    }\n  }], [{\n    key: \"shouldLoad\",\n    get: function get() {\n      return true;\n    }\n  }]);\n\n  return Controller;\n}();\n\nController.blessings = [ClassPropertiesBlessing, TargetPropertiesBlessing, ValuePropertiesBlessing];\nController.targets = [];\nController.values = {};\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, StringMapObserver, TokenListObserver, ValueListObserver, _add as add, defaultSchema, del, fetch, prune };","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/*!\n * Chart.js v4.4.5\n * https://www.chartjs.org\n * (c) 2024 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as _color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as _getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as _elementsEqual, ai as _isClickEvent, aj as _isBetween, ak as _readValueToProps, al as _updateBezierControlPoints, am as _computeSegments, an as _boundSegments, ao as _steppedInterpolation, ap as _bezierInterpolation, aq as _pointInLine, ar as _steppedLineTo, as as _bezierCurveTo, at as drawPoint, au as addRoundedRectPath, av as toTRBL, aw as toTRBLCorners, ax as _boundSegment, ay as _normalizeAngle, az as getRtlAdapter, aA as overrideTextDirection, aB as _textX, aC as restoreTextDirection, aD as drawPointLegend, aE as distanceBetweenPoints, aF as noop, aG as _setMinAndMaxByKey, aH as niceNum, aI as almostWhole, aJ as almostEquals, aK as _decimalPlaces, aL as Ticks, aM as log10, aN as _longestText, aO as _filterBetween, aP as _lookup } from './chunks/helpers.segment.js';\nimport '@kurkle/color';\n\nvar Animator = /*#__PURE__*/function () {\n  function Animator() {\n    _classCallCheck(this, Animator);\n\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n\n  _createClass(Animator, [{\n    key: \"_notify\",\n    value: function _notify(chart, anims, date, type) {\n      var callbacks = anims.listeners[type];\n      var numSteps = anims.duration;\n      callbacks.forEach(function (fn) {\n        return fn({\n          chart: chart,\n          initial: anims.initial,\n          numSteps: numSteps,\n          currentStep: Math.min(date - anims.start, numSteps)\n        });\n      });\n    }\n  }, {\n    key: \"_refresh\",\n    value: function _refresh() {\n      var _this = this;\n\n      if (this._request) {\n        return;\n      }\n\n      this._running = true;\n      this._request = requestAnimFrame.call(window, function () {\n        _this._update();\n\n        _this._request = null;\n\n        if (_this._running) {\n          _this._refresh();\n        }\n      });\n    }\n  }, {\n    key: \"_update\",\n    value: function _update() {\n      var _this2 = this;\n\n      var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Date.now();\n      var remaining = 0;\n\n      this._charts.forEach(function (anims, chart) {\n        if (!anims.running || !anims.items.length) {\n          return;\n        }\n\n        var items = anims.items;\n        var i = items.length - 1;\n        var draw = false;\n        var item;\n\n        for (; i >= 0; --i) {\n          item = items[i];\n\n          if (item._active) {\n            if (item._total > anims.duration) {\n              anims.duration = item._total;\n            }\n\n            item.tick(date);\n            draw = true;\n          } else {\n            items[i] = items[items.length - 1];\n            items.pop();\n          }\n        }\n\n        if (draw) {\n          chart.draw();\n\n          _this2._notify(chart, anims, date, 'progress');\n        }\n\n        if (!items.length) {\n          anims.running = false;\n\n          _this2._notify(chart, anims, date, 'complete');\n\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    key: \"_getAnims\",\n    value: function _getAnims(chart) {\n      var charts = this._charts;\n      var anims = charts.get(chart);\n\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\n      return anims;\n    }\n  }, {\n    key: \"listen\",\n    value: function listen(chart, event, cb) {\n      this._getAnims(chart).listeners[event].push(cb);\n    }\n  }, {\n    key: \"add\",\n    value: function add(chart, items) {\n      var _this$_getAnims$items;\n\n      if (!items || !items.length) {\n        return;\n      }\n\n      (_this$_getAnims$items = this._getAnims(chart).items).push.apply(_this$_getAnims$items, _toConsumableArray(items));\n    }\n  }, {\n    key: \"has\",\n    value: function has(chart) {\n      return this._getAnims(chart).items.length > 0;\n    }\n  }, {\n    key: \"start\",\n    value: function start(chart) {\n      var anims = this._charts.get(chart);\n\n      if (!anims) {\n        return;\n      }\n\n      anims.running = true;\n      anims.start = Date.now();\n      anims.duration = anims.items.reduce(function (acc, cur) {\n        return Math.max(acc, cur._duration);\n      }, 0);\n\n      this._refresh();\n    }\n  }, {\n    key: \"running\",\n    value: function running(chart) {\n      if (!this._running) {\n        return false;\n      }\n\n      var anims = this._charts.get(chart);\n\n      if (!anims || !anims.running || !anims.items.length) {\n        return false;\n      }\n\n      return true;\n    }\n  }, {\n    key: \"stop\",\n    value: function stop(chart) {\n      var anims = this._charts.get(chart);\n\n      if (!anims || !anims.items.length) {\n        return;\n      }\n\n      var items = anims.items;\n      var i = items.length - 1;\n\n      for (; i >= 0; --i) {\n        items[i].cancel();\n      }\n\n      anims.items = [];\n\n      this._notify(chart, anims, Date.now(), 'complete');\n    }\n  }, {\n    key: \"remove\",\n    value: function remove(chart) {\n      return this._charts.delete(chart);\n    }\n  }]);\n\n  return Animator;\n}();\n\nvar animator = /* #__PURE__ */new Animator();\nvar transparent = 'transparent';\nvar interpolators = {\n  boolean: function boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  color: function color(from, to, factor) {\n    var c0 = _color(from || transparent);\n\n    var c1 = c0.valid && _color(to || transparent);\n\n    return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n  },\n  number: function number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\n\nvar Animation = /*#__PURE__*/function () {\n  function Animation(cfg, target, prop, to) {\n    _classCallCheck(this, Animation);\n\n    var currentValue = target[prop];\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    var from = resolve([cfg.from, currentValue, to]);\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  _createClass(Animation, [{\n    key: \"active\",\n    value: function active() {\n      return this._active;\n    }\n  }, {\n    key: \"update\",\n    value: function update(cfg, to, date) {\n      if (this._active) {\n        this._notify(false);\n\n        var currentValue = this._target[this._prop];\n        var elapsed = date - this._start;\n        var 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    key: \"cancel\",\n    value: function cancel() {\n      if (this._active) {\n        this.tick(Date.now());\n        this._active = false;\n\n        this._notify(false);\n      }\n    }\n  }, {\n    key: \"tick\",\n    value: function tick(date) {\n      var elapsed = date - this._start;\n      var duration = this._duration;\n      var prop = this._prop;\n      var from = this._from;\n      var loop = this._loop;\n      var to = this._to;\n      var factor;\n      this._active = from !== to && (loop || elapsed < duration);\n\n      if (!this._active) {\n        this._target[prop] = to;\n\n        this._notify(true);\n\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      this._target[prop] = this._fn(from, to, factor);\n    }\n  }, {\n    key: \"wait\",\n    value: function wait() {\n      var promises = this._promises || (this._promises = []);\n      return new Promise(function (res, rej) {\n        promises.push({\n          res: res,\n          rej: rej\n        });\n      });\n    }\n  }, {\n    key: \"_notify\",\n    value: function _notify(resolved) {\n      var method = resolved ? 'res' : 'rej';\n      var promises = this._promises || [];\n\n      for (var i = 0; i < promises.length; i++) {\n        promises[i][method]();\n      }\n    }\n  }]);\n\n  return Animation;\n}();\n\nvar Animations = /*#__PURE__*/function () {\n  function Animations(chart, config) {\n    _classCallCheck(this, Animations);\n\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n\n  _createClass(Animations, [{\n    key: \"configure\",\n    value: function configure(config) {\n      if (!isObject(config)) {\n        return;\n      }\n\n      var animationOptions = Object.keys(defaults.animation);\n      var animatedProps = this._properties;\n      Object.getOwnPropertyNames(config).forEach(function (key) {\n        var cfg = config[key];\n\n        if (!isObject(cfg)) {\n          return;\n        }\n\n        var resolved = {};\n\n        for (var _i = 0, _animationOptions = animationOptions; _i < _animationOptions.length; _i++) {\n          var option = _animationOptions[_i];\n          resolved[option] = cfg[option];\n        }\n\n        (isArray(cfg.properties) && cfg.properties || [key]).forEach(function (prop) {\n          if (prop === key || !animatedProps.has(prop)) {\n            animatedProps.set(prop, resolved);\n          }\n        });\n      });\n    }\n  }, {\n    key: \"_animateOptions\",\n    value: function _animateOptions(target, values) {\n      var newOptions = values.options;\n      var options = resolveTargetOptions(target, newOptions);\n\n      if (!options) {\n        return [];\n      }\n\n      var animations = this._createAnimations(options, newOptions);\n\n      if (newOptions.$shared) {\n        awaitAll(target.options.$animations, newOptions).then(function () {\n          target.options = newOptions;\n        }, function () {});\n      }\n\n      return animations;\n    }\n  }, {\n    key: \"_createAnimations\",\n    value: function _createAnimations(target, values) {\n      var animatedProps = this._properties;\n      var animations = [];\n      var running = target.$animations || (target.$animations = {});\n      var props = Object.keys(values);\n      var date = Date.now();\n      var i;\n\n      for (i = props.length - 1; i >= 0; --i) {\n        var prop = props[i];\n\n        if (prop.charAt(0) === '$') {\n          continue;\n        }\n\n        if (prop === 'options') {\n          animations.push.apply(animations, _toConsumableArray(this._animateOptions(target, values)));\n          continue;\n        }\n\n        var value = values[prop];\n        var animation = running[prop];\n        var cfg = animatedProps.get(prop);\n\n        if (animation) {\n          if (cfg && animation.active()) {\n            animation.update(cfg, value, date);\n            continue;\n          } else {\n            animation.cancel();\n          }\n        }\n\n        if (!cfg || !cfg.duration) {\n          target[prop] = value;\n          continue;\n        }\n\n        running[prop] = animation = new Animation(cfg, target, prop, value);\n        animations.push(animation);\n      }\n\n      return animations;\n    }\n  }, {\n    key: \"update\",\n    value: function update(target, values) {\n      if (this._properties.size === 0) {\n        Object.assign(target, values);\n        return;\n      }\n\n      var animations = this._createAnimations(target, values);\n\n      if (animations.length) {\n        animator.add(this._chart, animations);\n        return true;\n      }\n    }\n  }]);\n\n  return Animations;\n}();\n\nfunction awaitAll(animations, properties) {\n  var running = [];\n  var keys = Object.keys(properties);\n\n  for (var i = 0; i < keys.length; i++) {\n    var anim = animations[keys[i]];\n\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n\n  return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n\n  var options = target.options;\n\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n\n  if (options.$shared) {\n    target.options = options = Object.assign({}, options, {\n      $shared: false,\n      $animations: {}\n    });\n  }\n\n  return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n  var opts = scale && scale.options || {};\n  var reverse = opts.reverse;\n  var min = opts.min === undefined ? allowedOverflow : 0;\n  var 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\n  var x = scaleClip(xScale, allowedOverflow);\n  var y = scaleClip(yScale, allowedOverflow);\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  var 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  var keys = [];\n\n  var metasets = chart._getSortedDatasetMetas(filterVisible);\n\n  var i, ilen;\n\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n\n  return keys;\n}\n\nfunction _applyStack(stack, value, dsIndex) {\n  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  var keys = stack.keys;\n  var singleMode = options.mode === 'single';\n  var i, ilen, datasetIndex, otherValue;\n\n  if (value === null) {\n    return;\n  }\n\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n\n    if (datasetIndex === dsIndex) {\n      if (options.all) {\n        continue;\n      }\n\n      break;\n    }\n\n    otherValue = stack.values[datasetIndex];\n\n    if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n      value += otherValue;\n    }\n  }\n\n  return value;\n}\n\nfunction convertObjectDataToArray(data, meta) {\n  var iScale = meta.iScale,\n      vScale = meta.vScale;\n  var iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n  var vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n  var keys = Object.keys(data);\n  var adata = new Array(keys.length);\n  var i, ilen, key;\n\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    var _adata$i;\n\n    key = keys[i];\n    adata[i] = (_adata$i = {}, _defineProperty(_adata$i, iAxisKey, key), _defineProperty(_adata$i, vAxisKey, data[key]), _adata$i);\n  }\n\n  return adata;\n}\n\nfunction isStacked(scale, meta) {\n  var stacked = scale && scale.options.stacked;\n  return stacked || stacked === undefined && meta.stack !== undefined;\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n  return \"\".concat(indexScale.id, \".\").concat(valueScale.id, \".\").concat(meta.stack || meta.type);\n}\n\nfunction getUserBounds(scale) {\n  var _scale$getUserBounds = scale.getUserBounds(),\n      min = _scale$getUserBounds.min,\n      max = _scale$getUserBounds.max,\n      minDefined = _scale$getUserBounds.minDefined,\n      maxDefined = _scale$getUserBounds.maxDefined;\n\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  var subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  var _iterator = _createForOfIteratorHelper(vScale.getMatchingVisibleMetas(type).reverse()),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var meta = _step.value;\n      var value = stack[meta.index];\n\n      if (positive && value > 0 || !positive && value < 0) {\n        return meta.index;\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  return null;\n}\n\nfunction updateStacks(controller, parsed) {\n  var chart = controller.chart,\n      meta = controller._cachedMeta;\n  var stacks = chart._stacks || (chart._stacks = {});\n  var iScale = meta.iScale,\n      vScale = meta.vScale,\n      datasetIndex = meta.index;\n  var iAxis = iScale.axis;\n  var vAxis = vScale.axis;\n  var key = getStackKey(iScale, vScale, meta);\n  var ilen = parsed.length;\n  var stack;\n\n  for (var i = 0; i < ilen; ++i) {\n    var item = parsed[i];\n    var _index = item[iAxis],\n        value = item[vAxis];\n    var itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, _index);\n    stack[datasetIndex] = value;\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n    var visualValues = stack._visualValues || (stack._visualValues = {});\n    visualValues[datasetIndex] = value;\n  }\n}\n\nfunction getFirstScaleId(chart, axis) {\n  var scales = chart.scales;\n  return Object.keys(scales).filter(function (key) {\n    return scales[key].axis === axis;\n  }).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n  return createContext(parent, {\n    active: false,\n    dataset: undefined,\n    datasetIndex: index,\n    index: index,\n    mode: 'default',\n    type: 'dataset'\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: element,\n    index: index,\n    mode: 'default',\n    type: 'data'\n  });\n}\n\nfunction clearStacks(meta, items) {\n  var datasetIndex = meta.controller.index;\n  var axis = meta.vScale && meta.vScale.axis;\n\n  if (!axis) {\n    return;\n  }\n\n  items = items || meta._parsed;\n\n  var _iterator2 = _createForOfIteratorHelper(items),\n      _step2;\n\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var parsed = _step2.value;\n      var stacks = parsed._stacks;\n\n      if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n        return;\n      }\n\n      delete stacks[axis][datasetIndex];\n\n      if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n        delete stacks[axis]._visualValues[datasetIndex];\n      }\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n}\n\nvar isDirectUpdateMode = function isDirectUpdateMode(mode) {\n  return mode === 'reset' || mode === 'none';\n};\n\nvar cloneIfNotShared = function cloneIfNotShared(cached, shared) {\n  return shared ? cached : Object.assign({}, cached);\n};\n\nvar createStack = function createStack(canStack, meta, chart) {\n  return canStack && !meta.hidden && meta._stacked && {\n    keys: getSortedDatasetIndices(chart, true),\n    values: null\n  };\n};\n\nvar DatasetController = /*#__PURE__*/function () {\n  function DatasetController(chart, datasetIndex) {\n    _classCallCheck(this, DatasetController);\n\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    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 = (this instanceof DatasetController ? this.constructor : void 0).datasetElementType;\n    this.dataElementType = (this instanceof DatasetController ? this.constructor : void 0).dataElementType;\n    this.initialize();\n  }\n\n  _createClass(DatasetController, [{\n    key: \"initialize\",\n    value: function initialize() {\n      var 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    key: \"updateIndex\",\n    value: function updateIndex(datasetIndex) {\n      if (this.index !== datasetIndex) {\n        clearStacks(this._cachedMeta);\n      }\n\n      this.index = datasetIndex;\n    }\n  }, {\n    key: \"linkScales\",\n    value: function linkScales() {\n      var chart = this.chart;\n      var meta = this._cachedMeta;\n      var dataset = this.getDataset();\n\n      var chooseId = function chooseId(axis, x, y, r) {\n        return axis === 'x' ? x : axis === 'r' ? r : y;\n      };\n\n      var xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n      var yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n      var rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n      var indexAxis = meta.indexAxis;\n      var iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n      var 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    key: \"getDataset\",\n    value: function getDataset() {\n      return this.chart.data.datasets[this.index];\n    }\n  }, {\n    key: \"getMeta\",\n    value: function getMeta() {\n      return this.chart.getDatasetMeta(this.index);\n    }\n  }, {\n    key: \"getScaleForId\",\n    value: function getScaleForId(scaleID) {\n      return this.chart.scales[scaleID];\n    }\n  }, {\n    key: \"_getOtherScale\",\n    value: function _getOtherScale(scale) {\n      var meta = this._cachedMeta;\n      return scale === meta.iScale ? meta.vScale : meta.iScale;\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this._update('reset');\n    }\n  }, {\n    key: \"_destroy\",\n    value: function _destroy() {\n      var meta = this._cachedMeta;\n\n      if (this._data) {\n        unlistenArrayEvents(this._data, this);\n      }\n\n      if (meta._stacked) {\n        clearStacks(meta);\n      }\n    }\n  }, {\n    key: \"_dataCheck\",\n    value: function _dataCheck() {\n      var dataset = this.getDataset();\n      var data = dataset.data || (dataset.data = []);\n      var _data = this._data;\n\n      if (isObject(data)) {\n        var meta = this._cachedMeta;\n        this._data = convertObjectDataToArray(data, meta);\n      } else if (_data !== data) {\n        if (_data) {\n          unlistenArrayEvents(_data, this);\n          var _meta = this._cachedMeta;\n          clearStacks(_meta);\n          _meta._parsed = [];\n        }\n\n        if (data && Object.isExtensible(data)) {\n          listenArrayEvents(data, this);\n        }\n\n        this._syncList = [];\n        this._data = data;\n      }\n    }\n  }, {\n    key: \"addElements\",\n    value: function addElements() {\n      var meta = this._cachedMeta;\n\n      this._dataCheck();\n\n      if (this.datasetElementType) {\n        meta.dataset = new this.datasetElementType();\n      }\n    }\n  }, {\n    key: \"buildOrUpdateElements\",\n    value: function buildOrUpdateElements(resetNewElements) {\n      var meta = this._cachedMeta;\n      var dataset = this.getDataset();\n      var stackChanged = false;\n\n      this._dataCheck();\n\n      var oldStacked = meta._stacked;\n      meta._stacked = isStacked(meta.vScale, meta);\n\n      if (meta.stack !== dataset.stack) {\n        stackChanged = true;\n        clearStacks(meta);\n        meta.stack = dataset.stack;\n      }\n\n      this._resyncElements(resetNewElements);\n\n      if (stackChanged || oldStacked !== meta._stacked) {\n        updateStacks(this, meta._parsed);\n        meta._stacked = isStacked(meta.vScale, meta);\n      }\n    }\n  }, {\n    key: \"configure\",\n    value: function configure() {\n      var config = this.chart.config;\n      var scopeKeys = config.datasetScopeKeys(this._type);\n      var 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    key: \"parse\",\n    value: function parse(start, count) {\n      var meta = this._cachedMeta,\n          data = this._data;\n      var iScale = meta.iScale,\n          _stacked = meta._stacked;\n      var iAxis = iScale.axis;\n      var sorted = start === 0 && count === data.length ? true : meta._sorted;\n      var prev = start > 0 && meta._parsed[start - 1];\n      var 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        var isNotInOrderComparedToPrev = function isNotInOrderComparedToPrev() {\n          return cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n        };\n\n        for (i = 0; i < count; ++i) {\n          meta._parsed[i + start] = cur = parsed[i];\n\n          if (sorted) {\n            if (isNotInOrderComparedToPrev()) {\n              sorted = false;\n            }\n\n            prev = cur;\n          }\n        }\n\n        meta._sorted = sorted;\n      }\n\n      if (_stacked) {\n        updateStacks(this, parsed);\n      }\n    }\n  }, {\n    key: \"parsePrimitiveData\",\n    value: function parsePrimitiveData(meta, data, start, count) {\n      var iScale = meta.iScale,\n          vScale = meta.vScale;\n      var iAxis = iScale.axis;\n      var vAxis = vScale.axis;\n      var labels = iScale.getLabels();\n      var singleScale = iScale === vScale;\n      var parsed = new Array(count);\n      var i, ilen, index;\n\n      for (i = 0, ilen = count; i < ilen; ++i) {\n        var _parsed$i;\n\n        index = i + start;\n        parsed[i] = (_parsed$i = {}, _defineProperty(_parsed$i, iAxis, singleScale || iScale.parse(labels[index], index)), _defineProperty(_parsed$i, vAxis, vScale.parse(data[index], index)), _parsed$i);\n      }\n\n      return parsed;\n    }\n  }, {\n    key: \"parseArrayData\",\n    value: function parseArrayData(meta, data, start, count) {\n      var xScale = meta.xScale,\n          yScale = meta.yScale;\n      var parsed = new Array(count);\n      var 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\n      return parsed;\n    }\n  }, {\n    key: \"parseObjectData\",\n    value: function parseObjectData(meta, data, start, count) {\n      var xScale = meta.xScale,\n          yScale = meta.yScale;\n      var _this$_parsing = this._parsing,\n          _this$_parsing$xAxisK = _this$_parsing.xAxisKey,\n          xAxisKey = _this$_parsing$xAxisK === void 0 ? 'x' : _this$_parsing$xAxisK,\n          _this$_parsing$yAxisK = _this$_parsing.yAxisKey,\n          yAxisKey = _this$_parsing$yAxisK === void 0 ? 'y' : _this$_parsing$yAxisK;\n      var parsed = new Array(count);\n      var 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\n      return parsed;\n    }\n  }, {\n    key: \"getParsed\",\n    value: function getParsed(index) {\n      return this._cachedMeta._parsed[index];\n    }\n  }, {\n    key: \"getDataElement\",\n    value: function getDataElement(index) {\n      return this._cachedMeta.data[index];\n    }\n  }, {\n    key: \"applyStack\",\n    value: function applyStack(scale, parsed, mode) {\n      var chart = this.chart;\n      var meta = this._cachedMeta;\n      var value = parsed[scale.axis];\n      var stack = {\n        keys: getSortedDatasetIndices(chart, true),\n        values: parsed._stacks[scale.axis]._visualValues\n      };\n      return _applyStack(stack, value, meta.index, {\n        mode: mode\n      });\n    }\n  }, {\n    key: \"updateRangeFromParsed\",\n    value: function updateRangeFromParsed(range, scale, parsed, stack) {\n      var parsedValue = parsed[scale.axis];\n      var value = parsedValue === null ? NaN : parsedValue;\n      var values = stack && parsed._stacks[scale.axis];\n\n      if (stack && values) {\n        stack.values = values;\n        value = _applyStack(stack, parsedValue, this._cachedMeta.index);\n      }\n\n      range.min = Math.min(range.min, value);\n      range.max = Math.max(range.max, value);\n    }\n  }, {\n    key: \"getMinMax\",\n    value: function getMinMax(scale, canStack) {\n      var meta = this._cachedMeta;\n      var _parsed = meta._parsed;\n      var sorted = meta._sorted && scale === meta.iScale;\n      var ilen = _parsed.length;\n\n      var otherScale = this._getOtherScale(scale);\n\n      var stack = createStack(canStack, meta, this.chart);\n      var range = {\n        min: Number.POSITIVE_INFINITY,\n        max: Number.NEGATIVE_INFINITY\n      };\n\n      var _getUserBounds = getUserBounds(otherScale),\n          otherMin = _getUserBounds.min,\n          otherMax = _getUserBounds.max;\n\n      var i, parsed;\n\n      function _skip() {\n        parsed = _parsed[i];\n        var otherValue = parsed[otherScale.axis];\n        return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n      }\n\n      for (i = 0; i < ilen; ++i) {\n        if (_skip()) {\n          continue;\n        }\n\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n\n        if (sorted) {\n          break;\n        }\n      }\n\n      if (sorted) {\n        for (i = ilen - 1; i >= 0; --i) {\n          if (_skip()) {\n            continue;\n          }\n\n          this.updateRangeFromParsed(range, scale, parsed, stack);\n          break;\n        }\n      }\n\n      return range;\n    }\n  }, {\n    key: \"getAllParsedValues\",\n    value: function getAllParsedValues(scale) {\n      var parsed = this._cachedMeta._parsed;\n      var values = [];\n      var i, ilen, value;\n\n      for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n        value = parsed[i][scale.axis];\n\n        if (isNumberFinite(value)) {\n          values.push(value);\n        }\n      }\n\n      return values;\n    }\n  }, {\n    key: \"getMaxOverflow\",\n    value: function getMaxOverflow() {\n      return false;\n    }\n  }, {\n    key: \"getLabelAndValue\",\n    value: function getLabelAndValue(index) {\n      var meta = this._cachedMeta;\n      var iScale = meta.iScale;\n      var vScale = meta.vScale;\n      var 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    key: \"_update\",\n    value: function _update(mode) {\n      var 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    key: \"update\",\n    value: function update(mode) {}\n  }, {\n    key: \"draw\",\n    value: function draw() {\n      var ctx = this._ctx;\n      var chart = this.chart;\n      var meta = this._cachedMeta;\n      var elements = meta.data || [];\n      var area = chart.chartArea;\n      var active = [];\n      var start = this._drawStart || 0;\n      var count = this._drawCount || elements.length - start;\n      var drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n      var 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        var element = elements[i];\n\n        if (element.hidden) {\n          continue;\n        }\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    key: \"getStyle\",\n    value: function getStyle(index, active) {\n      var mode = active ? 'active' : 'default';\n      return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n    }\n  }, {\n    key: \"getContext\",\n    value: function getContext(index, active, mode) {\n      var dataset = this.getDataset();\n      var context;\n\n      if (index >= 0 && index < this._cachedMeta.data.length) {\n        var element = this._cachedMeta.data[index];\n        context = element.$context || (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 || (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    key: \"resolveDatasetElementOptions\",\n    value: function resolveDatasetElementOptions(mode) {\n      return this._resolveElementOptions(this.datasetElementType.id, mode);\n    }\n  }, {\n    key: \"resolveDataElementOptions\",\n    value: function resolveDataElementOptions(index, mode) {\n      return this._resolveElementOptions(this.dataElementType.id, mode, index);\n    }\n  }, {\n    key: \"_resolveElementOptions\",\n    value: function _resolveElementOptions(elementType) {\n      var _this3 = this;\n\n      var mode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';\n      var index = arguments.length > 2 ? arguments[2] : undefined;\n      var active = mode === 'active';\n      var cache = this._cachedDataOpts;\n      var cacheKey = elementType + '-' + mode;\n      var cached = cache[cacheKey];\n      var sharing = this.enableOptionSharing && defined(index);\n\n      if (cached) {\n        return cloneIfNotShared(cached, sharing);\n      }\n\n      var config = this.chart.config;\n      var scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n      var prefixes = active ? [\"\".concat(elementType, \"Hover\"), 'hover', elementType, ''] : [elementType, ''];\n      var scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      var names = Object.keys(defaults.elements[elementType]);\n\n      var context = function context() {\n        return _this3.getContext(index, active, mode);\n      };\n\n      var values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n      if (values.$shared) {\n        values.$shared = sharing;\n        cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n      }\n\n      return values;\n    }\n  }, {\n    key: \"_resolveAnimations\",\n    value: function _resolveAnimations(index, transition, active) {\n      var chart = this.chart;\n      var cache = this._cachedDataOpts;\n      var cacheKey = \"animation-\".concat(transition);\n      var cached = cache[cacheKey];\n\n      if (cached) {\n        return cached;\n      }\n\n      var options;\n\n      if (chart.options.animation !== false) {\n        var config = this.chart.config;\n        var scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n        var scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n        options = config.createResolver(scopes, this.getContext(index, active, transition));\n      }\n\n      var animations = new Animations(chart, options && options.animations);\n\n      if (options && options._cacheable) {\n        cache[cacheKey] = Object.freeze(animations);\n      }\n\n      return animations;\n    }\n  }, {\n    key: \"getSharedOptions\",\n    value: function getSharedOptions(options) {\n      if (!options.$shared) {\n        return;\n      }\n\n      return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n    }\n  }, {\n    key: \"includeOptions\",\n    value: function includeOptions(mode, sharedOptions) {\n      return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n    }\n  }, {\n    key: \"_getSharedOptions\",\n    value: function _getSharedOptions(start, mode) {\n      var firstOpts = this.resolveDataElementOptions(start, mode);\n      var previouslySharedOptions = this._sharedOptions;\n      var sharedOptions = this.getSharedOptions(firstOpts);\n      var includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n      this.updateSharedOptions(sharedOptions, mode, firstOpts);\n      return {\n        sharedOptions: sharedOptions,\n        includeOptions: includeOptions\n      };\n    }\n  }, {\n    key: \"updateElement\",\n    value: function 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    key: \"updateSharedOptions\",\n    value: function updateSharedOptions(sharedOptions, mode, newOptions) {\n      if (sharedOptions && !isDirectUpdateMode(mode)) {\n        this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n      }\n    }\n  }, {\n    key: \"_setStyle\",\n    value: function _setStyle(element, index, mode, active) {\n      element.active = active;\n      var options = this.getStyle(index, active);\n\n      this._resolveAnimations(index, mode, active).update(element, {\n        options: !active && this.getSharedOptions(options) || options\n      });\n    }\n  }, {\n    key: \"removeHoverStyle\",\n    value: function removeHoverStyle(element, datasetIndex, index) {\n      this._setStyle(element, index, 'active', false);\n    }\n  }, {\n    key: \"setHoverStyle\",\n    value: function setHoverStyle(element, datasetIndex, index) {\n      this._setStyle(element, index, 'active', true);\n    }\n  }, {\n    key: \"_removeDatasetHoverStyle\",\n    value: function _removeDatasetHoverStyle() {\n      var element = this._cachedMeta.dataset;\n\n      if (element) {\n        this._setStyle(element, undefined, 'active', false);\n      }\n    }\n  }, {\n    key: \"_setDatasetHoverStyle\",\n    value: function _setDatasetHoverStyle() {\n      var element = this._cachedMeta.dataset;\n\n      if (element) {\n        this._setStyle(element, undefined, 'active', true);\n      }\n    }\n  }, {\n    key: \"_resyncElements\",\n    value: function _resyncElements(resetNewElements) {\n      var data = this._data;\n      var elements = this._cachedMeta.data;\n\n      var _iterator3 = _createForOfIteratorHelper(this._syncList),\n          _step3;\n\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var _ref3 = _step3.value;\n\n          var _ref2 = _slicedToArray(_ref3, 3);\n\n          var method = _ref2[0];\n          var arg1 = _ref2[1];\n          var arg2 = _ref2[2];\n          this[method](arg1, arg2);\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n\n      this._syncList = [];\n      var numMeta = elements.length;\n      var numData = data.length;\n      var count = Math.min(numData, numMeta);\n\n      if (count) {\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    key: \"_insertElements\",\n    value: function _insertElements(start, count) {\n      var resetNewElements = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      var meta = this._cachedMeta;\n      var data = meta.data;\n      var end = start + count;\n      var i;\n\n      var move = function move(arr) {\n        arr.length += count;\n\n        for (i = arr.length - 1; i >= end; i--) {\n          arr[i] = arr[i - count];\n        }\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\n      this.parse(start, count);\n\n      if (resetNewElements) {\n        this.updateElements(data, start, count, 'reset');\n      }\n    }\n  }, {\n    key: \"updateElements\",\n    value: function updateElements(element, start, count, mode) {}\n  }, {\n    key: \"_removeElements\",\n    value: function _removeElements(start, count) {\n      var meta = this._cachedMeta;\n\n      if (this._parsing) {\n        var removed = meta._parsed.splice(start, count);\n\n        if (meta._stacked) {\n          clearStacks(meta, removed);\n        }\n      }\n\n      meta.data.splice(start, count);\n    }\n  }, {\n    key: \"_sync\",\n    value: function _sync(args) {\n      if (this._parsing) {\n        this._syncList.push(args);\n      } else {\n        var _args2 = _slicedToArray(args, 3),\n            method = _args2[0],\n            arg1 = _args2[1],\n            arg2 = _args2[2];\n\n        this[method](arg1, arg2);\n      }\n\n      this.chart._dataChanges.push([this.index].concat(_toConsumableArray(args)));\n    }\n  }, {\n    key: \"_onDataPush\",\n    value: function _onDataPush() {\n      var count = arguments.length;\n\n      this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n    }\n  }, {\n    key: \"_onDataPop\",\n    value: function _onDataPop() {\n      this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n    }\n  }, {\n    key: \"_onDataShift\",\n    value: function _onDataShift() {\n      this._sync(['_removeElements', 0, 1]);\n    }\n  }, {\n    key: \"_onDataSplice\",\n    value: function _onDataSplice(start, count) {\n      if (count) {\n        this._sync(['_removeElements', start, count]);\n      }\n\n      var newCount = arguments.length - 2;\n\n      if (newCount) {\n        this._sync(['_insertElements', start, newCount]);\n      }\n    }\n  }, {\n    key: \"_onDataUnshift\",\n    value: function _onDataUnshift() {\n      this._sync(['_insertElements', 0, arguments.length]);\n    }\n  }]);\n\n  return DatasetController;\n}();\n\nDatasetController.defaults = {};\nDatasetController.datasetElementType = null;\nDatasetController.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    var visibleMetas = scale.getMatchingVisibleMetas(type);\n    var values = [];\n\n    for (var i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n\n    scale._cache.$bar = _arrayUnique(values.sort(function (a, b) {\n      return a - b;\n    }));\n  }\n\n  return scale._cache.$bar;\n}\n\nfunction computeMinSampleSize(meta) {\n  var scale = meta.iScale;\n  var values = getAllScaleValues(scale, meta.type);\n  var min = scale._length;\n  var i, ilen, curr, prev;\n\n  var updateMinAndPrev = function updateMinAndPrev() {\n    if (curr === 32767 || curr === -32768) {\n      return;\n    }\n\n    if (defined(prev)) {\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\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\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\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  var thickness = options.barThickness;\n  var size, ratio;\n\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n\n  return {\n    chunk: size / stackCount,\n    ratio: ratio,\n    start: ruler.pixels[index] - size / 2\n  };\n}\n\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  var pixels = ruler.pixels;\n  var curr = pixels[index];\n  var prev = index > 0 ? pixels[index - 1] : null;\n  var next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  var percent = options.categoryPercentage;\n\n  if (prev === null) {\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n\n  if (next === null) {\n    next = curr + curr - prev;\n  }\n\n  var start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  var size = Math.abs(next - prev) / 2 * percent;\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start: start\n  };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n  var startValue = vScale.parse(entry[0], i);\n  var endValue = vScale.parse(entry[1], i);\n  var min = Math.min(startValue, endValue);\n  var max = Math.max(startValue, endValue);\n  var barStart = min;\n  var barEnd = max;\n\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n\n  item[vScale.axis] = barEnd;\n  item._custom = {\n    barStart: barStart,\n    barEnd: barEnd,\n    start: startValue,\n    end: endValue,\n    min: min,\n    max: 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\n  return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  var iScale = meta.iScale;\n  var vScale = meta.vScale;\n  var labels = iScale.getLabels();\n  var singleScale = iScale === vScale;\n  var parsed = [];\n  var 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\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\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n  var reverse, start, end, top, bottom;\n\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\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n\n  return {\n    start: start,\n    end: end,\n    reverse: reverse,\n    top: top,\n    bottom: bottom\n  };\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n  var edge = options.borderSkipped;\n  var res = {};\n\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n\n  if (edge === true) {\n    properties.borderSkipped = {\n      top: true,\n      right: true,\n      bottom: true,\n      left: true\n    };\n    return;\n  }\n\n  var _borderProps = borderProps(properties),\n      start = _borderProps.start,\n      end = _borderProps.end,\n      reverse = _borderProps.reverse,\n      top = _borderProps.top,\n      bottom = _borderProps.bottom;\n\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n\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\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, _ref4, ratio) {\n  var inflateAmount = _ref4.inflateAmount;\n  properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\n\nvar BarController = /*#__PURE__*/function (_DatasetController) {\n  _inherits(BarController, _DatasetController);\n\n  var _super = _createSuper(BarController);\n\n  function BarController() {\n    _classCallCheck(this, BarController);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(BarController, [{\n    key: \"parsePrimitiveData\",\n    value: function parsePrimitiveData(meta, data, start, count) {\n      return parseArrayOrPrimitive(meta, data, start, count);\n    }\n  }, {\n    key: \"parseArrayData\",\n    value: function parseArrayData(meta, data, start, count) {\n      return parseArrayOrPrimitive(meta, data, start, count);\n    }\n  }, {\n    key: \"parseObjectData\",\n    value: function parseObjectData(meta, data, start, count) {\n      var iScale = meta.iScale,\n          vScale = meta.vScale;\n      var _this$_parsing2 = this._parsing,\n          _this$_parsing2$xAxis = _this$_parsing2.xAxisKey,\n          xAxisKey = _this$_parsing2$xAxis === void 0 ? 'x' : _this$_parsing2$xAxis,\n          _this$_parsing2$yAxis = _this$_parsing2.yAxisKey,\n          yAxisKey = _this$_parsing2$yAxis === void 0 ? 'y' : _this$_parsing2$yAxis;\n      var iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n      var vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n      var parsed = [];\n      var i, ilen, item, obj;\n\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\n      return parsed;\n    }\n  }, {\n    key: \"updateRangeFromParsed\",\n    value: function updateRangeFromParsed(range, scale, parsed, stack) {\n      _get(_getPrototypeOf(BarController.prototype), \"updateRangeFromParsed\", this).call(this, range, scale, parsed, stack);\n\n      var custom = parsed._custom;\n\n      if (custom && scale === this._cachedMeta.vScale) {\n        range.min = Math.min(range.min, custom.min);\n        range.max = Math.max(range.max, custom.max);\n      }\n    }\n  }, {\n    key: \"getMaxOverflow\",\n    value: function getMaxOverflow() {\n      return 0;\n    }\n  }, {\n    key: \"getLabelAndValue\",\n    value: function getLabelAndValue(index) {\n      var meta = this._cachedMeta;\n      var iScale = meta.iScale,\n          vScale = meta.vScale;\n      var parsed = this.getParsed(index);\n      var custom = parsed._custom;\n      var value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n      return {\n        label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n        value: value\n      };\n    }\n  }, {\n    key: \"initialize\",\n    value: function initialize() {\n      this.enableOptionSharing = true;\n\n      _get(_getPrototypeOf(BarController.prototype), \"initialize\", this).call(this);\n\n      var meta = this._cachedMeta;\n      meta.stack = this.getDataset().stack;\n    }\n  }, {\n    key: \"update\",\n    value: function update(mode) {\n      var meta = this._cachedMeta;\n      this.updateElements(meta.data, 0, meta.data.length, mode);\n    }\n  }, {\n    key: \"updateElements\",\n    value: function updateElements(bars, start, count, mode) {\n      var reset = mode === 'reset';\n      var index = this.index,\n          vScale = this._cachedMeta.vScale;\n      var base = vScale.getBasePixel();\n      var horizontal = vScale.isHorizontal();\n\n      var ruler = this._getRuler();\n\n      var _this$_getSharedOptio = this._getSharedOptions(start, mode),\n          sharedOptions = _this$_getSharedOptio.sharedOptions,\n          includeOptions = _this$_getSharedOptio.includeOptions;\n\n      for (var i = start; i < start + count; i++) {\n        var parsed = this.getParsed(i);\n        var vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n          base: base,\n          head: base\n        } : this._calculateBarValuePixels(i);\n\n        var ipixels = this._calculateBarIndexPixels(i, ruler);\n\n        var stack = (parsed._stacks || {})[vScale.axis];\n        var properties = {\n          horizontal: 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\n        var 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    key: \"_getStacks\",\n    value: function _getStacks(last, dataIndex) {\n      var iScale = this._cachedMeta.iScale;\n      var metasets = iScale.getMatchingVisibleMetas(this._type).filter(function (meta) {\n        return meta.controller.options.grouped;\n      });\n      var stacked = iScale.options.stacked;\n      var stacks = [];\n\n      var currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n\n      var iScaleValue = currentParsed && currentParsed[iScale.axis];\n\n      var skipNull = function skipNull(meta) {\n        var parsed = meta._parsed.find(function (item) {\n          return item[iScale.axis] === iScaleValue;\n        });\n\n        var val = parsed && parsed[meta.vScale.axis];\n\n        if (isNullOrUndef(val) || isNaN(val)) {\n          return true;\n        }\n      };\n\n      var _iterator4 = _createForOfIteratorHelper(metasets),\n          _step4;\n\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var meta = _step4.value;\n\n          if (dataIndex !== undefined && skipNull(meta)) {\n            continue;\n          }\n\n          if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n            stacks.push(meta.stack);\n          }\n\n          if (meta.index === last) {\n            break;\n          }\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n\n      if (!stacks.length) {\n        stacks.push(undefined);\n      }\n\n      return stacks;\n    }\n  }, {\n    key: \"_getStackCount\",\n    value: function _getStackCount(index) {\n      return this._getStacks(undefined, index).length;\n    }\n  }, {\n    key: \"_getStackIndex\",\n    value: function _getStackIndex(datasetIndex, name, dataIndex) {\n      var stacks = this._getStacks(datasetIndex, dataIndex);\n\n      var index = name !== undefined ? stacks.indexOf(name) : -1;\n      return index === -1 ? stacks.length - 1 : index;\n    }\n  }, {\n    key: \"_getRuler\",\n    value: function _getRuler() {\n      var opts = this.options;\n      var meta = this._cachedMeta;\n      var iScale = meta.iScale;\n      var pixels = [];\n      var 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      var barThickness = opts.barThickness;\n      var min = barThickness || computeMinSampleSize(meta);\n      return {\n        min: min,\n        pixels: pixels,\n        start: iScale._startPixel,\n        end: iScale._endPixel,\n        stackCount: this._getStackCount(),\n        scale: iScale,\n        grouped: opts.grouped,\n        ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n      };\n    }\n  }, {\n    key: \"_calculateBarValuePixels\",\n    value: function _calculateBarValuePixels(index) {\n      var _this$_cachedMeta = this._cachedMeta,\n          vScale = _this$_cachedMeta.vScale,\n          _stacked = _this$_cachedMeta._stacked,\n          datasetIndex = _this$_cachedMeta.index,\n          _this$options = this.options,\n          baseValue = _this$options.base,\n          minBarLength = _this$options.minBarLength;\n      var actualBase = baseValue || 0;\n      var parsed = this.getParsed(index);\n      var custom = parsed._custom;\n      var floating = isFloatBar(custom);\n      var value = parsed[vScale.axis];\n      var start = 0;\n      var length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n      var 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\n        if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n          start = 0;\n        }\n\n        start += value;\n      }\n\n      var startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n      var base = vScale.getPixelForValue(startValue);\n\n      if (this.chart.getDataVisibility(index)) {\n        head = vScale.getPixelForValue(start + length);\n      } else {\n        head = base;\n      }\n\n      size = head - base;\n\n      if (Math.abs(size) < minBarLength) {\n        size = barSign(size, vScale, actualBase) * minBarLength;\n\n        if (value === actualBase) {\n          base -= size / 2;\n        }\n\n        var startPixel = vScale.getPixelForDecimal(0);\n        var endPixel = vScale.getPixelForDecimal(1);\n        var min = Math.min(startPixel, endPixel);\n        var max = Math.max(startPixel, endPixel);\n        base = Math.max(Math.min(base, max), min);\n        head = base + size;\n\n        if (_stacked && !floating) {\n          parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n        }\n      }\n\n      if (base === vScale.getPixelForValue(actualBase)) {\n        var halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n        base += halfGrid;\n        size -= halfGrid;\n      }\n\n      return {\n        size: size,\n        base: base,\n        head: head,\n        center: head + size / 2\n      };\n    }\n  }, {\n    key: \"_calculateBarIndexPixels\",\n    value: function _calculateBarIndexPixels(index, ruler) {\n      var scale = ruler.scale;\n      var options = this.options;\n      var skipNull = options.skipNull;\n      var maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n      var center, size;\n\n      if (ruler.grouped) {\n        var stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n        var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n\n        var stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n\n        center = range.start + range.chunk * stackIndex + range.chunk / 2;\n        size = Math.min(maxBarThickness, range.chunk * range.ratio);\n      } else {\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: center,\n        size: size\n      };\n    }\n  }, {\n    key: \"draw\",\n    value: function draw() {\n      var meta = this._cachedMeta;\n      var vScale = meta.vScale;\n      var rects = meta.data;\n      var ilen = rects.length;\n      var 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  return BarController;\n}(DatasetController);\n\nBarController.id = 'bar';\nBarController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'bar',\n  categoryPercentage: 0.8,\n  barPercentage: 0.9,\n  grouped: true,\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'base', 'width', 'height']\n    }\n  }\n};\nBarController.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\nvar BubbleController = /*#__PURE__*/function (_DatasetController2) {\n  _inherits(BubbleController, _DatasetController2);\n\n  var _super2 = _createSuper(BubbleController);\n\n  function BubbleController() {\n    _classCallCheck(this, BubbleController);\n\n    return _super2.apply(this, arguments);\n  }\n\n  _createClass(BubbleController, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.enableOptionSharing = true;\n\n      _get(_getPrototypeOf(BubbleController.prototype), \"initialize\", this).call(this);\n    }\n  }, {\n    key: \"parsePrimitiveData\",\n    value: function parsePrimitiveData(meta, data, start, count) {\n      var parsed = _get(_getPrototypeOf(BubbleController.prototype), \"parsePrimitiveData\", this).call(this, meta, data, start, count);\n\n      for (var i = 0; i < parsed.length; i++) {\n        parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n      }\n\n      return parsed;\n    }\n  }, {\n    key: \"parseArrayData\",\n    value: function parseArrayData(meta, data, start, count) {\n      var parsed = _get(_getPrototypeOf(BubbleController.prototype), \"parseArrayData\", this).call(this, meta, data, start, count);\n\n      for (var i = 0; i < parsed.length; i++) {\n        var item = data[start + i];\n        parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n      }\n\n      return parsed;\n    }\n  }, {\n    key: \"parseObjectData\",\n    value: function parseObjectData(meta, data, start, count) {\n      var parsed = _get(_getPrototypeOf(BubbleController.prototype), \"parseObjectData\", this).call(this, meta, data, start, count);\n\n      for (var i = 0; i < parsed.length; i++) {\n        var item = data[start + i];\n        parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n      }\n\n      return parsed;\n    }\n  }, {\n    key: \"getMaxOverflow\",\n    value: function getMaxOverflow() {\n      var data = this._cachedMeta.data;\n      var max = 0;\n\n      for (var i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n\n      return max > 0 && max;\n    }\n  }, {\n    key: \"getLabelAndValue\",\n    value: function getLabelAndValue(index) {\n      var meta = this._cachedMeta;\n      var labels = this.chart.data.labels || [];\n      var xScale = meta.xScale,\n          yScale = meta.yScale;\n      var parsed = this.getParsed(index);\n      var x = xScale.getLabelForValue(parsed.x);\n      var y = yScale.getLabelForValue(parsed.y);\n      var r = parsed._custom;\n      return {\n        label: labels[index] || '',\n        value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n      };\n    }\n  }, {\n    key: \"update\",\n    value: function update(mode) {\n      var points = this._cachedMeta.data;\n      this.updateElements(points, 0, points.length, mode);\n    }\n  }, {\n    key: \"updateElements\",\n    value: function updateElements(points, start, count, mode) {\n      var reset = mode === 'reset';\n      var _this$_cachedMeta2 = this._cachedMeta,\n          iScale = _this$_cachedMeta2.iScale,\n          vScale = _this$_cachedMeta2.vScale;\n\n      var _this$_getSharedOptio2 = this._getSharedOptions(start, mode),\n          sharedOptions = _this$_getSharedOptio2.sharedOptions,\n          includeOptions = _this$_getSharedOptio2.includeOptions;\n\n      var iAxis = iScale.axis;\n      var vAxis = vScale.axis;\n\n      for (var i = start; i < start + count; i++) {\n        var point = points[i];\n        var parsed = !reset && this.getParsed(i);\n        var properties = {};\n        var iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n        var vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\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    key: \"resolveDataElementOptions\",\n    value: function resolveDataElementOptions(index, mode) {\n      var parsed = this.getParsed(index);\n\n      var values = _get(_getPrototypeOf(BubbleController.prototype), \"resolveDataElementOptions\", this).call(this, index, mode);\n\n      if (values.$shared) {\n        values = Object.assign({}, values, {\n          $shared: false\n        });\n      }\n\n      var radius = values.radius;\n\n      if (mode !== 'active') {\n        values.radius = 0;\n      }\n\n      values.radius += valueOrDefault(parsed && parsed._custom, radius);\n      return values;\n    }\n  }]);\n\n  return BubbleController;\n}(DatasetController);\n\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'borderWidth', 'radius']\n    }\n  }\n};\nBubbleController.overrides = {\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  var ratioX = 1;\n  var ratioY = 1;\n  var offsetX = 0;\n  var offsetY = 0;\n\n  if (circumference < TAU) {\n    var startAngle = rotation;\n    var endAngle = startAngle + circumference;\n    var startX = Math.cos(startAngle);\n    var startY = Math.sin(startAngle);\n    var endX = Math.cos(endAngle);\n    var endY = Math.sin(endAngle);\n\n    var calcMax = function calcMax(angle, a, b) {\n      return _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    };\n\n    var calcMin = function calcMin(angle, a, b) {\n      return _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    };\n\n    var maxX = calcMax(0, startX, endX);\n    var maxY = calcMax(HALF_PI, startY, endY);\n    var minX = calcMin(PI, startX, endX);\n    var 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\n  return {\n    ratioX: ratioX,\n    ratioY: ratioY,\n    offsetX: offsetX,\n    offsetY: offsetY\n  };\n}\n\nvar DoughnutController = /*#__PURE__*/function (_DatasetController3) {\n  _inherits(DoughnutController, _DatasetController3);\n\n  var _super3 = _createSuper(DoughnutController);\n\n  function DoughnutController(chart, datasetIndex) {\n    var _this4;\n\n    _classCallCheck(this, DoughnutController);\n\n    _this4 = _super3.call(this, chart, datasetIndex);\n    _this4.enableOptionSharing = true;\n    _this4.innerRadius = undefined;\n    _this4.outerRadius = undefined;\n    _this4.offsetX = undefined;\n    _this4.offsetY = undefined;\n    return _this4;\n  }\n\n  _createClass(DoughnutController, [{\n    key: \"linkScales\",\n    value: function linkScales() {}\n  }, {\n    key: \"parse\",\n    value: function parse(start, count) {\n      var data = this.getDataset().data;\n      var meta = this._cachedMeta;\n\n      if (this._parsing === false) {\n        meta._parsed = data;\n      } else {\n        var getter = function getter(i) {\n          return +data[i];\n        };\n\n        if (isObject(data[start])) {\n          var _this$_parsing$key = this._parsing.key,\n              key = _this$_parsing$key === void 0 ? 'value' : _this$_parsing$key;\n\n          getter = function getter(i) {\n            return +resolveObjectKey(data[i], key);\n          };\n        }\n\n        var i, ilen;\n\n        for (i = start, ilen = start + count; i < ilen; ++i) {\n          meta._parsed[i] = getter(i);\n        }\n      }\n    }\n  }, {\n    key: \"_getRotation\",\n    value: function _getRotation() {\n      return toRadians(this.options.rotation - 90);\n    }\n  }, {\n    key: \"_getCircumference\",\n    value: function _getCircumference() {\n      return toRadians(this.options.circumference);\n    }\n  }, {\n    key: \"_getRotationExtents\",\n    value: function _getRotationExtents() {\n      var min = TAU;\n      var max = -TAU;\n\n      for (var i = 0; i < this.chart.data.datasets.length; ++i) {\n        if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n          var controller = this.chart.getDatasetMeta(i).controller;\n\n          var rotation = controller._getRotation();\n\n          var 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    key: \"update\",\n    value: function update(mode) {\n      var chart = this.chart;\n      var chartArea = chart.chartArea;\n      var meta = this._cachedMeta;\n      var arcs = meta.data;\n      var spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n      var maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n      var cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n\n      var chartWeight = this._getRingWeight(this.index);\n\n      var _this$_getRotationExt = this._getRotationExtents(),\n          circumference = _this$_getRotationExt.circumference,\n          rotation = _this$_getRotationExt.rotation;\n\n      var _getRatioAndOffset = getRatioAndOffset(rotation, circumference, cutout),\n          ratioX = _getRatioAndOffset.ratioX,\n          ratioY = _getRatioAndOffset.ratioY,\n          offsetX = _getRatioAndOffset.offsetX,\n          offsetY = _getRatioAndOffset.offsetY;\n\n      var maxWidth = (chartArea.width - spacing) / ratioX;\n      var maxHeight = (chartArea.height - spacing) / ratioY;\n      var maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n      var outerRadius = toDimension(this.options.radius, maxRadius);\n      var innerRadius = Math.max(outerRadius * cutout, 0);\n\n      var radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n\n      this.offsetX = offsetX * outerRadius;\n      this.offsetY = offsetY * outerRadius;\n      meta.total = this.calculateTotal();\n      this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n      this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n      this.updateElements(arcs, 0, arcs.length, mode);\n    }\n  }, {\n    key: \"_circumference\",\n    value: function _circumference(i, reset) {\n      var opts = this.options;\n      var meta = this._cachedMeta;\n\n      var circumference = this._getCircumference();\n\n      if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n        return 0;\n      }\n\n      return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n    }\n  }, {\n    key: \"updateElements\",\n    value: function updateElements(arcs, start, count, mode) {\n      var reset = mode === 'reset';\n      var chart = this.chart;\n      var chartArea = chart.chartArea;\n      var opts = chart.options;\n      var animationOpts = opts.animation;\n      var centerX = (chartArea.left + chartArea.right) / 2;\n      var centerY = (chartArea.top + chartArea.bottom) / 2;\n      var animateScale = reset && animationOpts.animateScale;\n      var innerRadius = animateScale ? 0 : this.innerRadius;\n      var outerRadius = animateScale ? 0 : this.outerRadius;\n\n      var _this$_getSharedOptio3 = this._getSharedOptions(start, mode),\n          sharedOptions = _this$_getSharedOptio3.sharedOptions,\n          includeOptions = _this$_getSharedOptio3.includeOptions;\n\n      var startAngle = this._getRotation();\n\n      var 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        var circumference = this._circumference(i, reset);\n\n        var arc = arcs[i];\n        var properties = {\n          x: centerX + this.offsetX,\n          y: centerY + this.offsetY,\n          startAngle: startAngle,\n          endAngle: startAngle + circumference,\n          circumference: circumference,\n          outerRadius: outerRadius,\n          innerRadius: innerRadius\n        };\n\n        if (includeOptions) {\n          properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n        }\n\n        startAngle += circumference;\n        this.updateElement(arc, i, properties, mode);\n      }\n    }\n  }, {\n    key: \"calculateTotal\",\n    value: function calculateTotal() {\n      var meta = this._cachedMeta;\n      var metaData = meta.data;\n      var total = 0;\n      var i;\n\n      for (i = 0; i < metaData.length; i++) {\n        var value = meta._parsed[i];\n\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    key: \"calculateCircumference\",\n    value: function calculateCircumference(value) {\n      var total = this._cachedMeta.total;\n\n      if (total > 0 && !isNaN(value)) {\n        return TAU * (Math.abs(value) / total);\n      }\n\n      return 0;\n    }\n  }, {\n    key: \"getLabelAndValue\",\n    value: function getLabelAndValue(index) {\n      var meta = this._cachedMeta;\n      var chart = this.chart;\n      var labels = chart.data.labels || [];\n      var value = formatNumber(meta._parsed[index], chart.options.locale);\n      return {\n        label: labels[index] || '',\n        value: value\n      };\n    }\n  }, {\n    key: \"getMaxBorderWidth\",\n    value: function getMaxBorderWidth(arcs) {\n      var max = 0;\n      var chart = this.chart;\n      var i, ilen, meta, controller, options;\n\n      if (!arcs) {\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\n        if (options.borderAlign !== 'inner') {\n          max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n        }\n      }\n\n      return max;\n    }\n  }, {\n    key: \"getMaxOffset\",\n    value: function getMaxOffset(arcs) {\n      var max = 0;\n\n      for (var i = 0, ilen = arcs.length; i < ilen; ++i) {\n        var options = this.resolveDataElementOptions(i);\n        max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n      }\n\n      return max;\n    }\n  }, {\n    key: \"_getRingWeightOffset\",\n    value: function _getRingWeightOffset(datasetIndex) {\n      var ringWeightOffset = 0;\n\n      for (var 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    key: \"_getRingWeight\",\n    value: function _getRingWeight(datasetIndex) {\n      return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n    }\n  }, {\n    key: \"_getVisibleDatasetWeightTotal\",\n    value: function _getVisibleDatasetWeightTotal() {\n      return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n    }\n  }]);\n\n  return DoughnutController;\n}(DatasetController);\n\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\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  cutout: '50%',\n  rotation: 0,\n  circumference: 360,\n  radius: '100%',\n  spacing: 0,\n  indexAxis: 'r'\n};\nDoughnutController.descriptors = {\n  _scriptable: function _scriptable(name) {\n    return name !== 'spacing';\n  },\n  _indexable: function _indexable(name) {\n    return name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash');\n  }\n};\nDoughnutController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels: function generateLabels(chart) {\n          var data = chart.data;\n\n          if (data.labels.length && data.datasets.length) {\n            var _chart$legend$options2 = chart.legend.options.labels,\n                pointStyle = _chart$legend$options2.pointStyle,\n                color = _chart$legend$options2.color;\n            return data.labels.map(function (label, i) {\n              var meta = chart.getDatasetMeta(0);\n              var style = meta.controller.getStyle(i);\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                index: i\n              };\n            });\n          }\n\n          return [];\n        }\n      },\n      onClick: function onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    }\n  }\n};\n\nvar LineController = /*#__PURE__*/function (_DatasetController4) {\n  _inherits(LineController, _DatasetController4);\n\n  var _super4 = _createSuper(LineController);\n\n  function LineController() {\n    _classCallCheck(this, LineController);\n\n    return _super4.apply(this, arguments);\n  }\n\n  _createClass(LineController, [{\n    key: \"initialize\",\n    value: function initialize() {\n      this.enableOptionSharing = true;\n      this.supportsDecimation = true;\n\n      _get(_getPrototypeOf(LineController.prototype), \"initialize\", this).call(this);\n    }\n  }, {\n    key: \"update\",\n    value: function update(mode) {\n      var meta = this._cachedMeta;\n      var line = meta.dataset,\n          _meta$data = meta.data,\n          points = _meta$data === void 0 ? [] : _meta$data,\n          _dataset = meta._dataset;\n      var animationsDisabled = this.chart._animationsDisabled;\n\n      var _getStartAndCountOfVi = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled),\n          start = _getStartAndCountOfVi.start,\n          count = _getStartAndCountOfVi.count;\n\n      this._drawStart = start;\n      this._drawCount = count;\n\n      if (_scaleRangesChanged(meta)) {\n        start = 0;\n        count = points.length;\n      }\n\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n      var options = this.resolveDatasetElementOptions(mode);\n\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options: options\n      }, mode);\n      this.updateElements(points, start, count, mode);\n    }\n  }, {\n    key: \"updateElements\",\n    value: function updateElements(points, start, count, mode) {\n      var reset = mode === 'reset';\n      var _this$_cachedMeta3 = this._cachedMeta,\n          iScale = _this$_cachedMeta3.iScale,\n          vScale = _this$_cachedMeta3.vScale,\n          _stacked = _this$_cachedMeta3._stacked,\n          _dataset = _this$_cachedMeta3._dataset;\n\n      var _this$_getSharedOptio4 = this._getSharedOptions(start, mode),\n          sharedOptions = _this$_getSharedOptio4.sharedOptions,\n          includeOptions = _this$_getSharedOptio4.includeOptions;\n\n      var iAxis = iScale.axis;\n      var vAxis = vScale.axis;\n      var _this$options2 = this.options,\n          spanGaps = _this$options2.spanGaps,\n          segment = _this$options2.segment;\n      var maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n      var directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n      var end = start + count;\n      var pointsCount = points.length;\n      var prevParsed = start > 0 && this.getParsed(start - 1);\n\n      for (var i = 0; i < pointsCount; ++i) {\n        var point = points[i];\n        var properties = directUpdate ? point : {};\n\n        if (i < start || i >= end) {\n          properties.skip = true;\n          continue;\n        }\n\n        var parsed = this.getParsed(i);\n        var nullData = isNullOrUndef(parsed[vAxis]);\n        var iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n        var vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n        properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n        properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n\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    key: \"getMaxOverflow\",\n    value: function getMaxOverflow() {\n      var meta = this._cachedMeta;\n      var dataset = meta.dataset;\n      var border = dataset.options && dataset.options.borderWidth || 0;\n      var data = meta.data || [];\n\n      if (!data.length) {\n        return border;\n      }\n\n      var firstPoint = data[0].size(this.resolveDataElementOptions(0));\n      var lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n      return Math.max(border, firstPoint, lastPoint) / 2;\n    }\n  }, {\n    key: \"draw\",\n    value: function draw() {\n      var meta = this._cachedMeta;\n      meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n\n      _get(_getPrototypeOf(LineController.prototype), \"draw\", this).call(this);\n    }\n  }]);\n\n  return LineController;\n}(DatasetController);\n\nLineController.id = 'line';\nLineController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  showLine: true,\n  spanGaps: false\n};\nLineController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category'\n    },\n    _value_: {\n      type: 'linear'\n    }\n  }\n};\n\nvar PolarAreaController = /*#__PURE__*/function (_DatasetController5) {\n  _inherits(PolarAreaController, _DatasetController5);\n\n  var _super5 = _createSuper(PolarAreaController);\n\n  function PolarAreaController(chart, datasetIndex) {\n    var _this5;\n\n    _classCallCheck(this, PolarAreaController);\n\n    _this5 = _super5.call(this, chart, datasetIndex);\n    _this5.innerRadius = undefined;\n    _this5.outerRadius = undefined;\n    return _this5;\n  }\n\n  _createClass(PolarAreaController, [{\n    key: \"getLabelAndValue\",\n    value: function getLabelAndValue(index) {\n      var meta = this._cachedMeta;\n      var chart = this.chart;\n      var labels = chart.data.labels || [];\n      var value = formatNumber(meta._parsed[index].r, chart.options.locale);\n      return {\n        label: labels[index] || '',\n        value: value\n      };\n    }\n  }, {\n    key: \"parseObjectData\",\n    value: function parseObjectData(meta, data, start, count) {\n      return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n    }\n  }, {\n    key: \"update\",\n    value: function update(mode) {\n      var arcs = this._cachedMeta.data;\n\n      this._updateRadius();\n\n      this.updateElements(arcs, 0, arcs.length, mode);\n    }\n  }, {\n    key: \"getMinMax\",\n    value: function getMinMax() {\n      var _this6 = this;\n\n      var meta = this._cachedMeta;\n      var range = {\n        min: Number.POSITIVE_INFINITY,\n        max: Number.NEGATIVE_INFINITY\n      };\n      meta.data.forEach(function (element, index) {\n        var parsed = _this6.getParsed(index).r;\n\n        if (!isNaN(parsed) && _this6.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      return range;\n    }\n  }, {\n    key: \"_updateRadius\",\n    value: function _updateRadius() {\n      var chart = this.chart;\n      var chartArea = chart.chartArea;\n      var opts = chart.options;\n      var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n      var outerRadius = Math.max(minSize / 2, 0);\n      var innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n      var radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n      this.outerRadius = outerRadius - radiusLength * this.index;\n      this.innerRadius = this.outerRadius - radiusLength;\n    }\n  }, {\n    key: \"updateElements\",\n    value: function updateElements(arcs, start, count, mode) {\n      var reset = mode === 'reset';\n      var chart = this.chart;\n      var opts = chart.options;\n      var animationOpts = opts.animation;\n      var scale = this._cachedMeta.rScale;\n      var centerX = scale.xCenter;\n      var centerY = scale.yCenter;\n      var datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n      var angle = datasetStartAngle;\n      var i;\n      var defaultAngle = 360 / this.countVisibleElements();\n\n      for (i = 0; i < start; ++i) {\n        angle += this._computeAngle(i, mode, defaultAngle);\n      }\n\n      for (i = start; i < start + count; i++) {\n        var arc = arcs[i];\n        var startAngle = angle;\n\n        var endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n\n        var 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\n          if (animationOpts.animateRotate) {\n            startAngle = endAngle = datasetStartAngle;\n          }\n        }\n\n        var properties = {\n          x: centerX,\n          y: centerY,\n          innerRadius: 0,\n          outerRadius: outerRadius,\n          startAngle: startAngle,\n          endAngle: endAngle,\n          options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n        };\n        this.updateElement(arc, i, properties, mode);\n      }\n    }\n  }, {\n    key: \"countVisibleElements\",\n    value: function countVisibleElements() {\n      var _this7 = this;\n\n      var meta = this._cachedMeta;\n      var count = 0;\n      meta.data.forEach(function (element, index) {\n        if (!isNaN(_this7.getParsed(index).r) && _this7.chart.getDataVisibility(index)) {\n          count++;\n        }\n      });\n      return count;\n    }\n  }, {\n    key: \"_computeAngle\",\n    value: function _computeAngle(index, mode, defaultAngle) {\n      return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n    }\n  }]);\n\n  return PolarAreaController;\n}(DatasetController);\n\nPolarAreaController.id = 'polarArea';\nPolarAreaController.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};\nPolarAreaController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels: function generateLabels(chart) {\n          var data = chart.data;\n\n          if (data.labels.length && data.datasets.length) {\n            var _chart$legend$options3 = chart.legend.options.labels,\n                pointStyle = _chart$legend$options3.pointStyle,\n                color = _chart$legend$options3.color;\n            return data.labels.map(function (label, i) {\n              var meta = chart.getDatasetMeta(0);\n              var style = meta.controller.getStyle(i);\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                index: i\n              };\n            });\n          }\n\n          return [];\n        }\n      },\n      onClick: function onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\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\nvar PieController = /*#__PURE__*/function (_DoughnutController) {\n  _inherits(PieController, _DoughnutController);\n\n  var _super6 = _createSuper(PieController);\n\n  function PieController() {\n    _classCallCheck(this, PieController);\n\n    return _super6.apply(this, arguments);\n  }\n\n  return PieController;\n}(DoughnutController);\n\nPieController.id = 'pie';\nPieController.defaults = {\n  cutout: 0,\n  rotation: 0,\n  circumference: 360,\n  radius: '100%'\n};\n\nvar RadarController = /*#__PURE__*/function (_DatasetController6) {\n  _inherits(RadarController, _DatasetController6);\n\n  var _super7 = _createSuper(RadarController);\n\n  function RadarController() {\n    _classCallCheck(this, RadarController);\n\n    return _super7.apply(this, arguments);\n  }\n\n  _createClass(RadarController, [{\n    key: \"getLabelAndValue\",\n    value: function getLabelAndValue(index) {\n      var vScale = this._cachedMeta.vScale;\n      var parsed = this.getParsed(index);\n      return {\n        label: vScale.getLabels()[index],\n        value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n      };\n    }\n  }, {\n    key: \"parseObjectData\",\n    value: function parseObjectData(meta, data, start, count) {\n      return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n    }\n  }, {\n    key: \"update\",\n    value: function update(mode) {\n      var meta = this._cachedMeta;\n      var line = meta.dataset;\n      var points = meta.data || [];\n      var labels = meta.iScale.getLabels();\n      line.points = points;\n\n      if (mode !== 'resize') {\n        var options = this.resolveDatasetElementOptions(mode);\n\n        if (!this.options.showLine) {\n          options.borderWidth = 0;\n        }\n\n        var properties = {\n          _loop: true,\n          _fullLoop: labels.length === points.length,\n          options: options\n        };\n        this.updateElement(line, undefined, properties, mode);\n      }\n\n      this.updateElements(points, 0, points.length, mode);\n    }\n  }, {\n    key: \"updateElements\",\n    value: function updateElements(points, start, count, mode) {\n      var scale = this._cachedMeta.rScale;\n      var reset = mode === 'reset';\n\n      for (var i = start; i < start + count; i++) {\n        var point = points[i];\n        var options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n        var pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n        var x = reset ? scale.xCenter : pointPosition.x;\n        var y = reset ? scale.yCenter : pointPosition.y;\n        var properties = {\n          x: x,\n          y: y,\n          angle: pointPosition.angle,\n          skip: isNaN(x) || isNaN(y),\n          options: options\n        };\n        this.updateElement(point, i, properties, mode);\n      }\n    }\n  }]);\n\n  return RadarController;\n}(DatasetController);\n\nRadarController.id = 'radar';\nRadarController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  indexAxis: 'r',\n  showLine: true,\n  elements: {\n    line: {\n      fill: 'start'\n    }\n  }\n};\nRadarController.overrides = {\n  aspectRatio: 1,\n  scales: {\n    r: {\n      type: 'radialLinear'\n    }\n  }\n};\n\nvar ScatterController = /*#__PURE__*/function (_DatasetController7) {\n  _inherits(ScatterController, _DatasetController7);\n\n  var _super8 = _createSuper(ScatterController);\n\n  function ScatterController() {\n    _classCallCheck(this, ScatterController);\n\n    return _super8.apply(this, arguments);\n  }\n\n  _createClass(ScatterController, [{\n    key: \"getLabelAndValue\",\n    value: function getLabelAndValue(index) {\n      var meta = this._cachedMeta;\n      var labels = this.chart.data.labels || [];\n      var xScale = meta.xScale,\n          yScale = meta.yScale;\n      var parsed = this.getParsed(index);\n      var x = xScale.getLabelForValue(parsed.x);\n      var y = yScale.getLabelForValue(parsed.y);\n      return {\n        label: labels[index] || '',\n        value: '(' + x + ', ' + y + ')'\n      };\n    }\n  }, {\n    key: \"update\",\n    value: function update(mode) {\n      var meta = this._cachedMeta;\n      var _meta$data2 = meta.data,\n          points = _meta$data2 === void 0 ? [] : _meta$data2;\n      var animationsDisabled = this.chart._animationsDisabled;\n\n      var _getStartAndCountOfVi2 = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled),\n          start = _getStartAndCountOfVi2.start,\n          count = _getStartAndCountOfVi2.count;\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        if (!this.datasetElementType) {\n          this.addElements();\n        }\n\n        var line = meta.dataset,\n            _dataset = meta._dataset;\n        line._chart = this.chart;\n        line._datasetIndex = this.index;\n        line._decimated = !!_dataset._decimated;\n        line.points = points;\n        var options = this.resolveDatasetElementOptions(mode);\n        options.segment = this.options.segment;\n        this.updateElement(line, undefined, {\n          animated: !animationsDisabled,\n          options: options\n        }, mode);\n      } else if (this.datasetElementType) {\n        delete meta.dataset;\n        this.datasetElementType = false;\n      }\n\n      this.updateElements(points, start, count, mode);\n    }\n  }, {\n    key: \"addElements\",\n    value: function addElements() {\n      var showLine = this.options.showLine;\n\n      if (!this.datasetElementType && showLine) {\n        this.datasetElementType = this.chart.registry.getElement('line');\n      }\n\n      _get(_getPrototypeOf(ScatterController.prototype), \"addElements\", this).call(this);\n    }\n  }, {\n    key: \"updateElements\",\n    value: function updateElements(points, start, count, mode) {\n      var reset = mode === 'reset';\n      var _this$_cachedMeta4 = this._cachedMeta,\n          iScale = _this$_cachedMeta4.iScale,\n          vScale = _this$_cachedMeta4.vScale,\n          _stacked = _this$_cachedMeta4._stacked,\n          _dataset = _this$_cachedMeta4._dataset;\n      var firstOpts = this.resolveDataElementOptions(start, mode);\n      var sharedOptions = this.getSharedOptions(firstOpts);\n      var includeOptions = this.includeOptions(mode, sharedOptions);\n      var iAxis = iScale.axis;\n      var vAxis = vScale.axis;\n      var _this$options3 = this.options,\n          spanGaps = _this$options3.spanGaps,\n          segment = _this$options3.segment;\n      var maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n      var directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n      var prevParsed = start > 0 && this.getParsed(start - 1);\n\n      for (var i = start; i < start + count; ++i) {\n        var point = points[i];\n        var parsed = this.getParsed(i);\n        var properties = directUpdate ? point : {};\n        var nullData = isNullOrUndef(parsed[vAxis]);\n        var iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n        var vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n        properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n        properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n\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    key: \"getMaxOverflow\",\n    value: function getMaxOverflow() {\n      var meta = this._cachedMeta;\n      var data = meta.data || [];\n\n      if (!this.options.showLine) {\n        var max = 0;\n\n        for (var i = data.length - 1; i >= 0; --i) {\n          max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n        }\n\n        return max > 0 && max;\n      }\n\n      var dataset = meta.dataset;\n      var border = dataset.options && dataset.options.borderWidth || 0;\n\n      if (!data.length) {\n        return border;\n      }\n\n      var firstPoint = data[0].size(this.resolveDataElementOptions(0));\n      var lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n      return Math.max(border, firstPoint, lastPoint) / 2;\n    }\n  }]);\n\n  return ScatterController;\n}(DatasetController);\n\nScatterController.id = 'scatter';\nScatterController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  showLine: false,\n  fill: false\n};\nScatterController.overrides = {\n  interaction: {\n    mode: 'point'\n  },\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  }\n};\nvar controllers = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  BarController: BarController,\n  BubbleController: BubbleController,\n  DoughnutController: DoughnutController,\n  LineController: LineController,\n  PieController: PieController,\n  PolarAreaController: PolarAreaController,\n  RadarController: RadarController,\n  ScatterController: ScatterController\n});\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nfunction abstract() {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\n\n\nvar DateAdapterBase = /*#__PURE__*/function () {\n  function DateAdapterBase(options) {\n    _classCallCheck(this, DateAdapterBase);\n\n    this.options = void 0;\n    this.options = options || {};\n  } // eslint-disable-next-line @typescript-eslint/no-empty-function\n\n\n  _createClass(DateAdapterBase, [{\n    key: \"init\",\n    value: function init() {}\n  }, {\n    key: \"formats\",\n    value: function formats() {\n      return abstract();\n    }\n  }, {\n    key: \"parse\",\n    value: function parse() {\n      return abstract();\n    }\n  }, {\n    key: \"format\",\n    value: function format() {\n      return abstract();\n    }\n  }, {\n    key: \"add\",\n    value: function add() {\n      return abstract();\n    }\n  }, {\n    key: \"diff\",\n    value: function diff() {\n      return abstract();\n    }\n  }, {\n    key: \"startOf\",\n    value: function startOf() {\n      return abstract();\n    }\n  }, {\n    key: \"endOf\",\n    value: function endOf() {\n      return abstract();\n    }\n  }], [{\n    key: \"override\",\n    value:\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    function override(members) {\n      Object.assign(DateAdapterBase.prototype, members);\n    }\n  }]);\n\n  return DateAdapterBase;\n}();\n\nvar adapters = {\n  _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n  var controller = metaset.controller,\n      data = metaset.data,\n      _sorted = metaset._sorted;\n  var iScale = controller._cachedMeta.iScale;\n\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    var lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n\n    if (!intersect) {\n      return lookupMethod(data, axis, value);\n    } else if (controller._sharedOptions) {\n      var el = data[0];\n      var range = typeof el.getRange === 'function' && el.getRange(axis);\n\n      if (range) {\n        var start = lookupMethod(data, axis, value - range);\n        var end = lookupMethod(data, axis, value + range);\n        return {\n          lo: start.lo,\n          hi: end.hi\n        };\n      }\n    }\n  }\n\n  return {\n    lo: 0,\n    hi: data.length - 1\n  };\n}\n\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  var metasets = chart.getSortedVisibleDatasetMetas();\n  var value = position[axis];\n\n  for (var i = 0, ilen = metasets.length; i < ilen; ++i) {\n    var _metasets$i = metasets[i],\n        _index2 = _metasets$i.index,\n        data = _metasets$i.data;\n\n    var _binarySearch = binarySearch(metasets[i], axis, value, intersect),\n        lo = _binarySearch.lo,\n        hi = _binarySearch.hi;\n\n    for (var j = lo; j <= hi; ++j) {\n      var element = data[j];\n\n      if (!element.skip) {\n        handler(element, _index2, j);\n      }\n    }\n  }\n}\n\nfunction getDistanceMetricForAxis(axis) {\n  var useX = axis.indexOf('x') !== -1;\n  var useY = axis.indexOf('y') !== -1;\n  return function (pt1, pt2) {\n    var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\n\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  var items = [];\n\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n\n  var evaluationFunc = function evaluationFunc(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({\n        element: element,\n        datasetIndex: datasetIndex,\n        index: index\n      });\n    }\n  };\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\n\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  var items = [];\n\n  function evaluationFunc(element, datasetIndex, index) {\n    var _element$getProps = element.getProps(['startAngle', 'endAngle'], useFinalPosition),\n        startAngle = _element$getProps.startAngle,\n        endAngle = _element$getProps.endAngle;\n\n    var _getAngleFromPoint = getAngleFromPoint(element, {\n      x: position.x,\n      y: position.y\n    }),\n        angle = _getAngleFromPoint.angle;\n\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({\n        element: element,\n        datasetIndex: datasetIndex,\n        index: index\n      });\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  var items = [];\n  var distanceMetric = getDistanceMetricForAxis(axis);\n  var minDistance = Number.POSITIVE_INFINITY;\n\n  function evaluationFunc(element, datasetIndex, index) {\n    var inRange = element.inRange(position.x, position.y, useFinalPosition);\n\n    if (intersect && !inRange) {\n      return;\n    }\n\n    var center = element.getCenterPoint(useFinalPosition);\n    var pointInArea = !!includeInvisible || chart.isPointInArea(center);\n\n    if (!pointInArea && !inRange) {\n      return;\n    }\n\n    var distance = distanceMetric(position, center);\n\n    if (distance < minDistance) {\n      items = [{\n        element: element,\n        datasetIndex: datasetIndex,\n        index: index\n      }];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      items.push({\n        element: element,\n        datasetIndex: datasetIndex,\n        index: index\n      });\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n\n  return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  var items = [];\n  var rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  var intersectsItem = false;\n  evaluateInteractionItems(chart, axis, position, function (element, datasetIndex, index) {\n    if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({\n        element: element,\n        datasetIndex: datasetIndex,\n        index: index\n      });\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n\n  return items;\n}\n\nvar Interaction = {\n  evaluateInteractionItems: evaluateInteractionItems,\n  modes: {\n    index: function index(chart, e, options, useFinalPosition) {\n      var position = getRelativePosition(e, chart);\n      var axis = options.axis || 'x';\n      var includeInvisible = options.includeInvisible || false;\n      var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      var elements = [];\n\n      if (!items.length) {\n        return [];\n      }\n\n      chart.getSortedVisibleDatasetMetas().forEach(function (meta) {\n        var index = items[0].index;\n        var element = meta.data[index];\n\n        if (element && !element.skip) {\n          elements.push({\n            element: element,\n            datasetIndex: meta.index,\n            index: index\n          });\n        }\n      });\n      return elements;\n    },\n    dataset: function dataset(chart, e, options, useFinalPosition) {\n      var position = getRelativePosition(e, chart);\n      var axis = options.axis || 'xy';\n      var includeInvisible = options.includeInvisible || false;\n      var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n      if (items.length > 0) {\n        var datasetIndex = items[0].datasetIndex;\n        var data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n\n        for (var i = 0; i < data.length; ++i) {\n          items.push({\n            element: data[i],\n            datasetIndex: datasetIndex,\n            index: i\n          });\n        }\n      }\n\n      return items;\n    },\n    point: function point(chart, e, options, useFinalPosition) {\n      var position = getRelativePosition(e, chart);\n      var axis = options.axis || 'xy';\n      var includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n    nearest: function nearest(chart, e, options, useFinalPosition) {\n      var position = getRelativePosition(e, chart);\n      var axis = options.axis || 'xy';\n      var includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n    x: function x(chart, e, options, useFinalPosition) {\n      var position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n    y: function y(chart, e, options, useFinalPosition) {\n      var position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\nvar STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n  return array.filter(function (v) {\n    return v.pos === position;\n  });\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(function (v) {\n    return STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis;\n  });\n}\n\nfunction sortByWeight(array, reverse) {\n  return array.sort(function (a, b) {\n    var v0 = reverse ? b : a;\n    var v1 = reverse ? a : b;\n    return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n  });\n}\n\nfunction wrapBoxes(boxes) {\n  var layoutBoxes = [];\n  var i, ilen, box, pos, stack, stackWeight;\n\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    var _box = box;\n    pos = _box.position;\n    var _box$options = _box.options;\n    stack = _box$options.stack;\n    var _box$options$stackWei = _box$options.stackWeight;\n    stackWeight = _box$options$stackWei === void 0 ? 1 : _box$options$stackWei;\n    layoutBoxes.push({\n      index: i,\n      box: box,\n      pos: pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && pos + stack,\n      stackWeight: stackWeight\n    });\n  }\n\n  return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n  var stacks = {};\n\n  var _iterator5 = _createForOfIteratorHelper(layouts),\n      _step5;\n\n  try {\n    for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n      var wrap = _step5.value;\n      var stack = wrap.stack,\n          pos = wrap.pos,\n          stackWeight = wrap.stackWeight;\n\n      if (!stack || !STATIC_POSITIONS.includes(pos)) {\n        continue;\n      }\n\n      var _stack = stacks[stack] || (stacks[stack] = {\n        count: 0,\n        placed: 0,\n        weight: 0,\n        size: 0\n      });\n\n      _stack.count++;\n      _stack.weight += stackWeight;\n    }\n  } catch (err) {\n    _iterator5.e(err);\n  } finally {\n    _iterator5.f();\n  }\n\n  return stacks;\n}\n\nfunction setLayoutDims(layouts, params) {\n  var stacks = buildStacks(layouts);\n  var vBoxMaxWidth = params.vBoxMaxWidth,\n      hBoxMaxHeight = params.hBoxMaxHeight;\n  var i, ilen, layout;\n\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    var fullSize = layout.box.fullSize;\n    var stack = stacks[layout.stack];\n    var factor = stack && layout.stackWeight / stack.weight;\n\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\n  return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n  var layoutBoxes = wrapBoxes(boxes);\n  var fullSize = sortByWeight(layoutBoxes.filter(function (wrap) {\n    return wrap.box.fullSize;\n  }), true);\n  var left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  var right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  var top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  var bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  var centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  var centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n  return {\n    fullSize: 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  var pos = layout.pos,\n      box = layout.box;\n  var maxPadding = chartArea.maxPadding;\n\n  if (!isObject(pos)) {\n    if (layout.size) {\n      chartArea[pos] -= layout.size;\n    }\n\n    var stack = stacks[layout.stack] || {\n      size: 0,\n      count: 1\n    };\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  var newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  var newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  var widthChanged = newWidth !== chartArea.w;\n  var heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n  return layout.horizontal ? {\n    same: widthChanged,\n    other: heightChanged\n  } : {\n    same: heightChanged,\n    other: widthChanged\n  };\n}\n\nfunction handleMaxPadding(chartArea) {\n  var maxPadding = chartArea.maxPadding;\n\n  function updatePos(pos) {\n    var change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n  var maxPadding = chartArea.maxPadding;\n\n  function marginForPositions(positions) {\n    var margin = {\n      left: 0,\n      top: 0,\n      right: 0,\n      bottom: 0\n    };\n    positions.forEach(function (pos) {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n\n  return horizontal ? marginForPositions(['left', 'right']) : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  var refitBoxes = [];\n  var 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    box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n\n    var _updateDims = updateDims(chartArea, params, layout, stacks),\n        same = _updateDims.same,\n        other = _updateDims.other;\n\n    refit |= same && refitBoxes.length;\n    changed = changed || other;\n\n    if (!box.fullSize) {\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  var userPadding = params.padding;\n  var x = chartArea.x,\n      y = chartArea.y;\n\n  var _iterator6 = _createForOfIteratorHelper(boxes),\n      _step6;\n\n  try {\n    for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n      var layout = _step6.value;\n      var box = layout.box;\n      var stack = stacks[layout.stack] || {\n        count: 1,\n        placed: 0,\n        weight: 1\n      };\n      var weight = layout.stackWeight / stack.weight || 1;\n\n      if (layout.horizontal) {\n        var width = chartArea.w * weight;\n        var height = stack.size || box.height;\n\n        if (defined(stack.start)) {\n          y = stack.start;\n        }\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\n        stack.start = y;\n        stack.placed += width;\n        y = box.bottom;\n      } else {\n        var _height = chartArea.h * weight;\n\n        var _width = stack.size || box.width;\n\n        if (defined(stack.start)) {\n          x = stack.start;\n        }\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\n        stack.start = x;\n        stack.placed += _height;\n        x = box.right;\n      }\n    }\n  } catch (err) {\n    _iterator6.e(err);\n  } finally {\n    _iterator6.f();\n  }\n\n  chartArea.x = x;\n  chartArea.y = y;\n}\n\nvar layouts = {\n  addBox: function addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n\n    item._layers = item._layers || function () {\n      return [{\n        z: 0,\n        draw: function draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n\n    chart.boxes.push(item);\n  },\n  removeBox: function removeBox(chart, layoutItem) {\n    var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n  configure: function configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n  update: function update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n\n    var padding = toPadding(chart.options.layout.padding);\n    var availableWidth = Math.max(width - padding.width, 0);\n    var availableHeight = Math.max(height - padding.height, 0);\n    var boxes = buildLayoutBoxes(chart.boxes);\n    var verticalBoxes = boxes.vertical;\n    var horizontalBoxes = boxes.horizontal;\n    each(chart.boxes, function (box) {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n    var visibleVerticalBoxCount = verticalBoxes.reduce(function (total, wrap) {\n      return wrap.box.options && wrap.box.options.display === false ? total : total + 1;\n    }, 0) || 1;\n    var params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding: padding,\n      availableWidth: availableWidth,\n      availableHeight: availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    var maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    var chartArea = Object.assign({\n      maxPadding: maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n    var stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n\n    handleMaxPadding(chartArea);\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\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    each(boxes.chartArea, function (layout) {\n      var box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {\n        left: 0,\n        top: 0,\n        right: 0,\n        bottom: 0\n      });\n    });\n  }\n};\n\nvar BasePlatform = /*#__PURE__*/function () {\n  function BasePlatform() {\n    _classCallCheck(this, BasePlatform);\n  }\n\n  _createClass(BasePlatform, [{\n    key: \"acquireContext\",\n    value: function acquireContext(canvas, aspectRatio) {}\n  }, {\n    key: \"releaseContext\",\n    value: function releaseContext(context) {\n      return false;\n    }\n  }, {\n    key: \"addEventListener\",\n    value: function addEventListener(chart, type, listener) {}\n  }, {\n    key: \"removeEventListener\",\n    value: function removeEventListener(chart, type, listener) {}\n  }, {\n    key: \"getDevicePixelRatio\",\n    value: function getDevicePixelRatio() {\n      return 1;\n    }\n  }, {\n    key: \"getMaximumSize\",\n    value: function getMaximumSize(element, width, height, aspectRatio) {\n      width = Math.max(0, width || element.width);\n      height = height || element.height;\n      return {\n        width: width,\n        height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n      };\n    }\n  }, {\n    key: \"isAttached\",\n    value: function isAttached(canvas) {\n      return true;\n    }\n  }, {\n    key: \"updateConfig\",\n    value: function updateConfig(config) {}\n  }]);\n\n  return BasePlatform;\n}();\n\nvar BasicPlatform = /*#__PURE__*/function (_BasePlatform) {\n  _inherits(BasicPlatform, _BasePlatform);\n\n  var _super9 = _createSuper(BasicPlatform);\n\n  function BasicPlatform() {\n    _classCallCheck(this, BasicPlatform);\n\n    return _super9.apply(this, arguments);\n  }\n\n  _createClass(BasicPlatform, [{\n    key: \"acquireContext\",\n    value: function acquireContext(item) {\n      return item && item.getContext && item.getContext('2d') || null;\n    }\n  }, {\n    key: \"updateConfig\",\n    value: function updateConfig(config) {\n      config.options.animation = false;\n    }\n  }]);\n\n  return BasicPlatform;\n}(BasePlatform);\n\nvar EXPANDO_KEY = '$chartjs';\nvar 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\nvar isNullOrEmpty = function isNullOrEmpty(value) {\n  return value === null || value === '';\n};\n\nfunction initCanvas(canvas, aspectRatio) {\n  var style = canvas.style;\n  var renderHeight = canvas.getAttribute('height');\n  var renderWidth = canvas.getAttribute('width');\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  style.display = style.display || 'block';\n  style.boxSizing = style.boxSizing || 'border-box';\n\n  if (isNullOrEmpty(renderWidth)) {\n    var displayWidth = readUsedSize(canvas, 'width');\n\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      var displayHeight = readUsedSize(canvas, 'height');\n\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n\n  return canvas;\n}\n\nvar eventListenerOptions = supportsEventListenerOptions ? {\n  passive: true\n} : 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  var type = EVENT_TYPES[event.type] || event.type;\n\n  var _getRelativePosition = getRelativePosition(event, chart),\n      x = _getRelativePosition.x,\n      y = _getRelativePosition.y;\n\n  return {\n    type: type,\n    chart: chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null\n  };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n  var _iterator7 = _createForOfIteratorHelper(nodeList),\n      _step7;\n\n  try {\n    for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n      var node = _step7.value;\n\n      if (node === canvas || node.contains(canvas)) {\n        return true;\n      }\n    }\n  } catch (err) {\n    _iterator7.e(err);\n  } finally {\n    _iterator7.f();\n  }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n  var canvas = chart.canvas;\n  var observer = new MutationObserver(function (entries) {\n    var trigger = false;\n\n    var _iterator8 = _createForOfIteratorHelper(entries),\n        _step8;\n\n    try {\n      for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n        var entry = _step8.value;\n        trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n        trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n      }\n    } catch (err) {\n      _iterator8.e(err);\n    } finally {\n      _iterator8.f();\n    }\n\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {\n    childList: true,\n    subtree: true\n  });\n  return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n  var canvas = chart.canvas;\n  var observer = new MutationObserver(function (entries) {\n    var trigger = false;\n\n    var _iterator9 = _createForOfIteratorHelper(entries),\n        _step9;\n\n    try {\n      for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n        var entry = _step9.value;\n        trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n        trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n      }\n    } catch (err) {\n      _iterator9.e(err);\n    } finally {\n      _iterator9.f();\n    }\n\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {\n    childList: true,\n    subtree: true\n  });\n  return observer;\n}\n\nvar drpListeningCharts = new Map();\nvar oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n  var dpr = window.devicePixelRatio;\n\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach(function (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\n  drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n  var canvas = chart.canvas;\n\n  var container = canvas && _getParentNode(canvas);\n\n  if (!container) {\n    return;\n  }\n\n  var resize = throttled(function (width, height) {\n    var w = container.clientWidth;\n    listener(width, height);\n\n    if (w < container.clientWidth) {\n      listener();\n    }\n  }, window);\n  var observer = new ResizeObserver(function (entries) {\n    var entry = entries[0];\n    var width = entry.contentRect.width;\n    var height = entry.contentRect.height;\n\n    if (width === 0 && height === 0) {\n      return;\n    }\n\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n  return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n  var canvas = chart.canvas;\n  var proxy = throttled(function (event) {\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart);\n  addListener(canvas, type, proxy);\n  return proxy;\n}\n\nvar DomPlatform = /*#__PURE__*/function (_BasePlatform2) {\n  _inherits(DomPlatform, _BasePlatform2);\n\n  var _super10 = _createSuper(DomPlatform);\n\n  function DomPlatform() {\n    _classCallCheck(this, DomPlatform);\n\n    return _super10.apply(this, arguments);\n  }\n\n  _createClass(DomPlatform, [{\n    key: \"acquireContext\",\n    value: function acquireContext(canvas, aspectRatio) {\n      var context = canvas && canvas.getContext && canvas.getContext('2d');\n\n      if (context && context.canvas === canvas) {\n        initCanvas(canvas, aspectRatio);\n        return context;\n      }\n\n      return null;\n    }\n  }, {\n    key: \"releaseContext\",\n    value: function releaseContext(context) {\n      var canvas = context.canvas;\n\n      if (!canvas[EXPANDO_KEY]) {\n        return false;\n      }\n\n      var initial = canvas[EXPANDO_KEY].initial;\n      ['height', 'width'].forEach(function (prop) {\n        var value = initial[prop];\n\n        if (isNullOrUndef(value)) {\n          canvas.removeAttribute(prop);\n        } else {\n          canvas.setAttribute(prop, value);\n        }\n      });\n      var style = initial.style || {};\n      Object.keys(style).forEach(function (key) {\n        canvas.style[key] = style[key];\n      });\n      canvas.width = canvas.width;\n      delete canvas[EXPANDO_KEY];\n      return true;\n    }\n  }, {\n    key: \"addEventListener\",\n    value: function addEventListener(chart, type, listener) {\n      this.removeEventListener(chart, type);\n      var proxies = chart.$proxies || (chart.$proxies = {});\n      var handlers = {\n        attach: createAttachObserver,\n        detach: createDetachObserver,\n        resize: createResizeObserver\n      };\n      var handler = handlers[type] || createProxyAndListen;\n      proxies[type] = handler(chart, type, listener);\n    }\n  }, {\n    key: \"removeEventListener\",\n    value: function removeEventListener(chart, type) {\n      var proxies = chart.$proxies || (chart.$proxies = {});\n      var proxy = proxies[type];\n\n      if (!proxy) {\n        return;\n      }\n\n      var handlers = {\n        attach: releaseObserver,\n        detach: releaseObserver,\n        resize: releaseObserver\n      };\n      var handler = handlers[type] || removeListener;\n      handler(chart, type, proxy);\n      proxies[type] = undefined;\n    }\n  }, {\n    key: \"getDevicePixelRatio\",\n    value: function getDevicePixelRatio() {\n      return window.devicePixelRatio;\n    }\n  }, {\n    key: \"getMaximumSize\",\n    value: function getMaximumSize(canvas, width, height, aspectRatio) {\n      return _getMaximumSize(canvas, width, height, aspectRatio);\n    }\n  }, {\n    key: \"isAttached\",\n    value: function isAttached(canvas) {\n      var container = canvas && _getParentNode(canvas);\n\n      return !!(container && container.isConnected);\n    }\n  }]);\n\n  return DomPlatform;\n}(BasePlatform);\n\nfunction _detectPlatform(canvas) {\n  if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n    return BasicPlatform;\n  }\n\n  return DomPlatform;\n}\n\nvar Element = /*#__PURE__*/function () {\n  function Element() {\n    _classCallCheck(this, Element);\n\n    this.x = void 0;\n    this.y = void 0;\n    this.active = false;\n    this.options = void 0;\n    this.$animations = void 0;\n  }\n\n  _createClass(Element, [{\n    key: \"tooltipPosition\",\n    value: function tooltipPosition(useFinalPosition) {\n      var _this$getProps = this.getProps(['x', 'y'], useFinalPosition),\n          x = _this$getProps.x,\n          y = _this$getProps.y;\n\n      return {\n        x: x,\n        y: y\n      };\n    }\n  }, {\n    key: \"hasValue\",\n    value: function hasValue() {\n      return isNumber(this.x) && isNumber(this.y);\n    }\n  }, {\n    key: \"getProps\",\n    value: function getProps(props, final) {\n      var _this8 = this;\n\n      var anims = this.$animations;\n\n      if (!final || !anims) {\n        // let's not create an object, if not needed\n        return this;\n      }\n\n      var ret = {};\n      props.forEach(function (prop) {\n        ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : _this8[prop];\n      });\n      return ret;\n    }\n  }]);\n\n  return Element;\n}();\n\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nfunction autoSkip(scale, ticks) {\n  var tickOpts = scale.options.ticks;\n  var determinedMaxTicks = determineMaxTicks(scale);\n  var ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n  var majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  var numMajorIndices = majorIndices.length;\n  var first = majorIndices[0];\n  var last = majorIndices[numMajorIndices - 1];\n  var newTicks = [];\n\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n\n  var spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n  if (numMajorIndices > 0) {\n    var i, ilen;\n    var avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n  var offset = scale.options.offset;\n\n  var tickLength = scale._tickSize();\n\n  var maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  var maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\n\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  var evenMajorSpacing = getEvenSpacing(majorIndices);\n  var spacing = ticks.length / ticksLimit;\n\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n\n  var factors = _factorize(evenMajorSpacing);\n\n  for (var i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    var factor = factors[i];\n\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n\n  return Math.max(spacing, 1);\n}\n\nfunction getMajorIndices(ticks) {\n  var result = [];\n  var i, ilen;\n\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n\n  return result;\n}\n\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  var count = 0;\n  var next = majorIndices[0];\n  var i;\n  spacing = Math.ceil(spacing);\n\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\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  var start = valueOrDefault(majorStart, 0);\n  var end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  var count = 0;\n  var length, i, next;\n  spacing = Math.ceil(spacing);\n\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\nfunction getEvenSpacing(arr) {\n  var len = arr.length;\n  var 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\n  return diff;\n}\n\nvar reverseAlign = function reverseAlign(align) {\n  return align === 'left' ? 'right' : align === 'right' ? 'left' : align;\n};\n\nvar offsetFromEdge = function offsetFromEdge(scale, edge, offset) {\n  return edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\n};\n\nvar getTicksLimit = function getTicksLimit(ticksLength, maxTicksLimit) {\n  return Math.min(maxTicksLimit || ticksLength, ticksLength);\n};\n\nfunction sample(arr, numItems) {\n  var result = [];\n  var increment = arr.length / numItems;\n  var len = arr.length;\n  var i = 0;\n\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n\n  return result;\n}\n\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  var length = scale.ticks.length;\n  var validIndex = Math.min(index, length - 1);\n  var start = scale._startPixel;\n  var end = scale._endPixel;\n  var epsilon = 1e-6;\n  var lineValue = scale.getPixelForTick(validIndex);\n  var 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\n    lineValue += validIndex < index ? offset : -offset;\n\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n\n  return lineValue;\n}\n\nfunction garbageCollect(caches, length) {\n  each(caches, function (cache) {\n    var gc = cache.gc;\n    var gcLen = gc.length / 2;\n    var i;\n\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n\n      gc.splice(0, gcLen);\n    }\n  });\n}\n\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\n\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n\n  var font = toFont(options.font, fallback);\n  var padding = toPadding(options.padding);\n  var lines = isArray(options.text) ? options.text.length : 1;\n  return lines * font.lineHeight + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale: scale,\n    type: 'scale'\n  });\n}\n\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick: tick,\n    index: index,\n    type: 'tick'\n  });\n}\n\nfunction titleAlign(align, position, reverse) {\n  var ret = _toLeftRightCenter(align);\n\n  if (reverse && position !== 'right' || !reverse && position === 'right') {\n    ret = reverseAlign(ret);\n  }\n\n  return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n  var top = scale.top,\n      left = scale.left,\n      bottom = scale.bottom,\n      right = scale.right,\n      chart = scale.chart;\n  var chartArea = chart.chartArea,\n      scales = chart.scales;\n  var rotation = 0;\n  var maxWidth, titleX, titleY;\n  var height = bottom - top;\n  var width = right - left;\n\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n\n    if (isObject(position)) {\n      var positionAxisID = Object.keys(position)[0];\n      var 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\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      var _positionAxisID = Object.keys(position)[0];\n      var _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\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n\n  return {\n    titleX: titleX,\n    titleY: titleY,\n    maxWidth: maxWidth,\n    rotation: rotation\n  };\n}\n\nvar Scale = /*#__PURE__*/function (_Element) {\n  _inherits(Scale, _Element);\n\n  var _super11 = _createSuper(Scale);\n\n  function Scale(cfg) {\n    var _this9;\n\n    _classCallCheck(this, Scale);\n\n    _this9 = _super11.call(this);\n    _this9.id = cfg.id;\n    _this9.type = cfg.type;\n    _this9.options = undefined;\n    _this9.ctx = cfg.ctx;\n    _this9.chart = cfg.chart;\n    _this9.top = undefined;\n    _this9.bottom = undefined;\n    _this9.left = undefined;\n    _this9.right = undefined;\n    _this9.width = undefined;\n    _this9.height = undefined;\n    _this9._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    _this9.maxWidth = undefined;\n    _this9.maxHeight = undefined;\n    _this9.paddingTop = undefined;\n    _this9.paddingBottom = undefined;\n    _this9.paddingLeft = undefined;\n    _this9.paddingRight = undefined;\n    _this9.axis = undefined;\n    _this9.labelRotation = undefined;\n    _this9.min = undefined;\n    _this9.max = undefined;\n    _this9._range = undefined;\n    _this9.ticks = [];\n    _this9._gridLineItems = null;\n    _this9._labelItems = null;\n    _this9._labelSizes = null;\n    _this9._length = 0;\n    _this9._maxLength = 0;\n    _this9._longestTextCache = {};\n    _this9._startPixel = undefined;\n    _this9._endPixel = undefined;\n    _this9._reversePixels = false;\n    _this9._userMax = undefined;\n    _this9._userMin = undefined;\n    _this9._suggestedMax = undefined;\n    _this9._suggestedMin = undefined;\n    _this9._ticksLength = 0;\n    _this9._borderValue = 0;\n    _this9._cache = {};\n    _this9._dataLimitsCached = false;\n    _this9.$context = undefined;\n    return _this9;\n  }\n\n  _createClass(Scale, [{\n    key: \"init\",\n    value: function init(options) {\n      this.options = options.setContext(this.getContext());\n      this.axis = options.axis;\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    key: \"parse\",\n    value: function parse(raw, index) {\n      return raw;\n    }\n  }, {\n    key: \"getUserBounds\",\n    value: function getUserBounds() {\n      var _userMin = this._userMin,\n          _userMax = this._userMax,\n          _suggestedMin = this._suggestedMin,\n          _suggestedMax = this._suggestedMax;\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: isNumberFinite(_userMin),\n        maxDefined: isNumberFinite(_userMax)\n      };\n    }\n  }, {\n    key: \"getMinMax\",\n    value: function getMinMax(canStack) {\n      var _this$getUserBounds = this.getUserBounds(),\n          min = _this$getUserBounds.min,\n          max = _this$getUserBounds.max,\n          minDefined = _this$getUserBounds.minDefined,\n          maxDefined = _this$getUserBounds.maxDefined;\n\n      var range;\n\n      if (minDefined && maxDefined) {\n        return {\n          min: min,\n          max: max\n        };\n      }\n\n      var metas = this.getMatchingVisibleMetas();\n\n      for (var i = 0, ilen = metas.length; i < ilen; ++i) {\n        range = metas[i].controller.getMinMax(this, canStack);\n\n        if (!minDefined) {\n          min = Math.min(min, range.min);\n        }\n\n        if (!maxDefined) {\n          max = Math.max(max, range.max);\n        }\n      }\n\n      min = maxDefined && min > max ? max : min;\n      max = minDefined && min > max ? min : max;\n      return {\n        min: finiteOrDefault(min, finiteOrDefault(max, min)),\n        max: finiteOrDefault(max, finiteOrDefault(min, max))\n      };\n    }\n  }, {\n    key: \"getPadding\",\n    value: function 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    key: \"getTicks\",\n    value: function getTicks() {\n      return this.ticks;\n    }\n  }, {\n    key: \"getLabels\",\n    value: function getLabels() {\n      var data = this.chart.data;\n      return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n    }\n  }, {\n    key: \"getLabelItems\",\n    value: function getLabelItems() {\n      var chartArea = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.chart.chartArea;\n\n      var items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n\n      return items;\n    }\n  }, {\n    key: \"beforeLayout\",\n    value: function beforeLayout() {\n      this._cache = {};\n      this._dataLimitsCached = false;\n    }\n  }, {\n    key: \"beforeUpdate\",\n    value: function beforeUpdate() {\n      callback(this.options.beforeUpdate, [this]);\n    }\n  }, {\n    key: \"update\",\n    value: function update(maxWidth, maxHeight, margins) {\n      var _this$options4 = this.options,\n          beginAtZero = _this$options4.beginAtZero,\n          grace = _this$options4.grace,\n          tickOpts = _this$options4.ticks;\n      var sampleSize = tickOpts.sampleSize;\n      this.beforeUpdate();\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      this.ticks = null;\n      this._labelSizes = null;\n      this._gridLineItems = null;\n      this._labelItems = null;\n      this.beforeSetDimensions();\n      this.setDimensions();\n      this.afterSetDimensions();\n      this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n\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      this.ticks = this.buildTicks() || [];\n      this.afterBuildTicks();\n      var samplingEnabled = sampleSize < this.ticks.length;\n\n      this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n      this.configure();\n      this.beforeCalculateLabelRotation();\n      this.calculateLabelRotation();\n      this.afterCalculateLabelRotation();\n\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        this._convertTicksToLabels(this.ticks);\n      }\n\n      this.beforeFit();\n      this.fit();\n      this.afterFit();\n      this.afterUpdate();\n    }\n  }, {\n    key: \"configure\",\n    value: function configure() {\n      var reversePixels = this.options.reverse;\n      var 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        reversePixels = !reversePixels;\n      }\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    key: \"afterUpdate\",\n    value: function afterUpdate() {\n      callback(this.options.afterUpdate, [this]);\n    }\n  }, {\n    key: \"beforeSetDimensions\",\n    value: function beforeSetDimensions() {\n      callback(this.options.beforeSetDimensions, [this]);\n    }\n  }, {\n    key: \"setDimensions\",\n    value: function setDimensions() {\n      if (this.isHorizontal()) {\n        this.width = this.maxWidth;\n        this.left = 0;\n        this.right = this.width;\n      } else {\n        this.height = this.maxHeight;\n        this.top = 0;\n        this.bottom = this.height;\n      }\n\n      this.paddingLeft = 0;\n      this.paddingTop = 0;\n      this.paddingRight = 0;\n      this.paddingBottom = 0;\n    }\n  }, {\n    key: \"afterSetDimensions\",\n    value: function afterSetDimensions() {\n      callback(this.options.afterSetDimensions, [this]);\n    }\n  }, {\n    key: \"_callHooks\",\n    value: function _callHooks(name) {\n      this.chart.notifyPlugins(name, this.getContext());\n      callback(this.options[name], [this]);\n    }\n  }, {\n    key: \"beforeDataLimits\",\n    value: function beforeDataLimits() {\n      this._callHooks('beforeDataLimits');\n    }\n  }, {\n    key: \"determineDataLimits\",\n    value: function determineDataLimits() {}\n  }, {\n    key: \"afterDataLimits\",\n    value: function afterDataLimits() {\n      this._callHooks('afterDataLimits');\n    }\n  }, {\n    key: \"beforeBuildTicks\",\n    value: function beforeBuildTicks() {\n      this._callHooks('beforeBuildTicks');\n    }\n  }, {\n    key: \"buildTicks\",\n    value: function buildTicks() {\n      return [];\n    }\n  }, {\n    key: \"afterBuildTicks\",\n    value: function afterBuildTicks() {\n      this._callHooks('afterBuildTicks');\n    }\n  }, {\n    key: \"beforeTickToLabelConversion\",\n    value: function beforeTickToLabelConversion() {\n      callback(this.options.beforeTickToLabelConversion, [this]);\n    }\n  }, {\n    key: \"generateTickLabels\",\n    value: function generateTickLabels(ticks) {\n      var tickOpts = this.options.ticks;\n      var i, ilen, tick;\n\n      for (i = 0, ilen = ticks.length; i < ilen; i++) {\n        tick = ticks[i];\n        tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n      }\n    }\n  }, {\n    key: \"afterTickToLabelConversion\",\n    value: function afterTickToLabelConversion() {\n      callback(this.options.afterTickToLabelConversion, [this]);\n    }\n  }, {\n    key: \"beforeCalculateLabelRotation\",\n    value: function beforeCalculateLabelRotation() {\n      callback(this.options.beforeCalculateLabelRotation, [this]);\n    }\n  }, {\n    key: \"calculateLabelRotation\",\n    value: function calculateLabelRotation() {\n      var options = this.options;\n      var tickOpts = options.ticks;\n      var numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n      var minRotation = tickOpts.minRotation || 0;\n      var maxRotation = tickOpts.maxRotation;\n      var labelRotation = minRotation;\n      var 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      var labelSizes = this._getLabelSizes();\n\n      var maxLabelWidth = labelSizes.widest.width;\n      var maxLabelHeight = labelSizes.highest.height;\n\n      var maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n\n      tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n      if (maxLabelWidth + 6 > tickWidth) {\n        tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n        maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n        maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n        labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n        labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n      }\n\n      this.labelRotation = labelRotation;\n    }\n  }, {\n    key: \"afterCalculateLabelRotation\",\n    value: function afterCalculateLabelRotation() {\n      callback(this.options.afterCalculateLabelRotation, [this]);\n    }\n  }, {\n    key: \"afterAutoSkip\",\n    value: function afterAutoSkip() {}\n  }, {\n    key: \"beforeFit\",\n    value: function beforeFit() {\n      callback(this.options.beforeFit, [this]);\n    }\n  }, {\n    key: \"fit\",\n    value: function fit() {\n      var minSize = {\n        width: 0,\n        height: 0\n      };\n      var chart = this.chart,\n          _this$options5 = this.options,\n          tickOpts = _this$options5.ticks,\n          titleOpts = _this$options5.title,\n          gridOpts = _this$options5.grid;\n\n      var display = this._isVisible();\n\n      var isHorizontal = this.isHorizontal();\n\n      if (display) {\n        var titleHeight = getTitleHeight(titleOpts, chart.options.font);\n\n        if (isHorizontal) {\n          minSize.width = this.maxWidth;\n          minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n        } else {\n          minSize.height = this.maxHeight;\n          minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n        }\n\n        if (tickOpts.display && this.ticks.length) {\n          var _this$_getLabelSizes = this._getLabelSizes(),\n              first = _this$_getLabelSizes.first,\n              last = _this$_getLabelSizes.last,\n              widest = _this$_getLabelSizes.widest,\n              highest = _this$_getLabelSizes.highest;\n\n          var tickPadding = tickOpts.padding * 2;\n          var angleRadians = toRadians(this.labelRotation);\n          var cos = Math.cos(angleRadians);\n          var sin = Math.sin(angleRadians);\n\n          if (isHorizontal) {\n            var labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n            minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n          } else {\n            var labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n            minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n          }\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    key: \"_calculatePadding\",\n    value: function _calculatePadding(first, last, sin, cos) {\n      var _this$options6 = this.options,\n          _this$options6$ticks = _this$options6.ticks,\n          align = _this$options6$ticks.align,\n          padding = _this$options6$ticks.padding,\n          position = _this$options6.position;\n      var isRotated = this.labelRotation !== 0;\n      var labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n      if (this.isHorizontal()) {\n        var offsetLeft = this.getPixelForTick(0) - this.left;\n        var offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n        var paddingLeft = 0;\n        var paddingRight = 0;\n\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        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        var paddingTop = last.height / 2;\n        var 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    key: \"_handleMargins\",\n    value: function _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    key: \"afterFit\",\n    value: function afterFit() {\n      callback(this.options.afterFit, [this]);\n    }\n  }, {\n    key: \"isHorizontal\",\n    value: function isHorizontal() {\n      var _this$options7 = this.options,\n          axis = _this$options7.axis,\n          position = _this$options7.position;\n      return position === 'top' || position === 'bottom' || axis === 'x';\n    }\n  }, {\n    key: \"isFullSize\",\n    value: function isFullSize() {\n      return this.options.fullSize;\n    }\n  }, {\n    key: \"_convertTicksToLabels\",\n    value: function _convertTicksToLabels(ticks) {\n      this.beforeTickToLabelConversion();\n      this.generateTickLabels(ticks);\n      var i, ilen;\n\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    key: \"_getLabelSizes\",\n    value: function _getLabelSizes() {\n      var labelSizes = this._labelSizes;\n\n      if (!labelSizes) {\n        var sampleSize = this.options.ticks.sampleSize;\n        var ticks = this.ticks;\n\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    key: \"_computeLabelSizes\",\n    value: function _computeLabelSizes(ticks, length, maxTicksLimit) {\n      var ctx = this.ctx,\n          caches = this._longestTextCache;\n      var widths = [];\n      var heights = [];\n      var increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n      var widestLabelSize = 0;\n      var highestLabelSize = 0;\n      var 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] || {\n          data: {},\n          gc: []\n        };\n        lineHeight = tickFont.lineHeight;\n        width = height = 0;\n\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          for (j = 0, jlen = label.length; j < jlen; ++j) {\n            nestedLabel = label[j];\n\n            if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n              width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n              height += lineHeight;\n            }\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\n      garbageCollect(caches, length);\n      var widest = widths.indexOf(widestLabelSize);\n      var highest = heights.indexOf(highestLabelSize);\n\n      var valueAt = function valueAt(idx) {\n        return {\n          width: widths[idx] || 0,\n          height: heights[idx] || 0\n        };\n      };\n\n      return {\n        first: valueAt(0),\n        last: valueAt(length - 1),\n        widest: valueAt(widest),\n        highest: valueAt(highest),\n        widths: widths,\n        heights: heights\n      };\n    }\n  }, {\n    key: \"getLabelForValue\",\n    value: function getLabelForValue(value) {\n      return value;\n    }\n  }, {\n    key: \"getPixelForValue\",\n    value: function getPixelForValue(value, index) {\n      return NaN;\n    }\n  }, {\n    key: \"getValueForPixel\",\n    value: function getValueForPixel(pixel) {}\n  }, {\n    key: \"getPixelForTick\",\n    value: function getPixelForTick(index) {\n      var ticks = this.ticks;\n\n      if (index < 0 || index > ticks.length - 1) {\n        return null;\n      }\n\n      return this.getPixelForValue(ticks[index].value);\n    }\n  }, {\n    key: \"getPixelForDecimal\",\n    value: function getPixelForDecimal(decimal) {\n      if (this._reversePixels) {\n        decimal = 1 - decimal;\n      }\n\n      var pixel = this._startPixel + decimal * this._length;\n      return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n    }\n  }, {\n    key: \"getDecimalForPixel\",\n    value: function getDecimalForPixel(pixel) {\n      var decimal = (pixel - this._startPixel) / this._length;\n      return this._reversePixels ? 1 - decimal : decimal;\n    }\n  }, {\n    key: \"getBasePixel\",\n    value: function getBasePixel() {\n      return this.getPixelForValue(this.getBaseValue());\n    }\n  }, {\n    key: \"getBaseValue\",\n    value: function getBaseValue() {\n      var min = this.min,\n          max = this.max;\n      return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n    }\n  }, {\n    key: \"getContext\",\n    value: function getContext(index) {\n      var ticks = this.ticks || [];\n\n      if (index >= 0 && index < ticks.length) {\n        var tick = ticks[index];\n        return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n      }\n\n      return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n    }\n  }, {\n    key: \"_tickSize\",\n    value: function _tickSize() {\n      var optionTicks = this.options.ticks;\n      var rot = toRadians(this.labelRotation);\n      var cos = Math.abs(Math.cos(rot));\n      var sin = Math.abs(Math.sin(rot));\n\n      var labelSizes = this._getLabelSizes();\n\n      var padding = optionTicks.autoSkipPadding || 0;\n      var w = labelSizes ? labelSizes.widest.width + padding : 0;\n      var h = labelSizes ? labelSizes.highest.height + padding : 0;\n      return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n    }\n  }, {\n    key: \"_isVisible\",\n    value: function _isVisible() {\n      var display = this.options.display;\n\n      if (display !== 'auto') {\n        return !!display;\n      }\n\n      return this.getMatchingVisibleMetas().length > 0;\n    }\n  }, {\n    key: \"_computeGridLineItems\",\n    value: function _computeGridLineItems(chartArea) {\n      var axis = this.axis;\n      var chart = this.chart;\n      var options = this.options;\n      var grid = options.grid,\n          position = options.position,\n          border = options.border;\n      var offset = grid.offset;\n      var isHorizontal = this.isHorizontal();\n      var ticks = this.ticks;\n      var ticksLength = ticks.length + (offset ? 1 : 0);\n      var tl = getTickMarkLength(grid);\n      var items = [];\n      var borderOpts = border.setContext(this.getContext());\n      var axisWidth = borderOpts.display ? borderOpts.width : 0;\n      var axisHalfWidth = axisWidth / 2;\n\n      var alignBorderValue = function alignBorderValue(pixel) {\n        return _alignPixel(chart, pixel, axisWidth);\n      };\n\n      var borderValue, i, lineValue, alignedLineValue;\n      var 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          var positionAxisID = Object.keys(position)[0];\n          var 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          var _positionAxisID2 = Object.keys(position)[0];\n          var _value2 = position[_positionAxisID2];\n          borderValue = alignBorderValue(this.chart.scales[_positionAxisID2].getPixelForValue(_value2));\n        }\n\n        tx1 = borderValue - axisHalfWidth;\n        tx2 = tx1 - tl;\n        x1 = chartArea.left;\n        x2 = chartArea.right;\n      }\n\n      var limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n      var step = Math.max(1, Math.ceil(ticksLength / limit));\n\n      for (i = 0; i < ticksLength; i += step) {\n        var context = this.getContext(i);\n        var optsAtIndex = grid.setContext(context);\n        var optsAtIndexBorder = border.setContext(context);\n        var lineWidth = optsAtIndex.lineWidth;\n        var lineColor = optsAtIndex.color;\n        var borderDash = optsAtIndexBorder.dash || [];\n        var borderDashOffset = optsAtIndexBorder.dashOffset;\n        var tickWidth = optsAtIndex.tickWidth;\n        var tickColor = optsAtIndex.tickColor;\n        var tickBorderDash = optsAtIndex.tickBorderDash || [];\n        var tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n        lineValue = getPixelForGridLine(this, i, offset);\n\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: tx1,\n          ty1: ty1,\n          tx2: tx2,\n          ty2: ty2,\n          x1: x1,\n          y1: y1,\n          x2: x2,\n          y2: y2,\n          width: lineWidth,\n          color: lineColor,\n          borderDash: borderDash,\n          borderDashOffset: borderDashOffset,\n          tickWidth: tickWidth,\n          tickColor: tickColor,\n          tickBorderDash: tickBorderDash,\n          tickBorderDashOffset: tickBorderDashOffset\n        });\n      }\n\n      this._ticksLength = ticksLength;\n      this._borderValue = borderValue;\n      return items;\n    }\n  }, {\n    key: \"_computeLabelItems\",\n    value: function _computeLabelItems(chartArea) {\n      var axis = this.axis;\n      var options = this.options;\n      var position = options.position,\n          optionTicks = options.ticks;\n      var isHorizontal = this.isHorizontal();\n      var ticks = this.ticks;\n      var align = optionTicks.align,\n          crossAlign = optionTicks.crossAlign,\n          padding = optionTicks.padding,\n          mirror = optionTicks.mirror;\n      var tl = getTickMarkLength(options.grid);\n      var tickAndPadding = tl + padding;\n      var hTickAndPadding = mirror ? -padding : tickAndPadding;\n      var rotation = -toRadians(this.labelRotation);\n      var items = [];\n      var i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n      var 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        var ret = this._getYAxisLabelAlignment(tl);\n\n        textAlign = ret.textAlign;\n        x = ret.x;\n      } else if (position === 'right') {\n        var _ret = this._getYAxisLabelAlignment(tl);\n\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          var positionAxisID = Object.keys(position)[0];\n          var value = position[positionAxisID];\n          y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n        }\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          var _positionAxisID3 = Object.keys(position)[0];\n          var _value3 = position[_positionAxisID3];\n          x = this.chart.scales[_positionAxisID3].getPixelForValue(_value3);\n        }\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      var labelSizes = this._getLabelSizes();\n\n      for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n        tick = ticks[i];\n        label = tick.label;\n        var 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        var halfCount = lineCount / 2;\n        var color = optsAtIndex.color;\n        var strokeColor = optsAtIndex.textStrokeColor;\n        var strokeWidth = optsAtIndex.textStrokeWidth;\n        var 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            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\n          if (mirror) {\n            textOffset *= -1;\n          }\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        var backdrop = void 0;\n\n        if (optsAtIndex.showLabelBackdrop) {\n          var labelPadding = toPadding(optsAtIndex.backdropPadding);\n          var height = labelSizes.heights[i];\n          var width = labelSizes.widths[i];\n          var top = textOffset - labelPadding.top;\n          var left = 0 - labelPadding.left;\n\n          switch (textBaseline) {\n            case 'middle':\n              top -= height / 2;\n              break;\n\n            case 'bottom':\n              top -= height;\n              break;\n          }\n\n          switch (textAlign) {\n            case 'center':\n              left -= width / 2;\n              break;\n\n            case 'right':\n              left -= width;\n              break;\n\n            case 'inner':\n              if (i === ilen - 1) {\n                left -= width;\n              } else if (i > 0) {\n                left -= width / 2;\n              }\n\n              break;\n          }\n\n          backdrop = {\n            left: left,\n            top: top,\n            width: width + labelPadding.width,\n            height: height + labelPadding.height,\n            color: optsAtIndex.backdropColor\n          };\n        }\n\n        items.push({\n          label: label,\n          font: font,\n          textOffset: textOffset,\n          options: {\n            rotation: rotation,\n            color: color,\n            strokeColor: strokeColor,\n            strokeWidth: strokeWidth,\n            textAlign: tickTextAlign,\n            textBaseline: textBaseline,\n            translation: [x, y],\n            backdrop: backdrop\n          }\n        });\n      }\n\n      return items;\n    }\n  }, {\n    key: \"_getXAxisLabelAlignment\",\n    value: function _getXAxisLabelAlignment() {\n      var _this$options8 = this.options,\n          position = _this$options8.position,\n          ticks = _this$options8.ticks;\n      var rotation = -toRadians(this.labelRotation);\n\n      if (rotation) {\n        return position === 'top' ? 'left' : 'right';\n      }\n\n      var 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    key: \"_getYAxisLabelAlignment\",\n    value: function _getYAxisLabelAlignment(tl) {\n      var _this$options9 = this.options,\n          position = _this$options9.position,\n          _this$options9$ticks = _this$options9.ticks,\n          crossAlign = _this$options9$ticks.crossAlign,\n          mirror = _this$options9$ticks.mirror,\n          padding = _this$options9$ticks.padding;\n\n      var labelSizes = this._getLabelSizes();\n\n      var tickAndPadding = tl + padding;\n      var widest = labelSizes.widest.width;\n      var textAlign;\n      var 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 {\n        textAlign: textAlign,\n        x: x\n      };\n    }\n  }, {\n    key: \"_computeLabelArea\",\n    value: function _computeLabelArea() {\n      if (this.options.ticks.mirror) {\n        return;\n      }\n\n      var chart = this.chart;\n      var position = this.options.position;\n\n      if (position === 'left' || position === 'right') {\n        return {\n          top: 0,\n          left: this.left,\n          bottom: chart.height,\n          right: this.right\n        };\n      }\n\n      if (position === 'top' || position === 'bottom') {\n        return {\n          top: this.top,\n          left: 0,\n          bottom: this.bottom,\n          right: chart.width\n        };\n      }\n    }\n  }, {\n    key: \"drawBackground\",\n    value: function drawBackground() {\n      var ctx = this.ctx,\n          backgroundColor = this.options.backgroundColor,\n          left = this.left,\n          top = this.top,\n          width = this.width,\n          height = this.height;\n\n      if (backgroundColor) {\n        ctx.save();\n        ctx.fillStyle = backgroundColor;\n        ctx.fillRect(left, top, width, height);\n        ctx.restore();\n      }\n    }\n  }, {\n    key: \"getLineWidthForValue\",\n    value: function getLineWidthForValue(value) {\n      var grid = this.options.grid;\n\n      if (!this._isVisible() || !grid.display) {\n        return 0;\n      }\n\n      var ticks = this.ticks;\n      var index = ticks.findIndex(function (t) {\n        return t.value === value;\n      });\n\n      if (index >= 0) {\n        var opts = grid.setContext(this.getContext(index));\n        return opts.lineWidth;\n      }\n\n      return 0;\n    }\n  }, {\n    key: \"drawGrid\",\n    value: function drawGrid(chartArea) {\n      var grid = this.options.grid;\n      var ctx = this.ctx;\n\n      var items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n\n      var i, ilen;\n\n      var drawLine = function drawLine(p1, p2, style) {\n        if (!style.width || !style.color) {\n          return;\n        }\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        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          var item = items[i];\n\n          if (grid.drawOnChartArea) {\n            drawLine({\n              x: item.x1,\n              y: item.y1\n            }, {\n              x: item.x2,\n              y: item.y2\n            }, item);\n          }\n\n          if (grid.drawTicks) {\n            drawLine({\n              x: item.tx1,\n              y: item.ty1\n            }, {\n              x: item.tx2,\n              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    key: \"drawBorder\",\n    value: function drawBorder() {\n      var chart = this.chart,\n          ctx = this.ctx,\n          _this$options10 = this.options,\n          border = _this$options10.border,\n          grid = _this$options10.grid;\n      var borderOpts = border.setContext(this.getContext());\n      var axisWidth = border.display ? borderOpts.width : 0;\n\n      if (!axisWidth) {\n        return;\n      }\n\n      var lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n      var borderValue = this._borderValue;\n      var 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\n      ctx.save();\n      ctx.lineWidth = borderOpts.width;\n      ctx.strokeStyle = borderOpts.color;\n      ctx.beginPath();\n      ctx.moveTo(x1, y1);\n      ctx.lineTo(x2, y2);\n      ctx.stroke();\n      ctx.restore();\n    }\n  }, {\n    key: \"drawLabels\",\n    value: function drawLabels(chartArea) {\n      var optionTicks = this.options.ticks;\n\n      if (!optionTicks.display) {\n        return;\n      }\n\n      var ctx = this.ctx;\n\n      var area = this._computeLabelArea();\n\n      if (area) {\n        clipArea(ctx, area);\n      }\n\n      var items = this.getLabelItems(chartArea);\n\n      var _iterator10 = _createForOfIteratorHelper(items),\n          _step10;\n\n      try {\n        for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n          var item = _step10.value;\n          var renderTextOptions = item.options;\n          var tickFont = item.font;\n          var label = item.label;\n          var y = item.textOffset;\n          renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n        }\n      } catch (err) {\n        _iterator10.e(err);\n      } finally {\n        _iterator10.f();\n      }\n\n      if (area) {\n        unclipArea(ctx);\n      }\n    }\n  }, {\n    key: \"drawTitle\",\n    value: function drawTitle() {\n      var ctx = this.ctx,\n          _this$options11 = this.options,\n          position = _this$options11.position,\n          title = _this$options11.title,\n          reverse = _this$options11.reverse;\n\n      if (!title.display) {\n        return;\n      }\n\n      var font = toFont(title.font);\n      var padding = toPadding(title.padding);\n      var align = title.align;\n      var offset = font.lineHeight / 2;\n\n      if (position === 'bottom' || position === 'center' || isObject(position)) {\n        offset += padding.bottom;\n\n        if (isArray(title.text)) {\n          offset += font.lineHeight * (title.text.length - 1);\n        }\n      } else {\n        offset += padding.top;\n      }\n\n      var _titleArgs = titleArgs(this, offset, position, align),\n          titleX = _titleArgs.titleX,\n          titleY = _titleArgs.titleY,\n          maxWidth = _titleArgs.maxWidth,\n          rotation = _titleArgs.rotation;\n\n      renderText(ctx, title.text, 0, 0, font, {\n        color: title.color,\n        maxWidth: maxWidth,\n        rotation: rotation,\n        textAlign: titleAlign(align, position, reverse),\n        textBaseline: 'middle',\n        translation: [titleX, titleY]\n      });\n    }\n  }, {\n    key: \"draw\",\n    value: function 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    key: \"_layers\",\n    value: function _layers() {\n      var _this10 = this;\n\n      var opts = this.options;\n      var tz = opts.ticks && opts.ticks.z || 0;\n      var gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n      var bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n      if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n        return [{\n          z: tz,\n          draw: function draw(chartArea) {\n            _this10.draw(chartArea);\n          }\n        }];\n      }\n\n      return [{\n        z: gz,\n        draw: function draw(chartArea) {\n          _this10.drawBackground();\n\n          _this10.drawGrid(chartArea);\n\n          _this10.drawTitle();\n        }\n      }, {\n        z: bz,\n        draw: function draw() {\n          _this10.drawBorder();\n        }\n      }, {\n        z: tz,\n        draw: function draw(chartArea) {\n          _this10.drawLabels(chartArea);\n        }\n      }];\n    }\n  }, {\n    key: \"getMatchingVisibleMetas\",\n    value: function getMatchingVisibleMetas(type) {\n      var metas = this.chart.getSortedVisibleDatasetMetas();\n      var axisID = this.axis + 'AxisID';\n      var result = [];\n      var i, ilen;\n\n      for (i = 0, ilen = metas.length; i < ilen; ++i) {\n        var meta = metas[i];\n\n        if (meta[axisID] === this.id && (!type || meta.type === type)) {\n          result.push(meta);\n        }\n      }\n\n      return result;\n    }\n  }, {\n    key: \"_resolveTickFontOptions\",\n    value: function _resolveTickFontOptions(index) {\n      var opts = this.options.ticks.setContext(this.getContext(index));\n      return toFont(opts.font);\n    }\n  }, {\n    key: \"_maxDigits\",\n    value: function _maxDigits() {\n      var fontSize = this._resolveTickFontOptions(0).lineHeight;\n\n      return (this.isHorizontal() ? this.width : this.height) / fontSize;\n    }\n  }]);\n\n  return Scale;\n}(Element);\n\nvar TypedRegistry = /*#__PURE__*/function () {\n  function TypedRegistry(type, scope, override) {\n    _classCallCheck(this, TypedRegistry);\n\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n\n  _createClass(TypedRegistry, [{\n    key: \"isForType\",\n    value: function isForType(type) {\n      return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n    }\n  }, {\n    key: \"register\",\n    value: function register(item) {\n      var proto = Object.getPrototypeOf(item);\n      var parentScope;\n\n      if (isIChartComponent(proto)) {\n        parentScope = this.register(proto);\n      }\n\n      var items = this.items;\n      var id = item.id;\n      var 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        return scope;\n      }\n\n      items[id] = item;\n      registerDefaults(item, scope, parentScope);\n\n      if (this.override) {\n        defaults.override(item.id, item.overrides);\n      }\n\n      return scope;\n    }\n  }, {\n    key: \"get\",\n    value: function get(id) {\n      return this.items[id];\n    }\n  }, {\n    key: \"unregister\",\n    value: function unregister(item) {\n      var items = this.items;\n      var id = item.id;\n      var 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\n        if (this.override) {\n          delete overrides[id];\n        }\n      }\n    }\n  }]);\n\n  return TypedRegistry;\n}();\n\nfunction registerDefaults(item, scope, parentScope) {\n  var itemDefaults = merge(Object.create(null), [parentScope ? defaults.get(parentScope) : {}, defaults.get(scope), item.defaults]);\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(function (property) {\n    var propertyParts = property.split('.');\n    var sourceName = propertyParts.pop();\n    var sourceScope = [scope].concat(propertyParts).join('.');\n    var parts = routes[property].split('.');\n    var targetName = parts.pop();\n    var 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\nvar Registry = /*#__PURE__*/function () {\n  function Registry() {\n    _classCallCheck(this, Registry);\n\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    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n\n  _createClass(Registry, [{\n    key: \"add\",\n    value: function add() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      this._each('register', args);\n    }\n  }, {\n    key: \"remove\",\n    value: function remove() {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      this._each('unregister', args);\n    }\n  }, {\n    key: \"addControllers\",\n    value: function addControllers() {\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      this._each('register', args, this.controllers);\n    }\n  }, {\n    key: \"addElements\",\n    value: function addElements() {\n      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n\n      this._each('register', args, this.elements);\n    }\n  }, {\n    key: \"addPlugins\",\n    value: function addPlugins() {\n      for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        args[_key5] = arguments[_key5];\n      }\n\n      this._each('register', args, this.plugins);\n    }\n  }, {\n    key: \"addScales\",\n    value: function addScales() {\n      for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n        args[_key6] = arguments[_key6];\n      }\n\n      this._each('register', args, this.scales);\n    }\n  }, {\n    key: \"getController\",\n    value: function getController(id) {\n      return this._get(id, this.controllers, 'controller');\n    }\n  }, {\n    key: \"getElement\",\n    value: function getElement(id) {\n      return this._get(id, this.elements, 'element');\n    }\n  }, {\n    key: \"getPlugin\",\n    value: function getPlugin(id) {\n      return this._get(id, this.plugins, 'plugin');\n    }\n  }, {\n    key: \"getScale\",\n    value: function getScale(id) {\n      return this._get(id, this.scales, 'scale');\n    }\n  }, {\n    key: \"removeControllers\",\n    value: function removeControllers() {\n      for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n        args[_key7] = arguments[_key7];\n      }\n\n      this._each('unregister', args, this.controllers);\n    }\n  }, {\n    key: \"removeElements\",\n    value: function removeElements() {\n      for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n        args[_key8] = arguments[_key8];\n      }\n\n      this._each('unregister', args, this.elements);\n    }\n  }, {\n    key: \"removePlugins\",\n    value: function removePlugins() {\n      for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n        args[_key9] = arguments[_key9];\n      }\n\n      this._each('unregister', args, this.plugins);\n    }\n  }, {\n    key: \"removeScales\",\n    value: function removeScales() {\n      for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n        args[_key10] = arguments[_key10];\n      }\n\n      this._each('unregister', args, this.scales);\n    }\n  }, {\n    key: \"_each\",\n    value: function _each(method, args, typedRegistry) {\n      var _this11 = this;\n\n      _toConsumableArray(args).forEach(function (arg) {\n        var reg = typedRegistry || _this11._getRegistryForType(arg);\n\n        if (typedRegistry || reg.isForType(arg) || reg === _this11.plugins && arg.id) {\n          _this11._exec(method, reg, arg);\n        } else {\n          each(arg, function (item) {\n            var itemReg = typedRegistry || _this11._getRegistryForType(item);\n\n            _this11._exec(method, itemReg, item);\n          });\n        }\n      });\n    }\n  }, {\n    key: \"_exec\",\n    value: function _exec(method, registry, component) {\n      var camelMethod = _capitalize(method);\n\n      callback(component['before' + camelMethod], [], component);\n      registry[method](component);\n      callback(component['after' + camelMethod], [], component);\n    }\n  }, {\n    key: \"_getRegistryForType\",\n    value: function _getRegistryForType(type) {\n      for (var i = 0; i < this._typedRegistries.length; i++) {\n        var reg = this._typedRegistries[i];\n\n        if (reg.isForType(type)) {\n          return reg;\n        }\n      }\n\n      return this.plugins;\n    }\n  }, {\n    key: \"_get\",\n    value: function _get(id, typedRegistry, type) {\n      var item = typedRegistry.get(id);\n\n      if (item === undefined) {\n        throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n      }\n\n      return item;\n    }\n  }]);\n\n  return Registry;\n}();\n\nvar registry = /* #__PURE__ */new Registry();\n\nvar PluginService = /*#__PURE__*/function () {\n  function PluginService() {\n    _classCallCheck(this, PluginService);\n\n    this._init = [];\n  }\n\n  _createClass(PluginService, [{\n    key: \"notify\",\n    value: function notify(chart, hook, args, filter) {\n      if (hook === 'beforeInit') {\n        this._init = this._createDescriptors(chart, true);\n\n        this._notify(this._init, chart, 'install');\n      }\n\n      var descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n\n      var result = this._notify(descriptors, chart, hook, args);\n\n      if (hook === 'afterDestroy') {\n        this._notify(descriptors, chart, 'stop');\n\n        this._notify(this._init, chart, 'uninstall');\n      }\n\n      return result;\n    }\n  }, {\n    key: \"_notify\",\n    value: function _notify(descriptors, chart, hook, args) {\n      args = args || {};\n\n      var _iterator11 = _createForOfIteratorHelper(descriptors),\n          _step11;\n\n      try {\n        for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n          var descriptor = _step11.value;\n          var plugin = descriptor.plugin;\n          var method = plugin[hook];\n          var params = [chart, args, descriptor.options];\n\n          if (callback(method, params, plugin) === false && args.cancelable) {\n            return false;\n          }\n        }\n      } catch (err) {\n        _iterator11.e(err);\n      } finally {\n        _iterator11.f();\n      }\n\n      return true;\n    }\n  }, {\n    key: \"invalidate\",\n    value: function invalidate() {\n      if (!isNullOrUndef(this._cache)) {\n        this._oldCache = this._cache;\n        this._cache = undefined;\n      }\n    }\n  }, {\n    key: \"_descriptors\",\n    value: function _descriptors(chart) {\n      if (this._cache) {\n        return this._cache;\n      }\n\n      var descriptors = this._cache = this._createDescriptors(chart);\n\n      this._notifyStateChanges(chart);\n\n      return descriptors;\n    }\n  }, {\n    key: \"_createDescriptors\",\n    value: function _createDescriptors(chart, all) {\n      var config = chart && chart.config;\n      var options = valueOrDefault(config.options && config.options.plugins, {});\n      var plugins = allPlugins(config);\n      return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n    }\n  }, {\n    key: \"_notifyStateChanges\",\n    value: function _notifyStateChanges(chart) {\n      var previousDescriptors = this._oldCache || [];\n      var descriptors = this._cache;\n\n      var diff = function diff(a, b) {\n        return a.filter(function (x) {\n          return !b.some(function (y) {\n            return x.plugin.id === y.plugin.id;\n          });\n        });\n      };\n\n      this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n\n      this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n    }\n  }]);\n\n  return PluginService;\n}();\n\nfunction allPlugins(config) {\n  var localIds = {};\n  var plugins = [];\n  var keys = Object.keys(registry.plugins.items);\n\n  for (var i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n\n  var local = config.plugins || [];\n\n  for (var _i2 = 0; _i2 < local.length; _i2++) {\n    var plugin = local[_i2];\n\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n\n  return {\n    plugins: plugins,\n    localIds: localIds\n  };\n}\n\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n\n  if (options === true) {\n    return {};\n  }\n\n  return options;\n}\n\nfunction createDescriptors(chart, _ref5, options, all) {\n  var plugins = _ref5.plugins,\n      localIds = _ref5.localIds;\n  var result = [];\n  var context = chart.getContext();\n\n  var _iterator12 = _createForOfIteratorHelper(plugins),\n      _step12;\n\n  try {\n    for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n      var plugin = _step12.value;\n      var id = plugin.id;\n      var opts = getOpts(options[id], all);\n\n      if (opts === null) {\n        continue;\n      }\n\n      result.push({\n        plugin: plugin,\n        options: pluginOpts(chart.config, {\n          plugin: plugin,\n          local: localIds[id]\n        }, opts, context)\n      });\n    }\n  } catch (err) {\n    _iterator12.e(err);\n  } finally {\n    _iterator12.f();\n  }\n\n  return result;\n}\n\nfunction pluginOpts(config, _ref6, opts, context) {\n  var plugin = _ref6.plugin,\n      local = _ref6.local;\n  var keys = config.pluginScopeKeys(plugin);\n  var scopes = config.getOptionScopes(opts, keys);\n\n  if (local && plugin.defaults) {\n    scopes.push(plugin.defaults);\n  }\n\n  return config.createResolver(scopes, context, [''], {\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n\nfunction getIndexAxis(type, options) {\n  var datasetDefaults = defaults.datasets[type] || {};\n  var datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  var axis = id;\n\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\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\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\n\nfunction determineAxis(id) {\n  if (idMatchesAxis(id)) {\n    return id;\n  }\n\n  for (var _len11 = arguments.length, scaleOptions = new Array(_len11 > 1 ? _len11 - 1 : 0), _key11 = 1; _key11 < _len11; _key11++) {\n    scaleOptions[_key11 - 1] = arguments[_key11];\n  }\n\n  for (var _i3 = 0, _scaleOptions = scaleOptions; _i3 < _scaleOptions.length; _i3++) {\n    var opts = _scaleOptions[_i3];\n    var axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n\n    if (axis) {\n      return axis;\n    }\n  }\n\n  throw new Error(\"Cannot determine type of '\".concat(id, \"' axis. Please provide 'axis' or 'position' option.\"));\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n  if (dataset[axis + 'AxisID'] === id) {\n    return {\n      axis: axis\n    };\n  }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n  if (config.data && config.data.datasets) {\n    var boundDs = config.data.datasets.filter(function (d) {\n      return d.xAxisID === id || d.yAxisID === id;\n    });\n\n    if (boundDs.length) {\n      return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n    }\n  }\n\n  return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n  var chartDefaults = overrides[config.type] || {\n    scales: {}\n  };\n  var configScales = options.scales || {};\n  var chartIndexAxis = getIndexAxis(config.type, options);\n  var scales = Object.create(null);\n  Object.keys(configScales).forEach(function (id) {\n    var scaleConf = configScales[id];\n\n    if (!isObject(scaleConf)) {\n      return console.error(\"Invalid scale configuration for scale: \".concat(id));\n    }\n\n    if (scaleConf._proxy) {\n      return console.warn(\"Ignoring resolver passed as options for scale: \".concat(id));\n    }\n\n    var axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n    var defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    var defaultScaleOptions = chartDefaults.scales || {};\n    scales[id] = mergeIf(Object.create(null), [{\n      axis: axis\n    }, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n  config.data.datasets.forEach(function (dataset) {\n    var type = dataset.type || config.type;\n    var indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    var datasetDefaults = overrides[type] || {};\n    var defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(function (defaultID) {\n      var axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      var id = dataset[axis + 'AxisID'] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{\n        axis: axis\n      }, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n  Object.keys(scales).forEach(function (key) {\n    var scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n  return scales;\n}\n\nfunction initOptions(config) {\n  var options = config.options || (config.options = {});\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  initOptions(config);\n  return config;\n}\n\nvar keyCache = new Map();\nvar keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n  var keys = keyCache.get(cacheKey);\n\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n\n  return keys;\n}\n\nvar addIfFound = function addIfFound(set, obj, key) {\n  var opts = resolveObjectKey(obj, key);\n\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\n\nvar Config = /*#__PURE__*/function () {\n  function Config(config) {\n    _classCallCheck(this, Config);\n\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n\n  _createClass(Config, [{\n    key: \"platform\",\n    get: function get() {\n      return this._config.platform;\n    }\n  }, {\n    key: \"type\",\n    get: function get() {\n      return this._config.type;\n    },\n    set: function set(type) {\n      this._config.type = type;\n    }\n  }, {\n    key: \"data\",\n    get: function get() {\n      return this._config.data;\n    },\n    set: function set(data) {\n      this._config.data = initData(data);\n    }\n  }, {\n    key: \"options\",\n    get: function get() {\n      return this._config.options;\n    },\n    set: function set(options) {\n      this._config.options = options;\n    }\n  }, {\n    key: \"plugins\",\n    get: function get() {\n      return this._config.plugins;\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      var config = this._config;\n      this.clearCache();\n      initOptions(config);\n    }\n  }, {\n    key: \"clearCache\",\n    value: function clearCache() {\n      this._scopeCache.clear();\n\n      this._resolverCache.clear();\n    }\n  }, {\n    key: \"datasetScopeKeys\",\n    value: function datasetScopeKeys(datasetType) {\n      return cachedKeys(datasetType, function () {\n        return [[\"datasets.\".concat(datasetType), '']];\n      });\n    }\n  }, {\n    key: \"datasetAnimationScopeKeys\",\n    value: function datasetAnimationScopeKeys(datasetType, transition) {\n      return cachedKeys(\"\".concat(datasetType, \".transition.\").concat(transition), function () {\n        return [[\"datasets.\".concat(datasetType, \".transitions.\").concat(transition), \"transitions.\".concat(transition)], [\"datasets.\".concat(datasetType), '']];\n      });\n    }\n  }, {\n    key: \"datasetElementScopeKeys\",\n    value: function datasetElementScopeKeys(datasetType, elementType) {\n      return cachedKeys(\"\".concat(datasetType, \"-\").concat(elementType), function () {\n        return [[\"datasets.\".concat(datasetType, \".elements.\").concat(elementType), \"datasets.\".concat(datasetType), \"elements.\".concat(elementType), '']];\n      });\n    }\n  }, {\n    key: \"pluginScopeKeys\",\n    value: function pluginScopeKeys(plugin) {\n      var id = plugin.id;\n      var type = this.type;\n      return cachedKeys(\"\".concat(type, \"-plugin-\").concat(id), function () {\n        return [[\"plugins.\".concat(id)].concat(_toConsumableArray(plugin.additionalOptionScopes || []))];\n      });\n    }\n  }, {\n    key: \"_cachedScopes\",\n    value: function _cachedScopes(mainScope, resetCache) {\n      var _scopeCache = this._scopeCache;\n\n      var cache = _scopeCache.get(mainScope);\n\n      if (!cache || resetCache) {\n        cache = new Map();\n\n        _scopeCache.set(mainScope, cache);\n      }\n\n      return cache;\n    }\n  }, {\n    key: \"getOptionScopes\",\n    value: function getOptionScopes(mainScope, keyLists, resetCache) {\n      var options = this.options,\n          type = this.type;\n\n      var cache = this._cachedScopes(mainScope, resetCache);\n\n      var cached = cache.get(keyLists);\n\n      if (cached) {\n        return cached;\n      }\n\n      var scopes = new Set();\n      keyLists.forEach(function (keys) {\n        if (mainScope) {\n          scopes.add(mainScope);\n          keys.forEach(function (key) {\n            return addIfFound(scopes, mainScope, key);\n          });\n        }\n\n        keys.forEach(function (key) {\n          return addIfFound(scopes, options, key);\n        });\n        keys.forEach(function (key) {\n          return addIfFound(scopes, overrides[type] || {}, key);\n        });\n        keys.forEach(function (key) {\n          return addIfFound(scopes, defaults, key);\n        });\n        keys.forEach(function (key) {\n          return addIfFound(scopes, descriptors, key);\n        });\n      });\n      var array = Array.from(scopes);\n\n      if (array.length === 0) {\n        array.push(Object.create(null));\n      }\n\n      if (keysCached.has(keyLists)) {\n        cache.set(keyLists, array);\n      }\n\n      return array;\n    }\n  }, {\n    key: \"chartOptionScopes\",\n    value: function chartOptionScopes() {\n      var options = this.options,\n          type = this.type;\n      return [options, overrides[type] || {}, defaults.datasets[type] || {}, {\n        type: type\n      }, defaults, descriptors];\n    }\n  }, {\n    key: \"resolveNamedOptions\",\n    value: function resolveNamedOptions(scopes, names, context) {\n      var prefixes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [''];\n      var result = {\n        $shared: true\n      };\n\n      var _getResolver = getResolver(this._resolverCache, scopes, prefixes),\n          resolver = _getResolver.resolver,\n          subPrefixes = _getResolver.subPrefixes;\n\n      var options = resolver;\n\n      if (needContext(resolver, names)) {\n        result.$shared = false;\n        context = isFunction(context) ? context() : context;\n        var subResolver = this.createResolver(scopes, context, subPrefixes);\n        options = _attachContext(resolver, context, subResolver);\n      }\n\n      var _iterator13 = _createForOfIteratorHelper(names),\n          _step13;\n\n      try {\n        for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n          var prop = _step13.value;\n          result[prop] = options[prop];\n        }\n      } catch (err) {\n        _iterator13.e(err);\n      } finally {\n        _iterator13.f();\n      }\n\n      return result;\n    }\n  }, {\n    key: \"createResolver\",\n    value: function createResolver(scopes, context) {\n      var prefixes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [''];\n      var descriptorDefaults = arguments.length > 3 ? arguments[3] : undefined;\n\n      var _getResolver2 = getResolver(this._resolverCache, scopes, prefixes),\n          resolver = _getResolver2.resolver;\n\n      return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n    }\n  }]);\n\n  return Config;\n}();\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n  var cache = resolverCache.get(scopes);\n\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n\n  var cacheKey = prefixes.join();\n  var cached = cache.get(cacheKey);\n\n  if (!cached) {\n    var resolver = _createResolver(scopes, prefixes);\n\n    cached = {\n      resolver: resolver,\n      subPrefixes: prefixes.filter(function (p) {\n        return !p.toLowerCase().includes('hover');\n      })\n    };\n    cache.set(cacheKey, cached);\n  }\n\n  return cached;\n}\n\nvar hasFunction = function hasFunction(value) {\n  return isObject(value) && Object.getOwnPropertyNames(value).some(function (key) {\n    return isFunction(value[key]);\n  });\n};\n\nfunction needContext(proxy, names) {\n  var _descriptors2 = _descriptors(proxy),\n      isScriptable = _descriptors2.isScriptable,\n      isIndexable = _descriptors2.isIndexable;\n\n  var _iterator14 = _createForOfIteratorHelper(names),\n      _step14;\n\n  try {\n    for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n      var prop = _step14.value;\n      var scriptable = isScriptable(prop);\n      var indexable = isIndexable(prop);\n      var value = (indexable || scriptable) && proxy[prop];\n\n      if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n        return true;\n      }\n    }\n  } catch (err) {\n    _iterator14.e(err);\n  } finally {\n    _iterator14.f();\n  }\n\n  return false;\n}\n\nvar version = \"4.4.5\";\nvar KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\n\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] ? a[l2] - b[l2] : a[l1] - b[l1];\n  };\n}\n\nfunction onAnimationsComplete(context) {\n  var chart = context.chart;\n  var animationOptions = chart.options.animation;\n  chart.notifyPlugins('afterRender');\n  callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n  var chart = context.chart;\n  var animationOptions = chart.options.animation;\n  callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    item = item[0];\n  }\n\n  if (item && item.canvas) {\n    item = item.canvas;\n  }\n\n  return item;\n}\n\nvar instances = {};\n\nvar getChart = function getChart(key) {\n  var canvas = getCanvas(key);\n  return Object.values(instances).filter(function (c) {\n    return c.canvas === canvas;\n  }).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n  var keys = Object.keys(obj);\n\n  for (var _i4 = 0, _keys = keys; _i4 < _keys.length; _i4++) {\n    var key = _keys[_i4];\n    var intKey = +key;\n\n    if (intKey >= start) {\n      var value = obj[key];\n      delete obj[key];\n\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\n\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n\n  if (isClick) {\n    return lastEvent;\n  }\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  var xScale = meta.xScale,\n      yScale = meta.yScale;\n\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\n  return chartArea;\n}\n\nvar Chart = /*#__PURE__*/function () {\n  function Chart(item, userConfig) {\n    var _this12 = this;\n\n    _classCallCheck(this, Chart);\n\n    var config = this.config = new Config(userConfig);\n    var initialCanvas = getCanvas(item);\n    var existingChart = getChart(initialCanvas);\n\n    if (existingChart) {\n      throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n    }\n\n    var options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n    var context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    var canvas = context && context.canvas;\n    var height = canvas && canvas.height;\n    var width = canvas && canvas.width;\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    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    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(function (mode) {\n      return _this12.update(mode);\n    }, options.resizeDelay || 0);\n    this._dataChanges = [];\n    instances[this.id] = this;\n\n    if (!context || !canvas) {\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\n    if (this.attached) {\n      this.update();\n    }\n  }\n\n  _createClass(Chart, [{\n    key: \"aspectRatio\",\n    get: function get() {\n      var _this$options12 = this.options,\n          aspectRatio = _this$options12.aspectRatio,\n          maintainAspectRatio = _this$options12.maintainAspectRatio,\n          width = this.width,\n          height = this.height,\n          _aspectRatio = this._aspectRatio;\n\n      if (!isNullOrUndef(aspectRatio)) {\n        return aspectRatio;\n      }\n\n      if (maintainAspectRatio && _aspectRatio) {\n        return _aspectRatio;\n      }\n\n      return height ? width / height : null;\n    }\n  }, {\n    key: \"data\",\n    get: function get() {\n      return this.config.data;\n    },\n    set: function set(data) {\n      this.config.data = data;\n    }\n  }, {\n    key: \"options\",\n    get: function get() {\n      return this._options;\n    },\n    set: function set(options) {\n      this.config.options = options;\n    }\n  }, {\n    key: \"registry\",\n    get: function get() {\n      return registry;\n    }\n  }, {\n    key: \"_initialize\",\n    value: function _initialize() {\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      this.notifyPlugins('afterInit');\n      return this;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      clearCanvas(this.canvas, this.ctx);\n      return this;\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      animator.stop(this);\n      return this;\n    }\n  }, {\n    key: \"resize\",\n    value: function resize(width, height) {\n      if (!animator.running(this)) {\n        this._resize(width, height);\n      } else {\n        this._resizeBeforeDraw = {\n          width: width,\n          height: height\n        };\n      }\n    }\n  }, {\n    key: \"_resize\",\n    value: function _resize(width, height) {\n      var options = this.options;\n      var canvas = this.canvas;\n      var aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n      var newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n      var newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n      var mode = this.width ? 'resize' : 'attach';\n      this.width = newSize.width;\n      this.height = newSize.height;\n      this._aspectRatio = this.aspectRatio;\n\n      if (!retinaScale(this, newRatio, true)) {\n        return;\n      }\n\n      this.notifyPlugins('resize', {\n        size: newSize\n      });\n      callback(options.onResize, [this, newSize], this);\n\n      if (this.attached) {\n        if (this._doResize(mode)) {\n          this.render();\n        }\n      }\n    }\n  }, {\n    key: \"ensureScalesHaveIDs\",\n    value: function ensureScalesHaveIDs() {\n      var options = this.options;\n      var scalesOptions = options.scales || {};\n      each(scalesOptions, function (axisOptions, axisID) {\n        axisOptions.id = axisID;\n      });\n    }\n  }, {\n    key: \"buildOrUpdateScales\",\n    value: function buildOrUpdateScales() {\n      var _this13 = this;\n\n      var options = this.options;\n      var scaleOpts = options.scales;\n      var scales = this.scales;\n      var updated = Object.keys(scales).reduce(function (obj, id) {\n        obj[id] = false;\n        return obj;\n      }, {});\n      var items = [];\n\n      if (scaleOpts) {\n        items = items.concat(Object.keys(scaleOpts).map(function (id) {\n          var scaleOptions = scaleOpts[id];\n          var axis = determineAxis(id, scaleOptions);\n          var isRadial = axis === 'r';\n          var 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      each(items, function (item) {\n        var scaleOptions = item.options;\n        var id = scaleOptions.id;\n        var axis = determineAxis(id, scaleOptions);\n        var 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        var scale = null;\n\n        if (id in scales && scales[id].type === scaleType) {\n          scale = scales[id];\n        } else {\n          var scaleClass = registry.getScale(scaleType);\n          scale = new scaleClass({\n            id: id,\n            type: scaleType,\n            ctx: _this13.ctx,\n            chart: _this13\n          });\n          scales[scale.id] = scale;\n        }\n\n        scale.init(scaleOptions, options);\n      });\n      each(updated, function (hasUpdated, id) {\n        if (!hasUpdated) {\n          delete scales[id];\n        }\n      });\n      each(scales, function (scale) {\n        layouts.configure(_this13, scale, scale.options);\n        layouts.addBox(_this13, scale);\n      });\n    }\n  }, {\n    key: \"_updateMetasets\",\n    value: function _updateMetasets() {\n      var metasets = this._metasets;\n      var numData = this.data.datasets.length;\n      var numMeta = metasets.length;\n      metasets.sort(function (a, b) {\n        return a.index - b.index;\n      });\n\n      if (numMeta > numData) {\n        for (var i = numData; i < numMeta; ++i) {\n          this._destroyDatasetMeta(i);\n        }\n\n        metasets.splice(numData, numMeta - numData);\n      }\n\n      this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n    }\n  }, {\n    key: \"_removeUnreferencedMetasets\",\n    value: function _removeUnreferencedMetasets() {\n      var _this14 = this;\n\n      var metasets = this._metasets,\n          datasets = this.data.datasets;\n\n      if (metasets.length > datasets.length) {\n        delete this._stacks;\n      }\n\n      metasets.forEach(function (meta, index) {\n        if (datasets.filter(function (x) {\n          return x === meta._dataset;\n        }).length === 0) {\n          _this14._destroyDatasetMeta(index);\n        }\n      });\n    }\n  }, {\n    key: \"buildOrUpdateControllers\",\n    value: function buildOrUpdateControllers() {\n      var newControllers = [];\n      var datasets = this.data.datasets;\n      var i, ilen;\n\n      this._removeUnreferencedMetasets();\n\n      for (i = 0, ilen = datasets.length; i < ilen; i++) {\n        var dataset = datasets[i];\n        var meta = this.getDatasetMeta(i);\n        var type = dataset.type || this.config.type;\n\n        if (meta.type && meta.type !== type) {\n          this._destroyDatasetMeta(i);\n\n          meta = this.getDatasetMeta(i);\n        }\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          var ControllerClass = registry.getController(type);\n          var _defaults$datasets$ty = defaults.datasets[type],\n              datasetElementType = _defaults$datasets$ty.datasetElementType,\n              dataElementType = _defaults$datasets$ty.dataElementType;\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\n      return newControllers;\n    }\n  }, {\n    key: \"_resetElements\",\n    value: function _resetElements() {\n      var _this15 = this;\n\n      each(this.data.datasets, function (dataset, datasetIndex) {\n        _this15.getDatasetMeta(datasetIndex).controller.reset();\n      }, this);\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this._resetElements();\n\n      this.notifyPlugins('reset');\n    }\n  }, {\n    key: \"update\",\n    value: function update(mode) {\n      var config = this.config;\n      config.update();\n      var options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n      var animsDisabled = this._animationsDisabled = !options.animation;\n\n      this._updateScales();\n\n      this._checkEventBindings();\n\n      this._updateHiddenIndices();\n\n      this._plugins.invalidate();\n\n      if (this.notifyPlugins('beforeUpdate', {\n        mode: mode,\n        cancelable: true\n      }) === false) {\n        return;\n      }\n\n      var newControllers = this.buildOrUpdateControllers();\n      this.notifyPlugins('beforeElementsUpdate');\n      var minPadding = 0;\n\n      for (var i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n        var _this$getDatasetMeta = this.getDatasetMeta(i),\n            controller = _this$getDatasetMeta.controller;\n\n        var reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n        controller.buildOrUpdateElements(reset);\n        minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n      }\n\n      minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n\n      this._updateLayout(minPadding);\n\n      if (!animsDisabled) {\n        each(newControllers, function (controller) {\n          controller.reset();\n        });\n      }\n\n      this._updateDatasets(mode);\n\n      this.notifyPlugins('afterUpdate', {\n        mode: mode\n      });\n\n      this._layers.sort(compare2Level('z', '_idx'));\n\n      var _active = this._active,\n          _lastEvent = this._lastEvent;\n\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    key: \"_updateScales\",\n    value: function _updateScales() {\n      var _this16 = this;\n\n      each(this.scales, function (scale) {\n        layouts.removeBox(_this16, scale);\n      });\n      this.ensureScalesHaveIDs();\n      this.buildOrUpdateScales();\n    }\n  }, {\n    key: \"_checkEventBindings\",\n    value: function _checkEventBindings() {\n      var options = this.options;\n      var existingEvents = new Set(Object.keys(this._listeners));\n      var newEvents = new Set(options.events);\n\n      if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n        this.unbindEvents();\n        this.bindEvents();\n      }\n    }\n  }, {\n    key: \"_updateHiddenIndices\",\n    value: function _updateHiddenIndices() {\n      var _hiddenIndices = this._hiddenIndices;\n      var changes = this._getUniformDataChanges() || [];\n\n      var _iterator15 = _createForOfIteratorHelper(changes),\n          _step15;\n\n      try {\n        for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n          var _ref8 = _step15.value;\n          var method = _ref8.method;\n          var start = _ref8.start;\n          var count = _ref8.count;\n          var move = method === '_removeElements' ? -count : count;\n          moveNumericKeys(_hiddenIndices, start, move);\n        }\n      } catch (err) {\n        _iterator15.e(err);\n      } finally {\n        _iterator15.f();\n      }\n    }\n  }, {\n    key: \"_getUniformDataChanges\",\n    value: function _getUniformDataChanges() {\n      var _dataChanges = this._dataChanges;\n\n      if (!_dataChanges || !_dataChanges.length) {\n        return;\n      }\n\n      this._dataChanges = [];\n      var datasetCount = this.data.datasets.length;\n\n      var makeSet = function makeSet(idx) {\n        return new Set(_dataChanges.filter(function (c) {\n          return c[0] === idx;\n        }).map(function (c, i) {\n          return i + ',' + c.splice(1).join(',');\n        }));\n      };\n\n      var changeSet = makeSet(0);\n\n      for (var i = 1; i < datasetCount; i++) {\n        if (!setsEqual(changeSet, makeSet(i))) {\n          return;\n        }\n      }\n\n      return Array.from(changeSet).map(function (c) {\n        return c.split(',');\n      }).map(function (a) {\n        return {\n          method: a[1],\n          start: +a[2],\n          count: +a[3]\n        };\n      });\n    }\n  }, {\n    key: \"_updateLayout\",\n    value: function _updateLayout(minPadding) {\n      var _this17 = this;\n\n      if (this.notifyPlugins('beforeLayout', {\n        cancelable: true\n      }) === false) {\n        return;\n      }\n\n      layouts.update(this, this.width, this.height, minPadding);\n      var area = this.chartArea;\n      var noArea = area.width <= 0 || area.height <= 0;\n      this._layers = [];\n      each(this.boxes, function (box) {\n        var _this17$_layers;\n\n        if (noArea && box.position === 'chartArea') {\n          return;\n        }\n\n        if (box.configure) {\n          box.configure();\n        }\n\n        (_this17$_layers = _this17._layers).push.apply(_this17$_layers, _toConsumableArray(box._layers()));\n      }, this);\n\n      this._layers.forEach(function (item, index) {\n        item._idx = index;\n      });\n\n      this.notifyPlugins('afterLayout');\n    }\n  }, {\n    key: \"_updateDatasets\",\n    value: function _updateDatasets(mode) {\n      if (this.notifyPlugins('beforeDatasetsUpdate', {\n        mode: mode,\n        cancelable: true\n      }) === false) {\n        return;\n      }\n\n      for (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n        this.getDatasetMeta(i).controller.configure();\n      }\n\n      for (var _i5 = 0, _ilen = this.data.datasets.length; _i5 < _ilen; ++_i5) {\n        this._updateDataset(_i5, isFunction(mode) ? mode({\n          datasetIndex: _i5\n        }) : mode);\n      }\n\n      this.notifyPlugins('afterDatasetsUpdate', {\n        mode: mode\n      });\n    }\n  }, {\n    key: \"_updateDataset\",\n    value: function _updateDataset(index, mode) {\n      var meta = this.getDatasetMeta(index);\n      var args = {\n        meta: meta,\n        index: index,\n        mode: mode,\n        cancelable: true\n      };\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    key: \"render\",\n    value: function render() {\n      if (this.notifyPlugins('beforeRender', {\n        cancelable: true\n      }) === 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({\n          chart: this\n        });\n      }\n    }\n  }, {\n    key: \"draw\",\n    value: function draw() {\n      var i;\n\n      if (this._resizeBeforeDraw) {\n        var _this$_resizeBeforeDr = this._resizeBeforeDraw,\n            width = _this$_resizeBeforeDr.width,\n            height = _this$_resizeBeforeDr.height;\n        this._resizeBeforeDraw = null;\n\n        this._resize(width, height);\n      }\n\n      this.clear();\n\n      if (this.width <= 0 || this.height <= 0) {\n        return;\n      }\n\n      if (this.notifyPlugins('beforeDraw', {\n        cancelable: true\n      }) === false) {\n        return;\n      }\n\n      var layers = this._layers;\n\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      for (; i < layers.length; ++i) {\n        layers[i].draw(this.chartArea);\n      }\n\n      this.notifyPlugins('afterDraw');\n    }\n  }, {\n    key: \"_getSortedDatasetMetas\",\n    value: function _getSortedDatasetMetas(filterVisible) {\n      var metasets = this._sortedMetasets;\n      var result = [];\n      var i, ilen;\n\n      for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n        var meta = metasets[i];\n\n        if (!filterVisible || meta.visible) {\n          result.push(meta);\n        }\n      }\n\n      return result;\n    }\n  }, {\n    key: \"getSortedVisibleDatasetMetas\",\n    value: function getSortedVisibleDatasetMetas() {\n      return this._getSortedDatasetMetas(true);\n    }\n  }, {\n    key: \"_drawDatasets\",\n    value: function _drawDatasets() {\n      if (this.notifyPlugins('beforeDatasetsDraw', {\n        cancelable: true\n      }) === false) {\n        return;\n      }\n\n      var metasets = this.getSortedVisibleDatasetMetas();\n\n      for (var i = metasets.length - 1; i >= 0; --i) {\n        this._drawDataset(metasets[i]);\n      }\n\n      this.notifyPlugins('afterDatasetsDraw');\n    }\n  }, {\n    key: \"_drawDataset\",\n    value: function _drawDataset(meta) {\n      var ctx = this.ctx;\n      var clip = meta._clip;\n      var useClip = !clip.disabled;\n      var area = getDatasetArea(meta, this.chartArea);\n      var args = {\n        meta: 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    key: \"isPointInArea\",\n    value: function isPointInArea(point) {\n      return _isPointInArea(point, this.chartArea, this._minPadding);\n    }\n  }, {\n    key: \"getElementsAtEventForMode\",\n    value: function getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n      var method = Interaction.modes[mode];\n\n      if (typeof method === 'function') {\n        return method(this, e, options, useFinalPosition);\n      }\n\n      return [];\n    }\n  }, {\n    key: \"getDatasetMeta\",\n    value: function getDatasetMeta(datasetIndex) {\n      var dataset = this.data.datasets[datasetIndex];\n      var metasets = this._metasets;\n      var meta = metasets.filter(function (x) {\n        return x && x._dataset === dataset;\n      }).pop();\n\n      if (!meta) {\n        meta = {\n          type: null,\n          data: [],\n          dataset: null,\n          controller: null,\n          hidden: null,\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    key: \"getContext\",\n    value: function getContext() {\n      return this.$context || (this.$context = createContext(null, {\n        chart: this,\n        type: 'chart'\n      }));\n    }\n  }, {\n    key: \"getVisibleDatasetCount\",\n    value: function getVisibleDatasetCount() {\n      return this.getSortedVisibleDatasetMetas().length;\n    }\n  }, {\n    key: \"isDatasetVisible\",\n    value: function isDatasetVisible(datasetIndex) {\n      var dataset = this.data.datasets[datasetIndex];\n\n      if (!dataset) {\n        return false;\n      }\n\n      var meta = this.getDatasetMeta(datasetIndex);\n      return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n    }\n  }, {\n    key: \"setDatasetVisibility\",\n    value: function setDatasetVisibility(datasetIndex, visible) {\n      var meta = this.getDatasetMeta(datasetIndex);\n      meta.hidden = !visible;\n    }\n  }, {\n    key: \"toggleDataVisibility\",\n    value: function toggleDataVisibility(index) {\n      this._hiddenIndices[index] = !this._hiddenIndices[index];\n    }\n  }, {\n    key: \"getDataVisibility\",\n    value: function getDataVisibility(index) {\n      return !this._hiddenIndices[index];\n    }\n  }, {\n    key: \"_updateVisibility\",\n    value: function _updateVisibility(datasetIndex, dataIndex, visible) {\n      var mode = visible ? 'show' : 'hide';\n      var meta = this.getDatasetMeta(datasetIndex);\n\n      var 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        anims.update(meta, {\n          visible: visible\n        });\n        this.update(function (ctx) {\n          return ctx.datasetIndex === datasetIndex ? mode : undefined;\n        });\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide(datasetIndex, dataIndex) {\n      this._updateVisibility(datasetIndex, dataIndex, false);\n    }\n  }, {\n    key: \"show\",\n    value: function show(datasetIndex, dataIndex) {\n      this._updateVisibility(datasetIndex, dataIndex, true);\n    }\n  }, {\n    key: \"_destroyDatasetMeta\",\n    value: function _destroyDatasetMeta(datasetIndex) {\n      var meta = this._metasets[datasetIndex];\n\n      if (meta && meta.controller) {\n        meta.controller._destroy();\n      }\n\n      delete this._metasets[datasetIndex];\n    }\n  }, {\n    key: \"_stop\",\n    value: function _stop() {\n      var 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    key: \"destroy\",\n    value: function destroy() {\n      this.notifyPlugins('beforeDestroy');\n      var canvas = this.canvas,\n          ctx = this.ctx;\n\n      this._stop();\n\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      this.notifyPlugins('afterDestroy');\n    }\n  }, {\n    key: \"toBase64Image\",\n    value: function toBase64Image() {\n      var _this$canvas;\n\n      return (_this$canvas = this.canvas).toDataURL.apply(_this$canvas, arguments);\n    }\n  }, {\n    key: \"bindEvents\",\n    value: function bindEvents() {\n      this.bindUserEvents();\n\n      if (this.options.responsive) {\n        this.bindResponsiveEvents();\n      } else {\n        this.attached = true;\n      }\n    }\n  }, {\n    key: \"bindUserEvents\",\n    value: function bindUserEvents() {\n      var _this18 = this;\n\n      var listeners = this._listeners;\n      var platform = this.platform;\n\n      var _add = function _add(type, listener) {\n        platform.addEventListener(_this18, type, listener);\n        listeners[type] = listener;\n      };\n\n      var listener = function listener(e, x, y) {\n        e.offsetX = x;\n        e.offsetY = y;\n\n        _this18._eventHandler(e);\n      };\n\n      each(this.options.events, function (type) {\n        return _add(type, listener);\n      });\n    }\n  }, {\n    key: \"bindResponsiveEvents\",\n    value: function bindResponsiveEvents() {\n      var _this19 = this;\n\n      if (!this._responsiveListeners) {\n        this._responsiveListeners = {};\n      }\n\n      var listeners = this._responsiveListeners;\n      var platform = this.platform;\n\n      var _add = function _add(type, listener) {\n        platform.addEventListener(_this19, type, listener);\n        listeners[type] = listener;\n      };\n\n      var _remove = function _remove(type, listener) {\n        if (listeners[type]) {\n          platform.removeEventListener(_this19, type, listener);\n          delete listeners[type];\n        }\n      };\n\n      var listener = function listener(width, height) {\n        if (_this19.canvas) {\n          _this19.resize(width, height);\n        }\n      };\n\n      var detached;\n\n      var attached = function attached() {\n        _remove('attach', attached);\n\n        _this19.attached = true;\n\n        _this19.resize();\n\n        _add('resize', listener);\n\n        _add('detach', detached);\n      };\n\n      detached = function detached() {\n        _this19.attached = false;\n\n        _remove('resize', listener);\n\n        _this19._stop();\n\n        _this19._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    key: \"unbindEvents\",\n    value: function unbindEvents() {\n      var _this20 = this;\n\n      each(this._listeners, function (listener, type) {\n        _this20.platform.removeEventListener(_this20, type, listener);\n      });\n      this._listeners = {};\n      each(this._responsiveListeners, function (listener, type) {\n        _this20.platform.removeEventListener(_this20, type, listener);\n      });\n      this._responsiveListeners = undefined;\n    }\n  }, {\n    key: \"updateHoverStyle\",\n    value: function updateHoverStyle(items, mode, enabled) {\n      var prefix = enabled ? 'set' : 'remove';\n      var 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        var controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n\n        if (controller) {\n          controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n        }\n      }\n    }\n  }, {\n    key: \"getActiveElements\",\n    value: function getActiveElements() {\n      return this._active || [];\n    }\n  }, {\n    key: \"setActiveElements\",\n    value: function setActiveElements(activeElements) {\n      var _this21 = this;\n\n      var lastActive = this._active || [];\n      var active = activeElements.map(function (_ref9) {\n        var datasetIndex = _ref9.datasetIndex,\n            index = _ref9.index;\n\n        var meta = _this21.getDatasetMeta(datasetIndex);\n\n        if (!meta) {\n          throw new Error('No dataset found at index ' + datasetIndex);\n        }\n\n        return {\n          datasetIndex: datasetIndex,\n          element: meta.data[index],\n          index: index\n        };\n      });\n      var changed = !_elementsEqual(active, lastActive);\n\n      if (changed) {\n        this._active = active;\n        this._lastEvent = null;\n\n        this._updateHoverStyles(active, lastActive);\n      }\n    }\n  }, {\n    key: \"notifyPlugins\",\n    value: function notifyPlugins(hook, args, filter) {\n      return this._plugins.notify(this, hook, args, filter);\n    }\n  }, {\n    key: \"isPluginEnabled\",\n    value: function isPluginEnabled(pluginId) {\n      return this._plugins._cache.filter(function (p) {\n        return p.plugin.id === pluginId;\n      }).length === 1;\n    }\n  }, {\n    key: \"_updateHoverStyles\",\n    value: function _updateHoverStyles(active, lastActive, replay) {\n      var hoverOptions = this.options.hover;\n\n      var diff = function diff(a, b) {\n        return a.filter(function (x) {\n          return !b.some(function (y) {\n            return x.datasetIndex === y.datasetIndex && x.index === y.index;\n          });\n        });\n      };\n\n      var deactivated = diff(lastActive, active);\n      var 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    key: \"_eventHandler\",\n    value: function _eventHandler(e, replay) {\n      var _this22 = this;\n\n      var args = {\n        event: e,\n        replay: replay,\n        cancelable: true,\n        inChartArea: this.isPointInArea(e)\n      };\n\n      var eventFilter = function eventFilter(plugin) {\n        return (plugin.options.events || _this22.options.events).includes(e.native.type);\n      };\n\n      if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n        return;\n      }\n\n      var 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    key: \"_handleEvent\",\n    value: function _handleEvent(e, replay, inChartArea) {\n      var _this$_active = this._active,\n          lastActive = _this$_active === void 0 ? [] : _this$_active,\n          options = this.options;\n      var useFinalPosition = replay;\n\n      var active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n\n      var isClick = _isClickEvent(e);\n\n      var lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n      if (inChartArea) {\n        this._lastEvent = null;\n        callback(options.onHover, [e, active, this], this);\n\n        if (isClick) {\n          callback(options.onClick, [e, active, this], this);\n        }\n      }\n\n      var changed = !_elementsEqual(active, lastActive);\n\n      if (changed || replay) {\n        this._active = active;\n\n        this._updateHoverStyles(active, lastActive, replay);\n      }\n\n      this._lastEvent = lastEvent;\n      return changed;\n    }\n  }, {\n    key: \"_getActiveElements\",\n    value: function _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n      if (e.type === 'mouseout') {\n        return [];\n      }\n\n      if (!inChartArea) {\n        return lastActive;\n      }\n\n      var hoverOptions = this.options.hover;\n      return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n    }\n  }], [{\n    key: \"register\",\n    value: function register() {\n      registry.add.apply(registry, arguments);\n      invalidatePlugins();\n    }\n  }, {\n    key: \"unregister\",\n    value: function unregister() {\n      registry.remove.apply(registry, arguments);\n      invalidatePlugins();\n    }\n  }]);\n\n  return Chart;\n}();\n\nChart.defaults = defaults;\nChart.instances = instances;\nChart.overrides = overrides;\nChart.registry = registry;\nChart.version = version;\nChart.getChart = getChart;\n\nfunction invalidatePlugins() {\n  return each(Chart.instances, function (chart) {\n    return chart._plugins.invalidate();\n  });\n}\n\nfunction clipArc(ctx, element, endAngle) {\n  var startAngle = element.startAngle,\n      pixelMargin = element.pixelMargin,\n      x = element.x,\n      y = element.y,\n      outerRadius = element.outerRadius,\n      innerRadius = element.innerRadius;\n  var angleMargin = pixelMargin / outerRadius; // 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\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n\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\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n/**\n * Parse border radius from the provided options\n */\n\n\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n  var o = toRadiusCorners(arc.options.borderRadius);\n  var halfThickness = (outerRadius - innerRadius) / 2;\n  var innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2); // 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\n  var computeOuterLimit = function computeOuterLimit(val) {\n    var 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 * Convert (r, 𝜃) to (x, y)\n */\n\n\nfunction rThetaToXY(r, theta, x, y) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta)\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 */\n\n\nfunction pathArc(ctx, element, offset, spacing, end, circular) {\n  var x = element.x,\n      y = element.y,\n      start = element.startAngle,\n      pixelMargin = element.pixelMargin,\n      innerR = element.innerRadius;\n  var outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  var innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n  var spacingOffset = 0;\n  var 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    var noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    var noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    var avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    var adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n\n  var beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  var angleOffset = (alpha - beta) / 2;\n  var startAngle = start + angleOffset + spacingOffset;\n  var endAngle = end - angleOffset - spacingOffset;\n\n  var _parseBorderRadius$ = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle),\n      outerStart = _parseBorderRadius$.outerStart,\n      outerEnd = _parseBorderRadius$.outerEnd,\n      innerStart = _parseBorderRadius$.innerStart,\n      innerEnd = _parseBorderRadius$.innerEnd;\n\n  var outerStartAdjustedRadius = outerRadius - outerStart;\n  var outerEndAdjustedRadius = outerRadius - outerEnd;\n  var outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  var outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n  var innerStartAdjustedRadius = innerRadius + innerStart;\n  var innerEndAdjustedRadius = innerRadius + innerEnd;\n  var innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  var innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n  ctx.beginPath();\n\n  if (circular) {\n    // The first arc segments from point 1 to point a to point 2\n    var outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n    ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle); // The corner segment from point 2 to point 3\n\n    if (outerEnd > 0) {\n      var pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    } // The line from point 3 to point 4\n\n\n    var p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y); // The corner segment from point 4 to point 5\n\n    if (innerEnd > 0) {\n      var _pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n\n      ctx.arc(_pCenter.x, _pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    } // The inner arc from point 5 to point b to point 6\n\n\n    var 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); // The corner segment from point 6 to point 7\n\n    if (innerStart > 0) {\n      var _pCenter2 = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n\n      ctx.arc(_pCenter2.x, _pCenter2.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    } // The line from point 7 to point 8\n\n\n    var p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y); // The corner segment from point 8 to point 1\n\n    if (outerStart > 0) {\n      var _pCenter3 = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n\n      ctx.arc(_pCenter3.x, _pCenter3.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n    var outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    var outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n    var outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    var outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n\n  ctx.closePath();\n}\n\nfunction drawArc(ctx, element, offset, spacing, circular) {\n  var fullCircles = element.fullCircles,\n      startAngle = element.startAngle,\n      circumference = element.circumference;\n  var endAngle = element.endAngle;\n\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n\n    for (var i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\n\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n  var fullCircles = element.fullCircles,\n      startAngle = element.startAngle,\n      circumference = element.circumference,\n      options = element.options;\n  var borderWidth = options.borderWidth,\n      borderJoinStyle = options.borderJoinStyle,\n      borderDash = options.borderDash,\n      borderDashOffset = options.borderDashOffset;\n  var 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  var endAngle = element.endAngle;\n\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n\n    for (var i = 0; i < fullCircles; ++i) {\n      ctx.stroke();\n    }\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\nvar ArcElement = /*#__PURE__*/function (_Element2) {\n  _inherits(ArcElement, _Element2);\n\n  var _super12 = _createSuper(ArcElement);\n\n  function ArcElement(cfg) {\n    var _this23;\n\n    _classCallCheck(this, ArcElement);\n\n    _this23 = _super12.call(this);\n    _this23.circumference = void 0;\n    _this23.endAngle = void 0;\n    _this23.fullCircles = void 0;\n    _this23.innerRadius = void 0;\n    _this23.outerRadius = void 0;\n    _this23.pixelMargin = void 0;\n    _this23.startAngle = void 0;\n    _this23.options = undefined;\n    _this23.circumference = undefined;\n    _this23.startAngle = undefined;\n    _this23.endAngle = undefined;\n    _this23.innerRadius = undefined;\n    _this23.outerRadius = undefined;\n    _this23.pixelMargin = 0;\n    _this23.fullCircles = 0;\n\n    if (cfg) {\n      Object.assign(_assertThisInitialized(_this23), cfg);\n    }\n\n    return _this23;\n  }\n\n  _createClass(ArcElement, [{\n    key: \"inRange\",\n    value: function inRange(chartX, chartY, useFinalPosition) {\n      var point = this.getProps(['x', 'y'], useFinalPosition);\n\n      var _getAngleFromPoint2 = getAngleFromPoint(point, {\n        x: chartX,\n        y: chartY\n      }),\n          angle = _getAngleFromPoint2.angle,\n          distance = _getAngleFromPoint2.distance;\n\n      var _this$getProps2 = this.getProps(['startAngle', 'endAngle', 'innerRadius', 'outerRadius', 'circumference'], useFinalPosition),\n          startAngle = _this$getProps2.startAngle,\n          endAngle = _this$getProps2.endAngle,\n          innerRadius = _this$getProps2.innerRadius,\n          outerRadius = _this$getProps2.outerRadius,\n          circumference = _this$getProps2.circumference;\n\n      var rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n\n      var _circumference = valueOrDefault(circumference, endAngle - startAngle);\n\n      var nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n      var betweenAngles = _circumference >= TAU || nonZeroBetween;\n\n      var withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n      return betweenAngles && withinRadius;\n    }\n  }, {\n    key: \"getCenterPoint\",\n    value: function getCenterPoint(useFinalPosition) {\n      var _this$getProps3 = this.getProps(['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius'], useFinalPosition),\n          x = _this$getProps3.x,\n          y = _this$getProps3.y,\n          startAngle = _this$getProps3.startAngle,\n          endAngle = _this$getProps3.endAngle,\n          innerRadius = _this$getProps3.innerRadius,\n          outerRadius = _this$getProps3.outerRadius;\n\n      var _this$options13 = this.options,\n          offset = _this$options13.offset,\n          spacing = _this$options13.spacing;\n      var halfAngle = (startAngle + endAngle) / 2;\n      var 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    key: \"tooltipPosition\",\n    value: function tooltipPosition(useFinalPosition) {\n      return this.getCenterPoint(useFinalPosition);\n    }\n  }, {\n    key: \"draw\",\n    value: function draw(ctx) {\n      var options = this.options,\n          circumference = this.circumference;\n      var offset = (options.offset || 0) / 4;\n      var spacing = (options.spacing || 0) / 2;\n      var 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      var halfAngle = (this.startAngle + this.endAngle) / 2;\n      ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n      var fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n      var radiusOffset = offset * fix;\n      ctx.fillStyle = options.backgroundColor;\n      ctx.strokeStyle = options.borderColor;\n      drawArc(ctx, this, radiusOffset, spacing, circular);\n      drawBorder(ctx, this, radiusOffset, spacing, circular);\n      ctx.restore();\n    }\n  }]);\n\n  return ArcElement;\n}(Element);\n\nArcElement.id = 'arc';\nArcElement.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};\nArcElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor'\n};\nArcElement.descriptors = {\n  _scriptable: true,\n  _indexable: function _indexable(name) {\n    return name !== 'borderDash';\n  }\n};\n\nfunction setStyle(ctx, options) {\n  var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 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\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) {\n  var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var count = points.length;\n  var _params$start = params.start,\n      paramsStart = _params$start === void 0 ? 0 : _params$start,\n      _params$end = params.end,\n      paramsEnd = _params$end === void 0 ? count - 1 : _params$end;\n  var segmentStart = segment.start,\n      segmentEnd = segment.end;\n  var start = Math.max(paramsStart, segmentStart);\n  var end = Math.min(paramsEnd, segmentEnd);\n  var outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n  return {\n    count: count,\n    start: start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\n\nfunction pathSegment(ctx, line, segment, params) {\n  var points = line.points,\n      options = line.options;\n\n  var _pathVars = pathVars(points, segment, params),\n      count = _pathVars.count,\n      start = _pathVars.start,\n      loop = _pathVars.loop,\n      ilen = _pathVars.ilen;\n\n  var lineMethod = getLineMethod(options);\n\n  var _ref10 = params || {},\n      _ref10$move = _ref10.move,\n      move = _ref10$move === void 0 ? true : _ref10$move,\n      reverse = _ref10.reverse;\n\n  var 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      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\nfunction fastPathSegment(ctx, line, segment, params) {\n  var points = line.points;\n\n  var _pathVars2 = pathVars(points, segment, params),\n      count = _pathVars2.count,\n      start = _pathVars2.start,\n      ilen = _pathVars2.ilen;\n\n  var _ref11 = params || {},\n      _ref11$move = _ref11.move,\n      move = _ref11$move === void 0 ? true : _ref11$move,\n      reverse = _ref11.reverse;\n\n  var avgX = 0;\n  var countX = 0;\n  var i, point, prevX, minY, maxY, lastY;\n\n  var pointIndex = function pointIndex(index) {\n    return (start + (reverse ? ilen - index : index)) % count;\n  };\n\n  var drawX = function drawX() {\n    if (minY !== maxY) {\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\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      continue;\n    }\n\n    var x = point.x;\n    var y = point.y;\n    var truncX = x | 0;\n\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      ctx.lineTo(x, y);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n\n    lastY = y;\n  }\n\n  drawX();\n}\n\nfunction _getSegmentMethod(line) {\n  var opts = line.options;\n  var borderDash = opts.borderDash && opts.borderDash.length;\n  var useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\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  var path = line._path;\n\n  if (!path) {\n    path = line._path = new Path2D();\n\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n  var segments = line.segments,\n      options = line.options;\n\n  var segmentMethod = _getSegmentMethod(line);\n\n  var _iterator16 = _createForOfIteratorHelper(segments),\n      _step16;\n\n  try {\n    for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n      var segment = _step16.value;\n      setStyle(ctx, options, segment.style);\n      ctx.beginPath();\n\n      if (segmentMethod(ctx, line, segment, {\n        start: start,\n        end: start + count - 1\n      })) {\n        ctx.closePath();\n      }\n\n      ctx.stroke();\n    }\n  } catch (err) {\n    _iterator16.e(err);\n  } finally {\n    _iterator16.f();\n  }\n}\n\nvar 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\nvar LineElement = /*#__PURE__*/function (_Element3) {\n  _inherits(LineElement, _Element3);\n\n  var _super13 = _createSuper(LineElement);\n\n  function LineElement(cfg) {\n    var _this24;\n\n    _classCallCheck(this, LineElement);\n\n    _this24 = _super13.call(this);\n    _this24.animated = true;\n    _this24.options = undefined;\n    _this24._chart = undefined;\n    _this24._loop = undefined;\n    _this24._fullLoop = undefined;\n    _this24._path = undefined;\n    _this24._points = undefined;\n    _this24._segments = undefined;\n    _this24._decimated = false;\n    _this24._pointsUpdated = false;\n    _this24._datasetIndex = undefined;\n\n    if (cfg) {\n      Object.assign(_assertThisInitialized(_this24), cfg);\n    }\n\n    return _this24;\n  }\n\n  _createClass(LineElement, [{\n    key: \"updateControlPoints\",\n    value: function updateControlPoints(chartArea, indexAxis) {\n      var options = this.options;\n\n      if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n        var loop = options.spanGaps ? this._loop : this._fullLoop;\n\n        _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n\n        this._pointsUpdated = true;\n      }\n    }\n  }, {\n    key: \"points\",\n    get: function get() {\n      return this._points;\n    },\n    set: function set(points) {\n      this._points = points;\n      delete this._segments;\n      delete this._path;\n      this._pointsUpdated = false;\n    }\n  }, {\n    key: \"segments\",\n    get: function get() {\n      return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      var segments = this.segments;\n      var points = this.points;\n      return segments.length && points[segments[0].start];\n    }\n  }, {\n    key: \"last\",\n    value: function last() {\n      var segments = this.segments;\n      var points = this.points;\n      var count = segments.length;\n      return count && points[segments[count - 1].end];\n    }\n  }, {\n    key: \"interpolate\",\n    value: function interpolate(point, property) {\n      var options = this.options;\n      var value = point[property];\n      var points = this.points;\n\n      var segments = _boundSegments(this, {\n        property: property,\n        start: value,\n        end: value\n      });\n\n      if (!segments.length) {\n        return;\n      }\n\n      var result = [];\n\n      var _interpolate = _getInterpolationMethod(options);\n\n      var i, ilen;\n\n      for (i = 0, ilen = segments.length; i < ilen; ++i) {\n        var _segments$i = segments[i],\n            start = _segments$i.start,\n            end = _segments$i.end;\n        var p1 = points[start];\n        var p2 = points[end];\n\n        if (p1 === p2) {\n          result.push(p1);\n          continue;\n        }\n\n        var t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n\n        var interpolated = _interpolate(p1, p2, t, options.stepped);\n\n        interpolated[property] = point[property];\n        result.push(interpolated);\n      }\n\n      return result.length === 1 ? result[0] : result;\n    }\n  }, {\n    key: \"pathSegment\",\n    value: function pathSegment(ctx, segment, params) {\n      var segmentMethod = _getSegmentMethod(this);\n\n      return segmentMethod(ctx, this, segment, params);\n    }\n  }, {\n    key: \"path\",\n    value: function path(ctx, start, count) {\n      var segments = this.segments;\n\n      var segmentMethod = _getSegmentMethod(this);\n\n      var loop = this._loop;\n      start = start || 0;\n      count = count || this.points.length - start;\n\n      var _iterator17 = _createForOfIteratorHelper(segments),\n          _step17;\n\n      try {\n        for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n          var segment = _step17.value;\n          loop &= segmentMethod(ctx, this, segment, {\n            start: start,\n            end: start + count - 1\n          });\n        }\n      } catch (err) {\n        _iterator17.e(err);\n      } finally {\n        _iterator17.f();\n      }\n\n      return !!loop;\n    }\n  }, {\n    key: \"draw\",\n    value: function draw(ctx, chartArea, start, count) {\n      var options = this.options || {};\n      var 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        this._pointsUpdated = false;\n        this._path = undefined;\n      }\n    }\n  }]);\n\n  return LineElement;\n}(Element);\n\nLineElement.id = 'line';\nLineElement.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};\nLineElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n  _scriptable: true,\n  _indexable: function _indexable(name) {\n    return name !== 'borderDash' && name !== 'fill';\n  }\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n  var options = el.options;\n\n  var _el$getProps = el.getProps([axis], useFinalPosition),\n      value = _el$getProps[axis];\n\n  return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\n\nvar PointElement = /*#__PURE__*/function (_Element4) {\n  _inherits(PointElement, _Element4);\n\n  var _super14 = _createSuper(PointElement);\n\n  /**\n  * @type {any}\n  */\n\n  /**\n  * @type {any}\n  */\n  function PointElement(cfg) {\n    var _this25;\n\n    _classCallCheck(this, PointElement);\n\n    _this25 = _super14.call(this);\n    _this25.parsed = void 0;\n    _this25.skip = void 0;\n    _this25.stop = void 0;\n    _this25.options = undefined;\n    _this25.parsed = undefined;\n    _this25.skip = undefined;\n    _this25.stop = undefined;\n\n    if (cfg) {\n      Object.assign(_assertThisInitialized(_this25), cfg);\n    }\n\n    return _this25;\n  }\n\n  _createClass(PointElement, [{\n    key: \"inRange\",\n    value: function inRange(mouseX, mouseY, useFinalPosition) {\n      var options = this.options;\n\n      var _this$getProps4 = this.getProps(['x', 'y'], useFinalPosition),\n          x = _this$getProps4.x,\n          y = _this$getProps4.y;\n\n      return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n    }\n  }, {\n    key: \"inXRange\",\n    value: function inXRange(mouseX, useFinalPosition) {\n      return inRange$1(this, mouseX, 'x', useFinalPosition);\n    }\n  }, {\n    key: \"inYRange\",\n    value: function inYRange(mouseY, useFinalPosition) {\n      return inRange$1(this, mouseY, 'y', useFinalPosition);\n    }\n  }, {\n    key: \"getCenterPoint\",\n    value: function getCenterPoint(useFinalPosition) {\n      var _this$getProps5 = this.getProps(['x', 'y'], useFinalPosition),\n          x = _this$getProps5.x,\n          y = _this$getProps5.y;\n\n      return {\n        x: x,\n        y: y\n      };\n    }\n  }, {\n    key: \"size\",\n    value: function size(options) {\n      options = options || this.options || {};\n      var radius = options.radius || 0;\n      radius = Math.max(radius, radius && options.hoverRadius || 0);\n      var borderWidth = radius && options.borderWidth || 0;\n      return (radius + borderWidth) * 2;\n    }\n  }, {\n    key: \"draw\",\n    value: function draw(ctx, area) {\n      var 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    key: \"getRange\",\n    value: function getRange() {\n      var options = this.options || {}; // @ts-expect-error Fallbacks should never be hit in practice\n\n      return options.radius + options.hitRadius;\n    }\n  }]);\n\n  return PointElement;\n}(Element);\n\nPointElement.id = 'point';\nPointElement.defaults = {\n  borderWidth: 1,\n  hitRadius: 1,\n  hoverBorderWidth: 1,\n  hoverRadius: 4,\n  pointStyle: 'circle',\n  radius: 3,\n  rotation: 0\n};\nPointElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n  var _bar$getProps = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition),\n      x = _bar$getProps.x,\n      y = _bar$getProps.y,\n      base = _bar$getProps.base,\n      width = _bar$getProps.width,\n      height = _bar$getProps.height;\n\n  var 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 {\n    left: left,\n    top: top,\n    right: right,\n    bottom: bottom\n  };\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n  var value = bar.options.borderWidth;\n  var skip = bar.borderSkipped;\n  var o = toTRBL(value);\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  var _bar$getProps2 = bar.getProps(['enableBorderRadius']),\n      enableBorderRadius = _bar$getProps2.enableBorderRadius;\n\n  var value = bar.options.borderRadius;\n  var o = toTRBLCorners(value);\n  var maxR = Math.min(maxW, maxH);\n  var skip = bar.borderSkipped;\n  var enableBorder = enableBorderRadius || isObject(value);\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  var bounds = getBarBounds(bar);\n  var width = bounds.right - bounds.left;\n  var height = bounds.bottom - bounds.top;\n  var border = parseBorderWidth(bar, width / 2, height / 2);\n  var radius = parseBorderRadius(bar, width / 2, height / 2);\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius: 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  var skipX = x === null;\n  var skipY = y === null;\n  var skipBoth = skipX && skipY;\n  var bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n  return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount) {\n  var refRect = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var x = rect.x !== refRect.x ? -amount : 0;\n  var y = rect.y !== refRect.y ? -amount : 0;\n  var w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  var 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\nvar BarElement = /*#__PURE__*/function (_Element5) {\n  _inherits(BarElement, _Element5);\n\n  var _super15 = _createSuper(BarElement);\n\n  function BarElement(cfg) {\n    var _this26;\n\n    _classCallCheck(this, BarElement);\n\n    _this26 = _super15.call(this);\n    _this26.options = undefined;\n    _this26.horizontal = undefined;\n    _this26.base = undefined;\n    _this26.width = undefined;\n    _this26.height = undefined;\n    _this26.inflateAmount = undefined;\n\n    if (cfg) {\n      Object.assign(_assertThisInitialized(_this26), cfg);\n    }\n\n    return _this26;\n  }\n\n  _createClass(BarElement, [{\n    key: \"draw\",\n    value: function draw(ctx) {\n      var inflateAmount = this.inflateAmount,\n          _this$options14 = this.options,\n          borderColor = _this$options14.borderColor,\n          backgroundColor = _this$options14.backgroundColor;\n\n      var _boundingRects = boundingRects(this),\n          inner = _boundingRects.inner,\n          outer = _boundingRects.outer;\n\n      var addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\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      ctx.restore();\n    }\n  }, {\n    key: \"inRange\",\n    value: function inRange(mouseX, mouseY, useFinalPosition) {\n      return _inRange(this, mouseX, mouseY, useFinalPosition);\n    }\n  }, {\n    key: \"inXRange\",\n    value: function inXRange(mouseX, useFinalPosition) {\n      return _inRange(this, mouseX, null, useFinalPosition);\n    }\n  }, {\n    key: \"inYRange\",\n    value: function inYRange(mouseY, useFinalPosition) {\n      return _inRange(this, null, mouseY, useFinalPosition);\n    }\n  }, {\n    key: \"getCenterPoint\",\n    value: function getCenterPoint(useFinalPosition) {\n      var _this$getProps6 = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition),\n          x = _this$getProps6.x,\n          y = _this$getProps6.y,\n          base = _this$getProps6.base,\n          horizontal = _this$getProps6.horizontal;\n\n      return {\n        x: horizontal ? (x + base) / 2 : x,\n        y: horizontal ? y : (y + base) / 2\n      };\n    }\n  }, {\n    key: \"getRange\",\n    value: function getRange(axis) {\n      return axis === 'x' ? this.width / 2 : this.height / 2;\n    }\n  }]);\n\n  return BarElement;\n}(Element);\n\nBarElement.id = 'bar';\nBarElement.defaults = {\n  borderSkipped: 'start',\n  borderWidth: 0,\n  borderRadius: 0,\n  inflateAmount: 'auto',\n  pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\nvar elements = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  ArcElement: ArcElement,\n  BarElement: BarElement,\n  LineElement: LineElement,\n  PointElement: PointElement\n});\nvar BORDER_COLORS = ['rgb(54, 162, 235)', 'rgb(255, 99, 132)', 'rgb(255, 159, 64)', 'rgb(255, 205, 86)', 'rgb(75, 192, 192)', 'rgb(153, 102, 255)', 'rgb(201, 203, 207)' // grey\n]; // Border colors with 50% transparency\n\nvar BACKGROUND_COLORS = /* #__PURE__ */BORDER_COLORS.map(function (color) {\n  return color.replace('rgb(', 'rgba(').replace(')', ', 0.5)');\n});\n\nfunction getBorderColor(i) {\n  return BORDER_COLORS[i % BORDER_COLORS.length];\n}\n\nfunction getBackgroundColor(i) {\n  return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\n\nfunction colorizeDefaultDataset(dataset, i) {\n  dataset.borderColor = getBorderColor(i);\n  dataset.backgroundColor = getBackgroundColor(i);\n  return ++i;\n}\n\nfunction colorizeDoughnutDataset(dataset, i) {\n  dataset.backgroundColor = dataset.data.map(function () {\n    return getBorderColor(i++);\n  });\n  return i;\n}\n\nfunction colorizePolarAreaDataset(dataset, i) {\n  dataset.backgroundColor = dataset.data.map(function () {\n    return getBackgroundColor(i++);\n  });\n  return i;\n}\n\nfunction getColorizer(chart) {\n  var i = 0;\n  return function (dataset, datasetIndex) {\n    var 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(descriptors) {\n  var k;\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(descriptor) {\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\nvar plugin_colors = {\n  id: 'colors',\n  defaults: {\n    enabled: true,\n    forceOverride: false\n  },\n  beforeLayout: function beforeLayout(chart, _args, options) {\n    if (!options.enabled) {\n      return;\n    }\n\n    var _chart$config = chart.config,\n        datasets = _chart$config.data.datasets,\n        chartOptions = _chart$config.options;\n    var elements = chartOptions.elements;\n    var containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n\n    if (!options.forceOverride && containsColorDefenition) {\n      return;\n    }\n\n    var colorizer = getColorizer(chart);\n    datasets.forEach(colorizer);\n  }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  var samples = options.samples || availableWidth;\n\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n\n  var decimated = [];\n  var bucketWidth = (count - 2) / (samples - 2);\n  var sampledIndex = 0;\n  var endIndex = start + count - 1;\n  var a = start;\n  var i, maxAreaPoint, maxArea, area, nextA;\n  decimated[sampledIndex++] = data[a];\n\n  for (i = 0; i < samples - 2; i++) {\n    var avgX = 0;\n    var avgY = 0;\n    var j = void 0;\n    var avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    var avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    var 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    var rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    var rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    var _data$a = data[a],\n        pointAx = _data$a.x,\n        pointAy = _data$a.y;\n    maxArea = area = -1;\n\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\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  decimated[sampledIndex++] = data[endIndex];\n  return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  var avgX = 0;\n  var countX = 0;\n  var i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  var decimated = [];\n  var endIndex = start + count - 1;\n  var xMin = data[start].x;\n  var xMax = data[endIndex].x;\n  var 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    var truncX = x | 0;\n\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      var lastIndex = i - 1;\n\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        var intermediateIndex1 = Math.min(minIndex, maxIndex);\n        var intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push(_objectSpread(_objectSpread({}, data[intermediateIndex1]), {}, {\n            x: avgX\n          }));\n        }\n\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push(_objectSpread(_objectSpread({}, data[intermediateIndex2]), {}, {\n            x: avgX\n          }));\n        }\n      }\n\n      if (i > 0 && lastIndex !== startIndex) {\n        decimated.push(data[lastIndex]);\n      }\n\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    var 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(function (dataset) {\n    cleanDecimatedDataset(dataset);\n  });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  var pointCount = points.length;\n  var start = 0;\n  var count;\n  var iScale = meta.iScale;\n\n  var _iScale$getUserBounds = iScale.getUserBounds(),\n      min = _iScale$getUserBounds.min,\n      max = _iScale$getUserBounds.max,\n      minDefined = _iScale$getUserBounds.minDefined,\n      maxDefined = _iScale$getUserBounds.maxDefined;\n\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\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 {\n    start: start,\n    count: count\n  };\n}\n\nvar plugin_decimation = {\n  id: 'decimation',\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false\n  },\n  beforeElementsUpdate: function beforeElementsUpdate(chart, args, options) {\n    if (!options.enabled) {\n      cleanDecimatedData(chart);\n      return;\n    }\n\n    var availableWidth = chart.width;\n    chart.data.datasets.forEach(function (dataset, datasetIndex) {\n      var _data = dataset._data,\n          indexAxis = dataset.indexAxis;\n      var meta = chart.getDatasetMeta(datasetIndex);\n      var data = _data || dataset.data;\n\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        return;\n      }\n\n      if (!meta.controller.supportsDecimation) {\n        return;\n      }\n\n      var xAxis = chart.scales[meta.xAxisID];\n\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        return;\n      }\n\n      if (chart.options.parsing) {\n        return;\n      }\n\n      var _getStartAndCountOfVi3 = getStartAndCountOfVisiblePointsSimplified(meta, data),\n          start = _getStartAndCountOfVi3.start,\n          count = _getStartAndCountOfVi3.count;\n\n      var threshold = options.threshold || 4 * availableWidth;\n\n      if (count <= threshold) {\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n\n      if (isNullOrUndef(_data)) {\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function get() {\n            return this._decimated;\n          },\n          set: function set(d) {\n            this._data = d;\n          }\n        });\n      }\n\n      var decimated;\n\n      switch (options.algorithm) {\n        case 'lttb':\n          decimated = lttbDecimation(data, start, count, availableWidth, options);\n          break;\n\n        case 'min-max':\n          decimated = minMaxDecimation(data, start, count, availableWidth);\n          break;\n\n        default:\n          throw new Error(\"Unsupported decimation algorithm '\".concat(options.algorithm, \"'\"));\n      }\n\n      dataset._decimated = decimated;\n    });\n  },\n  destroy: function destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n\nfunction _segments(line, target, property) {\n  var segments = line.segments;\n  var points = line.points;\n  var tpoints = target.points;\n  var parts = [];\n\n  var _iterator18 = _createForOfIteratorHelper(segments),\n      _step18;\n\n  try {\n    for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n      var segment = _step18.value;\n      var start = segment.start,\n          end = segment.end;\n      end = _findSegmentEnd(start, end, points);\n\n      var bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n      if (!target.segments) {\n        parts.push({\n          source: segment,\n          target: bounds,\n          start: points[start],\n          end: points[end]\n        });\n        continue;\n      }\n\n      var targetSegments = _boundSegments(target, bounds);\n\n      var _iterator19 = _createForOfIteratorHelper(targetSegments),\n          _step19;\n\n      try {\n        for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n          var tgt = _step19.value;\n\n          var subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n\n          var fillSources = _boundSegment(segment, points, subBounds);\n\n          var _iterator20 = _createForOfIteratorHelper(fillSources),\n              _step20;\n\n          try {\n            for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\n              var fillSource = _step20.value;\n              parts.push({\n                source: fillSource,\n                target: tgt,\n                start: _defineProperty({}, property, _getEdge(bounds, subBounds, 'start', Math.max)),\n                end: _defineProperty({}, property, _getEdge(bounds, subBounds, 'end', Math.min))\n              });\n            }\n          } catch (err) {\n            _iterator20.e(err);\n          } finally {\n            _iterator20.f();\n          }\n        }\n      } catch (err) {\n        _iterator19.e(err);\n      } finally {\n        _iterator19.f();\n      }\n    }\n  } catch (err) {\n    _iterator18.e(err);\n  } finally {\n    _iterator18.f();\n  }\n\n  return parts;\n}\n\nfunction _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n\n  var start = first[property];\n  var end = last[property];\n\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n\n  return {\n    property: property,\n    start: start,\n    end: end\n  };\n}\n\nfunction _pointsFromSegments(boundary, line) {\n  var _ref12 = boundary || {},\n      _ref12$x = _ref12.x,\n      x = _ref12$x === void 0 ? null : _ref12$x,\n      _ref12$y = _ref12.y,\n      y = _ref12$y === void 0 ? null : _ref12$y;\n\n  var linePoints = line.points;\n  var points = [];\n  line.segments.forEach(function (_ref13) {\n    var start = _ref13.start,\n        end = _ref13.end;\n    end = _findSegmentEnd(start, end, linePoints);\n    var first = linePoints[start];\n    var last = linePoints[end];\n\n    if (y !== null) {\n      points.push({\n        x: first.x,\n        y: y\n      });\n      points.push({\n        x: last.x,\n        y: y\n      });\n    } else if (x !== null) {\n      points.push({\n        x: x,\n        y: first.y\n      });\n      points.push({\n        x: x,\n        y: last.y\n      });\n    }\n  });\n  return points;\n}\n\nfunction _findSegmentEnd(start, end, points) {\n  for (; end > start; end--) {\n    var point = points[end];\n\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\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\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n  var points = [];\n  var _loop = false;\n\n  if (isArray(boundary)) {\n    _loop = true;\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n\n  return points.length ? new LineElement({\n    points: points,\n    options: {\n      tension: 0\n    },\n    _loop: _loop,\n    _fullLoop: _loop\n  }) : null;\n}\n\nfunction _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n  var source = sources[index];\n  var fill = source.fill;\n  var visited = [index];\n  var target;\n\n  if (!propagate) {\n    return fill;\n  }\n\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isNumberFinite(fill)) {\n      return fill;\n    }\n\n    target = sources[fill];\n\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\nfunction _decodeFill(line, index, count) {\n  var fill = parseFillOption(line);\n\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n\n  var target = parseFloat(fill);\n\n  if (isNumberFinite(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\nfunction _getTargetPixel(fill, scale) {\n  var pixel = null;\n\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n\n  return pixel;\n}\n\nfunction _getTargetValue(fill, scale, startValue) {\n  var 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    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n\n  return value;\n}\n\nfunction parseFillOption(line) {\n  var options = line.options;\n  var fillOption = options.fill;\n  var 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\n  return fill;\n}\n\nfunction _buildStackLine(source) {\n  var scale = source.scale,\n      index = source.index,\n      line = source.line;\n  var points = [];\n  var segments = line.segments;\n  var sourcePoints = line.points;\n  var linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({\n    x: null,\n    y: scale.bottom\n  }, line));\n\n  for (var i = 0; i < segments.length; i++) {\n    var segment = segments[i];\n\n    for (var j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n\n  return new LineElement({\n    points: points,\n    options: {}\n  });\n}\n\nfunction getLinesBelow(scale, index) {\n  var below = [];\n  var metas = scale.getMatchingVisibleMetas('line');\n\n  for (var i = 0; i < metas.length; i++) {\n    var meta = metas[i];\n\n    if (meta.index === index) {\n      break;\n    }\n\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n\n  return below;\n}\n\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  var postponed = [];\n\n  for (var j = 0; j < linesBelow.length; j++) {\n    var line = linesBelow[j];\n\n    var _findPoint = findPoint(line, sourcePoint, 'x'),\n        first = _findPoint.first,\n        last = _findPoint.last,\n        point = _findPoint.point;\n\n    if (!point || first && last) {\n      continue;\n    }\n\n    if (first) {\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n\n      if (!last) {\n        break;\n      }\n    }\n  }\n\n  points.push.apply(points, postponed);\n}\n\nfunction findPoint(line, sourcePoint, property) {\n  var point = line.interpolate(sourcePoint, property);\n\n  if (!point) {\n    return {};\n  }\n\n  var pointValue = point[property];\n  var segments = line.segments;\n  var linePoints = line.points;\n  var first = false;\n  var last = false;\n\n  for (var i = 0; i < segments.length; i++) {\n    var segment = segments[i];\n    var firstValue = linePoints[segment.start][property];\n    var lastValue = linePoints[segment.end][property];\n\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n\n  return {\n    first: first,\n    last: last,\n    point: point\n  };\n}\n\nvar simpleArc = /*#__PURE__*/function () {\n  function simpleArc(opts) {\n    _classCallCheck(this, simpleArc);\n\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n\n  _createClass(simpleArc, [{\n    key: \"pathSegment\",\n    value: function pathSegment(ctx, bounds, opts) {\n      var x = this.x,\n          y = this.y,\n          radius = this.radius;\n      bounds = bounds || {\n        start: 0,\n        end: TAU\n      };\n      ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n      return !opts.bounds;\n    }\n  }, {\n    key: \"interpolate\",\n    value: function interpolate(point) {\n      var x = this.x,\n          y = this.y,\n          radius = this.radius;\n      var angle = point.angle;\n      return {\n        x: x + Math.cos(angle) * radius,\n        y: y + Math.sin(angle) * radius,\n        angle: angle\n      };\n    }\n  }]);\n\n  return simpleArc;\n}();\n\nfunction _getTarget(source) {\n  var chart = source.chart,\n      fill = source.fill,\n      line = source.line;\n\n  if (isNumberFinite(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  var boundary = computeBoundary(source);\n\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n\n  return _createBoundaryLine(boundary, line);\n}\n\nfunction getLineByIndex(chart, index) {\n  var meta = chart.getDatasetMeta(index);\n  var visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n  var scale = source.scale || {};\n\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n\n  return computeLinearBoundary(source);\n}\n\nfunction computeLinearBoundary(source) {\n  var _source$scale = source.scale,\n      scale = _source$scale === void 0 ? {} : _source$scale,\n      fill = source.fill;\n\n  var pixel = _getTargetPixel(fill, scale);\n\n  if (isNumberFinite(pixel)) {\n    var horizontal = scale.isHorizontal();\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n\n  return null;\n}\n\nfunction computeCircularBoundary(source) {\n  var scale = source.scale,\n      fill = source.fill;\n  var options = scale.options;\n  var length = scale.getLabels().length;\n  var start = options.reverse ? scale.max : scale.min;\n\n  var value = _getTargetValue(fill, scale, start);\n\n  var target = [];\n\n  if (options.grid.circular) {\n    var 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 (var i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n\n  return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n  var target = _getTarget(source);\n\n  var line = source.line,\n      scale = source.scale,\n      axis = source.axis;\n  var lineOpts = line.options;\n  var fillOption = lineOpts.fill;\n  var color = lineOpts.backgroundColor;\n\n  var _ref14 = fillOption || {},\n      _ref14$above = _ref14.above,\n      above = _ref14$above === void 0 ? color : _ref14$above,\n      _ref14$below = _ref14.below,\n      below = _ref14$below === void 0 ? color : _ref14$below;\n\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {\n      line: line,\n      target: target,\n      above: above,\n      below: below,\n      area: area,\n      scale: scale,\n      axis: axis\n    });\n    unclipArea(ctx);\n  }\n}\n\nfunction doFill(ctx, cfg) {\n  var line = cfg.line,\n      target = cfg.target,\n      above = cfg.above,\n      below = cfg.below,\n      area = cfg.area,\n      scale = cfg.scale;\n  var property = line._loop ? 'angle' : cfg.axis;\n  ctx.save();\n\n  if (property === 'x' && below !== above) {\n    clipVertical(ctx, target, area.top);\n    fill(ctx, {\n      line: line,\n      target: target,\n      color: above,\n      scale: scale,\n      property: property\n    });\n    ctx.restore();\n    ctx.save();\n    clipVertical(ctx, target, area.bottom);\n  }\n\n  fill(ctx, {\n    line: line,\n    target: target,\n    color: below,\n    scale: scale,\n    property: property\n  });\n  ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n  var segments = target.segments,\n      points = target.points;\n  var first = true;\n  var lineLoop = false;\n  ctx.beginPath();\n\n  var _iterator21 = _createForOfIteratorHelper(segments),\n      _step21;\n\n  try {\n    for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n      var segment = _step21.value;\n      var start = segment.start,\n          end = segment.end;\n      var firstPoint = points[start];\n\n      var lastPoint = points[_findSegmentEnd(start, end, points)];\n\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\n      lineLoop = !!target.pathSegment(ctx, segment, {\n        move: lineLoop\n      });\n\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        ctx.lineTo(lastPoint.x, clipY);\n      }\n    }\n  } catch (err) {\n    _iterator21.e(err);\n  } finally {\n    _iterator21.f();\n  }\n\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n  var line = cfg.line,\n      target = cfg.target,\n      property = cfg.property,\n      color = cfg.color,\n      scale = cfg.scale;\n\n  var segments = _segments(line, target, property);\n\n  var _iterator22 = _createForOfIteratorHelper(segments),\n      _step22;\n\n  try {\n    for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {\n      var _ref16 = _step22.value;\n      var src = _ref16.source;\n      var tgt = _ref16.target;\n      var start = _ref16.start;\n      var end = _ref16.end;\n      var _src$style = src.style;\n      _src$style = _src$style === void 0 ? {} : _src$style;\n      var _src$style$background = _src$style.backgroundColor,\n          backgroundColor = _src$style$background === void 0 ? color : _src$style$background;\n      var notShape = target !== true;\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n      ctx.beginPath();\n      var lineLoop = !!line.pathSegment(ctx, src);\n      var loop = void 0;\n\n      if (notShape) {\n        if (lineLoop) {\n          ctx.closePath();\n        } else {\n          interpolatedLineTo(ctx, target, end, property);\n        }\n\n        var targetLoop = !!target.pathSegment(ctx, tgt, {\n          move: lineLoop,\n          reverse: true\n        });\n        loop = lineLoop && targetLoop;\n\n        if (!loop) {\n          interpolatedLineTo(ctx, target, start, property);\n        }\n      }\n\n      ctx.closePath();\n      ctx.fill(loop ? 'evenodd' : 'nonzero');\n      ctx.restore();\n    }\n  } catch (err) {\n    _iterator22.e(err);\n  } finally {\n    _iterator22.f();\n  }\n}\n\nfunction clipBounds(ctx, scale, bounds) {\n  var _scale$chart$chartAre = scale.chart.chartArea,\n      top = _scale$chart$chartAre.top,\n      bottom = _scale$chart$chartAre.bottom;\n\n  var _ref17 = bounds || {},\n      property = _ref17.property,\n      start = _ref17.start,\n      end = _ref17.end;\n\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  var interpolatedPoint = target.interpolate(point, property);\n\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\nvar index = {\n  id: 'filler',\n  afterDatasetsUpdate: function afterDatasetsUpdate(chart, _args, options) {\n    var count = (chart.data.datasets || []).length;\n    var sources = [];\n    var 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: chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line: 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\n      if (!source || source.fill === false) {\n        continue;\n      }\n\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n  beforeDraw: function beforeDraw(chart, _args, options) {\n    var draw = options.drawTime === 'beforeDraw';\n    var metasets = chart.getSortedVisibleDatasetMetas();\n    var area = chart.chartArea;\n\n    for (var i = metasets.length - 1; i >= 0; --i) {\n      var source = metasets[i].$filler;\n\n      if (!source) {\n        continue;\n      }\n\n      source.line.updateControlPoints(area, source.axis);\n\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n  beforeDatasetsDraw: function beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n\n    var metasets = chart.getSortedVisibleDatasetMetas();\n\n    for (var i = metasets.length - 1; i >= 0; --i) {\n      var source = metasets[i].$filler;\n\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n  beforeDatasetDraw: function beforeDatasetDraw(chart, args, options) {\n    var 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  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n\nvar getBoxSize = function getBoxSize(labelOpts, fontSize) {\n  var _labelOpts$boxHeight = labelOpts.boxHeight,\n      boxHeight = _labelOpts$boxHeight === void 0 ? fontSize : _labelOpts$boxHeight,\n      _labelOpts$boxWidth = labelOpts.boxWidth,\n      boxWidth = _labelOpts$boxWidth === void 0 ? fontSize : _labelOpts$boxWidth;\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: boxWidth,\n    boxHeight: boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\n\nvar itemsEqual = function itemsEqual(a, b) {\n  return a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n};\n\nvar Legend = /*#__PURE__*/function (_Element6) {\n  _inherits(Legend, _Element6);\n\n  var _super16 = _createSuper(Legend);\n\n  function Legend(config) {\n    var _this27;\n\n    _classCallCheck(this, Legend);\n\n    _this27 = _super16.call(this);\n    _this27._added = false;\n    _this27.legendHitBoxes = [];\n    _this27._hoveredItem = null;\n    _this27.doughnutMode = false;\n    _this27.chart = config.chart;\n    _this27.options = config.options;\n    _this27.ctx = config.ctx;\n    _this27.legendItems = undefined;\n    _this27.columnSizes = undefined;\n    _this27.lineWidths = undefined;\n    _this27.maxHeight = undefined;\n    _this27.maxWidth = undefined;\n    _this27.top = undefined;\n    _this27.bottom = undefined;\n    _this27.left = undefined;\n    _this27.right = undefined;\n    _this27.height = undefined;\n    _this27.width = undefined;\n    _this27._margins = undefined;\n    _this27.position = undefined;\n    _this27.weight = undefined;\n    _this27.fullSize = undefined;\n    return _this27;\n  }\n\n  _createClass(Legend, [{\n    key: \"update\",\n    value: function update(maxWidth, maxHeight, margins) {\n      this.maxWidth = maxWidth;\n      this.maxHeight = maxHeight;\n      this._margins = margins;\n      this.setDimensions();\n      this.buildLabels();\n      this.fit();\n    }\n  }, {\n    key: \"setDimensions\",\n    value: function 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    key: \"buildLabels\",\n    value: function buildLabels() {\n      var _this28 = this;\n\n      var labelOpts = this.options.labels || {};\n      var legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n\n      if (labelOpts.filter) {\n        legendItems = legendItems.filter(function (item) {\n          return labelOpts.filter(item, _this28.chart.data);\n        });\n      }\n\n      if (labelOpts.sort) {\n        legendItems = legendItems.sort(function (a, b) {\n          return labelOpts.sort(a, b, _this28.chart.data);\n        });\n      }\n\n      if (this.options.reverse) {\n        legendItems.reverse();\n      }\n\n      this.legendItems = legendItems;\n    }\n  }, {\n    key: \"fit\",\n    value: function fit() {\n      var options = this.options,\n          ctx = this.ctx;\n\n      if (!options.display) {\n        this.width = this.height = 0;\n        return;\n      }\n\n      var labelOpts = options.labels;\n      var labelFont = toFont(labelOpts.font);\n      var fontSize = labelFont.size;\n\n      var titleHeight = this._computeTitleHeight();\n\n      var _getBoxSize = getBoxSize(labelOpts, fontSize),\n          boxWidth = _getBoxSize.boxWidth,\n          itemHeight = _getBoxSize.itemHeight;\n\n      var width, height;\n      ctx.font = labelFont.string;\n\n      if (this.isHorizontal()) {\n        width = this.maxWidth;\n        height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n      } else {\n        height = this.maxHeight;\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    key: \"_fitRows\",\n    value: function _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n      var ctx = this.ctx,\n          maxWidth = this.maxWidth,\n          padding = this.options.labels.padding;\n      var hitboxes = this.legendHitBoxes = [];\n      var lineWidths = this.lineWidths = [0];\n      var lineHeight = itemHeight + padding;\n      var totalHeight = titleHeight;\n      ctx.textAlign = 'left';\n      ctx.textBaseline = 'middle';\n      var row = -1;\n      var top = -lineHeight;\n      this.legendItems.forEach(function (legendItem, i) {\n        var 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] = {\n          left: 0,\n          top: top,\n          row: row,\n          width: itemWidth,\n          height: itemHeight\n        };\n        lineWidths[lineWidths.length - 1] += itemWidth + padding;\n      });\n      return totalHeight;\n    }\n  }, {\n    key: \"_fitCols\",\n    value: function _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n      var ctx = this.ctx,\n          maxHeight = this.maxHeight,\n          padding = this.options.labels.padding;\n      var hitboxes = this.legendHitBoxes = [];\n      var columnSizes = this.columnSizes = [];\n      var heightLimit = maxHeight - titleHeight;\n      var totalWidth = padding;\n      var currentColWidth = 0;\n      var currentColHeight = 0;\n      var left = 0;\n      var col = 0;\n      this.legendItems.forEach(function (legendItem, i) {\n        var _calculateItemSize = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight),\n            itemWidth = _calculateItemSize.itemWidth,\n            itemHeight = _calculateItemSize.itemHeight;\n\n        if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n          totalWidth += currentColWidth + padding;\n          columnSizes.push({\n            width: currentColWidth,\n            height: currentColHeight\n          });\n          left += currentColWidth + padding;\n          col++;\n          currentColWidth = currentColHeight = 0;\n        }\n\n        hitboxes[i] = {\n          left: left,\n          top: currentColHeight,\n          col: col,\n          width: itemWidth,\n          height: itemHeight\n        };\n        currentColWidth = Math.max(currentColWidth, itemWidth);\n        currentColHeight += itemHeight + padding;\n      });\n      totalWidth += currentColWidth;\n      columnSizes.push({\n        width: currentColWidth,\n        height: currentColHeight\n      });\n      return totalWidth;\n    }\n  }, {\n    key: \"adjustHitBoxes\",\n    value: function adjustHitBoxes() {\n      if (!this.options.display) {\n        return;\n      }\n\n      var titleHeight = this._computeTitleHeight();\n\n      var hitboxes = this.legendHitBoxes,\n          _this$options15 = this.options,\n          align = _this$options15.align,\n          padding = _this$options15.labels.padding,\n          rtl = _this$options15.rtl;\n      var rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n\n      if (this.isHorizontal()) {\n        var row = 0;\n\n        var left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n\n        var _iterator23 = _createForOfIteratorHelper(hitboxes),\n            _step23;\n\n        try {\n          for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {\n            var hitbox = _step23.value;\n\n            if (row !== hitbox.row) {\n              row = hitbox.row;\n              left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n            }\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        } catch (err) {\n          _iterator23.e(err);\n        } finally {\n          _iterator23.f();\n        }\n      } else {\n        var col = 0;\n\n        var top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n\n        var _iterator24 = _createForOfIteratorHelper(hitboxes),\n            _step24;\n\n        try {\n          for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {\n            var _hitbox = _step24.value;\n\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\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        } catch (err) {\n          _iterator24.e(err);\n        } finally {\n          _iterator24.f();\n        }\n      }\n    }\n  }, {\n    key: \"isHorizontal\",\n    value: function isHorizontal() {\n      return this.options.position === 'top' || this.options.position === 'bottom';\n    }\n  }, {\n    key: \"draw\",\n    value: function draw() {\n      if (this.options.display) {\n        var ctx = this.ctx;\n        clipArea(ctx, this);\n\n        this._draw();\n\n        unclipArea(ctx);\n      }\n    }\n  }, {\n    key: \"_draw\",\n    value: function _draw() {\n      var _this29 = this;\n\n      var opts = this.options,\n          columnSizes = this.columnSizes,\n          lineWidths = this.lineWidths,\n          ctx = this.ctx;\n      var align = opts.align,\n          labelOpts = opts.labels;\n      var defaultColor = defaults.color;\n      var rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n      var labelFont = toFont(labelOpts.font);\n      var padding = labelOpts.padding;\n      var fontSize = labelFont.size;\n      var halfFontSize = fontSize / 2;\n      var cursor;\n      this.drawTitle();\n      ctx.textAlign = rtlHelper.textAlign('left');\n      ctx.textBaseline = 'middle';\n      ctx.lineWidth = 0.5;\n      ctx.font = labelFont.string;\n\n      var _getBoxSize2 = getBoxSize(labelOpts, fontSize),\n          boxWidth = _getBoxSize2.boxWidth,\n          boxHeight = _getBoxSize2.boxHeight,\n          itemHeight = _getBoxSize2.itemHeight;\n\n      var drawLegendBox = function drawLegendBox(x, y, legendItem) {\n        if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n          return;\n        }\n\n        ctx.save();\n        var 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        ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n        if (labelOpts.usePointStyle) {\n          var drawOptions = {\n            radius: boxHeight * Math.SQRT2 / 2,\n            pointStyle: legendItem.pointStyle,\n            rotation: legendItem.rotation,\n            borderWidth: lineWidth\n          };\n          var centerX = rtlHelper.xPlus(x, boxWidth / 2);\n          var centerY = y + halfFontSize;\n          drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n        } else {\n          var yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n          var xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n          var borderRadius = toTRBLCorners(legendItem.borderRadius);\n          ctx.beginPath();\n\n          if (Object.values(borderRadius).some(function (v) {\n            return v !== 0;\n          })) {\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\n          if (lineWidth !== 0) {\n            ctx.stroke();\n          }\n        }\n\n        ctx.restore();\n      };\n\n      var fillText = function fillText(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      var isHorizontal = this.isHorizontal();\n\n      var titleHeight = this._computeTitleHeight();\n\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      var lineHeight = itemHeight + padding;\n      this.legendItems.forEach(function (legendItem, i) {\n        ctx.strokeStyle = legendItem.fontColor;\n        ctx.fillStyle = legendItem.fontColor;\n        var textWidth = ctx.measureText(legendItem.text).width;\n        var textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n        var width = boxWidth + halfFontSize + textWidth;\n        var x = cursor.x;\n        var y = cursor.y;\n        rtlHelper.setWidth(_this29.width);\n\n        if (isHorizontal) {\n          if (i > 0 && x + width + padding > _this29.right) {\n            y = cursor.y += lineHeight;\n            cursor.line++;\n            x = cursor.x = _alignStartEnd(align, _this29.left + padding, _this29.right - lineWidths[cursor.line]);\n          }\n        } else if (i > 0 && y + lineHeight > _this29.bottom) {\n          x = cursor.x = x + columnSizes[cursor.line].width + padding;\n          cursor.line++;\n          y = cursor.y = _alignStartEnd(align, _this29.top + titleHeight + padding, _this29.bottom - columnSizes[cursor.line].height);\n        }\n\n        var realX = rtlHelper.x(x);\n        drawLegendBox(realX, y, legendItem);\n        x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : _this29.right, opts.rtl);\n        fillText(rtlHelper.x(x), y, legendItem);\n\n        if (isHorizontal) {\n          cursor.x += width + padding;\n        } else if (typeof legendItem.text !== 'string') {\n          var fontLineHeight = labelFont.lineHeight;\n          cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n        } else {\n          cursor.y += lineHeight;\n        }\n      });\n      restoreTextDirection(this.ctx, opts.textDirection);\n    }\n  }, {\n    key: \"drawTitle\",\n    value: function drawTitle() {\n      var opts = this.options;\n      var titleOpts = opts.title;\n      var titleFont = toFont(titleOpts.font);\n      var titlePadding = toPadding(titleOpts.padding);\n\n      if (!titleOpts.display) {\n        return;\n      }\n\n      var rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n      var ctx = this.ctx;\n      var position = titleOpts.position;\n      var halfFontSize = titleFont.size / 2;\n      var topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n      var y;\n      var left = this.left;\n      var maxWidth = this.width;\n\n      if (this.isHorizontal()) {\n        maxWidth = Math.max.apply(Math, _toConsumableArray(this.lineWidths));\n        y = this.top + topPaddingPlusHalfFontSize;\n        left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n      } else {\n        var maxHeight = this.columnSizes.reduce(function (acc, size) {\n          return Math.max(acc, size.height);\n        }, 0);\n        y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n      }\n\n      var x = _alignStartEnd(position, left, left + maxWidth);\n\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      renderText(ctx, titleOpts.text, x, y, titleFont);\n    }\n  }, {\n    key: \"_computeTitleHeight\",\n    value: function _computeTitleHeight() {\n      var titleOpts = this.options.title;\n      var titleFont = toFont(titleOpts.font);\n      var titlePadding = toPadding(titleOpts.padding);\n      return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n    }\n  }, {\n    key: \"_getLegendItemAt\",\n    value: function _getLegendItemAt(x, y) {\n      var i, hitBox, lh;\n\n      if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n        lh = this.legendHitBoxes;\n\n        for (i = 0; i < lh.length; ++i) {\n          hitBox = lh[i];\n\n          if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n            return this.legendItems[i];\n          }\n        }\n      }\n\n      return null;\n    }\n  }, {\n    key: \"handleEvent\",\n    value: function handleEvent(e) {\n      var opts = this.options;\n\n      if (!isListened(e.type, opts)) {\n        return;\n      }\n\n      var hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n      if (e.type === 'mousemove' || e.type === 'mouseout') {\n        var previous = this._hoveredItem;\n        var sameItem = itemsEqual(previous, hoveredItem);\n\n        if (previous && !sameItem) {\n          callback(opts.onLeave, [e, previous, this], this);\n        }\n\n        this._hoveredItem = hoveredItem;\n\n        if (hoveredItem && !sameItem) {\n          callback(opts.onHover, [e, hoveredItem, this], this);\n        }\n      } else if (hoveredItem) {\n        callback(opts.onClick, [e, hoveredItem, this], this);\n      }\n    }\n  }]);\n\n  return Legend;\n}(Element);\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n  var itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n  var itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n  return {\n    itemWidth: itemWidth,\n    itemHeight: itemHeight\n  };\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n  var legendItemText = legendItem.text;\n\n  if (legendItemText && typeof legendItemText !== 'string') {\n    legendItemText = legendItemText.reduce(function (a, b) {\n      return a.length > b.length ? a : b;\n    });\n  }\n\n  return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n  var itemHeight = _itemHeight;\n\n  if (typeof legendItem.text !== 'string') {\n    itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n  }\n\n  return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n  var 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\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n\n  return false;\n}\n\nvar plugin_legend = {\n  id: 'legend',\n  _element: Legend,\n  start: function start(chart, _args, options) {\n    var legend = chart.legend = new Legend({\n      ctx: chart.ctx,\n      options: options,\n      chart: chart\n    });\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n  stop: function stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n  beforeUpdate: function beforeUpdate(chart, _args, options) {\n    var legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n  afterUpdate: function afterUpdate(chart) {\n    var legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n  afterEvent: function afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n    onClick: function onClick(e, legendItem, legend) {\n      var index = legendItem.datasetIndex;\n      var ci = legend.chart;\n\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    onHover: null,\n    onLeave: null,\n    labels: {\n      color: function color(ctx) {\n        return ctx.chart.options.color;\n      },\n      boxWidth: 40,\n      padding: 10,\n      generateLabels: function generateLabels(chart) {\n        var datasets = chart.data.datasets;\n        var _chart$legend$options = chart.legend.options.labels,\n            usePointStyle = _chart$legend$options.usePointStyle,\n            pointStyle = _chart$legend$options.pointStyle,\n            textAlign = _chart$legend$options.textAlign,\n            color = _chart$legend$options.color,\n            useBorderRadius = _chart$legend$options.useBorderRadius,\n            borderRadius = _chart$legend$options.borderRadius;\n        return chart._getSortedDatasetMetas().map(function (meta) {\n          var style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          var borderWidth = toPadding(style.borderWidth);\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            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n    title: {\n      color: function color(ctx) {\n        return ctx.chart.options.color;\n      },\n      display: false,\n      position: 'center',\n      text: ''\n    }\n  },\n  descriptors: {\n    _scriptable: function _scriptable(name) {\n      return !name.startsWith('on');\n    },\n    labels: {\n      _scriptable: function _scriptable(name) {\n        return !['generateLabels', 'filter', 'sort'].includes(name);\n      }\n    }\n  }\n};\n\nvar Title = /*#__PURE__*/function (_Element7) {\n  _inherits(Title, _Element7);\n\n  var _super17 = _createSuper(Title);\n\n  function Title(config) {\n    var _this30;\n\n    _classCallCheck(this, Title);\n\n    _this30 = _super17.call(this);\n    _this30.chart = config.chart;\n    _this30.options = config.options;\n    _this30.ctx = config.ctx;\n    _this30._padding = undefined;\n    _this30.top = undefined;\n    _this30.bottom = undefined;\n    _this30.left = undefined;\n    _this30.right = undefined;\n    _this30.width = undefined;\n    _this30.height = undefined;\n    _this30.position = undefined;\n    _this30.weight = undefined;\n    _this30.fullSize = undefined;\n    return _this30;\n  }\n\n  _createClass(Title, [{\n    key: \"update\",\n    value: function update(maxWidth, maxHeight) {\n      var opts = this.options;\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      var lineCount = isArray(opts.text) ? opts.text.length : 1;\n      this._padding = toPadding(opts.padding);\n\n      var 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    key: \"isHorizontal\",\n    value: function isHorizontal() {\n      var pos = this.options.position;\n      return pos === 'top' || pos === 'bottom';\n    }\n  }, {\n    key: \"_drawArgs\",\n    value: function _drawArgs(offset) {\n      var top = this.top,\n          left = this.left,\n          bottom = this.bottom,\n          right = this.right,\n          options = this.options;\n      var align = options.align;\n      var rotation = 0;\n      var 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\n        maxWidth = bottom - top;\n      }\n\n      return {\n        titleX: titleX,\n        titleY: titleY,\n        maxWidth: maxWidth,\n        rotation: rotation\n      };\n    }\n  }, {\n    key: \"draw\",\n    value: function draw() {\n      var ctx = this.ctx;\n      var opts = this.options;\n\n      if (!opts.display) {\n        return;\n      }\n\n      var fontOpts = toFont(opts.font);\n      var lineHeight = fontOpts.lineHeight;\n      var offset = lineHeight / 2 + this._padding.top;\n\n      var _this$_drawArgs = this._drawArgs(offset),\n          titleX = _this$_drawArgs.titleX,\n          titleY = _this$_drawArgs.titleY,\n          maxWidth = _this$_drawArgs.maxWidth,\n          rotation = _this$_drawArgs.rotation;\n\n      renderText(ctx, opts.text, 0, 0, fontOpts, {\n        color: opts.color,\n        maxWidth: maxWidth,\n        rotation: rotation,\n        textAlign: _toLeftRightCenter(opts.align),\n        textBaseline: 'middle',\n        translation: [titleX, titleY]\n      });\n    }\n  }]);\n\n  return Title;\n}(Element);\n\nfunction createTitle(chart, titleOpts) {\n  var title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart: chart\n  });\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\n\nvar plugin_title = {\n  id: 'title',\n  _element: Title,\n  start: function start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n  stop: function stop(chart) {\n    var titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n  beforeUpdate: function beforeUpdate(chart, _args, options) {\n    var title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\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\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false\n  }\n};\nvar map = new WeakMap();\nvar plugin_subtitle = {\n  id: 'subtitle',\n  start: function start(chart, _args, options) {\n    var title = new Title({\n      ctx: chart.ctx,\n      options: options,\n      chart: chart\n    });\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n  stop: function stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n  beforeUpdate: function beforeUpdate(chart, _args, options) {\n    var title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\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\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false\n  }\n};\nvar positioners = {\n  average: function average(items) {\n    if (!items.length) {\n      return false;\n    }\n\n    var i, len;\n    var xSet = new Set();\n    var y = 0;\n    var count = 0;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      var el = items[i].element;\n\n      if (el && el.hasValue()) {\n        var pos = el.tooltipPosition();\n        xSet.add(pos.x);\n        y += pos.y;\n        ++count;\n      }\n    }\n\n    if (count === 0 || xSet.size === 0) {\n      return false;\n    }\n\n    var xAverage = _toConsumableArray(xSet).reduce(function (a, b) {\n      return a + b;\n    }) / xSet.size;\n    return {\n      x: xAverage,\n      y: y / count\n    };\n  },\n  nearest: function nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n\n    var x = eventPosition.x;\n    var y = eventPosition.y;\n    var minDistance = Number.POSITIVE_INFINITY;\n    var i, len, nearestElement;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      var el = items[i].element;\n\n      if (el && el.hasValue()) {\n        var center = el.getCenterPoint();\n        var d = distanceBetweenPoints(eventPosition, center);\n\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n\n    if (nearestElement) {\n      var tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n\n    return {\n      x: x,\n      y: y\n    };\n  }\n};\n\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n\n  return base;\n}\n\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n\n  return str;\n}\n\nfunction createTooltipItem(chart, item) {\n  var element = item.element,\n      datasetIndex = item.datasetIndex,\n      index = item.index;\n  var controller = chart.getDatasetMeta(datasetIndex).controller;\n\n  var _controller$getLabelA = controller.getLabelAndValue(index),\n      label = _controller$getLabelA.label,\n      value = _controller$getLabelA.value;\n\n  return {\n    chart: chart,\n    label: 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: datasetIndex,\n    element: element\n  };\n}\n\nfunction getTooltipSize(tooltip, options) {\n  var ctx = tooltip.chart.ctx;\n  var body = tooltip.body,\n      footer = tooltip.footer,\n      title = tooltip.title;\n  var boxWidth = options.boxWidth,\n      boxHeight = options.boxHeight;\n  var bodyFont = toFont(options.bodyFont);\n  var titleFont = toFont(options.titleFont);\n  var footerFont = toFont(options.footerFont);\n  var titleLineCount = title.length;\n  var footerLineCount = footer.length;\n  var bodyLineItemCount = body.length;\n  var padding = toPadding(options.padding);\n  var height = padding.height;\n  var width = 0;\n  var combinedBodyLength = body.reduce(function (count, bodyItem) {\n    return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\n  }, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n  }\n\n  if (combinedBodyLength) {\n    var bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n  }\n\n  if (footerLineCount) {\n    height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n  }\n\n  var widthPadding = 0;\n\n  var maxLineWidth = function maxLineWidth(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n\n  ctx.save();\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n  widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n  each(body, function (bodyItem) {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n  widthPadding = 0;\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n  ctx.restore();\n  width += padding.width;\n  return {\n    width: width,\n    height: height\n  };\n}\n\nfunction determineYAlign(chart, size) {\n  var y = size.y,\n      height = size.height;\n\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > chart.height - height / 2) {\n    return 'bottom';\n  }\n\n  return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  var x = size.x,\n      width = size.width;\n  var caret = options.caretSize + options.caretPadding;\n\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  var x = size.x,\n      width = size.width;\n  var chartWidth = chart.width,\n      _chart$chartArea = chart.chartArea,\n      left = _chart$chartArea.left,\n      right = _chart$chartArea.right;\n  var 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\nfunction determineAlignment(chart, options, size) {\n  var yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign: yAlign\n  };\n}\n\nfunction alignX(size, xAlign) {\n  var x = size.x,\n      width = size.width;\n\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= width / 2;\n  }\n\n  return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n  var y = size.y,\n      height = size.height;\n\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= height / 2;\n  }\n\n  return y;\n}\n\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  var caretSize = options.caretSize,\n      caretPadding = options.caretPadding,\n      cornerRadius = options.cornerRadius;\n  var xAlign = alignment.xAlign,\n      yAlign = alignment.yAlign;\n  var paddingAndSize = caretSize + caretPadding;\n\n  var _toTRBLCorners = toTRBLCorners(cornerRadius),\n      topLeft = _toTRBLCorners.topLeft,\n      topRight = _toTRBLCorners.topRight,\n      bottomLeft = _toTRBLCorners.bottomLeft,\n      bottomRight = _toTRBLCorners.bottomRight;\n\n  var x = alignX(size, xAlign);\n  var 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  var padding = toPadding(options.padding);\n  return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip: tooltip,\n    tooltipItems: tooltipItems,\n    type: 'tooltip'\n  });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n  var override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\n\nvar defaultCallbacks = {\n  beforeTitle: noop,\n  title: function title(tooltipItems) {\n    if (tooltipItems.length > 0) {\n      var item = tooltipItems[0];\n      var labels = item.chart.data.labels;\n      var 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  beforeBody: noop,\n  beforeLabel: noop,\n  label: function label(tooltipItem) {\n    if (this && this.options && this.options.mode === 'dataset') {\n      return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n    }\n\n    var label = tooltipItem.dataset.label || '';\n\n    if (label) {\n      label += ': ';\n    }\n\n    var value = tooltipItem.formattedValue;\n\n    if (!isNullOrUndef(value)) {\n      label += value;\n    }\n\n    return label;\n  },\n  labelColor: function labelColor(tooltipItem) {\n    var meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    var 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: function labelTextColor() {\n    return this.options.bodyColor;\n  },\n  labelPointStyle: function labelPointStyle(tooltipItem) {\n    var meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    var options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      pointStyle: options.pointStyle,\n      rotation: options.rotation\n    };\n  },\n  afterLabel: noop,\n  afterBody: noop,\n  beforeFooter: noop,\n  footer: noop,\n  afterFooter: noop\n};\n\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n  var 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\nvar Tooltip = /*#__PURE__*/function (_Element8) {\n  _inherits(Tooltip, _Element8);\n\n  var _super18 = _createSuper(Tooltip);\n\n  function Tooltip(config) {\n    var _this31;\n\n    _classCallCheck(this, Tooltip);\n\n    _this31 = _super18.call(this);\n    _this31.opacity = 0;\n    _this31._active = [];\n    _this31._eventPosition = undefined;\n    _this31._size = undefined;\n    _this31._cachedAnimations = undefined;\n    _this31._tooltipItems = [];\n    _this31.$animations = undefined;\n    _this31.$context = undefined;\n    _this31.chart = config.chart;\n    _this31.options = config.options;\n    _this31.dataPoints = undefined;\n    _this31.title = undefined;\n    _this31.beforeBody = undefined;\n    _this31.body = undefined;\n    _this31.afterBody = undefined;\n    _this31.footer = undefined;\n    _this31.xAlign = undefined;\n    _this31.yAlign = undefined;\n    _this31.x = undefined;\n    _this31.y = undefined;\n    _this31.height = undefined;\n    _this31.width = undefined;\n    _this31.caretX = undefined;\n    _this31.caretY = undefined;\n    _this31.labelColors = undefined;\n    _this31.labelPointStyles = undefined;\n    _this31.labelTextColors = undefined;\n    return _this31;\n  }\n\n  _createClass(Tooltip, [{\n    key: \"initialize\",\n    value: function initialize(options) {\n      this.options = options;\n      this._cachedAnimations = undefined;\n      this.$context = undefined;\n    }\n  }, {\n    key: \"_resolveAnimations\",\n    value: function _resolveAnimations() {\n      var cached = this._cachedAnimations;\n\n      if (cached) {\n        return cached;\n      }\n\n      var chart = this.chart;\n      var options = this.options.setContext(this.getContext());\n      var opts = options.enabled && chart.options.animation && options.animations;\n      var animations = new Animations(this.chart, opts);\n\n      if (opts._cacheable) {\n        this._cachedAnimations = Object.freeze(animations);\n      }\n\n      return animations;\n    }\n  }, {\n    key: \"getContext\",\n    value: function getContext() {\n      return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n    }\n  }, {\n    key: \"getTitle\",\n    value: function getTitle(context, options) {\n      var callbacks = options.callbacks;\n      var beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n      var title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n      var afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n      var lines = [];\n      lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n      lines = pushOrConcat(lines, splitNewlines(title));\n      lines = pushOrConcat(lines, splitNewlines(afterTitle));\n      return lines;\n    }\n  }, {\n    key: \"getBeforeBody\",\n    value: function getBeforeBody(tooltipItems, options) {\n      return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n    }\n  }, {\n    key: \"getBody\",\n    value: function getBody(tooltipItems, options) {\n      var _this32 = this;\n\n      var callbacks = options.callbacks;\n      var bodyItems = [];\n      each(tooltipItems, function (context) {\n        var bodyItem = {\n          before: [],\n          lines: [],\n          after: []\n        };\n        var scoped = overrideCallbacks(callbacks, context);\n        pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', _this32, context)));\n        pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', _this32, context));\n        pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', _this32, context)));\n        bodyItems.push(bodyItem);\n      });\n      return bodyItems;\n    }\n  }, {\n    key: \"getAfterBody\",\n    value: function getAfterBody(tooltipItems, options) {\n      return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n    }\n  }, {\n    key: \"getFooter\",\n    value: function getFooter(tooltipItems, options) {\n      var callbacks = options.callbacks;\n      var beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n      var footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n      var afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n      var lines = [];\n      lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n      lines = pushOrConcat(lines, splitNewlines(footer));\n      lines = pushOrConcat(lines, splitNewlines(afterFooter));\n      return lines;\n    }\n  }, {\n    key: \"_createItems\",\n    value: function _createItems(options) {\n      var _this33 = this;\n\n      var active = this._active;\n      var data = this.chart.data;\n      var labelColors = [];\n      var labelPointStyles = [];\n      var labelTextColors = [];\n      var tooltipItems = [];\n      var 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 (options.filter) {\n        tooltipItems = tooltipItems.filter(function (element, index, array) {\n          return options.filter(element, index, array, data);\n        });\n      }\n\n      if (options.itemSort) {\n        tooltipItems = tooltipItems.sort(function (a, b) {\n          return options.itemSort(a, b, data);\n        });\n      }\n\n      each(tooltipItems, function (context) {\n        var scoped = overrideCallbacks(options.callbacks, context);\n        labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', _this33, context));\n        labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', _this33, context));\n        labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', _this33, context));\n      });\n      this.labelColors = labelColors;\n      this.labelPointStyles = labelPointStyles;\n      this.labelTextColors = labelTextColors;\n      this.dataPoints = tooltipItems;\n      return tooltipItems;\n    }\n  }, {\n    key: \"update\",\n    value: function update(changed, replay) {\n      var options = this.options.setContext(this.getContext());\n      var active = this._active;\n      var properties;\n      var tooltipItems = [];\n\n      if (!active.length) {\n        if (this.opacity !== 0) {\n          properties = {\n            opacity: 0\n          };\n        }\n      } else {\n        var position = positioners[options.position].call(this, active, this._eventPosition);\n        tooltipItems = this._createItems(options);\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        var size = this._size = getTooltipSize(this, options);\n        var positionAndSize = Object.assign({}, position, size);\n        var alignment = determineAlignment(this.chart, options, positionAndSize);\n        var backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\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, {\n          chart: this.chart,\n          tooltip: this,\n          replay: replay\n        });\n      }\n    }\n  }, {\n    key: \"drawCaret\",\n    value: function drawCaret(tooltipPoint, ctx, size, options) {\n      var caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n      ctx.lineTo(caretPosition.x1, caretPosition.y1);\n      ctx.lineTo(caretPosition.x2, caretPosition.y2);\n      ctx.lineTo(caretPosition.x3, caretPosition.y3);\n    }\n  }, {\n    key: \"getCaretPosition\",\n    value: function getCaretPosition(tooltipPoint, size, options) {\n      var xAlign = this.xAlign,\n          yAlign = this.yAlign;\n      var caretSize = options.caretSize,\n          cornerRadius = options.cornerRadius;\n\n      var _toTRBLCorners2 = toTRBLCorners(cornerRadius),\n          topLeft = _toTRBLCorners2.topLeft,\n          topRight = _toTRBLCorners2.topRight,\n          bottomLeft = _toTRBLCorners2.bottomLeft,\n          bottomRight = _toTRBLCorners2.bottomRight;\n\n      var ptX = tooltipPoint.x,\n          ptY = tooltipPoint.y;\n      var width = size.width,\n          height = size.height;\n      var 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          y1 = y2 + caretSize;\n          y3 = y2 - caretSize;\n        } else {\n          x1 = ptX + width;\n          x2 = x1 + caretSize;\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          x1 = x2 - caretSize;\n          x3 = x2 + caretSize;\n        } else {\n          y1 = ptY + height;\n          y2 = y1 + caretSize;\n          x1 = x2 + caretSize;\n          x3 = x2 - caretSize;\n        }\n\n        y3 = y1;\n      }\n\n      return {\n        x1: x1,\n        x2: x2,\n        x3: x3,\n        y1: y1,\n        y2: y2,\n        y3: y3\n      };\n    }\n  }, {\n    key: \"drawTitle\",\n    value: function drawTitle(pt, ctx, options) {\n      var title = this.title;\n      var length = title.length;\n      var titleFont, titleSpacing, i;\n\n      if (length) {\n        var rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n        pt.x = getAlignedX(this, options.titleAlign, options);\n        ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n        ctx.textBaseline = 'middle';\n        titleFont = toFont(options.titleFont);\n        titleSpacing = options.titleSpacing;\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;\n\n          if (i + 1 === length) {\n            pt.y += options.titleMarginBottom - titleSpacing;\n          }\n        }\n      }\n    }\n  }, {\n    key: \"_drawColorBox\",\n    value: function _drawColorBox(ctx, pt, i, rtlHelper, options) {\n      var labelColor = this.labelColors[i];\n      var labelPointStyle = this.labelPointStyles[i];\n      var boxHeight = options.boxHeight,\n          boxWidth = options.boxWidth;\n      var bodyFont = toFont(options.bodyFont);\n      var colorX = getAlignedX(this, 'left', options);\n      var rtlColorX = rtlHelper.x(colorX);\n      var yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n      var colorY = pt.y + yOffSet;\n\n      if (options.usePointStyle) {\n        var drawOptions = {\n          radius: Math.min(boxWidth, boxHeight) / 2,\n          pointStyle: labelPointStyle.pointStyle,\n          rotation: labelPointStyle.rotation,\n          borderWidth: 1\n        };\n        var centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n        var centerY = colorY + boxHeight / 2;\n        ctx.strokeStyle = options.multiKeyBackground;\n        ctx.fillStyle = options.multiKeyBackground;\n        drawPoint(ctx, drawOptions, centerX, centerY);\n        ctx.strokeStyle = labelColor.borderColor;\n        ctx.fillStyle = labelColor.backgroundColor;\n        drawPoint(ctx, drawOptions, centerX, centerY);\n      } else {\n        ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max.apply(Math, _toConsumableArray(Object.values(labelColor.borderWidth))) : labelColor.borderWidth || 1;\n        ctx.strokeStyle = labelColor.borderColor;\n        ctx.setLineDash(labelColor.borderDash || []);\n        ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n        var outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n        var innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n        var borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n        if (Object.values(borderRadius).some(function (v) {\n          return v !== 0;\n        })) {\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          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          ctx.fillStyle = options.multiKeyBackground;\n          ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n          ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n          ctx.fillStyle = labelColor.backgroundColor;\n          ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n        }\n      }\n\n      ctx.fillStyle = this.labelTextColors[i];\n    }\n  }, {\n    key: \"drawBody\",\n    value: function drawBody(pt, ctx, options) {\n      var body = this.body;\n      var bodySpacing = options.bodySpacing,\n          bodyAlign = options.bodyAlign,\n          displayColors = options.displayColors,\n          boxHeight = options.boxHeight,\n          boxWidth = options.boxWidth,\n          boxPadding = options.boxPadding;\n      var bodyFont = toFont(options.bodyFont);\n      var bodyLineHeight = bodyFont.lineHeight;\n      var xLinePadding = 0;\n      var rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      var fillLineOfText = function fillLineOfText(line) {\n        ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n        pt.y += bodyLineHeight + bodySpacing;\n      };\n\n      var bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n      var bodyItem, textColor, lines, i, j, ilen, jlen;\n      ctx.textAlign = bodyAlign;\n      ctx.textBaseline = 'middle';\n      ctx.font = bodyFont.string;\n      pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n      ctx.fillStyle = options.bodyColor;\n      each(this.beforeBody, fillLineOfText);\n      xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n\n      for (i = 0, ilen = body.length; i < ilen; ++i) {\n        bodyItem = body[i];\n        textColor = this.labelTextColors[i];\n        ctx.fillStyle = textColor;\n        each(bodyItem.before, fillLineOfText);\n        lines = bodyItem.lines;\n\n        if (displayColors && lines.length) {\n          this._drawColorBox(ctx, pt, i, rtlHelper, options);\n\n          bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n        }\n\n        for (j = 0, jlen = lines.length; j < jlen; ++j) {\n          fillLineOfText(lines[j]);\n          bodyLineHeight = bodyFont.lineHeight;\n        }\n\n        each(bodyItem.after, fillLineOfText);\n      }\n\n      xLinePadding = 0;\n      bodyLineHeight = bodyFont.lineHeight;\n      each(this.afterBody, fillLineOfText);\n      pt.y -= bodySpacing;\n    }\n  }, {\n    key: \"drawFooter\",\n    value: function drawFooter(pt, ctx, options) {\n      var footer = this.footer;\n      var length = footer.length;\n      var footerFont, i;\n\n      if (length) {\n        var rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n        pt.x = getAlignedX(this, options.footerAlign, options);\n        pt.y += options.footerMarginTop;\n        ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n        ctx.textBaseline = 'middle';\n        footerFont = toFont(options.footerFont);\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    key: \"drawBackground\",\n    value: function drawBackground(pt, ctx, tooltipSize, options) {\n      var xAlign = this.xAlign,\n          yAlign = this.yAlign;\n      var x = pt.x,\n          y = pt.y;\n      var width = tooltipSize.width,\n          height = tooltipSize.height;\n\n      var _toTRBLCorners3 = toTRBLCorners(options.cornerRadius),\n          topLeft = _toTRBLCorners3.topLeft,\n          topRight = _toTRBLCorners3.topRight,\n          bottomLeft = _toTRBLCorners3.bottomLeft,\n          bottomRight = _toTRBLCorners3.bottomRight;\n\n      ctx.fillStyle = options.backgroundColor;\n      ctx.strokeStyle = options.borderColor;\n      ctx.lineWidth = options.borderWidth;\n      ctx.beginPath();\n      ctx.moveTo(x + topLeft, y);\n\n      if (yAlign === 'top') {\n        this.drawCaret(pt, ctx, tooltipSize, options);\n      }\n\n      ctx.lineTo(x + width - topRight, y);\n      ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n\n      if (yAlign === 'center' && xAlign === 'right') {\n        this.drawCaret(pt, ctx, tooltipSize, options);\n      }\n\n      ctx.lineTo(x + width, y + height - bottomRight);\n      ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n\n      if (yAlign === 'bottom') {\n        this.drawCaret(pt, ctx, tooltipSize, options);\n      }\n\n      ctx.lineTo(x + bottomLeft, y + height);\n      ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n\n      if (yAlign === 'center' && xAlign === 'left') {\n        this.drawCaret(pt, ctx, tooltipSize, options);\n      }\n\n      ctx.lineTo(x, y + topLeft);\n      ctx.quadraticCurveTo(x, y, x + topLeft, y);\n      ctx.closePath();\n      ctx.fill();\n\n      if (options.borderWidth > 0) {\n        ctx.stroke();\n      }\n    }\n  }, {\n    key: \"_updateAnimationTarget\",\n    value: function _updateAnimationTarget(options) {\n      var chart = this.chart;\n      var anims = this.$animations;\n      var animX = anims && anims.x;\n      var animY = anims && anims.y;\n\n      if (animX || animY) {\n        var position = positioners[options.position].call(this, this._active, this._eventPosition);\n\n        if (!position) {\n          return;\n        }\n\n        var size = this._size = getTooltipSize(this, options);\n        var positionAndSize = Object.assign({}, position, this._size);\n        var alignment = determineAlignment(chart, options, positionAndSize);\n        var point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n\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\n          this._resolveAnimations().update(this, point);\n        }\n      }\n    }\n  }, {\n    key: \"_willRender\",\n    value: function _willRender() {\n      return !!this.opacity;\n    }\n  }, {\n    key: \"draw\",\n    value: function draw(ctx) {\n      var options = this.options.setContext(this.getContext());\n      var opacity = this.opacity;\n\n      if (!opacity) {\n        return;\n      }\n\n      this._updateAnimationTarget(options);\n\n      var tooltipSize = {\n        width: this.width,\n        height: this.height\n      };\n      var pt = {\n        x: this.x,\n        y: this.y\n      };\n      opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n      var padding = toPadding(options.padding);\n      var 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        this.drawBackground(pt, ctx, tooltipSize, options);\n        overrideTextDirection(ctx, options.textDirection);\n        pt.y += padding.top;\n        this.drawTitle(pt, ctx, options);\n        this.drawBody(pt, ctx, options);\n        this.drawFooter(pt, ctx, options);\n        restoreTextDirection(ctx, options.textDirection);\n        ctx.restore();\n      }\n    }\n  }, {\n    key: \"getActiveElements\",\n    value: function getActiveElements() {\n      return this._active || [];\n    }\n  }, {\n    key: \"setActiveElements\",\n    value: function setActiveElements(activeElements, eventPosition) {\n      var _this34 = this;\n\n      var lastActive = this._active;\n      var active = activeElements.map(function (_ref18) {\n        var datasetIndex = _ref18.datasetIndex,\n            index = _ref18.index;\n\n        var meta = _this34.chart.getDatasetMeta(datasetIndex);\n\n        if (!meta) {\n          throw new Error('Cannot find a dataset at index ' + datasetIndex);\n        }\n\n        return {\n          datasetIndex: datasetIndex,\n          element: meta.data[index],\n          index: index\n        };\n      });\n      var changed = !_elementsEqual(lastActive, active);\n\n      var 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    key: \"handleEvent\",\n    value: function handleEvent(e, replay) {\n      var inChartArea = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n      if (replay && this._ignoreReplayEvents) {\n        return false;\n      }\n\n      this._ignoreReplayEvents = false;\n      var options = this.options;\n      var lastActive = this._active || [];\n\n      var active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n      var positionChanged = this._positionChanged(active, e);\n\n      var changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\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          this.update(true, replay);\n        }\n      }\n\n      return changed;\n    }\n  }, {\n    key: \"_getActiveElements\",\n    value: function _getActiveElements(e, lastActive, replay, inChartArea) {\n      var _this35 = this;\n\n      var options = this.options;\n\n      if (e.type === 'mouseout') {\n        return [];\n      }\n\n      if (!inChartArea) {\n        return lastActive.filter(function (i) {\n          return _this35.chart.data.datasets[i.datasetIndex] && _this35.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined;\n        });\n      }\n\n      var 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    key: \"_positionChanged\",\n    value: function _positionChanged(active, e) {\n      var caretX = this.caretX,\n          caretY = this.caretY,\n          options = this.options;\n      var position = positioners[options.position].call(this, active, e);\n      return position !== false && (caretX !== position.x || caretY !== position.y);\n    }\n  }]);\n\n  return Tooltip;\n}(Element);\n\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners: positioners,\n  afterInit: function afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({\n        chart: chart,\n        options: options\n      });\n    }\n  },\n  beforeUpdate: function beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  reset: function reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  afterDraw: function afterDraw(chart) {\n    var tooltip = chart.tooltip;\n\n    if (tooltip && tooltip._willRender()) {\n      var args = {\n        tooltip: tooltip\n      };\n\n      if (chart.notifyPlugins('beforeTooltipDraw', _objectSpread(_objectSpread({}, args), {}, {\n        cancelable: true\n      })) === false) {\n        return;\n      }\n\n      tooltip.draw(chart.ctx);\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n  afterEvent: function afterEvent(chart, args) {\n    if (chart.tooltip) {\n      var useFinalPosition = args.replay;\n\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        args.changed = true;\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    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: function boxHeight(ctx, opts) {\n      return opts.bodyFont.size;\n    },\n    boxWidth: function boxWidth(ctx, opts) {\n      return opts.bodyFont.size;\n    },\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  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n  descriptors: {\n    _scriptable: function _scriptable(name) {\n      return name !== 'filter' && name !== 'itemSort' && name !== 'external';\n    },\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  additionalOptionScopes: ['interaction']\n};\nvar plugins = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  Colors: plugin_colors,\n  Decimation: plugin_decimation,\n  Filler: index,\n  Legend: plugin_legend,\n  SubTitle: plugin_subtitle,\n  Title: plugin_title,\n  Tooltip: plugin_tooltip\n});\n\nvar addIfString = function addIfString(labels, raw, index, addedLabels) {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({\n      index: index,\n      label: raw\n    });\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n\n  return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  var first = labels.indexOf(raw);\n\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n\n  var last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\n\nvar validIndex = function validIndex(index, max) {\n  return index === null ? null : _limitValue(Math.round(index), 0, max);\n};\n\nfunction _getLabelForValue(value) {\n  var labels = this.getLabels();\n\n  if (value >= 0 && value < labels.length) {\n    return labels[value];\n  }\n\n  return value;\n}\n\nvar CategoryScale = /*#__PURE__*/function (_Scale) {\n  _inherits(CategoryScale, _Scale);\n\n  var _super19 = _createSuper(CategoryScale);\n\n  function CategoryScale(cfg) {\n    var _this36;\n\n    _classCallCheck(this, CategoryScale);\n\n    _this36 = _super19.call(this, cfg);\n    _this36._startValue = undefined;\n    _this36._valueRange = 0;\n    _this36._addedLabels = [];\n    return _this36;\n  }\n\n  _createClass(CategoryScale, [{\n    key: \"init\",\n    value: function init(scaleOptions) {\n      var added = this._addedLabels;\n\n      if (added.length) {\n        var labels = this.getLabels();\n\n        var _iterator25 = _createForOfIteratorHelper(added),\n            _step25;\n\n        try {\n          for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {\n            var _ref20 = _step25.value;\n            var _index3 = _ref20.index;\n            var label = _ref20.label;\n\n            if (labels[_index3] === label) {\n              labels.splice(_index3, 1);\n            }\n          }\n        } catch (err) {\n          _iterator25.e(err);\n        } finally {\n          _iterator25.f();\n        }\n\n        this._addedLabels = [];\n      }\n\n      _get(_getPrototypeOf(CategoryScale.prototype), \"init\", this).call(this, scaleOptions);\n    }\n  }, {\n    key: \"parse\",\n    value: function parse(raw, index) {\n      if (isNullOrUndef(raw)) {\n        return null;\n      }\n\n      var labels = this.getLabels();\n      index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n      return validIndex(index, labels.length - 1);\n    }\n  }, {\n    key: \"determineDataLimits\",\n    value: function determineDataLimits() {\n      var _this$getUserBounds2 = this.getUserBounds(),\n          minDefined = _this$getUserBounds2.minDefined,\n          maxDefined = _this$getUserBounds2.maxDefined;\n\n      var _this$getMinMax = this.getMinMax(true),\n          min = _this$getMinMax.min,\n          max = _this$getMinMax.max;\n\n      if (this.options.bounds === 'ticks') {\n        if (!minDefined) {\n          min = 0;\n        }\n\n        if (!maxDefined) {\n          max = this.getLabels().length - 1;\n        }\n      }\n\n      this.min = min;\n      this.max = max;\n    }\n  }, {\n    key: \"buildTicks\",\n    value: function buildTicks() {\n      var min = this.min;\n      var max = this.max;\n      var offset = this.options.offset;\n      var ticks = [];\n      var labels = this.getLabels();\n      labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n      this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n      this._startValue = this.min - (offset ? 0.5 : 0);\n\n      for (var value = min; value <= max; value++) {\n        ticks.push({\n          value: value\n        });\n      }\n\n      return ticks;\n    }\n  }, {\n    key: \"getLabelForValue\",\n    value: function getLabelForValue(value) {\n      return _getLabelForValue.call(this, value);\n    }\n  }, {\n    key: \"configure\",\n    value: function configure() {\n      _get(_getPrototypeOf(CategoryScale.prototype), \"configure\", this).call(this);\n\n      if (!this.isHorizontal()) {\n        this._reversePixels = !this._reversePixels;\n      }\n    }\n  }, {\n    key: \"getPixelForValue\",\n    value: function 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    key: \"getPixelForTick\",\n    value: function getPixelForTick(index) {\n      var ticks = this.ticks;\n\n      if (index < 0 || index > ticks.length - 1) {\n        return null;\n      }\n\n      return this.getPixelForValue(ticks[index].value);\n    }\n  }, {\n    key: \"getValueForPixel\",\n    value: function getValueForPixel(pixel) {\n      return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n    }\n  }, {\n    key: \"getBasePixel\",\n    value: function getBasePixel() {\n      return this.bottom;\n    }\n  }]);\n\n  return CategoryScale;\n}(Scale);\n\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n  ticks: {\n    callback: _getLabelForValue\n  }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n  var ticks = [];\n  var MIN_SPACING = 1e-14;\n  var bounds = generationOptions.bounds,\n      step = generationOptions.step,\n      min = generationOptions.min,\n      max = generationOptions.max,\n      precision = generationOptions.precision,\n      count = generationOptions.count,\n      maxTicks = generationOptions.maxTicks,\n      maxDigits = generationOptions.maxDigits,\n      includeBounds = generationOptions.includeBounds;\n  var unit = step || 1;\n  var maxSpaces = maxTicks - 1;\n  var rmin = dataRange.min,\n      rmax = dataRange.max;\n  var minDefined = !isNullOrUndef(min);\n  var maxDefined = !isNullOrUndef(max);\n  var countDefined = !isNullOrUndef(count);\n  var minSpacing = (rmax - rmin) / (maxDigits + 1);\n  var spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  var factor, niceMin, niceMax, numSpaces;\n\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{\n      value: rmin\n    }, {\n      value: rmax\n    }];\n  }\n\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n\n  if (numSpaces > maxSpaces) {\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n\n  if (!isNullOrUndef(precision)) {\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    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    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    numSpaces = (niceMax - niceMin) / spacing;\n\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  var decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n  var j = 0;\n\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({\n        value: min\n      });\n\n      if (niceMin < min) {\n        j++;\n      }\n\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    var tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n\n    if (maxDefined && tickValue > max) {\n      break;\n    }\n\n    ticks.push({\n      value: tickValue\n    });\n  }\n\n  if (maxDefined && includeBounds && niceMax !== 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({\n        value: max\n      });\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({\n      value: niceMax\n    });\n  }\n\n  return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, _ref21) {\n  var horizontal = _ref21.horizontal,\n      minRotation = _ref21.minRotation;\n  var rad = toRadians(minRotation);\n  var ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  var length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\n\nvar LinearScaleBase = /*#__PURE__*/function (_Scale2) {\n  _inherits(LinearScaleBase, _Scale2);\n\n  var _super20 = _createSuper(LinearScaleBase);\n\n  function LinearScaleBase(cfg) {\n    var _this37;\n\n    _classCallCheck(this, LinearScaleBase);\n\n    _this37 = _super20.call(this, cfg);\n    _this37.start = undefined;\n    _this37.end = undefined;\n    _this37._startValue = undefined;\n    _this37._endValue = undefined;\n    _this37._valueRange = 0;\n    return _this37;\n  }\n\n  _createClass(LinearScaleBase, [{\n    key: \"parse\",\n    value: function parse(raw, index) {\n      if (isNullOrUndef(raw)) {\n        return null;\n      }\n\n      if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n        return null;\n      }\n\n      return +raw;\n    }\n  }, {\n    key: \"handleTickRangeOptions\",\n    value: function handleTickRangeOptions() {\n      var beginAtZero = this.options.beginAtZero;\n\n      var _this$getUserBounds3 = this.getUserBounds(),\n          minDefined = _this$getUserBounds3.minDefined,\n          maxDefined = _this$getUserBounds3.maxDefined;\n\n      var min = this.min,\n          max = this.max;\n\n      var setMin = function setMin(v) {\n        return min = minDefined ? min : v;\n      };\n\n      var setMax = function setMax(v) {\n        return max = maxDefined ? max : v;\n      };\n\n      if (beginAtZero) {\n        var minSign = sign(min);\n        var 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        var offset = max === 0 ? 1 : Math.abs(max * 0.05);\n        setMax(max + offset);\n\n        if (!beginAtZero) {\n          setMin(min - offset);\n        }\n      }\n\n      this.min = min;\n      this.max = max;\n    }\n  }, {\n    key: \"getTickLimit\",\n    value: function getTickLimit() {\n      var tickOpts = this.options.ticks;\n      var maxTicksLimit = tickOpts.maxTicksLimit,\n          stepSize = tickOpts.stepSize;\n      var maxTicks;\n\n      if (stepSize) {\n        maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n\n        if (maxTicks > 1000) {\n          console.warn(\"scales.\".concat(this.id, \".ticks.stepSize: \").concat(stepSize, \" would result generating up to \").concat(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    key: \"computeTickLimit\",\n    value: function computeTickLimit() {\n      return Number.POSITIVE_INFINITY;\n    }\n  }, {\n    key: \"buildTicks\",\n    value: function buildTicks() {\n      var opts = this.options;\n      var tickOpts = opts.ticks;\n      var maxTicks = this.getTickLimit();\n      maxTicks = Math.max(2, maxTicks);\n      var numericGeneratorOptions = {\n        maxTicks: 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      var dataRange = this._range || this;\n      var ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n\n      if (opts.bounds === 'ticks') {\n        _setMinAndMaxByKey(ticks, this, 'value');\n      }\n\n      if (opts.reverse) {\n        ticks.reverse();\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    key: \"configure\",\n    value: function configure() {\n      var ticks = this.ticks;\n      var start = this.min;\n      var end = this.max;\n\n      _get(_getPrototypeOf(LinearScaleBase.prototype), \"configure\", this).call(this);\n\n      if (this.options.offset && ticks.length) {\n        var offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n        start -= offset;\n        end += offset;\n      }\n\n      this._startValue = start;\n      this._endValue = end;\n      this._valueRange = end - start;\n    }\n  }, {\n    key: \"getLabelForValue\",\n    value: function getLabelForValue(value) {\n      return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n    }\n  }]);\n\n  return LinearScaleBase;\n}(Scale);\n\nvar LinearScale = /*#__PURE__*/function (_LinearScaleBase) {\n  _inherits(LinearScale, _LinearScaleBase);\n\n  var _super21 = _createSuper(LinearScale);\n\n  function LinearScale() {\n    _classCallCheck(this, LinearScale);\n\n    return _super21.apply(this, arguments);\n  }\n\n  _createClass(LinearScale, [{\n    key: \"determineDataLimits\",\n    value: function determineDataLimits() {\n      var _this$getMinMax2 = this.getMinMax(true),\n          min = _this$getMinMax2.min,\n          max = _this$getMinMax2.max;\n\n      this.min = isNumberFinite(min) ? min : 0;\n      this.max = isNumberFinite(max) ? max : 1;\n      this.handleTickRangeOptions();\n    }\n  }, {\n    key: \"computeTickLimit\",\n    value: function computeTickLimit() {\n      var horizontal = this.isHorizontal();\n      var length = horizontal ? this.width : this.height;\n      var minRotation = toRadians(this.options.ticks.minRotation);\n      var ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n\n      var tickFont = this._resolveTickFontOptions(0);\n\n      return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n    }\n  }, {\n    key: \"getPixelForValue\",\n    value: function getPixelForValue(value) {\n      return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n    }\n  }, {\n    key: \"getValueForPixel\",\n    value: function getValueForPixel(pixel) {\n      return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n    }\n  }]);\n\n  return LinearScale;\n}(LinearScaleBase);\n\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.numeric\n  }\n};\n\nvar log10Floor = function log10Floor(v) {\n  return Math.floor(log10(v));\n};\n\nvar changeExponent = function changeExponent(v, m) {\n  return Math.pow(10, log10Floor(v) + m);\n};\n\nfunction isMajor(tickVal) {\n  var remain = tickVal / Math.pow(10, log10Floor(tickVal));\n  return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n  var rangeStep = Math.pow(10, rangeExp);\n  var start = Math.floor(min / rangeStep);\n  var end = Math.ceil(max / rangeStep);\n  return end - start;\n}\n\nfunction startExp(min, max) {\n  var range = max - min;\n  var rangeExp = log10Floor(range);\n\n  while (steps(min, max, rangeExp) > 10) {\n    rangeExp++;\n  }\n\n  while (steps(min, max, rangeExp) < 10) {\n    rangeExp--;\n  }\n\n  return Math.min(rangeExp, log10Floor(min));\n}\n\nfunction generateTicks(generationOptions, _ref22) {\n  var min = _ref22.min,\n      max = _ref22.max;\n  min = finiteOrDefault(generationOptions.min, min);\n  var ticks = [];\n  var minExp = log10Floor(min);\n  var exp = startExp(min, max);\n  var precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  var stepSize = Math.pow(10, exp);\n  var base = minExp > exp ? Math.pow(10, minExp) : 0;\n  var start = Math.round((min - base) * precision) / precision;\n  var offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n  var significand = Math.floor((start - offset) / Math.pow(10, exp));\n  var value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n\n  while (value < max) {\n    ticks.push({\n      value: value,\n      major: isMajor(value),\n      significand: significand\n    });\n\n    if (significand >= 10) {\n      significand = significand < 15 ? 15 : 20;\n    } else {\n      significand++;\n    }\n\n    if (significand >= 20) {\n      exp++;\n      significand = 2;\n      precision = exp >= 0 ? 1 : precision;\n    }\n\n    value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n  }\n\n  var lastTick = finiteOrDefault(generationOptions.max, value);\n  ticks.push({\n    value: lastTick,\n    major: isMajor(lastTick),\n    significand: significand\n  });\n  return ticks;\n}\n\nvar LogarithmicScale = /*#__PURE__*/function (_Scale3) {\n  _inherits(LogarithmicScale, _Scale3);\n\n  var _super22 = _createSuper(LogarithmicScale);\n\n  function LogarithmicScale(cfg) {\n    var _this38;\n\n    _classCallCheck(this, LogarithmicScale);\n\n    _this38 = _super22.call(this, cfg);\n    _this38.start = undefined;\n    _this38.end = undefined;\n    _this38._startValue = undefined;\n    _this38._valueRange = 0;\n    return _this38;\n  }\n\n  _createClass(LogarithmicScale, [{\n    key: \"parse\",\n    value: function parse(raw, index) {\n      var value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n\n      if (value === 0) {\n        this._zero = true;\n        return undefined;\n      }\n\n      return isNumberFinite(value) && value > 0 ? value : null;\n    }\n  }, {\n    key: \"determineDataLimits\",\n    value: function determineDataLimits() {\n      var _this$getMinMax3 = this.getMinMax(true),\n          min = _this$getMinMax3.min,\n          max = _this$getMinMax3.max;\n\n      this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n      this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n\n      if (this.options.beginAtZero) {\n        this._zero = true;\n      }\n\n      if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(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    key: \"handleTickRangeOptions\",\n    value: function handleTickRangeOptions() {\n      var _this$getUserBounds4 = this.getUserBounds(),\n          minDefined = _this$getUserBounds4.minDefined,\n          maxDefined = _this$getUserBounds4.maxDefined;\n\n      var min = this.min;\n      var max = this.max;\n\n      var setMin = function setMin(v) {\n        return min = minDefined ? min : v;\n      };\n\n      var setMax = function setMax(v) {\n        return max = maxDefined ? max : v;\n      };\n\n      if (min === max) {\n        if (min <= 0) {\n          setMin(1);\n          setMax(10);\n        } else {\n          setMin(changeExponent(min, -1));\n          setMax(changeExponent(max, +1));\n        }\n      }\n\n      if (min <= 0) {\n        setMin(changeExponent(max, -1));\n      }\n\n      if (max <= 0) {\n        setMax(changeExponent(min, +1));\n      }\n\n      this.min = min;\n      this.max = max;\n    }\n  }, {\n    key: \"buildTicks\",\n    value: function buildTicks() {\n      var opts = this.options;\n      var generationOptions = {\n        min: this._userMin,\n        max: this._userMax\n      };\n      var ticks = generateTicks(generationOptions, this);\n\n      if (opts.bounds === 'ticks') {\n        _setMinAndMaxByKey(ticks, this, 'value');\n      }\n\n      if (opts.reverse) {\n        ticks.reverse();\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    key: \"getLabelForValue\",\n    value: function getLabelForValue(value) {\n      return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n    }\n  }, {\n    key: \"configure\",\n    value: function configure() {\n      var start = this.min;\n\n      _get(_getPrototypeOf(LogarithmicScale.prototype), \"configure\", this).call(this);\n\n      this._startValue = log10(start);\n      this._valueRange = log10(this.max) - log10(start);\n    }\n  }, {\n    key: \"getPixelForValue\",\n    value: function getPixelForValue(value) {\n      if (value === undefined || value === 0) {\n        value = this.min;\n      }\n\n      if (value === null || isNaN(value)) {\n        return NaN;\n      }\n\n      return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n    }\n  }, {\n    key: \"getValueForPixel\",\n    value: function getValueForPixel(pixel) {\n      var decimal = this.getDecimalForPixel(pixel);\n      return Math.pow(10, this._startValue + decimal * this._valueRange);\n    }\n  }]);\n\n  return LogarithmicScale;\n}(Scale);\n\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.logarithmic,\n    major: {\n      enabled: true\n    }\n  }\n};\n\nfunction getTickBackdropHeight(opts) {\n  var tickOpts = opts.ticks;\n\n  if (tickOpts.display && opts.display) {\n    var padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\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\nfunction fitWithPointLabels(scale) {\n  var 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  var limits = Object.assign({}, orig);\n  var labelSizes = [];\n  var padding = [];\n  var valueCount = scale._pointLabels.length;\n  var pointLabelOpts = scale.options.pointLabels;\n  var additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n  for (var i = 0; i < valueCount; i++) {\n    var opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    var pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    var plFont = toFont(opts.font);\n    var textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n\n    var angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n\n    var angle = Math.round(toDegrees(angleRadians));\n    var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n\n  scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  var sin = Math.abs(Math.sin(angle));\n  var cos = Math.abs(Math.cos(angle));\n  var x = 0;\n  var y = 0;\n\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\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  var outerDistance = scale.drawingArea;\n  var extra = itemOpts.extra,\n      additionalAngle = itemOpts.additionalAngle,\n      padding = itemOpts.padding,\n      size = itemOpts.size;\n  var pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n  var angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n  var y = yForAngle(pointLabelPosition.y, size.h, angle);\n  var textAlign = getTextAlignForAngle(angle);\n  var left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n  return {\n    visible: true,\n    x: pointLabelPosition.x,\n    y: y,\n    textAlign: textAlign,\n    left: 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\n  var left = item.left,\n      top = item.top,\n      right = item.right,\n      bottom = item.bottom;\n\n  var apexesInArea = _isPointInArea({\n    x: left,\n    y: top\n  }, area) || _isPointInArea({\n    x: left,\n    y: bottom\n  }, area) || _isPointInArea({\n    x: right,\n    y: top\n  }, area) || _isPointInArea({\n    x: right,\n    y: bottom\n  }, area);\n\n  return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  var items = [];\n  var valueCount = scale._pointLabels.length;\n  var opts = scale.options;\n  var _opts$pointLabels = opts.pointLabels,\n      centerPointLabels = _opts$pointLabels.centerPointLabels,\n      display = _opts$pointLabels.display;\n  var itemOpts = {\n    extra: getTickBackdropHeight(opts) / 2,\n    additionalAngle: centerPointLabels ? PI / valueCount : 0\n  };\n  var area;\n\n  for (var i = 0; i < valueCount; i++) {\n    itemOpts.padding = padding[i];\n    itemOpts.size = labelSizes[i];\n    var item = createPointLabelItem(scale, i, itemOpts);\n    items.push(item);\n\n    if (display === 'auto') {\n      item.visible = isNotOverlapped(item, area);\n\n      if (item.visible) {\n        area = item;\n      }\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\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\n  return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n  var left = item.left,\n      top = item.top,\n      right = item.right,\n      bottom = item.bottom;\n  var backdropColor = opts.backdropColor;\n\n  if (!isNullOrUndef(backdropColor)) {\n    var borderRadius = toTRBLCorners(opts.borderRadius);\n    var padding = toPadding(opts.backdropPadding);\n    ctx.fillStyle = backdropColor;\n    var backdropLeft = left - padding.left;\n    var backdropTop = top - padding.top;\n    var backdropWidth = right - left + padding.width;\n    var backdropHeight = bottom - top + padding.height;\n\n    if (Object.values(borderRadius).some(function (v) {\n      return v !== 0;\n    })) {\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  var ctx = scale.ctx,\n      pointLabels = scale.options.pointLabels;\n\n  for (var i = labelCount - 1; i >= 0; i--) {\n    var item = scale._pointLabelItems[i];\n\n    if (!item.visible) {\n      continue;\n    }\n\n    var optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    drawPointLabelBox(ctx, optsAtIndex, item);\n    var plFont = toFont(optsAtIndex.font);\n    var x = item.x,\n        y = item.y,\n        textAlign = item.textAlign;\n    renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n      color: optsAtIndex.color,\n      textAlign: textAlign,\n      textBaseline: 'middle'\n    });\n  }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  var ctx = scale.ctx;\n\n  if (circular) {\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    var pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n\n    for (var 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  var ctx = scale.ctx;\n  var circular = gridLineOpts.circular;\n  var color = gridLineOpts.color,\n      lineWidth = gridLineOpts.lineWidth;\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  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: label,\n    index: index,\n    type: 'pointLabel'\n  });\n}\n\nvar RadialLinearScale = /*#__PURE__*/function (_LinearScaleBase2) {\n  _inherits(RadialLinearScale, _LinearScaleBase2);\n\n  var _super23 = _createSuper(RadialLinearScale);\n\n  function RadialLinearScale(cfg) {\n    var _this39;\n\n    _classCallCheck(this, RadialLinearScale);\n\n    _this39 = _super23.call(this, cfg);\n    _this39.xCenter = undefined;\n    _this39.yCenter = undefined;\n    _this39.drawingArea = undefined;\n    _this39._pointLabels = [];\n    _this39._pointLabelItems = [];\n    return _this39;\n  }\n\n  _createClass(RadialLinearScale, [{\n    key: \"setDimensions\",\n    value: function setDimensions() {\n      var padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n      var w = this.width = this.maxWidth - padding.width;\n      var 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    key: \"determineDataLimits\",\n    value: function determineDataLimits() {\n      var _this$getMinMax4 = this.getMinMax(false),\n          min = _this$getMinMax4.min,\n          max = _this$getMinMax4.max;\n\n      this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n      this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n      this.handleTickRangeOptions();\n    }\n  }, {\n    key: \"computeTickLimit\",\n    value: function computeTickLimit() {\n      return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n    }\n  }, {\n    key: \"generateTickLabels\",\n    value: function generateTickLabels(ticks) {\n      var _this40 = this;\n\n      LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n      this._pointLabels = this.getLabels().map(function (value, index) {\n        var label = callback(_this40.options.pointLabels.callback, [value, index], _this40);\n        return label || label === 0 ? label : '';\n      }).filter(function (v, i) {\n        return _this40.chart.getDataVisibility(i);\n      });\n    }\n  }, {\n    key: \"fit\",\n    value: function fit() {\n      var 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    key: \"setCenterPoint\",\n    value: function 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    key: \"getIndexAngle\",\n    value: function getIndexAngle(index) {\n      var angleMultiplier = TAU / (this._pointLabels.length || 1);\n      var startAngle = this.options.startAngle || 0;\n      return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n    }\n  }, {\n    key: \"getDistanceFromCenterForValue\",\n    value: function getDistanceFromCenterForValue(value) {\n      if (isNullOrUndef(value)) {\n        return NaN;\n      }\n\n      var scalingFactor = this.drawingArea / (this.max - this.min);\n\n      if (this.options.reverse) {\n        return (this.max - value) * scalingFactor;\n      }\n\n      return (value - this.min) * scalingFactor;\n    }\n  }, {\n    key: \"getValueForDistanceFromCenter\",\n    value: function getValueForDistanceFromCenter(distance) {\n      if (isNullOrUndef(distance)) {\n        return NaN;\n      }\n\n      var scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n      return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n    }\n  }, {\n    key: \"getPointLabelContext\",\n    value: function getPointLabelContext(index) {\n      var pointLabels = this._pointLabels || [];\n\n      if (index >= 0 && index < pointLabels.length) {\n        var pointLabel = pointLabels[index];\n        return createPointLabelContext(this.getContext(), index, pointLabel);\n      }\n    }\n  }, {\n    key: \"getPointPosition\",\n    value: function getPointPosition(index, distanceFromCenter) {\n      var additionalAngle = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n      var 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: angle\n      };\n    }\n  }, {\n    key: \"getPointPositionForValue\",\n    value: function getPointPositionForValue(index, value) {\n      return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n    }\n  }, {\n    key: \"getBasePosition\",\n    value: function getBasePosition(index) {\n      return this.getPointPositionForValue(index || 0, this.getBaseValue());\n    }\n  }, {\n    key: \"getPointLabelPosition\",\n    value: function getPointLabelPosition(index) {\n      var _this$_pointLabelItem = this._pointLabelItems[index],\n          left = _this$_pointLabelItem.left,\n          top = _this$_pointLabelItem.top,\n          right = _this$_pointLabelItem.right,\n          bottom = _this$_pointLabelItem.bottom;\n      return {\n        left: left,\n        top: top,\n        right: right,\n        bottom: bottom\n      };\n    }\n  }, {\n    key: \"drawBackground\",\n    value: function drawBackground() {\n      var _this$options16 = this.options,\n          backgroundColor = _this$options16.backgroundColor,\n          circular = _this$options16.grid.circular;\n\n      if (backgroundColor) {\n        var 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    key: \"drawGrid\",\n    value: function drawGrid() {\n      var _this41 = this;\n\n      var ctx = this.ctx;\n      var opts = this.options;\n      var angleLines = opts.angleLines,\n          grid = opts.grid,\n          border = opts.border;\n      var labelCount = this._pointLabels.length;\n      var i, offset, position;\n\n      if (opts.pointLabels.display) {\n        drawPointLabels(this, labelCount);\n      }\n\n      if (grid.display) {\n        this.ticks.forEach(function (tick, index) {\n          if (index !== 0 || index === 0 && _this41.min < 0) {\n            offset = _this41.getDistanceFromCenterForValue(tick.value);\n\n            var context = _this41.getContext(index);\n\n            var optsAtIndex = grid.setContext(context);\n            var optsAtIndexBorder = border.setContext(context);\n            drawRadiusLine(_this41, 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          var optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n          var color = optsAtIndex.color,\n              lineWidth = optsAtIndex.lineWidth;\n\n          if (!lineWidth || !color) {\n            continue;\n          }\n\n          ctx.lineWidth = lineWidth;\n          ctx.strokeStyle = color;\n          ctx.setLineDash(optsAtIndex.borderDash);\n          ctx.lineDashOffset = optsAtIndex.borderDashOffset;\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    key: \"drawBorder\",\n    value: function drawBorder() {}\n  }, {\n    key: \"drawLabels\",\n    value: function drawLabels() {\n      var _this42 = this;\n\n      var ctx = this.ctx;\n      var opts = this.options;\n      var tickOpts = opts.ticks;\n\n      if (!tickOpts.display) {\n        return;\n      }\n\n      var startAngle = this.getIndexAngle(0);\n      var offset, width;\n      ctx.save();\n      ctx.translate(this.xCenter, this.yCenter);\n      ctx.rotate(startAngle);\n      ctx.textAlign = 'center';\n      ctx.textBaseline = 'middle';\n      this.ticks.forEach(function (tick, index) {\n        if (index === 0 && _this42.min >= 0 && !opts.reverse) {\n          return;\n        }\n\n        var optsAtIndex = tickOpts.setContext(_this42.getContext(index));\n        var tickFont = toFont(optsAtIndex.font);\n        offset = _this42.getDistanceFromCenterForValue(_this42.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          var padding = toPadding(optsAtIndex.backdropPadding);\n          ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\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      ctx.restore();\n    }\n  }, {\n    key: \"drawTitle\",\n    value: function drawTitle() {}\n  }]);\n\n  return RadialLinearScale;\n}(LinearScaleBase);\n\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n  display: true,\n  animate: true,\n  position: 'chartArea',\n  angleLines: {\n    display: true,\n    lineWidth: 1,\n    borderDash: [],\n    borderDashOffset: 0.0\n  },\n  grid: {\n    circular: false\n  },\n  startAngle: 0,\n  ticks: {\n    showLabelBackdrop: true,\n    callback: Ticks.formatters.numeric\n  },\n  pointLabels: {\n    backdropColor: undefined,\n    backdropPadding: 2,\n    display: true,\n    font: {\n      size: 10\n    },\n    callback: function callback(label) {\n      return label;\n    },\n    padding: 5,\n    centerPointLabels: false\n  }\n};\nRadialLinearScale.defaultRoutes = {\n  'angleLines.color': 'borderColor',\n  'pointLabels.color': 'color',\n  'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n  angleLines: {\n    _fallback: 'grid'\n  }\n};\nvar INTERVALS = {\n  millisecond: {\n    common: true,\n    size: 1,\n    steps: 1000\n  },\n  second: {\n    common: true,\n    size: 1000,\n    steps: 60\n  },\n  minute: {\n    common: true,\n    size: 60000,\n    steps: 60\n  },\n  hour: {\n    common: true,\n    size: 3600000,\n    steps: 24\n  },\n  day: {\n    common: true,\n    size: 86400000,\n    steps: 30\n  },\n  week: {\n    common: false,\n    size: 604800000,\n    steps: 4\n  },\n  month: {\n    common: true,\n    size: 2.628e9,\n    steps: 12\n  },\n  quarter: {\n    common: false,\n    size: 7.884e9,\n    steps: 4\n  },\n  year: {\n    common: true,\n    size: 3.154e10\n  }\n};\nvar UNITS = /* #__PURE__ */Object.keys(INTERVALS);\n\nfunction sorter(a, b) {\n  return a - b;\n}\n\nfunction _parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n\n  var adapter = scale._adapter;\n  var _scale$_parseOpts = scale._parseOpts,\n      parser = _scale$_parseOpts.parser,\n      round = _scale$_parseOpts.round,\n      isoWeekday = _scale$_parseOpts.isoWeekday;\n  var value = input;\n\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n\n  if (!isNumberFinite(value)) {\n    value = typeof parser === 'string' ? adapter.parse(value, parser) : 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) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n  }\n\n  return +value;\n}\n\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  var ilen = UNITS.length;\n\n  for (var i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    var interval = INTERVALS[UNITS[i]];\n    var 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\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (var i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    var unit = UNITS[i];\n\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\nfunction determineMajorUnit(unit) {\n  for (var 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\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    var _lookup2 = _lookup(timestamps, time),\n        lo = _lookup2.lo,\n        hi = _lookup2.hi;\n\n    var timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\n\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  var adapter = scale._adapter;\n  var first = +adapter.startOf(ticks[0].value, majorUnit);\n  var last = ticks[ticks.length - 1].value;\n  var major, index;\n\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n\n  return ticks;\n}\n\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  var ticks = [];\n  var map = {};\n  var ilen = values.length;\n  var i, value;\n\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n    ticks.push({\n      value: value,\n      major: false\n    });\n  }\n\n  return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nvar TimeScale = /*#__PURE__*/function (_Scale4) {\n  _inherits(TimeScale, _Scale4);\n\n  var _super24 = _createSuper(TimeScale);\n\n  function TimeScale(props) {\n    var _this43;\n\n    _classCallCheck(this, TimeScale);\n\n    _this43 = _super24.call(this, props);\n    _this43._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n    _this43._unit = 'day';\n    _this43._majorUnit = undefined;\n    _this43._offsets = {};\n    _this43._normalized = false;\n    _this43._parseOpts = undefined;\n    return _this43;\n  }\n\n  _createClass(TimeScale, [{\n    key: \"init\",\n    value: function init(scaleOpts) {\n      var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var time = scaleOpts.time || (scaleOpts.time = {});\n      var adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n      adapter.init(opts);\n      mergeIf(time.displayFormats, adapter.formats());\n      this._parseOpts = {\n        parser: time.parser,\n        round: time.round,\n        isoWeekday: time.isoWeekday\n      };\n\n      _get(_getPrototypeOf(TimeScale.prototype), \"init\", this).call(this, scaleOpts);\n\n      this._normalized = opts.normalized;\n    }\n  }, {\n    key: \"parse\",\n    value: function parse(raw, index) {\n      if (raw === undefined) {\n        return null;\n      }\n\n      return _parse(this, raw);\n    }\n  }, {\n    key: \"beforeLayout\",\n    value: function beforeLayout() {\n      _get(_getPrototypeOf(TimeScale.prototype), \"beforeLayout\", this).call(this);\n\n      this._cache = {\n        data: [],\n        labels: [],\n        all: []\n      };\n    }\n  }, {\n    key: \"determineDataLimits\",\n    value: function determineDataLimits() {\n      var options = this.options;\n      var adapter = this._adapter;\n      var unit = options.time.unit || 'day';\n\n      var _this$getUserBounds5 = this.getUserBounds(),\n          min = _this$getUserBounds5.min,\n          max = _this$getUserBounds5.max,\n          minDefined = _this$getUserBounds5.minDefined,\n          maxDefined = _this$getUserBounds5.maxDefined;\n\n      function _applyBounds(bounds) {\n        if (!minDefined && !isNaN(bounds.min)) {\n          min = Math.min(min, bounds.min);\n        }\n\n        if (!maxDefined && !isNaN(bounds.max)) {\n          max = Math.max(max, bounds.max);\n        }\n      }\n\n      if (!minDefined || !maxDefined) {\n        _applyBounds(this._getLabelBounds());\n\n        if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n          _applyBounds(this.getMinMax(false));\n        }\n      }\n\n      min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n      max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n      this.min = Math.min(min, max - 1);\n      this.max = Math.max(min + 1, max);\n    }\n  }, {\n    key: \"_getLabelBounds\",\n    value: function _getLabelBounds() {\n      var arr = this.getLabelTimestamps();\n      var min = Number.POSITIVE_INFINITY;\n      var max = Number.NEGATIVE_INFINITY;\n\n      if (arr.length) {\n        min = arr[0];\n        max = arr[arr.length - 1];\n      }\n\n      return {\n        min: min,\n        max: max\n      };\n    }\n  }, {\n    key: \"buildTicks\",\n    value: function buildTicks() {\n      var options = this.options;\n      var timeOpts = options.time;\n      var tickOpts = options.ticks;\n      var 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      var min = this.min;\n      var max = this.max;\n\n      var ticks = _filterBetween(timestamps, min, max);\n\n      this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n      this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : 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    key: \"afterAutoSkip\",\n    value: function afterAutoSkip() {\n      if (this.options.offsetAfterAutoskip) {\n        this.initOffsets(this.ticks.map(function (tick) {\n          return +tick.value;\n        }));\n      }\n    }\n  }, {\n    key: \"initOffsets\",\n    value: function initOffsets() {\n      var timestamps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var start = 0;\n      var end = 0;\n      var first, last;\n\n      if (this.options.offset && timestamps.length) {\n        first = this.getDecimalForValue(timestamps[0]);\n\n        if (timestamps.length === 1) {\n          start = 1 - first;\n        } else {\n          start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n        }\n\n        last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n\n        if (timestamps.length === 1) {\n          end = last;\n        } else {\n          end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n        }\n      }\n\n      var limit = timestamps.length < 3 ? 0.5 : 0.25;\n      start = _limitValue(start, 0, limit);\n      end = _limitValue(end, 0, limit);\n      this._offsets = {\n        start: start,\n        end: end,\n        factor: 1 / (start + 1 + end)\n      };\n    }\n  }, {\n    key: \"_generate\",\n    value: function _generate() {\n      var adapter = this._adapter;\n      var min = this.min;\n      var max = this.max;\n      var options = this.options;\n      var timeOpts = options.time;\n      var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n      var stepSize = valueOrDefault(options.ticks.stepSize, 1);\n      var weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n      var hasWeekday = isNumber(weekday) || weekday === true;\n      var ticks = {};\n      var first = min;\n      var time, count;\n\n      if (hasWeekday) {\n        first = +adapter.startOf(first, 'isoWeek', weekday);\n      }\n\n      first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\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      var timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n\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      return Object.keys(ticks).sort(sorter).map(function (x) {\n        return +x;\n      });\n    }\n  }, {\n    key: \"getLabelForValue\",\n    value: function getLabelForValue(value) {\n      var adapter = this._adapter;\n      var timeOpts = this.options.time;\n\n      if (timeOpts.tooltipFormat) {\n        return adapter.format(value, timeOpts.tooltipFormat);\n      }\n\n      return adapter.format(value, timeOpts.displayFormats.datetime);\n    }\n  }, {\n    key: \"format\",\n    value: function format(value, _format) {\n      var options = this.options;\n      var formats = options.time.displayFormats;\n      var unit = this._unit;\n      var fmt = _format || formats[unit];\n      return this._adapter.format(value, fmt);\n    }\n  }, {\n    key: \"_tickFormatFunction\",\n    value: function _tickFormatFunction(time, index, ticks, format) {\n      var options = this.options;\n      var formatter = options.ticks.callback;\n\n      if (formatter) {\n        return callback(formatter, [time, index, ticks], this);\n      }\n\n      var formats = options.time.displayFormats;\n      var unit = this._unit;\n      var majorUnit = this._majorUnit;\n      var minorFormat = unit && formats[unit];\n      var majorFormat = majorUnit && formats[majorUnit];\n      var tick = ticks[index];\n      var major = majorUnit && majorFormat && tick && tick.major;\n      return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    }\n  }, {\n    key: \"generateTickLabels\",\n    value: function generateTickLabels(ticks) {\n      var 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    key: \"getDecimalForValue\",\n    value: function getDecimalForValue(value) {\n      return value === null ? NaN : (value - this.min) / (this.max - this.min);\n    }\n  }, {\n    key: \"getPixelForValue\",\n    value: function getPixelForValue(value) {\n      var offsets = this._offsets;\n      var pos = this.getDecimalForValue(value);\n      return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n    }\n  }, {\n    key: \"getValueForPixel\",\n    value: function getValueForPixel(pixel) {\n      var offsets = this._offsets;\n      var pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n      return this.min + pos * (this.max - this.min);\n    }\n  }, {\n    key: \"_getLabelSize\",\n    value: function _getLabelSize(label) {\n      var ticksOpts = this.options.ticks;\n      var tickLabelWidth = this.ctx.measureText(label).width;\n      var angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n      var cosRotation = Math.cos(angle);\n      var sinRotation = Math.sin(angle);\n\n      var tickFontSize = this._resolveTickFontOptions(0).size;\n\n      return {\n        w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n        h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n      };\n    }\n  }, {\n    key: \"_getLabelCapacity\",\n    value: function _getLabelCapacity(exampleTime) {\n      var timeOpts = this.options.time;\n      var displayFormats = timeOpts.displayFormats;\n      var format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n\n      var exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n\n      var size = this._getLabelSize(exampleLabel);\n\n      var capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n      return capacity > 0 ? capacity : 1;\n    }\n  }, {\n    key: \"getDataTimestamps\",\n    value: function getDataTimestamps() {\n      var timestamps = this._cache.data || [];\n      var i, ilen;\n\n      if (timestamps.length) {\n        return timestamps;\n      }\n\n      var 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    key: \"getLabelTimestamps\",\n    value: function getLabelTimestamps() {\n      var timestamps = this._cache.labels || [];\n      var i, ilen;\n\n      if (timestamps.length) {\n        return timestamps;\n      }\n\n      var labels = this.getLabels();\n\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    key: \"normalize\",\n    value: function normalize(values) {\n      return _arrayUnique(values.sort(sorter));\n    }\n  }]);\n\n  return TimeScale;\n}(Scale);\n\nTimeScale.id = 'time';\nTimeScale.defaults = {\n  bounds: 'data',\n  adapters: {},\n  time: {\n    parser: false,\n    unit: false,\n    round: false,\n    isoWeekday: false,\n    minUnit: 'millisecond',\n    displayFormats: {}\n  },\n  ticks: {\n    source: 'auto',\n    callback: false,\n    major: {\n      enabled: false\n    }\n  }\n};\n\nfunction interpolate(table, val, reverse) {\n  var lo = 0;\n  var hi = table.length - 1;\n  var prevSource, nextSource, prevTarget, nextTarget;\n\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      var _lookupByKey2 = _lookupByKey(table, 'pos', val);\n\n      lo = _lookupByKey2.lo;\n      hi = _lookupByKey2.hi;\n    }\n\n    var _table$lo = table[lo];\n    prevSource = _table$lo.pos;\n    prevTarget = _table$lo.time;\n    var _table$hi = table[hi];\n    nextSource = _table$hi.pos;\n    nextTarget = _table$hi.time;\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      var _lookupByKey3 = _lookupByKey(table, 'time', val);\n\n      lo = _lookupByKey3.lo;\n      hi = _lookupByKey3.hi;\n    }\n\n    var _table$lo2 = table[lo];\n    prevSource = _table$lo2.time;\n    prevTarget = _table$lo2.pos;\n    var _table$hi2 = table[hi];\n    nextSource = _table$hi2.time;\n    nextTarget = _table$hi2.pos;\n  }\n\n  var span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nvar TimeSeriesScale = /*#__PURE__*/function (_TimeScale) {\n  _inherits(TimeSeriesScale, _TimeScale);\n\n  var _super25 = _createSuper(TimeSeriesScale);\n\n  function TimeSeriesScale(props) {\n    var _this44;\n\n    _classCallCheck(this, TimeSeriesScale);\n\n    _this44 = _super25.call(this, props);\n    _this44._table = [];\n    _this44._minPos = undefined;\n    _this44._tableRange = undefined;\n    return _this44;\n  }\n\n  _createClass(TimeSeriesScale, [{\n    key: \"initOffsets\",\n    value: function initOffsets() {\n      var timestamps = this._getTimestampsForTable();\n\n      var table = this._table = this.buildLookupTable(timestamps);\n      this._minPos = interpolate(table, this.min);\n      this._tableRange = interpolate(table, this.max) - this._minPos;\n\n      _get(_getPrototypeOf(TimeSeriesScale.prototype), \"initOffsets\", this).call(this, timestamps);\n    }\n  }, {\n    key: \"buildLookupTable\",\n    value: function buildLookupTable(timestamps) {\n      var min = this.min,\n          max = this.max;\n      var items = [];\n      var table = [];\n      var i, ilen, prev, curr, next;\n\n      for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n        curr = timestamps[i];\n\n        if (curr >= min && curr <= max) {\n          items.push(curr);\n        }\n      }\n\n      if (items.length < 2) {\n        return [{\n          time: min,\n          pos: 0\n        }, {\n          time: max,\n          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        if (Math.round((next + prev) / 2) !== curr) {\n          table.push({\n            time: curr,\n            pos: i / (ilen - 1)\n          });\n        }\n      }\n\n      return table;\n    }\n  }, {\n    key: \"_generate\",\n    value: function _generate() {\n      var min = this.min;\n      var max = this.max;\n\n      var timestamps = _get(_getPrototypeOf(TimeSeriesScale.prototype), \"getDataTimestamps\", this).call(this);\n\n      if (!timestamps.includes(min) || !timestamps.length) {\n        timestamps.splice(0, 0, min);\n      }\n\n      if (!timestamps.includes(max) || timestamps.length === 1) {\n        timestamps.push(max);\n      }\n\n      return timestamps.sort(function (a, b) {\n        return a - b;\n      });\n    }\n  }, {\n    key: \"_getTimestampsForTable\",\n    value: function _getTimestampsForTable() {\n      var timestamps = this._cache.all || [];\n\n      if (timestamps.length) {\n        return timestamps;\n      }\n\n      var data = this.getDataTimestamps();\n      var label = this.getLabelTimestamps();\n\n      if (data.length && label.length) {\n        timestamps = this.normalize(data.concat(label));\n      } else {\n        timestamps = data.length ? data : label;\n      }\n\n      timestamps = this._cache.all = timestamps;\n      return timestamps;\n    }\n  }, {\n    key: \"getDecimalForValue\",\n    value: function getDecimalForValue(value) {\n      return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n    }\n  }, {\n    key: \"getValueForPixel\",\n    value: function getValueForPixel(pixel) {\n      var offsets = this._offsets;\n      var decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n      return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n    }\n  }]);\n\n  return TimeSeriesScale;\n}(TimeScale);\n\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\nvar scales = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  CategoryScale: CategoryScale,\n  LinearScale: LinearScale,\n  LogarithmicScale: LogarithmicScale,\n  RadialLinearScale: RadialLinearScale,\n  TimeScale: TimeScale,\n  TimeSeriesScale: TimeSeriesScale\n});\nvar registerables = [controllers, elements, plugins, scales];\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };","export var pad = function pad(number, length) {\n  if (length === void 0) {\n    length = 2;\n  }\n\n  return (\"000\" + number).slice(length * -1);\n};\nexport var int = function int(bool) {\n  return bool === true ? 1 : 0;\n};\nexport function debounce(fn, wait) {\n  var t;\n  return function () {\n    var _this = this;\n\n    var args = arguments;\n    clearTimeout(t);\n    t = setTimeout(function () {\n      return fn.apply(_this, args);\n    }, wait);\n  };\n}\nexport var arrayify = function arrayify(obj) {\n  return obj instanceof Array ? obj : [obj];\n};","import { tokenRegex, revFormat, formats } from \"./formatting\";\nimport { defaults } from \"../types/options\";\nimport { english } from \"../l10n/default\";\nexport var createDateFormatter = function createDateFormatter(_a) {\n  var _b = _a.config,\n      config = _b === void 0 ? defaults : _b,\n      _c = _a.l10n,\n      l10n = _c === void 0 ? english : _c,\n      _d = _a.isMobile,\n      isMobile = _d === void 0 ? false : _d;\n  return function (dateObj, frmt, overrideLocale) {\n    var locale = overrideLocale || l10n;\n\n    if (config.formatDate !== undefined && !isMobile) {\n      return config.formatDate(dateObj, frmt, locale);\n    }\n\n    return frmt.split(\"\").map(function (c, i, arr) {\n      return formats[c] && arr[i - 1] !== \"\\\\\" ? formats[c](dateObj, locale, config) : c !== \"\\\\\" ? c : \"\";\n    }).join(\"\");\n  };\n};\nexport var createDateParser = function createDateParser(_a) {\n  var _b = _a.config,\n      config = _b === void 0 ? defaults : _b,\n      _c = _a.l10n,\n      l10n = _c === void 0 ? english : _c;\n  return function (date, givenFormat, timeless, customLocale) {\n    if (date !== 0 && !date) return undefined;\n    var locale = customLocale || l10n;\n    var parsedDate;\n    var dateOrig = date;\n    if (date instanceof Date) parsedDate = new Date(date.getTime());else if (typeof date !== \"string\" && date.toFixed !== undefined) parsedDate = new Date(date);else if (typeof date === \"string\") {\n      var format = givenFormat || (config || defaults).dateFormat;\n      var datestr = String(date).trim();\n\n      if (datestr === \"today\") {\n        parsedDate = new Date();\n        timeless = true;\n      } else if (config && config.parseDate) {\n        parsedDate = config.parseDate(date, format);\n      } else if (/Z$/.test(datestr) || /GMT$/.test(datestr)) {\n        parsedDate = new Date(date);\n      } else {\n        var matched = void 0,\n            ops = [];\n\n        for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n          var token = format[i];\n          var isBackSlash = token === \"\\\\\";\n          var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n\n          if (tokenRegex[token] && !escaped) {\n            regexStr += tokenRegex[token];\n            var match = new RegExp(regexStr).exec(date);\n\n            if (match && (matched = true)) {\n              ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n                fn: revFormat[token],\n                val: match[++matchIndex]\n              });\n            }\n          } else if (!isBackSlash) regexStr += \".\";\n        }\n\n        parsedDate = !config || !config.noCalendar ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0) : new Date(new Date().setHours(0, 0, 0, 0));\n        ops.forEach(function (_a) {\n          var fn = _a.fn,\n              val = _a.val;\n          return parsedDate = fn(parsedDate, val, locale) || parsedDate;\n        });\n        parsedDate = matched ? parsedDate : undefined;\n      }\n    }\n\n    if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n      config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n      return undefined;\n    }\n\n    if (timeless === true) parsedDate.setHours(0, 0, 0, 0);\n    return parsedDate;\n  };\n};\nexport function compareDates(date1, date2, timeless) {\n  if (timeless === void 0) {\n    timeless = true;\n  }\n\n  if (timeless !== false) {\n    return new Date(date1.getTime()).setHours(0, 0, 0, 0) - new Date(date2.getTime()).setHours(0, 0, 0, 0);\n  }\n\n  return date1.getTime() - date2.getTime();\n}\nexport function compareTimes(date1, date2) {\n  return 3600 * (date1.getHours() - date2.getHours()) + 60 * (date1.getMinutes() - date2.getMinutes()) + date1.getSeconds() - date2.getSeconds();\n}\nexport var isBetween = function isBetween(ts, ts1, ts2) {\n  return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n};\nexport var calculateSecondsSinceMidnight = function calculateSecondsSinceMidnight(hours, minutes, seconds) {\n  return hours * 3600 + minutes * 60 + seconds;\n};\nexport var parseSeconds = function parseSeconds(secondsSinceMidnight) {\n  var hours = Math.floor(secondsSinceMidnight / 3600),\n      minutes = (secondsSinceMidnight - hours * 3600) / 60;\n  return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60];\n};\nexport var duration = {\n  DAY: 86400000\n};\nexport function getDefaultHours(config) {\n  var hours = config.defaultHour;\n  var minutes = config.defaultMinute;\n  var seconds = config.defaultSeconds;\n\n  if (config.minDate !== undefined) {\n    var minHour = config.minDate.getHours();\n    var minMinutes = config.minDate.getMinutes();\n    var minSeconds = config.minDate.getSeconds();\n\n    if (hours < minHour) {\n      hours = minHour;\n    }\n\n    if (hours === minHour && minutes < minMinutes) {\n      minutes = minMinutes;\n    }\n\n    if (hours === minHour && minutes === minMinutes && seconds < minSeconds) seconds = config.minDate.getSeconds();\n  }\n\n  if (config.maxDate !== undefined) {\n    var maxHr = config.maxDate.getHours();\n    var maxMinutes = config.maxDate.getMinutes();\n    hours = Math.min(hours, maxHr);\n    if (hours === maxHr) minutes = Math.min(maxMinutes, minutes);\n    if (hours === maxHr && minutes === maxMinutes) seconds = config.maxDate.getSeconds();\n  }\n\n  return {\n    hours: hours,\n    minutes: minutes,\n    seconds: seconds\n  };\n}","define(function () {\n  \"use strict\";\n\n  return function isFunction(obj) {\n    // Support: Chrome <=57, Firefox <=52\n    // In some browsers, typeof returns \"function\" for HTML <object> elements\n    // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n    // We don't want to classify *any* DOM node as a function.\n    return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n});","define(function () {\n  \"use strict\";\n\n  return window.document;\n});","define([\"./selector-sizzle\"], function () {\n  \"use strict\";\n});","function _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { m as mergeProps, g as guid, i as isArraysEqual, T as Theme, a as mapHash, B as BaseComponent, V as ViewContextType, C as ContentContainer, b as buildViewClassNames, c as greatestDurationDenominator, d as createDuration, e as BASE_OPTION_DEFAULTS, f as arrayToHash, h as filterHash, j as buildEventSourceRefiners, p as parseEventSource, k as formatWithOrdinals, u as unpromisify, l as buildRangeApiWithTimeZone, n as identity, r as requestJson, s as subtractDurations, o as intersectRanges, q as startOfDay, t as addDays, v as hashValuesToArray, w as buildEventApis, D as DelayedRunner, x as createFormatter, y as diffWholeDays, z as memoize, A as memoizeObjArg, E as isPropsEqual, F as Emitter, G as getInitialDate, H as rangeContainsMarker, I as createEmptyEventStore, J as reduceCurrentDate, K as reduceEventStore, L as rezoneEventStoreDates, M as mergeRawOptions, N as BASE_OPTION_REFINERS, O as CALENDAR_LISTENER_REFINERS, P as CALENDAR_OPTION_REFINERS, Q as COMPLEX_OPTION_COMPARATORS, R as VIEW_OPTION_REFINERS, S as DateEnv, U as DateProfileGenerator, W as createEventUi, X as parseBusinessHours, Y as setRef, Z as Interaction, _ as getElSeg, $ as elementClosest, a0 as EventImpl, a1 as listenBySelector, a2 as listenToHoverBySelector, a3 as PureComponent, a4 as buildViewContext, a5 as getUniqueDomId, a6 as parseInteractionSettings, a7 as interactionSettingsStore, a8 as getNow, a9 as CalendarImpl, aa as flushSync, ab as CalendarRoot, ac as RenderId, ad as ensureElHasStyles, ae as applyStyleProp, af as sliceEventStore } from './internal-common.js';\nexport { ag as JsonRequestError } from './internal-common.js';\nimport { createElement, createRef, Fragment, render } from 'preact';\nimport 'preact/compat';\nvar globalLocales = [];\nvar MINIMAL_RAW_EN_LOCALE = {\n  code: 'en',\n  week: {\n    dow: 0,\n    doy: 4 // 4 days need to be within the year to be considered the first week\n\n  },\n  direction: 'ltr',\n  buttonText: {\n    prev: 'prev',\n    next: 'next',\n    prevYear: 'prev year',\n    nextYear: 'next year',\n    year: 'year',\n    today: 'today',\n    month: 'month',\n    week: 'week',\n    day: 'day',\n    list: 'list'\n  },\n  weekText: 'W',\n  weekTextLong: 'Week',\n  closeHint: 'Close',\n  timeHint: 'Time',\n  eventHint: 'Event',\n  allDayText: 'all-day',\n  moreLinkText: 'more',\n  noEventsText: 'No events to display'\n};\nvar RAW_EN_LOCALE = Object.assign(Object.assign({}, MINIMAL_RAW_EN_LOCALE), {\n  // Includes things we don't want other locales to inherit,\n  // things that derive from other translatable strings.\n  buttonHints: {\n    prev: 'Previous $0',\n    next: 'Next $0',\n    today: function today(buttonText, unit) {\n      return unit === 'day' ? 'Today' : \"This \".concat(buttonText);\n    }\n  },\n  viewHint: '$0 view',\n  navLinkHint: 'Go to $0',\n  moreLinkHint: function moreLinkHint(eventCnt) {\n    return \"Show \".concat(eventCnt, \" more event\").concat(eventCnt === 1 ? '' : 's');\n  }\n});\n\nfunction organizeRawLocales(explicitRawLocales) {\n  var defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';\n  var allRawLocales = globalLocales.concat(explicitRawLocales);\n  var rawLocaleMap = {\n    en: RAW_EN_LOCALE\n  };\n\n  var _iterator = _createForOfIteratorHelper(allRawLocales),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var rawLocale = _step.value;\n      rawLocaleMap[rawLocale.code] = rawLocale;\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  return {\n    map: rawLocaleMap,\n    defaultCode: defaultCode\n  };\n}\n\nfunction buildLocale(inputSingular, available) {\n  if (_typeof(inputSingular) === 'object' && !Array.isArray(inputSingular)) {\n    return parseLocale(inputSingular.code, [inputSingular.code], inputSingular);\n  }\n\n  return queryLocale(inputSingular, available);\n}\n\nfunction queryLocale(codeArg, available) {\n  var codes = [].concat(codeArg || []); // will convert to array\n\n  var raw = queryRawLocale(codes, available) || RAW_EN_LOCALE;\n  return parseLocale(codeArg, codes, raw);\n}\n\nfunction queryRawLocale(codes, available) {\n  for (var i = 0; i < codes.length; i += 1) {\n    var parts = codes[i].toLocaleLowerCase().split('-');\n\n    for (var j = parts.length; j > 0; j -= 1) {\n      var simpleId = parts.slice(0, j).join('-');\n\n      if (available[simpleId]) {\n        return available[simpleId];\n      }\n    }\n  }\n\n  return null;\n}\n\nfunction parseLocale(codeArg, codes, raw) {\n  var merged = mergeProps([MINIMAL_RAW_EN_LOCALE, raw], ['buttonText']);\n  delete merged.code; // don't want this part of the options\n\n  var week = merged.week;\n  delete merged.week;\n  return {\n    codeArg: codeArg,\n    codes: codes,\n    week: week,\n    simpleNumberFormat: new Intl.NumberFormat(codeArg),\n    options: merged\n  };\n} // TODO: easier way to add new hooks? need to update a million things\n\n\nfunction createPlugin(input) {\n  return {\n    id: guid(),\n    name: input.name,\n    premiumReleaseDate: input.premiumReleaseDate ? new Date(input.premiumReleaseDate) : undefined,\n    deps: input.deps || [],\n    reducers: input.reducers || [],\n    isLoadingFuncs: input.isLoadingFuncs || [],\n    contextInit: [].concat(input.contextInit || []),\n    eventRefiners: input.eventRefiners || {},\n    eventDefMemberAdders: input.eventDefMemberAdders || [],\n    eventSourceRefiners: input.eventSourceRefiners || {},\n    isDraggableTransformers: input.isDraggableTransformers || [],\n    eventDragMutationMassagers: input.eventDragMutationMassagers || [],\n    eventDefMutationAppliers: input.eventDefMutationAppliers || [],\n    dateSelectionTransformers: input.dateSelectionTransformers || [],\n    datePointTransforms: input.datePointTransforms || [],\n    dateSpanTransforms: input.dateSpanTransforms || [],\n    views: input.views || {},\n    viewPropsTransformers: input.viewPropsTransformers || [],\n    isPropsValid: input.isPropsValid || null,\n    externalDefTransforms: input.externalDefTransforms || [],\n    viewContainerAppends: input.viewContainerAppends || [],\n    eventDropTransformers: input.eventDropTransformers || [],\n    componentInteractions: input.componentInteractions || [],\n    calendarInteractions: input.calendarInteractions || [],\n    themeClasses: input.themeClasses || {},\n    eventSourceDefs: input.eventSourceDefs || [],\n    cmdFormatter: input.cmdFormatter,\n    recurringTypes: input.recurringTypes || [],\n    namedTimeZonedImpl: input.namedTimeZonedImpl,\n    initialView: input.initialView || '',\n    elementDraggingImpl: input.elementDraggingImpl,\n    optionChangeHandlers: input.optionChangeHandlers || {},\n    scrollGridImpl: input.scrollGridImpl || null,\n    listenerRefiners: input.listenerRefiners || {},\n    optionRefiners: input.optionRefiners || {},\n    propSetHandlers: input.propSetHandlers || {}\n  };\n}\n\nfunction buildPluginHooks(pluginDefs, globalDefs) {\n  var currentPluginIds = {};\n  var hooks = {\n    premiumReleaseDate: undefined,\n    reducers: [],\n    isLoadingFuncs: [],\n    contextInit: [],\n    eventRefiners: {},\n    eventDefMemberAdders: [],\n    eventSourceRefiners: {},\n    isDraggableTransformers: [],\n    eventDragMutationMassagers: [],\n    eventDefMutationAppliers: [],\n    dateSelectionTransformers: [],\n    datePointTransforms: [],\n    dateSpanTransforms: [],\n    views: {},\n    viewPropsTransformers: [],\n    isPropsValid: null,\n    externalDefTransforms: [],\n    viewContainerAppends: [],\n    eventDropTransformers: [],\n    componentInteractions: [],\n    calendarInteractions: [],\n    themeClasses: {},\n    eventSourceDefs: [],\n    cmdFormatter: null,\n    recurringTypes: [],\n    namedTimeZonedImpl: null,\n    initialView: '',\n    elementDraggingImpl: null,\n    optionChangeHandlers: {},\n    scrollGridImpl: null,\n    listenerRefiners: {},\n    optionRefiners: {},\n    propSetHandlers: {}\n  };\n\n  function addDefs(defs) {\n    var _iterator2 = _createForOfIteratorHelper(defs),\n        _step2;\n\n    try {\n      for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n        var def = _step2.value;\n        var pluginName = def.name;\n        var currentId = currentPluginIds[pluginName];\n\n        if (currentId === undefined) {\n          currentPluginIds[pluginName] = def.id;\n          addDefs(def.deps);\n          hooks = combineHooks(hooks, def);\n        } else if (currentId !== def.id) {\n          // different ID than the one already added\n          console.warn(\"Duplicate plugin '\".concat(pluginName, \"'\"));\n        }\n      }\n    } catch (err) {\n      _iterator2.e(err);\n    } finally {\n      _iterator2.f();\n    }\n  }\n\n  if (pluginDefs) {\n    addDefs(pluginDefs);\n  }\n\n  addDefs(globalDefs);\n  return hooks;\n}\n\nfunction buildBuildPluginHooks() {\n  var currentOverrideDefs = [];\n  var currentGlobalDefs = [];\n  var currentHooks;\n  return function (overrideDefs, globalDefs) {\n    if (!currentHooks || !isArraysEqual(overrideDefs, currentOverrideDefs) || !isArraysEqual(globalDefs, currentGlobalDefs)) {\n      currentHooks = buildPluginHooks(overrideDefs, globalDefs);\n    }\n\n    currentOverrideDefs = overrideDefs;\n    currentGlobalDefs = globalDefs;\n    return currentHooks;\n  };\n}\n\nfunction combineHooks(hooks0, hooks1) {\n  return {\n    premiumReleaseDate: compareOptionalDates(hooks0.premiumReleaseDate, hooks1.premiumReleaseDate),\n    reducers: hooks0.reducers.concat(hooks1.reducers),\n    isLoadingFuncs: hooks0.isLoadingFuncs.concat(hooks1.isLoadingFuncs),\n    contextInit: hooks0.contextInit.concat(hooks1.contextInit),\n    eventRefiners: Object.assign(Object.assign({}, hooks0.eventRefiners), hooks1.eventRefiners),\n    eventDefMemberAdders: hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),\n    eventSourceRefiners: Object.assign(Object.assign({}, hooks0.eventSourceRefiners), hooks1.eventSourceRefiners),\n    isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),\n    eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),\n    eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),\n    dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),\n    datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),\n    dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),\n    views: Object.assign(Object.assign({}, hooks0.views), hooks1.views),\n    viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),\n    isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,\n    externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),\n    viewContainerAppends: hooks0.viewContainerAppends.concat(hooks1.viewContainerAppends),\n    eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),\n    calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),\n    componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),\n    themeClasses: Object.assign(Object.assign({}, hooks0.themeClasses), hooks1.themeClasses),\n    eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),\n    cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,\n    recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),\n    namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,\n    initialView: hooks0.initialView || hooks1.initialView,\n    elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,\n    optionChangeHandlers: Object.assign(Object.assign({}, hooks0.optionChangeHandlers), hooks1.optionChangeHandlers),\n    scrollGridImpl: hooks1.scrollGridImpl || hooks0.scrollGridImpl,\n    listenerRefiners: Object.assign(Object.assign({}, hooks0.listenerRefiners), hooks1.listenerRefiners),\n    optionRefiners: Object.assign(Object.assign({}, hooks0.optionRefiners), hooks1.optionRefiners),\n    propSetHandlers: Object.assign(Object.assign({}, hooks0.propSetHandlers), hooks1.propSetHandlers)\n  };\n}\n\nfunction compareOptionalDates(date0, date1) {\n  if (date0 === undefined) {\n    return date1;\n  }\n\n  if (date1 === undefined) {\n    return date0;\n  }\n\n  return new Date(Math.max(date0.valueOf(), date1.valueOf()));\n}\n\nvar StandardTheme = /*#__PURE__*/function (_Theme) {\n  _inherits(StandardTheme, _Theme);\n\n  var _super = _createSuper(StandardTheme);\n\n  function StandardTheme() {\n    _classCallCheck(this, StandardTheme);\n\n    return _super.apply(this, arguments);\n  }\n\n  return StandardTheme;\n}(Theme);\n\nStandardTheme.prototype.classes = {\n  root: 'fc-theme-standard',\n  tableCellShaded: 'fc-cell-shaded',\n  buttonGroup: 'fc-button-group',\n  button: 'fc-button fc-button-primary',\n  buttonActive: 'fc-button-active'\n};\nStandardTheme.prototype.baseIconClass = 'fc-icon';\nStandardTheme.prototype.iconClasses = {\n  close: 'fc-icon-x',\n  prev: 'fc-icon-chevron-left',\n  next: 'fc-icon-chevron-right',\n  prevYear: 'fc-icon-chevrons-left',\n  nextYear: 'fc-icon-chevrons-right'\n};\nStandardTheme.prototype.rtlIconClasses = {\n  prev: 'fc-icon-chevron-right',\n  next: 'fc-icon-chevron-left',\n  prevYear: 'fc-icon-chevrons-right',\n  nextYear: 'fc-icon-chevrons-left'\n};\nStandardTheme.prototype.iconOverrideOption = 'buttonIcons'; // TODO: make TS-friendly\n\nStandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';\nStandardTheme.prototype.iconOverridePrefix = 'fc-icon-';\n\nfunction compileViewDefs(defaultConfigs, overrideConfigs) {\n  var hash = {};\n  var viewType;\n\n  for (viewType in defaultConfigs) {\n    ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n  }\n\n  for (viewType in overrideConfigs) {\n    ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n  }\n\n  return hash;\n}\n\nfunction ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs) {\n  if (hash[viewType]) {\n    return hash[viewType];\n  }\n\n  var viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs);\n\n  if (viewDef) {\n    hash[viewType] = viewDef;\n  }\n\n  return viewDef;\n}\n\nfunction buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) {\n  var defaultConfig = defaultConfigs[viewType];\n  var overrideConfig = overrideConfigs[viewType];\n\n  var queryProp = function queryProp(name) {\n    return defaultConfig && defaultConfig[name] !== null ? defaultConfig[name] : overrideConfig && overrideConfig[name] !== null ? overrideConfig[name] : null;\n  };\n\n  var theComponent = queryProp('component');\n  var superType = queryProp('superType');\n  var superDef = null;\n\n  if (superType) {\n    if (superType === viewType) {\n      throw new Error('Can\\'t have a custom view type that references itself');\n    }\n\n    superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs);\n  }\n\n  if (!theComponent && superDef) {\n    theComponent = superDef.component;\n  }\n\n  if (!theComponent) {\n    return null; // don't throw a warning, might be settings for a single-unit view\n  }\n\n  return {\n    type: viewType,\n    component: theComponent,\n    defaults: Object.assign(Object.assign({}, superDef ? superDef.defaults : {}), defaultConfig ? defaultConfig.rawOptions : {}),\n    overrides: Object.assign(Object.assign({}, superDef ? superDef.overrides : {}), overrideConfig ? overrideConfig.rawOptions : {})\n  };\n}\n\nfunction parseViewConfigs(inputs) {\n  return mapHash(inputs, parseViewConfig);\n}\n\nfunction parseViewConfig(input) {\n  var rawOptions = typeof input === 'function' ? {\n    component: input\n  } : input;\n  var component = rawOptions.component;\n\n  if (rawOptions.content) {\n    // TODO: remove content/classNames/didMount/etc from options?\n    component = createViewHookComponent(rawOptions);\n  } else if (component && !(component.prototype instanceof BaseComponent)) {\n    // WHY?: people were using `component` property for `content`\n    // TODO: converge on one setting name\n    component = createViewHookComponent(Object.assign(Object.assign({}, rawOptions), {\n      content: component\n    }));\n  }\n\n  return {\n    superType: rawOptions.type,\n    component: component,\n    rawOptions: rawOptions // includes type and component too :(\n\n  };\n}\n\nfunction createViewHookComponent(options) {\n  return function (viewProps) {\n    return createElement(ViewContextType.Consumer, null, function (context) {\n      return createElement(ContentContainer, {\n        elTag: \"div\",\n        elClasses: buildViewClassNames(context.viewSpec),\n        renderProps: Object.assign(Object.assign({}, viewProps), {\n          nextDayThreshold: context.options.nextDayThreshold\n        }),\n        generatorName: undefined,\n        customGenerator: options.content,\n        classNameGenerator: options.classNames,\n        didMount: options.didMount,\n        willUnmount: options.willUnmount\n      });\n    });\n  };\n}\n\nfunction buildViewSpecs(defaultInputs, optionOverrides, dynamicOptionOverrides, localeDefaults) {\n  var defaultConfigs = parseViewConfigs(defaultInputs);\n  var overrideConfigs = parseViewConfigs(optionOverrides.views);\n  var viewDefs = compileViewDefs(defaultConfigs, overrideConfigs);\n  return mapHash(viewDefs, function (viewDef) {\n    return buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults);\n  });\n}\n\nfunction buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults) {\n  var durationInput = viewDef.overrides.duration || viewDef.defaults.duration || dynamicOptionOverrides.duration || optionOverrides.duration;\n  var duration = null;\n  var durationUnit = '';\n  var singleUnit = '';\n  var singleUnitOverrides = {};\n\n  if (durationInput) {\n    duration = createDurationCached(durationInput);\n\n    if (duration) {\n      // valid?\n      var denom = greatestDurationDenominator(duration);\n      durationUnit = denom.unit;\n\n      if (denom.value === 1) {\n        singleUnit = durationUnit;\n        singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].rawOptions : {};\n      }\n    }\n  }\n\n  var queryButtonText = function queryButtonText(optionsSubset) {\n    var buttonTextMap = optionsSubset.buttonText || {};\n    var buttonTextKey = viewDef.defaults.buttonTextKey;\n\n    if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) {\n      return buttonTextMap[buttonTextKey];\n    }\n\n    if (buttonTextMap[viewDef.type] != null) {\n      return buttonTextMap[viewDef.type];\n    }\n\n    if (buttonTextMap[singleUnit] != null) {\n      return buttonTextMap[singleUnit];\n    }\n\n    return null;\n  };\n\n  var queryButtonTitle = function queryButtonTitle(optionsSubset) {\n    var buttonHints = optionsSubset.buttonHints || {};\n    var buttonKey = viewDef.defaults.buttonTextKey; // use same key as text\n\n    if (buttonKey != null && buttonHints[buttonKey] != null) {\n      return buttonHints[buttonKey];\n    }\n\n    if (buttonHints[viewDef.type] != null) {\n      return buttonHints[viewDef.type];\n    }\n\n    if (buttonHints[singleUnit] != null) {\n      return buttonHints[singleUnit];\n    }\n\n    return null;\n  };\n\n  return {\n    type: viewDef.type,\n    component: viewDef.component,\n    duration: duration,\n    durationUnit: durationUnit,\n    singleUnit: singleUnit,\n    optionDefaults: viewDef.defaults,\n    optionOverrides: Object.assign(Object.assign({}, singleUnitOverrides), viewDef.overrides),\n    buttonTextOverride: queryButtonText(dynamicOptionOverrides) || queryButtonText(optionOverrides) || // constructor-specified buttonText lookup hash takes precedence\n    viewDef.overrides.buttonText,\n    buttonTextDefault: queryButtonText(localeDefaults) || viewDef.defaults.buttonText || queryButtonText(BASE_OPTION_DEFAULTS) || viewDef.type,\n    // not DRY\n    buttonTitleOverride: queryButtonTitle(dynamicOptionOverrides) || queryButtonTitle(optionOverrides) || viewDef.overrides.buttonHint,\n    buttonTitleDefault: queryButtonTitle(localeDefaults) || viewDef.defaults.buttonHint || queryButtonTitle(BASE_OPTION_DEFAULTS) // will eventually fall back to buttonText\n\n  };\n} // hack to get memoization working\n\n\nvar durationInputMap = {};\n\nfunction createDurationCached(durationInput) {\n  var json = JSON.stringify(durationInput);\n  var res = durationInputMap[json];\n\n  if (res === undefined) {\n    res = createDuration(durationInput);\n    durationInputMap[json] = res;\n  }\n\n  return res;\n}\n\nfunction reduceViewType(viewType, action) {\n  switch (action.type) {\n    case 'CHANGE_VIEW_TYPE':\n      viewType = action.viewType;\n  }\n\n  return viewType;\n}\n\nfunction reduceDynamicOptionOverrides(dynamicOptionOverrides, action) {\n  switch (action.type) {\n    case 'SET_OPTION':\n      return Object.assign(Object.assign({}, dynamicOptionOverrides), _defineProperty({}, action.optionName, action.rawOptionValue));\n\n    default:\n      return dynamicOptionOverrides;\n  }\n}\n\nfunction reduceDateProfile(currentDateProfile, action, currentDate, dateProfileGenerator) {\n  var dp;\n\n  switch (action.type) {\n    case 'CHANGE_VIEW_TYPE':\n      return dateProfileGenerator.build(action.dateMarker || currentDate);\n\n    case 'CHANGE_DATE':\n      return dateProfileGenerator.build(action.dateMarker);\n\n    case 'PREV':\n      dp = dateProfileGenerator.buildPrev(currentDateProfile, currentDate);\n\n      if (dp.isValid) {\n        return dp;\n      }\n\n      break;\n\n    case 'NEXT':\n      dp = dateProfileGenerator.buildNext(currentDateProfile, currentDate);\n\n      if (dp.isValid) {\n        return dp;\n      }\n\n      break;\n  }\n\n  return currentDateProfile;\n}\n\nfunction initEventSources(calendarOptions, dateProfile, context) {\n  var activeRange = dateProfile ? dateProfile.activeRange : null;\n  return addSources({}, parseInitialSources(calendarOptions, context), activeRange, context);\n}\n\nfunction reduceEventSources(eventSources, action, dateProfile, context) {\n  var activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?\n\n  switch (action.type) {\n    case 'ADD_EVENT_SOURCES':\n      // already parsed\n      return addSources(eventSources, action.sources, activeRange, context);\n\n    case 'REMOVE_EVENT_SOURCE':\n      return removeSource(eventSources, action.sourceId);\n\n    case 'PREV': // TODO: how do we track all actions that affect dateProfile :(\n\n    case 'NEXT':\n    case 'CHANGE_DATE':\n    case 'CHANGE_VIEW_TYPE':\n      if (dateProfile) {\n        return fetchDirtySources(eventSources, activeRange, context);\n      }\n\n      return eventSources;\n\n    case 'FETCH_EVENT_SOURCES':\n      return fetchSourcesByIds(eventSources, action.sourceIds ? // why no type?\n      arrayToHash(action.sourceIds) : excludeStaticSources(eventSources, context), activeRange, action.isRefetch || false, context);\n\n    case 'RECEIVE_EVENTS':\n    case 'RECEIVE_EVENT_ERROR':\n      return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);\n\n    case 'REMOVE_ALL_EVENT_SOURCES':\n      return {};\n\n    default:\n      return eventSources;\n  }\n}\n\nfunction reduceEventSourcesNewTimeZone(eventSources, dateProfile, context) {\n  var activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?\n\n  return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, true, context);\n}\n\nfunction computeEventSourcesLoading(eventSources) {\n  for (var sourceId in eventSources) {\n    if (eventSources[sourceId].isFetching) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction addSources(eventSourceHash, sources, fetchRange, context) {\n  var hash = {};\n\n  var _iterator3 = _createForOfIteratorHelper(sources),\n      _step3;\n\n  try {\n    for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n      var source = _step3.value;\n      hash[source.sourceId] = source;\n    }\n  } catch (err) {\n    _iterator3.e(err);\n  } finally {\n    _iterator3.f();\n  }\n\n  if (fetchRange) {\n    hash = fetchDirtySources(hash, fetchRange, context);\n  }\n\n  return Object.assign(Object.assign({}, eventSourceHash), hash);\n}\n\nfunction removeSource(eventSourceHash, sourceId) {\n  return filterHash(eventSourceHash, function (eventSource) {\n    return eventSource.sourceId !== sourceId;\n  });\n}\n\nfunction fetchDirtySources(sourceHash, fetchRange, context) {\n  return fetchSourcesByIds(sourceHash, filterHash(sourceHash, function (eventSource) {\n    return isSourceDirty(eventSource, fetchRange, context);\n  }), fetchRange, false, context);\n}\n\nfunction isSourceDirty(eventSource, fetchRange, context) {\n  if (!doesSourceNeedRange(eventSource, context)) {\n    return !eventSource.latestFetchId;\n  }\n\n  return !context.options.lazyFetching || !eventSource.fetchRange || eventSource.isFetching || // always cancel outdated in-progress fetches\n  fetchRange.start < eventSource.fetchRange.start || fetchRange.end > eventSource.fetchRange.end;\n}\n\nfunction fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, isRefetch, context) {\n  var nextSources = {};\n\n  for (var sourceId in prevSources) {\n    var source = prevSources[sourceId];\n\n    if (sourceIdHash[sourceId]) {\n      nextSources[sourceId] = fetchSource(source, fetchRange, isRefetch, context);\n    } else {\n      nextSources[sourceId] = source;\n    }\n  }\n\n  return nextSources;\n}\n\nfunction fetchSource(eventSource, fetchRange, isRefetch, context) {\n  var options = context.options,\n      calendarApi = context.calendarApi;\n  var sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];\n  var fetchId = guid();\n  sourceDef.fetch({\n    eventSource: eventSource,\n    range: fetchRange,\n    isRefetch: isRefetch,\n    context: context\n  }, function (res) {\n    var rawEvents = res.rawEvents;\n\n    if (options.eventSourceSuccess) {\n      rawEvents = options.eventSourceSuccess.call(calendarApi, rawEvents, res.response) || rawEvents;\n    }\n\n    if (eventSource.success) {\n      rawEvents = eventSource.success.call(calendarApi, rawEvents, res.response) || rawEvents;\n    }\n\n    context.dispatch({\n      type: 'RECEIVE_EVENTS',\n      sourceId: eventSource.sourceId,\n      fetchId: fetchId,\n      fetchRange: fetchRange,\n      rawEvents: rawEvents\n    });\n  }, function (error) {\n    var errorHandled = false;\n\n    if (options.eventSourceFailure) {\n      options.eventSourceFailure.call(calendarApi, error);\n      errorHandled = true;\n    }\n\n    if (eventSource.failure) {\n      eventSource.failure(error);\n      errorHandled = true;\n    }\n\n    if (!errorHandled) {\n      console.warn(error.message, error);\n    }\n\n    context.dispatch({\n      type: 'RECEIVE_EVENT_ERROR',\n      sourceId: eventSource.sourceId,\n      fetchId: fetchId,\n      fetchRange: fetchRange,\n      error: error\n    });\n  });\n  return Object.assign(Object.assign({}, eventSource), {\n    isFetching: true,\n    latestFetchId: fetchId\n  });\n}\n\nfunction receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {\n  var eventSource = sourceHash[sourceId];\n\n  if (eventSource && // not already removed\n  fetchId === eventSource.latestFetchId) {\n    return Object.assign(Object.assign({}, sourceHash), _defineProperty({}, sourceId, Object.assign(Object.assign({}, eventSource), {\n      isFetching: false,\n      fetchRange: fetchRange\n    })));\n  }\n\n  return sourceHash;\n}\n\nfunction excludeStaticSources(eventSources, context) {\n  return filterHash(eventSources, function (eventSource) {\n    return doesSourceNeedRange(eventSource, context);\n  });\n}\n\nfunction parseInitialSources(rawOptions, context) {\n  var refiners = buildEventSourceRefiners(context);\n  var rawSources = [].concat(rawOptions.eventSources || []);\n  var sources = []; // parsed\n\n  if (rawOptions.initialEvents) {\n    rawSources.unshift(rawOptions.initialEvents);\n  }\n\n  if (rawOptions.events) {\n    rawSources.unshift(rawOptions.events);\n  }\n\n  var _iterator4 = _createForOfIteratorHelper(rawSources),\n      _step4;\n\n  try {\n    for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n      var rawSource = _step4.value;\n      var source = parseEventSource(rawSource, context, refiners);\n\n      if (source) {\n        sources.push(source);\n      }\n    }\n  } catch (err) {\n    _iterator4.e(err);\n  } finally {\n    _iterator4.f();\n  }\n\n  return sources;\n}\n\nfunction doesSourceNeedRange(eventSource, context) {\n  var defs = context.pluginHooks.eventSourceDefs;\n  return !defs[eventSource.sourceDefId].ignoreRange;\n}\n\nfunction reduceDateSelection(currentSelection, action) {\n  switch (action.type) {\n    case 'UNSELECT_DATES':\n      return null;\n\n    case 'SELECT_DATES':\n      return action.selection;\n\n    default:\n      return currentSelection;\n  }\n}\n\nfunction reduceSelectedEvent(currentInstanceId, action) {\n  switch (action.type) {\n    case 'UNSELECT_EVENT':\n      return '';\n\n    case 'SELECT_EVENT':\n      return action.eventInstanceId;\n\n    default:\n      return currentInstanceId;\n  }\n}\n\nfunction reduceEventDrag(currentDrag, action) {\n  var newDrag;\n\n  switch (action.type) {\n    case 'UNSET_EVENT_DRAG':\n      return null;\n\n    case 'SET_EVENT_DRAG':\n      newDrag = action.state;\n      return {\n        affectedEvents: newDrag.affectedEvents,\n        mutatedEvents: newDrag.mutatedEvents,\n        isEvent: newDrag.isEvent\n      };\n\n    default:\n      return currentDrag;\n  }\n}\n\nfunction reduceEventResize(currentResize, action) {\n  var newResize;\n\n  switch (action.type) {\n    case 'UNSET_EVENT_RESIZE':\n      return null;\n\n    case 'SET_EVENT_RESIZE':\n      newResize = action.state;\n      return {\n        affectedEvents: newResize.affectedEvents,\n        mutatedEvents: newResize.mutatedEvents,\n        isEvent: newResize.isEvent\n      };\n\n    default:\n      return currentResize;\n  }\n}\n\nfunction parseToolbars(calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {\n  var header = calendarOptions.headerToolbar ? parseToolbar(calendarOptions.headerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;\n  var footer = calendarOptions.footerToolbar ? parseToolbar(calendarOptions.footerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;\n  return {\n    header: header,\n    footer: footer\n  };\n}\n\nfunction parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {\n  var sectionWidgets = {};\n  var viewsWithButtons = [];\n  var hasTitle = false;\n\n  for (var sectionName in sectionStrHash) {\n    var sectionStr = sectionStrHash[sectionName];\n    var sectionRes = parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi);\n    sectionWidgets[sectionName] = sectionRes.widgets;\n    viewsWithButtons.push.apply(viewsWithButtons, _toConsumableArray(sectionRes.viewsWithButtons));\n    hasTitle = hasTitle || sectionRes.hasTitle;\n  }\n\n  return {\n    sectionWidgets: sectionWidgets,\n    viewsWithButtons: viewsWithButtons,\n    hasTitle: hasTitle\n  };\n}\n/*\nBAD: querying icons and text here. should be done at render time\n*/\n\n\nfunction parseSection(sectionStr, calendarOptions, // defaults+overrides, then refined\ncalendarOptionOverrides, // overrides only!, unrefined :(\ntheme, viewSpecs, calendarApi) {\n  var isRtl = calendarOptions.direction === 'rtl';\n  var calendarCustomButtons = calendarOptions.customButtons || {};\n  var calendarButtonTextOverrides = calendarOptionOverrides.buttonText || {};\n  var calendarButtonText = calendarOptions.buttonText || {};\n  var calendarButtonHintOverrides = calendarOptionOverrides.buttonHints || {};\n  var calendarButtonHints = calendarOptions.buttonHints || {};\n  var sectionSubstrs = sectionStr ? sectionStr.split(' ') : [];\n  var viewsWithButtons = [];\n  var hasTitle = false;\n  var widgets = sectionSubstrs.map(function (buttonGroupStr) {\n    return buttonGroupStr.split(',').map(function (buttonName) {\n      if (buttonName === 'title') {\n        hasTitle = true;\n        return {\n          buttonName: buttonName\n        };\n      }\n\n      var customButtonProps;\n      var viewSpec;\n      var buttonClick;\n      var buttonIcon; // only one of these will be set\n\n      var buttonText; // \"\n\n      var buttonHint; // ^ for the title=\"\" attribute, for accessibility\n\n      if (customButtonProps = calendarCustomButtons[buttonName]) {\n        buttonClick = function buttonClick(ev) {\n          if (customButtonProps.click) {\n            customButtonProps.click.call(ev.target, ev, ev.target); // TODO: use Calendar this context?\n          }\n        };\n\n        (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) || (buttonIcon = theme.getIconClass(buttonName, isRtl)) || (buttonText = customButtonProps.text);\n        buttonHint = customButtonProps.hint || customButtonProps.text;\n      } else if (viewSpec = viewSpecs[buttonName]) {\n        viewsWithButtons.push(buttonName);\n\n        buttonClick = function buttonClick() {\n          calendarApi.changeView(buttonName);\n        };\n\n        (buttonText = viewSpec.buttonTextOverride) || (buttonIcon = theme.getIconClass(buttonName, isRtl)) || (buttonText = viewSpec.buttonTextDefault);\n        var textFallback = viewSpec.buttonTextOverride || viewSpec.buttonTextDefault;\n        buttonHint = formatWithOrdinals(viewSpec.buttonTitleOverride || viewSpec.buttonTitleDefault || calendarOptions.viewHint, [textFallback, buttonName], // view-name = buttonName\n        textFallback);\n      } else if (calendarApi[buttonName]) {\n        // a calendarApi method\n        buttonClick = function buttonClick() {\n          calendarApi[buttonName]();\n        };\n\n        (buttonText = calendarButtonTextOverrides[buttonName]) || (buttonIcon = theme.getIconClass(buttonName, isRtl)) || (buttonText = calendarButtonText[buttonName]); // everything else is considered default\n\n        if (buttonName === 'prevYear' || buttonName === 'nextYear') {\n          var prevOrNext = buttonName === 'prevYear' ? 'prev' : 'next';\n          buttonHint = formatWithOrdinals(calendarButtonHintOverrides[prevOrNext] || calendarButtonHints[prevOrNext], [calendarButtonText.year || 'year', 'year'], calendarButtonText[buttonName]);\n        } else {\n          buttonHint = function buttonHint(navUnit) {\n            return formatWithOrdinals(calendarButtonHintOverrides[buttonName] || calendarButtonHints[buttonName], [calendarButtonText[navUnit] || navUnit, navUnit], calendarButtonText[buttonName]);\n          };\n        }\n      }\n\n      return {\n        buttonName: buttonName,\n        buttonClick: buttonClick,\n        buttonIcon: buttonIcon,\n        buttonText: buttonText,\n        buttonHint: buttonHint\n      };\n    });\n  });\n  return {\n    widgets: widgets,\n    viewsWithButtons: viewsWithButtons,\n    hasTitle: hasTitle\n  };\n} // always represents the current view. otherwise, it'd need to change value every time date changes\n\n\nvar ViewImpl = /*#__PURE__*/function () {\n  function ViewImpl(type, getCurrentData, dateEnv) {\n    _classCallCheck(this, ViewImpl);\n\n    this.type = type;\n    this.getCurrentData = getCurrentData;\n    this.dateEnv = dateEnv;\n  }\n\n  _createClass(ViewImpl, [{\n    key: \"calendar\",\n    get: function get() {\n      return this.getCurrentData().calendarApi;\n    }\n  }, {\n    key: \"title\",\n    get: function get() {\n      return this.getCurrentData().viewTitle;\n    }\n  }, {\n    key: \"activeStart\",\n    get: function get() {\n      return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start);\n    }\n  }, {\n    key: \"activeEnd\",\n    get: function get() {\n      return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end);\n    }\n  }, {\n    key: \"currentStart\",\n    get: function get() {\n      return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start);\n    }\n  }, {\n    key: \"currentEnd\",\n    get: function get() {\n      return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end);\n    }\n  }, {\n    key: \"getOption\",\n    value: function getOption(name) {\n      return this.getCurrentData().options[name]; // are the view-specific options\n    }\n  }]);\n\n  return ViewImpl;\n}();\n\nvar eventSourceDef$2 = {\n  ignoreRange: true,\n  parseMeta: function parseMeta(refined) {\n    if (Array.isArray(refined.events)) {\n      return refined.events;\n    }\n\n    return null;\n  },\n  fetch: function fetch(arg, successCallback) {\n    successCallback({\n      rawEvents: arg.eventSource.meta\n    });\n  }\n};\nvar arrayEventSourcePlugin = createPlugin({\n  name: 'array-event-source',\n  eventSourceDefs: [eventSourceDef$2]\n});\nvar eventSourceDef$1 = {\n  parseMeta: function parseMeta(refined) {\n    if (typeof refined.events === 'function') {\n      return refined.events;\n    }\n\n    return null;\n  },\n  fetch: function fetch(arg, successCallback, errorCallback) {\n    var dateEnv = arg.context.dateEnv;\n    var func = arg.eventSource.meta;\n    unpromisify(func.bind(null, buildRangeApiWithTimeZone(arg.range, dateEnv)), function (rawEvents) {\n      return successCallback({\n        rawEvents: rawEvents\n      });\n    }, errorCallback);\n  }\n};\nvar funcEventSourcePlugin = createPlugin({\n  name: 'func-event-source',\n  eventSourceDefs: [eventSourceDef$1]\n});\nvar JSON_FEED_EVENT_SOURCE_REFINERS = {\n  method: String,\n  extraParams: identity,\n  startParam: String,\n  endParam: String,\n  timeZoneParam: String\n};\nvar eventSourceDef = {\n  parseMeta: function parseMeta(refined) {\n    if (refined.url && (refined.format === 'json' || !refined.format)) {\n      return {\n        url: refined.url,\n        format: 'json',\n        method: (refined.method || 'GET').toUpperCase(),\n        extraParams: refined.extraParams,\n        startParam: refined.startParam,\n        endParam: refined.endParam,\n        timeZoneParam: refined.timeZoneParam\n      };\n    }\n\n    return null;\n  },\n  fetch: function fetch(arg, successCallback, errorCallback) {\n    var meta = arg.eventSource.meta;\n    var requestParams = buildRequestParams(meta, arg.range, arg.context);\n    requestJson(meta.method, meta.url, requestParams).then(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n          rawEvents = _ref2[0],\n          response = _ref2[1];\n\n      successCallback({\n        rawEvents: rawEvents,\n        response: response\n      });\n    }, errorCallback);\n  }\n};\nvar jsonFeedEventSourcePlugin = createPlugin({\n  name: 'json-event-source',\n  eventSourceRefiners: JSON_FEED_EVENT_SOURCE_REFINERS,\n  eventSourceDefs: [eventSourceDef]\n});\n\nfunction buildRequestParams(meta, range, context) {\n  var dateEnv = context.dateEnv,\n      options = context.options;\n  var startParam;\n  var endParam;\n  var timeZoneParam;\n  var customRequestParams;\n  var params = {};\n  startParam = meta.startParam;\n\n  if (startParam == null) {\n    startParam = options.startParam;\n  }\n\n  endParam = meta.endParam;\n\n  if (endParam == null) {\n    endParam = options.endParam;\n  }\n\n  timeZoneParam = meta.timeZoneParam;\n\n  if (timeZoneParam == null) {\n    timeZoneParam = options.timeZoneParam;\n  } // retrieve any outbound GET/POST data from the options\n\n\n  if (typeof meta.extraParams === 'function') {\n    // supplied as a function that returns a key/value object\n    customRequestParams = meta.extraParams();\n  } else {\n    // probably supplied as a straight key/value object\n    customRequestParams = meta.extraParams || {};\n  }\n\n  Object.assign(params, customRequestParams);\n  params[startParam] = dateEnv.formatIso(range.start);\n  params[endParam] = dateEnv.formatIso(range.end);\n\n  if (dateEnv.timeZone !== 'local') {\n    params[timeZoneParam] = dateEnv.timeZone;\n  }\n\n  return params;\n}\n\nvar SIMPLE_RECURRING_REFINERS = {\n  daysOfWeek: identity,\n  startTime: createDuration,\n  endTime: createDuration,\n  duration: createDuration,\n  startRecur: identity,\n  endRecur: identity\n};\nvar recurring = {\n  parse: function parse(refined, dateEnv) {\n    if (refined.daysOfWeek || refined.startTime || refined.endTime || refined.startRecur || refined.endRecur) {\n      var recurringData = {\n        daysOfWeek: refined.daysOfWeek || null,\n        startTime: refined.startTime || null,\n        endTime: refined.endTime || null,\n        startRecur: refined.startRecur ? dateEnv.createMarker(refined.startRecur) : null,\n        endRecur: refined.endRecur ? dateEnv.createMarker(refined.endRecur) : null\n      };\n      var duration;\n\n      if (refined.duration) {\n        duration = refined.duration;\n      }\n\n      if (!duration && refined.startTime && refined.endTime) {\n        duration = subtractDurations(refined.endTime, refined.startTime);\n      }\n\n      return {\n        allDayGuess: Boolean(!refined.startTime && !refined.endTime),\n        duration: duration,\n        typeData: recurringData // doesn't need endTime anymore but oh well\n\n      };\n    }\n\n    return null;\n  },\n  expand: function expand(typeData, framingRange, dateEnv) {\n    var clippedFramingRange = intersectRanges(framingRange, {\n      start: typeData.startRecur,\n      end: typeData.endRecur\n    });\n\n    if (clippedFramingRange) {\n      return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv);\n    }\n\n    return [];\n  }\n};\nvar simpleRecurringEventsPlugin = createPlugin({\n  name: 'simple-recurring-event',\n  recurringTypes: [recurring],\n  eventRefiners: SIMPLE_RECURRING_REFINERS\n});\n\nfunction expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {\n  var dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null;\n  var dayMarker = startOfDay(framingRange.start);\n  var endMarker = framingRange.end;\n  var instanceStarts = [];\n\n  while (dayMarker < endMarker) {\n    var instanceStart = void 0; // if everyday, or this particular day-of-week\n\n    if (!dowHash || dowHash[dayMarker.getUTCDay()]) {\n      if (startTime) {\n        instanceStart = dateEnv.add(dayMarker, startTime);\n      } else {\n        instanceStart = dayMarker;\n      }\n\n      instanceStarts.push(instanceStart);\n    }\n\n    dayMarker = addDays(dayMarker, 1);\n  }\n\n  return instanceStarts;\n}\n\nvar changeHandlerPlugin = createPlugin({\n  name: 'change-handler',\n  optionChangeHandlers: {\n    events: function events(_events, context) {\n      handleEventSources([_events], context);\n    },\n    eventSources: handleEventSources\n  }\n});\n/*\nBUG: if `event` was supplied, all previously-given `eventSources` will be wiped out\n*/\n\nfunction handleEventSources(inputs, context) {\n  var unfoundSources = hashValuesToArray(context.getCurrentData().eventSources);\n\n  if (unfoundSources.length === 1 && inputs.length === 1 && Array.isArray(unfoundSources[0]._raw) && Array.isArray(inputs[0])) {\n    context.dispatch({\n      type: 'RESET_RAW_EVENTS',\n      sourceId: unfoundSources[0].sourceId,\n      rawEvents: inputs[0]\n    });\n    return;\n  }\n\n  var newInputs = [];\n\n  var _iterator5 = _createForOfIteratorHelper(inputs),\n      _step5;\n\n  try {\n    for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n      var input = _step5.value;\n      var inputFound = false;\n\n      for (var i = 0; i < unfoundSources.length; i += 1) {\n        if (unfoundSources[i]._raw === input) {\n          unfoundSources.splice(i, 1); // delete\n\n          inputFound = true;\n          break;\n        }\n      }\n\n      if (!inputFound) {\n        newInputs.push(input);\n      }\n    }\n  } catch (err) {\n    _iterator5.e(err);\n  } finally {\n    _iterator5.f();\n  }\n\n  var _iterator6 = _createForOfIteratorHelper(unfoundSources),\n      _step6;\n\n  try {\n    for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n      var unfoundSource = _step6.value;\n      context.dispatch({\n        type: 'REMOVE_EVENT_SOURCE',\n        sourceId: unfoundSource.sourceId\n      });\n    }\n  } catch (err) {\n    _iterator6.e(err);\n  } finally {\n    _iterator6.f();\n  }\n\n  for (var _i2 = 0, _newInputs = newInputs; _i2 < _newInputs.length; _i2++) {\n    var newInput = _newInputs[_i2];\n    context.calendarApi.addEventSource(newInput);\n  }\n}\n\nfunction handleDateProfile(dateProfile, context) {\n  context.emitter.trigger('datesSet', Object.assign(Object.assign({}, buildRangeApiWithTimeZone(dateProfile.activeRange, context.dateEnv)), {\n    view: context.viewApi\n  }));\n}\n\nfunction handleEventStore(eventStore, context) {\n  var emitter = context.emitter;\n\n  if (emitter.hasHandlers('eventsSet')) {\n    emitter.trigger('eventsSet', buildEventApis(eventStore, context));\n  }\n}\n/*\nthis array is exposed on the root namespace so that UMD plugins can add to it.\nsee the rollup-bundles script.\n*/\n\n\nvar globalPlugins = [arrayEventSourcePlugin, funcEventSourcePlugin, jsonFeedEventSourcePlugin, simpleRecurringEventsPlugin, changeHandlerPlugin, createPlugin({\n  name: 'misc',\n  isLoadingFuncs: [function (state) {\n    return computeEventSourcesLoading(state.eventSources);\n  }],\n  propSetHandlers: {\n    dateProfile: handleDateProfile,\n    eventStore: handleEventStore\n  }\n})];\n\nvar TaskRunner = /*#__PURE__*/function () {\n  function TaskRunner(runTaskOption, drainedOption) {\n    _classCallCheck(this, TaskRunner);\n\n    this.runTaskOption = runTaskOption;\n    this.drainedOption = drainedOption;\n    this.queue = [];\n    this.delayedRunner = new DelayedRunner(this.drain.bind(this));\n  }\n\n  _createClass(TaskRunner, [{\n    key: \"request\",\n    value: function request(task, delay) {\n      this.queue.push(task);\n      this.delayedRunner.request(delay);\n    }\n  }, {\n    key: \"pause\",\n    value: function pause(scope) {\n      this.delayedRunner.pause(scope);\n    }\n  }, {\n    key: \"resume\",\n    value: function resume(scope, force) {\n      this.delayedRunner.resume(scope, force);\n    }\n  }, {\n    key: \"drain\",\n    value: function drain() {\n      var queue = this.queue;\n\n      while (queue.length) {\n        var completedTasks = [];\n        var task = void 0;\n\n        while (task = queue.shift()) {\n          this.runTask(task);\n          completedTasks.push(task);\n        }\n\n        this.drained(completedTasks);\n      } // keep going, in case new tasks were added in the drained handler\n\n    }\n  }, {\n    key: \"runTask\",\n    value: function runTask(task) {\n      if (this.runTaskOption) {\n        this.runTaskOption(task);\n      }\n    }\n  }, {\n    key: \"drained\",\n    value: function drained(completedTasks) {\n      if (this.drainedOption) {\n        this.drainedOption(completedTasks);\n      }\n    }\n  }]);\n\n  return TaskRunner;\n}(); // Computes what the title at the top of the calendarApi should be for this view\n\n\nfunction buildTitle(dateProfile, viewOptions, dateEnv) {\n  var range; // for views that span a large unit of time, show the proper interval, ignoring stray days before and after\n\n  if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {\n    range = dateProfile.currentRange;\n  } else {\n    // for day units or smaller, use the actual day range\n    range = dateProfile.activeRange;\n  }\n\n  return dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || buildTitleFormat(dateProfile)), {\n    isEndExclusive: dateProfile.isRangeAllDay,\n    defaultSeparator: viewOptions.titleRangeSeparator\n  });\n} // Generates the format string that should be used to generate the title for the current date range.\n// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\n\n\nfunction buildTitleFormat(dateProfile) {\n  var currentRangeUnit = dateProfile.currentRangeUnit;\n\n  if (currentRangeUnit === 'year') {\n    return {\n      year: 'numeric'\n    };\n  }\n\n  if (currentRangeUnit === 'month') {\n    return {\n      year: 'numeric',\n      month: 'long'\n    }; // like \"September 2014\"\n  }\n\n  var days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);\n\n  if (days !== null && days > 1) {\n    // multi-day range. shorter, like \"Sep 9 - 10 2014\"\n    return {\n      year: 'numeric',\n      month: 'short',\n      day: 'numeric'\n    };\n  } // one day. longer, like \"September 9 2014\"\n\n\n  return {\n    year: 'numeric',\n    month: 'long',\n    day: 'numeric'\n  };\n} // in future refactor, do the redux-style function(state=initial) for initial-state\n// also, whatever is happening in constructor, have it happen in action queue too\n\n\nvar CalendarDataManager = /*#__PURE__*/function () {\n  function CalendarDataManager(props) {\n    var _this = this;\n\n    _classCallCheck(this, CalendarDataManager);\n\n    this.computeCurrentViewData = memoize(this._computeCurrentViewData);\n    this.organizeRawLocales = memoize(organizeRawLocales);\n    this.buildLocale = memoize(buildLocale);\n    this.buildPluginHooks = buildBuildPluginHooks();\n    this.buildDateEnv = memoize(buildDateEnv$1);\n    this.buildTheme = memoize(buildTheme);\n    this.parseToolbars = memoize(parseToolbars);\n    this.buildViewSpecs = memoize(buildViewSpecs);\n    this.buildDateProfileGenerator = memoizeObjArg(buildDateProfileGenerator);\n    this.buildViewApi = memoize(buildViewApi);\n    this.buildViewUiProps = memoizeObjArg(buildViewUiProps);\n    this.buildEventUiBySource = memoize(buildEventUiBySource, isPropsEqual);\n    this.buildEventUiBases = memoize(buildEventUiBases);\n    this.parseContextBusinessHours = memoizeObjArg(parseContextBusinessHours);\n    this.buildTitle = memoize(buildTitle);\n    this.emitter = new Emitter();\n    this.actionRunner = new TaskRunner(this._handleAction.bind(this), this.updateData.bind(this));\n    this.currentCalendarOptionsInput = {};\n    this.currentCalendarOptionsRefined = {};\n    this.currentViewOptionsInput = {};\n    this.currentViewOptionsRefined = {};\n    this.currentCalendarOptionsRefiners = {};\n    this.optionsForRefining = [];\n    this.optionsForHandling = [];\n\n    this.getCurrentData = function () {\n      return _this.data;\n    };\n\n    this.dispatch = function (action) {\n      _this.actionRunner.request(action); // protects against recursive calls to _handleAction\n\n    };\n\n    this.props = props;\n    this.actionRunner.pause();\n    var dynamicOptionOverrides = {};\n    var optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);\n    var currentViewType = optionsData.calendarOptions.initialView || optionsData.pluginHooks.initialView;\n    var currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides); // wire things up\n    // TODO: not DRY\n\n    props.calendarApi.currentDataManager = this;\n    this.emitter.setThisContext(props.calendarApi);\n    this.emitter.setOptions(currentViewData.options);\n    var currentDate = getInitialDate(optionsData.calendarOptions, optionsData.dateEnv);\n    var dateProfile = currentViewData.dateProfileGenerator.build(currentDate);\n\n    if (!rangeContainsMarker(dateProfile.activeRange, currentDate)) {\n      currentDate = dateProfile.currentRange.start;\n    }\n\n    var calendarContext = {\n      dateEnv: optionsData.dateEnv,\n      options: optionsData.calendarOptions,\n      pluginHooks: optionsData.pluginHooks,\n      calendarApi: props.calendarApi,\n      dispatch: this.dispatch,\n      emitter: this.emitter,\n      getCurrentData: this.getCurrentData\n    }; // needs to be after setThisContext\n\n    var _iterator7 = _createForOfIteratorHelper(optionsData.pluginHooks.contextInit),\n        _step7;\n\n    try {\n      for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n        var callback = _step7.value;\n        callback(calendarContext);\n      } // NOT DRY\n\n    } catch (err) {\n      _iterator7.e(err);\n    } finally {\n      _iterator7.f();\n    }\n\n    var eventSources = initEventSources(optionsData.calendarOptions, dateProfile, calendarContext);\n    var initialState = {\n      dynamicOptionOverrides: dynamicOptionOverrides,\n      currentViewType: currentViewType,\n      currentDate: currentDate,\n      dateProfile: dateProfile,\n      businessHours: this.parseContextBusinessHours(calendarContext),\n      eventSources: eventSources,\n      eventUiBases: {},\n      eventStore: createEmptyEventStore(),\n      renderableEventStore: createEmptyEventStore(),\n      dateSelection: null,\n      eventSelection: '',\n      eventDrag: null,\n      eventResize: null,\n      selectionConfig: this.buildViewUiProps(calendarContext).selectionConfig\n    };\n    var contextAndState = Object.assign(Object.assign({}, calendarContext), initialState);\n\n    var _iterator8 = _createForOfIteratorHelper(optionsData.pluginHooks.reducers),\n        _step8;\n\n    try {\n      for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n        var reducer = _step8.value;\n        Object.assign(initialState, reducer(null, null, contextAndState));\n      }\n    } catch (err) {\n      _iterator8.e(err);\n    } finally {\n      _iterator8.f();\n    }\n\n    if (computeIsLoading(initialState, calendarContext)) {\n      this.emitter.trigger('loading', true); // NOT DRY\n    }\n\n    this.state = initialState;\n    this.updateData();\n    this.actionRunner.resume();\n  }\n\n  _createClass(CalendarDataManager, [{\n    key: \"resetOptions\",\n    value: function resetOptions(optionOverrides, changedOptionNames) {\n      var props = this.props;\n\n      if (changedOptionNames === undefined) {\n        props.optionOverrides = optionOverrides;\n      } else {\n        var _this$optionsForRefin;\n\n        props.optionOverrides = Object.assign(Object.assign({}, props.optionOverrides || {}), optionOverrides);\n\n        (_this$optionsForRefin = this.optionsForRefining).push.apply(_this$optionsForRefin, _toConsumableArray(changedOptionNames));\n      }\n\n      if (changedOptionNames === undefined || changedOptionNames.length) {\n        this.actionRunner.request({\n          type: 'NOTHING'\n        });\n      }\n    }\n  }, {\n    key: \"_handleAction\",\n    value: function _handleAction(action) {\n      var props = this.props,\n          state = this.state,\n          emitter = this.emitter;\n      var dynamicOptionOverrides = reduceDynamicOptionOverrides(state.dynamicOptionOverrides, action);\n      var optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);\n      var currentViewType = reduceViewType(state.currentViewType, action);\n      var currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides); // wire things up\n      // TODO: not DRY\n\n      props.calendarApi.currentDataManager = this;\n      emitter.setThisContext(props.calendarApi);\n      emitter.setOptions(currentViewData.options);\n      var calendarContext = {\n        dateEnv: optionsData.dateEnv,\n        options: optionsData.calendarOptions,\n        pluginHooks: optionsData.pluginHooks,\n        calendarApi: props.calendarApi,\n        dispatch: this.dispatch,\n        emitter: emitter,\n        getCurrentData: this.getCurrentData\n      };\n      var currentDate = state.currentDate,\n          dateProfile = state.dateProfile;\n\n      if (this.data && this.data.dateProfileGenerator !== currentViewData.dateProfileGenerator) {\n        // hack\n        dateProfile = currentViewData.dateProfileGenerator.build(currentDate);\n      }\n\n      currentDate = reduceCurrentDate(currentDate, action);\n      dateProfile = reduceDateProfile(dateProfile, action, currentDate, currentViewData.dateProfileGenerator);\n\n      if (action.type === 'PREV' || // TODO: move this logic into DateProfileGenerator\n      action.type === 'NEXT' || // \"\n      !rangeContainsMarker(dateProfile.currentRange, currentDate)) {\n        currentDate = dateProfile.currentRange.start;\n      }\n\n      var eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendarContext);\n      var eventStore = reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext);\n      var isEventsLoading = computeEventSourcesLoading(eventSources); // BAD. also called in this func in computeIsLoading\n\n      var renderableEventStore = isEventsLoading && !currentViewData.options.progressiveEventRendering ? state.renderableEventStore || eventStore : // try from previous state\n      eventStore;\n\n      var _this$buildViewUiProp = this.buildViewUiProps(calendarContext),\n          eventUiSingleBase = _this$buildViewUiProp.eventUiSingleBase,\n          selectionConfig = _this$buildViewUiProp.selectionConfig; // will memoize obj\n\n\n      var eventUiBySource = this.buildEventUiBySource(eventSources);\n      var eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);\n      var newState = {\n        dynamicOptionOverrides: dynamicOptionOverrides,\n        currentViewType: currentViewType,\n        currentDate: currentDate,\n        dateProfile: dateProfile,\n        eventSources: eventSources,\n        eventStore: eventStore,\n        renderableEventStore: renderableEventStore,\n        selectionConfig: selectionConfig,\n        eventUiBases: eventUiBases,\n        businessHours: this.parseContextBusinessHours(calendarContext),\n        dateSelection: reduceDateSelection(state.dateSelection, action),\n        eventSelection: reduceSelectedEvent(state.eventSelection, action),\n        eventDrag: reduceEventDrag(state.eventDrag, action),\n        eventResize: reduceEventResize(state.eventResize, action)\n      };\n      var contextAndState = Object.assign(Object.assign({}, calendarContext), newState);\n\n      var _iterator9 = _createForOfIteratorHelper(optionsData.pluginHooks.reducers),\n          _step9;\n\n      try {\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n          var reducer = _step9.value;\n          Object.assign(newState, reducer(state, action, contextAndState)); // give the OLD state, for old value\n        }\n      } catch (err) {\n        _iterator9.e(err);\n      } finally {\n        _iterator9.f();\n      }\n\n      var wasLoading = computeIsLoading(state, calendarContext);\n      var isLoading = computeIsLoading(newState, calendarContext); // TODO: use propSetHandlers in plugin system\n\n      if (!wasLoading && isLoading) {\n        emitter.trigger('loading', true);\n      } else if (wasLoading && !isLoading) {\n        emitter.trigger('loading', false);\n      }\n\n      this.state = newState;\n\n      if (props.onAction) {\n        props.onAction(action);\n      }\n    }\n  }, {\n    key: \"updateData\",\n    value: function updateData() {\n      var props = this.props,\n          state = this.state;\n      var oldData = this.data;\n      var optionsData = this.computeOptionsData(props.optionOverrides, state.dynamicOptionOverrides, props.calendarApi);\n      var currentViewData = this.computeCurrentViewData(state.currentViewType, optionsData, props.optionOverrides, state.dynamicOptionOverrides);\n      var data = this.data = Object.assign(Object.assign(Object.assign({\n        viewTitle: this.buildTitle(state.dateProfile, currentViewData.options, optionsData.dateEnv),\n        calendarApi: props.calendarApi,\n        dispatch: this.dispatch,\n        emitter: this.emitter,\n        getCurrentData: this.getCurrentData\n      }, optionsData), currentViewData), state);\n      var changeHandlers = optionsData.pluginHooks.optionChangeHandlers;\n      var oldCalendarOptions = oldData && oldData.calendarOptions;\n      var newCalendarOptions = optionsData.calendarOptions;\n\n      if (oldCalendarOptions && oldCalendarOptions !== newCalendarOptions) {\n        if (oldCalendarOptions.timeZone !== newCalendarOptions.timeZone) {\n          // hack\n          state.eventSources = data.eventSources = reduceEventSourcesNewTimeZone(data.eventSources, state.dateProfile, data);\n          state.eventStore = data.eventStore = rezoneEventStoreDates(data.eventStore, oldData.dateEnv, data.dateEnv);\n          state.renderableEventStore = data.renderableEventStore = rezoneEventStoreDates(data.renderableEventStore, oldData.dateEnv, data.dateEnv);\n        }\n\n        for (var optionName in changeHandlers) {\n          if (this.optionsForHandling.indexOf(optionName) !== -1 || oldCalendarOptions[optionName] !== newCalendarOptions[optionName]) {\n            changeHandlers[optionName](newCalendarOptions[optionName], data);\n          }\n        }\n      }\n\n      this.optionsForHandling = [];\n\n      if (props.onData) {\n        props.onData(data);\n      }\n    }\n  }, {\n    key: \"computeOptionsData\",\n    value: function computeOptionsData(optionOverrides, dynamicOptionOverrides, calendarApi) {\n      // TODO: blacklist options that are handled by optionChangeHandlers\n      if (!this.optionsForRefining.length && optionOverrides === this.stableOptionOverrides && dynamicOptionOverrides === this.stableDynamicOptionOverrides) {\n        return this.stableCalendarOptionsData;\n      }\n\n      var _this$processRawCalen = this.processRawCalendarOptions(optionOverrides, dynamicOptionOverrides),\n          refinedOptions = _this$processRawCalen.refinedOptions,\n          pluginHooks = _this$processRawCalen.pluginHooks,\n          localeDefaults = _this$processRawCalen.localeDefaults,\n          availableLocaleData = _this$processRawCalen.availableLocaleData,\n          extra = _this$processRawCalen.extra;\n\n      warnUnknownOptions(extra);\n      var dateEnv = this.buildDateEnv(refinedOptions.timeZone, refinedOptions.locale, refinedOptions.weekNumberCalculation, refinedOptions.firstDay, refinedOptions.weekText, pluginHooks, availableLocaleData, refinedOptions.defaultRangeSeparator);\n      var viewSpecs = this.buildViewSpecs(pluginHooks.views, this.stableOptionOverrides, this.stableDynamicOptionOverrides, localeDefaults);\n      var theme = this.buildTheme(refinedOptions, pluginHooks);\n      var toolbarConfig = this.parseToolbars(refinedOptions, this.stableOptionOverrides, theme, viewSpecs, calendarApi);\n      return this.stableCalendarOptionsData = {\n        calendarOptions: refinedOptions,\n        pluginHooks: pluginHooks,\n        dateEnv: dateEnv,\n        viewSpecs: viewSpecs,\n        theme: theme,\n        toolbarConfig: toolbarConfig,\n        localeDefaults: localeDefaults,\n        availableRawLocales: availableLocaleData.map\n      };\n    } // always called from behind a memoizer\n\n  }, {\n    key: \"processRawCalendarOptions\",\n    value: function processRawCalendarOptions(optionOverrides, dynamicOptionOverrides) {\n      var _this$optionsForHandl;\n\n      var _mergeRawOptions = mergeRawOptions([BASE_OPTION_DEFAULTS, optionOverrides, dynamicOptionOverrides]),\n          locales = _mergeRawOptions.locales,\n          locale = _mergeRawOptions.locale;\n\n      var availableLocaleData = this.organizeRawLocales(locales);\n      var availableRawLocales = availableLocaleData.map;\n      var localeDefaults = this.buildLocale(locale || availableLocaleData.defaultCode, availableRawLocales).options;\n      var pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [], globalPlugins);\n      var refiners = this.currentCalendarOptionsRefiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);\n      var extra = {};\n      var raw = mergeRawOptions([BASE_OPTION_DEFAULTS, localeDefaults, optionOverrides, dynamicOptionOverrides]);\n      var refined = {};\n      var currentRaw = this.currentCalendarOptionsInput;\n      var currentRefined = this.currentCalendarOptionsRefined;\n      var anyChanges = false;\n\n      for (var optionName in raw) {\n        if (this.optionsForRefining.indexOf(optionName) === -1 && (raw[optionName] === currentRaw[optionName] || COMPLEX_OPTION_COMPARATORS[optionName] && optionName in currentRaw && COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName], raw[optionName]))) {\n          refined[optionName] = currentRefined[optionName];\n        } else if (refiners[optionName]) {\n          refined[optionName] = refiners[optionName](raw[optionName]);\n          anyChanges = true;\n        } else {\n          extra[optionName] = currentRaw[optionName];\n        }\n      }\n\n      if (anyChanges) {\n        this.currentCalendarOptionsInput = raw;\n        this.currentCalendarOptionsRefined = refined;\n        this.stableOptionOverrides = optionOverrides;\n        this.stableDynamicOptionOverrides = dynamicOptionOverrides;\n      }\n\n      (_this$optionsForHandl = this.optionsForHandling).push.apply(_this$optionsForHandl, _toConsumableArray(this.optionsForRefining));\n\n      this.optionsForRefining = [];\n      return {\n        rawOptions: this.currentCalendarOptionsInput,\n        refinedOptions: this.currentCalendarOptionsRefined,\n        pluginHooks: pluginHooks,\n        availableLocaleData: availableLocaleData,\n        localeDefaults: localeDefaults,\n        extra: extra\n      };\n    }\n  }, {\n    key: \"_computeCurrentViewData\",\n    value: function _computeCurrentViewData(viewType, optionsData, optionOverrides, dynamicOptionOverrides) {\n      var viewSpec = optionsData.viewSpecs[viewType];\n\n      if (!viewSpec) {\n        throw new Error(\"viewType \\\"\".concat(viewType, \"\\\" is not available. Please make sure you've loaded all neccessary plugins\"));\n      }\n\n      var _this$processRawViewO = this.processRawViewOptions(viewSpec, optionsData.pluginHooks, optionsData.localeDefaults, optionOverrides, dynamicOptionOverrides),\n          refinedOptions = _this$processRawViewO.refinedOptions,\n          extra = _this$processRawViewO.extra;\n\n      warnUnknownOptions(extra);\n      var dateProfileGenerator = this.buildDateProfileGenerator({\n        dateProfileGeneratorClass: viewSpec.optionDefaults.dateProfileGeneratorClass,\n        duration: viewSpec.duration,\n        durationUnit: viewSpec.durationUnit,\n        usesMinMaxTime: viewSpec.optionDefaults.usesMinMaxTime,\n        dateEnv: optionsData.dateEnv,\n        calendarApi: this.props.calendarApi,\n        slotMinTime: refinedOptions.slotMinTime,\n        slotMaxTime: refinedOptions.slotMaxTime,\n        showNonCurrentDates: refinedOptions.showNonCurrentDates,\n        dayCount: refinedOptions.dayCount,\n        dateAlignment: refinedOptions.dateAlignment,\n        dateIncrement: refinedOptions.dateIncrement,\n        hiddenDays: refinedOptions.hiddenDays,\n        weekends: refinedOptions.weekends,\n        nowInput: refinedOptions.now,\n        validRangeInput: refinedOptions.validRange,\n        visibleRangeInput: refinedOptions.visibleRange,\n        fixedWeekCount: refinedOptions.fixedWeekCount\n      });\n      var viewApi = this.buildViewApi(viewType, this.getCurrentData, optionsData.dateEnv);\n      return {\n        viewSpec: viewSpec,\n        options: refinedOptions,\n        dateProfileGenerator: dateProfileGenerator,\n        viewApi: viewApi\n      };\n    }\n  }, {\n    key: \"processRawViewOptions\",\n    value: function processRawViewOptions(viewSpec, pluginHooks, localeDefaults, optionOverrides, dynamicOptionOverrides) {\n      var raw = mergeRawOptions([BASE_OPTION_DEFAULTS, viewSpec.optionDefaults, localeDefaults, optionOverrides, viewSpec.optionOverrides, dynamicOptionOverrides]);\n      var refiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), VIEW_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);\n      var refined = {};\n      var currentRaw = this.currentViewOptionsInput;\n      var currentRefined = this.currentViewOptionsRefined;\n      var anyChanges = false;\n      var extra = {};\n\n      for (var optionName in raw) {\n        if (raw[optionName] === currentRaw[optionName] || COMPLEX_OPTION_COMPARATORS[optionName] && COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], currentRaw[optionName])) {\n          refined[optionName] = currentRefined[optionName];\n        } else {\n          if (raw[optionName] === this.currentCalendarOptionsInput[optionName] || COMPLEX_OPTION_COMPARATORS[optionName] && COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], this.currentCalendarOptionsInput[optionName])) {\n            if (optionName in this.currentCalendarOptionsRefined) {\n              // might be an \"extra\" prop\n              refined[optionName] = this.currentCalendarOptionsRefined[optionName];\n            }\n          } else if (refiners[optionName]) {\n            refined[optionName] = refiners[optionName](raw[optionName]);\n          } else {\n            extra[optionName] = raw[optionName];\n          }\n\n          anyChanges = true;\n        }\n      }\n\n      if (anyChanges) {\n        this.currentViewOptionsInput = raw;\n        this.currentViewOptionsRefined = refined;\n      }\n\n      return {\n        rawOptions: this.currentViewOptionsInput,\n        refinedOptions: this.currentViewOptionsRefined,\n        extra: extra\n      };\n    }\n  }]);\n\n  return CalendarDataManager;\n}();\n\nfunction buildDateEnv$1(timeZone, explicitLocale, weekNumberCalculation, firstDay, weekText, pluginHooks, availableLocaleData, defaultSeparator) {\n  var locale = buildLocale(explicitLocale || availableLocaleData.defaultCode, availableLocaleData.map);\n  return new DateEnv({\n    calendarSystem: 'gregory',\n    timeZone: timeZone,\n    namedTimeZoneImpl: pluginHooks.namedTimeZonedImpl,\n    locale: locale,\n    weekNumberCalculation: weekNumberCalculation,\n    firstDay: firstDay,\n    weekText: weekText,\n    cmdFormatter: pluginHooks.cmdFormatter,\n    defaultSeparator: defaultSeparator\n  });\n}\n\nfunction buildTheme(options, pluginHooks) {\n  var ThemeClass = pluginHooks.themeClasses[options.themeSystem] || StandardTheme;\n  return new ThemeClass(options);\n}\n\nfunction buildDateProfileGenerator(props) {\n  var DateProfileGeneratorClass = props.dateProfileGeneratorClass || DateProfileGenerator;\n  return new DateProfileGeneratorClass(props);\n}\n\nfunction buildViewApi(type, getCurrentData, dateEnv) {\n  return new ViewImpl(type, getCurrentData, dateEnv);\n}\n\nfunction buildEventUiBySource(eventSources) {\n  return mapHash(eventSources, function (eventSource) {\n    return eventSource.ui;\n  });\n}\n\nfunction buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {\n  var eventUiBases = {\n    '': eventUiSingleBase\n  };\n\n  for (var defId in eventDefs) {\n    var def = eventDefs[defId];\n\n    if (def.sourceId && eventUiBySource[def.sourceId]) {\n      eventUiBases[defId] = eventUiBySource[def.sourceId];\n    }\n  }\n\n  return eventUiBases;\n}\n\nfunction buildViewUiProps(calendarContext) {\n  var options = calendarContext.options;\n  return {\n    eventUiSingleBase: createEventUi({\n      display: options.eventDisplay,\n      editable: options.editable,\n      startEditable: options.eventStartEditable,\n      durationEditable: options.eventDurationEditable,\n      constraint: options.eventConstraint,\n      overlap: typeof options.eventOverlap === 'boolean' ? options.eventOverlap : undefined,\n      allow: options.eventAllow,\n      backgroundColor: options.eventBackgroundColor,\n      borderColor: options.eventBorderColor,\n      textColor: options.eventTextColor,\n      color: options.eventColor // classNames: options.eventClassNames // render hook will handle this\n\n    }, calendarContext),\n    selectionConfig: createEventUi({\n      constraint: options.selectConstraint,\n      overlap: typeof options.selectOverlap === 'boolean' ? options.selectOverlap : undefined,\n      allow: options.selectAllow\n    }, calendarContext)\n  };\n}\n\nfunction computeIsLoading(state, context) {\n  var _iterator10 = _createForOfIteratorHelper(context.pluginHooks.isLoadingFuncs),\n      _step10;\n\n  try {\n    for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n      var isLoadingFunc = _step10.value;\n\n      if (isLoadingFunc(state)) {\n        return true;\n      }\n    }\n  } catch (err) {\n    _iterator10.e(err);\n  } finally {\n    _iterator10.f();\n  }\n\n  return false;\n}\n\nfunction parseContextBusinessHours(calendarContext) {\n  return parseBusinessHours(calendarContext.options.businessHours, calendarContext);\n}\n\nfunction warnUnknownOptions(options, viewName) {\n  for (var optionName in options) {\n    console.warn(\"Unknown option '\".concat(optionName, \"'\") + (viewName ? \" for view '\".concat(viewName, \"'\") : ''));\n  }\n}\n\nvar ToolbarSection = /*#__PURE__*/function (_BaseComponent) {\n  _inherits(ToolbarSection, _BaseComponent);\n\n  var _super2 = _createSuper(ToolbarSection);\n\n  function ToolbarSection() {\n    _classCallCheck(this, ToolbarSection);\n\n    return _super2.apply(this, arguments);\n  }\n\n  _createClass(ToolbarSection, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var children = this.props.widgetGroups.map(function (widgetGroup) {\n        return _this2.renderWidgetGroup(widgetGroup);\n      });\n      return createElement.apply(void 0, ['div', {\n        className: 'fc-toolbar-chunk'\n      }].concat(_toConsumableArray(children)));\n    }\n  }, {\n    key: \"renderWidgetGroup\",\n    value: function renderWidgetGroup(widgetGroup) {\n      var props = this.props;\n      var theme = this.context.theme;\n      var children = [];\n      var isOnlyButtons = true;\n\n      var _iterator11 = _createForOfIteratorHelper(widgetGroup),\n          _step11;\n\n      try {\n        for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n          var widget = _step11.value;\n          var buttonName = widget.buttonName,\n              buttonClick = widget.buttonClick,\n              buttonText = widget.buttonText,\n              buttonIcon = widget.buttonIcon,\n              buttonHint = widget.buttonHint;\n\n          if (buttonName === 'title') {\n            isOnlyButtons = false;\n            children.push(createElement(\"h2\", {\n              className: \"fc-toolbar-title\",\n              id: props.titleId\n            }, props.title));\n          } else {\n            var isPressed = buttonName === props.activeButton;\n            var isDisabled = !props.isTodayEnabled && buttonName === 'today' || !props.isPrevEnabled && buttonName === 'prev' || !props.isNextEnabled && buttonName === 'next';\n            var buttonClasses = [\"fc-\".concat(buttonName, \"-button\"), theme.getClass('button')];\n\n            if (isPressed) {\n              buttonClasses.push(theme.getClass('buttonActive'));\n            }\n\n            children.push(createElement(\"button\", {\n              type: \"button\",\n              title: typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint,\n              disabled: isDisabled,\n              \"aria-pressed\": isPressed,\n              className: buttonClasses.join(' '),\n              onClick: buttonClick\n            }, buttonText || (buttonIcon ? createElement(\"span\", {\n              className: buttonIcon,\n              role: \"img\"\n            }) : '')));\n          }\n        }\n      } catch (err) {\n        _iterator11.e(err);\n      } finally {\n        _iterator11.f();\n      }\n\n      if (children.length > 1) {\n        var groupClassName = isOnlyButtons && theme.getClass('buttonGroup') || '';\n        return createElement.apply(void 0, ['div', {\n          className: groupClassName\n        }].concat(children));\n      }\n\n      return children[0];\n    }\n  }]);\n\n  return ToolbarSection;\n}(BaseComponent);\n\nvar Toolbar = /*#__PURE__*/function (_BaseComponent2) {\n  _inherits(Toolbar, _BaseComponent2);\n\n  var _super3 = _createSuper(Toolbar);\n\n  function Toolbar() {\n    _classCallCheck(this, Toolbar);\n\n    return _super3.apply(this, arguments);\n  }\n\n  _createClass(Toolbar, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          model = _this$props.model,\n          extraClassName = _this$props.extraClassName;\n      var forceLtr = false;\n      var startContent;\n      var endContent;\n      var sectionWidgets = model.sectionWidgets;\n      var centerContent = sectionWidgets.center;\n\n      if (sectionWidgets.left) {\n        forceLtr = true;\n        startContent = sectionWidgets.left;\n      } else {\n        startContent = sectionWidgets.start;\n      }\n\n      if (sectionWidgets.right) {\n        forceLtr = true;\n        endContent = sectionWidgets.right;\n      } else {\n        endContent = sectionWidgets.end;\n      }\n\n      var classNames = [extraClassName || '', 'fc-toolbar', forceLtr ? 'fc-toolbar-ltr' : ''];\n      return createElement(\"div\", {\n        className: classNames.join(' ')\n      }, this.renderSection('start', startContent || []), this.renderSection('center', centerContent || []), this.renderSection('end', endContent || []));\n    }\n  }, {\n    key: \"renderSection\",\n    value: function renderSection(key, widgetGroups) {\n      var props = this.props;\n      return createElement(ToolbarSection, {\n        key: key,\n        widgetGroups: widgetGroups,\n        title: props.title,\n        navUnit: props.navUnit,\n        activeButton: props.activeButton,\n        isTodayEnabled: props.isTodayEnabled,\n        isPrevEnabled: props.isPrevEnabled,\n        isNextEnabled: props.isNextEnabled,\n        titleId: props.titleId\n      });\n    }\n  }]);\n\n  return Toolbar;\n}(BaseComponent);\n\nvar ViewHarness = /*#__PURE__*/function (_BaseComponent3) {\n  _inherits(ViewHarness, _BaseComponent3);\n\n  var _super4 = _createSuper(ViewHarness);\n\n  function ViewHarness() {\n    var _this3;\n\n    _classCallCheck(this, ViewHarness);\n\n    _this3 = _super4.apply(this, arguments);\n    _this3.state = {\n      availableWidth: null\n    };\n\n    _this3.handleEl = function (el) {\n      _this3.el = el;\n      setRef(_this3.props.elRef, el);\n\n      _this3.updateAvailableWidth();\n    };\n\n    _this3.handleResize = function () {\n      _this3.updateAvailableWidth();\n    };\n\n    return _this3;\n  }\n\n  _createClass(ViewHarness, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          state = this.state;\n      var aspectRatio = props.aspectRatio;\n      var classNames = ['fc-view-harness', aspectRatio || props.liquid || props.height ? 'fc-view-harness-active' // harness controls the height\n      : 'fc-view-harness-passive' // let the view do the height\n      ];\n      var height = '';\n      var paddingBottom = '';\n\n      if (aspectRatio) {\n        if (state.availableWidth !== null) {\n          height = state.availableWidth / aspectRatio;\n        } else {\n          // while waiting to know availableWidth, we can't set height to *zero*\n          // because will cause lots of unnecessary scrollbars within scrollgrid.\n          // BETTER: don't start rendering ANYTHING yet until we know container width\n          // NOTE: why not always use paddingBottom? Causes height oscillation (issue 5606)\n          paddingBottom = \"\".concat(1 / aspectRatio * 100, \"%\");\n        }\n      } else {\n        height = props.height || '';\n      }\n\n      return createElement(\"div\", {\n        \"aria-labelledby\": props.labeledById,\n        ref: this.handleEl,\n        className: classNames.join(' '),\n        style: {\n          height: height,\n          paddingBottom: paddingBottom\n        }\n      }, props.children);\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.context.addResizeHandler(this.handleResize);\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.context.removeResizeHandler(this.handleResize);\n    }\n  }, {\n    key: \"updateAvailableWidth\",\n    value: function updateAvailableWidth() {\n      if (this.el && // needed. but why?\n      this.props.aspectRatio // aspectRatio is the only height setting that needs availableWidth\n      ) {\n        this.setState({\n          availableWidth: this.el.offsetWidth\n        });\n      }\n    }\n  }]);\n\n  return ViewHarness;\n}(BaseComponent);\n/*\nDetects when the user clicks on an event within a DateComponent\n*/\n\n\nvar EventClicking = /*#__PURE__*/function (_Interaction) {\n  _inherits(EventClicking, _Interaction);\n\n  var _super5 = _createSuper(EventClicking);\n\n  function EventClicking(settings) {\n    var _this4;\n\n    _classCallCheck(this, EventClicking);\n\n    _this4 = _super5.call(this, settings);\n\n    _this4.handleSegClick = function (ev, segEl) {\n      var _assertThisInitialize = _assertThisInitialized(_this4),\n          component = _assertThisInitialize.component;\n\n      var context = component.context;\n      var seg = getElSeg(segEl);\n\n      if (seg && // might be the <div> surrounding the more link\n      component.isValidSegDownEl(ev.target)) {\n        // our way to simulate a link click for elements that can't be <a> tags\n        // grab before trigger fired in case trigger trashes DOM thru rerendering\n        var hasUrlContainer = elementClosest(ev.target, '.fc-event-forced-url');\n        var url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';\n        context.emitter.trigger('eventClick', {\n          el: segEl,\n          event: new EventImpl(component.context, seg.eventRange.def, seg.eventRange.instance),\n          jsEvent: ev,\n          view: context.viewApi\n        });\n\n        if (url && !ev.defaultPrevented) {\n          window.location.href = url;\n        }\n      }\n    };\n\n    _this4.destroy = listenBySelector(settings.el, 'click', '.fc-event', // on both fg and bg events\n    _this4.handleSegClick);\n    return _this4;\n  }\n\n  return EventClicking;\n}(Interaction);\n/*\nTriggers events and adds/removes core classNames when the user's pointer\nenters/leaves event-elements of a component.\n*/\n\n\nvar EventHovering = /*#__PURE__*/function (_Interaction2) {\n  _inherits(EventHovering, _Interaction2);\n\n  var _super6 = _createSuper(EventHovering);\n\n  function EventHovering(settings) {\n    var _this5;\n\n    _classCallCheck(this, EventHovering);\n\n    _this5 = _super6.call(this, settings); // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it\n\n    _this5.handleEventElRemove = function (el) {\n      if (el === _this5.currentSegEl) {\n        _this5.handleSegLeave(null, _this5.currentSegEl);\n      }\n    };\n\n    _this5.handleSegEnter = function (ev, segEl) {\n      if (getElSeg(segEl)) {\n        // TODO: better way to make sure not hovering over more+ link or its wrapper\n        _this5.currentSegEl = segEl;\n\n        _this5.triggerEvent('eventMouseEnter', ev, segEl);\n      }\n    };\n\n    _this5.handleSegLeave = function (ev, segEl) {\n      if (_this5.currentSegEl) {\n        _this5.currentSegEl = null;\n\n        _this5.triggerEvent('eventMouseLeave', ev, segEl);\n      }\n    };\n\n    _this5.removeHoverListeners = listenToHoverBySelector(settings.el, '.fc-event', // on both fg and bg events\n    _this5.handleSegEnter, _this5.handleSegLeave);\n    return _this5;\n  }\n\n  _createClass(EventHovering, [{\n    key: \"destroy\",\n    value: function destroy() {\n      this.removeHoverListeners();\n    }\n  }, {\n    key: \"triggerEvent\",\n    value: function triggerEvent(publicEvName, ev, segEl) {\n      var component = this.component;\n      var context = component.context;\n      var seg = getElSeg(segEl);\n\n      if (!ev || component.isValidSegDownEl(ev.target)) {\n        context.emitter.trigger(publicEvName, {\n          el: segEl,\n          event: new EventImpl(context, seg.eventRange.def, seg.eventRange.instance),\n          jsEvent: ev,\n          view: context.viewApi\n        });\n      }\n    }\n  }]);\n\n  return EventHovering;\n}(Interaction);\n\nvar CalendarContent = /*#__PURE__*/function (_PureComponent) {\n  _inherits(CalendarContent, _PureComponent);\n\n  var _super7 = _createSuper(CalendarContent);\n\n  function CalendarContent() {\n    var _this6;\n\n    _classCallCheck(this, CalendarContent);\n\n    _this6 = _super7.apply(this, arguments);\n    _this6.buildViewContext = memoize(buildViewContext);\n    _this6.buildViewPropTransformers = memoize(buildViewPropTransformers);\n    _this6.buildToolbarProps = memoize(buildToolbarProps);\n    _this6.headerRef = createRef();\n    _this6.footerRef = createRef();\n    _this6.interactionsStore = {}; // eslint-disable-next-line\n\n    _this6.state = {\n      viewLabelId: getUniqueDomId()\n    }; // Component Registration\n    // -----------------------------------------------------------------------------------------------------------------\n\n    _this6.registerInteractiveComponent = function (component, settingsInput) {\n      var settings = parseInteractionSettings(component, settingsInput);\n      var DEFAULT_INTERACTIONS = [EventClicking, EventHovering];\n      var interactionClasses = DEFAULT_INTERACTIONS.concat(_this6.props.pluginHooks.componentInteractions);\n      var interactions = interactionClasses.map(function (TheInteractionClass) {\n        return new TheInteractionClass(settings);\n      });\n      _this6.interactionsStore[component.uid] = interactions;\n      interactionSettingsStore[component.uid] = settings;\n    };\n\n    _this6.unregisterInteractiveComponent = function (component) {\n      var listeners = _this6.interactionsStore[component.uid];\n\n      if (listeners) {\n        var _iterator12 = _createForOfIteratorHelper(listeners),\n            _step12;\n\n        try {\n          for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n            var listener = _step12.value;\n            listener.destroy();\n          }\n        } catch (err) {\n          _iterator12.e(err);\n        } finally {\n          _iterator12.f();\n        }\n\n        delete _this6.interactionsStore[component.uid];\n      }\n\n      delete interactionSettingsStore[component.uid];\n    }; // Resizing\n    // -----------------------------------------------------------------------------------------------------------------\n\n\n    _this6.resizeRunner = new DelayedRunner(function () {\n      _this6.props.emitter.trigger('_resize', true); // should window resizes be considered \"forced\" ?\n\n\n      _this6.props.emitter.trigger('windowResize', {\n        view: _this6.props.viewApi\n      });\n    });\n\n    _this6.handleWindowResize = function (ev) {\n      var options = _this6.props.options;\n\n      if (options.handleWindowResize && ev.target === window // avoid jqui events\n      ) {\n        _this6.resizeRunner.request(options.windowResizeDelay);\n      }\n    };\n\n    return _this6;\n  }\n  /*\n  renders INSIDE of an outer div\n  */\n\n\n  _createClass(CalendarContent, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      var toolbarConfig = props.toolbarConfig,\n          options = props.options;\n      var toolbarProps = this.buildToolbarProps(props.viewSpec, props.dateProfile, props.dateProfileGenerator, props.currentDate, getNow(props.options.now, props.dateEnv), // TODO: use NowTimer????\n      props.viewTitle);\n      var viewVGrow = false;\n      var viewHeight = '';\n      var viewAspectRatio;\n\n      if (props.isHeightAuto || props.forPrint) {\n        viewHeight = '';\n      } else if (options.height != null) {\n        viewVGrow = true;\n      } else if (options.contentHeight != null) {\n        viewHeight = options.contentHeight;\n      } else {\n        viewAspectRatio = Math.max(options.aspectRatio, 0.5); // prevent from getting too tall\n      }\n\n      var viewContext = this.buildViewContext(props.viewSpec, props.viewApi, props.options, props.dateProfileGenerator, props.dateEnv, props.theme, props.pluginHooks, props.dispatch, props.getCurrentData, props.emitter, props.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent);\n      var viewLabelId = toolbarConfig.header && toolbarConfig.header.hasTitle ? this.state.viewLabelId : undefined;\n      return createElement(ViewContextType.Provider, {\n        value: viewContext\n      }, toolbarConfig.header && createElement(Toolbar, Object.assign({\n        ref: this.headerRef,\n        extraClassName: \"fc-header-toolbar\",\n        model: toolbarConfig.header,\n        titleId: viewLabelId\n      }, toolbarProps)), createElement(ViewHarness, {\n        liquid: viewVGrow,\n        height: viewHeight,\n        aspectRatio: viewAspectRatio,\n        labeledById: viewLabelId\n      }, this.renderView(props), this.buildAppendContent()), toolbarConfig.footer && createElement(Toolbar, Object.assign({\n        ref: this.footerRef,\n        extraClassName: \"fc-footer-toolbar\",\n        model: toolbarConfig.footer,\n        titleId: \"\"\n      }, toolbarProps)));\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var props = this.props;\n      this.calendarInteractions = props.pluginHooks.calendarInteractions.map(function (CalendarInteractionClass) {\n        return new CalendarInteractionClass(props);\n      });\n      window.addEventListener('resize', this.handleWindowResize);\n      var propSetHandlers = props.pluginHooks.propSetHandlers;\n\n      for (var propName in propSetHandlers) {\n        propSetHandlers[propName](props[propName], props);\n      }\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var props = this.props;\n      var propSetHandlers = props.pluginHooks.propSetHandlers;\n\n      for (var propName in propSetHandlers) {\n        if (props[propName] !== prevProps[propName]) {\n          propSetHandlers[propName](props[propName], props);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      window.removeEventListener('resize', this.handleWindowResize);\n      this.resizeRunner.clear();\n\n      var _iterator13 = _createForOfIteratorHelper(this.calendarInteractions),\n          _step13;\n\n      try {\n        for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n          var interaction = _step13.value;\n          interaction.destroy();\n        }\n      } catch (err) {\n        _iterator13.e(err);\n      } finally {\n        _iterator13.f();\n      }\n\n      this.props.emitter.trigger('_unmount');\n    }\n  }, {\n    key: \"buildAppendContent\",\n    value: function buildAppendContent() {\n      var props = this.props;\n      var children = props.pluginHooks.viewContainerAppends.map(function (buildAppendContent) {\n        return buildAppendContent(props);\n      });\n      return createElement.apply(void 0, [Fragment, {}].concat(_toConsumableArray(children)));\n    }\n  }, {\n    key: \"renderView\",\n    value: function renderView(props) {\n      var pluginHooks = props.pluginHooks;\n      var viewSpec = props.viewSpec;\n      var viewProps = {\n        dateProfile: props.dateProfile,\n        businessHours: props.businessHours,\n        eventStore: props.renderableEventStore,\n        eventUiBases: props.eventUiBases,\n        dateSelection: props.dateSelection,\n        eventSelection: props.eventSelection,\n        eventDrag: props.eventDrag,\n        eventResize: props.eventResize,\n        isHeightAuto: props.isHeightAuto,\n        forPrint: props.forPrint\n      };\n      var transformers = this.buildViewPropTransformers(pluginHooks.viewPropsTransformers);\n\n      var _iterator14 = _createForOfIteratorHelper(transformers),\n          _step14;\n\n      try {\n        for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n          var transformer = _step14.value;\n          Object.assign(viewProps, transformer.transform(viewProps, props));\n        }\n      } catch (err) {\n        _iterator14.e(err);\n      } finally {\n        _iterator14.f();\n      }\n\n      var ViewComponent = viewSpec.component;\n      return createElement(ViewComponent, Object.assign({}, viewProps));\n    }\n  }]);\n\n  return CalendarContent;\n}(PureComponent);\n\nfunction buildToolbarProps(viewSpec, dateProfile, dateProfileGenerator, currentDate, now, title) {\n  // don't force any date-profiles to valid date profiles (the `false`) so that we can tell if it's invalid\n  var todayInfo = dateProfileGenerator.build(now, undefined, false); // TODO: need `undefined` or else INFINITE LOOP for some reason\n\n  var prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate, false);\n  var nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate, false);\n  return {\n    title: title,\n    activeButton: viewSpec.type,\n    navUnit: viewSpec.singleUnit,\n    isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),\n    isPrevEnabled: prevInfo.isValid,\n    isNextEnabled: nextInfo.isValid\n  };\n} // Plugin\n// -----------------------------------------------------------------------------------------------------------------\n\n\nfunction buildViewPropTransformers(theClasses) {\n  return theClasses.map(function (TheClass) {\n    return new TheClass();\n  });\n}\n\nvar Calendar = /*#__PURE__*/function (_CalendarImpl) {\n  _inherits(Calendar, _CalendarImpl);\n\n  var _super8 = _createSuper(Calendar);\n\n  function Calendar(el) {\n    var _this7;\n\n    var optionOverrides = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Calendar);\n\n    _this7 = _super8.call(this);\n    _this7.isRendering = false;\n    _this7.isRendered = false;\n    _this7.currentClassNames = [];\n    _this7.customContentRenderId = 0;\n\n    _this7.handleAction = function (action) {\n      // actions we know we want to render immediately\n      switch (action.type) {\n        case 'SET_EVENT_DRAG':\n        case 'SET_EVENT_RESIZE':\n          _this7.renderRunner.tryDrain();\n\n      }\n    };\n\n    _this7.handleData = function (data) {\n      _this7.currentData = data;\n\n      _this7.renderRunner.request(data.calendarOptions.rerenderDelay);\n    };\n\n    _this7.handleRenderRequest = function () {\n      if (_this7.isRendering) {\n        _this7.isRendered = true;\n\n        var _assertThisInitialize2 = _assertThisInitialized(_this7),\n            currentData = _assertThisInitialize2.currentData;\n\n        flushSync(function () {\n          render(createElement(CalendarRoot, {\n            options: currentData.calendarOptions,\n            theme: currentData.theme,\n            emitter: currentData.emitter\n          }, function (classNames, height, isHeightAuto, forPrint) {\n            _this7.setClassNames(classNames);\n\n            _this7.setHeight(height);\n\n            return createElement(RenderId.Provider, {\n              value: _this7.customContentRenderId\n            }, createElement(CalendarContent, Object.assign({\n              isHeightAuto: isHeightAuto,\n              forPrint: forPrint\n            }, currentData)));\n          }), _this7.el);\n        });\n      } else if (_this7.isRendered) {\n        _this7.isRendered = false;\n        render(null, _this7.el);\n\n        _this7.setClassNames([]);\n\n        _this7.setHeight('');\n      }\n    };\n\n    ensureElHasStyles(el);\n    _this7.el = el;\n    _this7.renderRunner = new DelayedRunner(_this7.handleRenderRequest);\n    new CalendarDataManager({\n      optionOverrides: optionOverrides,\n      calendarApi: _assertThisInitialized(_this7),\n      onAction: _this7.handleAction,\n      onData: _this7.handleData\n    });\n    return _this7;\n  }\n\n  _createClass(Calendar, [{\n    key: \"render\",\n    value: function render() {\n      var wasRendering = this.isRendering;\n\n      if (!wasRendering) {\n        this.isRendering = true;\n      } else {\n        this.customContentRenderId += 1;\n      }\n\n      this.renderRunner.request();\n\n      if (wasRendering) {\n        this.updateSize();\n      }\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.isRendering) {\n        this.isRendering = false;\n        this.renderRunner.request();\n      }\n    }\n  }, {\n    key: \"updateSize\",\n    value: function updateSize() {\n      var _this8 = this;\n\n      flushSync(function () {\n        _get(_getPrototypeOf(Calendar.prototype), \"updateSize\", _this8).call(_this8);\n      });\n    }\n  }, {\n    key: \"batchRendering\",\n    value: function batchRendering(func) {\n      this.renderRunner.pause('batchRendering');\n      func();\n      this.renderRunner.resume('batchRendering');\n    }\n  }, {\n    key: \"pauseRendering\",\n    value: function pauseRendering() {\n      this.renderRunner.pause('pauseRendering');\n    }\n  }, {\n    key: \"resumeRendering\",\n    value: function resumeRendering() {\n      this.renderRunner.resume('pauseRendering', true);\n    }\n  }, {\n    key: \"resetOptions\",\n    value: function resetOptions(optionOverrides, changedOptionNames) {\n      this.currentDataManager.resetOptions(optionOverrides, changedOptionNames);\n    }\n  }, {\n    key: \"setClassNames\",\n    value: function setClassNames(classNames) {\n      if (!isArraysEqual(classNames, this.currentClassNames)) {\n        var classList = this.el.classList;\n\n        var _iterator15 = _createForOfIteratorHelper(this.currentClassNames),\n            _step15;\n\n        try {\n          for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n            var className = _step15.value;\n            classList.remove(className);\n          }\n        } catch (err) {\n          _iterator15.e(err);\n        } finally {\n          _iterator15.f();\n        }\n\n        var _iterator16 = _createForOfIteratorHelper(classNames),\n            _step16;\n\n        try {\n          for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n            var _className = _step16.value;\n            classList.add(_className);\n          }\n        } catch (err) {\n          _iterator16.e(err);\n        } finally {\n          _iterator16.f();\n        }\n\n        this.currentClassNames = classNames;\n      }\n    }\n  }, {\n    key: \"setHeight\",\n    value: function setHeight(height) {\n      applyStyleProp(this.el, 'height', height);\n    }\n  }]);\n\n  return Calendar;\n}(CalendarImpl);\n\nfunction formatDate(dateInput) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var dateEnv = buildDateEnv(options);\n  var formatter = createFormatter(options);\n  var dateMeta = dateEnv.createMarkerMeta(dateInput);\n\n  if (!dateMeta) {\n    // TODO: warning?\n    return '';\n  }\n\n  return dateEnv.format(dateMeta.marker, formatter, {\n    forcedTzo: dateMeta.forcedTzo\n  });\n}\n\nfunction formatRange(startInput, endInput, options) {\n  var dateEnv = buildDateEnv(_typeof(options) === 'object' && options ? options : {}); // pass in if non-null object\n\n  var formatter = createFormatter(options);\n  var startMeta = dateEnv.createMarkerMeta(startInput);\n  var endMeta = dateEnv.createMarkerMeta(endInput);\n\n  if (!startMeta || !endMeta) {\n    // TODO: warning?\n    return '';\n  }\n\n  return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, {\n    forcedStartTzo: startMeta.forcedTzo,\n    forcedEndTzo: endMeta.forcedTzo,\n    isEndExclusive: options.isEndExclusive,\n    defaultSeparator: BASE_OPTION_DEFAULTS.defaultRangeSeparator\n  });\n} // TODO: more DRY and optimized\n\n\nfunction buildDateEnv(settings) {\n  var locale = buildLocale(settings.locale || 'en', organizeRawLocales([]).map); // TODO: don't hardcode 'en' everywhere\n\n  return new DateEnv(Object.assign(Object.assign({\n    timeZone: BASE_OPTION_DEFAULTS.timeZone,\n    calendarSystem: 'gregory'\n  }, settings), {\n    locale: locale\n  }));\n} // HELPERS\n\n/*\nif nextDayThreshold is specified, slicing is done in an all-day fashion.\nyou can get nextDayThreshold from context.nextDayThreshold\n*/\n\n\nfunction sliceEvents(props, allDay) {\n  return sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;\n}\n\nvar version = '6.1.11';\nexport { Calendar, createPlugin, formatDate, formatRange, globalLocales, globalPlugins, sliceEvents, version };","import { int, pad } from \"../utils\";\n\nvar doNothing = function doNothing() {\n  return undefined;\n};\n\nexport var monthToStr = function monthToStr(monthNumber, shorthand, locale) {\n  return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber];\n};\nexport var revFormat = {\n  D: doNothing,\n  F: function F(dateObj, monthName, locale) {\n    dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n  },\n  G: function G(dateObj, hour) {\n    dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n  },\n  H: function H(dateObj, hour) {\n    dateObj.setHours(parseFloat(hour));\n  },\n  J: function J(dateObj, day) {\n    dateObj.setDate(parseFloat(day));\n  },\n  K: function K(dateObj, amPM, locale) {\n    dateObj.setHours(dateObj.getHours() % 12 + 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n  },\n  M: function M(dateObj, shortMonth, locale) {\n    dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n  },\n  S: function S(dateObj, seconds) {\n    dateObj.setSeconds(parseFloat(seconds));\n  },\n  U: function U(_, unixSeconds) {\n    return new Date(parseFloat(unixSeconds) * 1000);\n  },\n  W: function W(dateObj, weekNum, locale) {\n    var weekNumber = parseInt(weekNum);\n    var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n    date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n    return date;\n  },\n  Y: function Y(dateObj, year) {\n    dateObj.setFullYear(parseFloat(year));\n  },\n  Z: function Z(_, ISODate) {\n    return new Date(ISODate);\n  },\n  d: function d(dateObj, day) {\n    dateObj.setDate(parseFloat(day));\n  },\n  h: function h(dateObj, hour) {\n    dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n  },\n  i: function i(dateObj, minutes) {\n    dateObj.setMinutes(parseFloat(minutes));\n  },\n  j: function j(dateObj, day) {\n    dateObj.setDate(parseFloat(day));\n  },\n  l: doNothing,\n  m: function m(dateObj, month) {\n    dateObj.setMonth(parseFloat(month) - 1);\n  },\n  n: function n(dateObj, month) {\n    dateObj.setMonth(parseFloat(month) - 1);\n  },\n  s: function s(dateObj, seconds) {\n    dateObj.setSeconds(parseFloat(seconds));\n  },\n  u: function u(_, unixMillSeconds) {\n    return new Date(parseFloat(unixMillSeconds));\n  },\n  w: doNothing,\n  y: function y(dateObj, year) {\n    dateObj.setFullYear(2000 + parseFloat(year));\n  }\n};\nexport var tokenRegex = {\n  D: \"\",\n  F: \"\",\n  G: \"(\\\\d\\\\d|\\\\d)\",\n  H: \"(\\\\d\\\\d|\\\\d)\",\n  J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n  K: \"\",\n  M: \"\",\n  S: \"(\\\\d\\\\d|\\\\d)\",\n  U: \"(.+)\",\n  W: \"(\\\\d\\\\d|\\\\d)\",\n  Y: \"(\\\\d{4})\",\n  Z: \"(.+)\",\n  d: \"(\\\\d\\\\d|\\\\d)\",\n  h: \"(\\\\d\\\\d|\\\\d)\",\n  i: \"(\\\\d\\\\d|\\\\d)\",\n  j: \"(\\\\d\\\\d|\\\\d)\",\n  l: \"\",\n  m: \"(\\\\d\\\\d|\\\\d)\",\n  n: \"(\\\\d\\\\d|\\\\d)\",\n  s: \"(\\\\d\\\\d|\\\\d)\",\n  u: \"(.+)\",\n  w: \"(\\\\d\\\\d|\\\\d)\",\n  y: \"(\\\\d{2})\"\n};\nexport var formats = {\n  Z: function Z(date) {\n    return date.toISOString();\n  },\n  D: function D(date, locale, options) {\n    return locale.weekdays.shorthand[formats.w(date, locale, options)];\n  },\n  F: function F(date, locale, options) {\n    return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n  },\n  G: function G(date, locale, options) {\n    return pad(formats.h(date, locale, options));\n  },\n  H: function H(date) {\n    return pad(date.getHours());\n  },\n  J: function J(date, locale) {\n    return locale.ordinal !== undefined ? date.getDate() + locale.ordinal(date.getDate()) : date.getDate();\n  },\n  K: function K(date, locale) {\n    return locale.amPM[int(date.getHours() > 11)];\n  },\n  M: function M(date, locale) {\n    return monthToStr(date.getMonth(), true, locale);\n  },\n  S: function S(date) {\n    return pad(date.getSeconds());\n  },\n  U: function U(date) {\n    return date.getTime() / 1000;\n  },\n  W: function W(date, _, options) {\n    return options.getWeek(date);\n  },\n  Y: function Y(date) {\n    return pad(date.getFullYear(), 4);\n  },\n  d: function d(date) {\n    return pad(date.getDate());\n  },\n  h: function h(date) {\n    return date.getHours() % 12 ? date.getHours() % 12 : 12;\n  },\n  i: function i(date) {\n    return pad(date.getMinutes());\n  },\n  j: function j(date) {\n    return date.getDate();\n  },\n  l: function l(date, locale) {\n    return locale.weekdays.longhand[date.getDay()];\n  },\n  m: function m(date) {\n    return pad(date.getMonth() + 1);\n  },\n  n: function n(date) {\n    return date.getMonth() + 1;\n  },\n  s: function s(date) {\n    return date.getSeconds();\n  },\n  u: function u(date) {\n    return date.getTime();\n  },\n  w: function w(date) {\n    return date.getDay();\n  },\n  y: function y(date) {\n    return String(date.getFullYear()).substring(2);\n  }\n};","define([\"./core\", \"./selector\", \"./traversing\", \"./callbacks\", \"./deferred\", \"./deferred/exceptionHook\", \"./core/ready\", \"./data\", \"./queue\", \"./queue/delay\", \"./attributes\", \"./event\", \"./event/focusin\", \"./manipulation\", \"./manipulation/_evalUrl\", \"./wrap\", \"./css\", \"./css/hiddenVisibleSelectors\", \"./serialize\", \"./ajax\", \"./ajax/xhr\", \"./ajax/script\", \"./ajax/jsonp\", \"./ajax/load\", \"./event/ajax\", \"./effects\", \"./effects/animatedSelector\", \"./offset\", \"./dimensions\", \"./deprecated\", \"./exports/amd\", \"./exports/global\"], function (jQuery) {\n  \"use strict\";\n\n  return jQuery;\n});","// Initialize a jQuery object\ndefine([\"../core\", \"../var/document\", \"../var/isFunction\", \"./var/rsingleTag\", \"../traversing/findFilter\"], function (jQuery, document, isFunction, rsingleTag) {\n  \"use strict\"; // A central reference to the root jQuery(document)\n\n  var rootjQuery,\n      // A simple way to check for HTML strings\n  // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n  // Strict HTML recognition (#11290: must start with <)\n  // Shortcut simple #id case for speed\n  rquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n      init = jQuery.fn.init = function (selector, context, root) {\n    var match, elem; // HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\n    if (!selector) {\n      return this;\n    } // Method init() accepts an alternate rootjQuery\n    // so migrate can support jQuery.sub (gh-2101)\n\n\n    root = root || rootjQuery; // Handle HTML strings\n\n    if (typeof selector === \"string\") {\n      if (selector[0] === \"<\" && selector[selector.length - 1] === \">\" && selector.length >= 3) {\n        // Assume that strings that start and end with <> are HTML and skip the regex check\n        match = [null, selector, null];\n      } else {\n        match = rquickExpr.exec(selector);\n      } // Match html or make sure no context is specified for #id\n\n\n      if (match && (match[1] || !context)) {\n        // HANDLE: $(html) -> $(array)\n        if (match[1]) {\n          context = context instanceof jQuery ? context[0] : context; // Option to run scripts is true for back-compat\n          // Intentionally let the error be thrown if parseHTML is not present\n\n          jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true)); // HANDLE: $(html, props)\n\n          if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n            for (match in context) {\n              // Properties of context are called as methods if possible\n              if (isFunction(this[match])) {\n                this[match](context[match]); // ...and otherwise set as attributes\n              } else {\n                this.attr(match, context[match]);\n              }\n            }\n          }\n\n          return this; // HANDLE: $(#id)\n        } else {\n          elem = document.getElementById(match[2]);\n\n          if (elem) {\n            // Inject the element directly into the jQuery object\n            this[0] = elem;\n            this.length = 1;\n          }\n\n          return this;\n        } // HANDLE: $(expr, $(...))\n\n      } else if (!context || context.jquery) {\n        return (context || root).find(selector); // HANDLE: $(expr, context)\n        // (which is just equivalent to: $(context).find(expr)\n      } else {\n        return this.constructor(context).find(selector);\n      } // HANDLE: $(DOMElement)\n\n    } else if (selector.nodeType) {\n      this[0] = selector;\n      this.length = 1;\n      return this; // HANDLE: $(function)\n      // Shortcut for document ready\n    } else if (isFunction(selector)) {\n      return root.ready !== undefined ? root.ready(selector) : // Execute immediately if ready is not present\n      selector(jQuery);\n    }\n\n    return jQuery.makeArray(selector, this);\n  }; // Give the init function the jQuery prototype for later instantiation\n\n\n  init.prototype = jQuery.fn; // Initialize central reference\n\n  rootjQuery = jQuery(document);\n  return init;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nexport var HOOKS = [\"onChange\", \"onClose\", \"onDayCreate\", \"onDestroy\", \"onKeyDown\", \"onMonthChange\", \"onOpen\", \"onParseConfig\", \"onReady\", \"onValueUpdate\", \"onYearChange\", \"onPreCalendarPosition\"];\nexport var defaults = {\n  _disable: [],\n  allowInput: false,\n  allowInvalidPreload: false,\n  altFormat: \"F j, Y\",\n  altInput: false,\n  altInputClass: \"form-control input\",\n  animate: (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\" && window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n  ariaDateFormat: \"F j, Y\",\n  autoFillDefaultTime: true,\n  clickOpens: true,\n  closeOnSelect: true,\n  conjunction: \", \",\n  dateFormat: \"Y-m-d\",\n  defaultHour: 12,\n  defaultMinute: 0,\n  defaultSeconds: 0,\n  disable: [],\n  disableMobile: false,\n  enableSeconds: false,\n  enableTime: false,\n  errorHandler: function errorHandler(err) {\n    return typeof console !== \"undefined\" && console.warn(err);\n  },\n  getWeek: function getWeek(givenDate) {\n    var date = new Date(givenDate.getTime());\n    date.setHours(0, 0, 0, 0);\n    date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);\n    var week1 = new Date(date.getFullYear(), 0, 4);\n    return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);\n  },\n  hourIncrement: 1,\n  ignoredFocusElements: [],\n  inline: false,\n  locale: \"default\",\n  minuteIncrement: 5,\n  mode: \"single\",\n  monthSelectorType: \"dropdown\",\n  nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n  noCalendar: false,\n  now: new Date(),\n  onChange: [],\n  onClose: [],\n  onDayCreate: [],\n  onDestroy: [],\n  onKeyDown: [],\n  onMonthChange: [],\n  onOpen: [],\n  onParseConfig: [],\n  onReady: [],\n  onValueUpdate: [],\n  onYearChange: [],\n  onPreCalendarPosition: [],\n  plugins: [],\n  position: \"auto\",\n  positionElement: undefined,\n  prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n  shorthandCurrentMonth: false,\n  showMonths: 1,\n  static: false,\n  time_24hr: false,\n  weekNumbers: false,\n  wrap: false\n};","define([\"../Data\"], function (Data) {\n  \"use strict\";\n\n  return new Data();\n});","define(function () {\n  \"use strict\"; // Only count HTML whitespace\n  // Other whitespace should count in values\n  // https://infra.spec.whatwg.org/#ascii-whitespace\n\n  return /[^\\x20\\t\\r\\n\\f]+/g;\n});","define(function () {\n  \"use strict\"; // All support tests are defined in their respective modules.\n\n  return {};\n});","define(function () {\n  \"use strict\";\n\n  function nodeName(elem, name) {\n    return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n  }\n\n  ;\n  return nodeName;\n});","define([\"../core\", \"../core/toType\", \"../var/isFunction\"], function (jQuery, toType, isFunction) {\n  \"use strict\"; // Multifunctional method to get and set values of a collection\n  // The value/s can optionally be executed if it's a function\n\n  var access = function access(elems, fn, key, value, chainable, emptyGet, raw) {\n    var i = 0,\n        len = elems.length,\n        bulk = key == null; // Sets many values\n\n    if (toType(key) === \"object\") {\n      chainable = true;\n\n      for (i in key) {\n        access(elems, fn, i, key[i], true, emptyGet, raw);\n      } // Sets one value\n\n    } else if (value !== undefined) {\n      chainable = true;\n\n      if (!isFunction(value)) {\n        raw = true;\n      }\n\n      if (bulk) {\n        // Bulk operations run against the entire set\n        if (raw) {\n          fn.call(elems, value);\n          fn = null; // ...except when executing function values\n        } else {\n          bulk = fn;\n\n          fn = function fn(elem, key, value) {\n            return bulk.call(jQuery(elem), value);\n          };\n        }\n      }\n\n      if (fn) {\n        for (; i < len; i++) {\n          fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));\n        }\n      }\n    }\n\n    if (chainable) {\n      return elems;\n    } // Gets\n\n\n    if (bulk) {\n      return fn.call(elems);\n    }\n\n    return len ? fn(elems[0], key) : emptyGet;\n  };\n\n  return access;\n});","export var english = {\n  weekdays: {\n    shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n    longhand: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\n  },\n  months: {\n    shorthand: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n    longhand: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]\n  },\n  daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n  firstDayOfWeek: 0,\n  ordinal: function ordinal(nth) {\n    var s = nth % 100;\n    if (s > 3 && s < 21) return \"th\";\n\n    switch (s % 10) {\n      case 1:\n        return \"st\";\n\n      case 2:\n        return \"nd\";\n\n      case 3:\n        return \"rd\";\n\n      default:\n        return \"th\";\n    }\n  },\n  rangeSeparator: \" to \",\n  weekAbbreviation: \"Wk\",\n  scrollTitle: \"Scroll to increment\",\n  toggleTitle: \"Click to toggle\",\n  amPM: [\"AM\", \"PM\"],\n  yearAriaLabel: \"Year\",\n  monthAriaLabel: \"Month\",\n  hourAriaLabel: \"Hour\",\n  minuteAriaLabel: \"Minute\",\n  time_24hr: false\n};\nexport default english;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"../var/class2type\", \"../var/toString\"], function (class2type, toString) {\n  \"use strict\";\n\n  function toType(obj) {\n    if (obj == null) {\n      return obj + \"\";\n    } // Support: Android <=2.3 only (functionish RegExp)\n\n\n    return _typeof(obj) === \"object\" || typeof obj === \"function\" ? class2type[toString.call(obj)] || \"object\" : _typeof(obj);\n  }\n\n  return toType;\n});","define([\"./core\", \"./var/indexOf\", \"./traversing/var/dir\", \"./traversing/var/siblings\", \"./traversing/var/rneedsContext\", \"./core/nodeName\", \"./core/init\", \"./traversing/findFilter\", \"./selector\"], function (jQuery, indexOf, dir, _siblings, rneedsContext, nodeName) {\n  \"use strict\";\n\n  var rparentsprev = /^(?:parents|prev(?:Until|All))/,\n      // Methods guaranteed to produce a unique set when starting from a unique set\n  guaranteedUnique = {\n    children: true,\n    contents: true,\n    next: true,\n    prev: true\n  };\n  jQuery.fn.extend({\n    has: function has(target) {\n      var targets = jQuery(target, this),\n          l = targets.length;\n      return this.filter(function () {\n        var i = 0;\n\n        for (; i < l; i++) {\n          if (jQuery.contains(this, targets[i])) {\n            return true;\n          }\n        }\n      });\n    },\n    closest: function closest(selectors, context) {\n      var cur,\n          i = 0,\n          l = this.length,\n          matched = [],\n          targets = typeof selectors !== \"string\" && jQuery(selectors); // Positional selectors never match, since there's no _selection_ context\n\n      if (!rneedsContext.test(selectors)) {\n        for (; i < l; i++) {\n          for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n            // Always skip document fragments\n            if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : // Don't pass non-elements to Sizzle\n            cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {\n              matched.push(cur);\n              break;\n            }\n          }\n        }\n      }\n\n      return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n    },\n    // Determine the position of an element within the set\n    index: function index(elem) {\n      // No argument, return index in parent\n      if (!elem) {\n        return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;\n      } // Index in selector\n\n\n      if (typeof elem === \"string\") {\n        return indexOf.call(jQuery(elem), this[0]);\n      } // Locate the position of the desired element\n\n\n      return indexOf.call(this, // If it receives a jQuery object, the first element is used\n      elem.jquery ? elem[0] : elem);\n    },\n    add: function add(selector, context) {\n      return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));\n    },\n    addBack: function addBack(selector) {\n      return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));\n    }\n  });\n\n  function sibling(cur, dir) {\n    while ((cur = cur[dir]) && cur.nodeType !== 1) {}\n\n    return cur;\n  }\n\n  jQuery.each({\n    parent: function parent(elem) {\n      var parent = elem.parentNode;\n      return parent && parent.nodeType !== 11 ? parent : null;\n    },\n    parents: function parents(elem) {\n      return dir(elem, \"parentNode\");\n    },\n    parentsUntil: function parentsUntil(elem, i, until) {\n      return dir(elem, \"parentNode\", until);\n    },\n    next: function next(elem) {\n      return sibling(elem, \"nextSibling\");\n    },\n    prev: function prev(elem) {\n      return sibling(elem, \"previousSibling\");\n    },\n    nextAll: function nextAll(elem) {\n      return dir(elem, \"nextSibling\");\n    },\n    prevAll: function prevAll(elem) {\n      return dir(elem, \"previousSibling\");\n    },\n    nextUntil: function nextUntil(elem, i, until) {\n      return dir(elem, \"nextSibling\", until);\n    },\n    prevUntil: function prevUntil(elem, i, until) {\n      return dir(elem, \"previousSibling\", until);\n    },\n    siblings: function siblings(elem) {\n      return _siblings((elem.parentNode || {}).firstChild, elem);\n    },\n    children: function children(elem) {\n      return _siblings(elem.firstChild);\n    },\n    contents: function contents(elem) {\n      if (typeof elem.contentDocument !== \"undefined\") {\n        return elem.contentDocument;\n      } // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n      // Treat the template element as a regular one in browsers that\n      // don't support it.\n\n\n      if (nodeName(elem, \"template\")) {\n        elem = elem.content || elem;\n      }\n\n      return jQuery.merge([], elem.childNodes);\n    }\n  }, function (name, fn) {\n    jQuery.fn[name] = function (until, selector) {\n      var matched = jQuery.map(this, fn, until);\n\n      if (name.slice(-5) !== \"Until\") {\n        selector = until;\n      }\n\n      if (selector && typeof selector === \"string\") {\n        matched = jQuery.filter(selector, matched);\n      }\n\n      if (this.length > 1) {\n        // Remove duplicates\n        if (!guaranteedUnique[name]) {\n          jQuery.uniqueSort(matched);\n        } // Reverse order for parents* and prev-derivatives\n\n\n        if (rparentsprev.test(name)) {\n          matched.reverse();\n        }\n      }\n\n      return this.pushStack(matched);\n    };\n  });\n  return jQuery;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"./core\", \"./var/isFunction\", \"./var/slice\", \"./callbacks\"], function (jQuery, isFunction, slice) {\n  \"use strict\";\n\n  function Identity(v) {\n    return v;\n  }\n\n  function Thrower(ex) {\n    throw ex;\n  }\n\n  function adoptValue(value, resolve, reject, noValue) {\n    var method;\n\n    try {\n      // Check for promise aspect first to privilege synchronous behavior\n      if (value && isFunction(method = value.promise)) {\n        method.call(value).done(resolve).fail(reject); // Other thenables\n      } else if (value && isFunction(method = value.then)) {\n        method.call(value, resolve, reject); // Other non-thenables\n      } else {\n        // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n        // * false: [ value ].slice( 0 ) => resolve( value )\n        // * true: [ value ].slice( 1 ) => resolve()\n        resolve.apply(undefined, [value].slice(noValue));\n      } // For Promises/A+, convert exceptions into rejections\n      // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n      // Deferred#then to conditionally suppress rejection.\n\n    } catch (value) {\n      // Support: Android 4.0 only\n      // Strict mode functions invoked without .call/.apply get global-object context\n      reject.apply(undefined, [value]);\n    }\n  }\n\n  jQuery.extend({\n    Deferred: function Deferred(func) {\n      var tuples = [// action, add listener, callbacks,\n      // ... .then handlers, argument index, [final state]\n      [\"notify\", \"progress\", jQuery.Callbacks(\"memory\"), jQuery.Callbacks(\"memory\"), 2], [\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 0, \"resolved\"], [\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 1, \"rejected\"]],\n          _state = \"pending\",\n          _promise = {\n        state: function state() {\n          return _state;\n        },\n        always: function always() {\n          deferred.done(arguments).fail(arguments);\n          return this;\n        },\n        \"catch\": function _catch(fn) {\n          return _promise.then(null, fn);\n        },\n        // Keep pipe for back-compat\n        pipe: function pipe() {\n          var fns = arguments;\n          return jQuery.Deferred(function (newDefer) {\n            jQuery.each(tuples, function (i, tuple) {\n              // Map tuples (progress, done, fail) to arguments (done, fail, progress)\n              var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]]; // deferred.progress(function() { bind to newDefer or newDefer.notify })\n              // deferred.done(function() { bind to newDefer or newDefer.resolve })\n              // deferred.fail(function() { bind to newDefer or newDefer.reject })\n\n              deferred[tuple[1]](function () {\n                var returned = fn && fn.apply(this, arguments);\n\n                if (returned && isFunction(returned.promise)) {\n                  returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);\n                } else {\n                  newDefer[tuple[0] + \"With\"](this, fn ? [returned] : arguments);\n                }\n              });\n            });\n            fns = null;\n          }).promise();\n        },\n        then: function then(onFulfilled, onRejected, onProgress) {\n          var maxDepth = 0;\n\n          function resolve(depth, deferred, handler, special) {\n            return function () {\n              var that = this,\n                  args = arguments,\n                  mightThrow = function mightThrow() {\n                var returned, then; // Support: Promises/A+ section 2.3.3.3.3\n                // https://promisesaplus.com/#point-59\n                // Ignore double-resolution attempts\n\n                if (depth < maxDepth) {\n                  return;\n                }\n\n                returned = handler.apply(that, args); // Support: Promises/A+ section 2.3.1\n                // https://promisesaplus.com/#point-48\n\n                if (returned === deferred.promise()) {\n                  throw new TypeError(\"Thenable self-resolution\");\n                } // Support: Promises/A+ sections 2.3.3.1, 3.5\n                // https://promisesaplus.com/#point-54\n                // https://promisesaplus.com/#point-75\n                // Retrieve `then` only once\n\n\n                then = returned && (_typeof(returned) === \"object\" || typeof returned === \"function\") && returned.then; // Handle a returned thenable\n\n                if (isFunction(then)) {\n                  // Special processors (notify) just wait for resolution\n                  if (special) {\n                    then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special)); // Normal processors (resolve) also hook into progress\n                  } else {\n                    // ...and disregard older resolution values\n                    maxDepth++;\n                    then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));\n                  } // Handle all other returned values\n\n                } else {\n                  // Only substitute handlers pass on context\n                  // and multiple values (non-spec behavior)\n                  if (handler !== Identity) {\n                    that = undefined;\n                    args = [returned];\n                  } // Process the value(s)\n                  // Default process is resolve\n\n\n                  (special || deferred.resolveWith)(that, args);\n                }\n              },\n                  // Only normal processors (resolve) catch and reject exceptions\n              process = special ? mightThrow : function () {\n                try {\n                  mightThrow();\n                } catch (e) {\n                  if (jQuery.Deferred.exceptionHook) {\n                    jQuery.Deferred.exceptionHook(e, process.stackTrace);\n                  } // Support: Promises/A+ section 2.3.3.3.4.1\n                  // https://promisesaplus.com/#point-61\n                  // Ignore post-resolution exceptions\n\n\n                  if (depth + 1 >= maxDepth) {\n                    // Only substitute handlers pass on context\n                    // and multiple values (non-spec behavior)\n                    if (handler !== Thrower) {\n                      that = undefined;\n                      args = [e];\n                    }\n\n                    deferred.rejectWith(that, args);\n                  }\n                }\n              }; // Support: Promises/A+ section 2.3.3.3.1\n              // https://promisesaplus.com/#point-57\n              // Re-resolve promises immediately to dodge false rejection from\n              // subsequent errors\n\n\n              if (depth) {\n                process();\n              } else {\n                // Call an optional hook to record the stack, in case of exception\n                // since it's otherwise lost when execution goes async\n                if (jQuery.Deferred.getStackHook) {\n                  process.stackTrace = jQuery.Deferred.getStackHook();\n                }\n\n                window.setTimeout(process);\n              }\n            };\n          }\n\n          return jQuery.Deferred(function (newDefer) {\n            // progress_handlers.add( ... )\n            tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith)); // fulfilled_handlers.add( ... )\n\n            tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity)); // rejected_handlers.add( ... )\n\n            tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));\n          }).promise();\n        },\n        // Get a promise for this deferred\n        // If obj is provided, the promise aspect is added to the object\n        promise: function promise(obj) {\n          return obj != null ? jQuery.extend(obj, _promise) : _promise;\n        }\n      },\n          deferred = {}; // Add list-specific methods\n\n      jQuery.each(tuples, function (i, tuple) {\n        var list = tuple[2],\n            stateString = tuple[5]; // promise.progress = list.add\n        // promise.done = list.add\n        // promise.fail = list.add\n\n        _promise[tuple[1]] = list.add; // Handle state\n\n        if (stateString) {\n          list.add(function () {\n            // state = \"resolved\" (i.e., fulfilled)\n            // state = \"rejected\"\n            _state = stateString;\n          }, // rejected_callbacks.disable\n          // fulfilled_callbacks.disable\n          tuples[3 - i][2].disable, // rejected_handlers.disable\n          // fulfilled_handlers.disable\n          tuples[3 - i][3].disable, // progress_callbacks.lock\n          tuples[0][2].lock, // progress_handlers.lock\n          tuples[0][3].lock);\n        } // progress_handlers.fire\n        // fulfilled_handlers.fire\n        // rejected_handlers.fire\n\n\n        list.add(tuple[3].fire); // deferred.notify = function() { deferred.notifyWith(...) }\n        // deferred.resolve = function() { deferred.resolveWith(...) }\n        // deferred.reject = function() { deferred.rejectWith(...) }\n\n        deferred[tuple[0]] = function () {\n          deferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n          return this;\n        }; // deferred.notifyWith = list.fireWith\n        // deferred.resolveWith = list.fireWith\n        // deferred.rejectWith = list.fireWith\n\n\n        deferred[tuple[0] + \"With\"] = list.fireWith;\n      }); // Make the deferred a promise\n\n      _promise.promise(deferred); // Call given func if any\n\n\n      if (func) {\n        func.call(deferred, deferred);\n      } // All done!\n\n\n      return deferred;\n    },\n    // Deferred helper\n    when: function when(singleValue) {\n      var // count of uncompleted subordinates\n      remaining = arguments.length,\n          // count of unprocessed arguments\n      i = remaining,\n          // subordinate fulfillment data\n      resolveContexts = Array(i),\n          resolveValues = slice.call(arguments),\n          // the master Deferred\n      master = jQuery.Deferred(),\n          // subordinate callback factory\n      updateFunc = function updateFunc(i) {\n        return function (value) {\n          resolveContexts[i] = this;\n          resolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\n          if (! --remaining) {\n            master.resolveWith(resolveContexts, resolveValues);\n          }\n        };\n      }; // Single- and empty arguments are adopted like Promise.resolve\n\n\n      if (remaining <= 1) {\n        adoptValue(singleValue, master.done(updateFunc(i)).resolve, master.reject, !remaining); // Use .then() to unwrap secondary thenables (cf. gh-3000)\n\n        if (master.state() === \"pending\" || isFunction(resolveValues[i] && resolveValues[i].then)) {\n          return master.then();\n        }\n      } // Multiple arguments are aggregated like Promise.all array elements\n\n\n      while (i--) {\n        adoptValue(resolveValues[i], updateFunc(i), master.reject);\n      }\n\n      return master.promise();\n    }\n  });\n  return jQuery;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"./core\", \"./var/document\", \"./var/documentElement\", \"./var/isFunction\", \"./var/rnothtmlwhite\", \"./var/rcheckableType\", \"./var/slice\", \"./data/var/dataPriv\", \"./core/nodeName\", \"./core/init\", \"./selector\"], function (jQuery, document, documentElement, isFunction, rnothtmlwhite, rcheckableType, slice, dataPriv, nodeName) {\n  \"use strict\";\n\n  var rkeyEvent = /^key/,\n      rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n      rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n  function returnTrue() {\n    return true;\n  }\n\n  function returnFalse() {\n    return false;\n  } // Support: IE <=9 - 11+\n  // focus() and blur() are asynchronous, except when they are no-op.\n  // So expect focus to be synchronous when the element is already active,\n  // and blur to be synchronous when the element is not already active.\n  // (focus and blur are always synchronous in other supported browsers,\n  // this just defines when we can count on it).\n\n\n  function expectSync(elem, type) {\n    return elem === safeActiveElement() === (type === \"focus\");\n  } // Support: IE <=9 only\n  // Accessing document.activeElement can throw unexpectedly\n  // https://bugs.jquery.com/ticket/13393\n\n\n  function safeActiveElement() {\n    try {\n      return document.activeElement;\n    } catch (err) {}\n  }\n\n  function _on(elem, types, selector, data, fn, one) {\n    var origFn, type; // Types can be a map of types/handlers\n\n    if (_typeof(types) === \"object\") {\n      // ( types-Object, selector, data )\n      if (typeof selector !== \"string\") {\n        // ( types-Object, data )\n        data = data || selector;\n        selector = undefined;\n      }\n\n      for (type in types) {\n        _on(elem, type, selector, data, types[type], one);\n      }\n\n      return elem;\n    }\n\n    if (data == null && fn == null) {\n      // ( types, fn )\n      fn = selector;\n      data = selector = undefined;\n    } else if (fn == null) {\n      if (typeof selector === \"string\") {\n        // ( types, selector, fn )\n        fn = data;\n        data = undefined;\n      } else {\n        // ( types, data, fn )\n        fn = data;\n        data = selector;\n        selector = undefined;\n      }\n    }\n\n    if (fn === false) {\n      fn = returnFalse;\n    } else if (!fn) {\n      return elem;\n    }\n\n    if (one === 1) {\n      origFn = fn;\n\n      fn = function fn(event) {\n        // Can use an empty set, since event contains the info\n        jQuery().off(event);\n        return origFn.apply(this, arguments);\n      }; // Use same guid so caller can remove using origFn\n\n\n      fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n    }\n\n    return elem.each(function () {\n      jQuery.event.add(this, types, fn, data, selector);\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   */\n\n\n  jQuery.event = {\n    global: {},\n    add: function add(elem, types, handler, data, selector) {\n      var handleObjIn,\n          eventHandle,\n          tmp,\n          events,\n          t,\n          handleObj,\n          special,\n          handlers,\n          type,\n          namespaces,\n          origType,\n          elemData = dataPriv.get(elem); // Don't attach events to noData or text/comment nodes (but allow plain objects)\n\n      if (!elemData) {\n        return;\n      } // Caller can pass in an object of custom data in lieu of the handler\n\n\n      if (handler.handler) {\n        handleObjIn = handler;\n        handler = handleObjIn.handler;\n        selector = handleObjIn.selector;\n      } // Ensure that invalid selectors throw exceptions at attach time\n      // Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\n\n      if (selector) {\n        jQuery.find.matchesSelector(documentElement, selector);\n      } // Make sure that the handler has a unique ID, used to find/remove it later\n\n\n      if (!handler.guid) {\n        handler.guid = jQuery.guid++;\n      } // Init the element's event structure and main handler, if this is the first\n\n\n      if (!(events = elemData.events)) {\n        events = elemData.events = {};\n      }\n\n      if (!(eventHandle = elemData.handle)) {\n        eventHandle = elemData.handle = function (e) {\n          // Discard the second event of a jQuery.event.trigger() and\n          // when an event is called after a page has unloaded\n          return typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;\n        };\n      } // Handle multiple events separated by a space\n\n\n      types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n      t = types.length;\n\n      while (t--) {\n        tmp = rtypenamespace.exec(types[t]) || [];\n        type = origType = tmp[1];\n        namespaces = (tmp[2] || \"\").split(\".\").sort(); // There *must* be a type, no attaching namespace-only handlers\n\n        if (!type) {\n          continue;\n        } // If event changes its type, use the special event handlers for the changed type\n\n\n        special = jQuery.event.special[type] || {}; // If selector defined, determine special event api type, otherwise given type\n\n        type = (selector ? special.delegateType : special.bindType) || type; // Update special based on newly reset type\n\n        special = jQuery.event.special[type] || {}; // handleObj is passed to all event handlers\n\n        handleObj = jQuery.extend({\n          type: type,\n          origType: origType,\n          data: data,\n          handler: handler,\n          guid: handler.guid,\n          selector: selector,\n          needsContext: selector && jQuery.expr.match.needsContext.test(selector),\n          namespace: namespaces.join(\".\")\n        }, handleObjIn); // Init the event handler queue if we're the first\n\n        if (!(handlers = events[type])) {\n          handlers = events[type] = [];\n          handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false\n\n          if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {\n            if (elem.addEventListener) {\n              elem.addEventListener(type, eventHandle);\n            }\n          }\n        }\n\n        if (special.add) {\n          special.add.call(elem, handleObj);\n\n          if (!handleObj.handler.guid) {\n            handleObj.handler.guid = handler.guid;\n          }\n        } // Add to the element's handler list, delegates in front\n\n\n        if (selector) {\n          handlers.splice(handlers.delegateCount++, 0, handleObj);\n        } else {\n          handlers.push(handleObj);\n        } // Keep track of which events have ever been used, for event optimization\n\n\n        jQuery.event.global[type] = true;\n      }\n    },\n    // Detach an event or set of events from an element\n    remove: function remove(elem, types, handler, selector, mappedTypes) {\n      var j,\n          origCount,\n          tmp,\n          events,\n          t,\n          handleObj,\n          special,\n          handlers,\n          type,\n          namespaces,\n          origType,\n          elemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n      if (!elemData || !(events = elemData.events)) {\n        return;\n      } // Once for each type.namespace in types; type may be omitted\n\n\n      types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n      t = types.length;\n\n      while (t--) {\n        tmp = rtypenamespace.exec(types[t]) || [];\n        type = origType = tmp[1];\n        namespaces = (tmp[2] || \"\").split(\".\").sort(); // Unbind all events (on this namespace, if provided) for the element\n\n        if (!type) {\n          for (type in events) {\n            jQuery.event.remove(elem, type + types[t], handler, selector, true);\n          }\n\n          continue;\n        }\n\n        special = jQuery.event.special[type] || {};\n        type = (selector ? special.delegateType : special.bindType) || type;\n        handlers = events[type] || [];\n        tmp = tmp[2] && new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\"); // Remove matching events\n\n        origCount = j = handlers.length;\n\n        while (j--) {\n          handleObj = handlers[j];\n\n          if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector)) {\n            handlers.splice(j, 1);\n\n            if (handleObj.selector) {\n              handlers.delegateCount--;\n            }\n\n            if (special.remove) {\n              special.remove.call(elem, handleObj);\n            }\n          }\n        } // Remove generic event handler if we removed something and no more handlers exist\n        // (avoids potential for endless recursion during removal of special event handlers)\n\n\n        if (origCount && !handlers.length) {\n          if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {\n            jQuery.removeEvent(elem, type, elemData.handle);\n          }\n\n          delete events[type];\n        }\n      } // Remove data and the expando if it's no longer used\n\n\n      if (jQuery.isEmptyObject(events)) {\n        dataPriv.remove(elem, \"handle events\");\n      }\n    },\n    dispatch: function dispatch(nativeEvent) {\n      // Make a writable jQuery.Event from the native event object\n      var event = jQuery.event.fix(nativeEvent);\n      var i,\n          j,\n          ret,\n          matched,\n          handleObj,\n          handlerQueue,\n          args = new Array(arguments.length),\n          handlers = (dataPriv.get(this, \"events\") || {})[event.type] || [],\n          special = jQuery.event.special[event.type] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event\n\n      args[0] = event;\n\n      for (i = 1; i < arguments.length; i++) {\n        args[i] = arguments[i];\n      }\n\n      event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired\n\n      if (special.preDispatch && special.preDispatch.call(this, event) === false) {\n        return;\n      } // Determine handlers\n\n\n      handlerQueue = jQuery.event.handlers.call(this, event, handlers); // Run delegates first; they may want to stop propagation beneath us\n\n      i = 0;\n\n      while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n        event.currentTarget = matched.elem;\n        j = 0;\n\n        while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {\n          // If the event is namespaced, then each handler is only invoked if it is\n          // specially universal or its namespaces are a superset of the event's.\n          if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {\n            event.handleObj = handleObj;\n            event.data = handleObj.data;\n            ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);\n\n            if (ret !== undefined) {\n              if ((event.result = ret) === false) {\n                event.preventDefault();\n                event.stopPropagation();\n              }\n            }\n          }\n        }\n      } // Call the postDispatch hook for the mapped type\n\n\n      if (special.postDispatch) {\n        special.postDispatch.call(this, event);\n      }\n\n      return event.result;\n    },\n    handlers: function handlers(event, _handlers) {\n      var i,\n          handleObj,\n          sel,\n          matchedHandlers,\n          matchedSelectors,\n          handlerQueue = [],\n          delegateCount = _handlers.delegateCount,\n          cur = event.target; // Find delegate handlers\n\n      if (delegateCount && // Support: IE <=9\n      // Black-hole SVG <use> instance trees (trac-13180)\n      cur.nodeType && // Support: Firefox <=42\n      // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n      // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n      // Support: IE 11 only\n      // ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n      !(event.type === \"click\" && event.button >= 1)) {\n        for (; cur !== this; cur = cur.parentNode || this) {\n          // Don't check non-elements (#13208)\n          // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n          if (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n            matchedHandlers = [];\n            matchedSelectors = {};\n\n            for (i = 0; i < delegateCount; i++) {\n              handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (#13203)\n\n              sel = handleObj.selector + \" \";\n\n              if (matchedSelectors[sel] === undefined) {\n                matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;\n              }\n\n              if (matchedSelectors[sel]) {\n                matchedHandlers.push(handleObj);\n              }\n            }\n\n            if (matchedHandlers.length) {\n              handlerQueue.push({\n                elem: cur,\n                handlers: matchedHandlers\n              });\n            }\n          }\n        }\n      } // Add the remaining (directly-bound) handlers\n\n\n      cur = this;\n\n      if (delegateCount < _handlers.length) {\n        handlerQueue.push({\n          elem: cur,\n          handlers: _handlers.slice(delegateCount)\n        });\n      }\n\n      return handlerQueue;\n    },\n    addProp: function addProp(name, hook) {\n      Object.defineProperty(jQuery.Event.prototype, name, {\n        enumerable: true,\n        configurable: true,\n        get: isFunction(hook) ? function () {\n          if (this.originalEvent) {\n            return hook(this.originalEvent);\n          }\n        } : function () {\n          if (this.originalEvent) {\n            return this.originalEvent[name];\n          }\n        },\n        set: function set(value) {\n          Object.defineProperty(this, name, {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: value\n          });\n        }\n      });\n    },\n    fix: function fix(originalEvent) {\n      return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);\n    },\n    special: {\n      load: {\n        // Prevent triggered image.load events from bubbling to window.load\n        noBubble: true\n      },\n      click: {\n        // Utilize native event to ensure correct state for checkable inputs\n        setup: function setup(data) {\n          // For mutual compressibility with _default, replace `this` access with a local var.\n          // `|| data` is dead code meant only to preserve the variable through minification.\n          var el = this || data; // Claim the first handler\n\n          if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n            // dataPriv.set( el, \"click\", ... )\n            leverageNative(el, \"click\", returnTrue);\n          } // Return false to allow normal processing in the caller\n\n\n          return false;\n        },\n        trigger: function trigger(data) {\n          // For mutual compressibility with _default, replace `this` access with a local var.\n          // `|| data` is dead code meant only to preserve the variable through minification.\n          var el = this || data; // Force setup before triggering a click\n\n          if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n            leverageNative(el, \"click\");\n          } // Return non-false to allow normal event-path propagation\n\n\n          return true;\n        },\n        // For cross-browser consistency, suppress native .click() on links\n        // Also prevent it if we're currently inside a leveraged native-event stack\n        _default: function _default(event) {\n          var target = event.target;\n          return rcheckableType.test(target.type) && target.click && nodeName(target, \"input\") && dataPriv.get(target, \"click\") || nodeName(target, \"a\");\n        }\n      },\n      beforeunload: {\n        postDispatch: function postDispatch(event) {\n          // Support: Firefox 20+\n          // Firefox doesn't alert if the returnValue field is not set.\n          if (event.result !== undefined && event.originalEvent) {\n            event.originalEvent.returnValue = event.result;\n          }\n        }\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.\n\n  function leverageNative(el, type, expectSync) {\n    // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n    if (!expectSync) {\n      if (dataPriv.get(el, type) === undefined) {\n        jQuery.event.add(el, type, returnTrue);\n      }\n\n      return;\n    } // Register the controller as a special universal handler for all event namespaces\n\n\n    dataPriv.set(el, type, false);\n    jQuery.event.add(el, type, {\n      namespace: false,\n      handler: function handler(event) {\n        var notAsync,\n            result,\n            saved = dataPriv.get(this, type);\n\n        if (event.isTrigger & 1 && this[type]) {\n          // Interrupt processing of the outer synthetic .trigger()ed event\n          // Saved data should be false in such cases, but might be a leftover capture object\n          // from an async native handler (gh-4350)\n          if (!saved.length) {\n            // Store arguments for use when handling the inner native event\n            // There will always be at least one argument (an event object), so this array\n            // will not be confused with a leftover capture object.\n            saved = slice.call(arguments);\n            dataPriv.set(this, type, saved); // Trigger the native event and capture its result\n            // Support: IE <=9 - 11+\n            // focus() and blur() are asynchronous\n\n            notAsync = expectSync(this, type);\n            this[type]();\n            result = dataPriv.get(this, type);\n\n            if (saved !== result || notAsync) {\n              dataPriv.set(this, type, false);\n            } else {\n              result = {};\n            }\n\n            if (saved !== result) {\n              // Cancel the outer synthetic event\n              event.stopImmediatePropagation();\n              event.preventDefault();\n              return result.value;\n            } // If this is an inner synthetic event for an event with a bubbling surrogate\n            // (focus or blur), assume that the surrogate already propagated from triggering the\n            // native event and prevent that from happening again here.\n            // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n            // bubbling surrogate propagates *after* the non-bubbling base), but that seems\n            // less bad than duplication.\n\n          } else if ((jQuery.event.special[type] || {}).delegateType) {\n            event.stopPropagation();\n          } // If this is a native event triggered above, everything is now in order\n          // Fire an inner synthetic event with the original arguments\n\n        } else if (saved.length) {\n          // ...and capture the result\n          dataPriv.set(this, type, {\n            value: jQuery.event.trigger( // Support: IE <=9 - 11+\n            // Extend with the prototype to reset the above stopImmediatePropagation()\n            jQuery.extend(saved[0], jQuery.Event.prototype), saved.slice(1), this)\n          }); // Abort handling of the native event\n\n          event.stopImmediatePropagation();\n        }\n      }\n    });\n  }\n\n  jQuery.removeEvent = function (elem, type, handle) {\n    // This \"if\" is needed for plain objects\n    if (elem.removeEventListener) {\n      elem.removeEventListener(type, handle);\n    }\n  };\n\n  jQuery.Event = function (src, props) {\n    // Allow instantiation without the 'new' keyword\n    if (!(this instanceof jQuery.Event)) {\n      return new jQuery.Event(src, props);\n    } // Event object\n\n\n    if (src && src.type) {\n      this.originalEvent = src;\n      this.type = src.type; // Events bubbling up the document may have been marked as prevented\n      // by a handler lower down the tree; reflect the correct value.\n\n      this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android <=2.3 only\n      src.returnValue === false ? returnTrue : returnFalse; // Create target properties\n      // Support: Safari <=6 - 7 only\n      // Target should not be a text node (#504, #13143)\n\n      this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;\n      this.currentTarget = src.currentTarget;\n      this.relatedTarget = src.relatedTarget; // Event type\n    } else {\n      this.type = src;\n    } // Put explicitly provided properties onto the event object\n\n\n    if (props) {\n      jQuery.extend(this, props);\n    } // Create a timestamp if incoming event doesn't have one\n\n\n    this.timeStamp = src && src.timeStamp || Date.now(); // Mark it as fixed\n\n    this[jQuery.expando] = true;\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\n\n\n  jQuery.Event.prototype = {\n    constructor: jQuery.Event,\n    isDefaultPrevented: returnFalse,\n    isPropagationStopped: returnFalse,\n    isImmediatePropagationStopped: returnFalse,\n    isSimulated: false,\n    preventDefault: function preventDefault() {\n      var e = this.originalEvent;\n      this.isDefaultPrevented = returnTrue;\n\n      if (e && !this.isSimulated) {\n        e.preventDefault();\n      }\n    },\n    stopPropagation: function stopPropagation() {\n      var e = this.originalEvent;\n      this.isPropagationStopped = returnTrue;\n\n      if (e && !this.isSimulated) {\n        e.stopPropagation();\n      }\n    },\n    stopImmediatePropagation: function stopImmediatePropagation() {\n      var e = this.originalEvent;\n      this.isImmediatePropagationStopped = returnTrue;\n\n      if (e && !this.isSimulated) {\n        e.stopImmediatePropagation();\n      }\n\n      this.stopPropagation();\n    }\n  }; // Includes all common event props including KeyEvent and MouseEvent specific props\n\n  jQuery.each({\n    altKey: true,\n    bubbles: true,\n    cancelable: true,\n    changedTouches: true,\n    ctrlKey: true,\n    detail: true,\n    eventPhase: true,\n    metaKey: true,\n    pageX: true,\n    pageY: true,\n    shiftKey: true,\n    view: true,\n    \"char\": true,\n    code: true,\n    charCode: true,\n    key: true,\n    keyCode: true,\n    button: true,\n    buttons: true,\n    clientX: true,\n    clientY: true,\n    offsetX: true,\n    offsetY: true,\n    pointerId: true,\n    pointerType: true,\n    screenX: true,\n    screenY: true,\n    targetTouches: true,\n    toElement: true,\n    touches: true,\n    which: function which(event) {\n      var button = event.button; // Add which for key events\n\n      if (event.which == null && rkeyEvent.test(event.type)) {\n        return event.charCode != null ? event.charCode : event.keyCode;\n      } // Add which for click: 1 === left; 2 === middle; 3 === right\n\n\n      if (!event.which && button !== undefined && rmouseEvent.test(event.type)) {\n        if (button & 1) {\n          return 1;\n        }\n\n        if (button & 2) {\n          return 3;\n        }\n\n        if (button & 4) {\n          return 2;\n        }\n\n        return 0;\n      }\n\n      return event.which;\n    }\n  }, jQuery.event.addProp);\n  jQuery.each({\n    focus: \"focusin\",\n    blur: \"focusout\"\n  }, function (type, delegateType) {\n    jQuery.event.special[type] = {\n      // Utilize native event if possible so blur/focus sequence is correct\n      setup: function setup() {\n        // Claim the first handler\n        // dataPriv.set( this, \"focus\", ... )\n        // dataPriv.set( this, \"blur\", ... )\n        leverageNative(this, type, expectSync); // Return false to allow normal processing in the caller\n\n        return false;\n      },\n      trigger: function trigger() {\n        // Force setup before trigger\n        leverageNative(this, type); // Return non-false to allow normal event-path propagation\n\n        return true;\n      },\n      delegateType: delegateType\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).\n\n  jQuery.each({\n    mouseenter: \"mouseover\",\n    mouseleave: \"mouseout\",\n    pointerenter: \"pointerover\",\n    pointerleave: \"pointerout\"\n  }, function (orig, fix) {\n    jQuery.event.special[orig] = {\n      delegateType: fix,\n      bindType: fix,\n      handle: function handle(event) {\n        var ret,\n            target = this,\n            related = event.relatedTarget,\n            handleObj = event.handleObj; // For mouseenter/leave call the handler if related is outside the target.\n        // NB: No relatedTarget if the mouse left/entered the browser window\n\n        if (!related || related !== target && !jQuery.contains(target, related)) {\n          event.type = handleObj.origType;\n          ret = handleObj.handler.apply(this, arguments);\n          event.type = fix;\n        }\n\n        return ret;\n      }\n    };\n  });\n  jQuery.fn.extend({\n    on: function on(types, selector, data, fn) {\n      return _on(this, types, selector, data, fn);\n    },\n    one: function one(types, selector, data, fn) {\n      return _on(this, types, selector, data, fn, 1);\n    },\n    off: function off(types, selector, fn) {\n      var handleObj, type;\n\n      if (types && types.preventDefault && types.handleObj) {\n        // ( event )  dispatched jQuery.Event\n        handleObj = types.handleObj;\n        jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);\n        return this;\n      }\n\n      if (_typeof(types) === \"object\") {\n        // ( types-object [, selector] )\n        for (type in types) {\n          this.off(type, selector, types[type]);\n        }\n\n        return this;\n      }\n\n      if (selector === false || typeof selector === \"function\") {\n        // ( types [, fn] )\n        fn = selector;\n        selector = undefined;\n      }\n\n      if (fn === false) {\n        fn = returnFalse;\n      }\n\n      return this.each(function () {\n        jQuery.event.remove(this, types, fn, selector);\n      });\n    }\n  });\n  return jQuery;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"./core\", \"./var/document\", \"./var/isFunction\", \"./var/rnothtmlwhite\", \"./ajax/var/location\", \"./ajax/var/nonce\", \"./ajax/var/rquery\", \"./core/init\", \"./ajax/parseXML\", \"./event/trigger\", \"./deferred\", \"./serialize\" // jQuery.param\n], function (jQuery, document, isFunction, rnothtmlwhite, location, nonce, rquery) {\n  \"use strict\";\n\n  var r20 = /%20/g,\n      rhash = /#.*$/,\n      rantiCache = /([?&])_=[^&]*/,\n      rheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n      // #7653, #8125, #8152: local protocol detection\n  rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n      rnoContent = /^(?:GET|HEAD)$/,\n      rprotocol = /^\\/\\//,\n\n  /* Prefilters\n   * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n   * 2) These are called:\n   *    - BEFORE asking for a transport\n   *    - AFTER param serialization (s.data is a string if s.processData is true)\n   * 3) key is the dataType\n   * 4) the catchall symbol \"*\" can be used\n   * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n   */\n  prefilters = {},\n\n  /* Transports bindings\n   * 1) key is the dataType\n   * 2) the catchall symbol \"*\" can be used\n   * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n   */\n  transports = {},\n      // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n  allTypes = \"*/\".concat(\"*\"),\n      // Anchor tag for parsing the document origin\n  originAnchor = document.createElement(\"a\");\n  originAnchor.href = location.href; // Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\n  function addToPrefiltersOrTransports(structure) {\n    // dataTypeExpression is optional and defaults to \"*\"\n    return function (dataTypeExpression, func) {\n      if (typeof dataTypeExpression !== \"string\") {\n        func = dataTypeExpression;\n        dataTypeExpression = \"*\";\n      }\n\n      var dataType,\n          i = 0,\n          dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n      if (isFunction(func)) {\n        // For each dataType in the dataTypeExpression\n        while (dataType = dataTypes[i++]) {\n          // Prepend if requested\n          if (dataType[0] === \"+\") {\n            dataType = dataType.slice(1) || \"*\";\n            (structure[dataType] = structure[dataType] || []).unshift(func); // Otherwise append\n          } else {\n            (structure[dataType] = structure[dataType] || []).push(func);\n          }\n        }\n      }\n    };\n  } // Base inspection function for prefilters and transports\n\n\n  function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n    var inspected = {},\n        seekingTransport = structure === transports;\n\n    function inspect(dataType) {\n      var selected;\n      inspected[dataType] = true;\n      jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n        var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\n        if (typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[dataTypeOrTransport]) {\n          options.dataTypes.unshift(dataTypeOrTransport);\n          inspect(dataTypeOrTransport);\n          return false;\n        } else if (seekingTransport) {\n          return !(selected = dataTypeOrTransport);\n        }\n      });\n      return selected;\n    }\n\n    return inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n  } // A special extend for ajax options\n  // that takes \"flat\" options (not to be deep extended)\n  // Fixes #9887\n\n\n  function ajaxExtend(target, src) {\n    var key,\n        deep,\n        flatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n    for (key in src) {\n      if (src[key] !== undefined) {\n        (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];\n      }\n    }\n\n    if (deep) {\n      jQuery.extend(true, target, deep);\n    }\n\n    return target;\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   */\n\n\n  function ajaxHandleResponses(s, jqXHR, responses) {\n    var ct,\n        type,\n        finalDataType,\n        firstDataType,\n        contents = s.contents,\n        dataTypes = s.dataTypes; // Remove auto dataType and get content-type in the process\n\n    while (dataTypes[0] === \"*\") {\n      dataTypes.shift();\n\n      if (ct === undefined) {\n        ct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n      }\n    } // Check if we're dealing with a known content-type\n\n\n    if (ct) {\n      for (type in contents) {\n        if (contents[type] && contents[type].test(ct)) {\n          dataTypes.unshift(type);\n          break;\n        }\n      }\n    } // Check to see if we have a response for the expected dataType\n\n\n    if (dataTypes[0] in responses) {\n      finalDataType = dataTypes[0];\n    } else {\n      // Try convertible dataTypes\n      for (type in responses) {\n        if (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n          finalDataType = type;\n          break;\n        }\n\n        if (!firstDataType) {\n          firstDataType = type;\n        }\n      } // Or just use first one\n\n\n      finalDataType = finalDataType || firstDataType;\n    } // If we found a dataType\n    // We add the dataType to the list if needed\n    // and return the corresponding response\n\n\n    if (finalDataType) {\n      if (finalDataType !== dataTypes[0]) {\n        dataTypes.unshift(finalDataType);\n      }\n\n      return responses[finalDataType];\n    }\n  }\n  /* Chain conversions given the request and the original response\n   * Also sets the responseXXX fields on the jqXHR instance\n   */\n\n\n  function ajaxConvert(s, response, jqXHR, isSuccess) {\n    var conv2,\n        current,\n        conv,\n        tmp,\n        prev,\n        converters = {},\n        // Work with a copy of dataTypes in case we need to modify it for conversion\n    dataTypes = s.dataTypes.slice(); // Create converters map with lowercased keys\n\n    if (dataTypes[1]) {\n      for (conv in s.converters) {\n        converters[conv.toLowerCase()] = s.converters[conv];\n      }\n    }\n\n    current = dataTypes.shift(); // Convert to each sequential dataType\n\n    while (current) {\n      if (s.responseFields[current]) {\n        jqXHR[s.responseFields[current]] = response;\n      } // Apply the dataFilter if provided\n\n\n      if (!prev && isSuccess && s.dataFilter) {\n        response = s.dataFilter(response, s.dataType);\n      }\n\n      prev = current;\n      current = dataTypes.shift();\n\n      if (current) {\n        // There's only work to do if current dataType is non-auto\n        if (current === \"*\") {\n          current = prev; // Convert response if prev dataType is non-auto and differs from current\n        } else if (prev !== \"*\" && prev !== current) {\n          // Seek a direct converter\n          conv = converters[prev + \" \" + current] || converters[\"* \" + current]; // If none found, seek a pair\n\n          if (!conv) {\n            for (conv2 in converters) {\n              // If conv2 outputs current\n              tmp = conv2.split(\" \");\n\n              if (tmp[1] === current) {\n                // If prev can be converted to accepted input\n                conv = converters[prev + \" \" + tmp[0]] || converters[\"* \" + tmp[0]];\n\n                if (conv) {\n                  // Condense equivalence converters\n                  if (conv === true) {\n                    conv = converters[conv2]; // Otherwise, insert the intermediate dataType\n                  } else if (converters[conv2] !== true) {\n                    current = tmp[0];\n                    dataTypes.unshift(tmp[1]);\n                  }\n\n                  break;\n                }\n              }\n            }\n          } // Apply converter (if not an equivalence)\n\n\n          if (conv !== true) {\n            // Unless errors are allowed to bubble, catch and return them\n            if (conv && s.throws) {\n              response = conv(response);\n            } else {\n              try {\n                response = conv(response);\n              } catch (e) {\n                return {\n                  state: \"parsererror\",\n                  error: conv ? e : \"No conversion from \" + prev + \" to \" + current\n                };\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return {\n      state: \"success\",\n      data: response\n    };\n  }\n\n  jQuery.extend({\n    // Counter for holding the number of active queries\n    active: 0,\n    // Last-Modified header cache for next request\n    lastModified: {},\n    etag: {},\n    ajaxSettings: {\n      url: location.href,\n      type: \"GET\",\n      isLocal: rlocalProtocol.test(location.protocol),\n      global: true,\n      processData: true,\n      async: true,\n      contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n      /*\n      timeout: 0,\n      data: null,\n      dataType: null,\n      username: null,\n      password: null,\n      cache: null,\n      throws: false,\n      traditional: false,\n      headers: {},\n      */\n      accepts: {\n        \"*\": allTypes,\n        text: \"text/plain\",\n        html: \"text/html\",\n        xml: \"application/xml, text/xml\",\n        json: \"application/json, text/javascript\"\n      },\n      contents: {\n        xml: /\\bxml\\b/,\n        html: /\\bhtml/,\n        json: /\\bjson\\b/\n      },\n      responseFields: {\n        xml: \"responseXML\",\n        text: \"responseText\",\n        json: \"responseJSON\"\n      },\n      // Data converters\n      // Keys separate source (or catchall \"*\") and destination types with a single space\n      converters: {\n        // Convert anything to text\n        \"* text\": String,\n        // Text to html (true = no transformation)\n        \"text html\": true,\n        // Evaluate text as a json expression\n        \"text json\": JSON.parse,\n        // Parse text as xml\n        \"text xml\": jQuery.parseXML\n      },\n      // For options that shouldn't be deep extended:\n      // you can add your own custom options here if\n      // and when you create one that shouldn't be\n      // deep extended (see ajaxExtend)\n      flatOptions: {\n        url: true,\n        context: true\n      }\n    },\n    // Creates a full fledged settings object into target\n    // with both ajaxSettings and settings fields.\n    // If target is omitted, writes into ajaxSettings.\n    ajaxSetup: function ajaxSetup(target, settings) {\n      return settings ? // Building a settings object\n      ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : // Extending ajaxSettings\n      ajaxExtend(jQuery.ajaxSettings, target);\n    },\n    ajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n    ajaxTransport: addToPrefiltersOrTransports(transports),\n    // Main method\n    ajax: function ajax(url, options) {\n      // If url is an object, simulate pre-1.5 signature\n      if (_typeof(url) === \"object\") {\n        options = url;\n        url = undefined;\n      } // Force options to be an object\n\n\n      options = options || {};\n\n      var transport,\n          // URL without anti-cache param\n      cacheURL,\n          // Response headers\n      responseHeadersString,\n          responseHeaders,\n          // timeout handle\n      timeoutTimer,\n          // Url cleanup var\n      urlAnchor,\n          // Request state (becomes false upon send and true upon completion)\n      completed,\n          // To know if global events are to be dispatched\n      fireGlobals,\n          // Loop variable\n      i,\n          // uncached part of the url\n      uncached,\n          // Create the final options object\n      s = jQuery.ajaxSetup({}, options),\n          // Callbacks context\n      callbackContext = s.context || s,\n          // Context for global events is callbackContext if it is a DOM node or jQuery collection\n      globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event,\n          // Deferreds\n      deferred = jQuery.Deferred(),\n          completeDeferred = jQuery.Callbacks(\"once memory\"),\n          // Status-dependent callbacks\n      _statusCode = s.statusCode || {},\n          // Headers (they are sent all at once)\n      requestHeaders = {},\n          requestHeadersNames = {},\n          // Default abort message\n      strAbort = \"canceled\",\n          // Fake xhr\n      jqXHR = {\n        readyState: 0,\n        // Builds headers hashtable if needed\n        getResponseHeader: function getResponseHeader(key) {\n          var match;\n\n          if (completed) {\n            if (!responseHeaders) {\n              responseHeaders = {};\n\n              while (match = rheaders.exec(responseHeadersString)) {\n                responseHeaders[match[1].toLowerCase() + \" \"] = (responseHeaders[match[1].toLowerCase() + \" \"] || []).concat(match[2]);\n              }\n            }\n\n            match = responseHeaders[key.toLowerCase() + \" \"];\n          }\n\n          return match == null ? null : match.join(\", \");\n        },\n        // Raw string\n        getAllResponseHeaders: function getAllResponseHeaders() {\n          return completed ? responseHeadersString : null;\n        },\n        // Caches the header\n        setRequestHeader: function setRequestHeader(name, value) {\n          if (completed == null) {\n            name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;\n            requestHeaders[name] = value;\n          }\n\n          return this;\n        },\n        // Overrides response content-type header\n        overrideMimeType: function overrideMimeType(type) {\n          if (completed == null) {\n            s.mimeType = type;\n          }\n\n          return this;\n        },\n        // Status-dependent callbacks\n        statusCode: function statusCode(map) {\n          var code;\n\n          if (map) {\n            if (completed) {\n              // Execute the appropriate callbacks\n              jqXHR.always(map[jqXHR.status]);\n            } else {\n              // Lazy-add the new callbacks in a way that preserves old ones\n              for (code in map) {\n                _statusCode[code] = [_statusCode[code], map[code]];\n              }\n            }\n          }\n\n          return this;\n        },\n        // Cancel the request\n        abort: function abort(statusText) {\n          var finalText = statusText || strAbort;\n\n          if (transport) {\n            transport.abort(finalText);\n          }\n\n          done(0, finalText);\n          return this;\n        }\n      }; // Attach deferreds\n\n\n      deferred.promise(jqXHR); // Add protocol if not provided (prefilters might expect it)\n      // Handle falsy url in the settings object (#10093: consistency with old signature)\n      // We also use the url parameter if available\n\n      s.url = ((url || s.url || location.href) + \"\").replace(rprotocol, location.protocol + \"//\"); // Alias method option to type as per ticket #12004\n\n      s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list\n\n      s.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"]; // A cross-domain request is in order when the origin doesn't match the current origin.\n\n      if (s.crossDomain == null) {\n        urlAnchor = document.createElement(\"a\"); // Support: IE <=8 - 11, Edge 12 - 15\n        // IE throws exception on accessing the href property if url is malformed,\n        // e.g. http://example.com:80x/\n\n        try {\n          urlAnchor.href = s.url; // Support: IE <=8 - 11 only\n          // Anchor's host property isn't correctly set when s.url is relative\n\n          urlAnchor.href = urlAnchor.href;\n          s.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !== urlAnchor.protocol + \"//\" + urlAnchor.host;\n        } catch (e) {\n          // If there is an error parsing the URL, assume it is crossDomain,\n          // it can be rejected by the transport if it is invalid\n          s.crossDomain = true;\n        }\n      } // Convert data if not already a string\n\n\n      if (s.data && s.processData && typeof s.data !== \"string\") {\n        s.data = jQuery.param(s.data, s.traditional);\n      } // Apply prefilters\n\n\n      inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); // If request was aborted inside a prefilter, stop there\n\n      if (completed) {\n        return jqXHR;\n      } // We can fire global events as of now if asked to\n      // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\n\n      fireGlobals = jQuery.event && s.global; // Watch for a new set of requests\n\n      if (fireGlobals && jQuery.active++ === 0) {\n        jQuery.event.trigger(\"ajaxStart\");\n      } // Uppercase the type\n\n\n      s.type = s.type.toUpperCase(); // Determine if request has content\n\n      s.hasContent = !rnoContent.test(s.type); // Save the URL in case we're toying with the If-Modified-Since\n      // and/or If-None-Match header later on\n      // Remove hash to simplify url manipulation\n\n      cacheURL = s.url.replace(rhash, \"\"); // More options handling for requests with no content\n\n      if (!s.hasContent) {\n        // Remember the hash so we can put it back\n        uncached = s.url.slice(cacheURL.length); // If data is available and should be processed, append data to url\n\n        if (s.data && (s.processData || typeof s.data === \"string\")) {\n          cacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data; // #9682: remove data so that it's not used in an eventual retry\n\n          delete s.data;\n        } // Add or update anti-cache param if needed\n\n\n        if (s.cache === false) {\n          cacheURL = cacheURL.replace(rantiCache, \"$1\");\n          uncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + nonce++ + uncached;\n        } // Put hash and anti-cache on the URL that will be requested (gh-1732)\n\n\n        s.url = cacheURL + uncached; // Change '%20' to '+' if this is encoded form body content (gh-2658)\n      } else if (s.data && s.processData && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n        s.data = s.data.replace(r20, \"+\");\n      } // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\n\n      if (s.ifModified) {\n        if (jQuery.lastModified[cacheURL]) {\n          jqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n        }\n\n        if (jQuery.etag[cacheURL]) {\n          jqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n        }\n      } // Set the correct header, if data is being sent\n\n\n      if (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n        jqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n      } // Set the Accepts header for the server, depending on the dataType\n\n\n      jqXHR.setRequestHeader(\"Accept\", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") : s.accepts[\"*\"]); // Check for headers option\n\n      for (i in s.headers) {\n        jqXHR.setRequestHeader(i, s.headers[i]);\n      } // Allow custom headers/mimetypes and early abort\n\n\n      if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n        // Abort if not done already and return\n        return jqXHR.abort();\n      } // Aborting is no longer a cancellation\n\n\n      strAbort = \"abort\"; // Install callbacks on deferreds\n\n      completeDeferred.add(s.complete);\n      jqXHR.done(s.success);\n      jqXHR.fail(s.error); // Get transport\n\n      transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); // If no transport, we auto-abort\n\n      if (!transport) {\n        done(-1, \"No Transport\");\n      } else {\n        jqXHR.readyState = 1; // Send global event\n\n        if (fireGlobals) {\n          globalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n        } // If request was aborted inside ajaxSend, stop there\n\n\n        if (completed) {\n          return jqXHR;\n        } // Timeout\n\n\n        if (s.async && s.timeout > 0) {\n          timeoutTimer = window.setTimeout(function () {\n            jqXHR.abort(\"timeout\");\n          }, s.timeout);\n        }\n\n        try {\n          completed = false;\n          transport.send(requestHeaders, done);\n        } catch (e) {\n          // Rethrow post-completion exceptions\n          if (completed) {\n            throw e;\n          } // Propagate others as results\n\n\n          done(-1, e);\n        }\n      } // Callback for when everything is done\n\n\n      function done(status, nativeStatusText, responses, headers) {\n        var isSuccess,\n            success,\n            error,\n            response,\n            modified,\n            statusText = nativeStatusText; // Ignore repeat invocations\n\n        if (completed) {\n          return;\n        }\n\n        completed = true; // Clear timeout if it exists\n\n        if (timeoutTimer) {\n          window.clearTimeout(timeoutTimer);\n        } // Dereference transport for early garbage collection\n        // (no matter how long the jqXHR object will be used)\n\n\n        transport = undefined; // Cache response headers\n\n        responseHeadersString = headers || \"\"; // Set readyState\n\n        jqXHR.readyState = status > 0 ? 4 : 0; // Determine if successful\n\n        isSuccess = status >= 200 && status < 300 || status === 304; // Get response data\n\n        if (responses) {\n          response = ajaxHandleResponses(s, jqXHR, responses);\n        } // Convert no matter what (that way responseXXX fields are always set)\n\n\n        response = ajaxConvert(s, response, jqXHR, isSuccess); // If successful, handle type chaining\n\n        if (isSuccess) {\n          // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n          if (s.ifModified) {\n            modified = jqXHR.getResponseHeader(\"Last-Modified\");\n\n            if (modified) {\n              jQuery.lastModified[cacheURL] = modified;\n            }\n\n            modified = jqXHR.getResponseHeader(\"etag\");\n\n            if (modified) {\n              jQuery.etag[cacheURL] = modified;\n            }\n          } // if no content\n\n\n          if (status === 204 || s.type === \"HEAD\") {\n            statusText = \"nocontent\"; // if not modified\n          } else if (status === 304) {\n            statusText = \"notmodified\"; // If we have data, let's convert it\n          } else {\n            statusText = response.state;\n            success = response.data;\n            error = response.error;\n            isSuccess = !error;\n          }\n        } else {\n          // Extract error from statusText and normalize for non-aborts\n          error = statusText;\n\n          if (status || !statusText) {\n            statusText = \"error\";\n\n            if (status < 0) {\n              status = 0;\n            }\n          }\n        } // Set data for the fake xhr object\n\n\n        jqXHR.status = status;\n        jqXHR.statusText = (nativeStatusText || statusText) + \"\"; // Success/Error\n\n        if (isSuccess) {\n          deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n        } else {\n          deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n        } // Status-dependent callbacks\n\n\n        jqXHR.statusCode(_statusCode);\n        _statusCode = undefined;\n\n        if (fireGlobals) {\n          globalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\", [jqXHR, s, isSuccess ? success : error]);\n        } // Complete\n\n\n        completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n        if (fireGlobals) {\n          globalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]); // Handle the global AJAX counter\n\n          if (! --jQuery.active) {\n            jQuery.event.trigger(\"ajaxStop\");\n          }\n        }\n      }\n\n      return jqXHR;\n    },\n    getJSON: function getJSON(url, data, callback) {\n      return jQuery.get(url, data, callback, \"json\");\n    },\n    getScript: function getScript(url, callback) {\n      return jQuery.get(url, undefined, callback, \"script\");\n    }\n  });\n  jQuery.each([\"get\", \"post\"], function (i, method) {\n    jQuery[method] = function (url, data, callback, type) {\n      // Shift arguments if data argument was omitted\n      if (isFunction(data)) {\n        type = type || callback;\n        callback = data;\n        data = undefined;\n      } // The url can be an options object (which then must have .url)\n\n\n      return jQuery.ajax(jQuery.extend({\n        url: url,\n        type: method,\n        dataType: type,\n        data: data,\n        success: callback\n      }, jQuery.isPlainObject(url) && url));\n    };\n  });\n  return jQuery;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.de = {}));\n})(this, function (exports) {\n  'use strict';\n\n  var fp = typeof window !== \"undefined\" && window.flatpickr !== undefined ? window.flatpickr : {\n    l10ns: {}\n  };\n  var German = {\n    weekdays: {\n      shorthand: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"],\n      longhand: [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\"]\n    },\n    months: {\n      shorthand: [\"Jan\", \"Feb\", \"Mär\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dez\"],\n      longhand: [\"Januar\", \"Februar\", \"März\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"]\n    },\n    firstDayOfWeek: 1,\n    weekAbbreviation: \"KW\",\n    rangeSeparator: \" bis \",\n    scrollTitle: \"Zum Ändern scrollen\",\n    toggleTitle: \"Zum Umschalten klicken\",\n    time_24hr: true\n  };\n  fp.l10ns.de = German;\n  var de = fp.l10ns;\n  exports.German = German;\n  exports.default = de;\n  Object.defineProperty(exports, '__esModule', {\n    value: true\n  });\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { DateComponent, getStickyHeaderDates, ViewContainer, SimpleScrollGrid, getStickyFooterScrollbar, renderScrollShim, createFormatter, BaseComponent, StandardEvent, buildSegTimeText, EventContainer, getSegAnchorAttrs, memoize, MoreLinkContainer, getSegMeta, getUniqueDomId, setRef, DayCellContainer, WeekNumberContainer, buildNavLinkAttrs, hasCustomDayCellContent, addMs, intersectRanges, addDays, SegHierarchy, buildEntryKey, intersectSpans, RefMap, sortEventSegs, isPropsEqual, buildEventRangeKey, BgEvent, renderFill, PositionCache, NowTimer, formatIsoMonthStr, formatDayString, Slicer, DayHeader, DaySeriesModel, DayTableModel, DateProfileGenerator, addWeeks, diffWeeks, injectStyles } from '@fullcalendar/core/internal.js';\nimport { createRef, createElement, Fragment } from '@fullcalendar/core/preact.js';\n/* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells.\n----------------------------------------------------------------------------------------------------------------------*/\n// It is a manager for a Table subcomponent, which does most of the heavy lifting.\n// It is responsible for managing width/height.\n\nvar TableView = /*#__PURE__*/function (_DateComponent) {\n  _inherits(TableView, _DateComponent);\n\n  var _super = _createSuper(TableView);\n\n  function TableView() {\n    var _this;\n\n    _classCallCheck(this, TableView);\n\n    _this = _super.apply(this, arguments);\n    _this.headerElRef = createRef();\n    return _this;\n  }\n\n  _createClass(TableView, [{\n    key: \"renderSimpleLayout\",\n    value: function renderSimpleLayout(headerRowContent, bodyContent) {\n      var props = this.props,\n          context = this.context;\n      var sections = [];\n      var stickyHeaderDates = getStickyHeaderDates(context.options);\n\n      if (headerRowContent) {\n        sections.push({\n          type: 'header',\n          key: 'header',\n          isSticky: stickyHeaderDates,\n          chunk: {\n            elRef: this.headerElRef,\n            tableClassName: 'fc-col-header',\n            rowContent: headerRowContent\n          }\n        });\n      }\n\n      sections.push({\n        type: 'body',\n        key: 'body',\n        liquid: true,\n        chunk: {\n          content: bodyContent\n        }\n      });\n      return createElement(ViewContainer, {\n        elClasses: ['fc-daygrid'],\n        viewSpec: context.viewSpec\n      }, createElement(SimpleScrollGrid, {\n        liquid: !props.isHeightAuto && !props.forPrint,\n        collapsibleWidth: props.forPrint,\n        cols: []\n        /* TODO: make optional? */\n        ,\n        sections: sections\n      }));\n    }\n  }, {\n    key: \"renderHScrollLayout\",\n    value: function renderHScrollLayout(headerRowContent, bodyContent, colCnt, dayMinWidth) {\n      var ScrollGrid = this.context.pluginHooks.scrollGridImpl;\n\n      if (!ScrollGrid) {\n        throw new Error('No ScrollGrid implementation');\n      }\n\n      var props = this.props,\n          context = this.context;\n      var stickyHeaderDates = !props.forPrint && getStickyHeaderDates(context.options);\n      var stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(context.options);\n      var sections = [];\n\n      if (headerRowContent) {\n        sections.push({\n          type: 'header',\n          key: 'header',\n          isSticky: stickyHeaderDates,\n          chunks: [{\n            key: 'main',\n            elRef: this.headerElRef,\n            tableClassName: 'fc-col-header',\n            rowContent: headerRowContent\n          }]\n        });\n      }\n\n      sections.push({\n        type: 'body',\n        key: 'body',\n        liquid: true,\n        chunks: [{\n          key: 'main',\n          content: bodyContent\n        }]\n      });\n\n      if (stickyFooterScrollbar) {\n        sections.push({\n          type: 'footer',\n          key: 'footer',\n          isSticky: true,\n          chunks: [{\n            key: 'main',\n            content: renderScrollShim\n          }]\n        });\n      }\n\n      return createElement(ViewContainer, {\n        elClasses: ['fc-daygrid'],\n        viewSpec: context.viewSpec\n      }, createElement(ScrollGrid, {\n        liquid: !props.isHeightAuto && !props.forPrint,\n        forPrint: props.forPrint,\n        collapsibleWidth: props.forPrint,\n        colGroups: [{\n          cols: [{\n            span: colCnt,\n            minWidth: dayMinWidth\n          }]\n        }],\n        sections: sections\n      }));\n    }\n  }]);\n\n  return TableView;\n}(DateComponent);\n\nfunction splitSegsByRow(segs, rowCnt) {\n  var byRow = [];\n\n  for (var i = 0; i < rowCnt; i += 1) {\n    byRow[i] = [];\n  }\n\n  var _iterator = _createForOfIteratorHelper(segs),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var seg = _step.value;\n      byRow[seg.row].push(seg);\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  return byRow;\n}\n\nfunction splitSegsByFirstCol(segs, colCnt) {\n  var byCol = [];\n\n  for (var i = 0; i < colCnt; i += 1) {\n    byCol[i] = [];\n  }\n\n  var _iterator2 = _createForOfIteratorHelper(segs),\n      _step2;\n\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var seg = _step2.value;\n      byCol[seg.firstCol].push(seg);\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n\n  return byCol;\n}\n\nfunction splitInteractionByRow(ui, rowCnt) {\n  var byRow = [];\n\n  if (!ui) {\n    for (var i = 0; i < rowCnt; i += 1) {\n      byRow[i] = null;\n    }\n  } else {\n    for (var _i = 0; _i < rowCnt; _i += 1) {\n      byRow[_i] = {\n        affectedInstances: ui.affectedInstances,\n        isEvent: ui.isEvent,\n        segs: []\n      };\n    }\n\n    var _iterator3 = _createForOfIteratorHelper(ui.segs),\n        _step3;\n\n    try {\n      for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n        var seg = _step3.value;\n        byRow[seg.row].segs.push(seg);\n      }\n    } catch (err) {\n      _iterator3.e(err);\n    } finally {\n      _iterator3.f();\n    }\n  }\n\n  return byRow;\n}\n\nvar DEFAULT_TABLE_EVENT_TIME_FORMAT = createFormatter({\n  hour: 'numeric',\n  minute: '2-digit',\n  omitZeroMinute: true,\n  meridiem: 'narrow'\n});\n\nfunction hasListItemDisplay(seg) {\n  var display = seg.eventRange.ui.display;\n  return display === 'list-item' || display === 'auto' && !seg.eventRange.def.allDay && seg.firstCol === seg.lastCol && // can't be multi-day\n  seg.isStart && // \"\n  seg.isEnd // \"\n  ;\n}\n\nvar TableBlockEvent = /*#__PURE__*/function (_BaseComponent) {\n  _inherits(TableBlockEvent, _BaseComponent);\n\n  var _super2 = _createSuper(TableBlockEvent);\n\n  function TableBlockEvent() {\n    _classCallCheck(this, TableBlockEvent);\n\n    return _super2.apply(this, arguments);\n  }\n\n  _createClass(TableBlockEvent, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      return createElement(StandardEvent, Object.assign({}, props, {\n        elClasses: ['fc-daygrid-event', 'fc-daygrid-block-event', 'fc-h-event'],\n        defaultTimeFormat: DEFAULT_TABLE_EVENT_TIME_FORMAT,\n        defaultDisplayEventEnd: props.defaultDisplayEventEnd,\n        disableResizing: !props.seg.eventRange.def.allDay\n      }));\n    }\n  }]);\n\n  return TableBlockEvent;\n}(BaseComponent);\n\nvar TableListItemEvent = /*#__PURE__*/function (_BaseComponent2) {\n  _inherits(TableListItemEvent, _BaseComponent2);\n\n  var _super3 = _createSuper(TableListItemEvent);\n\n  function TableListItemEvent() {\n    _classCallCheck(this, TableListItemEvent);\n\n    return _super3.apply(this, arguments);\n  }\n\n  _createClass(TableListItemEvent, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          context = this.context;\n      var options = context.options;\n      var seg = props.seg;\n      var timeFormat = options.eventTimeFormat || DEFAULT_TABLE_EVENT_TIME_FORMAT;\n      var timeText = buildSegTimeText(seg, timeFormat, context, true, props.defaultDisplayEventEnd);\n      return createElement(EventContainer, Object.assign({}, props, {\n        elTag: \"a\",\n        elClasses: ['fc-daygrid-event', 'fc-daygrid-dot-event'],\n        elAttrs: getSegAnchorAttrs(props.seg, context),\n        defaultGenerator: renderInnerContent,\n        timeText: timeText,\n        isResizing: false,\n        isDateSelecting: false\n      }));\n    }\n  }]);\n\n  return TableListItemEvent;\n}(BaseComponent);\n\nfunction renderInnerContent(renderProps) {\n  return createElement(Fragment, null, createElement(\"div\", {\n    className: \"fc-daygrid-event-dot\",\n    style: {\n      borderColor: renderProps.borderColor || renderProps.backgroundColor\n    }\n  }), renderProps.timeText && createElement(\"div\", {\n    className: \"fc-event-time\"\n  }, renderProps.timeText), createElement(\"div\", {\n    className: \"fc-event-title\"\n  }, renderProps.event.title || createElement(Fragment, null, \"\\xA0\")));\n}\n\nvar TableCellMoreLink = /*#__PURE__*/function (_BaseComponent3) {\n  _inherits(TableCellMoreLink, _BaseComponent3);\n\n  var _super4 = _createSuper(TableCellMoreLink);\n\n  function TableCellMoreLink() {\n    var _this2;\n\n    _classCallCheck(this, TableCellMoreLink);\n\n    _this2 = _super4.apply(this, arguments);\n    _this2.compileSegs = memoize(compileSegs);\n    return _this2;\n  }\n\n  _createClass(TableCellMoreLink, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n\n      var _this$compileSegs = this.compileSegs(props.singlePlacements),\n          allSegs = _this$compileSegs.allSegs,\n          invisibleSegs = _this$compileSegs.invisibleSegs;\n\n      return createElement(MoreLinkContainer, {\n        elClasses: ['fc-daygrid-more-link'],\n        dateProfile: props.dateProfile,\n        todayRange: props.todayRange,\n        allDayDate: props.allDayDate,\n        moreCnt: props.moreCnt,\n        allSegs: allSegs,\n        hiddenSegs: invisibleSegs,\n        alignmentElRef: props.alignmentElRef,\n        alignGridTop: props.alignGridTop,\n        extraDateSpan: props.extraDateSpan,\n        popoverContent: function popoverContent() {\n          var isForcedInvisible = (props.eventDrag ? props.eventDrag.affectedInstances : null) || (props.eventResize ? props.eventResize.affectedInstances : null) || {};\n          return createElement(Fragment, null, allSegs.map(function (seg) {\n            var instanceId = seg.eventRange.instance.instanceId;\n            return createElement(\"div\", {\n              className: \"fc-daygrid-event-harness\",\n              key: instanceId,\n              style: {\n                visibility: isForcedInvisible[instanceId] ? 'hidden' : ''\n              }\n            }, hasListItemDisplay(seg) ? createElement(TableListItemEvent, Object.assign({\n              seg: seg,\n              isDragging: false,\n              isSelected: instanceId === props.eventSelection,\n              defaultDisplayEventEnd: false\n            }, getSegMeta(seg, props.todayRange))) : createElement(TableBlockEvent, Object.assign({\n              seg: seg,\n              isDragging: false,\n              isResizing: false,\n              isDateSelecting: false,\n              isSelected: instanceId === props.eventSelection,\n              defaultDisplayEventEnd: false\n            }, getSegMeta(seg, props.todayRange))));\n          }));\n        }\n      });\n    }\n  }]);\n\n  return TableCellMoreLink;\n}(BaseComponent);\n\nfunction compileSegs(singlePlacements) {\n  var allSegs = [];\n  var invisibleSegs = [];\n\n  var _iterator4 = _createForOfIteratorHelper(singlePlacements),\n      _step4;\n\n  try {\n    for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n      var placement = _step4.value;\n      allSegs.push(placement.seg);\n\n      if (!placement.isVisible) {\n        invisibleSegs.push(placement.seg);\n      }\n    }\n  } catch (err) {\n    _iterator4.e(err);\n  } finally {\n    _iterator4.f();\n  }\n\n  return {\n    allSegs: allSegs,\n    invisibleSegs: invisibleSegs\n  };\n}\n\nvar DEFAULT_WEEK_NUM_FORMAT = createFormatter({\n  week: 'narrow'\n});\n\nvar TableCell = /*#__PURE__*/function (_DateComponent2) {\n  _inherits(TableCell, _DateComponent2);\n\n  var _super5 = _createSuper(TableCell);\n\n  function TableCell() {\n    var _this3;\n\n    _classCallCheck(this, TableCell);\n\n    _this3 = _super5.apply(this, arguments);\n    _this3.rootElRef = createRef();\n    _this3.state = {\n      dayNumberId: getUniqueDomId()\n    };\n\n    _this3.handleRootEl = function (el) {\n      setRef(_this3.rootElRef, el);\n      setRef(_this3.props.elRef, el);\n    };\n\n    return _this3;\n  }\n\n  _createClass(TableCell, [{\n    key: \"render\",\n    value: function render() {\n      var context = this.context,\n          props = this.props,\n          state = this.state,\n          rootElRef = this.rootElRef;\n      var options = context.options,\n          dateEnv = context.dateEnv;\n      var date = props.date,\n          dateProfile = props.dateProfile; // TODO: memoize this?\n\n      var isMonthStart = props.showDayNumber && shouldDisplayMonthStart(date, dateProfile.currentRange, dateEnv);\n      return createElement(DayCellContainer, {\n        elTag: \"td\",\n        elRef: this.handleRootEl,\n        elClasses: ['fc-daygrid-day'].concat(_toConsumableArray(props.extraClassNames || [])),\n        elAttrs: Object.assign(Object.assign(Object.assign({}, props.extraDataAttrs), props.showDayNumber ? {\n          'aria-labelledby': state.dayNumberId\n        } : {}), {\n          role: 'gridcell'\n        }),\n        defaultGenerator: renderTopInner,\n        date: date,\n        dateProfile: dateProfile,\n        todayRange: props.todayRange,\n        showDayNumber: props.showDayNumber,\n        isMonthStart: isMonthStart,\n        extraRenderProps: props.extraRenderProps\n      }, function (InnerContent, renderProps) {\n        return createElement(\"div\", {\n          ref: props.innerElRef,\n          className: \"fc-daygrid-day-frame fc-scrollgrid-sync-inner\",\n          style: {\n            minHeight: props.minHeight\n          }\n        }, props.showWeekNumber && createElement(WeekNumberContainer, {\n          elTag: \"a\",\n          elClasses: ['fc-daygrid-week-number'],\n          elAttrs: buildNavLinkAttrs(context, date, 'week'),\n          date: date,\n          defaultFormat: DEFAULT_WEEK_NUM_FORMAT\n        }), !renderProps.isDisabled && (props.showDayNumber || hasCustomDayCellContent(options) || props.forceDayTop) ? createElement(\"div\", {\n          className: \"fc-daygrid-day-top\"\n        }, createElement(InnerContent, {\n          elTag: \"a\",\n          elClasses: ['fc-daygrid-day-number', isMonthStart && 'fc-daygrid-month-start'],\n          elAttrs: Object.assign(Object.assign({}, buildNavLinkAttrs(context, date)), {\n            id: state.dayNumberId\n          })\n        })) : props.showDayNumber ? // for creating correct amount of space (see issue #7162)\n        createElement(\"div\", {\n          className: \"fc-daygrid-day-top\",\n          style: {\n            visibility: 'hidden'\n          }\n        }, createElement(\"a\", {\n          className: \"fc-daygrid-day-number\"\n        }, \"\\xA0\")) : undefined, createElement(\"div\", {\n          className: \"fc-daygrid-day-events\",\n          ref: props.fgContentElRef\n        }, props.fgContent, createElement(\"div\", {\n          className: \"fc-daygrid-day-bottom\",\n          style: {\n            marginTop: props.moreMarginTop\n          }\n        }, createElement(TableCellMoreLink, {\n          allDayDate: date,\n          singlePlacements: props.singlePlacements,\n          moreCnt: props.moreCnt,\n          alignmentElRef: rootElRef,\n          alignGridTop: !props.showDayNumber,\n          extraDateSpan: props.extraDateSpan,\n          dateProfile: props.dateProfile,\n          eventSelection: props.eventSelection,\n          eventDrag: props.eventDrag,\n          eventResize: props.eventResize,\n          todayRange: props.todayRange\n        }))), createElement(\"div\", {\n          className: \"fc-daygrid-day-bg\"\n        }, props.bgContent));\n      });\n    }\n  }]);\n\n  return TableCell;\n}(DateComponent);\n\nfunction renderTopInner(props) {\n  return props.dayNumberText || createElement(Fragment, null, \"\\xA0\");\n}\n\nfunction shouldDisplayMonthStart(date, currentRange, dateEnv) {\n  var currentStart = currentRange.start,\n      currentEnd = currentRange.end;\n  var currentEndIncl = addMs(currentEnd, -1);\n  var currentFirstYear = dateEnv.getYear(currentStart);\n  var currentFirstMonth = dateEnv.getMonth(currentStart);\n  var currentLastYear = dateEnv.getYear(currentEndIncl);\n  var currentLastMonth = dateEnv.getMonth(currentEndIncl); // spans more than one month?\n\n  return !(currentFirstYear === currentLastYear && currentFirstMonth === currentLastMonth) && Boolean( // first date in current view?\n  date.valueOf() === currentStart.valueOf() || dateEnv.getDay(date) === 1 && date.valueOf() < currentEnd.valueOf());\n}\n\nfunction generateSegKey(seg) {\n  return seg.eventRange.instance.instanceId + ':' + seg.firstCol;\n}\n\nfunction generateSegUid(seg) {\n  return generateSegKey(seg) + ':' + seg.lastCol;\n}\n\nfunction computeFgSegPlacement(segs, // assumed already sorted\ndayMaxEvents, dayMaxEventRows, strictOrder, segHeights, maxContentHeight, cells) {\n  var hierarchy = new DayGridSegHierarchy(function (segEntry) {\n    // TODO: more DRY with generateSegUid\n    var segUid = segs[segEntry.index].eventRange.instance.instanceId + ':' + segEntry.span.start + ':' + (segEntry.span.end - 1); // if no thickness known, assume 1 (if 0, so small it always fits)\n\n    return segHeights[segUid] || 1;\n  });\n  hierarchy.allowReslicing = true;\n  hierarchy.strictOrder = strictOrder;\n\n  if (dayMaxEvents === true || dayMaxEventRows === true) {\n    hierarchy.maxCoord = maxContentHeight;\n    hierarchy.hiddenConsumes = true;\n  } else if (typeof dayMaxEvents === 'number') {\n    hierarchy.maxStackCnt = dayMaxEvents;\n  } else if (typeof dayMaxEventRows === 'number') {\n    hierarchy.maxStackCnt = dayMaxEventRows;\n    hierarchy.hiddenConsumes = true;\n  } // create segInputs only for segs with known heights\n\n\n  var segInputs = [];\n  var unknownHeightSegs = [];\n\n  for (var i = 0; i < segs.length; i += 1) {\n    var seg = segs[i];\n    var segUid = generateSegUid(seg);\n    var eventHeight = segHeights[segUid];\n\n    if (eventHeight != null) {\n      segInputs.push({\n        index: i,\n        span: {\n          start: seg.firstCol,\n          end: seg.lastCol + 1\n        }\n      });\n    } else {\n      unknownHeightSegs.push(seg);\n    }\n  }\n\n  var hiddenEntries = hierarchy.addSegs(segInputs);\n  var segRects = hierarchy.toRects();\n\n  var _placeRects = placeRects(segRects, segs, cells),\n      singleColPlacements = _placeRects.singleColPlacements,\n      multiColPlacements = _placeRects.multiColPlacements,\n      leftoverMargins = _placeRects.leftoverMargins;\n\n  var moreCnts = [];\n  var moreMarginTops = []; // add segs with unknown heights\n\n  for (var _i2 = 0, _unknownHeightSegs = unknownHeightSegs; _i2 < _unknownHeightSegs.length; _i2++) {\n    var _seg = _unknownHeightSegs[_i2];\n\n    multiColPlacements[_seg.firstCol].push({\n      seg: _seg,\n      isVisible: false,\n      isAbsolute: true,\n      absoluteTop: 0,\n      marginTop: 0\n    });\n\n    for (var col = _seg.firstCol; col <= _seg.lastCol; col += 1) {\n      singleColPlacements[col].push({\n        seg: resliceSeg(_seg, col, col + 1, cells),\n        isVisible: false,\n        isAbsolute: false,\n        absoluteTop: 0,\n        marginTop: 0\n      });\n    }\n  } // add the hidden entries\n\n\n  for (var _col = 0; _col < cells.length; _col += 1) {\n    moreCnts.push(0);\n  }\n\n  var _iterator5 = _createForOfIteratorHelper(hiddenEntries),\n      _step5;\n\n  try {\n    for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n      var hiddenEntry = _step5.value;\n      var _seg2 = segs[hiddenEntry.index];\n      var hiddenSpan = hiddenEntry.span;\n      multiColPlacements[hiddenSpan.start].push({\n        seg: resliceSeg(_seg2, hiddenSpan.start, hiddenSpan.end, cells),\n        isVisible: false,\n        isAbsolute: true,\n        absoluteTop: 0,\n        marginTop: 0\n      });\n\n      for (var _col3 = hiddenSpan.start; _col3 < hiddenSpan.end; _col3 += 1) {\n        moreCnts[_col3] += 1;\n\n        singleColPlacements[_col3].push({\n          seg: resliceSeg(_seg2, _col3, _col3 + 1, cells),\n          isVisible: false,\n          isAbsolute: false,\n          absoluteTop: 0,\n          marginTop: 0\n        });\n      }\n    } // deal with leftover margins\n\n  } catch (err) {\n    _iterator5.e(err);\n  } finally {\n    _iterator5.f();\n  }\n\n  for (var _col2 = 0; _col2 < cells.length; _col2 += 1) {\n    moreMarginTops.push(leftoverMargins[_col2]);\n  }\n\n  return {\n    singleColPlacements: singleColPlacements,\n    multiColPlacements: multiColPlacements,\n    moreCnts: moreCnts,\n    moreMarginTops: moreMarginTops\n  };\n} // rects ordered by top coord, then left\n\n\nfunction placeRects(allRects, segs, cells) {\n  var rectsByEachCol = groupRectsByEachCol(allRects, cells.length);\n  var singleColPlacements = [];\n  var multiColPlacements = [];\n  var leftoverMargins = [];\n\n  for (var col = 0; col < cells.length; col += 1) {\n    var rects = rectsByEachCol[col]; // compute all static segs in singlePlacements\n\n    var singlePlacements = [];\n    var currentHeight = 0;\n    var currentMarginTop = 0;\n\n    var _iterator6 = _createForOfIteratorHelper(rects),\n        _step6;\n\n    try {\n      for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n        var rect = _step6.value;\n        var seg = segs[rect.index];\n        singlePlacements.push({\n          seg: resliceSeg(seg, col, col + 1, cells),\n          isVisible: true,\n          isAbsolute: false,\n          absoluteTop: rect.levelCoord,\n          marginTop: rect.levelCoord - currentHeight\n        });\n        currentHeight = rect.levelCoord + rect.thickness;\n      } // compute mixed static/absolute segs in multiPlacements\n\n    } catch (err) {\n      _iterator6.e(err);\n    } finally {\n      _iterator6.f();\n    }\n\n    var multiPlacements = [];\n    currentHeight = 0;\n    currentMarginTop = 0;\n\n    var _iterator7 = _createForOfIteratorHelper(rects),\n        _step7;\n\n    try {\n      for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n        var _rect = _step7.value;\n        var _seg3 = segs[_rect.index];\n        var isAbsolute = _rect.span.end - _rect.span.start > 1; // multi-column?\n\n        var isFirstCol = _rect.span.start === col;\n        currentMarginTop += _rect.levelCoord - currentHeight; // amount of space since bottom of previous seg\n\n        currentHeight = _rect.levelCoord + _rect.thickness; // height will now be bottom of current seg\n\n        if (isAbsolute) {\n          currentMarginTop += _rect.thickness;\n\n          if (isFirstCol) {\n            multiPlacements.push({\n              seg: resliceSeg(_seg3, _rect.span.start, _rect.span.end, cells),\n              isVisible: true,\n              isAbsolute: true,\n              absoluteTop: _rect.levelCoord,\n              marginTop: 0\n            });\n          }\n        } else if (isFirstCol) {\n          multiPlacements.push({\n            seg: resliceSeg(_seg3, _rect.span.start, _rect.span.end, cells),\n            isVisible: true,\n            isAbsolute: false,\n            absoluteTop: _rect.levelCoord,\n            marginTop: currentMarginTop // claim the margin\n\n          });\n          currentMarginTop = 0;\n        }\n      }\n    } catch (err) {\n      _iterator7.e(err);\n    } finally {\n      _iterator7.f();\n    }\n\n    singleColPlacements.push(singlePlacements);\n    multiColPlacements.push(multiPlacements);\n    leftoverMargins.push(currentMarginTop);\n  }\n\n  return {\n    singleColPlacements: singleColPlacements,\n    multiColPlacements: multiColPlacements,\n    leftoverMargins: leftoverMargins\n  };\n}\n\nfunction groupRectsByEachCol(rects, colCnt) {\n  var rectsByEachCol = [];\n\n  for (var col = 0; col < colCnt; col += 1) {\n    rectsByEachCol.push([]);\n  }\n\n  var _iterator8 = _createForOfIteratorHelper(rects),\n      _step8;\n\n  try {\n    for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n      var rect = _step8.value;\n\n      for (var _col4 = rect.span.start; _col4 < rect.span.end; _col4 += 1) {\n        rectsByEachCol[_col4].push(rect);\n      }\n    }\n  } catch (err) {\n    _iterator8.e(err);\n  } finally {\n    _iterator8.f();\n  }\n\n  return rectsByEachCol;\n}\n\nfunction resliceSeg(seg, spanStart, spanEnd, cells) {\n  if (seg.firstCol === spanStart && seg.lastCol === spanEnd - 1) {\n    return seg;\n  }\n\n  var eventRange = seg.eventRange;\n  var origRange = eventRange.range;\n  var slicedRange = intersectRanges(origRange, {\n    start: cells[spanStart].date,\n    end: addDays(cells[spanEnd - 1].date, 1)\n  });\n  return Object.assign(Object.assign({}, seg), {\n    firstCol: spanStart,\n    lastCol: spanEnd - 1,\n    eventRange: {\n      def: eventRange.def,\n      ui: Object.assign(Object.assign({}, eventRange.ui), {\n        durationEditable: false\n      }),\n      instance: eventRange.instance,\n      range: slicedRange\n    },\n    isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(),\n    isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf()\n  });\n}\n\nvar DayGridSegHierarchy = /*#__PURE__*/function (_SegHierarchy) {\n  _inherits(DayGridSegHierarchy, _SegHierarchy);\n\n  var _super6 = _createSuper(DayGridSegHierarchy);\n\n  function DayGridSegHierarchy() {\n    var _this4;\n\n    _classCallCheck(this, DayGridSegHierarchy);\n\n    _this4 = _super6.apply(this, arguments); // config\n\n    _this4.hiddenConsumes = false; // allows us to keep hidden entries in the hierarchy so they take up space\n\n    _this4.forceHidden = {};\n    return _this4;\n  }\n\n  _createClass(DayGridSegHierarchy, [{\n    key: \"addSegs\",\n    value: function addSegs(segInputs) {\n      var _this5 = this;\n\n      var hiddenSegs = _get(_getPrototypeOf(DayGridSegHierarchy.prototype), \"addSegs\", this).call(this, segInputs);\n\n      var entriesByLevel = this.entriesByLevel;\n\n      var excludeHidden = function excludeHidden(entry) {\n        return !_this5.forceHidden[buildEntryKey(entry)];\n      }; // remove the forced-hidden segs\n\n\n      for (var level = 0; level < entriesByLevel.length; level += 1) {\n        entriesByLevel[level] = entriesByLevel[level].filter(excludeHidden);\n      }\n\n      return hiddenSegs;\n    }\n  }, {\n    key: \"handleInvalidInsertion\",\n    value: function handleInvalidInsertion(insertion, entry, hiddenEntries) {\n      var entriesByLevel = this.entriesByLevel,\n          forceHidden = this.forceHidden;\n      var touchingEntry = insertion.touchingEntry,\n          touchingLevel = insertion.touchingLevel,\n          touchingLateral = insertion.touchingLateral; // the entry that the new insertion is touching must be hidden\n\n      if (this.hiddenConsumes && touchingEntry) {\n        var touchingEntryId = buildEntryKey(touchingEntry);\n\n        if (!forceHidden[touchingEntryId]) {\n          if (this.allowReslicing) {\n            // split up the touchingEntry, reinsert it\n            var hiddenEntry = Object.assign(Object.assign({}, touchingEntry), {\n              span: intersectSpans(touchingEntry.span, entry.span)\n            }); // reinsert the area that turned into a \"more\" link (so no other entries try to\n            // occupy the space) but mark it forced-hidden\n\n            var hiddenEntryId = buildEntryKey(hiddenEntry);\n            forceHidden[hiddenEntryId] = true;\n            entriesByLevel[touchingLevel][touchingLateral] = hiddenEntry;\n            hiddenEntries.push(hiddenEntry);\n            this.splitEntry(touchingEntry, entry, hiddenEntries);\n          } else {\n            forceHidden[touchingEntryId] = true;\n            hiddenEntries.push(touchingEntry);\n          }\n        }\n      } // will try to reslice...\n\n\n      _get(_getPrototypeOf(DayGridSegHierarchy.prototype), \"handleInvalidInsertion\", this).call(this, insertion, entry, hiddenEntries);\n    }\n  }]);\n\n  return DayGridSegHierarchy;\n}(SegHierarchy);\n\nvar TableRow = /*#__PURE__*/function (_DateComponent3) {\n  _inherits(TableRow, _DateComponent3);\n\n  var _super7 = _createSuper(TableRow);\n\n  function TableRow() {\n    var _this6;\n\n    _classCallCheck(this, TableRow);\n\n    _this6 = _super7.apply(this, arguments);\n    _this6.cellElRefs = new RefMap(); // the <td>\n\n    _this6.frameElRefs = new RefMap(); // the fc-daygrid-day-frame\n\n    _this6.fgElRefs = new RefMap(); // the fc-daygrid-day-events\n\n    _this6.segHarnessRefs = new RefMap(); // indexed by \"instanceId:firstCol\"\n\n    _this6.rootElRef = createRef();\n    _this6.state = {\n      framePositions: null,\n      maxContentHeight: null,\n      segHeights: {}\n    };\n\n    _this6.handleResize = function (isForced) {\n      if (isForced) {\n        _this6.updateSizing(true); // isExternal=true\n\n      }\n    };\n\n    return _this6;\n  }\n\n  _createClass(TableRow, [{\n    key: \"render\",\n    value: function render() {\n      var _this7 = this;\n\n      var props = this.props,\n          state = this.state,\n          context = this.context;\n      var options = context.options;\n      var colCnt = props.cells.length;\n      var businessHoursByCol = splitSegsByFirstCol(props.businessHourSegs, colCnt);\n      var bgEventSegsByCol = splitSegsByFirstCol(props.bgEventSegs, colCnt);\n      var highlightSegsByCol = splitSegsByFirstCol(this.getHighlightSegs(), colCnt);\n      var mirrorSegsByCol = splitSegsByFirstCol(this.getMirrorSegs(), colCnt);\n\n      var _computeFgSegPlacemen = computeFgSegPlacement(sortEventSegs(props.fgEventSegs, options.eventOrder), props.dayMaxEvents, props.dayMaxEventRows, options.eventOrderStrict, state.segHeights, state.maxContentHeight, props.cells),\n          singleColPlacements = _computeFgSegPlacemen.singleColPlacements,\n          multiColPlacements = _computeFgSegPlacemen.multiColPlacements,\n          moreCnts = _computeFgSegPlacemen.moreCnts,\n          moreMarginTops = _computeFgSegPlacemen.moreMarginTops;\n\n      var isForcedInvisible = // TODO: messy way to compute this\n      props.eventDrag && props.eventDrag.affectedInstances || props.eventResize && props.eventResize.affectedInstances || {};\n      return createElement(\"tr\", {\n        ref: this.rootElRef,\n        role: \"row\"\n      }, props.renderIntro && props.renderIntro(), props.cells.map(function (cell, col) {\n        var normalFgNodes = _this7.renderFgSegs(col, props.forPrint ? singleColPlacements[col] : multiColPlacements[col], props.todayRange, isForcedInvisible);\n\n        var mirrorFgNodes = _this7.renderFgSegs(col, buildMirrorPlacements(mirrorSegsByCol[col], multiColPlacements), props.todayRange, {}, Boolean(props.eventDrag), Boolean(props.eventResize), false);\n\n        return createElement(TableCell, {\n          key: cell.key,\n          elRef: _this7.cellElRefs.createRef(cell.key),\n          innerElRef: _this7.frameElRefs.createRef(cell.key)\n          /* FF <td> problem, but okay to use for left/right. TODO: rename prop */\n          ,\n          dateProfile: props.dateProfile,\n          date: cell.date,\n          showDayNumber: props.showDayNumbers,\n          showWeekNumber: props.showWeekNumbers && col === 0,\n          forceDayTop: props.showWeekNumbers\n          /* even displaying weeknum for row, not necessarily day */\n          ,\n          todayRange: props.todayRange,\n          eventSelection: props.eventSelection,\n          eventDrag: props.eventDrag,\n          eventResize: props.eventResize,\n          extraRenderProps: cell.extraRenderProps,\n          extraDataAttrs: cell.extraDataAttrs,\n          extraClassNames: cell.extraClassNames,\n          extraDateSpan: cell.extraDateSpan,\n          moreCnt: moreCnts[col],\n          moreMarginTop: moreMarginTops[col],\n          singlePlacements: singleColPlacements[col],\n          fgContentElRef: _this7.fgElRefs.createRef(cell.key),\n          fgContent: // Fragment scopes the keys\n          createElement(Fragment, null, createElement(Fragment, null, normalFgNodes), createElement(Fragment, null, mirrorFgNodes)),\n          bgContent: // Fragment scopes the keys\n          createElement(Fragment, null, _this7.renderFillSegs(highlightSegsByCol[col], 'highlight'), _this7.renderFillSegs(businessHoursByCol[col], 'non-business'), _this7.renderFillSegs(bgEventSegsByCol[col], 'bg-event')),\n          minHeight: props.cellMinHeight\n        });\n      }));\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.updateSizing(true);\n      this.context.addResizeHandler(this.handleResize);\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps, prevState) {\n      var currentProps = this.props;\n      this.updateSizing(!isPropsEqual(prevProps, currentProps));\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.context.removeResizeHandler(this.handleResize);\n    }\n  }, {\n    key: \"getHighlightSegs\",\n    value: function getHighlightSegs() {\n      var props = this.props;\n\n      if (props.eventDrag && props.eventDrag.segs.length) {\n        // messy check\n        return props.eventDrag.segs;\n      }\n\n      if (props.eventResize && props.eventResize.segs.length) {\n        // messy check\n        return props.eventResize.segs;\n      }\n\n      return props.dateSelectionSegs;\n    }\n  }, {\n    key: \"getMirrorSegs\",\n    value: function getMirrorSegs() {\n      var props = this.props;\n\n      if (props.eventResize && props.eventResize.segs.length) {\n        // messy check\n        return props.eventResize.segs;\n      }\n\n      return [];\n    }\n  }, {\n    key: \"renderFgSegs\",\n    value: function renderFgSegs(col, segPlacements, todayRange, isForcedInvisible, isDragging, isResizing, isDateSelecting) {\n      var context = this.context;\n      var eventSelection = this.props.eventSelection;\n      var framePositions = this.state.framePositions;\n      var defaultDisplayEventEnd = this.props.cells.length === 1; // colCnt === 1\n\n      var isMirror = isDragging || isResizing || isDateSelecting;\n      var nodes = [];\n\n      if (framePositions) {\n        var _iterator9 = _createForOfIteratorHelper(segPlacements),\n            _step9;\n\n        try {\n          for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n            var placement = _step9.value;\n            var seg = placement.seg;\n            var instanceId = seg.eventRange.instance.instanceId;\n            var isVisible = placement.isVisible && !isForcedInvisible[instanceId];\n            var isAbsolute = placement.isAbsolute;\n            var left = '';\n            var right = '';\n\n            if (isAbsolute) {\n              if (context.isRtl) {\n                right = 0;\n                left = framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol];\n              } else {\n                left = 0;\n                right = framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol];\n              }\n            }\n            /*\n            known bug: events that are force to be list-item but span multiple days still take up space in later columns\n            todo: in print view, for multi-day events, don't display title within non-start/end segs\n            */\n\n\n            nodes.push(createElement(\"div\", {\n              className: 'fc-daygrid-event-harness' + (isAbsolute ? ' fc-daygrid-event-harness-abs' : ''),\n              key: generateSegKey(seg),\n              ref: isMirror ? null : this.segHarnessRefs.createRef(generateSegUid(seg)),\n              style: {\n                visibility: isVisible ? '' : 'hidden',\n                marginTop: isAbsolute ? '' : placement.marginTop,\n                top: isAbsolute ? placement.absoluteTop : '',\n                left: left,\n                right: right\n              }\n            }, hasListItemDisplay(seg) ? createElement(TableListItemEvent, Object.assign({\n              seg: seg,\n              isDragging: isDragging,\n              isSelected: instanceId === eventSelection,\n              defaultDisplayEventEnd: defaultDisplayEventEnd\n            }, getSegMeta(seg, todayRange))) : createElement(TableBlockEvent, Object.assign({\n              seg: seg,\n              isDragging: isDragging,\n              isResizing: isResizing,\n              isDateSelecting: isDateSelecting,\n              isSelected: instanceId === eventSelection,\n              defaultDisplayEventEnd: defaultDisplayEventEnd\n            }, getSegMeta(seg, todayRange)))));\n          }\n        } catch (err) {\n          _iterator9.e(err);\n        } finally {\n          _iterator9.f();\n        }\n      }\n\n      return nodes;\n    }\n  }, {\n    key: \"renderFillSegs\",\n    value: function renderFillSegs(segs, fillType) {\n      var isRtl = this.context.isRtl;\n      var todayRange = this.props.todayRange;\n      var framePositions = this.state.framePositions;\n      var nodes = [];\n\n      if (framePositions) {\n        var _iterator10 = _createForOfIteratorHelper(segs),\n            _step10;\n\n        try {\n          for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n            var seg = _step10.value;\n            var leftRightCss = isRtl ? {\n              right: 0,\n              left: framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol]\n            } : {\n              left: 0,\n              right: framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol]\n            };\n            nodes.push(createElement(\"div\", {\n              key: buildEventRangeKey(seg.eventRange),\n              className: \"fc-daygrid-bg-harness\",\n              style: leftRightCss\n            }, fillType === 'bg-event' ? createElement(BgEvent, Object.assign({\n              seg: seg\n            }, getSegMeta(seg, todayRange))) : renderFill(fillType)));\n          }\n        } catch (err) {\n          _iterator10.e(err);\n        } finally {\n          _iterator10.f();\n        }\n      }\n\n      return createElement.apply(void 0, [Fragment, {}].concat(nodes));\n    }\n  }, {\n    key: \"updateSizing\",\n    value: function updateSizing(isExternalSizingChange) {\n      var props = this.props,\n          state = this.state,\n          frameElRefs = this.frameElRefs;\n\n      if (!props.forPrint && props.clientWidth !== null // positioning ready?\n      ) {\n        if (isExternalSizingChange) {\n          var frameEls = props.cells.map(function (cell) {\n            return frameElRefs.currentMap[cell.key];\n          });\n\n          if (frameEls.length) {\n            var originEl = this.rootElRef.current;\n            var newPositionCache = new PositionCache(originEl, frameEls, true, // isHorizontal\n            false);\n\n            if (!state.framePositions || !state.framePositions.similarTo(newPositionCache)) {\n              this.setState({\n                framePositions: new PositionCache(originEl, frameEls, true, // isHorizontal\n                false)\n              });\n            }\n          }\n        }\n\n        var oldSegHeights = this.state.segHeights;\n        var newSegHeights = this.querySegHeights();\n        var limitByContentHeight = props.dayMaxEvents === true || props.dayMaxEventRows === true;\n        this.safeSetState({\n          // HACK to prevent oscillations of events being shown/hidden from max-event-rows\n          // Essentially, once you compute an element's height, never null-out.\n          // TODO: always display all events, as visibility:hidden?\n          segHeights: Object.assign(Object.assign({}, oldSegHeights), newSegHeights),\n          maxContentHeight: limitByContentHeight ? this.computeMaxContentHeight() : null\n        });\n      }\n    }\n  }, {\n    key: \"querySegHeights\",\n    value: function querySegHeights() {\n      var segElMap = this.segHarnessRefs.currentMap;\n      var segHeights = {}; // get the max height amongst instance segs\n\n      for (var segUid in segElMap) {\n        var height = Math.round(segElMap[segUid].getBoundingClientRect().height);\n        segHeights[segUid] = Math.max(segHeights[segUid] || 0, height);\n      }\n\n      return segHeights;\n    }\n  }, {\n    key: \"computeMaxContentHeight\",\n    value: function computeMaxContentHeight() {\n      var firstKey = this.props.cells[0].key;\n      var cellEl = this.cellElRefs.currentMap[firstKey];\n      var fcContainerEl = this.fgElRefs.currentMap[firstKey];\n      return cellEl.getBoundingClientRect().bottom - fcContainerEl.getBoundingClientRect().top;\n    }\n  }, {\n    key: \"getCellEls\",\n    value: function getCellEls() {\n      var elMap = this.cellElRefs.currentMap;\n      return this.props.cells.map(function (cell) {\n        return elMap[cell.key];\n      });\n    }\n  }]);\n\n  return TableRow;\n}(DateComponent);\n\nTableRow.addStateEquality({\n  segHeights: isPropsEqual\n});\n\nfunction buildMirrorPlacements(mirrorSegs, colPlacements) {\n  if (!mirrorSegs.length) {\n    return [];\n  }\n\n  var topsByInstanceId = buildAbsoluteTopHash(colPlacements); // TODO: cache this at first render?\n\n  return mirrorSegs.map(function (seg) {\n    return {\n      seg: seg,\n      isVisible: true,\n      isAbsolute: true,\n      absoluteTop: topsByInstanceId[seg.eventRange.instance.instanceId],\n      marginTop: 0\n    };\n  });\n}\n\nfunction buildAbsoluteTopHash(colPlacements) {\n  var topsByInstanceId = {};\n\n  var _iterator11 = _createForOfIteratorHelper(colPlacements),\n      _step11;\n\n  try {\n    for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n      var placements = _step11.value;\n\n      var _iterator12 = _createForOfIteratorHelper(placements),\n          _step12;\n\n      try {\n        for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n          var placement = _step12.value;\n          topsByInstanceId[placement.seg.eventRange.instance.instanceId] = placement.absoluteTop;\n        }\n      } catch (err) {\n        _iterator12.e(err);\n      } finally {\n        _iterator12.f();\n      }\n    }\n  } catch (err) {\n    _iterator11.e(err);\n  } finally {\n    _iterator11.f();\n  }\n\n  return topsByInstanceId;\n}\n\nvar TableRows = /*#__PURE__*/function (_DateComponent4) {\n  _inherits(TableRows, _DateComponent4);\n\n  var _super8 = _createSuper(TableRows);\n\n  function TableRows() {\n    var _this8;\n\n    _classCallCheck(this, TableRows);\n\n    _this8 = _super8.apply(this, arguments);\n    _this8.splitBusinessHourSegs = memoize(splitSegsByRow);\n    _this8.splitBgEventSegs = memoize(splitSegsByRow);\n    _this8.splitFgEventSegs = memoize(splitSegsByRow);\n    _this8.splitDateSelectionSegs = memoize(splitSegsByRow);\n    _this8.splitEventDrag = memoize(splitInteractionByRow);\n    _this8.splitEventResize = memoize(splitInteractionByRow);\n    _this8.rowRefs = new RefMap();\n    return _this8;\n  }\n\n  _createClass(TableRows, [{\n    key: \"render\",\n    value: function render() {\n      var _this9 = this;\n\n      var props = this.props,\n          context = this.context;\n      var rowCnt = props.cells.length;\n      var businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, rowCnt);\n      var bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, rowCnt);\n      var fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, rowCnt);\n      var dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, rowCnt);\n      var eventDragByRow = this.splitEventDrag(props.eventDrag, rowCnt);\n      var eventResizeByRow = this.splitEventResize(props.eventResize, rowCnt); // for DayGrid view with many rows, force a min-height on cells so doesn't appear squished\n      // choose 7 because a month view will have max 6 rows\n\n      var cellMinHeight = rowCnt >= 7 && props.clientWidth ? props.clientWidth / context.options.aspectRatio / 6 : null;\n      return createElement(NowTimer, {\n        unit: \"day\"\n      }, function (nowDate, todayRange) {\n        return createElement(Fragment, null, props.cells.map(function (cells, row) {\n          return createElement(TableRow, {\n            ref: _this9.rowRefs.createRef(row),\n            key: cells.length ? cells[0].date.toISOString()\n            /* best? or put key on cell? or use diff formatter? */\n            : row // in case there are no cells (like when resource view is loading)\n            ,\n            showDayNumbers: rowCnt > 1,\n            showWeekNumbers: props.showWeekNumbers,\n            todayRange: todayRange,\n            dateProfile: props.dateProfile,\n            cells: cells,\n            renderIntro: props.renderRowIntro,\n            businessHourSegs: businessHourSegsByRow[row],\n            eventSelection: props.eventSelection,\n            bgEventSegs: bgEventSegsByRow[row].filter(isSegAllDay)\n            /* hack */\n            ,\n            fgEventSegs: fgEventSegsByRow[row],\n            dateSelectionSegs: dateSelectionSegsByRow[row],\n            eventDrag: eventDragByRow[row],\n            eventResize: eventResizeByRow[row],\n            dayMaxEvents: props.dayMaxEvents,\n            dayMaxEventRows: props.dayMaxEventRows,\n            clientWidth: props.clientWidth,\n            clientHeight: props.clientHeight,\n            cellMinHeight: cellMinHeight,\n            forPrint: props.forPrint\n          });\n        }));\n      });\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.registerInteractiveComponent();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      // for if started with zero cells\n      this.registerInteractiveComponent();\n    }\n  }, {\n    key: \"registerInteractiveComponent\",\n    value: function registerInteractiveComponent() {\n      if (!this.rootEl) {\n        // HACK: need a daygrid wrapper parent to do positioning\n        // NOTE: a daygrid resource view w/o resources can have zero cells\n        var firstCellEl = this.rowRefs.currentMap[0].getCellEls()[0];\n        var rootEl = firstCellEl ? firstCellEl.closest('.fc-daygrid-body') : null;\n\n        if (rootEl) {\n          this.rootEl = rootEl;\n          this.context.registerInteractiveComponent(this, {\n            el: rootEl,\n            isHitComboAllowed: this.props.isHitComboAllowed\n          });\n        }\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.rootEl) {\n        this.context.unregisterInteractiveComponent(this);\n        this.rootEl = null;\n      }\n    } // Hit System\n    // ----------------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"prepareHits\",\n    value: function prepareHits() {\n      this.rowPositions = new PositionCache(this.rootEl, this.rowRefs.collect().map(function (rowObj) {\n        return rowObj.getCellEls()[0];\n      }), // first cell el in each row. TODO: not optimal\n      false, true);\n      this.colPositions = new PositionCache(this.rootEl, this.rowRefs.currentMap[0].getCellEls(), // cell els in first row\n      true, // horizontal\n      false);\n    }\n  }, {\n    key: \"queryHit\",\n    value: function queryHit(positionLeft, positionTop) {\n      var colPositions = this.colPositions,\n          rowPositions = this.rowPositions;\n      var col = colPositions.leftToIndex(positionLeft);\n      var row = rowPositions.topToIndex(positionTop);\n\n      if (row != null && col != null) {\n        var cell = this.props.cells[row][col];\n        return {\n          dateProfile: this.props.dateProfile,\n          dateSpan: Object.assign({\n            range: this.getCellRange(row, col),\n            allDay: true\n          }, cell.extraDateSpan),\n          dayEl: this.getCellEl(row, col),\n          rect: {\n            left: colPositions.lefts[col],\n            right: colPositions.rights[col],\n            top: rowPositions.tops[row],\n            bottom: rowPositions.bottoms[row]\n          },\n          layer: 0\n        };\n      }\n\n      return null;\n    }\n  }, {\n    key: \"getCellEl\",\n    value: function getCellEl(row, col) {\n      return this.rowRefs.currentMap[row].getCellEls()[col]; // TODO: not optimal\n    }\n  }, {\n    key: \"getCellRange\",\n    value: function getCellRange(row, col) {\n      var start = this.props.cells[row][col].date;\n      var end = addDays(start, 1);\n      return {\n        start: start,\n        end: end\n      };\n    }\n  }]);\n\n  return TableRows;\n}(DateComponent);\n\nfunction isSegAllDay(seg) {\n  return seg.eventRange.def.allDay;\n}\n\nvar Table = /*#__PURE__*/function (_DateComponent5) {\n  _inherits(Table, _DateComponent5);\n\n  var _super9 = _createSuper(Table);\n\n  function Table() {\n    var _this10;\n\n    _classCallCheck(this, Table);\n\n    _this10 = _super9.apply(this, arguments);\n    _this10.elRef = createRef();\n    _this10.needsScrollReset = false;\n    return _this10;\n  }\n\n  _createClass(Table, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      var dayMaxEventRows = props.dayMaxEventRows,\n          dayMaxEvents = props.dayMaxEvents,\n          expandRows = props.expandRows;\n      var limitViaBalanced = dayMaxEvents === true || dayMaxEventRows === true; // if rows can't expand to fill fixed height, can't do balanced-height event limit\n      // TODO: best place to normalize these options?\n\n      if (limitViaBalanced && !expandRows) {\n        limitViaBalanced = false;\n        dayMaxEventRows = null;\n        dayMaxEvents = null;\n      }\n\n      var classNames = ['fc-daygrid-body', limitViaBalanced ? 'fc-daygrid-body-balanced' : 'fc-daygrid-body-unbalanced', expandRows ? '' : 'fc-daygrid-body-natural' // will height of one row depend on the others?\n      ];\n      return createElement(\"div\", {\n        ref: this.elRef,\n        className: classNames.join(' '),\n        style: {\n          // these props are important to give this wrapper correct dimensions for interactions\n          // TODO: if we set it here, can we avoid giving to inner tables?\n          width: props.clientWidth,\n          minWidth: props.tableMinWidth\n        }\n      }, createElement(\"table\", {\n        role: \"presentation\",\n        className: \"fc-scrollgrid-sync-table\",\n        style: {\n          width: props.clientWidth,\n          minWidth: props.tableMinWidth,\n          height: expandRows ? props.clientHeight : ''\n        }\n      }, props.colGroupNode, createElement(\"tbody\", {\n        role: \"presentation\"\n      }, createElement(TableRows, {\n        dateProfile: props.dateProfile,\n        cells: props.cells,\n        renderRowIntro: props.renderRowIntro,\n        showWeekNumbers: props.showWeekNumbers,\n        clientWidth: props.clientWidth,\n        clientHeight: props.clientHeight,\n        businessHourSegs: props.businessHourSegs,\n        bgEventSegs: props.bgEventSegs,\n        fgEventSegs: props.fgEventSegs,\n        dateSelectionSegs: props.dateSelectionSegs,\n        eventSelection: props.eventSelection,\n        eventDrag: props.eventDrag,\n        eventResize: props.eventResize,\n        dayMaxEvents: dayMaxEvents,\n        dayMaxEventRows: dayMaxEventRows,\n        forPrint: props.forPrint,\n        isHitComboAllowed: props.isHitComboAllowed\n      }))));\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.requestScrollReset();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      if (prevProps.dateProfile !== this.props.dateProfile) {\n        this.requestScrollReset();\n      } else {\n        this.flushScrollReset();\n      }\n    }\n  }, {\n    key: \"requestScrollReset\",\n    value: function requestScrollReset() {\n      this.needsScrollReset = true;\n      this.flushScrollReset();\n    }\n  }, {\n    key: \"flushScrollReset\",\n    value: function flushScrollReset() {\n      if (this.needsScrollReset && this.props.clientWidth // sizes computed?\n      ) {\n        var subjectEl = getScrollSubjectEl(this.elRef.current, this.props.dateProfile);\n\n        if (subjectEl) {\n          var originEl = subjectEl.closest('.fc-daygrid-body');\n          var scrollEl = originEl.closest('.fc-scroller');\n          var scrollTop = subjectEl.getBoundingClientRect().top - originEl.getBoundingClientRect().top;\n          scrollEl.scrollTop = scrollTop ? scrollTop + 1 : 0; // overcome border\n        }\n\n        this.needsScrollReset = false;\n      }\n    }\n  }]);\n\n  return Table;\n}(DateComponent);\n\nfunction getScrollSubjectEl(containerEl, dateProfile) {\n  var el;\n\n  if (dateProfile.currentRangeUnit.match(/year|month/)) {\n    el = containerEl.querySelector(\"[data-date=\\\"\".concat(formatIsoMonthStr(dateProfile.currentDate), \"-01\\\"]\")); // even if view is month-based, first-of-month might be hidden...\n  }\n\n  if (!el) {\n    el = containerEl.querySelector(\"[data-date=\\\"\".concat(formatDayString(dateProfile.currentDate), \"\\\"]\")); // could still be hidden if an interior-view hidden day\n  }\n\n  return el;\n}\n\nvar DayTableSlicer = /*#__PURE__*/function (_Slicer) {\n  _inherits(DayTableSlicer, _Slicer);\n\n  var _super10 = _createSuper(DayTableSlicer);\n\n  function DayTableSlicer() {\n    var _this11;\n\n    _classCallCheck(this, DayTableSlicer);\n\n    _this11 = _super10.apply(this, arguments);\n    _this11.forceDayIfListItem = true;\n    return _this11;\n  }\n\n  _createClass(DayTableSlicer, [{\n    key: \"sliceRange\",\n    value: function sliceRange(dateRange, dayTableModel) {\n      return dayTableModel.sliceRange(dateRange);\n    }\n  }]);\n\n  return DayTableSlicer;\n}(Slicer);\n\nvar DayTable = /*#__PURE__*/function (_DateComponent6) {\n  _inherits(DayTable, _DateComponent6);\n\n  var _super11 = _createSuper(DayTable);\n\n  function DayTable() {\n    var _this12;\n\n    _classCallCheck(this, DayTable);\n\n    _this12 = _super11.apply(this, arguments);\n    _this12.slicer = new DayTableSlicer();\n    _this12.tableRef = createRef();\n    return _this12;\n  }\n\n  _createClass(DayTable, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          context = this.context;\n      return createElement(Table, Object.assign({\n        ref: this.tableRef\n      }, this.slicer.sliceProps(props, props.dateProfile, props.nextDayThreshold, context, props.dayTableModel), {\n        dateProfile: props.dateProfile,\n        cells: props.dayTableModel.cells,\n        colGroupNode: props.colGroupNode,\n        tableMinWidth: props.tableMinWidth,\n        renderRowIntro: props.renderRowIntro,\n        dayMaxEvents: props.dayMaxEvents,\n        dayMaxEventRows: props.dayMaxEventRows,\n        showWeekNumbers: props.showWeekNumbers,\n        expandRows: props.expandRows,\n        headerAlignElRef: props.headerAlignElRef,\n        clientWidth: props.clientWidth,\n        clientHeight: props.clientHeight,\n        forPrint: props.forPrint\n      }));\n    }\n  }]);\n\n  return DayTable;\n}(DateComponent);\n\nvar DayTableView = /*#__PURE__*/function (_TableView) {\n  _inherits(DayTableView, _TableView);\n\n  var _super12 = _createSuper(DayTableView);\n\n  function DayTableView() {\n    var _this13;\n\n    _classCallCheck(this, DayTableView);\n\n    _this13 = _super12.apply(this, arguments);\n    _this13.buildDayTableModel = memoize(buildDayTableModel);\n    _this13.headerRef = createRef();\n    _this13.tableRef = createRef(); // can't override any lifecycle methods from parent\n\n    return _this13;\n  }\n\n  _createClass(DayTableView, [{\n    key: \"render\",\n    value: function render() {\n      var _this14 = this;\n\n      var _this$context = this.context,\n          options = _this$context.options,\n          dateProfileGenerator = _this$context.dateProfileGenerator;\n      var props = this.props;\n      var dayTableModel = this.buildDayTableModel(props.dateProfile, dateProfileGenerator);\n      var headerContent = options.dayHeaders && createElement(DayHeader, {\n        ref: this.headerRef,\n        dateProfile: props.dateProfile,\n        dates: dayTableModel.headerDates,\n        datesRepDistinctDays: dayTableModel.rowCnt === 1\n      });\n\n      var bodyContent = function bodyContent(contentArg) {\n        return createElement(DayTable, {\n          ref: _this14.tableRef,\n          dateProfile: props.dateProfile,\n          dayTableModel: dayTableModel,\n          businessHours: props.businessHours,\n          dateSelection: props.dateSelection,\n          eventStore: props.eventStore,\n          eventUiBases: props.eventUiBases,\n          eventSelection: props.eventSelection,\n          eventDrag: props.eventDrag,\n          eventResize: props.eventResize,\n          nextDayThreshold: options.nextDayThreshold,\n          colGroupNode: contentArg.tableColGroupNode,\n          tableMinWidth: contentArg.tableMinWidth,\n          dayMaxEvents: options.dayMaxEvents,\n          dayMaxEventRows: options.dayMaxEventRows,\n          showWeekNumbers: options.weekNumbers,\n          expandRows: !props.isHeightAuto,\n          headerAlignElRef: _this14.headerElRef,\n          clientWidth: contentArg.clientWidth,\n          clientHeight: contentArg.clientHeight,\n          forPrint: props.forPrint\n        });\n      };\n\n      return options.dayMinWidth ? this.renderHScrollLayout(headerContent, bodyContent, dayTableModel.colCnt, options.dayMinWidth) : this.renderSimpleLayout(headerContent, bodyContent);\n    }\n  }]);\n\n  return DayTableView;\n}(TableView);\n\nfunction buildDayTableModel(dateProfile, dateProfileGenerator) {\n  var daySeries = new DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);\n  return new DayTableModel(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit));\n}\n\nvar TableDateProfileGenerator = /*#__PURE__*/function (_DateProfileGenerator) {\n  _inherits(TableDateProfileGenerator, _DateProfileGenerator);\n\n  var _super13 = _createSuper(TableDateProfileGenerator);\n\n  function TableDateProfileGenerator() {\n    _classCallCheck(this, TableDateProfileGenerator);\n\n    return _super13.apply(this, arguments);\n  }\n\n  _createClass(TableDateProfileGenerator, [{\n    key: \"buildRenderRange\",\n    value: // Computes the date range that will be rendered\n    function buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay) {\n      var renderRange = _get(_getPrototypeOf(TableDateProfileGenerator.prototype), \"buildRenderRange\", this).call(this, currentRange, currentRangeUnit, isRangeAllDay);\n\n      var props = this.props;\n      return buildDayTableRenderRange({\n        currentRange: renderRange,\n        snapToWeek: /^(year|month)$/.test(currentRangeUnit),\n        fixedWeekCount: props.fixedWeekCount,\n        dateEnv: props.dateEnv\n      });\n    }\n  }]);\n\n  return TableDateProfileGenerator;\n}(DateProfileGenerator);\n\nfunction buildDayTableRenderRange(props) {\n  var dateEnv = props.dateEnv,\n      currentRange = props.currentRange;\n  var start = currentRange.start,\n      end = currentRange.end;\n  var endOfWeek; // year and month views should be aligned with weeks. this is already done for week\n\n  if (props.snapToWeek) {\n    start = dateEnv.startOfWeek(start); // make end-of-week if not already\n\n    endOfWeek = dateEnv.startOfWeek(end);\n\n    if (endOfWeek.valueOf() !== end.valueOf()) {\n      end = addWeeks(endOfWeek, 1);\n    }\n  } // ensure 6 weeks\n\n\n  if (props.fixedWeekCount) {\n    // TODO: instead of these date-math gymnastics (for multimonth view),\n    // compute dateprofiles of all months, then use start of first and end of last.\n    var lastMonthRenderStart = dateEnv.startOfWeek(dateEnv.startOfMonth(addDays(currentRange.end, -1)));\n    var rowCnt = Math.ceil( // could be partial weeks due to hiddenDays\n    diffWeeks(lastMonthRenderStart, end));\n    end = addWeeks(end, 6 - rowCnt);\n  }\n\n  return {\n    start: start,\n    end: end\n  };\n}\n\nvar css_248z = \":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{clear:both;content:\\\"\\\";display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-daygrid-day-frame{min-height:100%;position:relative}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{padding:4px;position:relative;z-index:4}.fc .fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{left:0;position:absolute;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em;position:relative}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{left:0;position:absolute;right:0;top:0}.fc .fc-daygrid-bg-harness{bottom:0;position:absolute;top:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{margin-top:1px;z-index:6}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;margin:0 2px}.fc .fc-daygrid-day-bottom:after,.fc .fc-daygrid-day-bottom:before{clear:both;content:\\\"\\\";display:table}.fc .fc-daygrid-more-link{border-radius:3px;cursor:pointer;line-height:1;margin-top:1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap;z-index:4}.fc .fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc .fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-more-link{float:left}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px 0;left:0}.fc-direction-rtl .fc-daygrid-more-link{float:right}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px;right:0}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative;white-space:nowrap}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;display:flex;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;font-weight:700;min-width:0;overflow:hidden}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}\";\ninjectStyles(css_248z);\nexport { DayTableView as DayGridView, DayTable, DayTableSlicer, Table, TableDateProfileGenerator, TableRows, TableView, buildDayTableModel, buildDayTableRenderRange };","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n    var next = child;\n\n    do {\n      if (next && parent.isSameNode(next)) {\n        return true;\n      } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n      next = next.parentNode || next.host;\n    } while (next);\n  } // Give up, the result is false\n\n\n  return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n  var x = _ref.x,\n      y = _ref.y;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }, getWindow(popper)) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name; // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        });\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref) {\n        var name = _ref.name,\n            _ref$options = _ref.options,\n            options = _ref$options === void 0 ? {} : _ref$options,\n            effect = _ref.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","var _KEY_TO_DIRECTION;\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n  * Bootstrap v5.3.1 (https://getbootstrap.com/)\n  * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nvar elementMap = new Map();\nvar Data = {\n  set: function set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    var instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(\"Bootstrap doesn't allow more than one instance per element. Bound instance: \".concat(Array.from(instanceMap.keys())[0], \".\"));\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n  get: function get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n  remove: function remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    var instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n};\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar MAX_UID = 1000000;\nvar MILLISECONDS_MULTIPLIER = 1000;\nvar TRANSITION_END = 'transitionend';\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\n\nvar parseSelector = function parseSelector(selector) {\n  if (selector && window.CSS && window.CSS.escape) {\n    // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n    selector = selector.replace(/#([^\\s\"#']+)/g, function (match, id) {\n      return \"#\".concat(CSS.escape(id));\n    });\n  }\n\n  return selector;\n}; // Shout-out Angus Croll (https://goo.gl/pxwQGp)\n\n\nvar toType = function toType(object) {\n  if (object === null || object === undefined) {\n    return \"\".concat(object);\n  }\n\n  return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * Public Util API\n */\n\n\nvar getUID = function getUID(prefix) {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nvar getTransitionDurationFromElement = function getTransitionDurationFromElement(element) {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  var _window$getComputedSt = window.getComputedStyle(element),\n      transitionDuration = _window$getComputedSt.transitionDuration,\n      transitionDelay = _window$getComputedSt.transitionDelay;\n\n  var floatTransitionDuration = Number.parseFloat(transitionDuration);\n  var floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nvar triggerTransitionEnd = function triggerTransitionEnd(element) {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nvar isElement = function isElement(object) {\n  if (!object || _typeof(object) !== 'object') {\n    return false;\n  }\n\n  if (typeof object.jquery !== 'undefined') {\n    object = object[0];\n  }\n\n  return typeof object.nodeType !== 'undefined';\n};\n\nvar getElement = function getElement(object) {\n  // it's a jQuery object or a node element\n  if (isElement(object)) {\n    return object.jquery ? object[0] : object;\n  }\n\n  if (typeof object === 'string' && object.length > 0) {\n    return document.querySelector(parseSelector(object));\n  }\n\n  return null;\n};\n\nvar isVisible = function isVisible(element) {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  var elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed\n\n  var closedDetails = element.closest('details:not([open])');\n\n  if (!closedDetails) {\n    return elementIsVisible;\n  }\n\n  if (closedDetails !== element) {\n    var summary = element.closest('summary');\n\n    if (summary && summary.parentNode !== closedDetails) {\n      return false;\n    }\n\n    if (summary === null) {\n      return false;\n    }\n  }\n\n  return elementIsVisible;\n};\n\nvar isDisabled = function isDisabled(element) {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nvar findShadowRoot = function findShadowRoot(element) {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    var root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nvar noop = function noop() {};\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\n\n\nvar reflow = function reflow(element) {\n  element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nvar getjQuery = function getjQuery() {\n  if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return window.jQuery;\n  }\n\n  return null;\n};\n\nvar DOMContentLoadedCallbacks = [];\n\nvar onDOMContentLoaded = function onDOMContentLoaded(callback) {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', function () {\n        for (var _i = 0, _DOMContentLoadedCall = DOMContentLoadedCallbacks; _i < _DOMContentLoadedCall.length; _i++) {\n          var _callback = _DOMContentLoadedCall[_i];\n\n          _callback();\n        }\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nvar isRTL = function isRTL() {\n  return document.documentElement.dir === 'rtl';\n};\n\nvar defineJQueryPlugin = function defineJQueryPlugin(plugin) {\n  onDOMContentLoaded(function () {\n    var $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      var name = plugin.NAME;\n      var JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = function () {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nvar execute = function execute(possibleCallback) {\n  var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n  var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : possibleCallback;\n  return typeof possibleCallback === 'function' ? possibleCallback.apply(void 0, _toConsumableArray(args)) : defaultValue;\n};\n\nvar executeAfterTransition = function executeAfterTransition(callback, transitionElement) {\n  var waitForTransition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  var durationPadding = 5;\n  var emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  var called = false;\n\n  var handler = function handler(_ref) {\n    var target = _ref.target;\n\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(function () {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nvar getNextActiveElement = function getNextActiveElement(list, activeElement, shouldGetNext, isCycleAllowed) {\n  var listLength = list.length;\n  var index = list.indexOf(activeElement); // if the element does not exist in the list return an element\n  // depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n  }\n\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\n\nvar namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nvar stripNameRegex = /\\..*/;\nvar stripUidRegex = /::\\d+$/;\nvar eventRegistry = {}; // Events storage\n\nvar uidEvent = 1;\nvar customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nvar nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n  return uid && \"\".concat(uid, \"::\").concat(uidEvent++) || element.uidEvent || uidEvent++;\n}\n\nfunction getElementEvents(element) {\n  var uid = makeEventUid(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    hydrateObj(event, {\n      delegateTarget: element\n    });\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    var domElements = element.querySelectorAll(selector);\n\n    for (var target = event.target; target && target !== this; target = target.parentNode) {\n      var _iterator = _createForOfIteratorHelper(domElements),\n          _step;\n\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var domElement = _step.value;\n\n          if (domElement !== target) {\n            continue;\n          }\n\n          hydrateObj(event, {\n            delegateTarget: target\n          });\n\n          if (handler.oneOff) {\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n  };\n}\n\nfunction findHandler(events, callable) {\n  var delegationSelector = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n  return Object.values(events).find(function (event) {\n    return event.callable === callable && event.delegationSelector === delegationSelector;\n  });\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n  var isDelegated = typeof handler === 'string'; // TODO: tooltip passes `false` instead of selector, so we need to check\n\n  var callable = isDelegated ? delegationFunction : handler || delegationFunction;\n  var typeEvent = getTypeEvent(originalTypeEvent);\n\n  if (!nativeEvents.has(typeEvent)) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [isDelegated, callable, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  var _normalizeParameters = normalizeParameters(originalTypeEvent, handler, delegationFunction),\n      _normalizeParameters2 = _slicedToArray(_normalizeParameters, 3),\n      isDelegated = _normalizeParameters2[0],\n      callable = _normalizeParameters2[1],\n      typeEvent = _normalizeParameters2[2]; // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (originalTypeEvent in customEvents) {\n    var wrapFunction = function wrapFunction(fn) {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    callable = wrapFunction(callable);\n  }\n\n  var events = getElementEvents(element);\n  var handlers = events[typeEvent] || (events[typeEvent] = {});\n  var previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n\n  if (previousFunction) {\n    previousFunction.oneOff = previousFunction.oneOff && oneOff;\n    return;\n  }\n\n  var uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n  var fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n  fn.delegationSelector = isDelegated ? handler : null;\n  fn.callable = callable;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, isDelegated);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  var fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  var storeElementEvent = events[typeEvent] || {};\n\n  for (var _i2 = 0, _Object$entries = Object.entries(storeElementEvent); _i2 < _Object$entries.length; _i2++) {\n    var _ref4 = _Object$entries[_i2];\n\n    var _ref3 = _slicedToArray(_ref4, 2);\n\n    var handlerKey = _ref3[0];\n    var event = _ref3[1];\n\n    if (handlerKey.includes(namespace)) {\n      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n    }\n  }\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nvar EventHandler = {\n  on: function on(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, false);\n  },\n  one: function one(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, true);\n  },\n  off: function off(element, originalTypeEvent, handler, delegationFunction) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    var _normalizeParameters3 = normalizeParameters(originalTypeEvent, handler, delegationFunction),\n        _normalizeParameters4 = _slicedToArray(_normalizeParameters3, 3),\n        isDelegated = _normalizeParameters4[0],\n        callable = _normalizeParameters4[1],\n        typeEvent = _normalizeParameters4[2];\n\n    var inNamespace = typeEvent !== originalTypeEvent;\n    var events = getElementEvents(element);\n    var storeElementEvent = events[typeEvent] || {};\n    var isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof callable !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!Object.keys(storeElementEvent).length) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      for (var _i3 = 0, _Object$keys = Object.keys(events); _i3 < _Object$keys.length; _i3++) {\n        var elementEvent = _Object$keys[_i3];\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      }\n    }\n\n    for (var _i4 = 0, _Object$entries2 = Object.entries(storeElementEvent); _i4 < _Object$entries2.length; _i4++) {\n      var _ref7 = _Object$entries2[_i4];\n\n      var _ref6 = _slicedToArray(_ref7, 2);\n\n      var keyHandlers = _ref6[0];\n      var event = _ref6[1];\n      var handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n      }\n    }\n  },\n  trigger: function trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    var $ = getjQuery();\n    var typeEvent = getTypeEvent(event);\n    var inNamespace = event !== typeEvent;\n    var jQueryEvent = null;\n    var bubbles = true;\n    var nativeDispatch = true;\n    var defaultPrevented = false;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    var evt = hydrateObj(new Event(event, {\n      bubbles: bubbles,\n      cancelable: true\n    }), args);\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && jQueryEvent) {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n};\n\nfunction hydrateObj(obj) {\n  var meta = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  var _loop = function _loop() {\n    var _ref8 = _Object$entries3[_i5];\n    _ref9 = _slicedToArray(_ref8, 2);\n    var key = _ref9[0];\n    var value = _ref9[1];\n\n    try {\n      obj[key] = value;\n    } catch (_unused) {\n      Object.defineProperty(obj, key, {\n        configurable: true,\n        get: function get() {\n          return value;\n        }\n      });\n    }\n  };\n\n  for (var _i5 = 0, _Object$entries3 = Object.entries(meta); _i5 < _Object$entries3.length; _i5++) {\n    var _ref9;\n\n    _loop();\n  }\n\n  return obj;\n}\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\nfunction normalizeData(value) {\n  if (value === 'true') {\n    return true;\n  }\n\n  if (value === 'false') {\n    return false;\n  }\n\n  if (value === Number(value).toString()) {\n    return Number(value);\n  }\n\n  if (value === '' || value === 'null') {\n    return null;\n  }\n\n  if (typeof value !== 'string') {\n    return value;\n  }\n\n  try {\n    return JSON.parse(decodeURIComponent(value));\n  } catch (_unused) {\n    return value;\n  }\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, function (chr) {\n    return \"-\".concat(chr.toLowerCase());\n  });\n}\n\nvar Manipulator = {\n  setDataAttribute: function setDataAttribute(element, key, value) {\n    element.setAttribute(\"data-bs-\".concat(normalizeDataKey(key)), value);\n  },\n  removeDataAttribute: function removeDataAttribute(element, key) {\n    element.removeAttribute(\"data-bs-\".concat(normalizeDataKey(key)));\n  },\n  getDataAttributes: function getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    var attributes = {};\n    var bsKeys = Object.keys(element.dataset).filter(function (key) {\n      return key.startsWith('bs') && !key.startsWith('bsConfig');\n    });\n\n    var _iterator2 = _createForOfIteratorHelper(bsKeys),\n        _step2;\n\n    try {\n      for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n        var key = _step2.value;\n        var pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      }\n    } catch (err) {\n      _iterator2.e(err);\n    } finally {\n      _iterator2.f();\n    }\n\n    return attributes;\n  },\n  getDataAttribute: function getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(\"data-bs-\".concat(normalizeDataKey(key))));\n  }\n};\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Class definition\n */\n\nvar Config = /*#__PURE__*/function () {\n  function Config() {\n    _classCallCheck(this, Config);\n  }\n\n  _createClass(Config, [{\n    key: \"_getConfig\",\n    value: function _getConfig(config) {\n      config = this._mergeConfigObj(config);\n      config = this._configAfterMerge(config);\n\n      this._typeCheckConfig(config);\n\n      return config;\n    }\n  }, {\n    key: \"_configAfterMerge\",\n    value: function _configAfterMerge(config) {\n      return config;\n    }\n  }, {\n    key: \"_mergeConfigObj\",\n    value: function _mergeConfigObj(config, element) {\n      var jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n      return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, this.constructor.Default), _typeof(jsonConfig) === 'object' ? jsonConfig : {}), isElement(element) ? Manipulator.getDataAttributes(element) : {}), _typeof(config) === 'object' ? config : {});\n    }\n  }, {\n    key: \"_typeCheckConfig\",\n    value: function _typeCheckConfig(config) {\n      var configTypes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.constructor.DefaultType;\n\n      for (var _i6 = 0, _Object$entries4 = Object.entries(configTypes); _i6 < _Object$entries4.length; _i6++) {\n        var _ref12 = _Object$entries4[_i6];\n\n        var _ref11 = _slicedToArray(_ref12, 2);\n\n        var property = _ref11[0];\n        var expectedTypes = _ref11[1];\n        var value = config[property];\n        var valueType = isElement(value) ? 'element' : toType(value);\n\n        if (!new RegExp(expectedTypes).test(valueType)) {\n          throw new TypeError(\"\".concat(this.constructor.NAME.toUpperCase(), \": Option \\\"\").concat(property, \"\\\" provided type \\\"\").concat(valueType, \"\\\" but expected type \\\"\").concat(expectedTypes, \"\\\".\"));\n        }\n      }\n    }\n  }], [{\n    key: \"Default\",\n    get: // Getters\n    function get() {\n      return {};\n    }\n  }, {\n    key: \"DefaultType\",\n    get: function get() {\n      return {};\n    }\n  }, {\n    key: \"NAME\",\n    get: function get() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n  }]);\n\n  return Config;\n}();\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\n\nvar VERSION = '5.3.1';\n/**\n * Class definition\n */\n\nvar BaseComponent = /*#__PURE__*/function (_Config) {\n  _inherits(BaseComponent, _Config);\n\n  var _super = _createSuper(BaseComponent);\n\n  function BaseComponent(element, config) {\n    var _this;\n\n    _classCallCheck(this, BaseComponent);\n\n    _this = _super.call(this);\n    element = getElement(element);\n\n    if (!element) {\n      return _possibleConstructorReturn(_this);\n    }\n\n    _this._element = element;\n    _this._config = _this._getConfig(config);\n    Data.set(_this._element, _this.constructor.DATA_KEY, _assertThisInitialized(_this));\n    return _this;\n  } // Public\n\n\n  _createClass(BaseComponent, [{\n    key: \"dispose\",\n    value: function dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n\n      var _iterator3 = _createForOfIteratorHelper(Object.getOwnPropertyNames(this)),\n          _step3;\n\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var propertyName = _step3.value;\n          this[propertyName] = null;\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n    }\n  }, {\n    key: \"_queueCallback\",\n    value: function _queueCallback(callback, element) {\n      var isAnimated = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      executeAfterTransition(callback, element, isAnimated);\n    }\n  }, {\n    key: \"_getConfig\",\n    value: function _getConfig(config) {\n      config = this._mergeConfigObj(config, this._element);\n      config = this._configAfterMerge(config);\n\n      this._typeCheckConfig(config);\n\n      return config;\n    } // Static\n\n  }], [{\n    key: \"getInstance\",\n    value: function getInstance(element) {\n      return Data.get(getElement(element), this.DATA_KEY);\n    }\n  }, {\n    key: \"getOrCreateInstance\",\n    value: function getOrCreateInstance(element) {\n      var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      return this.getInstance(element) || new this(element, _typeof(config) === 'object' ? config : null);\n    }\n  }, {\n    key: \"VERSION\",\n    get: function get() {\n      return VERSION;\n    }\n  }, {\n    key: \"DATA_KEY\",\n    get: function get() {\n      return \"bs.\".concat(this.NAME);\n    }\n  }, {\n    key: \"EVENT_KEY\",\n    get: function get() {\n      return \".\".concat(this.DATA_KEY);\n    }\n  }, {\n    key: \"eventName\",\n    value: function eventName(name) {\n      return \"\".concat(name).concat(this.EVENT_KEY);\n    }\n  }]);\n\n  return BaseComponent;\n}(Config);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\nvar getSelector = function getSelector(element) {\n  var selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    var hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n      hrefAttribute = \"#\".concat(hrefAttribute.split('#')[1]);\n    }\n\n    selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n  }\n\n  return parseSelector(selector);\n};\n\nvar SelectorEngine = {\n  find: function find(selector) {\n    var _ref13;\n\n    var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.documentElement;\n    return (_ref13 = []).concat.apply(_ref13, _toConsumableArray(Element.prototype.querySelectorAll.call(element, selector)));\n  },\n  findOne: function findOne(selector) {\n    var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.documentElement;\n    return Element.prototype.querySelector.call(element, selector);\n  },\n  children: function children(element, selector) {\n    var _ref14;\n\n    return (_ref14 = []).concat.apply(_ref14, _toConsumableArray(element.children)).filter(function (child) {\n      return child.matches(selector);\n    });\n  },\n  parents: function parents(element, selector) {\n    var parents = [];\n    var ancestor = element.parentNode.closest(selector);\n\n    while (ancestor) {\n      parents.push(ancestor);\n      ancestor = ancestor.parentNode.closest(selector);\n    }\n\n    return parents;\n  },\n  prev: function prev(element, selector) {\n    var previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n  // TODO: this is now unused; remove later along with prev()\n  next: function next(element, selector) {\n    var next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  },\n  focusableChildren: function focusableChildren(element) {\n    var focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(function (selector) {\n      return \"\".concat(selector, \":not([tabindex^=\\\"-\\\"])\");\n    }).join(',');\n    return this.find(focusables, element).filter(function (el) {\n      return !isDisabled(el) && isVisible(el);\n    });\n  },\n  getSelectorFromElement: function getSelectorFromElement(element) {\n    var selector = getSelector(element);\n\n    if (selector) {\n      return SelectorEngine.findOne(selector) ? selector : null;\n    }\n\n    return null;\n  },\n  getElementFromSelector: function getElementFromSelector(element) {\n    var selector = getSelector(element);\n    return selector ? SelectorEngine.findOne(selector) : null;\n  },\n  getMultipleElementsFromSelector: function getMultipleElementsFromSelector(element) {\n    var selector = getSelector(element);\n    return selector ? SelectorEngine.find(selector) : [];\n  }\n};\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar enableDismissTrigger = function enableDismissTrigger(component) {\n  var method = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'hide';\n  var clickEvent = \"click.dismiss\".concat(component.EVENT_KEY);\n  var name = component.NAME;\n  EventHandler.on(document, clickEvent, \"[data-bs-dismiss=\\\"\".concat(name, \"\\\"]\"), function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    var target = SelectorEngine.getElementFromSelector(this) || this.closest(\".\".concat(name));\n    var instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n\n    instance[method]();\n  });\n};\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\n\nvar NAME$f = 'alert';\nvar DATA_KEY$a = 'bs.alert';\nvar EVENT_KEY$b = \".\".concat(DATA_KEY$a);\nvar EVENT_CLOSE = \"close\".concat(EVENT_KEY$b);\nvar EVENT_CLOSED = \"closed\".concat(EVENT_KEY$b);\nvar CLASS_NAME_FADE$5 = 'fade';\nvar CLASS_NAME_SHOW$8 = 'show';\n/**\n * Class definition\n */\n\nvar Alert = /*#__PURE__*/function (_BaseComponent) {\n  _inherits(Alert, _BaseComponent);\n\n  var _super2 = _createSuper(Alert);\n\n  function Alert() {\n    _classCallCheck(this, Alert);\n\n    return _super2.apply(this, arguments);\n  }\n\n  _createClass(Alert, [{\n    key: \"close\",\n    value: // Public\n    function close() {\n      var _this2 = this;\n\n      var closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n      if (closeEvent.defaultPrevented) {\n        return;\n      }\n\n      this._element.classList.remove(CLASS_NAME_SHOW$8);\n\n      var isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n\n      this._queueCallback(function () {\n        return _this2._destroyElement();\n      }, this._element, isAnimated);\n    } // Private\n\n  }, {\n    key: \"_destroyElement\",\n    value: function _destroyElement() {\n      this._element.remove();\n\n      EventHandler.trigger(this._element, EVENT_CLOSED);\n      this.dispose();\n    } // Static\n\n  }], [{\n    key: \"NAME\",\n    get: // Getters\n    function get() {\n      return NAME$f;\n    }\n  }, {\n    key: \"jQueryInterface\",\n    value: function jQueryInterface(config) {\n      return this.each(function () {\n        var data = Alert.getOrCreateInstance(this);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(\"No method named \\\"\".concat(config, \"\\\"\"));\n        }\n\n        data[config](this);\n      });\n    }\n  }]);\n\n  return Alert;\n}(BaseComponent);\n/**\n * Data API implementation\n */\n\n\nenableDismissTrigger(Alert, 'close');\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nvar NAME$e = 'button';\nvar DATA_KEY$9 = 'bs.button';\nvar EVENT_KEY$a = \".\".concat(DATA_KEY$9);\nvar DATA_API_KEY$6 = '.data-api';\nvar CLASS_NAME_ACTIVE$3 = 'active';\nvar SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nvar EVENT_CLICK_DATA_API$6 = \"click\".concat(EVENT_KEY$a).concat(DATA_API_KEY$6);\n/**\n * Class definition\n */\n\nvar Button = /*#__PURE__*/function (_BaseComponent2) {\n  _inherits(Button, _BaseComponent2);\n\n  var _super3 = _createSuper(Button);\n\n  function Button() {\n    _classCallCheck(this, Button);\n\n    return _super3.apply(this, arguments);\n  }\n\n  _createClass(Button, [{\n    key: \"toggle\",\n    value: // Public\n    function toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n  }], [{\n    key: \"NAME\",\n    get: // Getters\n    function get() {\n      return NAME$e;\n    }\n  }, {\n    key: \"jQueryInterface\",\n    value: function jQueryInterface(config) {\n      return this.each(function () {\n        var data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n  }]);\n\n  return Button;\n}(BaseComponent);\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, function (event) {\n  event.preventDefault();\n  var button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  var data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nvar NAME$d = 'swipe';\nvar EVENT_KEY$9 = '.bs.swipe';\nvar EVENT_TOUCHSTART = \"touchstart\".concat(EVENT_KEY$9);\nvar EVENT_TOUCHMOVE = \"touchmove\".concat(EVENT_KEY$9);\nvar EVENT_TOUCHEND = \"touchend\".concat(EVENT_KEY$9);\nvar EVENT_POINTERDOWN = \"pointerdown\".concat(EVENT_KEY$9);\nvar EVENT_POINTERUP = \"pointerup\".concat(EVENT_KEY$9);\nvar POINTER_TYPE_TOUCH = 'touch';\nvar POINTER_TYPE_PEN = 'pen';\nvar CLASS_NAME_POINTER_EVENT = 'pointer-event';\nvar SWIPE_THRESHOLD = 40;\nvar Default$c = {\n  endCallback: null,\n  leftCallback: null,\n  rightCallback: null\n};\nvar DefaultType$c = {\n  endCallback: '(function|null)',\n  leftCallback: '(function|null)',\n  rightCallback: '(function|null)'\n};\n/**\n * Class definition\n */\n\nvar Swipe = /*#__PURE__*/function (_Config2) {\n  _inherits(Swipe, _Config2);\n\n  var _super4 = _createSuper(Swipe);\n\n  function Swipe(element, config) {\n    var _this3;\n\n    _classCallCheck(this, Swipe);\n\n    _this3 = _super4.call(this);\n    _this3._element = element;\n\n    if (!element || !Swipe.isSupported()) {\n      return _possibleConstructorReturn(_this3);\n    }\n\n    _this3._config = _this3._getConfig(config);\n    _this3._deltaX = 0;\n    _this3._supportPointerEvents = Boolean(window.PointerEvent);\n\n    _this3._initEvents();\n\n    return _this3;\n  } // Getters\n\n\n  _createClass(Swipe, [{\n    key: \"dispose\",\n    value: // Public\n    function dispose() {\n      EventHandler.off(this._element, EVENT_KEY$9);\n    } // Private\n\n  }, {\n    key: \"_start\",\n    value: function _start(event) {\n      if (!this._supportPointerEvents) {\n        this._deltaX = event.touches[0].clientX;\n        return;\n      }\n\n      if (this._eventIsPointerPenTouch(event)) {\n        this._deltaX = event.clientX;\n      }\n    }\n  }, {\n    key: \"_end\",\n    value: function _end(event) {\n      if (this._eventIsPointerPenTouch(event)) {\n        this._deltaX = event.clientX - this._deltaX;\n      }\n\n      this._handleSwipe();\n\n      execute(this._config.endCallback);\n    }\n  }, {\n    key: \"_move\",\n    value: function _move(event) {\n      this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n    }\n  }, {\n    key: \"_handleSwipe\",\n    value: function _handleSwipe() {\n      var absDeltaX = Math.abs(this._deltaX);\n\n      if (absDeltaX <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltaX / this._deltaX;\n      this._deltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n    }\n  }, {\n    key: \"_initEvents\",\n    value: function _initEvents() {\n      var _this4 = this;\n\n      if (this._supportPointerEvents) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, function (event) {\n          return _this4._start(event);\n        });\n        EventHandler.on(this._element, EVENT_POINTERUP, function (event) {\n          return _this4._end(event);\n        });\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, function (event) {\n          return _this4._start(event);\n        });\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, function (event) {\n          return _this4._move(event);\n        });\n        EventHandler.on(this._element, EVENT_TOUCHEND, function (event) {\n          return _this4._end(event);\n        });\n      }\n    }\n  }, {\n    key: \"_eventIsPointerPenTouch\",\n    value: function _eventIsPointerPenTouch(event) {\n      return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n    } // Static\n\n  }], [{\n    key: \"Default\",\n    get: function get() {\n      return Default$c;\n    }\n  }, {\n    key: \"DefaultType\",\n    get: function get() {\n      return DefaultType$c;\n    }\n  }, {\n    key: \"NAME\",\n    get: function get() {\n      return NAME$d;\n    }\n  }, {\n    key: \"isSupported\",\n    value: function isSupported() {\n      return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    }\n  }]);\n\n  return Swipe;\n}(Config);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\n\nvar NAME$c = 'carousel';\nvar DATA_KEY$8 = 'bs.carousel';\nvar EVENT_KEY$8 = \".\".concat(DATA_KEY$8);\nvar DATA_API_KEY$5 = '.data-api';\nvar ARROW_LEFT_KEY$1 = 'ArrowLeft';\nvar ARROW_RIGHT_KEY$1 = 'ArrowRight';\nvar TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nvar ORDER_NEXT = 'next';\nvar ORDER_PREV = 'prev';\nvar DIRECTION_LEFT = 'left';\nvar DIRECTION_RIGHT = 'right';\nvar EVENT_SLIDE = \"slide\".concat(EVENT_KEY$8);\nvar EVENT_SLID = \"slid\".concat(EVENT_KEY$8);\nvar EVENT_KEYDOWN$1 = \"keydown\".concat(EVENT_KEY$8);\nvar EVENT_MOUSEENTER$1 = \"mouseenter\".concat(EVENT_KEY$8);\nvar EVENT_MOUSELEAVE$1 = \"mouseleave\".concat(EVENT_KEY$8);\nvar EVENT_DRAG_START = \"dragstart\".concat(EVENT_KEY$8);\nvar EVENT_LOAD_DATA_API$3 = \"load\".concat(EVENT_KEY$8).concat(DATA_API_KEY$5);\nvar EVENT_CLICK_DATA_API$5 = \"click\".concat(EVENT_KEY$8).concat(DATA_API_KEY$5);\nvar CLASS_NAME_CAROUSEL = 'carousel';\nvar CLASS_NAME_ACTIVE$2 = 'active';\nvar CLASS_NAME_SLIDE = 'slide';\nvar CLASS_NAME_END = 'carousel-item-end';\nvar CLASS_NAME_START = 'carousel-item-start';\nvar CLASS_NAME_NEXT = 'carousel-item-next';\nvar CLASS_NAME_PREV = 'carousel-item-prev';\nvar SELECTOR_ACTIVE = '.active';\nvar SELECTOR_ITEM = '.carousel-item';\nvar SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nvar SELECTOR_ITEM_IMG = '.carousel-item img';\nvar SELECTOR_INDICATORS = '.carousel-indicators';\nvar SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nvar SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nvar KEY_TO_DIRECTION = (_KEY_TO_DIRECTION = {}, _defineProperty(_KEY_TO_DIRECTION, ARROW_LEFT_KEY$1, DIRECTION_RIGHT), _defineProperty(_KEY_TO_DIRECTION, ARROW_RIGHT_KEY$1, DIRECTION_LEFT), _KEY_TO_DIRECTION);\nvar Default$b = {\n  interval: 5000,\n  keyboard: true,\n  pause: 'hover',\n  ride: false,\n  touch: true,\n  wrap: true\n};\nvar DefaultType$b = {\n  interval: '(number|boolean)',\n  // TODO:v6 remove boolean support\n  keyboard: 'boolean',\n  pause: '(string|boolean)',\n  ride: '(boolean|string)',\n  touch: 'boolean',\n  wrap: 'boolean'\n};\n/**\n * Class definition\n */\n\nvar Carousel = /*#__PURE__*/function (_BaseComponent3) {\n  _inherits(Carousel, _BaseComponent3);\n\n  var _super5 = _createSuper(Carousel);\n\n  function Carousel(element, config) {\n    var _this5;\n\n    _classCallCheck(this, Carousel);\n\n    _this5 = _super5.call(this, element, config);\n    _this5._interval = null;\n    _this5._activeElement = null;\n    _this5._isSliding = false;\n    _this5.touchTimeout = null;\n    _this5._swipeHelper = null;\n    _this5._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, _this5._element);\n\n    _this5._addEventListeners();\n\n    if (_this5._config.ride === CLASS_NAME_CAROUSEL) {\n      _this5.cycle();\n    }\n\n    return _this5;\n  } // Getters\n\n\n  _createClass(Carousel, [{\n    key: \"next\",\n    value: // Public\n    function next() {\n      this._slide(ORDER_NEXT);\n    }\n  }, {\n    key: \"nextWhenVisible\",\n    value: function nextWhenVisible() {\n      // FIXME TODO use `document.visibilityState`\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n  }, {\n    key: \"prev\",\n    value: function prev() {\n      this._slide(ORDER_PREV);\n    }\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      if (this._isSliding) {\n        triggerTransitionEnd(this._element);\n      }\n\n      this._clearInterval();\n    }\n  }, {\n    key: \"cycle\",\n    value: function cycle() {\n      var _this6 = this;\n\n      this._clearInterval();\n\n      this._updateInterval();\n\n      this._interval = setInterval(function () {\n        return _this6.nextWhenVisible();\n      }, this._config.interval);\n    }\n  }, {\n    key: \"_maybeEnableCycle\",\n    value: function _maybeEnableCycle() {\n      var _this7 = this;\n\n      if (!this._config.ride) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, function () {\n          return _this7.cycle();\n        });\n        return;\n      }\n\n      this.cycle();\n    }\n  }, {\n    key: \"to\",\n    value: function to(index) {\n      var _this8 = this;\n\n      var items = this._getItems();\n\n      if (index > items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, function () {\n          return _this8.to(index);\n        });\n        return;\n      }\n\n      var activeIndex = this._getItemIndex(this._getActive());\n\n      if (activeIndex === index) {\n        return;\n      }\n\n      var order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, items[index]);\n    }\n  }, {\n    key: \"dispose\",\n    value: function dispose() {\n      if (this._swipeHelper) {\n        this._swipeHelper.dispose();\n      }\n\n      _get(_getPrototypeOf(Carousel.prototype), \"dispose\", this).call(this);\n    } // Private\n\n  }, {\n    key: \"_configAfterMerge\",\n    value: function _configAfterMerge(config) {\n      config.defaultInterval = config.interval;\n      return config;\n    }\n  }, {\n    key: \"_addEventListeners\",\n    value: function _addEventListeners() {\n      var _this9 = this;\n\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN$1, function (event) {\n          return _this9._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER$1, function () {\n          return _this9.pause();\n        });\n        EventHandler.on(this._element, EVENT_MOUSELEAVE$1, function () {\n          return _this9._maybeEnableCycle();\n        });\n      }\n\n      if (this._config.touch && Swipe.isSupported()) {\n        this._addTouchEventListeners();\n      }\n    }\n  }, {\n    key: \"_addTouchEventListeners\",\n    value: function _addTouchEventListeners() {\n      var _this10 = this;\n\n      var _iterator4 = _createForOfIteratorHelper(SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)),\n          _step4;\n\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var img = _step4.value;\n          EventHandler.on(img, EVENT_DRAG_START, function (event) {\n            return event.preventDefault();\n          });\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n\n      var endCallBack = function endCallBack() {\n        if (_this10._config.pause !== 'hover') {\n          return;\n        } // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n\n\n        _this10.pause();\n\n        if (_this10.touchTimeout) {\n          clearTimeout(_this10.touchTimeout);\n        }\n\n        _this10.touchTimeout = setTimeout(function () {\n          return _this10._maybeEnableCycle();\n        }, TOUCHEVENT_COMPAT_WAIT + _this10._config.interval);\n      };\n\n      var swipeConfig = {\n        leftCallback: function leftCallback() {\n          return _this10._slide(_this10._directionToOrder(DIRECTION_LEFT));\n        },\n        rightCallback: function rightCallback() {\n          return _this10._slide(_this10._directionToOrder(DIRECTION_RIGHT));\n        },\n        endCallback: endCallBack\n      };\n      this._swipeHelper = new Swipe(this._element, swipeConfig);\n    }\n  }, {\n    key: \"_keydown\",\n    value: function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      var direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(this._directionToOrder(direction));\n      }\n    }\n  }, {\n    key: \"_getItemIndex\",\n    value: function _getItemIndex(element) {\n      return this._getItems().indexOf(element);\n    }\n  }, {\n    key: \"_setActiveIndicatorElement\",\n    value: function _setActiveIndicatorElement(index) {\n      if (!this._indicatorsElement) {\n        return;\n      }\n\n      var activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      var newActiveIndicator = SelectorEngine.findOne(\"[data-bs-slide-to=\\\"\".concat(index, \"\\\"]\"), this._indicatorsElement);\n\n      if (newActiveIndicator) {\n        newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n        newActiveIndicator.setAttribute('aria-current', 'true');\n      }\n    }\n  }, {\n    key: \"_updateInterval\",\n    value: function _updateInterval() {\n      var element = this._activeElement || this._getActive();\n\n      if (!element) {\n        return;\n      }\n\n      var elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n      this._config.interval = elementInterval || this._config.defaultInterval;\n    }\n  }, {\n    key: \"_slide\",\n    value: function _slide(order) {\n      var _this11 = this;\n\n      var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n      if (this._isSliding) {\n        return;\n      }\n\n      var activeElement = this._getActive();\n\n      var isNext = order === ORDER_NEXT;\n      var nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n\n      if (nextElement === activeElement) {\n        return;\n      }\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var triggerEvent = function triggerEvent(eventName) {\n        return EventHandler.trigger(_this11._element, eventName, {\n          relatedTarget: nextElement,\n          direction: _this11._orderToDirection(order),\n          from: _this11._getItemIndex(activeElement),\n          to: nextElementIndex\n        });\n      };\n\n      var slideEvent = triggerEvent(EVENT_SLIDE);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        // TODO: change tests that use empty divs to avoid this check\n        return;\n      }\n\n      var isCycling = Boolean(this._interval);\n      this.pause();\n      this._isSliding = true;\n\n      this._setActiveIndicatorElement(nextElementIndex);\n\n      this._activeElement = nextElement;\n      var directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      var orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      var completeCallBack = function completeCallBack() {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        _this11._isSliding = false;\n        triggerEvent(EVENT_SLID);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n  }, {\n    key: \"_isAnimated\",\n    value: function _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_SLIDE);\n    }\n  }, {\n    key: \"_getActive\",\n    value: function _getActive() {\n      return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n    }\n  }, {\n    key: \"_getItems\",\n    value: function _getItems() {\n      return SelectorEngine.find(SELECTOR_ITEM, this._element);\n    }\n  }, {\n    key: \"_clearInterval\",\n    value: function _clearInterval() {\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n    }\n  }, {\n    key: \"_directionToOrder\",\n    value: function _directionToOrder(direction) {\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n  }, {\n    key: \"_orderToDirection\",\n    value: function _orderToDirection(order) {\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n  }], [{\n    key: \"Default\",\n    get: function get() {\n      return Default$b;\n    }\n  }, {\n    key: \"DefaultType\",\n    get: function get() {\n      return DefaultType$b;\n    }\n  }, {\n    key: \"NAME\",\n    get: function get() {\n      return NAME$c;\n    }\n  }, {\n    key: \"jQueryInterface\",\n    value: function jQueryInterface(config) {\n      return this.each(function () {\n        var data = Carousel.getOrCreateInstance(this, config);\n\n        if (typeof config === 'number') {\n          data.to(config);\n          return;\n        }\n\n        if (typeof config === 'string') {\n          if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n            throw new TypeError(\"No method named \\\"\".concat(config, \"\\\"\"));\n          }\n\n          data[config]();\n        }\n      });\n    }\n  }]);\n\n  return Carousel;\n}(BaseComponent);\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n  var target = SelectorEngine.getElementFromSelector(this);\n\n  if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n    return;\n  }\n\n  event.preventDefault();\n  var carousel = Carousel.getOrCreateInstance(target);\n  var slideIndex = this.getAttribute('data-bs-slide-to');\n\n  if (slideIndex) {\n    carousel.to(slideIndex);\n\n    carousel._maybeEnableCycle();\n\n    return;\n  }\n\n  if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n    carousel.next();\n\n    carousel._maybeEnableCycle();\n\n    return;\n  }\n\n  carousel.prev();\n\n  carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, function () {\n  var carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  var _iterator5 = _createForOfIteratorHelper(carousels),\n      _step5;\n\n  try {\n    for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n      var carousel = _step5.value;\n      Carousel.getOrCreateInstance(carousel);\n    }\n  } catch (err) {\n    _iterator5.e(err);\n  } finally {\n    _iterator5.f();\n  }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nvar NAME$b = 'collapse';\nvar DATA_KEY$7 = 'bs.collapse';\nvar EVENT_KEY$7 = \".\".concat(DATA_KEY$7);\nvar DATA_API_KEY$4 = '.data-api';\nvar EVENT_SHOW$6 = \"show\".concat(EVENT_KEY$7);\nvar EVENT_SHOWN$6 = \"shown\".concat(EVENT_KEY$7);\nvar EVENT_HIDE$6 = \"hide\".concat(EVENT_KEY$7);\nvar EVENT_HIDDEN$6 = \"hidden\".concat(EVENT_KEY$7);\nvar EVENT_CLICK_DATA_API$4 = \"click\".concat(EVENT_KEY$7).concat(DATA_API_KEY$4);\nvar CLASS_NAME_SHOW$7 = 'show';\nvar CLASS_NAME_COLLAPSE = 'collapse';\nvar CLASS_NAME_COLLAPSING = 'collapsing';\nvar CLASS_NAME_COLLAPSED = 'collapsed';\nvar CLASS_NAME_DEEPER_CHILDREN = \":scope .\".concat(CLASS_NAME_COLLAPSE, \" .\").concat(CLASS_NAME_COLLAPSE);\nvar CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nvar WIDTH = 'width';\nvar HEIGHT = 'height';\nvar SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nvar SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nvar Default$a = {\n  parent: null,\n  toggle: true\n};\nvar DefaultType$a = {\n  parent: '(null|element)',\n  toggle: 'boolean'\n};\n/**\n * Class definition\n */\n\nvar Collapse = /*#__PURE__*/function (_BaseComponent4) {\n  _inherits(Collapse, _BaseComponent4);\n\n  var _super6 = _createSuper(Collapse);\n\n  function Collapse(element, config) {\n    var _this12;\n\n    _classCallCheck(this, Collapse);\n\n    _this12 = _super6.call(this, element, config);\n    _this12._isTransitioning = false;\n    _this12._triggerArray = [];\n    var toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    var _iterator6 = _createForOfIteratorHelper(toggleList),\n        _step6;\n\n    try {\n      for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n        var elem = _step6.value;\n        var selector = SelectorEngine.getSelectorFromElement(elem);\n        var filterElement = SelectorEngine.find(selector).filter(function (foundElement) {\n          return foundElement === _this12._element;\n        });\n\n        if (selector !== null && filterElement.length) {\n          _this12._triggerArray.push(elem);\n        }\n      }\n    } catch (err) {\n      _iterator6.e(err);\n    } finally {\n      _iterator6.f();\n    }\n\n    _this12._initializeChildren();\n\n    if (!_this12._config.parent) {\n      _this12._addAriaAndCollapsedClass(_this12._triggerArray, _this12._isShown());\n    }\n\n    if (_this12._config.toggle) {\n      _this12.toggle();\n    }\n\n    return _this12;\n  } // Getters\n\n\n  _createClass(Collapse, [{\n    key: \"toggle\",\n    value: // Public\n    function toggle() {\n      if (this._isShown()) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this13 = this;\n\n      if (this._isTransitioning || this._isShown()) {\n        return;\n      }\n\n      var activeChildren = []; // find active children\n\n      if (this._config.parent) {\n        activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(function (element) {\n          return element !== _this13._element;\n        }).map(function (element) {\n          return Collapse.getOrCreateInstance(element, {\n            toggle: false\n          });\n        });\n      }\n\n      if (activeChildren.length && activeChildren[0]._isTransitioning) {\n        return;\n      }\n\n      var startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      var _iterator7 = _createForOfIteratorHelper(activeChildren),\n          _step7;\n\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var activeInstance = _step7.value;\n          activeInstance.hide();\n        }\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      this._addAriaAndCollapsedClass(this._triggerArray, true);\n\n      this._isTransitioning = true;\n\n      var complete = function complete() {\n        _this13._isTransitioning = false;\n\n        _this13._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        _this13._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n        _this13._element.style[dimension] = '';\n        EventHandler.trigger(_this13._element, EVENT_SHOWN$6);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\".concat(capitalizedDimension);\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = \"\".concat(this._element[scrollSize], \"px\");\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      var _this14 = this;\n\n      if (this._isTransitioning || !this._isShown()) {\n        return;\n      }\n\n      var startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = \"\".concat(this._element.getBoundingClientRect()[dimension], \"px\");\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n      var _iterator8 = _createForOfIteratorHelper(this._triggerArray),\n          _step8;\n\n      try {\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n          var trigger = _step8.value;\n          var element = SelectorEngine.getElementFromSelector(trigger);\n\n          if (element && !this._isShown(element)) {\n            this._addAriaAndCollapsedClass([trigger], false);\n          }\n        }\n      } catch (err) {\n        _iterator8.e(err);\n      } finally {\n        _iterator8.f();\n      }\n\n      this._isTransitioning = true;\n\n      var complete = function complete() {\n        _this14._isTransitioning = false;\n\n        _this14._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        _this14._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(_this14._element, EVENT_HIDDEN$6);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n  }, {\n    key: \"_isShown\",\n    value: function _isShown() {\n      var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._element;\n      return element.classList.contains(CLASS_NAME_SHOW$7);\n    } // Private\n\n  }, {\n    key: \"_configAfterMerge\",\n    value: function _configAfterMerge(config) {\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      config.parent = getElement(config.parent);\n      return config;\n    }\n  }, {\n    key: \"_getDimension\",\n    value: function _getDimension() {\n      return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n    }\n  }, {\n    key: \"_initializeChildren\",\n    value: function _initializeChildren() {\n      if (!this._config.parent) {\n        return;\n      }\n\n      var children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n\n      var _iterator9 = _createForOfIteratorHelper(children),\n          _step9;\n\n      try {\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n          var element = _step9.value;\n          var selected = SelectorEngine.getElementFromSelector(element);\n\n          if (selected) {\n            this._addAriaAndCollapsedClass([element], this._isShown(selected));\n          }\n        }\n      } catch (err) {\n        _iterator9.e(err);\n      } finally {\n        _iterator9.f();\n      }\n    }\n  }, {\n    key: \"_getFirstLevelChildren\",\n    value: function _getFirstLevelChildren(selector) {\n      var children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth\n\n      return SelectorEngine.find(selector, this._config.parent).filter(function (element) {\n        return !children.includes(element);\n      });\n    }\n  }, {\n    key: \"_addAriaAndCollapsedClass\",\n    value: function _addAriaAndCollapsedClass(triggerArray, isOpen) {\n      if (!triggerArray.length) {\n        return;\n      }\n\n      var _iterator10 = _createForOfIteratorHelper(triggerArray),\n          _step10;\n\n      try {\n        for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n          var element = _step10.value;\n          element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n          element.setAttribute('aria-expanded', isOpen);\n        }\n      } catch (err) {\n        _iterator10.e(err);\n      } finally {\n        _iterator10.f();\n      }\n    } // Static\n\n  }], [{\n    key: \"Default\",\n    get: function get() {\n      return Default$a;\n    }\n  }, {\n    key: \"DefaultType\",\n    get: function get() {\n      return DefaultType$a;\n    }\n  }, {\n    key: \"NAME\",\n    get: function get() {\n      return NAME$b;\n    }\n  }, {\n    key: \"jQueryInterface\",\n    value: function jQueryInterface(config) {\n      var _config = {};\n\n      if (typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      return this.each(function () {\n        var data = Collapse.getOrCreateInstance(this, _config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\".concat(config, \"\\\"\"));\n          }\n\n          data[config]();\n        }\n      });\n    }\n  }]);\n\n  return Collapse;\n}(BaseComponent);\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  var _iterator11 = _createForOfIteratorHelper(SelectorEngine.getMultipleElementsFromSelector(this)),\n      _step11;\n\n  try {\n    for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n      var element = _step11.value;\n      Collapse.getOrCreateInstance(element, {\n        toggle: false\n      }).toggle();\n    }\n  } catch (err) {\n    _iterator11.e(err);\n  } finally {\n    _iterator11.f();\n  }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nvar NAME$a = 'dropdown';\nvar DATA_KEY$6 = 'bs.dropdown';\nvar EVENT_KEY$6 = \".\".concat(DATA_KEY$6);\nvar DATA_API_KEY$3 = '.data-api';\nvar ESCAPE_KEY$2 = 'Escape';\nvar TAB_KEY$1 = 'Tab';\nvar ARROW_UP_KEY$1 = 'ArrowUp';\nvar ARROW_DOWN_KEY$1 = 'ArrowDown';\nvar RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nvar EVENT_HIDE$5 = \"hide\".concat(EVENT_KEY$6);\nvar EVENT_HIDDEN$5 = \"hidden\".concat(EVENT_KEY$6);\nvar EVENT_SHOW$5 = \"show\".concat(EVENT_KEY$6);\nvar EVENT_SHOWN$5 = \"shown\".concat(EVENT_KEY$6);\nvar EVENT_CLICK_DATA_API$3 = \"click\".concat(EVENT_KEY$6).concat(DATA_API_KEY$3);\nvar EVENT_KEYDOWN_DATA_API = \"keydown\".concat(EVENT_KEY$6).concat(DATA_API_KEY$3);\nvar EVENT_KEYUP_DATA_API = \"keyup\".concat(EVENT_KEY$6).concat(DATA_API_KEY$3);\nvar CLASS_NAME_SHOW$6 = 'show';\nvar CLASS_NAME_DROPUP = 'dropup';\nvar CLASS_NAME_DROPEND = 'dropend';\nvar CLASS_NAME_DROPSTART = 'dropstart';\nvar CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nvar CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nvar SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nvar SELECTOR_DATA_TOGGLE_SHOWN = \"\".concat(SELECTOR_DATA_TOGGLE$3, \".\").concat(CLASS_NAME_SHOW$6);\nvar SELECTOR_MENU = '.dropdown-menu';\nvar SELECTOR_NAVBAR = '.navbar';\nvar SELECTOR_NAVBAR_NAV = '.navbar-nav';\nvar SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nvar PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nvar PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nvar PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nvar PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nvar PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nvar PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nvar PLACEMENT_TOPCENTER = 'top';\nvar PLACEMENT_BOTTOMCENTER = 'bottom';\nvar Default$9 = {\n  autoClose: true,\n  boundary: 'clippingParents',\n  display: 'dynamic',\n  offset: [0, 2],\n  popperConfig: null,\n  reference: 'toggle'\n};\nvar DefaultType$9 = {\n  autoClose: '(boolean|string)',\n  boundary: '(string|element)',\n  display: 'string',\n  offset: '(array|string|function)',\n  popperConfig: '(null|object|function)',\n  reference: '(string|element|object)'\n};\n/**\n * Class definition\n */\n\nvar Dropdown = /*#__PURE__*/function (_BaseComponent5) {\n  _inherits(Dropdown, _BaseComponent5);\n\n  var _super7 = _createSuper(Dropdown);\n\n  function Dropdown(element, config) {\n    var _this15;\n\n    _classCallCheck(this, Dropdown);\n\n    _this15 = _super7.call(this, element, config);\n    _this15._popper = null;\n    _this15._parent = _this15._element.parentNode; // dropdown wrapper\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n\n    _this15._menu = SelectorEngine.next(_this15._element, SELECTOR_MENU)[0] || SelectorEngine.prev(_this15._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, _this15._parent);\n    _this15._inNavbar = _this15._detectNavbar();\n    return _this15;\n  } // Getters\n\n\n  _createClass(Dropdown, [{\n    key: \"toggle\",\n    value: // Public\n    function toggle() {\n      return this._isShown() ? this.hide() : this.show();\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      if (isDisabled(this._element) || this._isShown()) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._createPopper(); // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n        var _ref15;\n\n        var _iterator12 = _createForOfIteratorHelper((_ref15 = []).concat.apply(_ref15, _toConsumableArray(document.body.children))),\n            _step12;\n\n        try {\n          for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n            var element = _step12.value;\n            EventHandler.on(element, 'mouseover', noop);\n          }\n        } catch (err) {\n          _iterator12.e(err);\n        } finally {\n          _iterator12.f();\n        }\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.add(CLASS_NAME_SHOW$6);\n\n      this._element.classList.add(CLASS_NAME_SHOW$6);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      if (isDisabled(this._element) || !this._isShown()) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n  }, {\n    key: \"dispose\",\n    value: function dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      _get(_getPrototypeOf(Dropdown.prototype), \"dispose\", this).call(this);\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n  }, {\n    key: \"_completeHide\",\n    value: function _completeHide(relatedTarget) {\n      var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        var _ref16;\n\n        var _iterator13 = _createForOfIteratorHelper((_ref16 = []).concat.apply(_ref16, _toConsumableArray(document.body.children))),\n            _step13;\n\n        try {\n          for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n            var element = _step13.value;\n            EventHandler.off(element, 'mouseover', noop);\n          }\n        } catch (err) {\n          _iterator13.e(err);\n        } finally {\n          _iterator13.f();\n        }\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$6);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$6);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n    }\n  }, {\n    key: \"_getConfig\",\n    value: function _getConfig(config) {\n      config = _get(_getPrototypeOf(Dropdown.prototype), \"_getConfig\", this).call(this, config);\n\n      if (_typeof(config.reference) === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(\"\".concat(NAME$a.toUpperCase(), \": Option \\\"reference\\\" provided type \\\"object\\\" without a required \\\"getBoundingClientRect\\\" method.\"));\n      }\n\n      return config;\n    }\n  }, {\n    key: \"_createPopper\",\n    value: function _createPopper() {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      var referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = this._parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (_typeof(this._config.reference) === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      var popperConfig = this._getPopperConfig();\n\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n    }\n  }, {\n    key: \"_isShown\",\n    value: function _isShown() {\n      return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n    }\n  }, {\n    key: \"_getPlacement\",\n    value: function _getPlacement() {\n      var parentDropdown = this._parent;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n        return PLACEMENT_TOPCENTER;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n        return PLACEMENT_BOTTOMCENTER;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      var isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n  }, {\n    key: \"_detectNavbar\",\n    value: function _detectNavbar() {\n      return this._element.closest(SELECTOR_NAVBAR) !== null;\n    }\n  }, {\n    key: \"_getOffset\",\n    value: function _getOffset() {\n      var _this16 = this;\n\n      var offset = this._config.offset;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(function (value) {\n          return Number.parseInt(value, 10);\n        });\n      }\n\n      if (typeof offset === 'function') {\n        return function (popperData) {\n          return offset(popperData, _this16._element);\n        };\n      }\n\n      return offset;\n    }\n  }, {\n    key: \"_getPopperConfig\",\n    value: function _getPopperConfig() {\n      var defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display or Dropdown is in Navbar\n\n      if (this._inNavbar || this._config.display === 'static') {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return _objectSpread(_objectSpread({}, defaultBsPopperConfig), execute(this._config.popperConfig, [defaultBsPopperConfig]));\n    }\n  }, {\n    key: \"_selectMenuItem\",\n    value: function _selectMenuItem(_ref17) {\n      var key = _ref17.key,\n          target = _ref17.target;\n      var items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(function (element) {\n        return isVisible(element);\n      });\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n    } // Static\n\n  }], [{\n    key: \"Default\",\n    get: function get() {\n      return Default$9;\n    }\n  }, {\n    key: \"DefaultType\",\n    get: function get() {\n      return DefaultType$9;\n    }\n  }, {\n    key: \"NAME\",\n    get: function get() {\n      return NAME$a;\n    }\n  }, {\n    key: \"jQueryInterface\",\n    value: function jQueryInterface(config) {\n      return this.each(function () {\n        var data = Dropdown.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(\"No method named \\\"\".concat(config, \"\\\"\"));\n        }\n\n        data[config]();\n      });\n    }\n  }, {\n    key: \"clearMenus\",\n    value: function clearMenus(event) {\n      if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n        return;\n      }\n\n      var openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n\n      var _iterator14 = _createForOfIteratorHelper(openToggles),\n          _step14;\n\n      try {\n        for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n          var toggle = _step14.value;\n          var context = Dropdown.getInstance(toggle);\n\n          if (!context || context._config.autoClose === false) {\n            continue;\n          }\n\n          var composedPath = event.composedPath();\n          var isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          var relatedTarget = {\n            relatedTarget: context._element\n          };\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n\n          context._completeHide(relatedTarget);\n        }\n      } catch (err) {\n        _iterator14.e(err);\n      } finally {\n        _iterator14.f();\n      }\n    }\n  }, {\n    key: \"dataApiKeydownHandler\",\n    value: function dataApiKeydownHandler(event) {\n      // If not an UP | DOWN | ESCAPE key => not a dropdown command\n      // If input/textarea && if key is other than ESCAPE => not a dropdown command\n      var isInput = /input|textarea/i.test(event.target.tagName);\n      var isEscapeEvent = event.key === ESCAPE_KEY$2;\n      var isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n\n      if (!isUpOrDownEvent && !isEscapeEvent) {\n        return;\n      }\n\n      if (isInput && !isEscapeEvent) {\n        return;\n      }\n\n      event.preventDefault(); // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n\n      var getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n      var instance = Dropdown.getOrCreateInstance(getToggleButton);\n\n      if (isUpOrDownEvent) {\n        event.stopPropagation();\n        instance.show();\n\n        instance._selectMenuItem(event);\n\n        return;\n      }\n\n      if (instance._isShown()) {\n        // else is escape and we check if it is shown\n        event.stopPropagation();\n        instance.hide();\n        getToggleButton.focus();\n      }\n    }\n  }]);\n\n  return Dropdown;\n}(BaseComponent);\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.getOrCreateInstance(this).toggle();\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nvar NAME$9 = 'backdrop';\nvar CLASS_NAME_FADE$4 = 'fade';\nvar CLASS_NAME_SHOW$5 = 'show';\nvar EVENT_MOUSEDOWN = \"mousedown.bs.\".concat(NAME$9);\nvar Default$8 = {\n  className: 'modal-backdrop',\n  clickCallback: null,\n  isAnimated: false,\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  rootElement: 'body' // give the choice to place backdrop under different elements\n\n};\nvar DefaultType$8 = {\n  className: 'string',\n  clickCallback: '(function|null)',\n  isAnimated: 'boolean',\n  isVisible: 'boolean',\n  rootElement: '(element|string)'\n};\n/**\n * Class definition\n */\n\nvar Backdrop = /*#__PURE__*/function (_Config3) {\n  _inherits(Backdrop, _Config3);\n\n  var _super8 = _createSuper(Backdrop);\n\n  function Backdrop(config) {\n    var _this17;\n\n    _classCallCheck(this, Backdrop);\n\n    _this17 = _super8.call(this);\n    _this17._config = _this17._getConfig(config);\n    _this17._isAppended = false;\n    _this17._element = null;\n    return _this17;\n  } // Getters\n\n\n  _createClass(Backdrop, [{\n    key: \"show\",\n    value: // Public\n    function show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      var element = this._getElement();\n\n      if (this._config.isAnimated) {\n        reflow(element);\n      }\n\n      element.classList.add(CLASS_NAME_SHOW$5);\n\n      this._emulateAnimation(function () {\n        execute(callback);\n      });\n    }\n  }, {\n    key: \"hide\",\n    value: function hide(callback) {\n      var _this18 = this;\n\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n\n      this._emulateAnimation(function () {\n        _this18.dispose();\n\n        execute(callback);\n      });\n    }\n  }, {\n    key: \"dispose\",\n    value: function dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    } // Private\n\n  }, {\n    key: \"_getElement\",\n    value: function _getElement() {\n      if (!this._element) {\n        var backdrop = document.createElement('div');\n        backdrop.className = this._config.className;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$4);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n  }, {\n    key: \"_configAfterMerge\",\n    value: function _configAfterMerge(config) {\n      // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n      config.rootElement = getElement(config.rootElement);\n      return config;\n    }\n  }, {\n    key: \"_append\",\n    value: function _append() {\n      var _this19 = this;\n\n      if (this._isAppended) {\n        return;\n      }\n\n      var element = this._getElement();\n\n      this._config.rootElement.append(element);\n\n      EventHandler.on(element, EVENT_MOUSEDOWN, function () {\n        execute(_this19._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n  }, {\n    key: \"_emulateAnimation\",\n    value: function _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n  }], [{\n    key: \"Default\",\n    get: function get() {\n      return Default$8;\n    }\n  }, {\n    key: \"DefaultType\",\n    get: function get() {\n      return DefaultType$8;\n    }\n  }, {\n    key: \"NAME\",\n    get: function get() {\n      return NAME$9;\n    }\n  }]);\n\n  return Backdrop;\n}(Config);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\n\nvar NAME$8 = 'focustrap';\nvar DATA_KEY$5 = 'bs.focustrap';\nvar EVENT_KEY$5 = \".\".concat(DATA_KEY$5);\nvar EVENT_FOCUSIN$2 = \"focusin\".concat(EVENT_KEY$5);\nvar EVENT_KEYDOWN_TAB = \"keydown.tab\".concat(EVENT_KEY$5);\nvar TAB_KEY = 'Tab';\nvar TAB_NAV_FORWARD = 'forward';\nvar TAB_NAV_BACKWARD = 'backward';\nvar Default$7 = {\n  autofocus: true,\n  trapElement: null // The element to trap focus inside of\n\n};\nvar DefaultType$7 = {\n  autofocus: 'boolean',\n  trapElement: 'element'\n};\n/**\n * Class definition\n */\n\nvar FocusTrap = /*#__PURE__*/function (_Config4) {\n  _inherits(FocusTrap, _Config4);\n\n  var _super9 = _createSuper(FocusTrap);\n\n  function FocusTrap(config) {\n    var _this20;\n\n    _classCallCheck(this, FocusTrap);\n\n    _this20 = _super9.call(this);\n    _this20._config = _this20._getConfig(config);\n    _this20._isActive = false;\n    _this20._lastTabNavDirection = null;\n    return _this20;\n  } // Getters\n\n\n  _createClass(FocusTrap, [{\n    key: \"activate\",\n    value: // Public\n    function activate() {\n      var _this21 = this;\n\n      if (this._isActive) {\n        return;\n      }\n\n      if (this._config.autofocus) {\n        this._config.trapElement.focus();\n      }\n\n      EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, function (event) {\n        return _this21._handleFocusin(event);\n      });\n      EventHandler.on(document, EVENT_KEYDOWN_TAB, function (event) {\n        return _this21._handleKeydown(event);\n      });\n      this._isActive = true;\n    }\n  }, {\n    key: \"deactivate\",\n    value: function deactivate() {\n      if (!this._isActive) {\n        return;\n      }\n\n      this._isActive = false;\n      EventHandler.off(document, EVENT_KEY$5);\n    } // Private\n\n  }, {\n    key: \"_handleFocusin\",\n    value: function _handleFocusin(event) {\n      var trapElement = this._config.trapElement;\n\n      if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n        return;\n      }\n\n      var elements = SelectorEngine.focusableChildren(trapElement);\n\n      if (elements.length === 0) {\n        trapElement.focus();\n      } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n        elements[elements.length - 1].focus();\n      } else {\n        elements[0].focus();\n      }\n    }\n  }, {\n    key: \"_handleKeydown\",\n    value: function _handleKeydown(event) {\n      if (event.key !== TAB_KEY) {\n        return;\n      }\n\n      this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n    }\n  }], [{\n    key: \"Default\",\n    get: function get() {\n      return Default$7;\n    }\n  }, {\n    key: \"DefaultType\",\n    get: function get() {\n      return DefaultType$7;\n    }\n  }, {\n    key: \"NAME\",\n    get: function get() {\n      return NAME$8;\n    }\n  }]);\n\n  return FocusTrap;\n}(Config);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\n\nvar SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nvar SELECTOR_STICKY_CONTENT = '.sticky-top';\nvar PROPERTY_PADDING = 'padding-right';\nvar PROPERTY_MARGIN = 'margin-right';\n/**\n * Class definition\n */\n\nvar ScrollBarHelper = /*#__PURE__*/function () {\n  function ScrollBarHelper() {\n    _classCallCheck(this, ScrollBarHelper);\n\n    this._element = document.body;\n  } // Public\n\n\n  _createClass(ScrollBarHelper, [{\n    key: \"getWidth\",\n    value: function getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      var documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      var width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, PROPERTY_PADDING, function (calculatedValue) {\n        return calculatedValue + width;\n      }); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, function (calculatedValue) {\n        return calculatedValue + width;\n      });\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, function (calculatedValue) {\n        return calculatedValue - width;\n      });\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, PROPERTY_PADDING);\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n    }\n  }, {\n    key: \"isOverflowing\",\n    value: function isOverflowing() {\n      return this.getWidth() > 0;\n    } // Private\n\n  }, {\n    key: \"_disableOverFlow\",\n    value: function _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n  }, {\n    key: \"_setElementAttributes\",\n    value: function _setElementAttributes(selector, styleProperty, callback) {\n      var _this22 = this;\n\n      var scrollbarWidth = this.getWidth();\n\n      var manipulationCallBack = function manipulationCallBack(element) {\n        if (element !== _this22._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        _this22._saveInitialAttribute(element, styleProperty);\n\n        var calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n        element.style.setProperty(styleProperty, \"\".concat(callback(Number.parseFloat(calculatedValue)), \"px\"));\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n  }, {\n    key: \"_saveInitialAttribute\",\n    value: function _saveInitialAttribute(element, styleProperty) {\n      var actualValue = element.style.getPropertyValue(styleProperty);\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProperty, actualValue);\n      }\n    }\n  }, {\n    key: \"_resetElementAttributes\",\n    value: function _resetElementAttributes(selector, styleProperty) {\n      var manipulationCallBack = function manipulationCallBack(element) {\n        var value = Manipulator.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero\n\n        if (value === null) {\n          element.style.removeProperty(styleProperty);\n          return;\n        }\n\n        Manipulator.removeDataAttribute(element, styleProperty);\n        element.style.setProperty(styleProperty, value);\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n  }, {\n    key: \"_applyManipulationCallback\",\n    value: function _applyManipulationCallback(selector, callBack) {\n      if (isElement(selector)) {\n        callBack(selector);\n        return;\n      }\n\n      var _iterator15 = _createForOfIteratorHelper(SelectorEngine.find(selector, this._element)),\n          _step15;\n\n      try {\n        for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n          var sel = _step15.value;\n          callBack(sel);\n        }\n      } catch (err) {\n        _iterator15.e(err);\n      } finally {\n        _iterator15.f();\n      }\n    }\n  }]);\n\n  return ScrollBarHelper;\n}();\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\n\nvar NAME$7 = 'modal';\nvar DATA_KEY$4 = 'bs.modal';\nvar EVENT_KEY$4 = \".\".concat(DATA_KEY$4);\nvar DATA_API_KEY$2 = '.data-api';\nvar ESCAPE_KEY$1 = 'Escape';\nvar EVENT_HIDE$4 = \"hide\".concat(EVENT_KEY$4);\nvar EVENT_HIDE_PREVENTED$1 = \"hidePrevented\".concat(EVENT_KEY$4);\nvar EVENT_HIDDEN$4 = \"hidden\".concat(EVENT_KEY$4);\nvar EVENT_SHOW$4 = \"show\".concat(EVENT_KEY$4);\nvar EVENT_SHOWN$4 = \"shown\".concat(EVENT_KEY$4);\nvar EVENT_RESIZE$1 = \"resize\".concat(EVENT_KEY$4);\nvar EVENT_CLICK_DISMISS = \"click.dismiss\".concat(EVENT_KEY$4);\nvar EVENT_MOUSEDOWN_DISMISS = \"mousedown.dismiss\".concat(EVENT_KEY$4);\nvar EVENT_KEYDOWN_DISMISS$1 = \"keydown.dismiss\".concat(EVENT_KEY$4);\nvar EVENT_CLICK_DATA_API$2 = \"click\".concat(EVENT_KEY$4).concat(DATA_API_KEY$2);\nvar CLASS_NAME_OPEN = 'modal-open';\nvar CLASS_NAME_FADE$3 = 'fade';\nvar CLASS_NAME_SHOW$4 = 'show';\nvar CLASS_NAME_STATIC = 'modal-static';\nvar OPEN_SELECTOR$1 = '.modal.show';\nvar SELECTOR_DIALOG = '.modal-dialog';\nvar SELECTOR_MODAL_BODY = '.modal-body';\nvar SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nvar Default$6 = {\n  backdrop: true,\n  focus: true,\n  keyboard: true\n};\nvar DefaultType$6 = {\n  backdrop: '(boolean|string)',\n  focus: 'boolean',\n  keyboard: 'boolean'\n};\n/**\n * Class definition\n */\n\nvar Modal = /*#__PURE__*/function (_BaseComponent6) {\n  _inherits(Modal, _BaseComponent6);\n\n  var _super10 = _createSuper(Modal);\n\n  function Modal(element, config) {\n    var _this23;\n\n    _classCallCheck(this, Modal);\n\n    _this23 = _super10.call(this, element, config);\n    _this23._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, _this23._element);\n    _this23._backdrop = _this23._initializeBackDrop();\n    _this23._focustrap = _this23._initializeFocusTrap();\n    _this23._isShown = false;\n    _this23._isTransitioning = false;\n    _this23._scrollBar = new ScrollBarHelper();\n\n    _this23._addEventListeners();\n\n    return _this23;\n  } // Getters\n\n\n  _createClass(Modal, [{\n    key: \"toggle\",\n    value: // Public\n    function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n  }, {\n    key: \"show\",\n    value: function show(relatedTarget) {\n      var _this24 = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n        relatedTarget: relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._isTransitioning = true;\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._backdrop.show(function () {\n        return _this24._showElement(relatedTarget);\n      });\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      var _this25 = this;\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n      this._isTransitioning = true;\n\n      this._focustrap.deactivate();\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._queueCallback(function () {\n        return _this25._hideModal();\n      }, this._element, this._isAnimated());\n    }\n  }, {\n    key: \"dispose\",\n    value: function dispose() {\n      EventHandler.off(window, EVENT_KEY$4);\n      EventHandler.off(this._dialog, EVENT_KEY$4);\n\n      this._backdrop.dispose();\n\n      this._focustrap.deactivate();\n\n      _get(_getPrototypeOf(Modal.prototype), \"dispose\", this).call(this);\n    }\n  }, {\n    key: \"handleUpdate\",\n    value: function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n  }, {\n    key: \"_initializeBackDrop\",\n    value: function _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value,\n        isAnimated: this._isAnimated()\n      });\n    }\n  }, {\n    key: \"_initializeFocusTrap\",\n    value: function _initializeFocusTrap() {\n      return new FocusTrap({\n        trapElement: this._element\n      });\n    }\n  }, {\n    key: \"_showElement\",\n    value: function _showElement(relatedTarget) {\n      var _this26 = this;\n\n      // try to append dynamic modal\n      if (!document.body.contains(this._element)) {\n        document.body.append(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n      var modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      var transitionComplete = function transitionComplete() {\n        if (_this26._config.focus) {\n          _this26._focustrap.activate();\n        }\n\n        _this26._isTransitioning = false;\n        EventHandler.trigger(_this26._element, EVENT_SHOWN$4, {\n          relatedTarget: relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n    }\n  }, {\n    key: \"_addEventListeners\",\n    value: function _addEventListeners() {\n      var _this27 = this;\n\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, function (event) {\n        if (event.key !== ESCAPE_KEY$1) {\n          return;\n        }\n\n        if (_this27._config.keyboard) {\n          _this27.hide();\n\n          return;\n        }\n\n        _this27._triggerBackdropTransition();\n      });\n      EventHandler.on(window, EVENT_RESIZE$1, function () {\n        if (_this27._isShown && !_this27._isTransitioning) {\n          _this27._adjustDialog();\n        }\n      });\n      EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, function (event) {\n        // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n        EventHandler.one(_this27._element, EVENT_CLICK_DISMISS, function (event2) {\n          if (_this27._element !== event.target || _this27._element !== event2.target) {\n            return;\n          }\n\n          if (_this27._config.backdrop === 'static') {\n            _this27._triggerBackdropTransition();\n\n            return;\n          }\n\n          if (_this27._config.backdrop) {\n            _this27.hide();\n          }\n        });\n      });\n    }\n  }, {\n    key: \"_hideModal\",\n    value: function _hideModal() {\n      var _this28 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(function () {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        _this28._resetAdjustments();\n\n        _this28._scrollBar.reset();\n\n        EventHandler.trigger(_this28._element, EVENT_HIDDEN$4);\n      });\n    }\n  }, {\n    key: \"_isAnimated\",\n    value: function _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$3);\n    }\n  }, {\n    key: \"_triggerBackdropTransition\",\n    value: function _triggerBackdropTransition() {\n      var _this29 = this;\n\n      var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n      var initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed\n\n      if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        this._element.style.overflowY = 'hidden';\n      }\n\n      this._element.classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(function () {\n        _this29._element.classList.remove(CLASS_NAME_STATIC);\n\n        _this29._queueCallback(function () {\n          _this29._element.style.overflowY = initialOverflowY;\n        }, _this29._dialog);\n      }, this._dialog);\n\n      this._element.focus();\n    }\n    /**\n     * The following methods are used to handle overflowing modals\n     */\n\n  }, {\n    key: \"_adjustDialog\",\n    value: function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      var scrollbarWidth = this._scrollBar.getWidth();\n\n      var isBodyOverflowing = scrollbarWidth > 0;\n\n      if (isBodyOverflowing && !isModalOverflowing) {\n        var property = isRTL() ? 'paddingLeft' : 'paddingRight';\n        this._element.style[property] = \"\".concat(scrollbarWidth, \"px\");\n      }\n\n      if (!isBodyOverflowing && isModalOverflowing) {\n        var _property = isRTL() ? 'paddingRight' : 'paddingLeft';\n\n        this._element.style[_property] = \"\".concat(scrollbarWidth, \"px\");\n      }\n    }\n  }, {\n    key: \"_resetAdjustments\",\n    value: function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n  }], [{\n    key: \"Default\",\n    get: function get() {\n      return Default$6;\n    }\n  }, {\n    key: \"DefaultType\",\n    get: function get() {\n      return DefaultType$6;\n    }\n  }, {\n    key: \"NAME\",\n    get: function get() {\n      return NAME$7;\n    }\n  }, {\n    key: \"jQueryInterface\",\n    value: function jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(\"No method named \\\"\".concat(config, \"\\\"\"));\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n  }]);\n\n  return Modal;\n}(BaseComponent);\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  var _this30 = this;\n\n  var target = SelectorEngine.getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$4, function (showEvent) {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$4, function () {\n      if (isVisible(_this30)) {\n        _this30.focus();\n      }\n    });\n  }); // avoid conflict when clicking modal toggler while another one is open\n\n  var alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n\n  if (alreadyOpen) {\n    Modal.getInstance(alreadyOpen).hide();\n  }\n\n  var data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\nenableDismissTrigger(Modal);\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nvar NAME$6 = 'offcanvas';\nvar DATA_KEY$3 = 'bs.offcanvas';\nvar EVENT_KEY$3 = \".\".concat(DATA_KEY$3);\nvar DATA_API_KEY$1 = '.data-api';\nvar EVENT_LOAD_DATA_API$2 = \"load\".concat(EVENT_KEY$3).concat(DATA_API_KEY$1);\nvar ESCAPE_KEY = 'Escape';\nvar CLASS_NAME_SHOW$3 = 'show';\nvar CLASS_NAME_SHOWING$1 = 'showing';\nvar CLASS_NAME_HIDING = 'hiding';\nvar CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nvar OPEN_SELECTOR = '.offcanvas.show';\nvar EVENT_SHOW$3 = \"show\".concat(EVENT_KEY$3);\nvar EVENT_SHOWN$3 = \"shown\".concat(EVENT_KEY$3);\nvar EVENT_HIDE$3 = \"hide\".concat(EVENT_KEY$3);\nvar EVENT_HIDE_PREVENTED = \"hidePrevented\".concat(EVENT_KEY$3);\nvar EVENT_HIDDEN$3 = \"hidden\".concat(EVENT_KEY$3);\nvar EVENT_RESIZE = \"resize\".concat(EVENT_KEY$3);\nvar EVENT_CLICK_DATA_API$1 = \"click\".concat(EVENT_KEY$3).concat(DATA_API_KEY$1);\nvar EVENT_KEYDOWN_DISMISS = \"keydown.dismiss\".concat(EVENT_KEY$3);\nvar SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nvar Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nvar DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\n/**\n * Class definition\n */\n\nvar Offcanvas = /*#__PURE__*/function (_BaseComponent7) {\n  _inherits(Offcanvas, _BaseComponent7);\n\n  var _super11 = _createSuper(Offcanvas);\n\n  function Offcanvas(element, config) {\n    var _this31;\n\n    _classCallCheck(this, Offcanvas);\n\n    _this31 = _super11.call(this, element, config);\n    _this31._isShown = false;\n    _this31._backdrop = _this31._initializeBackDrop();\n    _this31._focustrap = _this31._initializeFocusTrap();\n\n    _this31._addEventListeners();\n\n    return _this31;\n  } // Getters\n\n\n  _createClass(Offcanvas, [{\n    key: \"toggle\",\n    value: // Public\n    function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n  }, {\n    key: \"show\",\n    value: function show(relatedTarget) {\n      var _this32 = this;\n\n      if (this._isShown) {\n        return;\n      }\n\n      var showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget: relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n      }\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOWING$1);\n\n      var completeCallBack = function completeCallBack() {\n        if (!_this32._config.scroll || _this32._config.backdrop) {\n          _this32._focustrap.activate();\n        }\n\n        _this32._element.classList.add(CLASS_NAME_SHOW$3);\n\n        _this32._element.classList.remove(CLASS_NAME_SHOWING$1);\n\n        EventHandler.trigger(_this32._element, EVENT_SHOWN$3, {\n          relatedTarget: relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      var _this33 = this;\n\n      if (!this._isShown) {\n        return;\n      }\n\n      var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._focustrap.deactivate();\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.add(CLASS_NAME_HIDING);\n\n      this._backdrop.hide();\n\n      var completeCallback = function completeCallback() {\n        _this33._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n\n        _this33._element.removeAttribute('aria-modal');\n\n        _this33._element.removeAttribute('role');\n\n        if (!_this33._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(_this33._element, EVENT_HIDDEN$3);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n  }, {\n    key: \"dispose\",\n    value: function dispose() {\n      this._backdrop.dispose();\n\n      this._focustrap.deactivate();\n\n      _get(_getPrototypeOf(Offcanvas.prototype), \"dispose\", this).call(this);\n    } // Private\n\n  }, {\n    key: \"_initializeBackDrop\",\n    value: function _initializeBackDrop() {\n      var _this34 = this;\n\n      var clickCallback = function clickCallback() {\n        if (_this34._config.backdrop === 'static') {\n          EventHandler.trigger(_this34._element, EVENT_HIDE_PREVENTED);\n          return;\n        }\n\n        _this34.hide();\n      }; // 'static' option will be translated to true, and booleans will keep their value\n\n\n      var isVisible = Boolean(this._config.backdrop);\n      return new Backdrop({\n        className: CLASS_NAME_BACKDROP,\n        isVisible: isVisible,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: isVisible ? clickCallback : null\n      });\n    }\n  }, {\n    key: \"_initializeFocusTrap\",\n    value: function _initializeFocusTrap() {\n      return new FocusTrap({\n        trapElement: this._element\n      });\n    }\n  }, {\n    key: \"_addEventListeners\",\n    value: function _addEventListeners() {\n      var _this35 = this;\n\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, function (event) {\n        if (event.key !== ESCAPE_KEY) {\n          return;\n        }\n\n        if (_this35._config.keyboard) {\n          _this35.hide();\n\n          return;\n        }\n\n        EventHandler.trigger(_this35._element, EVENT_HIDE_PREVENTED);\n      });\n    } // Static\n\n  }], [{\n    key: \"Default\",\n    get: function get() {\n      return Default$5;\n    }\n  }, {\n    key: \"DefaultType\",\n    get: function get() {\n      return DefaultType$5;\n    }\n  }, {\n    key: \"NAME\",\n    get: function get() {\n      return NAME$6;\n    }\n  }, {\n    key: \"jQueryInterface\",\n    value: function jQueryInterface(config) {\n      return this.each(function () {\n        var data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(\"No method named \\\"\".concat(config, \"\\\"\"));\n        }\n\n        data[config](this);\n      });\n    }\n  }]);\n\n  return Offcanvas;\n}(BaseComponent);\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  var _this36 = this;\n\n  var target = SelectorEngine.getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$3, function () {\n    // focus on trigger when it is closed\n    if (isVisible(_this36)) {\n      _this36.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  var alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (alreadyOpen && alreadyOpen !== target) {\n    Offcanvas.getInstance(alreadyOpen).hide();\n  }\n\n  var data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, function () {\n  var _iterator16 = _createForOfIteratorHelper(SelectorEngine.find(OPEN_SELECTOR)),\n      _step16;\n\n  try {\n    for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n      var selector = _step16.value;\n      Offcanvas.getOrCreateInstance(selector).show();\n    }\n  } catch (err) {\n    _iterator16.e(err);\n  } finally {\n    _iterator16.f();\n  }\n});\nEventHandler.on(window, EVENT_RESIZE, function () {\n  var _iterator17 = _createForOfIteratorHelper(SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')),\n      _step17;\n\n  try {\n    for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n      var element = _step17.value;\n\n      if (getComputedStyle(element).position !== 'fixed') {\n        Offcanvas.getOrCreateInstance(element).hide();\n      }\n    }\n  } catch (err) {\n    _iterator17.e(err);\n  } finally {\n    _iterator17.f();\n  }\n});\nenableDismissTrigger(Offcanvas);\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n// js-docs-start allow-list\n\nvar ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\nvar DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n}; // js-docs-end allow-list\n\nvar uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\n\nvar SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\n\nvar allowedAttribute = function allowedAttribute(attribute, allowedAttributeList) {\n  var attributeName = attribute.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n    }\n\n    return true;\n  } // Check if a regular expression validates the attribute.\n\n\n  return allowedAttributeList.filter(function (attributeRegex) {\n    return attributeRegex instanceof RegExp;\n  }).some(function (regex) {\n    return regex.test(attributeName);\n  });\n};\n\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n  var _ref18;\n\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n    return sanitizeFunction(unsafeHtml);\n  }\n\n  var domParser = new window.DOMParser();\n  var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n\n  var elements = (_ref18 = []).concat.apply(_ref18, _toConsumableArray(createdDocument.body.querySelectorAll('*')));\n\n  var _iterator18 = _createForOfIteratorHelper(elements),\n      _step18;\n\n  try {\n    for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n      var _ref19;\n\n      var element = _step18.value;\n      var elementName = element.nodeName.toLowerCase();\n\n      if (!Object.keys(allowList).includes(elementName)) {\n        element.remove();\n        continue;\n      }\n\n      var attributeList = (_ref19 = []).concat.apply(_ref19, _toConsumableArray(element.attributes));\n\n      var allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n\n      var _iterator19 = _createForOfIteratorHelper(attributeList),\n          _step19;\n\n      try {\n        for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n          var attribute = _step19.value;\n\n          if (!allowedAttribute(attribute, allowedAttributes)) {\n            element.removeAttribute(attribute.nodeName);\n          }\n        }\n      } catch (err) {\n        _iterator19.e(err);\n      } finally {\n        _iterator19.f();\n      }\n    }\n  } catch (err) {\n    _iterator18.e(err);\n  } finally {\n    _iterator18.f();\n  }\n\n  return createdDocument.body.innerHTML;\n}\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\n\nvar NAME$5 = 'TemplateFactory';\nvar Default$4 = {\n  allowList: DefaultAllowlist,\n  content: {},\n  // { selector : text ,  selector2 : text2 , }\n  extraClass: '',\n  html: false,\n  sanitize: true,\n  sanitizeFn: null,\n  template: '<div></div>'\n};\nvar DefaultType$4 = {\n  allowList: 'object',\n  content: 'object',\n  extraClass: '(string|function)',\n  html: 'boolean',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  template: 'string'\n};\nvar DefaultContentType = {\n  entry: '(string|element|function|null)',\n  selector: '(string|element)'\n};\n/**\n * Class definition\n */\n\nvar TemplateFactory = /*#__PURE__*/function (_Config5) {\n  _inherits(TemplateFactory, _Config5);\n\n  var _super12 = _createSuper(TemplateFactory);\n\n  function TemplateFactory(config) {\n    var _this37;\n\n    _classCallCheck(this, TemplateFactory);\n\n    _this37 = _super12.call(this);\n    _this37._config = _this37._getConfig(config);\n    return _this37;\n  } // Getters\n\n\n  _createClass(TemplateFactory, [{\n    key: \"getContent\",\n    value: // Public\n    function getContent() {\n      var _this38 = this;\n\n      return Object.values(this._config.content).map(function (config) {\n        return _this38._resolvePossibleFunction(config);\n      }).filter(Boolean);\n    }\n  }, {\n    key: \"hasContent\",\n    value: function hasContent() {\n      return this.getContent().length > 0;\n    }\n  }, {\n    key: \"changeContent\",\n    value: function changeContent(content) {\n      this._checkContent(content);\n\n      this._config.content = _objectSpread(_objectSpread({}, this._config.content), content);\n      return this;\n    }\n  }, {\n    key: \"toHtml\",\n    value: function toHtml() {\n      var templateWrapper = document.createElement('div');\n      templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n\n      for (var _i7 = 0, _Object$entries5 = Object.entries(this._config.content); _i7 < _Object$entries5.length; _i7++) {\n        var _ref22 = _Object$entries5[_i7];\n\n        var _ref21 = _slicedToArray(_ref22, 2);\n\n        var selector = _ref21[0];\n        var text = _ref21[1];\n\n        this._setContent(templateWrapper, text, selector);\n      }\n\n      var template = templateWrapper.children[0];\n\n      var extraClass = this._resolvePossibleFunction(this._config.extraClass);\n\n      if (extraClass) {\n        var _template$classList;\n\n        (_template$classList = template.classList).add.apply(_template$classList, _toConsumableArray(extraClass.split(' ')));\n      }\n\n      return template;\n    } // Private\n\n  }, {\n    key: \"_typeCheckConfig\",\n    value: function _typeCheckConfig(config) {\n      _get(_getPrototypeOf(TemplateFactory.prototype), \"_typeCheckConfig\", this).call(this, config);\n\n      this._checkContent(config.content);\n    }\n  }, {\n    key: \"_checkContent\",\n    value: function _checkContent(arg) {\n      for (var _i8 = 0, _Object$entries6 = Object.entries(arg); _i8 < _Object$entries6.length; _i8++) {\n        var _ref25 = _Object$entries6[_i8];\n\n        var _ref24 = _slicedToArray(_ref25, 2);\n\n        var selector = _ref24[0];\n        var content = _ref24[1];\n\n        _get(_getPrototypeOf(TemplateFactory.prototype), \"_typeCheckConfig\", this).call(this, {\n          selector: selector,\n          entry: content\n        }, DefaultContentType);\n      }\n    }\n  }, {\n    key: \"_setContent\",\n    value: function _setContent(template, content, selector) {\n      var templateElement = SelectorEngine.findOne(selector, template);\n\n      if (!templateElement) {\n        return;\n      }\n\n      content = this._resolvePossibleFunction(content);\n\n      if (!content) {\n        templateElement.remove();\n        return;\n      }\n\n      if (isElement(content)) {\n        this._putElementInTemplate(getElement(content), templateElement);\n\n        return;\n      }\n\n      if (this._config.html) {\n        templateElement.innerHTML = this._maybeSanitize(content);\n        return;\n      }\n\n      templateElement.textContent = content;\n    }\n  }, {\n    key: \"_maybeSanitize\",\n    value: function _maybeSanitize(arg) {\n      return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n    }\n  }, {\n    key: \"_resolvePossibleFunction\",\n    value: function _resolvePossibleFunction(arg) {\n      return execute(arg, [this]);\n    }\n  }, {\n    key: \"_putElementInTemplate\",\n    value: function _putElementInTemplate(element, templateElement) {\n      if (this._config.html) {\n        templateElement.innerHTML = '';\n        templateElement.append(element);\n        return;\n      }\n\n      templateElement.textContent = element.textContent;\n    }\n  }], [{\n    key: \"Default\",\n    get: function get() {\n      return Default$4;\n    }\n  }, {\n    key: \"DefaultType\",\n    get: function get() {\n      return DefaultType$4;\n    }\n  }, {\n    key: \"NAME\",\n    get: function get() {\n      return NAME$5;\n    }\n  }]);\n\n  return TemplateFactory;\n}(Config);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\n\nvar NAME$4 = 'tooltip';\nvar DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nvar CLASS_NAME_FADE$2 = 'fade';\nvar CLASS_NAME_MODAL = 'modal';\nvar CLASS_NAME_SHOW$2 = 'show';\nvar SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nvar SELECTOR_MODAL = \".\".concat(CLASS_NAME_MODAL);\nvar EVENT_MODAL_HIDE = 'hide.bs.modal';\nvar TRIGGER_HOVER = 'hover';\nvar TRIGGER_FOCUS = 'focus';\nvar TRIGGER_CLICK = 'click';\nvar TRIGGER_MANUAL = 'manual';\nvar EVENT_HIDE$2 = 'hide';\nvar EVENT_HIDDEN$2 = 'hidden';\nvar EVENT_SHOW$2 = 'show';\nvar EVENT_SHOWN$2 = 'shown';\nvar EVENT_INSERTED = 'inserted';\nvar EVENT_CLICK$1 = 'click';\nvar EVENT_FOCUSIN$1 = 'focusin';\nvar EVENT_FOCUSOUT$1 = 'focusout';\nvar EVENT_MOUSEENTER = 'mouseenter';\nvar EVENT_MOUSELEAVE = 'mouseleave';\nvar AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nvar Default$3 = {\n  allowList: DefaultAllowlist,\n  animation: true,\n  boundary: 'clippingParents',\n  container: false,\n  customClass: '',\n  delay: 0,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  html: false,\n  offset: [0, 6],\n  placement: 'top',\n  popperConfig: null,\n  sanitize: true,\n  sanitizeFn: null,\n  selector: false,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  title: '',\n  trigger: 'hover focus'\n};\nvar DefaultType$3 = {\n  allowList: 'object',\n  animation: 'boolean',\n  boundary: '(string|element)',\n  container: '(string|element|boolean)',\n  customClass: '(string|function)',\n  delay: '(number|object)',\n  fallbackPlacements: 'array',\n  html: 'boolean',\n  offset: '(array|string|function)',\n  placement: '(string|function)',\n  popperConfig: '(null|object|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  selector: '(string|boolean)',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string'\n};\n/**\n * Class definition\n */\n\nvar Tooltip = /*#__PURE__*/function (_BaseComponent8) {\n  _inherits(Tooltip, _BaseComponent8);\n\n  var _super13 = _createSuper(Tooltip);\n\n  function Tooltip(element, config) {\n    var _this39;\n\n    _classCallCheck(this, Tooltip);\n\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    _this39 = _super13.call(this, element, config); // Private\n\n    _this39._isEnabled = true;\n    _this39._timeout = 0;\n    _this39._isHovered = null;\n    _this39._activeTrigger = {};\n    _this39._popper = null;\n    _this39._templateFactory = null;\n    _this39._newContent = null; // Protected\n\n    _this39.tip = null;\n\n    _this39._setListeners();\n\n    if (!_this39._config.selector) {\n      _this39._fixTitle();\n    }\n\n    return _this39;\n  } // Getters\n\n\n  _createClass(Tooltip, [{\n    key: \"enable\",\n    value: // Public\n    function enable() {\n      this._isEnabled = true;\n    }\n  }, {\n    key: \"disable\",\n    value: function disable() {\n      this._isEnabled = false;\n    }\n  }, {\n    key: \"toggleEnabled\",\n    value: function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      this._activeTrigger.click = !this._activeTrigger.click;\n\n      if (this._isShown()) {\n        this._leave();\n\n        return;\n      }\n\n      this._enter();\n    }\n  }, {\n    key: \"dispose\",\n    value: function dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n\n      if (this._element.getAttribute('data-bs-original-title')) {\n        this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n      }\n\n      this._disposePopper();\n\n      _get(_getPrototypeOf(Tooltip.prototype), \"dispose\", this).call(this);\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this40 = this;\n\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this._isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      var showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n      var shadowRoot = findShadowRoot(this._element);\n\n      var isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      } // TODO: v6 remove this or make it optional\n\n\n      this._disposePopper();\n\n      var tip = this._getTipElement();\n\n      this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n\n      var container = this._config.container;\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.append(tip);\n        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n      }\n\n      this._popper = this._createPopper(tip);\n      tip.classList.add(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n      if ('ontouchstart' in document.documentElement) {\n        var _ref26;\n\n        var _iterator20 = _createForOfIteratorHelper((_ref26 = []).concat.apply(_ref26, _toConsumableArray(document.body.children))),\n            _step20;\n\n        try {\n          for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\n            var element = _step20.value;\n            EventHandler.on(element, 'mouseover', noop);\n          }\n        } catch (err) {\n          _iterator20.e(err);\n        } finally {\n          _iterator20.f();\n        }\n      }\n\n      var complete = function complete() {\n        EventHandler.trigger(_this40._element, _this40.constructor.eventName(EVENT_SHOWN$2));\n\n        if (_this40._isHovered === false) {\n          _this40._leave();\n        }\n\n        _this40._isHovered = false;\n      };\n\n      this._queueCallback(complete, this.tip, this._isAnimated());\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      var _this41 = this;\n\n      if (!this._isShown()) {\n        return;\n      }\n\n      var hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      var tip = this._getTipElement();\n\n      tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        var _ref27;\n\n        var _iterator21 = _createForOfIteratorHelper((_ref27 = []).concat.apply(_ref27, _toConsumableArray(document.body.children))),\n            _step21;\n\n        try {\n          for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n            var element = _step21.value;\n            EventHandler.off(element, 'mouseover', noop);\n          }\n        } catch (err) {\n          _iterator21.e(err);\n        } finally {\n          _iterator21.f();\n        }\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      this._isHovered = null; // it is a trick to support manual triggering\n\n      var complete = function complete() {\n        if (_this41._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (!_this41._isHovered) {\n          _this41._disposePopper();\n        }\n\n        _this41._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(_this41._element, _this41.constructor.eventName(EVENT_HIDDEN$2));\n      };\n\n      this._queueCallback(complete, this.tip, this._isAnimated());\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Protected\n\n  }, {\n    key: \"_isWithContent\",\n    value: function _isWithContent() {\n      return Boolean(this._getTitle());\n    }\n  }, {\n    key: \"_getTipElement\",\n    value: function _getTipElement() {\n      if (!this.tip) {\n        this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n      }\n\n      return this.tip;\n    }\n  }, {\n    key: \"_createTipElement\",\n    value: function _createTipElement(content) {\n      var tip = this._getTemplateFactory(content).toHtml(); // TODO: remove this check in v6\n\n\n      if (!tip) {\n        return null;\n      }\n\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); // TODO: v6 the following can be achieved with CSS only\n\n      tip.classList.add(\"bs-\".concat(this.constructor.NAME, \"-auto\"));\n      var tipId = getUID(this.constructor.NAME).toString();\n      tip.setAttribute('id', tipId);\n\n      if (this._isAnimated()) {\n        tip.classList.add(CLASS_NAME_FADE$2);\n      }\n\n      return tip;\n    }\n  }, {\n    key: \"setContent\",\n    value: function setContent(content) {\n      this._newContent = content;\n\n      if (this._isShown()) {\n        this._disposePopper();\n\n        this.show();\n      }\n    }\n  }, {\n    key: \"_getTemplateFactory\",\n    value: function _getTemplateFactory(content) {\n      if (this._templateFactory) {\n        this._templateFactory.changeContent(content);\n      } else {\n        this._templateFactory = new TemplateFactory(_objectSpread(_objectSpread({}, this._config), {}, {\n          // the `content` var has to be after `this._config`\n          // to override config.content in case of popover\n          content: content,\n          extraClass: this._resolvePossibleFunction(this._config.customClass)\n        }));\n      }\n\n      return this._templateFactory;\n    }\n  }, {\n    key: \"_getContentForTemplate\",\n    value: function _getContentForTemplate() {\n      return _defineProperty({}, SELECTOR_TOOLTIP_INNER, this._getTitle());\n    }\n  }, {\n    key: \"_getTitle\",\n    value: function _getTitle() {\n      return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n    } // Private\n\n  }, {\n    key: \"_initializeOnDelegatedTarget\",\n    value: function _initializeOnDelegatedTarget(event) {\n      return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n    }\n  }, {\n    key: \"_isAnimated\",\n    value: function _isAnimated() {\n      return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n    }\n  }, {\n    key: \"_isShown\",\n    value: function _isShown() {\n      return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n    }\n  }, {\n    key: \"_createPopper\",\n    value: function _createPopper(tip) {\n      var placement = execute(this._config.placement, [this, tip, this._element]);\n      var attachment = AttachmentMap[placement.toUpperCase()];\n      return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n  }, {\n    key: \"_getOffset\",\n    value: function _getOffset() {\n      var _this42 = this;\n\n      var offset = this._config.offset;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(function (value) {\n          return Number.parseInt(value, 10);\n        });\n      }\n\n      if (typeof offset === 'function') {\n        return function (popperData) {\n          return offset(popperData, _this42._element);\n        };\n      }\n\n      return offset;\n    }\n  }, {\n    key: \"_resolvePossibleFunction\",\n    value: function _resolvePossibleFunction(arg) {\n      return execute(arg, [this._element]);\n    }\n  }, {\n    key: \"_getPopperConfig\",\n    value: function _getPopperConfig(attachment) {\n      var _this43 = this;\n\n      var defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: \".\".concat(this.constructor.NAME, \"-arrow\")\n          }\n        }, {\n          name: 'preSetPlacement',\n          enabled: true,\n          phase: 'beforeMain',\n          fn: function fn(data) {\n            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n            _this43._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n          }\n        }]\n      };\n      return _objectSpread(_objectSpread({}, defaultBsPopperConfig), execute(this._config.popperConfig, [defaultBsPopperConfig]));\n    }\n  }, {\n    key: \"_setListeners\",\n    value: function _setListeners() {\n      var _this44 = this;\n\n      var triggers = this._config.trigger.split(' ');\n\n      var _iterator22 = _createForOfIteratorHelper(triggers),\n          _step22;\n\n      try {\n        for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {\n          var trigger = _step22.value;\n\n          if (trigger === 'click') {\n            EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, function (event) {\n              var context = _this44._initializeOnDelegatedTarget(event);\n\n              context.toggle();\n            });\n          } else if (trigger !== TRIGGER_MANUAL) {\n            var eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n            var eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n            EventHandler.on(this._element, eventIn, this._config.selector, function (event) {\n              var context = _this44._initializeOnDelegatedTarget(event);\n\n              context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n\n              context._enter();\n            });\n            EventHandler.on(this._element, eventOut, this._config.selector, function (event) {\n              var context = _this44._initializeOnDelegatedTarget(event);\n\n              context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n\n              context._leave();\n            });\n          }\n        }\n      } catch (err) {\n        _iterator22.e(err);\n      } finally {\n        _iterator22.f();\n      }\n\n      this._hideModalHandler = function () {\n        if (_this44._element) {\n          _this44.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n    }\n  }, {\n    key: \"_fixTitle\",\n    value: function _fixTitle() {\n      var title = this._element.getAttribute('title');\n\n      if (!title) {\n        return;\n      }\n\n      if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n\n\n      this._element.removeAttribute('title');\n    }\n  }, {\n    key: \"_enter\",\n    value: function _enter() {\n      var _this45 = this;\n\n      if (this._isShown() || this._isHovered) {\n        this._isHovered = true;\n        return;\n      }\n\n      this._isHovered = true;\n\n      this._setTimeout(function () {\n        if (_this45._isHovered) {\n          _this45.show();\n        }\n      }, this._config.delay.show);\n    }\n  }, {\n    key: \"_leave\",\n    value: function _leave() {\n      var _this46 = this;\n\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      this._isHovered = false;\n\n      this._setTimeout(function () {\n        if (!_this46._isHovered) {\n          _this46.hide();\n        }\n      }, this._config.delay.hide);\n    }\n  }, {\n    key: \"_setTimeout\",\n    value: function _setTimeout(handler, timeout) {\n      clearTimeout(this._timeout);\n      this._timeout = setTimeout(handler, timeout);\n    }\n  }, {\n    key: \"_isWithActiveTrigger\",\n    value: function _isWithActiveTrigger() {\n      return Object.values(this._activeTrigger).includes(true);\n    }\n  }, {\n    key: \"_getConfig\",\n    value: function _getConfig(config) {\n      var dataAttributes = Manipulator.getDataAttributes(this._element);\n\n      for (var _i9 = 0, _Object$keys2 = Object.keys(dataAttributes); _i9 < _Object$keys2.length; _i9++) {\n        var dataAttribute = _Object$keys2[_i9];\n\n        if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n          delete dataAttributes[dataAttribute];\n        }\n      }\n\n      config = _objectSpread(_objectSpread({}, dataAttributes), _typeof(config) === 'object' && config ? config : {});\n      config = this._mergeConfigObj(config);\n      config = this._configAfterMerge(config);\n\n      this._typeCheckConfig(config);\n\n      return config;\n    }\n  }, {\n    key: \"_configAfterMerge\",\n    value: function _configAfterMerge(config) {\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      return config;\n    }\n  }, {\n    key: \"_getDelegateConfig\",\n    value: function _getDelegateConfig() {\n      var config = {};\n\n      for (var _i10 = 0, _Object$entries7 = Object.entries(this._config); _i10 < _Object$entries7.length; _i10++) {\n        var _ref31 = _Object$entries7[_i10];\n\n        var _ref30 = _slicedToArray(_ref31, 2);\n\n        var key = _ref30[0];\n        var value = _ref30[1];\n\n        if (this.constructor.Default[key] !== value) {\n          config[key] = value;\n        }\n      }\n\n      config.selector = false;\n      config.trigger = 'manual'; // In the future can be replaced with:\n      // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n      // `Object.fromEntries(keysWithDifferentValues)`\n\n      return config;\n    }\n  }, {\n    key: \"_disposePopper\",\n    value: function _disposePopper() {\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n\n      if (this.tip) {\n        this.tip.remove();\n        this.tip = null;\n      }\n    } // Static\n\n  }], [{\n    key: \"Default\",\n    get: function get() {\n      return Default$3;\n    }\n  }, {\n    key: \"DefaultType\",\n    get: function get() {\n      return DefaultType$3;\n    }\n  }, {\n    key: \"NAME\",\n    get: function get() {\n      return NAME$4;\n    }\n  }, {\n    key: \"jQueryInterface\",\n    value: function jQueryInterface(config) {\n      return this.each(function () {\n        var data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(\"No method named \\\"\".concat(config, \"\\\"\"));\n        }\n\n        data[config]();\n      });\n    }\n  }]);\n\n  return Tooltip;\n}(BaseComponent);\n/**\n * jQuery\n */\n\n\ndefineJQueryPlugin(Tooltip);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nvar NAME$3 = 'popover';\nvar SELECTOR_TITLE = '.popover-header';\nvar SELECTOR_CONTENT = '.popover-body';\n\nvar Default$2 = _objectSpread(_objectSpread({}, Tooltip.Default), {}, {\n  content: '',\n  offset: [0, 8],\n  placement: 'right',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>',\n  trigger: 'click'\n});\n\nvar DefaultType$2 = _objectSpread(_objectSpread({}, Tooltip.DefaultType), {}, {\n  content: '(null|string|element|function)'\n});\n/**\n * Class definition\n */\n\n\nvar Popover = /*#__PURE__*/function (_Tooltip) {\n  _inherits(Popover, _Tooltip);\n\n  var _super14 = _createSuper(Popover);\n\n  function Popover() {\n    _classCallCheck(this, Popover);\n\n    return _super14.apply(this, arguments);\n  }\n\n  _createClass(Popover, [{\n    key: \"_isWithContent\",\n    value: // Overrides\n    function _isWithContent() {\n      return this._getTitle() || this._getContent();\n    } // Private\n\n  }, {\n    key: \"_getContentForTemplate\",\n    value: function _getContentForTemplate() {\n      var _ref32;\n\n      return _ref32 = {}, _defineProperty(_ref32, SELECTOR_TITLE, this._getTitle()), _defineProperty(_ref32, SELECTOR_CONTENT, this._getContent()), _ref32;\n    }\n  }, {\n    key: \"_getContent\",\n    value: function _getContent() {\n      return this._resolvePossibleFunction(this._config.content);\n    } // Static\n\n  }], [{\n    key: \"Default\",\n    get: // Getters\n    function get() {\n      return Default$2;\n    }\n  }, {\n    key: \"DefaultType\",\n    get: function get() {\n      return DefaultType$2;\n    }\n  }, {\n    key: \"NAME\",\n    get: function get() {\n      return NAME$3;\n    }\n  }, {\n    key: \"jQueryInterface\",\n    value: function jQueryInterface(config) {\n      return this.each(function () {\n        var data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(\"No method named \\\"\".concat(config, \"\\\"\"));\n        }\n\n        data[config]();\n      });\n    }\n  }]);\n\n  return Popover;\n}(Tooltip);\n/**\n * jQuery\n */\n\n\ndefineJQueryPlugin(Popover);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nvar NAME$2 = 'scrollspy';\nvar DATA_KEY$2 = 'bs.scrollspy';\nvar EVENT_KEY$2 = \".\".concat(DATA_KEY$2);\nvar DATA_API_KEY = '.data-api';\nvar EVENT_ACTIVATE = \"activate\".concat(EVENT_KEY$2);\nvar EVENT_CLICK = \"click\".concat(EVENT_KEY$2);\nvar EVENT_LOAD_DATA_API$1 = \"load\".concat(EVENT_KEY$2).concat(DATA_API_KEY);\nvar CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nvar CLASS_NAME_ACTIVE$1 = 'active';\nvar SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nvar SELECTOR_TARGET_LINKS = '[href]';\nvar SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nvar SELECTOR_NAV_LINKS = '.nav-link';\nvar SELECTOR_NAV_ITEMS = '.nav-item';\nvar SELECTOR_LIST_ITEMS = '.list-group-item';\nvar SELECTOR_LINK_ITEMS = \"\".concat(SELECTOR_NAV_LINKS, \", \").concat(SELECTOR_NAV_ITEMS, \" > \").concat(SELECTOR_NAV_LINKS, \", \").concat(SELECTOR_LIST_ITEMS);\nvar SELECTOR_DROPDOWN = '.dropdown';\nvar SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nvar Default$1 = {\n  offset: null,\n  // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: '0px 0px -25%',\n  smoothScroll: false,\n  target: null,\n  threshold: [0.1, 0.5, 1]\n};\nvar DefaultType$1 = {\n  offset: '(number|null)',\n  // TODO v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: 'string',\n  smoothScroll: 'boolean',\n  target: 'element',\n  threshold: 'array'\n};\n/**\n * Class definition\n */\n\nvar ScrollSpy = /*#__PURE__*/function (_BaseComponent9) {\n  _inherits(ScrollSpy, _BaseComponent9);\n\n  var _super15 = _createSuper(ScrollSpy);\n\n  function ScrollSpy(element, config) {\n    var _this47;\n\n    _classCallCheck(this, ScrollSpy);\n\n    _this47 = _super15.call(this, element, config); // this._element is the observablesContainer and config.target the menu links wrapper\n\n    _this47._targetLinks = new Map();\n    _this47._observableSections = new Map();\n    _this47._rootElement = getComputedStyle(_this47._element).overflowY === 'visible' ? null : _this47._element;\n    _this47._activeTarget = null;\n    _this47._observer = null;\n    _this47._previousScrollData = {\n      visibleEntryTop: 0,\n      parentScrollTop: 0\n    };\n\n    _this47.refresh(); // initialize\n\n\n    return _this47;\n  } // Getters\n\n\n  _createClass(ScrollSpy, [{\n    key: \"refresh\",\n    value: // Public\n    function refresh() {\n      this._initializeTargetsAndObservables();\n\n      this._maybeEnableSmoothScroll();\n\n      if (this._observer) {\n        this._observer.disconnect();\n      } else {\n        this._observer = this._getNewObserver();\n      }\n\n      var _iterator23 = _createForOfIteratorHelper(this._observableSections.values()),\n          _step23;\n\n      try {\n        for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {\n          var section = _step23.value;\n\n          this._observer.observe(section);\n        }\n      } catch (err) {\n        _iterator23.e(err);\n      } finally {\n        _iterator23.f();\n      }\n    }\n  }, {\n    key: \"dispose\",\n    value: function dispose() {\n      this._observer.disconnect();\n\n      _get(_getPrototypeOf(ScrollSpy.prototype), \"dispose\", this).call(this);\n    } // Private\n\n  }, {\n    key: \"_configAfterMerge\",\n    value: function _configAfterMerge(config) {\n      // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n      config.target = getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n\n      config.rootMargin = config.offset ? \"\".concat(config.offset, \"px 0px -30%\") : config.rootMargin;\n\n      if (typeof config.threshold === 'string') {\n        config.threshold = config.threshold.split(',').map(function (value) {\n          return Number.parseFloat(value);\n        });\n      }\n\n      return config;\n    }\n  }, {\n    key: \"_maybeEnableSmoothScroll\",\n    value: function _maybeEnableSmoothScroll() {\n      var _this48 = this;\n\n      if (!this._config.smoothScroll) {\n        return;\n      } // unregister any previous listeners\n\n\n      EventHandler.off(this._config.target, EVENT_CLICK);\n      EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, function (event) {\n        var observableSection = _this48._observableSections.get(event.target.hash);\n\n        if (observableSection) {\n          event.preventDefault();\n          var root = _this48._rootElement || window;\n          var height = observableSection.offsetTop - _this48._element.offsetTop;\n\n          if (root.scrollTo) {\n            root.scrollTo({\n              top: height,\n              behavior: 'smooth'\n            });\n            return;\n          } // Chrome 60 doesn't support `scrollTo`\n\n\n          root.scrollTop = height;\n        }\n      });\n    }\n  }, {\n    key: \"_getNewObserver\",\n    value: function _getNewObserver() {\n      var _this49 = this;\n\n      var options = {\n        root: this._rootElement,\n        threshold: this._config.threshold,\n        rootMargin: this._config.rootMargin\n      };\n      return new IntersectionObserver(function (entries) {\n        return _this49._observerCallback(entries);\n      }, options);\n    } // The logic of selection\n\n  }, {\n    key: \"_observerCallback\",\n    value: function _observerCallback(entries) {\n      var _this50 = this;\n\n      var targetElement = function targetElement(entry) {\n        return _this50._targetLinks.get(\"#\".concat(entry.target.id));\n      };\n\n      var activate = function activate(entry) {\n        _this50._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n\n        _this50._process(targetElement(entry));\n      };\n\n      var parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n      var userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n      this._previousScrollData.parentScrollTop = parentScrollTop;\n\n      var _iterator24 = _createForOfIteratorHelper(entries),\n          _step24;\n\n      try {\n        for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {\n          var entry = _step24.value;\n\n          if (!entry.isIntersecting) {\n            this._activeTarget = null;\n\n            this._clearActiveClass(targetElement(entry));\n\n            continue;\n          }\n\n          var entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop\n\n          if (userScrollsDown && entryIsLowerThanPrevious) {\n            activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n\n            if (!parentScrollTop) {\n              return;\n            }\n\n            continue;\n          } // if we are scrolling up, pick the smallest offsetTop\n\n\n          if (!userScrollsDown && !entryIsLowerThanPrevious) {\n            activate(entry);\n          }\n        }\n      } catch (err) {\n        _iterator24.e(err);\n      } finally {\n        _iterator24.f();\n      }\n    }\n  }, {\n    key: \"_initializeTargetsAndObservables\",\n    value: function _initializeTargetsAndObservables() {\n      this._targetLinks = new Map();\n      this._observableSections = new Map();\n      var targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n\n      var _iterator25 = _createForOfIteratorHelper(targetLinks),\n          _step25;\n\n      try {\n        for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {\n          var anchor = _step25.value;\n\n          // ensure that the anchor has an id and is not disabled\n          if (!anchor.hash || isDisabled(anchor)) {\n            continue;\n          }\n\n          var observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element); // ensure that the observableSection exists & is visible\n\n          if (isVisible(observableSection)) {\n            this._targetLinks.set(decodeURI(anchor.hash), anchor);\n\n            this._observableSections.set(anchor.hash, observableSection);\n          }\n        }\n      } catch (err) {\n        _iterator25.e(err);\n      } finally {\n        _iterator25.f();\n      }\n    }\n  }, {\n    key: \"_process\",\n    value: function _process(target) {\n      if (this._activeTarget === target) {\n        return;\n      }\n\n      this._clearActiveClass(this._config.target);\n\n      this._activeTarget = target;\n      target.classList.add(CLASS_NAME_ACTIVE$1);\n\n      this._activateParents(target);\n\n      EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n  }, {\n    key: \"_activateParents\",\n    value: function _activateParents(target) {\n      // Activate dropdown parents\n      if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n        return;\n      }\n\n      var _iterator26 = _createForOfIteratorHelper(SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)),\n          _step26;\n\n      try {\n        for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {\n          var listGroup = _step26.value;\n\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          var _iterator27 = _createForOfIteratorHelper(SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)),\n              _step27;\n\n          try {\n            for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {\n              var item = _step27.value;\n              item.classList.add(CLASS_NAME_ACTIVE$1);\n            }\n          } catch (err) {\n            _iterator27.e(err);\n          } finally {\n            _iterator27.f();\n          }\n        }\n      } catch (err) {\n        _iterator26.e(err);\n      } finally {\n        _iterator26.f();\n      }\n    }\n  }, {\n    key: \"_clearActiveClass\",\n    value: function _clearActiveClass(parent) {\n      parent.classList.remove(CLASS_NAME_ACTIVE$1);\n      var activeNodes = SelectorEngine.find(\"\".concat(SELECTOR_TARGET_LINKS, \".\").concat(CLASS_NAME_ACTIVE$1), parent);\n\n      var _iterator28 = _createForOfIteratorHelper(activeNodes),\n          _step28;\n\n      try {\n        for (_iterator28.s(); !(_step28 = _iterator28.n()).done;) {\n          var node = _step28.value;\n          node.classList.remove(CLASS_NAME_ACTIVE$1);\n        }\n      } catch (err) {\n        _iterator28.e(err);\n      } finally {\n        _iterator28.f();\n      }\n    } // Static\n\n  }], [{\n    key: \"Default\",\n    get: function get() {\n      return Default$1;\n    }\n  }, {\n    key: \"DefaultType\",\n    get: function get() {\n      return DefaultType$1;\n    }\n  }, {\n    key: \"NAME\",\n    get: function get() {\n      return NAME$2;\n    }\n  }, {\n    key: \"jQueryInterface\",\n    value: function jQueryInterface(config) {\n      return this.each(function () {\n        var data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(\"No method named \\\"\".concat(config, \"\\\"\"));\n        }\n\n        data[config]();\n      });\n    }\n  }]);\n\n  return ScrollSpy;\n}(BaseComponent);\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, function () {\n  var _iterator29 = _createForOfIteratorHelper(SelectorEngine.find(SELECTOR_DATA_SPY)),\n      _step29;\n\n  try {\n    for (_iterator29.s(); !(_step29 = _iterator29.n()).done;) {\n      var spy = _step29.value;\n      ScrollSpy.getOrCreateInstance(spy);\n    }\n  } catch (err) {\n    _iterator29.e(err);\n  } finally {\n    _iterator29.f();\n  }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nvar NAME$1 = 'tab';\nvar DATA_KEY$1 = 'bs.tab';\nvar EVENT_KEY$1 = \".\".concat(DATA_KEY$1);\nvar EVENT_HIDE$1 = \"hide\".concat(EVENT_KEY$1);\nvar EVENT_HIDDEN$1 = \"hidden\".concat(EVENT_KEY$1);\nvar EVENT_SHOW$1 = \"show\".concat(EVENT_KEY$1);\nvar EVENT_SHOWN$1 = \"shown\".concat(EVENT_KEY$1);\nvar EVENT_CLICK_DATA_API = \"click\".concat(EVENT_KEY$1);\nvar EVENT_KEYDOWN = \"keydown\".concat(EVENT_KEY$1);\nvar EVENT_LOAD_DATA_API = \"load\".concat(EVENT_KEY$1);\nvar ARROW_LEFT_KEY = 'ArrowLeft';\nvar ARROW_RIGHT_KEY = 'ArrowRight';\nvar ARROW_UP_KEY = 'ArrowUp';\nvar ARROW_DOWN_KEY = 'ArrowDown';\nvar HOME_KEY = 'Home';\nvar END_KEY = 'End';\nvar CLASS_NAME_ACTIVE = 'active';\nvar CLASS_NAME_FADE$1 = 'fade';\nvar CLASS_NAME_SHOW$1 = 'show';\nvar CLASS_DROPDOWN = 'dropdown';\nvar SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nvar SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\nvar NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)';\nvar SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\nvar SELECTOR_OUTER = '.nav-item, .list-group-item';\nvar SELECTOR_INNER = \".nav-link\".concat(NOT_SELECTOR_DROPDOWN_TOGGLE, \", .list-group-item\").concat(NOT_SELECTOR_DROPDOWN_TOGGLE, \", [role=\\\"tab\\\"]\").concat(NOT_SELECTOR_DROPDOWN_TOGGLE);\nvar SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // TODO: could only be `tab` in v6\n\nvar SELECTOR_INNER_ELEM = \"\".concat(SELECTOR_INNER, \", \").concat(SELECTOR_DATA_TOGGLE);\nvar SELECTOR_DATA_TOGGLE_ACTIVE = \".\".concat(CLASS_NAME_ACTIVE, \"[data-bs-toggle=\\\"tab\\\"], .\").concat(CLASS_NAME_ACTIVE, \"[data-bs-toggle=\\\"pill\\\"], .\").concat(CLASS_NAME_ACTIVE, \"[data-bs-toggle=\\\"list\\\"]\");\n/**\n * Class definition\n */\n\nvar Tab = /*#__PURE__*/function (_BaseComponent10) {\n  _inherits(Tab, _BaseComponent10);\n\n  var _super16 = _createSuper(Tab);\n\n  function Tab(element) {\n    var _this51;\n\n    _classCallCheck(this, Tab);\n\n    _this51 = _super16.call(this, element);\n    _this51._parent = _this51._element.closest(SELECTOR_TAB_PANEL);\n\n    if (!_this51._parent) {\n      return _possibleConstructorReturn(_this51); // TODO: should throw exception in v6\n      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n    } // Set up initial aria attributes\n\n\n    _this51._setInitialAttributes(_this51._parent, _this51._getChildren());\n\n    EventHandler.on(_this51._element, EVENT_KEYDOWN, function (event) {\n      return _this51._keydown(event);\n    });\n    return _this51;\n  } // Getters\n\n\n  _createClass(Tab, [{\n    key: \"show\",\n    value: // Public\n    function show() {\n      // Shows this elem and deactivate the active sibling if exists\n      var innerElem = this._element;\n\n      if (this._elemIsActive(innerElem)) {\n        return;\n      } // Search for active tab on same parent to deactivate it\n\n\n      var active = this._getActiveElem();\n\n      var hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {\n        relatedTarget: innerElem\n      }) : null;\n      var showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {\n        relatedTarget: active\n      });\n\n      if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._deactivate(active, innerElem);\n\n      this._activate(innerElem, active);\n    } // Private\n\n  }, {\n    key: \"_activate\",\n    value: function _activate(element, relatedElem) {\n      var _this52 = this;\n\n      if (!element) {\n        return;\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n\n      var complete = function complete() {\n        if (element.getAttribute('role') !== 'tab') {\n          element.classList.add(CLASS_NAME_SHOW$1);\n          return;\n        }\n\n        element.removeAttribute('tabindex');\n        element.setAttribute('aria-selected', true);\n\n        _this52._toggleDropDown(element, true);\n\n        EventHandler.trigger(element, EVENT_SHOWN$1, {\n          relatedTarget: relatedElem\n        });\n      };\n\n      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n    }\n  }, {\n    key: \"_deactivate\",\n    value: function _deactivate(element, relatedElem) {\n      var _this53 = this;\n\n      if (!element) {\n        return;\n      }\n\n      element.classList.remove(CLASS_NAME_ACTIVE);\n      element.blur();\n\n      this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n\n      var complete = function complete() {\n        if (element.getAttribute('role') !== 'tab') {\n          element.classList.remove(CLASS_NAME_SHOW$1);\n          return;\n        }\n\n        element.setAttribute('aria-selected', false);\n        element.setAttribute('tabindex', '-1');\n\n        _this53._toggleDropDown(element, false);\n\n        EventHandler.trigger(element, EVENT_HIDDEN$1, {\n          relatedTarget: relatedElem\n        });\n      };\n\n      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n    }\n  }, {\n    key: \"_keydown\",\n    value: function _keydown(event) {\n      if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {\n        return;\n      }\n\n      event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n\n      event.preventDefault();\n\n      var children = this._getChildren().filter(function (element) {\n        return !isDisabled(element);\n      });\n\n      var nextActiveElement;\n\n      if ([HOME_KEY, END_KEY].includes(event.key)) {\n        nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n      } else {\n        var isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n        nextActiveElement = getNextActiveElement(children, event.target, isNext, true);\n      }\n\n      if (nextActiveElement) {\n        nextActiveElement.focus({\n          preventScroll: true\n        });\n        Tab.getOrCreateInstance(nextActiveElement).show();\n      }\n    }\n  }, {\n    key: \"_getChildren\",\n    value: function _getChildren() {\n      // collection of inner elements\n      return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n    }\n  }, {\n    key: \"_getActiveElem\",\n    value: function _getActiveElem() {\n      var _this54 = this;\n\n      return this._getChildren().find(function (child) {\n        return _this54._elemIsActive(child);\n      }) || null;\n    }\n  }, {\n    key: \"_setInitialAttributes\",\n    value: function _setInitialAttributes(parent, children) {\n      this._setAttributeIfNotExists(parent, 'role', 'tablist');\n\n      var _iterator30 = _createForOfIteratorHelper(children),\n          _step30;\n\n      try {\n        for (_iterator30.s(); !(_step30 = _iterator30.n()).done;) {\n          var child = _step30.value;\n\n          this._setInitialAttributesOnChild(child);\n        }\n      } catch (err) {\n        _iterator30.e(err);\n      } finally {\n        _iterator30.f();\n      }\n    }\n  }, {\n    key: \"_setInitialAttributesOnChild\",\n    value: function _setInitialAttributesOnChild(child) {\n      child = this._getInnerElement(child);\n\n      var isActive = this._elemIsActive(child);\n\n      var outerElem = this._getOuterElement(child);\n\n      child.setAttribute('aria-selected', isActive);\n\n      if (outerElem !== child) {\n        this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n      }\n\n      if (!isActive) {\n        child.setAttribute('tabindex', '-1');\n      }\n\n      this._setAttributeIfNotExists(child, 'role', 'tab'); // set attributes to the related panel too\n\n\n      this._setInitialAttributesOnTargetPanel(child);\n    }\n  }, {\n    key: \"_setInitialAttributesOnTargetPanel\",\n    value: function _setInitialAttributesOnTargetPanel(child) {\n      var target = SelectorEngine.getElementFromSelector(child);\n\n      if (!target) {\n        return;\n      }\n\n      this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n\n      if (child.id) {\n        this._setAttributeIfNotExists(target, 'aria-labelledby', \"\".concat(child.id));\n      }\n    }\n  }, {\n    key: \"_toggleDropDown\",\n    value: function _toggleDropDown(element, open) {\n      var outerElem = this._getOuterElement(element);\n\n      if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n        return;\n      }\n\n      var toggle = function toggle(selector, className) {\n        var element = SelectorEngine.findOne(selector, outerElem);\n\n        if (element) {\n          element.classList.toggle(className, open);\n        }\n      };\n\n      toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n      toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);\n      outerElem.setAttribute('aria-expanded', open);\n    }\n  }, {\n    key: \"_setAttributeIfNotExists\",\n    value: function _setAttributeIfNotExists(element, attribute, value) {\n      if (!element.hasAttribute(attribute)) {\n        element.setAttribute(attribute, value);\n      }\n    }\n  }, {\n    key: \"_elemIsActive\",\n    value: function _elemIsActive(elem) {\n      return elem.classList.contains(CLASS_NAME_ACTIVE);\n    } // Try to get the inner element (usually the .nav-link)\n\n  }, {\n    key: \"_getInnerElement\",\n    value: function _getInnerElement(elem) {\n      return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n    } // Try to get the outer element (usually the .nav-item)\n\n  }, {\n    key: \"_getOuterElement\",\n    value: function _getOuterElement(elem) {\n      return elem.closest(SELECTOR_OUTER) || elem;\n    } // Static\n\n  }], [{\n    key: \"NAME\",\n    get: function get() {\n      return NAME$1;\n    }\n  }, {\n    key: \"jQueryInterface\",\n    value: function jQueryInterface(config) {\n      return this.each(function () {\n        var data = Tab.getOrCreateInstance(this);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(\"No method named \\\"\".concat(config, \"\\\"\"));\n        }\n\n        data[config]();\n      });\n    }\n  }]);\n\n  return Tab;\n}(BaseComponent);\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  Tab.getOrCreateInstance(this).show();\n});\n/**\n * Initialize on focus\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, function () {\n  var _iterator31 = _createForOfIteratorHelper(SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)),\n      _step31;\n\n  try {\n    for (_iterator31.s(); !(_step31 = _iterator31.n()).done;) {\n      var element = _step31.value;\n      Tab.getOrCreateInstance(element);\n    }\n  } catch (err) {\n    _iterator31.e(err);\n  } finally {\n    _iterator31.f();\n  }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab);\n/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nvar NAME = 'toast';\nvar DATA_KEY = 'bs.toast';\nvar EVENT_KEY = \".\".concat(DATA_KEY);\nvar EVENT_MOUSEOVER = \"mouseover\".concat(EVENT_KEY);\nvar EVENT_MOUSEOUT = \"mouseout\".concat(EVENT_KEY);\nvar EVENT_FOCUSIN = \"focusin\".concat(EVENT_KEY);\nvar EVENT_FOCUSOUT = \"focusout\".concat(EVENT_KEY);\nvar EVENT_HIDE = \"hide\".concat(EVENT_KEY);\nvar EVENT_HIDDEN = \"hidden\".concat(EVENT_KEY);\nvar EVENT_SHOW = \"show\".concat(EVENT_KEY);\nvar EVENT_SHOWN = \"shown\".concat(EVENT_KEY);\nvar CLASS_NAME_FADE = 'fade';\nvar CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\n\nvar CLASS_NAME_SHOW = 'show';\nvar CLASS_NAME_SHOWING = 'showing';\nvar DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nvar Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\n/**\n * Class definition\n */\n\nvar Toast = /*#__PURE__*/function (_BaseComponent11) {\n  _inherits(Toast, _BaseComponent11);\n\n  var _super17 = _createSuper(Toast);\n\n  function Toast(element, config) {\n    var _this55;\n\n    _classCallCheck(this, Toast);\n\n    _this55 = _super17.call(this, element, config);\n    _this55._timeout = null;\n    _this55._hasMouseInteraction = false;\n    _this55._hasKeyboardInteraction = false;\n\n    _this55._setListeners();\n\n    return _this55;\n  } // Getters\n\n\n  _createClass(Toast, [{\n    key: \"show\",\n    value: // Public\n    function show() {\n      var _this56 = this;\n\n      var showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      var complete = function complete() {\n        _this56._element.classList.remove(CLASS_NAME_SHOWING);\n\n        EventHandler.trigger(_this56._element, EVENT_SHOWN);\n\n        _this56._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      var _this57 = this;\n\n      if (!this.isShown()) {\n        return;\n      }\n\n      var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      var complete = function complete() {\n        _this57._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n\n\n        _this57._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n\n        EventHandler.trigger(_this57._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n  }, {\n    key: \"dispose\",\n    value: function dispose() {\n      this._clearTimeout();\n\n      if (this.isShown()) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      _get(_getPrototypeOf(Toast.prototype), \"dispose\", this).call(this);\n    }\n  }, {\n    key: \"isShown\",\n    value: function isShown() {\n      return this._element.classList.contains(CLASS_NAME_SHOW);\n    } // Private\n\n  }, {\n    key: \"_maybeScheduleHide\",\n    value: function _maybeScheduleHide() {\n      var _this58 = this;\n\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(function () {\n        _this58.hide();\n      }, this._config.delay);\n    }\n  }, {\n    key: \"_onInteraction\",\n    value: function _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          {\n            this._hasMouseInteraction = isInteracting;\n            break;\n          }\n\n        case 'focusin':\n        case 'focusout':\n          {\n            this._hasKeyboardInteraction = isInteracting;\n            break;\n          }\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      var nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n  }, {\n    key: \"_setListeners\",\n    value: function _setListeners() {\n      var _this59 = this;\n\n      EventHandler.on(this._element, EVENT_MOUSEOVER, function (event) {\n        return _this59._onInteraction(event, true);\n      });\n      EventHandler.on(this._element, EVENT_MOUSEOUT, function (event) {\n        return _this59._onInteraction(event, false);\n      });\n      EventHandler.on(this._element, EVENT_FOCUSIN, function (event) {\n        return _this59._onInteraction(event, true);\n      });\n      EventHandler.on(this._element, EVENT_FOCUSOUT, function (event) {\n        return _this59._onInteraction(event, false);\n      });\n    }\n  }, {\n    key: \"_clearTimeout\",\n    value: function _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n  }], [{\n    key: \"Default\",\n    get: function get() {\n      return Default;\n    }\n  }, {\n    key: \"DefaultType\",\n    get: function get() {\n      return DefaultType;\n    }\n  }, {\n    key: \"NAME\",\n    get: function get() {\n      return NAME;\n    }\n  }, {\n    key: \"jQueryInterface\",\n    value: function jQueryInterface(config) {\n      return this.each(function () {\n        var data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\".concat(config, \"\\\"\"));\n          }\n\n          data[config](this);\n        }\n      });\n    }\n  }]);\n\n  return Toast;\n}(BaseComponent);\n/**\n * Data API implementation\n */\n\n\nenableDismissTrigger(Toast);\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast);\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","function affix(buttonText) {\n  return buttonText === 'Tag' || buttonText === 'Monat' ? 'r' : buttonText === 'Jahr' ? 's' : '';\n}\n\nvar l17 = {\n  code: 'de',\n  week: {\n    dow: 1,\n    doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n  },\n  buttonText: {\n    prev: 'Zurück',\n    next: 'Vor',\n    today: 'Heute',\n    year: 'Jahr',\n    month: 'Monat',\n    week: 'Woche',\n    day: 'Tag',\n    list: 'Terminübersicht'\n  },\n  weekText: 'KW',\n  weekTextLong: 'Woche',\n  allDayText: 'Ganztägig',\n  moreLinkText: function moreLinkText(n) {\n    return '+ weitere ' + n;\n  },\n  noEventsText: 'Keine Ereignisse anzuzeigen',\n  buttonHints: {\n    prev: function prev(buttonText) {\n      return \"Vorherige\".concat(affix(buttonText), \" \").concat(buttonText);\n    },\n    next: function next(buttonText) {\n      return \"N\\xE4chste\".concat(affix(buttonText), \" \").concat(buttonText);\n    },\n    today: function today(buttonText) {\n      // → Heute, Diese Woche, Dieser Monat, Dieses Jahr\n      if (buttonText === 'Tag') {\n        return 'Heute';\n      }\n\n      return \"Diese\".concat(affix(buttonText), \" \").concat(buttonText);\n    }\n  },\n  viewHint: function viewHint(buttonText) {\n    // → Tagesansicht, Wochenansicht, Monatsansicht, Jahresansicht\n    var glue = buttonText === 'Woche' ? 'n' : buttonText === 'Monat' ? 's' : 'es';\n    return buttonText + glue + 'ansicht';\n  },\n  navLinkHint: 'Gehe zu $0',\n  moreLinkHint: function moreLinkHint(eventCnt) {\n    return 'Zeige ' + (eventCnt === 1 ? 'ein weiteres Ereignis' : eventCnt + ' weitere Ereignisse');\n  },\n  closeHint: 'Schließen',\n  timeHint: 'Uhrzeit',\n  eventHint: 'Ereignis'\n};\nexport { l17 as default };","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { Splitter, hasBgRendering, createFormatter, ViewContextType, ContentContainer, BaseComponent, DateComponent, diffDays, buildNavLinkAttrs, WeekNumberContainer, getStickyHeaderDates, ViewContainer, SimpleScrollGrid, getStickyFooterScrollbar, NowTimer, NowIndicatorContainer, renderScrollShim, rangeContainsMarker, startOfDay, asRoughMs, createDuration, RefMap, PositionCache, MoreLinkContainer, SegHierarchy, groupIntersectingEntries, binarySearch, getEntrySpanEnd, buildEntryKey, StandardEvent, memoize, sortEventSegs, DayCellContainer, hasCustomDayCellContent, getSegMeta, buildIsoString, computeEarliestSegStart, buildEventRangeKey, BgEvent, renderFill, addDurations, multiplyDuration, wholeDivideDurations, Slicer, intersectRanges, formatIsoTimeString, DayHeader, DaySeriesModel, DayTableModel, injectStyles } from '@fullcalendar/core/internal.js';\nimport { createElement, createRef, Fragment } from '@fullcalendar/core/preact.js';\nimport { DayTable } from '@fullcalendar/daygrid/internal.js';\n\nvar AllDaySplitter = /*#__PURE__*/function (_Splitter) {\n  _inherits(AllDaySplitter, _Splitter);\n\n  var _super = _createSuper(AllDaySplitter);\n\n  function AllDaySplitter() {\n    _classCallCheck(this, AllDaySplitter);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(AllDaySplitter, [{\n    key: \"getKeyInfo\",\n    value: function getKeyInfo() {\n      return {\n        allDay: {},\n        timed: {}\n      };\n    }\n  }, {\n    key: \"getKeysForDateSpan\",\n    value: function getKeysForDateSpan(dateSpan) {\n      if (dateSpan.allDay) {\n        return ['allDay'];\n      }\n\n      return ['timed'];\n    }\n  }, {\n    key: \"getKeysForEventDef\",\n    value: function getKeysForEventDef(eventDef) {\n      if (!eventDef.allDay) {\n        return ['timed'];\n      }\n\n      if (hasBgRendering(eventDef)) {\n        return ['timed', 'allDay'];\n      }\n\n      return ['allDay'];\n    }\n  }]);\n\n  return AllDaySplitter;\n}(Splitter);\n\nvar DEFAULT_SLAT_LABEL_FORMAT = createFormatter({\n  hour: 'numeric',\n  minute: '2-digit',\n  omitZeroMinute: true,\n  meridiem: 'short'\n});\n\nfunction TimeColsAxisCell(props) {\n  var classNames = ['fc-timegrid-slot', 'fc-timegrid-slot-label', props.isLabeled ? 'fc-scrollgrid-shrink' : 'fc-timegrid-slot-minor'];\n  return createElement(ViewContextType.Consumer, null, function (context) {\n    if (!props.isLabeled) {\n      return createElement(\"td\", {\n        className: classNames.join(' '),\n        \"data-time\": props.isoTimeStr\n      });\n    }\n\n    var dateEnv = context.dateEnv,\n        options = context.options,\n        viewApi = context.viewApi;\n    var labelFormat = // TODO: fully pre-parse\n    options.slotLabelFormat == null ? DEFAULT_SLAT_LABEL_FORMAT : Array.isArray(options.slotLabelFormat) ? createFormatter(options.slotLabelFormat[0]) : createFormatter(options.slotLabelFormat);\n    var renderProps = {\n      level: 0,\n      time: props.time,\n      date: dateEnv.toDate(props.date),\n      view: viewApi,\n      text: dateEnv.format(props.date, labelFormat)\n    };\n    return createElement(ContentContainer, {\n      elTag: \"td\",\n      elClasses: classNames,\n      elAttrs: {\n        'data-time': props.isoTimeStr\n      },\n      renderProps: renderProps,\n      generatorName: \"slotLabelContent\",\n      customGenerator: options.slotLabelContent,\n      defaultGenerator: renderInnerContent,\n      classNameGenerator: options.slotLabelClassNames,\n      didMount: options.slotLabelDidMount,\n      willUnmount: options.slotLabelWillUnmount\n    }, function (InnerContent) {\n      return createElement(\"div\", {\n        className: \"fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame\"\n      }, createElement(InnerContent, {\n        elTag: \"div\",\n        elClasses: ['fc-timegrid-slot-label-cushion', 'fc-scrollgrid-shrink-cushion']\n      }));\n    });\n  });\n}\n\nfunction renderInnerContent(props) {\n  return props.text;\n}\n\nvar TimeBodyAxis = /*#__PURE__*/function (_BaseComponent) {\n  _inherits(TimeBodyAxis, _BaseComponent);\n\n  var _super2 = _createSuper(TimeBodyAxis);\n\n  function TimeBodyAxis() {\n    _classCallCheck(this, TimeBodyAxis);\n\n    return _super2.apply(this, arguments);\n  }\n\n  _createClass(TimeBodyAxis, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.slatMetas.map(function (slatMeta) {\n        return createElement(\"tr\", {\n          key: slatMeta.key\n        }, createElement(TimeColsAxisCell, Object.assign({}, slatMeta)));\n      });\n    }\n  }]);\n\n  return TimeBodyAxis;\n}(BaseComponent);\n\nvar DEFAULT_WEEK_NUM_FORMAT = createFormatter({\n  week: 'short'\n});\nvar AUTO_ALL_DAY_MAX_EVENT_ROWS = 5;\n\nvar TimeColsView = /*#__PURE__*/function (_DateComponent) {\n  _inherits(TimeColsView, _DateComponent);\n\n  var _super3 = _createSuper(TimeColsView);\n\n  function TimeColsView() {\n    var _this;\n\n    _classCallCheck(this, TimeColsView);\n\n    _this = _super3.apply(this, arguments);\n    _this.allDaySplitter = new AllDaySplitter(); // for use by subclasses\n\n    _this.headerElRef = createRef();\n    _this.rootElRef = createRef();\n    _this.scrollerElRef = createRef();\n    _this.state = {\n      slatCoords: null\n    };\n\n    _this.handleScrollTopRequest = function (scrollTop) {\n      var scrollerEl = _this.scrollerElRef.current;\n\n      if (scrollerEl) {\n        // TODO: not sure how this could ever be null. weirdness with the reducer\n        scrollerEl.scrollTop = scrollTop;\n      }\n    };\n    /* Header Render Methods\n    ------------------------------------------------------------------------------------------------------------------*/\n\n\n    _this.renderHeadAxis = function (rowKey) {\n      var frameHeight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n      var options = _this.context.options;\n      var dateProfile = _this.props.dateProfile;\n      var range = dateProfile.renderRange;\n      var dayCnt = diffDays(range.start, range.end); // only do in day views (to avoid doing in week views that dont need it)\n\n      var navLinkAttrs = dayCnt === 1 ? buildNavLinkAttrs(_this.context, range.start, 'week') : {};\n\n      if (options.weekNumbers && rowKey === 'day') {\n        return createElement(WeekNumberContainer, {\n          elTag: \"th\",\n          elClasses: ['fc-timegrid-axis', 'fc-scrollgrid-shrink'],\n          elAttrs: {\n            'aria-hidden': true\n          },\n          date: range.start,\n          defaultFormat: DEFAULT_WEEK_NUM_FORMAT\n        }, function (InnerContent) {\n          return createElement(\"div\", {\n            className: ['fc-timegrid-axis-frame', 'fc-scrollgrid-shrink-frame', 'fc-timegrid-axis-frame-liquid'].join(' '),\n            style: {\n              height: frameHeight\n            }\n          }, createElement(InnerContent, {\n            elTag: \"a\",\n            elClasses: ['fc-timegrid-axis-cushion', 'fc-scrollgrid-shrink-cushion', 'fc-scrollgrid-sync-inner'],\n            elAttrs: navLinkAttrs\n          }));\n        });\n      }\n\n      return createElement(\"th\", {\n        \"aria-hidden\": true,\n        className: \"fc-timegrid-axis\"\n      }, createElement(\"div\", {\n        className: \"fc-timegrid-axis-frame\",\n        style: {\n          height: frameHeight\n        }\n      }));\n    };\n    /* Table Component Render Methods\n    ------------------------------------------------------------------------------------------------------------------*/\n    // only a one-way height sync. we don't send the axis inner-content height to the DayGrid,\n    // but DayGrid still needs to have classNames on inner elements in order to measure.\n\n\n    _this.renderTableRowAxis = function (rowHeight) {\n      var _this$context = _this.context,\n          options = _this$context.options,\n          viewApi = _this$context.viewApi;\n      var renderProps = {\n        text: options.allDayText,\n        view: viewApi\n      };\n      return (// TODO: make reusable hook. used in list view too\n        createElement(ContentContainer, {\n          elTag: \"td\",\n          elClasses: ['fc-timegrid-axis', 'fc-scrollgrid-shrink'],\n          elAttrs: {\n            'aria-hidden': true\n          },\n          renderProps: renderProps,\n          generatorName: \"allDayContent\",\n          customGenerator: options.allDayContent,\n          defaultGenerator: renderAllDayInner,\n          classNameGenerator: options.allDayClassNames,\n          didMount: options.allDayDidMount,\n          willUnmount: options.allDayWillUnmount\n        }, function (InnerContent) {\n          return createElement(\"div\", {\n            className: ['fc-timegrid-axis-frame', 'fc-scrollgrid-shrink-frame', rowHeight == null ? ' fc-timegrid-axis-frame-liquid' : ''].join(' '),\n            style: {\n              height: rowHeight\n            }\n          }, createElement(InnerContent, {\n            elTag: \"span\",\n            elClasses: ['fc-timegrid-axis-cushion', 'fc-scrollgrid-shrink-cushion', 'fc-scrollgrid-sync-inner']\n          }));\n        })\n      );\n    };\n\n    _this.handleSlatCoords = function (slatCoords) {\n      _this.setState({\n        slatCoords: slatCoords\n      });\n    };\n\n    return _this;\n  } // rendering\n  // ----------------------------------------------------------------------------------------------------\n\n\n  _createClass(TimeColsView, [{\n    key: \"renderSimpleLayout\",\n    value: function renderSimpleLayout(headerRowContent, allDayContent, timeContent) {\n      var context = this.context,\n          props = this.props;\n      var sections = [];\n      var stickyHeaderDates = getStickyHeaderDates(context.options);\n\n      if (headerRowContent) {\n        sections.push({\n          type: 'header',\n          key: 'header',\n          isSticky: stickyHeaderDates,\n          chunk: {\n            elRef: this.headerElRef,\n            tableClassName: 'fc-col-header',\n            rowContent: headerRowContent\n          }\n        });\n      }\n\n      if (allDayContent) {\n        sections.push({\n          type: 'body',\n          key: 'all-day',\n          chunk: {\n            content: allDayContent\n          }\n        });\n        sections.push({\n          type: 'body',\n          key: 'all-day-divider',\n          outerContent: // TODO: rename to cellContent so don't need to define <tr>?\n          createElement(\"tr\", {\n            role: \"presentation\",\n            className: \"fc-scrollgrid-section\"\n          }, createElement(\"td\", {\n            className: 'fc-timegrid-divider ' + context.theme.getClass('tableCellShaded')\n          }))\n        });\n      }\n\n      sections.push({\n        type: 'body',\n        key: 'body',\n        liquid: true,\n        expandRows: Boolean(context.options.expandRows),\n        chunk: {\n          scrollerElRef: this.scrollerElRef,\n          content: timeContent\n        }\n      });\n      return createElement(ViewContainer, {\n        elRef: this.rootElRef,\n        elClasses: ['fc-timegrid'],\n        viewSpec: context.viewSpec\n      }, createElement(SimpleScrollGrid, {\n        liquid: !props.isHeightAuto && !props.forPrint,\n        collapsibleWidth: props.forPrint,\n        cols: [{\n          width: 'shrink'\n        }],\n        sections: sections\n      }));\n    }\n  }, {\n    key: \"renderHScrollLayout\",\n    value: function renderHScrollLayout(headerRowContent, allDayContent, timeContent, colCnt, dayMinWidth, slatMetas, slatCoords) {\n      var _this2 = this;\n\n      var ScrollGrid = this.context.pluginHooks.scrollGridImpl;\n\n      if (!ScrollGrid) {\n        throw new Error('No ScrollGrid implementation');\n      }\n\n      var context = this.context,\n          props = this.props;\n      var stickyHeaderDates = !props.forPrint && getStickyHeaderDates(context.options);\n      var stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(context.options);\n      var sections = [];\n\n      if (headerRowContent) {\n        sections.push({\n          type: 'header',\n          key: 'header',\n          isSticky: stickyHeaderDates,\n          syncRowHeights: true,\n          chunks: [{\n            key: 'axis',\n            rowContent: function rowContent(arg) {\n              return createElement(\"tr\", {\n                role: \"presentation\"\n              }, _this2.renderHeadAxis('day', arg.rowSyncHeights[0]));\n            }\n          }, {\n            key: 'cols',\n            elRef: this.headerElRef,\n            tableClassName: 'fc-col-header',\n            rowContent: headerRowContent\n          }]\n        });\n      }\n\n      if (allDayContent) {\n        sections.push({\n          type: 'body',\n          key: 'all-day',\n          syncRowHeights: true,\n          chunks: [{\n            key: 'axis',\n            rowContent: function rowContent(contentArg) {\n              return createElement(\"tr\", {\n                role: \"presentation\"\n              }, _this2.renderTableRowAxis(contentArg.rowSyncHeights[0]));\n            }\n          }, {\n            key: 'cols',\n            content: allDayContent\n          }]\n        });\n        sections.push({\n          key: 'all-day-divider',\n          type: 'body',\n          outerContent: // TODO: rename to cellContent so don't need to define <tr>?\n          createElement(\"tr\", {\n            role: \"presentation\",\n            className: \"fc-scrollgrid-section\"\n          }, createElement(\"td\", {\n            colSpan: 2,\n            className: 'fc-timegrid-divider ' + context.theme.getClass('tableCellShaded')\n          }))\n        });\n      }\n\n      var isNowIndicator = context.options.nowIndicator;\n      sections.push({\n        type: 'body',\n        key: 'body',\n        liquid: true,\n        expandRows: Boolean(context.options.expandRows),\n        chunks: [{\n          key: 'axis',\n          content: function content(arg) {\n            return (// TODO: make this now-indicator arrow more DRY with TimeColsContent\n              createElement(\"div\", {\n                className: \"fc-timegrid-axis-chunk\"\n              }, createElement(\"table\", {\n                \"aria-hidden\": true,\n                style: {\n                  height: arg.expandRows ? arg.clientHeight : ''\n                }\n              }, arg.tableColGroupNode, createElement(\"tbody\", null, createElement(TimeBodyAxis, {\n                slatMetas: slatMetas\n              }))), createElement(\"div\", {\n                className: \"fc-timegrid-now-indicator-container\"\n              }, createElement(NowTimer, {\n                unit: isNowIndicator ? 'minute' : 'day'\n                /* hacky */\n\n              }, function (nowDate) {\n                var nowIndicatorTop = isNowIndicator && slatCoords && slatCoords.safeComputeTop(nowDate); // might return void\n\n                if (typeof nowIndicatorTop === 'number') {\n                  return createElement(NowIndicatorContainer, {\n                    elClasses: ['fc-timegrid-now-indicator-arrow'],\n                    elStyle: {\n                      top: nowIndicatorTop\n                    },\n                    isAxis: true,\n                    date: nowDate\n                  });\n                }\n\n                return null;\n              })))\n            );\n          }\n        }, {\n          key: 'cols',\n          scrollerElRef: this.scrollerElRef,\n          content: timeContent\n        }]\n      });\n\n      if (stickyFooterScrollbar) {\n        sections.push({\n          key: 'footer',\n          type: 'footer',\n          isSticky: true,\n          chunks: [{\n            key: 'axis',\n            content: renderScrollShim\n          }, {\n            key: 'cols',\n            content: renderScrollShim\n          }]\n        });\n      }\n\n      return createElement(ViewContainer, {\n        elRef: this.rootElRef,\n        elClasses: ['fc-timegrid'],\n        viewSpec: context.viewSpec\n      }, createElement(ScrollGrid, {\n        liquid: !props.isHeightAuto && !props.forPrint,\n        forPrint: props.forPrint,\n        collapsibleWidth: false,\n        colGroups: [{\n          width: 'shrink',\n          cols: [{\n            width: 'shrink'\n          }]\n        }, {\n          cols: [{\n            span: colCnt,\n            minWidth: dayMinWidth\n          }]\n        }],\n        sections: sections\n      }));\n    }\n    /* Dimensions\n    ------------------------------------------------------------------------------------------------------------------*/\n\n  }, {\n    key: \"getAllDayMaxEventProps\",\n    value: function getAllDayMaxEventProps() {\n      var _this$context$options = this.context.options,\n          dayMaxEvents = _this$context$options.dayMaxEvents,\n          dayMaxEventRows = _this$context$options.dayMaxEventRows;\n\n      if (dayMaxEvents === true || dayMaxEventRows === true) {\n        // is auto?\n        dayMaxEvents = undefined;\n        dayMaxEventRows = AUTO_ALL_DAY_MAX_EVENT_ROWS; // make sure \"auto\" goes to a real number\n      }\n\n      return {\n        dayMaxEvents: dayMaxEvents,\n        dayMaxEventRows: dayMaxEventRows\n      };\n    }\n  }]);\n\n  return TimeColsView;\n}(DateComponent);\n\nfunction renderAllDayInner(renderProps) {\n  return renderProps.text;\n}\n\nvar TimeColsSlatsCoords = /*#__PURE__*/function () {\n  function TimeColsSlatsCoords(positions, dateProfile, slotDuration) {\n    _classCallCheck(this, TimeColsSlatsCoords);\n\n    this.positions = positions;\n    this.dateProfile = dateProfile;\n    this.slotDuration = slotDuration;\n  }\n\n  _createClass(TimeColsSlatsCoords, [{\n    key: \"safeComputeTop\",\n    value: function safeComputeTop(date) {\n      var dateProfile = this.dateProfile;\n\n      if (rangeContainsMarker(dateProfile.currentRange, date)) {\n        var startOfDayDate = startOfDay(date);\n        var timeMs = date.valueOf() - startOfDayDate.valueOf();\n\n        if (timeMs >= asRoughMs(dateProfile.slotMinTime) && timeMs < asRoughMs(dateProfile.slotMaxTime)) {\n          return this.computeTimeTop(createDuration(timeMs));\n        }\n      }\n\n      return null;\n    } // Computes the top coordinate, relative to the bounds of the grid, of the given date.\n    // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\n\n  }, {\n    key: \"computeDateTop\",\n    value: function computeDateTop(when, startOfDayDate) {\n      if (!startOfDayDate) {\n        startOfDayDate = startOfDay(when);\n      }\n\n      return this.computeTimeTop(createDuration(when.valueOf() - startOfDayDate.valueOf()));\n    } // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\n    // This is a makeshify way to compute the time-top. Assumes all slatMetas dates are uniform.\n    // Eventually allow computation with arbirary slat dates.\n\n  }, {\n    key: \"computeTimeTop\",\n    value: function computeTimeTop(duration) {\n      var positions = this.positions,\n          dateProfile = this.dateProfile;\n      var len = positions.els.length; // floating-point value of # of slots covered\n\n      var slatCoverage = (duration.milliseconds - asRoughMs(dateProfile.slotMinTime)) / asRoughMs(this.slotDuration);\n      var slatIndex;\n      var slatRemainder; // compute a floating-point number for how many slats should be progressed through.\n      // from 0 to number of slats (inclusive)\n      // constrained because slotMinTime/slotMaxTime might be customized.\n\n      slatCoverage = Math.max(0, slatCoverage);\n      slatCoverage = Math.min(len, slatCoverage); // an integer index of the furthest whole slat\n      // from 0 to number slats (*exclusive*, so len-1)\n\n      slatIndex = Math.floor(slatCoverage);\n      slatIndex = Math.min(slatIndex, len - 1); // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.\n      // could be 1.0 if slatCoverage is covering *all* the slots\n\n      slatRemainder = slatCoverage - slatIndex;\n      return positions.tops[slatIndex] + positions.getHeight(slatIndex) * slatRemainder;\n    }\n  }]);\n\n  return TimeColsSlatsCoords;\n}();\n\nvar TimeColsSlatsBody = /*#__PURE__*/function (_BaseComponent2) {\n  _inherits(TimeColsSlatsBody, _BaseComponent2);\n\n  var _super4 = _createSuper(TimeColsSlatsBody);\n\n  function TimeColsSlatsBody() {\n    _classCallCheck(this, TimeColsSlatsBody);\n\n    return _super4.apply(this, arguments);\n  }\n\n  _createClass(TimeColsSlatsBody, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          context = this.context;\n      var options = context.options;\n      var slatElRefs = props.slatElRefs;\n      return createElement(\"tbody\", null, props.slatMetas.map(function (slatMeta, i) {\n        var renderProps = {\n          time: slatMeta.time,\n          date: context.dateEnv.toDate(slatMeta.date),\n          view: context.viewApi\n        };\n        return createElement(\"tr\", {\n          key: slatMeta.key,\n          ref: slatElRefs.createRef(slatMeta.key)\n        }, props.axis && createElement(TimeColsAxisCell, Object.assign({}, slatMeta)), createElement(ContentContainer, {\n          elTag: \"td\",\n          elClasses: ['fc-timegrid-slot', 'fc-timegrid-slot-lane', !slatMeta.isLabeled && 'fc-timegrid-slot-minor'],\n          elAttrs: {\n            'data-time': slatMeta.isoTimeStr\n          },\n          renderProps: renderProps,\n          generatorName: \"slotLaneContent\",\n          customGenerator: options.slotLaneContent,\n          classNameGenerator: options.slotLaneClassNames,\n          didMount: options.slotLaneDidMount,\n          willUnmount: options.slotLaneWillUnmount\n        }));\n      }));\n    }\n  }]);\n\n  return TimeColsSlatsBody;\n}(BaseComponent);\n/*\nfor the horizontal \"slats\" that run width-wise. Has a time axis on a side. Depends on RTL.\n*/\n\n\nvar TimeColsSlats = /*#__PURE__*/function (_BaseComponent3) {\n  _inherits(TimeColsSlats, _BaseComponent3);\n\n  var _super5 = _createSuper(TimeColsSlats);\n\n  function TimeColsSlats() {\n    var _this3;\n\n    _classCallCheck(this, TimeColsSlats);\n\n    _this3 = _super5.apply(this, arguments);\n    _this3.rootElRef = createRef();\n    _this3.slatElRefs = new RefMap();\n    return _this3;\n  }\n\n  _createClass(TimeColsSlats, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          context = this.context;\n      return createElement(\"div\", {\n        ref: this.rootElRef,\n        className: \"fc-timegrid-slots\"\n      }, createElement(\"table\", {\n        \"aria-hidden\": true,\n        className: context.theme.getClass('table'),\n        style: {\n          minWidth: props.tableMinWidth,\n          width: props.clientWidth,\n          height: props.minHeight\n        }\n      }, props.tableColGroupNode\n      /* relies on there only being a single <col> for the axis */\n      , createElement(TimeColsSlatsBody, {\n        slatElRefs: this.slatElRefs,\n        axis: props.axis,\n        slatMetas: props.slatMetas\n      })));\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.updateSizing();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      this.updateSizing();\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.props.onCoords) {\n        this.props.onCoords(null);\n      }\n    }\n  }, {\n    key: \"updateSizing\",\n    value: function updateSizing() {\n      var context = this.context,\n          props = this.props;\n\n      if (props.onCoords && props.clientWidth !== null // means sizing has stabilized\n      ) {\n        var rootEl = this.rootElRef.current;\n\n        if (rootEl.offsetHeight) {\n          // not hidden by css\n          props.onCoords(new TimeColsSlatsCoords(new PositionCache(this.rootElRef.current, collectSlatEls(this.slatElRefs.currentMap, props.slatMetas), false, true), this.props.dateProfile, context.options.slotDuration));\n        }\n      }\n    }\n  }]);\n\n  return TimeColsSlats;\n}(BaseComponent);\n\nfunction collectSlatEls(elMap, slatMetas) {\n  return slatMetas.map(function (slatMeta) {\n    return elMap[slatMeta.key];\n  });\n}\n\nfunction splitSegsByCol(segs, colCnt) {\n  var segsByCol = [];\n  var i;\n\n  for (i = 0; i < colCnt; i += 1) {\n    segsByCol.push([]);\n  }\n\n  if (segs) {\n    for (i = 0; i < segs.length; i += 1) {\n      segsByCol[segs[i].col].push(segs[i]);\n    }\n  }\n\n  return segsByCol;\n}\n\nfunction splitInteractionByCol(ui, colCnt) {\n  var byRow = [];\n\n  if (!ui) {\n    for (var i = 0; i < colCnt; i += 1) {\n      byRow[i] = null;\n    }\n  } else {\n    for (var _i = 0; _i < colCnt; _i += 1) {\n      byRow[_i] = {\n        affectedInstances: ui.affectedInstances,\n        isEvent: ui.isEvent,\n        segs: []\n      };\n    }\n\n    var _iterator = _createForOfIteratorHelper(ui.segs),\n        _step;\n\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var seg = _step.value;\n        byRow[seg.col].segs.push(seg);\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n  }\n\n  return byRow;\n}\n\nvar TimeColMoreLink = /*#__PURE__*/function (_BaseComponent4) {\n  _inherits(TimeColMoreLink, _BaseComponent4);\n\n  var _super6 = _createSuper(TimeColMoreLink);\n\n  function TimeColMoreLink() {\n    _classCallCheck(this, TimeColMoreLink);\n\n    return _super6.apply(this, arguments);\n  }\n\n  _createClass(TimeColMoreLink, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      return createElement(MoreLinkContainer, {\n        elClasses: ['fc-timegrid-more-link'],\n        elStyle: {\n          top: props.top,\n          bottom: props.bottom\n        },\n        allDayDate: null,\n        moreCnt: props.hiddenSegs.length,\n        allSegs: props.hiddenSegs,\n        hiddenSegs: props.hiddenSegs,\n        extraDateSpan: props.extraDateSpan,\n        dateProfile: props.dateProfile,\n        todayRange: props.todayRange,\n        popoverContent: function popoverContent() {\n          return renderPlainFgSegs(props.hiddenSegs, props);\n        },\n        defaultGenerator: renderMoreLinkInner,\n        forceTimed: true\n      }, function (InnerContent) {\n        return createElement(InnerContent, {\n          elTag: \"div\",\n          elClasses: ['fc-timegrid-more-link-inner', 'fc-sticky']\n        });\n      });\n    }\n  }]);\n\n  return TimeColMoreLink;\n}(BaseComponent);\n\nfunction renderMoreLinkInner(props) {\n  return props.shortText;\n} // segInputs assumed sorted\n\n\nfunction buildPositioning(segInputs, strictOrder, maxStackCnt) {\n  var hierarchy = new SegHierarchy();\n\n  if (strictOrder != null) {\n    hierarchy.strictOrder = strictOrder;\n  }\n\n  if (maxStackCnt != null) {\n    hierarchy.maxStackCnt = maxStackCnt;\n  }\n\n  var hiddenEntries = hierarchy.addSegs(segInputs);\n  var hiddenGroups = groupIntersectingEntries(hiddenEntries);\n  var web = buildWeb(hierarchy);\n  web = stretchWeb(web, 1); // all levelCoords/thickness will have 0.0-1.0\n\n  var segRects = webToRects(web);\n  return {\n    segRects: segRects,\n    hiddenGroups: hiddenGroups\n  };\n}\n\nfunction buildWeb(hierarchy) {\n  var entriesByLevel = hierarchy.entriesByLevel;\n  var buildNode = cacheable(function (level, lateral) {\n    return level + ':' + lateral;\n  }, function (level, lateral) {\n    var siblingRange = findNextLevelSegs(hierarchy, level, lateral);\n    var nextLevelRes = buildNodes(siblingRange, buildNode);\n    var entry = entriesByLevel[level][lateral];\n    return [Object.assign(Object.assign({}, entry), {\n      nextLevelNodes: nextLevelRes[0]\n    }), entry.thickness + nextLevelRes[1] // the pressure builds\n    ];\n  });\n  return buildNodes(entriesByLevel.length ? {\n    level: 0,\n    lateralStart: 0,\n    lateralEnd: entriesByLevel[0].length\n  } : null, buildNode)[0];\n}\n\nfunction buildNodes(siblingRange, buildNode) {\n  if (!siblingRange) {\n    return [[], 0];\n  }\n\n  var level = siblingRange.level,\n      lateralStart = siblingRange.lateralStart,\n      lateralEnd = siblingRange.lateralEnd;\n  var lateral = lateralStart;\n  var pairs = [];\n\n  while (lateral < lateralEnd) {\n    pairs.push(buildNode(level, lateral));\n    lateral += 1;\n  }\n\n  pairs.sort(cmpDescPressures);\n  return [pairs.map(extractNode), pairs[0][1] // first item's pressure\n  ];\n}\n\nfunction cmpDescPressures(a, b) {\n  return b[1] - a[1];\n}\n\nfunction extractNode(a) {\n  return a[0];\n}\n\nfunction findNextLevelSegs(hierarchy, subjectLevel, subjectLateral) {\n  var levelCoords = hierarchy.levelCoords,\n      entriesByLevel = hierarchy.entriesByLevel;\n  var subjectEntry = entriesByLevel[subjectLevel][subjectLateral];\n  var afterSubject = levelCoords[subjectLevel] + subjectEntry.thickness;\n  var levelCnt = levelCoords.length;\n  var level = subjectLevel; // skip past levels that are too high up\n\n  for (; level < levelCnt && levelCoords[level] < afterSubject; level += 1) {\n    ;\n  } // do nothing\n\n\n  for (; level < levelCnt; level += 1) {\n    var entries = entriesByLevel[level];\n    var entry = void 0;\n    var searchIndex = binarySearch(entries, subjectEntry.span.start, getEntrySpanEnd);\n    var lateralStart = searchIndex[0] + searchIndex[1]; // if exact match (which doesn't collide), go to next one\n\n    var lateralEnd = lateralStart;\n\n    while ( // loop through entries that horizontally intersect\n    (entry = entries[lateralEnd]) && // but not past the whole seg list\n    entry.span.start < subjectEntry.span.end) {\n      lateralEnd += 1;\n    }\n\n    if (lateralStart < lateralEnd) {\n      return {\n        level: level,\n        lateralStart: lateralStart,\n        lateralEnd: lateralEnd\n      };\n    }\n  }\n\n  return null;\n}\n\nfunction stretchWeb(topLevelNodes, totalThickness) {\n  var stretchNode = cacheable(function (node, startCoord, prevThickness) {\n    return buildEntryKey(node);\n  }, function (node, startCoord, prevThickness) {\n    var nextLevelNodes = node.nextLevelNodes,\n        thickness = node.thickness;\n    var allThickness = thickness + prevThickness;\n    var thicknessFraction = thickness / allThickness;\n    var endCoord;\n    var newChildren = [];\n\n    if (!nextLevelNodes.length) {\n      endCoord = totalThickness;\n    } else {\n      var _iterator2 = _createForOfIteratorHelper(nextLevelNodes),\n          _step2;\n\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var childNode = _step2.value;\n\n          if (endCoord === undefined) {\n            var res = stretchNode(childNode, startCoord, allThickness);\n            endCoord = res[0];\n            newChildren.push(res[1]);\n          } else {\n            var _res = stretchNode(childNode, endCoord, 0);\n\n            newChildren.push(_res[1]);\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n    }\n\n    var newThickness = (endCoord - startCoord) * thicknessFraction;\n    return [endCoord - newThickness, Object.assign(Object.assign({}, node), {\n      thickness: newThickness,\n      nextLevelNodes: newChildren\n    })];\n  });\n  return topLevelNodes.map(function (node) {\n    return stretchNode(node, 0, 0)[1];\n  });\n} // not sorted in any particular order\n\n\nfunction webToRects(topLevelNodes) {\n  var rects = [];\n  var processNode = cacheable(function (node, levelCoord, stackDepth) {\n    return buildEntryKey(node);\n  }, function (node, levelCoord, stackDepth) {\n    var rect = Object.assign(Object.assign({}, node), {\n      levelCoord: levelCoord,\n      stackDepth: stackDepth,\n      stackForward: 0\n    });\n    rects.push(rect);\n    return rect.stackForward = processNodes(node.nextLevelNodes, levelCoord + node.thickness, stackDepth + 1) + 1;\n  });\n\n  function processNodes(nodes, levelCoord, stackDepth) {\n    var stackForward = 0;\n\n    var _iterator3 = _createForOfIteratorHelper(nodes),\n        _step3;\n\n    try {\n      for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n        var node = _step3.value;\n        stackForward = Math.max(processNode(node, levelCoord, stackDepth), stackForward);\n      }\n    } catch (err) {\n      _iterator3.e(err);\n    } finally {\n      _iterator3.f();\n    }\n\n    return stackForward;\n  }\n\n  processNodes(topLevelNodes, 0, 0);\n  return rects; // TODO: sort rects by levelCoord to be consistent with toRects?\n} // TODO: move to general util\n\n\nfunction cacheable(keyFunc, workFunc) {\n  var cache = {};\n  return function () {\n    var key = keyFunc.apply(void 0, arguments);\n    return key in cache ? cache[key] : cache[key] = workFunc.apply(void 0, arguments);\n  };\n}\n\nfunction computeSegVCoords(segs, colDate) {\n  var slatCoords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n  var eventMinHeight = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n  var vcoords = [];\n\n  if (slatCoords) {\n    for (var i = 0; i < segs.length; i += 1) {\n      var seg = segs[i];\n      var spanStart = slatCoords.computeDateTop(seg.start, colDate);\n      var spanEnd = Math.max(spanStart + (eventMinHeight || 0), // :(\n      slatCoords.computeDateTop(seg.end, colDate));\n      vcoords.push({\n        start: Math.round(spanStart),\n        end: Math.round(spanEnd) //\n\n      });\n    }\n  }\n\n  return vcoords;\n}\n\nfunction computeFgSegPlacements(segs, segVCoords, // might not have for every seg\neventOrderStrict, eventMaxStack) {\n  var segInputs = [];\n  var dumbSegs = []; // segs without coords\n\n  for (var i = 0; i < segs.length; i += 1) {\n    var vcoords = segVCoords[i];\n\n    if (vcoords) {\n      segInputs.push({\n        index: i,\n        thickness: 1,\n        span: vcoords\n      });\n    } else {\n      dumbSegs.push(segs[i]);\n    }\n  }\n\n  var _buildPositioning = buildPositioning(segInputs, eventOrderStrict, eventMaxStack),\n      segRects = _buildPositioning.segRects,\n      hiddenGroups = _buildPositioning.hiddenGroups;\n\n  var segPlacements = [];\n\n  var _iterator4 = _createForOfIteratorHelper(segRects),\n      _step4;\n\n  try {\n    for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n      var segRect = _step4.value;\n      segPlacements.push({\n        seg: segs[segRect.index],\n        rect: segRect\n      });\n    }\n  } catch (err) {\n    _iterator4.e(err);\n  } finally {\n    _iterator4.f();\n  }\n\n  for (var _i2 = 0, _dumbSegs = dumbSegs; _i2 < _dumbSegs.length; _i2++) {\n    var dumbSeg = _dumbSegs[_i2];\n    segPlacements.push({\n      seg: dumbSeg,\n      rect: null\n    });\n  }\n\n  return {\n    segPlacements: segPlacements,\n    hiddenGroups: hiddenGroups\n  };\n}\n\nvar DEFAULT_TIME_FORMAT = createFormatter({\n  hour: 'numeric',\n  minute: '2-digit',\n  meridiem: false\n});\n\nvar TimeColEvent = /*#__PURE__*/function (_BaseComponent5) {\n  _inherits(TimeColEvent, _BaseComponent5);\n\n  var _super7 = _createSuper(TimeColEvent);\n\n  function TimeColEvent() {\n    _classCallCheck(this, TimeColEvent);\n\n    return _super7.apply(this, arguments);\n  }\n\n  _createClass(TimeColEvent, [{\n    key: \"render\",\n    value: function render() {\n      return createElement(StandardEvent, Object.assign({}, this.props, {\n        elClasses: ['fc-timegrid-event', 'fc-v-event', this.props.isShort && 'fc-timegrid-event-short'],\n        defaultTimeFormat: DEFAULT_TIME_FORMAT\n      }));\n    }\n  }]);\n\n  return TimeColEvent;\n}(BaseComponent);\n\nvar TimeCol = /*#__PURE__*/function (_BaseComponent6) {\n  _inherits(TimeCol, _BaseComponent6);\n\n  var _super8 = _createSuper(TimeCol);\n\n  function TimeCol() {\n    var _this4;\n\n    _classCallCheck(this, TimeCol);\n\n    _this4 = _super8.apply(this, arguments);\n    _this4.sortEventSegs = memoize(sortEventSegs);\n    return _this4;\n  } // TODO: memoize event-placement?\n\n\n  _createClass(TimeCol, [{\n    key: \"render\",\n    value: function render() {\n      var _this5 = this;\n\n      var props = this.props,\n          context = this.context;\n      var options = context.options;\n      var isSelectMirror = options.selectMirror;\n      var mirrorSegs = // yuck\n      props.eventDrag && props.eventDrag.segs || props.eventResize && props.eventResize.segs || isSelectMirror && props.dateSelectionSegs || [];\n      var interactionAffectedInstances = // TODO: messy way to compute this\n      props.eventDrag && props.eventDrag.affectedInstances || props.eventResize && props.eventResize.affectedInstances || {};\n      var sortedFgSegs = this.sortEventSegs(props.fgEventSegs, options.eventOrder);\n      return createElement(DayCellContainer, {\n        elTag: \"td\",\n        elRef: props.elRef,\n        elClasses: ['fc-timegrid-col'].concat(_toConsumableArray(props.extraClassNames || [])),\n        elAttrs: Object.assign({\n          role: 'gridcell'\n        }, props.extraDataAttrs),\n        date: props.date,\n        dateProfile: props.dateProfile,\n        todayRange: props.todayRange,\n        extraRenderProps: props.extraRenderProps\n      }, function (InnerContent) {\n        return createElement(\"div\", {\n          className: \"fc-timegrid-col-frame\"\n        }, createElement(\"div\", {\n          className: \"fc-timegrid-col-bg\"\n        }, _this5.renderFillSegs(props.businessHourSegs, 'non-business'), _this5.renderFillSegs(props.bgEventSegs, 'bg-event'), _this5.renderFillSegs(props.dateSelectionSegs, 'highlight')), createElement(\"div\", {\n          className: \"fc-timegrid-col-events\"\n        }, _this5.renderFgSegs(sortedFgSegs, interactionAffectedInstances, false, false, false)), createElement(\"div\", {\n          className: \"fc-timegrid-col-events\"\n        }, _this5.renderFgSegs(mirrorSegs, {}, Boolean(props.eventDrag), Boolean(props.eventResize), Boolean(isSelectMirror), 'mirror')), createElement(\"div\", {\n          className: \"fc-timegrid-now-indicator-container\"\n        }, _this5.renderNowIndicator(props.nowIndicatorSegs)), hasCustomDayCellContent(options) && createElement(InnerContent, {\n          elTag: \"div\",\n          elClasses: ['fc-timegrid-col-misc']\n        }));\n      });\n    }\n  }, {\n    key: \"renderFgSegs\",\n    value: function renderFgSegs(sortedFgSegs, segIsInvisible, isDragging, isResizing, isDateSelecting, forcedKey) {\n      var props = this.props;\n\n      if (props.forPrint) {\n        return renderPlainFgSegs(sortedFgSegs, props);\n      }\n\n      return this.renderPositionedFgSegs(sortedFgSegs, segIsInvisible, isDragging, isResizing, isDateSelecting, forcedKey);\n    }\n  }, {\n    key: \"renderPositionedFgSegs\",\n    value: function renderPositionedFgSegs(segs, // if not mirror, needs to be sorted\n    segIsInvisible, isDragging, isResizing, isDateSelecting, forcedKey) {\n      var _this6 = this;\n\n      var _this$context$options2 = this.context.options,\n          eventMaxStack = _this$context$options2.eventMaxStack,\n          eventShortHeight = _this$context$options2.eventShortHeight,\n          eventOrderStrict = _this$context$options2.eventOrderStrict,\n          eventMinHeight = _this$context$options2.eventMinHeight;\n      var _this$props = this.props,\n          date = _this$props.date,\n          slatCoords = _this$props.slatCoords,\n          eventSelection = _this$props.eventSelection,\n          todayRange = _this$props.todayRange,\n          nowDate = _this$props.nowDate;\n      var isMirror = isDragging || isResizing || isDateSelecting;\n      var segVCoords = computeSegVCoords(segs, date, slatCoords, eventMinHeight);\n\n      var _computeFgSegPlacemen = computeFgSegPlacements(segs, segVCoords, eventOrderStrict, eventMaxStack),\n          segPlacements = _computeFgSegPlacemen.segPlacements,\n          hiddenGroups = _computeFgSegPlacemen.hiddenGroups;\n\n      return createElement(Fragment, null, this.renderHiddenGroups(hiddenGroups, segs), segPlacements.map(function (segPlacement) {\n        var seg = segPlacement.seg,\n            rect = segPlacement.rect;\n        var instanceId = seg.eventRange.instance.instanceId;\n        var isVisible = isMirror || Boolean(!segIsInvisible[instanceId] && rect);\n        var vStyle = computeSegVStyle(rect && rect.span);\n        var hStyle = !isMirror && rect ? _this6.computeSegHStyle(rect) : {\n          left: 0,\n          right: 0\n        };\n        var isInset = Boolean(rect) && rect.stackForward > 0;\n        var isShort = Boolean(rect) && rect.span.end - rect.span.start < eventShortHeight; // look at other places for this problem\n\n        return createElement(\"div\", {\n          className: 'fc-timegrid-event-harness' + (isInset ? ' fc-timegrid-event-harness-inset' : ''),\n          key: forcedKey || instanceId,\n          style: Object.assign(Object.assign({\n            visibility: isVisible ? '' : 'hidden'\n          }, vStyle), hStyle)\n        }, createElement(TimeColEvent, Object.assign({\n          seg: seg,\n          isDragging: isDragging,\n          isResizing: isResizing,\n          isDateSelecting: isDateSelecting,\n          isSelected: instanceId === eventSelection,\n          isShort: isShort\n        }, getSegMeta(seg, todayRange, nowDate))));\n      }));\n    } // will already have eventMinHeight applied because segInputs already had it\n\n  }, {\n    key: \"renderHiddenGroups\",\n    value: function renderHiddenGroups(hiddenGroups, segs) {\n      var _this$props2 = this.props,\n          extraDateSpan = _this$props2.extraDateSpan,\n          dateProfile = _this$props2.dateProfile,\n          todayRange = _this$props2.todayRange,\n          nowDate = _this$props2.nowDate,\n          eventSelection = _this$props2.eventSelection,\n          eventDrag = _this$props2.eventDrag,\n          eventResize = _this$props2.eventResize;\n      return createElement(Fragment, null, hiddenGroups.map(function (hiddenGroup) {\n        var positionCss = computeSegVStyle(hiddenGroup.span);\n        var hiddenSegs = compileSegsFromEntries(hiddenGroup.entries, segs);\n        return createElement(TimeColMoreLink, {\n          key: buildIsoString(computeEarliestSegStart(hiddenSegs)),\n          hiddenSegs: hiddenSegs,\n          top: positionCss.top,\n          bottom: positionCss.bottom,\n          extraDateSpan: extraDateSpan,\n          dateProfile: dateProfile,\n          todayRange: todayRange,\n          nowDate: nowDate,\n          eventSelection: eventSelection,\n          eventDrag: eventDrag,\n          eventResize: eventResize\n        });\n      }));\n    }\n  }, {\n    key: \"renderFillSegs\",\n    value: function renderFillSegs(segs, fillType) {\n      var props = this.props,\n          context = this.context;\n      var segVCoords = computeSegVCoords(segs, props.date, props.slatCoords, context.options.eventMinHeight); // don't assume all populated\n\n      var children = segVCoords.map(function (vcoords, i) {\n        var seg = segs[i];\n        return createElement(\"div\", {\n          key: buildEventRangeKey(seg.eventRange),\n          className: \"fc-timegrid-bg-harness\",\n          style: computeSegVStyle(vcoords)\n        }, fillType === 'bg-event' ? createElement(BgEvent, Object.assign({\n          seg: seg\n        }, getSegMeta(seg, props.todayRange, props.nowDate))) : renderFill(fillType));\n      });\n      return createElement(Fragment, null, children);\n    }\n  }, {\n    key: \"renderNowIndicator\",\n    value: function renderNowIndicator(segs) {\n      var _this$props3 = this.props,\n          slatCoords = _this$props3.slatCoords,\n          date = _this$props3.date;\n\n      if (!slatCoords) {\n        return null;\n      }\n\n      return segs.map(function (seg, i) {\n        return createElement(NowIndicatorContainer // key doesn't matter. will only ever be one\n        , {\n          // key doesn't matter. will only ever be one\n          key: i,\n          elClasses: ['fc-timegrid-now-indicator-line'],\n          elStyle: {\n            top: slatCoords.computeDateTop(seg.start, date)\n          },\n          isAxis: false,\n          date: date\n        });\n      });\n    }\n  }, {\n    key: \"computeSegHStyle\",\n    value: function computeSegHStyle(segHCoords) {\n      var _this$context2 = this.context,\n          isRtl = _this$context2.isRtl,\n          options = _this$context2.options;\n      var shouldOverlap = options.slotEventOverlap;\n      var nearCoord = segHCoords.levelCoord; // the left side if LTR. the right side if RTL. floating-point\n\n      var farCoord = segHCoords.levelCoord + segHCoords.thickness; // the right side if LTR. the left side if RTL. floating-point\n\n      var left; // amount of space from left edge, a fraction of the total width\n\n      var right; // amount of space from right edge, a fraction of the total width\n\n      if (shouldOverlap) {\n        // double the width, but don't go beyond the maximum forward coordinate (1.0)\n        farCoord = Math.min(1, nearCoord + (farCoord - nearCoord) * 2);\n      }\n\n      if (isRtl) {\n        left = 1 - farCoord;\n        right = nearCoord;\n      } else {\n        left = nearCoord;\n        right = 1 - farCoord;\n      }\n\n      var props = {\n        zIndex: segHCoords.stackDepth + 1,\n        left: left * 100 + '%',\n        right: right * 100 + '%'\n      };\n\n      if (shouldOverlap && !segHCoords.stackForward) {\n        // add padding to the edge so that forward stacked events don't cover the resizer's icon\n        props[isRtl ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width\n      }\n\n      return props;\n    }\n  }]);\n\n  return TimeCol;\n}(BaseComponent);\n\nfunction renderPlainFgSegs(sortedFgSegs, _ref) {\n  var todayRange = _ref.todayRange,\n      nowDate = _ref.nowDate,\n      eventSelection = _ref.eventSelection,\n      eventDrag = _ref.eventDrag,\n      eventResize = _ref.eventResize;\n  var hiddenInstances = (eventDrag ? eventDrag.affectedInstances : null) || (eventResize ? eventResize.affectedInstances : null) || {};\n  return createElement(Fragment, null, sortedFgSegs.map(function (seg) {\n    var instanceId = seg.eventRange.instance.instanceId;\n    return createElement(\"div\", {\n      key: instanceId,\n      style: {\n        visibility: hiddenInstances[instanceId] ? 'hidden' : ''\n      }\n    }, createElement(TimeColEvent, Object.assign({\n      seg: seg,\n      isDragging: false,\n      isResizing: false,\n      isDateSelecting: false,\n      isSelected: instanceId === eventSelection,\n      isShort: false\n    }, getSegMeta(seg, todayRange, nowDate))));\n  }));\n}\n\nfunction computeSegVStyle(segVCoords) {\n  if (!segVCoords) {\n    return {\n      top: '',\n      bottom: ''\n    };\n  }\n\n  return {\n    top: segVCoords.start,\n    bottom: -segVCoords.end\n  };\n}\n\nfunction compileSegsFromEntries(segEntries, allSegs) {\n  return segEntries.map(function (segEntry) {\n    return allSegs[segEntry.index];\n  });\n}\n\nvar TimeColsContent = /*#__PURE__*/function (_BaseComponent7) {\n  _inherits(TimeColsContent, _BaseComponent7);\n\n  var _super9 = _createSuper(TimeColsContent);\n\n  function TimeColsContent() {\n    var _this7;\n\n    _classCallCheck(this, TimeColsContent);\n\n    _this7 = _super9.apply(this, arguments);\n    _this7.splitFgEventSegs = memoize(splitSegsByCol);\n    _this7.splitBgEventSegs = memoize(splitSegsByCol);\n    _this7.splitBusinessHourSegs = memoize(splitSegsByCol);\n    _this7.splitNowIndicatorSegs = memoize(splitSegsByCol);\n    _this7.splitDateSelectionSegs = memoize(splitSegsByCol);\n    _this7.splitEventDrag = memoize(splitInteractionByCol);\n    _this7.splitEventResize = memoize(splitInteractionByCol);\n    _this7.rootElRef = createRef();\n    _this7.cellElRefs = new RefMap();\n    return _this7;\n  }\n\n  _createClass(TimeColsContent, [{\n    key: \"render\",\n    value: function render() {\n      var _this8 = this;\n\n      var props = this.props,\n          context = this.context;\n      var nowIndicatorTop = context.options.nowIndicator && props.slatCoords && props.slatCoords.safeComputeTop(props.nowDate); // might return void\n\n      var colCnt = props.cells.length;\n      var fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, colCnt);\n      var bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, colCnt);\n      var businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, colCnt);\n      var nowIndicatorSegsByRow = this.splitNowIndicatorSegs(props.nowIndicatorSegs, colCnt);\n      var dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, colCnt);\n      var eventDragByRow = this.splitEventDrag(props.eventDrag, colCnt);\n      var eventResizeByRow = this.splitEventResize(props.eventResize, colCnt);\n      return createElement(\"div\", {\n        className: \"fc-timegrid-cols\",\n        ref: this.rootElRef\n      }, createElement(\"table\", {\n        role: \"presentation\",\n        style: {\n          minWidth: props.tableMinWidth,\n          width: props.clientWidth\n        }\n      }, props.tableColGroupNode, createElement(\"tbody\", {\n        role: \"presentation\"\n      }, createElement(\"tr\", {\n        role: \"row\"\n      }, props.axis && createElement(\"td\", {\n        \"aria-hidden\": true,\n        className: \"fc-timegrid-col fc-timegrid-axis\"\n      }, createElement(\"div\", {\n        className: \"fc-timegrid-col-frame\"\n      }, createElement(\"div\", {\n        className: \"fc-timegrid-now-indicator-container\"\n      }, typeof nowIndicatorTop === 'number' && createElement(NowIndicatorContainer, {\n        elClasses: ['fc-timegrid-now-indicator-arrow'],\n        elStyle: {\n          top: nowIndicatorTop\n        },\n        isAxis: true,\n        date: props.nowDate\n      })))), props.cells.map(function (cell, i) {\n        return createElement(TimeCol, {\n          key: cell.key,\n          elRef: _this8.cellElRefs.createRef(cell.key),\n          dateProfile: props.dateProfile,\n          date: cell.date,\n          nowDate: props.nowDate,\n          todayRange: props.todayRange,\n          extraRenderProps: cell.extraRenderProps,\n          extraDataAttrs: cell.extraDataAttrs,\n          extraClassNames: cell.extraClassNames,\n          extraDateSpan: cell.extraDateSpan,\n          fgEventSegs: fgEventSegsByRow[i],\n          bgEventSegs: bgEventSegsByRow[i],\n          businessHourSegs: businessHourSegsByRow[i],\n          nowIndicatorSegs: nowIndicatorSegsByRow[i],\n          dateSelectionSegs: dateSelectionSegsByRow[i],\n          eventDrag: eventDragByRow[i],\n          eventResize: eventResizeByRow[i],\n          slatCoords: props.slatCoords,\n          eventSelection: props.eventSelection,\n          forPrint: props.forPrint\n        });\n      })))));\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.updateCoords();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      this.updateCoords();\n    }\n  }, {\n    key: \"updateCoords\",\n    value: function updateCoords() {\n      var props = this.props;\n\n      if (props.onColCoords && props.clientWidth !== null // means sizing has stabilized\n      ) {\n        props.onColCoords(new PositionCache(this.rootElRef.current, collectCellEls(this.cellElRefs.currentMap, props.cells), true, // horizontal\n        false));\n      }\n    }\n  }]);\n\n  return TimeColsContent;\n}(BaseComponent);\n\nfunction collectCellEls(elMap, cells) {\n  return cells.map(function (cell) {\n    return elMap[cell.key];\n  });\n}\n/* A component that renders one or more columns of vertical time slots\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nvar TimeCols = /*#__PURE__*/function (_DateComponent2) {\n  _inherits(TimeCols, _DateComponent2);\n\n  var _super10 = _createSuper(TimeCols);\n\n  function TimeCols() {\n    var _this9;\n\n    _classCallCheck(this, TimeCols);\n\n    _this9 = _super10.apply(this, arguments);\n    _this9.processSlotOptions = memoize(processSlotOptions);\n    _this9.state = {\n      slatCoords: null\n    };\n\n    _this9.handleRootEl = function (el) {\n      if (el) {\n        _this9.context.registerInteractiveComponent(_assertThisInitialized(_this9), {\n          el: el,\n          isHitComboAllowed: _this9.props.isHitComboAllowed\n        });\n      } else {\n        _this9.context.unregisterInteractiveComponent(_assertThisInitialized(_this9));\n      }\n    };\n\n    _this9.handleScrollRequest = function (request) {\n      var onScrollTopRequest = _this9.props.onScrollTopRequest;\n      var slatCoords = _this9.state.slatCoords;\n\n      if (onScrollTopRequest && slatCoords) {\n        if (request.time) {\n          var top = slatCoords.computeTimeTop(request.time);\n          top = Math.ceil(top); // zoom can give weird floating-point values. rather scroll a little bit further\n\n          if (top) {\n            top += 1; // to overcome top border that slots beyond the first have. looks better\n          }\n\n          onScrollTopRequest(top);\n        }\n\n        return true;\n      }\n\n      return false;\n    };\n\n    _this9.handleColCoords = function (colCoords) {\n      _this9.colCoords = colCoords;\n    };\n\n    _this9.handleSlatCoords = function (slatCoords) {\n      _this9.setState({\n        slatCoords: slatCoords\n      });\n\n      if (_this9.props.onSlatCoords) {\n        _this9.props.onSlatCoords(slatCoords);\n      }\n    };\n\n    return _this9;\n  }\n\n  _createClass(TimeCols, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          state = this.state;\n      return createElement(\"div\", {\n        className: \"fc-timegrid-body\",\n        ref: this.handleRootEl,\n        style: {\n          // these props are important to give this wrapper correct dimensions for interactions\n          // TODO: if we set it here, can we avoid giving to inner tables?\n          width: props.clientWidth,\n          minWidth: props.tableMinWidth\n        }\n      }, createElement(TimeColsSlats, {\n        axis: props.axis,\n        dateProfile: props.dateProfile,\n        slatMetas: props.slatMetas,\n        clientWidth: props.clientWidth,\n        minHeight: props.expandRows ? props.clientHeight : '',\n        tableMinWidth: props.tableMinWidth,\n        tableColGroupNode: props.axis ? props.tableColGroupNode : null\n        /* axis depends on the colgroup's shrinking */\n        ,\n        onCoords: this.handleSlatCoords\n      }), createElement(TimeColsContent, {\n        cells: props.cells,\n        axis: props.axis,\n        dateProfile: props.dateProfile,\n        businessHourSegs: props.businessHourSegs,\n        bgEventSegs: props.bgEventSegs,\n        fgEventSegs: props.fgEventSegs,\n        dateSelectionSegs: props.dateSelectionSegs,\n        eventSelection: props.eventSelection,\n        eventDrag: props.eventDrag,\n        eventResize: props.eventResize,\n        todayRange: props.todayRange,\n        nowDate: props.nowDate,\n        nowIndicatorSegs: props.nowIndicatorSegs,\n        clientWidth: props.clientWidth,\n        tableMinWidth: props.tableMinWidth,\n        tableColGroupNode: props.tableColGroupNode,\n        slatCoords: state.slatCoords,\n        onColCoords: this.handleColCoords,\n        forPrint: props.forPrint\n      }));\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.scrollResponder = this.context.createScrollResponder(this.handleScrollRequest);\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      this.scrollResponder.update(prevProps.dateProfile !== this.props.dateProfile);\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.scrollResponder.detach();\n    }\n  }, {\n    key: \"queryHit\",\n    value: function queryHit(positionLeft, positionTop) {\n      var _this$context3 = this.context,\n          dateEnv = _this$context3.dateEnv,\n          options = _this$context3.options;\n      var colCoords = this.colCoords;\n      var dateProfile = this.props.dateProfile;\n      var slatCoords = this.state.slatCoords;\n\n      var _this$processSlotOpti = this.processSlotOptions(this.props.slotDuration, options.snapDuration),\n          snapDuration = _this$processSlotOpti.snapDuration,\n          snapsPerSlot = _this$processSlotOpti.snapsPerSlot;\n\n      var colIndex = colCoords.leftToIndex(positionLeft);\n      var slatIndex = slatCoords.positions.topToIndex(positionTop);\n\n      if (colIndex != null && slatIndex != null) {\n        var cell = this.props.cells[colIndex];\n        var slatTop = slatCoords.positions.tops[slatIndex];\n        var slatHeight = slatCoords.positions.getHeight(slatIndex);\n        var partial = (positionTop - slatTop) / slatHeight; // floating point number between 0 and 1\n\n        var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat\n\n        var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;\n        var dayDate = this.props.cells[colIndex].date;\n        var time = addDurations(dateProfile.slotMinTime, multiplyDuration(snapDuration, snapIndex));\n        var start = dateEnv.add(dayDate, time);\n        var end = dateEnv.add(start, snapDuration);\n        return {\n          dateProfile: dateProfile,\n          dateSpan: Object.assign({\n            range: {\n              start: start,\n              end: end\n            },\n            allDay: false\n          }, cell.extraDateSpan),\n          dayEl: colCoords.els[colIndex],\n          rect: {\n            left: colCoords.lefts[colIndex],\n            right: colCoords.rights[colIndex],\n            top: slatTop,\n            bottom: slatTop + slatHeight\n          },\n          layer: 0\n        };\n      }\n\n      return null;\n    }\n  }]);\n\n  return TimeCols;\n}(DateComponent);\n\nfunction processSlotOptions(slotDuration, snapDurationOverride) {\n  var snapDuration = snapDurationOverride || slotDuration;\n  var snapsPerSlot = wholeDivideDurations(slotDuration, snapDuration);\n\n  if (snapsPerSlot === null) {\n    snapDuration = slotDuration;\n    snapsPerSlot = 1; // TODO: say warning?\n  }\n\n  return {\n    snapDuration: snapDuration,\n    snapsPerSlot: snapsPerSlot\n  };\n}\n\nvar DayTimeColsSlicer = /*#__PURE__*/function (_Slicer) {\n  _inherits(DayTimeColsSlicer, _Slicer);\n\n  var _super11 = _createSuper(DayTimeColsSlicer);\n\n  function DayTimeColsSlicer() {\n    _classCallCheck(this, DayTimeColsSlicer);\n\n    return _super11.apply(this, arguments);\n  }\n\n  _createClass(DayTimeColsSlicer, [{\n    key: \"sliceRange\",\n    value: function sliceRange(range, dayRanges) {\n      var segs = [];\n\n      for (var col = 0; col < dayRanges.length; col += 1) {\n        var segRange = intersectRanges(range, dayRanges[col]);\n\n        if (segRange) {\n          segs.push({\n            start: segRange.start,\n            end: segRange.end,\n            isStart: segRange.start.valueOf() === range.start.valueOf(),\n            isEnd: segRange.end.valueOf() === range.end.valueOf(),\n            col: col\n          });\n        }\n      }\n\n      return segs;\n    }\n  }]);\n\n  return DayTimeColsSlicer;\n}(Slicer);\n\nvar DayTimeCols = /*#__PURE__*/function (_DateComponent3) {\n  _inherits(DayTimeCols, _DateComponent3);\n\n  var _super12 = _createSuper(DayTimeCols);\n\n  function DayTimeCols() {\n    var _this10;\n\n    _classCallCheck(this, DayTimeCols);\n\n    _this10 = _super12.apply(this, arguments);\n    _this10.buildDayRanges = memoize(buildDayRanges);\n    _this10.slicer = new DayTimeColsSlicer();\n    _this10.timeColsRef = createRef();\n    return _this10;\n  }\n\n  _createClass(DayTimeCols, [{\n    key: \"render\",\n    value: function render() {\n      var _this11 = this;\n\n      var props = this.props,\n          context = this.context;\n      var dateProfile = props.dateProfile,\n          dayTableModel = props.dayTableModel;\n      var _context$options = context.options,\n          nowIndicator = _context$options.nowIndicator,\n          nextDayThreshold = _context$options.nextDayThreshold;\n      var dayRanges = this.buildDayRanges(dayTableModel, dateProfile, context.dateEnv); // give it the first row of cells\n      // TODO: would move this further down hierarchy, but sliceNowDate needs it\n\n      return createElement(NowTimer, {\n        unit: nowIndicator ? 'minute' : 'day'\n      }, function (nowDate, todayRange) {\n        return createElement(TimeCols, Object.assign({\n          ref: _this11.timeColsRef\n        }, _this11.slicer.sliceProps(props, dateProfile, null, context, dayRanges), {\n          forPrint: props.forPrint,\n          axis: props.axis,\n          dateProfile: dateProfile,\n          slatMetas: props.slatMetas,\n          slotDuration: props.slotDuration,\n          cells: dayTableModel.cells[0],\n          tableColGroupNode: props.tableColGroupNode,\n          tableMinWidth: props.tableMinWidth,\n          clientWidth: props.clientWidth,\n          clientHeight: props.clientHeight,\n          expandRows: props.expandRows,\n          nowDate: nowDate,\n          nowIndicatorSegs: nowIndicator && _this11.slicer.sliceNowDate(nowDate, dateProfile, nextDayThreshold, context, dayRanges),\n          todayRange: todayRange,\n          onScrollTopRequest: props.onScrollTopRequest,\n          onSlatCoords: props.onSlatCoords\n        }));\n      });\n    }\n  }]);\n\n  return DayTimeCols;\n}(DateComponent);\n\nfunction buildDayRanges(dayTableModel, dateProfile, dateEnv) {\n  var ranges = [];\n\n  var _iterator5 = _createForOfIteratorHelper(dayTableModel.headerDates),\n      _step5;\n\n  try {\n    for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n      var date = _step5.value;\n      ranges.push({\n        start: dateEnv.add(date, dateProfile.slotMinTime),\n        end: dateEnv.add(date, dateProfile.slotMaxTime)\n      });\n    }\n  } catch (err) {\n    _iterator5.e(err);\n  } finally {\n    _iterator5.f();\n  }\n\n  return ranges;\n} // potential nice values for the slot-duration and interval-duration\n// from largest to smallest\n\n\nvar STOCK_SUB_DURATIONS = [{\n  hours: 1\n}, {\n  minutes: 30\n}, {\n  minutes: 15\n}, {\n  seconds: 30\n}, {\n  seconds: 15\n}];\n\nfunction buildSlatMetas(slotMinTime, slotMaxTime, explicitLabelInterval, slotDuration, dateEnv) {\n  var dayStart = new Date(0);\n  var slatTime = slotMinTime;\n  var slatIterator = createDuration(0);\n  var labelInterval = explicitLabelInterval || computeLabelInterval(slotDuration);\n  var metas = [];\n\n  while (asRoughMs(slatTime) < asRoughMs(slotMaxTime)) {\n    var date = dateEnv.add(dayStart, slatTime);\n    var isLabeled = wholeDivideDurations(slatIterator, labelInterval) !== null;\n    metas.push({\n      date: date,\n      time: slatTime,\n      key: date.toISOString(),\n      isoTimeStr: formatIsoTimeString(date),\n      isLabeled: isLabeled\n    });\n    slatTime = addDurations(slatTime, slotDuration);\n    slatIterator = addDurations(slatIterator, slotDuration);\n  }\n\n  return metas;\n} // Computes an automatic value for slotLabelInterval\n\n\nfunction computeLabelInterval(slotDuration) {\n  var i;\n  var labelInterval;\n  var slotsPerLabel; // find the smallest stock label interval that results in more than one slots-per-label\n\n  for (i = STOCK_SUB_DURATIONS.length - 1; i >= 0; i -= 1) {\n    labelInterval = createDuration(STOCK_SUB_DURATIONS[i]);\n    slotsPerLabel = wholeDivideDurations(labelInterval, slotDuration);\n\n    if (slotsPerLabel !== null && slotsPerLabel > 1) {\n      return labelInterval;\n    }\n  }\n\n  return slotDuration; // fall back\n}\n\nvar DayTimeColsView = /*#__PURE__*/function (_TimeColsView) {\n  _inherits(DayTimeColsView, _TimeColsView);\n\n  var _super13 = _createSuper(DayTimeColsView);\n\n  function DayTimeColsView() {\n    var _this12;\n\n    _classCallCheck(this, DayTimeColsView);\n\n    _this12 = _super13.apply(this, arguments);\n    _this12.buildTimeColsModel = memoize(buildTimeColsModel);\n    _this12.buildSlatMetas = memoize(buildSlatMetas);\n    return _this12;\n  }\n\n  _createClass(DayTimeColsView, [{\n    key: \"render\",\n    value: function render() {\n      var _this13 = this;\n\n      var _this$context4 = this.context,\n          options = _this$context4.options,\n          dateEnv = _this$context4.dateEnv,\n          dateProfileGenerator = _this$context4.dateProfileGenerator;\n      var props = this.props;\n      var dateProfile = props.dateProfile;\n      var dayTableModel = this.buildTimeColsModel(dateProfile, dateProfileGenerator);\n      var splitProps = this.allDaySplitter.splitProps(props);\n      var slatMetas = this.buildSlatMetas(dateProfile.slotMinTime, dateProfile.slotMaxTime, options.slotLabelInterval, options.slotDuration, dateEnv);\n      var dayMinWidth = options.dayMinWidth;\n      var hasAttachedAxis = !dayMinWidth;\n      var hasDetachedAxis = dayMinWidth;\n      var headerContent = options.dayHeaders && createElement(DayHeader, {\n        dates: dayTableModel.headerDates,\n        dateProfile: dateProfile,\n        datesRepDistinctDays: true,\n        renderIntro: hasAttachedAxis ? this.renderHeadAxis : null\n      });\n\n      var allDayContent = options.allDaySlot !== false && function (contentArg) {\n        return createElement(DayTable, Object.assign({}, splitProps.allDay, {\n          dateProfile: dateProfile,\n          dayTableModel: dayTableModel,\n          nextDayThreshold: options.nextDayThreshold,\n          tableMinWidth: contentArg.tableMinWidth,\n          colGroupNode: contentArg.tableColGroupNode,\n          renderRowIntro: hasAttachedAxis ? _this13.renderTableRowAxis : null,\n          showWeekNumbers: false,\n          expandRows: false,\n          headerAlignElRef: _this13.headerElRef,\n          clientWidth: contentArg.clientWidth,\n          clientHeight: contentArg.clientHeight,\n          forPrint: props.forPrint\n        }, _this13.getAllDayMaxEventProps()));\n      };\n\n      var timeGridContent = function timeGridContent(contentArg) {\n        return createElement(DayTimeCols, Object.assign({}, splitProps.timed, {\n          dayTableModel: dayTableModel,\n          dateProfile: dateProfile,\n          axis: hasAttachedAxis,\n          slotDuration: options.slotDuration,\n          slatMetas: slatMetas,\n          forPrint: props.forPrint,\n          tableColGroupNode: contentArg.tableColGroupNode,\n          tableMinWidth: contentArg.tableMinWidth,\n          clientWidth: contentArg.clientWidth,\n          clientHeight: contentArg.clientHeight,\n          onSlatCoords: _this13.handleSlatCoords,\n          expandRows: contentArg.expandRows,\n          onScrollTopRequest: _this13.handleScrollTopRequest\n        }));\n      };\n\n      return hasDetachedAxis ? this.renderHScrollLayout(headerContent, allDayContent, timeGridContent, dayTableModel.colCnt, dayMinWidth, slatMetas, this.state.slatCoords) : this.renderSimpleLayout(headerContent, allDayContent, timeGridContent);\n    }\n  }]);\n\n  return DayTimeColsView;\n}(TimeColsView);\n\nfunction buildTimeColsModel(dateProfile, dateProfileGenerator) {\n  var daySeries = new DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);\n  return new DayTableModel(daySeries, false);\n}\n\nvar css_248z = \".fc-v-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-v-event .fc-event-main{color:var(--fc-event-text-color);height:100%}.fc-v-event .fc-event-main-frame{display:flex;flex-direction:column;height:100%}.fc-v-event .fc-event-time{flex-grow:0;flex-shrink:0;max-height:100%;overflow:hidden}.fc-v-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-height:0}.fc-v-event .fc-event-title{bottom:0;max-height:100%;overflow:hidden;top:0}.fc-v-event:not(.fc-event-start){border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}.fc-v-event:not(.fc-event-end){border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-width:0}.fc-v-event.fc-event-selected:before{left:-10px;right:-10px}.fc-v-event .fc-event-resizer-start{cursor:n-resize}.fc-v-event .fc-event-resizer-end{cursor:s-resize}.fc-v-event:not(.fc-event-selected) .fc-event-resizer{height:var(--fc-event-resizer-thickness);left:0;right:0}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start{top:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer{left:50%;margin-left:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-start{top:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc .fc-timegrid .fc-daygrid-body{z-index:2}.fc .fc-timegrid-divider{padding:0 0 2px}.fc .fc-timegrid-body{min-height:100%;position:relative;z-index:1}.fc .fc-timegrid-axis-chunk{position:relative}.fc .fc-timegrid-axis-chunk>table,.fc .fc-timegrid-slots{position:relative;z-index:1}.fc .fc-timegrid-slot{border-bottom:0;height:1.5em}.fc .fc-timegrid-slot:empty:before{content:\\\"\\\\00a0\\\"}.fc .fc-timegrid-slot-minor{border-top-style:dotted}.fc .fc-timegrid-slot-label-cushion{display:inline-block;white-space:nowrap}.fc .fc-timegrid-slot-label{vertical-align:middle}.fc .fc-timegrid-axis-cushion,.fc .fc-timegrid-slot-label-cushion{padding:0 4px}.fc .fc-timegrid-axis-frame-liquid{height:100%}.fc .fc-timegrid-axis-frame{align-items:center;display:flex;justify-content:flex-end;overflow:hidden}.fc .fc-timegrid-axis-cushion{flex-shrink:0;max-width:60px}.fc-direction-ltr .fc-timegrid-slot-label-frame{text-align:right}.fc-direction-rtl .fc-timegrid-slot-label-frame{text-align:left}.fc-liquid-hack .fc-timegrid-axis-frame-liquid{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-timegrid-col-frame{min-height:100%;position:relative}.fc-media-screen.fc-liquid-hack .fc-timegrid-col-frame{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols{bottom:0;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols>table{height:100%}.fc-media-screen .fc-timegrid-col-bg,.fc-media-screen .fc-timegrid-col-events,.fc-media-screen .fc-timegrid-now-indicator-container{left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col-bg{z-index:2}.fc .fc-timegrid-col-bg .fc-non-business{z-index:1}.fc .fc-timegrid-col-bg .fc-bg-event{z-index:2}.fc .fc-timegrid-col-bg .fc-highlight{z-index:3}.fc .fc-timegrid-bg-harness{left:0;position:absolute;right:0}.fc .fc-timegrid-col-events{z-index:3}.fc .fc-timegrid-now-indicator-container{bottom:0;overflow:hidden}.fc-direction-ltr .fc-timegrid-col-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-col-events{margin:0 2px 0 2.5%}.fc-timegrid-event-harness{position:absolute}.fc-timegrid-event-harness>.fc-timegrid-event{bottom:0;left:0;position:absolute;right:0;top:0}.fc-timegrid-event-harness-inset .fc-timegrid-event,.fc-timegrid-event.fc-event-mirror,.fc-timegrid-more-link{box-shadow:0 0 0 1px var(--fc-page-bg-color)}.fc-timegrid-event,.fc-timegrid-more-link{border-radius:3px;font-size:var(--fc-small-font-size)}.fc-timegrid-event{margin-bottom:1px}.fc-timegrid-event .fc-event-main{padding:1px 1px 0}.fc-timegrid-event .fc-event-time{font-size:var(--fc-small-font-size);margin-bottom:1px;white-space:nowrap}.fc-timegrid-event-short .fc-event-main-frame{flex-direction:row;overflow:hidden}.fc-timegrid-event-short .fc-event-time:after{content:\\\"\\\\00a0-\\\\00a0\\\"}.fc-timegrid-event-short .fc-event-title{font-size:var(--fc-small-font-size)}.fc-timegrid-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;margin-bottom:1px;position:absolute;z-index:9999}.fc-timegrid-more-link-inner{padding:3px 2px;top:0}.fc-direction-ltr .fc-timegrid-more-link{right:0}.fc-direction-rtl .fc-timegrid-more-link{left:0}.fc .fc-timegrid-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;border-width:1px 0 0;left:0;position:absolute;right:0;z-index:4}.fc .fc-timegrid-now-indicator-arrow{border-color:var(--fc-now-indicator-color);border-style:solid;margin-top:-5px;position:absolute;z-index:4}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 0 5px 6px;left:0}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 6px 5px 0;right:0}\";\ninjectStyles(css_248z);\nexport { DayTimeCols, DayTimeColsSlicer, DayTimeColsView, TimeCols, TimeColsSlatsCoords, TimeColsView, buildDayRanges, buildSlatMetas, buildTimeColsModel };","import { createPlugin } from '@fullcalendar/core/index.js';\nimport { DayTimeColsView } from './internal.js';\nimport '@fullcalendar/core/internal.js';\nimport '@fullcalendar/core/preact.js';\nimport '@fullcalendar/daygrid/internal.js';\nvar OPTION_REFINERS = {\n  allDaySlot: Boolean\n};\nvar index = createPlugin({\n  name: '@fullcalendar/timegrid',\n  initialView: 'timeGridWeek',\n  optionRefiners: OPTION_REFINERS,\n  views: {\n    timeGrid: {\n      component: DayTimeColsView,\n      usesMinMaxTime: true,\n      allDaySlot: true,\n      slotDuration: '00:30:00',\n      slotEventOverlap: true // a bad name. confused with overlap/constraint system\n\n    },\n    timeGridDay: {\n      type: 'timeGrid',\n      duration: {\n        days: 1\n      }\n    },\n    timeGridWeek: {\n      type: 'timeGrid',\n      duration: {\n        weeks: 1\n      }\n    }\n  }\n});\nexport { index as default };","define(function () {\n  \"use strict\";\n\n  return [];\n});","define(function () {\n  \"use strict\";\n\n  return function isWindow(obj) {\n    return obj != null && obj === obj.window;\n  };\n});","define([], function () {\n  \"use strict\"; // Matches dashed string for camelizing\n\n  var rmsPrefix = /^-ms-/,\n      rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace()\n\n  function fcamelCase(all, letter) {\n    return letter.toUpperCase();\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 (#9572)\n\n\n  function camelCase(string) {\n    return string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n  }\n\n  return camelCase;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"./core\", \"./core/access\", \"./core/camelCase\", \"./var/rcssNum\", \"./css/var/rnumnonpx\", \"./css/var/cssExpand\", \"./css/var/getStyles\", \"./css/var/swap\", \"./css/curCSS\", \"./css/adjustCSS\", \"./css/addGetHookIf\", \"./css/support\", \"./css/finalPropName\", \"./core/init\", \"./core/ready\", \"./selector\" // contains\n], function (jQuery, access, camelCase, rcssNum, rnumnonpx, cssExpand, getStyles, swap, curCSS, adjustCSS, addGetHookIf, support, finalPropName) {\n  \"use strict\";\n\n  var // Swappable if display is none or starts with table\n  // except \"table\", \"table-cell\", or \"table-caption\"\n  // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n  rdisplayswap = /^(none|table(?!-c[ea]).+)/,\n      rcustomProp = /^--/,\n      cssShow = {\n    position: \"absolute\",\n    visibility: \"hidden\",\n    display: \"block\"\n  },\n      cssNormalTransform = {\n    letterSpacing: \"0\",\n    fontWeight: \"400\"\n  };\n\n  function setPositiveNumber(elem, value, subtract) {\n    // Any relative (+/-) values have already been\n    // normalized at this point\n    var matches = rcssNum.exec(value);\n    return matches ? // Guard against undefined \"subtract\", e.g., when used as in cssHooks\n    Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") : value;\n  }\n\n  function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n    var i = dimension === \"width\" ? 1 : 0,\n        extra = 0,\n        delta = 0; // Adjustment may not be necessary\n\n    if (box === (isBorderBox ? \"border\" : \"content\")) {\n      return 0;\n    }\n\n    for (; i < 4; i += 2) {\n      // Both box models exclude margin\n      if (box === \"margin\") {\n        delta += jQuery.css(elem, box + cssExpand[i], true, styles);\n      } // If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\n\n      if (!isBorderBox) {\n        // Add padding\n        delta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles); // For \"border\" or \"margin\", add border\n\n        if (box !== \"padding\") {\n          delta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles); // But still keep track of it otherwise\n        } else {\n          extra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n        } // If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n        // \"padding\" or \"margin\"\n\n      } else {\n        // For \"content\", subtract padding\n        if (box === \"content\") {\n          delta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n        } // For \"content\" or \"padding\", subtract border\n\n\n        if (box !== \"margin\") {\n          delta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n        }\n      }\n    } // Account for positive content-box scroll gutter when requested by providing computedVal\n\n\n    if (!isBorderBox && computedVal >= 0) {\n      // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n      // Assuming integer scroll gutter, subtract the rest and round down\n      delta += Math.max(0, Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n      // Use an explicit zero to avoid NaN (gh-3964)\n      )) || 0;\n    }\n\n    return delta;\n  }\n\n  function getWidthOrHeight(elem, dimension, extra) {\n    // Start with computed style\n    var styles = getStyles(elem),\n        // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n    // Fake content-box until we know it's needed to know the true value.\n    boxSizingNeeded = !support.boxSizingReliable() || extra,\n        isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n        valueIsBorderBox = isBorderBox,\n        val = curCSS(elem, dimension, styles),\n        offsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1); // Support: Firefox <=54\n    // Return a confounding non-pixel value or feign ignorance, as appropriate.\n\n    if (rnumnonpx.test(val)) {\n      if (!extra) {\n        return val;\n      }\n\n      val = \"auto\";\n    } // Fall back to offsetWidth/offsetHeight when value is \"auto\"\n    // This happens for inline elements with no explicit setting (gh-3571)\n    // Support: Android <=4.1 - 4.3 only\n    // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n    // Support: IE 9-11 only\n    // Also use offsetWidth/offsetHeight for when box sizing is unreliable\n    // We use getClientRects() to check for hidden/disconnected.\n    // In those cases, the computed value can be trusted to be border-box\n\n\n    if ((!support.boxSizingReliable() && isBorderBox || val === \"auto\" || !parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") && elem.getClientRects().length) {\n      isBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\"; // Where available, offsetWidth/offsetHeight approximate border box dimensions.\n      // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n      // retrieved value as a content box dimension.\n\n      valueIsBorderBox = offsetProp in elem;\n\n      if (valueIsBorderBox) {\n        val = elem[offsetProp];\n      }\n    } // Normalize \"\" and auto\n\n\n    val = parseFloat(val) || 0; // Adjust for the element's box model\n\n    return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? \"border\" : \"content\"), valueIsBorderBox, styles, // Provide the current computed size to request scroll gutter calculation (gh-3589)\n    val) + \"px\";\n  }\n\n  jQuery.extend({\n    // Add in style property hooks for overriding the default\n    // behavior of getting and setting a style property\n    cssHooks: {\n      opacity: {\n        get: function get(elem, computed) {\n          if (computed) {\n            // We should always get a number back from opacity\n            var ret = curCSS(elem, \"opacity\");\n            return ret === \"\" ? \"1\" : ret;\n          }\n        }\n      }\n    },\n    // Don't automatically add \"px\" to these possibly-unitless properties\n    cssNumber: {\n      \"animationIterationCount\": true,\n      \"columnCount\": true,\n      \"fillOpacity\": true,\n      \"flexGrow\": true,\n      \"flexShrink\": true,\n      \"fontWeight\": true,\n      \"gridArea\": true,\n      \"gridColumn\": true,\n      \"gridColumnEnd\": true,\n      \"gridColumnStart\": true,\n      \"gridRow\": true,\n      \"gridRowEnd\": true,\n      \"gridRowStart\": true,\n      \"lineHeight\": true,\n      \"opacity\": true,\n      \"order\": true,\n      \"orphans\": true,\n      \"widows\": true,\n      \"zIndex\": true,\n      \"zoom\": true\n    },\n    // Add in properties whose names you wish to fix before\n    // setting or getting the value\n    cssProps: {},\n    // Get and set the style property on a DOM Node\n    style: function style(elem, name, value, extra) {\n      // Don't set styles on text and comment nodes\n      if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n        return;\n      } // Make sure that we're working with the right name\n\n\n      var ret,\n          type,\n          hooks,\n          origName = camelCase(name),\n          isCustomProp = rcustomProp.test(name),\n          style = elem.style; // Make sure that we're working with the right name. We don't\n      // want to query the value if it is a CSS custom property\n      // since they are user-defined.\n\n      if (!isCustomProp) {\n        name = finalPropName(origName);\n      } // Gets hook for the prefixed version, then unprefixed version\n\n\n      hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // Check if we're setting a value\n\n      if (value !== undefined) {\n        type = _typeof(value); // Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\n        if (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n          value = adjustCSS(elem, name, ret); // Fixes bug #9237\n\n          type = \"number\";\n        } // Make sure that null and NaN values aren't set (#7116)\n\n\n        if (value == null || value !== value) {\n          return;\n        } // If a number was passed in, add the unit (except for certain CSS properties)\n        // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n        // \"px\" to a few hardcoded values.\n\n\n        if (type === \"number\" && !isCustomProp) {\n          value += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n        } // background-* props affect original clone's values\n\n\n        if (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n          style[name] = \"inherit\";\n        } // If a hook was provided, use that value, otherwise just set the specified value\n\n\n        if (!hooks || !(\"set\" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {\n          if (isCustomProp) {\n            style.setProperty(name, value);\n          } else {\n            style[name] = value;\n          }\n        }\n      } else {\n        // If a hook was provided get the non-computed value from there\n        if (hooks && \"get\" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {\n          return ret;\n        } // Otherwise just get the value from the style object\n\n\n        return style[name];\n      }\n    },\n    css: function css(elem, name, extra, styles) {\n      var val,\n          num,\n          hooks,\n          origName = camelCase(name),\n          isCustomProp = rcustomProp.test(name); // Make sure that we're working with the right name. We don't\n      // want to modify the value if it is a CSS custom property\n      // since they are user-defined.\n\n      if (!isCustomProp) {\n        name = finalPropName(origName);\n      } // Try prefixed name followed by the unprefixed name\n\n\n      hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // If a hook was provided get the computed value from there\n\n      if (hooks && \"get\" in hooks) {\n        val = hooks.get(elem, true, extra);\n      } // Otherwise, if a way to get the computed value exists, use that\n\n\n      if (val === undefined) {\n        val = curCSS(elem, name, styles);\n      } // Convert \"normal\" to computed value\n\n\n      if (val === \"normal\" && name in cssNormalTransform) {\n        val = cssNormalTransform[name];\n      } // Make numeric if forced or a qualifier was provided and val looks numeric\n\n\n      if (extra === \"\" || extra) {\n        num = parseFloat(val);\n        return extra === true || isFinite(num) ? num || 0 : val;\n      }\n\n      return val;\n    }\n  });\n  jQuery.each([\"height\", \"width\"], function (i, dimension) {\n    jQuery.cssHooks[dimension] = {\n      get: function get(elem, computed, extra) {\n        if (computed) {\n          // Certain elements can have dimension info if we invisibly show them\n          // but it must have a current display style that would benefit\n          return rdisplayswap.test(jQuery.css(elem, \"display\")) && (!elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function () {\n            return getWidthOrHeight(elem, dimension, extra);\n          }) : getWidthOrHeight(elem, dimension, extra);\n        }\n      },\n      set: function set(elem, value, extra) {\n        var matches,\n            styles = getStyles(elem),\n            // Only read styles.position if the test has a chance to fail\n        // to avoid forcing a reflow.\n        scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === \"absolute\",\n            // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n        boxSizingNeeded = scrollboxSizeBuggy || extra,\n            isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n            subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0; // Account for unreliable border-box dimensions by comparing offset* to computed and\n        // faking a content-box to get border and padding (gh-3699)\n\n        if (isBorderBox && scrollboxSizeBuggy) {\n          subtract -= Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, \"border\", false, styles) - 0.5);\n        } // Convert to pixels if value adjustment is needed\n\n\n        if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || \"px\") !== \"px\") {\n          elem.style[dimension] = value;\n          value = jQuery.css(elem, dimension);\n        }\n\n        return setPositiveNumber(elem, value, subtract);\n      }\n    };\n  });\n  jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {\n    if (computed) {\n      return (parseFloat(curCSS(elem, \"marginLeft\")) || elem.getBoundingClientRect().left - swap(elem, {\n        marginLeft: 0\n      }, function () {\n        return elem.getBoundingClientRect().left;\n      })) + \"px\";\n    }\n  }); // These hooks are used by animate to expand properties\n\n  jQuery.each({\n    margin: \"\",\n    padding: \"\",\n    border: \"Width\"\n  }, function (prefix, suffix) {\n    jQuery.cssHooks[prefix + suffix] = {\n      expand: function expand(value) {\n        var i = 0,\n            expanded = {},\n            // Assumes a single number if not a string\n        parts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n        for (; i < 4; i++) {\n          expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];\n        }\n\n        return expanded;\n      }\n    };\n\n    if (prefix !== \"margin\") {\n      jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n    }\n  });\n  jQuery.fn.extend({\n    css: function css(name, value) {\n      return access(this, function (elem, name, value) {\n        var styles,\n            len,\n            map = {},\n            i = 0;\n\n        if (Array.isArray(name)) {\n          styles = getStyles(elem);\n          len = name.length;\n\n          for (; i < len; i++) {\n            map[name[i]] = jQuery.css(elem, name[i], false, styles);\n          }\n\n          return map;\n        }\n\n        return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);\n      }, name, value, arguments.length > 1);\n    }\n  });\n  return jQuery;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\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}\n\nvar lim = function lim(v, l, h) {\n  return Math.max(Math.min(v, h), l);\n};\n\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\n\nfunction b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\n\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\n\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\n\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n\nvar map$1 = {\n  0: 0,\n  1: 1,\n  2: 2,\n  3: 3,\n  4: 4,\n  5: 5,\n  6: 6,\n  7: 7,\n  8: 8,\n  9: 9,\n  A: 10,\n  B: 11,\n  C: 12,\n  D: 13,\n  E: 14,\n  F: 15,\n  a: 10,\n  b: 11,\n  c: 12,\n  d: 13,\n  e: 14,\n  f: 15\n};\n\nvar hex = _toConsumableArray('0123456789ABCDEF');\n\nvar h1 = function h1(b) {\n  return hex[b & 0xF];\n};\n\nvar h2 = function h2(b) {\n  return hex[(b & 0xF0) >> 4] + hex[b & 0xF];\n};\n\nvar eq = function eq(b) {\n  return (b & 0xF0) >> 4 === (b & 0xF);\n};\n\nvar isShort = function isShort(v) {\n  return eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\n};\n\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n\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\n  return ret;\n}\n\nvar alpha = function alpha(a, f) {\n  return a < 255 ? f(a) : '';\n};\n\nfunction _hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) : undefined;\n}\n\nvar HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\n\nfunction hsl2rgbn(h, s, l) {\n  var a = s * Math.min(l, 1 - l);\n\n  var f = function f(n) {\n    var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 30) % 12;\n    return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  };\n\n  return [f(0), f(8), f(4)];\n}\n\nfunction hsv2rgbn(h, s, v) {\n  var f = function f(n) {\n    var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 60) % 6;\n    return v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  };\n\n  return [f(5), f(3), f(1)];\n}\n\nfunction hwb2rgbn(h, w, b) {\n  var rgb = hsl2rgbn(h, 1, 0.5);\n  var i;\n\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n\n  return rgb;\n}\n\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return (g - b) / d + (g < b ? 6 : 0);\n  }\n\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n\n  return (r - g) / d + 4;\n}\n\nfunction rgb2hsl(v) {\n  var range = 255;\n  var r = v.r / range;\n  var g = v.g / range;\n  var b = v.b / range;\n  var max = Math.max(r, g, b);\n  var min = Math.min(r, g, b);\n  var l = (max + min) / 2;\n  var h, s, d;\n\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\n  return [h | 0, s || 0, l];\n}\n\nfunction calln(f, a, b, c) {\n  return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b);\n}\n\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\n\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\n\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\n\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\n\nfunction hueParse(str) {\n  var m = HUE_RE.exec(str);\n  var a = 255;\n  var v;\n\n  if (!m) {\n    return;\n  }\n\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n\n  var h = hue(+m[2]);\n  var p1 = +m[3] / 100;\n  var p2 = +m[4] / 100;\n\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\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\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}\n\nfunction _hslString(v) {\n  if (!v) {\n    return;\n  }\n\n  var a = rgb2hsl(v);\n  var h = a[0];\n  var s = n2p(a[1]);\n  var l = n2p(a[2]);\n  return v.a < 255 ? \"hsla(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%, \").concat(b2n(v.a), \")\") : \"hsl(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%)\");\n}\n\nvar 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};\nvar 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};\n\nfunction unpack() {\n  var unpacked = {};\n  var keys = Object.keys(names$1);\n  var tkeys = Object.keys(map);\n  var i, j, k, ok, nk;\n\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n\n  return unpacked;\n}\n\nvar names;\n\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n\n  var 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\nvar RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\n\nfunction rgbParse(str) {\n  var m = RGB_RE.exec(str);\n  var a = 255;\n  var r, g, b;\n\n  if (!m) {\n    return;\n  }\n\n  if (m[7] !== r) {\n    var v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\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}\n\nfunction _rgbString(v) {\n  return v && (v.a < 255 ? \"rgba(\".concat(v.r, \", \").concat(v.g, \", \").concat(v.b, \", \").concat(b2n(v.a), \")\") : \"rgb(\".concat(v.r, \", \").concat(v.g, \", \").concat(v.b, \")\"));\n}\n\nvar to = function to(v) {\n  return v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\n};\n\nvar from = function from(v) {\n  return v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n};\n\nfunction _interpolate(rgb1, rgb2, t) {\n  var r = from(b2n(rgb1.r));\n  var g = from(b2n(rgb1.g));\n  var 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    var 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}\n\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\n\nfunction fromObject(input) {\n  var v = {\n    r: 0,\n    g: 0,\n    b: 0,\n    a: 255\n  };\n\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {\n        r: input[0],\n        g: input[1],\n        b: input[2],\n        a: 255\n      };\n\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {\n      r: 0,\n      g: 0,\n      b: 0,\n      a: 1\n    });\n    v.a = n2b(v.a);\n  }\n\n  return v;\n}\n\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n\n  return hueParse(str);\n}\n\nvar Color = /*#__PURE__*/function () {\n  function Color(input) {\n    _classCallCheck(this, Color);\n\n    if (input instanceof Color) {\n      return input;\n    }\n\n    var type = _typeof(input);\n\n    var v;\n\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n\n    this._rgb = v;\n    this._valid = !!v;\n  }\n\n  _createClass(Color, [{\n    key: \"valid\",\n    get: function get() {\n      return this._valid;\n    }\n  }, {\n    key: \"rgb\",\n    get: function get() {\n      var v = clone(this._rgb);\n\n      if (v) {\n        v.a = b2n(v.a);\n      }\n\n      return v;\n    },\n    set: function set(obj) {\n      this._rgb = fromObject(obj);\n    }\n  }, {\n    key: \"rgbString\",\n    value: function rgbString() {\n      return this._valid ? _rgbString(this._rgb) : undefined;\n    }\n  }, {\n    key: \"hexString\",\n    value: function hexString() {\n      return this._valid ? _hexString(this._rgb) : undefined;\n    }\n  }, {\n    key: \"hslString\",\n    value: function hslString() {\n      return this._valid ? _hslString(this._rgb) : undefined;\n    }\n  }, {\n    key: \"mix\",\n    value: function mix(color, weight) {\n      if (color) {\n        var c1 = this.rgb;\n        var c2 = color.rgb;\n        var w2;\n        var p = weight === w2 ? 0.5 : weight;\n        var w = 2 * p - 1;\n        var a = c1.a - c2.a;\n        var 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\n      return this;\n    }\n  }, {\n    key: \"interpolate\",\n    value: function interpolate(color, t) {\n      if (color) {\n        this._rgb = _interpolate(this._rgb, color._rgb, t);\n      }\n\n      return this;\n    }\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      return new Color(this.rgb);\n    }\n  }, {\n    key: \"alpha\",\n    value: function alpha(a) {\n      this._rgb.a = n2b(a);\n      return this;\n    }\n  }, {\n    key: \"clearer\",\n    value: function clearer(ratio) {\n      var rgb = this._rgb;\n      rgb.a *= 1 - ratio;\n      return this;\n    }\n  }, {\n    key: \"greyscale\",\n    value: function greyscale() {\n      var rgb = this._rgb;\n      var 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  }, {\n    key: \"opaquer\",\n    value: function opaquer(ratio) {\n      var rgb = this._rgb;\n      rgb.a *= 1 + ratio;\n      return this;\n    }\n  }, {\n    key: \"negate\",\n    value: function negate() {\n      var 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  }, {\n    key: \"lighten\",\n    value: function lighten(ratio) {\n      modHSL(this._rgb, 2, ratio);\n      return this;\n    }\n  }, {\n    key: \"darken\",\n    value: function darken(ratio) {\n      modHSL(this._rgb, 2, -ratio);\n      return this;\n    }\n  }, {\n    key: \"saturate\",\n    value: function saturate(ratio) {\n      modHSL(this._rgb, 1, ratio);\n      return this;\n    }\n  }, {\n    key: \"desaturate\",\n    value: function desaturate(ratio) {\n      modHSL(this._rgb, 1, -ratio);\n      return this;\n    }\n  }, {\n    key: \"rotate\",\n    value: function rotate(deg) {\n      _rotate(this._rgb, deg);\n\n      return this;\n    }\n  }]);\n\n  return Color;\n}();\n\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, _hexString as hexString, hsl2rgb, _hslString as hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, _rgbString as rgbString, _rotate as rotate, round };","import { createPlugin } from '@fullcalendar/core/index.js';\nimport { DayGridView as DayTableView, TableDateProfileGenerator } from './internal.js';\nimport '@fullcalendar/core/internal.js';\nimport '@fullcalendar/core/preact.js';\nvar index = createPlugin({\n  name: '@fullcalendar/daygrid',\n  initialView: 'dayGridMonth',\n  views: {\n    dayGrid: {\n      component: DayTableView,\n      dateProfileGeneratorClass: TableDateProfileGenerator\n    },\n    dayGridDay: {\n      type: 'dayGrid',\n      duration: {\n        days: 1\n      }\n    },\n    dayGridWeek: {\n      type: 'dayGrid',\n      duration: {\n        weeks: 1\n      }\n    },\n    dayGridMonth: {\n      type: 'dayGrid',\n      duration: {\n        months: 1\n      },\n      fixedWeekCount: true\n    },\n    dayGridYear: {\n      type: 'dayGrid',\n      duration: {\n        years: 1\n      }\n    }\n  }\n});\nexport { index as default };","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { BaseComponent, getUniqueDomId, getDateMeta, buildNavLinkAttrs, ContentContainer, getDayClassNames, formatDayString, createFormatter, EventContainer, getSegAnchorAttrs, isMultiDayRange, buildSegTimeText, DateComponent, memoize, ViewContainer, Scroller, NowTimer, sortEventSegs, getSegMeta, sliceEventStore, intersectRanges, startOfDay, addDays, injectStyles } from '@fullcalendar/core/internal.js';\nimport { createElement, Fragment } from '@fullcalendar/core/preact.js';\n\nvar ListViewHeaderRow = /*#__PURE__*/function (_BaseComponent) {\n  _inherits(ListViewHeaderRow, _BaseComponent);\n\n  var _super = _createSuper(ListViewHeaderRow);\n\n  function ListViewHeaderRow() {\n    var _this;\n\n    _classCallCheck(this, ListViewHeaderRow);\n\n    _this = _super.apply(this, arguments);\n    _this.state = {\n      textId: getUniqueDomId()\n    };\n    return _this;\n  }\n\n  _createClass(ListViewHeaderRow, [{\n    key: \"render\",\n    value: function render() {\n      var _this$context = this.context,\n          theme = _this$context.theme,\n          dateEnv = _this$context.dateEnv,\n          options = _this$context.options,\n          viewApi = _this$context.viewApi;\n      var _this$props = this.props,\n          cellId = _this$props.cellId,\n          dayDate = _this$props.dayDate,\n          todayRange = _this$props.todayRange;\n      var textId = this.state.textId;\n      var dayMeta = getDateMeta(dayDate, todayRange); // will ever be falsy?\n\n      var text = options.listDayFormat ? dateEnv.format(dayDate, options.listDayFormat) : ''; // will ever be falsy? also, BAD NAME \"alt\"\n\n      var sideText = options.listDaySideFormat ? dateEnv.format(dayDate, options.listDaySideFormat) : '';\n      var renderProps = Object.assign({\n        date: dateEnv.toDate(dayDate),\n        view: viewApi,\n        textId: textId,\n        text: text,\n        sideText: sideText,\n        navLinkAttrs: buildNavLinkAttrs(this.context, dayDate),\n        sideNavLinkAttrs: buildNavLinkAttrs(this.context, dayDate, 'day', false)\n      }, dayMeta); // TODO: make a reusable HOC for dayHeader (used in daygrid/timegrid too)\n\n      return createElement(ContentContainer, {\n        elTag: \"tr\",\n        elClasses: ['fc-list-day'].concat(_toConsumableArray(getDayClassNames(dayMeta, theme))),\n        elAttrs: {\n          'data-date': formatDayString(dayDate)\n        },\n        renderProps: renderProps,\n        generatorName: \"dayHeaderContent\",\n        customGenerator: options.dayHeaderContent,\n        defaultGenerator: renderInnerContent,\n        classNameGenerator: options.dayHeaderClassNames,\n        didMount: options.dayHeaderDidMount,\n        willUnmount: options.dayHeaderWillUnmount\n      }, function (InnerContent) {\n        return (// TODO: force-hide top border based on :first-child\n          createElement(\"th\", {\n            scope: \"colgroup\",\n            colSpan: 3,\n            id: cellId,\n            \"aria-labelledby\": textId\n          }, createElement(InnerContent, {\n            elTag: \"div\",\n            elClasses: ['fc-list-day-cushion', theme.getClass('tableCellShaded')]\n          }))\n        );\n      });\n    }\n  }]);\n\n  return ListViewHeaderRow;\n}(BaseComponent);\n\nfunction renderInnerContent(props) {\n  return createElement(Fragment, null, props.text && createElement(\"a\", Object.assign({\n    id: props.textId,\n    className: \"fc-list-day-text\"\n  }, props.navLinkAttrs), props.text), props.sideText &&\n  /* not keyboard tabbable */\n  createElement(\"a\", Object.assign({\n    \"aria-hidden\": true,\n    className: \"fc-list-day-side-text\"\n  }, props.sideNavLinkAttrs), props.sideText));\n}\n\nvar DEFAULT_TIME_FORMAT = createFormatter({\n  hour: 'numeric',\n  minute: '2-digit',\n  meridiem: 'short'\n});\n\nvar ListViewEventRow = /*#__PURE__*/function (_BaseComponent2) {\n  _inherits(ListViewEventRow, _BaseComponent2);\n\n  var _super2 = _createSuper(ListViewEventRow);\n\n  function ListViewEventRow() {\n    _classCallCheck(this, ListViewEventRow);\n\n    return _super2.apply(this, arguments);\n  }\n\n  _createClass(ListViewEventRow, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          context = this.context;\n      var options = context.options;\n      var seg = props.seg,\n          timeHeaderId = props.timeHeaderId,\n          eventHeaderId = props.eventHeaderId,\n          dateHeaderId = props.dateHeaderId;\n      var timeFormat = options.eventTimeFormat || DEFAULT_TIME_FORMAT;\n      return createElement(EventContainer, Object.assign({}, props, {\n        elTag: \"tr\",\n        elClasses: ['fc-list-event', seg.eventRange.def.url && 'fc-event-forced-url'],\n        defaultGenerator: function defaultGenerator() {\n          return renderEventInnerContent(seg, context);\n        }\n        /* weird */\n        ,\n        seg: seg,\n        timeText: \"\",\n        disableDragging: true,\n        disableResizing: true\n      }), function (InnerContent, eventContentArg) {\n        return createElement(Fragment, null, buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId), createElement(\"td\", {\n          \"aria-hidden\": true,\n          className: \"fc-list-event-graphic\"\n        }, createElement(\"span\", {\n          className: \"fc-list-event-dot\",\n          style: {\n            borderColor: eventContentArg.borderColor || eventContentArg.backgroundColor\n          }\n        })), createElement(InnerContent, {\n          elTag: \"td\",\n          elClasses: ['fc-list-event-title'],\n          elAttrs: {\n            headers: \"\".concat(eventHeaderId, \" \").concat(dateHeaderId)\n          }\n        }));\n      });\n    }\n  }]);\n\n  return ListViewEventRow;\n}(BaseComponent);\n\nfunction renderEventInnerContent(seg, context) {\n  var interactiveAttrs = getSegAnchorAttrs(seg, context);\n  return createElement(\"a\", Object.assign({}, interactiveAttrs), seg.eventRange.def.title);\n}\n\nfunction buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId) {\n  var options = context.options;\n\n  if (options.displayEventTime !== false) {\n    var eventDef = seg.eventRange.def;\n    var eventInstance = seg.eventRange.instance;\n    var doAllDay = false;\n    var timeText;\n\n    if (eventDef.allDay) {\n      doAllDay = true;\n    } else if (isMultiDayRange(seg.eventRange.range)) {\n      // TODO: use (!isStart || !isEnd) instead?\n      if (seg.isStart) {\n        timeText = buildSegTimeText(seg, timeFormat, context, null, null, eventInstance.range.start, seg.end);\n      } else if (seg.isEnd) {\n        timeText = buildSegTimeText(seg, timeFormat, context, null, null, seg.start, eventInstance.range.end);\n      } else {\n        doAllDay = true;\n      }\n    } else {\n      timeText = buildSegTimeText(seg, timeFormat, context);\n    }\n\n    if (doAllDay) {\n      var renderProps = {\n        text: context.options.allDayText,\n        view: context.viewApi\n      };\n      return createElement(ContentContainer, {\n        elTag: \"td\",\n        elClasses: ['fc-list-event-time'],\n        elAttrs: {\n          headers: \"\".concat(timeHeaderId, \" \").concat(dateHeaderId)\n        },\n        renderProps: renderProps,\n        generatorName: \"allDayContent\",\n        customGenerator: options.allDayContent,\n        defaultGenerator: renderAllDayInner,\n        classNameGenerator: options.allDayClassNames,\n        didMount: options.allDayDidMount,\n        willUnmount: options.allDayWillUnmount\n      });\n    }\n\n    return createElement(\"td\", {\n      className: \"fc-list-event-time\"\n    }, timeText);\n  }\n\n  return null;\n}\n\nfunction renderAllDayInner(renderProps) {\n  return renderProps.text;\n}\n/*\nResponsible for the scroller, and forwarding event-related actions into the \"grid\".\n*/\n\n\nvar ListView = /*#__PURE__*/function (_DateComponent) {\n  _inherits(ListView, _DateComponent);\n\n  var _super3 = _createSuper(ListView);\n\n  function ListView() {\n    var _this2;\n\n    _classCallCheck(this, ListView);\n\n    _this2 = _super3.apply(this, arguments);\n    _this2.computeDateVars = memoize(computeDateVars);\n    _this2.eventStoreToSegs = memoize(_this2._eventStoreToSegs);\n    _this2.state = {\n      timeHeaderId: getUniqueDomId(),\n      eventHeaderId: getUniqueDomId(),\n      dateHeaderIdRoot: getUniqueDomId()\n    };\n\n    _this2.setRootEl = function (rootEl) {\n      if (rootEl) {\n        _this2.context.registerInteractiveComponent(_assertThisInitialized(_this2), {\n          el: rootEl\n        });\n      } else {\n        _this2.context.unregisterInteractiveComponent(_assertThisInitialized(_this2));\n      }\n    };\n\n    return _this2;\n  }\n\n  _createClass(ListView, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props,\n          context = this.context;\n\n      var _this$computeDateVars = this.computeDateVars(props.dateProfile),\n          dayDates = _this$computeDateVars.dayDates,\n          dayRanges = _this$computeDateVars.dayRanges;\n\n      var eventSegs = this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges);\n      return createElement(ViewContainer, {\n        elRef: this.setRootEl,\n        elClasses: ['fc-list', context.theme.getClass('table'), context.options.stickyHeaderDates !== false ? 'fc-list-sticky' : ''],\n        viewSpec: context.viewSpec\n      }, createElement(Scroller, {\n        liquid: !props.isHeightAuto,\n        overflowX: props.isHeightAuto ? 'visible' : 'hidden',\n        overflowY: props.isHeightAuto ? 'visible' : 'auto'\n      }, eventSegs.length > 0 ? this.renderSegList(eventSegs, dayDates) : this.renderEmptyMessage()));\n    }\n  }, {\n    key: \"renderEmptyMessage\",\n    value: function renderEmptyMessage() {\n      var _this$context2 = this.context,\n          options = _this$context2.options,\n          viewApi = _this$context2.viewApi;\n      var renderProps = {\n        text: options.noEventsText,\n        view: viewApi\n      };\n      return createElement(ContentContainer, {\n        elTag: \"div\",\n        elClasses: ['fc-list-empty'],\n        renderProps: renderProps,\n        generatorName: \"noEventsContent\",\n        customGenerator: options.noEventsContent,\n        defaultGenerator: renderNoEventsInner,\n        classNameGenerator: options.noEventsClassNames,\n        didMount: options.noEventsDidMount,\n        willUnmount: options.noEventsWillUnmount\n      }, function (InnerContent) {\n        return createElement(InnerContent, {\n          elTag: \"div\",\n          elClasses: ['fc-list-empty-cushion']\n        });\n      });\n    }\n  }, {\n    key: \"renderSegList\",\n    value: function renderSegList(allSegs, dayDates) {\n      var _this$context3 = this.context,\n          theme = _this$context3.theme,\n          options = _this$context3.options;\n      var _this$state = this.state,\n          timeHeaderId = _this$state.timeHeaderId,\n          eventHeaderId = _this$state.eventHeaderId,\n          dateHeaderIdRoot = _this$state.dateHeaderIdRoot;\n      var segsByDay = groupSegsByDay(allSegs); // sparse array\n\n      return createElement(NowTimer, {\n        unit: \"day\"\n      }, function (nowDate, todayRange) {\n        var innerNodes = [];\n\n        for (var dayIndex = 0; dayIndex < segsByDay.length; dayIndex += 1) {\n          var daySegs = segsByDay[dayIndex];\n\n          if (daySegs) {\n            // sparse array, so might be undefined\n            var dayStr = formatDayString(dayDates[dayIndex]);\n            var dateHeaderId = dateHeaderIdRoot + '-' + dayStr; // append a day header\n\n            innerNodes.push(createElement(ListViewHeaderRow, {\n              key: dayStr,\n              cellId: dateHeaderId,\n              dayDate: dayDates[dayIndex],\n              todayRange: todayRange\n            }));\n            daySegs = sortEventSegs(daySegs, options.eventOrder);\n\n            var _iterator = _createForOfIteratorHelper(daySegs),\n                _step;\n\n            try {\n              for (_iterator.s(); !(_step = _iterator.n()).done;) {\n                var seg = _step.value;\n                innerNodes.push(createElement(ListViewEventRow, Object.assign({\n                  key: dayStr + ':' + seg.eventRange.instance.instanceId\n                  /* are multiple segs for an instanceId */\n                  ,\n                  seg: seg,\n                  isDragging: false,\n                  isResizing: false,\n                  isDateSelecting: false,\n                  isSelected: false,\n                  timeHeaderId: timeHeaderId,\n                  eventHeaderId: eventHeaderId,\n                  dateHeaderId: dateHeaderId\n                }, getSegMeta(seg, todayRange, nowDate))));\n              }\n            } catch (err) {\n              _iterator.e(err);\n            } finally {\n              _iterator.f();\n            }\n          }\n        }\n\n        return createElement(\"table\", {\n          className: 'fc-list-table ' + theme.getClass('table')\n        }, createElement(\"thead\", null, createElement(\"tr\", null, createElement(\"th\", {\n          scope: \"col\",\n          id: timeHeaderId\n        }, options.timeHint), createElement(\"th\", {\n          scope: \"col\",\n          \"aria-hidden\": true\n        }), createElement(\"th\", {\n          scope: \"col\",\n          id: eventHeaderId\n        }, options.eventHint))), createElement(\"tbody\", null, innerNodes));\n      });\n    }\n  }, {\n    key: \"_eventStoreToSegs\",\n    value: function _eventStoreToSegs(eventStore, eventUiBases, dayRanges) {\n      return this.eventRangesToSegs(sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.options.nextDayThreshold).fg, dayRanges);\n    }\n  }, {\n    key: \"eventRangesToSegs\",\n    value: function eventRangesToSegs(eventRanges, dayRanges) {\n      var segs = [];\n\n      var _iterator2 = _createForOfIteratorHelper(eventRanges),\n          _step2;\n\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var eventRange = _step2.value;\n          segs.push.apply(segs, _toConsumableArray(this.eventRangeToSegs(eventRange, dayRanges)));\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n\n      return segs;\n    }\n  }, {\n    key: \"eventRangeToSegs\",\n    value: function eventRangeToSegs(eventRange, dayRanges) {\n      var dateEnv = this.context.dateEnv;\n      var nextDayThreshold = this.context.options.nextDayThreshold;\n      var range = eventRange.range;\n      var allDay = eventRange.def.allDay;\n      var dayIndex;\n      var segRange;\n      var seg;\n      var segs = [];\n\n      for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex += 1) {\n        segRange = intersectRanges(range, dayRanges[dayIndex]);\n\n        if (segRange) {\n          seg = {\n            component: this,\n            eventRange: eventRange,\n            start: segRange.start,\n            end: segRange.end,\n            isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(),\n            isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(),\n            dayIndex: dayIndex\n          };\n          segs.push(seg); // detect when range won't go fully into the next day,\n          // and mutate the latest seg to the be the end.\n\n          if (!seg.isEnd && !allDay && dayIndex + 1 < dayRanges.length && range.end < dateEnv.add(dayRanges[dayIndex + 1].start, nextDayThreshold)) {\n            seg.end = range.end;\n            seg.isEnd = true;\n            break;\n          }\n        }\n      }\n\n      return segs;\n    }\n  }]);\n\n  return ListView;\n}(DateComponent);\n\nfunction renderNoEventsInner(renderProps) {\n  return renderProps.text;\n}\n\nfunction computeDateVars(dateProfile) {\n  var dayStart = startOfDay(dateProfile.renderRange.start);\n  var viewEnd = dateProfile.renderRange.end;\n  var dayDates = [];\n  var dayRanges = [];\n\n  while (dayStart < viewEnd) {\n    dayDates.push(dayStart);\n    dayRanges.push({\n      start: dayStart,\n      end: addDays(dayStart, 1)\n    });\n    dayStart = addDays(dayStart, 1);\n  }\n\n  return {\n    dayDates: dayDates,\n    dayRanges: dayRanges\n  };\n} // Returns a sparse array of arrays, segs grouped by their dayIndex\n\n\nfunction groupSegsByDay(segs) {\n  var segsByDay = []; // sparse array\n\n  var i;\n  var seg;\n\n  for (i = 0; i < segs.length; i += 1) {\n    seg = segs[i];\n    (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = [])).push(seg);\n  }\n\n  return segsByDay;\n}\n\nvar css_248z = \":root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-theme-standard .fc-list{border:1px solid var(--fc-border-color)}.fc .fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc .fc-list-empty-cushion{margin:5em 0}.fc .fc-list-table{border-style:hidden;width:100%}.fc .fc-list-table tr>*{border-left:0;border-right:0}.fc .fc-list-sticky .fc-list-day>*{background:var(--fc-page-bg-color);position:sticky;top:0}.fc .fc-list-table thead{left:-10000px;position:absolute}.fc .fc-list-table tbody>tr:first-child th{border-top:0}.fc .fc-list-table th{padding:0}.fc .fc-list-day-cushion,.fc .fc-list-table td{padding:8px 14px}.fc .fc-list-day-cushion:after{clear:both;content:\\\"\\\";display:table}.fc-theme-standard .fc-list-day-cushion{background-color:var(--fc-neutral-bg-color)}.fc-direction-ltr .fc-list-day-text,.fc-direction-rtl .fc-list-day-side-text{float:left}.fc-direction-ltr .fc-list-day-side-text,.fc-direction-rtl .fc-list-day-text{float:right}.fc-direction-ltr .fc-list-table .fc-list-event-graphic{padding-right:0}.fc-direction-rtl .fc-list-table .fc-list-event-graphic{padding-left:0}.fc .fc-list-event.fc-event-forced-url{cursor:pointer}.fc .fc-list-event:hover td{background-color:var(--fc-list-event-hover-bg-color)}.fc .fc-list-event-graphic,.fc .fc-list-event-time{white-space:nowrap;width:1px}.fc .fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}.fc .fc-list-event-title a{color:inherit;text-decoration:none}.fc .fc-list-event.fc-event-forced-url:hover a{text-decoration:underline}\";\ninjectStyles(css_248z);\nexport { ListView };","import { createPlugin } from '@fullcalendar/core/index.js';\nimport { ListView } from './internal.js';\nimport { identity, createFormatter } from '@fullcalendar/core/internal.js';\nimport '@fullcalendar/core/preact.js';\nvar OPTION_REFINERS = {\n  listDayFormat: createFalsableFormatter,\n  listDaySideFormat: createFalsableFormatter,\n  noEventsClassNames: identity,\n  noEventsContent: identity,\n  noEventsDidMount: identity,\n  noEventsWillUnmount: identity // noEventsText is defined in base options\n\n};\n\nfunction createFalsableFormatter(input) {\n  return input === false ? null : createFormatter(input);\n}\n\nvar index = createPlugin({\n  name: '@fullcalendar/list',\n  optionRefiners: OPTION_REFINERS,\n  views: {\n    list: {\n      component: ListView,\n      buttonTextKey: 'list',\n      listDayFormat: {\n        month: 'long',\n        day: 'numeric',\n        year: 'numeric'\n      } // like \"January 1, 2016\"\n\n    },\n    listDay: {\n      type: 'list',\n      duration: {\n        days: 1\n      },\n      listDayFormat: {\n        weekday: 'long'\n      } // day-of-week is all we need. full date is probably in headerToolbar\n\n    },\n    listWeek: {\n      type: 'list',\n      duration: {\n        weeks: 1\n      },\n      listDayFormat: {\n        weekday: 'long'\n      },\n      listDaySideFormat: {\n        month: 'long',\n        day: 'numeric',\n        year: 'numeric'\n      }\n    },\n    listMonth: {\n      type: 'list',\n      duration: {\n        month: 1\n      },\n      listDaySideFormat: {\n        weekday: 'long'\n      } // day-of-week is nice-to-have\n\n    },\n    listYear: {\n      type: 'list',\n      duration: {\n        year: 1\n      },\n      listDaySideFormat: {\n        weekday: 'long'\n      } // day-of-week is nice-to-have\n\n    }\n  }\n});\nexport { index as default };","define([\"./arr\"], function (arr) {\n  \"use strict\";\n\n  return arr.slice;\n});","define(function () {\n  \"use strict\"; // [[Class]] -> type pairs\n\n  return {};\n});","define([\"../core\", \"../var/documentElement\", \"../selector\" // jQuery.contains\n], function (jQuery, documentElement) {\n  \"use strict\";\n\n  var isAttached = function isAttached(elem) {\n    return jQuery.contains(elem.ownerDocument, elem);\n  },\n      composed = {\n    composed: true\n  }; // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n  // Check attachment across shadow DOM boundaries when possible (gh-3504)\n  // Support: iOS 10.0-10.2 only\n  // Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n  // leading to errors. We need to check for `getRootNode`.\n\n\n  if (documentElement.getRootNode) {\n    isAttached = function isAttached(elem) {\n      return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;\n    };\n  }\n\n  return isAttached;\n});","define([\"./document\"], function (document) {\n  \"use strict\";\n\n  return document.documentElement;\n});","define([\"./core\", \"./core/isAttached\", \"./var/concat\", \"./var/isFunction\", \"./var/push\", \"./var/rcheckableType\", \"./core/access\", \"./manipulation/var/rtagName\", \"./manipulation/var/rscriptType\", \"./manipulation/wrapMap\", \"./manipulation/getAll\", \"./manipulation/setGlobalEval\", \"./manipulation/buildFragment\", \"./manipulation/support\", \"./data/var/dataPriv\", \"./data/var/dataUser\", \"./data/var/acceptData\", \"./core/DOMEval\", \"./core/nodeName\", \"./core/init\", \"./traversing\", \"./selector\", \"./event\"], function (jQuery, isAttached, concat, isFunction, push, rcheckableType, access, rtagName, rscriptType, wrapMap, getAll, setGlobalEval, buildFragment, support, dataPriv, dataUser, acceptData, DOMEval, nodeName) {\n  \"use strict\";\n\n  var\n  /* eslint-disable max-len */\n  // See https://github.com/eslint/eslint/issues/3229\n  rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n  /* eslint-enable */\n  // Support: IE <=10 - 11, Edge 12 - 13 only\n  // In IE/Edge using regex groups here causes severe slowdowns.\n  // See https://connect.microsoft.com/IE/feedback/details/1736512/\n  rnoInnerhtml = /<script|<style|<link/i,\n      // checked=\"checked\" or checked\n  rchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n      rcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g; // Prefer a tbody over its parent table for containing new rows\n\n  function manipulationTarget(elem, content) {\n    if (nodeName(elem, \"table\") && nodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n      return jQuery(elem).children(\"tbody\")[0] || elem;\n    }\n\n    return elem;\n  } // Replace/restore the type attribute of script elements for safe DOM manipulation\n\n\n  function disableScript(elem) {\n    elem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n    return elem;\n  }\n\n  function restoreScript(elem) {\n    if ((elem.type || \"\").slice(0, 5) === \"true/\") {\n      elem.type = elem.type.slice(5);\n    } else {\n      elem.removeAttribute(\"type\");\n    }\n\n    return elem;\n  }\n\n  function cloneCopyEvent(src, dest) {\n    var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n    if (dest.nodeType !== 1) {\n      return;\n    } // 1. Copy private data: events, handlers, etc.\n\n\n    if (dataPriv.hasData(src)) {\n      pdataOld = dataPriv.access(src);\n      pdataCur = dataPriv.set(dest, pdataOld);\n      events = pdataOld.events;\n\n      if (events) {\n        delete pdataCur.handle;\n        pdataCur.events = {};\n\n        for (type in events) {\n          for (i = 0, l = events[type].length; i < l; i++) {\n            jQuery.event.add(dest, type, events[type][i]);\n          }\n        }\n      }\n    } // 2. Copy user data\n\n\n    if (dataUser.hasData(src)) {\n      udataOld = dataUser.access(src);\n      udataCur = jQuery.extend({}, udataOld);\n      dataUser.set(dest, udataCur);\n    }\n  } // Fix IE bugs, see support tests\n\n\n  function fixInput(src, dest) {\n    var nodeName = dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button.\n\n    if (nodeName === \"input\" && rcheckableType.test(src.type)) {\n      dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options\n    } else if (nodeName === \"input\" || nodeName === \"textarea\") {\n      dest.defaultValue = src.defaultValue;\n    }\n  }\n\n  function domManip(collection, args, callback, ignored) {\n    // Flatten any nested arrays\n    args = concat.apply([], args);\n    var fragment,\n        first,\n        scripts,\n        hasScripts,\n        node,\n        doc,\n        i = 0,\n        l = collection.length,\n        iNoClone = l - 1,\n        value = args[0],\n        valueIsFunction = isFunction(value); // We can't cloneNode fragments that contain checked, in WebKit\n\n    if (valueIsFunction || l > 1 && typeof value === \"string\" && !support.checkClone && rchecked.test(value)) {\n      return collection.each(function (index) {\n        var self = collection.eq(index);\n\n        if (valueIsFunction) {\n          args[0] = value.call(this, index, self.html());\n        }\n\n        domManip(self, args, callback, ignored);\n      });\n    }\n\n    if (l) {\n      fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n      first = fragment.firstChild;\n\n      if (fragment.childNodes.length === 1) {\n        fragment = first;\n      } // Require either new content or an interest in ignored elements to invoke the callback\n\n\n      if (first || ignored) {\n        scripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n        hasScripts = scripts.length; // Use the original fragment for the last item\n        // instead of the first because it can end up\n        // being emptied incorrectly in certain situations (#8070).\n\n        for (; i < l; i++) {\n          node = fragment;\n\n          if (i !== iNoClone) {\n            node = jQuery.clone(node, true, true); // Keep references to cloned scripts for later restoration\n\n            if (hasScripts) {\n              // Support: Android <=4.0 only, PhantomJS 1 only\n              // push.apply(_, arraylike) throws on ancient WebKit\n              jQuery.merge(scripts, getAll(node, \"script\"));\n            }\n          }\n\n          callback.call(collection[i], node, i);\n        }\n\n        if (hasScripts) {\n          doc = scripts[scripts.length - 1].ownerDocument; // Reenable scripts\n\n          jQuery.map(scripts, restoreScript); // Evaluate executable scripts on first document insertion\n\n          for (i = 0; i < hasScripts; i++) {\n            node = scripts[i];\n\n            if (rscriptType.test(node.type || \"\") && !dataPriv.access(node, \"globalEval\") && jQuery.contains(doc, node)) {\n              if (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n                // Optional AJAX dependency, but won't run scripts if not present\n                if (jQuery._evalUrl && !node.noModule) {\n                  jQuery._evalUrl(node.src, {\n                    nonce: node.nonce || node.getAttribute(\"nonce\")\n                  });\n                }\n              } else {\n                DOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return collection;\n  }\n\n  function _remove(elem, selector, keepData) {\n    var node,\n        nodes = selector ? jQuery.filter(selector, elem) : elem,\n        i = 0;\n\n    for (; (node = nodes[i]) != null; i++) {\n      if (!keepData && node.nodeType === 1) {\n        jQuery.cleanData(getAll(node));\n      }\n\n      if (node.parentNode) {\n        if (keepData && isAttached(node)) {\n          setGlobalEval(getAll(node, \"script\"));\n        }\n\n        node.parentNode.removeChild(node);\n      }\n    }\n\n    return elem;\n  }\n\n  jQuery.extend({\n    htmlPrefilter: function htmlPrefilter(html) {\n      return html.replace(rxhtmlTag, \"<$1></$2>\");\n    },\n    clone: function clone(elem, dataAndEvents, deepDataAndEvents) {\n      var i,\n          l,\n          srcElements,\n          destElements,\n          clone = elem.cloneNode(true),\n          inPage = isAttached(elem); // Fix IE cloning issues\n\n      if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {\n        // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n        destElements = getAll(clone);\n        srcElements = getAll(elem);\n\n        for (i = 0, l = srcElements.length; i < l; i++) {\n          fixInput(srcElements[i], destElements[i]);\n        }\n      } // Copy the events from the original to the clone\n\n\n      if (dataAndEvents) {\n        if (deepDataAndEvents) {\n          srcElements = srcElements || getAll(elem);\n          destElements = destElements || getAll(clone);\n\n          for (i = 0, l = srcElements.length; i < l; i++) {\n            cloneCopyEvent(srcElements[i], destElements[i]);\n          }\n        } else {\n          cloneCopyEvent(elem, clone);\n        }\n      } // Preserve script evaluation history\n\n\n      destElements = getAll(clone, \"script\");\n\n      if (destElements.length > 0) {\n        setGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n      } // Return the cloned set\n\n\n      return clone;\n    },\n    cleanData: function cleanData(elems) {\n      var data,\n          elem,\n          type,\n          special = jQuery.event.special,\n          i = 0;\n\n      for (; (elem = elems[i]) !== undefined; i++) {\n        if (acceptData(elem)) {\n          if (data = elem[dataPriv.expando]) {\n            if (data.events) {\n              for (type in data.events) {\n                if (special[type]) {\n                  jQuery.event.remove(elem, type); // This is a shortcut to avoid jQuery.event.remove's overhead\n                } else {\n                  jQuery.removeEvent(elem, type, data.handle);\n                }\n              }\n            } // Support: Chrome <=35 - 45+\n            // Assign undefined instead of using delete, see Data#remove\n\n\n            elem[dataPriv.expando] = undefined;\n          }\n\n          if (elem[dataUser.expando]) {\n            // Support: Chrome <=35 - 45+\n            // Assign undefined instead of using delete, see Data#remove\n            elem[dataUser.expando] = undefined;\n          }\n        }\n      }\n    }\n  });\n  jQuery.fn.extend({\n    detach: function detach(selector) {\n      return _remove(this, selector, true);\n    },\n    remove: function remove(selector) {\n      return _remove(this, selector);\n    },\n    text: function text(value) {\n      return access(this, function (value) {\n        return value === undefined ? jQuery.text(this) : this.empty().each(function () {\n          if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n            this.textContent = value;\n          }\n        });\n      }, null, value, arguments.length);\n    },\n    append: function append() {\n      return domManip(this, arguments, function (elem) {\n        if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n          var target = manipulationTarget(this, elem);\n          target.appendChild(elem);\n        }\n      });\n    },\n    prepend: function prepend() {\n      return domManip(this, arguments, function (elem) {\n        if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n          var target = manipulationTarget(this, elem);\n          target.insertBefore(elem, target.firstChild);\n        }\n      });\n    },\n    before: function before() {\n      return domManip(this, arguments, function (elem) {\n        if (this.parentNode) {\n          this.parentNode.insertBefore(elem, this);\n        }\n      });\n    },\n    after: function after() {\n      return domManip(this, arguments, function (elem) {\n        if (this.parentNode) {\n          this.parentNode.insertBefore(elem, this.nextSibling);\n        }\n      });\n    },\n    empty: function empty() {\n      var elem,\n          i = 0;\n\n      for (; (elem = this[i]) != null; i++) {\n        if (elem.nodeType === 1) {\n          // Prevent memory leaks\n          jQuery.cleanData(getAll(elem, false)); // Remove any remaining nodes\n\n          elem.textContent = \"\";\n        }\n      }\n\n      return this;\n    },\n    clone: function clone(dataAndEvents, deepDataAndEvents) {\n      dataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n      deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n      return this.map(function () {\n        return jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n      });\n    },\n    html: function html(value) {\n      return access(this, function (value) {\n        var elem = this[0] || {},\n            i = 0,\n            l = this.length;\n\n        if (value === undefined && elem.nodeType === 1) {\n          return elem.innerHTML;\n        } // See if we can take a shortcut and just use innerHTML\n\n\n        if (typeof value === \"string\" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n          value = jQuery.htmlPrefilter(value);\n\n          try {\n            for (; i < l; i++) {\n              elem = this[i] || {}; // Remove element nodes and prevent memory leaks\n\n              if (elem.nodeType === 1) {\n                jQuery.cleanData(getAll(elem, false));\n                elem.innerHTML = value;\n              }\n            }\n\n            elem = 0; // If using innerHTML throws an exception, use the fallback method\n          } catch (e) {}\n        }\n\n        if (elem) {\n          this.empty().append(value);\n        }\n      }, null, value, arguments.length);\n    },\n    replaceWith: function replaceWith() {\n      var ignored = []; // Make the changes, replacing each non-ignored context element with the new content\n\n      return domManip(this, arguments, function (elem) {\n        var parent = this.parentNode;\n\n        if (jQuery.inArray(this, ignored) < 0) {\n          jQuery.cleanData(getAll(this));\n\n          if (parent) {\n            parent.replaceChild(elem, this);\n          }\n        } // Force callback invocation\n\n      }, ignored);\n    }\n  });\n  jQuery.each({\n    appendTo: \"append\",\n    prependTo: \"prepend\",\n    insertBefore: \"before\",\n    insertAfter: \"after\",\n    replaceAll: \"replaceWith\"\n  }, function (name, original) {\n    jQuery.fn[name] = function (selector) {\n      var elems,\n          ret = [],\n          insert = jQuery(selector),\n          last = insert.length - 1,\n          i = 0;\n\n      for (; i <= last; i++) {\n        elems = i === last ? this : this.clone(true);\n        jQuery(insert[i])[original](elems); // Support: Android <=4.0 only, PhantomJS 1 only\n        // .get() because push.apply(_, arraylike) throws on ancient WebKit\n\n        push.apply(ret, elems.get());\n      }\n\n      return this.pushStack(ret);\n    };\n  });\n  return jQuery;\n});","define([\"./arr\"], function (arr) {\n  \"use strict\";\n\n  return arr.indexOf;\n});","define([\"./class2type\"], function (class2type) {\n  \"use strict\";\n\n  return class2type.hasOwnProperty;\n});","define([\"./core\", \"./core/toType\", \"./var/isFunction\", \"./var/rnothtmlwhite\"], function (jQuery, toType, isFunction, rnothtmlwhite) {\n  \"use strict\"; // Convert String-formatted options into Object-formatted ones\n\n  function createOptions(options) {\n    var object = {};\n    jQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n      object[flag] = true;\n    });\n    return object;\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   */\n\n\n  jQuery.Callbacks = function (options) {\n    // Convert options from String-formatted to Object-formatted if needed\n    // (we check in cache first)\n    options = typeof options === \"string\" ? createOptions(options) : jQuery.extend({}, options);\n\n    var // Flag to know if list is currently firing\n    firing,\n        // Last fire value for non-forgettable lists\n    memory,\n        // Flag to know if list was already fired\n    _fired,\n        // Flag to prevent firing\n    _locked,\n        // Actual callback list\n    list = [],\n        // Queue of execution data for repeatable lists\n    queue = [],\n        // Index of currently firing callback (modified by add/remove as needed)\n    firingIndex = -1,\n        // Fire callbacks\n    fire = function fire() {\n      // Enforce single-firing\n      _locked = _locked || options.once; // Execute callbacks for all pending executions,\n      // respecting firingIndex overrides and runtime changes\n\n      _fired = firing = true;\n\n      for (; queue.length; firingIndex = -1) {\n        memory = queue.shift();\n\n        while (++firingIndex < list.length) {\n          // Run callback and check for early termination\n          if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {\n            // Jump to end and forget the data so .add doesn't re-fire\n            firingIndex = list.length;\n            memory = false;\n          }\n        }\n      } // Forget the data if we're done with it\n\n\n      if (!options.memory) {\n        memory = false;\n      }\n\n      firing = false; // Clean up if we're done firing for good\n\n      if (_locked) {\n        // Keep an empty list if we have data for future add calls\n        if (memory) {\n          list = []; // Otherwise, this object is spent\n        } else {\n          list = \"\";\n        }\n      }\n    },\n        // Actual Callbacks object\n    self = {\n      // Add a callback or a collection of callbacks to the list\n      add: function add() {\n        if (list) {\n          // If we have memory from a past run, we should fire after adding\n          if (memory && !firing) {\n            firingIndex = list.length - 1;\n            queue.push(memory);\n          }\n\n          (function add(args) {\n            jQuery.each(args, function (_, arg) {\n              if (isFunction(arg)) {\n                if (!options.unique || !self.has(arg)) {\n                  list.push(arg);\n                }\n              } else if (arg && arg.length && toType(arg) !== \"string\") {\n                // Inspect recursively\n                add(arg);\n              }\n            });\n          })(arguments);\n\n          if (memory && !firing) {\n            fire();\n          }\n        }\n\n        return this;\n      },\n      // Remove a callback from the list\n      remove: function remove() {\n        jQuery.each(arguments, function (_, arg) {\n          var index;\n\n          while ((index = jQuery.inArray(arg, list, index)) > -1) {\n            list.splice(index, 1); // Handle firing indexes\n\n            if (index <= firingIndex) {\n              firingIndex--;\n            }\n          }\n        });\n        return this;\n      },\n      // Check if a given callback is in the list.\n      // If no argument is given, return whether or not list has callbacks attached.\n      has: function has(fn) {\n        return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;\n      },\n      // Remove all callbacks from the list\n      empty: function empty() {\n        if (list) {\n          list = [];\n        }\n\n        return this;\n      },\n      // Disable .fire and .add\n      // Abort any current/pending executions\n      // Clear all callbacks and values\n      disable: function disable() {\n        _locked = queue = [];\n        list = memory = \"\";\n        return this;\n      },\n      disabled: function disabled() {\n        return !list;\n      },\n      // Disable .fire\n      // Also disable .add unless we have memory (since it would have no effect)\n      // Abort any pending executions\n      lock: function lock() {\n        _locked = queue = [];\n\n        if (!memory && !firing) {\n          list = memory = \"\";\n        }\n\n        return this;\n      },\n      locked: function locked() {\n        return !!_locked;\n      },\n      // Call all callbacks with the given context and arguments\n      fireWith: function fireWith(context, args) {\n        if (!_locked) {\n          args = args || [];\n          args = [context, args.slice ? args.slice() : args];\n          queue.push(args);\n\n          if (!firing) {\n            fire();\n          }\n        }\n\n        return this;\n      },\n      // Call all the callbacks with the given arguments\n      fire: function fire() {\n        self.fireWith(this, arguments);\n        return this;\n      },\n      // To know if the callbacks have already been called at least once\n      fired: function fired() {\n        return !!_fired;\n      }\n    };\n\n    return self;\n  };\n\n  return jQuery;\n});","define(function () {\n  \"use strict\";\n  /**\n   * Determines whether an object can have data\n   */\n\n  return function (owner) {\n    // Accepts only:\n    //  - Node\n    //    - Node.ELEMENT_NODE\n    //    - Node.DOCUMENT_NODE\n    //  - Object\n    //    - Any\n    return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;\n  };\n});","define([\"./core\", \"./data/var/dataPriv\", \"./deferred\", \"./callbacks\"], function (jQuery, dataPriv) {\n  \"use strict\";\n\n  jQuery.extend({\n    queue: function queue(elem, type, data) {\n      var queue;\n\n      if (elem) {\n        type = (type || \"fx\") + \"queue\";\n        queue = dataPriv.get(elem, type); // Speed up dequeue by getting out quickly if this is just a lookup\n\n        if (data) {\n          if (!queue || Array.isArray(data)) {\n            queue = dataPriv.access(elem, type, jQuery.makeArray(data));\n          } else {\n            queue.push(data);\n          }\n        }\n\n        return queue || [];\n      }\n    },\n    dequeue: function dequeue(elem, type) {\n      type = type || \"fx\";\n\n      var queue = jQuery.queue(elem, type),\n          startLength = queue.length,\n          fn = queue.shift(),\n          hooks = jQuery._queueHooks(elem, type),\n          next = function next() {\n        jQuery.dequeue(elem, type);\n      }; // If the fx queue is dequeued, always remove the progress sentinel\n\n\n      if (fn === \"inprogress\") {\n        fn = queue.shift();\n        startLength--;\n      }\n\n      if (fn) {\n        // Add a progress sentinel to prevent the fx queue from being\n        // automatically dequeued\n        if (type === \"fx\") {\n          queue.unshift(\"inprogress\");\n        } // Clear up the last queue stop function\n\n\n        delete hooks.stop;\n        fn.call(elem, next, hooks);\n      }\n\n      if (!startLength && hooks) {\n        hooks.empty.fire();\n      }\n    },\n    // Not public - generate a queueHooks object, or return the current one\n    _queueHooks: function _queueHooks(elem, type) {\n      var key = type + \"queueHooks\";\n      return dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n        empty: jQuery.Callbacks(\"once memory\").add(function () {\n          dataPriv.remove(elem, [type + \"queue\", key]);\n        })\n      });\n    }\n  });\n  jQuery.fn.extend({\n    queue: function queue(type, data) {\n      var setter = 2;\n\n      if (typeof type !== \"string\") {\n        data = type;\n        type = \"fx\";\n        setter--;\n      }\n\n      if (arguments.length < setter) {\n        return jQuery.queue(this[0], type);\n      }\n\n      return data === undefined ? this : this.each(function () {\n        var queue = jQuery.queue(this, type, data); // Ensure a hooks for this queue\n\n        jQuery._queueHooks(this, type);\n\n        if (type === \"fx\" && queue[0] !== \"inprogress\") {\n          jQuery.dequeue(this, type);\n        }\n      });\n    },\n    dequeue: function dequeue(type) {\n      return this.each(function () {\n        jQuery.dequeue(this, type);\n      });\n    },\n    clearQueue: function clearQueue(type) {\n      return this.queue(type || \"fx\", []);\n    },\n    // Get a promise resolved when queues of a certain type\n    // are emptied (fx is the type by default)\n    promise: function promise(type, obj) {\n      var tmp,\n          count = 1,\n          defer = jQuery.Deferred(),\n          elements = this,\n          i = this.length,\n          resolve = function resolve() {\n        if (! --count) {\n          defer.resolveWith(elements, [elements]);\n        }\n      };\n\n      if (typeof type !== \"string\") {\n        obj = type;\n        type = undefined;\n      }\n\n      type = type || \"fx\";\n\n      while (i--) {\n        tmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\n        if (tmp && tmp.empty) {\n          count++;\n          tmp.empty.add(resolve);\n        }\n      }\n\n      resolve();\n      return defer.promise(obj);\n    }\n  });\n  return jQuery;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"./core\", \"./core/camelCase\", \"./var/document\", \"./var/isFunction\", \"./var/rcssNum\", \"./var/rnothtmlwhite\", \"./css/var/cssExpand\", \"./css/var/isHiddenWithinTree\", \"./css/var/swap\", \"./css/adjustCSS\", \"./data/var/dataPriv\", \"./css/showHide\", \"./core/init\", \"./queue\", \"./deferred\", \"./traversing\", \"./manipulation\", \"./css\", \"./effects/Tween\"], function (jQuery, camelCase, document, isFunction, rcssNum, rnothtmlwhite, cssExpand, isHiddenWithinTree, swap, adjustCSS, dataPriv, showHide) {\n  \"use strict\";\n\n  var fxNow,\n      inProgress,\n      rfxtypes = /^(?:toggle|show|hide)$/,\n      rrun = /queueHooks$/;\n\n  function schedule() {\n    if (inProgress) {\n      if (document.hidden === false && window.requestAnimationFrame) {\n        window.requestAnimationFrame(schedule);\n      } else {\n        window.setTimeout(schedule, jQuery.fx.interval);\n      }\n\n      jQuery.fx.tick();\n    }\n  } // Animations created synchronously will run synchronously\n\n\n  function createFxNow() {\n    window.setTimeout(function () {\n      fxNow = undefined;\n    });\n    return fxNow = Date.now();\n  } // Generate parameters to create a standard animation\n\n\n  function genFx(type, includeWidth) {\n    var which,\n        i = 0,\n        attrs = {\n      height: type\n    }; // If we include width, step value is 1 to do all cssExpand values,\n    // otherwise step value is 2 to skip over Left and Right\n\n    includeWidth = includeWidth ? 1 : 0;\n\n    for (; i < 4; i += 2 - includeWidth) {\n      which = cssExpand[i];\n      attrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n    }\n\n    if (includeWidth) {\n      attrs.opacity = attrs.width = type;\n    }\n\n    return attrs;\n  }\n\n  function createTween(value, prop, animation) {\n    var tween,\n        collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n        index = 0,\n        length = collection.length;\n\n    for (; index < length; index++) {\n      if (tween = collection[index].call(animation, prop, value)) {\n        // We're done with this property\n        return tween;\n      }\n    }\n  }\n\n  function defaultPrefilter(elem, props, opts) {\n    var prop,\n        value,\n        toggle,\n        hooks,\n        oldfire,\n        propTween,\n        restoreDisplay,\n        display,\n        isBox = \"width\" in props || \"height\" in props,\n        anim = this,\n        orig = {},\n        style = elem.style,\n        hidden = elem.nodeType && isHiddenWithinTree(elem),\n        dataShow = dataPriv.get(elem, \"fxshow\"); // Queue-skipping animations hijack the fx hooks\n\n    if (!opts.queue) {\n      hooks = jQuery._queueHooks(elem, \"fx\");\n\n      if (hooks.unqueued == null) {\n        hooks.unqueued = 0;\n        oldfire = hooks.empty.fire;\n\n        hooks.empty.fire = function () {\n          if (!hooks.unqueued) {\n            oldfire();\n          }\n        };\n      }\n\n      hooks.unqueued++;\n      anim.always(function () {\n        // Ensure the complete handler is called before this completes\n        anim.always(function () {\n          hooks.unqueued--;\n\n          if (!jQuery.queue(elem, \"fx\").length) {\n            hooks.empty.fire();\n          }\n        });\n      });\n    } // Detect show/hide animations\n\n\n    for (prop in props) {\n      value = props[prop];\n\n      if (rfxtypes.test(value)) {\n        delete props[prop];\n        toggle = toggle || value === \"toggle\";\n\n        if (value === (hidden ? \"hide\" : \"show\")) {\n          // Pretend to be hidden if this is a \"show\" and\n          // there is still data from a stopped show/hide\n          if (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n            hidden = true; // Ignore all other no-op show/hide data\n          } else {\n            continue;\n          }\n        }\n\n        orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n      }\n    } // Bail out if this is a no-op like .hide().hide()\n\n\n    propTween = !jQuery.isEmptyObject(props);\n\n    if (!propTween && jQuery.isEmptyObject(orig)) {\n      return;\n    } // Restrict \"overflow\" and \"display\" styles during box animations\n\n\n    if (isBox && elem.nodeType === 1) {\n      // Support: IE <=9 - 11, Edge 12 - 15\n      // Record all 3 overflow attributes because IE does not infer the shorthand\n      // from identically-valued overflowX and overflowY and Edge just mirrors\n      // the overflowX value there.\n      opts.overflow = [style.overflow, style.overflowX, style.overflowY]; // Identify a display type, preferring old show/hide data over the CSS cascade\n\n      restoreDisplay = dataShow && dataShow.display;\n\n      if (restoreDisplay == null) {\n        restoreDisplay = dataPriv.get(elem, \"display\");\n      }\n\n      display = jQuery.css(elem, \"display\");\n\n      if (display === \"none\") {\n        if (restoreDisplay) {\n          display = restoreDisplay;\n        } else {\n          // Get nonempty value(s) by temporarily forcing visibility\n          showHide([elem], true);\n          restoreDisplay = elem.style.display || restoreDisplay;\n          display = jQuery.css(elem, \"display\");\n          showHide([elem]);\n        }\n      } // Animate inline elements as inline-block\n\n\n      if (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n        if (jQuery.css(elem, \"float\") === \"none\") {\n          // Restore the original display value at the end of pure show/hide animations\n          if (!propTween) {\n            anim.done(function () {\n              style.display = restoreDisplay;\n            });\n\n            if (restoreDisplay == null) {\n              display = style.display;\n              restoreDisplay = display === \"none\" ? \"\" : display;\n            }\n          }\n\n          style.display = \"inline-block\";\n        }\n      }\n    }\n\n    if (opts.overflow) {\n      style.overflow = \"hidden\";\n      anim.always(function () {\n        style.overflow = opts.overflow[0];\n        style.overflowX = opts.overflow[1];\n        style.overflowY = opts.overflow[2];\n      });\n    } // Implement show/hide animations\n\n\n    propTween = false;\n\n    for (prop in orig) {\n      // General show/hide setup for this element animation\n      if (!propTween) {\n        if (dataShow) {\n          if (\"hidden\" in dataShow) {\n            hidden = dataShow.hidden;\n          }\n        } else {\n          dataShow = dataPriv.access(elem, \"fxshow\", {\n            display: restoreDisplay\n          });\n        } // Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\n\n        if (toggle) {\n          dataShow.hidden = !hidden;\n        } // Show elements before animating them\n\n\n        if (hidden) {\n          showHide([elem], true);\n        }\n        /* eslint-disable no-loop-func */\n\n\n        anim.done(function () {\n          /* eslint-enable no-loop-func */\n          // The final step of a \"hide\" animation is actually hiding the element\n          if (!hidden) {\n            showHide([elem]);\n          }\n\n          dataPriv.remove(elem, \"fxshow\");\n\n          for (prop in orig) {\n            jQuery.style(elem, prop, orig[prop]);\n          }\n        });\n      } // Per-property setup\n\n\n      propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\n      if (!(prop in dataShow)) {\n        dataShow[prop] = propTween.start;\n\n        if (hidden) {\n          propTween.end = propTween.start;\n          propTween.start = 0;\n        }\n      }\n    }\n  }\n\n  function propFilter(props, specialEasing) {\n    var index, name, easing, value, hooks; // camelCase, specialEasing and expand cssHook pass\n\n    for (index in props) {\n      name = camelCase(index);\n      easing = specialEasing[name];\n      value = props[index];\n\n      if (Array.isArray(value)) {\n        easing = value[1];\n        value = props[index] = value[0];\n      }\n\n      if (index !== name) {\n        props[name] = value;\n        delete props[index];\n      }\n\n      hooks = jQuery.cssHooks[name];\n\n      if (hooks && \"expand\" in hooks) {\n        value = hooks.expand(value);\n        delete props[name]; // Not quite $.extend, this won't overwrite existing keys.\n        // Reusing 'index' because we have the correct \"name\"\n\n        for (index in value) {\n          if (!(index in props)) {\n            props[index] = value[index];\n            specialEasing[index] = easing;\n          }\n        }\n      } else {\n        specialEasing[name] = easing;\n      }\n    }\n  }\n\n  function Animation(elem, properties, options) {\n    var result,\n        stopped,\n        index = 0,\n        length = Animation.prefilters.length,\n        deferred = jQuery.Deferred().always(function () {\n      // Don't match elem in the :animated selector\n      delete tick.elem;\n    }),\n        tick = function tick() {\n      if (stopped) {\n        return false;\n      }\n\n      var currentTime = fxNow || createFxNow(),\n          remaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n          // Support: Android 2.3 only\n      // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n      temp = remaining / animation.duration || 0,\n          percent = 1 - temp,\n          index = 0,\n          length = animation.tweens.length;\n\n      for (; index < length; index++) {\n        animation.tweens[index].run(percent);\n      }\n\n      deferred.notifyWith(elem, [animation, percent, remaining]); // If there's more to do, yield\n\n      if (percent < 1 && length) {\n        return remaining;\n      } // If this was an empty animation, synthesize a final progress notification\n\n\n      if (!length) {\n        deferred.notifyWith(elem, [animation, 1, 0]);\n      } // Resolve the animation and report its conclusion\n\n\n      deferred.resolveWith(elem, [animation]);\n      return false;\n    },\n        animation = deferred.promise({\n      elem: elem,\n      props: jQuery.extend({}, properties),\n      opts: jQuery.extend(true, {\n        specialEasing: {},\n        easing: jQuery.easing._default\n      }, options),\n      originalProperties: properties,\n      originalOptions: options,\n      startTime: fxNow || createFxNow(),\n      duration: options.duration,\n      tweens: [],\n      createTween: function createTween(prop, end) {\n        var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);\n        animation.tweens.push(tween);\n        return tween;\n      },\n      stop: function stop(gotoEnd) {\n        var index = 0,\n            // If we are going to the end, we want to run all the tweens\n        // otherwise we skip this part\n        length = gotoEnd ? animation.tweens.length : 0;\n\n        if (stopped) {\n          return this;\n        }\n\n        stopped = true;\n\n        for (; index < length; index++) {\n          animation.tweens[index].run(1);\n        } // Resolve when we played the last frame; otherwise, reject\n\n\n        if (gotoEnd) {\n          deferred.notifyWith(elem, [animation, 1, 0]);\n          deferred.resolveWith(elem, [animation, gotoEnd]);\n        } else {\n          deferred.rejectWith(elem, [animation, gotoEnd]);\n        }\n\n        return this;\n      }\n    }),\n        props = animation.props;\n\n    propFilter(props, animation.opts.specialEasing);\n\n    for (; index < length; index++) {\n      result = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\n      if (result) {\n        if (isFunction(result.stop)) {\n          jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);\n        }\n\n        return result;\n      }\n    }\n\n    jQuery.map(props, createTween, animation);\n\n    if (isFunction(animation.opts.start)) {\n      animation.opts.start.call(elem, animation);\n    } // Attach callbacks from options\n\n\n    animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);\n    jQuery.fx.timer(jQuery.extend(tick, {\n      elem: elem,\n      anim: animation,\n      queue: animation.opts.queue\n    }));\n    return animation;\n  }\n\n  jQuery.Animation = jQuery.extend(Animation, {\n    tweeners: {\n      \"*\": [function (prop, value) {\n        var tween = this.createTween(prop, value);\n        adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n        return tween;\n      }]\n    },\n    tweener: function tweener(props, callback) {\n      if (isFunction(props)) {\n        callback = props;\n        props = [\"*\"];\n      } else {\n        props = props.match(rnothtmlwhite);\n      }\n\n      var prop,\n          index = 0,\n          length = props.length;\n\n      for (; index < length; index++) {\n        prop = props[index];\n        Animation.tweeners[prop] = Animation.tweeners[prop] || [];\n        Animation.tweeners[prop].unshift(callback);\n      }\n    },\n    prefilters: [defaultPrefilter],\n    prefilter: function prefilter(callback, prepend) {\n      if (prepend) {\n        Animation.prefilters.unshift(callback);\n      } else {\n        Animation.prefilters.push(callback);\n      }\n    }\n  });\n\n  jQuery.speed = function (speed, easing, fn) {\n    var opt = speed && _typeof(speed) === \"object\" ? jQuery.extend({}, speed) : {\n      complete: fn || !fn && easing || isFunction(speed) && speed,\n      duration: speed,\n      easing: fn && easing || easing && !isFunction(easing) && easing\n    }; // Go to the end state if fx are off\n\n    if (jQuery.fx.off) {\n      opt.duration = 0;\n    } else {\n      if (typeof opt.duration !== \"number\") {\n        if (opt.duration in jQuery.fx.speeds) {\n          opt.duration = jQuery.fx.speeds[opt.duration];\n        } else {\n          opt.duration = jQuery.fx.speeds._default;\n        }\n      }\n    } // Normalize opt.queue - true/undefined/null -> \"fx\"\n\n\n    if (opt.queue == null || opt.queue === true) {\n      opt.queue = \"fx\";\n    } // Queueing\n\n\n    opt.old = opt.complete;\n\n    opt.complete = function () {\n      if (isFunction(opt.old)) {\n        opt.old.call(this);\n      }\n\n      if (opt.queue) {\n        jQuery.dequeue(this, opt.queue);\n      }\n    };\n\n    return opt;\n  };\n\n  jQuery.fn.extend({\n    fadeTo: function fadeTo(speed, to, easing, callback) {\n      // Show any hidden elements after setting opacity to 0\n      return this.filter(isHiddenWithinTree).css(\"opacity\", 0).show() // Animate to the value specified\n      .end().animate({\n        opacity: to\n      }, speed, easing, callback);\n    },\n    animate: function animate(prop, speed, easing, callback) {\n      var empty = jQuery.isEmptyObject(prop),\n          optall = jQuery.speed(speed, easing, callback),\n          doAnimation = function doAnimation() {\n        // Operate on a copy of prop so per-property easing won't be lost\n        var anim = Animation(this, jQuery.extend({}, prop), optall); // Empty animations, or finishing resolves immediately\n\n        if (empty || dataPriv.get(this, \"finish\")) {\n          anim.stop(true);\n        }\n      };\n\n      doAnimation.finish = doAnimation;\n      return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);\n    },\n    stop: function stop(type, clearQueue, gotoEnd) {\n      var stopQueue = function stopQueue(hooks) {\n        var stop = hooks.stop;\n        delete hooks.stop;\n        stop(gotoEnd);\n      };\n\n      if (typeof type !== \"string\") {\n        gotoEnd = clearQueue;\n        clearQueue = type;\n        type = undefined;\n      }\n\n      if (clearQueue && type !== false) {\n        this.queue(type || \"fx\", []);\n      }\n\n      return this.each(function () {\n        var dequeue = true,\n            index = type != null && type + \"queueHooks\",\n            timers = jQuery.timers,\n            data = dataPriv.get(this);\n\n        if (index) {\n          if (data[index] && data[index].stop) {\n            stopQueue(data[index]);\n          }\n        } else {\n          for (index in data) {\n            if (data[index] && data[index].stop && rrun.test(index)) {\n              stopQueue(data[index]);\n            }\n          }\n        }\n\n        for (index = timers.length; index--;) {\n          if (timers[index].elem === this && (type == null || timers[index].queue === type)) {\n            timers[index].anim.stop(gotoEnd);\n            dequeue = false;\n            timers.splice(index, 1);\n          }\n        } // Start the next in the queue if the last step wasn't forced.\n        // Timers currently will call their complete callbacks, which\n        // will dequeue but only if they were gotoEnd.\n\n\n        if (dequeue || !gotoEnd) {\n          jQuery.dequeue(this, type);\n        }\n      });\n    },\n    finish: function finish(type) {\n      if (type !== false) {\n        type = type || \"fx\";\n      }\n\n      return this.each(function () {\n        var index,\n            data = dataPriv.get(this),\n            queue = data[type + \"queue\"],\n            hooks = data[type + \"queueHooks\"],\n            timers = jQuery.timers,\n            length = queue ? queue.length : 0; // Enable finishing flag on private data\n\n        data.finish = true; // Empty the queue first\n\n        jQuery.queue(this, type, []);\n\n        if (hooks && hooks.stop) {\n          hooks.stop.call(this, true);\n        } // Look for any active animations, and finish them\n\n\n        for (index = timers.length; index--;) {\n          if (timers[index].elem === this && timers[index].queue === type) {\n            timers[index].anim.stop(true);\n            timers.splice(index, 1);\n          }\n        } // Look for any animations in the old queue and finish them\n\n\n        for (index = 0; index < length; index++) {\n          if (queue[index] && queue[index].finish) {\n            queue[index].finish.call(this);\n          }\n        } // Turn off finishing flag\n\n\n        delete data.finish;\n      });\n    }\n  });\n  jQuery.each([\"toggle\", \"show\", \"hide\"], function (i, name) {\n    var cssFn = jQuery.fn[name];\n\n    jQuery.fn[name] = function (speed, easing, callback) {\n      return speed == null || typeof speed === \"boolean\" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);\n    };\n  }); // Generate shortcuts for custom animations\n\n  jQuery.each({\n    slideDown: genFx(\"show\"),\n    slideUp: genFx(\"hide\"),\n    slideToggle: genFx(\"toggle\"),\n    fadeIn: {\n      opacity: \"show\"\n    },\n    fadeOut: {\n      opacity: \"hide\"\n    },\n    fadeToggle: {\n      opacity: \"toggle\"\n    }\n  }, function (name, props) {\n    jQuery.fn[name] = function (speed, easing, callback) {\n      return this.animate(props, speed, easing, callback);\n    };\n  });\n  jQuery.timers = [];\n\n  jQuery.fx.tick = function () {\n    var timer,\n        i = 0,\n        timers = jQuery.timers;\n    fxNow = Date.now();\n\n    for (; i < timers.length; i++) {\n      timer = timers[i]; // Run the timer and safely remove it when done (allowing for external removal)\n\n      if (!timer() && timers[i] === timer) {\n        timers.splice(i--, 1);\n      }\n    }\n\n    if (!timers.length) {\n      jQuery.fx.stop();\n    }\n\n    fxNow = undefined;\n  };\n\n  jQuery.fx.timer = function (timer) {\n    jQuery.timers.push(timer);\n    jQuery.fx.start();\n  };\n\n  jQuery.fx.interval = 13;\n\n  jQuery.fx.start = function () {\n    if (inProgress) {\n      return;\n    }\n\n    inProgress = true;\n    schedule();\n  };\n\n  jQuery.fx.stop = function () {\n    inProgress = null;\n  };\n\n  jQuery.fx.speeds = {\n    slow: 600,\n    fast: 200,\n    // Default speed\n    _default: 400\n  };\n  return jQuery;\n});","define([\"../var/pnum\"], function (pnum) {\n  \"use strict\";\n\n  return new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n});","define(function () {\n  \"use strict\";\n\n  return [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n});","define(function () {\n  \"use strict\";\n\n  return /^(?:checkbox|radio)$/i;\n});","define([\"../../var/pnum\"], function (pnum) {\n  \"use strict\";\n\n  return new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n});","define([\"../core\", \"../var/document\", \"../var/documentElement\", \"../var/support\"], function (jQuery, document, documentElement, support) {\n  \"use strict\";\n\n  (function () {\n    // Executing both pixelPosition & boxSizingReliable tests require only one layout\n    // so they're executed at the same time to save the second computation.\n    function computeStyleTests() {\n      // This is a singleton, we need to execute it only once\n      if (!div) {\n        return;\n      }\n\n      container.style.cssText = \"position:absolute;left:-11111px;width:60px;\" + \"margin-top:1px;padding:0;border:0\";\n      div.style.cssText = \"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" + \"margin:auto;border:1px;padding:1px;\" + \"width:60%;top:1%\";\n      documentElement.appendChild(container).appendChild(div);\n      var divStyle = window.getComputedStyle(div);\n      pixelPositionVal = divStyle.top !== \"1%\"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\n      reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12; // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n      // Some styles come back with percentage values, even though they shouldn't\n\n      div.style.right = \"60%\";\n      pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36; // Support: IE 9 - 11 only\n      // Detect misreporting of content dimensions for box-sizing:border-box elements\n\n      boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36; // Support: IE 9 only\n      // Detect overflow:scroll screwiness (gh-3699)\n      // Support: Chrome <=64\n      // Don't get tricked when zoom affects offsetWidth (gh-4029)\n\n      div.style.position = \"absolute\";\n      scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n      documentElement.removeChild(container); // Nullify the div so it wouldn't be stored in the memory and\n      // it will also be a sign that checks already performed\n\n      div = null;\n    }\n\n    function roundPixelMeasures(measure) {\n      return Math.round(parseFloat(measure));\n    }\n\n    var pixelPositionVal,\n        boxSizingReliableVal,\n        scrollboxSizeVal,\n        pixelBoxStylesVal,\n        reliableMarginLeftVal,\n        container = document.createElement(\"div\"),\n        div = document.createElement(\"div\"); // Finish early in limited (non-browser) environments\n\n    if (!div.style) {\n      return;\n    } // Support: IE <=9 - 11 only\n    // Style of cloned element affects source element cloned (#8908)\n\n\n    div.style.backgroundClip = \"content-box\";\n    div.cloneNode(true).style.backgroundClip = \"\";\n    support.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n    jQuery.extend(support, {\n      boxSizingReliable: function boxSizingReliable() {\n        computeStyleTests();\n        return boxSizingReliableVal;\n      },\n      pixelBoxStyles: function pixelBoxStyles() {\n        computeStyleTests();\n        return pixelBoxStylesVal;\n      },\n      pixelPosition: function pixelPosition() {\n        computeStyleTests();\n        return pixelPositionVal;\n      },\n      reliableMarginLeft: function reliableMarginLeft() {\n        computeStyleTests();\n        return reliableMarginLeftVal;\n      },\n      scrollboxSize: function scrollboxSize() {\n        computeStyleTests();\n        return scrollboxSizeVal;\n      }\n    });\n  })();\n\n  return support;\n});","define([\"../var/document\", \"../var/support\"], function (document, support) {\n  \"use strict\";\n\n  (function () {\n    var input = document.createElement(\"input\"),\n        select = document.createElement(\"select\"),\n        opt = select.appendChild(document.createElement(\"option\"));\n    input.type = \"checkbox\"; // Support: Android <=4.3 only\n    // Default value for a checkbox should be \"on\"\n\n    support.checkOn = input.value !== \"\"; // Support: IE <=11 only\n    // Must access selectedIndex to make default options select\n\n    support.optSelected = opt.selected; // Support: IE <=11 only\n    // An input loses its value after becoming a radio\n\n    input = document.createElement(\"input\");\n    input.value = \"t\";\n    input.type = \"radio\";\n    support.radioValue = input.value === \"t\";\n  })();\n\n  return support;\n});","define([\"../var/rnothtmlwhite\"], function (rnothtmlwhite) {\n  \"use strict\"; // Strip and collapse whitespace according to HTML spec\n  // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\n  function stripAndCollapse(value) {\n    var tokens = value.match(rnothtmlwhite) || [];\n    return tokens.join(\" \");\n  }\n\n  return stripAndCollapse;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"../core\", \"../var/document\", \"../data/var/dataPriv\", \"../data/var/acceptData\", \"../var/hasOwn\", \"../var/isFunction\", \"../var/isWindow\", \"../event\"], function (jQuery, document, dataPriv, acceptData, hasOwn, isFunction, isWindow) {\n  \"use strict\";\n\n  var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n      stopPropagationCallback = function stopPropagationCallback(e) {\n    e.stopPropagation();\n  };\n\n  jQuery.extend(jQuery.event, {\n    trigger: function trigger(event, data, elem, onlyHandlers) {\n      var i,\n          cur,\n          tmp,\n          bubbleType,\n          ontype,\n          handle,\n          special,\n          lastElement,\n          eventPath = [elem || document],\n          type = hasOwn.call(event, \"type\") ? event.type : event,\n          namespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n      cur = lastElement = tmp = elem = elem || document; // Don't do events on text and comment nodes\n\n      if (elem.nodeType === 3 || elem.nodeType === 8) {\n        return;\n      } // focus/blur morphs to focusin/out; ensure we're not firing them right now\n\n\n      if (rfocusMorph.test(type + jQuery.event.triggered)) {\n        return;\n      }\n\n      if (type.indexOf(\".\") > -1) {\n        // Namespaced trigger; create a regexp to match event type in handle()\n        namespaces = type.split(\".\");\n        type = namespaces.shift();\n        namespaces.sort();\n      }\n\n      ontype = type.indexOf(\":\") < 0 && \"on\" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string\n\n      event = event[jQuery.expando] ? event : new jQuery.Event(type, _typeof(event) === \"object\" && event); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\n      event.isTrigger = onlyHandlers ? 2 : 3;\n      event.namespace = namespaces.join(\".\");\n      event.rnamespace = event.namespace ? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null; // Clean up the event in case it is being reused\n\n      event.result = undefined;\n\n      if (!event.target) {\n        event.target = elem;\n      } // Clone any incoming data and prepend the event, creating the handler arg list\n\n\n      data = data == null ? [event] : jQuery.makeArray(data, [event]); // Allow special events to draw outside the lines\n\n      special = jQuery.event.special[type] || {};\n\n      if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n        return;\n      } // Determine event propagation path in advance, per W3C events spec (#9951)\n      // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\n\n      if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n        bubbleType = special.delegateType || type;\n\n        if (!rfocusMorph.test(bubbleType + type)) {\n          cur = cur.parentNode;\n        }\n\n        for (; cur; cur = cur.parentNode) {\n          eventPath.push(cur);\n          tmp = cur;\n        } // Only add window if we got to document (e.g., not plain obj or detached DOM)\n\n\n        if (tmp === (elem.ownerDocument || document)) {\n          eventPath.push(tmp.defaultView || tmp.parentWindow || window);\n        }\n      } // Fire handlers on the event path\n\n\n      i = 0;\n\n      while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n        lastElement = cur;\n        event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler\n\n        handle = (dataPriv.get(cur, \"events\") || {})[event.type] && dataPriv.get(cur, \"handle\");\n\n        if (handle) {\n          handle.apply(cur, data);\n        } // Native handler\n\n\n        handle = ontype && cur[ontype];\n\n        if (handle && handle.apply && acceptData(cur)) {\n          event.result = handle.apply(cur, data);\n\n          if (event.result === false) {\n            event.preventDefault();\n          }\n        }\n      }\n\n      event.type = type; // If nobody prevented the default action, do it now\n\n      if (!onlyHandlers && !event.isDefaultPrevented()) {\n        if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {\n          // Call a native DOM method on the target with the same name as the event.\n          // Don't do default actions on window, that's where global variables be (#6170)\n          if (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n            // Don't re-trigger an onFOO event when we call its FOO() method\n            tmp = elem[ontype];\n\n            if (tmp) {\n              elem[ontype] = null;\n            } // Prevent re-triggering of the same event, since we already bubbled it above\n\n\n            jQuery.event.triggered = type;\n\n            if (event.isPropagationStopped()) {\n              lastElement.addEventListener(type, stopPropagationCallback);\n            }\n\n            elem[type]();\n\n            if (event.isPropagationStopped()) {\n              lastElement.removeEventListener(type, stopPropagationCallback);\n            }\n\n            jQuery.event.triggered = undefined;\n\n            if (tmp) {\n              elem[ontype] = tmp;\n            }\n          }\n        }\n      }\n\n      return event.result;\n    },\n    // Piggyback on a donor event to simulate a different one\n    // Used only for `focus(in | out)` events\n    simulate: function simulate(type, elem, event) {\n      var e = jQuery.extend(new jQuery.Event(), event, {\n        type: type,\n        isSimulated: true\n      });\n      jQuery.event.trigger(e, null, elem);\n    }\n  });\n  jQuery.fn.extend({\n    trigger: function trigger(type, data) {\n      return this.each(function () {\n        jQuery.event.trigger(type, data, this);\n      });\n    },\n    triggerHandler: function triggerHandler(type, data) {\n      var elem = this[0];\n\n      if (elem) {\n        return jQuery.event.trigger(type, data, elem, true);\n      }\n    }\n  });\n  return jQuery;\n});","import { options as n } from \"preact\";\nvar t,\n    r,\n    u,\n    i,\n    o = 0,\n    f = [],\n    c = [],\n    e = n.__b,\n    a = n.__r,\n    v = n.diffed,\n    l = n.__c,\n    m = n.unmount;\n\nfunction d(t, u) {\n  n.__h && n.__h(r, t, o || u), o = 0;\n  var i = r.__H || (r.__H = {\n    __: [],\n    __h: []\n  });\n  return t >= i.__.length && i.__.push({\n    __V: c\n  }), i.__[t];\n}\n\nfunction p(n) {\n  return o = 1, y(B, n);\n}\n\nfunction y(n, u, i) {\n  var o = d(t++, 2);\n\n  if (o.t = n, !o.__c && (o.__ = [i ? i(u) : B(void 0, u), function (n) {\n    var t = o.__N ? o.__N[0] : o.__[0],\n        r = o.t(t, n);\n    t !== r && (o.__N = [r, o.__[1]], o.__c.setState({}));\n  }], o.__c = r, !r.u)) {\n    r.u = !0;\n    var f = r.shouldComponentUpdate;\n\n    r.shouldComponentUpdate = function (n, t, r) {\n      if (!o.__c.__H) return !0;\n\n      var u = o.__c.__H.__.filter(function (n) {\n        return n.__c;\n      });\n\n      if (u.every(function (n) {\n        return !n.__N;\n      })) return !f || f.call(this, n, t, r);\n      var i = !1;\n      return u.forEach(function (n) {\n        if (n.__N) {\n          var t = n.__[0];\n          n.__ = n.__N, n.__N = void 0, t !== n.__[0] && (i = !0);\n        }\n      }), !(!i && o.__c.props === n) && (!f || f.call(this, n, t, r));\n    };\n  }\n\n  return o.__N || o.__;\n}\n\nfunction h(u, i) {\n  var o = d(t++, 3);\n  !n.__s && z(o.__H, i) && (o.__ = u, o.i = i, r.__H.__h.push(o));\n}\n\nfunction s(u, i) {\n  var o = d(t++, 4);\n  !n.__s && z(o.__H, i) && (o.__ = u, o.i = i, r.__h.push(o));\n}\n\nfunction _(n) {\n  return o = 5, F(function () {\n    return {\n      current: n\n    };\n  }, []);\n}\n\nfunction A(n, t, r) {\n  o = 6, s(function () {\n    return \"function\" == typeof n ? (n(t()), function () {\n      return n(null);\n    }) : n ? (n.current = t(), function () {\n      return n.current = null;\n    }) : void 0;\n  }, null == r ? r : r.concat(n));\n}\n\nfunction F(n, r) {\n  var u = d(t++, 7);\n  return z(u.__H, r) ? (u.__V = n(), u.i = r, u.__h = n, u.__V) : u.__;\n}\n\nfunction T(n, t) {\n  return o = 8, F(function () {\n    return n;\n  }, t);\n}\n\nfunction q(n) {\n  var u = r.context[n.__c],\n      i = d(t++, 9);\n  return i.c = n, u ? (null == i.__ && (i.__ = !0, u.sub(r)), u.props.value) : n.__;\n}\n\nfunction x(t, r) {\n  n.useDebugValue && n.useDebugValue(r ? r(t) : t);\n}\n\nfunction P(n) {\n  var u = d(t++, 10),\n      i = p();\n  return u.__ = n, r.componentDidCatch || (r.componentDidCatch = function (n, t) {\n    u.__ && u.__(n, t), i[1](n);\n  }), [i[0], function () {\n    i[1](void 0);\n  }];\n}\n\nfunction V() {\n  var n = d(t++, 11);\n\n  if (!n.__) {\n    for (var u = r.__v; null !== u && !u.__m && null !== u.__;) {\n      u = u.__;\n    }\n\n    var i = u.__m || (u.__m = [0, 0]);\n    n.__ = \"P\" + i[0] + \"-\" + i[1]++;\n  }\n\n  return n.__;\n}\n\nfunction b() {\n  for (var t; t = f.shift();) {\n    if (t.__P && t.__H) try {\n      t.__H.__h.forEach(k), t.__H.__h.forEach(w), t.__H.__h = [];\n    } catch (r) {\n      t.__H.__h = [], n.__e(r, t.__v);\n    }\n  }\n}\n\nn.__b = function (n) {\n  r = null, e && e(n);\n}, n.__r = function (n) {\n  a && a(n), t = 0;\n  var i = (r = n.__c).__H;\n  i && (u === r ? (i.__h = [], r.__h = [], i.__.forEach(function (n) {\n    n.__N && (n.__ = n.__N), n.__V = c, n.__N = n.i = void 0;\n  })) : (i.__h.forEach(k), i.__h.forEach(w), i.__h = [])), u = r;\n}, n.diffed = function (t) {\n  v && v(t);\n  var o = t.__c;\n  o && o.__H && (o.__H.__h.length && (1 !== f.push(o) && i === n.requestAnimationFrame || ((i = n.requestAnimationFrame) || j)(b)), o.__H.__.forEach(function (n) {\n    n.i && (n.__H = n.i), n.__V !== c && (n.__ = n.__V), n.i = void 0, n.__V = c;\n  })), u = r = null;\n}, n.__c = function (t, r) {\n  r.some(function (t) {\n    try {\n      t.__h.forEach(k), t.__h = t.__h.filter(function (n) {\n        return !n.__ || w(n);\n      });\n    } catch (u) {\n      r.some(function (n) {\n        n.__h && (n.__h = []);\n      }), r = [], n.__e(u, t.__v);\n    }\n  }), l && l(t, r);\n}, n.unmount = function (t) {\n  m && m(t);\n  var r,\n      u = t.__c;\n  u && u.__H && (u.__H.__.forEach(function (n) {\n    try {\n      k(n);\n    } catch (n) {\n      r = n;\n    }\n  }), u.__H = void 0, r && n.__e(r, u.__v));\n};\nvar g = \"function\" == typeof requestAnimationFrame;\n\nfunction j(n) {\n  var t,\n      r = function r() {\n    clearTimeout(u), g && cancelAnimationFrame(t), setTimeout(n);\n  },\n      u = setTimeout(r, 100);\n\n  g && (t = requestAnimationFrame(r));\n}\n\nfunction k(n) {\n  var t = r,\n      u = n.__c;\n  \"function\" == typeof u && (n.__c = void 0, u()), r = t;\n}\n\nfunction w(n) {\n  var t = r;\n  n.__c = n.__(), r = t;\n}\n\nfunction z(n, t) {\n  return !n || n.length !== t.length || t.some(function (t, r) {\n    return t !== n[r];\n  });\n}\n\nfunction B(n, t) {\n  return \"function\" == typeof t ? t(n) : t;\n}\n\nexport { T as useCallback, q as useContext, x as useDebugValue, h as useEffect, P as useErrorBoundary, V as useId, A as useImperativeHandle, s as useLayoutEffect, F as useMemo, y as useReducer, _ as useRef, p as useState };","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport { Component as n, createElement as t, options as e, toChildArray as r, Fragment as u, render as o, hydrate as i, createContext as l, createRef as c, cloneElement as f } from \"preact\";\nexport { Component, Fragment, createContext, createElement, createRef } from \"preact\";\nimport { useState as a, useId as s, useReducer as h, useEffect as v, useLayoutEffect as d, useRef as p, useImperativeHandle as m, useMemo as y, useCallback as _, useContext as b, useDebugValue as S } from \"preact/hooks\";\nexport * from \"preact/hooks\";\n\nfunction g(n, t) {\n  for (var e in t) {\n    n[e] = t[e];\n  }\n\n  return n;\n}\n\nfunction C(n, t) {\n  for (var e in n) {\n    if (\"__source\" !== e && !(e in t)) return !0;\n  }\n\n  for (var r in t) {\n    if (\"__source\" !== r && n[r] !== t[r]) return !0;\n  }\n\n  return !1;\n}\n\nfunction E(n, t) {\n  return n === t && (0 !== n || 1 / n == 1 / t) || n != n && t != t;\n}\n\nfunction w(n) {\n  this.props = n;\n}\n\nfunction R(n, e) {\n  function r(n) {\n    var t = this.props.ref,\n        r = t == n.ref;\n    return !r && t && (t.call ? t(null) : t.current = null), e ? !e(this.props, n) || !r : C(this.props, n);\n  }\n\n  function u(e) {\n    return this.shouldComponentUpdate = r, t(n, e);\n  }\n\n  return u.displayName = \"Memo(\" + (n.displayName || n.name) + \")\", u.prototype.isReactComponent = !0, u.__f = !0, u;\n}\n\n(w.prototype = new n()).isPureReactComponent = !0, w.prototype.shouldComponentUpdate = function (n, t) {\n  return C(this.props, n) || C(this.state, t);\n};\nvar x = e.__b;\n\ne.__b = function (n) {\n  n.type && n.type.__f && n.ref && (n.props.ref = n.ref, n.ref = null), x && x(n);\n};\n\nvar N = \"undefined\" != typeof Symbol && Symbol.for && Symbol.for(\"react.forward_ref\") || 3911;\n\nfunction k(n) {\n  function t(t) {\n    var e = g({}, t);\n    return delete e.ref, n(e, t.ref || null);\n  }\n\n  return t.$$typeof = N, t.render = t, t.prototype.isReactComponent = t.__f = !0, t.displayName = \"ForwardRef(\" + (n.displayName || n.name) + \")\", t;\n}\n\nvar A = function A(n, t) {\n  return null == n ? null : r(r(n).map(t));\n},\n    O = {\n  map: A,\n  forEach: A,\n  count: function count(n) {\n    return n ? r(n).length : 0;\n  },\n  only: function only(n) {\n    var t = r(n);\n    if (1 !== t.length) throw \"Children.only\";\n    return t[0];\n  },\n  toArray: r\n},\n    T = e.__e;\n\ne.__e = function (n, t, e, r) {\n  if (n.then) for (var u, o = t; o = o.__;) {\n    if ((u = o.__c) && u.__c) return null == t.__e && (t.__e = e.__e, t.__k = e.__k), u.__c(n, t);\n  }\n  T(n, t, e, r);\n};\n\nvar I = e.unmount;\n\nfunction L(n, t, e) {\n  return n && (n.__c && n.__c.__H && (n.__c.__H.__.forEach(function (n) {\n    \"function\" == typeof n.__c && n.__c();\n  }), n.__c.__H = null), null != (n = g({}, n)).__c && (n.__c.__P === e && (n.__c.__P = t), n.__c = null), n.__k = n.__k && n.__k.map(function (n) {\n    return L(n, t, e);\n  })), n;\n}\n\nfunction U(n, t, e) {\n  return n && (n.__v = null, n.__k = n.__k && n.__k.map(function (n) {\n    return U(n, t, e);\n  }), n.__c && n.__c.__P === t && (n.__e && e.insertBefore(n.__e, n.__d), n.__c.__e = !0, n.__c.__P = e)), n;\n}\n\nfunction D() {\n  this.__u = 0, this.t = null, this.__b = null;\n}\n\nfunction F(n) {\n  var t = n.__.__c;\n  return t && t.__a && t.__a(n);\n}\n\nfunction M(n) {\n  var e, r, u;\n\n  function o(o) {\n    if (e || (e = n()).then(function (n) {\n      r = n.default || n;\n    }, function (n) {\n      u = n;\n    }), u) throw u;\n    if (!r) throw e;\n    return t(r, o);\n  }\n\n  return o.displayName = \"Lazy\", o.__f = !0, o;\n}\n\nfunction V() {\n  this.u = null, this.o = null;\n}\n\ne.unmount = function (n) {\n  var t = n.__c;\n  t && t.__R && t.__R(), t && !0 === n.__h && (n.type = null), I && I(n);\n}, (D.prototype = new n()).__c = function (n, t) {\n  var e = t.__c,\n      r = this;\n  null == r.t && (r.t = []), r.t.push(e);\n\n  var u = F(r.__v),\n      o = !1,\n      i = function i() {\n    o || (o = !0, e.__R = null, u ? u(l) : l());\n  };\n\n  e.__R = i;\n\n  var l = function l() {\n    if (! --r.__u) {\n      if (r.state.__a) {\n        var n = r.state.__a;\n        r.__v.__k[0] = U(n, n.__c.__P, n.__c.__O);\n      }\n\n      var t;\n\n      for (r.setState({\n        __a: r.__b = null\n      }); t = r.t.pop();) {\n        t.forceUpdate();\n      }\n    }\n  },\n      c = !0 === t.__h;\n\n  r.__u++ || c || r.setState({\n    __a: r.__b = r.__v.__k[0]\n  }), n.then(i, i);\n}, D.prototype.componentWillUnmount = function () {\n  this.t = [];\n}, D.prototype.render = function (n, e) {\n  if (this.__b) {\n    if (this.__v.__k) {\n      var r = document.createElement(\"div\"),\n          o = this.__v.__k[0].__c;\n      this.__v.__k[0] = L(this.__b, r, o.__O = o.__P);\n    }\n\n    this.__b = null;\n  }\n\n  var i = e.__a && t(u, null, n.fallback);\n  return i && (i.__h = null), [t(u, null, e.__a ? null : n.children), i];\n};\n\nvar W = function W(n, t, e) {\n  if (++e[1] === e[0] && n.o.delete(t), n.props.revealOrder && (\"t\" !== n.props.revealOrder[0] || !n.o.size)) for (e = n.u; e;) {\n    for (; e.length > 3;) {\n      e.pop()();\n    }\n\n    if (e[1] < e[0]) break;\n    n.u = e = e[2];\n  }\n};\n\nfunction P(n) {\n  return this.getChildContext = function () {\n    return n.context;\n  }, n.children;\n}\n\nfunction $(n) {\n  var e = this,\n      r = n.i;\n  e.componentWillUnmount = function () {\n    o(null, e.l), e.l = null, e.i = null;\n  }, e.i && e.i !== r && e.componentWillUnmount(), n.__v ? (e.l || (e.i = r, e.l = {\n    nodeType: 1,\n    parentNode: r,\n    childNodes: [],\n    appendChild: function appendChild(n) {\n      this.childNodes.push(n), e.i.appendChild(n);\n    },\n    insertBefore: function insertBefore(n, t) {\n      this.childNodes.push(n), e.i.appendChild(n);\n    },\n    removeChild: function removeChild(n) {\n      this.childNodes.splice(this.childNodes.indexOf(n) >>> 1, 1), e.i.removeChild(n);\n    }\n  }), o(t(P, {\n    context: e.context\n  }, n.__v), e.l)) : e.l && e.componentWillUnmount();\n}\n\nfunction j(n, e) {\n  var r = t($, {\n    __v: n,\n    i: e\n  });\n  return r.containerInfo = e, r;\n}\n\n(V.prototype = new n()).__a = function (n) {\n  var t = this,\n      e = F(t.__v),\n      r = t.o.get(n);\n  return r[0]++, function (u) {\n    var o = function o() {\n      t.props.revealOrder ? (r.push(u), W(t, n, r)) : u();\n    };\n\n    e ? e(o) : o();\n  };\n}, V.prototype.render = function (n) {\n  this.u = null, this.o = new Map();\n  var t = r(n.children);\n  n.revealOrder && \"b\" === n.revealOrder[0] && t.reverse();\n\n  for (var e = t.length; e--;) {\n    this.o.set(t[e], this.u = [1, 0, this.u]);\n  }\n\n  return n.children;\n}, V.prototype.componentDidUpdate = V.prototype.componentDidMount = function () {\n  var n = this;\n  this.o.forEach(function (t, e) {\n    W(n, e, t);\n  });\n};\n\nvar z = \"undefined\" != typeof Symbol && Symbol.for && Symbol.for(\"react.element\") || 60103,\n    B = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,\n    H = \"undefined\" != typeof document,\n    Z = function Z(n) {\n  return (\"undefined\" != typeof Symbol && \"symbol\" == _typeof(Symbol()) ? /fil|che|rad/i : /fil|che|ra/i).test(n);\n};\n\nfunction Y(n, t, e) {\n  return null == t.__k && (t.textContent = \"\"), o(n, t), \"function\" == typeof e && e(), n ? n.__c : null;\n}\n\nfunction q(n, t, e) {\n  return i(n, t), \"function\" == typeof e && e(), n ? n.__c : null;\n}\n\nn.prototype.isReactComponent = {}, [\"componentWillMount\", \"componentWillReceiveProps\", \"componentWillUpdate\"].forEach(function (t) {\n  Object.defineProperty(n.prototype, t, {\n    configurable: !0,\n    get: function get() {\n      return this[\"UNSAFE_\" + t];\n    },\n    set: function set(n) {\n      Object.defineProperty(this, t, {\n        configurable: !0,\n        writable: !0,\n        value: n\n      });\n    }\n  });\n});\nvar G = e.event;\n\nfunction J() {}\n\nfunction K() {\n  return this.cancelBubble;\n}\n\nfunction Q() {\n  return this.defaultPrevented;\n}\n\ne.event = function (n) {\n  return G && (n = G(n)), n.persist = J, n.isPropagationStopped = K, n.isDefaultPrevented = Q, n.nativeEvent = n;\n};\n\nvar X,\n    nn = {\n  configurable: !0,\n  get: function get() {\n    return this.class;\n  }\n},\n    tn = e.vnode;\n\ne.vnode = function (n) {\n  var t = n.type,\n      e = n.props,\n      u = e;\n\n  if (\"string\" == typeof t) {\n    var o = -1 === t.indexOf(\"-\");\n\n    for (var i in u = {}, e) {\n      var l = e[i];\n      H && \"children\" === i && \"noscript\" === t || \"value\" === i && \"defaultValue\" in e && null == l || (\"defaultValue\" === i && \"value\" in e && null == e.value ? i = \"value\" : \"download\" === i && !0 === l ? l = \"\" : /ondoubleclick/i.test(i) ? i = \"ondblclick\" : /^onchange(textarea|input)/i.test(i + t) && !Z(e.type) ? i = \"oninput\" : /^onfocus$/i.test(i) ? i = \"onfocusin\" : /^onblur$/i.test(i) ? i = \"onfocusout\" : /^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i) ? i = i.toLowerCase() : o && B.test(i) ? i = i.replace(/[A-Z0-9]/g, \"-$&\").toLowerCase() : null === l && (l = void 0), /^oninput$/i.test(i) && (i = i.toLowerCase(), u[i] && (i = \"oninputCapture\")), u[i] = l);\n    }\n\n    \"select\" == t && u.multiple && Array.isArray(u.value) && (u.value = r(e.children).forEach(function (n) {\n      n.props.selected = -1 != u.value.indexOf(n.props.value);\n    })), \"select\" == t && null != u.defaultValue && (u.value = r(e.children).forEach(function (n) {\n      n.props.selected = u.multiple ? -1 != u.defaultValue.indexOf(n.props.value) : u.defaultValue == n.props.value;\n    })), n.props = u, e.class != e.className && (nn.enumerable = \"className\" in e, null != e.className && (u.class = e.className), Object.defineProperty(u, \"className\", nn));\n  }\n\n  n.$$typeof = z, tn && tn(n);\n};\n\nvar en = e.__r;\n\ne.__r = function (n) {\n  en && en(n), X = n.__c;\n};\n\nvar rn = {\n  ReactCurrentDispatcher: {\n    current: {\n      readContext: function readContext(n) {\n        return X.__n[n.__c].props.value;\n      }\n    }\n  }\n},\n    un = \"17.0.2\";\n\nfunction on(n) {\n  return t.bind(null, n);\n}\n\nfunction ln(n) {\n  return !!n && n.$$typeof === z;\n}\n\nfunction cn(n) {\n  return ln(n) ? f.apply(null, arguments) : n;\n}\n\nfunction fn(n) {\n  return !!n.__k && (o(null, n), !0);\n}\n\nfunction an(n) {\n  return n && (n.base || 1 === n.nodeType && n) || null;\n}\n\nvar sn = function sn(n, t) {\n  return n(t);\n},\n    hn = function hn(n, t) {\n  return n(t);\n},\n    vn = u;\n\nfunction dn(n) {\n  n();\n}\n\nfunction pn(n) {\n  return n;\n}\n\nfunction mn() {\n  return [!1, dn];\n}\n\nvar yn = d;\n\nfunction _n(n, t) {\n  var e = t(),\n      r = a({\n    h: {\n      __: e,\n      v: t\n    }\n  }),\n      u = r[0].h,\n      o = r[1];\n  return d(function () {\n    u.__ = e, u.v = t, E(u.__, t()) || o({\n      h: u\n    });\n  }, [n, e, t]), v(function () {\n    return E(u.__, u.v()) || o({\n      h: u\n    }), n(function () {\n      E(u.__, u.v()) || o({\n        h: u\n      });\n    });\n  }, [n]), e;\n}\n\nvar bn = {\n  useState: a,\n  useId: s,\n  useReducer: h,\n  useEffect: v,\n  useLayoutEffect: d,\n  useInsertionEffect: yn,\n  useTransition: mn,\n  useDeferredValue: pn,\n  useSyncExternalStore: _n,\n  startTransition: dn,\n  useRef: p,\n  useImperativeHandle: m,\n  useMemo: y,\n  useCallback: _,\n  useContext: b,\n  useDebugValue: S,\n  version: \"17.0.2\",\n  Children: O,\n  render: Y,\n  hydrate: q,\n  unmountComponentAtNode: fn,\n  createPortal: j,\n  createElement: t,\n  createContext: l,\n  createFactory: on,\n  cloneElement: cn,\n  createRef: c,\n  Fragment: u,\n  isValidElement: ln,\n  findDOMNode: an,\n  Component: n,\n  PureComponent: w,\n  memo: R,\n  forwardRef: k,\n  flushSync: hn,\n  unstable_batchedUpdates: sn,\n  StrictMode: vn,\n  Suspense: D,\n  SuspenseList: V,\n  lazy: M,\n  __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: rn\n};\nexport { O as Children, w as PureComponent, vn as StrictMode, D as Suspense, V as SuspenseList, rn as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, cn as cloneElement, on as createFactory, j as createPortal, bn as default, an as findDOMNode, hn as flushSync, k as forwardRef, q as hydrate, ln as isValidElement, M as lazy, R as memo, Y as render, dn as startTransition, fn as unmountComponentAtNode, sn as unstable_batchedUpdates, pn as useDeferredValue, yn as useInsertionEffect, _n as useSyncExternalStore, mn as useTransition, un as version };","define([\"./arr\"], function (arr) {\n  \"use strict\";\n\n  return arr.concat;\n});","define([\"./arr\"], function (arr) {\n  \"use strict\";\n\n  return arr.push;\n});","define([\"./class2type\"], function (class2type) {\n  \"use strict\";\n\n  return class2type.toString;\n});","define([\"./hasOwn\"], function (hasOwn) {\n  \"use strict\";\n\n  return hasOwn.toString;\n});","define([\"../var/document\"], function (document) {\n  \"use strict\";\n\n  var preservedScriptAttributes = {\n    type: true,\n    src: true,\n    nonce: true,\n    noModule: true\n  };\n\n  function DOMEval(code, node, doc) {\n    doc = doc || document;\n    var i,\n        val,\n        script = doc.createElement(\"script\");\n    script.text = code;\n\n    if (node) {\n      for (i in preservedScriptAttributes) {\n        // Support: Firefox 64+, Edge 18+\n        // Some browsers don't support the \"nonce\" property on scripts.\n        // On the other hand, just using `getAttribute` is not enough as\n        // the `nonce` attribute is reset to an empty string whenever it\n        // becomes browsing-context connected.\n        // See https://github.com/whatwg/html/issues/2369\n        // See https://html.spec.whatwg.org/#nonce-attributes\n        // The `node.getAttribute` check was added for the sake of\n        // `jQuery.globalEval` so that it can fake a nonce-containing node\n        // via an object.\n        val = node[i] || node.getAttribute && node.getAttribute(i);\n\n        if (val) {\n          script.setAttribute(i, val);\n        }\n      }\n    }\n\n    doc.head.appendChild(script).parentNode.removeChild(script);\n  }\n\n  return DOMEval;\n});","define([\"../../core\", \"../../selector\"], function (jQuery) {\n  \"use strict\";\n\n  return jQuery.expr.match.needsContext;\n});","define(function () {\n  \"use strict\"; // rsingleTag matches a string consisting of a single HTML element with no attributes\n  // and captures the element's name\n\n  return /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n});","define([\"../core\", \"../var/indexOf\", \"../var/isFunction\", \"./var/rneedsContext\", \"../selector\"], function (jQuery, indexOf, isFunction, rneedsContext) {\n  \"use strict\"; // Implement the identical functionality for filter and not\n\n  function winnow(elements, qualifier, not) {\n    if (isFunction(qualifier)) {\n      return jQuery.grep(elements, function (elem, i) {\n        return !!qualifier.call(elem, i, elem) !== not;\n      });\n    } // Single element\n\n\n    if (qualifier.nodeType) {\n      return jQuery.grep(elements, function (elem) {\n        return elem === qualifier !== not;\n      });\n    } // Arraylike of elements (jQuery, arguments, Array)\n\n\n    if (typeof qualifier !== \"string\") {\n      return jQuery.grep(elements, function (elem) {\n        return indexOf.call(qualifier, elem) > -1 !== not;\n      });\n    } // Filtered directly for both simple and complex selectors\n\n\n    return jQuery.filter(qualifier, elements, not);\n  }\n\n  jQuery.filter = function (expr, elems, not) {\n    var elem = elems[0];\n\n    if (not) {\n      expr = \":not(\" + expr + \")\";\n    }\n\n    if (elems.length === 1 && elem.nodeType === 1) {\n      return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n    }\n\n    return jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n      return elem.nodeType === 1;\n    }));\n  };\n\n  jQuery.fn.extend({\n    find: function find(selector) {\n      var i,\n          ret,\n          len = this.length,\n          self = this;\n\n      if (typeof selector !== \"string\") {\n        return this.pushStack(jQuery(selector).filter(function () {\n          for (i = 0; i < len; i++) {\n            if (jQuery.contains(self[i], this)) {\n              return true;\n            }\n          }\n        }));\n      }\n\n      ret = this.pushStack([]);\n\n      for (i = 0; i < len; i++) {\n        jQuery.find(selector, self[i], ret);\n      }\n\n      return len > 1 ? jQuery.uniqueSort(ret) : ret;\n    },\n    filter: function filter(selector) {\n      return this.pushStack(winnow(this, selector || [], false));\n    },\n    not: function not(selector) {\n      return this.pushStack(winnow(this, selector || [], true));\n    },\n    is: function is(selector) {\n      return !!winnow(this, // If this is a positional/relative selector, check membership in the returned set\n      // so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n      typeof selector === \"string\" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;\n    }\n  });\n});","define([\"../core\", \"../var/document\", \"../core/readyException\", \"../deferred\"], function (jQuery, document) {\n  \"use strict\"; // The deferred used on DOM ready\n\n  var readyList = jQuery.Deferred();\n\n  jQuery.fn.ready = function (fn) {\n    readyList.then(fn) // Wrap jQuery.readyException in a function so that the lookup\n    // happens at the time of error handling instead of callback\n    // registration.\n    .catch(function (error) {\n      jQuery.readyException(error);\n    });\n    return this;\n  };\n\n  jQuery.extend({\n    // Is the DOM ready to be used? Set to true once it occurs.\n    isReady: false,\n    // A counter to track how many items to wait for before\n    // the ready event fires. See #6781\n    readyWait: 1,\n    // Handle when the DOM is ready\n    ready: function ready(wait) {\n      // Abort if there are pending holds or we're already ready\n      if (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n        return;\n      } // Remember that the DOM is ready\n\n\n      jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be\n\n      if (wait !== true && --jQuery.readyWait > 0) {\n        return;\n      } // If there are functions bound, to execute\n\n\n      readyList.resolveWith(document, [jQuery]);\n    }\n  });\n  jQuery.ready.then = readyList.then; // The ready event handler and self cleanup method\n\n  function completed() {\n    document.removeEventListener(\"DOMContentLoaded\", completed);\n    window.removeEventListener(\"load\", completed);\n    jQuery.ready();\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\n\n\n  if (document.readyState === \"complete\" || document.readyState !== \"loading\" && !document.documentElement.doScroll) {\n    // Handle it asynchronously to allow scripts the opportunity to delay ready\n    window.setTimeout(jQuery.ready);\n  } else {\n    // Use the handy event callback\n    document.addEventListener(\"DOMContentLoaded\", completed); // A fallback to window.onload, that will always work\n\n    window.addEventListener(\"load\", completed);\n  }\n});","define([\"../core\", \"../core/camelCase\", \"../var/rnothtmlwhite\", \"./var/acceptData\"], function (jQuery, camelCase, rnothtmlwhite, acceptData) {\n  \"use strict\";\n\n  function Data() {\n    this.expando = jQuery.expando + Data.uid++;\n  }\n\n  Data.uid = 1;\n  Data.prototype = {\n    cache: function cache(owner) {\n      // Check if the owner object already has a cache\n      var value = owner[this.expando]; // If not, create one\n\n      if (!value) {\n        value = {}; // We can accept data for non-element nodes in modern browsers,\n        // but we should not, see #8335.\n        // Always return an empty object.\n\n        if (acceptData(owner)) {\n          // If it is a node unlikely to be stringify-ed or looped over\n          // use plain assignment\n          if (owner.nodeType) {\n            owner[this.expando] = value; // Otherwise secure it in a non-enumerable property\n            // configurable must be true to allow the property to be\n            // deleted when data is removed\n          } else {\n            Object.defineProperty(owner, this.expando, {\n              value: value,\n              configurable: true\n            });\n          }\n        }\n      }\n\n      return value;\n    },\n    set: function set(owner, data, value) {\n      var prop,\n          cache = this.cache(owner); // Handle: [ owner, key, value ] args\n      // Always use camelCase key (gh-2257)\n\n      if (typeof data === \"string\") {\n        cache[camelCase(data)] = value; // Handle: [ owner, { properties } ] args\n      } else {\n        // Copy the properties one-by-one to the cache object\n        for (prop in data) {\n          cache[camelCase(prop)] = data[prop];\n        }\n      }\n\n      return cache;\n    },\n    get: function get(owner, key) {\n      return key === undefined ? this.cache(owner) : // Always use camelCase key (gh-2257)\n      owner[this.expando] && owner[this.expando][camelCase(key)];\n    },\n    access: function access(owner, key, value) {\n      // In cases where either:\n      //\n      //   1. No key was specified\n      //   2. A string key was specified, but no value provided\n      //\n      // Take the \"read\" path and allow the get method to determine\n      // which value to return, respectively either:\n      //\n      //   1. The entire cache object\n      //   2. The data stored at the key\n      //\n      if (key === undefined || key && typeof key === \"string\" && value === undefined) {\n        return this.get(owner, key);\n      } // When the key is not a string, or both a key and value\n      // are specified, set or extend (existing objects) with either:\n      //\n      //   1. An object of properties\n      //   2. A key and value\n      //\n\n\n      this.set(owner, key, value); // Since the \"set\" path can have two possible entry points\n      // return the expected data based on which path was taken[*]\n\n      return value !== undefined ? value : key;\n    },\n    remove: function remove(owner, key) {\n      var i,\n          cache = owner[this.expando];\n\n      if (cache === undefined) {\n        return;\n      }\n\n      if (key !== undefined) {\n        // Support array or space separated string of keys\n        if (Array.isArray(key)) {\n          // If key is an array of keys...\n          // We always set camelCase keys, so remove that.\n          key = key.map(camelCase);\n        } else {\n          key = camelCase(key); // If a key with the spaces exists, use it.\n          // Otherwise, create an array by matching non-whitespace\n\n          key = key in cache ? [key] : key.match(rnothtmlwhite) || [];\n        }\n\n        i = key.length;\n\n        while (i--) {\n          delete cache[key[i]];\n        }\n      } // Remove the expando if there's no more data\n\n\n      if (key === undefined || jQuery.isEmptyObject(cache)) {\n        // Support: Chrome <=35 - 45\n        // Webkit & Blink performance suffers when deleting properties\n        // from DOM nodes, so set to undefined instead\n        // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n        if (owner.nodeType) {\n          owner[this.expando] = undefined;\n        } else {\n          delete owner[this.expando];\n        }\n      }\n    },\n    hasData: function hasData(owner) {\n      var cache = owner[this.expando];\n      return cache !== undefined && !jQuery.isEmptyObject(cache);\n    }\n  };\n  return Data;\n});","define([\"../Data\"], function (Data) {\n  \"use strict\";\n\n  return new Data();\n});","define(function () {\n  \"use strict\";\n\n  return /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n});","define([\"../../core\", \"../../core/isAttached\" // css is assumed\n], function (jQuery, isAttached) {\n  \"use strict\"; // isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n  // through the CSS cascade), which is useful in deciding whether or not to make it visible.\n  // It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n  // * A hidden ancestor does not force an element to be classified as hidden.\n  // * Being disconnected from the document does not force an element to be classified as hidden.\n  // These differences improve the behavior of .toggle() et al. when applied to elements that are\n  // detached or contained within hidden ancestors (gh-2404, gh-2863).\n\n  return function (elem, el) {\n    // isHiddenWithinTree might be called from jQuery#filter function;\n    // in that case, element will be second argument\n    elem = el || elem; // Inline style trumps all\n\n    return elem.style.display === \"none\" || elem.style.display === \"\" && // Otherwise, check computed style\n    // Support: Firefox <=43 - 45\n    // Disconnected elements can have computed display: none, so first confirm that elem is\n    // in the document.\n    isAttached(elem) && jQuery.css(elem, \"display\") === \"none\";\n  };\n});","define(function () {\n  \"use strict\"; // A method for quickly swapping in/out CSS properties to get correct calculations.\n\n  return function (elem, options, callback, args) {\n    var ret,\n        name,\n        old = {}; // Remember the old values, and insert the new ones\n\n    for (name in options) {\n      old[name] = elem.style[name];\n      elem.style[name] = options[name];\n    }\n\n    ret = callback.apply(elem, args || []); // Revert the old values\n\n    for (name in options) {\n      elem.style[name] = old[name];\n    }\n\n    return ret;\n  };\n});","define([\"../core\", \"../var/rcssNum\"], function (jQuery, rcssNum) {\n  \"use strict\";\n\n  function adjustCSS(elem, prop, valueParts, tween) {\n    var adjusted,\n        scale,\n        maxIterations = 20,\n        currentValue = tween ? function () {\n      return tween.cur();\n    } : function () {\n      return jQuery.css(elem, prop, \"\");\n    },\n        initial = currentValue(),\n        unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n        // Starting value computation is required for potential unit mismatches\n    initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== \"px\" && +initial) && rcssNum.exec(jQuery.css(elem, prop));\n\n    if (initialInUnit && initialInUnit[3] !== unit) {\n      // Support: Firefox <=54\n      // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n      initial = initial / 2; // Trust units reported by jQuery.css\n\n      unit = unit || initialInUnit[3]; // Iteratively approximate from a nonzero starting point\n\n      initialInUnit = +initial || 1;\n\n      while (maxIterations--) {\n        // Evaluate and update our best guess (doubling guesses that zero out).\n        // Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n        jQuery.style(elem, prop, initialInUnit + unit);\n\n        if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n          maxIterations = 0;\n        }\n\n        initialInUnit = initialInUnit / scale;\n      }\n\n      initialInUnit = initialInUnit * 2;\n      jQuery.style(elem, prop, initialInUnit + unit); // Make sure we update the tween properties later on\n\n      valueParts = valueParts || [];\n    }\n\n    if (valueParts) {\n      initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified\n\n      adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];\n\n      if (tween) {\n        tween.unit = unit;\n        tween.start = initialInUnit;\n        tween.end = adjusted;\n      }\n    }\n\n    return adjusted;\n  }\n\n  return adjustCSS;\n});","define(function () {\n  \"use strict\"; // rtagName captures the name from the first start tag in a string of HTML\n  // https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n  // https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\n\n  return /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n});","define(function () {\n  \"use strict\";\n\n  return /^$|^module$|\\/(?:java|ecma)script/i;\n});","define(function () {\n  \"use strict\"; // We have to close these tags to support XHTML (#13200)\n\n  var wrapMap = {\n    // Support: IE <=9 only\n    option: [1, \"<select multiple='multiple'>\", \"</select>\"],\n    // XHTML parsers do not magically insert elements in the\n    // same way that tag soup parsers do. So we cannot shorten\n    // this by omitting <tbody> or other required elements.\n    thead: [1, \"<table>\", \"</table>\"],\n    col: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n    tr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n    td: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n    _default: [0, \"\", \"\"]\n  }; // Support: IE <=9 only\n\n  wrapMap.optgroup = wrapMap.option;\n  wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n  wrapMap.th = wrapMap.td;\n  return wrapMap;\n});","define([\"../core\", \"../core/nodeName\"], function (jQuery, nodeName) {\n  \"use strict\";\n\n  function getAll(context, tag) {\n    // Support: IE <=9 - 11 only\n    // Use typeof to avoid zero-argument method invocation on host objects (#15151)\n    var ret;\n\n    if (typeof context.getElementsByTagName !== \"undefined\") {\n      ret = context.getElementsByTagName(tag || \"*\");\n    } else if (typeof context.querySelectorAll !== \"undefined\") {\n      ret = context.querySelectorAll(tag || \"*\");\n    } else {\n      ret = [];\n    }\n\n    if (tag === undefined || tag && nodeName(context, tag)) {\n      return jQuery.merge([context], ret);\n    }\n\n    return ret;\n  }\n\n  return getAll;\n});","define([\"../data/var/dataPriv\"], function (dataPriv) {\n  \"use strict\"; // Mark scripts as having already been evaluated\n\n  function setGlobalEval(elems, refElements) {\n    var i = 0,\n        l = elems.length;\n\n    for (; i < l; i++) {\n      dataPriv.set(elems[i], \"globalEval\", !refElements || dataPriv.get(refElements[i], \"globalEval\"));\n    }\n  }\n\n  return setGlobalEval;\n});","define([\"../core\", \"../core/toType\", \"../core/isAttached\", \"./var/rtagName\", \"./var/rscriptType\", \"./wrapMap\", \"./getAll\", \"./setGlobalEval\"], function (jQuery, toType, isAttached, rtagName, rscriptType, wrapMap, getAll, setGlobalEval) {\n  \"use strict\";\n\n  var rhtml = /<|&#?\\w+;/;\n\n  function buildFragment(elems, context, scripts, selection, ignored) {\n    var elem,\n        tmp,\n        tag,\n        wrap,\n        attached,\n        j,\n        fragment = context.createDocumentFragment(),\n        nodes = [],\n        i = 0,\n        l = elems.length;\n\n    for (; i < l; i++) {\n      elem = elems[i];\n\n      if (elem || elem === 0) {\n        // Add nodes directly\n        if (toType(elem) === \"object\") {\n          // Support: Android <=4.0 only, PhantomJS 1 only\n          // push.apply(_, arraylike) throws on ancient WebKit\n          jQuery.merge(nodes, elem.nodeType ? [elem] : elem); // Convert non-html into a text node\n        } else if (!rhtml.test(elem)) {\n          nodes.push(context.createTextNode(elem)); // Convert html into DOM nodes\n        } else {\n          tmp = tmp || fragment.appendChild(context.createElement(\"div\")); // Deserialize a standard representation\n\n          tag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n          wrap = wrapMap[tag] || wrapMap._default;\n          tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2]; // Descend through wrappers to the right content\n\n          j = wrap[0];\n\n          while (j--) {\n            tmp = tmp.lastChild;\n          } // Support: Android <=4.0 only, PhantomJS 1 only\n          // push.apply(_, arraylike) throws on ancient WebKit\n\n\n          jQuery.merge(nodes, tmp.childNodes); // Remember the top-level container\n\n          tmp = fragment.firstChild; // Ensure the created nodes are orphaned (#12392)\n\n          tmp.textContent = \"\";\n        }\n      }\n    } // Remove wrapper from fragment\n\n\n    fragment.textContent = \"\";\n    i = 0;\n\n    while (elem = nodes[i++]) {\n      // Skip elements already in the context collection (trac-4087)\n      if (selection && jQuery.inArray(elem, selection) > -1) {\n        if (ignored) {\n          ignored.push(elem);\n        }\n\n        continue;\n      }\n\n      attached = isAttached(elem); // Append to fragment\n\n      tmp = getAll(fragment.appendChild(elem), \"script\"); // Preserve script evaluation history\n\n      if (attached) {\n        setGlobalEval(tmp);\n      } // Capture executables\n\n\n      if (scripts) {\n        j = 0;\n\n        while (elem = tmp[j++]) {\n          if (rscriptType.test(elem.type || \"\")) {\n            scripts.push(elem);\n          }\n        }\n      }\n    }\n\n    return fragment;\n  }\n\n  return buildFragment;\n});","define(function () {\n  \"use strict\";\n\n  return function (elem) {\n    // Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n    // IE throws on elements created in popups\n    // FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n    var view = elem.ownerDocument.defaultView;\n\n    if (!view || !view.opener) {\n      view = window;\n    }\n\n    return view.getComputedStyle(elem);\n  };\n});","define([\"../core\", \"../core/isAttached\", \"./var/rboxStyle\", \"./var/rnumnonpx\", \"./var/getStyles\", \"./support\"], function (jQuery, isAttached, rboxStyle, rnumnonpx, getStyles, support) {\n  \"use strict\";\n\n  function curCSS(elem, name, computed) {\n    var width,\n        minWidth,\n        maxWidth,\n        ret,\n        // Support: Firefox 51+\n    // Retrieving style before computed somehow\n    // fixes an issue with getting wrong values\n    // on detached elements\n    style = elem.style;\n    computed = computed || getStyles(elem); // getPropertyValue is needed for:\n    //   .css('filter') (IE 9 only, #12537)\n    //   .css('--customProperty) (#3144)\n\n    if (computed) {\n      ret = computed.getPropertyValue(name) || computed[name];\n\n      if (ret === \"\" && !isAttached(elem)) {\n        ret = jQuery.style(elem, name);\n      } // A tribute to the \"awesome hack by Dean Edwards\"\n      // Android Browser returns percentage for some values,\n      // but width seems to be reliably pixels.\n      // This is against the CSSOM draft spec:\n      // https://drafts.csswg.org/cssom/#resolved-values\n\n\n      if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n        // Remember the original values\n        width = style.width;\n        minWidth = style.minWidth;\n        maxWidth = style.maxWidth; // Put in the new values to get a computed value out\n\n        style.minWidth = style.maxWidth = style.width = ret;\n        ret = computed.width; // Revert the changed values\n\n        style.width = width;\n        style.minWidth = minWidth;\n        style.maxWidth = maxWidth;\n      }\n    }\n\n    return ret !== undefined ? // Support: IE <=9 - 11 only\n    // IE returns zIndex value as an integer.\n    ret + \"\" : ret;\n  }\n\n  return curCSS;\n});","define(function () {\n  \"use strict\";\n\n  function addGetHookIf(conditionFn, hookFn) {\n    // Define the hook, we'll check on the first run if it's really needed.\n    return {\n      get: function get() {\n        if (conditionFn()) {\n          // Hook not needed (or it's not possible to use it due\n          // to missing dependency), remove it.\n          delete this.get;\n          return;\n        } // Hook needed; redefine it so that the support test is not executed again.\n\n\n        return (this.get = hookFn).apply(this, arguments);\n      }\n    };\n  }\n\n  return addGetHookIf;\n});","define([\"../var/document\", \"../core\"], function (document, jQuery) {\n  \"use strict\";\n\n  var cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n      emptyStyle = document.createElement(\"div\").style,\n      vendorProps = {}; // Return a vendor-prefixed property or undefined\n\n  function vendorPropName(name) {\n    // Check for vendor prefixed names\n    var capName = name[0].toUpperCase() + name.slice(1),\n        i = cssPrefixes.length;\n\n    while (i--) {\n      name = cssPrefixes[i] + capName;\n\n      if (name in emptyStyle) {\n        return name;\n      }\n    }\n  } // Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\n\n  function finalPropName(name) {\n    var final = jQuery.cssProps[name] || vendorProps[name];\n\n    if (final) {\n      return final;\n    }\n\n    if (name in emptyStyle) {\n      return name;\n    }\n\n    return vendorProps[name] = vendorPropName(name) || name;\n  }\n\n  return finalPropName;\n});","define([\"../core\", \"../core/access\", \"./support\", \"../selector\"], function (jQuery, access, support) {\n  \"use strict\";\n\n  var rfocusable = /^(?:input|select|textarea|button)$/i,\n      rclickable = /^(?:a|area)$/i;\n  jQuery.fn.extend({\n    prop: function prop(name, value) {\n      return access(this, jQuery.prop, name, value, arguments.length > 1);\n    },\n    removeProp: function removeProp(name) {\n      return this.each(function () {\n        delete this[jQuery.propFix[name] || name];\n      });\n    }\n  });\n  jQuery.extend({\n    prop: function prop(elem, name, value) {\n      var ret,\n          hooks,\n          nType = elem.nodeType; // Don't get/set properties on text, comment and attribute nodes\n\n      if (nType === 3 || nType === 8 || nType === 2) {\n        return;\n      }\n\n      if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n        // Fix name and attach hooks\n        name = jQuery.propFix[name] || name;\n        hooks = jQuery.propHooks[name];\n      }\n\n      if (value !== undefined) {\n        if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n          return ret;\n        }\n\n        return elem[name] = value;\n      }\n\n      if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n        return ret;\n      }\n\n      return elem[name];\n    },\n    propHooks: {\n      tabIndex: {\n        get: function get(elem) {\n          // Support: IE <=9 - 11 only\n          // elem.tabIndex doesn't always return the\n          // correct value when it hasn't been explicitly set\n          // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n          // Use proper attribute retrieval(#12072)\n          var tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n          if (tabindex) {\n            return parseInt(tabindex, 10);\n          }\n\n          if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {\n            return 0;\n          }\n\n          return -1;\n        }\n      }\n    },\n    propFix: {\n      \"for\": \"htmlFor\",\n      \"class\": \"className\"\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\n\n  if (!support.optSelected) {\n    jQuery.propHooks.selected = {\n      get: function get(elem) {\n        /* eslint no-unused-expressions: \"off\" */\n        var parent = elem.parentNode;\n\n        if (parent && parent.parentNode) {\n          parent.parentNode.selectedIndex;\n        }\n\n        return null;\n      },\n      set: function set(elem) {\n        /* eslint no-unused-expressions: \"off\" */\n        var parent = elem.parentNode;\n\n        if (parent) {\n          parent.selectedIndex;\n\n          if (parent.parentNode) {\n            parent.parentNode.selectedIndex;\n          }\n        }\n      }\n    };\n  }\n\n  jQuery.each([\"tabIndex\", \"readOnly\", \"maxLength\", \"cellSpacing\", \"cellPadding\", \"rowSpan\", \"colSpan\", \"useMap\", \"frameBorder\", \"contentEditable\"], function () {\n    jQuery.propFix[this.toLowerCase()] = this;\n  });\n});","define(function () {\n  \"use strict\";\n\n  return Date.now();\n});","define(function () {\n  \"use strict\";\n\n  return /\\?/;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"./core\", \"./core/toType\", \"./var/rcheckableType\", \"./var/isFunction\", \"./core/init\", \"./traversing\", // filter\n\"./attributes/prop\"], function (jQuery, toType, rcheckableType, isFunction) {\n  \"use strict\";\n\n  var rbracket = /\\[\\]$/,\n      rCRLF = /\\r?\\n/g,\n      rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n      rsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n  function buildParams(prefix, obj, traditional, add) {\n    var name;\n\n    if (Array.isArray(obj)) {\n      // Serialize array item.\n      jQuery.each(obj, function (i, v) {\n        if (traditional || rbracket.test(prefix)) {\n          // Treat each array item as a scalar.\n          add(prefix, v);\n        } else {\n          // Item is non-scalar (array or object), encode its numeric index.\n          buildParams(prefix + \"[\" + (_typeof(v) === \"object\" && v != null ? i : \"\") + \"]\", v, traditional, add);\n        }\n      });\n    } else if (!traditional && toType(obj) === \"object\") {\n      // Serialize object item.\n      for (name in obj) {\n        buildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n      }\n    } else {\n      // Serialize scalar item.\n      add(prefix, obj);\n    }\n  } // Serialize an array of form elements or a set of\n  // key/values into a query string\n\n\n  jQuery.param = function (a, traditional) {\n    var prefix,\n        s = [],\n        add = function add(key, valueOrFunction) {\n      // If value is a function, invoke it and use its return value\n      var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;\n      s[s.length] = encodeURIComponent(key) + \"=\" + encodeURIComponent(value == null ? \"\" : value);\n    };\n\n    if (a == null) {\n      return \"\";\n    } // If an array was passed in, assume that it is an array of form elements.\n\n\n    if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {\n      // Serialize the form elements\n      jQuery.each(a, function () {\n        add(this.name, this.value);\n      });\n    } else {\n      // If traditional, encode the \"old\" way (the way 1.3.2 or older\n      // did it), otherwise encode params recursively.\n      for (prefix in a) {\n        buildParams(prefix, a[prefix], traditional, add);\n      }\n    } // Return the resulting serialization\n\n\n    return s.join(\"&\");\n  };\n\n  jQuery.fn.extend({\n    serialize: function serialize() {\n      return jQuery.param(this.serializeArray());\n    },\n    serializeArray: function serializeArray() {\n      return this.map(function () {\n        // Can add propHook for \"elements\" to filter or add form elements\n        var elements = jQuery.prop(this, \"elements\");\n        return elements ? jQuery.makeArray(elements) : this;\n      }).filter(function () {\n        var type = this.type; // Use .is( \":disabled\" ) so that fieldset[disabled] works\n\n        return this.name && !jQuery(this).is(\":disabled\") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));\n      }).map(function (i, elem) {\n        var val = jQuery(this).val();\n\n        if (val == null) {\n          return null;\n        }\n\n        if (Array.isArray(val)) {\n          return jQuery.map(val, function (val) {\n            return {\n              name: elem.name,\n              value: val.replace(rCRLF, \"\\r\\n\")\n            };\n          });\n        }\n\n        return {\n          name: elem.name,\n          value: val.replace(rCRLF, \"\\r\\n\")\n        };\n      }).get();\n    }\n  });\n  return jQuery;\n});","module.exports = function (module) {\n  if (!module.webpackPolyfill) {\n    module.deprecate = function () {};\n\n    module.paths = []; // module.parent = undefined by default\n\n    if (!module.children) module.children = [];\n    Object.defineProperty(module, \"loaded\", {\n      enumerable: true,\n      get: function get() {\n        return module.l;\n      }\n    });\n    Object.defineProperty(module, \"id\", {\n      enumerable: true,\n      get: function get() {\n        return module.i;\n      }\n    });\n    module.webpackPolyfill = 1;\n  }\n\n  return module;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([\"exports\"], factory) : factory(global.ActiveStorage = {});\n})(this, function (exports) {\n  \"use strict\";\n\n  function createCommonjsModule(fn, module) {\n    return module = {\n      exports: {}\n    }, fn(module, module.exports), module.exports;\n  }\n\n  var sparkMd5 = createCommonjsModule(function (module, exports) {\n    (function (factory) {\n      {\n        module.exports = factory();\n      }\n    })(function (undefined) {\n      var hex_chr = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n\n      function md5cycle(x, k) {\n        var a = x[0],\n            b = x[1],\n            c = x[2],\n            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\n      function md5blk(s) {\n        var md5blks = [],\n            i;\n\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\n        return md5blks;\n      }\n\n      function md5blk_array(a) {\n        var md5blks = [],\n            i;\n\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\n        return md5blks;\n      }\n\n      function md51(s) {\n        var n = s.length,\n            state = [1732584193, -271733879, -1732584194, 271733878],\n            i,\n            length,\n            tail,\n            tmp,\n            lo,\n            hi;\n\n        for (i = 64; i <= n; i += 64) {\n          md5cycle(state, md5blk(s.substring(i - 64, i)));\n        }\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\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n        }\n\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n\n        if (i > 55) {\n          md5cycle(state, tail);\n\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\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\n      function md51_array(a) {\n        var n = a.length,\n            state = [1732584193, -271733879, -1732584194, 271733878],\n            i,\n            length,\n            tail,\n            tmp,\n            lo,\n            hi;\n\n        for (i = 64; i <= n; i += 64) {\n          md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n        }\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\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= a[i] << (i % 4 << 3);\n        }\n\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n\n        if (i > 55) {\n          md5cycle(state, tail);\n\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\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\n      function rhex(n) {\n        var s = \"\",\n            j;\n\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\n        return s;\n      }\n\n      function hex(x) {\n        var i;\n\n        for (i = 0; i < x.length; i += 1) {\n          x[i] = rhex(x[i]);\n        }\n\n        return x.join(\"\");\n      }\n\n      if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n\n      if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n        (function () {\n          function clamp(val, length) {\n            val = val | 0 || 0;\n\n            if (val < 0) {\n              return Math.max(val + length, 0);\n            }\n\n            return Math.min(val, length);\n          }\n\n          ArrayBuffer.prototype.slice = function (from, to) {\n            var length = this.byteLength,\n                begin = clamp(from, length),\n                end = length,\n                num,\n                target,\n                targetArray,\n                sourceArray;\n\n            if (to !== undefined) {\n              end = clamp(to, length);\n            }\n\n            if (begin > end) {\n              return new ArrayBuffer(0);\n            }\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\n      function toUtf8(str) {\n        if (/[\\u0080-\\uFFFF]/.test(str)) {\n          str = unescape(encodeURIComponent(str));\n        }\n\n        return str;\n      }\n\n      function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n        var length = str.length,\n            buff = new ArrayBuffer(length),\n            arr = new Uint8Array(buff),\n            i;\n\n        for (i = 0; i < length; i += 1) {\n          arr[i] = str.charCodeAt(i);\n        }\n\n        return returnUInt8Array ? arr : buff;\n      }\n\n      function arrayBuffer2Utf8Str(buff) {\n        return String.fromCharCode.apply(null, new Uint8Array(buff));\n      }\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\n      function hexToBinaryString(hex) {\n        var bytes = [],\n            length = hex.length,\n            x;\n\n        for (x = 0; x < length - 1; x += 2) {\n          bytes.push(parseInt(hex.substr(x, 2), 16));\n        }\n\n        return String.fromCharCode.apply(String, bytes);\n      }\n\n      function SparkMD5() {\n        this.reset();\n      }\n\n      SparkMD5.prototype.append = function (str) {\n        this.appendBinary(toUtf8(str));\n        return this;\n      };\n\n      SparkMD5.prototype.appendBinary = function (contents) {\n        this._buff += contents;\n        this._length += contents.length;\n        var length = this._buff.length,\n            i;\n\n        for (i = 64; i <= length; i += 64) {\n          md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n        }\n\n        this._buff = this._buff.substring(i - 64);\n        return this;\n      };\n\n      SparkMD5.prototype.end = function (raw) {\n        var buff = this._buff,\n            length = buff.length,\n            i,\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n            ret;\n\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n        }\n\n        this._finish(tail, length);\n\n        ret = hex(this._hash);\n\n        if (raw) {\n          ret = hexToBinaryString(ret);\n        }\n\n        this.reset();\n        return ret;\n      };\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\n      SparkMD5.prototype.getState = function () {\n        return {\n          buff: this._buff,\n          length: this._length,\n          hash: this._hash\n        };\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\n      SparkMD5.prototype.destroy = function () {\n        delete this._hash;\n        delete this._buff;\n        delete this._length;\n      };\n\n      SparkMD5.prototype._finish = function (tail, length) {\n        var i = length,\n            tmp,\n            lo,\n            hi;\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n\n        if (i > 55) {\n          md5cycle(this._hash, tail);\n\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\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\n      SparkMD5.hash = function (str, raw) {\n        return SparkMD5.hashBinary(toUtf8(str), raw);\n      };\n\n      SparkMD5.hashBinary = function (content, raw) {\n        var hash = md51(content),\n            ret = hex(hash);\n        return raw ? hexToBinaryString(ret) : ret;\n      };\n\n      SparkMD5.ArrayBuffer = function () {\n        this.reset();\n      };\n\n      SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n        var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n            length = buff.length,\n            i;\n        this._length += arr.byteLength;\n\n        for (i = 64; i <= length; i += 64) {\n          md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n        }\n\n        this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n        return this;\n      };\n\n      SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n        var buff = this._buff,\n            length = buff.length,\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n            i,\n            ret;\n\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= buff[i] << (i % 4 << 3);\n        }\n\n        this._finish(tail, length);\n\n        ret = hex(this._hash);\n\n        if (raw) {\n          ret = hexToBinaryString(ret);\n        }\n\n        this.reset();\n        return ret;\n      };\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\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\n      SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n        state.buff = utf8Str2ArrayBuffer(state.buff, true);\n        return SparkMD5.prototype.setState.call(this, state);\n      };\n\n      SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n      SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n      SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n        var hash = md51_array(new Uint8Array(arr)),\n            ret = hex(hash);\n        return raw ? hexToBinaryString(ret) : ret;\n      };\n\n      return SparkMD5;\n    });\n  });\n\n  var classCallCheck = function classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  };\n\n  var createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n  var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\n  var FileChecksum = function () {\n    createClass(FileChecksum, null, [{\n      key: \"create\",\n      value: function create(file, callback) {\n        var instance = new FileChecksum(file);\n        instance.create(callback);\n      }\n    }]);\n\n    function FileChecksum(file) {\n      classCallCheck(this, FileChecksum);\n      this.file = file;\n      this.chunkSize = 2097152;\n      this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n      this.chunkIndex = 0;\n    }\n\n    createClass(FileChecksum, [{\n      key: \"create\",\n      value: function create(callback) {\n        var _this = this;\n\n        this.callback = callback;\n        this.md5Buffer = new sparkMd5.ArrayBuffer();\n        this.fileReader = new FileReader();\n        this.fileReader.addEventListener(\"load\", function (event) {\n          return _this.fileReaderDidLoad(event);\n        });\n        this.fileReader.addEventListener(\"error\", function (event) {\n          return _this.fileReaderDidError(event);\n        });\n        this.readNextChunk();\n      }\n    }, {\n      key: \"fileReaderDidLoad\",\n      value: function fileReaderDidLoad(event) {\n        this.md5Buffer.append(event.target.result);\n\n        if (!this.readNextChunk()) {\n          var binaryDigest = this.md5Buffer.end(true);\n          var base64digest = btoa(binaryDigest);\n          this.callback(null, base64digest);\n        }\n      }\n    }, {\n      key: \"fileReaderDidError\",\n      value: function fileReaderDidError(event) {\n        this.callback(\"Error reading \" + this.file.name);\n      }\n    }, {\n      key: \"readNextChunk\",\n      value: function readNextChunk() {\n        if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n          var start = this.chunkIndex * this.chunkSize;\n          var end = Math.min(start + this.chunkSize, this.file.size);\n          var 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    return FileChecksum;\n  }();\n\n  function getMetaValue(name) {\n    var element = findElement(document.head, 'meta[name=\"' + name + '\"]');\n\n    if (element) {\n      return element.getAttribute(\"content\");\n    }\n  }\n\n  function findElements(root, selector) {\n    if (typeof root == \"string\") {\n      selector = root;\n      root = document;\n    }\n\n    var elements = root.querySelectorAll(selector);\n    return toArray$1(elements);\n  }\n\n  function findElement(root, selector) {\n    if (typeof root == \"string\") {\n      selector = root;\n      root = document;\n    }\n\n    return root.querySelector(selector);\n  }\n\n  function dispatchEvent(element, type) {\n    var eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var disabled = element.disabled;\n    var bubbles = eventInit.bubbles,\n        cancelable = eventInit.cancelable,\n        detail = eventInit.detail;\n    var event = document.createEvent(\"Event\");\n    event.initEvent(type, bubbles || true, cancelable || true);\n    event.detail = detail || {};\n\n    try {\n      element.disabled = false;\n      element.dispatchEvent(event);\n    } finally {\n      element.disabled = disabled;\n    }\n\n    return event;\n  }\n\n  function toArray$1(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\n  var BlobRecord = function () {\n    function BlobRecord(file, checksum, url) {\n      var _this = this;\n\n      classCallCheck(this, BlobRecord);\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      var csrfToken = getMetaValue(\"csrf-token\");\n\n      if (csrfToken != undefined) {\n        this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n      }\n\n      this.xhr.addEventListener(\"load\", function (event) {\n        return _this.requestDidLoad(event);\n      });\n      this.xhr.addEventListener(\"error\", function (event) {\n        return _this.requestDidError(event);\n      });\n    }\n\n    createClass(BlobRecord, [{\n      key: \"create\",\n      value: function create(callback) {\n        this.callback = callback;\n        this.xhr.send(JSON.stringify({\n          blob: this.attributes\n        }));\n      }\n    }, {\n      key: \"requestDidLoad\",\n      value: function requestDidLoad(event) {\n        if (this.status >= 200 && this.status < 300) {\n          var response = this.response;\n          var direct_upload = response.direct_upload;\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    }, {\n      key: \"requestDidError\",\n      value: function requestDidError(event) {\n        this.callback('Error creating Blob for \"' + this.file.name + '\". Status: ' + this.status);\n      }\n    }, {\n      key: \"toJSON\",\n      value: function toJSON() {\n        var result = {};\n\n        for (var key in this.attributes) {\n          result[key] = this.attributes[key];\n        }\n\n        return result;\n      }\n    }, {\n      key: \"status\",\n      get: function get$$1() {\n        return this.xhr.status;\n      }\n    }, {\n      key: \"response\",\n      get: function get$$1() {\n        var _xhr = this.xhr,\n            responseType = _xhr.responseType,\n            response = _xhr.response;\n\n        if (responseType == \"json\") {\n          return response;\n        } else {\n          return JSON.parse(response);\n        }\n      }\n    }]);\n    return BlobRecord;\n  }();\n\n  var BlobUpload = function () {\n    function BlobUpload(blob) {\n      var _this = this;\n\n      classCallCheck(this, BlobUpload);\n      this.blob = blob;\n      this.file = blob.file;\n      var _blob$directUploadDat = blob.directUploadData,\n          url = _blob$directUploadDat.url,\n          headers = _blob$directUploadDat.headers;\n      this.xhr = new XMLHttpRequest();\n      this.xhr.open(\"PUT\", url, true);\n      this.xhr.responseType = \"text\";\n\n      for (var key in headers) {\n        this.xhr.setRequestHeader(key, headers[key]);\n      }\n\n      this.xhr.addEventListener(\"load\", function (event) {\n        return _this.requestDidLoad(event);\n      });\n      this.xhr.addEventListener(\"error\", function (event) {\n        return _this.requestDidError(event);\n      });\n    }\n\n    createClass(BlobUpload, [{\n      key: \"create\",\n      value: function create(callback) {\n        this.callback = callback;\n        this.xhr.send(this.file.slice());\n      }\n    }, {\n      key: \"requestDidLoad\",\n      value: function requestDidLoad(event) {\n        var _xhr = this.xhr,\n            status = _xhr.status,\n            response = _xhr.response;\n\n        if (status >= 200 && status < 300) {\n          this.callback(null, response);\n        } else {\n          this.requestDidError(event);\n        }\n      }\n    }, {\n      key: \"requestDidError\",\n      value: function requestDidError(event) {\n        this.callback('Error storing \"' + this.file.name + '\". Status: ' + this.xhr.status);\n      }\n    }]);\n    return BlobUpload;\n  }();\n\n  var id = 0;\n\n  var DirectUpload = function () {\n    function DirectUpload(file, url, delegate) {\n      classCallCheck(this, DirectUpload);\n      this.id = ++id;\n      this.file = file;\n      this.url = url;\n      this.delegate = delegate;\n    }\n\n    createClass(DirectUpload, [{\n      key: \"create\",\n      value: function create(callback) {\n        var _this = this;\n\n        FileChecksum.create(this.file, function (error, checksum) {\n          if (error) {\n            callback(error);\n            return;\n          }\n\n          var blob = new BlobRecord(_this.file, checksum, _this.url);\n          notify(_this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n          blob.create(function (error) {\n            if (error) {\n              callback(error);\n            } else {\n              var upload = new BlobUpload(blob);\n              notify(_this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n              upload.create(function (error) {\n                if (error) {\n                  callback(error);\n                } else {\n                  callback(null, blob.toJSON());\n                }\n              });\n            }\n          });\n        });\n      }\n    }]);\n    return DirectUpload;\n  }();\n\n  function notify(object, methodName) {\n    if (object && typeof object[methodName] == \"function\") {\n      for (var _len = arguments.length, messages = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n        messages[_key - 2] = arguments[_key];\n      }\n\n      return object[methodName].apply(object, messages);\n    }\n  }\n\n  var DirectUploadController = function () {\n    function DirectUploadController(input, file) {\n      classCallCheck(this, DirectUploadController);\n      this.input = input;\n      this.file = file;\n      this.directUpload = new DirectUpload(this.file, this.url, this);\n      this.dispatch(\"initialize\");\n    }\n\n    createClass(DirectUploadController, [{\n      key: \"start\",\n      value: function start(callback) {\n        var _this = this;\n\n        var 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(function (error, attributes) {\n          if (error) {\n            hiddenInput.parentNode.removeChild(hiddenInput);\n\n            _this.dispatchError(error);\n          } else {\n            hiddenInput.value = attributes.signed_id;\n          }\n\n          _this.dispatch(\"end\");\n\n          callback(error);\n        });\n      }\n    }, {\n      key: \"uploadRequestDidProgress\",\n      value: function uploadRequestDidProgress(event) {\n        var progress = event.loaded / event.total * 100;\n\n        if (progress) {\n          this.dispatch(\"progress\", {\n            progress: progress\n          });\n        }\n      }\n    }, {\n      key: \"dispatch\",\n      value: function dispatch(name) {\n        var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\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    }, {\n      key: \"dispatchError\",\n      value: function dispatchError(error) {\n        var event = this.dispatch(\"error\", {\n          error: error\n        });\n\n        if (!event.defaultPrevented) {\n          alert(error);\n        }\n      }\n    }, {\n      key: \"directUploadWillCreateBlobWithXHR\",\n      value: function directUploadWillCreateBlobWithXHR(xhr) {\n        this.dispatch(\"before-blob-request\", {\n          xhr: xhr\n        });\n      }\n    }, {\n      key: \"directUploadWillStoreFileWithXHR\",\n      value: function directUploadWillStoreFileWithXHR(xhr) {\n        var _this2 = this;\n\n        this.dispatch(\"before-storage-request\", {\n          xhr: xhr\n        });\n        xhr.upload.addEventListener(\"progress\", function (event) {\n          return _this2.uploadRequestDidProgress(event);\n        });\n      }\n    }, {\n      key: \"url\",\n      get: function get$$1() {\n        return this.input.getAttribute(\"data-direct-upload-url\");\n      }\n    }]);\n    return DirectUploadController;\n  }();\n\n  var inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\n  var DirectUploadsController = function () {\n    function DirectUploadsController(form) {\n      classCallCheck(this, DirectUploadsController);\n      this.form = form;\n      this.inputs = findElements(form, inputSelector).filter(function (input) {\n        return input.files.length;\n      });\n    }\n\n    createClass(DirectUploadsController, [{\n      key: \"start\",\n      value: function start(callback) {\n        var _this = this;\n\n        var controllers = this.createDirectUploadControllers();\n\n        var startNextController = function startNextController() {\n          var controller = controllers.shift();\n\n          if (controller) {\n            controller.start(function (error) {\n              if (error) {\n                callback(error);\n\n                _this.dispatch(\"end\");\n              } else {\n                startNextController();\n              }\n            });\n          } else {\n            callback();\n\n            _this.dispatch(\"end\");\n          }\n        };\n\n        this.dispatch(\"start\");\n        startNextController();\n      }\n    }, {\n      key: \"createDirectUploadControllers\",\n      value: function createDirectUploadControllers() {\n        var controllers = [];\n        this.inputs.forEach(function (input) {\n          toArray$1(input.files).forEach(function (file) {\n            var controller = new DirectUploadController(input, file);\n            controllers.push(controller);\n          });\n        });\n        return controllers;\n      }\n    }, {\n      key: \"dispatch\",\n      value: function dispatch(name) {\n        var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        return dispatchEvent(this.form, \"direct-uploads:\" + name, {\n          detail: detail\n        });\n      }\n    }]);\n    return DirectUploadsController;\n  }();\n\n  var processingAttribute = \"data-direct-uploads-processing\";\n  var submitButtonsByForm = new WeakMap();\n  var started = false;\n\n  function start() {\n    if (!started) {\n      started = true;\n      document.addEventListener(\"click\", didClick, true);\n      document.addEventListener(\"submit\", didSubmitForm);\n      document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n    }\n  }\n\n  function didClick(event) {\n    var target = event.target;\n\n    if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n      submitButtonsByForm.set(target.form, target);\n    }\n  }\n\n  function didSubmitForm(event) {\n    handleFormSubmissionEvent(event);\n  }\n\n  function didSubmitRemoteElement(event) {\n    if (event.target.tagName == \"FORM\") {\n      handleFormSubmissionEvent(event);\n    }\n  }\n\n  function handleFormSubmissionEvent(event) {\n    var form = event.target;\n\n    if (form.hasAttribute(processingAttribute)) {\n      event.preventDefault();\n      return;\n    }\n\n    var controller = new DirectUploadsController(form);\n    var inputs = controller.inputs;\n\n    if (inputs.length) {\n      event.preventDefault();\n      form.setAttribute(processingAttribute, \"\");\n      inputs.forEach(disable);\n      controller.start(function (error) {\n        form.removeAttribute(processingAttribute);\n\n        if (error) {\n          inputs.forEach(enable);\n        } else {\n          submitForm(form);\n        }\n      });\n    }\n  }\n\n  function submitForm(form) {\n    var button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n\n    if (button) {\n      var _button = button,\n          disabled = _button.disabled;\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\n    submitButtonsByForm.delete(form);\n  }\n\n  function disable(input) {\n    input.disabled = true;\n  }\n\n  function enable(input) {\n    input.disabled = false;\n  }\n\n  function autostart() {\n    if (window.ActiveStorage) {\n      start();\n    }\n  }\n\n  setTimeout(autostart, 1);\n  exports.start = start;\n  exports.DirectUpload = DirectUpload;\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n});","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { createPlugin } from '@fullcalendar/core/index.js';\nimport { config, Emitter, elementClosest, applyStyle, whenTransitionDone, removeElement, ScrollController, ElementScrollController, computeInnerRect, WindowScrollController, ElementDragging, preventSelection, preventContextMenu, allowSelection, allowContextMenu, computeRect, getClippingParents, pointInsideRect, constrainPoint, intersectRects, getRectCenter, diffPoints, mapHash, rangeContainsRange, isDateSpansEqual, Interaction, interactionSettingsToStore, isDateSelectionValid, enableCursor, disableCursor, triggerDateSelect, compareNumbers, getElSeg, getRelevantEvents, EventImpl, createEmptyEventStore, applyMutationToEventStore, isInteractionValid, buildEventApis, interactionSettingsStore, startOfDay, diffDates, createDuration, getEventTargetViaRoot, identity, eventTupleToStore, parseDragMeta, elementMatches, refineEventDef, parseEventDef, getDefaultEventEnd, createEventInstance, BASE_OPTION_DEFAULTS } from '@fullcalendar/core/internal.js';\nconfig.touchMouseIgnoreWait = 500;\nvar ignoreMouseDepth = 0;\nvar listenerCnt = 0;\nvar isWindowTouchMoveCancelled = false;\n/*\nUses a \"pointer\" abstraction, which monitors UI events for both mouse and touch.\nTracks when the pointer \"drags\" on a certain element, meaning down+move+up.\n\nAlso, tracks if there was touch-scrolling.\nAlso, can prevent touch-scrolling from happening.\nAlso, can fire pointermove events when scrolling happens underneath, even when no real pointer movement.\n\nemits:\n- pointerdown\n- pointermove\n- pointerup\n*/\n\nvar PointerDragging = /*#__PURE__*/function () {\n  function PointerDragging(containerEl) {\n    var _this = this;\n\n    _classCallCheck(this, PointerDragging);\n\n    this.subjectEl = null; // options that can be directly assigned by caller\n\n    this.selector = ''; // will cause subjectEl in all emitted events to be this element\n\n    this.handleSelector = '';\n    this.shouldIgnoreMove = false;\n    this.shouldWatchScroll = true; // for simulating pointermove on scroll\n    // internal states\n\n    this.isDragging = false;\n    this.isTouchDragging = false;\n    this.wasTouchScroll = false; // Mouse\n    // ----------------------------------------------------------------------------------------------------\n\n    this.handleMouseDown = function (ev) {\n      if (!_this.shouldIgnoreMouse() && isPrimaryMouseButton(ev) && _this.tryStart(ev)) {\n        var pev = _this.createEventFromMouse(ev, true);\n\n        _this.emitter.trigger('pointerdown', pev);\n\n        _this.initScrollWatch(pev);\n\n        if (!_this.shouldIgnoreMove) {\n          document.addEventListener('mousemove', _this.handleMouseMove);\n        }\n\n        document.addEventListener('mouseup', _this.handleMouseUp);\n      }\n    };\n\n    this.handleMouseMove = function (ev) {\n      var pev = _this.createEventFromMouse(ev);\n\n      _this.recordCoords(pev);\n\n      _this.emitter.trigger('pointermove', pev);\n    };\n\n    this.handleMouseUp = function (ev) {\n      document.removeEventListener('mousemove', _this.handleMouseMove);\n      document.removeEventListener('mouseup', _this.handleMouseUp);\n\n      _this.emitter.trigger('pointerup', _this.createEventFromMouse(ev));\n\n      _this.cleanup(); // call last so that pointerup has access to props\n\n    }; // Touch\n    // ----------------------------------------------------------------------------------------------------\n\n\n    this.handleTouchStart = function (ev) {\n      if (_this.tryStart(ev)) {\n        _this.isTouchDragging = true;\n\n        var pev = _this.createEventFromTouch(ev, true);\n\n        _this.emitter.trigger('pointerdown', pev);\n\n        _this.initScrollWatch(pev); // unlike mouse, need to attach to target, not document\n        // https://stackoverflow.com/a/45760014\n\n\n        var targetEl = ev.target;\n\n        if (!_this.shouldIgnoreMove) {\n          targetEl.addEventListener('touchmove', _this.handleTouchMove);\n        }\n\n        targetEl.addEventListener('touchend', _this.handleTouchEnd);\n        targetEl.addEventListener('touchcancel', _this.handleTouchEnd); // treat it as a touch end\n        // attach a handler to get called when ANY scroll action happens on the page.\n        // this was impossible to do with normal on/off because 'scroll' doesn't bubble.\n        // http://stackoverflow.com/a/32954565/96342\n\n        window.addEventListener('scroll', _this.handleTouchScroll, true);\n      }\n    };\n\n    this.handleTouchMove = function (ev) {\n      var pev = _this.createEventFromTouch(ev);\n\n      _this.recordCoords(pev);\n\n      _this.emitter.trigger('pointermove', pev);\n    };\n\n    this.handleTouchEnd = function (ev) {\n      if (_this.isDragging) {\n        // done to guard against touchend followed by touchcancel\n        var targetEl = ev.target;\n        targetEl.removeEventListener('touchmove', _this.handleTouchMove);\n        targetEl.removeEventListener('touchend', _this.handleTouchEnd);\n        targetEl.removeEventListener('touchcancel', _this.handleTouchEnd);\n        window.removeEventListener('scroll', _this.handleTouchScroll, true); // useCaptured=true\n\n        _this.emitter.trigger('pointerup', _this.createEventFromTouch(ev));\n\n        _this.cleanup(); // call last so that pointerup has access to props\n\n\n        _this.isTouchDragging = false;\n        startIgnoringMouse();\n      }\n    };\n\n    this.handleTouchScroll = function () {\n      _this.wasTouchScroll = true;\n    };\n\n    this.handleScroll = function (ev) {\n      if (!_this.shouldIgnoreMove) {\n        var pageX = window.pageXOffset - _this.prevScrollX + _this.prevPageX;\n        var pageY = window.pageYOffset - _this.prevScrollY + _this.prevPageY;\n\n        _this.emitter.trigger('pointermove', {\n          origEvent: ev,\n          isTouch: _this.isTouchDragging,\n          subjectEl: _this.subjectEl,\n          pageX: pageX,\n          pageY: pageY,\n          deltaX: pageX - _this.origPageX,\n          deltaY: pageY - _this.origPageY\n        });\n      }\n    };\n\n    this.containerEl = containerEl;\n    this.emitter = new Emitter();\n    containerEl.addEventListener('mousedown', this.handleMouseDown);\n    containerEl.addEventListener('touchstart', this.handleTouchStart, {\n      passive: true\n    });\n    listenerCreated();\n  }\n\n  _createClass(PointerDragging, [{\n    key: \"destroy\",\n    value: function destroy() {\n      this.containerEl.removeEventListener('mousedown', this.handleMouseDown);\n      this.containerEl.removeEventListener('touchstart', this.handleTouchStart, {\n        passive: true\n      });\n      listenerDestroyed();\n    }\n  }, {\n    key: \"tryStart\",\n    value: function tryStart(ev) {\n      var subjectEl = this.querySubjectEl(ev);\n      var downEl = ev.target;\n\n      if (subjectEl && (!this.handleSelector || elementClosest(downEl, this.handleSelector))) {\n        this.subjectEl = subjectEl;\n        this.isDragging = true; // do this first so cancelTouchScroll will work\n\n        this.wasTouchScroll = false;\n        return true;\n      }\n\n      return false;\n    }\n  }, {\n    key: \"cleanup\",\n    value: function cleanup() {\n      isWindowTouchMoveCancelled = false;\n      this.isDragging = false;\n      this.subjectEl = null; // keep wasTouchScroll around for later access\n\n      this.destroyScrollWatch();\n    }\n  }, {\n    key: \"querySubjectEl\",\n    value: function querySubjectEl(ev) {\n      if (this.selector) {\n        return elementClosest(ev.target, this.selector);\n      }\n\n      return this.containerEl;\n    }\n  }, {\n    key: \"shouldIgnoreMouse\",\n    value: function shouldIgnoreMouse() {\n      return ignoreMouseDepth || this.isTouchDragging;\n    } // can be called by user of this class, to cancel touch-based scrolling for the current drag\n\n  }, {\n    key: \"cancelTouchScroll\",\n    value: function cancelTouchScroll() {\n      if (this.isDragging) {\n        isWindowTouchMoveCancelled = true;\n      }\n    } // Scrolling that simulates pointermoves\n    // ----------------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"initScrollWatch\",\n    value: function initScrollWatch(ev) {\n      if (this.shouldWatchScroll) {\n        this.recordCoords(ev);\n        window.addEventListener('scroll', this.handleScroll, true); // useCapture=true\n      }\n    }\n  }, {\n    key: \"recordCoords\",\n    value: function recordCoords(ev) {\n      if (this.shouldWatchScroll) {\n        this.prevPageX = ev.pageX;\n        this.prevPageY = ev.pageY;\n        this.prevScrollX = window.pageXOffset;\n        this.prevScrollY = window.pageYOffset;\n      }\n    }\n  }, {\n    key: \"destroyScrollWatch\",\n    value: function destroyScrollWatch() {\n      if (this.shouldWatchScroll) {\n        window.removeEventListener('scroll', this.handleScroll, true); // useCaptured=true\n      }\n    } // Event Normalization\n    // ----------------------------------------------------------------------------------------------------\n\n  }, {\n    key: \"createEventFromMouse\",\n    value: function createEventFromMouse(ev, isFirst) {\n      var deltaX = 0;\n      var deltaY = 0; // TODO: repeat code\n\n      if (isFirst) {\n        this.origPageX = ev.pageX;\n        this.origPageY = ev.pageY;\n      } else {\n        deltaX = ev.pageX - this.origPageX;\n        deltaY = ev.pageY - this.origPageY;\n      }\n\n      return {\n        origEvent: ev,\n        isTouch: false,\n        subjectEl: this.subjectEl,\n        pageX: ev.pageX,\n        pageY: ev.pageY,\n        deltaX: deltaX,\n        deltaY: deltaY\n      };\n    }\n  }, {\n    key: \"createEventFromTouch\",\n    value: function createEventFromTouch(ev, isFirst) {\n      var touches = ev.touches;\n      var pageX;\n      var pageY;\n      var deltaX = 0;\n      var deltaY = 0; // if touch coords available, prefer,\n      // because FF would give bad ev.pageX ev.pageY\n\n      if (touches && touches.length) {\n        pageX = touches[0].pageX;\n        pageY = touches[0].pageY;\n      } else {\n        pageX = ev.pageX;\n        pageY = ev.pageY;\n      } // TODO: repeat code\n\n\n      if (isFirst) {\n        this.origPageX = pageX;\n        this.origPageY = pageY;\n      } else {\n        deltaX = pageX - this.origPageX;\n        deltaY = pageY - this.origPageY;\n      }\n\n      return {\n        origEvent: ev,\n        isTouch: true,\n        subjectEl: this.subjectEl,\n        pageX: pageX,\n        pageY: pageY,\n        deltaX: deltaX,\n        deltaY: deltaY\n      };\n    }\n  }]);\n\n  return PointerDragging;\n}(); // Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\n\n\nfunction isPrimaryMouseButton(ev) {\n  return ev.button === 0 && !ev.ctrlKey;\n} // Ignoring fake mouse events generated by touch\n// ----------------------------------------------------------------------------------------------------\n\n\nfunction startIgnoringMouse() {\n  ignoreMouseDepth += 1;\n  setTimeout(function () {\n    ignoreMouseDepth -= 1;\n  }, config.touchMouseIgnoreWait);\n} // We want to attach touchmove as early as possible for Safari\n// ----------------------------------------------------------------------------------------------------\n\n\nfunction listenerCreated() {\n  listenerCnt += 1;\n\n  if (listenerCnt === 1) {\n    window.addEventListener('touchmove', onWindowTouchMove, {\n      passive: false\n    });\n  }\n}\n\nfunction listenerDestroyed() {\n  listenerCnt -= 1;\n\n  if (!listenerCnt) {\n    window.removeEventListener('touchmove', onWindowTouchMove, {\n      passive: false\n    });\n  }\n}\n\nfunction onWindowTouchMove(ev) {\n  if (isWindowTouchMoveCancelled) {\n    ev.preventDefault();\n  }\n}\n/*\nAn effect in which an element follows the movement of a pointer across the screen.\nThe moving element is a clone of some other element.\nMust call start + handleMove + stop.\n*/\n\n\nvar ElementMirror = /*#__PURE__*/function () {\n  function ElementMirror() {\n    _classCallCheck(this, ElementMirror);\n\n    this.isVisible = false; // must be explicitly enabled\n\n    this.sourceEl = null;\n    this.mirrorEl = null;\n    this.sourceElRect = null; // screen coords relative to viewport\n    // options that can be set directly by caller\n\n    this.parentNode = document.body; // HIGHLY SUGGESTED to set this to sidestep ShadowDOM issues\n\n    this.zIndex = 9999;\n    this.revertDuration = 0;\n  }\n\n  _createClass(ElementMirror, [{\n    key: \"start\",\n    value: function start(sourceEl, pageX, pageY) {\n      this.sourceEl = sourceEl;\n      this.sourceElRect = this.sourceEl.getBoundingClientRect();\n      this.origScreenX = pageX - window.pageXOffset;\n      this.origScreenY = pageY - window.pageYOffset;\n      this.deltaX = 0;\n      this.deltaY = 0;\n      this.updateElPosition();\n    }\n  }, {\n    key: \"handleMove\",\n    value: function handleMove(pageX, pageY) {\n      this.deltaX = pageX - window.pageXOffset - this.origScreenX;\n      this.deltaY = pageY - window.pageYOffset - this.origScreenY;\n      this.updateElPosition();\n    } // can be called before start\n\n  }, {\n    key: \"setIsVisible\",\n    value: function setIsVisible(bool) {\n      if (bool) {\n        if (!this.isVisible) {\n          if (this.mirrorEl) {\n            this.mirrorEl.style.display = '';\n          }\n\n          this.isVisible = bool; // needs to happen before updateElPosition\n\n          this.updateElPosition(); // because was not updating the position while invisible\n        }\n      } else if (this.isVisible) {\n        if (this.mirrorEl) {\n          this.mirrorEl.style.display = 'none';\n        }\n\n        this.isVisible = bool;\n      }\n    } // always async\n\n  }, {\n    key: \"stop\",\n    value: function stop(needsRevertAnimation, callback) {\n      var _this2 = this;\n\n      var done = function done() {\n        _this2.cleanup();\n\n        callback();\n      };\n\n      if (needsRevertAnimation && this.mirrorEl && this.isVisible && this.revertDuration && (this.deltaX || this.deltaY) // if same coords, transition won't work\n      ) {\n        this.doRevertAnimation(done, this.revertDuration);\n      } else {\n        setTimeout(done, 0);\n      }\n    }\n  }, {\n    key: \"doRevertAnimation\",\n    value: function doRevertAnimation(callback, revertDuration) {\n      var mirrorEl = this.mirrorEl;\n      var finalSourceElRect = this.sourceEl.getBoundingClientRect(); // because autoscrolling might have happened\n\n      mirrorEl.style.transition = 'top ' + revertDuration + 'ms,' + 'left ' + revertDuration + 'ms';\n      applyStyle(mirrorEl, {\n        left: finalSourceElRect.left,\n        top: finalSourceElRect.top\n      });\n      whenTransitionDone(mirrorEl, function () {\n        mirrorEl.style.transition = '';\n        callback();\n      });\n    }\n  }, {\n    key: \"cleanup\",\n    value: function cleanup() {\n      if (this.mirrorEl) {\n        removeElement(this.mirrorEl);\n        this.mirrorEl = null;\n      }\n\n      this.sourceEl = null;\n    }\n  }, {\n    key: \"updateElPosition\",\n    value: function updateElPosition() {\n      if (this.sourceEl && this.isVisible) {\n        applyStyle(this.getMirrorEl(), {\n          left: this.sourceElRect.left + this.deltaX,\n          top: this.sourceElRect.top + this.deltaY\n        });\n      }\n    }\n  }, {\n    key: \"getMirrorEl\",\n    value: function getMirrorEl() {\n      var sourceElRect = this.sourceElRect;\n      var mirrorEl = this.mirrorEl;\n\n      if (!mirrorEl) {\n        mirrorEl = this.mirrorEl = this.sourceEl.cloneNode(true); // cloneChildren=true\n        // we don't want long taps or any mouse interaction causing selection/menus.\n        // would use preventSelection(), but that prevents selectstart, causing problems.\n\n        mirrorEl.style.userSelect = 'none';\n        mirrorEl.style.webkitUserSelect = 'none';\n        mirrorEl.classList.add('fc-event-dragging');\n        applyStyle(mirrorEl, {\n          position: 'fixed',\n          zIndex: this.zIndex,\n          visibility: '',\n          boxSizing: 'border-box',\n          width: sourceElRect.right - sourceElRect.left,\n          height: sourceElRect.bottom - sourceElRect.top,\n          right: 'auto',\n          bottom: 'auto',\n          margin: 0\n        });\n        this.parentNode.appendChild(mirrorEl);\n      }\n\n      return mirrorEl;\n    }\n  }]);\n\n  return ElementMirror;\n}();\n/*\nIs a cache for a given element's scroll information (all the info that ScrollController stores)\nin addition the \"client rectangle\" of the element.. the area within the scrollbars.\n\nThe cache can be in one of two modes:\n- doesListening:false - ignores when the container is scrolled by someone else\n- doesListening:true - watch for scrolling and update the cache\n*/\n\n\nvar ScrollGeomCache = /*#__PURE__*/function (_ScrollController) {\n  _inherits(ScrollGeomCache, _ScrollController);\n\n  var _super = _createSuper(ScrollGeomCache);\n\n  function ScrollGeomCache(scrollController, doesListening) {\n    var _this3;\n\n    _classCallCheck(this, ScrollGeomCache);\n\n    _this3 = _super.call(this);\n\n    _this3.handleScroll = function () {\n      _this3.scrollTop = _this3.scrollController.getScrollTop();\n      _this3.scrollLeft = _this3.scrollController.getScrollLeft();\n\n      _this3.handleScrollChange();\n    };\n\n    _this3.scrollController = scrollController;\n    _this3.doesListening = doesListening;\n    _this3.scrollTop = _this3.origScrollTop = scrollController.getScrollTop();\n    _this3.scrollLeft = _this3.origScrollLeft = scrollController.getScrollLeft();\n    _this3.scrollWidth = scrollController.getScrollWidth();\n    _this3.scrollHeight = scrollController.getScrollHeight();\n    _this3.clientWidth = scrollController.getClientWidth();\n    _this3.clientHeight = scrollController.getClientHeight();\n    _this3.clientRect = _this3.computeClientRect(); // do last in case it needs cached values\n\n    if (_this3.doesListening) {\n      _this3.getEventTarget().addEventListener('scroll', _this3.handleScroll);\n    }\n\n    return _this3;\n  }\n\n  _createClass(ScrollGeomCache, [{\n    key: \"destroy\",\n    value: function destroy() {\n      if (this.doesListening) {\n        this.getEventTarget().removeEventListener('scroll', this.handleScroll);\n      }\n    }\n  }, {\n    key: \"getScrollTop\",\n    value: function getScrollTop() {\n      return this.scrollTop;\n    }\n  }, {\n    key: \"getScrollLeft\",\n    value: function getScrollLeft() {\n      return this.scrollLeft;\n    }\n  }, {\n    key: \"setScrollTop\",\n    value: function setScrollTop(top) {\n      this.scrollController.setScrollTop(top);\n\n      if (!this.doesListening) {\n        // we are not relying on the element to normalize out-of-bounds scroll values\n        // so we need to sanitize ourselves\n        this.scrollTop = Math.max(Math.min(top, this.getMaxScrollTop()), 0);\n        this.handleScrollChange();\n      }\n    }\n  }, {\n    key: \"setScrollLeft\",\n    value: function setScrollLeft(top) {\n      this.scrollController.setScrollLeft(top);\n\n      if (!this.doesListening) {\n        // we are not relying on the element to normalize out-of-bounds scroll values\n        // so we need to sanitize ourselves\n        this.scrollLeft = Math.max(Math.min(top, this.getMaxScrollLeft()), 0);\n        this.handleScrollChange();\n      }\n    }\n  }, {\n    key: \"getClientWidth\",\n    value: function getClientWidth() {\n      return this.clientWidth;\n    }\n  }, {\n    key: \"getClientHeight\",\n    value: function getClientHeight() {\n      return this.clientHeight;\n    }\n  }, {\n    key: \"getScrollWidth\",\n    value: function getScrollWidth() {\n      return this.scrollWidth;\n    }\n  }, {\n    key: \"getScrollHeight\",\n    value: function getScrollHeight() {\n      return this.scrollHeight;\n    }\n  }, {\n    key: \"handleScrollChange\",\n    value: function handleScrollChange() {}\n  }]);\n\n  return ScrollGeomCache;\n}(ScrollController);\n\nvar ElementScrollGeomCache = /*#__PURE__*/function (_ScrollGeomCache) {\n  _inherits(ElementScrollGeomCache, _ScrollGeomCache);\n\n  var _super2 = _createSuper(ElementScrollGeomCache);\n\n  function ElementScrollGeomCache(el, doesListening) {\n    _classCallCheck(this, ElementScrollGeomCache);\n\n    return _super2.call(this, new ElementScrollController(el), doesListening);\n  }\n\n  _createClass(ElementScrollGeomCache, [{\n    key: \"getEventTarget\",\n    value: function getEventTarget() {\n      return this.scrollController.el;\n    }\n  }, {\n    key: \"computeClientRect\",\n    value: function computeClientRect() {\n      return computeInnerRect(this.scrollController.el);\n    }\n  }]);\n\n  return ElementScrollGeomCache;\n}(ScrollGeomCache);\n\nvar WindowScrollGeomCache = /*#__PURE__*/function (_ScrollGeomCache2) {\n  _inherits(WindowScrollGeomCache, _ScrollGeomCache2);\n\n  var _super3 = _createSuper(WindowScrollGeomCache);\n\n  function WindowScrollGeomCache(doesListening) {\n    _classCallCheck(this, WindowScrollGeomCache);\n\n    return _super3.call(this, new WindowScrollController(), doesListening);\n  }\n\n  _createClass(WindowScrollGeomCache, [{\n    key: \"getEventTarget\",\n    value: function getEventTarget() {\n      return window;\n    }\n  }, {\n    key: \"computeClientRect\",\n    value: function computeClientRect() {\n      return {\n        left: this.scrollLeft,\n        right: this.scrollLeft + this.clientWidth,\n        top: this.scrollTop,\n        bottom: this.scrollTop + this.clientHeight\n      };\n    } // the window is the only scroll object that changes it's rectangle relative\n    // to the document's topleft as it scrolls\n\n  }, {\n    key: \"handleScrollChange\",\n    value: function handleScrollChange() {\n      this.clientRect = this.computeClientRect();\n    }\n  }]);\n\n  return WindowScrollGeomCache;\n}(ScrollGeomCache); // If available we are using native \"performance\" API instead of \"Date\"\n// Read more about it on MDN:\n// https://developer.mozilla.org/en-US/docs/Web/API/Performance\n\n\nvar getTime = typeof performance === 'function' ? performance.now : Date.now;\n/*\nFor a pointer interaction, automatically scrolls certain scroll containers when the pointer\napproaches the edge.\n\nThe caller must call start + handleMove + stop.\n*/\n\nvar AutoScroller = /*#__PURE__*/function () {\n  function AutoScroller() {\n    var _this4 = this;\n\n    _classCallCheck(this, AutoScroller);\n\n    // options that can be set by caller\n    this.isEnabled = true;\n    this.scrollQuery = [window, '.fc-scroller'];\n    this.edgeThreshold = 50; // pixels\n\n    this.maxVelocity = 300; // pixels per second\n    // internal state\n\n    this.pointerScreenX = null;\n    this.pointerScreenY = null;\n    this.isAnimating = false;\n    this.scrollCaches = null; // protect against the initial pointerdown being too close to an edge and starting the scroll\n\n    this.everMovedUp = false;\n    this.everMovedDown = false;\n    this.everMovedLeft = false;\n    this.everMovedRight = false;\n\n    this.animate = function () {\n      if (_this4.isAnimating) {\n        // wasn't cancelled between animation calls\n        var edge = _this4.computeBestEdge(_this4.pointerScreenX + window.pageXOffset, _this4.pointerScreenY + window.pageYOffset);\n\n        if (edge) {\n          var now = getTime();\n\n          _this4.handleSide(edge, (now - _this4.msSinceRequest) / 1000);\n\n          _this4.requestAnimation(now);\n        } else {\n          _this4.isAnimating = false; // will stop animation\n        }\n      }\n    };\n  }\n\n  _createClass(AutoScroller, [{\n    key: \"start\",\n    value: function start(pageX, pageY, scrollStartEl) {\n      if (this.isEnabled) {\n        this.scrollCaches = this.buildCaches(scrollStartEl);\n        this.pointerScreenX = null;\n        this.pointerScreenY = null;\n        this.everMovedUp = false;\n        this.everMovedDown = false;\n        this.everMovedLeft = false;\n        this.everMovedRight = false;\n        this.handleMove(pageX, pageY);\n      }\n    }\n  }, {\n    key: \"handleMove\",\n    value: function handleMove(pageX, pageY) {\n      if (this.isEnabled) {\n        var pointerScreenX = pageX - window.pageXOffset;\n        var pointerScreenY = pageY - window.pageYOffset;\n        var yDelta = this.pointerScreenY === null ? 0 : pointerScreenY - this.pointerScreenY;\n        var xDelta = this.pointerScreenX === null ? 0 : pointerScreenX - this.pointerScreenX;\n\n        if (yDelta < 0) {\n          this.everMovedUp = true;\n        } else if (yDelta > 0) {\n          this.everMovedDown = true;\n        }\n\n        if (xDelta < 0) {\n          this.everMovedLeft = true;\n        } else if (xDelta > 0) {\n          this.everMovedRight = true;\n        }\n\n        this.pointerScreenX = pointerScreenX;\n        this.pointerScreenY = pointerScreenY;\n\n        if (!this.isAnimating) {\n          this.isAnimating = true;\n          this.requestAnimation(getTime());\n        }\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (this.isEnabled) {\n        this.isAnimating = false; // will stop animation\n\n        var _iterator = _createForOfIteratorHelper(this.scrollCaches),\n            _step;\n\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var scrollCache = _step.value;\n            scrollCache.destroy();\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n\n        this.scrollCaches = null;\n      }\n    }\n  }, {\n    key: \"requestAnimation\",\n    value: function requestAnimation(now) {\n      this.msSinceRequest = now;\n      requestAnimationFrame(this.animate);\n    }\n  }, {\n    key: \"handleSide\",\n    value: function handleSide(edge, seconds) {\n      var scrollCache = edge.scrollCache;\n      var edgeThreshold = this.edgeThreshold;\n      var invDistance = edgeThreshold - edge.distance;\n      var velocity = // the closer to the edge, the faster we scroll\n      invDistance * invDistance / (edgeThreshold * edgeThreshold) * // quadratic\n      this.maxVelocity * seconds;\n      var sign = 1;\n\n      switch (edge.name) {\n        case 'left':\n          sign = -1;\n        // falls through\n\n        case 'right':\n          scrollCache.setScrollLeft(scrollCache.getScrollLeft() + velocity * sign);\n          break;\n\n        case 'top':\n          sign = -1;\n        // falls through\n\n        case 'bottom':\n          scrollCache.setScrollTop(scrollCache.getScrollTop() + velocity * sign);\n          break;\n      }\n    } // left/top are relative to document topleft\n\n  }, {\n    key: \"computeBestEdge\",\n    value: function computeBestEdge(left, top) {\n      var edgeThreshold = this.edgeThreshold;\n      var bestSide = null;\n      var scrollCaches = this.scrollCaches || [];\n\n      var _iterator2 = _createForOfIteratorHelper(scrollCaches),\n          _step2;\n\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var scrollCache = _step2.value;\n          var rect = scrollCache.clientRect;\n          var leftDist = left - rect.left;\n          var rightDist = rect.right - left;\n          var topDist = top - rect.top;\n          var bottomDist = rect.bottom - top; // completely within the rect?\n\n          if (leftDist >= 0 && rightDist >= 0 && topDist >= 0 && bottomDist >= 0) {\n            if (topDist <= edgeThreshold && this.everMovedUp && scrollCache.canScrollUp() && (!bestSide || bestSide.distance > topDist)) {\n              bestSide = {\n                scrollCache: scrollCache,\n                name: 'top',\n                distance: topDist\n              };\n            }\n\n            if (bottomDist <= edgeThreshold && this.everMovedDown && scrollCache.canScrollDown() && (!bestSide || bestSide.distance > bottomDist)) {\n              bestSide = {\n                scrollCache: scrollCache,\n                name: 'bottom',\n                distance: bottomDist\n              };\n            }\n\n            if (leftDist <= edgeThreshold && this.everMovedLeft && scrollCache.canScrollLeft() && (!bestSide || bestSide.distance > leftDist)) {\n              bestSide = {\n                scrollCache: scrollCache,\n                name: 'left',\n                distance: leftDist\n              };\n            }\n\n            if (rightDist <= edgeThreshold && this.everMovedRight && scrollCache.canScrollRight() && (!bestSide || bestSide.distance > rightDist)) {\n              bestSide = {\n                scrollCache: scrollCache,\n                name: 'right',\n                distance: rightDist\n              };\n            }\n          }\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n\n      return bestSide;\n    }\n  }, {\n    key: \"buildCaches\",\n    value: function buildCaches(scrollStartEl) {\n      return this.queryScrollEls(scrollStartEl).map(function (el) {\n        if (el === window) {\n          return new WindowScrollGeomCache(false); // false = don't listen to user-generated scrolls\n        }\n\n        return new ElementScrollGeomCache(el, false); // false = don't listen to user-generated scrolls\n      });\n    }\n  }, {\n    key: \"queryScrollEls\",\n    value: function queryScrollEls(scrollStartEl) {\n      var els = [];\n\n      var _iterator3 = _createForOfIteratorHelper(this.scrollQuery),\n          _step3;\n\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var query = _step3.value;\n\n          if (_typeof(query) === 'object') {\n            els.push(query);\n          } else {\n            els.push.apply(els, _toConsumableArray(Array.prototype.slice.call(scrollStartEl.getRootNode().querySelectorAll(query))));\n          }\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n\n      return els;\n    }\n  }]);\n\n  return AutoScroller;\n}();\n/*\nMonitors dragging on an element. Has a number of high-level features:\n- minimum distance required before dragging\n- minimum wait time (\"delay\") before dragging\n- a mirror element that follows the pointer\n*/\n\n\nvar FeaturefulElementDragging = /*#__PURE__*/function (_ElementDragging) {\n  _inherits(FeaturefulElementDragging, _ElementDragging);\n\n  var _super4 = _createSuper(FeaturefulElementDragging);\n\n  function FeaturefulElementDragging(containerEl, selector) {\n    var _this5;\n\n    _classCallCheck(this, FeaturefulElementDragging);\n\n    _this5 = _super4.call(this, containerEl);\n    _this5.containerEl = containerEl; // options that can be directly set by caller\n    // the caller can also set the PointerDragging's options as well\n\n    _this5.delay = null;\n    _this5.minDistance = 0;\n    _this5.touchScrollAllowed = true; // prevents drag from starting and blocks scrolling during drag\n\n    _this5.mirrorNeedsRevert = false;\n    _this5.isInteracting = false; // is the user validly moving the pointer? lasts until pointerup\n\n    _this5.isDragging = false; // is it INTENTFULLY dragging? lasts until after revert animation\n\n    _this5.isDelayEnded = false;\n    _this5.isDistanceSurpassed = false;\n    _this5.delayTimeoutId = null;\n\n    _this5.onPointerDown = function (ev) {\n      if (!_this5.isDragging) {\n        // so new drag doesn't happen while revert animation is going\n        _this5.isInteracting = true;\n        _this5.isDelayEnded = false;\n        _this5.isDistanceSurpassed = false;\n        preventSelection(document.body);\n        preventContextMenu(document.body); // prevent links from being visited if there's an eventual drag.\n        // also prevents selection in older browsers (maybe?).\n        // not necessary for touch, besides, browser would complain about passiveness.\n\n        if (!ev.isTouch) {\n          ev.origEvent.preventDefault();\n        }\n\n        _this5.emitter.trigger('pointerdown', ev);\n\n        if (_this5.isInteracting && // not destroyed via pointerdown handler\n        !_this5.pointer.shouldIgnoreMove) {\n          // actions related to initiating dragstart+dragmove+dragend...\n          _this5.mirror.setIsVisible(false); // reset. caller must set-visible\n\n\n          _this5.mirror.start(ev.subjectEl, ev.pageX, ev.pageY); // must happen on first pointer down\n\n\n          _this5.startDelay(ev);\n\n          if (!_this5.minDistance) {\n            _this5.handleDistanceSurpassed(ev);\n          }\n        }\n      }\n    };\n\n    _this5.onPointerMove = function (ev) {\n      if (_this5.isInteracting) {\n        _this5.emitter.trigger('pointermove', ev);\n\n        if (!_this5.isDistanceSurpassed) {\n          var minDistance = _this5.minDistance;\n          var distanceSq; // current distance from the origin, squared\n\n          var deltaX = ev.deltaX,\n              deltaY = ev.deltaY;\n          distanceSq = deltaX * deltaX + deltaY * deltaY;\n\n          if (distanceSq >= minDistance * minDistance) {\n            // use pythagorean theorem\n            _this5.handleDistanceSurpassed(ev);\n          }\n        }\n\n        if (_this5.isDragging) {\n          // a real pointer move? (not one simulated by scrolling)\n          if (ev.origEvent.type !== 'scroll') {\n            _this5.mirror.handleMove(ev.pageX, ev.pageY);\n\n            _this5.autoScroller.handleMove(ev.pageX, ev.pageY);\n          }\n\n          _this5.emitter.trigger('dragmove', ev);\n        }\n      }\n    };\n\n    _this5.onPointerUp = function (ev) {\n      if (_this5.isInteracting) {\n        _this5.isInteracting = false;\n        allowSelection(document.body);\n        allowContextMenu(document.body);\n\n        _this5.emitter.trigger('pointerup', ev); // can potentially set mirrorNeedsRevert\n\n\n        if (_this5.isDragging) {\n          _this5.autoScroller.stop();\n\n          _this5.tryStopDrag(ev); // which will stop the mirror\n\n        }\n\n        if (_this5.delayTimeoutId) {\n          clearTimeout(_this5.delayTimeoutId);\n          _this5.delayTimeoutId = null;\n        }\n      }\n    };\n\n    var pointer = _this5.pointer = new PointerDragging(containerEl);\n    pointer.emitter.on('pointerdown', _this5.onPointerDown);\n    pointer.emitter.on('pointermove', _this5.onPointerMove);\n    pointer.emitter.on('pointerup', _this5.onPointerUp);\n\n    if (selector) {\n      pointer.selector = selector;\n    }\n\n    _this5.mirror = new ElementMirror();\n    _this5.autoScroller = new AutoScroller();\n    return _this5;\n  }\n\n  _createClass(FeaturefulElementDragging, [{\n    key: \"destroy\",\n    value: function destroy() {\n      this.pointer.destroy(); // HACK: simulate a pointer-up to end the current drag\n      // TODO: fire 'dragend' directly and stop interaction. discourage use of pointerup event (b/c might not fire)\n\n      this.onPointerUp({});\n    }\n  }, {\n    key: \"startDelay\",\n    value: function startDelay(ev) {\n      var _this6 = this;\n\n      if (typeof this.delay === 'number') {\n        this.delayTimeoutId = setTimeout(function () {\n          _this6.delayTimeoutId = null;\n\n          _this6.handleDelayEnd(ev);\n        }, this.delay); // not assignable to number!\n      } else {\n        this.handleDelayEnd(ev);\n      }\n    }\n  }, {\n    key: \"handleDelayEnd\",\n    value: function handleDelayEnd(ev) {\n      this.isDelayEnded = true;\n      this.tryStartDrag(ev);\n    }\n  }, {\n    key: \"handleDistanceSurpassed\",\n    value: function handleDistanceSurpassed(ev) {\n      this.isDistanceSurpassed = true;\n      this.tryStartDrag(ev);\n    }\n  }, {\n    key: \"tryStartDrag\",\n    value: function tryStartDrag(ev) {\n      if (this.isDelayEnded && this.isDistanceSurpassed) {\n        if (!this.pointer.wasTouchScroll || this.touchScrollAllowed) {\n          this.isDragging = true;\n          this.mirrorNeedsRevert = false;\n          this.autoScroller.start(ev.pageX, ev.pageY, this.containerEl);\n          this.emitter.trigger('dragstart', ev);\n\n          if (this.touchScrollAllowed === false) {\n            this.pointer.cancelTouchScroll();\n          }\n        }\n      }\n    }\n  }, {\n    key: \"tryStopDrag\",\n    value: function tryStopDrag(ev) {\n      // .stop() is ALWAYS asynchronous, which we NEED because we want all pointerup events\n      // that come from the document to fire beforehand. much more convenient this way.\n      this.mirror.stop(this.mirrorNeedsRevert, this.stopDrag.bind(this, ev));\n    }\n  }, {\n    key: \"stopDrag\",\n    value: function stopDrag(ev) {\n      this.isDragging = false;\n      this.emitter.trigger('dragend', ev);\n    } // fill in the implementations...\n\n  }, {\n    key: \"setIgnoreMove\",\n    value: function setIgnoreMove(bool) {\n      this.pointer.shouldIgnoreMove = bool;\n    }\n  }, {\n    key: \"setMirrorIsVisible\",\n    value: function setMirrorIsVisible(bool) {\n      this.mirror.setIsVisible(bool);\n    }\n  }, {\n    key: \"setMirrorNeedsRevert\",\n    value: function setMirrorNeedsRevert(bool) {\n      this.mirrorNeedsRevert = bool;\n    }\n  }, {\n    key: \"setAutoScrollEnabled\",\n    value: function setAutoScrollEnabled(bool) {\n      this.autoScroller.isEnabled = bool;\n    }\n  }]);\n\n  return FeaturefulElementDragging;\n}(ElementDragging);\n/*\nWhen this class is instantiated, it records the offset of an element (relative to the document topleft),\nand continues to monitor scrolling, updating the cached coordinates if it needs to.\nDoes not access the DOM after instantiation, so highly performant.\n\nAlso keeps track of all scrolling/overflow:hidden containers that are parents of the given element\nand an determine if a given point is inside the combined clipping rectangle.\n*/\n\n\nvar OffsetTracker = /*#__PURE__*/function () {\n  function OffsetTracker(el) {\n    _classCallCheck(this, OffsetTracker);\n\n    this.origRect = computeRect(el); // will work fine for divs that have overflow:hidden\n\n    this.scrollCaches = getClippingParents(el).map(function (scrollEl) {\n      return new ElementScrollGeomCache(scrollEl, true);\n    });\n  }\n\n  _createClass(OffsetTracker, [{\n    key: \"destroy\",\n    value: function destroy() {\n      var _iterator4 = _createForOfIteratorHelper(this.scrollCaches),\n          _step4;\n\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var scrollCache = _step4.value;\n          scrollCache.destroy();\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n    }\n  }, {\n    key: \"computeLeft\",\n    value: function computeLeft() {\n      var left = this.origRect.left;\n\n      var _iterator5 = _createForOfIteratorHelper(this.scrollCaches),\n          _step5;\n\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var scrollCache = _step5.value;\n          left += scrollCache.origScrollLeft - scrollCache.getScrollLeft();\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n\n      return left;\n    }\n  }, {\n    key: \"computeTop\",\n    value: function computeTop() {\n      var top = this.origRect.top;\n\n      var _iterator6 = _createForOfIteratorHelper(this.scrollCaches),\n          _step6;\n\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var scrollCache = _step6.value;\n          top += scrollCache.origScrollTop - scrollCache.getScrollTop();\n        }\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n\n      return top;\n    }\n  }, {\n    key: \"isWithinClipping\",\n    value: function isWithinClipping(pageX, pageY) {\n      var point = {\n        left: pageX,\n        top: pageY\n      };\n\n      var _iterator7 = _createForOfIteratorHelper(this.scrollCaches),\n          _step7;\n\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var scrollCache = _step7.value;\n\n          if (!isIgnoredClipping(scrollCache.getEventTarget()) && !pointInsideRect(point, scrollCache.clientRect)) {\n            return false;\n          }\n        }\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n\n      return true;\n    }\n  }]);\n\n  return OffsetTracker;\n}(); // certain clipping containers should never constrain interactions, like <html> and <body>\n// https://github.com/fullcalendar/fullcalendar/issues/3615\n\n\nfunction isIgnoredClipping(node) {\n  var tagName = node.tagName;\n  return tagName === 'HTML' || tagName === 'BODY';\n}\n/*\nTracks movement over multiple droppable areas (aka \"hits\")\nthat exist in one or more DateComponents.\nRelies on an existing draggable.\n\nemits:\n- pointerdown\n- dragstart\n- hitchange - fires initially, even if not over a hit\n- pointerup\n- (hitchange - again, to null, if ended over a hit)\n- dragend\n*/\n\n\nvar HitDragging = /*#__PURE__*/function () {\n  function HitDragging(dragging, droppableStore) {\n    var _this7 = this;\n\n    _classCallCheck(this, HitDragging);\n\n    // options that can be set by caller\n    this.useSubjectCenter = false;\n    this.requireInitial = true; // if doesn't start out on a hit, won't emit any events\n\n    this.initialHit = null;\n    this.movingHit = null;\n    this.finalHit = null; // won't ever be populated if shouldIgnoreMove\n\n    this.handlePointerDown = function (ev) {\n      var dragging = _this7.dragging;\n      _this7.initialHit = null;\n      _this7.movingHit = null;\n      _this7.finalHit = null;\n\n      _this7.prepareHits();\n\n      _this7.processFirstCoord(ev);\n\n      if (_this7.initialHit || !_this7.requireInitial) {\n        dragging.setIgnoreMove(false); // TODO: fire this before computing processFirstCoord, so listeners can cancel. this gets fired by almost every handler :(\n\n        _this7.emitter.trigger('pointerdown', ev);\n      } else {\n        dragging.setIgnoreMove(true);\n      }\n    };\n\n    this.handleDragStart = function (ev) {\n      _this7.emitter.trigger('dragstart', ev);\n\n      _this7.handleMove(ev, true); // force = fire even if initially null\n\n    };\n\n    this.handleDragMove = function (ev) {\n      _this7.emitter.trigger('dragmove', ev);\n\n      _this7.handleMove(ev);\n    };\n\n    this.handlePointerUp = function (ev) {\n      _this7.releaseHits();\n\n      _this7.emitter.trigger('pointerup', ev);\n    };\n\n    this.handleDragEnd = function (ev) {\n      if (_this7.movingHit) {\n        _this7.emitter.trigger('hitupdate', null, true, ev);\n      }\n\n      _this7.finalHit = _this7.movingHit;\n      _this7.movingHit = null;\n\n      _this7.emitter.trigger('dragend', ev);\n    };\n\n    this.droppableStore = droppableStore;\n    dragging.emitter.on('pointerdown', this.handlePointerDown);\n    dragging.emitter.on('dragstart', this.handleDragStart);\n    dragging.emitter.on('dragmove', this.handleDragMove);\n    dragging.emitter.on('pointerup', this.handlePointerUp);\n    dragging.emitter.on('dragend', this.handleDragEnd);\n    this.dragging = dragging;\n    this.emitter = new Emitter();\n  } // sets initialHit\n  // sets coordAdjust\n\n\n  _createClass(HitDragging, [{\n    key: \"processFirstCoord\",\n    value: function processFirstCoord(ev) {\n      var origPoint = {\n        left: ev.pageX,\n        top: ev.pageY\n      };\n      var adjustedPoint = origPoint;\n      var subjectEl = ev.subjectEl;\n      var subjectRect;\n\n      if (subjectEl instanceof HTMLElement) {\n        // i.e. not a Document/ShadowRoot\n        subjectRect = computeRect(subjectEl);\n        adjustedPoint = constrainPoint(adjustedPoint, subjectRect);\n      }\n\n      var initialHit = this.initialHit = this.queryHitForOffset(adjustedPoint.left, adjustedPoint.top);\n\n      if (initialHit) {\n        if (this.useSubjectCenter && subjectRect) {\n          var slicedSubjectRect = intersectRects(subjectRect, initialHit.rect);\n\n          if (slicedSubjectRect) {\n            adjustedPoint = getRectCenter(slicedSubjectRect);\n          }\n        }\n\n        this.coordAdjust = diffPoints(adjustedPoint, origPoint);\n      } else {\n        this.coordAdjust = {\n          left: 0,\n          top: 0\n        };\n      }\n    }\n  }, {\n    key: \"handleMove\",\n    value: function handleMove(ev, forceHandle) {\n      var hit = this.queryHitForOffset(ev.pageX + this.coordAdjust.left, ev.pageY + this.coordAdjust.top);\n\n      if (forceHandle || !isHitsEqual(this.movingHit, hit)) {\n        this.movingHit = hit;\n        this.emitter.trigger('hitupdate', hit, false, ev);\n      }\n    }\n  }, {\n    key: \"prepareHits\",\n    value: function prepareHits() {\n      this.offsetTrackers = mapHash(this.droppableStore, function (interactionSettings) {\n        interactionSettings.component.prepareHits();\n        return new OffsetTracker(interactionSettings.el);\n      });\n    }\n  }, {\n    key: \"releaseHits\",\n    value: function releaseHits() {\n      var offsetTrackers = this.offsetTrackers;\n\n      for (var id in offsetTrackers) {\n        offsetTrackers[id].destroy();\n      }\n\n      this.offsetTrackers = {};\n    }\n  }, {\n    key: \"queryHitForOffset\",\n    value: function queryHitForOffset(offsetLeft, offsetTop) {\n      var droppableStore = this.droppableStore,\n          offsetTrackers = this.offsetTrackers;\n      var bestHit = null;\n\n      for (var id in droppableStore) {\n        var component = droppableStore[id].component;\n        var offsetTracker = offsetTrackers[id];\n\n        if (offsetTracker && // wasn't destroyed mid-drag\n        offsetTracker.isWithinClipping(offsetLeft, offsetTop)) {\n          var originLeft = offsetTracker.computeLeft();\n          var originTop = offsetTracker.computeTop();\n          var positionLeft = offsetLeft - originLeft;\n          var positionTop = offsetTop - originTop;\n          var origRect = offsetTracker.origRect;\n          var width = origRect.right - origRect.left;\n          var height = origRect.bottom - origRect.top;\n\n          if ( // must be within the element's bounds\n          positionLeft >= 0 && positionLeft < width && positionTop >= 0 && positionTop < height) {\n            var hit = component.queryHit(positionLeft, positionTop, width, height);\n\n            if (hit && // make sure the hit is within activeRange, meaning it's not a dead cell\n            rangeContainsRange(hit.dateProfile.activeRange, hit.dateSpan.range) && (!bestHit || hit.layer > bestHit.layer)) {\n              hit.componentId = id;\n              hit.context = component.context; // TODO: better way to re-orient rectangle\n\n              hit.rect.left += originLeft;\n              hit.rect.right += originLeft;\n              hit.rect.top += originTop;\n              hit.rect.bottom += originTop;\n              bestHit = hit;\n            }\n          }\n        }\n      }\n\n      return bestHit;\n    }\n  }]);\n\n  return HitDragging;\n}();\n\nfunction isHitsEqual(hit0, hit1) {\n  if (!hit0 && !hit1) {\n    return true;\n  }\n\n  if (Boolean(hit0) !== Boolean(hit1)) {\n    return false;\n  }\n\n  return isDateSpansEqual(hit0.dateSpan, hit1.dateSpan);\n}\n\nfunction buildDatePointApiWithContext(dateSpan, context) {\n  var props = {};\n\n  var _iterator8 = _createForOfIteratorHelper(context.pluginHooks.datePointTransforms),\n      _step8;\n\n  try {\n    for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n      var transform = _step8.value;\n      Object.assign(props, transform(dateSpan, context));\n    }\n  } catch (err) {\n    _iterator8.e(err);\n  } finally {\n    _iterator8.f();\n  }\n\n  Object.assign(props, buildDatePointApi(dateSpan, context.dateEnv));\n  return props;\n}\n\nfunction buildDatePointApi(span, dateEnv) {\n  return {\n    date: dateEnv.toDate(span.range.start),\n    dateStr: dateEnv.formatIso(span.range.start, {\n      omitTime: span.allDay\n    }),\n    allDay: span.allDay\n  };\n}\n/*\nMonitors when the user clicks on a specific date/time of a component.\nA pointerdown+pointerup on the same \"hit\" constitutes a click.\n*/\n\n\nvar DateClicking = /*#__PURE__*/function (_Interaction) {\n  _inherits(DateClicking, _Interaction);\n\n  var _super5 = _createSuper(DateClicking);\n\n  function DateClicking(settings) {\n    var _this8;\n\n    _classCallCheck(this, DateClicking);\n\n    _this8 = _super5.call(this, settings);\n\n    _this8.handlePointerDown = function (pev) {\n      var _assertThisInitialize = _assertThisInitialized(_this8),\n          dragging = _assertThisInitialize.dragging;\n\n      var downEl = pev.origEvent.target; // do this in pointerdown (not dragend) because DOM might be mutated by the time dragend is fired\n\n      dragging.setIgnoreMove(!_this8.component.isValidDateDownEl(downEl));\n    }; // won't even fire if moving was ignored\n\n\n    _this8.handleDragEnd = function (ev) {\n      var _assertThisInitialize2 = _assertThisInitialized(_this8),\n          component = _assertThisInitialize2.component;\n\n      var pointer = _this8.dragging.pointer;\n\n      if (!pointer.wasTouchScroll) {\n        var _this8$hitDragging = _this8.hitDragging,\n            initialHit = _this8$hitDragging.initialHit,\n            finalHit = _this8$hitDragging.finalHit;\n\n        if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) {\n          var context = component.context;\n          var arg = Object.assign(Object.assign({}, buildDatePointApiWithContext(initialHit.dateSpan, context)), {\n            dayEl: initialHit.dayEl,\n            jsEvent: ev.origEvent,\n            view: context.viewApi || context.calendarApi.view\n          });\n          context.emitter.trigger('dateClick', arg);\n        }\n      }\n    }; // we DO want to watch pointer moves because otherwise finalHit won't get populated\n\n\n    _this8.dragging = new FeaturefulElementDragging(settings.el);\n    _this8.dragging.autoScroller.isEnabled = false;\n    var hitDragging = _this8.hitDragging = new HitDragging(_this8.dragging, interactionSettingsToStore(settings));\n    hitDragging.emitter.on('pointerdown', _this8.handlePointerDown);\n    hitDragging.emitter.on('dragend', _this8.handleDragEnd);\n    return _this8;\n  }\n\n  _createClass(DateClicking, [{\n    key: \"destroy\",\n    value: function destroy() {\n      this.dragging.destroy();\n    }\n  }]);\n\n  return DateClicking;\n}(Interaction);\n/*\nTracks when the user selects a portion of time of a component,\nconstituted by a drag over date cells, with a possible delay at the beginning of the drag.\n*/\n\n\nvar DateSelecting = /*#__PURE__*/function (_Interaction2) {\n  _inherits(DateSelecting, _Interaction2);\n\n  var _super6 = _createSuper(DateSelecting);\n\n  function DateSelecting(settings) {\n    var _this9;\n\n    _classCallCheck(this, DateSelecting);\n\n    _this9 = _super6.call(this, settings);\n    _this9.dragSelection = null;\n\n    _this9.handlePointerDown = function (ev) {\n      var _assertThisInitialize3 = _assertThisInitialized(_this9),\n          component = _assertThisInitialize3.component,\n          dragging = _assertThisInitialize3.dragging;\n\n      var options = component.context.options;\n      var canSelect = options.selectable && component.isValidDateDownEl(ev.origEvent.target); // don't bother to watch expensive moves if component won't do selection\n\n      dragging.setIgnoreMove(!canSelect); // if touch, require user to hold down\n\n      dragging.delay = ev.isTouch ? getComponentTouchDelay$1(component) : null;\n    };\n\n    _this9.handleDragStart = function (ev) {\n      _this9.component.context.calendarApi.unselect(ev); // unselect previous selections\n\n    };\n\n    _this9.handleHitUpdate = function (hit, isFinal) {\n      var context = _this9.component.context;\n      var dragSelection = null;\n      var isInvalid = false;\n\n      if (hit) {\n        var initialHit = _this9.hitDragging.initialHit;\n        var disallowed = hit.componentId === initialHit.componentId && _this9.isHitComboAllowed && !_this9.isHitComboAllowed(initialHit, hit);\n\n        if (!disallowed) {\n          dragSelection = joinHitsIntoSelection(initialHit, hit, context.pluginHooks.dateSelectionTransformers);\n        }\n\n        if (!dragSelection || !isDateSelectionValid(dragSelection, hit.dateProfile, context)) {\n          isInvalid = true;\n          dragSelection = null;\n        }\n      }\n\n      if (dragSelection) {\n        context.dispatch({\n          type: 'SELECT_DATES',\n          selection: dragSelection\n        });\n      } else if (!isFinal) {\n        // only unselect if moved away while dragging\n        context.dispatch({\n          type: 'UNSELECT_DATES'\n        });\n      }\n\n      if (!isInvalid) {\n        enableCursor();\n      } else {\n        disableCursor();\n      }\n\n      if (!isFinal) {\n        _this9.dragSelection = dragSelection; // only clear if moved away from all hits while dragging\n      }\n    };\n\n    _this9.handlePointerUp = function (pev) {\n      if (_this9.dragSelection) {\n        // selection is already rendered, so just need to report selection\n        triggerDateSelect(_this9.dragSelection, pev, _this9.component.context);\n        _this9.dragSelection = null;\n      }\n    };\n\n    var component = settings.component;\n    var options = component.context.options;\n    var dragging = _this9.dragging = new FeaturefulElementDragging(settings.el);\n    dragging.touchScrollAllowed = false;\n    dragging.minDistance = options.selectMinDistance || 0;\n    dragging.autoScroller.isEnabled = options.dragScroll;\n    var hitDragging = _this9.hitDragging = new HitDragging(_this9.dragging, interactionSettingsToStore(settings));\n    hitDragging.emitter.on('pointerdown', _this9.handlePointerDown);\n    hitDragging.emitter.on('dragstart', _this9.handleDragStart);\n    hitDragging.emitter.on('hitupdate', _this9.handleHitUpdate);\n    hitDragging.emitter.on('pointerup', _this9.handlePointerUp);\n    return _this9;\n  }\n\n  _createClass(DateSelecting, [{\n    key: \"destroy\",\n    value: function destroy() {\n      this.dragging.destroy();\n    }\n  }]);\n\n  return DateSelecting;\n}(Interaction);\n\nfunction getComponentTouchDelay$1(component) {\n  var options = component.context.options;\n  var delay = options.selectLongPressDelay;\n\n  if (delay == null) {\n    delay = options.longPressDelay;\n  }\n\n  return delay;\n}\n\nfunction joinHitsIntoSelection(hit0, hit1, dateSelectionTransformers) {\n  var dateSpan0 = hit0.dateSpan;\n  var dateSpan1 = hit1.dateSpan;\n  var ms = [dateSpan0.range.start, dateSpan0.range.end, dateSpan1.range.start, dateSpan1.range.end];\n  ms.sort(compareNumbers);\n  var props = {};\n\n  var _iterator9 = _createForOfIteratorHelper(dateSelectionTransformers),\n      _step9;\n\n  try {\n    for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n      var transformer = _step9.value;\n      var res = transformer(hit0, hit1);\n\n      if (res === false) {\n        return null;\n      }\n\n      if (res) {\n        Object.assign(props, res);\n      }\n    }\n  } catch (err) {\n    _iterator9.e(err);\n  } finally {\n    _iterator9.f();\n  }\n\n  props.range = {\n    start: ms[0],\n    end: ms[3]\n  };\n  props.allDay = dateSpan0.allDay;\n  return props;\n}\n\nvar EventDragging = /*#__PURE__*/function (_Interaction3) {\n  _inherits(EventDragging, _Interaction3);\n\n  var _super7 = _createSuper(EventDragging);\n\n  function EventDragging(settings) {\n    var _this10;\n\n    _classCallCheck(this, EventDragging);\n\n    _this10 = _super7.call(this, settings); // internal state\n\n    _this10.subjectEl = null;\n    _this10.subjectSeg = null; // the seg being selected/dragged\n\n    _this10.isDragging = false;\n    _this10.eventRange = null;\n    _this10.relevantEvents = null; // the events being dragged\n\n    _this10.receivingContext = null;\n    _this10.validMutation = null;\n    _this10.mutatedRelevantEvents = null;\n\n    _this10.handlePointerDown = function (ev) {\n      var origTarget = ev.origEvent.target;\n\n      var _assertThisInitialize4 = _assertThisInitialized(_this10),\n          component = _assertThisInitialize4.component,\n          dragging = _assertThisInitialize4.dragging;\n\n      var mirror = dragging.mirror;\n      var options = component.context.options;\n      var initialContext = component.context;\n      _this10.subjectEl = ev.subjectEl;\n      var subjectSeg = _this10.subjectSeg = getElSeg(ev.subjectEl);\n      var eventRange = _this10.eventRange = subjectSeg.eventRange;\n      var eventInstanceId = eventRange.instance.instanceId;\n      _this10.relevantEvents = getRelevantEvents(initialContext.getCurrentData().eventStore, eventInstanceId);\n      dragging.minDistance = ev.isTouch ? 0 : options.eventDragMinDistance;\n      dragging.delay = // only do a touch delay if touch and this event hasn't been selected yet\n      ev.isTouch && eventInstanceId !== component.props.eventSelection ? getComponentTouchDelay(component) : null;\n\n      if (options.fixedMirrorParent) {\n        mirror.parentNode = options.fixedMirrorParent;\n      } else {\n        mirror.parentNode = elementClosest(origTarget, '.fc');\n      }\n\n      mirror.revertDuration = options.dragRevertDuration;\n      var isValid = component.isValidSegDownEl(origTarget) && !elementClosest(origTarget, '.fc-event-resizer'); // NOT on a resizer\n\n      dragging.setIgnoreMove(!isValid); // disable dragging for elements that are resizable (ie, selectable)\n      // but are not draggable\n\n      _this10.isDragging = isValid && ev.subjectEl.classList.contains('fc-event-draggable');\n    };\n\n    _this10.handleDragStart = function (ev) {\n      var initialContext = _this10.component.context;\n      var eventRange = _this10.eventRange;\n      var eventInstanceId = eventRange.instance.instanceId;\n\n      if (ev.isTouch) {\n        // need to select a different event?\n        if (eventInstanceId !== _this10.component.props.eventSelection) {\n          initialContext.dispatch({\n            type: 'SELECT_EVENT',\n            eventInstanceId: eventInstanceId\n          });\n        }\n      } else {\n        // if now using mouse, but was previous touch interaction, clear selected event\n        initialContext.dispatch({\n          type: 'UNSELECT_EVENT'\n        });\n      }\n\n      if (_this10.isDragging) {\n        initialContext.calendarApi.unselect(ev); // unselect *date* selection\n\n        initialContext.emitter.trigger('eventDragStart', {\n          el: _this10.subjectEl,\n          event: new EventImpl(initialContext, eventRange.def, eventRange.instance),\n          jsEvent: ev.origEvent,\n          view: initialContext.viewApi\n        });\n      }\n    };\n\n    _this10.handleHitUpdate = function (hit, isFinal) {\n      if (!_this10.isDragging) {\n        return;\n      }\n\n      var relevantEvents = _this10.relevantEvents;\n      var initialHit = _this10.hitDragging.initialHit;\n      var initialContext = _this10.component.context; // states based on new hit\n\n      var receivingContext = null;\n      var mutation = null;\n      var mutatedRelevantEvents = null;\n      var isInvalid = false;\n      var interaction = {\n        affectedEvents: relevantEvents,\n        mutatedEvents: createEmptyEventStore(),\n        isEvent: true\n      };\n\n      if (hit) {\n        receivingContext = hit.context;\n        var receivingOptions = receivingContext.options;\n\n        if (initialContext === receivingContext || receivingOptions.editable && receivingOptions.droppable) {\n          mutation = computeEventMutation(initialHit, hit, receivingContext.getCurrentData().pluginHooks.eventDragMutationMassagers);\n\n          if (mutation) {\n            mutatedRelevantEvents = applyMutationToEventStore(relevantEvents, receivingContext.getCurrentData().eventUiBases, mutation, receivingContext);\n            interaction.mutatedEvents = mutatedRelevantEvents;\n\n            if (!isInteractionValid(interaction, hit.dateProfile, receivingContext)) {\n              isInvalid = true;\n              mutation = null;\n              mutatedRelevantEvents = null;\n              interaction.mutatedEvents = createEmptyEventStore();\n            }\n          }\n        } else {\n          receivingContext = null;\n        }\n      }\n\n      _this10.displayDrag(receivingContext, interaction);\n\n      if (!isInvalid) {\n        enableCursor();\n      } else {\n        disableCursor();\n      }\n\n      if (!isFinal) {\n        if (initialContext === receivingContext && // TODO: write test for this\n        isHitsEqual(initialHit, hit)) {\n          mutation = null;\n        }\n\n        _this10.dragging.setMirrorNeedsRevert(!mutation); // render the mirror if no already-rendered mirror\n        // TODO: wish we could somehow wait for dispatch to guarantee render\n\n\n        _this10.dragging.setMirrorIsVisible(!hit || !_this10.subjectEl.getRootNode().querySelector('.fc-event-mirror')); // assign states based on new hit\n\n\n        _this10.receivingContext = receivingContext;\n        _this10.validMutation = mutation;\n        _this10.mutatedRelevantEvents = mutatedRelevantEvents;\n      }\n    };\n\n    _this10.handlePointerUp = function () {\n      if (!_this10.isDragging) {\n        _this10.cleanup(); // because handleDragEnd won't fire\n\n      }\n    };\n\n    _this10.handleDragEnd = function (ev) {\n      if (_this10.isDragging) {\n        var initialContext = _this10.component.context;\n        var initialView = initialContext.viewApi;\n\n        var _assertThisInitialize5 = _assertThisInitialized(_this10),\n            receivingContext = _assertThisInitialize5.receivingContext,\n            validMutation = _assertThisInitialize5.validMutation;\n\n        var eventDef = _this10.eventRange.def;\n        var eventInstance = _this10.eventRange.instance;\n        var eventApi = new EventImpl(initialContext, eventDef, eventInstance);\n        var relevantEvents = _this10.relevantEvents;\n        var mutatedRelevantEvents = _this10.mutatedRelevantEvents;\n        var finalHit = _this10.hitDragging.finalHit;\n\n        _this10.clearDrag(); // must happen after revert animation\n\n\n        initialContext.emitter.trigger('eventDragStop', {\n          el: _this10.subjectEl,\n          event: eventApi,\n          jsEvent: ev.origEvent,\n          view: initialView\n        });\n\n        if (validMutation) {\n          // dropped within same calendar\n          if (receivingContext === initialContext) {\n            var updatedEventApi = new EventImpl(initialContext, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null);\n            initialContext.dispatch({\n              type: 'MERGE_EVENTS',\n              eventStore: mutatedRelevantEvents\n            });\n            var eventChangeArg = {\n              oldEvent: eventApi,\n              event: updatedEventApi,\n              relatedEvents: buildEventApis(mutatedRelevantEvents, initialContext, eventInstance),\n              revert: function revert() {\n                initialContext.dispatch({\n                  type: 'MERGE_EVENTS',\n                  eventStore: relevantEvents // the pre-change data\n\n                });\n              }\n            };\n            var transformed = {};\n\n            var _iterator10 = _createForOfIteratorHelper(initialContext.getCurrentData().pluginHooks.eventDropTransformers),\n                _step10;\n\n            try {\n              for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n                var transformer = _step10.value;\n                Object.assign(transformed, transformer(validMutation, initialContext));\n              }\n            } catch (err) {\n              _iterator10.e(err);\n            } finally {\n              _iterator10.f();\n            }\n\n            initialContext.emitter.trigger('eventDrop', Object.assign(Object.assign(Object.assign({}, eventChangeArg), transformed), {\n              el: ev.subjectEl,\n              delta: validMutation.datesDelta,\n              jsEvent: ev.origEvent,\n              view: initialView\n            }));\n            initialContext.emitter.trigger('eventChange', eventChangeArg); // dropped in different calendar\n          } else if (receivingContext) {\n            var eventRemoveArg = {\n              event: eventApi,\n              relatedEvents: buildEventApis(relevantEvents, initialContext, eventInstance),\n              revert: function revert() {\n                initialContext.dispatch({\n                  type: 'MERGE_EVENTS',\n                  eventStore: relevantEvents\n                });\n              }\n            };\n            initialContext.emitter.trigger('eventLeave', Object.assign(Object.assign({}, eventRemoveArg), {\n              draggedEl: ev.subjectEl,\n              view: initialView\n            }));\n            initialContext.dispatch({\n              type: 'REMOVE_EVENTS',\n              eventStore: relevantEvents\n            });\n            initialContext.emitter.trigger('eventRemove', eventRemoveArg);\n            var addedEventDef = mutatedRelevantEvents.defs[eventDef.defId];\n            var addedEventInstance = mutatedRelevantEvents.instances[eventInstance.instanceId];\n            var addedEventApi = new EventImpl(receivingContext, addedEventDef, addedEventInstance);\n            receivingContext.dispatch({\n              type: 'MERGE_EVENTS',\n              eventStore: mutatedRelevantEvents\n            });\n            var eventAddArg = {\n              event: addedEventApi,\n              relatedEvents: buildEventApis(mutatedRelevantEvents, receivingContext, addedEventInstance),\n              revert: function revert() {\n                receivingContext.dispatch({\n                  type: 'REMOVE_EVENTS',\n                  eventStore: mutatedRelevantEvents\n                });\n              }\n            };\n            receivingContext.emitter.trigger('eventAdd', eventAddArg);\n\n            if (ev.isTouch) {\n              receivingContext.dispatch({\n                type: 'SELECT_EVENT',\n                eventInstanceId: eventInstance.instanceId\n              });\n            }\n\n            receivingContext.emitter.trigger('drop', Object.assign(Object.assign({}, buildDatePointApiWithContext(finalHit.dateSpan, receivingContext)), {\n              draggedEl: ev.subjectEl,\n              jsEvent: ev.origEvent,\n              view: finalHit.context.viewApi\n            }));\n            receivingContext.emitter.trigger('eventReceive', Object.assign(Object.assign({}, eventAddArg), {\n              draggedEl: ev.subjectEl,\n              view: finalHit.context.viewApi\n            }));\n          }\n        } else {\n          initialContext.emitter.trigger('_noEventDrop');\n        }\n      }\n\n      _this10.cleanup();\n    };\n\n    var _assertThisInitialize6 = _assertThisInitialized(_this10),\n        component = _assertThisInitialize6.component;\n\n    var options = component.context.options;\n    var dragging = _this10.dragging = new FeaturefulElementDragging(settings.el);\n    dragging.pointer.selector = EventDragging.SELECTOR;\n    dragging.touchScrollAllowed = false;\n    dragging.autoScroller.isEnabled = options.dragScroll;\n    var hitDragging = _this10.hitDragging = new HitDragging(_this10.dragging, interactionSettingsStore);\n    hitDragging.useSubjectCenter = settings.useEventCenter;\n    hitDragging.emitter.on('pointerdown', _this10.handlePointerDown);\n    hitDragging.emitter.on('dragstart', _this10.handleDragStart);\n    hitDragging.emitter.on('hitupdate', _this10.handleHitUpdate);\n    hitDragging.emitter.on('pointerup', _this10.handlePointerUp);\n    hitDragging.emitter.on('dragend', _this10.handleDragEnd);\n    return _this10;\n  }\n\n  _createClass(EventDragging, [{\n    key: \"destroy\",\n    value: function destroy() {\n      this.dragging.destroy();\n    } // render a drag state on the next receivingCalendar\n\n  }, {\n    key: \"displayDrag\",\n    value: function displayDrag(nextContext, state) {\n      var initialContext = this.component.context;\n      var prevContext = this.receivingContext; // does the previous calendar need to be cleared?\n\n      if (prevContext && prevContext !== nextContext) {\n        // does the initial calendar need to be cleared?\n        // if so, don't clear all the way. we still need to to hide the affectedEvents\n        if (prevContext === initialContext) {\n          prevContext.dispatch({\n            type: 'SET_EVENT_DRAG',\n            state: {\n              affectedEvents: state.affectedEvents,\n              mutatedEvents: createEmptyEventStore(),\n              isEvent: true\n            }\n          }); // completely clear the old calendar if it wasn't the initial\n        } else {\n          prevContext.dispatch({\n            type: 'UNSET_EVENT_DRAG'\n          });\n        }\n      }\n\n      if (nextContext) {\n        nextContext.dispatch({\n          type: 'SET_EVENT_DRAG',\n          state: state\n        });\n      }\n    }\n  }, {\n    key: \"clearDrag\",\n    value: function clearDrag() {\n      var initialCalendar = this.component.context;\n      var receivingContext = this.receivingContext;\n\n      if (receivingContext) {\n        receivingContext.dispatch({\n          type: 'UNSET_EVENT_DRAG'\n        });\n      } // the initial calendar might have an dummy drag state from displayDrag\n\n\n      if (initialCalendar !== receivingContext) {\n        initialCalendar.dispatch({\n          type: 'UNSET_EVENT_DRAG'\n        });\n      }\n    }\n  }, {\n    key: \"cleanup\",\n    value: function cleanup() {\n      this.subjectSeg = null;\n      this.isDragging = false;\n      this.eventRange = null;\n      this.relevantEvents = null;\n      this.receivingContext = null;\n      this.validMutation = null;\n      this.mutatedRelevantEvents = null;\n    }\n  }]);\n\n  return EventDragging;\n}(Interaction); // TODO: test this in IE11\n// QUESTION: why do we need it on the resizable???\n\n\nEventDragging.SELECTOR = '.fc-event-draggable, .fc-event-resizable';\n\nfunction computeEventMutation(hit0, hit1, massagers) {\n  var dateSpan0 = hit0.dateSpan;\n  var dateSpan1 = hit1.dateSpan;\n  var date0 = dateSpan0.range.start;\n  var date1 = dateSpan1.range.start;\n  var standardProps = {};\n\n  if (dateSpan0.allDay !== dateSpan1.allDay) {\n    standardProps.allDay = dateSpan1.allDay;\n    standardProps.hasEnd = hit1.context.options.allDayMaintainDuration;\n\n    if (dateSpan1.allDay) {\n      // means date1 is already start-of-day,\n      // but date0 needs to be converted\n      date0 = startOfDay(date0);\n    }\n  }\n\n  var delta = diffDates(date0, date1, hit0.context.dateEnv, hit0.componentId === hit1.componentId ? hit0.largeUnit : null);\n\n  if (delta.milliseconds) {\n    // has hours/minutes/seconds\n    standardProps.allDay = false;\n  }\n\n  var mutation = {\n    datesDelta: delta,\n    standardProps: standardProps\n  };\n\n  var _iterator11 = _createForOfIteratorHelper(massagers),\n      _step11;\n\n  try {\n    for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n      var massager = _step11.value;\n      massager(mutation, hit0, hit1);\n    }\n  } catch (err) {\n    _iterator11.e(err);\n  } finally {\n    _iterator11.f();\n  }\n\n  return mutation;\n}\n\nfunction getComponentTouchDelay(component) {\n  var options = component.context.options;\n  var delay = options.eventLongPressDelay;\n\n  if (delay == null) {\n    delay = options.longPressDelay;\n  }\n\n  return delay;\n}\n\nvar EventResizing = /*#__PURE__*/function (_Interaction4) {\n  _inherits(EventResizing, _Interaction4);\n\n  var _super8 = _createSuper(EventResizing);\n\n  function EventResizing(settings) {\n    var _this11;\n\n    _classCallCheck(this, EventResizing);\n\n    _this11 = _super8.call(this, settings); // internal state\n\n    _this11.draggingSegEl = null;\n    _this11.draggingSeg = null; // TODO: rename to resizingSeg? subjectSeg?\n\n    _this11.eventRange = null;\n    _this11.relevantEvents = null;\n    _this11.validMutation = null;\n    _this11.mutatedRelevantEvents = null;\n\n    _this11.handlePointerDown = function (ev) {\n      var _assertThisInitialize7 = _assertThisInitialized(_this11),\n          component = _assertThisInitialize7.component;\n\n      var segEl = _this11.querySegEl(ev);\n\n      var seg = getElSeg(segEl);\n      var eventRange = _this11.eventRange = seg.eventRange;\n      _this11.dragging.minDistance = component.context.options.eventDragMinDistance; // if touch, need to be working with a selected event\n\n      _this11.dragging.setIgnoreMove(!_this11.component.isValidSegDownEl(ev.origEvent.target) || ev.isTouch && _this11.component.props.eventSelection !== eventRange.instance.instanceId);\n    };\n\n    _this11.handleDragStart = function (ev) {\n      var context = _this11.component.context;\n      var eventRange = _this11.eventRange;\n      _this11.relevantEvents = getRelevantEvents(context.getCurrentData().eventStore, _this11.eventRange.instance.instanceId);\n\n      var segEl = _this11.querySegEl(ev);\n\n      _this11.draggingSegEl = segEl;\n      _this11.draggingSeg = getElSeg(segEl);\n      context.calendarApi.unselect();\n      context.emitter.trigger('eventResizeStart', {\n        el: segEl,\n        event: new EventImpl(context, eventRange.def, eventRange.instance),\n        jsEvent: ev.origEvent,\n        view: context.viewApi\n      });\n    };\n\n    _this11.handleHitUpdate = function (hit, isFinal, ev) {\n      var context = _this11.component.context;\n      var relevantEvents = _this11.relevantEvents;\n      var initialHit = _this11.hitDragging.initialHit;\n      var eventInstance = _this11.eventRange.instance;\n      var mutation = null;\n      var mutatedRelevantEvents = null;\n      var isInvalid = false;\n      var interaction = {\n        affectedEvents: relevantEvents,\n        mutatedEvents: createEmptyEventStore(),\n        isEvent: true\n      };\n\n      if (hit) {\n        var disallowed = hit.componentId === initialHit.componentId && _this11.isHitComboAllowed && !_this11.isHitComboAllowed(initialHit, hit);\n\n        if (!disallowed) {\n          mutation = computeMutation(initialHit, hit, ev.subjectEl.classList.contains('fc-event-resizer-start'), eventInstance.range);\n        }\n      }\n\n      if (mutation) {\n        mutatedRelevantEvents = applyMutationToEventStore(relevantEvents, context.getCurrentData().eventUiBases, mutation, context);\n        interaction.mutatedEvents = mutatedRelevantEvents;\n\n        if (!isInteractionValid(interaction, hit.dateProfile, context)) {\n          isInvalid = true;\n          mutation = null;\n          mutatedRelevantEvents = null;\n          interaction.mutatedEvents = null;\n        }\n      }\n\n      if (mutatedRelevantEvents) {\n        context.dispatch({\n          type: 'SET_EVENT_RESIZE',\n          state: interaction\n        });\n      } else {\n        context.dispatch({\n          type: 'UNSET_EVENT_RESIZE'\n        });\n      }\n\n      if (!isInvalid) {\n        enableCursor();\n      } else {\n        disableCursor();\n      }\n\n      if (!isFinal) {\n        if (mutation && isHitsEqual(initialHit, hit)) {\n          mutation = null;\n        }\n\n        _this11.validMutation = mutation;\n        _this11.mutatedRelevantEvents = mutatedRelevantEvents;\n      }\n    };\n\n    _this11.handleDragEnd = function (ev) {\n      var context = _this11.component.context;\n      var eventDef = _this11.eventRange.def;\n      var eventInstance = _this11.eventRange.instance;\n      var eventApi = new EventImpl(context, eventDef, eventInstance);\n      var relevantEvents = _this11.relevantEvents;\n      var mutatedRelevantEvents = _this11.mutatedRelevantEvents;\n      context.emitter.trigger('eventResizeStop', {\n        el: _this11.draggingSegEl,\n        event: eventApi,\n        jsEvent: ev.origEvent,\n        view: context.viewApi\n      });\n\n      if (_this11.validMutation) {\n        var updatedEventApi = new EventImpl(context, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null);\n        context.dispatch({\n          type: 'MERGE_EVENTS',\n          eventStore: mutatedRelevantEvents\n        });\n        var eventChangeArg = {\n          oldEvent: eventApi,\n          event: updatedEventApi,\n          relatedEvents: buildEventApis(mutatedRelevantEvents, context, eventInstance),\n          revert: function revert() {\n            context.dispatch({\n              type: 'MERGE_EVENTS',\n              eventStore: relevantEvents // the pre-change events\n\n            });\n          }\n        };\n        context.emitter.trigger('eventResize', Object.assign(Object.assign({}, eventChangeArg), {\n          el: _this11.draggingSegEl,\n          startDelta: _this11.validMutation.startDelta || createDuration(0),\n          endDelta: _this11.validMutation.endDelta || createDuration(0),\n          jsEvent: ev.origEvent,\n          view: context.viewApi\n        }));\n        context.emitter.trigger('eventChange', eventChangeArg);\n      } else {\n        context.emitter.trigger('_noEventResize');\n      } // reset all internal state\n\n\n      _this11.draggingSeg = null;\n      _this11.relevantEvents = null;\n      _this11.validMutation = null; // okay to keep eventInstance around. useful to set it in handlePointerDown\n    };\n\n    var component = settings.component;\n    var dragging = _this11.dragging = new FeaturefulElementDragging(settings.el);\n    dragging.pointer.selector = '.fc-event-resizer';\n    dragging.touchScrollAllowed = false;\n    dragging.autoScroller.isEnabled = component.context.options.dragScroll;\n    var hitDragging = _this11.hitDragging = new HitDragging(_this11.dragging, interactionSettingsToStore(settings));\n    hitDragging.emitter.on('pointerdown', _this11.handlePointerDown);\n    hitDragging.emitter.on('dragstart', _this11.handleDragStart);\n    hitDragging.emitter.on('hitupdate', _this11.handleHitUpdate);\n    hitDragging.emitter.on('dragend', _this11.handleDragEnd);\n    return _this11;\n  }\n\n  _createClass(EventResizing, [{\n    key: \"destroy\",\n    value: function destroy() {\n      this.dragging.destroy();\n    }\n  }, {\n    key: \"querySegEl\",\n    value: function querySegEl(ev) {\n      return elementClosest(ev.subjectEl, '.fc-event');\n    }\n  }]);\n\n  return EventResizing;\n}(Interaction);\n\nfunction computeMutation(hit0, hit1, isFromStart, instanceRange) {\n  var dateEnv = hit0.context.dateEnv;\n  var date0 = hit0.dateSpan.range.start;\n  var date1 = hit1.dateSpan.range.start;\n  var delta = diffDates(date0, date1, dateEnv, hit0.largeUnit);\n\n  if (isFromStart) {\n    if (dateEnv.add(instanceRange.start, delta) < instanceRange.end) {\n      return {\n        startDelta: delta\n      };\n    }\n  } else if (dateEnv.add(instanceRange.end, delta) > instanceRange.start) {\n    return {\n      endDelta: delta\n    };\n  }\n\n  return null;\n}\n\nvar UnselectAuto = /*#__PURE__*/function () {\n  function UnselectAuto(context) {\n    var _this12 = this;\n\n    _classCallCheck(this, UnselectAuto);\n\n    this.context = context;\n    this.isRecentPointerDateSelect = false; // wish we could use a selector to detect date selection, but uses hit system\n\n    this.matchesCancel = false;\n    this.matchesEvent = false;\n\n    this.onSelect = function (selectInfo) {\n      if (selectInfo.jsEvent) {\n        _this12.isRecentPointerDateSelect = true;\n      }\n    };\n\n    this.onDocumentPointerDown = function (pev) {\n      var unselectCancel = _this12.context.options.unselectCancel;\n      var downEl = getEventTargetViaRoot(pev.origEvent);\n      _this12.matchesCancel = !!elementClosest(downEl, unselectCancel);\n      _this12.matchesEvent = !!elementClosest(downEl, EventDragging.SELECTOR); // interaction started on an event?\n    };\n\n    this.onDocumentPointerUp = function (pev) {\n      var context = _this12.context;\n      var documentPointer = _this12.documentPointer;\n      var calendarState = context.getCurrentData(); // touch-scrolling should never unfocus any type of selection\n\n      if (!documentPointer.wasTouchScroll) {\n        if (calendarState.dateSelection && // an existing date selection?\n        !_this12.isRecentPointerDateSelect // a new pointer-initiated date selection since last onDocumentPointerUp?\n        ) {\n          var unselectAuto = context.options.unselectAuto;\n\n          if (unselectAuto && (!unselectAuto || !_this12.matchesCancel)) {\n            context.calendarApi.unselect(pev);\n          }\n        }\n\n        if (calendarState.eventSelection && // an existing event selected?\n        !_this12.matchesEvent // interaction DIDN'T start on an event\n        ) {\n          context.dispatch({\n            type: 'UNSELECT_EVENT'\n          });\n        }\n      }\n\n      _this12.isRecentPointerDateSelect = false;\n    };\n\n    var documentPointer = this.documentPointer = new PointerDragging(document);\n    documentPointer.shouldIgnoreMove = true;\n    documentPointer.shouldWatchScroll = false;\n    documentPointer.emitter.on('pointerdown', this.onDocumentPointerDown);\n    documentPointer.emitter.on('pointerup', this.onDocumentPointerUp);\n    /*\n    TODO: better way to know about whether there was a selection with the pointer\n    */\n\n    context.emitter.on('select', this.onSelect);\n  }\n\n  _createClass(UnselectAuto, [{\n    key: \"destroy\",\n    value: function destroy() {\n      this.context.emitter.off('select', this.onSelect);\n      this.documentPointer.destroy();\n    }\n  }]);\n\n  return UnselectAuto;\n}();\n\nvar OPTION_REFINERS = {\n  fixedMirrorParent: identity\n};\nvar LISTENER_REFINERS = {\n  dateClick: identity,\n  eventDragStart: identity,\n  eventDragStop: identity,\n  eventDrop: identity,\n  eventResizeStart: identity,\n  eventResizeStop: identity,\n  eventResize: identity,\n  drop: identity,\n  eventReceive: identity,\n  eventLeave: identity\n};\n/*\nGiven an already instantiated draggable object for one-or-more elements,\nInterprets any dragging as an attempt to drag an events that lives outside\nof a calendar onto a calendar.\n*/\n\nvar ExternalElementDragging = /*#__PURE__*/function () {\n  function ExternalElementDragging(dragging, suppliedDragMeta) {\n    var _this13 = this;\n\n    _classCallCheck(this, ExternalElementDragging);\n\n    this.receivingContext = null;\n    this.droppableEvent = null; // will exist for all drags, even if create:false\n\n    this.suppliedDragMeta = null;\n    this.dragMeta = null;\n\n    this.handleDragStart = function (ev) {\n      _this13.dragMeta = _this13.buildDragMeta(ev.subjectEl);\n    };\n\n    this.handleHitUpdate = function (hit, isFinal, ev) {\n      var dragging = _this13.hitDragging.dragging;\n      var receivingContext = null;\n      var droppableEvent = null;\n      var isInvalid = false;\n      var interaction = {\n        affectedEvents: createEmptyEventStore(),\n        mutatedEvents: createEmptyEventStore(),\n        isEvent: _this13.dragMeta.create\n      };\n\n      if (hit) {\n        receivingContext = hit.context;\n\n        if (_this13.canDropElOnCalendar(ev.subjectEl, receivingContext)) {\n          droppableEvent = computeEventForDateSpan(hit.dateSpan, _this13.dragMeta, receivingContext);\n          interaction.mutatedEvents = eventTupleToStore(droppableEvent);\n          isInvalid = !isInteractionValid(interaction, hit.dateProfile, receivingContext);\n\n          if (isInvalid) {\n            interaction.mutatedEvents = createEmptyEventStore();\n            droppableEvent = null;\n          }\n        }\n      }\n\n      _this13.displayDrag(receivingContext, interaction); // show mirror if no already-rendered mirror element OR if we are shutting down the mirror (?)\n      // TODO: wish we could somehow wait for dispatch to guarantee render\n\n\n      dragging.setMirrorIsVisible(isFinal || !droppableEvent || !document.querySelector('.fc-event-mirror'));\n\n      if (!isInvalid) {\n        enableCursor();\n      } else {\n        disableCursor();\n      }\n\n      if (!isFinal) {\n        dragging.setMirrorNeedsRevert(!droppableEvent);\n        _this13.receivingContext = receivingContext;\n        _this13.droppableEvent = droppableEvent;\n      }\n    };\n\n    this.handleDragEnd = function (pev) {\n      var receivingContext = _this13.receivingContext,\n          droppableEvent = _this13.droppableEvent;\n\n      _this13.clearDrag();\n\n      if (receivingContext && droppableEvent) {\n        var finalHit = _this13.hitDragging.finalHit;\n        var finalView = finalHit.context.viewApi;\n        var dragMeta = _this13.dragMeta;\n        receivingContext.emitter.trigger('drop', Object.assign(Object.assign({}, buildDatePointApiWithContext(finalHit.dateSpan, receivingContext)), {\n          draggedEl: pev.subjectEl,\n          jsEvent: pev.origEvent,\n          view: finalView\n        }));\n\n        if (dragMeta.create) {\n          var addingEvents = eventTupleToStore(droppableEvent);\n          receivingContext.dispatch({\n            type: 'MERGE_EVENTS',\n            eventStore: addingEvents\n          });\n\n          if (pev.isTouch) {\n            receivingContext.dispatch({\n              type: 'SELECT_EVENT',\n              eventInstanceId: droppableEvent.instance.instanceId\n            });\n          } // signal that an external event landed\n\n\n          receivingContext.emitter.trigger('eventReceive', {\n            event: new EventImpl(receivingContext, droppableEvent.def, droppableEvent.instance),\n            relatedEvents: [],\n            revert: function revert() {\n              receivingContext.dispatch({\n                type: 'REMOVE_EVENTS',\n                eventStore: addingEvents\n              });\n            },\n            draggedEl: pev.subjectEl,\n            view: finalView\n          });\n        }\n      }\n\n      _this13.receivingContext = null;\n      _this13.droppableEvent = null;\n    };\n\n    var hitDragging = this.hitDragging = new HitDragging(dragging, interactionSettingsStore);\n    hitDragging.requireInitial = false; // will start outside of a component\n\n    hitDragging.emitter.on('dragstart', this.handleDragStart);\n    hitDragging.emitter.on('hitupdate', this.handleHitUpdate);\n    hitDragging.emitter.on('dragend', this.handleDragEnd);\n    this.suppliedDragMeta = suppliedDragMeta;\n  }\n\n  _createClass(ExternalElementDragging, [{\n    key: \"buildDragMeta\",\n    value: function buildDragMeta(subjectEl) {\n      if (_typeof(this.suppliedDragMeta) === 'object') {\n        return parseDragMeta(this.suppliedDragMeta);\n      }\n\n      if (typeof this.suppliedDragMeta === 'function') {\n        return parseDragMeta(this.suppliedDragMeta(subjectEl));\n      }\n\n      return getDragMetaFromEl(subjectEl);\n    }\n  }, {\n    key: \"displayDrag\",\n    value: function displayDrag(nextContext, state) {\n      var prevContext = this.receivingContext;\n\n      if (prevContext && prevContext !== nextContext) {\n        prevContext.dispatch({\n          type: 'UNSET_EVENT_DRAG'\n        });\n      }\n\n      if (nextContext) {\n        nextContext.dispatch({\n          type: 'SET_EVENT_DRAG',\n          state: state\n        });\n      }\n    }\n  }, {\n    key: \"clearDrag\",\n    value: function clearDrag() {\n      if (this.receivingContext) {\n        this.receivingContext.dispatch({\n          type: 'UNSET_EVENT_DRAG'\n        });\n      }\n    }\n  }, {\n    key: \"canDropElOnCalendar\",\n    value: function canDropElOnCalendar(el, receivingContext) {\n      var dropAccept = receivingContext.options.dropAccept;\n\n      if (typeof dropAccept === 'function') {\n        return dropAccept.call(receivingContext.calendarApi, el);\n      }\n\n      if (typeof dropAccept === 'string' && dropAccept) {\n        return Boolean(elementMatches(el, dropAccept));\n      }\n\n      return true;\n    }\n  }]);\n\n  return ExternalElementDragging;\n}(); // Utils for computing event store from the DragMeta\n// ----------------------------------------------------------------------------------------------------\n\n\nfunction computeEventForDateSpan(dateSpan, dragMeta, context) {\n  var defProps = Object.assign({}, dragMeta.leftoverProps);\n\n  var _iterator12 = _createForOfIteratorHelper(context.pluginHooks.externalDefTransforms),\n      _step12;\n\n  try {\n    for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n      var transform = _step12.value;\n      Object.assign(defProps, transform(dateSpan, dragMeta));\n    }\n  } catch (err) {\n    _iterator12.e(err);\n  } finally {\n    _iterator12.f();\n  }\n\n  var _refineEventDef = refineEventDef(defProps, context),\n      refined = _refineEventDef.refined,\n      extra = _refineEventDef.extra;\n\n  var def = parseEventDef(refined, extra, dragMeta.sourceId, dateSpan.allDay, context.options.forceEventDuration || Boolean(dragMeta.duration), // hasEnd\n  context);\n  var start = dateSpan.range.start; // only rely on time info if drop zone is all-day,\n  // otherwise, we already know the time\n\n  if (dateSpan.allDay && dragMeta.startTime) {\n    start = context.dateEnv.add(start, dragMeta.startTime);\n  }\n\n  var end = dragMeta.duration ? context.dateEnv.add(start, dragMeta.duration) : getDefaultEventEnd(dateSpan.allDay, start, context);\n  var instance = createEventInstance(def.defId, {\n    start: start,\n    end: end\n  });\n  return {\n    def: def,\n    instance: instance\n  };\n} // Utils for extracting data from element\n// ----------------------------------------------------------------------------------------------------\n\n\nfunction getDragMetaFromEl(el) {\n  var str = getEmbeddedElData(el, 'event');\n  var obj = str ? JSON.parse(str) : {\n    create: false\n  }; // if no embedded data, assume no event creation\n\n  return parseDragMeta(obj);\n}\n\nconfig.dataAttrPrefix = '';\n\nfunction getEmbeddedElData(el, name) {\n  var prefix = config.dataAttrPrefix;\n  var prefixedName = (prefix ? prefix + '-' : '') + name;\n  return el.getAttribute('data-' + prefixedName) || '';\n}\n/*\nMakes an element (that is *external* to any calendar) draggable.\nCan pass in data that determines how an event will be created when dropped onto a calendar.\nLeverages FullCalendar's internal drag-n-drop functionality WITHOUT a third-party drag system.\n*/\n\n\nvar ExternalDraggable = /*#__PURE__*/function () {\n  function ExternalDraggable(el) {\n    var _this14 = this;\n\n    var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, ExternalDraggable);\n\n    this.handlePointerDown = function (ev) {\n      var dragging = _this14.dragging;\n      var _this14$settings = _this14.settings,\n          minDistance = _this14$settings.minDistance,\n          longPressDelay = _this14$settings.longPressDelay;\n      dragging.minDistance = minDistance != null ? minDistance : ev.isTouch ? 0 : BASE_OPTION_DEFAULTS.eventDragMinDistance;\n      dragging.delay = ev.isTouch ? longPressDelay != null ? longPressDelay : BASE_OPTION_DEFAULTS.longPressDelay : 0;\n    };\n\n    this.handleDragStart = function (ev) {\n      if (ev.isTouch && _this14.dragging.delay && ev.subjectEl.classList.contains('fc-event')) {\n        _this14.dragging.mirror.getMirrorEl().classList.add('fc-event-selected');\n      }\n    };\n\n    this.settings = settings;\n    var dragging = this.dragging = new FeaturefulElementDragging(el);\n    dragging.touchScrollAllowed = false;\n\n    if (settings.itemSelector != null) {\n      dragging.pointer.selector = settings.itemSelector;\n    }\n\n    if (settings.appendTo != null) {\n      dragging.mirror.parentNode = settings.appendTo; // TODO: write tests\n    }\n\n    dragging.emitter.on('pointerdown', this.handlePointerDown);\n    dragging.emitter.on('dragstart', this.handleDragStart);\n    new ExternalElementDragging(dragging, settings.eventData); // eslint-disable-line no-new\n  }\n\n  _createClass(ExternalDraggable, [{\n    key: \"destroy\",\n    value: function destroy() {\n      this.dragging.destroy();\n    }\n  }]);\n\n  return ExternalDraggable;\n}();\n/*\nDetects when a *THIRD-PARTY* drag-n-drop system interacts with elements.\nThe third-party system is responsible for drawing the visuals effects of the drag.\nThis class simply monitors for pointer movements and fires events.\nIt also has the ability to hide the moving element (the \"mirror\") during the drag.\n*/\n\n\nvar InferredElementDragging = /*#__PURE__*/function (_ElementDragging2) {\n  _inherits(InferredElementDragging, _ElementDragging2);\n\n  var _super9 = _createSuper(InferredElementDragging);\n\n  function InferredElementDragging(containerEl) {\n    var _this15;\n\n    _classCallCheck(this, InferredElementDragging);\n\n    _this15 = _super9.call(this, containerEl);\n    _this15.shouldIgnoreMove = false;\n    _this15.mirrorSelector = '';\n    _this15.currentMirrorEl = null;\n\n    _this15.handlePointerDown = function (ev) {\n      _this15.emitter.trigger('pointerdown', ev);\n\n      if (!_this15.shouldIgnoreMove) {\n        // fire dragstart right away. does not support delay or min-distance\n        _this15.emitter.trigger('dragstart', ev);\n      }\n    };\n\n    _this15.handlePointerMove = function (ev) {\n      if (!_this15.shouldIgnoreMove) {\n        _this15.emitter.trigger('dragmove', ev);\n      }\n    };\n\n    _this15.handlePointerUp = function (ev) {\n      _this15.emitter.trigger('pointerup', ev);\n\n      if (!_this15.shouldIgnoreMove) {\n        // fire dragend right away. does not support a revert animation\n        _this15.emitter.trigger('dragend', ev);\n      }\n    };\n\n    var pointer = _this15.pointer = new PointerDragging(containerEl);\n    pointer.emitter.on('pointerdown', _this15.handlePointerDown);\n    pointer.emitter.on('pointermove', _this15.handlePointerMove);\n    pointer.emitter.on('pointerup', _this15.handlePointerUp);\n    return _this15;\n  }\n\n  _createClass(InferredElementDragging, [{\n    key: \"destroy\",\n    value: function destroy() {\n      this.pointer.destroy();\n    }\n  }, {\n    key: \"setIgnoreMove\",\n    value: function setIgnoreMove(bool) {\n      this.shouldIgnoreMove = bool;\n    }\n  }, {\n    key: \"setMirrorIsVisible\",\n    value: function setMirrorIsVisible(bool) {\n      if (bool) {\n        // restore a previously hidden element.\n        // use the reference in case the selector class has already been removed.\n        if (this.currentMirrorEl) {\n          this.currentMirrorEl.style.visibility = '';\n          this.currentMirrorEl = null;\n        }\n      } else {\n        var mirrorEl = this.mirrorSelector // TODO: somehow query FullCalendars WITHIN shadow-roots\n        ? document.querySelector(this.mirrorSelector) : null;\n\n        if (mirrorEl) {\n          this.currentMirrorEl = mirrorEl;\n          mirrorEl.style.visibility = 'hidden';\n        }\n      }\n    }\n  }]);\n\n  return InferredElementDragging;\n}(ElementDragging);\n/*\nBridges third-party drag-n-drop systems with FullCalendar.\nMust be instantiated and destroyed by caller.\n*/\n\n\nvar ThirdPartyDraggable = /*#__PURE__*/function () {\n  function ThirdPartyDraggable(containerOrSettings, settings) {\n    _classCallCheck(this, ThirdPartyDraggable);\n\n    var containerEl = document;\n\n    if ( // wish we could just test instanceof EventTarget, but doesn't work in IE11\n    containerOrSettings === document || containerOrSettings instanceof Element) {\n      containerEl = containerOrSettings;\n      settings = settings || {};\n    } else {\n      settings = containerOrSettings || {};\n    }\n\n    var dragging = this.dragging = new InferredElementDragging(containerEl);\n\n    if (typeof settings.itemSelector === 'string') {\n      dragging.pointer.selector = settings.itemSelector;\n    } else if (containerEl === document) {\n      dragging.pointer.selector = '[data-event]';\n    }\n\n    if (typeof settings.mirrorSelector === 'string') {\n      dragging.mirrorSelector = settings.mirrorSelector;\n    }\n\n    new ExternalElementDragging(dragging, settings.eventData); // eslint-disable-line no-new\n  }\n\n  _createClass(ThirdPartyDraggable, [{\n    key: \"destroy\",\n    value: function destroy() {\n      this.dragging.destroy();\n    }\n  }]);\n\n  return ThirdPartyDraggable;\n}();\n\nvar index = createPlugin({\n  name: '@fullcalendar/interaction',\n  componentInteractions: [DateClicking, DateSelecting, EventDragging, EventResizing],\n  calendarInteractions: [UnselectAuto],\n  elementDraggingImpl: FeaturefulElementDragging,\n  optionRefiners: OPTION_REFINERS,\n  listenerRefiners: LISTENER_REFINERS\n});\nexport { ExternalDraggable as Draggable, ThirdPartyDraggable, index as default };","import {Controller} from '@hotwired/stimulus'\nimport {German} from 'flatpickr/dist/l10n/de'\n\nexport default class extends Controller {\n  static targets = ['startTime', 'startDate', 'endDate', 'endTime', 'currentTime']\n  static values = {\n    format: String,\n    enableTime: Boolean,\n    noCalendar: Boolean,\n    disabledDays: Array,\n    minDate: String,\n    onlyEnd: Boolean,\n  }\n\n  async connect() {\n    this.type_ids = $('#booking_type_ids').val()\n    document.getElementById('booking_type_ids').addEventListener('change', this.newTypeIds)\n\n    if (this.type_ids != \"\") {\n      await this.initializeAll()\n    }\n  }\n\n  newTypeIds = () => {\n    this.type_ids = $('#booking_type_ids').val()\n    if (this.type_ids != \"\") {\n       this.initializeAll()\n    }\n  }\n\n  disconnect() {\n  }\n\n  async initializeAll() {\n    this.partially_available_dates = await this.fetchPartiallyAvailableDatesForStartDateMonth()\n\n    if (this.hasStartDateTarget) {\n      const daysWithLowAvailability = this.partially_available_dates\n\n      this.startDateInstance = this.initializeDatePicker(this.startDateTarget, {\n        minDate: this.minDateValue,\n        onDayCreate: function (dObj, dStr, fp, dayElem) {\n          const date = String(dayElem.dateObj.toISOString().slice(0, 10))\n          if (daysWithLowAvailability.includes(date)) {\n            dayElem.classList.add('low-availability')\n          }\n        },\n      })\n      this.fetchDisabledDatesForStartDateMonth()\n      this.selectedStartDate = this.startDateInstance.selectedDates[0]\n      this.startTimeInstance = this.initializeTimePicker(this.startTimeTarget)\n      this.fetchStartTimeRange()\n    } else if(this.hasCurrentTimeTarget) {\n      this.selectedStartDate = this.currentTimeTarget.innerHTML\n    }\n\n\n    this.endDateInstance = this.initializeDatePicker(this.endDateTarget, {\n      minDate: this.selectedStartDate,\n      maxDate: this.maxDate\n    })\n    this.selectedEndDate = this.endDateInstance.selectedDates[0]\n\n    this.fetchDisabledDatesForEndDateMonth()\n\n    this.endTimeInstance = this.initializeTimePicker(this.endTimeTarget)\n    this.fetchEndTimeRange()\n    this.setHandlers()\n  }\n\n  setHandlers() {\n    if (this.startDateInstance !== undefined) {\n      this.startDateInstance\n      this.startDateInstance.config.onMonthChange.push(this.fetchDisabledDatesForStartDateMonth)\n      this.startDateInstance.config.onChange.push(this.updateStartTime)\n    }\n\n    if (this.endDateInstance !== undefined) {\n      this.endDateInstance.config.onMonthChange.push(this.fetchDisabledDatesForEndDateMonth)\n      this.endDateInstance.config.onChange.push(this.updateEndTime)\n    }\n  }\n\n  initializeDatePicker(element, options) {\n    return flatpickr(element, {\n      locale: German,\n      altInput: true,\n      enableTime: false,\n      noCalendar: false,\n      altFormat: 'D, j. F Y',\n      dateFormat: 'Y-m-d',\n      disableMobile: true,\n      ...options,\n    })\n  }\n\n  initializeTimePicker(element, values) {\n    var tomselect = null;\n    if (!element.tomselect) {\n       tomselect = new TomSelect(element, {})\n    } else {\n       tomselect = element.tomselect\n    }\n\n    if (values) {\n      const options = values.map((time) => ({\n        value: time.toString(),\n        text: `${time} Uhr`,\n      }));\n\n      var oldValue = tomselect.getValue()\n\n      tomselect.clear();\n      tomselect.clearOptions();\n      tomselect.addOptions(options);\n\n      if (values.includes(oldValue)) {\n        tomselect.setValue(oldValue);\n      } else {\n        tomselect.setValue(values[0]);\n      }\n    }\n  }\n\n  setDisabledDates(data, instance) {\n    instance.set('disable', data.unavailable_dates)\n  }\n\n  setStartTimeRange = (data, target) => {\n    let tmpStartDate = new Date(this.selectedStartDate)\n    let tmpEndDate = new Date(data.end_date_suggestion)\n    this.maxDate = new Date(tmpStartDate.setHours(\n      tmpStartDate.getHours() + parseInt(data.max_duration)\n    ))\n    if (this.endDateInstance) {\n      this.endDateInstance.set('maxDate', this.maxDate)\n      this.endDateInstance.setDate(tmpEndDate)\n    }\n\n    this.max_duration = data.max_duration\n\n    const values = data.business_hours\n    if (this.hasStartTimeTarget) {\n      this.startTimeInstance = this.initializeTimePicker(target, values)\n    }\n  }\n\n  setEndTimeRange(data, target) {\n    const values = data.business_hours\n    this.endTimeInstance = this.initializeTimePicker(target, values)\n  }\n\n  updateStartTime = () => {\n    this.selectedStartDate = this.startDateInstance.selectedDates[0]\n    this.fetchStartTimeRange()\n    this.endDateInstance.set('minDate', this.selectedStartDate)\n  }\n\n  updateEndTime = () => {\n    this.selectedEndDate = this.endDateInstance.selectedDates[0]\n    this.fetchEndTimeRange()\n  }\n\n  fetchStartTimeRange() {\n    fetch('/start_time/?start_date=' + this.selectedStartDate + '&type_id=' + this.type_ids)\n      .then((response) => response.json())\n      .then((data) => {\n        if(this.hasStartTimeTarget) {\n          this.setStartTimeRange(data, this.startTimeTarget)\n        }\n      })\n  }\n\n  fetchEndTimeRange() {\n    if (this.selectedEndDate != null) {\n      fetch('/end_time/?end_date=' + this.selectedEndDate + '&type_id=' + this.type_ids)\n        .then((response) => response.json())\n        .then((data) => this.setEndTimeRange(data, this.endTimeTarget))\n    }\n  }\n\n  fetchDisabledDatesForStartDateMonth = () => {\n    fetch('/unavailable_dates/?current_month=' + (this.startDateInstance.currentMonth + 1) +\n      '&current_year=' + this.startDateInstance.currentYear +\n      '&type_id=' + this.type_ids)\n      .then((response) => response.json())\n      .then((data) => this.setDisabledDates(data, this.startDateInstance))\n  }\n\n  fetchPartiallyAvailableDatesForStartDateMonth = () => {\n    return fetch('/unavailable_dates?current_month=10' +\n      '&current_year=2024' +\n      '&type_id=' + this.type_ids)\n      .then((response) => response.json())\n      .then((data) => {return data.partially_available_dates})\n  }\n\n  fetchDisabledDatesForEndDateMonth = () => {\n    fetch('/unavailable_dates/?current_month=' + (this.endDateInstance.currentMonth + 1) +\n      '&current_year=' + this.endDateInstance.currentYear +\n      '&type_id=' + this.type_ids)\n      .then((response) => response.json())\n      .then((data) => this.setDisabledDates(data, this.endDateInstance))\n  }\n\n  toggle(event) {\n    event.target.closest('.input-group').querySelector('.form-control')._flatpickr.toggle()\n  }\n}\n","require('@rails/ujs').start()\nimport \"@hotwired/turbo-rails\";\n\nrequire('trix')\nrequire('@rails/actiontext')\nrequire('fullcalendar/fullcalendar.js')\n\nglobal.toastr = require('toastr')\n\nimport 'bootstrap'\n\nimport '../src/global'\nimport '../src/static_pages'\nimport '../src/groups'\nimport '../src/types'\nimport '../src/users'\nimport '../src/bookings'\nimport 'chartkick/chart.js'\nimport '../styles/styles'\nimport 'tom-select'\nimport '@fortawesome/fontawesome-free/css/all'\n\nimport '../controllers'\n\nimport flatpickr from 'flatpickr'\nrequire('flatpickr/dist/flatpickr.css')\nrequire('flatpickr/dist/themes/airbnb.css')\nimport { German } from 'flatpickr/dist/l10n/de.js'\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar g; // This works in non-strict mode\n\ng = function () {\n  return this;\n}();\n\ntry {\n  // This works if eval is allowed (see CSP)\n  g = g || new Function(\"return this\")();\n} catch (e) {\n  // This works if the window reference is available\n  if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n} // g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\n\nmodule.exports = g;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n;\n(function () {\n  var context = this;\n  (function () {\n    (function () {\n      this.Rails = {\n        linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n        buttonClickSelector: {\n          selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n          exclude: 'form button'\n        },\n        inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n        formSubmitSelector: 'form:not([data-turbo=true])',\n        formInputClickSelector: 'form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n        formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n        formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n        fileInputSelector: 'input[name][type=file]:not([disabled])',\n        linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n        buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n      };\n    }).call(this);\n  }).call(context);\n  var Rails = context.Rails;\n  (function () {\n    (function () {\n      var nonce;\n      nonce = null;\n\n      Rails.loadCSPNonce = function () {\n        var ref;\n        return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n      };\n\n      Rails.cspNonce = function () {\n        return nonce != null ? nonce : Rails.loadCSPNonce();\n      };\n    }).call(this);\n    (function () {\n      var expando, m;\n      m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n      Rails.matches = function (element, selector) {\n        if (selector.exclude != null) {\n          return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n        } else {\n          return m.call(element, selector);\n        }\n      };\n\n      expando = '_ujsData';\n\n      Rails.getData = function (element, key) {\n        var ref;\n        return (ref = element[expando]) != null ? ref[key] : void 0;\n      };\n\n      Rails.setData = function (element, key, value) {\n        if (element[expando] == null) {\n          element[expando] = {};\n        }\n\n        return element[expando][key] = value;\n      };\n\n      Rails.$ = function (selector) {\n        return Array.prototype.slice.call(document.querySelectorAll(selector));\n      };\n    }).call(this);\n    (function () {\n      var $, csrfParam, csrfToken;\n      $ = Rails.$;\n\n      csrfToken = Rails.csrfToken = function () {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-token]');\n        return meta && meta.content;\n      };\n\n      csrfParam = Rails.csrfParam = function () {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-param]');\n        return meta && meta.content;\n      };\n\n      Rails.CSRFProtection = function (xhr) {\n        var token;\n        token = csrfToken();\n\n        if (token != null) {\n          return xhr.setRequestHeader('X-CSRF-Token', token);\n        }\n      };\n\n      Rails.refreshCSRFTokens = function () {\n        var param, token;\n        token = csrfToken();\n        param = csrfParam();\n\n        if (token != null && param != null) {\n          return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n            return input.value = token;\n          });\n        }\n      };\n    }).call(this);\n    (function () {\n      var CustomEvent, fire, matches, preventDefault;\n      matches = Rails.matches;\n      CustomEvent = window.CustomEvent;\n\n      if (typeof CustomEvent !== 'function') {\n        CustomEvent = function CustomEvent(event, params) {\n          var evt;\n          evt = document.createEvent('CustomEvent');\n          evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n          return evt;\n        };\n\n        CustomEvent.prototype = window.Event.prototype;\n        preventDefault = CustomEvent.prototype.preventDefault;\n\n        CustomEvent.prototype.preventDefault = function () {\n          var result;\n          result = preventDefault.call(this);\n\n          if (this.cancelable && !this.defaultPrevented) {\n            Object.defineProperty(this, 'defaultPrevented', {\n              get: function get() {\n                return true;\n              }\n            });\n          }\n\n          return result;\n        };\n      }\n\n      fire = Rails.fire = function (obj, name, data) {\n        var event;\n        event = new CustomEvent(name, {\n          bubbles: true,\n          cancelable: true,\n          detail: data\n        });\n        obj.dispatchEvent(event);\n        return !event.defaultPrevented;\n      };\n\n      Rails.stopEverything = function (e) {\n        fire(e.target, 'ujs:everythingStopped');\n        e.preventDefault();\n        e.stopPropagation();\n        return e.stopImmediatePropagation();\n      };\n\n      Rails.delegate = function (element, selector, eventType, handler) {\n        return element.addEventListener(eventType, function (e) {\n          var target;\n          target = e.target;\n\n          while (!(!(target instanceof Element) || matches(target, selector))) {\n            target = target.parentNode;\n          }\n\n          if (target instanceof Element && handler.call(target, e) === false) {\n            e.preventDefault();\n            return e.stopPropagation();\n          }\n        });\n      };\n    }).call(this);\n    (function () {\n      var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n      cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n      AcceptHeaders = {\n        '*': '*/*',\n        text: 'text/plain',\n        html: 'text/html',\n        xml: 'application/xml, text/xml',\n        json: 'application/json, text/javascript',\n        script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n      };\n\n      Rails.ajax = function (options) {\n        var xhr;\n        options = prepareOptions(options);\n        xhr = createXHR(options, function () {\n          var ref, response;\n          response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n          if (Math.floor(xhr.status / 100) === 2) {\n            if (typeof options.success === \"function\") {\n              options.success(response, xhr.statusText, xhr);\n            }\n          } else {\n            if (typeof options.error === \"function\") {\n              options.error(response, xhr.statusText, xhr);\n            }\n          }\n\n          return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n        });\n\n        if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n          return false;\n        }\n\n        if (xhr.readyState === XMLHttpRequest.OPENED) {\n          return xhr.send(options.data);\n        }\n      };\n\n      prepareOptions = function prepareOptions(options) {\n        options.url = options.url || location.href;\n        options.type = options.type.toUpperCase();\n\n        if (options.type === 'GET' && options.data) {\n          if (options.url.indexOf('?') < 0) {\n            options.url += '?' + options.data;\n          } else {\n            options.url += '&' + options.data;\n          }\n        }\n\n        if (AcceptHeaders[options.dataType] == null) {\n          options.dataType = '*';\n        }\n\n        options.accept = AcceptHeaders[options.dataType];\n\n        if (options.dataType !== '*') {\n          options.accept += ', */*; q=0.01';\n        }\n\n        return options;\n      };\n\n      createXHR = function createXHR(options, done) {\n        var xhr;\n        xhr = new XMLHttpRequest();\n        xhr.open(options.type, options.url, true);\n        xhr.setRequestHeader('Accept', options.accept);\n\n        if (typeof options.data === 'string') {\n          xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n        }\n\n        if (!options.crossDomain) {\n          xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n          CSRFProtection(xhr);\n        }\n\n        xhr.withCredentials = !!options.withCredentials;\n\n        xhr.onreadystatechange = function () {\n          if (xhr.readyState === XMLHttpRequest.DONE) {\n            return done(xhr);\n          }\n        };\n\n        return xhr;\n      };\n\n      processResponse = function processResponse(response, type) {\n        var parser, script;\n\n        if (typeof response === 'string' && typeof type === 'string') {\n          if (type.match(/\\bjson\\b/)) {\n            try {\n              response = JSON.parse(response);\n            } catch (error) {}\n          } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n            script = document.createElement('script');\n            script.setAttribute('nonce', cspNonce());\n            script.text = response;\n            document.head.appendChild(script).parentNode.removeChild(script);\n          } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n            parser = new DOMParser();\n            type = type.replace(/;.+/, '');\n\n            try {\n              response = parser.parseFromString(response, type);\n            } catch (error) {}\n          }\n        }\n\n        return response;\n      };\n\n      Rails.href = function (element) {\n        return element.href;\n      };\n\n      Rails.isCrossDomain = function (url) {\n        var e, originAnchor, urlAnchor;\n        originAnchor = document.createElement('a');\n        originAnchor.href = location.href;\n        urlAnchor = document.createElement('a');\n\n        try {\n          urlAnchor.href = url;\n          return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n        } catch (error) {\n          e = error;\n          return true;\n        }\n      };\n    }).call(this);\n    (function () {\n      var matches, toArray;\n      matches = Rails.matches;\n\n      toArray = function toArray(e) {\n        return Array.prototype.slice.call(e);\n      };\n\n      Rails.serializeElement = function (element, additionalParam) {\n        var inputs, params;\n        inputs = [element];\n\n        if (matches(element, 'form')) {\n          inputs = toArray(element.elements);\n        }\n\n        params = [];\n        inputs.forEach(function (input) {\n          if (!input.name || input.disabled) {\n            return;\n          }\n\n          if (matches(input, 'fieldset[disabled] *')) {\n            return;\n          }\n\n          if (matches(input, 'select')) {\n            return toArray(input.options).forEach(function (option) {\n              if (option.selected) {\n                return params.push({\n                  name: input.name,\n                  value: option.value\n                });\n              }\n            });\n          } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n            return params.push({\n              name: input.name,\n              value: input.value\n            });\n          }\n        });\n\n        if (additionalParam) {\n          params.push(additionalParam);\n        }\n\n        return params.map(function (param) {\n          if (param.name != null) {\n            return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n          } else {\n            return param;\n          }\n        }).join('&');\n      };\n\n      Rails.formElements = function (form, selector) {\n        if (matches(form, 'form')) {\n          return toArray(form.elements).filter(function (el) {\n            return matches(el, selector);\n          });\n        } else {\n          return toArray(form.querySelectorAll(selector));\n        }\n      };\n    }).call(this);\n    (function () {\n      var allowAction, fire, stopEverything;\n      fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n      Rails.handleConfirm = function (e) {\n        if (!allowAction(this)) {\n          return stopEverything(e);\n        }\n      };\n\n      Rails.confirm = function (message, element) {\n        return confirm(message);\n      };\n\n      allowAction = function allowAction(element) {\n        var answer, callback, message;\n        message = element.getAttribute('data-confirm');\n\n        if (!message) {\n          return true;\n        }\n\n        answer = false;\n\n        if (fire(element, 'confirm')) {\n          try {\n            answer = Rails.confirm(message, element);\n          } catch (error) {}\n\n          callback = fire(element, 'confirm:complete', [answer]);\n        }\n\n        return answer && callback;\n      };\n    }).call(this);\n    (function () {\n      var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n      Rails.handleDisabledElement = function (e) {\n        var element;\n        element = this;\n\n        if (element.disabled) {\n          return stopEverything(e);\n        }\n      };\n\n      Rails.enableElement = function (e) {\n        var element;\n\n        if (e instanceof Event) {\n          if (isXhrRedirect(e)) {\n            return;\n          }\n\n          element = e.target;\n        } else {\n          element = e;\n        }\n\n        if (matches(element, Rails.linkDisableSelector)) {\n          return enableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n          return enableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return enableFormElements(element);\n        }\n      };\n\n      Rails.disableElement = function (e) {\n        var element;\n        element = e instanceof Event ? e.target : e;\n\n        if (matches(element, Rails.linkDisableSelector)) {\n          return disableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n          return disableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return disableFormElements(element);\n        }\n      };\n\n      disableLinkElement = function disableLinkElement(element) {\n        var replacement;\n\n        if (getData(element, 'ujs:disabled')) {\n          return;\n        }\n\n        replacement = element.getAttribute('data-disable-with');\n\n        if (replacement != null) {\n          setData(element, 'ujs:enable-with', element.innerHTML);\n          element.innerHTML = replacement;\n        }\n\n        element.addEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', true);\n      };\n\n      enableLinkElement = function enableLinkElement(element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n\n        if (originalText != null) {\n          element.innerHTML = originalText;\n          setData(element, 'ujs:enable-with', null);\n        }\n\n        element.removeEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', null);\n      };\n\n      disableFormElements = function disableFormElements(form) {\n        return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n      };\n\n      disableFormElement = function disableFormElement(element) {\n        var replacement;\n\n        if (getData(element, 'ujs:disabled')) {\n          return;\n        }\n\n        replacement = element.getAttribute('data-disable-with');\n\n        if (replacement != null) {\n          if (matches(element, 'button')) {\n            setData(element, 'ujs:enable-with', element.innerHTML);\n            element.innerHTML = replacement;\n          } else {\n            setData(element, 'ujs:enable-with', element.value);\n            element.value = replacement;\n          }\n        }\n\n        element.disabled = true;\n        return setData(element, 'ujs:disabled', true);\n      };\n\n      enableFormElements = function enableFormElements(form) {\n        return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n      };\n\n      enableFormElement = function enableFormElement(element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n\n        if (originalText != null) {\n          if (matches(element, 'button')) {\n            element.innerHTML = originalText;\n          } else {\n            element.value = originalText;\n          }\n\n          setData(element, 'ujs:enable-with', null);\n        }\n\n        element.disabled = false;\n        return setData(element, 'ujs:disabled', null);\n      };\n\n      isXhrRedirect = function isXhrRedirect(event) {\n        var ref, xhr;\n        xhr = (ref = event.detail) != null ? ref[0] : void 0;\n        return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n      };\n    }).call(this);\n    (function () {\n      var stopEverything;\n      stopEverything = Rails.stopEverything;\n\n      Rails.handleMethod = function (e) {\n        var csrfParam, csrfToken, form, formContent, href, link, method;\n        link = this;\n        method = link.getAttribute('data-method');\n\n        if (!method) {\n          return;\n        }\n\n        href = Rails.href(link);\n        csrfToken = Rails.csrfToken();\n        csrfParam = Rails.csrfParam();\n        form = document.createElement('form');\n        formContent = \"<input name='_method' value='\" + method + \"' type='hidden' />\";\n\n        if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n          formContent += \"<input name='\" + csrfParam + \"' value='\" + csrfToken + \"' type='hidden' />\";\n        }\n\n        formContent += '<input type=\"submit\" />';\n        form.method = 'post';\n        form.action = href;\n        form.target = link.target;\n        form.innerHTML = formContent;\n        form.style.display = 'none';\n        document.body.appendChild(form);\n        form.querySelector('[type=\"submit\"]').click();\n        return stopEverything(e);\n      };\n    }).call(this);\n    (function () {\n      var ajax,\n          fire,\n          getData,\n          isCrossDomain,\n          isRemote,\n          matches,\n          serializeElement,\n          setData,\n          stopEverything,\n          slice = [].slice;\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n      isRemote = function isRemote(element) {\n        var value;\n        value = element.getAttribute('data-remote');\n        return value != null && value !== 'false';\n      };\n\n      Rails.handleRemote = function (e) {\n        var button, data, dataType, element, method, url, withCredentials;\n        element = this;\n\n        if (!isRemote(element)) {\n          return true;\n        }\n\n        if (!fire(element, 'ajax:before')) {\n          fire(element, 'ajax:stopped');\n          return false;\n        }\n\n        withCredentials = element.getAttribute('data-with-credentials');\n        dataType = element.getAttribute('data-type') || 'script';\n\n        if (matches(element, Rails.formSubmitSelector)) {\n          button = getData(element, 'ujs:submit-button');\n          method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n          url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n          if (method.toUpperCase() === 'GET') {\n            url = url.replace(/\\?.*$/, '');\n          }\n\n          if (element.enctype === 'multipart/form-data') {\n            data = new FormData(element);\n\n            if (button != null) {\n              data.append(button.name, button.value);\n            }\n          } else {\n            data = serializeElement(element, button);\n          }\n\n          setData(element, 'ujs:submit-button', null);\n          setData(element, 'ujs:submit-button-formmethod', null);\n          setData(element, 'ujs:submit-button-formaction', null);\n        } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n          method = element.getAttribute('data-method');\n          url = element.getAttribute('data-url');\n          data = serializeElement(element, element.getAttribute('data-params'));\n        } else {\n          method = element.getAttribute('data-method');\n          url = Rails.href(element);\n          data = element.getAttribute('data-params');\n        }\n\n        ajax({\n          type: method || 'GET',\n          url: url,\n          data: data,\n          dataType: dataType,\n          beforeSend: function beforeSend(xhr, options) {\n            if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n              return fire(element, 'ajax:send', [xhr]);\n            } else {\n              fire(element, 'ajax:stopped');\n              return false;\n            }\n          },\n          success: function success() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:success', args);\n          },\n          error: function error() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:error', args);\n          },\n          complete: function complete() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:complete', args);\n          },\n          crossDomain: isCrossDomain(url),\n          withCredentials: withCredentials != null && withCredentials !== 'false'\n        });\n        return stopEverything(e);\n      };\n\n      Rails.formSubmitButtonClick = function (e) {\n        var button, form;\n        button = this;\n        form = button.form;\n\n        if (!form) {\n          return;\n        }\n\n        if (button.name) {\n          setData(form, 'ujs:submit-button', {\n            name: button.name,\n            value: button.value\n          });\n        }\n\n        setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n        setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n        return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n      };\n\n      Rails.preventInsignificantClick = function (e) {\n        var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n        link = this;\n        method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n        data = link.getAttribute('data-params');\n        metaClick = e.metaKey || e.ctrlKey;\n        insignificantMetaClick = metaClick && method === 'GET' && !data;\n        nonPrimaryMouseClick = e.button != null && e.button !== 0;\n\n        if (nonPrimaryMouseClick || insignificantMetaClick) {\n          return e.stopImmediatePropagation();\n        }\n      };\n    }).call(this);\n    (function () {\n      var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n      fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n      if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n        if (jQuery.rails) {\n          throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n        }\n\n        jQuery.rails = Rails;\n        jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n          if (!options.crossDomain) {\n            return CSRFProtection(xhr);\n          }\n        });\n      }\n\n      Rails.start = function () {\n        if (window._rails_loaded) {\n          throw new Error('rails-ujs has already been loaded!');\n        }\n\n        window.addEventListener('pageshow', function () {\n          $(Rails.formEnableSelector).forEach(function (el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n          return $(Rails.linkDisableSelector).forEach(function (el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n        });\n        delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.linkClickSelector, 'click', disableElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n        delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n        delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n        delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n        delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n        delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n          return setTimeout(function () {\n            return disableElement(e);\n          }, 13);\n        });\n        delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n        delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n        document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n        document.addEventListener('DOMContentLoaded', loadCSPNonce);\n        return window._rails_loaded = true;\n      };\n\n      if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n        Rails.start();\n      }\n    }).call(this);\n  }).call(this);\n\n  if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n    module.exports = Rails;\n  } else if (typeof define === \"function\" && define.amd) {\n    define(Rails);\n  }\n}).call(this);","define(function () {\n  \"use strict\";\n\n  return Object.getPrototypeOf;\n});","define([\"./fnToString\"], function (fnToString) {\n  \"use strict\";\n\n  return fnToString.call(Object);\n});","define([\"./core\", \"../external/sizzle/dist/sizzle\"], function (jQuery, Sizzle) {\n  \"use strict\";\n\n  jQuery.find = Sizzle;\n  jQuery.expr = Sizzle.selectors; // Deprecated\n\n  jQuery.expr[\":\"] = jQuery.expr.pseudos;\n  jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\n  jQuery.text = Sizzle.getText;\n  jQuery.isXMLDoc = Sizzle.isXML;\n  jQuery.contains = Sizzle.contains;\n  jQuery.escapeSelector = Sizzle.escape;\n});","/*!\n * Sizzle CSS Selector Engine v2.3.4\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2019-04-08\n */\n(function (window) {\n  var i,\n      support,\n      Expr,\n      getText,\n      isXML,\n      tokenize,\n      compile,\n      select,\n      outermostContext,\n      sortInput,\n      hasDuplicate,\n      // Local document vars\n  setDocument,\n      document,\n      docElem,\n      documentIsHTML,\n      rbuggyQSA,\n      rbuggyMatches,\n      matches,\n      contains,\n      // Instance-specific data\n  expando = \"sizzle\" + 1 * new Date(),\n      preferredDoc = window.document,\n      dirruns = 0,\n      done = 0,\n      classCache = createCache(),\n      tokenCache = createCache(),\n      compilerCache = createCache(),\n      nonnativeSelectorCache = createCache(),\n      sortOrder = function sortOrder(a, b) {\n    if (a === b) {\n      hasDuplicate = true;\n    }\n\n    return 0;\n  },\n      // Instance methods\n  hasOwn = {}.hasOwnProperty,\n      arr = [],\n      pop = arr.pop,\n      push_native = arr.push,\n      push = arr.push,\n      slice = arr.slice,\n      // Use a stripped-down indexOf as it's faster than native\n  // https://jsperf.com/thor-indexof-vs-for/5\n  indexOf = function indexOf(list, elem) {\n    var i = 0,\n        len = list.length;\n\n    for (; i < len; i++) {\n      if (list[i] === elem) {\n        return i;\n      }\n    }\n\n    return -1;\n  },\n      booleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n      // Regular expressions\n  // http://www.w3.org/TR/css3-selectors/#whitespace\n  whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n      // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n  identifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n      // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n  attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace + // Operator (capture 2)\n  \"*([*^$|!~]?=)\" + whitespace + // \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n  \"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace + \"*\\\\]\",\n      pseudos = \":(\" + identifier + \")(?:\\\\((\" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n  // 1. quoted (capture 3; capture 4 or capture 5)\n  \"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" + // 2. simple (capture 6)\n  \"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" + // 3. anything else (capture 2)\n  \".*\" + \")\\\\)|)\",\n      // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n  rwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n      rtrim = new RegExp(\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\"),\n      rcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n      rcombinators = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\"),\n      rdescend = new RegExp(whitespace + \"|>\"),\n      rpseudo = new RegExp(pseudos),\n      ridentifier = new RegExp(\"^\" + identifier + \"$\"),\n      matchExpr = {\n    \"ID\": new RegExp(\"^#(\" + identifier + \")\"),\n    \"CLASS\": new RegExp(\"^\\\\.(\" + identifier + \")\"),\n    \"TAG\": new RegExp(\"^(\" + identifier + \"|[*])\"),\n    \"ATTR\": new RegExp(\"^\" + attributes),\n    \"PSEUDO\": new RegExp(\"^\" + pseudos),\n    \"CHILD\": new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n    \"bool\": new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n    // For use in libraries implementing .is()\n    // We use this for POS matching in `select`\n    \"needsContext\": new RegExp(\"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n  },\n      rhtml = /HTML$/i,\n      rinputs = /^(?:input|select|textarea|button)$/i,\n      rheader = /^h\\d$/i,\n      rnative = /^[^{]+\\{\\s*\\[native \\w/,\n      // Easily-parseable/retrievable ID or TAG or CLASS selectors\n  rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n      rsibling = /[+~]/,\n      // CSS escapes\n  // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n  runescape = new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\"),\n      funescape = function funescape(_, escaped, escapedWhitespace) {\n    var high = \"0x\" + escaped - 0x10000; // NaN means non-codepoint\n    // Support: Firefox<24\n    // Workaround erroneous numeric interpretation of +\"0x\"\n\n    return high !== high || escapedWhitespace ? escaped : high < 0 ? // BMP codepoint\n    String.fromCharCode(high + 0x10000) : // Supplemental Plane codepoint (surrogate pair)\n    String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n  },\n      // CSS string/identifier serialization\n  // https://drafts.csswg.org/cssom/#common-serializing-idioms\n  rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n      fcssescape = function fcssescape(ch, asCodePoint) {\n    if (asCodePoint) {\n      // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n      if (ch === \"\\0\") {\n        return \"\\uFFFD\";\n      } // Control characters and (dependent upon position) numbers get escaped as code points\n\n\n      return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n    } // Other potentially-special ASCII characters get backslash-escaped\n\n\n    return \"\\\\\" + ch;\n  },\n      // Used for iframes\n  // See setDocument()\n  // Removing the function wrapper causes a \"Permission Denied\"\n  // error in IE\n  unloadHandler = function unloadHandler() {\n    setDocument();\n  },\n      inDisabledFieldset = addCombinator(function (elem) {\n    return elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n  }, {\n    dir: \"parentNode\",\n    next: \"legend\"\n  }); // Optimize for push.apply( _, NodeList )\n\n\n  try {\n    push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes); // Support: Android<4.0\n    // Detect silently failing push.apply\n\n    arr[preferredDoc.childNodes.length].nodeType;\n  } catch (e) {\n    push = {\n      apply: arr.length ? // Leverage slice if possible\n      function (target, els) {\n        push_native.apply(target, slice.call(els));\n      } : // Support: IE<9\n      // Otherwise append directly\n      function (target, els) {\n        var j = target.length,\n            i = 0; // Can't trust NodeList.length\n\n        while (target[j++] = els[i++]) {}\n\n        target.length = j - 1;\n      }\n    };\n  }\n\n  function Sizzle(selector, context, results, seed) {\n    var m,\n        i,\n        elem,\n        nid,\n        match,\n        groups,\n        newSelector,\n        newContext = context && context.ownerDocument,\n        // nodeType defaults to 9, since context defaults to document\n    nodeType = context ? context.nodeType : 9;\n    results = results || []; // Return early from calls with invalid selector or context\n\n    if (typeof selector !== \"string\" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n      return results;\n    } // Try to shortcut find operations (as opposed to filters) in HTML documents\n\n\n    if (!seed) {\n      if ((context ? context.ownerDocument || context : preferredDoc) !== document) {\n        setDocument(context);\n      }\n\n      context = context || document;\n\n      if (documentIsHTML) {\n        // If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n        // (excepting DocumentFragment context, where the methods don't exist)\n        if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n          // ID selector\n          if (m = match[1]) {\n            // Document context\n            if (nodeType === 9) {\n              if (elem = context.getElementById(m)) {\n                // Support: IE, Opera, Webkit\n                // TODO: identify versions\n                // getElementById can match elements by name instead of ID\n                if (elem.id === m) {\n                  results.push(elem);\n                  return results;\n                }\n              } else {\n                return results;\n              } // Element context\n\n            } else {\n              // Support: IE, Opera, Webkit\n              // TODO: identify versions\n              // getElementById can match elements by name instead of ID\n              if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {\n                results.push(elem);\n                return results;\n              }\n            } // Type selector\n\n          } else if (match[2]) {\n            push.apply(results, context.getElementsByTagName(selector));\n            return results; // Class selector\n          } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {\n            push.apply(results, context.getElementsByClassName(m));\n            return results;\n          }\n        } // Take advantage of querySelectorAll\n\n\n        if (support.qsa && !nonnativeSelectorCache[selector + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && (nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\")) {\n          newSelector = selector;\n          newContext = context; // qSA considers elements outside a scoping root when evaluating child or\n          // descendant combinators, which is not what we want.\n          // In such cases, we work around the behavior by prefixing every selector in the\n          // list with an ID selector referencing the scope context.\n          // Thanks to Andrew Dupont for this technique.\n\n          if (nodeType === 1 && rdescend.test(selector)) {\n            // Capture the context ID, setting it first if necessary\n            if (nid = context.getAttribute(\"id\")) {\n              nid = nid.replace(rcssescape, fcssescape);\n            } else {\n              context.setAttribute(\"id\", nid = expando);\n            } // Prefix every selector in the list\n\n\n            groups = tokenize(selector);\n            i = groups.length;\n\n            while (i--) {\n              groups[i] = \"#\" + nid + \" \" + toSelector(groups[i]);\n            }\n\n            newSelector = groups.join(\",\"); // Expand context for sibling selectors\n\n            newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n          }\n\n          try {\n            push.apply(results, newContext.querySelectorAll(newSelector));\n            return results;\n          } catch (qsaError) {\n            nonnativeSelectorCache(selector, true);\n          } finally {\n            if (nid === expando) {\n              context.removeAttribute(\"id\");\n            }\n          }\n        }\n      }\n    } // All others\n\n\n    return select(selector.replace(rtrim, \"$1\"), context, results, seed);\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   */\n\n\n  function createCache() {\n    var keys = [];\n\n    function cache(key, value) {\n      // Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n      if (keys.push(key + \" \") > Expr.cacheLength) {\n        // Only keep the most recent entries\n        delete cache[keys.shift()];\n      }\n\n      return cache[key + \" \"] = value;\n    }\n\n    return cache;\n  }\n  /**\n   * Mark a function for special use by Sizzle\n   * @param {Function} fn The function to mark\n   */\n\n\n  function markFunction(fn) {\n    fn[expando] = true;\n    return fn;\n  }\n  /**\n   * Support testing using an element\n   * @param {Function} fn Passed the created element and returns a boolean result\n   */\n\n\n  function assert(fn) {\n    var el = document.createElement(\"fieldset\");\n\n    try {\n      return !!fn(el);\n    } catch (e) {\n      return false;\n    } finally {\n      // Remove from its parent by default\n      if (el.parentNode) {\n        el.parentNode.removeChild(el);\n      } // release memory in IE\n\n\n      el = null;\n    }\n  }\n  /**\n   * Adds the same handler for all of the specified attrs\n   * @param {String} attrs Pipe-separated list of attributes\n   * @param {Function} handler The method that will be applied\n   */\n\n\n  function addHandle(attrs, handler) {\n    var arr = attrs.split(\"|\"),\n        i = arr.length;\n\n    while (i--) {\n      Expr.attrHandle[arr[i]] = handler;\n    }\n  }\n  /**\n   * Checks document order of two siblings\n   * @param {Element} a\n   * @param {Element} b\n   * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n   */\n\n\n  function siblingCheck(a, b) {\n    var cur = b && a,\n        diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex; // Use IE sourceIndex if available on both nodes\n\n    if (diff) {\n      return diff;\n    } // Check if b follows a\n\n\n    if (cur) {\n      while (cur = cur.nextSibling) {\n        if (cur === b) {\n          return -1;\n        }\n      }\n    }\n\n    return a ? 1 : -1;\n  }\n  /**\n   * Returns a function to use in pseudos for input types\n   * @param {String} type\n   */\n\n\n  function createInputPseudo(type) {\n    return function (elem) {\n      var name = elem.nodeName.toLowerCase();\n      return name === \"input\" && elem.type === type;\n    };\n  }\n  /**\n   * Returns a function to use in pseudos for buttons\n   * @param {String} type\n   */\n\n\n  function createButtonPseudo(type) {\n    return function (elem) {\n      var name = elem.nodeName.toLowerCase();\n      return (name === \"input\" || name === \"button\") && elem.type === type;\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   */\n\n\n  function createDisabledPseudo(disabled) {\n    // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n    return function (elem) {\n      // Only certain elements can match :enabled or :disabled\n      // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n      // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n      if (\"form\" in elem) {\n        // Check for inherited disabledness on relevant non-disabled elements:\n        // * listed form-associated elements in a disabled fieldset\n        //   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n        //   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n        // * option elements in a disabled optgroup\n        //   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n        // All such elements have a \"form\" property.\n        if (elem.parentNode && elem.disabled === false) {\n          // Option elements defer to a parent optgroup if present\n          if (\"label\" in elem) {\n            if (\"label\" in elem.parentNode) {\n              return elem.parentNode.disabled === disabled;\n            } else {\n              return elem.disabled === disabled;\n            }\n          } // Support: IE 6 - 11\n          // Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\n\n          return elem.isDisabled === disabled || // Where there is no isDisabled, check manually\n\n          /* jshint -W018 */\n          elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;\n        }\n\n        return elem.disabled === disabled; // Try to winnow out elements that can't be disabled before trusting the disabled property.\n        // Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n        // even exist on them, let alone have a boolean value.\n      } else if (\"label\" in elem) {\n        return elem.disabled === disabled;\n      } // Remaining elements are neither :enabled nor :disabled\n\n\n      return false;\n    };\n  }\n  /**\n   * Returns a function to use in pseudos for positionals\n   * @param {Function} fn\n   */\n\n\n  function createPositionalPseudo(fn) {\n    return markFunction(function (argument) {\n      argument = +argument;\n      return markFunction(function (seed, matches) {\n        var j,\n            matchIndexes = fn([], seed.length, argument),\n            i = matchIndexes.length; // Match elements found at the specified indexes\n\n        while (i--) {\n          if (seed[j = matchIndexes[i]]) {\n            seed[j] = !(matches[j] = seed[j]);\n          }\n        }\n      });\n    });\n  }\n  /**\n   * Checks a node for validity as a Sizzle context\n   * @param {Element|Object=} context\n   * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n   */\n\n\n  function testContext(context) {\n    return context && typeof context.getElementsByTagName !== \"undefined\" && context;\n  } // Expose support vars for convenience\n\n\n  support = Sizzle.support = {};\n  /**\n   * Detects XML nodes\n   * @param {Element|Object} elem An element or a document\n   * @returns {Boolean} True iff elem is a non-HTML XML node\n   */\n\n  isXML = Sizzle.isXML = function (elem) {\n    var namespace = elem.namespaceURI,\n        docElem = (elem.ownerDocument || elem).documentElement; // Support: IE <=8\n    // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n    // https://bugs.jquery.com/ticket/4833\n\n    return !rhtml.test(namespace || docElem && docElem.nodeName || \"HTML\");\n  };\n  /**\n   * Sets document-related variables once based on the current document\n   * @param {Element|Object} [doc] An element or document object to use to set the document\n   * @returns {Object} Returns the current document\n   */\n\n\n  setDocument = Sizzle.setDocument = function (node) {\n    var hasCompare,\n        subWindow,\n        doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected\n\n    if (doc === document || doc.nodeType !== 9 || !doc.documentElement) {\n      return document;\n    } // Update global variables\n\n\n    document = doc;\n    docElem = document.documentElement;\n    documentIsHTML = !isXML(document); // Support: IE 9-11, Edge\n    // Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\n    if (preferredDoc !== document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {\n      // Support: IE 11, Edge\n      if (subWindow.addEventListener) {\n        subWindow.addEventListener(\"unload\", unloadHandler, false); // Support: IE 9 - 10 only\n      } else if (subWindow.attachEvent) {\n        subWindow.attachEvent(\"onunload\", unloadHandler);\n      }\n    }\n    /* Attributes\n    ---------------------------------------------------------------------- */\n    // Support: IE<8\n    // Verify that getAttribute really returns attributes and not properties\n    // (excepting IE8 booleans)\n\n\n    support.attributes = assert(function (el) {\n      el.className = \"i\";\n      return !el.getAttribute(\"className\");\n    });\n    /* getElement(s)By*\n    ---------------------------------------------------------------------- */\n    // Check if getElementsByTagName(\"*\") returns only elements\n\n    support.getElementsByTagName = assert(function (el) {\n      el.appendChild(document.createComment(\"\"));\n      return !el.getElementsByTagName(\"*\").length;\n    }); // Support: IE<9\n\n    support.getElementsByClassName = rnative.test(document.getElementsByClassName); // Support: IE<10\n    // Check if getElementById returns elements by name\n    // The broken getElementById methods don't pick up programmatically-set names,\n    // so use a roundabout getElementsByName test\n\n    support.getById = assert(function (el) {\n      docElem.appendChild(el).id = expando;\n      return !document.getElementsByName || !document.getElementsByName(expando).length;\n    }); // ID filter and find\n\n    if (support.getById) {\n      Expr.filter[\"ID\"] = function (id) {\n        var attrId = id.replace(runescape, funescape);\n        return function (elem) {\n          return elem.getAttribute(\"id\") === attrId;\n        };\n      };\n\n      Expr.find[\"ID\"] = function (id, context) {\n        if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n          var elem = context.getElementById(id);\n          return elem ? [elem] : [];\n        }\n      };\n    } else {\n      Expr.filter[\"ID\"] = function (id) {\n        var attrId = id.replace(runescape, funescape);\n        return function (elem) {\n          var node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n          return node && node.value === attrId;\n        };\n      }; // Support: IE 6 - 7 only\n      // getElementById is not reliable as a find shortcut\n\n\n      Expr.find[\"ID\"] = function (id, context) {\n        if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n          var node,\n              i,\n              elems,\n              elem = context.getElementById(id);\n\n          if (elem) {\n            // Verify the id attribute\n            node = elem.getAttributeNode(\"id\");\n\n            if (node && node.value === id) {\n              return [elem];\n            } // Fall back on getElementsByName\n\n\n            elems = context.getElementsByName(id);\n            i = 0;\n\n            while (elem = elems[i++]) {\n              node = elem.getAttributeNode(\"id\");\n\n              if (node && node.value === id) {\n                return [elem];\n              }\n            }\n          }\n\n          return [];\n        }\n      };\n    } // Tag\n\n\n    Expr.find[\"TAG\"] = support.getElementsByTagName ? function (tag, context) {\n      if (typeof context.getElementsByTagName !== \"undefined\") {\n        return context.getElementsByTagName(tag); // DocumentFragment nodes don't have gEBTN\n      } else if (support.qsa) {\n        return context.querySelectorAll(tag);\n      }\n    } : function (tag, context) {\n      var elem,\n          tmp = [],\n          i = 0,\n          // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n      results = context.getElementsByTagName(tag); // Filter out possible comments\n\n      if (tag === \"*\") {\n        while (elem = results[i++]) {\n          if (elem.nodeType === 1) {\n            tmp.push(elem);\n          }\n        }\n\n        return tmp;\n      }\n\n      return results;\n    }; // Class\n\n    Expr.find[\"CLASS\"] = support.getElementsByClassName && function (className, context) {\n      if (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n        return context.getElementsByClassName(className);\n      }\n    };\n    /* QSA/matchesSelector\n    ---------------------------------------------------------------------- */\n    // QSA and matchesSelector support\n    // matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\n\n    rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21)\n    // We allow this because of a bug in IE8/9 that throws an error\n    // whenever `document.activeElement` is accessed on an iframe\n    // So, we allow :focus to pass through QSA all the time to avoid the IE error\n    // See https://bugs.jquery.com/ticket/13378\n\n    rbuggyQSA = [];\n\n    if (support.qsa = rnative.test(document.querySelectorAll)) {\n      // Build QSA regex\n      // Regex strategy adopted from Diego Perini\n      assert(function (el) {\n        // Select is set to empty string on purpose\n        // This is to test IE's treatment of not explicitly\n        // setting a boolean content attribute,\n        // since its presence should be enough\n        // https://bugs.jquery.com/ticket/12359\n        docElem.appendChild(el).innerHTML = \"<a id='\" + expando + \"'></a>\" + \"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" + \"<option selected=''></option></select>\"; // Support: IE8, Opera 11-12.16\n        // Nothing should be selected when empty strings follow ^= or $= or *=\n        // The test attribute must be unknown in Opera but \"safe\" for WinRT\n        // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\n        if (el.querySelectorAll(\"[msallowcapture^='']\").length) {\n          rbuggyQSA.push(\"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\");\n        } // Support: IE8\n        // Boolean attributes and \"value\" are not treated correctly\n\n\n        if (!el.querySelectorAll(\"[selected]\").length) {\n          rbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n        } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\n\n        if (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n          rbuggyQSA.push(\"~=\");\n        } // Webkit/Opera - :checked should return selected option elements\n        // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n        // IE8 throws error here and will not see later tests\n\n\n        if (!el.querySelectorAll(\":checked\").length) {\n          rbuggyQSA.push(\":checked\");\n        } // Support: Safari 8+, iOS 8+\n        // https://bugs.webkit.org/show_bug.cgi?id=136851\n        // In-page `selector#id sibling-combinator selector` fails\n\n\n        if (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n          rbuggyQSA.push(\".#.+[+~]\");\n        }\n      });\n      assert(function (el) {\n        el.innerHTML = \"<a href='' disabled='disabled'></a>\" + \"<select disabled='disabled'><option/></select>\"; // Support: Windows 8 Native Apps\n        // The type and name attributes are restricted during .innerHTML assignment\n\n        var input = document.createElement(\"input\");\n        input.setAttribute(\"type\", \"hidden\");\n        el.appendChild(input).setAttribute(\"name\", \"D\"); // Support: IE8\n        // Enforce case-sensitivity of name attribute\n\n        if (el.querySelectorAll(\"[name=d]\").length) {\n          rbuggyQSA.push(\"name\" + whitespace + \"*[*^$|!~]?=\");\n        } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n        // IE8 throws error here and will not see later tests\n\n\n        if (el.querySelectorAll(\":enabled\").length !== 2) {\n          rbuggyQSA.push(\":enabled\", \":disabled\");\n        } // Support: IE9-11+\n        // IE's :disabled selector does not pick up the children of disabled fieldsets\n\n\n        docElem.appendChild(el).disabled = true;\n\n        if (el.querySelectorAll(\":disabled\").length !== 2) {\n          rbuggyQSA.push(\":enabled\", \":disabled\");\n        } // Opera 10-11 does not throw on post-comma invalid pseudos\n\n\n        el.querySelectorAll(\"*,:x\");\n        rbuggyQSA.push(\",.*:\");\n      });\n    }\n\n    if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {\n      assert(function (el) {\n        // Check to see if it's possible to do matchesSelector\n        // on a disconnected node (IE 9)\n        support.disconnectedMatch = matches.call(el, \"*\"); // This should fail with an exception\n        // Gecko does not error, returns false instead\n\n        matches.call(el, \"[s!='']:x\");\n        rbuggyMatches.push(\"!=\", pseudos);\n      });\n    }\n\n    rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n    rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join(\"|\"));\n    /* Contains\n    ---------------------------------------------------------------------- */\n\n    hasCompare = rnative.test(docElem.compareDocumentPosition); // Element contains another\n    // Purposefully self-exclusive\n    // As in, an element does not contain itself\n\n    contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n      var adown = a.nodeType === 9 ? a.documentElement : a,\n          bup = b && b.parentNode;\n      return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n    } : function (a, b) {\n      if (b) {\n        while (b = b.parentNode) {\n          if (b === a) {\n            return true;\n          }\n        }\n      }\n\n      return false;\n    };\n    /* Sorting\n    ---------------------------------------------------------------------- */\n    // Document order sorting\n\n    sortOrder = hasCompare ? function (a, b) {\n      // Flag for duplicate removal\n      if (a === b) {\n        hasDuplicate = true;\n        return 0;\n      } // Sort on method existence if only one input has compareDocumentPosition\n\n\n      var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\n      if (compare) {\n        return compare;\n      } // Calculate position if both inputs belong to the same document\n\n\n      compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : // Otherwise we know they are disconnected\n      1; // Disconnected nodes\n\n      if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n        // Choose the first element that is related to our preferred document\n        if (a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a)) {\n          return -1;\n        }\n\n        if (b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b)) {\n          return 1;\n        } // Maintain original order\n\n\n        return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;\n      }\n\n      return compare & 4 ? -1 : 1;\n    } : function (a, b) {\n      // Exit early if the nodes are identical\n      if (a === b) {\n        hasDuplicate = true;\n        return 0;\n      }\n\n      var cur,\n          i = 0,\n          aup = a.parentNode,\n          bup = b.parentNode,\n          ap = [a],\n          bp = [b]; // Parentless nodes are either documents or disconnected\n\n      if (!aup || !bup) {\n        return a === document ? -1 : b === document ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0; // If the nodes are siblings, we can do a quick check\n      } else if (aup === bup) {\n        return siblingCheck(a, b);\n      } // Otherwise we need full lists of their ancestors for comparison\n\n\n      cur = a;\n\n      while (cur = cur.parentNode) {\n        ap.unshift(cur);\n      }\n\n      cur = b;\n\n      while (cur = cur.parentNode) {\n        bp.unshift(cur);\n      } // Walk down the tree looking for a discrepancy\n\n\n      while (ap[i] === bp[i]) {\n        i++;\n      }\n\n      return i ? // Do a sibling check if the nodes have a common ancestor\n      siblingCheck(ap[i], bp[i]) : // Otherwise nodes in our document sort first\n      ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0;\n    };\n    return document;\n  };\n\n  Sizzle.matches = function (expr, elements) {\n    return Sizzle(expr, null, null, elements);\n  };\n\n  Sizzle.matchesSelector = function (elem, expr) {\n    // Set document vars if needed\n    if ((elem.ownerDocument || elem) !== document) {\n      setDocument(elem);\n    }\n\n    if (support.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + \" \"] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n      try {\n        var ret = matches.call(elem, expr); // IE 9's matchesSelector returns false on disconnected nodes\n\n        if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document\n        // fragment in IE 9\n        elem.document && elem.document.nodeType !== 11) {\n          return ret;\n        }\n      } catch (e) {\n        nonnativeSelectorCache(expr, true);\n      }\n    }\n\n    return Sizzle(expr, document, null, [elem]).length > 0;\n  };\n\n  Sizzle.contains = function (context, elem) {\n    // Set document vars if needed\n    if ((context.ownerDocument || context) !== document) {\n      setDocument(context);\n    }\n\n    return contains(context, elem);\n  };\n\n  Sizzle.attr = function (elem, name) {\n    // Set document vars if needed\n    if ((elem.ownerDocument || elem) !== document) {\n      setDocument(elem);\n    }\n\n    var fn = Expr.attrHandle[name.toLowerCase()],\n        // Don't get fooled by Object.prototype properties (jQuery #13807)\n    val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n    return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n  };\n\n  Sizzle.escape = function (sel) {\n    return (sel + \"\").replace(rcssescape, fcssescape);\n  };\n\n  Sizzle.error = function (msg) {\n    throw new Error(\"Syntax error, unrecognized expression: \" + msg);\n  };\n  /**\n   * Document sorting and removing duplicates\n   * @param {ArrayLike} results\n   */\n\n\n  Sizzle.uniqueSort = function (results) {\n    var elem,\n        duplicates = [],\n        j = 0,\n        i = 0; // Unless we *know* we can detect duplicates, assume their presence\n\n    hasDuplicate = !support.detectDuplicates;\n    sortInput = !support.sortStable && results.slice(0);\n    results.sort(sortOrder);\n\n    if (hasDuplicate) {\n      while (elem = results[i++]) {\n        if (elem === results[i]) {\n          j = duplicates.push(i);\n        }\n      }\n\n      while (j--) {\n        results.splice(duplicates[j], 1);\n      }\n    } // Clear input after sorting to release objects\n    // See https://github.com/jquery/sizzle/pull/225\n\n\n    sortInput = null;\n    return results;\n  };\n  /**\n   * Utility function for retrieving the text value of an array of DOM nodes\n   * @param {Array|Element} elem\n   */\n\n\n  getText = Sizzle.getText = function (elem) {\n    var node,\n        ret = \"\",\n        i = 0,\n        nodeType = elem.nodeType;\n\n    if (!nodeType) {\n      // If no nodeType, this is expected to be an array\n      while (node = elem[i++]) {\n        // Do not traverse comment nodes\n        ret += getText(node);\n      }\n    } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n      // Use textContent for elements\n      // innerText usage removed for consistency of new lines (jQuery #11153)\n      if (typeof elem.textContent === \"string\") {\n        return elem.textContent;\n      } else {\n        // Traverse its children\n        for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n          ret += getText(elem);\n        }\n      }\n    } else if (nodeType === 3 || nodeType === 4) {\n      return elem.nodeValue;\n    } // Do not include comment or processing instruction nodes\n\n\n    return ret;\n  };\n\n  Expr = Sizzle.selectors = {\n    // Can be adjusted by the user\n    cacheLength: 50,\n    createPseudo: markFunction,\n    match: matchExpr,\n    attrHandle: {},\n    find: {},\n    relative: {\n      \">\": {\n        dir: \"parentNode\",\n        first: true\n      },\n      \" \": {\n        dir: \"parentNode\"\n      },\n      \"+\": {\n        dir: \"previousSibling\",\n        first: true\n      },\n      \"~\": {\n        dir: \"previousSibling\"\n      }\n    },\n    preFilter: {\n      \"ATTR\": function ATTR(match) {\n        match[1] = match[1].replace(runescape, funescape); // Move the given value to match[3] whether quoted or unquoted\n\n        match[3] = (match[3] || match[4] || match[5] || \"\").replace(runescape, funescape);\n\n        if (match[2] === \"~=\") {\n          match[3] = \" \" + match[3] + \" \";\n        }\n\n        return match.slice(0, 4);\n      },\n      \"CHILD\": function CHILD(match) {\n        /* matches from matchExpr[\"CHILD\"]\n        \t1 type (only|nth|...)\n        \t2 what (child|of-type)\n        \t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n        \t4 xn-component of xn+y argument ([+-]?\\d*n|)\n        \t5 sign of xn-component\n        \t6 x of xn-component\n        \t7 sign of y-component\n        \t8 y of y-component\n        */\n        match[1] = match[1].toLowerCase();\n\n        if (match[1].slice(0, 3) === \"nth\") {\n          // nth-* requires argument\n          if (!match[3]) {\n            Sizzle.error(match[0]);\n          } // numeric x and y parameters for Expr.filter.CHILD\n          // remember that false/true cast respectively to 0/1\n\n\n          match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === \"even\" || match[3] === \"odd\"));\n          match[5] = +(match[7] + match[8] || match[3] === \"odd\"); // other types prohibit arguments\n        } else if (match[3]) {\n          Sizzle.error(match[0]);\n        }\n\n        return match;\n      },\n      \"PSEUDO\": function PSEUDO(match) {\n        var excess,\n            unquoted = !match[6] && match[2];\n\n        if (matchExpr[\"CHILD\"].test(match[0])) {\n          return null;\n        } // Accept quoted arguments as-is\n\n\n        if (match[3]) {\n          match[2] = match[4] || match[5] || \"\"; // Strip excess characters from unquoted arguments\n        } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n          // excess is a negative index\n          match[0] = match[0].slice(0, excess);\n          match[2] = unquoted.slice(0, excess);\n        } // Return only captures needed by the pseudo filter method (type and argument)\n\n\n        return match.slice(0, 3);\n      }\n    },\n    filter: {\n      \"TAG\": function TAG(nodeNameSelector) {\n        var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n        return nodeNameSelector === \"*\" ? function () {\n          return true;\n        } : function (elem) {\n          return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n        };\n      },\n      \"CLASS\": function CLASS(className) {\n        var pattern = classCache[className + \" \"];\n        return pattern || (pattern = new RegExp(\"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\")) && classCache(className, function (elem) {\n          return pattern.test(typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\");\n        });\n      },\n      \"ATTR\": function ATTR(name, operator, check) {\n        return function (elem) {\n          var result = Sizzle.attr(elem, name);\n\n          if (result == null) {\n            return operator === \"!=\";\n          }\n\n          if (!operator) {\n            return true;\n          }\n\n          result += \"\";\n          return operator === \"=\" ? result === check : operator === \"!=\" ? result !== check : operator === \"^=\" ? check && result.indexOf(check) === 0 : operator === \"*=\" ? check && result.indexOf(check) > -1 : operator === \"$=\" ? check && result.slice(-check.length) === check : operator === \"~=\" ? (\" \" + result.replace(rwhitespace, \" \") + \" \").indexOf(check) > -1 : operator === \"|=\" ? result === check || result.slice(0, check.length + 1) === check + \"-\" : false;\n        };\n      },\n      \"CHILD\": function CHILD(type, what, argument, first, last) {\n        var simple = type.slice(0, 3) !== \"nth\",\n            forward = type.slice(-4) !== \"last\",\n            ofType = what === \"of-type\";\n        return first === 1 && last === 0 ? // Shortcut for :nth-*(n)\n        function (elem) {\n          return !!elem.parentNode;\n        } : function (elem, context, xml) {\n          var cache,\n              uniqueCache,\n              outerCache,\n              node,\n              nodeIndex,\n              start,\n              dir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n              parent = elem.parentNode,\n              name = ofType && elem.nodeName.toLowerCase(),\n              useCache = !xml && !ofType,\n              diff = false;\n\n          if (parent) {\n            // :(first|last|only)-(child|of-type)\n            if (simple) {\n              while (dir) {\n                node = elem;\n\n                while (node = node[dir]) {\n                  if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n                    return false;\n                  }\n                } // Reverse direction for :only-* (if we haven't yet done so)\n\n\n                start = dir = type === \"only\" && !start && \"nextSibling\";\n              }\n\n              return true;\n            }\n\n            start = [forward ? parent.firstChild : parent.lastChild]; // non-xml :nth-child(...) stores cache data on `parent`\n\n            if (forward && useCache) {\n              // Seek `elem` from a previously-cached index\n              // ...in a gzip-friendly way\n              node = parent;\n              outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n              // Defend against cloned attroperties (jQuery gh-1709)\n\n              uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n              cache = uniqueCache[type] || [];\n              nodeIndex = cache[0] === dirruns && cache[1];\n              diff = nodeIndex && cache[2];\n              node = nodeIndex && parent.childNodes[nodeIndex];\n\n              while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n                // When found, cache indexes on `parent` and break\n                if (node.nodeType === 1 && ++diff && node === elem) {\n                  uniqueCache[type] = [dirruns, nodeIndex, diff];\n                  break;\n                }\n              }\n            } else {\n              // Use previously-cached element index if available\n              if (useCache) {\n                // ...in a gzip-friendly way\n                node = elem;\n                outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n                // Defend against cloned attroperties (jQuery gh-1709)\n\n                uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n                cache = uniqueCache[type] || [];\n                nodeIndex = cache[0] === dirruns && cache[1];\n                diff = nodeIndex;\n              } // xml :nth-child(...)\n              // or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\n\n              if (diff === false) {\n                // Use the same loop as above to seek `elem` from the start\n                while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n                  if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n                    // Cache the index of each encountered element\n                    if (useCache) {\n                      outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n                      // Defend against cloned attroperties (jQuery gh-1709)\n\n                      uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n                      uniqueCache[type] = [dirruns, diff];\n                    }\n\n                    if (node === elem) {\n                      break;\n                    }\n                  }\n                }\n              }\n            } // Incorporate the offset, then check against cycle size\n\n\n            diff -= last;\n            return diff === first || diff % first === 0 && diff / first >= 0;\n          }\n        };\n      },\n      \"PSEUDO\": function PSEUDO(pseudo, argument) {\n        // pseudo-class names are case-insensitive\n        // http://www.w3.org/TR/selectors/#pseudo-classes\n        // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n        // Remember that setFilters inherits from pseudos\n        var args,\n            fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error(\"unsupported pseudo: \" + pseudo); // The user may use createPseudo to indicate that\n        // arguments are needed to create the filter function\n        // just as Sizzle does\n\n        if (fn[expando]) {\n          return fn(argument);\n        } // But maintain support for old signatures\n\n\n        if (fn.length > 1) {\n          args = [pseudo, pseudo, \"\", argument];\n          return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n            var idx,\n                matched = fn(seed, argument),\n                i = matched.length;\n\n            while (i--) {\n              idx = indexOf(seed, matched[i]);\n              seed[idx] = !(matches[idx] = matched[i]);\n            }\n          }) : function (elem) {\n            return fn(elem, 0, args);\n          };\n        }\n\n        return fn;\n      }\n    },\n    pseudos: {\n      // Potentially complex pseudos\n      \"not\": markFunction(function (selector) {\n        // Trim the selector passed to compile\n        // to avoid treating leading and trailing\n        // spaces as combinators\n        var input = [],\n            results = [],\n            matcher = compile(selector.replace(rtrim, \"$1\"));\n        return matcher[expando] ? markFunction(function (seed, matches, context, xml) {\n          var elem,\n              unmatched = matcher(seed, null, xml, []),\n              i = seed.length; // Match elements unmatched by `matcher`\n\n          while (i--) {\n            if (elem = unmatched[i]) {\n              seed[i] = !(matches[i] = elem);\n            }\n          }\n        }) : function (elem, context, xml) {\n          input[0] = elem;\n          matcher(input, null, xml, results); // Don't keep the element (issue #299)\n\n          input[0] = null;\n          return !results.pop();\n        };\n      }),\n      \"has\": markFunction(function (selector) {\n        return function (elem) {\n          return Sizzle(selector, elem).length > 0;\n        };\n      }),\n      \"contains\": markFunction(function (text) {\n        text = text.replace(runescape, funescape);\n        return function (elem) {\n          return (elem.textContent || getText(elem)).indexOf(text) > -1;\n        };\n      }),\n      // \"Whether an element is represented by a :lang() selector\n      // is based solely on the element's language value\n      // being equal to the identifier C,\n      // or beginning with the identifier C immediately followed by \"-\".\n      // The matching of C against the element's language value is performed case-insensitively.\n      // The identifier C does not have to be a valid language name.\"\n      // http://www.w3.org/TR/selectors/#lang-pseudo\n      \"lang\": markFunction(function (lang) {\n        // lang value must be a valid identifier\n        if (!ridentifier.test(lang || \"\")) {\n          Sizzle.error(\"unsupported lang: \" + lang);\n        }\n\n        lang = lang.replace(runescape, funescape).toLowerCase();\n        return function (elem) {\n          var elemLang;\n\n          do {\n            if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) {\n              elemLang = elemLang.toLowerCase();\n              return elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n            }\n          } while ((elem = elem.parentNode) && elem.nodeType === 1);\n\n          return false;\n        };\n      }),\n      // Miscellaneous\n      \"target\": function target(elem) {\n        var hash = window.location && window.location.hash;\n        return hash && hash.slice(1) === elem.id;\n      },\n      \"root\": function root(elem) {\n        return elem === docElem;\n      },\n      \"focus\": function focus(elem) {\n        return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n      },\n      // Boolean properties\n      \"enabled\": createDisabledPseudo(false),\n      \"disabled\": createDisabledPseudo(true),\n      \"checked\": function checked(elem) {\n        // In CSS3, :checked should return both checked and selected elements\n        // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n        var nodeName = elem.nodeName.toLowerCase();\n        return nodeName === \"input\" && !!elem.checked || nodeName === \"option\" && !!elem.selected;\n      },\n      \"selected\": function selected(elem) {\n        // Accessing this property makes selected-by-default\n        // options in Safari work properly\n        if (elem.parentNode) {\n          elem.parentNode.selectedIndex;\n        }\n\n        return elem.selected === true;\n      },\n      // Contents\n      \"empty\": function empty(elem) {\n        // http://www.w3.org/TR/selectors/#empty-pseudo\n        // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n        //   but not by others (comment: 8; processing instruction: 7; etc.)\n        // nodeType < 6 works because attributes (2) do not appear as children\n        for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n          if (elem.nodeType < 6) {\n            return false;\n          }\n        }\n\n        return true;\n      },\n      \"parent\": function parent(elem) {\n        return !Expr.pseudos[\"empty\"](elem);\n      },\n      // Element/input types\n      \"header\": function header(elem) {\n        return rheader.test(elem.nodeName);\n      },\n      \"input\": function input(elem) {\n        return rinputs.test(elem.nodeName);\n      },\n      \"button\": function button(elem) {\n        var name = elem.nodeName.toLowerCase();\n        return name === \"input\" && elem.type === \"button\" || name === \"button\";\n      },\n      \"text\": function text(elem) {\n        var attr;\n        return elem.nodeName.toLowerCase() === \"input\" && elem.type === \"text\" && ((attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\");\n      },\n      // Position-in-collection\n      \"first\": createPositionalPseudo(function () {\n        return [0];\n      }),\n      \"last\": createPositionalPseudo(function (matchIndexes, length) {\n        return [length - 1];\n      }),\n      \"eq\": createPositionalPseudo(function (matchIndexes, length, argument) {\n        return [argument < 0 ? argument + length : argument];\n      }),\n      \"even\": createPositionalPseudo(function (matchIndexes, length) {\n        var i = 0;\n\n        for (; i < length; i += 2) {\n          matchIndexes.push(i);\n        }\n\n        return matchIndexes;\n      }),\n      \"odd\": createPositionalPseudo(function (matchIndexes, length) {\n        var i = 1;\n\n        for (; i < length; i += 2) {\n          matchIndexes.push(i);\n        }\n\n        return matchIndexes;\n      }),\n      \"lt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n        var i = argument < 0 ? argument + length : argument > length ? length : argument;\n\n        for (; --i >= 0;) {\n          matchIndexes.push(i);\n        }\n\n        return matchIndexes;\n      }),\n      \"gt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n        var i = argument < 0 ? argument + length : argument;\n\n        for (; ++i < length;) {\n          matchIndexes.push(i);\n        }\n\n        return matchIndexes;\n      })\n    }\n  };\n  Expr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"]; // Add button/input type pseudos\n\n  for (i in {\n    radio: true,\n    checkbox: true,\n    file: true,\n    password: true,\n    image: true\n  }) {\n    Expr.pseudos[i] = createInputPseudo(i);\n  }\n\n  for (i in {\n    submit: true,\n    reset: true\n  }) {\n    Expr.pseudos[i] = createButtonPseudo(i);\n  } // Easy API for creating new setFilters\n\n\n  function setFilters() {}\n\n  setFilters.prototype = Expr.filters = Expr.pseudos;\n  Expr.setFilters = new setFilters();\n\n  tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n    var matched,\n        match,\n        tokens,\n        type,\n        soFar,\n        groups,\n        preFilters,\n        cached = tokenCache[selector + \" \"];\n\n    if (cached) {\n      return parseOnly ? 0 : cached.slice(0);\n    }\n\n    soFar = selector;\n    groups = [];\n    preFilters = Expr.preFilter;\n\n    while (soFar) {\n      // Comma and first run\n      if (!matched || (match = rcomma.exec(soFar))) {\n        if (match) {\n          // Don't consume trailing commas as valid\n          soFar = soFar.slice(match[0].length) || soFar;\n        }\n\n        groups.push(tokens = []);\n      }\n\n      matched = false; // Combinators\n\n      if (match = rcombinators.exec(soFar)) {\n        matched = match.shift();\n        tokens.push({\n          value: matched,\n          // Cast descendant combinators to space\n          type: match[0].replace(rtrim, \" \")\n        });\n        soFar = soFar.slice(matched.length);\n      } // Filters\n\n\n      for (type in Expr.filter) {\n        if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n          matched = match.shift();\n          tokens.push({\n            value: matched,\n            type: type,\n            matches: match\n          });\n          soFar = soFar.slice(matched.length);\n        }\n      }\n\n      if (!matched) {\n        break;\n      }\n    } // Return the length of the invalid excess\n    // if we're just parsing\n    // Otherwise, throw an error or return tokens\n\n\n    return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : // Cache the tokens\n    tokenCache(selector, groups).slice(0);\n  };\n\n  function toSelector(tokens) {\n    var i = 0,\n        len = tokens.length,\n        selector = \"\";\n\n    for (; i < len; i++) {\n      selector += tokens[i].value;\n    }\n\n    return selector;\n  }\n\n  function addCombinator(matcher, combinator, base) {\n    var dir = combinator.dir,\n        skip = combinator.next,\n        key = skip || dir,\n        checkNonElements = base && key === \"parentNode\",\n        doneName = done++;\n    return combinator.first ? // Check against closest ancestor/preceding element\n    function (elem, context, xml) {\n      while (elem = elem[dir]) {\n        if (elem.nodeType === 1 || checkNonElements) {\n          return matcher(elem, context, xml);\n        }\n      }\n\n      return false;\n    } : // Check against all ancestor/preceding elements\n    function (elem, context, xml) {\n      var oldCache,\n          uniqueCache,\n          outerCache,\n          newCache = [dirruns, doneName]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\n      if (xml) {\n        while (elem = elem[dir]) {\n          if (elem.nodeType === 1 || checkNonElements) {\n            if (matcher(elem, context, xml)) {\n              return true;\n            }\n          }\n        }\n      } else {\n        while (elem = elem[dir]) {\n          if (elem.nodeType === 1 || checkNonElements) {\n            outerCache = elem[expando] || (elem[expando] = {}); // Support: IE <9 only\n            // Defend against cloned attroperties (jQuery gh-1709)\n\n            uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});\n\n            if (skip && skip === elem.nodeName.toLowerCase()) {\n              elem = elem[dir] || elem;\n            } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n              // Assign to newCache so results back-propagate to previous elements\n              return newCache[2] = oldCache[2];\n            } else {\n              // Reuse newcache so results back-propagate to previous elements\n              uniqueCache[key] = newCache; // A match means we're done; a fail means we have to keep checking\n\n              if (newCache[2] = matcher(elem, context, xml)) {\n                return true;\n              }\n            }\n          }\n        }\n      }\n\n      return false;\n    };\n  }\n\n  function elementMatcher(matchers) {\n    return matchers.length > 1 ? function (elem, context, xml) {\n      var i = matchers.length;\n\n      while (i--) {\n        if (!matchers[i](elem, context, xml)) {\n          return false;\n        }\n      }\n\n      return true;\n    } : matchers[0];\n  }\n\n  function multipleContexts(selector, contexts, results) {\n    var i = 0,\n        len = contexts.length;\n\n    for (; i < len; i++) {\n      Sizzle(selector, contexts[i], results);\n    }\n\n    return results;\n  }\n\n  function condense(unmatched, map, filter, context, xml) {\n    var elem,\n        newUnmatched = [],\n        i = 0,\n        len = unmatched.length,\n        mapped = map != null;\n\n    for (; i < len; i++) {\n      if (elem = unmatched[i]) {\n        if (!filter || filter(elem, context, xml)) {\n          newUnmatched.push(elem);\n\n          if (mapped) {\n            map.push(i);\n          }\n        }\n      }\n    }\n\n    return newUnmatched;\n  }\n\n  function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n    if (postFilter && !postFilter[expando]) {\n      postFilter = setMatcher(postFilter);\n    }\n\n    if (postFinder && !postFinder[expando]) {\n      postFinder = setMatcher(postFinder, postSelector);\n    }\n\n    return markFunction(function (seed, results, context, xml) {\n      var temp,\n          i,\n          elem,\n          preMap = [],\n          postMap = [],\n          preexisting = results.length,\n          // Get initial elements from seed or context\n      elems = seed || multipleContexts(selector || \"*\", context.nodeType ? [context] : context, []),\n          // Prefilter to get matcher input, preserving a map for seed-results synchronization\n      matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems,\n          matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n      postFinder || (seed ? preFilter : preexisting || postFilter) ? // ...intermediate processing is necessary\n      [] : // ...otherwise use results directly\n      results : matcherIn; // Find primary matches\n\n      if (matcher) {\n        matcher(matcherIn, matcherOut, context, xml);\n      } // Apply postFilter\n\n\n      if (postFilter) {\n        temp = condense(matcherOut, postMap);\n        postFilter(temp, [], context, xml); // Un-match failing elements by moving them back to matcherIn\n\n        i = temp.length;\n\n        while (i--) {\n          if (elem = temp[i]) {\n            matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n          }\n        }\n      }\n\n      if (seed) {\n        if (postFinder || preFilter) {\n          if (postFinder) {\n            // Get the final matcherOut by condensing this intermediate into postFinder contexts\n            temp = [];\n            i = matcherOut.length;\n\n            while (i--) {\n              if (elem = matcherOut[i]) {\n                // Restore matcherIn since elem is not yet a final match\n                temp.push(matcherIn[i] = elem);\n              }\n            }\n\n            postFinder(null, matcherOut = [], temp, xml);\n          } // Move matched elements from seed to results to keep them synchronized\n\n\n          i = matcherOut.length;\n\n          while (i--) {\n            if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {\n              seed[temp] = !(results[temp] = elem);\n            }\n          }\n        } // Add elements to results, through postFinder if defined\n\n      } else {\n        matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n\n        if (postFinder) {\n          postFinder(null, results, matcherOut, xml);\n        } else {\n          push.apply(results, matcherOut);\n        }\n      }\n    });\n  }\n\n  function matcherFromTokens(tokens) {\n    var checkContext,\n        matcher,\n        j,\n        len = tokens.length,\n        leadingRelative = Expr.relative[tokens[0].type],\n        implicitRelative = leadingRelative || Expr.relative[\" \"],\n        i = leadingRelative ? 1 : 0,\n        // The foundational matcher ensures that elements are reachable from top-level context(s)\n    matchContext = addCombinator(function (elem) {\n      return elem === checkContext;\n    }, implicitRelative, true),\n        matchAnyContext = addCombinator(function (elem) {\n      return indexOf(checkContext, elem) > -1;\n    }, implicitRelative, true),\n        matchers = [function (elem, context, xml) {\n      var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); // Avoid hanging onto element (issue #299)\n\n      checkContext = null;\n      return ret;\n    }];\n\n    for (; i < len; i++) {\n      if (matcher = Expr.relative[tokens[i].type]) {\n        matchers = [addCombinator(elementMatcher(matchers), matcher)];\n      } else {\n        matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); // Return special upon seeing a positional matcher\n\n        if (matcher[expando]) {\n          // Find the next relative operator (if any) for proper handling\n          j = ++i;\n\n          for (; j < len; j++) {\n            if (Expr.relative[tokens[j].type]) {\n              break;\n            }\n          }\n\n          return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*`\n          tokens.slice(0, i - 1).concat({\n            value: tokens[i - 2].type === \" \" ? \"*\" : \"\"\n          })).replace(rtrim, \"$1\"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n        }\n\n        matchers.push(matcher);\n      }\n    }\n\n    return elementMatcher(matchers);\n  }\n\n  function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n    var bySet = setMatchers.length > 0,\n        byElement = elementMatchers.length > 0,\n        superMatcher = function superMatcher(seed, context, xml, results, outermost) {\n      var elem,\n          j,\n          matcher,\n          matchedCount = 0,\n          i = \"0\",\n          unmatched = seed && [],\n          setMatched = [],\n          contextBackup = outermostContext,\n          // We must always have either seed elements or outermost context\n      elems = seed || byElement && Expr.find[\"TAG\"](\"*\", outermost),\n          // Use integer dirruns iff this is the outermost matcher\n      dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1,\n          len = elems.length;\n\n      if (outermost) {\n        outermostContext = context === document || context || outermost;\n      } // Add elements passing elementMatchers directly to results\n      // Support: IE<9, Safari\n      // Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\n\n      for (; i !== len && (elem = elems[i]) != null; i++) {\n        if (byElement && elem) {\n          j = 0;\n\n          if (!context && elem.ownerDocument !== document) {\n            setDocument(elem);\n            xml = !documentIsHTML;\n          }\n\n          while (matcher = elementMatchers[j++]) {\n            if (matcher(elem, context || document, xml)) {\n              results.push(elem);\n              break;\n            }\n          }\n\n          if (outermost) {\n            dirruns = dirrunsUnique;\n          }\n        } // Track unmatched elements for set filters\n\n\n        if (bySet) {\n          // They will have gone through all possible matchers\n          if (elem = !matcher && elem) {\n            matchedCount--;\n          } // Lengthen the array for every element, matched or not\n\n\n          if (seed) {\n            unmatched.push(elem);\n          }\n        }\n      } // `i` is now the count of elements visited above, and adding it to `matchedCount`\n      // makes the latter nonnegative.\n\n\n      matchedCount += i; // Apply set filters to unmatched elements\n      // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n      // equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n      // no element matchers and no seed.\n      // Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n      // case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n      // numerically zero.\n\n      if (bySet && i !== matchedCount) {\n        j = 0;\n\n        while (matcher = setMatchers[j++]) {\n          matcher(unmatched, setMatched, context, xml);\n        }\n\n        if (seed) {\n          // Reintegrate element matches to eliminate the need for sorting\n          if (matchedCount > 0) {\n            while (i--) {\n              if (!(unmatched[i] || setMatched[i])) {\n                setMatched[i] = pop.call(results);\n              }\n            }\n          } // Discard index placeholder values to get only actual matches\n\n\n          setMatched = condense(setMatched);\n        } // Add matches to results\n\n\n        push.apply(results, setMatched); // Seedless set matches succeeding multiple successful matchers stipulate sorting\n\n        if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n          Sizzle.uniqueSort(results);\n        }\n      } // Override manipulation of globals by nested matchers\n\n\n      if (outermost) {\n        dirruns = dirrunsUnique;\n        outermostContext = contextBackup;\n      }\n\n      return unmatched;\n    };\n\n    return bySet ? markFunction(superMatcher) : superMatcher;\n  }\n\n  compile = Sizzle.compile = function (selector, match\n  /* Internal Use Only */\n  ) {\n    var i,\n        setMatchers = [],\n        elementMatchers = [],\n        cached = compilerCache[selector + \" \"];\n\n    if (!cached) {\n      // Generate a function of recursive functions that can be used to check each element\n      if (!match) {\n        match = tokenize(selector);\n      }\n\n      i = match.length;\n\n      while (i--) {\n        cached = matcherFromTokens(match[i]);\n\n        if (cached[expando]) {\n          setMatchers.push(cached);\n        } else {\n          elementMatchers.push(cached);\n        }\n      } // Cache the compiled function\n\n\n      cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); // Save selector and tokenization\n\n      cached.selector = selector;\n    }\n\n    return cached;\n  };\n  /**\n   * A low-level selection function that works with Sizzle's compiled\n   *  selector functions\n   * @param {String|Function} selector A selector or a pre-compiled\n   *  selector function built with Sizzle.compile\n   * @param {Element} context\n   * @param {Array} [results]\n   * @param {Array} [seed] A set of elements to match against\n   */\n\n\n  select = Sizzle.select = function (selector, context, results, seed) {\n    var i,\n        tokens,\n        token,\n        type,\n        find,\n        compiled = typeof selector === \"function\" && selector,\n        match = !seed && tokenize(selector = compiled.selector || selector);\n    results = results || []; // Try to minimize operations if there is only one selector in the list and no seed\n    // (the latter of which guarantees us context)\n\n    if (match.length === 1) {\n      // Reduce context if the leading compound selector is an ID\n      tokens = match[0] = match[0].slice(0);\n\n      if (tokens.length > 2 && (token = tokens[0]).type === \"ID\" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n        context = (Expr.find[\"ID\"](token.matches[0].replace(runescape, funescape), context) || [])[0];\n\n        if (!context) {\n          return results; // Precompiled matchers will still verify ancestry, so step up a level\n        } else if (compiled) {\n          context = context.parentNode;\n        }\n\n        selector = selector.slice(tokens.shift().value.length);\n      } // Fetch a seed set for right-to-left matching\n\n\n      i = matchExpr[\"needsContext\"].test(selector) ? 0 : tokens.length;\n\n      while (i--) {\n        token = tokens[i]; // Abort if we hit a combinator\n\n        if (Expr.relative[type = token.type]) {\n          break;\n        }\n\n        if (find = Expr.find[type]) {\n          // Search, expanding context for leading sibling combinators\n          if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n            // If seed is empty or no tokens remain, we can return early\n            tokens.splice(i, 1);\n            selector = seed.length && toSelector(tokens);\n\n            if (!selector) {\n              push.apply(results, seed);\n              return results;\n            }\n\n            break;\n          }\n        }\n      }\n    } // Compile and execute a filtering function if one is not provided\n    // Provide `match` to avoid retokenization if we modified the selector above\n\n\n    (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);\n    return results;\n  }; // One-time assignments\n  // Sort stability\n\n\n  support.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando; // Support: Chrome 14-35+\n  // Always assume duplicates if they aren't passed to the comparison function\n\n  support.detectDuplicates = !!hasDuplicate; // Initialize against the default document\n\n  setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n  // Detached nodes confoundingly follow *each other*\n\n  support.sortDetached = assert(function (el) {\n    // Should return 1, but returns 4 (following)\n    return el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n  }); // Support: IE<8\n  // Prevent attribute/property \"interpolation\"\n  // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\n\n  if (!assert(function (el) {\n    el.innerHTML = \"<a href='#'></a>\";\n    return el.firstChild.getAttribute(\"href\") === \"#\";\n  })) {\n    addHandle(\"type|href|height|width\", function (elem, name, isXML) {\n      if (!isXML) {\n        return elem.getAttribute(name, name.toLowerCase() === \"type\" ? 1 : 2);\n      }\n    });\n  } // Support: IE<9\n  // Use defaultValue in place of getAttribute(\"value\")\n\n\n  if (!support.attributes || !assert(function (el) {\n    el.innerHTML = \"<input/>\";\n    el.firstChild.setAttribute(\"value\", \"\");\n    return el.firstChild.getAttribute(\"value\") === \"\";\n  })) {\n    addHandle(\"value\", function (elem, name, isXML) {\n      if (!isXML && elem.nodeName.toLowerCase() === \"input\") {\n        return elem.defaultValue;\n      }\n    });\n  } // Support: IE<9\n  // Use getAttributeNode to fetch booleans when getAttribute lies\n\n\n  if (!assert(function (el) {\n    return el.getAttribute(\"disabled\") == null;\n  })) {\n    addHandle(booleans, function (elem, name, isXML) {\n      var val;\n\n      if (!isXML) {\n        return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n      }\n    });\n  } // EXPOSE\n\n\n  var _sizzle = window.Sizzle;\n\n  Sizzle.noConflict = function () {\n    if (window.Sizzle === Sizzle) {\n      window.Sizzle = _sizzle;\n    }\n\n    return Sizzle;\n  };\n\n  if (typeof define === \"function\" && define.amd) {\n    define(function () {\n      return Sizzle;\n    }); // Sizzle requires that there be a global window in Common-JS like environments\n  } else if (typeof module !== \"undefined\" && module.exports) {\n    module.exports = Sizzle;\n  } else {\n    window.Sizzle = Sizzle;\n  } // EXPOSE\n\n})(window);","define([\"../../core\"], function (jQuery) {\n  \"use strict\";\n\n  return function (elem, dir, until) {\n    var matched = [],\n        truncate = until !== undefined;\n\n    while ((elem = elem[dir]) && elem.nodeType !== 9) {\n      if (elem.nodeType === 1) {\n        if (truncate && jQuery(elem).is(until)) {\n          break;\n        }\n\n        matched.push(elem);\n      }\n    }\n\n    return matched;\n  };\n});","define(function () {\n  \"use strict\";\n\n  return function (n, elem) {\n    var matched = [];\n\n    for (; n; n = n.nextSibling) {\n      if (n.nodeType === 1 && n !== elem) {\n        matched.push(n);\n      }\n    }\n\n    return matched;\n  };\n});","define([\"../core\", \"../deferred\"], function (jQuery) {\n  \"use strict\"; // These usually indicate a programmer mistake during development,\n  // warn about them ASAP rather than swallowing them by default.\n\n  var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n  jQuery.Deferred.exceptionHook = function (error, stack) {\n    // Support: IE 8 - 9 only\n    // Console exists when dev tools are open, which can happen at any time\n    if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n      window.console.warn(\"jQuery.Deferred exception: \" + error.message, error.stack, stack);\n    }\n  };\n});","define([\"../core\"], function (jQuery) {\n  \"use strict\";\n\n  jQuery.readyException = function (error) {\n    window.setTimeout(function () {\n      throw error;\n    });\n  };\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"./core\", \"./core/access\", \"./core/camelCase\", \"./data/var/dataPriv\", \"./data/var/dataUser\"], function (jQuery, access, camelCase, dataPriv, dataUser) {\n  \"use strict\"; //\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\n  var rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n      rmultiDash = /[A-Z]/g;\n\n  function getData(data) {\n    if (data === \"true\") {\n      return true;\n    }\n\n    if (data === \"false\") {\n      return false;\n    }\n\n    if (data === \"null\") {\n      return null;\n    } // Only convert to a number if it doesn't change the string\n\n\n    if (data === +data + \"\") {\n      return +data;\n    }\n\n    if (rbrace.test(data)) {\n      return JSON.parse(data);\n    }\n\n    return data;\n  }\n\n  function dataAttr(elem, key, data) {\n    var name; // If nothing was found internally, try to fetch any\n    // data from the HTML5 data-* attribute\n\n    if (data === undefined && elem.nodeType === 1) {\n      name = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n      data = elem.getAttribute(name);\n\n      if (typeof data === \"string\") {\n        try {\n          data = getData(data);\n        } catch (e) {} // Make sure we set the data so it isn't changed later\n\n\n        dataUser.set(elem, key, data);\n      } else {\n        data = undefined;\n      }\n    }\n\n    return data;\n  }\n\n  jQuery.extend({\n    hasData: function hasData(elem) {\n      return dataUser.hasData(elem) || dataPriv.hasData(elem);\n    },\n    data: function data(elem, name, _data) {\n      return dataUser.access(elem, name, _data);\n    },\n    removeData: function removeData(elem, name) {\n      dataUser.remove(elem, name);\n    },\n    // TODO: Now that all calls to _data and _removeData have been replaced\n    // with direct calls to dataPriv methods, these can be deprecated.\n    _data: function _data(elem, name, data) {\n      return dataPriv.access(elem, name, data);\n    },\n    _removeData: function _removeData(elem, name) {\n      dataPriv.remove(elem, name);\n    }\n  });\n  jQuery.fn.extend({\n    data: function data(key, value) {\n      var i,\n          name,\n          data,\n          elem = this[0],\n          attrs = elem && elem.attributes; // Gets all values\n\n      if (key === undefined) {\n        if (this.length) {\n          data = dataUser.get(elem);\n\n          if (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n            i = attrs.length;\n\n            while (i--) {\n              // Support: IE 11 only\n              // The attrs elements can be null (#14894)\n              if (attrs[i]) {\n                name = attrs[i].name;\n\n                if (name.indexOf(\"data-\") === 0) {\n                  name = camelCase(name.slice(5));\n                  dataAttr(elem, name, data[name]);\n                }\n              }\n            }\n\n            dataPriv.set(elem, \"hasDataAttrs\", true);\n          }\n        }\n\n        return data;\n      } // Sets multiple values\n\n\n      if (_typeof(key) === \"object\") {\n        return this.each(function () {\n          dataUser.set(this, key);\n        });\n      }\n\n      return access(this, function (value) {\n        var data; // The calling jQuery object (element matches) is not empty\n        // (and therefore has an element appears at this[ 0 ]) and the\n        // `value` parameter was not undefined. An empty jQuery object\n        // will result in `undefined` for elem = this[ 0 ] which will\n        // throw an exception if an attempt to read a data cache is made.\n\n        if (elem && value === undefined) {\n          // Attempt to get data from the cache\n          // The key will always be camelCased in Data\n          data = dataUser.get(elem, key);\n\n          if (data !== undefined) {\n            return data;\n          } // Attempt to \"discover\" the data in\n          // HTML5 custom data-* attrs\n\n\n          data = dataAttr(elem, key);\n\n          if (data !== undefined) {\n            return data;\n          } // We tried really hard, but the data doesn't exist.\n\n\n          return;\n        } // Set the data...\n\n\n        this.each(function () {\n          // We always store the camelCased key\n          dataUser.set(this, key, value);\n        });\n      }, null, value, arguments.length > 1, null, true);\n    },\n    removeData: function removeData(key) {\n      return this.each(function () {\n        dataUser.remove(this, key);\n      });\n    }\n  });\n  return jQuery;\n});","define([\"../core\", \"../queue\", \"../effects\" // Delay is optional because of this dependency\n], function (jQuery) {\n  \"use strict\"; // Based off of the plugin by Clint Helfers, with permission.\n  // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\n\n  jQuery.fn.delay = function (time, type) {\n    time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n    type = type || \"fx\";\n    return this.queue(type, function (next, hooks) {\n      var timeout = window.setTimeout(next, time);\n\n      hooks.stop = function () {\n        window.clearTimeout(timeout);\n      };\n    });\n  };\n\n  return jQuery.fn.delay;\n});","define([\"../core\", \"../data/var/dataPriv\", \"../css/var/isHiddenWithinTree\"], function (jQuery, dataPriv, isHiddenWithinTree) {\n  \"use strict\";\n\n  var defaultDisplayMap = {};\n\n  function getDefaultDisplay(elem) {\n    var temp,\n        doc = elem.ownerDocument,\n        nodeName = elem.nodeName,\n        display = defaultDisplayMap[nodeName];\n\n    if (display) {\n      return display;\n    }\n\n    temp = doc.body.appendChild(doc.createElement(nodeName));\n    display = jQuery.css(temp, \"display\");\n    temp.parentNode.removeChild(temp);\n\n    if (display === \"none\") {\n      display = \"block\";\n    }\n\n    defaultDisplayMap[nodeName] = display;\n    return display;\n  }\n\n  function showHide(elements, show) {\n    var display,\n        elem,\n        values = [],\n        index = 0,\n        length = elements.length; // Determine new display value for elements that need to change\n\n    for (; index < length; index++) {\n      elem = elements[index];\n\n      if (!elem.style) {\n        continue;\n      }\n\n      display = elem.style.display;\n\n      if (show) {\n        // Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n        // check is required in this first loop unless we have a nonempty display value (either\n        // inline or about-to-be-restored)\n        if (display === \"none\") {\n          values[index] = dataPriv.get(elem, \"display\") || null;\n\n          if (!values[index]) {\n            elem.style.display = \"\";\n          }\n        }\n\n        if (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n          values[index] = getDefaultDisplay(elem);\n        }\n      } else {\n        if (display !== \"none\") {\n          values[index] = \"none\"; // Remember what we're overwriting\n\n          dataPriv.set(elem, \"display\", display);\n        }\n      }\n    } // Set the display of the elements in a second loop to avoid constant reflow\n\n\n    for (index = 0; index < length; index++) {\n      if (values[index] != null) {\n        elements[index].style.display = values[index];\n      }\n    }\n\n    return elements;\n  }\n\n  jQuery.fn.extend({\n    show: function show() {\n      return showHide(this, true);\n    },\n    hide: function hide() {\n      return showHide(this);\n    },\n    toggle: function toggle(state) {\n      if (typeof state === \"boolean\") {\n        return state ? this.show() : this.hide();\n      }\n\n      return this.each(function () {\n        if (isHiddenWithinTree(this)) {\n          jQuery(this).show();\n        } else {\n          jQuery(this).hide();\n        }\n      });\n    }\n  });\n  return showHide;\n});","define([\"../var/document\", \"../var/support\"], function (document, support) {\n  \"use strict\";\n\n  (function () {\n    var fragment = document.createDocumentFragment(),\n        div = fragment.appendChild(document.createElement(\"div\")),\n        input = document.createElement(\"input\"); // Support: Android 4.0 - 4.3 only\n    // Check state lost if the name is set (#11217)\n    // Support: Windows Web Apps (WWA)\n    // `name` and `type` must use .setAttribute for WWA (#14901)\n\n    input.setAttribute(\"type\", \"radio\");\n    input.setAttribute(\"checked\", \"checked\");\n    input.setAttribute(\"name\", \"t\");\n    div.appendChild(input); // Support: Android <=4.1 only\n    // Older WebKit doesn't clone checked state correctly in fragments\n\n    support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; // Support: IE <=11 only\n    // Make sure textarea (and checkbox) defaultValue is properly cloned\n\n    div.innerHTML = \"<textarea>x</textarea>\";\n    support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n  })();\n\n  return support;\n});","define([\"./cssExpand\"], function (cssExpand) {\n  \"use strict\";\n\n  return new RegExp(cssExpand.join(\"|\"), \"i\");\n});","define([\"../core\", \"../css/finalPropName\", \"../css\"], function (jQuery, finalPropName) {\n  \"use strict\";\n\n  function Tween(elem, options, prop, end, easing) {\n    return new Tween.prototype.init(elem, options, prop, end, easing);\n  }\n\n  jQuery.Tween = Tween;\n  Tween.prototype = {\n    constructor: Tween,\n    init: function init(elem, options, prop, end, easing, unit) {\n      this.elem = elem;\n      this.prop = prop;\n      this.easing = easing || jQuery.easing._default;\n      this.options = options;\n      this.start = this.now = this.cur();\n      this.end = end;\n      this.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n    },\n    cur: function cur() {\n      var hooks = Tween.propHooks[this.prop];\n      return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);\n    },\n    run: function run(percent) {\n      var eased,\n          hooks = Tween.propHooks[this.prop];\n\n      if (this.options.duration) {\n        this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);\n      } else {\n        this.pos = eased = percent;\n      }\n\n      this.now = (this.end - this.start) * eased + this.start;\n\n      if (this.options.step) {\n        this.options.step.call(this.elem, this.now, this);\n      }\n\n      if (hooks && hooks.set) {\n        hooks.set(this);\n      } else {\n        Tween.propHooks._default.set(this);\n      }\n\n      return this;\n    }\n  };\n  Tween.prototype.init.prototype = Tween.prototype;\n  Tween.propHooks = {\n    _default: {\n      get: function get(tween) {\n        var result; // Use a property on the element directly when it is not a DOM element,\n        // or when there is no matching style property that exists.\n\n        if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n          return tween.elem[tween.prop];\n        } // Passing an empty string as a 3rd parameter to .css will automatically\n        // attempt a parseFloat and fallback to a string if the parse fails.\n        // Simple values such as \"10px\" are parsed to Float;\n        // complex values such as \"rotate(1rad)\" are returned as-is.\n\n\n        result = jQuery.css(tween.elem, tween.prop, \"\"); // Empty strings, null, undefined and \"auto\" are converted to 0.\n\n        return !result || result === \"auto\" ? 0 : result;\n      },\n      set: function set(tween) {\n        // Use step hook for back compat.\n        // Use cssHook if its there.\n        // Use .style if available and use plain properties where available.\n        if (jQuery.fx.step[tween.prop]) {\n          jQuery.fx.step[tween.prop](tween);\n        } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {\n          jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n        } else {\n          tween.elem[tween.prop] = tween.now;\n        }\n      }\n    }\n  }; // Support: IE <=9 only\n  // Panic based approach to setting things on disconnected nodes\n\n  Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n    set: function set(tween) {\n      if (tween.elem.nodeType && tween.elem.parentNode) {\n        tween.elem[tween.prop] = tween.now;\n      }\n    }\n  };\n  jQuery.easing = {\n    linear: function linear(p) {\n      return p;\n    },\n    swing: function swing(p) {\n      return 0.5 - Math.cos(p * Math.PI) / 2;\n    },\n    _default: \"swing\"\n  };\n  jQuery.fx = Tween.prototype.init; // Back compat <1.8 extension point\n\n  jQuery.fx.step = {};\n});","define([\"./core\", \"./attributes/attr\", \"./attributes/prop\", \"./attributes/classes\", \"./attributes/val\"], function (jQuery) {\n  \"use strict\"; // Return jQuery for attributes-only inclusion\n\n  return jQuery;\n});","define([\"../core\", \"../core/access\", \"../core/nodeName\", \"./support\", \"../var/rnothtmlwhite\", \"../selector\"], function (jQuery, access, nodeName, support, rnothtmlwhite) {\n  \"use strict\";\n\n  var boolHook,\n      attrHandle = jQuery.expr.attrHandle;\n  jQuery.fn.extend({\n    attr: function attr(name, value) {\n      return access(this, jQuery.attr, name, value, arguments.length > 1);\n    },\n    removeAttr: function removeAttr(name) {\n      return this.each(function () {\n        jQuery.removeAttr(this, name);\n      });\n    }\n  });\n  jQuery.extend({\n    attr: function attr(elem, name, value) {\n      var ret,\n          hooks,\n          nType = elem.nodeType; // Don't get/set attributes on text, comment and attribute nodes\n\n      if (nType === 3 || nType === 8 || nType === 2) {\n        return;\n      } // Fallback to prop when attributes are not supported\n\n\n      if (typeof elem.getAttribute === \"undefined\") {\n        return jQuery.prop(elem, name, value);\n      } // Attribute hooks are determined by the lowercase version\n      // Grab necessary hook if one is defined\n\n\n      if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n        hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n      }\n\n      if (value !== undefined) {\n        if (value === null) {\n          jQuery.removeAttr(elem, name);\n          return;\n        }\n\n        if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n          return ret;\n        }\n\n        elem.setAttribute(name, value + \"\");\n        return value;\n      }\n\n      if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n        return ret;\n      }\n\n      ret = jQuery.find.attr(elem, name); // Non-existent attributes return null, we normalize to undefined\n\n      return ret == null ? undefined : ret;\n    },\n    attrHooks: {\n      type: {\n        set: function set(elem, value) {\n          if (!support.radioValue && value === \"radio\" && nodeName(elem, \"input\")) {\n            var val = elem.value;\n            elem.setAttribute(\"type\", value);\n\n            if (val) {\n              elem.value = val;\n            }\n\n            return value;\n          }\n        }\n      }\n    },\n    removeAttr: function removeAttr(elem, value) {\n      var name,\n          i = 0,\n          // Attribute names can contain non-HTML whitespace characters\n      // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n      attrNames = value && value.match(rnothtmlwhite);\n\n      if (attrNames && elem.nodeType === 1) {\n        while (name = attrNames[i++]) {\n          elem.removeAttribute(name);\n        }\n      }\n    }\n  }); // Hooks for boolean attributes\n\n  boolHook = {\n    set: function set(elem, value, name) {\n      if (value === false) {\n        // Remove boolean attributes when set to false\n        jQuery.removeAttr(elem, name);\n      } else {\n        elem.setAttribute(name, name);\n      }\n\n      return name;\n    }\n  };\n  jQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (i, name) {\n    var getter = attrHandle[name] || jQuery.find.attr;\n\n    attrHandle[name] = function (elem, name, isXML) {\n      var ret,\n          handle,\n          lowercaseName = name.toLowerCase();\n\n      if (!isXML) {\n        // Avoid an infinite loop by temporarily removing this function from the getter\n        handle = attrHandle[lowercaseName];\n        attrHandle[lowercaseName] = ret;\n        ret = getter(elem, name, isXML) != null ? lowercaseName : null;\n        attrHandle[lowercaseName] = handle;\n      }\n\n      return ret;\n    };\n  });\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"../core\", \"../core/stripAndCollapse\", \"../var/isFunction\", \"../var/rnothtmlwhite\", \"../data/var/dataPriv\", \"../core/init\"], function (jQuery, stripAndCollapse, isFunction, rnothtmlwhite, dataPriv) {\n  \"use strict\";\n\n  function getClass(elem) {\n    return elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n  }\n\n  function classesToArray(value) {\n    if (Array.isArray(value)) {\n      return value;\n    }\n\n    if (typeof value === \"string\") {\n      return value.match(rnothtmlwhite) || [];\n    }\n\n    return [];\n  }\n\n  jQuery.fn.extend({\n    addClass: function addClass(value) {\n      var classes,\n          elem,\n          cur,\n          curValue,\n          clazz,\n          j,\n          finalValue,\n          i = 0;\n\n      if (isFunction(value)) {\n        return this.each(function (j) {\n          jQuery(this).addClass(value.call(this, j, getClass(this)));\n        });\n      }\n\n      classes = classesToArray(value);\n\n      if (classes.length) {\n        while (elem = this[i++]) {\n          curValue = getClass(elem);\n          cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n          if (cur) {\n            j = 0;\n\n            while (clazz = classes[j++]) {\n              if (cur.indexOf(\" \" + clazz + \" \") < 0) {\n                cur += clazz + \" \";\n              }\n            } // Only assign if different to avoid unneeded rendering.\n\n\n            finalValue = stripAndCollapse(cur);\n\n            if (curValue !== finalValue) {\n              elem.setAttribute(\"class\", finalValue);\n            }\n          }\n        }\n      }\n\n      return this;\n    },\n    removeClass: function removeClass(value) {\n      var classes,\n          elem,\n          cur,\n          curValue,\n          clazz,\n          j,\n          finalValue,\n          i = 0;\n\n      if (isFunction(value)) {\n        return this.each(function (j) {\n          jQuery(this).removeClass(value.call(this, j, getClass(this)));\n        });\n      }\n\n      if (!arguments.length) {\n        return this.attr(\"class\", \"\");\n      }\n\n      classes = classesToArray(value);\n\n      if (classes.length) {\n        while (elem = this[i++]) {\n          curValue = getClass(elem); // This expression is here for better compressibility (see addClass)\n\n          cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n          if (cur) {\n            j = 0;\n\n            while (clazz = classes[j++]) {\n              // Remove *all* instances\n              while (cur.indexOf(\" \" + clazz + \" \") > -1) {\n                cur = cur.replace(\" \" + clazz + \" \", \" \");\n              }\n            } // Only assign if different to avoid unneeded rendering.\n\n\n            finalValue = stripAndCollapse(cur);\n\n            if (curValue !== finalValue) {\n              elem.setAttribute(\"class\", finalValue);\n            }\n          }\n        }\n      }\n\n      return this;\n    },\n    toggleClass: function toggleClass(value, stateVal) {\n      var type = _typeof(value),\n          isValidValue = type === \"string\" || Array.isArray(value);\n\n      if (typeof stateVal === \"boolean\" && isValidValue) {\n        return stateVal ? this.addClass(value) : this.removeClass(value);\n      }\n\n      if (isFunction(value)) {\n        return this.each(function (i) {\n          jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);\n        });\n      }\n\n      return this.each(function () {\n        var className, i, self, classNames;\n\n        if (isValidValue) {\n          // Toggle individual class names\n          i = 0;\n          self = jQuery(this);\n          classNames = classesToArray(value);\n\n          while (className = classNames[i++]) {\n            // Check each className given, space separated list\n            if (self.hasClass(className)) {\n              self.removeClass(className);\n            } else {\n              self.addClass(className);\n            }\n          } // Toggle whole class name\n\n        } else if (value === undefined || type === \"boolean\") {\n          className = getClass(this);\n\n          if (className) {\n            // Store className if set\n            dataPriv.set(this, \"__className__\", className);\n          } // If the element has a class name or if we're passed `false`,\n          // then remove the whole classname (if there was one, the above saved it).\n          // Otherwise bring back whatever was previously saved (if anything),\n          // falling back to the empty string if nothing was stored.\n\n\n          if (this.setAttribute) {\n            this.setAttribute(\"class\", className || value === false ? \"\" : dataPriv.get(this, \"__className__\") || \"\");\n          }\n        }\n      });\n    },\n    hasClass: function hasClass(selector) {\n      var className,\n          elem,\n          i = 0;\n      className = \" \" + selector + \" \";\n\n      while (elem = this[i++]) {\n        if (elem.nodeType === 1 && (\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n  });\n});","define([\"../core\", \"../core/stripAndCollapse\", \"./support\", \"../core/nodeName\", \"../var/isFunction\", \"../core/init\"], function (jQuery, stripAndCollapse, support, nodeName, isFunction) {\n  \"use strict\";\n\n  var rreturn = /\\r/g;\n  jQuery.fn.extend({\n    val: function val(value) {\n      var hooks,\n          ret,\n          valueIsFunction,\n          elem = this[0];\n\n      if (!arguments.length) {\n        if (elem) {\n          hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];\n\n          if (hooks && \"get\" in hooks && (ret = hooks.get(elem, \"value\")) !== undefined) {\n            return ret;\n          }\n\n          ret = elem.value; // Handle most common string cases\n\n          if (typeof ret === \"string\") {\n            return ret.replace(rreturn, \"\");\n          } // Handle cases where value is null/undef or number\n\n\n          return ret == null ? \"\" : ret;\n        }\n\n        return;\n      }\n\n      valueIsFunction = isFunction(value);\n      return this.each(function (i) {\n        var val;\n\n        if (this.nodeType !== 1) {\n          return;\n        }\n\n        if (valueIsFunction) {\n          val = value.call(this, i, jQuery(this).val());\n        } else {\n          val = value;\n        } // Treat null/undefined as \"\"; convert numbers to string\n\n\n        if (val == null) {\n          val = \"\";\n        } else if (typeof val === \"number\") {\n          val += \"\";\n        } else if (Array.isArray(val)) {\n          val = jQuery.map(val, function (value) {\n            return value == null ? \"\" : value + \"\";\n          });\n        }\n\n        hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; // If set returns undefined, fall back to normal setting\n\n        if (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n          this.value = val;\n        }\n      });\n    }\n  });\n  jQuery.extend({\n    valHooks: {\n      option: {\n        get: function get(elem) {\n          var val = jQuery.find.attr(elem, \"value\");\n          return val != null ? val : // Support: IE <=10 - 11 only\n          // option.text throws exceptions (#14686, #14858)\n          // Strip and collapse whitespace\n          // https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n          stripAndCollapse(jQuery.text(elem));\n        }\n      },\n      select: {\n        get: function get(elem) {\n          var value,\n              option,\n              i,\n              options = elem.options,\n              index = elem.selectedIndex,\n              one = elem.type === \"select-one\",\n              values = one ? null : [],\n              max = one ? index + 1 : options.length;\n\n          if (index < 0) {\n            i = max;\n          } else {\n            i = one ? index : 0;\n          } // Loop through all the selected options\n\n\n          for (; i < max; i++) {\n            option = options[i]; // Support: IE <=9 only\n            // IE8-9 doesn't update selected after form reset (#2551)\n\n            if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup\n            !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, \"optgroup\"))) {\n              // Get the specific value for the option\n              value = jQuery(option).val(); // We don't need an array for one selects\n\n              if (one) {\n                return value;\n              } // Multi-Selects return an array\n\n\n              values.push(value);\n            }\n          }\n\n          return values;\n        },\n        set: function set(elem, value) {\n          var optionSet,\n              option,\n              options = elem.options,\n              values = jQuery.makeArray(value),\n              i = options.length;\n\n          while (i--) {\n            option = options[i];\n            /* eslint-disable no-cond-assign */\n\n            if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {\n              optionSet = true;\n            }\n            /* eslint-enable no-cond-assign */\n\n          } // Force browsers to behave consistently when non-matching value is set\n\n\n          if (!optionSet) {\n            elem.selectedIndex = -1;\n          }\n\n          return values;\n        }\n      }\n    }\n  }); // Radios and checkboxes getter/setter\n\n  jQuery.each([\"radio\", \"checkbox\"], function () {\n    jQuery.valHooks[this] = {\n      set: function set(elem, value) {\n        if (Array.isArray(value)) {\n          return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;\n        }\n      }\n    };\n\n    if (!support.checkOn) {\n      jQuery.valHooks[this].get = function (elem) {\n        return elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n      };\n    }\n  });\n});","define([\"../core\", \"../data/var/dataPriv\", \"./support\", \"../event\", \"./trigger\"], function (jQuery, dataPriv, support) {\n  \"use strict\"; // Support: Firefox <=44\n  // Firefox doesn't have focus(in | out) events\n  // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n  //\n  // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n  // focus(in | out) events fire after focus & blur events,\n  // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n  // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\n  if (!support.focusin) {\n    jQuery.each({\n      focus: \"focusin\",\n      blur: \"focusout\"\n    }, function (orig, fix) {\n      // Attach a single capturing handler on the document while someone wants focusin/focusout\n      var handler = function handler(event) {\n        jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));\n      };\n\n      jQuery.event.special[fix] = {\n        setup: function setup() {\n          var doc = this.ownerDocument || this,\n              attaches = dataPriv.access(doc, fix);\n\n          if (!attaches) {\n            doc.addEventListener(orig, handler, true);\n          }\n\n          dataPriv.access(doc, fix, (attaches || 0) + 1);\n        },\n        teardown: function teardown() {\n          var doc = this.ownerDocument || this,\n              attaches = dataPriv.access(doc, fix) - 1;\n\n          if (!attaches) {\n            doc.removeEventListener(orig, handler, true);\n            dataPriv.remove(doc, fix);\n          } else {\n            dataPriv.access(doc, fix, attaches);\n          }\n        }\n      };\n    });\n  }\n\n  return jQuery;\n});","define([\"../var/support\"], function (support) {\n  \"use strict\";\n\n  support.focusin = \"onfocusin\" in window;\n  return support;\n});","define([\"../ajax\"], function (jQuery) {\n  \"use strict\";\n\n  jQuery._evalUrl = function (url, options) {\n    return jQuery.ajax({\n      url: url,\n      // Make this explicit, since user can override this through ajaxSetup (#11264)\n      type: \"GET\",\n      dataType: \"script\",\n      cache: true,\n      async: false,\n      global: false,\n      // Only evaluate the response if it is successful (gh-4126)\n      // dataFilter is not invoked for failure responses, so using it instead\n      // of the default converter is kludgy but it works.\n      converters: {\n        \"text script\": function textScript() {}\n      },\n      dataFilter: function dataFilter(response) {\n        jQuery.globalEval(response, options);\n      }\n    });\n  };\n\n  return jQuery._evalUrl;\n});","define(function () {\n  \"use strict\";\n\n  return window.location;\n});","define([\"../core\"], function (jQuery) {\n  \"use strict\"; // Cross-browser xml parsing\n\n  jQuery.parseXML = function (data) {\n    var xml;\n\n    if (!data || typeof data !== \"string\") {\n      return null;\n    } // Support: IE 9 - 11 only\n    // IE throws on parseFromString with invalid input.\n\n\n    try {\n      xml = new window.DOMParser().parseFromString(data, \"text/xml\");\n    } catch (e) {\n      xml = undefined;\n    }\n\n    if (!xml || xml.getElementsByTagName(\"parsererror\").length) {\n      jQuery.error(\"Invalid XML: \" + data);\n    }\n\n    return xml;\n  };\n\n  return jQuery.parseXML;\n});","define([\"./core\", \"./var/isFunction\", \"./core/init\", \"./manipulation\", // clone\n\"./traversing\" // parent, contents\n], function (jQuery, isFunction) {\n  \"use strict\";\n\n  jQuery.fn.extend({\n    wrapAll: function wrapAll(html) {\n      var wrap;\n\n      if (this[0]) {\n        if (isFunction(html)) {\n          html = html.call(this[0]);\n        } // The elements to wrap the target around\n\n\n        wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n        if (this[0].parentNode) {\n          wrap.insertBefore(this[0]);\n        }\n\n        wrap.map(function () {\n          var elem = this;\n\n          while (elem.firstElementChild) {\n            elem = elem.firstElementChild;\n          }\n\n          return elem;\n        }).append(this);\n      }\n\n      return this;\n    },\n    wrapInner: function wrapInner(html) {\n      if (isFunction(html)) {\n        return this.each(function (i) {\n          jQuery(this).wrapInner(html.call(this, i));\n        });\n      }\n\n      return this.each(function () {\n        var self = jQuery(this),\n            contents = self.contents();\n\n        if (contents.length) {\n          contents.wrapAll(html);\n        } else {\n          self.append(html);\n        }\n      });\n    },\n    wrap: function wrap(html) {\n      var htmlIsFunction = isFunction(html);\n      return this.each(function (i) {\n        jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n      });\n    },\n    unwrap: function unwrap(selector) {\n      this.parent(selector).not(\"body\").each(function () {\n        jQuery(this).replaceWith(this.childNodes);\n      });\n      return this;\n    }\n  });\n  return jQuery;\n});","define([\"../core\", \"../selector\"], function (jQuery) {\n  \"use strict\";\n\n  jQuery.expr.pseudos.hidden = function (elem) {\n    return !jQuery.expr.pseudos.visible(elem);\n  };\n\n  jQuery.expr.pseudos.visible = function (elem) {\n    return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n  };\n});","define([\"../core\", \"../var/support\", \"../ajax\"], function (jQuery, support) {\n  \"use strict\";\n\n  jQuery.ajaxSettings.xhr = function () {\n    try {\n      return new window.XMLHttpRequest();\n    } catch (e) {}\n  };\n\n  var xhrSuccessStatus = {\n    // File protocol always yields status code 0, assume 200\n    0: 200,\n    // Support: IE <=9 only\n    // #1450: sometimes IE returns 1223 when it should be 204\n    1223: 204\n  },\n      xhrSupported = jQuery.ajaxSettings.xhr();\n  support.cors = !!xhrSupported && \"withCredentials\" in xhrSupported;\n  support.ajax = xhrSupported = !!xhrSupported;\n  jQuery.ajaxTransport(function (options) {\n    var _callback, errorCallback; // Cross domain only allowed if supported through XMLHttpRequest\n\n\n    if (support.cors || xhrSupported && !options.crossDomain) {\n      return {\n        send: function send(headers, complete) {\n          var i,\n              xhr = options.xhr();\n          xhr.open(options.type, options.url, options.async, options.username, options.password); // Apply custom fields if provided\n\n          if (options.xhrFields) {\n            for (i in options.xhrFields) {\n              xhr[i] = options.xhrFields[i];\n            }\n          } // Override mime type if needed\n\n\n          if (options.mimeType && xhr.overrideMimeType) {\n            xhr.overrideMimeType(options.mimeType);\n          } // X-Requested-With header\n          // For cross-domain requests, seeing as conditions for a preflight are\n          // akin to a jigsaw puzzle, we simply never set it to be sure.\n          // (it can always be set on a per-request basis or even using ajaxSetup)\n          // For same-domain requests, won't change header if already provided.\n\n\n          if (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n            headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n          } // Set headers\n\n\n          for (i in headers) {\n            xhr.setRequestHeader(i, headers[i]);\n          } // Callback\n\n\n          _callback = function callback(type) {\n            return function () {\n              if (_callback) {\n                _callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;\n\n                if (type === \"abort\") {\n                  xhr.abort();\n                } else if (type === \"error\") {\n                  // Support: IE <=9 only\n                  // On a manual native abort, IE9 throws\n                  // errors on any property access that is not readyState\n                  if (typeof xhr.status !== \"number\") {\n                    complete(0, \"error\");\n                  } else {\n                    complete( // File: protocol always yields status 0; see #8605, #14207\n                    xhr.status, xhr.statusText);\n                  }\n                } else {\n                  complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, // Support: IE <=9 only\n                  // IE9 has no XHR2 but throws on binary (trac-11426)\n                  // For XHR2 non-text, let the caller handle it (gh-2498)\n                  (xhr.responseType || \"text\") !== \"text\" || typeof xhr.responseText !== \"string\" ? {\n                    binary: xhr.response\n                  } : {\n                    text: xhr.responseText\n                  }, xhr.getAllResponseHeaders());\n                }\n              }\n            };\n          }; // Listen to events\n\n\n          xhr.onload = _callback();\n          errorCallback = xhr.onerror = xhr.ontimeout = _callback(\"error\"); // Support: IE 9 only\n          // Use onreadystatechange to replace onabort\n          // to handle uncaught aborts\n\n          if (xhr.onabort !== undefined) {\n            xhr.onabort = errorCallback;\n          } else {\n            xhr.onreadystatechange = function () {\n              // Check readyState before timeout as it changes\n              if (xhr.readyState === 4) {\n                // Allow onerror to be called first,\n                // but that will not handle a native abort\n                // Also, save errorCallback to a variable\n                // as xhr.onerror cannot be accessed\n                window.setTimeout(function () {\n                  if (_callback) {\n                    errorCallback();\n                  }\n                });\n              }\n            };\n          } // Create the abort callback\n\n\n          _callback = _callback(\"abort\");\n\n          try {\n            // Do send the request (this may raise an exception)\n            xhr.send(options.hasContent && options.data || null);\n          } catch (e) {\n            // #14683: Only rethrow if this hasn't been notified as an error yet\n            if (_callback) {\n              throw e;\n            }\n          }\n        },\n        abort: function abort() {\n          if (_callback) {\n            _callback();\n          }\n        }\n      };\n    }\n  });\n});","define([\"../core\", \"../var/document\", \"../ajax\"], function (jQuery, document) {\n  \"use strict\"; // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\n  jQuery.ajaxPrefilter(function (s) {\n    if (s.crossDomain) {\n      s.contents.script = false;\n    }\n  }); // Install script dataType\n\n  jQuery.ajaxSetup({\n    accepts: {\n      script: \"text/javascript, application/javascript, \" + \"application/ecmascript, application/x-ecmascript\"\n    },\n    contents: {\n      script: /\\b(?:java|ecma)script\\b/\n    },\n    converters: {\n      \"text script\": function textScript(text) {\n        jQuery.globalEval(text);\n        return text;\n      }\n    }\n  }); // Handle cache's special case and crossDomain\n\n  jQuery.ajaxPrefilter(\"script\", function (s) {\n    if (s.cache === undefined) {\n      s.cache = false;\n    }\n\n    if (s.crossDomain) {\n      s.type = \"GET\";\n    }\n  }); // Bind script tag hack transport\n\n  jQuery.ajaxTransport(\"script\", function (s) {\n    // This transport only deals with cross domain or forced-by-attrs requests\n    if (s.crossDomain || s.scriptAttrs) {\n      var script, _callback;\n\n      return {\n        send: function send(_, complete) {\n          script = jQuery(\"<script>\").attr(s.scriptAttrs || {}).prop({\n            charset: s.scriptCharset,\n            src: s.url\n          }).on(\"load error\", _callback = function callback(evt) {\n            script.remove();\n            _callback = null;\n\n            if (evt) {\n              complete(evt.type === \"error\" ? 404 : 200, evt.type);\n            }\n          }); // Use native DOM manipulation to avoid our domManip AJAX trickery\n\n          document.head.appendChild(script[0]);\n        },\n        abort: function abort() {\n          if (_callback) {\n            _callback();\n          }\n        }\n      };\n    }\n  });\n});","define([\"../core\", \"../var/isFunction\", \"./var/nonce\", \"./var/rquery\", \"../ajax\"], function (jQuery, isFunction, nonce, rquery) {\n  \"use strict\";\n\n  var oldCallbacks = [],\n      rjsonp = /(=)\\?(?=&|$)|\\?\\?/; // Default jsonp settings\n\n  jQuery.ajaxSetup({\n    jsonp: \"callback\",\n    jsonpCallback: function jsonpCallback() {\n      var callback = oldCallbacks.pop() || jQuery.expando + \"_\" + nonce++;\n      this[callback] = true;\n      return callback;\n    }\n  }); // Detect, normalize options and install callbacks for jsonp requests\n\n  jQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n    var callbackName,\n        overwritten,\n        responseContainer,\n        jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? \"url\" : typeof s.data === \"string\" && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0 && rjsonp.test(s.data) && \"data\"); // Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\n    if (jsonProp || s.dataTypes[0] === \"jsonp\") {\n      // Get callback name, remembering preexisting value associated with it\n      callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback; // Insert callback into url or form data\n\n      if (jsonProp) {\n        s[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n      } else if (s.jsonp !== false) {\n        s.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n      } // Use data converter to retrieve json after script execution\n\n\n      s.converters[\"script json\"] = function () {\n        if (!responseContainer) {\n          jQuery.error(callbackName + \" was not called\");\n        }\n\n        return responseContainer[0];\n      }; // Force json dataType\n\n\n      s.dataTypes[0] = \"json\"; // Install callback\n\n      overwritten = window[callbackName];\n\n      window[callbackName] = function () {\n        responseContainer = arguments;\n      }; // Clean-up function (fires after converters)\n\n\n      jqXHR.always(function () {\n        // If previous value didn't exist - remove it\n        if (overwritten === undefined) {\n          jQuery(window).removeProp(callbackName); // Otherwise restore preexisting value\n        } else {\n          window[callbackName] = overwritten;\n        } // Save back as free\n\n\n        if (s[callbackName]) {\n          // Make sure that re-using the options doesn't screw things around\n          s.jsonpCallback = originalSettings.jsonpCallback; // Save the callback name for future use\n\n          oldCallbacks.push(callbackName);\n        } // Call if it was a function and we have a response\n\n\n        if (responseContainer && isFunction(overwritten)) {\n          overwritten(responseContainer[0]);\n        }\n\n        responseContainer = overwritten = undefined;\n      }); // Delegate to script\n\n      return \"script\";\n    }\n  });\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\ndefine([\"../core\", \"../core/stripAndCollapse\", \"../var/isFunction\", \"../core/parseHTML\", \"../ajax\", \"../traversing\", \"../manipulation\", \"../selector\"], function (jQuery, stripAndCollapse, isFunction) {\n  \"use strict\";\n  /**\n   * Load a url into a page\n   */\n\n  jQuery.fn.load = function (url, params, callback) {\n    var selector,\n        type,\n        response,\n        self = this,\n        off = url.indexOf(\" \");\n\n    if (off > -1) {\n      selector = stripAndCollapse(url.slice(off));\n      url = url.slice(0, off);\n    } // If it's a function\n\n\n    if (isFunction(params)) {\n      // We assume that it's the callback\n      callback = params;\n      params = undefined; // Otherwise, build a param string\n    } else if (params && _typeof(params) === \"object\") {\n      type = \"POST\";\n    } // If we have elements to modify, make the request\n\n\n    if (self.length > 0) {\n      jQuery.ajax({\n        url: url,\n        // If \"type\" variable is undefined, then \"GET\" method will be used.\n        // Make value of this field explicit since\n        // user can override it through ajaxSetup method\n        type: type || \"GET\",\n        dataType: \"html\",\n        data: params\n      }).done(function (responseText) {\n        // Save response for use in complete callback\n        response = arguments;\n        self.html(selector ? // If a selector was specified, locate the right elements in a dummy div\n        // Exclude scripts to avoid IE 'Permission Denied' errors\n        jQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) : // Otherwise use the full result\n        responseText); // If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n        // but they are ignored because response was set above.\n        // If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n      }).always(callback && function (jqXHR, status) {\n        self.each(function () {\n          callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n        });\n      });\n    }\n\n    return this;\n  };\n});","define([\"../core\", \"../var/document\", \"./var/rsingleTag\", \"../manipulation/buildFragment\", // This is the only module that needs core/support\n\"./support\"], function (jQuery, document, rsingleTag, buildFragment, support) {\n  \"use strict\"; // 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\n\n  jQuery.parseHTML = function (data, context, keepScripts) {\n    if (typeof data !== \"string\") {\n      return [];\n    }\n\n    if (typeof context === \"boolean\") {\n      keepScripts = context;\n      context = false;\n    }\n\n    var base, parsed, scripts;\n\n    if (!context) {\n      // Stop scripts or inline event handlers from being executed immediately\n      // by using document.implementation\n      if (support.createHTMLDocument) {\n        context = document.implementation.createHTMLDocument(\"\"); // Set the base href for the created document\n        // so any parsed elements with URLs\n        // are based on the document's URL (gh-2965)\n\n        base = context.createElement(\"base\");\n        base.href = document.location.href;\n        context.head.appendChild(base);\n      } else {\n        context = document;\n      }\n    }\n\n    parsed = rsingleTag.exec(data);\n    scripts = !keepScripts && []; // Single tag\n\n    if (parsed) {\n      return [context.createElement(parsed[1])];\n    }\n\n    parsed = buildFragment([data], context, scripts);\n\n    if (scripts && scripts.length) {\n      jQuery(scripts).remove();\n    }\n\n    return jQuery.merge([], parsed.childNodes);\n  };\n\n  return jQuery.parseHTML;\n});","define([\"../var/document\", \"../var/support\"], function (document, support) {\n  \"use strict\"; // 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\n\n  support.createHTMLDocument = function () {\n    var body = document.implementation.createHTMLDocument(\"\").body;\n    body.innerHTML = \"<form></form><form></form>\";\n    return body.childNodes.length === 2;\n  }();\n\n  return support;\n});","define([\"../core\", \"../event\"], function (jQuery) {\n  \"use strict\"; // Attach a bunch of functions for handling common AJAX events\n\n  jQuery.each([\"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\"], function (i, type) {\n    jQuery.fn[type] = function (fn) {\n      return this.on(type, fn);\n    };\n  });\n});","define([\"../core\", \"../selector\", \"../effects\"], function (jQuery) {\n  \"use strict\";\n\n  jQuery.expr.pseudos.animated = function (elem) {\n    return jQuery.grep(jQuery.timers, function (fn) {\n      return elem === fn.elem;\n    }).length;\n  };\n});","define([\"./core\", \"./core/access\", \"./var/document\", \"./var/documentElement\", \"./var/isFunction\", \"./css/var/rnumnonpx\", \"./css/curCSS\", \"./css/addGetHookIf\", \"./css/support\", \"./var/isWindow\", \"./core/init\", \"./css\", \"./selector\" // contains\n], function (jQuery, access, document, documentElement, isFunction, rnumnonpx, curCSS, addGetHookIf, support, isWindow) {\n  \"use strict\";\n\n  jQuery.offset = {\n    setOffset: function setOffset(elem, options, i) {\n      var curPosition,\n          curLeft,\n          curCSSTop,\n          curTop,\n          curOffset,\n          curCSSLeft,\n          calculatePosition,\n          position = jQuery.css(elem, \"position\"),\n          curElem = jQuery(elem),\n          props = {}; // Set position first, in-case top/left are set even on static elem\n\n      if (position === \"static\") {\n        elem.style.position = \"relative\";\n      }\n\n      curOffset = curElem.offset();\n      curCSSTop = jQuery.css(elem, \"top\");\n      curCSSLeft = jQuery.css(elem, \"left\");\n      calculatePosition = (position === \"absolute\" || position === \"fixed\") && (curCSSTop + curCSSLeft).indexOf(\"auto\") > -1; // Need to be able to calculate position if either\n      // top or left is auto and position is either absolute or fixed\n\n      if (calculatePosition) {\n        curPosition = curElem.position();\n        curTop = curPosition.top;\n        curLeft = curPosition.left;\n      } else {\n        curTop = parseFloat(curCSSTop) || 0;\n        curLeft = parseFloat(curCSSLeft) || 0;\n      }\n\n      if (isFunction(options)) {\n        // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n        options = options.call(elem, i, jQuery.extend({}, curOffset));\n      }\n\n      if (options.top != null) {\n        props.top = options.top - curOffset.top + curTop;\n      }\n\n      if (options.left != null) {\n        props.left = options.left - curOffset.left + curLeft;\n      }\n\n      if (\"using\" in options) {\n        options.using.call(elem, props);\n      } else {\n        curElem.css(props);\n      }\n    }\n  };\n  jQuery.fn.extend({\n    // offset() relates an element's border box to the document origin\n    offset: function offset(options) {\n      // Preserve chaining for setter\n      if (arguments.length) {\n        return options === undefined ? this : this.each(function (i) {\n          jQuery.offset.setOffset(this, options, i);\n        });\n      }\n\n      var rect,\n          win,\n          elem = this[0];\n\n      if (!elem) {\n        return;\n      } // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n      // Support: IE <=11 only\n      // Running getBoundingClientRect on a\n      // disconnected node in IE throws an error\n\n\n      if (!elem.getClientRects().length) {\n        return {\n          top: 0,\n          left: 0\n        };\n      } // Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\n\n      rect = elem.getBoundingClientRect();\n      win = elem.ownerDocument.defaultView;\n      return {\n        top: rect.top + win.pageYOffset,\n        left: rect.left + win.pageXOffset\n      };\n    },\n    // position() relates an element's margin box to its offset parent's padding box\n    // This corresponds to the behavior of CSS absolute positioning\n    position: function position() {\n      if (!this[0]) {\n        return;\n      }\n\n      var offsetParent,\n          offset,\n          doc,\n          elem = this[0],\n          parentOffset = {\n        top: 0,\n        left: 0\n      }; // position:fixed elements are offset from the viewport, which itself always has zero offset\n\n      if (jQuery.css(elem, \"position\") === \"fixed\") {\n        // Assume position:fixed implies availability of getBoundingClientRect\n        offset = elem.getBoundingClientRect();\n      } else {\n        offset = this.offset(); // Account for the *real* offset parent, which can be the document or its root element\n        // when a statically positioned element is identified\n\n        doc = elem.ownerDocument;\n        offsetParent = elem.offsetParent || doc.documentElement;\n\n        while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, \"position\") === \"static\") {\n          offsetParent = offsetParent.parentNode;\n        }\n\n        if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n          // Incorporate borders into its offset, since they are outside its content origin\n          parentOffset = jQuery(offsetParent).offset();\n          parentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n          parentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n        }\n      } // Subtract parent offsets and element margins\n\n\n      return {\n        top: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n        left: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n      };\n    },\n    // This method will return documentElement in the following cases:\n    // 1) For the element inside the iframe without offsetParent, this method will return\n    //    documentElement of the parent window\n    // 2) For the hidden or detached element\n    // 3) For body or html element, i.e. in case of the html node - it will return itself\n    //\n    // but those exceptions were never presented as a real life use-cases\n    // and might be considered as more preferable results.\n    //\n    // This logic, however, is not guaranteed and can change at any point in the future\n    offsetParent: function offsetParent() {\n      return this.map(function () {\n        var offsetParent = this.offsetParent;\n\n        while (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n          offsetParent = offsetParent.offsetParent;\n        }\n\n        return offsetParent || documentElement;\n      });\n    }\n  }); // Create scrollLeft and scrollTop methods\n\n  jQuery.each({\n    scrollLeft: \"pageXOffset\",\n    scrollTop: \"pageYOffset\"\n  }, function (method, prop) {\n    var top = \"pageYOffset\" === prop;\n\n    jQuery.fn[method] = function (val) {\n      return access(this, function (elem, method, val) {\n        // Coalesce documents and windows\n        var win;\n\n        if (isWindow(elem)) {\n          win = elem;\n        } else if (elem.nodeType === 9) {\n          win = elem.defaultView;\n        }\n\n        if (val === undefined) {\n          return win ? win[prop] : elem[method];\n        }\n\n        if (win) {\n          win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);\n        } else {\n          elem[method] = val;\n        }\n      }, method, val, arguments.length);\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\n\n  jQuery.each([\"top\", \"left\"], function (i, prop) {\n    jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function (elem, computed) {\n      if (computed) {\n        computed = curCSS(elem, prop); // If curCSS returns percentage, fallback to offset\n\n        return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + \"px\" : computed;\n      }\n    });\n  });\n  return jQuery;\n});","define([\"./core\", \"./core/access\", \"./var/isWindow\", \"./css\"], function (jQuery, access, isWindow) {\n  \"use strict\"; // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\n  jQuery.each({\n    Height: \"height\",\n    Width: \"width\"\n  }, function (name, type) {\n    jQuery.each({\n      padding: \"inner\" + name,\n      content: type,\n      \"\": \"outer\" + name\n    }, function (defaultExtra, funcName) {\n      // Margin is only for outerHeight, outerWidth\n      jQuery.fn[funcName] = function (margin, value) {\n        var chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n            extra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n        return access(this, function (elem, type, value) {\n          var doc;\n\n          if (isWindow(elem)) {\n            // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n            return funcName.indexOf(\"outer\") === 0 ? elem[\"inner\" + name] : elem.document.documentElement[\"client\" + name];\n          } // Get document width or height\n\n\n          if (elem.nodeType === 9) {\n            doc = elem.documentElement; // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n            // whichever is greatest\n\n            return Math.max(elem.body[\"scroll\" + name], doc[\"scroll\" + name], elem.body[\"offset\" + name], doc[\"offset\" + name], doc[\"client\" + name]);\n          }\n\n          return value === undefined ? // Get width or height on the element, requesting but not forcing parseFloat\n          jQuery.css(elem, type, extra) : // Set width or height on the element\n          jQuery.style(elem, type, value, extra);\n        }, type, chainable ? margin : undefined, chainable);\n      };\n    });\n  });\n  return jQuery;\n});","define([\"./core\", \"./core/nodeName\", \"./core/camelCase\", \"./core/toType\", \"./var/isFunction\", \"./var/isWindow\", \"./var/slice\", \"./event/alias\"], function (jQuery, nodeName, camelCase, toType, isFunction, isWindow, slice) {\n  \"use strict\";\n\n  jQuery.fn.extend({\n    bind: function bind(types, data, fn) {\n      return this.on(types, null, data, fn);\n    },\n    unbind: function unbind(types, fn) {\n      return this.off(types, null, fn);\n    },\n    delegate: function delegate(selector, types, data, fn) {\n      return this.on(types, selector, data, fn);\n    },\n    undelegate: function undelegate(selector, types, fn) {\n      // ( namespace ) or ( selector, types [, fn] )\n      return arguments.length === 1 ? this.off(selector, \"**\") : this.off(types, selector || \"**\", fn);\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\n\n  jQuery.proxy = function (fn, context) {\n    var tmp, args, proxy;\n\n    if (typeof context === \"string\") {\n      tmp = fn[context];\n      context = fn;\n      fn = tmp;\n    } // Quick check to determine if target is callable, in the spec\n    // this throws a TypeError, but we will just return undefined.\n\n\n    if (!isFunction(fn)) {\n      return undefined;\n    } // Simulated bind\n\n\n    args = slice.call(arguments, 2);\n\n    proxy = function proxy() {\n      return fn.apply(context || this, args.concat(slice.call(arguments)));\n    }; // Set the guid of unique handler to the same of original handler, so it can be removed\n\n\n    proxy.guid = fn.guid = fn.guid || jQuery.guid++;\n    return proxy;\n  };\n\n  jQuery.holdReady = function (hold) {\n    if (hold) {\n      jQuery.readyWait++;\n    } else {\n      jQuery.ready(true);\n    }\n  };\n\n  jQuery.isArray = Array.isArray;\n  jQuery.parseJSON = JSON.parse;\n  jQuery.nodeName = nodeName;\n  jQuery.isFunction = isFunction;\n  jQuery.isWindow = isWindow;\n  jQuery.camelCase = camelCase;\n  jQuery.type = toType;\n  jQuery.now = Date.now;\n\n  jQuery.isNumeric = function (obj) {\n    // As of jQuery 3.0, isNumeric is limited to\n    // strings and numbers (primitives or objects)\n    // that can be coerced to finite numbers (gh-2662)\n    var type = jQuery.type(obj);\n    return (type === \"number\" || type === \"string\") && // parseFloat NaNs numeric-cast false positives (\"\")\n    // ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n    // subtraction forces infinities to NaN\n    !isNaN(obj - parseFloat(obj));\n  };\n});","define([\"../core\", \"../event\", \"./trigger\"], function (jQuery) {\n  \"use strict\";\n\n  jQuery.each((\"blur focus focusin focusout resize scroll click dblclick \" + \"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" + \"change select submit keydown keypress keyup contextmenu\").split(\" \"), function (i, name) {\n    // Handle event binding\n    jQuery.fn[name] = function (data, fn) {\n      return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);\n    };\n  });\n  jQuery.fn.extend({\n    hover: function hover(fnOver, fnOut) {\n      return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n    }\n  });\n});","define([\"../core\"], function (jQuery) {\n  \"use strict\"; // 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  // 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\n  if (typeof define === \"function\" && define.amd) {\n    define(\"jquery\", [], function () {\n      return jQuery;\n    });\n  }\n});","define([\"../core\"], function (jQuery, noGlobal) {\n  \"use strict\";\n\n  var // Map over jQuery in case of overwrite\n  _jQuery = window.jQuery,\n      // Map over the $ in case of overwrite\n  _$ = window.$;\n\n  jQuery.noConflict = function (deep) {\n    if (window.$ === jQuery) {\n      window.$ = _$;\n    }\n\n    if (deep && window.jQuery === jQuery) {\n      window.jQuery = _jQuery;\n    }\n\n    return jQuery;\n  }; // Expose jQuery and $ identifiers, even in AMD\n  // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n  // and CommonJS for browser emulators (#13566)\n\n\n  if (!noGlobal) {\n    window.jQuery = window.$ = jQuery;\n  }\n});","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  function define(obj, key, value) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n    return obj[key];\n  }\n  try {\n    // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n    define({}, \"\");\n  } catch (err) {\n    define = function(obj, key, value) {\n      return obj[key] = value;\n    };\n  }\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  exports.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  define(IteratorPrototype, iteratorSymbol, function () {\n    return this;\n  });\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = GeneratorFunctionPrototype;\n  define(Gp, \"constructor\", GeneratorFunctionPrototype);\n  define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n  GeneratorFunction.displayName = define(\n    GeneratorFunctionPrototype,\n    toStringTagSymbol,\n    \"GeneratorFunction\"\n  );\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      define(prototype, method, function(arg) {\n        return this._invoke(method, arg);\n      });\n    });\n  }\n\n  exports.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  exports.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  exports.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator, PromiseImpl) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return PromiseImpl.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return PromiseImpl.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration.\n          result.value = unwrapped;\n          resolve(result);\n        }, function(error) {\n          // If a rejected Promise was yielded, throw the rejection back\n          // into the async generator function so it can be handled there.\n          return invoke(\"throw\", error, resolve, reject);\n        });\n      }\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new PromiseImpl(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n    return this;\n  });\n  exports.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n    if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList),\n      PromiseImpl\n    );\n\n    return exports.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method always terminates the yield* loop.\n      context.delegate = null;\n\n      if (context.method === \"throw\") {\n        // Note: [\"return\"] must be used for ES3 parsing compatibility.\n        if (delegate.iterator[\"return\"]) {\n          // If the delegate iterator has a return method, give it a\n          // chance to clean up.\n          context.method = \"return\";\n          context.arg = undefined;\n          maybeInvokeDelegate(delegate, context);\n\n          if (context.method === \"throw\") {\n            // If maybeInvokeDelegate(context) changed context.method from\n            // \"return\" to \"throw\", let that override the TypeError below.\n            return ContinueSentinel;\n          }\n        }\n\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a 'throw' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  define(Gp, toStringTagSymbol, \"Generator\");\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  define(Gp, iteratorSymbol, function() {\n    return this;\n  });\n\n  define(Gp, \"toString\", function() {\n    return \"[object Generator]\";\n  });\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  exports.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  exports.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n\n  // Regardless of whether this script is executing as a CommonJS module\n  // or not, return the runtime object so that we can declare the variable\n  // regeneratorRuntime in the outer scope, which allows this module to be\n  // injected easily by `bin/regenerator --include-runtime script.js`.\n  return exports;\n\n}(\n  // If this script is executing as a CommonJS module, use module.exports\n  // as the regeneratorRuntime namespace. Otherwise create a new empty\n  // object. Either way, the resulting object will be used to initialize\n  // the regeneratorRuntime variable at the top of this file.\n  typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  // This module should not be running in strict mode, so the above\n  // assignment should always work unless something is misconfigured. Just\n  // in case runtime.js accidentally runs in strict mode, in modern engines\n  // we can explicitly access globalThis. In older engines we can escape\n  // strict mode using a global Function call. This could conceivably fail\n  // if a Content Security Policy forbids using Function, but in that case\n  // the proper solution is to fix the accidental strict mode problem. If\n  // you've misconfigured your bundler to force strict mode and applied a\n  // CSP to forbid Function, and you're not willing to fix either of those\n  // problems, please detail your unique predicament in a GitHub issue.\n  if (typeof globalThis === \"object\") {\n    globalThis.regeneratorRuntime = runtime;\n  } else {\n    Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n  }\n}\n","function _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e59) { throw _e59; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e60) { didErr = true; err = _e60; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nTrix 2.1.12\nCopyright © 2024 37signals, LLC\n */\nvar t = \"2.1.12\";\n\nvar e = \"[data-trix-attachment]\",\n    i = {\n  preview: {\n    presentation: \"gallery\",\n    caption: {\n      name: !0,\n      size: !0\n    }\n  },\n  file: {\n    caption: {\n      size: !0\n    }\n  }\n},\n    n = {\n  default: {\n    tagName: \"div\",\n    parse: !1\n  },\n  quote: {\n    tagName: \"blockquote\",\n    nestable: !0\n  },\n  heading1: {\n    tagName: \"h1\",\n    terminal: !0,\n    breakOnReturn: !0,\n    group: !1\n  },\n  code: {\n    tagName: \"pre\",\n    terminal: !0,\n    htmlAttributes: [\"language\"],\n    text: {\n      plaintext: !0\n    }\n  },\n  bulletList: {\n    tagName: \"ul\",\n    parse: !1\n  },\n  bullet: {\n    tagName: \"li\",\n    listAttribute: \"bulletList\",\n    group: !1,\n    nestable: !0,\n    test: function test(t) {\n      return r(t.parentNode) === n[this.listAttribute].tagName;\n    }\n  },\n  numberList: {\n    tagName: \"ol\",\n    parse: !1\n  },\n  number: {\n    tagName: \"li\",\n    listAttribute: \"numberList\",\n    group: !1,\n    nestable: !0,\n    test: function test(t) {\n      return r(t.parentNode) === n[this.listAttribute].tagName;\n    }\n  },\n  attachmentGallery: {\n    tagName: \"div\",\n    exclusive: !0,\n    terminal: !0,\n    parse: !1,\n    group: !1\n  }\n},\n    r = function r(t) {\n  var e;\n  return null == t || null === (e = t.tagName) || void 0 === e ? void 0 : e.toLowerCase();\n},\n    o = navigator.userAgent.match(/android\\s([0-9]+.*Chrome)/i),\n    s = o && parseInt(o[1]);\n\nvar a = {\n  composesExistingText: /Android.*Chrome/.test(navigator.userAgent),\n  recentAndroid: s && s > 12,\n  samsungAndroid: s && navigator.userAgent.match(/Android.*SM-/),\n  forcesObjectResizing: /Trident.*rv:11/.test(navigator.userAgent),\n  supportsInputEvents: \"undefined\" != typeof InputEvent && [\"data\", \"getTargetRanges\", \"inputType\"].every(function (t) {\n    return t in InputEvent.prototype;\n  })\n},\n    l = {\n  ADD_ATTR: [\"language\"],\n  SAFE_FOR_XML: !1,\n  RETURN_DOM: !0\n},\n    c = {\n  attachFiles: \"Attach Files\",\n  bold: \"Bold\",\n  bullets: \"Bullets\",\n  byte: \"Byte\",\n  bytes: \"Bytes\",\n  captionPlaceholder: \"Add a caption…\",\n  code: \"Code\",\n  heading1: \"Heading\",\n  indent: \"Increase Level\",\n  italic: \"Italic\",\n  link: \"Link\",\n  numbers: \"Numbers\",\n  outdent: \"Decrease Level\",\n  quote: \"Quote\",\n  redo: \"Redo\",\n  remove: \"Remove\",\n  strike: \"Strikethrough\",\n  undo: \"Undo\",\n  unlink: \"Unlink\",\n  url: \"URL\",\n  urlPlaceholder: \"Enter a URL…\",\n  GB: \"GB\",\n  KB: \"KB\",\n  MB: \"MB\",\n  PB: \"PB\",\n  TB: \"TB\"\n};\nvar u = [c.bytes, c.KB, c.MB, c.GB, c.TB, c.PB];\nvar h = {\n  prefix: \"IEC\",\n  precision: 2,\n  formatter: function formatter(t) {\n    switch (t) {\n      case 0:\n        return \"0 \".concat(c.bytes);\n\n      case 1:\n        return \"1 \".concat(c.byte);\n\n      default:\n        var _e2;\n\n        \"SI\" === this.prefix ? _e2 = 1e3 : \"IEC\" === this.prefix && (_e2 = 1024);\n\n        var _i2 = Math.floor(Math.log(t) / Math.log(_e2)),\n            _n2 = (t / Math.pow(_e2, _i2)).toFixed(this.precision).replace(/0*$/, \"\").replace(/\\.$/, \"\");\n\n        return \"\".concat(_n2, \" \").concat(u[_i2]);\n    }\n  }\n};\n\nvar d = \"\\uFEFF\",\n    g = \" \",\n    m = function m(t) {\n  for (var _e3 in t) {\n    var _i3 = t[_e3];\n    this[_e3] = _i3;\n  }\n\n  return this;\n},\n    p = document.documentElement,\n    f = p.matches,\n    b = function b(t) {\n  var _ref = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n      e = _ref.onElement,\n      i = _ref.matchingSelector,\n      n = _ref.withCallback,\n      r = _ref.inPhase,\n      o = _ref.preventDefault,\n      s = _ref.times;\n\n  var a = e || p,\n      l = i,\n      c = \"capturing\" === r,\n      u = function u(t) {\n    null != s && 0 == --s && u.destroy();\n    var e = y(t.target, {\n      matchingSelector: l\n    });\n    null != e && (null == n || n.call(e, t, e), o && t.preventDefault());\n  };\n\n  return u.destroy = function () {\n    return a.removeEventListener(t, u, c);\n  }, a.addEventListener(t, u, c), u;\n},\n    v = function v(t) {\n  var _ref2 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n      e = _ref2.onElement,\n      i = _ref2.bubbles,\n      n = _ref2.cancelable,\n      r = _ref2.attributes;\n\n  var o = null != e ? e : p;\n  i = !1 !== i, n = !1 !== n;\n  var s = document.createEvent(\"Events\");\n  return s.initEvent(t, i, n), null != r && m.call(s, r), o.dispatchEvent(s);\n},\n    A = function A(t, e) {\n  if (1 === (null == t ? void 0 : t.nodeType)) return f.call(t, e);\n},\n    y = function y(t) {\n  var _ref3 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n      e = _ref3.matchingSelector,\n      i = _ref3.untilNode;\n\n  for (; t && t.nodeType !== Node.ELEMENT_NODE;) {\n    t = t.parentNode;\n  }\n\n  if (null != t) {\n    if (null == e) return t;\n    if (t.closest && null == i) return t.closest(e);\n\n    for (; t && t !== i;) {\n      if (A(t, e)) return t;\n      t = t.parentNode;\n    }\n  }\n},\n    x = function x(t) {\n  return document.activeElement !== t && C(t, document.activeElement);\n},\n    C = function C(t, e) {\n  if (t && e) for (; e;) {\n    if (e === t) return !0;\n    e = e.parentNode;\n  }\n},\n    E = function E(t) {\n  var e;\n  if (null === (e = t) || void 0 === e || !e.parentNode) return;\n  var i = 0;\n\n  for (t = t.previousSibling; t;) {\n    i++, t = t.previousSibling;\n  }\n\n  return i;\n},\n    S = function S(t) {\n  var e;\n  return null == t || null === (e = t.parentNode) || void 0 === e ? void 0 : e.removeChild(t);\n},\n    R = function R(t) {\n  var _ref4 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n      e = _ref4.onlyNodesOfType,\n      i = _ref4.usingFilter,\n      n = _ref4.expandEntityReferences;\n\n  var r = function () {\n    switch (e) {\n      case \"element\":\n        return NodeFilter.SHOW_ELEMENT;\n\n      case \"text\":\n        return NodeFilter.SHOW_TEXT;\n\n      case \"comment\":\n        return NodeFilter.SHOW_COMMENT;\n\n      default:\n        return NodeFilter.SHOW_ALL;\n    }\n  }();\n\n  return document.createTreeWalker(t, r, null != i ? i : null, !0 === n);\n},\n    k = function k(t) {\n  var e;\n  return null == t || null === (e = t.tagName) || void 0 === e ? void 0 : e.toLowerCase();\n},\n    T = function T(t) {\n  var e,\n      i,\n      n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n  \"object\" == _typeof(t) ? (n = t, t = n.tagName) : n = {\n    attributes: n\n  };\n  var r = document.createElement(t);\n  if (null != n.editable && (null == n.attributes && (n.attributes = {}), n.attributes.contenteditable = n.editable), n.attributes) for (e in n.attributes) {\n    i = n.attributes[e], r.setAttribute(e, i);\n  }\n  if (n.style) for (e in n.style) {\n    i = n.style[e], r.style[e] = i;\n  }\n  if (n.data) for (e in n.data) {\n    i = n.data[e], r.dataset[e] = i;\n  }\n  return n.className && n.className.split(\" \").forEach(function (t) {\n    r.classList.add(t);\n  }), n.textContent && (r.textContent = n.textContent), n.childNodes && [].concat(n.childNodes).forEach(function (t) {\n    r.appendChild(t);\n  }), r;\n};\n\nvar w;\n\nvar L = function L() {\n  if (null != w) return w;\n  w = [];\n\n  for (var _t2 in n) {\n    var _e4 = n[_t2];\n    _e4.tagName && w.push(_e4.tagName);\n  }\n\n  return w;\n},\n    D = function D(t) {\n  return I(null == t ? void 0 : t.firstChild);\n},\n    N = function N(t) {\n  var _ref5 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {\n    strict: !0\n  },\n      e = _ref5.strict;\n\n  return e ? I(t) : I(t) || !I(t.firstChild) && function (t) {\n    return L().includes(k(t)) && !L().includes(k(t.firstChild));\n  }(t);\n},\n    I = function I(t) {\n  return O(t) && \"block\" === (null == t ? void 0 : t.data);\n},\n    O = function O(t) {\n  return (null == t ? void 0 : t.nodeType) === Node.COMMENT_NODE;\n},\n    F = function F(t) {\n  var _ref6 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n      e = _ref6.name;\n\n  if (t) return B(t) ? t.data === d ? !e || t.parentNode.dataset.trixCursorTarget === e : void 0 : F(t.firstChild);\n},\n    P = function P(t) {\n  return A(t, e);\n},\n    M = function M(t) {\n  return B(t) && \"\" === (null == t ? void 0 : t.data);\n},\n    B = function B(t) {\n  return (null == t ? void 0 : t.nodeType) === Node.TEXT_NODE;\n},\n    _ = {\n  level2Enabled: !0,\n  getLevel: function getLevel() {\n    return this.level2Enabled && a.supportsInputEvents ? 2 : 0;\n  },\n  pickFiles: function pickFiles(t) {\n    var e = T(\"input\", {\n      type: \"file\",\n      multiple: !0,\n      hidden: !0,\n      id: this.fileInputId\n    });\n    e.addEventListener(\"change\", function () {\n      t(e.files), S(e);\n    }), S(document.getElementById(this.fileInputId)), document.body.appendChild(e), e.click();\n  }\n};\n\nvar j = {\n  removeBlankTableCells: !1,\n  tableCellSeparator: \" | \",\n  tableRowSeparator: \"\\n\"\n},\n    W = {\n  bold: {\n    tagName: \"strong\",\n    inheritable: !0,\n    parser: function parser(t) {\n      var e = window.getComputedStyle(t);\n      return \"bold\" === e.fontWeight || e.fontWeight >= 600;\n    }\n  },\n  italic: {\n    tagName: \"em\",\n    inheritable: !0,\n    parser: function parser(t) {\n      return \"italic\" === window.getComputedStyle(t).fontStyle;\n    }\n  },\n  href: {\n    groupTagName: \"a\",\n    parser: function parser(t) {\n      var i = \"a:not(\".concat(e, \")\"),\n          n = t.closest(i);\n      if (n) return n.getAttribute(\"href\");\n    }\n  },\n  strike: {\n    tagName: \"del\",\n    inheritable: !0\n  },\n  frozen: {\n    style: {\n      backgroundColor: \"highlight\"\n    }\n  }\n},\n    U = {\n  getDefaultHTML: function getDefaultHTML() {\n    return '<div class=\"trix-button-row\">\\n      <span class=\"trix-button-group trix-button-group--text-tools\" data-trix-button-group=\"text-tools\">\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-bold\" data-trix-attribute=\"bold\" data-trix-key=\"b\" title=\"'.concat(c.bold, '\" tabindex=\"-1\">').concat(c.bold, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-italic\" data-trix-attribute=\"italic\" data-trix-key=\"i\" title=\"').concat(c.italic, '\" tabindex=\"-1\">').concat(c.italic, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-strike\" data-trix-attribute=\"strike\" title=\"').concat(c.strike, '\" tabindex=\"-1\">').concat(c.strike, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-link\" data-trix-attribute=\"href\" data-trix-action=\"link\" data-trix-key=\"k\" title=\"').concat(c.link, '\" tabindex=\"-1\">').concat(c.link, '</button>\\n      </span>\\n\\n      <span class=\"trix-button-group trix-button-group--block-tools\" data-trix-button-group=\"block-tools\">\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-heading-1\" data-trix-attribute=\"heading1\" title=\"').concat(c.heading1, '\" tabindex=\"-1\">').concat(c.heading1, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-quote\" data-trix-attribute=\"quote\" title=\"').concat(c.quote, '\" tabindex=\"-1\">').concat(c.quote, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-code\" data-trix-attribute=\"code\" title=\"').concat(c.code, '\" tabindex=\"-1\">').concat(c.code, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-bullet-list\" data-trix-attribute=\"bullet\" title=\"').concat(c.bullets, '\" tabindex=\"-1\">').concat(c.bullets, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-number-list\" data-trix-attribute=\"number\" title=\"').concat(c.numbers, '\" tabindex=\"-1\">').concat(c.numbers, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-decrease-nesting-level\" data-trix-action=\"decreaseNestingLevel\" title=\"').concat(c.outdent, '\" tabindex=\"-1\">').concat(c.outdent, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-increase-nesting-level\" data-trix-action=\"increaseNestingLevel\" title=\"').concat(c.indent, '\" tabindex=\"-1\">').concat(c.indent, '</button>\\n      </span>\\n\\n      <span class=\"trix-button-group trix-button-group--file-tools\" data-trix-button-group=\"file-tools\">\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-attach\" data-trix-action=\"attachFiles\" title=\"').concat(c.attachFiles, '\" tabindex=\"-1\">').concat(c.attachFiles, '</button>\\n      </span>\\n\\n      <span class=\"trix-button-group-spacer\"></span>\\n\\n      <span class=\"trix-button-group trix-button-group--history-tools\" data-trix-button-group=\"history-tools\">\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-undo\" data-trix-action=\"undo\" data-trix-key=\"z\" title=\"').concat(c.undo, '\" tabindex=\"-1\">').concat(c.undo, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-redo\" data-trix-action=\"redo\" data-trix-key=\"shift+z\" title=\"').concat(c.redo, '\" tabindex=\"-1\">').concat(c.redo, '</button>\\n      </span>\\n    </div>\\n\\n    <div class=\"trix-dialogs\" data-trix-dialogs>\\n      <div class=\"trix-dialog trix-dialog--link\" data-trix-dialog=\"href\" data-trix-dialog-attribute=\"href\">\\n        <div class=\"trix-dialog__link-fields\">\\n          <input type=\"url\" name=\"href\" class=\"trix-input trix-input--dialog\" placeholder=\"').concat(c.urlPlaceholder, '\" aria-label=\"').concat(c.url, '\" data-trix-validate-href required data-trix-input>\\n          <div class=\"trix-button-group\">\\n            <input type=\"button\" class=\"trix-button trix-button--dialog\" value=\"').concat(c.link, '\" data-trix-method=\"setAttribute\">\\n            <input type=\"button\" class=\"trix-button trix-button--dialog\" value=\"').concat(c.unlink, '\" data-trix-method=\"removeAttribute\">\\n          </div>\\n        </div>\\n      </div>\\n    </div>');\n  }\n};\nvar V = {\n  interval: 5e3\n};\nvar z = Object.freeze({\n  __proto__: null,\n  attachments: i,\n  blockAttributes: n,\n  browser: a,\n  css: {\n    attachment: \"attachment\",\n    attachmentCaption: \"attachment__caption\",\n    attachmentCaptionEditor: \"attachment__caption-editor\",\n    attachmentMetadata: \"attachment__metadata\",\n    attachmentMetadataContainer: \"attachment__metadata-container\",\n    attachmentName: \"attachment__name\",\n    attachmentProgress: \"attachment__progress\",\n    attachmentSize: \"attachment__size\",\n    attachmentToolbar: \"attachment__toolbar\",\n    attachmentGallery: \"attachment-gallery\"\n  },\n  dompurify: l,\n  fileSize: h,\n  input: _,\n  keyNames: {\n    8: \"backspace\",\n    9: \"tab\",\n    13: \"return\",\n    27: \"escape\",\n    37: \"left\",\n    39: \"right\",\n    46: \"delete\",\n    68: \"d\",\n    72: \"h\",\n    79: \"o\"\n  },\n  lang: c,\n  parser: j,\n  textAttributes: W,\n  toolbar: U,\n  undo: V\n});\n\nvar q = /*#__PURE__*/function () {\n  function q() {\n    _classCallCheck(this, q);\n  }\n\n  _createClass(q, null, [{\n    key: \"proxyMethod\",\n    value: function proxyMethod(t) {\n      var _H = H(t),\n          e = _H.name,\n          i = _H.toMethod,\n          n = _H.toProperty,\n          r = _H.optional;\n\n      this.prototype[e] = function () {\n        var t, o;\n        var s, a;\n        i ? o = r ? null === (s = this[i]) || void 0 === s ? void 0 : s.call(this) : this[i]() : n && (o = this[n]);\n        return r ? (t = null === (a = o) || void 0 === a ? void 0 : a[e], t ? J.call(t, o, arguments) : void 0) : (t = o[e], J.call(t, o, arguments));\n      };\n    }\n  }]);\n\n  return q;\n}();\n\nvar H = function H(t) {\n  var e = t.match(K);\n  if (!e) throw new Error(\"can't parse @proxyMethod expression: \".concat(t));\n  var i = {\n    name: e[4]\n  };\n  return null != e[2] ? i.toMethod = e[1] : i.toProperty = e[1], null != e[3] && (i.optional = !0), i;\n},\n    J = Function.prototype.apply,\n    K = new RegExp(\"^(.+?)(\\\\(\\\\))?(\\\\?)?\\\\.(.+?)$\");\n\nvar G, Y, $;\n\nvar X = /*#__PURE__*/function (_q) {\n  _inherits(X, _q);\n\n  var _super = _createSuper(X);\n\n  function X(t, e) {\n    var _this;\n\n    _classCallCheck(this, X);\n\n    _this = _super.apply(this, arguments), _this.ucs2String = t, _this.codepoints = e, _this.length = _this.codepoints.length, _this.ucs2Length = _this.ucs2String.length;\n    return _this;\n  }\n\n  _createClass(X, [{\n    key: \"offsetToUCS2Offset\",\n    value: function offsetToUCS2Offset(t) {\n      return it(this.codepoints.slice(0, Math.max(0, t))).length;\n    }\n  }, {\n    key: \"offsetFromUCS2Offset\",\n    value: function offsetFromUCS2Offset(t) {\n      return et(this.ucs2String.slice(0, Math.max(0, t))).length;\n    }\n  }, {\n    key: \"slice\",\n    value: function slice() {\n      var _this$codepoints;\n\n      return this.constructor.fromCodepoints((_this$codepoints = this.codepoints).slice.apply(_this$codepoints, arguments));\n    }\n  }, {\n    key: \"charAt\",\n    value: function charAt(t) {\n      return this.slice(t, t + 1);\n    }\n  }, {\n    key: \"isEqualTo\",\n    value: function isEqualTo(t) {\n      return this.constructor.box(t).ucs2String === this.ucs2String;\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this.ucs2String;\n    }\n  }, {\n    key: \"getCacheKey\",\n    value: function getCacheKey() {\n      return this.ucs2String;\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return this.ucs2String;\n    }\n  }], [{\n    key: \"box\",\n    value: function box() {\n      var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : \"\";\n      return t instanceof this ? t : this.fromUCS2String(null == t ? void 0 : t.toString());\n    }\n  }, {\n    key: \"fromUCS2String\",\n    value: function fromUCS2String(t) {\n      return new this(t, et(t));\n    }\n  }, {\n    key: \"fromCodepoints\",\n    value: function fromCodepoints(t) {\n      return new this(it(t), t);\n    }\n  }]);\n\n  return X;\n}(q);\n\nvar Z = 1 === (null === (G = Array.from) || void 0 === G ? void 0 : G.call(Array, \"👼\").length),\n    Q = null != (null === (Y = \" \".codePointAt) || void 0 === Y ? void 0 : Y.call(\" \", 0)),\n    tt = \" 👼\" === (null === ($ = String.fromCodePoint) || void 0 === $ ? void 0 : $.call(String, 32, 128124));\nvar et, it;\net = Z && Q ? function (t) {\n  return Array.from(t).map(function (t) {\n    return t.codePointAt(0);\n  });\n} : function (t) {\n  var e = [];\n  var i = 0;\n  var n = t.length;\n\n  for (; i < n;) {\n    var _r2 = t.charCodeAt(i++);\n\n    if (55296 <= _r2 && _r2 <= 56319 && i < n) {\n      var _e5 = t.charCodeAt(i++);\n\n      56320 == (64512 & _e5) ? _r2 = ((1023 & _r2) << 10) + (1023 & _e5) + 65536 : i--;\n    }\n\n    e.push(_r2);\n  }\n\n  return e;\n}, it = tt ? function (t) {\n  return String.fromCodePoint.apply(String, _toConsumableArray(Array.from(t || [])));\n} : function (t) {\n  return function () {\n    var e = [];\n    return Array.from(t).forEach(function (t) {\n      var i = \"\";\n      t > 65535 && (t -= 65536, i += String.fromCharCode(t >>> 10 & 1023 | 55296), t = 56320 | 1023 & t), e.push(i + String.fromCharCode(t));\n    }), e;\n  }().join(\"\");\n};\nvar nt = 0;\n\nvar rt = /*#__PURE__*/function (_q2) {\n  _inherits(rt, _q2);\n\n  var _super2 = _createSuper(rt);\n\n  function rt() {\n    var _this2;\n\n    _classCallCheck(this, rt);\n\n    _this2 = _super2.apply(this, arguments), _this2.id = ++nt;\n    return _this2;\n  }\n\n  _createClass(rt, [{\n    key: \"hasSameConstructorAs\",\n    value: function hasSameConstructorAs(t) {\n      return this.constructor === (null == t ? void 0 : t.constructor);\n    }\n  }, {\n    key: \"isEqualTo\",\n    value: function isEqualTo(t) {\n      return this === t;\n    }\n  }, {\n    key: \"inspect\",\n    value: function inspect() {\n      var t = [],\n          e = this.contentsForInspection() || {};\n\n      for (var _i4 in e) {\n        var _n3 = e[_i4];\n        t.push(\"\".concat(_i4, \"=\").concat(_n3));\n      }\n\n      return \"#<\".concat(this.constructor.name, \":\").concat(this.id).concat(t.length ? \" \".concat(t.join(\", \")) : \"\", \">\");\n    }\n  }, {\n    key: \"contentsForInspection\",\n    value: function contentsForInspection() {}\n  }, {\n    key: \"toJSONString\",\n    value: function toJSONString() {\n      return JSON.stringify(this);\n    }\n  }, {\n    key: \"toUTF16String\",\n    value: function toUTF16String() {\n      return X.box(this);\n    }\n  }, {\n    key: \"getCacheKey\",\n    value: function getCacheKey() {\n      return this.id.toString();\n    }\n  }], [{\n    key: \"fromJSONString\",\n    value: function fromJSONString(t) {\n      return this.fromJSON(JSON.parse(t));\n    }\n  }]);\n\n  return rt;\n}(q);\n\nvar ot = function ot() {\n  var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [],\n      e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];\n  if (t.length !== e.length) return !1;\n\n  for (var _i5 = 0; _i5 < t.length; _i5++) {\n    if (t[_i5] !== e[_i5]) return !1;\n  }\n\n  return !0;\n},\n    st = function st(t) {\n  var e = t.slice(0);\n\n  for (var i = arguments.length, n = new Array(i > 1 ? i - 1 : 0), r = 1; r < i; r++) {\n    n[r - 1] = arguments[r];\n  }\n\n  return e.splice.apply(e, n), e;\n},\n    at = /[\\u05BE\\u05C0\\u05C3\\u05D0-\\u05EA\\u05F0-\\u05F4\\u061B\\u061F\\u0621-\\u063A\\u0640-\\u064A\\u066D\\u0671-\\u06B7\\u06BA-\\u06BE\\u06C0-\\u06CE\\u06D0-\\u06D5\\u06E5\\u06E6\\u200F\\u202B\\u202E\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE72\\uFE74\\uFE76-\\uFEFC]/,\n    lt = function () {\n  var t = T(\"input\", {\n    dir: \"auto\",\n    name: \"x\",\n    dirName: \"x.dir\"\n  }),\n      e = T(\"textarea\", {\n    dir: \"auto\",\n    name: \"y\",\n    dirName: \"y.dir\"\n  }),\n      i = T(\"form\");\n  i.appendChild(t), i.appendChild(e);\n\n  var n = function () {\n    try {\n      return new FormData(i).has(e.dirName);\n    } catch (t) {\n      return !1;\n    }\n  }(),\n      r = function () {\n    try {\n      return t.matches(\":dir(ltr),:dir(rtl)\");\n    } catch (t) {\n      return !1;\n    }\n  }();\n\n  return n ? function (t) {\n    return e.value = t, new FormData(i).get(e.dirName);\n  } : r ? function (e) {\n    return t.value = e, t.matches(\":dir(rtl)\") ? \"rtl\" : \"ltr\";\n  } : function (t) {\n    var e = t.trim().charAt(0);\n    return at.test(e) ? \"rtl\" : \"ltr\";\n  };\n}();\n\nvar ct = null,\n    ut = null,\n    ht = null,\n    dt = null;\n\nvar gt = function gt() {\n  return ct || (ct = bt().concat(pt())), ct;\n},\n    mt = function mt(t) {\n  return n[t];\n},\n    pt = function pt() {\n  return ut || (ut = Object.keys(n)), ut;\n},\n    ft = function ft(t) {\n  return W[t];\n},\n    bt = function bt() {\n  return ht || (ht = Object.keys(W)), ht;\n},\n    vt = function vt(t, e) {\n  At(t).textContent = e.replace(/%t/g, t);\n},\n    At = function At(t) {\n  var e = document.createElement(\"style\");\n  e.setAttribute(\"type\", \"text/css\"), e.setAttribute(\"data-tag-name\", t.toLowerCase());\n  var i = yt();\n  return i && e.setAttribute(\"nonce\", i), document.head.insertBefore(e, document.head.firstChild), e;\n},\n    yt = function yt() {\n  var t = xt(\"trix-csp-nonce\") || xt(\"csp-nonce\");\n\n  if (t) {\n    var _e6 = t.nonce,\n        _i6 = t.content;\n    return \"\" == _e6 ? _i6 : _e6;\n  }\n},\n    xt = function xt(t) {\n  return document.head.querySelector(\"meta[name=\".concat(t, \"]\"));\n},\n    Ct = {\n  \"application/x-trix-feature-detection\": \"test\"\n},\n    Et = function Et(t) {\n  var e = t.getData(\"text/plain\"),\n      i = t.getData(\"text/html\");\n  if (!e || !i) return null == e ? void 0 : e.length;\n  {\n    var _DOMParser$parseFromS = new DOMParser().parseFromString(i, \"text/html\"),\n        _t3 = _DOMParser$parseFromS.body;\n\n    if (_t3.textContent === e) return !_t3.querySelector(\"*\");\n  }\n},\n    St = /Mac|^iP/.test(navigator.platform) ? function (t) {\n  return t.metaKey;\n} : function (t) {\n  return t.ctrlKey;\n};\n\nvar Rt = function Rt(t) {\n  return setTimeout(t, 1);\n},\n    kt = function kt() {\n  var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n  var e = {};\n\n  for (var _i7 in t) {\n    var _n4 = t[_i7];\n    e[_i7] = _n4;\n  }\n\n  return e;\n},\n    Tt = function Tt() {\n  var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},\n      e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n  if (Object.keys(t).length !== Object.keys(e).length) return !1;\n\n  for (var _i8 in t) {\n    if (t[_i8] !== e[_i8]) return !1;\n  }\n\n  return !0;\n},\n    wt = function wt(t) {\n  if (null != t) return Array.isArray(t) || (t = [t, t]), [Nt(t[0]), Nt(null != t[1] ? t[1] : t[0])];\n},\n    Lt = function Lt(t) {\n  if (null == t) return;\n\n  var _wt = wt(t),\n      _wt2 = _slicedToArray(_wt, 2),\n      e = _wt2[0],\n      i = _wt2[1];\n\n  return It(e, i);\n},\n    Dt = function Dt(t, e) {\n  if (null == t || null == e) return;\n\n  var _wt3 = wt(t),\n      _wt4 = _slicedToArray(_wt3, 2),\n      i = _wt4[0],\n      n = _wt4[1],\n      _wt5 = wt(e),\n      _wt6 = _slicedToArray(_wt5, 2),\n      r = _wt6[0],\n      o = _wt6[1];\n\n  return It(i, r) && It(n, o);\n},\n    Nt = function Nt(t) {\n  return \"number\" == typeof t ? t : kt(t);\n},\n    It = function It(t, e) {\n  return \"number\" == typeof t ? t === e : Tt(t, e);\n};\n\nvar Ot = /*#__PURE__*/function (_q3) {\n  _inherits(Ot, _q3);\n\n  var _super3 = _createSuper(Ot);\n\n  function Ot() {\n    var _this3;\n\n    _classCallCheck(this, Ot);\n\n    _this3 = _super3.apply(this, arguments), _this3.update = _this3.update.bind(_assertThisInitialized(_this3)), _this3.selectionManagers = [];\n    return _this3;\n  }\n\n  _createClass(Ot, [{\n    key: \"start\",\n    value: function start() {\n      this.started || (this.started = !0, document.addEventListener(\"selectionchange\", this.update, !0));\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (this.started) return this.started = !1, document.removeEventListener(\"selectionchange\", this.update, !0);\n    }\n  }, {\n    key: \"registerSelectionManager\",\n    value: function registerSelectionManager(t) {\n      if (!this.selectionManagers.includes(t)) return this.selectionManagers.push(t), this.start();\n    }\n  }, {\n    key: \"unregisterSelectionManager\",\n    value: function unregisterSelectionManager(t) {\n      if (this.selectionManagers = this.selectionManagers.filter(function (e) {\n        return e !== t;\n      }), 0 === this.selectionManagers.length) return this.stop();\n    }\n  }, {\n    key: \"notifySelectionManagersOfSelectionChange\",\n    value: function notifySelectionManagersOfSelectionChange() {\n      return this.selectionManagers.map(function (t) {\n        return t.selectionDidChange();\n      });\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      this.notifySelectionManagersOfSelectionChange();\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this.update();\n    }\n  }]);\n\n  return Ot;\n}(q);\n\nvar Ft = new Ot(),\n    Pt = function Pt() {\n  var t = window.getSelection();\n  if (t.rangeCount > 0) return t;\n},\n    Mt = function Mt() {\n  var t;\n  var e = null === (t = Pt()) || void 0 === t ? void 0 : t.getRangeAt(0);\n  if (e && !_t(e)) return e;\n},\n    Bt = function Bt(t) {\n  var e = window.getSelection();\n  return e.removeAllRanges(), e.addRange(t), Ft.update();\n},\n    _t = function _t(t) {\n  return jt(t.startContainer) || jt(t.endContainer);\n},\n    jt = function jt(t) {\n  return !Object.getPrototypeOf(t);\n},\n    Wt = function Wt(t) {\n  return t.replace(new RegExp(\"\".concat(d), \"g\"), \"\").replace(new RegExp(\"\".concat(g), \"g\"), \" \");\n},\n    Ut = new RegExp(\"[^\\\\S\".concat(g, \"]\")),\n    Vt = function Vt(t) {\n  return t.replace(new RegExp(\"\".concat(Ut.source), \"g\"), \" \").replace(/\\ {2,}/g, \" \");\n},\n    zt = function zt(t, e) {\n  if (t.isEqualTo(e)) return [\"\", \"\"];\n  var i = qt(t, e),\n      n = i.utf16String.length;\n  var r;\n\n  if (n) {\n    var _o = i.offset,\n        _s2 = t.codepoints.slice(0, _o).concat(t.codepoints.slice(_o + n));\n\n    r = qt(e, X.fromCodepoints(_s2));\n  } else r = qt(e, t);\n\n  return [i.utf16String.toString(), r.utf16String.toString()];\n},\n    qt = function qt(t, e) {\n  var i = 0,\n      n = t.length,\n      r = e.length;\n\n  for (; i < n && t.charAt(i).isEqualTo(e.charAt(i));) {\n    i++;\n  }\n\n  for (; n > i + 1 && t.charAt(n - 1).isEqualTo(e.charAt(r - 1));) {\n    n--, r--;\n  }\n\n  return {\n    utf16String: t.slice(i, n),\n    offset: i\n  };\n};\n\nvar Ht = /*#__PURE__*/function (_rt) {\n  _inherits(Ht, _rt);\n\n  var _super4 = _createSuper(Ht);\n\n  function Ht() {\n    var _this4;\n\n    _classCallCheck(this, Ht);\n\n    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n    _this4 = _super4.apply(this, arguments), _this4.values = Gt(t);\n    return _this4;\n  }\n\n  _createClass(Ht, [{\n    key: \"add\",\n    value: function add(t, e) {\n      return this.merge(Jt(t, e));\n    }\n  }, {\n    key: \"remove\",\n    value: function remove(t) {\n      return new Ht(Gt(this.values, t));\n    }\n  }, {\n    key: \"get\",\n    value: function get(t) {\n      return this.values[t];\n    }\n  }, {\n    key: \"has\",\n    value: function has(t) {\n      return t in this.values;\n    }\n  }, {\n    key: \"merge\",\n    value: function merge(t) {\n      return new Ht(Kt(this.values, $t(t)));\n    }\n  }, {\n    key: \"slice\",\n    value: function slice(t) {\n      var _this5 = this;\n\n      var e = {};\n      return Array.from(t).forEach(function (t) {\n        _this5.has(t) && (e[t] = _this5.values[t]);\n      }), new Ht(e);\n    }\n  }, {\n    key: \"getKeys\",\n    value: function getKeys() {\n      return Object.keys(this.values);\n    }\n  }, {\n    key: \"getKeysCommonToHash\",\n    value: function getKeysCommonToHash(t) {\n      var _this6 = this;\n\n      return t = Yt(t), this.getKeys().filter(function (e) {\n        return _this6.values[e] === t.values[e];\n      });\n    }\n  }, {\n    key: \"isEqualTo\",\n    value: function isEqualTo(t) {\n      return ot(this.toArray(), Yt(t).toArray());\n    }\n  }, {\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return 0 === this.getKeys().length;\n    }\n  }, {\n    key: \"toArray\",\n    value: function toArray() {\n      if (!this.array) {\n        var _t4 = [];\n\n        for (var _e7 in this.values) {\n          var _i9 = this.values[_e7];\n\n          _t4.push(_t4.push(_e7, _i9));\n        }\n\n        this.array = _t4.slice(0);\n      }\n\n      return this.array;\n    }\n  }, {\n    key: \"toObject\",\n    value: function toObject() {\n      return Gt(this.values);\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this.toObject();\n    }\n  }, {\n    key: \"contentsForInspection\",\n    value: function contentsForInspection() {\n      return {\n        values: JSON.stringify(this.values)\n      };\n    }\n  }], [{\n    key: \"fromCommonAttributesOfObjects\",\n    value: function fromCommonAttributesOfObjects() {\n      var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n      if (!t.length) return new this();\n      var e = Yt(t[0]),\n          i = e.getKeys();\n      return t.slice(1).forEach(function (t) {\n        i = e.getKeysCommonToHash(Yt(t)), e = e.slice(i);\n      }), e;\n    }\n  }, {\n    key: \"box\",\n    value: function box(t) {\n      return Yt(t);\n    }\n  }]);\n\n  return Ht;\n}(rt);\n\nvar Jt = function Jt(t, e) {\n  var i = {};\n  return i[t] = e, i;\n},\n    Kt = function Kt(t, e) {\n  var i = Gt(t);\n\n  for (var _t5 in e) {\n    var _n5 = e[_t5];\n    i[_t5] = _n5;\n  }\n\n  return i;\n},\n    Gt = function Gt(t, e) {\n  var i = {};\n  return Object.keys(t).sort().forEach(function (n) {\n    n !== e && (i[n] = t[n]);\n  }), i;\n},\n    Yt = function Yt(t) {\n  return t instanceof Ht ? t : new Ht(t);\n},\n    $t = function $t(t) {\n  return t instanceof Ht ? t.values : t;\n};\n\nvar Xt = /*#__PURE__*/function () {\n  function Xt() {\n    _classCallCheck(this, Xt);\n\n    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [],\n        _ref7 = arguments.length > 1 ? arguments[1] : void 0,\n        e = _ref7.depth,\n        i = _ref7.asTree;\n\n    this.objects = t, i && (this.depth = e, this.objects = this.constructor.groupObjects(this.objects, {\n      asTree: i,\n      depth: this.depth + 1\n    }));\n  }\n\n  _createClass(Xt, [{\n    key: \"getObjects\",\n    value: function getObjects() {\n      return this.objects;\n    }\n  }, {\n    key: \"getDepth\",\n    value: function getDepth() {\n      return this.depth;\n    }\n  }, {\n    key: \"getCacheKey\",\n    value: function getCacheKey() {\n      var t = [\"objectGroup\"];\n      return Array.from(this.getObjects()).forEach(function (e) {\n        t.push(e.getCacheKey());\n      }), t.join(\"/\");\n    }\n  }], [{\n    key: \"groupObjects\",\n    value: function groupObjects() {\n      var _this7 = this;\n\n      var t,\n          e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [],\n          _ref8 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          i = _ref8.depth,\n          n = _ref8.asTree;\n\n      n && null == i && (i = 0);\n      var r = [];\n      return Array.from(e).forEach(function (e) {\n        var o;\n\n        if (t) {\n          var s, a, l;\n          if (null !== (s = e.canBeGrouped) && void 0 !== s && s.call(e, i) && null !== (a = (l = t[t.length - 1]).canBeGroupedWith) && void 0 !== a && a.call(l, e, i)) return void t.push(e);\n          r.push(new _this7(t, {\n            depth: i,\n            asTree: n\n          })), t = null;\n        }\n\n        null !== (o = e.canBeGrouped) && void 0 !== o && o.call(e, i) ? t = [e] : r.push(e);\n      }), t && r.push(new this(t, {\n        depth: i,\n        asTree: n\n      })), r;\n    }\n  }]);\n\n  return Xt;\n}();\n\nvar Zt = /*#__PURE__*/function (_q4) {\n  _inherits(Zt, _q4);\n\n  var _super5 = _createSuper(Zt);\n\n  function Zt() {\n    var _this8;\n\n    _classCallCheck(this, Zt);\n\n    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n    _this8 = _super5.apply(this, arguments), _this8.objects = {}, Array.from(t).forEach(function (t) {\n      var e = JSON.stringify(t);\n      null == _this8.objects[e] && (_this8.objects[e] = t);\n    });\n    return _this8;\n  }\n\n  _createClass(Zt, [{\n    key: \"find\",\n    value: function find(t) {\n      var e = JSON.stringify(t);\n      return this.objects[e];\n    }\n  }]);\n\n  return Zt;\n}(q);\n\nvar Qt = /*#__PURE__*/function () {\n  function Qt(t) {\n    _classCallCheck(this, Qt);\n\n    this.reset(t);\n  }\n\n  _createClass(Qt, [{\n    key: \"add\",\n    value: function add(t) {\n      var e = te(t);\n      this.elements[e] = t;\n    }\n  }, {\n    key: \"remove\",\n    value: function remove(t) {\n      var e = te(t),\n          i = this.elements[e];\n      if (i) return delete this.elements[e], i;\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      var _this9 = this;\n\n      var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n      return this.elements = {}, Array.from(t).forEach(function (t) {\n        _this9.add(t);\n      }), t;\n    }\n  }]);\n\n  return Qt;\n}();\n\nvar te = function te(t) {\n  return t.dataset.trixStoreKey;\n};\n\nvar ee = /*#__PURE__*/function (_q5) {\n  _inherits(ee, _q5);\n\n  var _super6 = _createSuper(ee);\n\n  function ee() {\n    _classCallCheck(this, ee);\n\n    return _super6.apply(this, arguments);\n  }\n\n  _createClass(ee, [{\n    key: \"isPerforming\",\n    value: function isPerforming() {\n      return !0 === this.performing;\n    }\n  }, {\n    key: \"hasPerformed\",\n    value: function hasPerformed() {\n      return !0 === this.performed;\n    }\n  }, {\n    key: \"hasSucceeded\",\n    value: function hasSucceeded() {\n      return this.performed && this.succeeded;\n    }\n  }, {\n    key: \"hasFailed\",\n    value: function hasFailed() {\n      return this.performed && !this.succeeded;\n    }\n  }, {\n    key: \"getPromise\",\n    value: function getPromise() {\n      var _this10 = this;\n\n      return this.promise || (this.promise = new Promise(function (t, e) {\n        return _this10.performing = !0, _this10.perform(function (i, n) {\n          _this10.succeeded = i, _this10.performing = !1, _this10.performed = !0, _this10.succeeded ? t(n) : e(n);\n        });\n      })), this.promise;\n    }\n  }, {\n    key: \"perform\",\n    value: function perform(t) {\n      return t(!1);\n    }\n  }, {\n    key: \"release\",\n    value: function release() {\n      var t, e;\n      null === (t = this.promise) || void 0 === t || null === (e = t.cancel) || void 0 === e || e.call(t), this.promise = null, this.performing = null, this.performed = null, this.succeeded = null;\n    }\n  }]);\n\n  return ee;\n}(q);\n\nee.proxyMethod(\"getPromise().then\"), ee.proxyMethod(\"getPromise().catch\");\n\nvar ie = /*#__PURE__*/function (_q6) {\n  _inherits(ie, _q6);\n\n  var _super7 = _createSuper(ie);\n\n  function ie(t) {\n    var _this11;\n\n    _classCallCheck(this, ie);\n\n    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n    _this11 = _super7.apply(this, arguments), _this11.object = t, _this11.options = e, _this11.childViews = [], _this11.rootView = _assertThisInitialized(_this11);\n    return _this11;\n  }\n\n  _createClass(ie, [{\n    key: \"getNodes\",\n    value: function getNodes() {\n      return this.nodes || (this.nodes = this.createNodes()), this.nodes.map(function (t) {\n        return t.cloneNode(!0);\n      });\n    }\n  }, {\n    key: \"invalidate\",\n    value: function invalidate() {\n      var t;\n      return this.nodes = null, this.childViews = [], null === (t = this.parentView) || void 0 === t ? void 0 : t.invalidate();\n    }\n  }, {\n    key: \"invalidateViewForObject\",\n    value: function invalidateViewForObject(t) {\n      var e;\n      return null === (e = this.findViewForObject(t)) || void 0 === e ? void 0 : e.invalidate();\n    }\n  }, {\n    key: \"findOrCreateCachedChildView\",\n    value: function findOrCreateCachedChildView(t, e, i) {\n      var n = this.getCachedViewForObject(e);\n      return n ? this.recordChildView(n) : (n = this.createChildView.apply(this, arguments), this.cacheViewForObject(n, e)), n;\n    }\n  }, {\n    key: \"createChildView\",\n    value: function createChildView(t, e) {\n      var i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n      e instanceof Xt && (i.viewClass = t, t = ne);\n      var n = new t(e, i);\n      return this.recordChildView(n);\n    }\n  }, {\n    key: \"recordChildView\",\n    value: function recordChildView(t) {\n      return t.parentView = this, t.rootView = this.rootView, this.childViews.push(t), t;\n    }\n  }, {\n    key: \"getAllChildViews\",\n    value: function getAllChildViews() {\n      var t = [];\n      return this.childViews.forEach(function (e) {\n        t.push(e), t = t.concat(e.getAllChildViews());\n      }), t;\n    }\n  }, {\n    key: \"findElement\",\n    value: function findElement() {\n      return this.findElementForObject(this.object);\n    }\n  }, {\n    key: \"findElementForObject\",\n    value: function findElementForObject(t) {\n      var e = null == t ? void 0 : t.id;\n      if (e) return this.rootView.element.querySelector(\"[data-trix-id='\".concat(e, \"']\"));\n    }\n  }, {\n    key: \"findViewForObject\",\n    value: function findViewForObject(t) {\n      var _iterator = _createForOfIteratorHelper(this.getAllChildViews()),\n          _step;\n\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var _e8 = _step.value;\n          if (_e8.object === t) return _e8;\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n  }, {\n    key: \"getViewCache\",\n    value: function getViewCache() {\n      return this.rootView !== this ? this.rootView.getViewCache() : this.isViewCachingEnabled() ? (this.viewCache || (this.viewCache = {}), this.viewCache) : void 0;\n    }\n  }, {\n    key: \"isViewCachingEnabled\",\n    value: function isViewCachingEnabled() {\n      return !1 !== this.shouldCacheViews;\n    }\n  }, {\n    key: \"enableViewCaching\",\n    value: function enableViewCaching() {\n      this.shouldCacheViews = !0;\n    }\n  }, {\n    key: \"disableViewCaching\",\n    value: function disableViewCaching() {\n      this.shouldCacheViews = !1;\n    }\n  }, {\n    key: \"getCachedViewForObject\",\n    value: function getCachedViewForObject(t) {\n      var e;\n      return null === (e = this.getViewCache()) || void 0 === e ? void 0 : e[t.getCacheKey()];\n    }\n  }, {\n    key: \"cacheViewForObject\",\n    value: function cacheViewForObject(t, e) {\n      var i = this.getViewCache();\n      i && (i[e.getCacheKey()] = t);\n    }\n  }, {\n    key: \"garbageCollectCachedViews\",\n    value: function garbageCollectCachedViews() {\n      var t = this.getViewCache();\n\n      if (t) {\n        var _e9 = this.getAllChildViews().concat(this).map(function (t) {\n          return t.object.getCacheKey();\n        });\n\n        for (var _i10 in t) {\n          _e9.includes(_i10) || delete t[_i10];\n        }\n      }\n    }\n  }]);\n\n  return ie;\n}(q);\n\nvar ne = /*#__PURE__*/function (_ie) {\n  _inherits(ne, _ie);\n\n  var _super8 = _createSuper(ne);\n\n  function ne() {\n    var _this12;\n\n    _classCallCheck(this, ne);\n\n    _this12 = _super8.apply(this, arguments), _this12.objectGroup = _this12.object, _this12.viewClass = _this12.options.viewClass, delete _this12.options.viewClass;\n    return _this12;\n  }\n\n  _createClass(ne, [{\n    key: \"getChildViews\",\n    value: function getChildViews() {\n      var _this13 = this;\n\n      return this.childViews.length || Array.from(this.objectGroup.getObjects()).forEach(function (t) {\n        _this13.findOrCreateCachedChildView(_this13.viewClass, t, _this13.options);\n      }), this.childViews;\n    }\n  }, {\n    key: \"createNodes\",\n    value: function createNodes() {\n      var t = this.createContainerElement();\n      return this.getChildViews().forEach(function (e) {\n        Array.from(e.getNodes()).forEach(function (e) {\n          t.appendChild(e);\n        });\n      }), [t];\n    }\n  }, {\n    key: \"createContainerElement\",\n    value: function createContainerElement() {\n      var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.objectGroup.getDepth();\n      return this.getChildViews()[0].createContainerElement(t);\n    }\n  }]);\n\n  return ne;\n}(ie);\n/*! @license DOMPurify 3.2.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.3/LICENSE */\n\n\nvar re = Object.entries,\n    oe = Object.setPrototypeOf,\n    se = Object.isFrozen,\n    ae = Object.getPrototypeOf,\n    le = Object.getOwnPropertyDescriptor;\n\nvar ce = Object.freeze,\n    ue = Object.seal,\n    he = Object.create,\n    _ref9 = \"undefined\" != typeof Reflect && Reflect,\n    de = _ref9.apply,\n    ge = _ref9.construct;\n\nce || (ce = function ce(t) {\n  return t;\n}), ue || (ue = function ue(t) {\n  return t;\n}), de || (de = function de(t, e, i) {\n  return t.apply(e, i);\n}), ge || (ge = function ge(t, e) {\n  return _construct(t, _toConsumableArray(e));\n});\nvar me = Te(Array.prototype.forEach),\n    pe = Te(Array.prototype.pop),\n    fe = Te(Array.prototype.push),\n    be = Te(String.prototype.toLowerCase),\n    ve = Te(String.prototype.toString),\n    Ae = Te(String.prototype.match),\n    ye = Te(String.prototype.replace),\n    xe = Te(String.prototype.indexOf),\n    Ce = Te(String.prototype.trim),\n    Ee = Te(Object.prototype.hasOwnProperty),\n    Se = Te(RegExp.prototype.test),\n    Re = (ke = TypeError, function () {\n  for (var t = arguments.length, e = new Array(t), i = 0; i < t; i++) {\n    e[i] = arguments[i];\n  }\n\n  return ge(ke, e);\n});\nvar ke;\n\nfunction Te(t) {\n  return function (e) {\n    for (var i = arguments.length, n = new Array(i > 1 ? i - 1 : 0), r = 1; r < i; r++) {\n      n[r - 1] = arguments[r];\n    }\n\n    return de(t, e, n);\n  };\n}\n\nfunction we(t, e) {\n  var i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : be;\n  oe && oe(t, null);\n  var n = e.length;\n\n  for (; n--;) {\n    var _r3 = e[n];\n\n    if (\"string\" == typeof _r3) {\n      var _t6 = i(_r3);\n\n      _t6 !== _r3 && (se(e) || (e[n] = _t6), _r3 = _t6);\n    }\n\n    t[_r3] = !0;\n  }\n\n  return t;\n}\n\nfunction Le(t) {\n  for (var _e10 = 0; _e10 < t.length; _e10++) {\n    Ee(t, _e10) || (t[_e10] = null);\n  }\n\n  return t;\n}\n\nfunction De(t) {\n  var e = he(null);\n\n  var _iterator2 = _createForOfIteratorHelper(re(t)),\n      _step2;\n\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var _ref12 = _step2.value;\n\n      var _ref11 = _slicedToArray(_ref12, 2);\n\n      var _i11 = _ref11[0];\n      var _n6 = _ref11[1];\n      Ee(t, _i11) && (Array.isArray(_n6) ? e[_i11] = Le(_n6) : _n6 && \"object\" == _typeof(_n6) && _n6.constructor === Object ? e[_i11] = De(_n6) : e[_i11] = _n6);\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n\n  return e;\n}\n\nfunction Ne(t, e) {\n  for (; null !== t;) {\n    var _i12 = le(t, e);\n\n    if (_i12) {\n      if (_i12.get) return Te(_i12.get);\n      if (\"function\" == typeof _i12.value) return Te(_i12.value);\n    }\n\n    t = ae(t);\n  }\n\n  return function () {\n    return null;\n  };\n}\n\nvar Ie = ce([\"a\", \"abbr\", \"acronym\", \"address\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"bdi\", \"bdo\", \"big\", \"blink\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\", \"center\", \"cite\", \"code\", \"col\", \"colgroup\", \"content\", \"data\", \"datalist\", \"dd\", \"decorator\", \"del\", \"details\", \"dfn\", \"dialog\", \"dir\", \"div\", \"dl\", \"dt\", \"element\", \"em\", \"fieldset\", \"figcaption\", \"figure\", \"font\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"img\", \"input\", \"ins\", \"kbd\", \"label\", \"legend\", \"li\", \"main\", \"map\", \"mark\", \"marquee\", \"menu\", \"menuitem\", \"meter\", \"nav\", \"nobr\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"picture\", \"pre\", \"progress\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"section\", \"select\", \"shadow\", \"small\", \"source\", \"spacer\", \"span\", \"strike\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"tr\", \"track\", \"tt\", \"u\", \"ul\", \"var\", \"video\", \"wbr\"]),\n    Oe = ce([\"svg\", \"a\", \"altglyph\", \"altglyphdef\", \"altglyphitem\", \"animatecolor\", \"animatemotion\", \"animatetransform\", \"circle\", \"clippath\", \"defs\", \"desc\", \"ellipse\", \"filter\", \"font\", \"g\", \"glyph\", \"glyphref\", \"hkern\", \"image\", \"line\", \"lineargradient\", \"marker\", \"mask\", \"metadata\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialgradient\", \"rect\", \"stop\", \"style\", \"switch\", \"symbol\", \"text\", \"textpath\", \"title\", \"tref\", \"tspan\", \"view\", \"vkern\"]),\n    Fe = ce([\"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\"]),\n    Pe = ce([\"animate\", \"color-profile\", \"cursor\", \"discard\", \"font-face\", \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \"foreignobject\", \"hatch\", \"hatchpath\", \"mesh\", \"meshgradient\", \"meshpatch\", \"meshrow\", \"missing-glyph\", \"script\", \"set\", \"solidcolor\", \"unknown\", \"use\"]),\n    Me = ce([\"math\", \"menclose\", \"merror\", \"mfenced\", \"mfrac\", \"mglyph\", \"mi\", \"mlabeledtr\", \"mmultiscripts\", \"mn\", \"mo\", \"mover\", \"mpadded\", \"mphantom\", \"mroot\", \"mrow\", \"ms\", \"mspace\", \"msqrt\", \"mstyle\", \"msub\", \"msup\", \"msubsup\", \"mtable\", \"mtd\", \"mtext\", \"mtr\", \"munder\", \"munderover\", \"mprescripts\"]),\n    Be = ce([\"maction\", \"maligngroup\", \"malignmark\", \"mlongdiv\", \"mscarries\", \"mscarry\", \"msgroup\", \"mstack\", \"msline\", \"msrow\", \"semantics\", \"annotation\", \"annotation-xml\", \"mprescripts\", \"none\"]),\n    _e = ce([\"#text\"]),\n    je = ce([\"accept\", \"action\", \"align\", \"alt\", \"autocapitalize\", \"autocomplete\", \"autopictureinpicture\", \"autoplay\", \"background\", \"bgcolor\", \"border\", \"capture\", \"cellpadding\", \"cellspacing\", \"checked\", \"cite\", \"class\", \"clear\", \"color\", \"cols\", \"colspan\", \"controls\", \"controlslist\", \"coords\", \"crossorigin\", \"datetime\", \"decoding\", \"default\", \"dir\", \"disabled\", \"disablepictureinpicture\", \"disableremoteplayback\", \"download\", \"draggable\", \"enctype\", \"enterkeyhint\", \"face\", \"for\", \"headers\", \"height\", \"hidden\", \"high\", \"href\", \"hreflang\", \"id\", \"inputmode\", \"integrity\", \"ismap\", \"kind\", \"label\", \"lang\", \"list\", \"loading\", \"loop\", \"low\", \"max\", \"maxlength\", \"media\", \"method\", \"min\", \"minlength\", \"multiple\", \"muted\", \"name\", \"nonce\", \"noshade\", \"novalidate\", \"nowrap\", \"open\", \"optimum\", \"pattern\", \"placeholder\", \"playsinline\", \"popover\", \"popovertarget\", \"popovertargetaction\", \"poster\", \"preload\", \"pubdate\", \"radiogroup\", \"readonly\", \"rel\", \"required\", \"rev\", \"reversed\", \"role\", \"rows\", \"rowspan\", \"spellcheck\", \"scope\", \"selected\", \"shape\", \"size\", \"sizes\", \"span\", \"srclang\", \"start\", \"src\", \"srcset\", \"step\", \"style\", \"summary\", \"tabindex\", \"title\", \"translate\", \"type\", \"usemap\", \"valign\", \"value\", \"width\", \"wrap\", \"xmlns\", \"slot\"]),\n    We = ce([\"accent-height\", \"accumulate\", \"additive\", \"alignment-baseline\", \"amplitude\", \"ascent\", \"attributename\", \"attributetype\", \"azimuth\", \"basefrequency\", \"baseline-shift\", \"begin\", \"bias\", \"by\", \"class\", \"clip\", \"clippathunits\", \"clip-path\", \"clip-rule\", \"color\", \"color-interpolation\", \"color-interpolation-filters\", \"color-profile\", \"color-rendering\", \"cx\", \"cy\", \"d\", \"dx\", \"dy\", \"diffuseconstant\", \"direction\", \"display\", \"divisor\", \"dur\", \"edgemode\", \"elevation\", \"end\", \"exponent\", \"fill\", \"fill-opacity\", \"fill-rule\", \"filter\", \"filterunits\", \"flood-color\", \"flood-opacity\", \"font-family\", \"font-size\", \"font-size-adjust\", \"font-stretch\", \"font-style\", \"font-variant\", \"font-weight\", \"fx\", \"fy\", \"g1\", \"g2\", \"glyph-name\", \"glyphref\", \"gradientunits\", \"gradienttransform\", \"height\", \"href\", \"id\", \"image-rendering\", \"in\", \"in2\", \"intercept\", \"k\", \"k1\", \"k2\", \"k3\", \"k4\", \"kerning\", \"keypoints\", \"keysplines\", \"keytimes\", \"lang\", \"lengthadjust\", \"letter-spacing\", \"kernelmatrix\", \"kernelunitlength\", \"lighting-color\", \"local\", \"marker-end\", \"marker-mid\", \"marker-start\", \"markerheight\", \"markerunits\", \"markerwidth\", \"maskcontentunits\", \"maskunits\", \"max\", \"mask\", \"media\", \"method\", \"mode\", \"min\", \"name\", \"numoctaves\", \"offset\", \"operator\", \"opacity\", \"order\", \"orient\", \"orientation\", \"origin\", \"overflow\", \"paint-order\", \"path\", \"pathlength\", \"patterncontentunits\", \"patterntransform\", \"patternunits\", \"points\", \"preservealpha\", \"preserveaspectratio\", \"primitiveunits\", \"r\", \"rx\", \"ry\", \"radius\", \"refx\", \"refy\", \"repeatcount\", \"repeatdur\", \"restart\", \"result\", \"rotate\", \"scale\", \"seed\", \"shape-rendering\", \"slope\", \"specularconstant\", \"specularexponent\", \"spreadmethod\", \"startoffset\", \"stddeviation\", \"stitchtiles\", \"stop-color\", \"stop-opacity\", \"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-linecap\", \"stroke-linejoin\", \"stroke-miterlimit\", \"stroke-opacity\", \"stroke\", \"stroke-width\", \"style\", \"surfacescale\", \"systemlanguage\", \"tabindex\", \"tablevalues\", \"targetx\", \"targety\", \"transform\", \"transform-origin\", \"text-anchor\", \"text-decoration\", \"text-rendering\", \"textlength\", \"type\", \"u1\", \"u2\", \"unicode\", \"values\", \"viewbox\", \"visibility\", \"version\", \"vert-adv-y\", \"vert-origin-x\", \"vert-origin-y\", \"width\", \"word-spacing\", \"wrap\", \"writing-mode\", \"xchannelselector\", \"ychannelselector\", \"x\", \"x1\", \"x2\", \"xmlns\", \"y\", \"y1\", \"y2\", \"z\", \"zoomandpan\"]),\n    Ue = ce([\"accent\", \"accentunder\", \"align\", \"bevelled\", \"close\", \"columnsalign\", \"columnlines\", \"columnspan\", \"denomalign\", \"depth\", \"dir\", \"display\", \"displaystyle\", \"encoding\", \"fence\", \"frame\", \"height\", \"href\", \"id\", \"largeop\", \"length\", \"linethickness\", \"lspace\", \"lquote\", \"mathbackground\", \"mathcolor\", \"mathsize\", \"mathvariant\", \"maxsize\", \"minsize\", \"movablelimits\", \"notation\", \"numalign\", \"open\", \"rowalign\", \"rowlines\", \"rowspacing\", \"rowspan\", \"rspace\", \"rquote\", \"scriptlevel\", \"scriptminsize\", \"scriptsizemultiplier\", \"selection\", \"separator\", \"separators\", \"stretchy\", \"subscriptshift\", \"supscriptshift\", \"symmetric\", \"voffset\", \"width\", \"xmlns\"]),\n    Ve = ce([\"xlink:href\", \"xml:id\", \"xlink:title\", \"xml:space\", \"xmlns:xlink\"]),\n    ze = ue(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm),\n    qe = ue(/<%[\\w\\W]*|[\\w\\W]*%>/gm),\n    He = ue(/\\$\\{[\\w\\W]*}/gm),\n    Je = ue(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/),\n    Ke = ue(/^aria-[\\-\\w]+$/),\n    Ge = ue(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i),\n    Ye = ue(/^(?:\\w+script|data):/i),\n    $e = ue(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g),\n    Xe = ue(/^html$/i),\n    Ze = ue(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar Qe = Object.freeze({\n  __proto__: null,\n  ARIA_ATTR: Ke,\n  ATTR_WHITESPACE: $e,\n  CUSTOM_ELEMENT: Ze,\n  DATA_ATTR: Je,\n  DOCTYPE_NAME: Xe,\n  ERB_EXPR: qe,\n  IS_ALLOWED_URI: Ge,\n  IS_SCRIPT_OR_DATA: Ye,\n  MUSTACHE_EXPR: ze,\n  TMPLIT_EXPR: He\n});\n\nvar ti = 1,\n    ei = 3,\n    ii = 7,\n    ni = 8,\n    ri = 9,\n    oi = function oi() {\n  return \"undefined\" == typeof window ? null : window;\n};\n\nvar si = function t() {\n  var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : oi();\n\n  var i = function i(e) {\n    return t(e);\n  };\n\n  if (i.version = \"3.2.3\", i.removed = [], !e || !e.document || e.document.nodeType !== ri) return i.isSupported = !1, i;\n  var n = e.document;\n  var r = n,\n      o = r.currentScript,\n      s = e.DocumentFragment,\n      a = e.HTMLTemplateElement,\n      l = e.Node,\n      c = e.Element,\n      u = e.NodeFilter,\n      _e$NamedNodeMap = e.NamedNodeMap,\n      h = _e$NamedNodeMap === void 0 ? e.NamedNodeMap || e.MozNamedAttrMap : _e$NamedNodeMap,\n      d = e.HTMLFormElement,\n      g = e.DOMParser,\n      m = e.trustedTypes,\n      p = c.prototype,\n      f = Ne(p, \"cloneNode\"),\n      b = Ne(p, \"remove\"),\n      v = Ne(p, \"nextSibling\"),\n      A = Ne(p, \"childNodes\"),\n      y = Ne(p, \"parentNode\");\n\n  if (\"function\" == typeof a) {\n    var _t7 = n.createElement(\"template\");\n\n    _t7.content && _t7.content.ownerDocument && (n = _t7.content.ownerDocument);\n  }\n\n  var x,\n      C = \"\";\n  var _n7 = n,\n      E = _n7.implementation,\n      S = _n7.createNodeIterator,\n      R = _n7.createDocumentFragment,\n      k = _n7.getElementsByTagName,\n      T = r.importNode;\n  var w = {\n    afterSanitizeAttributes: [],\n    afterSanitizeElements: [],\n    afterSanitizeShadowDOM: [],\n    beforeSanitizeAttributes: [],\n    beforeSanitizeElements: [],\n    beforeSanitizeShadowDOM: [],\n    uponSanitizeAttribute: [],\n    uponSanitizeElement: [],\n    uponSanitizeShadowNode: []\n  };\n  i.isSupported = \"function\" == typeof re && \"function\" == typeof y && E && void 0 !== E.createHTMLDocument;\n  var L = Qe.MUSTACHE_EXPR,\n      D = Qe.ERB_EXPR,\n      N = Qe.TMPLIT_EXPR,\n      I = Qe.DATA_ATTR,\n      O = Qe.ARIA_ATTR,\n      F = Qe.IS_SCRIPT_OR_DATA,\n      P = Qe.ATTR_WHITESPACE,\n      M = Qe.CUSTOM_ELEMENT;\n  var B = Qe.IS_ALLOWED_URI,\n      _ = null;\n  var j = we({}, [].concat(_toConsumableArray(Ie), _toConsumableArray(Oe), _toConsumableArray(Fe), _toConsumableArray(Me), _toConsumableArray(_e)));\n  var W = null;\n  var U = we({}, [].concat(_toConsumableArray(je), _toConsumableArray(We), _toConsumableArray(Ue), _toConsumableArray(Ve)));\n  var V = Object.seal(he(null, {\n    tagNameCheck: {\n      writable: !0,\n      configurable: !1,\n      enumerable: !0,\n      value: null\n    },\n    attributeNameCheck: {\n      writable: !0,\n      configurable: !1,\n      enumerable: !0,\n      value: null\n    },\n    allowCustomizedBuiltInElements: {\n      writable: !0,\n      configurable: !1,\n      enumerable: !0,\n      value: !1\n    }\n  })),\n      z = null,\n      q = null,\n      H = !0,\n      J = !0,\n      K = !1,\n      G = !0,\n      Y = !1,\n      $ = !0,\n      X = !1,\n      Z = !1,\n      Q = !1,\n      tt = !1,\n      et = !1,\n      it = !1,\n      nt = !0,\n      rt = !1,\n      ot = !0,\n      st = !1,\n      at = {},\n      lt = null;\n  var ct = we({}, [\"annotation-xml\", \"audio\", \"colgroup\", \"desc\", \"foreignobject\", \"head\", \"iframe\", \"math\", \"mi\", \"mn\", \"mo\", \"ms\", \"mtext\", \"noembed\", \"noframes\", \"noscript\", \"plaintext\", \"script\", \"style\", \"svg\", \"template\", \"thead\", \"title\", \"video\", \"xmp\"]);\n  var ut = null;\n  var ht = we({}, [\"audio\", \"video\", \"img\", \"source\", \"image\", \"track\"]);\n  var dt = null;\n  var gt = we({}, [\"alt\", \"class\", \"for\", \"id\", \"label\", \"name\", \"pattern\", \"placeholder\", \"role\", \"summary\", \"title\", \"value\", \"style\", \"xmlns\"]),\n      mt = \"http://www.w3.org/1998/Math/MathML\",\n      pt = \"http://www.w3.org/2000/svg\",\n      ft = \"http://www.w3.org/1999/xhtml\";\n  var bt = ft,\n      vt = !1,\n      At = null;\n  var yt = we({}, [mt, pt, ft], ve);\n  var xt = we({}, [\"mi\", \"mo\", \"mn\", \"ms\", \"mtext\"]),\n      Ct = we({}, [\"annotation-xml\"]);\n  var Et = we({}, [\"title\", \"style\", \"font\", \"a\", \"script\"]);\n  var St = null;\n  var Rt = [\"application/xhtml+xml\", \"text/html\"];\n  var kt = null,\n      Tt = null;\n\n  var wt = n.createElement(\"form\"),\n      Lt = function Lt(t) {\n    return t instanceof RegExp || t instanceof Function;\n  },\n      Dt = function Dt() {\n    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n\n    if (!Tt || Tt !== t) {\n      if (t && \"object\" == _typeof(t) || (t = {}), t = De(t), St = -1 === Rt.indexOf(t.PARSER_MEDIA_TYPE) ? \"text/html\" : t.PARSER_MEDIA_TYPE, kt = \"application/xhtml+xml\" === St ? ve : be, _ = Ee(t, \"ALLOWED_TAGS\") ? we({}, t.ALLOWED_TAGS, kt) : j, W = Ee(t, \"ALLOWED_ATTR\") ? we({}, t.ALLOWED_ATTR, kt) : U, At = Ee(t, \"ALLOWED_NAMESPACES\") ? we({}, t.ALLOWED_NAMESPACES, ve) : yt, dt = Ee(t, \"ADD_URI_SAFE_ATTR\") ? we(De(gt), t.ADD_URI_SAFE_ATTR, kt) : gt, ut = Ee(t, \"ADD_DATA_URI_TAGS\") ? we(De(ht), t.ADD_DATA_URI_TAGS, kt) : ht, lt = Ee(t, \"FORBID_CONTENTS\") ? we({}, t.FORBID_CONTENTS, kt) : ct, z = Ee(t, \"FORBID_TAGS\") ? we({}, t.FORBID_TAGS, kt) : {}, q = Ee(t, \"FORBID_ATTR\") ? we({}, t.FORBID_ATTR, kt) : {}, at = !!Ee(t, \"USE_PROFILES\") && t.USE_PROFILES, H = !1 !== t.ALLOW_ARIA_ATTR, J = !1 !== t.ALLOW_DATA_ATTR, K = t.ALLOW_UNKNOWN_PROTOCOLS || !1, G = !1 !== t.ALLOW_SELF_CLOSE_IN_ATTR, Y = t.SAFE_FOR_TEMPLATES || !1, $ = !1 !== t.SAFE_FOR_XML, X = t.WHOLE_DOCUMENT || !1, tt = t.RETURN_DOM || !1, et = t.RETURN_DOM_FRAGMENT || !1, it = t.RETURN_TRUSTED_TYPE || !1, Q = t.FORCE_BODY || !1, nt = !1 !== t.SANITIZE_DOM, rt = t.SANITIZE_NAMED_PROPS || !1, ot = !1 !== t.KEEP_CONTENT, st = t.IN_PLACE || !1, B = t.ALLOWED_URI_REGEXP || Ge, bt = t.NAMESPACE || ft, xt = t.MATHML_TEXT_INTEGRATION_POINTS || xt, Ct = t.HTML_INTEGRATION_POINTS || Ct, V = t.CUSTOM_ELEMENT_HANDLING || {}, t.CUSTOM_ELEMENT_HANDLING && Lt(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck) && (V.tagNameCheck = t.CUSTOM_ELEMENT_HANDLING.tagNameCheck), t.CUSTOM_ELEMENT_HANDLING && Lt(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck) && (V.attributeNameCheck = t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck), t.CUSTOM_ELEMENT_HANDLING && \"boolean\" == typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (V.allowCustomizedBuiltInElements = t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements), Y && (J = !1), et && (tt = !0), at && (_ = we({}, _e), W = [], !0 === at.html && (we(_, Ie), we(W, je)), !0 === at.svg && (we(_, Oe), we(W, We), we(W, Ve)), !0 === at.svgFilters && (we(_, Fe), we(W, We), we(W, Ve)), !0 === at.mathMl && (we(_, Me), we(W, Ue), we(W, Ve))), t.ADD_TAGS && (_ === j && (_ = De(_)), we(_, t.ADD_TAGS, kt)), t.ADD_ATTR && (W === U && (W = De(W)), we(W, t.ADD_ATTR, kt)), t.ADD_URI_SAFE_ATTR && we(dt, t.ADD_URI_SAFE_ATTR, kt), t.FORBID_CONTENTS && (lt === ct && (lt = De(lt)), we(lt, t.FORBID_CONTENTS, kt)), ot && (_[\"#text\"] = !0), X && we(_, [\"html\", \"head\", \"body\"]), _.table && (we(_, [\"tbody\"]), delete z.tbody), t.TRUSTED_TYPES_POLICY) {\n        if (\"function\" != typeof t.TRUSTED_TYPES_POLICY.createHTML) throw Re('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n        if (\"function\" != typeof t.TRUSTED_TYPES_POLICY.createScriptURL) throw Re('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n        x = t.TRUSTED_TYPES_POLICY, C = x.createHTML(\"\");\n      } else void 0 === x && (x = function (t, e) {\n        if (\"object\" != _typeof(t) || \"function\" != typeof t.createPolicy) return null;\n        var i = null;\n        var n = \"data-tt-policy-suffix\";\n        e && e.hasAttribute(n) && (i = e.getAttribute(n));\n        var r = \"dompurify\" + (i ? \"#\" + i : \"\");\n\n        try {\n          return t.createPolicy(r, {\n            createHTML: function createHTML(t) {\n              return t;\n            },\n            createScriptURL: function createScriptURL(t) {\n              return t;\n            }\n          });\n        } catch (t) {\n          return console.warn(\"TrustedTypes policy \" + r + \" could not be created.\"), null;\n        }\n      }(m, o)), null !== x && \"string\" == typeof C && (C = x.createHTML(\"\"));\n\n      ce && ce(t), Tt = t;\n    }\n  },\n      Nt = we({}, [].concat(_toConsumableArray(Oe), _toConsumableArray(Fe), _toConsumableArray(Pe))),\n      It = we({}, [].concat(_toConsumableArray(Me), _toConsumableArray(Be))),\n      Ot = function Ot(t) {\n    fe(i.removed, {\n      element: t\n    });\n\n    try {\n      y(t).removeChild(t);\n    } catch (e) {\n      b(t);\n    }\n  },\n      Ft = function Ft(t, e) {\n    try {\n      fe(i.removed, {\n        attribute: e.getAttributeNode(t),\n        from: e\n      });\n    } catch (t) {\n      fe(i.removed, {\n        attribute: null,\n        from: e\n      });\n    }\n\n    if (e.removeAttribute(t), \"is\" === t) if (tt || et) try {\n      Ot(e);\n    } catch (t) {} else try {\n      e.setAttribute(t, \"\");\n    } catch (t) {}\n  },\n      Pt = function Pt(t) {\n    var e = null,\n        i = null;\n    if (Q) t = \"<remove></remove>\" + t;else {\n      var _e11 = Ae(t, /^[\\r\\n\\t ]+/);\n\n      i = _e11 && _e11[0];\n    }\n    \"application/xhtml+xml\" === St && bt === ft && (t = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + t + \"</body></html>\");\n    var r = x ? x.createHTML(t) : t;\n    if (bt === ft) try {\n      e = new g().parseFromString(r, St);\n    } catch (t) {}\n\n    if (!e || !e.documentElement) {\n      e = E.createDocument(bt, \"template\", null);\n\n      try {\n        e.documentElement.innerHTML = vt ? C : r;\n      } catch (t) {}\n    }\n\n    var o = e.body || e.documentElement;\n    return t && i && o.insertBefore(n.createTextNode(i), o.childNodes[0] || null), bt === ft ? k.call(e, X ? \"html\" : \"body\")[0] : X ? e.documentElement : o;\n  },\n      Mt = function Mt(t) {\n    return S.call(t.ownerDocument || t, t, u.SHOW_ELEMENT | u.SHOW_COMMENT | u.SHOW_TEXT | u.SHOW_PROCESSING_INSTRUCTION | u.SHOW_CDATA_SECTION, null);\n  },\n      Bt = function Bt(t) {\n    return t instanceof d && (\"string\" != typeof t.nodeName || \"string\" != typeof t.textContent || \"function\" != typeof t.removeChild || !(t.attributes instanceof h) || \"function\" != typeof t.removeAttribute || \"function\" != typeof t.setAttribute || \"string\" != typeof t.namespaceURI || \"function\" != typeof t.insertBefore || \"function\" != typeof t.hasChildNodes);\n  },\n      _t = function _t(t) {\n    return \"function\" == typeof l && t instanceof l;\n  };\n\n  function jt(t, e, n) {\n    me(t, function (t) {\n      t.call(i, e, n, Tt);\n    });\n  }\n\n  var Wt = function Wt(t) {\n    var e = null;\n    if (jt(w.beforeSanitizeElements, t, null), Bt(t)) return Ot(t), !0;\n    var n = kt(t.nodeName);\n    if (jt(w.uponSanitizeElement, t, {\n      tagName: n,\n      allowedTags: _\n    }), t.hasChildNodes() && !_t(t.firstElementChild) && Se(/<[/\\w]/g, t.innerHTML) && Se(/<[/\\w]/g, t.textContent)) return Ot(t), !0;\n    if (t.nodeType === ii) return Ot(t), !0;\n    if ($ && t.nodeType === ni && Se(/<[/\\w]/g, t.data)) return Ot(t), !0;\n\n    if (!_[n] || z[n]) {\n      if (!z[n] && Vt(n)) {\n        if (V.tagNameCheck instanceof RegExp && Se(V.tagNameCheck, n)) return !1;\n        if (V.tagNameCheck instanceof Function && V.tagNameCheck(n)) return !1;\n      }\n\n      if (ot && !lt[n]) {\n        var _e12 = y(t) || t.parentNode,\n            _i13 = A(t) || t.childNodes;\n\n        if (_i13 && _e12) {\n          for (var _n8 = _i13.length - 1; _n8 >= 0; --_n8) {\n            var _r4 = f(_i13[_n8], !0);\n\n            _r4.__removalCount = (t.__removalCount || 0) + 1, _e12.insertBefore(_r4, v(t));\n          }\n        }\n      }\n\n      return Ot(t), !0;\n    }\n\n    return t instanceof c && !function (t) {\n      var e = y(t);\n      e && e.tagName || (e = {\n        namespaceURI: bt,\n        tagName: \"template\"\n      });\n      var i = be(t.tagName),\n          n = be(e.tagName);\n      return !!At[t.namespaceURI] && (t.namespaceURI === pt ? e.namespaceURI === ft ? \"svg\" === i : e.namespaceURI === mt ? \"svg\" === i && (\"annotation-xml\" === n || xt[n]) : Boolean(Nt[i]) : t.namespaceURI === mt ? e.namespaceURI === ft ? \"math\" === i : e.namespaceURI === pt ? \"math\" === i && Ct[n] : Boolean(It[i]) : t.namespaceURI === ft ? !(e.namespaceURI === pt && !Ct[n]) && !(e.namespaceURI === mt && !xt[n]) && !It[i] && (Et[i] || !Nt[i]) : !(\"application/xhtml+xml\" !== St || !At[t.namespaceURI]));\n    }(t) ? (Ot(t), !0) : \"noscript\" !== n && \"noembed\" !== n && \"noframes\" !== n || !Se(/<\\/no(script|embed|frames)/i, t.innerHTML) ? (Y && t.nodeType === ei && (e = t.textContent, me([L, D, N], function (t) {\n      e = ye(e, t, \" \");\n    }), t.textContent !== e && (fe(i.removed, {\n      element: t.cloneNode()\n    }), t.textContent = e)), jt(w.afterSanitizeElements, t, null), !1) : (Ot(t), !0);\n  },\n      Ut = function Ut(t, e, i) {\n    if (nt && (\"id\" === e || \"name\" === e) && (i in n || i in wt)) return !1;\n    if (J && !q[e] && Se(I, e)) ;else if (H && Se(O, e)) ;else if (!W[e] || q[e]) {\n      if (!(Vt(t) && (V.tagNameCheck instanceof RegExp && Se(V.tagNameCheck, t) || V.tagNameCheck instanceof Function && V.tagNameCheck(t)) && (V.attributeNameCheck instanceof RegExp && Se(V.attributeNameCheck, e) || V.attributeNameCheck instanceof Function && V.attributeNameCheck(e)) || \"is\" === e && V.allowCustomizedBuiltInElements && (V.tagNameCheck instanceof RegExp && Se(V.tagNameCheck, i) || V.tagNameCheck instanceof Function && V.tagNameCheck(i)))) return !1;\n    } else if (dt[e]) ;else if (Se(B, ye(i, P, \"\"))) ;else if (\"src\" !== e && \"xlink:href\" !== e && \"href\" !== e || \"script\" === t || 0 !== xe(i, \"data:\") || !ut[t]) {\n      if (K && !Se(F, ye(i, P, \"\"))) ;else if (i) return !1;\n    } else ;\n    return !0;\n  },\n      Vt = function Vt(t) {\n    return \"annotation-xml\" !== t && Ae(t, M);\n  },\n      zt = function zt(t) {\n    jt(w.beforeSanitizeAttributes, t, null);\n    var e = t.attributes;\n    if (!e || Bt(t)) return;\n    var n = {\n      attrName: \"\",\n      attrValue: \"\",\n      keepAttr: !0,\n      allowedAttributes: W,\n      forceKeepAttr: void 0\n    };\n    var r = e.length;\n\n    var _loop = function _loop() {\n      var o = e[r],\n          s = o.name,\n          a = o.namespaceURI,\n          l = o.value,\n          c = kt(s);\n      var u = \"value\" === s ? l : Ce(l);\n\n      if (n.attrName = c, n.attrValue = u, n.keepAttr = !0, n.forceKeepAttr = void 0, jt(w.uponSanitizeAttribute, t, n), u = n.attrValue, !rt || \"id\" !== c && \"name\" !== c || (Ft(s, t), u = \"user-content-\" + u), $ && Se(/((--!?|])>)|<\\/(style|title)/i, u)) {\n        Ft(s, t);\n        return \"continue\";\n      }\n\n      if (n.forceKeepAttr) return \"continue\";\n      if (Ft(s, t), !n.keepAttr) return \"continue\";\n\n      if (!G && Se(/\\/>/i, u)) {\n        Ft(s, t);\n        return \"continue\";\n      }\n\n      Y && me([L, D, N], function (t) {\n        u = ye(u, t, \" \");\n      });\n      var h = kt(t.nodeName);\n\n      if (Ut(h, c, u)) {\n        if (x && \"object\" == _typeof(m) && \"function\" == typeof m.getAttributeType) if (a) ;else switch (m.getAttributeType(h, c)) {\n          case \"TrustedHTML\":\n            u = x.createHTML(u);\n            break;\n\n          case \"TrustedScriptURL\":\n            u = x.createScriptURL(u);\n        }\n\n        try {\n          a ? t.setAttributeNS(a, s, u) : t.setAttribute(s, u), Bt(t) ? Ot(t) : pe(i.removed);\n        } catch (t) {}\n      }\n    };\n\n    for (; r--;) {\n      var _ret = _loop();\n\n      if (_ret === \"continue\") continue;\n    }\n\n    jt(w.afterSanitizeAttributes, t, null);\n  },\n      qt = function t(e) {\n    var i = null;\n    var n = Mt(e);\n\n    for (jt(w.beforeSanitizeShadowDOM, e, null); i = n.nextNode();) {\n      jt(w.uponSanitizeShadowNode, i, null), Wt(i), zt(i), i.content instanceof s && t(i.content);\n    }\n\n    jt(w.afterSanitizeShadowDOM, e, null);\n  };\n\n  return i.sanitize = function (t) {\n    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n        n = null,\n        o = null,\n        a = null,\n        c = null;\n\n    if (vt = !t, vt && (t = \"\\x3c!--\\x3e\"), \"string\" != typeof t && !_t(t)) {\n      if (\"function\" != typeof t.toString) throw Re(\"toString is not a function\");\n      if (\"string\" != typeof (t = t.toString())) throw Re(\"dirty is not a string, aborting\");\n    }\n\n    if (!i.isSupported) return t;\n\n    if (Z || Dt(e), i.removed = [], \"string\" == typeof t && (st = !1), st) {\n      if (t.nodeName) {\n        var _e13 = kt(t.nodeName);\n\n        if (!_[_e13] || z[_e13]) throw Re(\"root node is forbidden and cannot be sanitized in-place\");\n      }\n    } else if (t instanceof l) n = Pt(\"\\x3c!----\\x3e\"), o = n.ownerDocument.importNode(t, !0), o.nodeType === ti && \"BODY\" === o.nodeName || \"HTML\" === o.nodeName ? n = o : n.appendChild(o);else {\n      if (!tt && !Y && !X && -1 === t.indexOf(\"<\")) return x && it ? x.createHTML(t) : t;\n      if (n = Pt(t), !n) return tt ? null : it ? C : \"\";\n    }\n\n    n && Q && Ot(n.firstChild);\n    var u = Mt(st ? t : n);\n\n    for (; a = u.nextNode();) {\n      Wt(a), zt(a), a.content instanceof s && qt(a.content);\n    }\n\n    if (st) return t;\n\n    if (tt) {\n      if (et) for (c = R.call(n.ownerDocument); n.firstChild;) {\n        c.appendChild(n.firstChild);\n      } else c = n;\n      return (W.shadowroot || W.shadowrootmode) && (c = T.call(r, c, !0)), c;\n    }\n\n    var h = X ? n.outerHTML : n.innerHTML;\n    return X && _[\"!doctype\"] && n.ownerDocument && n.ownerDocument.doctype && n.ownerDocument.doctype.name && Se(Xe, n.ownerDocument.doctype.name) && (h = \"<!DOCTYPE \" + n.ownerDocument.doctype.name + \">\\n\" + h), Y && me([L, D, N], function (t) {\n      h = ye(h, t, \" \");\n    }), x && it ? x.createHTML(h) : h;\n  }, i.setConfig = function () {\n    Dt(arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}), Z = !0;\n  }, i.clearConfig = function () {\n    Tt = null, Z = !1;\n  }, i.isValidAttribute = function (t, e, i) {\n    Tt || Dt({});\n    var n = kt(t),\n        r = kt(e);\n    return Ut(n, r, i);\n  }, i.addHook = function (t, e) {\n    \"function\" == typeof e && fe(w[t], e);\n  }, i.removeHook = function (t) {\n    return pe(w[t]);\n  }, i.removeHooks = function (t) {\n    w[t] = [];\n  }, i.removeAllHooks = function () {\n    w = {\n      afterSanitizeAttributes: [],\n      afterSanitizeElements: [],\n      afterSanitizeShadowDOM: [],\n      beforeSanitizeAttributes: [],\n      beforeSanitizeElements: [],\n      beforeSanitizeShadowDOM: [],\n      uponSanitizeAttribute: [],\n      uponSanitizeElement: [],\n      uponSanitizeShadowNode: []\n    };\n  }, i;\n}();\n\nsi.addHook(\"uponSanitizeAttribute\", function (t, e) {\n  /^data-trix-/.test(e.attrName) && (e.forceKeepAttr = !0);\n});\nvar ai = \"style href src width height language class\".split(\" \"),\n    li = \"javascript:\".split(\" \"),\n    ci = \"script iframe form noscript\".split(\" \");\n\nvar ui = /*#__PURE__*/function (_q7) {\n  _inherits(ui, _q7);\n\n  var _super9 = _createSuper(ui);\n\n  function ui(t) {\n    var _this14;\n\n    _classCallCheck(this, ui);\n\n    var _ref13 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n        e = _ref13.allowedAttributes,\n        i = _ref13.forbiddenProtocols,\n        n = _ref13.forbiddenElements;\n\n    _this14 = _super9.apply(this, arguments), _this14.allowedAttributes = e || ai, _this14.forbiddenProtocols = i || li, _this14.forbiddenElements = n || ci, _this14.body = hi(t);\n    return _this14;\n  }\n\n  _createClass(ui, [{\n    key: \"sanitize\",\n    value: function sanitize() {\n      return this.sanitizeElements(), this.normalizeListElementNesting(), si.setConfig(l), this.body = si.sanitize(this.body), this.body;\n    }\n  }, {\n    key: \"getHTML\",\n    value: function getHTML() {\n      return this.body.innerHTML;\n    }\n  }, {\n    key: \"getBody\",\n    value: function getBody() {\n      return this.body;\n    }\n  }, {\n    key: \"sanitizeElements\",\n    value: function sanitizeElements() {\n      var t = R(this.body),\n          e = [];\n\n      for (; t.nextNode();) {\n        var _i14 = t.currentNode;\n\n        switch (_i14.nodeType) {\n          case Node.ELEMENT_NODE:\n            this.elementIsRemovable(_i14) ? e.push(_i14) : this.sanitizeElement(_i14);\n            break;\n\n          case Node.COMMENT_NODE:\n            e.push(_i14);\n        }\n      }\n\n      return e.forEach(function (t) {\n        return S(t);\n      }), this.body;\n    }\n  }, {\n    key: \"sanitizeElement\",\n    value: function sanitizeElement(t) {\n      var _this15 = this;\n\n      return t.hasAttribute(\"href\") && this.forbiddenProtocols.includes(t.protocol) && t.removeAttribute(\"href\"), Array.from(t.attributes).forEach(function (e) {\n        var i = e.name;\n        _this15.allowedAttributes.includes(i) || 0 === i.indexOf(\"data-trix\") || t.removeAttribute(i);\n      }), t;\n    }\n  }, {\n    key: \"normalizeListElementNesting\",\n    value: function normalizeListElementNesting() {\n      return Array.from(this.body.querySelectorAll(\"ul,ol\")).forEach(function (t) {\n        var e = t.previousElementSibling;\n        e && \"li\" === k(e) && e.appendChild(t);\n      }), this.body;\n    }\n  }, {\n    key: \"elementIsRemovable\",\n    value: function elementIsRemovable(t) {\n      if ((null == t ? void 0 : t.nodeType) === Node.ELEMENT_NODE) return this.elementIsForbidden(t) || this.elementIsntSerializable(t);\n    }\n  }, {\n    key: \"elementIsForbidden\",\n    value: function elementIsForbidden(t) {\n      return this.forbiddenElements.includes(k(t));\n    }\n  }, {\n    key: \"elementIsntSerializable\",\n    value: function elementIsntSerializable(t) {\n      return \"false\" === t.getAttribute(\"data-trix-serialize\") && !P(t);\n    }\n  }], [{\n    key: \"setHTML\",\n    value: function setHTML(t, e) {\n      var i = new this(e).sanitize(),\n          n = i.getHTML ? i.getHTML() : i.outerHTML;\n      t.innerHTML = n;\n    }\n  }, {\n    key: \"sanitize\",\n    value: function sanitize(t, e) {\n      var i = new this(t, e);\n      return i.sanitize(), i;\n    }\n  }]);\n\n  return ui;\n}(q);\n\nvar hi = function hi() {\n  var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : \"\";\n  t = t.replace(/<\\/html[^>]*>[^]*$/i, \"</html>\");\n  var e = document.implementation.createHTMLDocument(\"\");\n  return e.documentElement.innerHTML = t, Array.from(e.head.querySelectorAll(\"style\")).forEach(function (t) {\n    e.body.appendChild(t);\n  }), e.body;\n},\n    di = z.css;\n\nvar gi = /*#__PURE__*/function (_ie2) {\n  _inherits(gi, _ie2);\n\n  var _super10 = _createSuper(gi);\n\n  function gi() {\n    var _this16;\n\n    _classCallCheck(this, gi);\n\n    _this16 = _super10.apply(this, arguments), _this16.attachment = _this16.object, _this16.attachment.uploadProgressDelegate = _assertThisInitialized(_this16), _this16.attachmentPiece = _this16.options.piece;\n    return _this16;\n  }\n\n  _createClass(gi, [{\n    key: \"createContentNodes\",\n    value: function createContentNodes() {\n      return [];\n    }\n  }, {\n    key: \"createNodes\",\n    value: function createNodes() {\n      var t;\n      var e = t = T({\n        tagName: \"figure\",\n        className: this.getClassName(),\n        data: this.getData(),\n        editable: !1\n      }),\n          i = this.getHref();\n      return i && (t = T({\n        tagName: \"a\",\n        editable: !1,\n        attributes: {\n          href: i,\n          tabindex: -1\n        }\n      }), e.appendChild(t)), this.attachment.hasContent() ? ui.setHTML(t, this.attachment.getContent()) : this.createContentNodes().forEach(function (e) {\n        t.appendChild(e);\n      }), t.appendChild(this.createCaptionElement()), this.attachment.isPending() && (this.progressElement = T({\n        tagName: \"progress\",\n        attributes: {\n          class: di.attachmentProgress,\n          value: this.attachment.getUploadProgress(),\n          max: 100\n        },\n        data: {\n          trixMutable: !0,\n          trixStoreKey: [\"progressElement\", this.attachment.id].join(\"/\")\n        }\n      }), e.appendChild(this.progressElement)), [mi(\"left\"), e, mi(\"right\")];\n    }\n  }, {\n    key: \"createCaptionElement\",\n    value: function createCaptionElement() {\n      var t = T({\n        tagName: \"figcaption\",\n        className: di.attachmentCaption\n      }),\n          e = this.attachmentPiece.getCaption();\n      if (e) t.classList.add(\"\".concat(di.attachmentCaption, \"--edited\")), t.textContent = e;else {\n        var _e14, _i15;\n\n        var _n9 = this.getCaptionConfig();\n\n        if (_n9.name && (_e14 = this.attachment.getFilename()), _n9.size && (_i15 = this.attachment.getFormattedFilesize()), _e14) {\n          var _i16 = T({\n            tagName: \"span\",\n            className: di.attachmentName,\n            textContent: _e14\n          });\n\n          t.appendChild(_i16);\n        }\n\n        if (_i15) {\n          _e14 && t.appendChild(document.createTextNode(\" \"));\n\n          var _n10 = T({\n            tagName: \"span\",\n            className: di.attachmentSize,\n            textContent: _i15\n          });\n\n          t.appendChild(_n10);\n        }\n      }\n      return t;\n    }\n  }, {\n    key: \"getClassName\",\n    value: function getClassName() {\n      var t = [di.attachment, \"\".concat(di.attachment, \"--\").concat(this.attachment.getType())],\n          e = this.attachment.getExtension();\n      return e && t.push(\"\".concat(di.attachment, \"--\").concat(e)), t.join(\" \");\n    }\n  }, {\n    key: \"getData\",\n    value: function getData() {\n      var t = {\n        trixAttachment: JSON.stringify(this.attachment),\n        trixContentType: this.attachment.getContentType(),\n        trixId: this.attachment.id\n      },\n          e = this.attachmentPiece.attributes;\n      return e.isEmpty() || (t.trixAttributes = JSON.stringify(e)), this.attachment.isPending() && (t.trixSerialize = !1), t;\n    }\n  }, {\n    key: \"getHref\",\n    value: function getHref() {\n      if (!pi(this.attachment.getContent(), \"a\")) return this.attachment.getHref();\n    }\n  }, {\n    key: \"getCaptionConfig\",\n    value: function getCaptionConfig() {\n      var t;\n      var e = this.attachment.getType(),\n          n = kt(null === (t = i[e]) || void 0 === t ? void 0 : t.caption);\n      return \"file\" === e && (n.name = !0), n;\n    }\n  }, {\n    key: \"findProgressElement\",\n    value: function findProgressElement() {\n      var t;\n      return null === (t = this.findElement()) || void 0 === t ? void 0 : t.querySelector(\"progress\");\n    }\n  }, {\n    key: \"attachmentDidChangeUploadProgress\",\n    value: function attachmentDidChangeUploadProgress() {\n      var t = this.attachment.getUploadProgress(),\n          e = this.findProgressElement();\n      e && (e.value = t);\n    }\n  }]);\n\n  return gi;\n}(ie);\n\nvar mi = function mi(t) {\n  return T({\n    tagName: \"span\",\n    textContent: d,\n    data: {\n      trixCursorTarget: t,\n      trixSerialize: !1\n    }\n  });\n},\n    pi = function pi(t, e) {\n  var i = T(\"div\");\n  return ui.setHTML(i, t || \"\"), i.querySelector(e);\n};\n\nvar fi = /*#__PURE__*/function (_gi) {\n  _inherits(fi, _gi);\n\n  var _super11 = _createSuper(fi);\n\n  function fi() {\n    var _this17;\n\n    _classCallCheck(this, fi);\n\n    _this17 = _super11.apply(this, arguments), _this17.attachment.previewDelegate = _assertThisInitialized(_this17);\n    return _this17;\n  }\n\n  _createClass(fi, [{\n    key: \"createContentNodes\",\n    value: function createContentNodes() {\n      return this.image = T({\n        tagName: \"img\",\n        attributes: {\n          src: \"\"\n        },\n        data: {\n          trixMutable: !0\n        }\n      }), this.refresh(this.image), [this.image];\n    }\n  }, {\n    key: \"createCaptionElement\",\n    value: function createCaptionElement() {\n      var t = _get(_getPrototypeOf(fi.prototype), \"createCaptionElement\", this).apply(this, arguments);\n\n      return t.textContent || t.setAttribute(\"data-trix-placeholder\", c.captionPlaceholder), t;\n    }\n  }, {\n    key: \"refresh\",\n    value: function refresh(t) {\n      var e;\n      t || (t = null === (e = this.findElement()) || void 0 === e ? void 0 : e.querySelector(\"img\"));\n      if (t) return this.updateAttributesForImage(t);\n    }\n  }, {\n    key: \"updateAttributesForImage\",\n    value: function updateAttributesForImage(t) {\n      var e = this.attachment.getURL(),\n          i = this.attachment.getPreviewURL();\n      if (t.src = i || e, i === e) t.removeAttribute(\"data-trix-serialized-attributes\");else {\n        var _i17 = JSON.stringify({\n          src: e\n        });\n\n        t.setAttribute(\"data-trix-serialized-attributes\", _i17);\n      }\n      var n = this.attachment.getWidth(),\n          r = this.attachment.getHeight();\n      null != n && (t.width = n), null != r && (t.height = r);\n      var o = [\"imageElement\", this.attachment.id, t.src, t.width, t.height].join(\"/\");\n      t.dataset.trixStoreKey = o;\n    }\n  }, {\n    key: \"attachmentDidChangeAttributes\",\n    value: function attachmentDidChangeAttributes() {\n      return this.refresh(this.image), this.refresh();\n    }\n  }]);\n\n  return fi;\n}(gi);\n\nvar bi = /*#__PURE__*/function (_ie3) {\n  _inherits(bi, _ie3);\n\n  var _super12 = _createSuper(bi);\n\n  function bi() {\n    var _this18;\n\n    _classCallCheck(this, bi);\n\n    _this18 = _super12.apply(this, arguments), _this18.piece = _this18.object, _this18.attributes = _this18.piece.getAttributes(), _this18.textConfig = _this18.options.textConfig, _this18.context = _this18.options.context, _this18.piece.attachment ? _this18.attachment = _this18.piece.attachment : _this18.string = _this18.piece.toString();\n    return _this18;\n  }\n\n  _createClass(bi, [{\n    key: \"createNodes\",\n    value: function createNodes() {\n      var t = this.attachment ? this.createAttachmentNodes() : this.createStringNodes();\n      var e = this.createElement();\n\n      if (e) {\n        var _i18 = function (t) {\n          for (; null !== (e = t) && void 0 !== e && e.firstElementChild;) {\n            var e;\n            t = t.firstElementChild;\n          }\n\n          return t;\n        }(e);\n\n        Array.from(t).forEach(function (t) {\n          _i18.appendChild(t);\n        }), t = [e];\n      }\n\n      return t;\n    }\n  }, {\n    key: \"createAttachmentNodes\",\n    value: function createAttachmentNodes() {\n      var t = this.attachment.isPreviewable() ? fi : gi;\n      return this.createChildView(t, this.piece.attachment, {\n        piece: this.piece\n      }).getNodes();\n    }\n  }, {\n    key: \"createStringNodes\",\n    value: function createStringNodes() {\n      var t;\n      if (null !== (t = this.textConfig) && void 0 !== t && t.plaintext) return [document.createTextNode(this.string)];\n      {\n        var _t8 = [],\n            _e15 = this.string.split(\"\\n\");\n\n        for (var _i19 = 0; _i19 < _e15.length; _i19++) {\n          var _n11 = _e15[_i19];\n\n          if (_i19 > 0) {\n            var _e16 = T(\"br\");\n\n            _t8.push(_e16);\n          }\n\n          if (_n11.length) {\n            var _e17 = document.createTextNode(this.preserveSpaces(_n11));\n\n            _t8.push(_e17);\n          }\n        }\n\n        return _t8;\n      }\n    }\n  }, {\n    key: \"createElement\",\n    value: function createElement() {\n      var t, e, i;\n      var n = {};\n\n      for (e in this.attributes) {\n        i = this.attributes[e];\n\n        var _o2 = ft(e);\n\n        if (_o2) {\n          if (_o2.tagName) {\n            var r;\n\n            var _e18 = T(_o2.tagName);\n\n            r ? (r.appendChild(_e18), r = _e18) : t = r = _e18;\n          }\n\n          if (_o2.styleProperty && (n[_o2.styleProperty] = i), _o2.style) for (e in _o2.style) {\n            i = _o2.style[e], n[e] = i;\n          }\n        }\n      }\n\n      if (Object.keys(n).length) for (e in t || (t = T(\"span\")), n) {\n        i = n[e], t.style[e] = i;\n      }\n      return t;\n    }\n  }, {\n    key: \"createContainerElement\",\n    value: function createContainerElement() {\n      for (var _t9 in this.attributes) {\n        var _e19 = this.attributes[_t9],\n            _i20 = ft(_t9);\n\n        if (_i20 && _i20.groupTagName) {\n          var _n12 = {};\n          return _n12[_t9] = _e19, T(_i20.groupTagName, _n12);\n        }\n      }\n    }\n  }, {\n    key: \"preserveSpaces\",\n    value: function preserveSpaces(t) {\n      return this.context.isLast && (t = t.replace(/\\ $/, g)), t = t.replace(/(\\S)\\ {3}(\\S)/g, \"$1 \".concat(g, \" $2\")).replace(/\\ {2}/g, \"\".concat(g, \" \")).replace(/\\ {2}/g, \" \".concat(g)), (this.context.isFirst || this.context.followsWhitespace) && (t = t.replace(/^\\ /, g)), t;\n    }\n  }]);\n\n  return bi;\n}(ie);\n\nvar vi = /*#__PURE__*/function (_ie4) {\n  _inherits(vi, _ie4);\n\n  var _super13 = _createSuper(vi);\n\n  function vi() {\n    var _this19;\n\n    _classCallCheck(this, vi);\n\n    _this19 = _super13.apply(this, arguments), _this19.text = _this19.object, _this19.textConfig = _this19.options.textConfig;\n    return _this19;\n  }\n\n  _createClass(vi, [{\n    key: \"createNodes\",\n    value: function createNodes() {\n      var t = [],\n          e = Xt.groupObjects(this.getPieces()),\n          i = e.length - 1;\n\n      for (var _r5 = 0; _r5 < e.length; _r5++) {\n        var _o3 = e[_r5],\n            _s3 = {};\n        0 === _r5 && (_s3.isFirst = !0), _r5 === i && (_s3.isLast = !0), Ai(n) && (_s3.followsWhitespace = !0);\n\n        var _a = this.findOrCreateCachedChildView(bi, _o3, {\n          textConfig: this.textConfig,\n          context: _s3\n        });\n\n        t.push.apply(t, _toConsumableArray(Array.from(_a.getNodes() || [])));\n        var n = _o3;\n      }\n\n      return t;\n    }\n  }, {\n    key: \"getPieces\",\n    value: function getPieces() {\n      return Array.from(this.text.getPieces()).filter(function (t) {\n        return !t.hasAttribute(\"blockBreak\");\n      });\n    }\n  }]);\n\n  return vi;\n}(ie);\n\nvar Ai = function Ai(t) {\n  return /\\s$/.test(null == t ? void 0 : t.toString());\n},\n    yi = z.css;\n\nvar xi = /*#__PURE__*/function (_ie5) {\n  _inherits(xi, _ie5);\n\n  var _super14 = _createSuper(xi);\n\n  function xi() {\n    var _this20;\n\n    _classCallCheck(this, xi);\n\n    _this20 = _super14.apply(this, arguments), _this20.block = _this20.object, _this20.attributes = _this20.block.getAttributes();\n    return _this20;\n  }\n\n  _createClass(xi, [{\n    key: \"createNodes\",\n    value: function createNodes() {\n      var t = [document.createComment(\"block\")];\n      if (this.block.isEmpty()) t.push(T(\"br\"));else {\n        var e;\n\n        var _i21 = null === (e = mt(this.block.getLastAttribute())) || void 0 === e ? void 0 : e.text,\n            _n13 = this.findOrCreateCachedChildView(vi, this.block.text, {\n          textConfig: _i21\n        });\n\n        t.push.apply(t, _toConsumableArray(Array.from(_n13.getNodes() || []))), this.shouldAddExtraNewlineElement() && t.push(T(\"br\"));\n      }\n      if (this.attributes.length) return t;\n      {\n        var _e20;\n\n        var _i22 = n.default.tagName;\n        this.block.isRTL() && (_e20 = {\n          dir: \"rtl\"\n        });\n\n        var _r6 = T({\n          tagName: _i22,\n          attributes: _e20\n        });\n\n        return t.forEach(function (t) {\n          return _r6.appendChild(t);\n        }), [_r6];\n      }\n    }\n  }, {\n    key: \"createContainerElement\",\n    value: function createContainerElement(t) {\n      var e = {};\n      var i;\n\n      var n = this.attributes[t],\n          _mt = mt(n),\n          r = _mt.tagName,\n          _mt$htmlAttributes = _mt.htmlAttributes,\n          o = _mt$htmlAttributes === void 0 ? [] : _mt$htmlAttributes;\n\n      if (0 === t && this.block.isRTL() && Object.assign(e, {\n        dir: \"rtl\"\n      }), \"attachmentGallery\" === n) {\n        var _t10 = this.block.getBlockBreakPosition();\n\n        i = \"\".concat(yi.attachmentGallery, \" \").concat(yi.attachmentGallery, \"--\").concat(_t10);\n      }\n\n      return Object.entries(this.block.htmlAttributes).forEach(function (t) {\n        var _t11 = _slicedToArray(t, 2),\n            i = _t11[0],\n            n = _t11[1];\n\n        o.includes(i) && (e[i] = n);\n      }), T({\n        tagName: r,\n        className: i,\n        attributes: e\n      });\n    }\n  }, {\n    key: \"shouldAddExtraNewlineElement\",\n    value: function shouldAddExtraNewlineElement() {\n      return /\\n\\n$/.test(this.block.toString());\n    }\n  }]);\n\n  return xi;\n}(ie);\n\nvar Ci = /*#__PURE__*/function (_ie6) {\n  _inherits(Ci, _ie6);\n\n  var _super15 = _createSuper(Ci);\n\n  function Ci() {\n    var _this21;\n\n    _classCallCheck(this, Ci);\n\n    _this21 = _super15.apply(this, arguments), _this21.element = _this21.options.element, _this21.elementStore = new Qt(), _this21.setDocument(_this21.object);\n    return _this21;\n  }\n\n  _createClass(Ci, [{\n    key: \"setDocument\",\n    value: function setDocument(t) {\n      t.isEqualTo(this.document) || (this.document = this.object = t);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this22 = this;\n\n      if (this.childViews = [], this.shadowElement = T(\"div\"), !this.document.isEmpty()) {\n        var _t12 = Xt.groupObjects(this.document.getBlocks(), {\n          asTree: !0\n        });\n\n        Array.from(_t12).forEach(function (t) {\n          var e = _this22.findOrCreateCachedChildView(xi, t);\n\n          Array.from(e.getNodes()).map(function (t) {\n            return _this22.shadowElement.appendChild(t);\n          });\n        });\n      }\n    }\n  }, {\n    key: \"isSynced\",\n    value: function isSynced() {\n      return Si(this.shadowElement, this.element);\n    }\n  }, {\n    key: \"sync\",\n    value: function sync() {\n      var t = this.createDocumentFragmentForSync();\n\n      for (; this.element.lastChild;) {\n        this.element.removeChild(this.element.lastChild);\n      }\n\n      return this.element.appendChild(t), this.didSync();\n    }\n  }, {\n    key: \"didSync\",\n    value: function didSync() {\n      var _this23 = this;\n\n      return this.elementStore.reset(Ei(this.element)), Rt(function () {\n        return _this23.garbageCollectCachedViews();\n      });\n    }\n  }, {\n    key: \"createDocumentFragmentForSync\",\n    value: function createDocumentFragmentForSync() {\n      var _this24 = this;\n\n      var t = document.createDocumentFragment();\n      return Array.from(this.shadowElement.childNodes).forEach(function (e) {\n        t.appendChild(e.cloneNode(!0));\n      }), Array.from(Ei(t)).forEach(function (t) {\n        var e = _this24.elementStore.remove(t);\n\n        e && t.parentNode.replaceChild(e, t);\n      }), t;\n    }\n  }], [{\n    key: \"render\",\n    value: function render(t) {\n      var e = T(\"div\"),\n          i = new this(t, {\n        element: e\n      });\n      return i.render(), i.sync(), e;\n    }\n  }]);\n\n  return Ci;\n}(ie);\n\nvar Ei = function Ei(t) {\n  return t.querySelectorAll(\"[data-trix-store-key]\");\n},\n    Si = function Si(t, e) {\n  return Ri(t.innerHTML) === Ri(e.innerHTML);\n},\n    Ri = function Ri(t) {\n  return t.replace(/&nbsp;/g, \" \");\n};\n\nfunction ki(t) {\n  var e, i;\n\n  function n(e, i) {\n    try {\n      var o = t[e](i),\n          s = o.value,\n          a = s instanceof Ti;\n      Promise.resolve(a ? s.v : s).then(function (i) {\n        if (a) {\n          var l = \"return\" === e ? \"return\" : \"next\";\n          if (!s.k || i.done) return n(l, i);\n          i = t[l](i).value;\n        }\n\n        r(o.done ? \"return\" : \"normal\", i);\n      }, function (t) {\n        n(\"throw\", t);\n      });\n    } catch (t) {\n      r(\"throw\", t);\n    }\n  }\n\n  function r(t, r) {\n    switch (t) {\n      case \"return\":\n        e.resolve({\n          value: r,\n          done: !0\n        });\n        break;\n\n      case \"throw\":\n        e.reject(r);\n        break;\n\n      default:\n        e.resolve({\n          value: r,\n          done: !1\n        });\n    }\n\n    (e = e.next) ? n(e.key, e.arg) : i = null;\n  }\n\n  this._invoke = function (t, r) {\n    return new Promise(function (o, s) {\n      var a = {\n        key: t,\n        arg: r,\n        resolve: o,\n        reject: s,\n        next: null\n      };\n      i ? i = i.next = a : (e = i = a, n(t, r));\n    });\n  }, \"function\" != typeof t.return && (this.return = void 0);\n}\n\nfunction Ti(t, e) {\n  this.v = t, this.k = e;\n}\n\nfunction wi(t, e, i) {\n  return (e = Li(e)) in t ? Object.defineProperty(t, e, {\n    value: i,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : t[e] = i, t;\n}\n\nfunction Li(t) {\n  var e = function (t, e) {\n    if (\"object\" != _typeof(t) || null === t) return t;\n    var i = t[Symbol.toPrimitive];\n\n    if (void 0 !== i) {\n      var n = i.call(t, e || \"default\");\n      if (\"object\" != _typeof(n)) return n;\n      throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n    }\n\n    return (\"string\" === e ? String : Number)(t);\n  }(t, \"string\");\n\n  return \"symbol\" == _typeof(e) ? e : String(e);\n}\n\nki.prototype[\"function\" == typeof Symbol && Symbol.asyncIterator || \"@@asyncIterator\"] = function () {\n  return this;\n}, ki.prototype.next = function (t) {\n  return this._invoke(\"next\", t);\n}, ki.prototype.throw = function (t) {\n  return this._invoke(\"throw\", t);\n}, ki.prototype.return = function (t) {\n  return this._invoke(\"return\", t);\n};\n\nfunction Di(t, e) {\n  return Oi(t, Ii(t, e, \"get\"));\n}\n\nfunction Ni(t, e, i) {\n  return Fi(t, Ii(t, e, \"set\"), i), i;\n}\n\nfunction Ii(t, e, i) {\n  if (!e.has(t)) throw new TypeError(\"attempted to \" + i + \" private field on non-instance\");\n  return e.get(t);\n}\n\nfunction Oi(t, e) {\n  return e.get ? e.get.call(t) : e.value;\n}\n\nfunction Fi(t, e, i) {\n  if (e.set) e.set.call(t, i);else {\n    if (!e.writable) throw new TypeError(\"attempted to set read only private field\");\n    e.value = i;\n  }\n}\n\nfunction Pi(t, e, i) {\n  if (!e.has(t)) throw new TypeError(\"attempted to get private field on non-instance\");\n  return i;\n}\n\nfunction Mi(t, e) {\n  if (e.has(t)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n}\n\nfunction Bi(t, e, i) {\n  Mi(t, e), e.set(t, i);\n}\n\nvar _i = /*#__PURE__*/function (_rt2) {\n  _inherits(_i, _rt2);\n\n  var _super16 = _createSuper(_i);\n\n  function _i(t) {\n    var _this25;\n\n    _classCallCheck(this, _i);\n\n    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n    _this25 = _super16.apply(this, arguments), _this25.attributes = Ht.box(e);\n    return _this25;\n  }\n\n  _createClass(_i, [{\n    key: \"copyWithAttributes\",\n    value: function copyWithAttributes(t) {\n      return new this.constructor(this.getValue(), t);\n    }\n  }, {\n    key: \"copyWithAdditionalAttributes\",\n    value: function copyWithAdditionalAttributes(t) {\n      return this.copyWithAttributes(this.attributes.merge(t));\n    }\n  }, {\n    key: \"copyWithoutAttribute\",\n    value: function copyWithoutAttribute(t) {\n      return this.copyWithAttributes(this.attributes.remove(t));\n    }\n  }, {\n    key: \"copy\",\n    value: function copy() {\n      return this.copyWithAttributes(this.attributes);\n    }\n  }, {\n    key: \"getAttribute\",\n    value: function getAttribute(t) {\n      return this.attributes.get(t);\n    }\n  }, {\n    key: \"getAttributesHash\",\n    value: function getAttributesHash() {\n      return this.attributes;\n    }\n  }, {\n    key: \"getAttributes\",\n    value: function getAttributes() {\n      return this.attributes.toObject();\n    }\n  }, {\n    key: \"hasAttribute\",\n    value: function hasAttribute(t) {\n      return this.attributes.has(t);\n    }\n  }, {\n    key: \"hasSameStringValueAsPiece\",\n    value: function hasSameStringValueAsPiece(t) {\n      return t && this.toString() === t.toString();\n    }\n  }, {\n    key: \"hasSameAttributesAsPiece\",\n    value: function hasSameAttributesAsPiece(t) {\n      return t && (this.attributes === t.attributes || this.attributes.isEqualTo(t.attributes));\n    }\n  }, {\n    key: \"isBlockBreak\",\n    value: function isBlockBreak() {\n      return !1;\n    }\n  }, {\n    key: \"isEqualTo\",\n    value: function isEqualTo(t) {\n      return _get(_getPrototypeOf(_i.prototype), \"isEqualTo\", this).apply(this, arguments) || this.hasSameConstructorAs(t) && this.hasSameStringValueAsPiece(t) && this.hasSameAttributesAsPiece(t);\n    }\n  }, {\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return 0 === this.length;\n    }\n  }, {\n    key: \"isSerializable\",\n    value: function isSerializable() {\n      return !0;\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        type: this.constructor.type,\n        attributes: this.getAttributes()\n      };\n    }\n  }, {\n    key: \"contentsForInspection\",\n    value: function contentsForInspection() {\n      return {\n        type: this.constructor.type,\n        attributes: this.attributes.inspect()\n      };\n    }\n  }, {\n    key: \"canBeGrouped\",\n    value: function canBeGrouped() {\n      return this.hasAttribute(\"href\");\n    }\n  }, {\n    key: \"canBeGroupedWith\",\n    value: function canBeGroupedWith(t) {\n      return this.getAttribute(\"href\") === t.getAttribute(\"href\");\n    }\n  }, {\n    key: \"getLength\",\n    value: function getLength() {\n      return this.length;\n    }\n  }, {\n    key: \"canBeConsolidatedWith\",\n    value: function canBeConsolidatedWith(t) {\n      return !1;\n    }\n  }], [{\n    key: \"registerType\",\n    value: function registerType(t, e) {\n      e.type = t, this.types[t] = e;\n    }\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(t) {\n      var e = this.types[t.type];\n      if (e) return e.fromJSON(t);\n    }\n  }]);\n\n  return _i;\n}(rt);\n\nwi(_i, \"types\", {});\n\nvar ji = /*#__PURE__*/function (_ee) {\n  _inherits(ji, _ee);\n\n  var _super17 = _createSuper(ji);\n\n  function ji(t) {\n    var _this26;\n\n    _classCallCheck(this, ji);\n\n    _this26 = _super17.apply(this, arguments), _this26.url = t;\n    return _this26;\n  }\n\n  _createClass(ji, [{\n    key: \"perform\",\n    value: function perform(t) {\n      var _this27 = this;\n\n      var e = new Image();\n      e.onload = function () {\n        return e.width = _this27.width = e.naturalWidth, e.height = _this27.height = e.naturalHeight, t(!0, e);\n      }, e.onerror = function () {\n        return t(!1);\n      }, e.src = this.url;\n    }\n  }]);\n\n  return ji;\n}(ee);\n\nvar Wi = /*#__PURE__*/function (_rt3) {\n  _inherits(Wi, _rt3);\n\n  var _super18 = _createSuper(Wi);\n\n  function Wi() {\n    var _this28;\n\n    _classCallCheck(this, Wi);\n\n    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n    _this28 = _super18.call(this, t), _this28.releaseFile = _this28.releaseFile.bind(_assertThisInitialized(_this28)), _this28.attributes = Ht.box(t), _this28.didChangeAttributes();\n    return _this28;\n  }\n\n  _createClass(Wi, [{\n    key: \"getAttribute\",\n    value: function getAttribute(t) {\n      return this.attributes.get(t);\n    }\n  }, {\n    key: \"hasAttribute\",\n    value: function hasAttribute(t) {\n      return this.attributes.has(t);\n    }\n  }, {\n    key: \"getAttributes\",\n    value: function getAttributes() {\n      return this.attributes.toObject();\n    }\n  }, {\n    key: \"setAttributes\",\n    value: function setAttributes() {\n      var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n      var e = this.attributes.merge(t);\n      var i, n, r, o;\n      if (!this.attributes.isEqualTo(e)) return this.attributes = e, this.didChangeAttributes(), null === (i = this.previewDelegate) || void 0 === i || null === (n = i.attachmentDidChangeAttributes) || void 0 === n || n.call(i, this), null === (r = this.delegate) || void 0 === r || null === (o = r.attachmentDidChangeAttributes) || void 0 === o ? void 0 : o.call(r, this);\n    }\n  }, {\n    key: \"didChangeAttributes\",\n    value: function didChangeAttributes() {\n      if (this.isPreviewable()) return this.preloadURL();\n    }\n  }, {\n    key: \"isPending\",\n    value: function isPending() {\n      return null != this.file && !(this.getURL() || this.getHref());\n    }\n  }, {\n    key: \"isPreviewable\",\n    value: function isPreviewable() {\n      return this.attributes.has(\"previewable\") ? this.attributes.get(\"previewable\") : Wi.previewablePattern.test(this.getContentType());\n    }\n  }, {\n    key: \"getType\",\n    value: function getType() {\n      return this.hasContent() ? \"content\" : this.isPreviewable() ? \"preview\" : \"file\";\n    }\n  }, {\n    key: \"getURL\",\n    value: function getURL() {\n      return this.attributes.get(\"url\");\n    }\n  }, {\n    key: \"getHref\",\n    value: function getHref() {\n      return this.attributes.get(\"href\");\n    }\n  }, {\n    key: \"getFilename\",\n    value: function getFilename() {\n      return this.attributes.get(\"filename\") || \"\";\n    }\n  }, {\n    key: \"getFilesize\",\n    value: function getFilesize() {\n      return this.attributes.get(\"filesize\");\n    }\n  }, {\n    key: \"getFormattedFilesize\",\n    value: function getFormattedFilesize() {\n      var t = this.attributes.get(\"filesize\");\n      return \"number\" == typeof t ? h.formatter(t) : \"\";\n    }\n  }, {\n    key: \"getExtension\",\n    value: function getExtension() {\n      var t;\n      return null === (t = this.getFilename().match(/\\.(\\w+)$/)) || void 0 === t ? void 0 : t[1].toLowerCase();\n    }\n  }, {\n    key: \"getContentType\",\n    value: function getContentType() {\n      return this.attributes.get(\"contentType\");\n    }\n  }, {\n    key: \"hasContent\",\n    value: function hasContent() {\n      return this.attributes.has(\"content\");\n    }\n  }, {\n    key: \"getContent\",\n    value: function getContent() {\n      return this.attributes.get(\"content\");\n    }\n  }, {\n    key: \"getWidth\",\n    value: function getWidth() {\n      return this.attributes.get(\"width\");\n    }\n  }, {\n    key: \"getHeight\",\n    value: function getHeight() {\n      return this.attributes.get(\"height\");\n    }\n  }, {\n    key: \"getFile\",\n    value: function getFile() {\n      return this.file;\n    }\n  }, {\n    key: \"setFile\",\n    value: function setFile(t) {\n      if (this.file = t, this.isPreviewable()) return this.preloadFile();\n    }\n  }, {\n    key: \"releaseFile\",\n    value: function releaseFile() {\n      this.releasePreloadedFile(), this.file = null;\n    }\n  }, {\n    key: \"getUploadProgress\",\n    value: function getUploadProgress() {\n      return null != this.uploadProgress ? this.uploadProgress : 0;\n    }\n  }, {\n    key: \"setUploadProgress\",\n    value: function setUploadProgress(t) {\n      var e, i;\n      if (this.uploadProgress !== t) return this.uploadProgress = t, null === (e = this.uploadProgressDelegate) || void 0 === e || null === (i = e.attachmentDidChangeUploadProgress) || void 0 === i ? void 0 : i.call(e, this);\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this.getAttributes();\n    }\n  }, {\n    key: \"getCacheKey\",\n    value: function getCacheKey() {\n      return [_get(_getPrototypeOf(Wi.prototype), \"getCacheKey\", this).apply(this, arguments), this.attributes.getCacheKey(), this.getPreviewURL()].join(\"/\");\n    }\n  }, {\n    key: \"getPreviewURL\",\n    value: function getPreviewURL() {\n      return this.previewURL || this.preloadingURL;\n    }\n  }, {\n    key: \"setPreviewURL\",\n    value: function setPreviewURL(t) {\n      var e, i, n, r;\n      if (t !== this.getPreviewURL()) return this.previewURL = t, null === (e = this.previewDelegate) || void 0 === e || null === (i = e.attachmentDidChangeAttributes) || void 0 === i || i.call(e, this), null === (n = this.delegate) || void 0 === n || null === (r = n.attachmentDidChangePreviewURL) || void 0 === r ? void 0 : r.call(n, this);\n    }\n  }, {\n    key: \"preloadURL\",\n    value: function preloadURL() {\n      return this.preload(this.getURL(), this.releaseFile);\n    }\n  }, {\n    key: \"preloadFile\",\n    value: function preloadFile() {\n      if (this.file) return this.fileObjectURL = URL.createObjectURL(this.file), this.preload(this.fileObjectURL);\n    }\n  }, {\n    key: \"releasePreloadedFile\",\n    value: function releasePreloadedFile() {\n      this.fileObjectURL && (URL.revokeObjectURL(this.fileObjectURL), this.fileObjectURL = null);\n    }\n  }, {\n    key: \"preload\",\n    value: function preload(t, e) {\n      var _this29 = this;\n\n      if (t && t !== this.getPreviewURL()) {\n        this.preloadingURL = t;\n        return new ji(t).then(function (i) {\n          var n = i.width,\n              r = i.height;\n          return _this29.getWidth() && _this29.getHeight() || _this29.setAttributes({\n            width: n,\n            height: r\n          }), _this29.preloadingURL = null, _this29.setPreviewURL(t), null == e ? void 0 : e();\n        }).catch(function () {\n          return _this29.preloadingURL = null, null == e ? void 0 : e();\n        });\n      }\n    }\n  }], [{\n    key: \"attachmentForFile\",\n    value: function attachmentForFile(t) {\n      var e = new this(this.attributesForFile(t));\n      return e.setFile(t), e;\n    }\n  }, {\n    key: \"attributesForFile\",\n    value: function attributesForFile(t) {\n      return new Ht({\n        filename: t.name,\n        filesize: t.size,\n        contentType: t.type\n      });\n    }\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(t) {\n      return new this(t);\n    }\n  }]);\n\n  return Wi;\n}(rt);\n\nwi(Wi, \"previewablePattern\", /^image(\\/(gif|png|webp|jpe?g)|$)/);\n\nvar Ui = /*#__PURE__*/function (_i23) {\n  _inherits(Ui, _i23);\n\n  var _super19 = _createSuper(Ui);\n\n  function Ui(t) {\n    var _this30;\n\n    _classCallCheck(this, Ui);\n\n    _this30 = _super19.apply(this, arguments), _this30.attachment = t, _this30.length = 1, _this30.ensureAttachmentExclusivelyHasAttribute(\"href\"), _this30.attachment.hasContent() || _this30.removeProhibitedAttributes();\n    return _this30;\n  }\n\n  _createClass(Ui, [{\n    key: \"ensureAttachmentExclusivelyHasAttribute\",\n    value: function ensureAttachmentExclusivelyHasAttribute(t) {\n      this.hasAttribute(t) && (this.attachment.hasAttribute(t) || this.attachment.setAttributes(this.attributes.slice([t])), this.attributes = this.attributes.remove(t));\n    }\n  }, {\n    key: \"removeProhibitedAttributes\",\n    value: function removeProhibitedAttributes() {\n      var t = this.attributes.slice(Ui.permittedAttributes);\n      t.isEqualTo(this.attributes) || (this.attributes = t);\n    }\n  }, {\n    key: \"getValue\",\n    value: function getValue() {\n      return this.attachment;\n    }\n  }, {\n    key: \"isSerializable\",\n    value: function isSerializable() {\n      return !this.attachment.isPending();\n    }\n  }, {\n    key: \"getCaption\",\n    value: function getCaption() {\n      return this.attributes.get(\"caption\") || \"\";\n    }\n  }, {\n    key: \"isEqualTo\",\n    value: function isEqualTo(t) {\n      var e;\n      return _get(_getPrototypeOf(Ui.prototype), \"isEqualTo\", this).call(this, t) && this.attachment.id === (null == t || null === (e = t.attachment) || void 0 === e ? void 0 : e.id);\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return \"\";\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var t = _get(_getPrototypeOf(Ui.prototype), \"toJSON\", this).apply(this, arguments);\n\n      return t.attachment = this.attachment, t;\n    }\n  }, {\n    key: \"getCacheKey\",\n    value: function getCacheKey() {\n      return [_get(_getPrototypeOf(Ui.prototype), \"getCacheKey\", this).apply(this, arguments), this.attachment.getCacheKey()].join(\"/\");\n    }\n  }, {\n    key: \"toConsole\",\n    value: function toConsole() {\n      return JSON.stringify(this.toString());\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(t) {\n      return new this(Wi.fromJSON(t.attachment), t.attributes);\n    }\n  }]);\n\n  return Ui;\n}(_i);\n\nwi(Ui, \"permittedAttributes\", [\"caption\", \"presentation\"]), _i.registerType(\"attachment\", Ui);\n\nvar Vi = /*#__PURE__*/function (_i24) {\n  _inherits(Vi, _i24);\n\n  var _super20 = _createSuper(Vi);\n\n  function Vi(t) {\n    var _this31;\n\n    _classCallCheck(this, Vi);\n\n    _this31 = _super20.apply(this, arguments), _this31.string = function (t) {\n      return t.replace(/\\r\\n?/g, \"\\n\");\n    }(t), _this31.length = _this31.string.length;\n    return _this31;\n  }\n\n  _createClass(Vi, [{\n    key: \"getValue\",\n    value: function getValue() {\n      return this.string;\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return this.string.toString();\n    }\n  }, {\n    key: \"isBlockBreak\",\n    value: function isBlockBreak() {\n      return \"\\n\" === this.toString() && !0 === this.getAttribute(\"blockBreak\");\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      var t = _get(_getPrototypeOf(Vi.prototype), \"toJSON\", this).apply(this, arguments);\n\n      return t.string = this.string, t;\n    }\n  }, {\n    key: \"canBeConsolidatedWith\",\n    value: function canBeConsolidatedWith(t) {\n      return t && this.hasSameConstructorAs(t) && this.hasSameAttributesAsPiece(t);\n    }\n  }, {\n    key: \"consolidateWith\",\n    value: function consolidateWith(t) {\n      return new this.constructor(this.toString() + t.toString(), this.attributes);\n    }\n  }, {\n    key: \"splitAtOffset\",\n    value: function splitAtOffset(t) {\n      var e, i;\n      return 0 === t ? (e = null, i = this) : t === this.length ? (e = this, i = null) : (e = new this.constructor(this.string.slice(0, t), this.attributes), i = new this.constructor(this.string.slice(t), this.attributes)), [e, i];\n    }\n  }, {\n    key: \"toConsole\",\n    value: function toConsole() {\n      var t = this.string;\n      return t.length > 15 && (t = t.slice(0, 14) + \"…\"), JSON.stringify(t.toString());\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(t) {\n      return new this(t.string, t.attributes);\n    }\n  }]);\n\n  return Vi;\n}(_i);\n\n_i.registerType(\"string\", Vi);\n\nvar zi = /*#__PURE__*/function (_rt4) {\n  _inherits(zi, _rt4);\n\n  var _super21 = _createSuper(zi);\n\n  function zi() {\n    var _this32;\n\n    _classCallCheck(this, zi);\n\n    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n    _this32 = _super21.apply(this, arguments), _this32.objects = t.slice(0), _this32.length = _this32.objects.length;\n    return _this32;\n  }\n\n  _createClass(zi, [{\n    key: \"indexOf\",\n    value: function indexOf(t) {\n      return this.objects.indexOf(t);\n    }\n  }, {\n    key: \"splice\",\n    value: function splice() {\n      for (var t = arguments.length, e = new Array(t), i = 0; i < t; i++) {\n        e[i] = arguments[i];\n      }\n\n      return new this.constructor(st.apply(void 0, [this.objects].concat(e)));\n    }\n  }, {\n    key: \"eachObject\",\n    value: function eachObject(t) {\n      return this.objects.map(function (e, i) {\n        return t(e, i);\n      });\n    }\n  }, {\n    key: \"insertObjectAtIndex\",\n    value: function insertObjectAtIndex(t, e) {\n      return this.splice(e, 0, t);\n    }\n  }, {\n    key: \"insertSplittableListAtIndex\",\n    value: function insertSplittableListAtIndex(t, e) {\n      return this.splice.apply(this, [e, 0].concat(_toConsumableArray(t.objects)));\n    }\n  }, {\n    key: \"insertSplittableListAtPosition\",\n    value: function insertSplittableListAtPosition(t, e) {\n      var _this$splitObjectAtPo = this.splitObjectAtPosition(e),\n          _this$splitObjectAtPo2 = _slicedToArray(_this$splitObjectAtPo, 2),\n          i = _this$splitObjectAtPo2[0],\n          n = _this$splitObjectAtPo2[1];\n\n      return new this.constructor(i).insertSplittableListAtIndex(t, n);\n    }\n  }, {\n    key: \"editObjectAtIndex\",\n    value: function editObjectAtIndex(t, e) {\n      return this.replaceObjectAtIndex(e(this.objects[t]), t);\n    }\n  }, {\n    key: \"replaceObjectAtIndex\",\n    value: function replaceObjectAtIndex(t, e) {\n      return this.splice(e, 1, t);\n    }\n  }, {\n    key: \"removeObjectAtIndex\",\n    value: function removeObjectAtIndex(t) {\n      return this.splice(t, 1);\n    }\n  }, {\n    key: \"getObjectAtIndex\",\n    value: function getObjectAtIndex(t) {\n      return this.objects[t];\n    }\n  }, {\n    key: \"getSplittableListInRange\",\n    value: function getSplittableListInRange(t) {\n      var _this$splitObjectsAtR = this.splitObjectsAtRange(t),\n          _this$splitObjectsAtR2 = _slicedToArray(_this$splitObjectsAtR, 3),\n          e = _this$splitObjectsAtR2[0],\n          i = _this$splitObjectsAtR2[1],\n          n = _this$splitObjectsAtR2[2];\n\n      return new this.constructor(e.slice(i, n + 1));\n    }\n  }, {\n    key: \"selectSplittableList\",\n    value: function selectSplittableList(t) {\n      var e = this.objects.filter(function (e) {\n        return t(e);\n      });\n      return new this.constructor(e);\n    }\n  }, {\n    key: \"removeObjectsInRange\",\n    value: function removeObjectsInRange(t) {\n      var _this$splitObjectsAtR3 = this.splitObjectsAtRange(t),\n          _this$splitObjectsAtR4 = _slicedToArray(_this$splitObjectsAtR3, 3),\n          e = _this$splitObjectsAtR4[0],\n          i = _this$splitObjectsAtR4[1],\n          n = _this$splitObjectsAtR4[2];\n\n      return new this.constructor(e).splice(i, n - i + 1);\n    }\n  }, {\n    key: \"transformObjectsInRange\",\n    value: function transformObjectsInRange(t, e) {\n      var _this$splitObjectsAtR5 = this.splitObjectsAtRange(t),\n          _this$splitObjectsAtR6 = _slicedToArray(_this$splitObjectsAtR5, 3),\n          i = _this$splitObjectsAtR6[0],\n          n = _this$splitObjectsAtR6[1],\n          r = _this$splitObjectsAtR6[2],\n          o = i.map(function (t, i) {\n        return n <= i && i <= r ? e(t) : t;\n      });\n\n      return new this.constructor(o);\n    }\n  }, {\n    key: \"splitObjectsAtRange\",\n    value: function splitObjectsAtRange(t) {\n      var _this$constructor$spl, _this$constructor$spl2;\n\n      var e,\n          _this$splitObjectAtPo3 = this.splitObjectAtPosition(Hi(t)),\n          _this$splitObjectAtPo4 = _slicedToArray(_this$splitObjectAtPo3, 3),\n          i = _this$splitObjectAtPo4[0],\n          n = _this$splitObjectAtPo4[1],\n          r = _this$splitObjectAtPo4[2];\n\n      return (_this$constructor$spl = new this.constructor(i).splitObjectAtPosition(Ji(t) + r), _this$constructor$spl2 = _slicedToArray(_this$constructor$spl, 2), i = _this$constructor$spl2[0], e = _this$constructor$spl2[1], _this$constructor$spl), [i, n, e - 1];\n    }\n  }, {\n    key: \"getObjectAtPosition\",\n    value: function getObjectAtPosition(t) {\n      var _this$findIndexAndOff = this.findIndexAndOffsetAtPosition(t),\n          e = _this$findIndexAndOff.index;\n\n      return this.objects[e];\n    }\n  }, {\n    key: \"splitObjectAtPosition\",\n    value: function splitObjectAtPosition(t) {\n      var e, i;\n\n      var _this$findIndexAndOff2 = this.findIndexAndOffsetAtPosition(t),\n          n = _this$findIndexAndOff2.index,\n          r = _this$findIndexAndOff2.offset,\n          o = this.objects.slice(0);\n\n      if (null != n) {\n        if (0 === r) e = n, i = 0;else {\n          var _t13 = this.getObjectAtIndex(n),\n              _t13$splitAtOffset = _t13.splitAtOffset(r),\n              _t13$splitAtOffset2 = _slicedToArray(_t13$splitAtOffset, 2),\n              _s4 = _t13$splitAtOffset2[0],\n              _a2 = _t13$splitAtOffset2[1];\n\n          o.splice(n, 1, _s4, _a2), e = n + 1, i = _s4.getLength() - r;\n        }\n      } else e = o.length, i = 0;\n      return [o, e, i];\n    }\n  }, {\n    key: \"consolidate\",\n    value: function consolidate() {\n      var t = [];\n      var e = this.objects[0];\n      return this.objects.slice(1).forEach(function (i) {\n        var n, r;\n        null !== (n = (r = e).canBeConsolidatedWith) && void 0 !== n && n.call(r, i) ? e = e.consolidateWith(i) : (t.push(e), e = i);\n      }), e && t.push(e), new this.constructor(t);\n    }\n  }, {\n    key: \"consolidateFromIndexToIndex\",\n    value: function consolidateFromIndexToIndex(t, e) {\n      var i = this.objects.slice(0).slice(t, e + 1),\n          n = new this.constructor(i).consolidate().toArray();\n      return this.splice.apply(this, [t, i.length].concat(_toConsumableArray(n)));\n    }\n  }, {\n    key: \"findIndexAndOffsetAtPosition\",\n    value: function findIndexAndOffsetAtPosition(t) {\n      var e,\n          i = 0;\n\n      for (e = 0; e < this.objects.length; e++) {\n        var _n14 = i + this.objects[e].getLength();\n\n        if (i <= t && t < _n14) return {\n          index: e,\n          offset: t - i\n        };\n        i = _n14;\n      }\n\n      return {\n        index: null,\n        offset: null\n      };\n    }\n  }, {\n    key: \"findPositionAtIndexAndOffset\",\n    value: function findPositionAtIndexAndOffset(t, e) {\n      var i = 0;\n\n      for (var _n15 = 0; _n15 < this.objects.length; _n15++) {\n        var _r7 = this.objects[_n15];\n        if (_n15 < t) i += _r7.getLength();else if (_n15 === t) {\n          i += e;\n          break;\n        }\n      }\n\n      return i;\n    }\n  }, {\n    key: \"getEndPosition\",\n    value: function getEndPosition() {\n      var _this33 = this;\n\n      return null == this.endPosition && (this.endPosition = 0, this.objects.forEach(function (t) {\n        return _this33.endPosition += t.getLength();\n      })), this.endPosition;\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return this.objects.join(\"\");\n    }\n  }, {\n    key: \"toArray\",\n    value: function toArray() {\n      return this.objects.slice(0);\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this.toArray();\n    }\n  }, {\n    key: \"isEqualTo\",\n    value: function isEqualTo(t) {\n      return _get(_getPrototypeOf(zi.prototype), \"isEqualTo\", this).apply(this, arguments) || qi(this.objects, null == t ? void 0 : t.objects);\n    }\n  }, {\n    key: \"contentsForInspection\",\n    value: function contentsForInspection() {\n      return {\n        objects: \"[\".concat(this.objects.map(function (t) {\n          return t.inspect();\n        }).join(\", \"), \"]\")\n      };\n    }\n  }], [{\n    key: \"box\",\n    value: function box(t) {\n      return t instanceof this ? t : new this(t);\n    }\n  }]);\n\n  return zi;\n}(rt);\n\nvar qi = function qi(t) {\n  var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];\n  if (t.length !== e.length) return !1;\n  var i = !0;\n\n  for (var _n16 = 0; _n16 < t.length; _n16++) {\n    var _r8 = t[_n16];\n    i && !_r8.isEqualTo(e[_n16]) && (i = !1);\n  }\n\n  return i;\n},\n    Hi = function Hi(t) {\n  return t[0];\n},\n    Ji = function Ji(t) {\n  return t[1];\n};\n\nvar Ki = /*#__PURE__*/function (_rt5) {\n  _inherits(Ki, _rt5);\n\n  var _super22 = _createSuper(Ki);\n\n  function Ki() {\n    var _this34;\n\n    _classCallCheck(this, Ki);\n\n    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n    _this34 = _super22.apply(this, arguments);\n    var e = t.filter(function (t) {\n      return !t.isEmpty();\n    });\n    _this34.pieceList = new zi(e);\n    return _this34;\n  }\n\n  _createClass(Ki, [{\n    key: \"copy\",\n    value: function copy() {\n      return this.copyWithPieceList(this.pieceList);\n    }\n  }, {\n    key: \"copyWithPieceList\",\n    value: function copyWithPieceList(t) {\n      return new this.constructor(t.consolidate().toArray());\n    }\n  }, {\n    key: \"copyUsingObjectMap\",\n    value: function copyUsingObjectMap(t) {\n      var e = this.getPieces().map(function (e) {\n        return t.find(e) || e;\n      });\n      return new this.constructor(e);\n    }\n  }, {\n    key: \"appendText\",\n    value: function appendText(t) {\n      return this.insertTextAtPosition(t, this.getLength());\n    }\n  }, {\n    key: \"insertTextAtPosition\",\n    value: function insertTextAtPosition(t, e) {\n      return this.copyWithPieceList(this.pieceList.insertSplittableListAtPosition(t.pieceList, e));\n    }\n  }, {\n    key: \"removeTextAtRange\",\n    value: function removeTextAtRange(t) {\n      return this.copyWithPieceList(this.pieceList.removeObjectsInRange(t));\n    }\n  }, {\n    key: \"replaceTextAtRange\",\n    value: function replaceTextAtRange(t, e) {\n      return this.removeTextAtRange(e).insertTextAtPosition(t, e[0]);\n    }\n  }, {\n    key: \"moveTextFromRangeToPosition\",\n    value: function moveTextFromRangeToPosition(t, e) {\n      if (t[0] <= e && e <= t[1]) return;\n      var i = this.getTextAtRange(t),\n          n = i.getLength();\n      return t[0] < e && (e -= n), this.removeTextAtRange(t).insertTextAtPosition(i, e);\n    }\n  }, {\n    key: \"addAttributeAtRange\",\n    value: function addAttributeAtRange(t, e, i) {\n      var n = {};\n      return n[t] = e, this.addAttributesAtRange(n, i);\n    }\n  }, {\n    key: \"addAttributesAtRange\",\n    value: function addAttributesAtRange(t, e) {\n      return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e, function (e) {\n        return e.copyWithAdditionalAttributes(t);\n      }));\n    }\n  }, {\n    key: \"removeAttributeAtRange\",\n    value: function removeAttributeAtRange(t, e) {\n      return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e, function (e) {\n        return e.copyWithoutAttribute(t);\n      }));\n    }\n  }, {\n    key: \"setAttributesAtRange\",\n    value: function setAttributesAtRange(t, e) {\n      return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e, function (e) {\n        return e.copyWithAttributes(t);\n      }));\n    }\n  }, {\n    key: \"getAttributesAtPosition\",\n    value: function getAttributesAtPosition(t) {\n      var e;\n      return (null === (e = this.pieceList.getObjectAtPosition(t)) || void 0 === e ? void 0 : e.getAttributes()) || {};\n    }\n  }, {\n    key: \"getCommonAttributes\",\n    value: function getCommonAttributes() {\n      var t = Array.from(this.pieceList.toArray()).map(function (t) {\n        return t.getAttributes();\n      });\n      return Ht.fromCommonAttributesOfObjects(t).toObject();\n    }\n  }, {\n    key: \"getCommonAttributesAtRange\",\n    value: function getCommonAttributesAtRange(t) {\n      return this.getTextAtRange(t).getCommonAttributes() || {};\n    }\n  }, {\n    key: \"getExpandedRangeForAttributeAtOffset\",\n    value: function getExpandedRangeForAttributeAtOffset(t, e) {\n      var i,\n          n = i = e;\n      var r = this.getLength();\n\n      for (; n > 0 && this.getCommonAttributesAtRange([n - 1, i])[t];) {\n        n--;\n      }\n\n      for (; i < r && this.getCommonAttributesAtRange([e, i + 1])[t];) {\n        i++;\n      }\n\n      return [n, i];\n    }\n  }, {\n    key: \"getTextAtRange\",\n    value: function getTextAtRange(t) {\n      return this.copyWithPieceList(this.pieceList.getSplittableListInRange(t));\n    }\n  }, {\n    key: \"getStringAtRange\",\n    value: function getStringAtRange(t) {\n      return this.pieceList.getSplittableListInRange(t).toString();\n    }\n  }, {\n    key: \"getStringAtPosition\",\n    value: function getStringAtPosition(t) {\n      return this.getStringAtRange([t, t + 1]);\n    }\n  }, {\n    key: \"startsWithString\",\n    value: function startsWithString(t) {\n      return this.getStringAtRange([0, t.length]) === t;\n    }\n  }, {\n    key: \"endsWithString\",\n    value: function endsWithString(t) {\n      var e = this.getLength();\n      return this.getStringAtRange([e - t.length, e]) === t;\n    }\n  }, {\n    key: \"getAttachmentPieces\",\n    value: function getAttachmentPieces() {\n      return this.pieceList.toArray().filter(function (t) {\n        return !!t.attachment;\n      });\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments() {\n      return this.getAttachmentPieces().map(function (t) {\n        return t.attachment;\n      });\n    }\n  }, {\n    key: \"getAttachmentAndPositionById\",\n    value: function getAttachmentAndPositionById(t) {\n      var e = 0;\n\n      var _iterator3 = _createForOfIteratorHelper(this.pieceList.toArray()),\n          _step3;\n\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var _n17 = _step3.value;\n          var i;\n          if ((null === (i = _n17.attachment) || void 0 === i ? void 0 : i.id) === t) return {\n            attachment: _n17.attachment,\n            position: e\n          };\n          e += _n17.length;\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n\n      return {\n        attachment: null,\n        position: null\n      };\n    }\n  }, {\n    key: \"getAttachmentById\",\n    value: function getAttachmentById(t) {\n      var _this$getAttachmentAn = this.getAttachmentAndPositionById(t),\n          e = _this$getAttachmentAn.attachment;\n\n      return e;\n    }\n  }, {\n    key: \"getRangeOfAttachment\",\n    value: function getRangeOfAttachment(t) {\n      var e = this.getAttachmentAndPositionById(t.id),\n          i = e.position;\n      if (t = e.attachment) return [i, i + 1];\n    }\n  }, {\n    key: \"updateAttributesForAttachment\",\n    value: function updateAttributesForAttachment(t, e) {\n      var i = this.getRangeOfAttachment(e);\n      return i ? this.addAttributesAtRange(t, i) : this;\n    }\n  }, {\n    key: \"getLength\",\n    value: function getLength() {\n      return this.pieceList.getEndPosition();\n    }\n  }, {\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return 0 === this.getLength();\n    }\n  }, {\n    key: \"isEqualTo\",\n    value: function isEqualTo(t) {\n      var e;\n      return _get(_getPrototypeOf(Ki.prototype), \"isEqualTo\", this).call(this, t) || (null == t || null === (e = t.pieceList) || void 0 === e ? void 0 : e.isEqualTo(this.pieceList));\n    }\n  }, {\n    key: \"isBlockBreak\",\n    value: function isBlockBreak() {\n      return 1 === this.getLength() && this.pieceList.getObjectAtIndex(0).isBlockBreak();\n    }\n  }, {\n    key: \"eachPiece\",\n    value: function eachPiece(t) {\n      return this.pieceList.eachObject(t);\n    }\n  }, {\n    key: \"getPieces\",\n    value: function getPieces() {\n      return this.pieceList.toArray();\n    }\n  }, {\n    key: \"getPieceAtPosition\",\n    value: function getPieceAtPosition(t) {\n      return this.pieceList.getObjectAtPosition(t);\n    }\n  }, {\n    key: \"contentsForInspection\",\n    value: function contentsForInspection() {\n      return {\n        pieceList: this.pieceList.inspect()\n      };\n    }\n  }, {\n    key: \"toSerializableText\",\n    value: function toSerializableText() {\n      var t = this.pieceList.selectSplittableList(function (t) {\n        return t.isSerializable();\n      });\n      return this.copyWithPieceList(t);\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return this.pieceList.toString();\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this.pieceList.toJSON();\n    }\n  }, {\n    key: \"toConsole\",\n    value: function toConsole() {\n      return JSON.stringify(this.pieceList.toArray().map(function (t) {\n        return JSON.parse(t.toConsole());\n      }));\n    }\n  }, {\n    key: \"getDirection\",\n    value: function getDirection() {\n      return lt(this.toString());\n    }\n  }, {\n    key: \"isRTL\",\n    value: function isRTL() {\n      return \"rtl\" === this.getDirection();\n    }\n  }], [{\n    key: \"textForAttachmentWithAttributes\",\n    value: function textForAttachmentWithAttributes(t, e) {\n      return new this([new Ui(t, e)]);\n    }\n  }, {\n    key: \"textForStringWithAttributes\",\n    value: function textForStringWithAttributes(t, e) {\n      return new this([new Vi(t, e)]);\n    }\n  }, {\n    key: \"fromJSON\",\n    value: function fromJSON(t) {\n      return new this(Array.from(t).map(function (t) {\n        return _i.fromJSON(t);\n      }));\n    }\n  }]);\n\n  return Ki;\n}(rt);\n\nvar Gi = /*#__PURE__*/function (_rt6) {\n  _inherits(Gi, _rt6);\n\n  var _super23 = _createSuper(Gi);\n\n  function Gi(t, e, i) {\n    var _this35;\n\n    _classCallCheck(this, Gi);\n\n    _this35 = _super23.apply(this, arguments), _this35.text = Yi(t || new Ki()), _this35.attributes = e || [], _this35.htmlAttributes = i || {};\n    return _this35;\n  }\n\n  _createClass(Gi, [{\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      return this.text.isBlockBreak();\n    }\n  }, {\n    key: \"isEqualTo\",\n    value: function isEqualTo(t) {\n      return !!_get(_getPrototypeOf(Gi.prototype), \"isEqualTo\", this).call(this, t) || this.text.isEqualTo(null == t ? void 0 : t.text) && ot(this.attributes, null == t ? void 0 : t.attributes) && Tt(this.htmlAttributes, null == t ? void 0 : t.htmlAttributes);\n    }\n  }, {\n    key: \"copyWithText\",\n    value: function copyWithText(t) {\n      return new Gi(t, this.attributes, this.htmlAttributes);\n    }\n  }, {\n    key: \"copyWithoutText\",\n    value: function copyWithoutText() {\n      return this.copyWithText(null);\n    }\n  }, {\n    key: \"copyWithAttributes\",\n    value: function copyWithAttributes(t) {\n      return new Gi(this.text, t, this.htmlAttributes);\n    }\n  }, {\n    key: \"copyWithoutAttributes\",\n    value: function copyWithoutAttributes() {\n      return this.copyWithAttributes(null);\n    }\n  }, {\n    key: \"copyUsingObjectMap\",\n    value: function copyUsingObjectMap(t) {\n      var e = t.find(this.text);\n      return e ? this.copyWithText(e) : this.copyWithText(this.text.copyUsingObjectMap(t));\n    }\n  }, {\n    key: \"addAttribute\",\n    value: function addAttribute(t) {\n      var e = this.attributes.concat(en(t));\n      return this.copyWithAttributes(e);\n    }\n  }, {\n    key: \"addHTMLAttribute\",\n    value: function addHTMLAttribute(t, e) {\n      var i = Object.assign({}, this.htmlAttributes, _defineProperty({}, t, e));\n      return new Gi(this.text, this.attributes, i);\n    }\n  }, {\n    key: \"removeAttribute\",\n    value: function removeAttribute(t) {\n      var _mt2 = mt(t),\n          e = _mt2.listAttribute,\n          i = rn(rn(this.attributes, t), e);\n\n      return this.copyWithAttributes(i);\n    }\n  }, {\n    key: \"removeLastAttribute\",\n    value: function removeLastAttribute() {\n      return this.removeAttribute(this.getLastAttribute());\n    }\n  }, {\n    key: \"getLastAttribute\",\n    value: function getLastAttribute() {\n      return nn(this.attributes);\n    }\n  }, {\n    key: \"getAttributes\",\n    value: function getAttributes() {\n      return this.attributes.slice(0);\n    }\n  }, {\n    key: \"getAttributeLevel\",\n    value: function getAttributeLevel() {\n      return this.attributes.length;\n    }\n  }, {\n    key: \"getAttributeAtLevel\",\n    value: function getAttributeAtLevel(t) {\n      return this.attributes[t - 1];\n    }\n  }, {\n    key: \"hasAttribute\",\n    value: function hasAttribute(t) {\n      return this.attributes.includes(t);\n    }\n  }, {\n    key: \"hasAttributes\",\n    value: function hasAttributes() {\n      return this.getAttributeLevel() > 0;\n    }\n  }, {\n    key: \"getLastNestableAttribute\",\n    value: function getLastNestableAttribute() {\n      return nn(this.getNestableAttributes());\n    }\n  }, {\n    key: \"getNestableAttributes\",\n    value: function getNestableAttributes() {\n      return this.attributes.filter(function (t) {\n        return mt(t).nestable;\n      });\n    }\n  }, {\n    key: \"getNestingLevel\",\n    value: function getNestingLevel() {\n      return this.getNestableAttributes().length;\n    }\n  }, {\n    key: \"decreaseNestingLevel\",\n    value: function decreaseNestingLevel() {\n      var t = this.getLastNestableAttribute();\n      return t ? this.removeAttribute(t) : this;\n    }\n  }, {\n    key: \"increaseNestingLevel\",\n    value: function increaseNestingLevel() {\n      var t = this.getLastNestableAttribute();\n\n      if (t) {\n        var _e21 = this.attributes.lastIndexOf(t),\n            _i25 = st.apply(void 0, [this.attributes, _e21 + 1, 0].concat(_toConsumableArray(en(t))));\n\n        return this.copyWithAttributes(_i25);\n      }\n\n      return this;\n    }\n  }, {\n    key: \"getListItemAttributes\",\n    value: function getListItemAttributes() {\n      return this.attributes.filter(function (t) {\n        return mt(t).listAttribute;\n      });\n    }\n  }, {\n    key: \"isListItem\",\n    value: function isListItem() {\n      var t;\n      return null === (t = mt(this.getLastAttribute())) || void 0 === t ? void 0 : t.listAttribute;\n    }\n  }, {\n    key: \"isTerminalBlock\",\n    value: function isTerminalBlock() {\n      var t;\n      return null === (t = mt(this.getLastAttribute())) || void 0 === t ? void 0 : t.terminal;\n    }\n  }, {\n    key: \"breaksOnReturn\",\n    value: function breaksOnReturn() {\n      var t;\n      return null === (t = mt(this.getLastAttribute())) || void 0 === t ? void 0 : t.breakOnReturn;\n    }\n  }, {\n    key: \"findLineBreakInDirectionFromPosition\",\n    value: function findLineBreakInDirectionFromPosition(t, e) {\n      var i = this.toString();\n      var n;\n\n      switch (t) {\n        case \"forward\":\n          n = i.indexOf(\"\\n\", e);\n          break;\n\n        case \"backward\":\n          n = i.slice(0, e).lastIndexOf(\"\\n\");\n      }\n\n      if (-1 !== n) return n;\n    }\n  }, {\n    key: \"contentsForInspection\",\n    value: function contentsForInspection() {\n      return {\n        text: this.text.inspect(),\n        attributes: this.attributes\n      };\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return this.text.toString();\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return {\n        text: this.text,\n        attributes: this.attributes,\n        htmlAttributes: this.htmlAttributes\n      };\n    }\n  }, {\n    key: \"getDirection\",\n    value: function getDirection() {\n      return this.text.getDirection();\n    }\n  }, {\n    key: \"isRTL\",\n    value: function isRTL() {\n      return this.text.isRTL();\n    }\n  }, {\n    key: \"getLength\",\n    value: function getLength() {\n      return this.text.getLength();\n    }\n  }, {\n    key: \"canBeConsolidatedWith\",\n    value: function canBeConsolidatedWith(t) {\n      return !this.hasAttributes() && !t.hasAttributes() && this.getDirection() === t.getDirection();\n    }\n  }, {\n    key: \"consolidateWith\",\n    value: function consolidateWith(t) {\n      var e = Ki.textForStringWithAttributes(\"\\n\"),\n          i = this.getTextWithoutBlockBreak().appendText(e);\n      return this.copyWithText(i.appendText(t.text));\n    }\n  }, {\n    key: \"splitAtOffset\",\n    value: function splitAtOffset(t) {\n      var e, i;\n      return 0 === t ? (e = null, i = this) : t === this.getLength() ? (e = this, i = null) : (e = this.copyWithText(this.text.getTextAtRange([0, t])), i = this.copyWithText(this.text.getTextAtRange([t, this.getLength()]))), [e, i];\n    }\n  }, {\n    key: \"getBlockBreakPosition\",\n    value: function getBlockBreakPosition() {\n      return this.text.getLength() - 1;\n    }\n  }, {\n    key: \"getTextWithoutBlockBreak\",\n    value: function getTextWithoutBlockBreak() {\n      return Qi(this.text) ? this.text.getTextAtRange([0, this.getBlockBreakPosition()]) : this.text.copy();\n    }\n  }, {\n    key: \"canBeGrouped\",\n    value: function canBeGrouped(t) {\n      return this.attributes[t];\n    }\n  }, {\n    key: \"canBeGroupedWith\",\n    value: function canBeGroupedWith(t, e) {\n      var i = t.getAttributes(),\n          r = i[e],\n          o = this.attributes[e];\n      return o === r && !(!1 === mt(o).group && !function () {\n        if (!dt) {\n          dt = [];\n\n          for (var _t14 in n) {\n            var _e22 = n[_t14].listAttribute;\n            null != _e22 && dt.push(_e22);\n          }\n        }\n\n        return dt;\n      }().includes(i[e + 1])) && (this.getDirection() === t.getDirection() || t.isEmpty());\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(t) {\n      return new this(Ki.fromJSON(t.text), t.attributes, t.htmlAttributes);\n    }\n  }]);\n\n  return Gi;\n}(rt);\n\nvar Yi = function Yi(t) {\n  return t = $i(t), t = Zi(t);\n},\n    $i = function $i(t) {\n  var e = !1;\n  var i = t.getPieces();\n  var n = i.slice(0, i.length - 1);\n  var r = i[i.length - 1];\n  return r ? (n = n.map(function (t) {\n    return t.isBlockBreak() ? (e = !0, tn(t)) : t;\n  }), e ? new Ki([].concat(_toConsumableArray(n), [r])) : t) : t;\n},\n    Xi = Ki.textForStringWithAttributes(\"\\n\", {\n  blockBreak: !0\n}),\n    Zi = function Zi(t) {\n  return Qi(t) ? t : t.appendText(Xi);\n},\n    Qi = function Qi(t) {\n  var e = t.getLength();\n  if (0 === e) return !1;\n  return t.getTextAtRange([e - 1, e]).isBlockBreak();\n},\n    tn = function tn(t) {\n  return t.copyWithoutAttribute(\"blockBreak\");\n},\n    en = function en(t) {\n  var _mt3 = mt(t),\n      e = _mt3.listAttribute;\n\n  return e ? [e, t] : [t];\n},\n    nn = function nn(t) {\n  return t.slice(-1)[0];\n},\n    rn = function rn(t, e) {\n  var i = t.lastIndexOf(e);\n  return -1 === i ? t : st(t, i, 1);\n};\n\nvar on = /*#__PURE__*/function (_rt7) {\n  _inherits(on, _rt7);\n\n  var _super24 = _createSuper(on);\n\n  function on() {\n    var _this36;\n\n    _classCallCheck(this, on);\n\n    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n    _this36 = _super24.apply(this, arguments), 0 === t.length && (t = [new Gi()]), _this36.blockList = zi.box(t);\n    return _this36;\n  }\n\n  _createClass(on, [{\n    key: \"isEmpty\",\n    value: function isEmpty() {\n      var t = this.getBlockAtIndex(0);\n      return 1 === this.blockList.length && t.isEmpty() && !t.hasAttributes();\n    }\n  }, {\n    key: \"copy\",\n    value: function copy() {\n      var t = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).consolidateBlocks ? this.blockList.consolidate().toArray() : this.blockList.toArray();\n      return new this.constructor(t);\n    }\n  }, {\n    key: \"copyUsingObjectsFromDocument\",\n    value: function copyUsingObjectsFromDocument(t) {\n      var e = new Zt(t.getObjects());\n      return this.copyUsingObjectMap(e);\n    }\n  }, {\n    key: \"copyUsingObjectMap\",\n    value: function copyUsingObjectMap(t) {\n      var e = this.getBlocks().map(function (e) {\n        return t.find(e) || e.copyUsingObjectMap(t);\n      });\n      return new this.constructor(e);\n    }\n  }, {\n    key: \"copyWithBaseBlockAttributes\",\n    value: function copyWithBaseBlockAttributes() {\n      var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n      var e = this.getBlocks().map(function (e) {\n        var i = t.concat(e.getAttributes());\n        return e.copyWithAttributes(i);\n      });\n      return new this.constructor(e);\n    }\n  }, {\n    key: \"replaceBlock\",\n    value: function replaceBlock(t, e) {\n      var i = this.blockList.indexOf(t);\n      return -1 === i ? this : new this.constructor(this.blockList.replaceObjectAtIndex(e, i));\n    }\n  }, {\n    key: \"insertDocumentAtRange\",\n    value: function insertDocumentAtRange(t, e) {\n      var i = t.blockList;\n      e = wt(e);\n\n      var _e23 = e,\n          _e24 = _slicedToArray(_e23, 1),\n          n = _e24[0];\n\n      var _this$locationFromPos = this.locationFromPosition(n),\n          r = _this$locationFromPos.index,\n          o = _this$locationFromPos.offset;\n\n      var s = this;\n      var a = this.getBlockAtPosition(n);\n      return Lt(e) && a.isEmpty() && !a.hasAttributes() ? s = new this.constructor(s.blockList.removeObjectAtIndex(r)) : a.getBlockBreakPosition() === o && n++, s = s.removeTextAtRange(e), new this.constructor(s.blockList.insertSplittableListAtPosition(i, n));\n    }\n  }, {\n    key: \"mergeDocumentAtRange\",\n    value: function mergeDocumentAtRange(t, e) {\n      var i, n;\n      e = wt(e);\n\n      var _e25 = e,\n          _e26 = _slicedToArray(_e25, 1),\n          r = _e26[0],\n          o = this.locationFromPosition(r),\n          s = this.getBlockAtIndex(o.index).getAttributes(),\n          a = t.getBaseBlockAttributes(),\n          l = s.slice(-a.length);\n\n      if (ot(a, l)) {\n        var _e27 = s.slice(0, -a.length);\n\n        i = t.copyWithBaseBlockAttributes(_e27);\n      } else i = t.copy({\n        consolidateBlocks: !0\n      }).copyWithBaseBlockAttributes(s);\n\n      var c = i.getBlockCount(),\n          u = i.getBlockAtIndex(0);\n\n      if (ot(s, u.getAttributes())) {\n        var _t15 = u.getTextWithoutBlockBreak();\n\n        if (n = this.insertTextAtRange(_t15, e), c > 1) {\n          i = new this.constructor(i.getBlocks().slice(1));\n\n          var _e28 = r + _t15.getLength();\n\n          n = n.insertDocumentAtRange(i, _e28);\n        }\n      } else n = this.insertDocumentAtRange(i, e);\n\n      return n;\n    }\n  }, {\n    key: \"insertTextAtRange\",\n    value: function insertTextAtRange(t, e) {\n      e = wt(e);\n\n      var _e29 = e,\n          _e30 = _slicedToArray(_e29, 1),\n          i = _e30[0],\n          _this$locationFromPos2 = this.locationFromPosition(i),\n          n = _this$locationFromPos2.index,\n          r = _this$locationFromPos2.offset,\n          o = this.removeTextAtRange(e);\n\n      return new this.constructor(o.blockList.editObjectAtIndex(n, function (e) {\n        return e.copyWithText(e.text.insertTextAtPosition(t, r));\n      }));\n    }\n  }, {\n    key: \"removeTextAtRange\",\n    value: function removeTextAtRange(t) {\n      var e;\n      t = wt(t);\n\n      var _t16 = t,\n          _t17 = _slicedToArray(_t16, 2),\n          i = _t17[0],\n          n = _t17[1];\n\n      if (Lt(t)) return this;\n\n      var _Array$from = Array.from(this.locationRangeFromRange(t)),\n          _Array$from2 = _slicedToArray(_Array$from, 2),\n          r = _Array$from2[0],\n          o = _Array$from2[1],\n          s = r.index,\n          a = r.offset,\n          l = this.getBlockAtIndex(s),\n          c = o.index,\n          u = o.offset,\n          h = this.getBlockAtIndex(c);\n\n      if (n - i == 1 && l.getBlockBreakPosition() === a && h.getBlockBreakPosition() !== u && \"\\n\" === h.text.getStringAtPosition(u)) e = this.blockList.editObjectAtIndex(c, function (t) {\n        return t.copyWithText(t.text.removeTextAtRange([u, u + 1]));\n      });else {\n        var _t18;\n\n        var _i26 = l.text.getTextAtRange([0, a]),\n            _n18 = h.text.getTextAtRange([u, h.getLength()]),\n            _r9 = _i26.appendText(_n18);\n\n        _t18 = s !== c && 0 === a && l.getAttributeLevel() >= h.getAttributeLevel() ? h.copyWithText(_r9) : l.copyWithText(_r9);\n\n        var _o4 = c + 1 - s;\n\n        e = this.blockList.splice(s, _o4, _t18);\n      }\n      return new this.constructor(e);\n    }\n  }, {\n    key: \"moveTextFromRangeToPosition\",\n    value: function moveTextFromRangeToPosition(t, e) {\n      var i;\n      t = wt(t);\n\n      var _t19 = t,\n          _t20 = _slicedToArray(_t19, 2),\n          n = _t20[0],\n          r = _t20[1];\n\n      if (n <= e && e <= r) return this;\n      var o = this.getDocumentAtRange(t),\n          s = this.removeTextAtRange(t);\n      var a = n < e;\n      a && (e -= o.getLength());\n\n      var _o$getBlocks = o.getBlocks(),\n          _o$getBlocks2 = _toArray(_o$getBlocks),\n          l = _o$getBlocks2[0],\n          c = _o$getBlocks2.slice(1);\n\n      return 0 === c.length ? (i = l.getTextWithoutBlockBreak(), a && (e += 1)) : i = l.text, s = s.insertTextAtRange(i, e), 0 === c.length ? s : (o = new this.constructor(c), e += i.getLength(), s.insertDocumentAtRange(o, e));\n    }\n  }, {\n    key: \"addAttributeAtRange\",\n    value: function addAttributeAtRange(t, e, i) {\n      var n = this.blockList;\n      return this.eachBlockAtRange(i, function (i, r, o) {\n        return n = n.editObjectAtIndex(o, function () {\n          return mt(t) ? i.addAttribute(t, e) : r[0] === r[1] ? i : i.copyWithText(i.text.addAttributeAtRange(t, e, r));\n        });\n      }), new this.constructor(n);\n    }\n  }, {\n    key: \"addAttribute\",\n    value: function addAttribute(t, e) {\n      var i = this.blockList;\n      return this.eachBlock(function (n, r) {\n        return i = i.editObjectAtIndex(r, function () {\n          return n.addAttribute(t, e);\n        });\n      }), new this.constructor(i);\n    }\n  }, {\n    key: \"removeAttributeAtRange\",\n    value: function removeAttributeAtRange(t, e) {\n      var i = this.blockList;\n      return this.eachBlockAtRange(e, function (e, n, r) {\n        mt(t) ? i = i.editObjectAtIndex(r, function () {\n          return e.removeAttribute(t);\n        }) : n[0] !== n[1] && (i = i.editObjectAtIndex(r, function () {\n          return e.copyWithText(e.text.removeAttributeAtRange(t, n));\n        }));\n      }), new this.constructor(i);\n    }\n  }, {\n    key: \"updateAttributesForAttachment\",\n    value: function updateAttributesForAttachment(t, e) {\n      var i = this.getRangeOfAttachment(e),\n          _Array$from3 = Array.from(i),\n          _Array$from4 = _slicedToArray(_Array$from3, 1),\n          n = _Array$from4[0],\n          _this$locationFromPos3 = this.locationFromPosition(n),\n          r = _this$locationFromPos3.index,\n          o = this.getTextAtIndex(r);\n\n      return new this.constructor(this.blockList.editObjectAtIndex(r, function (i) {\n        return i.copyWithText(o.updateAttributesForAttachment(t, e));\n      }));\n    }\n  }, {\n    key: \"removeAttributeForAttachment\",\n    value: function removeAttributeForAttachment(t, e) {\n      var i = this.getRangeOfAttachment(e);\n      return this.removeAttributeAtRange(t, i);\n    }\n  }, {\n    key: \"setHTMLAttributeAtPosition\",\n    value: function setHTMLAttributeAtPosition(t, e, i) {\n      var n = this.getBlockAtPosition(t),\n          r = n.addHTMLAttribute(e, i);\n      return this.replaceBlock(n, r);\n    }\n  }, {\n    key: \"insertBlockBreakAtRange\",\n    value: function insertBlockBreakAtRange(t) {\n      var e;\n      t = wt(t);\n\n      var _t21 = t,\n          _t22 = _slicedToArray(_t21, 1),\n          i = _t22[0],\n          _this$locationFromPos4 = this.locationFromPosition(i),\n          n = _this$locationFromPos4.offset,\n          r = this.removeTextAtRange(t);\n\n      return 0 === n && (e = [new Gi()]), new this.constructor(r.blockList.insertSplittableListAtPosition(new zi(e), i));\n    }\n  }, {\n    key: \"applyBlockAttributeAtRange\",\n    value: function applyBlockAttributeAtRange(t, e, i) {\n      var n = this.expandRangeToLineBreaksAndSplitBlocks(i);\n      var r = n.document;\n      i = n.range;\n      var o = mt(t);\n\n      if (o.listAttribute) {\n        r = r.removeLastListAttributeAtRange(i, {\n          exceptAttributeName: t\n        });\n\n        var _e31 = r.convertLineBreaksToBlockBreaksInRange(i);\n\n        r = _e31.document, i = _e31.range;\n      } else r = o.exclusive ? r.removeBlockAttributesAtRange(i) : o.terminal ? r.removeLastTerminalAttributeAtRange(i) : r.consolidateBlocksAtRange(i);\n\n      return r.addAttributeAtRange(t, e, i);\n    }\n  }, {\n    key: \"removeLastListAttributeAtRange\",\n    value: function removeLastListAttributeAtRange(t) {\n      var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          i = this.blockList;\n      return this.eachBlockAtRange(t, function (t, n, r) {\n        var o = t.getLastAttribute();\n        o && mt(o).listAttribute && o !== e.exceptAttributeName && (i = i.editObjectAtIndex(r, function () {\n          return t.removeAttribute(o);\n        }));\n      }), new this.constructor(i);\n    }\n  }, {\n    key: \"removeLastTerminalAttributeAtRange\",\n    value: function removeLastTerminalAttributeAtRange(t) {\n      var e = this.blockList;\n      return this.eachBlockAtRange(t, function (t, i, n) {\n        var r = t.getLastAttribute();\n        r && mt(r).terminal && (e = e.editObjectAtIndex(n, function () {\n          return t.removeAttribute(r);\n        }));\n      }), new this.constructor(e);\n    }\n  }, {\n    key: \"removeBlockAttributesAtRange\",\n    value: function removeBlockAttributesAtRange(t) {\n      var e = this.blockList;\n      return this.eachBlockAtRange(t, function (t, i, n) {\n        t.hasAttributes() && (e = e.editObjectAtIndex(n, function () {\n          return t.copyWithoutAttributes();\n        }));\n      }), new this.constructor(e);\n    }\n  }, {\n    key: \"expandRangeToLineBreaksAndSplitBlocks\",\n    value: function expandRangeToLineBreaksAndSplitBlocks(t) {\n      var e;\n      t = wt(t);\n\n      var _t23 = t,\n          _t24 = _slicedToArray(_t23, 2),\n          i = _t24[0],\n          n = _t24[1];\n\n      var r = this.locationFromPosition(i),\n          o = this.locationFromPosition(n);\n      var s = this;\n      var a = s.getBlockAtIndex(r.index);\n      if (r.offset = a.findLineBreakInDirectionFromPosition(\"backward\", r.offset), null != r.offset && (e = s.positionFromLocation(r), s = s.insertBlockBreakAtRange([e, e + 1]), o.index += 1, o.offset -= s.getBlockAtIndex(r.index).getLength(), r.index += 1), r.offset = 0, 0 === o.offset && o.index > r.index) o.index -= 1, o.offset = s.getBlockAtIndex(o.index).getBlockBreakPosition();else {\n        var _t25 = s.getBlockAtIndex(o.index);\n\n        \"\\n\" === _t25.text.getStringAtRange([o.offset - 1, o.offset]) ? o.offset -= 1 : o.offset = _t25.findLineBreakInDirectionFromPosition(\"forward\", o.offset), o.offset !== _t25.getBlockBreakPosition() && (e = s.positionFromLocation(o), s = s.insertBlockBreakAtRange([e, e + 1]));\n      }\n      return i = s.positionFromLocation(r), n = s.positionFromLocation(o), {\n        document: s,\n        range: t = wt([i, n])\n      };\n    }\n  }, {\n    key: \"convertLineBreaksToBlockBreaksInRange\",\n    value: function convertLineBreaksToBlockBreaksInRange(t) {\n      t = wt(t);\n\n      var _t26 = t,\n          _t27 = _slicedToArray(_t26, 1),\n          e = _t27[0];\n\n      var i = this.getStringAtRange(t).slice(0, -1);\n      var n = this;\n      return i.replace(/.*?\\n/g, function (t) {\n        e += t.length, n = n.insertBlockBreakAtRange([e - 1, e]);\n      }), {\n        document: n,\n        range: t\n      };\n    }\n  }, {\n    key: \"consolidateBlocksAtRange\",\n    value: function consolidateBlocksAtRange(t) {\n      t = wt(t);\n\n      var _t28 = t,\n          _t29 = _slicedToArray(_t28, 2),\n          e = _t29[0],\n          i = _t29[1],\n          n = this.locationFromPosition(e).index,\n          r = this.locationFromPosition(i).index;\n\n      return new this.constructor(this.blockList.consolidateFromIndexToIndex(n, r));\n    }\n  }, {\n    key: \"getDocumentAtRange\",\n    value: function getDocumentAtRange(t) {\n      t = wt(t);\n      var e = this.blockList.getSplittableListInRange(t).toArray();\n      return new this.constructor(e);\n    }\n  }, {\n    key: \"getStringAtRange\",\n    value: function getStringAtRange(t) {\n      var e;\n      var i = t = wt(t);\n      return i[i.length - 1] !== this.getLength() && (e = -1), this.getDocumentAtRange(t).toString().slice(0, e);\n    }\n  }, {\n    key: \"getBlockAtIndex\",\n    value: function getBlockAtIndex(t) {\n      return this.blockList.getObjectAtIndex(t);\n    }\n  }, {\n    key: \"getBlockAtPosition\",\n    value: function getBlockAtPosition(t) {\n      var _this$locationFromPos5 = this.locationFromPosition(t),\n          e = _this$locationFromPos5.index;\n\n      return this.getBlockAtIndex(e);\n    }\n  }, {\n    key: \"getTextAtIndex\",\n    value: function getTextAtIndex(t) {\n      var e;\n      return null === (e = this.getBlockAtIndex(t)) || void 0 === e ? void 0 : e.text;\n    }\n  }, {\n    key: \"getTextAtPosition\",\n    value: function getTextAtPosition(t) {\n      var _this$locationFromPos6 = this.locationFromPosition(t),\n          e = _this$locationFromPos6.index;\n\n      return this.getTextAtIndex(e);\n    }\n  }, {\n    key: \"getPieceAtPosition\",\n    value: function getPieceAtPosition(t) {\n      var _this$locationFromPos7 = this.locationFromPosition(t),\n          e = _this$locationFromPos7.index,\n          i = _this$locationFromPos7.offset;\n\n      return this.getTextAtIndex(e).getPieceAtPosition(i);\n    }\n  }, {\n    key: \"getCharacterAtPosition\",\n    value: function getCharacterAtPosition(t) {\n      var _this$locationFromPos8 = this.locationFromPosition(t),\n          e = _this$locationFromPos8.index,\n          i = _this$locationFromPos8.offset;\n\n      return this.getTextAtIndex(e).getStringAtRange([i, i + 1]);\n    }\n  }, {\n    key: \"getLength\",\n    value: function getLength() {\n      return this.blockList.getEndPosition();\n    }\n  }, {\n    key: \"getBlocks\",\n    value: function getBlocks() {\n      return this.blockList.toArray();\n    }\n  }, {\n    key: \"getBlockCount\",\n    value: function getBlockCount() {\n      return this.blockList.length;\n    }\n  }, {\n    key: \"getEditCount\",\n    value: function getEditCount() {\n      return this.editCount;\n    }\n  }, {\n    key: \"eachBlock\",\n    value: function eachBlock(t) {\n      return this.blockList.eachObject(t);\n    }\n  }, {\n    key: \"eachBlockAtRange\",\n    value: function eachBlockAtRange(t, e) {\n      var i, n;\n      t = wt(t);\n\n      var _t30 = t,\n          _t31 = _slicedToArray(_t30, 2),\n          r = _t31[0],\n          o = _t31[1],\n          s = this.locationFromPosition(r),\n          a = this.locationFromPosition(o);\n\n      if (s.index === a.index) return i = this.getBlockAtIndex(s.index), n = [s.offset, a.offset], e(i, n, s.index);\n\n      for (var _t32 = s.index; _t32 <= a.index; _t32++) {\n        if (i = this.getBlockAtIndex(_t32), i) {\n          switch (_t32) {\n            case s.index:\n              n = [s.offset, i.text.getLength()];\n              break;\n\n            case a.index:\n              n = [0, a.offset];\n              break;\n\n            default:\n              n = [0, i.text.getLength()];\n          }\n\n          e(i, n, _t32);\n        }\n      }\n    }\n  }, {\n    key: \"getCommonAttributesAtRange\",\n    value: function getCommonAttributesAtRange(t) {\n      t = wt(t);\n\n      var _t33 = t,\n          _t34 = _slicedToArray(_t33, 1),\n          e = _t34[0];\n\n      if (Lt(t)) return this.getCommonAttributesAtPosition(e);\n      {\n        var _e32 = [],\n            _i27 = [];\n        return this.eachBlockAtRange(t, function (t, n) {\n          if (n[0] !== n[1]) return _e32.push(t.text.getCommonAttributesAtRange(n)), _i27.push(sn(t));\n        }), Ht.fromCommonAttributesOfObjects(_e32).merge(Ht.fromCommonAttributesOfObjects(_i27)).toObject();\n      }\n    }\n  }, {\n    key: \"getCommonAttributesAtPosition\",\n    value: function getCommonAttributesAtPosition(t) {\n      var e, i;\n\n      var _this$locationFromPos9 = this.locationFromPosition(t),\n          n = _this$locationFromPos9.index,\n          r = _this$locationFromPos9.offset,\n          o = this.getBlockAtIndex(n);\n\n      if (!o) return {};\n      var s = sn(o),\n          a = o.text.getAttributesAtPosition(r),\n          l = o.text.getAttributesAtPosition(r - 1),\n          c = Object.keys(W).filter(function (t) {\n        return W[t].inheritable;\n      });\n\n      for (e in l) {\n        i = l[e], (i === a[e] || c.includes(e)) && (s[e] = i);\n      }\n\n      return s;\n    }\n  }, {\n    key: \"getRangeOfCommonAttributeAtPosition\",\n    value: function getRangeOfCommonAttributeAtPosition(t, e) {\n      var _this$locationFromPos10 = this.locationFromPosition(e),\n          i = _this$locationFromPos10.index,\n          n = _this$locationFromPos10.offset,\n          r = this.getTextAtIndex(i),\n          _Array$from5 = Array.from(r.getExpandedRangeForAttributeAtOffset(t, n)),\n          _Array$from6 = _slicedToArray(_Array$from5, 2),\n          o = _Array$from6[0],\n          s = _Array$from6[1],\n          a = this.positionFromLocation({\n        index: i,\n        offset: o\n      }),\n          l = this.positionFromLocation({\n        index: i,\n        offset: s\n      });\n\n      return wt([a, l]);\n    }\n  }, {\n    key: \"getBaseBlockAttributes\",\n    value: function getBaseBlockAttributes() {\n      var _this37 = this;\n\n      var t = this.getBlockAtIndex(0).getAttributes();\n\n      var _loop2 = function _loop2(_e33) {\n        var i = _this37.getBlockAtIndex(_e33).getAttributes(),\n            n = Math.min(t.length, i.length);\n\n        t = function () {\n          var e = [];\n\n          for (var _r10 = 0; _r10 < n && i[_r10] === t[_r10]; _r10++) {\n            e.push(i[_r10]);\n          }\n\n          return e;\n        }();\n      };\n\n      for (var _e33 = 1; _e33 < this.getBlockCount(); _e33++) {\n        _loop2(_e33);\n      }\n\n      return t;\n    }\n  }, {\n    key: \"getAttachmentById\",\n    value: function getAttachmentById(t) {\n      var _iterator4 = _createForOfIteratorHelper(this.getAttachments()),\n          _step4;\n\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var _e34 = _step4.value;\n          if (_e34.id === t) return _e34;\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n    }\n  }, {\n    key: \"getAttachmentPieces\",\n    value: function getAttachmentPieces() {\n      var t = [];\n      return this.blockList.eachObject(function (e) {\n        var i = e.text;\n        return t = t.concat(i.getAttachmentPieces());\n      }), t;\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments() {\n      return this.getAttachmentPieces().map(function (t) {\n        return t.attachment;\n      });\n    }\n  }, {\n    key: \"getRangeOfAttachment\",\n    value: function getRangeOfAttachment(t) {\n      var e = 0;\n      var i = this.blockList.toArray();\n\n      for (var _n19 = 0; _n19 < i.length; _n19++) {\n        var _r11 = i[_n19].text,\n            _o5 = _r11.getRangeOfAttachment(t);\n\n        if (_o5) return wt([e + _o5[0], e + _o5[1]]);\n        e += _r11.getLength();\n      }\n    }\n  }, {\n    key: \"getLocationRangeOfAttachment\",\n    value: function getLocationRangeOfAttachment(t) {\n      var e = this.getRangeOfAttachment(t);\n      return this.locationRangeFromRange(e);\n    }\n  }, {\n    key: \"getAttachmentPieceForAttachment\",\n    value: function getAttachmentPieceForAttachment(t) {\n      var _iterator5 = _createForOfIteratorHelper(this.getAttachmentPieces()),\n          _step5;\n\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var _e35 = _step5.value;\n          if (_e35.attachment === t) return _e35;\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n    }\n  }, {\n    key: \"findRangesForBlockAttribute\",\n    value: function findRangesForBlockAttribute(t) {\n      var e = 0;\n      var i = [];\n      return this.getBlocks().forEach(function (n) {\n        var r = n.getLength();\n        n.hasAttribute(t) && i.push([e, e + r]), e += r;\n      }), i;\n    }\n  }, {\n    key: \"findRangesForTextAttribute\",\n    value: function findRangesForTextAttribute(t) {\n      var _ref14 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          e = _ref14.withValue,\n          i = 0,\n          n = [];\n\n      var r = [];\n      return this.getPieces().forEach(function (o) {\n        var s = o.getLength();\n        (function (i) {\n          return e ? i.getAttribute(t) === e : i.hasAttribute(t);\n        })(o) && (n[1] === i ? n[1] = i + s : r.push(n = [i, i + s])), i += s;\n      }), r;\n    }\n  }, {\n    key: \"locationFromPosition\",\n    value: function locationFromPosition(t) {\n      var e = this.blockList.findIndexAndOffsetAtPosition(Math.max(0, t));\n      if (null != e.index) return e;\n      {\n        var _t35 = this.getBlocks();\n\n        return {\n          index: _t35.length - 1,\n          offset: _t35[_t35.length - 1].getLength()\n        };\n      }\n    }\n  }, {\n    key: \"positionFromLocation\",\n    value: function positionFromLocation(t) {\n      return this.blockList.findPositionAtIndexAndOffset(t.index, t.offset);\n    }\n  }, {\n    key: \"locationRangeFromPosition\",\n    value: function locationRangeFromPosition(t) {\n      return wt(this.locationFromPosition(t));\n    }\n  }, {\n    key: \"locationRangeFromRange\",\n    value: function locationRangeFromRange(t) {\n      if (!(t = wt(t))) return;\n\n      var _Array$from7 = Array.from(t),\n          _Array$from8 = _slicedToArray(_Array$from7, 2),\n          e = _Array$from8[0],\n          i = _Array$from8[1],\n          n = this.locationFromPosition(e),\n          r = this.locationFromPosition(i);\n\n      return wt([n, r]);\n    }\n  }, {\n    key: \"rangeFromLocationRange\",\n    value: function rangeFromLocationRange(t) {\n      var e;\n      t = wt(t);\n      var i = this.positionFromLocation(t[0]);\n      return Lt(t) || (e = this.positionFromLocation(t[1])), wt([i, e]);\n    }\n  }, {\n    key: \"isEqualTo\",\n    value: function isEqualTo(t) {\n      return this.blockList.isEqualTo(null == t ? void 0 : t.blockList);\n    }\n  }, {\n    key: \"getTexts\",\n    value: function getTexts() {\n      return this.getBlocks().map(function (t) {\n        return t.text;\n      });\n    }\n  }, {\n    key: \"getPieces\",\n    value: function getPieces() {\n      var t = [];\n      return Array.from(this.getTexts()).forEach(function (e) {\n        t.push.apply(t, _toConsumableArray(Array.from(e.getPieces() || [])));\n      }), t;\n    }\n  }, {\n    key: \"getObjects\",\n    value: function getObjects() {\n      return this.getBlocks().concat(this.getTexts()).concat(this.getPieces());\n    }\n  }, {\n    key: \"toSerializableDocument\",\n    value: function toSerializableDocument() {\n      var t = [];\n      return this.blockList.eachObject(function (e) {\n        return t.push(e.copyWithText(e.text.toSerializableText()));\n      }), new this.constructor(t);\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return this.blockList.toString();\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this.blockList.toJSON();\n    }\n  }, {\n    key: \"toConsole\",\n    value: function toConsole() {\n      return JSON.stringify(this.blockList.toArray().map(function (t) {\n        return JSON.parse(t.text.toConsole());\n      }));\n    }\n  }], [{\n    key: \"fromJSON\",\n    value: function fromJSON(t) {\n      return new this(Array.from(t).map(function (t) {\n        return Gi.fromJSON(t);\n      }));\n    }\n  }, {\n    key: \"fromString\",\n    value: function fromString(t, e) {\n      var i = Ki.textForStringWithAttributes(t, e);\n      return new this([new Gi(i)]);\n    }\n  }]);\n\n  return on;\n}(rt);\n\nvar sn = function sn(t) {\n  var e = {},\n      i = t.getLastAttribute();\n  return i && (e[i] = !0), e;\n},\n    an = function an(t) {\n  var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n  return {\n    string: t = Wt(t),\n    attributes: e,\n    type: \"string\"\n  };\n},\n    ln = function ln(t, e) {\n  try {\n    return JSON.parse(t.getAttribute(\"data-trix-\".concat(e)));\n  } catch (t) {\n    return {};\n  }\n};\n\nvar cn = /*#__PURE__*/function (_q8) {\n  _inherits(cn, _q8);\n\n  var _super25 = _createSuper(cn);\n\n  function cn(t) {\n    var _this38;\n\n    _classCallCheck(this, cn);\n\n    var _ref15 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n        e = _ref15.referenceElement;\n\n    _this38 = _super25.apply(this, arguments), _this38.html = t, _this38.referenceElement = e, _this38.blocks = [], _this38.blockElements = [], _this38.processedElements = [];\n    return _this38;\n  }\n\n  _createClass(cn, [{\n    key: \"getDocument\",\n    value: function getDocument() {\n      return on.fromJSON(this.blocks);\n    }\n  }, {\n    key: \"parse\",\n    value: function parse() {\n      try {\n        this.createHiddenContainer(), ui.setHTML(this.containerElement, this.html);\n\n        var _t36 = R(this.containerElement, {\n          usingFilter: gn\n        });\n\n        for (; _t36.nextNode();) {\n          this.processNode(_t36.currentNode);\n        }\n\n        return this.translateBlockElementMarginsToNewlines();\n      } finally {\n        this.removeHiddenContainer();\n      }\n    }\n  }, {\n    key: \"createHiddenContainer\",\n    value: function createHiddenContainer() {\n      return this.referenceElement ? (this.containerElement = this.referenceElement.cloneNode(!1), this.containerElement.removeAttribute(\"id\"), this.containerElement.setAttribute(\"data-trix-internal\", \"\"), this.containerElement.style.display = \"none\", this.referenceElement.parentNode.insertBefore(this.containerElement, this.referenceElement.nextSibling)) : (this.containerElement = T({\n        tagName: \"div\",\n        style: {\n          display: \"none\"\n        }\n      }), document.body.appendChild(this.containerElement));\n    }\n  }, {\n    key: \"removeHiddenContainer\",\n    value: function removeHiddenContainer() {\n      return S(this.containerElement);\n    }\n  }, {\n    key: \"processNode\",\n    value: function processNode(t) {\n      switch (t.nodeType) {\n        case Node.TEXT_NODE:\n          if (!this.isInsignificantTextNode(t)) return this.appendBlockForTextNode(t), this.processTextNode(t);\n          break;\n\n        case Node.ELEMENT_NODE:\n          return this.appendBlockForElement(t), this.processElement(t);\n      }\n    }\n  }, {\n    key: \"appendBlockForTextNode\",\n    value: function appendBlockForTextNode(t) {\n      var e = t.parentNode;\n      if (e === this.currentBlockElement && this.isBlockElement(t.previousSibling)) return this.appendStringWithAttributes(\"\\n\");\n\n      if (e === this.containerElement || this.isBlockElement(e)) {\n        var i;\n\n        var _t37 = this.getBlockAttributes(e),\n            _n20 = this.getBlockHTMLAttributes(e);\n\n        ot(_t37, null === (i = this.currentBlock) || void 0 === i ? void 0 : i.attributes) || (this.currentBlock = this.appendBlockForAttributesWithElement(_t37, e, _n20), this.currentBlockElement = e);\n      }\n    }\n  }, {\n    key: \"appendBlockForElement\",\n    value: function appendBlockForElement(t) {\n      var e = this.isBlockElement(t),\n          i = C(this.currentBlockElement, t);\n\n      if (e && !this.isBlockElement(t.firstChild)) {\n        if (!this.isInsignificantTextNode(t.firstChild) || !this.isBlockElement(t.firstElementChild)) {\n          var _e36 = this.getBlockAttributes(t),\n              _n21 = this.getBlockHTMLAttributes(t);\n\n          if (t.firstChild) {\n            if (i && ot(_e36, this.currentBlock.attributes)) return this.appendStringWithAttributes(\"\\n\");\n            this.currentBlock = this.appendBlockForAttributesWithElement(_e36, t, _n21), this.currentBlockElement = t;\n          }\n        }\n      } else if (this.currentBlockElement && !i && !e) {\n        var _e37 = this.findParentBlockElement(t);\n\n        if (_e37) return this.appendBlockForElement(_e37);\n        this.currentBlock = this.appendEmptyBlock(), this.currentBlockElement = null;\n      }\n    }\n  }, {\n    key: \"findParentBlockElement\",\n    value: function findParentBlockElement(t) {\n      var e = t.parentElement;\n\n      for (; e && e !== this.containerElement;) {\n        if (this.isBlockElement(e) && this.blockElements.includes(e)) return e;\n        e = e.parentElement;\n      }\n\n      return null;\n    }\n  }, {\n    key: \"processTextNode\",\n    value: function processTextNode(t) {\n      var e = t.data;\n      var i;\n      un(t.parentNode) || (e = Vt(e), fn(null === (i = t.previousSibling) || void 0 === i ? void 0 : i.textContent) && (e = mn(e)));\n      return this.appendStringWithAttributes(e, this.getTextAttributes(t.parentNode));\n    }\n  }, {\n    key: \"processElement\",\n    value: function processElement(t) {\n      var e;\n\n      if (P(t)) {\n        if (e = ln(t, \"attachment\"), Object.keys(e).length) {\n          var _i28 = this.getTextAttributes(t);\n\n          this.appendAttachmentWithAttributes(e, _i28), t.innerHTML = \"\";\n        }\n\n        return this.processedElements.push(t);\n      }\n\n      switch (k(t)) {\n        case \"br\":\n          return this.isExtraBR(t) || this.isBlockElement(t.nextSibling) || this.appendStringWithAttributes(\"\\n\", this.getTextAttributes(t)), this.processedElements.push(t);\n\n        case \"img\":\n          e = {\n            url: t.getAttribute(\"src\"),\n            contentType: \"image\"\n          };\n\n          var _i29 = function (t) {\n            var e = t.getAttribute(\"width\"),\n                i = t.getAttribute(\"height\"),\n                n = {};\n            return e && (n.width = parseInt(e, 10)), i && (n.height = parseInt(i, 10)), n;\n          }(t);\n\n          for (var _t38 in _i29) {\n            var _n22 = _i29[_t38];\n            e[_t38] = _n22;\n          }\n\n          return this.appendAttachmentWithAttributes(e, this.getTextAttributes(t)), this.processedElements.push(t);\n\n        case \"tr\":\n          if (this.needsTableSeparator(t)) return this.appendStringWithAttributes(j.tableRowSeparator);\n          break;\n\n        case \"td\":\n          if (this.needsTableSeparator(t)) return this.appendStringWithAttributes(j.tableCellSeparator);\n      }\n    }\n  }, {\n    key: \"appendBlockForAttributesWithElement\",\n    value: function appendBlockForAttributesWithElement(t, e) {\n      var i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n      this.blockElements.push(e);\n\n      var n = function () {\n        return {\n          text: [],\n          attributes: arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},\n          htmlAttributes: arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}\n        };\n      }(t, i);\n\n      return this.blocks.push(n), n;\n    }\n  }, {\n    key: \"appendEmptyBlock\",\n    value: function appendEmptyBlock() {\n      return this.appendBlockForAttributesWithElement([], null);\n    }\n  }, {\n    key: \"appendStringWithAttributes\",\n    value: function appendStringWithAttributes(t, e) {\n      return this.appendPiece(an(t, e));\n    }\n  }, {\n    key: \"appendAttachmentWithAttributes\",\n    value: function appendAttachmentWithAttributes(t, e) {\n      return this.appendPiece(function (t) {\n        return {\n          attachment: t,\n          attributes: arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          type: \"attachment\"\n        };\n      }(t, e));\n    }\n  }, {\n    key: \"appendPiece\",\n    value: function appendPiece(t) {\n      return 0 === this.blocks.length && this.appendEmptyBlock(), this.blocks[this.blocks.length - 1].text.push(t);\n    }\n  }, {\n    key: \"appendStringToTextAtIndex\",\n    value: function appendStringToTextAtIndex(t, e) {\n      var i = this.blocks[e].text,\n          n = i[i.length - 1];\n      if (\"string\" !== (null == n ? void 0 : n.type)) return i.push(an(t));\n      n.string += t;\n    }\n  }, {\n    key: \"prependStringToTextAtIndex\",\n    value: function prependStringToTextAtIndex(t, e) {\n      var i = this.blocks[e].text,\n          n = i[0];\n      if (\"string\" !== (null == n ? void 0 : n.type)) return i.unshift(an(t));\n      n.string = t + n.string;\n    }\n  }, {\n    key: \"getTextAttributes\",\n    value: function getTextAttributes(t) {\n      var e;\n      var i = {};\n\n      for (var _n23 in W) {\n        var _r12 = W[_n23];\n        if (_r12.tagName && y(t, {\n          matchingSelector: _r12.tagName,\n          untilNode: this.containerElement\n        })) i[_n23] = !0;else if (_r12.parser) {\n          if (e = _r12.parser(t), e) {\n            var _o6 = !1;\n\n            var _iterator6 = _createForOfIteratorHelper(this.findBlockElementAncestors(t)),\n                _step6;\n\n            try {\n              for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n                var _i30 = _step6.value;\n\n                if (_r12.parser(_i30) === e) {\n                  _o6 = !0;\n                  break;\n                }\n              }\n            } catch (err) {\n              _iterator6.e(err);\n            } finally {\n              _iterator6.f();\n            }\n\n            _o6 || (i[_n23] = e);\n          }\n        } else _r12.styleProperty && (e = t.style[_r12.styleProperty], e && (i[_n23] = e));\n      }\n\n      if (P(t)) {\n        var _n24 = ln(t, \"attributes\");\n\n        for (var _t39 in _n24) {\n          e = _n24[_t39], i[_t39] = e;\n        }\n      }\n\n      return i;\n    }\n  }, {\n    key: \"getBlockAttributes\",\n    value: function getBlockAttributes(t) {\n      var e = [];\n\n      for (; t && t !== this.containerElement;) {\n        for (var _r13 in n) {\n          var _o7 = n[_r13];\n          var i;\n          if (!1 !== _o7.parse) if (k(t) === _o7.tagName) (null !== (i = _o7.test) && void 0 !== i && i.call(_o7, t) || !_o7.test) && (e.push(_r13), _o7.listAttribute && e.push(_o7.listAttribute));\n        }\n\n        t = t.parentNode;\n      }\n\n      return e.reverse();\n    }\n  }, {\n    key: \"getBlockHTMLAttributes\",\n    value: function getBlockHTMLAttributes(t) {\n      var e = {},\n          i = Object.values(n).find(function (e) {\n        return e.tagName === k(t);\n      });\n      return ((null == i ? void 0 : i.htmlAttributes) || []).forEach(function (i) {\n        t.hasAttribute(i) && (e[i] = t.getAttribute(i));\n      }), e;\n    }\n  }, {\n    key: \"findBlockElementAncestors\",\n    value: function findBlockElementAncestors(t) {\n      var e = [];\n\n      for (; t && t !== this.containerElement;) {\n        var _i31 = k(t);\n\n        L().includes(_i31) && e.push(t), t = t.parentNode;\n      }\n\n      return e;\n    }\n  }, {\n    key: \"isBlockElement\",\n    value: function isBlockElement(t) {\n      if ((null == t ? void 0 : t.nodeType) === Node.ELEMENT_NODE && !P(t) && !y(t, {\n        matchingSelector: \"td\",\n        untilNode: this.containerElement\n      })) return L().includes(k(t)) || \"block\" === window.getComputedStyle(t).display;\n    }\n  }, {\n    key: \"isInsignificantTextNode\",\n    value: function isInsignificantTextNode(t) {\n      if ((null == t ? void 0 : t.nodeType) !== Node.TEXT_NODE) return;\n      if (!pn(t.data)) return;\n      var e = t.parentNode,\n          i = t.previousSibling,\n          n = t.nextSibling;\n      return hn(e.previousSibling) && !this.isBlockElement(e.previousSibling) || un(e) ? void 0 : !i || this.isBlockElement(i) || !n || this.isBlockElement(n);\n    }\n  }, {\n    key: \"isExtraBR\",\n    value: function isExtraBR(t) {\n      return \"br\" === k(t) && this.isBlockElement(t.parentNode) && t.parentNode.lastChild === t;\n    }\n  }, {\n    key: \"needsTableSeparator\",\n    value: function needsTableSeparator(t) {\n      if (j.removeBlankTableCells) {\n        var e;\n\n        var _i32 = null === (e = t.previousSibling) || void 0 === e ? void 0 : e.textContent;\n\n        return _i32 && /\\S/.test(_i32);\n      }\n\n      return t.previousSibling;\n    }\n  }, {\n    key: \"translateBlockElementMarginsToNewlines\",\n    value: function translateBlockElementMarginsToNewlines() {\n      var t = this.getMarginOfDefaultBlockElement();\n\n      for (var _e38 = 0; _e38 < this.blocks.length; _e38++) {\n        var _i33 = this.getMarginOfBlockElementAtIndex(_e38);\n\n        _i33 && (_i33.top > 2 * t.top && this.prependStringToTextAtIndex(\"\\n\", _e38), _i33.bottom > 2 * t.bottom && this.appendStringToTextAtIndex(\"\\n\", _e38));\n      }\n    }\n  }, {\n    key: \"getMarginOfBlockElementAtIndex\",\n    value: function getMarginOfBlockElementAtIndex(t) {\n      var e = this.blockElements[t];\n      if (e && e.textContent && !L().includes(k(e)) && !this.processedElements.includes(e)) return dn(e);\n    }\n  }, {\n    key: \"getMarginOfDefaultBlockElement\",\n    value: function getMarginOfDefaultBlockElement() {\n      var t = T(n.default.tagName);\n      return this.containerElement.appendChild(t), dn(t);\n    }\n  }], [{\n    key: \"parse\",\n    value: function parse(t, e) {\n      var i = new this(t, e);\n      return i.parse(), i;\n    }\n  }]);\n\n  return cn;\n}(q);\n\nvar un = function un(t) {\n  var _window$getComputedSt = window.getComputedStyle(t),\n      e = _window$getComputedSt.whiteSpace;\n\n  return [\"pre\", \"pre-wrap\", \"pre-line\"].includes(e);\n},\n    hn = function hn(t) {\n  return t && !fn(t.textContent);\n},\n    dn = function dn(t) {\n  var e = window.getComputedStyle(t);\n  if (\"block\" === e.display) return {\n    top: parseInt(e.marginTop),\n    bottom: parseInt(e.marginBottom)\n  };\n},\n    gn = function gn(t) {\n  return \"style\" === k(t) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;\n},\n    mn = function mn(t) {\n  return t.replace(new RegExp(\"^\".concat(Ut.source, \"+\")), \"\");\n},\n    pn = function pn(t) {\n  return new RegExp(\"^\".concat(Ut.source, \"*$\")).test(t);\n},\n    fn = function fn(t) {\n  return /\\s$/.test(t);\n},\n    bn = [\"contenteditable\", \"data-trix-id\", \"data-trix-store-key\", \"data-trix-mutable\", \"data-trix-placeholder\", \"tabindex\"],\n    vn = \"data-trix-serialized-attributes\",\n    An = \"[\".concat(vn, \"]\"),\n    yn = new RegExp(\"\\x3c!--block--\\x3e\", \"g\"),\n    xn = {\n  \"application/json\": function applicationJson(t) {\n    var e;\n    if (t instanceof on) e = t;else {\n      if (!(t instanceof HTMLElement)) throw new Error(\"unserializable object\");\n      e = cn.parse(t.innerHTML).getDocument();\n    }\n    return e.toSerializableDocument().toJSONString();\n  },\n  \"text/html\": function textHtml(t) {\n    var e;\n    if (t instanceof on) e = Ci.render(t);else {\n      if (!(t instanceof HTMLElement)) throw new Error(\"unserializable object\");\n      e = t.cloneNode(!0);\n    }\n    return Array.from(e.querySelectorAll(\"[data-trix-serialize=false]\")).forEach(function (t) {\n      S(t);\n    }), bn.forEach(function (t) {\n      Array.from(e.querySelectorAll(\"[\".concat(t, \"]\"))).forEach(function (e) {\n        e.removeAttribute(t);\n      });\n    }), Array.from(e.querySelectorAll(An)).forEach(function (t) {\n      try {\n        var _e39 = JSON.parse(t.getAttribute(vn));\n\n        t.removeAttribute(vn);\n\n        for (var _i34 in _e39) {\n          var _n25 = _e39[_i34];\n          t.setAttribute(_i34, _n25);\n        }\n      } catch (t) {}\n    }), e.innerHTML.replace(yn, \"\");\n  }\n};\n\nvar Cn = Object.freeze({\n  __proto__: null\n});\n\nvar En = /*#__PURE__*/function (_q9) {\n  _inherits(En, _q9);\n\n  var _super26 = _createSuper(En);\n\n  function En(t, e) {\n    var _this39;\n\n    _classCallCheck(this, En);\n\n    _this39 = _super26.apply(this, arguments), _this39.attachmentManager = t, _this39.attachment = e, _this39.id = _this39.attachment.id, _this39.file = _this39.attachment.file;\n    return _this39;\n  }\n\n  _createClass(En, [{\n    key: \"remove\",\n    value: function remove() {\n      return this.attachmentManager.requestRemovalOfAttachment(this.attachment);\n    }\n  }]);\n\n  return En;\n}(q);\n\nEn.proxyMethod(\"attachment.getAttribute\"), En.proxyMethod(\"attachment.hasAttribute\"), En.proxyMethod(\"attachment.setAttribute\"), En.proxyMethod(\"attachment.getAttributes\"), En.proxyMethod(\"attachment.setAttributes\"), En.proxyMethod(\"attachment.isPending\"), En.proxyMethod(\"attachment.isPreviewable\"), En.proxyMethod(\"attachment.getURL\"), En.proxyMethod(\"attachment.getHref\"), En.proxyMethod(\"attachment.getFilename\"), En.proxyMethod(\"attachment.getFilesize\"), En.proxyMethod(\"attachment.getFormattedFilesize\"), En.proxyMethod(\"attachment.getExtension\"), En.proxyMethod(\"attachment.getContentType\"), En.proxyMethod(\"attachment.getFile\"), En.proxyMethod(\"attachment.setFile\"), En.proxyMethod(\"attachment.releaseFile\"), En.proxyMethod(\"attachment.getUploadProgress\"), En.proxyMethod(\"attachment.setUploadProgress\");\n\nvar Sn = /*#__PURE__*/function (_q10) {\n  _inherits(Sn, _q10);\n\n  var _super27 = _createSuper(Sn);\n\n  function Sn() {\n    var _this40;\n\n    _classCallCheck(this, Sn);\n\n    var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n    _this40 = _super27.apply(this, arguments), _this40.managedAttachments = {}, Array.from(t).forEach(function (t) {\n      _this40.manageAttachment(t);\n    });\n    return _this40;\n  }\n\n  _createClass(Sn, [{\n    key: \"getAttachments\",\n    value: function getAttachments() {\n      var t = [];\n\n      for (var _e40 in this.managedAttachments) {\n        var _i35 = this.managedAttachments[_e40];\n        t.push(_i35);\n      }\n\n      return t;\n    }\n  }, {\n    key: \"manageAttachment\",\n    value: function manageAttachment(t) {\n      return this.managedAttachments[t.id] || (this.managedAttachments[t.id] = new En(this, t)), this.managedAttachments[t.id];\n    }\n  }, {\n    key: \"attachmentIsManaged\",\n    value: function attachmentIsManaged(t) {\n      return t.id in this.managedAttachments;\n    }\n  }, {\n    key: \"requestRemovalOfAttachment\",\n    value: function requestRemovalOfAttachment(t) {\n      var e, i;\n      if (this.attachmentIsManaged(t)) return null === (e = this.delegate) || void 0 === e || null === (i = e.attachmentManagerDidRequestRemovalOfAttachment) || void 0 === i ? void 0 : i.call(e, t);\n    }\n  }, {\n    key: \"unmanageAttachment\",\n    value: function unmanageAttachment(t) {\n      var e = this.managedAttachments[t.id];\n      return delete this.managedAttachments[t.id], e;\n    }\n  }]);\n\n  return Sn;\n}(q);\n\nvar Rn = /*#__PURE__*/function () {\n  function Rn(t) {\n    _classCallCheck(this, Rn);\n\n    this.composition = t, this.document = this.composition.document;\n    var e = this.composition.getSelectedRange();\n    this.startPosition = e[0], this.endPosition = e[1], this.startLocation = this.document.locationFromPosition(this.startPosition), this.endLocation = this.document.locationFromPosition(this.endPosition), this.block = this.document.getBlockAtIndex(this.endLocation.index), this.breaksOnReturn = this.block.breaksOnReturn(), this.previousCharacter = this.block.text.getStringAtPosition(this.endLocation.offset - 1), this.nextCharacter = this.block.text.getStringAtPosition(this.endLocation.offset);\n  }\n\n  _createClass(Rn, [{\n    key: \"shouldInsertBlockBreak\",\n    value: function shouldInsertBlockBreak() {\n      return this.block.hasAttributes() && this.block.isListItem() && !this.block.isEmpty() ? 0 !== this.startLocation.offset : this.breaksOnReturn && \"\\n\" !== this.nextCharacter;\n    }\n  }, {\n    key: \"shouldBreakFormattedBlock\",\n    value: function shouldBreakFormattedBlock() {\n      return this.block.hasAttributes() && !this.block.isListItem() && (this.breaksOnReturn && \"\\n\" === this.nextCharacter || \"\\n\" === this.previousCharacter);\n    }\n  }, {\n    key: \"shouldDecreaseListLevel\",\n    value: function shouldDecreaseListLevel() {\n      return this.block.hasAttributes() && this.block.isListItem() && this.block.isEmpty();\n    }\n  }, {\n    key: \"shouldPrependListItem\",\n    value: function shouldPrependListItem() {\n      return this.block.isListItem() && 0 === this.startLocation.offset && !this.block.isEmpty();\n    }\n  }, {\n    key: \"shouldRemoveLastBlockAttribute\",\n    value: function shouldRemoveLastBlockAttribute() {\n      return this.block.hasAttributes() && !this.block.isListItem() && this.block.isEmpty();\n    }\n  }]);\n\n  return Rn;\n}();\n\nvar kn = /*#__PURE__*/function (_q11) {\n  _inherits(kn, _q11);\n\n  var _super28 = _createSuper(kn);\n\n  function kn() {\n    var _this41;\n\n    _classCallCheck(this, kn);\n\n    _this41 = _super28.apply(this, arguments), _this41.document = new on(), _this41.attachments = [], _this41.currentAttributes = {}, _this41.revision = 0;\n    return _this41;\n  }\n\n  _createClass(kn, [{\n    key: \"setDocument\",\n    value: function setDocument(t) {\n      var e, i;\n      if (!t.isEqualTo(this.document)) return this.document = t, this.refreshAttachments(), this.revision++, null === (e = this.delegate) || void 0 === e || null === (i = e.compositionDidChangeDocument) || void 0 === i ? void 0 : i.call(e, t);\n    }\n  }, {\n    key: \"getSnapshot\",\n    value: function getSnapshot() {\n      return {\n        document: this.document,\n        selectedRange: this.getSelectedRange()\n      };\n    }\n  }, {\n    key: \"loadSnapshot\",\n    value: function loadSnapshot(t) {\n      var e, i, n, r;\n      var o = t.document,\n          s = t.selectedRange;\n      return null === (e = this.delegate) || void 0 === e || null === (i = e.compositionWillLoadSnapshot) || void 0 === i || i.call(e), this.setDocument(null != o ? o : new on()), this.setSelection(null != s ? s : [0, 0]), null === (n = this.delegate) || void 0 === n || null === (r = n.compositionDidLoadSnapshot) || void 0 === r ? void 0 : r.call(n);\n    }\n  }, {\n    key: \"insertText\",\n    value: function insertText(t) {\n      var _ref16 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {\n        updatePosition: !0\n      },\n          e = _ref16.updatePosition;\n\n      var i = this.getSelectedRange();\n      this.setDocument(this.document.insertTextAtRange(t, i));\n      var n = i[0],\n          r = n + t.getLength();\n      return e && this.setSelection(r), this.notifyDelegateOfInsertionAtRange([n, r]);\n    }\n  }, {\n    key: \"insertBlock\",\n    value: function insertBlock() {\n      var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : new Gi();\n      var e = new on([t]);\n      return this.insertDocument(e);\n    }\n  }, {\n    key: \"insertDocument\",\n    value: function insertDocument() {\n      var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : new on();\n      var e = this.getSelectedRange();\n      this.setDocument(this.document.insertDocumentAtRange(t, e));\n      var i = e[0],\n          n = i + t.getLength();\n      return this.setSelection(n), this.notifyDelegateOfInsertionAtRange([i, n]);\n    }\n  }, {\n    key: \"insertString\",\n    value: function insertString(t, e) {\n      var i = this.getCurrentTextAttributes(),\n          n = Ki.textForStringWithAttributes(t, i);\n      return this.insertText(n, e);\n    }\n  }, {\n    key: \"insertBlockBreak\",\n    value: function insertBlockBreak() {\n      var t = this.getSelectedRange();\n      this.setDocument(this.document.insertBlockBreakAtRange(t));\n      var e = t[0],\n          i = e + 1;\n      return this.setSelection(i), this.notifyDelegateOfInsertionAtRange([e, i]);\n    }\n  }, {\n    key: \"insertLineBreak\",\n    value: function insertLineBreak() {\n      var t = new Rn(this);\n      if (t.shouldDecreaseListLevel()) return this.decreaseListLevel(), this.setSelection(t.startPosition);\n\n      if (t.shouldPrependListItem()) {\n        var _e41 = new on([t.block.copyWithoutText()]);\n\n        return this.insertDocument(_e41);\n      }\n\n      return t.shouldInsertBlockBreak() ? this.insertBlockBreak() : t.shouldRemoveLastBlockAttribute() ? this.removeLastBlockAttribute() : t.shouldBreakFormattedBlock() ? this.breakFormattedBlock(t) : this.insertString(\"\\n\");\n    }\n  }, {\n    key: \"insertHTML\",\n    value: function insertHTML(t) {\n      var e = cn.parse(t).getDocument(),\n          i = this.getSelectedRange();\n      this.setDocument(this.document.mergeDocumentAtRange(e, i));\n      var n = i[0],\n          r = n + e.getLength() - 1;\n      return this.setSelection(r), this.notifyDelegateOfInsertionAtRange([n, r]);\n    }\n  }, {\n    key: \"replaceHTML\",\n    value: function replaceHTML(t) {\n      var e = cn.parse(t).getDocument().copyUsingObjectsFromDocument(this.document),\n          i = this.getLocationRange({\n        strict: !1\n      }),\n          n = this.document.rangeFromLocationRange(i);\n      return this.setDocument(e), this.setSelection(n);\n    }\n  }, {\n    key: \"insertFile\",\n    value: function insertFile(t) {\n      return this.insertFiles([t]);\n    }\n  }, {\n    key: \"insertFiles\",\n    value: function insertFiles(t) {\n      var _this42 = this;\n\n      var e = [];\n      return Array.from(t).forEach(function (t) {\n        var i;\n\n        if (null !== (i = _this42.delegate) && void 0 !== i && i.compositionShouldAcceptFile(t)) {\n          var _i36 = Wi.attachmentForFile(t);\n\n          e.push(_i36);\n        }\n      }), this.insertAttachments(e);\n    }\n  }, {\n    key: \"insertAttachment\",\n    value: function insertAttachment(t) {\n      return this.insertAttachments([t]);\n    }\n  }, {\n    key: \"insertAttachments\",\n    value: function insertAttachments(t) {\n      var _this43 = this;\n\n      var e = new Ki();\n      return Array.from(t).forEach(function (t) {\n        var n;\n\n        var r = t.getType(),\n            o = null === (n = i[r]) || void 0 === n ? void 0 : n.presentation,\n            s = _this43.getCurrentTextAttributes();\n\n        o && (s.presentation = o);\n        var a = Ki.textForAttachmentWithAttributes(t, s);\n        e = e.appendText(a);\n      }), this.insertText(e);\n    }\n  }, {\n    key: \"shouldManageDeletingInDirection\",\n    value: function shouldManageDeletingInDirection(t) {\n      var e = this.getLocationRange();\n\n      if (Lt(e)) {\n        if (\"backward\" === t && 0 === e[0].offset) return !0;\n        if (this.shouldManageMovingCursorInDirection(t)) return !0;\n      } else if (e[0].index !== e[1].index) return !0;\n\n      return !1;\n    }\n  }, {\n    key: \"deleteInDirection\",\n    value: function deleteInDirection(t) {\n      var e,\n          i,\n          n,\n          _ref17 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          r = _ref17.length;\n\n      var o = this.getLocationRange();\n      var s = this.getSelectedRange();\n      var a = Lt(s);\n\n      if (a ? i = \"backward\" === t && 0 === o[0].offset : n = o[0].index !== o[1].index, i && this.canDecreaseBlockAttributeLevel()) {\n        var _t40 = this.getBlock();\n\n        if (_t40.isListItem() ? this.decreaseListLevel() : this.decreaseBlockAttributeLevel(), this.setSelection(s[0]), _t40.isEmpty()) return !1;\n      }\n\n      return a && (s = this.getExpandedRangeInDirection(t, {\n        length: r\n      }), \"backward\" === t && (e = this.getAttachmentAtRange(s))), e ? (this.editAttachment(e), !1) : (this.setDocument(this.document.removeTextAtRange(s)), this.setSelection(s[0]), !i && !n && void 0);\n    }\n  }, {\n    key: \"moveTextFromRange\",\n    value: function moveTextFromRange(t) {\n      var _Array$from9 = Array.from(this.getSelectedRange()),\n          _Array$from10 = _slicedToArray(_Array$from9, 1),\n          e = _Array$from10[0];\n\n      return this.setDocument(this.document.moveTextFromRangeToPosition(t, e)), this.setSelection(e);\n    }\n  }, {\n    key: \"removeAttachment\",\n    value: function removeAttachment(t) {\n      var e = this.document.getRangeOfAttachment(t);\n      if (e) return this.stopEditingAttachment(), this.setDocument(this.document.removeTextAtRange(e)), this.setSelection(e[0]);\n    }\n  }, {\n    key: \"removeLastBlockAttribute\",\n    value: function removeLastBlockAttribute() {\n      var _Array$from11 = Array.from(this.getSelectedRange()),\n          _Array$from12 = _slicedToArray(_Array$from11, 2),\n          t = _Array$from12[0],\n          e = _Array$from12[1],\n          i = this.document.getBlockAtPosition(e);\n\n      return this.removeCurrentAttribute(i.getLastAttribute()), this.setSelection(t);\n    }\n  }, {\n    key: \"insertPlaceholder\",\n    value: function insertPlaceholder() {\n      return this.placeholderPosition = this.getPosition(), this.insertString(\" \");\n    }\n  }, {\n    key: \"selectPlaceholder\",\n    value: function selectPlaceholder() {\n      if (null != this.placeholderPosition) return this.setSelectedRange([this.placeholderPosition, this.placeholderPosition + 1]), this.getSelectedRange();\n    }\n  }, {\n    key: \"forgetPlaceholder\",\n    value: function forgetPlaceholder() {\n      this.placeholderPosition = null;\n    }\n  }, {\n    key: \"hasCurrentAttribute\",\n    value: function hasCurrentAttribute(t) {\n      var e = this.currentAttributes[t];\n      return null != e && !1 !== e;\n    }\n  }, {\n    key: \"toggleCurrentAttribute\",\n    value: function toggleCurrentAttribute(t) {\n      var e = !this.currentAttributes[t];\n      return e ? this.setCurrentAttribute(t, e) : this.removeCurrentAttribute(t);\n    }\n  }, {\n    key: \"canSetCurrentAttribute\",\n    value: function canSetCurrentAttribute(t) {\n      return mt(t) ? this.canSetCurrentBlockAttribute(t) : this.canSetCurrentTextAttribute(t);\n    }\n  }, {\n    key: \"canSetCurrentTextAttribute\",\n    value: function canSetCurrentTextAttribute(t) {\n      var e = this.getSelectedDocument();\n\n      if (e) {\n        for (var _i37 = 0, _Array$from13 = Array.from(e.getAttachments()); _i37 < _Array$from13.length; _i37++) {\n          var _t41 = _Array$from13[_i37];\n          if (!_t41.hasContent()) return !1;\n        }\n\n        return !0;\n      }\n    }\n  }, {\n    key: \"canSetCurrentBlockAttribute\",\n    value: function canSetCurrentBlockAttribute(t) {\n      var e = this.getBlock();\n      if (e) return !e.isTerminalBlock();\n    }\n  }, {\n    key: \"setCurrentAttribute\",\n    value: function setCurrentAttribute(t, e) {\n      return mt(t) ? this.setBlockAttribute(t, e) : (this.setTextAttribute(t, e), this.currentAttributes[t] = e, this.notifyDelegateOfCurrentAttributesChange());\n    }\n  }, {\n    key: \"setHTMLAtributeAtPosition\",\n    value: function setHTMLAtributeAtPosition(t, e, i) {\n      var n;\n      var r = this.document.getBlockAtPosition(t),\n          o = null === (n = mt(r.getLastAttribute())) || void 0 === n ? void 0 : n.htmlAttributes;\n\n      if (r && null != o && o.includes(e)) {\n        var _n26 = this.document.setHTMLAttributeAtPosition(t, e, i);\n\n        this.setDocument(_n26);\n      }\n    }\n  }, {\n    key: \"setTextAttribute\",\n    value: function setTextAttribute(t, e) {\n      var i = this.getSelectedRange();\n      if (!i) return;\n\n      var _Array$from14 = Array.from(i),\n          _Array$from15 = _slicedToArray(_Array$from14, 2),\n          n = _Array$from15[0],\n          r = _Array$from15[1];\n\n      if (n !== r) return this.setDocument(this.document.addAttributeAtRange(t, e, i));\n\n      if (\"href\" === t) {\n        var _t42 = Ki.textForStringWithAttributes(e, {\n          href: e\n        });\n\n        return this.insertText(_t42);\n      }\n    }\n  }, {\n    key: \"setBlockAttribute\",\n    value: function setBlockAttribute(t, e) {\n      var i = this.getSelectedRange();\n      if (this.canSetCurrentAttribute(t)) return this.setDocument(this.document.applyBlockAttributeAtRange(t, e, i)), this.setSelection(i);\n    }\n  }, {\n    key: \"removeCurrentAttribute\",\n    value: function removeCurrentAttribute(t) {\n      return mt(t) ? (this.removeBlockAttribute(t), this.updateCurrentAttributes()) : (this.removeTextAttribute(t), delete this.currentAttributes[t], this.notifyDelegateOfCurrentAttributesChange());\n    }\n  }, {\n    key: \"removeTextAttribute\",\n    value: function removeTextAttribute(t) {\n      var e = this.getSelectedRange();\n      if (e) return this.setDocument(this.document.removeAttributeAtRange(t, e));\n    }\n  }, {\n    key: \"removeBlockAttribute\",\n    value: function removeBlockAttribute(t) {\n      var e = this.getSelectedRange();\n      if (e) return this.setDocument(this.document.removeAttributeAtRange(t, e));\n    }\n  }, {\n    key: \"canDecreaseNestingLevel\",\n    value: function canDecreaseNestingLevel() {\n      var t;\n      return (null === (t = this.getBlock()) || void 0 === t ? void 0 : t.getNestingLevel()) > 0;\n    }\n  }, {\n    key: \"canIncreaseNestingLevel\",\n    value: function canIncreaseNestingLevel() {\n      var t;\n      var e = this.getBlock();\n\n      if (e) {\n        if (null === (t = mt(e.getLastNestableAttribute())) || void 0 === t || !t.listAttribute) return e.getNestingLevel() > 0;\n        {\n          var _t43 = this.getPreviousBlock();\n\n          if (_t43) return function () {\n            var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];\n            return ot((arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []).slice(0, t.length), t);\n          }(_t43.getListItemAttributes(), e.getListItemAttributes());\n        }\n      }\n    }\n  }, {\n    key: \"decreaseNestingLevel\",\n    value: function decreaseNestingLevel() {\n      var t = this.getBlock();\n      if (t) return this.setDocument(this.document.replaceBlock(t, t.decreaseNestingLevel()));\n    }\n  }, {\n    key: \"increaseNestingLevel\",\n    value: function increaseNestingLevel() {\n      var t = this.getBlock();\n      if (t) return this.setDocument(this.document.replaceBlock(t, t.increaseNestingLevel()));\n    }\n  }, {\n    key: \"canDecreaseBlockAttributeLevel\",\n    value: function canDecreaseBlockAttributeLevel() {\n      var t;\n      return (null === (t = this.getBlock()) || void 0 === t ? void 0 : t.getAttributeLevel()) > 0;\n    }\n  }, {\n    key: \"decreaseBlockAttributeLevel\",\n    value: function decreaseBlockAttributeLevel() {\n      var t;\n      var e = null === (t = this.getBlock()) || void 0 === t ? void 0 : t.getLastAttribute();\n      if (e) return this.removeCurrentAttribute(e);\n    }\n  }, {\n    key: \"decreaseListLevel\",\n    value: function decreaseListLevel() {\n      var _Array$from16 = Array.from(this.getSelectedRange()),\n          _Array$from17 = _slicedToArray(_Array$from16, 1),\n          t = _Array$from17[0];\n\n      var _this$document$locati = this.document.locationFromPosition(t),\n          e = _this$document$locati.index;\n\n      var i = e;\n      var n = this.getBlock().getAttributeLevel();\n      var r = this.document.getBlockAtIndex(i + 1);\n\n      for (; r && r.isListItem() && !(r.getAttributeLevel() <= n);) {\n        i++, r = this.document.getBlockAtIndex(i + 1);\n      }\n\n      t = this.document.positionFromLocation({\n        index: e,\n        offset: 0\n      });\n      var o = this.document.positionFromLocation({\n        index: i,\n        offset: 0\n      });\n      return this.setDocument(this.document.removeLastListAttributeAtRange([t, o]));\n    }\n  }, {\n    key: \"updateCurrentAttributes\",\n    value: function updateCurrentAttributes() {\n      var _this44 = this;\n\n      var t = this.getSelectedRange({\n        ignoreLock: !0\n      });\n\n      if (t) {\n        var _e42 = this.document.getCommonAttributesAtRange(t);\n\n        if (Array.from(gt()).forEach(function (t) {\n          _e42[t] || _this44.canSetCurrentAttribute(t) || (_e42[t] = !1);\n        }), !Tt(_e42, this.currentAttributes)) return this.currentAttributes = _e42, this.notifyDelegateOfCurrentAttributesChange();\n      }\n    }\n  }, {\n    key: \"getCurrentAttributes\",\n    value: function getCurrentAttributes() {\n      return m.call({}, this.currentAttributes);\n    }\n  }, {\n    key: \"getCurrentTextAttributes\",\n    value: function getCurrentTextAttributes() {\n      var t = {};\n\n      for (var _e43 in this.currentAttributes) {\n        var _i38 = this.currentAttributes[_e43];\n        !1 !== _i38 && ft(_e43) && (t[_e43] = _i38);\n      }\n\n      return t;\n    }\n  }, {\n    key: \"freezeSelection\",\n    value: function freezeSelection() {\n      return this.setCurrentAttribute(\"frozen\", !0);\n    }\n  }, {\n    key: \"thawSelection\",\n    value: function thawSelection() {\n      return this.removeCurrentAttribute(\"frozen\");\n    }\n  }, {\n    key: \"hasFrozenSelection\",\n    value: function hasFrozenSelection() {\n      return this.hasCurrentAttribute(\"frozen\");\n    }\n  }, {\n    key: \"setSelection\",\n    value: function setSelection(t) {\n      var e;\n      var i = this.document.locationRangeFromRange(t);\n      return null === (e = this.delegate) || void 0 === e ? void 0 : e.compositionDidRequestChangingSelectionToLocationRange(i);\n    }\n  }, {\n    key: \"getSelectedRange\",\n    value: function getSelectedRange() {\n      var t = this.getLocationRange();\n      if (t) return this.document.rangeFromLocationRange(t);\n    }\n  }, {\n    key: \"setSelectedRange\",\n    value: function setSelectedRange(t) {\n      var e = this.document.locationRangeFromRange(t);\n      return this.getSelectionManager().setLocationRange(e);\n    }\n  }, {\n    key: \"getPosition\",\n    value: function getPosition() {\n      var t = this.getLocationRange();\n      if (t) return this.document.positionFromLocation(t[0]);\n    }\n  }, {\n    key: \"getLocationRange\",\n    value: function getLocationRange(t) {\n      return this.targetLocationRange ? this.targetLocationRange : this.getSelectionManager().getLocationRange(t) || wt({\n        index: 0,\n        offset: 0\n      });\n    }\n  }, {\n    key: \"withTargetLocationRange\",\n    value: function withTargetLocationRange(t, e) {\n      var i;\n      this.targetLocationRange = t;\n\n      try {\n        i = e();\n      } finally {\n        this.targetLocationRange = null;\n      }\n\n      return i;\n    }\n  }, {\n    key: \"withTargetRange\",\n    value: function withTargetRange(t, e) {\n      var i = this.document.locationRangeFromRange(t);\n      return this.withTargetLocationRange(i, e);\n    }\n  }, {\n    key: \"withTargetDOMRange\",\n    value: function withTargetDOMRange(t, e) {\n      var i = this.createLocationRangeFromDOMRange(t, {\n        strict: !1\n      });\n      return this.withTargetLocationRange(i, e);\n    }\n  }, {\n    key: \"getExpandedRangeInDirection\",\n    value: function getExpandedRangeInDirection(t) {\n      var _ref18 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          e = _ref18.length,\n          _Array$from18 = Array.from(this.getSelectedRange()),\n          _Array$from19 = _slicedToArray(_Array$from18, 2),\n          i = _Array$from19[0],\n          n = _Array$from19[1];\n\n      return \"backward\" === t ? e ? i -= e : i = this.translateUTF16PositionFromOffset(i, -1) : e ? n += e : n = this.translateUTF16PositionFromOffset(n, 1), wt([i, n]);\n    }\n  }, {\n    key: \"shouldManageMovingCursorInDirection\",\n    value: function shouldManageMovingCursorInDirection(t) {\n      if (this.editingAttachment) return !0;\n      var e = this.getExpandedRangeInDirection(t);\n      return null != this.getAttachmentAtRange(e);\n    }\n  }, {\n    key: \"moveCursorInDirection\",\n    value: function moveCursorInDirection(t) {\n      var e, i;\n      if (this.editingAttachment) i = this.document.getRangeOfAttachment(this.editingAttachment);else {\n        var _n27 = this.getSelectedRange();\n\n        i = this.getExpandedRangeInDirection(t), e = !Dt(_n27, i);\n      }\n\n      if (\"backward\" === t ? this.setSelectedRange(i[0]) : this.setSelectedRange(i[1]), e) {\n        var _t44 = this.getAttachmentAtRange(i);\n\n        if (_t44) return this.editAttachment(_t44);\n      }\n    }\n  }, {\n    key: \"expandSelectionInDirection\",\n    value: function expandSelectionInDirection(t) {\n      var _ref19 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          e = _ref19.length;\n\n      var i = this.getExpandedRangeInDirection(t, {\n        length: e\n      });\n      return this.setSelectedRange(i);\n    }\n  }, {\n    key: \"expandSelectionForEditing\",\n    value: function expandSelectionForEditing() {\n      if (this.hasCurrentAttribute(\"href\")) return this.expandSelectionAroundCommonAttribute(\"href\");\n    }\n  }, {\n    key: \"expandSelectionAroundCommonAttribute\",\n    value: function expandSelectionAroundCommonAttribute(t) {\n      var e = this.getPosition(),\n          i = this.document.getRangeOfCommonAttributeAtPosition(t, e);\n      return this.setSelectedRange(i);\n    }\n  }, {\n    key: \"selectionContainsAttachments\",\n    value: function selectionContainsAttachments() {\n      var t;\n      return (null === (t = this.getSelectedAttachments()) || void 0 === t ? void 0 : t.length) > 0;\n    }\n  }, {\n    key: \"selectionIsInCursorTarget\",\n    value: function selectionIsInCursorTarget() {\n      return this.editingAttachment || this.positionIsCursorTarget(this.getPosition());\n    }\n  }, {\n    key: \"positionIsCursorTarget\",\n    value: function positionIsCursorTarget(t) {\n      var e = this.document.locationFromPosition(t);\n      if (e) return this.locationIsCursorTarget(e);\n    }\n  }, {\n    key: \"positionIsBlockBreak\",\n    value: function positionIsBlockBreak(t) {\n      var e;\n      return null === (e = this.document.getPieceAtPosition(t)) || void 0 === e ? void 0 : e.isBlockBreak();\n    }\n  }, {\n    key: \"getSelectedDocument\",\n    value: function getSelectedDocument() {\n      var t = this.getSelectedRange();\n      if (t) return this.document.getDocumentAtRange(t);\n    }\n  }, {\n    key: \"getSelectedAttachments\",\n    value: function getSelectedAttachments() {\n      var t;\n      return null === (t = this.getSelectedDocument()) || void 0 === t ? void 0 : t.getAttachments();\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments() {\n      return this.attachments.slice(0);\n    }\n  }, {\n    key: \"refreshAttachments\",\n    value: function refreshAttachments() {\n      var _this45 = this;\n\n      var t = this.document.getAttachments(),\n          _ref20 = function () {\n        var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [],\n            e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];\n        var i = [],\n            n = [],\n            r = new Set();\n        t.forEach(function (t) {\n          r.add(t);\n        });\n        var o = new Set();\n        return e.forEach(function (t) {\n          o.add(t), r.has(t) || i.push(t);\n        }), t.forEach(function (t) {\n          o.has(t) || n.push(t);\n        }), {\n          added: i,\n          removed: n\n        };\n      }(this.attachments, t),\n          e = _ref20.added,\n          i = _ref20.removed;\n\n      return this.attachments = t, Array.from(i).forEach(function (t) {\n        var e, i;\n        t.delegate = null, null === (e = _this45.delegate) || void 0 === e || null === (i = e.compositionDidRemoveAttachment) || void 0 === i || i.call(e, t);\n      }), function () {\n        var t = [];\n        return Array.from(e).forEach(function (e) {\n          var i, n;\n          e.delegate = _this45, t.push(null === (i = _this45.delegate) || void 0 === i || null === (n = i.compositionDidAddAttachment) || void 0 === n ? void 0 : n.call(i, e));\n        }), t;\n      }();\n    }\n  }, {\n    key: \"attachmentDidChangeAttributes\",\n    value: function attachmentDidChangeAttributes(t) {\n      var e, i;\n      return this.revision++, null === (e = this.delegate) || void 0 === e || null === (i = e.compositionDidEditAttachment) || void 0 === i ? void 0 : i.call(e, t);\n    }\n  }, {\n    key: \"attachmentDidChangePreviewURL\",\n    value: function attachmentDidChangePreviewURL(t) {\n      var e, i;\n      return this.revision++, null === (e = this.delegate) || void 0 === e || null === (i = e.compositionDidChangeAttachmentPreviewURL) || void 0 === i ? void 0 : i.call(e, t);\n    }\n  }, {\n    key: \"editAttachment\",\n    value: function editAttachment(t, e) {\n      var i, n;\n      if (t !== this.editingAttachment) return this.stopEditingAttachment(), this.editingAttachment = t, null === (i = this.delegate) || void 0 === i || null === (n = i.compositionDidStartEditingAttachment) || void 0 === n ? void 0 : n.call(i, this.editingAttachment, e);\n    }\n  }, {\n    key: \"stopEditingAttachment\",\n    value: function stopEditingAttachment() {\n      var t, e;\n      this.editingAttachment && (null === (t = this.delegate) || void 0 === t || null === (e = t.compositionDidStopEditingAttachment) || void 0 === e || e.call(t, this.editingAttachment), this.editingAttachment = null);\n    }\n  }, {\n    key: \"updateAttributesForAttachment\",\n    value: function updateAttributesForAttachment(t, e) {\n      return this.setDocument(this.document.updateAttributesForAttachment(t, e));\n    }\n  }, {\n    key: \"removeAttributeForAttachment\",\n    value: function removeAttributeForAttachment(t, e) {\n      return this.setDocument(this.document.removeAttributeForAttachment(t, e));\n    }\n  }, {\n    key: \"breakFormattedBlock\",\n    value: function breakFormattedBlock(t) {\n      var e = t.document;\n      var i = t.block;\n      var n = t.startPosition,\n          r = [n - 1, n];\n      i.getBlockBreakPosition() === t.startLocation.offset ? (i.breaksOnReturn() && \"\\n\" === t.nextCharacter ? n += 1 : e = e.removeTextAtRange(r), r = [n, n]) : \"\\n\" === t.nextCharacter ? \"\\n\" === t.previousCharacter ? r = [n - 1, n + 1] : (r = [n, n + 1], n += 1) : t.startLocation.offset - 1 != 0 && (n += 1);\n      var o = new on([i.removeLastAttribute().copyWithoutText()]);\n      return this.setDocument(e.insertDocumentAtRange(o, r)), this.setSelection(n);\n    }\n  }, {\n    key: \"getPreviousBlock\",\n    value: function getPreviousBlock() {\n      var t = this.getLocationRange();\n\n      if (t) {\n        var _e44 = t[0].index;\n        if (_e44 > 0) return this.document.getBlockAtIndex(_e44 - 1);\n      }\n    }\n  }, {\n    key: \"getBlock\",\n    value: function getBlock() {\n      var t = this.getLocationRange();\n      if (t) return this.document.getBlockAtIndex(t[0].index);\n    }\n  }, {\n    key: \"getAttachmentAtRange\",\n    value: function getAttachmentAtRange(t) {\n      var e = this.document.getDocumentAtRange(t);\n      if (e.toString() === \"\".concat(\"\", \"\\n\")) return e.getAttachments()[0];\n    }\n  }, {\n    key: \"notifyDelegateOfCurrentAttributesChange\",\n    value: function notifyDelegateOfCurrentAttributesChange() {\n      var t, e;\n      return null === (t = this.delegate) || void 0 === t || null === (e = t.compositionDidChangeCurrentAttributes) || void 0 === e ? void 0 : e.call(t, this.currentAttributes);\n    }\n  }, {\n    key: \"notifyDelegateOfInsertionAtRange\",\n    value: function notifyDelegateOfInsertionAtRange(t) {\n      var e, i;\n      return null === (e = this.delegate) || void 0 === e || null === (i = e.compositionDidPerformInsertionAtRange) || void 0 === i ? void 0 : i.call(e, t);\n    }\n  }, {\n    key: \"translateUTF16PositionFromOffset\",\n    value: function translateUTF16PositionFromOffset(t, e) {\n      var i = this.document.toUTF16String(),\n          n = i.offsetFromUCS2Offset(t);\n      return i.offsetToUCS2Offset(n + e);\n    }\n  }]);\n\n  return kn;\n}(q);\n\nkn.proxyMethod(\"getSelectionManager().getPointRange\"), kn.proxyMethod(\"getSelectionManager().setLocationRangeFromPointRange\"), kn.proxyMethod(\"getSelectionManager().createLocationRangeFromDOMRange\"), kn.proxyMethod(\"getSelectionManager().locationIsCursorTarget\"), kn.proxyMethod(\"getSelectionManager().selectionIsExpanded\"), kn.proxyMethod(\"delegate?.getSelectionManager\");\n\nvar Tn = /*#__PURE__*/function (_q12) {\n  _inherits(Tn, _q12);\n\n  var _super29 = _createSuper(Tn);\n\n  function Tn(t) {\n    var _this46;\n\n    _classCallCheck(this, Tn);\n\n    _this46 = _super29.apply(this, arguments), _this46.composition = t, _this46.undoEntries = [], _this46.redoEntries = [];\n    return _this46;\n  }\n\n  _createClass(Tn, [{\n    key: \"recordUndoEntry\",\n    value: function recordUndoEntry(t) {\n      var _ref21 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          e = _ref21.context,\n          i = _ref21.consolidatable;\n\n      var n = this.undoEntries.slice(-1)[0];\n\n      if (!i || !wn(n, t, e)) {\n        var _i39 = this.createEntry({\n          description: t,\n          context: e\n        });\n\n        this.undoEntries.push(_i39), this.redoEntries = [];\n      }\n    }\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      var t = this.undoEntries.pop();\n\n      if (t) {\n        var _e45 = this.createEntry(t);\n\n        return this.redoEntries.push(_e45), this.composition.loadSnapshot(t.snapshot);\n      }\n    }\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      var t = this.redoEntries.pop();\n\n      if (t) {\n        var _e46 = this.createEntry(t);\n\n        return this.undoEntries.push(_e46), this.composition.loadSnapshot(t.snapshot);\n      }\n    }\n  }, {\n    key: \"canUndo\",\n    value: function canUndo() {\n      return this.undoEntries.length > 0;\n    }\n  }, {\n    key: \"canRedo\",\n    value: function canRedo() {\n      return this.redoEntries.length > 0;\n    }\n  }, {\n    key: \"createEntry\",\n    value: function createEntry() {\n      var _ref22 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},\n          t = _ref22.description,\n          e = _ref22.context;\n\n      return {\n        description: null == t ? void 0 : t.toString(),\n        context: JSON.stringify(e),\n        snapshot: this.composition.getSnapshot()\n      };\n    }\n  }]);\n\n  return Tn;\n}(q);\n\nvar wn = function wn(t, e, i) {\n  return (null == t ? void 0 : t.description) === (null == e ? void 0 : e.toString()) && (null == t ? void 0 : t.context) === JSON.stringify(i);\n},\n    Ln = \"attachmentGallery\";\n\nvar Dn = /*#__PURE__*/function () {\n  function Dn(t) {\n    _classCallCheck(this, Dn);\n\n    this.document = t.document, this.selectedRange = t.selectedRange;\n  }\n\n  _createClass(Dn, [{\n    key: \"perform\",\n    value: function perform() {\n      return this.removeBlockAttribute(), this.applyBlockAttribute();\n    }\n  }, {\n    key: \"getSnapshot\",\n    value: function getSnapshot() {\n      return {\n        document: this.document,\n        selectedRange: this.selectedRange\n      };\n    }\n  }, {\n    key: \"removeBlockAttribute\",\n    value: function removeBlockAttribute() {\n      var _this47 = this;\n\n      return this.findRangesOfBlocks().map(function (t) {\n        return _this47.document = _this47.document.removeAttributeAtRange(Ln, t);\n      });\n    }\n  }, {\n    key: \"applyBlockAttribute\",\n    value: function applyBlockAttribute() {\n      var _this48 = this;\n\n      var t = 0;\n      this.findRangesOfPieces().forEach(function (e) {\n        e[1] - e[0] > 1 && (e[0] += t, e[1] += t, \"\\n\" !== _this48.document.getCharacterAtPosition(e[1]) && (_this48.document = _this48.document.insertBlockBreakAtRange(e[1]), e[1] < _this48.selectedRange[1] && _this48.moveSelectedRangeForward(), e[1]++, t++), 0 !== e[0] && \"\\n\" !== _this48.document.getCharacterAtPosition(e[0] - 1) && (_this48.document = _this48.document.insertBlockBreakAtRange(e[0]), e[0] < _this48.selectedRange[0] && _this48.moveSelectedRangeForward(), e[0]++, t++), _this48.document = _this48.document.applyBlockAttributeAtRange(Ln, !0, e));\n      });\n    }\n  }, {\n    key: \"findRangesOfBlocks\",\n    value: function findRangesOfBlocks() {\n      return this.document.findRangesForBlockAttribute(Ln);\n    }\n  }, {\n    key: \"findRangesOfPieces\",\n    value: function findRangesOfPieces() {\n      return this.document.findRangesForTextAttribute(\"presentation\", {\n        withValue: \"gallery\"\n      });\n    }\n  }, {\n    key: \"moveSelectedRangeForward\",\n    value: function moveSelectedRangeForward() {\n      this.selectedRange[0] += 1, this.selectedRange[1] += 1;\n    }\n  }]);\n\n  return Dn;\n}();\n\nvar Nn = function Nn(t) {\n  var e = new Dn(t);\n  return e.perform(), e.getSnapshot();\n},\n    In = [Nn];\n\nvar On = /*#__PURE__*/function () {\n  function On(t, e, i) {\n    _classCallCheck(this, On);\n\n    this.insertFiles = this.insertFiles.bind(this), this.composition = t, this.selectionManager = e, this.element = i, this.undoManager = new Tn(this.composition), this.filters = In.slice(0);\n  }\n\n  _createClass(On, [{\n    key: \"loadDocument\",\n    value: function loadDocument(t) {\n      return this.loadSnapshot({\n        document: t,\n        selectedRange: [0, 0]\n      });\n    }\n  }, {\n    key: \"loadHTML\",\n    value: function loadHTML() {\n      var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : \"\";\n      var e = cn.parse(t, {\n        referenceElement: this.element\n      }).getDocument();\n      return this.loadDocument(e);\n    }\n  }, {\n    key: \"loadJSON\",\n    value: function loadJSON(t) {\n      var e = t.document,\n          i = t.selectedRange;\n      return e = on.fromJSON(e), this.loadSnapshot({\n        document: e,\n        selectedRange: i\n      });\n    }\n  }, {\n    key: \"loadSnapshot\",\n    value: function loadSnapshot(t) {\n      return this.undoManager = new Tn(this.composition), this.composition.loadSnapshot(t);\n    }\n  }, {\n    key: \"getDocument\",\n    value: function getDocument() {\n      return this.composition.document;\n    }\n  }, {\n    key: \"getSelectedDocument\",\n    value: function getSelectedDocument() {\n      return this.composition.getSelectedDocument();\n    }\n  }, {\n    key: \"getSnapshot\",\n    value: function getSnapshot() {\n      return this.composition.getSnapshot();\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this.getSnapshot();\n    }\n  }, {\n    key: \"deleteInDirection\",\n    value: function deleteInDirection(t) {\n      return this.composition.deleteInDirection(t);\n    }\n  }, {\n    key: \"insertAttachment\",\n    value: function insertAttachment(t) {\n      return this.composition.insertAttachment(t);\n    }\n  }, {\n    key: \"insertAttachments\",\n    value: function insertAttachments(t) {\n      return this.composition.insertAttachments(t);\n    }\n  }, {\n    key: \"insertDocument\",\n    value: function insertDocument(t) {\n      return this.composition.insertDocument(t);\n    }\n  }, {\n    key: \"insertFile\",\n    value: function insertFile(t) {\n      return this.composition.insertFile(t);\n    }\n  }, {\n    key: \"insertFiles\",\n    value: function insertFiles(t) {\n      return this.composition.insertFiles(t);\n    }\n  }, {\n    key: \"insertHTML\",\n    value: function insertHTML(t) {\n      return this.composition.insertHTML(t);\n    }\n  }, {\n    key: \"insertString\",\n    value: function insertString(t) {\n      return this.composition.insertString(t);\n    }\n  }, {\n    key: \"insertText\",\n    value: function insertText(t) {\n      return this.composition.insertText(t);\n    }\n  }, {\n    key: \"insertLineBreak\",\n    value: function insertLineBreak() {\n      return this.composition.insertLineBreak();\n    }\n  }, {\n    key: \"getSelectedRange\",\n    value: function getSelectedRange() {\n      return this.composition.getSelectedRange();\n    }\n  }, {\n    key: \"getPosition\",\n    value: function getPosition() {\n      return this.composition.getPosition();\n    }\n  }, {\n    key: \"getClientRectAtPosition\",\n    value: function getClientRectAtPosition(t) {\n      var e = this.getDocument().locationRangeFromRange([t, t + 1]);\n      return this.selectionManager.getClientRectAtLocationRange(e);\n    }\n  }, {\n    key: \"expandSelectionInDirection\",\n    value: function expandSelectionInDirection(t) {\n      return this.composition.expandSelectionInDirection(t);\n    }\n  }, {\n    key: \"moveCursorInDirection\",\n    value: function moveCursorInDirection(t) {\n      return this.composition.moveCursorInDirection(t);\n    }\n  }, {\n    key: \"setSelectedRange\",\n    value: function setSelectedRange(t) {\n      return this.composition.setSelectedRange(t);\n    }\n  }, {\n    key: \"activateAttribute\",\n    value: function activateAttribute(t) {\n      var e = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1];\n      return this.composition.setCurrentAttribute(t, e);\n    }\n  }, {\n    key: \"attributeIsActive\",\n    value: function attributeIsActive(t) {\n      return this.composition.hasCurrentAttribute(t);\n    }\n  }, {\n    key: \"canActivateAttribute\",\n    value: function canActivateAttribute(t) {\n      return this.composition.canSetCurrentAttribute(t);\n    }\n  }, {\n    key: \"deactivateAttribute\",\n    value: function deactivateAttribute(t) {\n      return this.composition.removeCurrentAttribute(t);\n    }\n  }, {\n    key: \"setHTMLAtributeAtPosition\",\n    value: function setHTMLAtributeAtPosition(t, e, i) {\n      this.composition.setHTMLAtributeAtPosition(t, e, i);\n    }\n  }, {\n    key: \"canDecreaseNestingLevel\",\n    value: function canDecreaseNestingLevel() {\n      return this.composition.canDecreaseNestingLevel();\n    }\n  }, {\n    key: \"canIncreaseNestingLevel\",\n    value: function canIncreaseNestingLevel() {\n      return this.composition.canIncreaseNestingLevel();\n    }\n  }, {\n    key: \"decreaseNestingLevel\",\n    value: function decreaseNestingLevel() {\n      if (this.canDecreaseNestingLevel()) return this.composition.decreaseNestingLevel();\n    }\n  }, {\n    key: \"increaseNestingLevel\",\n    value: function increaseNestingLevel() {\n      if (this.canIncreaseNestingLevel()) return this.composition.increaseNestingLevel();\n    }\n  }, {\n    key: \"canRedo\",\n    value: function canRedo() {\n      return this.undoManager.canRedo();\n    }\n  }, {\n    key: \"canUndo\",\n    value: function canUndo() {\n      return this.undoManager.canUndo();\n    }\n  }, {\n    key: \"recordUndoEntry\",\n    value: function recordUndoEntry(t) {\n      var _ref23 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n          e = _ref23.context,\n          i = _ref23.consolidatable;\n\n      return this.undoManager.recordUndoEntry(t, {\n        context: e,\n        consolidatable: i\n      });\n    }\n  }, {\n    key: \"redo\",\n    value: function redo() {\n      if (this.canRedo()) return this.undoManager.redo();\n    }\n  }, {\n    key: \"undo\",\n    value: function undo() {\n      if (this.canUndo()) return this.undoManager.undo();\n    }\n  }]);\n\n  return On;\n}();\n\nvar Fn = /*#__PURE__*/function () {\n  function Fn(t) {\n    _classCallCheck(this, Fn);\n\n    this.element = t;\n  }\n\n  _createClass(Fn, [{\n    key: \"findLocationFromContainerAndOffset\",\n    value: function findLocationFromContainerAndOffset(t, e) {\n      var _ref24 = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {\n        strict: !0\n      },\n          i = _ref24.strict,\n          n = 0,\n          r = !1;\n\n      var o = {\n        index: 0,\n        offset: 0\n      },\n          s = this.findAttachmentElementParentForNode(t);\n      s && (t = s.parentNode, e = E(s));\n      var a = R(this.element, {\n        usingFilter: _n\n      });\n\n      for (; a.nextNode();) {\n        var _s5 = a.currentNode;\n\n        if (_s5 === t && B(t)) {\n          F(_s5) || (o.offset += e);\n          break;\n        }\n\n        if (_s5.parentNode === t) {\n          if (n++ === e) break;\n        } else if (!C(t, _s5) && n > 0) break;\n\n        N(_s5, {\n          strict: i\n        }) ? (r && o.index++, o.offset = 0, r = !0) : o.offset += Pn(_s5);\n      }\n\n      return o;\n    }\n  }, {\n    key: \"findContainerAndOffsetFromLocation\",\n    value: function findContainerAndOffsetFromLocation(t) {\n      var e, i;\n\n      if (0 === t.index && 0 === t.offset) {\n        for (e = this.element, i = 0; e.firstChild;) {\n          if (e = e.firstChild, D(e)) {\n            i = 1;\n            break;\n          }\n        }\n\n        return [e, i];\n      }\n\n      var _this$findNodeAndOffs = this.findNodeAndOffsetFromLocation(t),\n          _this$findNodeAndOffs2 = _slicedToArray(_this$findNodeAndOffs, 2),\n          n = _this$findNodeAndOffs2[0],\n          r = _this$findNodeAndOffs2[1];\n\n      if (n) {\n        if (B(n)) 0 === Pn(n) ? (e = n.parentNode.parentNode, i = E(n.parentNode), F(n, {\n          name: \"right\"\n        }) && i++) : (e = n, i = t.offset - r);else {\n          if (e = n.parentNode, !N(n.previousSibling) && !D(e)) for (; n === e.lastChild && (n = e, e = e.parentNode, !D(e));) {\n            ;\n          }\n          i = E(n), 0 !== t.offset && i++;\n        }\n        return [e, i];\n      }\n    }\n  }, {\n    key: \"findNodeAndOffsetFromLocation\",\n    value: function findNodeAndOffsetFromLocation(t) {\n      var e,\n          i,\n          n = 0;\n\n      var _iterator7 = _createForOfIteratorHelper(this.getSignificantNodesForIndex(t.index)),\n          _step7;\n\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var _r14 = _step7.value;\n\n          var _o8 = Pn(_r14);\n\n          if (t.offset <= n + _o8) if (B(_r14)) {\n            if (e = _r14, i = n, t.offset === i && F(e)) break;\n          } else e || (e = _r14, i = n);\n          if (n += _o8, n > t.offset) break;\n        }\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n\n      return [e, i];\n    }\n  }, {\n    key: \"findAttachmentElementParentForNode\",\n    value: function findAttachmentElementParentForNode(t) {\n      for (; t && t !== this.element;) {\n        if (P(t)) return t;\n        t = t.parentNode;\n      }\n    }\n  }, {\n    key: \"getSignificantNodesForIndex\",\n    value: function getSignificantNodesForIndex(t) {\n      var e = [],\n          i = R(this.element, {\n        usingFilter: Mn\n      });\n      var n = !1;\n\n      for (; i.nextNode();) {\n        var _o9 = i.currentNode;\n        var r;\n\n        if (I(_o9)) {\n          if (null != r ? r++ : r = 0, r === t) n = !0;else if (n) break;\n        } else n && e.push(_o9);\n      }\n\n      return e;\n    }\n  }]);\n\n  return Fn;\n}();\n\nvar Pn = function Pn(t) {\n  if (t.nodeType === Node.TEXT_NODE) {\n    if (F(t)) return 0;\n    return t.textContent.length;\n  }\n\n  return \"br\" === k(t) || P(t) ? 1 : 0;\n},\n    Mn = function Mn(t) {\n  return Bn(t) === NodeFilter.FILTER_ACCEPT ? _n(t) : NodeFilter.FILTER_REJECT;\n},\n    Bn = function Bn(t) {\n  return M(t) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;\n},\n    _n = function _n(t) {\n  return P(t.parentNode) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;\n};\n\nvar jn = /*#__PURE__*/function () {\n  function jn() {\n    _classCallCheck(this, jn);\n  }\n\n  _createClass(jn, [{\n    key: \"createDOMRangeFromPoint\",\n    value: function createDOMRangeFromPoint(t) {\n      var e,\n          i = t.x,\n          n = t.y;\n\n      if (document.caretPositionFromPoint) {\n        var _document$caretPositi = document.caretPositionFromPoint(i, n),\n            _t45 = _document$caretPositi.offsetNode,\n            _r15 = _document$caretPositi.offset;\n\n        return e = document.createRange(), e.setStart(_t45, _r15), e;\n      }\n\n      if (document.caretRangeFromPoint) return document.caretRangeFromPoint(i, n);\n\n      if (document.body.createTextRange) {\n        var _t46 = Mt();\n\n        try {\n          var _t47 = document.body.createTextRange();\n\n          _t47.moveToPoint(i, n), _t47.select();\n        } catch (t) {}\n\n        return e = Mt(), Bt(_t46), e;\n      }\n    }\n  }, {\n    key: \"getClientRectsForDOMRange\",\n    value: function getClientRectsForDOMRange(t) {\n      var e = Array.from(t.getClientRects());\n      return [e[0], e[e.length - 1]];\n    }\n  }]);\n\n  return jn;\n}();\n\nvar Wn = /*#__PURE__*/function (_q13) {\n  _inherits(Wn, _q13);\n\n  var _super30 = _createSuper(Wn);\n\n  function Wn(t) {\n    var _this49;\n\n    _classCallCheck(this, Wn);\n\n    _this49 = _super30.apply(this, arguments), _this49.didMouseDown = _this49.didMouseDown.bind(_assertThisInitialized(_this49)), _this49.selectionDidChange = _this49.selectionDidChange.bind(_assertThisInitialized(_this49)), _this49.element = t, _this49.locationMapper = new Fn(_this49.element), _this49.pointMapper = new jn(), _this49.lockCount = 0, b(\"mousedown\", {\n      onElement: _this49.element,\n      withCallback: _this49.didMouseDown\n    });\n    return _this49;\n  }\n\n  _createClass(Wn, [{\n    key: \"getLocationRange\",\n    value: function getLocationRange() {\n      var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n      return !1 === t.strict ? this.createLocationRangeFromDOMRange(Mt()) : t.ignoreLock ? this.currentLocationRange : this.lockedLocationRange ? this.lockedLocationRange : this.currentLocationRange;\n    }\n  }, {\n    key: \"setLocationRange\",\n    value: function setLocationRange(t) {\n      if (this.lockedLocationRange) return;\n      t = wt(t);\n      var e = this.createDOMRangeFromLocationRange(t);\n      e && (Bt(e), this.updateCurrentLocationRange(t));\n    }\n  }, {\n    key: \"setLocationRangeFromPointRange\",\n    value: function setLocationRangeFromPointRange(t) {\n      t = wt(t);\n      var e = this.getLocationAtPoint(t[0]),\n          i = this.getLocationAtPoint(t[1]);\n      this.setLocationRange([e, i]);\n    }\n  }, {\n    key: \"getClientRectAtLocationRange\",\n    value: function getClientRectAtLocationRange(t) {\n      var e = this.createDOMRangeFromLocationRange(t);\n      if (e) return this.getClientRectsForDOMRange(e)[1];\n    }\n  }, {\n    key: \"locationIsCursorTarget\",\n    value: function locationIsCursorTarget(t) {\n      var e = Array.from(this.findNodeAndOffsetFromLocation(t))[0];\n      return F(e);\n    }\n  }, {\n    key: \"lock\",\n    value: function lock() {\n      0 == this.lockCount++ && (this.updateCurrentLocationRange(), this.lockedLocationRange = this.getLocationRange());\n    }\n  }, {\n    key: \"unlock\",\n    value: function unlock() {\n      if (0 == --this.lockCount) {\n        var _t48 = this.lockedLocationRange;\n        if (this.lockedLocationRange = null, null != _t48) return this.setLocationRange(_t48);\n      }\n    }\n  }, {\n    key: \"clearSelection\",\n    value: function clearSelection() {\n      var t;\n      return null === (t = Pt()) || void 0 === t ? void 0 : t.removeAllRanges();\n    }\n  }, {\n    key: \"selectionIsCollapsed\",\n    value: function selectionIsCollapsed() {\n      var t;\n      return !0 === (null === (t = Mt()) || void 0 === t ? void 0 : t.collapsed);\n    }\n  }, {\n    key: \"selectionIsExpanded\",\n    value: function selectionIsExpanded() {\n      return !this.selectionIsCollapsed();\n    }\n  }, {\n    key: \"createLocationRangeFromDOMRange\",\n    value: function createLocationRangeFromDOMRange(t, e) {\n      if (null == t || !this.domRangeWithinElement(t)) return;\n      var i = this.findLocationFromContainerAndOffset(t.startContainer, t.startOffset, e);\n      if (!i) return;\n      var n = t.collapsed ? void 0 : this.findLocationFromContainerAndOffset(t.endContainer, t.endOffset, e);\n      return wt([i, n]);\n    }\n  }, {\n    key: \"didMouseDown\",\n    value: function didMouseDown() {\n      return this.pauseTemporarily();\n    }\n  }, {\n    key: \"pauseTemporarily\",\n    value: function pauseTemporarily() {\n      var _this50 = this;\n\n      var t;\n      this.paused = !0;\n\n      var e = function e() {\n        if (_this50.paused = !1, clearTimeout(i), Array.from(t).forEach(function (t) {\n          t.destroy();\n        }), C(document, _this50.element)) return _this50.selectionDidChange();\n      },\n          i = setTimeout(e, 200);\n\n      t = [\"mousemove\", \"keydown\"].map(function (t) {\n        return b(t, {\n          onElement: document,\n          withCallback: e\n        });\n      });\n    }\n  }, {\n    key: \"selectionDidChange\",\n    value: function selectionDidChange() {\n      if (!this.paused && !x(this.element)) return this.updateCurrentLocationRange();\n    }\n  }, {\n    key: \"updateCurrentLocationRange\",\n    value: function updateCurrentLocationRange(t) {\n      var e, i;\n      if ((null != t ? t : t = this.createLocationRangeFromDOMRange(Mt())) && !Dt(t, this.currentLocationRange)) return this.currentLocationRange = t, null === (e = this.delegate) || void 0 === e || null === (i = e.locationRangeDidChange) || void 0 === i ? void 0 : i.call(e, this.currentLocationRange.slice(0));\n    }\n  }, {\n    key: \"createDOMRangeFromLocationRange\",\n    value: function createDOMRangeFromLocationRange(t) {\n      var e = this.findContainerAndOffsetFromLocation(t[0]),\n          i = Lt(t) ? e : this.findContainerAndOffsetFromLocation(t[1]) || e;\n\n      if (null != e && null != i) {\n        var _t49 = document.createRange();\n\n        return _t49.setStart.apply(_t49, _toConsumableArray(Array.from(e || []))), _t49.setEnd.apply(_t49, _toConsumableArray(Array.from(i || []))), _t49;\n      }\n    }\n  }, {\n    key: \"getLocationAtPoint\",\n    value: function getLocationAtPoint(t) {\n      var e = this.createDOMRangeFromPoint(t);\n      var i;\n      if (e) return null === (i = this.createLocationRangeFromDOMRange(e)) || void 0 === i ? void 0 : i[0];\n    }\n  }, {\n    key: \"domRangeWithinElement\",\n    value: function domRangeWithinElement(t) {\n      return t.collapsed ? C(this.element, t.startContainer) : C(this.element, t.startContainer) && C(this.element, t.endContainer);\n    }\n  }]);\n\n  return Wn;\n}(q);\n\nWn.proxyMethod(\"locationMapper.findLocationFromContainerAndOffset\"), Wn.proxyMethod(\"locationMapper.findContainerAndOffsetFromLocation\"), Wn.proxyMethod(\"locationMapper.findNodeAndOffsetFromLocation\"), Wn.proxyMethod(\"pointMapper.createDOMRangeFromPoint\"), Wn.proxyMethod(\"pointMapper.getClientRectsForDOMRange\");\nvar Un = Object.freeze({\n  __proto__: null,\n  Attachment: Wi,\n  AttachmentManager: Sn,\n  AttachmentPiece: Ui,\n  Block: Gi,\n  Composition: kn,\n  Document: on,\n  Editor: On,\n  HTMLParser: cn,\n  HTMLSanitizer: ui,\n  LineBreakInsertion: Rn,\n  LocationMapper: Fn,\n  ManagedAttachment: En,\n  Piece: _i,\n  PointMapper: jn,\n  SelectionManager: Wn,\n  SplittableList: zi,\n  StringPiece: Vi,\n  Text: Ki,\n  UndoManager: Tn\n}),\n    Vn = Object.freeze({\n  __proto__: null,\n  ObjectView: ie,\n  AttachmentView: gi,\n  BlockView: xi,\n  DocumentView: Ci,\n  PieceView: bi,\n  PreviewableAttachmentView: fi,\n  TextView: vi\n});\n\nvar zn = z.lang,\n    qn = z.css,\n    Hn = z.keyNames,\n    Jn = function Jn(t) {\n  return function () {\n    var e = t.apply(this, arguments);\n    e.do(), this.undos || (this.undos = []), this.undos.push(e.undo);\n  };\n};\n\nvar Kn = /*#__PURE__*/function (_q14) {\n  _inherits(Kn, _q14);\n\n  var _super31 = _createSuper(Kn);\n\n  function Kn(t, e, i) {\n    var _this51;\n\n    _classCallCheck(this, Kn);\n\n    var n = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {};\n    _this51 = _super31.apply(this, arguments), wi(_assertThisInitialized(_this51), \"makeElementMutable\", Jn(function () {\n      return {\n        do: function _do() {\n          _this51.element.dataset.trixMutable = !0;\n        },\n        undo: function undo() {\n          return delete _this51.element.dataset.trixMutable;\n        }\n      };\n    })), wi(_assertThisInitialized(_this51), \"addToolbar\", Jn(function () {\n      var t = T({\n        tagName: \"div\",\n        className: qn.attachmentToolbar,\n        data: {\n          trixMutable: !0\n        },\n        childNodes: T({\n          tagName: \"div\",\n          className: \"trix-button-row\",\n          childNodes: T({\n            tagName: \"span\",\n            className: \"trix-button-group trix-button-group--actions\",\n            childNodes: T({\n              tagName: \"button\",\n              className: \"trix-button trix-button--remove\",\n              textContent: zn.remove,\n              attributes: {\n                title: zn.remove\n              },\n              data: {\n                trixAction: \"remove\"\n              }\n            })\n          })\n        })\n      });\n      return _this51.attachment.isPreviewable() && t.appendChild(T({\n        tagName: \"div\",\n        className: qn.attachmentMetadataContainer,\n        childNodes: T({\n          tagName: \"span\",\n          className: qn.attachmentMetadata,\n          childNodes: [T({\n            tagName: \"span\",\n            className: qn.attachmentName,\n            textContent: _this51.attachment.getFilename(),\n            attributes: {\n              title: _this51.attachment.getFilename()\n            }\n          }), T({\n            tagName: \"span\",\n            className: qn.attachmentSize,\n            textContent: _this51.attachment.getFormattedFilesize()\n          })]\n        })\n      })), b(\"click\", {\n        onElement: t,\n        withCallback: _this51.didClickToolbar\n      }), b(\"click\", {\n        onElement: t,\n        matchingSelector: \"[data-trix-action]\",\n        withCallback: _this51.didClickActionButton\n      }), v(\"trix-attachment-before-toolbar\", {\n        onElement: _this51.element,\n        attributes: {\n          toolbar: t,\n          attachment: _this51.attachment\n        }\n      }), {\n        do: function _do() {\n          return _this51.element.appendChild(t);\n        },\n        undo: function undo() {\n          return S(t);\n        }\n      };\n    })), wi(_assertThisInitialized(_this51), \"installCaptionEditor\", Jn(function () {\n      var t = T({\n        tagName: \"textarea\",\n        className: qn.attachmentCaptionEditor,\n        attributes: {\n          placeholder: zn.captionPlaceholder\n        },\n        data: {\n          trixMutable: !0\n        }\n      });\n      t.value = _this51.attachmentPiece.getCaption();\n      var e = t.cloneNode();\n      e.classList.add(\"trix-autoresize-clone\"), e.tabIndex = -1;\n\n      var i = function i() {\n        e.value = t.value, t.style.height = e.scrollHeight + \"px\";\n      };\n\n      b(\"input\", {\n        onElement: t,\n        withCallback: i\n      }), b(\"input\", {\n        onElement: t,\n        withCallback: _this51.didInputCaption\n      }), b(\"keydown\", {\n        onElement: t,\n        withCallback: _this51.didKeyDownCaption\n      }), b(\"change\", {\n        onElement: t,\n        withCallback: _this51.didChangeCaption\n      }), b(\"blur\", {\n        onElement: t,\n        withCallback: _this51.didBlurCaption\n      });\n\n      var n = _this51.element.querySelector(\"figcaption\"),\n          r = n.cloneNode();\n\n      return {\n        do: function _do() {\n          if (n.style.display = \"none\", r.appendChild(t), r.appendChild(e), r.classList.add(\"\".concat(qn.attachmentCaption, \"--editing\")), n.parentElement.insertBefore(r, n), i(), _this51.options.editCaption) return Rt(function () {\n            return t.focus();\n          });\n        },\n        undo: function undo() {\n          S(r), n.style.display = null;\n        }\n      };\n    })), _this51.didClickToolbar = _this51.didClickToolbar.bind(_assertThisInitialized(_this51)), _this51.didClickActionButton = _this51.didClickActionButton.bind(_assertThisInitialized(_this51)), _this51.didKeyDownCaption = _this51.didKeyDownCaption.bind(_assertThisInitialized(_this51)), _this51.didInputCaption = _this51.didInputCaption.bind(_assertThisInitialized(_this51)), _this51.didChangeCaption = _this51.didChangeCaption.bind(_assertThisInitialized(_this51)), _this51.didBlurCaption = _this51.didBlurCaption.bind(_assertThisInitialized(_this51)), _this51.attachmentPiece = t, _this51.element = e, _this51.container = i, _this51.options = n, _this51.attachment = _this51.attachmentPiece.attachment, \"a\" === k(_this51.element) && (_this51.element = _this51.element.firstChild), _this51.install();\n    return _this51;\n  }\n\n  _createClass(Kn, [{\n    key: \"install\",\n    value: function install() {\n      this.makeElementMutable(), this.addToolbar(), this.attachment.isPreviewable() && this.installCaptionEditor();\n    }\n  }, {\n    key: \"uninstall\",\n    value: function uninstall() {\n      var t;\n      var e = this.undos.pop();\n\n      for (this.savePendingCaption(); e;) {\n        e(), e = this.undos.pop();\n      }\n\n      null === (t = this.delegate) || void 0 === t || t.didUninstallAttachmentEditor(this);\n    }\n  }, {\n    key: \"savePendingCaption\",\n    value: function savePendingCaption() {\n      if (null != this.pendingCaption) {\n        var _r16 = this.pendingCaption;\n        var t, e, i, n;\n        if (this.pendingCaption = null, _r16) null === (t = this.delegate) || void 0 === t || null === (e = t.attachmentEditorDidRequestUpdatingAttributesForAttachment) || void 0 === e || e.call(t, {\n          caption: _r16\n        }, this.attachment);else null === (i = this.delegate) || void 0 === i || null === (n = i.attachmentEditorDidRequestRemovingAttributeForAttachment) || void 0 === n || n.call(i, \"caption\", this.attachment);\n      }\n    }\n  }, {\n    key: \"didClickToolbar\",\n    value: function didClickToolbar(t) {\n      return t.preventDefault(), t.stopPropagation();\n    }\n  }, {\n    key: \"didClickActionButton\",\n    value: function didClickActionButton(t) {\n      var e;\n      if (\"remove\" === t.target.getAttribute(\"data-trix-action\")) return null === (e = this.delegate) || void 0 === e ? void 0 : e.attachmentEditorDidRequestRemovalOfAttachment(this.attachment);\n    }\n  }, {\n    key: \"didKeyDownCaption\",\n    value: function didKeyDownCaption(t) {\n      var e, i;\n      if (\"return\" === Hn[t.keyCode]) return t.preventDefault(), this.savePendingCaption(), null === (e = this.delegate) || void 0 === e || null === (i = e.attachmentEditorDidRequestDeselectingAttachment) || void 0 === i ? void 0 : i.call(e, this.attachment);\n    }\n  }, {\n    key: \"didInputCaption\",\n    value: function didInputCaption(t) {\n      this.pendingCaption = t.target.value.replace(/\\s/g, \" \").trim();\n    }\n  }, {\n    key: \"didChangeCaption\",\n    value: function didChangeCaption(t) {\n      return this.savePendingCaption();\n    }\n  }, {\n    key: \"didBlurCaption\",\n    value: function didBlurCaption(t) {\n      return this.savePendingCaption();\n    }\n  }]);\n\n  return Kn;\n}(q);\n\nvar Gn = /*#__PURE__*/function (_q15) {\n  _inherits(Gn, _q15);\n\n  var _super32 = _createSuper(Gn);\n\n  function Gn(t, i) {\n    var _this52;\n\n    _classCallCheck(this, Gn);\n\n    _this52 = _super32.apply(this, arguments), _this52.didFocus = _this52.didFocus.bind(_assertThisInitialized(_this52)), _this52.didBlur = _this52.didBlur.bind(_assertThisInitialized(_this52)), _this52.didClickAttachment = _this52.didClickAttachment.bind(_assertThisInitialized(_this52)), _this52.element = t, _this52.composition = i, _this52.documentView = new Ci(_this52.composition.document, {\n      element: _this52.element\n    }), b(\"focus\", {\n      onElement: _this52.element,\n      withCallback: _this52.didFocus\n    }), b(\"blur\", {\n      onElement: _this52.element,\n      withCallback: _this52.didBlur\n    }), b(\"click\", {\n      onElement: _this52.element,\n      matchingSelector: \"a[contenteditable=false]\",\n      preventDefault: !0\n    }), b(\"mousedown\", {\n      onElement: _this52.element,\n      matchingSelector: e,\n      withCallback: _this52.didClickAttachment\n    }), b(\"click\", {\n      onElement: _this52.element,\n      matchingSelector: \"a\".concat(e),\n      preventDefault: !0\n    });\n    return _this52;\n  }\n\n  _createClass(Gn, [{\n    key: \"didFocus\",\n    value: function didFocus(t) {\n      var _this53 = this;\n\n      var e;\n\n      var i = function i() {\n        var t, e;\n        if (!_this53.focused) return _this53.focused = !0, null === (t = _this53.delegate) || void 0 === t || null === (e = t.compositionControllerDidFocus) || void 0 === e ? void 0 : e.call(t);\n      };\n\n      return (null === (e = this.blurPromise) || void 0 === e ? void 0 : e.then(i)) || i();\n    }\n  }, {\n    key: \"didBlur\",\n    value: function didBlur(t) {\n      var _this54 = this;\n\n      this.blurPromise = new Promise(function (t) {\n        return Rt(function () {\n          var e, i;\n          x(_this54.element) || (_this54.focused = null, null === (e = _this54.delegate) || void 0 === e || null === (i = e.compositionControllerDidBlur) || void 0 === i || i.call(e));\n          return _this54.blurPromise = null, t();\n        });\n      });\n    }\n  }, {\n    key: \"didClickAttachment\",\n    value: function didClickAttachment(t, e) {\n      var i, n;\n      var r = this.findAttachmentForElement(e),\n          o = !!y(t.target, {\n        matchingSelector: \"figcaption\"\n      });\n      return null === (i = this.delegate) || void 0 === i || null === (n = i.compositionControllerDidSelectAttachment) || void 0 === n ? void 0 : n.call(i, r, {\n        editCaption: o\n      });\n    }\n  }, {\n    key: \"getSerializableElement\",\n    value: function getSerializableElement() {\n      return this.isEditingAttachment() ? this.documentView.shadowElement : this.element;\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var t, e, i, n, r, o;\n      (this.revision !== this.composition.revision && (this.documentView.setDocument(this.composition.document), this.documentView.render(), this.revision = this.composition.revision), this.canSyncDocumentView() && !this.documentView.isSynced()) && (null === (i = this.delegate) || void 0 === i || null === (n = i.compositionControllerWillSyncDocumentView) || void 0 === n || n.call(i), this.documentView.sync(), null === (r = this.delegate) || void 0 === r || null === (o = r.compositionControllerDidSyncDocumentView) || void 0 === o || o.call(r));\n      return null === (t = this.delegate) || void 0 === t || null === (e = t.compositionControllerDidRender) || void 0 === e ? void 0 : e.call(t);\n    }\n  }, {\n    key: \"rerenderViewForObject\",\n    value: function rerenderViewForObject(t) {\n      return this.invalidateViewForObject(t), this.render();\n    }\n  }, {\n    key: \"invalidateViewForObject\",\n    value: function invalidateViewForObject(t) {\n      return this.documentView.invalidateViewForObject(t);\n    }\n  }, {\n    key: \"isViewCachingEnabled\",\n    value: function isViewCachingEnabled() {\n      return this.documentView.isViewCachingEnabled();\n    }\n  }, {\n    key: \"enableViewCaching\",\n    value: function enableViewCaching() {\n      return this.documentView.enableViewCaching();\n    }\n  }, {\n    key: \"disableViewCaching\",\n    value: function disableViewCaching() {\n      return this.documentView.disableViewCaching();\n    }\n  }, {\n    key: \"refreshViewCache\",\n    value: function refreshViewCache() {\n      return this.documentView.garbageCollectCachedViews();\n    }\n  }, {\n    key: \"isEditingAttachment\",\n    value: function isEditingAttachment() {\n      return !!this.attachmentEditor;\n    }\n  }, {\n    key: \"installAttachmentEditorForAttachment\",\n    value: function installAttachmentEditorForAttachment(t, e) {\n      var i;\n      if ((null === (i = this.attachmentEditor) || void 0 === i ? void 0 : i.attachment) === t) return;\n      var n = this.documentView.findElementForObject(t);\n      if (!n) return;\n      this.uninstallAttachmentEditor();\n      var r = this.composition.document.getAttachmentPieceForAttachment(t);\n      this.attachmentEditor = new Kn(r, n, this.element, e), this.attachmentEditor.delegate = this;\n    }\n  }, {\n    key: \"uninstallAttachmentEditor\",\n    value: function uninstallAttachmentEditor() {\n      var t;\n      return null === (t = this.attachmentEditor) || void 0 === t ? void 0 : t.uninstall();\n    }\n  }, {\n    key: \"didUninstallAttachmentEditor\",\n    value: function didUninstallAttachmentEditor() {\n      return this.attachmentEditor = null, this.render();\n    }\n  }, {\n    key: \"attachmentEditorDidRequestUpdatingAttributesForAttachment\",\n    value: function attachmentEditorDidRequestUpdatingAttributesForAttachment(t, e) {\n      var i, n;\n      return null === (i = this.delegate) || void 0 === i || null === (n = i.compositionControllerWillUpdateAttachment) || void 0 === n || n.call(i, e), this.composition.updateAttributesForAttachment(t, e);\n    }\n  }, {\n    key: \"attachmentEditorDidRequestRemovingAttributeForAttachment\",\n    value: function attachmentEditorDidRequestRemovingAttributeForAttachment(t, e) {\n      var i, n;\n      return null === (i = this.delegate) || void 0 === i || null === (n = i.compositionControllerWillUpdateAttachment) || void 0 === n || n.call(i, e), this.composition.removeAttributeForAttachment(t, e);\n    }\n  }, {\n    key: \"attachmentEditorDidRequestRemovalOfAttachment\",\n    value: function attachmentEditorDidRequestRemovalOfAttachment(t) {\n      var e, i;\n      return null === (e = this.delegate) || void 0 === e || null === (i = e.compositionControllerDidRequestRemovalOfAttachment) || void 0 === i ? void 0 : i.call(e, t);\n    }\n  }, {\n    key: \"attachmentEditorDidRequestDeselectingAttachment\",\n    value: function attachmentEditorDidRequestDeselectingAttachment(t) {\n      var e, i;\n      return null === (e = this.delegate) || void 0 === e || null === (i = e.compositionControllerDidRequestDeselectingAttachment) || void 0 === i ? void 0 : i.call(e, t);\n    }\n  }, {\n    key: \"canSyncDocumentView\",\n    value: function canSyncDocumentView() {\n      return !this.isEditingAttachment();\n    }\n  }, {\n    key: \"findAttachmentForElement\",\n    value: function findAttachmentForElement(t) {\n      return this.composition.document.getAttachmentById(parseInt(t.dataset.trixId, 10));\n    }\n  }]);\n\n  return Gn;\n}(q);\n\nvar Yn = /*#__PURE__*/function (_q16) {\n  _inherits(Yn, _q16);\n\n  var _super33 = _createSuper(Yn);\n\n  function Yn() {\n    _classCallCheck(this, Yn);\n\n    return _super33.apply(this, arguments);\n  }\n\n  return Yn;\n}(q);\n\nvar $n = \"data-trix-mutable\",\n    Xn = \"[\".concat($n, \"]\"),\n    Zn = {\n  attributes: !0,\n  childList: !0,\n  characterData: !0,\n  characterDataOldValue: !0,\n  subtree: !0\n};\n\nvar Qn = /*#__PURE__*/function (_q17) {\n  _inherits(Qn, _q17);\n\n  var _super34 = _createSuper(Qn);\n\n  function Qn(t) {\n    var _this55;\n\n    _classCallCheck(this, Qn);\n\n    _this55 = _super34.call(this, t), _this55.didMutate = _this55.didMutate.bind(_assertThisInitialized(_this55)), _this55.element = t, _this55.observer = new window.MutationObserver(_this55.didMutate), _this55.start();\n    return _this55;\n  }\n\n  _createClass(Qn, [{\n    key: \"start\",\n    value: function start() {\n      return this.reset(), this.observer.observe(this.element, Zn);\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      return this.observer.disconnect();\n    }\n  }, {\n    key: \"didMutate\",\n    value: function didMutate(t) {\n      var _this$mutations;\n\n      var e, i;\n      if ((_this$mutations = this.mutations).push.apply(_this$mutations, _toConsumableArray(Array.from(this.findSignificantMutations(t) || []))), this.mutations.length) return null === (e = this.delegate) || void 0 === e || null === (i = e.elementDidMutate) || void 0 === i || i.call(e, this.getMutationSummary()), this.reset();\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this.mutations = [];\n    }\n  }, {\n    key: \"findSignificantMutations\",\n    value: function findSignificantMutations(t) {\n      var _this56 = this;\n\n      return t.filter(function (t) {\n        return _this56.mutationIsSignificant(t);\n      });\n    }\n  }, {\n    key: \"mutationIsSignificant\",\n    value: function mutationIsSignificant(t) {\n      if (this.nodeIsMutable(t.target)) return !1;\n\n      for (var _i40 = 0, _Array$from20 = Array.from(this.nodesModifiedByMutation(t)); _i40 < _Array$from20.length; _i40++) {\n        var _e47 = _Array$from20[_i40];\n        if (this.nodeIsSignificant(_e47)) return !0;\n      }\n\n      return !1;\n    }\n  }, {\n    key: \"nodeIsSignificant\",\n    value: function nodeIsSignificant(t) {\n      return t !== this.element && !this.nodeIsMutable(t) && !M(t);\n    }\n  }, {\n    key: \"nodeIsMutable\",\n    value: function nodeIsMutable(t) {\n      return y(t, {\n        matchingSelector: Xn\n      });\n    }\n  }, {\n    key: \"nodesModifiedByMutation\",\n    value: function nodesModifiedByMutation(t) {\n      var e = [];\n\n      switch (t.type) {\n        case \"attributes\":\n          t.attributeName !== $n && e.push(t.target);\n          break;\n\n        case \"characterData\":\n          e.push(t.target.parentNode), e.push(t.target);\n          break;\n\n        case \"childList\":\n          e.push.apply(e, _toConsumableArray(Array.from(t.addedNodes || []))), e.push.apply(e, _toConsumableArray(Array.from(t.removedNodes || [])));\n      }\n\n      return e;\n    }\n  }, {\n    key: \"getMutationSummary\",\n    value: function getMutationSummary() {\n      return this.getTextMutationSummary();\n    }\n  }, {\n    key: \"getTextMutationSummary\",\n    value: function getTextMutationSummary() {\n      var _this$getTextChangesF = this.getTextChangesFromCharacterData(),\n          t = _this$getTextChangesF.additions,\n          e = _this$getTextChangesF.deletions,\n          i = this.getTextChangesFromChildList();\n\n      Array.from(i.additions).forEach(function (e) {\n        Array.from(t).includes(e) || t.push(e);\n      }), e.push.apply(e, _toConsumableArray(Array.from(i.deletions || [])));\n      var n = {},\n          r = t.join(\"\");\n      r && (n.textAdded = r);\n      var o = e.join(\"\");\n      return o && (n.textDeleted = o), n;\n    }\n  }, {\n    key: \"getMutationsByType\",\n    value: function getMutationsByType(t) {\n      return Array.from(this.mutations).filter(function (e) {\n        return e.type === t;\n      });\n    }\n  }, {\n    key: \"getTextChangesFromChildList\",\n    value: function getTextChangesFromChildList() {\n      var t, e;\n      var i = [],\n          n = [];\n      Array.from(this.getMutationsByType(\"childList\")).forEach(function (t) {\n        i.push.apply(i, _toConsumableArray(Array.from(t.addedNodes || []))), n.push.apply(n, _toConsumableArray(Array.from(t.removedNodes || [])));\n      });\n      0 === i.length && 1 === n.length && I(n[0]) ? (t = [], e = [\"\\n\"]) : (t = tr(i), e = tr(n));\n      var r = t.filter(function (t, i) {\n        return t !== e[i];\n      }).map(Wt),\n          o = e.filter(function (e, i) {\n        return e !== t[i];\n      }).map(Wt);\n      return {\n        additions: r,\n        deletions: o\n      };\n    }\n  }, {\n    key: \"getTextChangesFromCharacterData\",\n    value: function getTextChangesFromCharacterData() {\n      var t, e;\n      var i = this.getMutationsByType(\"characterData\");\n\n      if (i.length) {\n        var _n28 = i[0],\n            _r17 = i[i.length - 1],\n            _o10 = function (t, e, _zt, _zt2, _zt3, _zt4) {\n          var i, n;\n          return t = X.box(t), (e = X.box(e)).length < t.length ? (_zt = zt(t, e), _zt2 = _slicedToArray(_zt, 2), n = _zt2[0], i = _zt2[1], _zt) : (_zt3 = zt(e, t), _zt4 = _slicedToArray(_zt3, 2), i = _zt4[0], n = _zt4[1], _zt3), {\n            added: i,\n            removed: n\n          };\n        }(Wt(_n28.oldValue), Wt(_r17.target.data));\n\n        t = _o10.added, e = _o10.removed;\n      }\n\n      return {\n        additions: t ? [t] : [],\n        deletions: e ? [e] : []\n      };\n    }\n  }]);\n\n  return Qn;\n}(q);\n\nvar tr = function tr() {\n  var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n  var e = [];\n\n  for (var _i41 = 0, _Array$from21 = Array.from(t); _i41 < _Array$from21.length; _i41++) {\n    var _i42 = _Array$from21[_i41];\n\n    switch (_i42.nodeType) {\n      case Node.TEXT_NODE:\n        e.push(_i42.data);\n        break;\n\n      case Node.ELEMENT_NODE:\n        \"br\" === k(_i42) ? e.push(\"\\n\") : e.push.apply(e, _toConsumableArray(Array.from(tr(_i42.childNodes) || [])));\n    }\n  }\n\n  return e;\n};\n\nvar er = /*#__PURE__*/function (_ee2) {\n  _inherits(er, _ee2);\n\n  var _super35 = _createSuper(er);\n\n  function er(t) {\n    var _this57;\n\n    _classCallCheck(this, er);\n\n    _this57 = _super35.apply(this, arguments), _this57.file = t;\n    return _this57;\n  }\n\n  _createClass(er, [{\n    key: \"perform\",\n    value: function perform(t) {\n      var _this58 = this;\n\n      var e = new FileReader();\n      return e.onerror = function () {\n        return t(!1);\n      }, e.onload = function () {\n        e.onerror = null;\n\n        try {\n          e.abort();\n        } catch (t) {}\n\n        return t(!0, _this58.file);\n      }, e.readAsArrayBuffer(this.file);\n    }\n  }]);\n\n  return er;\n}(ee);\n\nvar ir = /*#__PURE__*/function () {\n  function ir(t) {\n    _classCallCheck(this, ir);\n\n    this.element = t;\n  }\n\n  _createClass(ir, [{\n    key: \"shouldIgnore\",\n    value: function shouldIgnore(t) {\n      return !!a.samsungAndroid && (this.previousEvent = this.event, this.event = t, this.checkSamsungKeyboardBuggyModeStart(), this.checkSamsungKeyboardBuggyModeEnd(), this.buggyMode);\n    }\n  }, {\n    key: \"checkSamsungKeyboardBuggyModeStart\",\n    value: function checkSamsungKeyboardBuggyModeStart() {\n      this.insertingLongTextAfterUnidentifiedChar() && nr(this.element.innerText, this.event.data) && (this.buggyMode = !0, this.event.preventDefault());\n    }\n  }, {\n    key: \"checkSamsungKeyboardBuggyModeEnd\",\n    value: function checkSamsungKeyboardBuggyModeEnd() {\n      this.buggyMode && \"insertText\" !== this.event.inputType && (this.buggyMode = !1);\n    }\n  }, {\n    key: \"insertingLongTextAfterUnidentifiedChar\",\n    value: function insertingLongTextAfterUnidentifiedChar() {\n      var t;\n      return this.isBeforeInputInsertText() && this.previousEventWasUnidentifiedKeydown() && (null === (t = this.event.data) || void 0 === t ? void 0 : t.length) > 50;\n    }\n  }, {\n    key: \"isBeforeInputInsertText\",\n    value: function isBeforeInputInsertText() {\n      return \"beforeinput\" === this.event.type && \"insertText\" === this.event.inputType;\n    }\n  }, {\n    key: \"previousEventWasUnidentifiedKeydown\",\n    value: function previousEventWasUnidentifiedKeydown() {\n      var t, e;\n      return \"keydown\" === (null === (t = this.previousEvent) || void 0 === t ? void 0 : t.type) && \"Unidentified\" === (null === (e = this.previousEvent) || void 0 === e ? void 0 : e.key);\n    }\n  }]);\n\n  return ir;\n}();\n\nvar nr = function nr(t, e) {\n  return or(t) === or(e);\n},\n    rr = new RegExp(\"(\".concat(\"\", \"|\").concat(d, \"|\").concat(g, \"|\\\\s)+\"), \"g\"),\n    or = function or(t) {\n  return t.replace(rr, \" \").trim();\n};\n\nvar sr = /*#__PURE__*/function (_q18) {\n  _inherits(sr, _q18);\n\n  var _super36 = _createSuper(sr);\n\n  function sr(t) {\n    var _this59;\n\n    _classCallCheck(this, sr);\n\n    _this59 = _super36.apply(this, arguments), _this59.element = t, _this59.mutationObserver = new Qn(_this59.element), _this59.mutationObserver.delegate = _assertThisInitialized(_this59), _this59.flakyKeyboardDetector = new ir(_this59.element);\n\n    for (var _t50 in _this59.constructor.events) {\n      b(_t50, {\n        onElement: _this59.element,\n        withCallback: _this59.handlerFor(_t50)\n      });\n    }\n\n    return _this59;\n  }\n\n  _createClass(sr, [{\n    key: \"elementDidMutate\",\n    value: function elementDidMutate(t) {}\n  }, {\n    key: \"editorWillSyncDocumentView\",\n    value: function editorWillSyncDocumentView() {\n      return this.mutationObserver.stop();\n    }\n  }, {\n    key: \"editorDidSyncDocumentView\",\n    value: function editorDidSyncDocumentView() {\n      return this.mutationObserver.start();\n    }\n  }, {\n    key: \"requestRender\",\n    value: function requestRender() {\n      var t, e;\n      return null === (t = this.delegate) || void 0 === t || null === (e = t.inputControllerDidRequestRender) || void 0 === e ? void 0 : e.call(t);\n    }\n  }, {\n    key: \"requestReparse\",\n    value: function requestReparse() {\n      var t, e;\n      return null === (t = this.delegate) || void 0 === t || null === (e = t.inputControllerDidRequestReparse) || void 0 === e || e.call(t), this.requestRender();\n    }\n  }, {\n    key: \"attachFiles\",\n    value: function attachFiles(t) {\n      var _this60 = this;\n\n      var e = Array.from(t).map(function (t) {\n        return new er(t);\n      });\n      return Promise.all(e).then(function (t) {\n        _this60.handleInput(function () {\n          var e, i;\n          return null === (e = this.delegate) || void 0 === e || e.inputControllerWillAttachFiles(), null === (i = this.responder) || void 0 === i || i.insertFiles(t), this.requestRender();\n        });\n      });\n    }\n  }, {\n    key: \"handlerFor\",\n    value: function handlerFor(t) {\n      var _this61 = this;\n\n      return function (e) {\n        e.defaultPrevented || _this61.handleInput(function () {\n          if (!x(_this61.element)) {\n            if (_this61.flakyKeyboardDetector.shouldIgnore(e)) return;\n            _this61.eventName = t, _this61.constructor.events[t].call(_this61, e);\n          }\n        });\n      };\n    }\n  }, {\n    key: \"handleInput\",\n    value: function handleInput(t) {\n      try {\n        var e;\n        null === (e = this.delegate) || void 0 === e || e.inputControllerWillHandleInput(), t.call(this);\n      } finally {\n        var i;\n        null === (i = this.delegate) || void 0 === i || i.inputControllerDidHandleInput();\n      }\n    }\n  }, {\n    key: \"createLinkHTML\",\n    value: function createLinkHTML(t, e) {\n      var i = document.createElement(\"a\");\n      return i.href = t, i.textContent = e || t, i.outerHTML;\n    }\n  }]);\n\n  return sr;\n}(q);\n\nvar ar;\nwi(sr, \"events\", {});\nvar lr = z.browser,\n    cr = z.keyNames;\nvar ur = 0;\n\nvar hr = /*#__PURE__*/function (_sr) {\n  _inherits(hr, _sr);\n\n  var _super37 = _createSuper(hr);\n\n  function hr() {\n    var _this62;\n\n    _classCallCheck(this, hr);\n\n    _this62 = _super37.apply(this, arguments), _this62.resetInputSummary();\n    return _this62;\n  }\n\n  _createClass(hr, [{\n    key: \"setInputSummary\",\n    value: function setInputSummary() {\n      var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n      this.inputSummary.eventName = this.eventName;\n\n      for (var _e48 in t) {\n        var _i43 = t[_e48];\n        this.inputSummary[_e48] = _i43;\n      }\n\n      return this.inputSummary;\n    }\n  }, {\n    key: \"resetInputSummary\",\n    value: function resetInputSummary() {\n      this.inputSummary = {};\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      return this.resetInputSummary(), Ft.reset();\n    }\n  }, {\n    key: \"elementDidMutate\",\n    value: function elementDidMutate(t) {\n      var e, i;\n      return this.isComposing() ? null === (e = this.delegate) || void 0 === e || null === (i = e.inputControllerDidAllowUnhandledInput) || void 0 === i ? void 0 : i.call(e) : this.handleInput(function () {\n        return this.mutationIsSignificant(t) && (this.mutationIsExpected(t) ? this.requestRender() : this.requestReparse()), this.reset();\n      });\n    }\n  }, {\n    key: \"mutationIsExpected\",\n    value: function mutationIsExpected(t) {\n      var e = t.textAdded,\n          i = t.textDeleted;\n      if (this.inputSummary.preferDocument) return !0;\n      var n = null != e ? e === this.inputSummary.textAdded : !this.inputSummary.textAdded,\n          r = null != i ? this.inputSummary.didDelete : !this.inputSummary.didDelete,\n          o = [\"\\n\", \" \\n\"].includes(e) && !n,\n          s = \"\\n\" === i && !r;\n\n      if (o && !s || s && !o) {\n        var _t51 = this.getSelectedRange();\n\n        if (_t51) {\n          var a;\n\n          var _i44 = o ? e.replace(/\\n$/, \"\").length || -1 : (null == e ? void 0 : e.length) || 1;\n\n          if (null !== (a = this.responder) && void 0 !== a && a.positionIsBlockBreak(_t51[1] + _i44)) return !0;\n        }\n      }\n\n      return n && r;\n    }\n  }, {\n    key: \"mutationIsSignificant\",\n    value: function mutationIsSignificant(t) {\n      var e;\n      var i = Object.keys(t).length > 0,\n          n = \"\" === (null === (e = this.compositionInput) || void 0 === e ? void 0 : e.getEndData());\n      return i || !n;\n    }\n  }, {\n    key: \"getCompositionInput\",\n    value: function getCompositionInput() {\n      if (this.isComposing()) return this.compositionInput;\n      this.compositionInput = new fr(this);\n    }\n  }, {\n    key: \"isComposing\",\n    value: function isComposing() {\n      return this.compositionInput && !this.compositionInput.isEnded();\n    }\n  }, {\n    key: \"deleteInDirection\",\n    value: function deleteInDirection(t, e) {\n      var i;\n      return !1 !== (null === (i = this.responder) || void 0 === i ? void 0 : i.deleteInDirection(t)) ? this.setInputSummary({\n        didDelete: !0\n      }) : e ? (e.preventDefault(), this.requestRender()) : void 0;\n    }\n  }, {\n    key: \"serializeSelectionToDataTransfer\",\n    value: function serializeSelectionToDataTransfer(t) {\n      var e;\n      if (!function (t) {\n        if (null == t || !t.setData) return !1;\n\n        for (var _e49 in Ct) {\n          var _i45 = Ct[_e49];\n\n          try {\n            if (t.setData(_e49, _i45), !t.getData(_e49) === _i45) return !1;\n          } catch (t) {\n            return !1;\n          }\n        }\n\n        return !0;\n      }(t)) return;\n      var i = null === (e = this.responder) || void 0 === e ? void 0 : e.getSelectedDocument().toSerializableDocument();\n      return t.setData(\"application/x-trix-document\", JSON.stringify(i)), t.setData(\"text/html\", Ci.render(i).innerHTML), t.setData(\"text/plain\", i.toString().replace(/\\n$/, \"\")), !0;\n    }\n  }, {\n    key: \"canAcceptDataTransfer\",\n    value: function canAcceptDataTransfer(t) {\n      var e = {};\n      return Array.from((null == t ? void 0 : t.types) || []).forEach(function (t) {\n        e[t] = !0;\n      }), e.Files || e[\"application/x-trix-document\"] || e[\"text/html\"] || e[\"text/plain\"];\n    }\n  }, {\n    key: \"getPastedHTMLUsingHiddenElement\",\n    value: function getPastedHTMLUsingHiddenElement(t) {\n      var _this63 = this;\n\n      var e = this.getSelectedRange(),\n          i = {\n        position: \"absolute\",\n        left: \"\".concat(window.pageXOffset, \"px\"),\n        top: \"\".concat(window.pageYOffset, \"px\"),\n        opacity: 0\n      },\n          n = T({\n        style: i,\n        tagName: \"div\",\n        editable: !0\n      });\n      return document.body.appendChild(n), n.focus(), requestAnimationFrame(function () {\n        var i = n.innerHTML;\n        return S(n), _this63.setSelectedRange(e), t(i);\n      });\n    }\n  }]);\n\n  return hr;\n}(sr);\n\nwi(hr, \"events\", {\n  keydown: function keydown(t) {\n    this.isComposing() || this.resetInputSummary(), this.inputSummary.didInput = !0;\n    var e = cr[t.keyCode];\n\n    if (e) {\n      var i;\n      var _n29 = this.keys;\n      [\"ctrl\", \"alt\", \"shift\", \"meta\"].forEach(function (e) {\n        var i;\n        t[\"\".concat(e, \"Key\")] && (\"ctrl\" === e && (e = \"control\"), _n29 = null === (i = _n29) || void 0 === i ? void 0 : i[e]);\n      }), null != (null === (i = _n29) || void 0 === i ? void 0 : i[e]) && (this.setInputSummary({\n        keyName: e\n      }), Ft.reset(), _n29[e].call(this, t));\n    }\n\n    if (St(t)) {\n      var _e50 = String.fromCharCode(t.keyCode).toLowerCase();\n\n      if (_e50) {\n        var n;\n\n        var _i46 = [\"alt\", \"shift\"].map(function (e) {\n          if (t[\"\".concat(e, \"Key\")]) return e;\n        }).filter(function (t) {\n          return t;\n        });\n\n        _i46.push(_e50), null !== (n = this.delegate) && void 0 !== n && n.inputControllerDidReceiveKeyboardCommand(_i46) && t.preventDefault();\n      }\n    }\n  },\n  keypress: function keypress(t) {\n    if (null != this.inputSummary.eventName) return;\n    if (t.metaKey) return;\n    if (t.ctrlKey && !t.altKey) return;\n    var e = mr(t);\n    var i, n;\n    return e ? (null === (i = this.delegate) || void 0 === i || i.inputControllerWillPerformTyping(), null === (n = this.responder) || void 0 === n || n.insertString(e), this.setInputSummary({\n      textAdded: e,\n      didDelete: this.selectionIsExpanded()\n    })) : void 0;\n  },\n  textInput: function textInput(t) {\n    var e = t.data,\n        i = this.inputSummary.textAdded;\n\n    if (i && i !== e && i.toUpperCase() === e) {\n      var n;\n\n      var _t52 = this.getSelectedRange();\n\n      return this.setSelectedRange([_t52[0], _t52[1] + i.length]), null === (n = this.responder) || void 0 === n || n.insertString(e), this.setInputSummary({\n        textAdded: e\n      }), this.setSelectedRange(_t52);\n    }\n  },\n  dragenter: function dragenter(t) {\n    t.preventDefault();\n  },\n  dragstart: function dragstart(t) {\n    var e, i;\n    return this.serializeSelectionToDataTransfer(t.dataTransfer), this.draggedRange = this.getSelectedRange(), null === (e = this.delegate) || void 0 === e || null === (i = e.inputControllerDidStartDrag) || void 0 === i ? void 0 : i.call(e);\n  },\n  dragover: function dragover(t) {\n    if (this.draggedRange || this.canAcceptDataTransfer(t.dataTransfer)) {\n      t.preventDefault();\n      var _n30 = {\n        x: t.clientX,\n        y: t.clientY\n      };\n      var e, i;\n      if (!Tt(_n30, this.draggingPoint)) return this.draggingPoint = _n30, null === (e = this.delegate) || void 0 === e || null === (i = e.inputControllerDidReceiveDragOverPoint) || void 0 === i ? void 0 : i.call(e, this.draggingPoint);\n    }\n  },\n  dragend: function dragend(t) {\n    var e, i;\n    null === (e = this.delegate) || void 0 === e || null === (i = e.inputControllerDidCancelDrag) || void 0 === i || i.call(e), this.draggedRange = null, this.draggingPoint = null;\n  },\n  drop: function drop(t) {\n    var e, i;\n    t.preventDefault();\n    var n = null === (e = t.dataTransfer) || void 0 === e ? void 0 : e.files,\n        r = t.dataTransfer.getData(\"application/x-trix-document\"),\n        o = {\n      x: t.clientX,\n      y: t.clientY\n    };\n    if (null === (i = this.responder) || void 0 === i || i.setLocationRangeFromPointRange(o), null != n && n.length) this.attachFiles(n);else if (this.draggedRange) {\n      var s, a;\n      null === (s = this.delegate) || void 0 === s || s.inputControllerWillMoveText(), null === (a = this.responder) || void 0 === a || a.moveTextFromRange(this.draggedRange), this.draggedRange = null, this.requestRender();\n    } else if (r) {\n      var l;\n\n      var _t53 = on.fromJSONString(r);\n\n      null === (l = this.responder) || void 0 === l || l.insertDocument(_t53), this.requestRender();\n    }\n    this.draggedRange = null, this.draggingPoint = null;\n  },\n  cut: function cut(t) {\n    var e, i;\n    if (null !== (e = this.responder) && void 0 !== e && e.selectionIsExpanded() && (this.serializeSelectionToDataTransfer(t.clipboardData) && t.preventDefault(), null === (i = this.delegate) || void 0 === i || i.inputControllerWillCutText(), this.deleteInDirection(\"backward\"), t.defaultPrevented)) return this.requestRender();\n  },\n  copy: function copy(t) {\n    var e;\n    null !== (e = this.responder) && void 0 !== e && e.selectionIsExpanded() && this.serializeSelectionToDataTransfer(t.clipboardData) && t.preventDefault();\n  },\n  paste: function paste(t) {\n    var _this64 = this;\n\n    var e = t.clipboardData || t.testClipboardData,\n        i = {\n      clipboard: e\n    };\n    if (!e || pr(t)) return void this.getPastedHTMLUsingHiddenElement(function (t) {\n      var e, n, r;\n      return i.type = \"text/html\", i.html = t, null === (e = _this64.delegate) || void 0 === e || e.inputControllerWillPaste(i), null === (n = _this64.responder) || void 0 === n || n.insertHTML(i.html), _this64.requestRender(), null === (r = _this64.delegate) || void 0 === r ? void 0 : r.inputControllerDidPaste(i);\n    });\n    var n = e.getData(\"URL\"),\n        r = e.getData(\"text/html\"),\n        o = e.getData(\"public.url-name\");\n\n    if (n) {\n      var s, a, l;\n\n      var _t54;\n\n      i.type = \"text/html\", _t54 = o ? Vt(o).trim() : n, i.html = this.createLinkHTML(n, _t54), null === (s = this.delegate) || void 0 === s || s.inputControllerWillPaste(i), this.setInputSummary({\n        textAdded: _t54,\n        didDelete: this.selectionIsExpanded()\n      }), null === (a = this.responder) || void 0 === a || a.insertHTML(i.html), this.requestRender(), null === (l = this.delegate) || void 0 === l || l.inputControllerDidPaste(i);\n    } else if (Et(e)) {\n      var c, u, h;\n      i.type = \"text/plain\", i.string = e.getData(\"text/plain\"), null === (c = this.delegate) || void 0 === c || c.inputControllerWillPaste(i), this.setInputSummary({\n        textAdded: i.string,\n        didDelete: this.selectionIsExpanded()\n      }), null === (u = this.responder) || void 0 === u || u.insertString(i.string), this.requestRender(), null === (h = this.delegate) || void 0 === h || h.inputControllerDidPaste(i);\n    } else if (r) {\n      var d, g, m;\n      i.type = \"text/html\", i.html = r, null === (d = this.delegate) || void 0 === d || d.inputControllerWillPaste(i), null === (g = this.responder) || void 0 === g || g.insertHTML(i.html), this.requestRender(), null === (m = this.delegate) || void 0 === m || m.inputControllerDidPaste(i);\n    } else if (Array.from(e.types).includes(\"Files\")) {\n      var p, f;\n\n      var _t55 = null === (p = e.items) || void 0 === p || null === (p = p[0]) || void 0 === p || null === (f = p.getAsFile) || void 0 === f ? void 0 : f.call(p);\n\n      if (_t55) {\n        var b, v, A;\n\n        var _e51 = dr(_t55);\n\n        !_t55.name && _e51 && (_t55.name = \"pasted-file-\".concat(++ur, \".\").concat(_e51)), i.type = \"File\", i.file = _t55, null === (b = this.delegate) || void 0 === b || b.inputControllerWillAttachFiles(), null === (v = this.responder) || void 0 === v || v.insertFile(i.file), this.requestRender(), null === (A = this.delegate) || void 0 === A || A.inputControllerDidPaste(i);\n      }\n    }\n\n    t.preventDefault();\n  },\n  compositionstart: function compositionstart(t) {\n    return this.getCompositionInput().start(t.data);\n  },\n  compositionupdate: function compositionupdate(t) {\n    return this.getCompositionInput().update(t.data);\n  },\n  compositionend: function compositionend(t) {\n    return this.getCompositionInput().end(t.data);\n  },\n  beforeinput: function beforeinput(t) {\n    this.inputSummary.didInput = !0;\n  },\n  input: function input(t) {\n    return this.inputSummary.didInput = !0, t.stopPropagation();\n  }\n}), wi(hr, \"keys\", {\n  backspace: function backspace(t) {\n    var e;\n    return null === (e = this.delegate) || void 0 === e || e.inputControllerWillPerformTyping(), this.deleteInDirection(\"backward\", t);\n  },\n  delete: function _delete(t) {\n    var e;\n    return null === (e = this.delegate) || void 0 === e || e.inputControllerWillPerformTyping(), this.deleteInDirection(\"forward\", t);\n  },\n  return: function _return(t) {\n    var e, i;\n    return this.setInputSummary({\n      preferDocument: !0\n    }), null === (e = this.delegate) || void 0 === e || e.inputControllerWillPerformTyping(), null === (i = this.responder) || void 0 === i ? void 0 : i.insertLineBreak();\n  },\n  tab: function tab(t) {\n    var e, i;\n    null !== (e = this.responder) && void 0 !== e && e.canIncreaseNestingLevel() && (null === (i = this.responder) || void 0 === i || i.increaseNestingLevel(), this.requestRender(), t.preventDefault());\n  },\n  left: function left(t) {\n    var e;\n    if (this.selectionIsInCursorTarget()) return t.preventDefault(), null === (e = this.responder) || void 0 === e ? void 0 : e.moveCursorInDirection(\"backward\");\n  },\n  right: function right(t) {\n    var e;\n    if (this.selectionIsInCursorTarget()) return t.preventDefault(), null === (e = this.responder) || void 0 === e ? void 0 : e.moveCursorInDirection(\"forward\");\n  },\n  control: {\n    d: function d(t) {\n      var e;\n      return null === (e = this.delegate) || void 0 === e || e.inputControllerWillPerformTyping(), this.deleteInDirection(\"forward\", t);\n    },\n    h: function h(t) {\n      var e;\n      return null === (e = this.delegate) || void 0 === e || e.inputControllerWillPerformTyping(), this.deleteInDirection(\"backward\", t);\n    },\n    o: function o(t) {\n      var e, i;\n      return t.preventDefault(), null === (e = this.delegate) || void 0 === e || e.inputControllerWillPerformTyping(), null === (i = this.responder) || void 0 === i || i.insertString(\"\\n\", {\n        updatePosition: !1\n      }), this.requestRender();\n    }\n  },\n  shift: {\n    return: function _return(t) {\n      var e, i;\n      null === (e = this.delegate) || void 0 === e || e.inputControllerWillPerformTyping(), null === (i = this.responder) || void 0 === i || i.insertString(\"\\n\"), this.requestRender(), t.preventDefault();\n    },\n    tab: function tab(t) {\n      var e, i;\n      null !== (e = this.responder) && void 0 !== e && e.canDecreaseNestingLevel() && (null === (i = this.responder) || void 0 === i || i.decreaseNestingLevel(), this.requestRender(), t.preventDefault());\n    },\n    left: function left(t) {\n      if (this.selectionIsInCursorTarget()) return t.preventDefault(), this.expandSelectionInDirection(\"backward\");\n    },\n    right: function right(t) {\n      if (this.selectionIsInCursorTarget()) return t.preventDefault(), this.expandSelectionInDirection(\"forward\");\n    }\n  },\n  alt: {\n    backspace: function backspace(t) {\n      var e;\n      return this.setInputSummary({\n        preferDocument: !1\n      }), null === (e = this.delegate) || void 0 === e ? void 0 : e.inputControllerWillPerformTyping();\n    }\n  },\n  meta: {\n    backspace: function backspace(t) {\n      var e;\n      return this.setInputSummary({\n        preferDocument: !1\n      }), null === (e = this.delegate) || void 0 === e ? void 0 : e.inputControllerWillPerformTyping();\n    }\n  }\n}), hr.proxyMethod(\"responder?.getSelectedRange\"), hr.proxyMethod(\"responder?.setSelectedRange\"), hr.proxyMethod(\"responder?.expandSelectionInDirection\"), hr.proxyMethod(\"responder?.selectionIsInCursorTarget\"), hr.proxyMethod(\"responder?.selectionIsExpanded\");\n\nvar dr = function dr(t) {\n  var e;\n  return null === (e = t.type) || void 0 === e || null === (e = e.match(/\\/(\\w+)$/)) || void 0 === e ? void 0 : e[1];\n},\n    gr = !(null === (ar = \" \".codePointAt) || void 0 === ar || !ar.call(\" \", 0)),\n    mr = function mr(t) {\n  if (t.key && gr && t.key.codePointAt(0) === t.keyCode) return t.key;\n  {\n    var _e52;\n\n    if (null === t.which ? _e52 = t.keyCode : 0 !== t.which && 0 !== t.charCode && (_e52 = t.charCode), null != _e52 && \"escape\" !== cr[_e52]) return X.fromCodepoints([_e52]).toString();\n  }\n},\n    pr = function pr(t) {\n  var e = t.clipboardData;\n\n  if (e) {\n    if (e.types.includes(\"text/html\")) {\n      var _iterator8 = _createForOfIteratorHelper(e.types),\n          _step8;\n\n      try {\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n          var _t56 = _step8.value;\n\n          var _i47 = /^CorePasteboardFlavorType/.test(_t56),\n              _n31 = /^dyn\\./.test(_t56) && e.getData(_t56);\n\n          if (_i47 || _n31) return !0;\n        }\n      } catch (err) {\n        _iterator8.e(err);\n      } finally {\n        _iterator8.f();\n      }\n\n      return !1;\n    }\n\n    {\n      var _t57 = e.types.includes(\"com.apple.webarchive\"),\n          _i48 = e.types.includes(\"com.apple.flat-rtfd\");\n\n      return _t57 || _i48;\n    }\n  }\n};\n\nvar fr = /*#__PURE__*/function (_q19) {\n  _inherits(fr, _q19);\n\n  var _super38 = _createSuper(fr);\n\n  function fr(t) {\n    var _this65;\n\n    _classCallCheck(this, fr);\n\n    _this65 = _super38.apply(this, arguments), _this65.inputController = t, _this65.responder = _this65.inputController.responder, _this65.delegate = _this65.inputController.delegate, _this65.inputSummary = _this65.inputController.inputSummary, _this65.data = {};\n    return _this65;\n  }\n\n  _createClass(fr, [{\n    key: \"start\",\n    value: function start(t) {\n      if (this.data.start = t, this.isSignificant()) {\n        var e, i;\n        if (\"keypress\" === this.inputSummary.eventName && this.inputSummary.textAdded) null === (i = this.responder) || void 0 === i || i.deleteInDirection(\"left\");\n        this.selectionIsExpanded() || (this.insertPlaceholder(), this.requestRender()), this.range = null === (e = this.responder) || void 0 === e ? void 0 : e.getSelectedRange();\n      }\n    }\n  }, {\n    key: \"update\",\n    value: function update(t) {\n      if (this.data.update = t, this.isSignificant()) {\n        var _t58 = this.selectPlaceholder();\n\n        _t58 && (this.forgetPlaceholder(), this.range = _t58);\n      }\n    }\n  }, {\n    key: \"end\",\n    value: function end(t) {\n      return this.data.end = t, this.isSignificant() ? (this.forgetPlaceholder(), this.canApplyToDocument() ? (this.setInputSummary({\n        preferDocument: !0,\n        didInput: !1\n      }), null === (e = this.delegate) || void 0 === e || e.inputControllerWillPerformTyping(), null === (i = this.responder) || void 0 === i || i.setSelectedRange(this.range), null === (n = this.responder) || void 0 === n || n.insertString(this.data.end), null === (r = this.responder) || void 0 === r ? void 0 : r.setSelectedRange(this.range[0] + this.data.end.length)) : null != this.data.start || null != this.data.update ? (this.requestReparse(), this.inputController.reset()) : void 0) : this.inputController.reset();\n      var e, i, n, r;\n    }\n  }, {\n    key: \"getEndData\",\n    value: function getEndData() {\n      return this.data.end;\n    }\n  }, {\n    key: \"isEnded\",\n    value: function isEnded() {\n      return null != this.getEndData();\n    }\n  }, {\n    key: \"isSignificant\",\n    value: function isSignificant() {\n      return !lr.composesExistingText || this.inputSummary.didInput;\n    }\n  }, {\n    key: \"canApplyToDocument\",\n    value: function canApplyToDocument() {\n      var t, e;\n      return 0 === (null === (t = this.data.start) || void 0 === t ? void 0 : t.length) && (null === (e = this.data.end) || void 0 === e ? void 0 : e.length) > 0 && this.range;\n    }\n  }]);\n\n  return fr;\n}(q);\n\nfr.proxyMethod(\"inputController.setInputSummary\"), fr.proxyMethod(\"inputController.requestRender\"), fr.proxyMethod(\"inputController.requestReparse\"), fr.proxyMethod(\"responder?.selectionIsExpanded\"), fr.proxyMethod(\"responder?.insertPlaceholder\"), fr.proxyMethod(\"responder?.selectPlaceholder\"), fr.proxyMethod(\"responder?.forgetPlaceholder\");\n\nvar br = /*#__PURE__*/function (_sr2) {\n  _inherits(br, _sr2);\n\n  var _super39 = _createSuper(br);\n\n  function br() {\n    var _this66;\n\n    _classCallCheck(this, br);\n\n    _this66 = _super39.apply(this, arguments), _this66.render = _this66.render.bind(_assertThisInitialized(_this66));\n    return _this66;\n  }\n\n  _createClass(br, [{\n    key: \"elementDidMutate\",\n    value: function elementDidMutate() {\n      return this.scheduledRender ? this.composing ? null === (t = this.delegate) || void 0 === t || null === (e = t.inputControllerDidAllowUnhandledInput) || void 0 === e ? void 0 : e.call(t) : void 0 : this.reparse();\n      var t, e;\n    }\n  }, {\n    key: \"scheduleRender\",\n    value: function scheduleRender() {\n      return this.scheduledRender ? this.scheduledRender : this.scheduledRender = requestAnimationFrame(this.render);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var t, e;\n      (cancelAnimationFrame(this.scheduledRender), this.scheduledRender = null, this.composing) || null === (e = this.delegate) || void 0 === e || e.render();\n      null === (t = this.afterRender) || void 0 === t || t.call(this), this.afterRender = null;\n    }\n  }, {\n    key: \"reparse\",\n    value: function reparse() {\n      var t;\n      return null === (t = this.delegate) || void 0 === t ? void 0 : t.reparse();\n    }\n  }, {\n    key: \"insertString\",\n    value: function insertString() {\n      var t;\n      var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : \"\",\n          i = arguments.length > 1 ? arguments[1] : void 0;\n      return null === (t = this.delegate) || void 0 === t || t.inputControllerWillPerformTyping(), this.withTargetDOMRange(function () {\n        var t;\n        return null === (t = this.responder) || void 0 === t ? void 0 : t.insertString(e, i);\n      });\n    }\n  }, {\n    key: \"toggleAttributeIfSupported\",\n    value: function toggleAttributeIfSupported(t) {\n      var e;\n      if (gt().includes(t)) return null === (e = this.delegate) || void 0 === e || e.inputControllerWillPerformFormatting(t), this.withTargetDOMRange(function () {\n        var e;\n        return null === (e = this.responder) || void 0 === e ? void 0 : e.toggleCurrentAttribute(t);\n      });\n    }\n  }, {\n    key: \"activateAttributeIfSupported\",\n    value: function activateAttributeIfSupported(t, e) {\n      var i;\n      if (gt().includes(t)) return null === (i = this.delegate) || void 0 === i || i.inputControllerWillPerformFormatting(t), this.withTargetDOMRange(function () {\n        var i;\n        return null === (i = this.responder) || void 0 === i ? void 0 : i.setCurrentAttribute(t, e);\n      });\n    }\n  }, {\n    key: \"deleteInDirection\",\n    value: function deleteInDirection(t) {\n      var _this67 = this;\n\n      var _ref25 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {\n        recordUndoEntry: !0\n      },\n          e = _ref25.recordUndoEntry;\n\n      var i;\n      e && (null === (i = this.delegate) || void 0 === i || i.inputControllerWillPerformTyping());\n\n      var n = function n() {\n        var e;\n        return null === (e = _this67.responder) || void 0 === e ? void 0 : e.deleteInDirection(t);\n      },\n          r = this.getTargetDOMRange({\n        minLength: this.composing ? 1 : 2\n      });\n\n      return r ? this.withTargetDOMRange(r, n) : n();\n    }\n  }, {\n    key: \"withTargetDOMRange\",\n    value: function withTargetDOMRange(t, e) {\n      var i;\n      return \"function\" == typeof t && (e = t, t = this.getTargetDOMRange()), t ? null === (i = this.responder) || void 0 === i ? void 0 : i.withTargetDOMRange(t, e.bind(this)) : (Ft.reset(), e.call(this));\n    }\n  }, {\n    key: \"getTargetDOMRange\",\n    value: function getTargetDOMRange() {\n      var t, e;\n\n      var _ref26 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {\n        minLength: 0\n      },\n          i = _ref26.minLength;\n\n      var n = null === (t = (e = this.event).getTargetRanges) || void 0 === t ? void 0 : t.call(e);\n\n      if (n && n.length) {\n        var _t59 = vr(n[0]);\n\n        if (0 === i || _t59.toString().length >= i) return _t59;\n      }\n    }\n  }, {\n    key: \"withEvent\",\n    value: function withEvent(t, e) {\n      var i;\n      this.event = t;\n\n      try {\n        i = e.call(this);\n      } finally {\n        this.event = null;\n      }\n\n      return i;\n    }\n  }]);\n\n  return br;\n}(sr);\n\nwi(br, \"events\", {\n  keydown: function keydown(t) {\n    if (St(t)) {\n      var e;\n\n      var _i49 = Er(t);\n\n      null !== (e = this.delegate) && void 0 !== e && e.inputControllerDidReceiveKeyboardCommand(_i49) && t.preventDefault();\n    } else {\n      var _e53 = t.key;\n      t.altKey && (_e53 += \"+Alt\"), t.shiftKey && (_e53 += \"+Shift\");\n      var _i50 = this.constructor.keys[_e53];\n      if (_i50) return this.withEvent(t, _i50);\n    }\n  },\n  paste: function paste(t) {\n    var e;\n    var i;\n    var n = null === (e = t.clipboardData) || void 0 === e ? void 0 : e.getData(\"URL\");\n    return xr(t) ? (t.preventDefault(), this.attachFiles(t.clipboardData.files)) : Cr(t) ? (t.preventDefault(), i = {\n      type: \"text/plain\",\n      string: t.clipboardData.getData(\"text/plain\")\n    }, null === (r = this.delegate) || void 0 === r || r.inputControllerWillPaste(i), null === (o = this.responder) || void 0 === o || o.insertString(i.string), this.render(), null === (s = this.delegate) || void 0 === s ? void 0 : s.inputControllerDidPaste(i)) : n ? (t.preventDefault(), i = {\n      type: \"text/html\",\n      html: this.createLinkHTML(n)\n    }, null === (a = this.delegate) || void 0 === a || a.inputControllerWillPaste(i), null === (l = this.responder) || void 0 === l || l.insertHTML(i.html), this.render(), null === (c = this.delegate) || void 0 === c ? void 0 : c.inputControllerDidPaste(i)) : void 0;\n    var r, o, s, a, l, c;\n  },\n  beforeinput: function beforeinput(t) {\n    var e = this.constructor.inputTypes[t.inputType],\n        i = (n = t, !(!/iPhone|iPad/.test(navigator.userAgent) || n.inputType && \"insertParagraph\" !== n.inputType));\n    var n;\n    e && (this.withEvent(t, e), i || this.scheduleRender()), i && this.render();\n  },\n  input: function input(t) {\n    Ft.reset();\n  },\n  dragstart: function dragstart(t) {\n    var e, i;\n    null !== (e = this.responder) && void 0 !== e && e.selectionContainsAttachments() && (t.dataTransfer.setData(\"application/x-trix-dragging\", !0), this.dragging = {\n      range: null === (i = this.responder) || void 0 === i ? void 0 : i.getSelectedRange(),\n      point: Sr(t)\n    });\n  },\n  dragenter: function dragenter(t) {\n    Ar(t) && t.preventDefault();\n  },\n  dragover: function dragover(t) {\n    if (this.dragging) {\n      t.preventDefault();\n\n      var _i51 = Sr(t);\n\n      var e;\n      if (!Tt(_i51, this.dragging.point)) return this.dragging.point = _i51, null === (e = this.responder) || void 0 === e ? void 0 : e.setLocationRangeFromPointRange(_i51);\n    } else Ar(t) && t.preventDefault();\n  },\n  drop: function drop(t) {\n    var e, i;\n    if (this.dragging) return t.preventDefault(), null === (e = this.delegate) || void 0 === e || e.inputControllerWillMoveText(), null === (i = this.responder) || void 0 === i || i.moveTextFromRange(this.dragging.range), this.dragging = null, this.scheduleRender();\n\n    if (Ar(t)) {\n      var n;\n      t.preventDefault();\n\n      var _e54 = Sr(t);\n\n      return null === (n = this.responder) || void 0 === n || n.setLocationRangeFromPointRange(_e54), this.attachFiles(t.dataTransfer.files);\n    }\n  },\n  dragend: function dragend() {\n    var t;\n    this.dragging && (null === (t = this.responder) || void 0 === t || t.setSelectedRange(this.dragging.range), this.dragging = null);\n  },\n  compositionend: function compositionend(t) {\n    this.composing && (this.composing = !1, a.recentAndroid || this.scheduleRender());\n  }\n}), wi(br, \"keys\", {\n  ArrowLeft: function ArrowLeft() {\n    var t, e;\n    if (null !== (t = this.responder) && void 0 !== t && t.shouldManageMovingCursorInDirection(\"backward\")) return this.event.preventDefault(), null === (e = this.responder) || void 0 === e ? void 0 : e.moveCursorInDirection(\"backward\");\n  },\n  ArrowRight: function ArrowRight() {\n    var t, e;\n    if (null !== (t = this.responder) && void 0 !== t && t.shouldManageMovingCursorInDirection(\"forward\")) return this.event.preventDefault(), null === (e = this.responder) || void 0 === e ? void 0 : e.moveCursorInDirection(\"forward\");\n  },\n  Backspace: function Backspace() {\n    var t, e, i;\n    if (null !== (t = this.responder) && void 0 !== t && t.shouldManageDeletingInDirection(\"backward\")) return this.event.preventDefault(), null === (e = this.delegate) || void 0 === e || e.inputControllerWillPerformTyping(), null === (i = this.responder) || void 0 === i || i.deleteInDirection(\"backward\"), this.render();\n  },\n  Tab: function Tab() {\n    var t, e;\n    if (null !== (t = this.responder) && void 0 !== t && t.canIncreaseNestingLevel()) return this.event.preventDefault(), null === (e = this.responder) || void 0 === e || e.increaseNestingLevel(), this.render();\n  },\n  \"Tab+Shift\": function TabShift() {\n    var t, e;\n    if (null !== (t = this.responder) && void 0 !== t && t.canDecreaseNestingLevel()) return this.event.preventDefault(), null === (e = this.responder) || void 0 === e || e.decreaseNestingLevel(), this.render();\n  }\n}), wi(br, \"inputTypes\", {\n  deleteByComposition: function deleteByComposition() {\n    return this.deleteInDirection(\"backward\", {\n      recordUndoEntry: !1\n    });\n  },\n  deleteByCut: function deleteByCut() {\n    return this.deleteInDirection(\"backward\");\n  },\n  deleteByDrag: function deleteByDrag() {\n    return this.event.preventDefault(), this.withTargetDOMRange(function () {\n      var t;\n      this.deleteByDragRange = null === (t = this.responder) || void 0 === t ? void 0 : t.getSelectedRange();\n    });\n  },\n  deleteCompositionText: function deleteCompositionText() {\n    return this.deleteInDirection(\"backward\", {\n      recordUndoEntry: !1\n    });\n  },\n  deleteContent: function deleteContent() {\n    return this.deleteInDirection(\"backward\");\n  },\n  deleteContentBackward: function deleteContentBackward() {\n    return this.deleteInDirection(\"backward\");\n  },\n  deleteContentForward: function deleteContentForward() {\n    return this.deleteInDirection(\"forward\");\n  },\n  deleteEntireSoftLine: function deleteEntireSoftLine() {\n    return this.deleteInDirection(\"forward\");\n  },\n  deleteHardLineBackward: function deleteHardLineBackward() {\n    return this.deleteInDirection(\"backward\");\n  },\n  deleteHardLineForward: function deleteHardLineForward() {\n    return this.deleteInDirection(\"forward\");\n  },\n  deleteSoftLineBackward: function deleteSoftLineBackward() {\n    return this.deleteInDirection(\"backward\");\n  },\n  deleteSoftLineForward: function deleteSoftLineForward() {\n    return this.deleteInDirection(\"forward\");\n  },\n  deleteWordBackward: function deleteWordBackward() {\n    return this.deleteInDirection(\"backward\");\n  },\n  deleteWordForward: function deleteWordForward() {\n    return this.deleteInDirection(\"forward\");\n  },\n  formatBackColor: function formatBackColor() {\n    return this.activateAttributeIfSupported(\"backgroundColor\", this.event.data);\n  },\n  formatBold: function formatBold() {\n    return this.toggleAttributeIfSupported(\"bold\");\n  },\n  formatFontColor: function formatFontColor() {\n    return this.activateAttributeIfSupported(\"color\", this.event.data);\n  },\n  formatFontName: function formatFontName() {\n    return this.activateAttributeIfSupported(\"font\", this.event.data);\n  },\n  formatIndent: function formatIndent() {\n    var t;\n    if (null !== (t = this.responder) && void 0 !== t && t.canIncreaseNestingLevel()) return this.withTargetDOMRange(function () {\n      var t;\n      return null === (t = this.responder) || void 0 === t ? void 0 : t.increaseNestingLevel();\n    });\n  },\n  formatItalic: function formatItalic() {\n    return this.toggleAttributeIfSupported(\"italic\");\n  },\n  formatJustifyCenter: function formatJustifyCenter() {\n    return this.toggleAttributeIfSupported(\"justifyCenter\");\n  },\n  formatJustifyFull: function formatJustifyFull() {\n    return this.toggleAttributeIfSupported(\"justifyFull\");\n  },\n  formatJustifyLeft: function formatJustifyLeft() {\n    return this.toggleAttributeIfSupported(\"justifyLeft\");\n  },\n  formatJustifyRight: function formatJustifyRight() {\n    return this.toggleAttributeIfSupported(\"justifyRight\");\n  },\n  formatOutdent: function formatOutdent() {\n    var t;\n    if (null !== (t = this.responder) && void 0 !== t && t.canDecreaseNestingLevel()) return this.withTargetDOMRange(function () {\n      var t;\n      return null === (t = this.responder) || void 0 === t ? void 0 : t.decreaseNestingLevel();\n    });\n  },\n  formatRemove: function formatRemove() {\n    this.withTargetDOMRange(function () {\n      for (var _i52 in null === (t = this.responder) || void 0 === t ? void 0 : t.getCurrentAttributes()) {\n        var t, e;\n        null === (e = this.responder) || void 0 === e || e.removeCurrentAttribute(_i52);\n      }\n    });\n  },\n  formatSetBlockTextDirection: function formatSetBlockTextDirection() {\n    return this.activateAttributeIfSupported(\"blockDir\", this.event.data);\n  },\n  formatSetInlineTextDirection: function formatSetInlineTextDirection() {\n    return this.activateAttributeIfSupported(\"textDir\", this.event.data);\n  },\n  formatStrikeThrough: function formatStrikeThrough() {\n    return this.toggleAttributeIfSupported(\"strike\");\n  },\n  formatSubscript: function formatSubscript() {\n    return this.toggleAttributeIfSupported(\"sub\");\n  },\n  formatSuperscript: function formatSuperscript() {\n    return this.toggleAttributeIfSupported(\"sup\");\n  },\n  formatUnderline: function formatUnderline() {\n    return this.toggleAttributeIfSupported(\"underline\");\n  },\n  historyRedo: function historyRedo() {\n    var t;\n    return null === (t = this.delegate) || void 0 === t ? void 0 : t.inputControllerWillPerformRedo();\n  },\n  historyUndo: function historyUndo() {\n    var t;\n    return null === (t = this.delegate) || void 0 === t ? void 0 : t.inputControllerWillPerformUndo();\n  },\n  insertCompositionText: function insertCompositionText() {\n    return this.composing = !0, this.insertString(this.event.data);\n  },\n  insertFromComposition: function insertFromComposition() {\n    return this.composing = !1, this.insertString(this.event.data);\n  },\n  insertFromDrop: function insertFromDrop() {\n    var t = this.deleteByDragRange;\n    var e;\n    if (t) return this.deleteByDragRange = null, null === (e = this.delegate) || void 0 === e || e.inputControllerWillMoveText(), this.withTargetDOMRange(function () {\n      var e;\n      return null === (e = this.responder) || void 0 === e ? void 0 : e.moveTextFromRange(t);\n    });\n  },\n  insertFromPaste: function insertFromPaste() {\n    var _this68 = this;\n\n    var t = this.event.dataTransfer,\n        e = {\n      dataTransfer: t\n    },\n        i = t.getData(\"URL\"),\n        n = t.getData(\"text/html\");\n\n    if (i) {\n      var r;\n\n      var _n32;\n\n      this.event.preventDefault(), e.type = \"text/html\";\n\n      var _o11 = t.getData(\"public.url-name\");\n\n      _n32 = _o11 ? Vt(_o11).trim() : i, e.html = this.createLinkHTML(i, _n32), null === (r = this.delegate) || void 0 === r || r.inputControllerWillPaste(e), this.withTargetDOMRange(function () {\n        var t;\n        return null === (t = this.responder) || void 0 === t ? void 0 : t.insertHTML(e.html);\n      }), this.afterRender = function () {\n        var t;\n        return null === (t = _this68.delegate) || void 0 === t ? void 0 : t.inputControllerDidPaste(e);\n      };\n    } else if (Et(t)) {\n      var o;\n      e.type = \"text/plain\", e.string = t.getData(\"text/plain\"), null === (o = this.delegate) || void 0 === o || o.inputControllerWillPaste(e), this.withTargetDOMRange(function () {\n        var t;\n        return null === (t = this.responder) || void 0 === t ? void 0 : t.insertString(e.string);\n      }), this.afterRender = function () {\n        var t;\n        return null === (t = _this68.delegate) || void 0 === t ? void 0 : t.inputControllerDidPaste(e);\n      };\n    } else if (yr(this.event)) {\n      var s;\n      e.type = \"File\", e.file = t.files[0], null === (s = this.delegate) || void 0 === s || s.inputControllerWillPaste(e), this.withTargetDOMRange(function () {\n        var t;\n        return null === (t = this.responder) || void 0 === t ? void 0 : t.insertFile(e.file);\n      }), this.afterRender = function () {\n        var t;\n        return null === (t = _this68.delegate) || void 0 === t ? void 0 : t.inputControllerDidPaste(e);\n      };\n    } else if (n) {\n      var a;\n      this.event.preventDefault(), e.type = \"text/html\", e.html = n, null === (a = this.delegate) || void 0 === a || a.inputControllerWillPaste(e), this.withTargetDOMRange(function () {\n        var t;\n        return null === (t = this.responder) || void 0 === t ? void 0 : t.insertHTML(e.html);\n      }), this.afterRender = function () {\n        var t;\n        return null === (t = _this68.delegate) || void 0 === t ? void 0 : t.inputControllerDidPaste(e);\n      };\n    }\n  },\n  insertFromYank: function insertFromYank() {\n    return this.insertString(this.event.data);\n  },\n  insertLineBreak: function insertLineBreak() {\n    return this.insertString(\"\\n\");\n  },\n  insertLink: function insertLink() {\n    return this.activateAttributeIfSupported(\"href\", this.event.data);\n  },\n  insertOrderedList: function insertOrderedList() {\n    return this.toggleAttributeIfSupported(\"number\");\n  },\n  insertParagraph: function insertParagraph() {\n    var t;\n    return null === (t = this.delegate) || void 0 === t || t.inputControllerWillPerformTyping(), this.withTargetDOMRange(function () {\n      var t;\n      return null === (t = this.responder) || void 0 === t ? void 0 : t.insertLineBreak();\n    });\n  },\n  insertReplacementText: function insertReplacementText() {\n    var _this69 = this;\n\n    var t = this.event.dataTransfer.getData(\"text/plain\"),\n        e = this.event.getTargetRanges()[0];\n    this.withTargetDOMRange(e, function () {\n      _this69.insertString(t, {\n        updatePosition: !1\n      });\n    });\n  },\n  insertText: function insertText() {\n    var t;\n    return this.insertString(this.event.data || (null === (t = this.event.dataTransfer) || void 0 === t ? void 0 : t.getData(\"text/plain\")));\n  },\n  insertTranspose: function insertTranspose() {\n    return this.insertString(this.event.data);\n  },\n  insertUnorderedList: function insertUnorderedList() {\n    return this.toggleAttributeIfSupported(\"bullet\");\n  }\n});\n\nvar vr = function vr(t) {\n  var e = document.createRange();\n  return e.setStart(t.startContainer, t.startOffset), e.setEnd(t.endContainer, t.endOffset), e;\n},\n    Ar = function Ar(t) {\n  var e;\n  return Array.from((null === (e = t.dataTransfer) || void 0 === e ? void 0 : e.types) || []).includes(\"Files\");\n},\n    yr = function yr(t) {\n  var e;\n  return (null === (e = t.dataTransfer.files) || void 0 === e ? void 0 : e[0]) && !xr(t) && !function (t) {\n    var e = t.dataTransfer;\n    return e.types.includes(\"Files\") && e.types.includes(\"text/html\") && e.getData(\"text/html\").includes(\"urn:schemas-microsoft-com:office:office\");\n  }(t);\n},\n    xr = function xr(t) {\n  var e = t.clipboardData;\n\n  if (e) {\n    return Array.from(e.types).filter(function (t) {\n      return t.match(/file/i);\n    }).length === e.types.length && e.files.length >= 1;\n  }\n},\n    Cr = function Cr(t) {\n  var e = t.clipboardData;\n  if (e) return e.types.includes(\"text/plain\") && 1 === e.types.length;\n},\n    Er = function Er(t) {\n  var e = [];\n  return t.altKey && e.push(\"alt\"), t.shiftKey && e.push(\"shift\"), e.push(t.key), e;\n},\n    Sr = function Sr(t) {\n  return {\n    x: t.clientX,\n    y: t.clientY\n  };\n},\n    Rr = \"[data-trix-attribute]\",\n    kr = \"[data-trix-action]\",\n    Tr = \"\".concat(Rr, \", \").concat(kr),\n    wr = \"[data-trix-dialog]\",\n    Lr = \"\".concat(wr, \"[data-trix-active]\"),\n    Dr = \"\".concat(wr, \" [data-trix-method]\"),\n    Nr = \"\".concat(wr, \" [data-trix-input]\"),\n    Ir = function Ir(t, e) {\n  return e || (e = Fr(t)), t.querySelector(\"[data-trix-input][name='\".concat(e, \"']\"));\n},\n    Or = function Or(t) {\n  return t.getAttribute(\"data-trix-action\");\n},\n    Fr = function Fr(t) {\n  return t.getAttribute(\"data-trix-attribute\") || t.getAttribute(\"data-trix-dialog-attribute\");\n};\n\nvar Pr = /*#__PURE__*/function (_q20) {\n  _inherits(Pr, _q20);\n\n  var _super40 = _createSuper(Pr);\n\n  function Pr(t) {\n    var _this70;\n\n    _classCallCheck(this, Pr);\n\n    _this70 = _super40.call(this, t), _this70.didClickActionButton = _this70.didClickActionButton.bind(_assertThisInitialized(_this70)), _this70.didClickAttributeButton = _this70.didClickAttributeButton.bind(_assertThisInitialized(_this70)), _this70.didClickDialogButton = _this70.didClickDialogButton.bind(_assertThisInitialized(_this70)), _this70.didKeyDownDialogInput = _this70.didKeyDownDialogInput.bind(_assertThisInitialized(_this70)), _this70.element = t, _this70.attributes = {}, _this70.actions = {}, _this70.resetDialogInputs(), b(\"mousedown\", {\n      onElement: _this70.element,\n      matchingSelector: kr,\n      withCallback: _this70.didClickActionButton\n    }), b(\"mousedown\", {\n      onElement: _this70.element,\n      matchingSelector: Rr,\n      withCallback: _this70.didClickAttributeButton\n    }), b(\"click\", {\n      onElement: _this70.element,\n      matchingSelector: Tr,\n      preventDefault: !0\n    }), b(\"click\", {\n      onElement: _this70.element,\n      matchingSelector: Dr,\n      withCallback: _this70.didClickDialogButton\n    }), b(\"keydown\", {\n      onElement: _this70.element,\n      matchingSelector: Nr,\n      withCallback: _this70.didKeyDownDialogInput\n    });\n    return _this70;\n  }\n\n  _createClass(Pr, [{\n    key: \"didClickActionButton\",\n    value: function didClickActionButton(t, e) {\n      var i;\n      null === (i = this.delegate) || void 0 === i || i.toolbarDidClickButton(), t.preventDefault();\n      var n = Or(e);\n      return this.getDialog(n) ? this.toggleDialog(n) : null === (r = this.delegate) || void 0 === r ? void 0 : r.toolbarDidInvokeAction(n, e);\n      var r;\n    }\n  }, {\n    key: \"didClickAttributeButton\",\n    value: function didClickAttributeButton(t, e) {\n      var i;\n      null === (i = this.delegate) || void 0 === i || i.toolbarDidClickButton(), t.preventDefault();\n      var n = Fr(e);\n      var r;\n      this.getDialog(n) ? this.toggleDialog(n) : null === (r = this.delegate) || void 0 === r || r.toolbarDidToggleAttribute(n);\n      return this.refreshAttributeButtons();\n    }\n  }, {\n    key: \"didClickDialogButton\",\n    value: function didClickDialogButton(t, e) {\n      var i = y(e, {\n        matchingSelector: wr\n      });\n      return this[e.getAttribute(\"data-trix-method\")].call(this, i);\n    }\n  }, {\n    key: \"didKeyDownDialogInput\",\n    value: function didKeyDownDialogInput(t, e) {\n      if (13 === t.keyCode) {\n        t.preventDefault();\n\n        var _i53 = e.getAttribute(\"name\"),\n            _n33 = this.getDialog(_i53);\n\n        this.setAttribute(_n33);\n      }\n\n      if (27 === t.keyCode) return t.preventDefault(), this.hideDialog();\n    }\n  }, {\n    key: \"updateActions\",\n    value: function updateActions(t) {\n      return this.actions = t, this.refreshActionButtons();\n    }\n  }, {\n    key: \"refreshActionButtons\",\n    value: function refreshActionButtons() {\n      var _this71 = this;\n\n      return this.eachActionButton(function (t, e) {\n        t.disabled = !1 === _this71.actions[e];\n      });\n    }\n  }, {\n    key: \"eachActionButton\",\n    value: function eachActionButton(t) {\n      return Array.from(this.element.querySelectorAll(kr)).map(function (e) {\n        return t(e, Or(e));\n      });\n    }\n  }, {\n    key: \"updateAttributes\",\n    value: function updateAttributes(t) {\n      return this.attributes = t, this.refreshAttributeButtons();\n    }\n  }, {\n    key: \"refreshAttributeButtons\",\n    value: function refreshAttributeButtons() {\n      var _this72 = this;\n\n      return this.eachAttributeButton(function (t, e) {\n        return t.disabled = !1 === _this72.attributes[e], _this72.attributes[e] || _this72.dialogIsVisible(e) ? (t.setAttribute(\"data-trix-active\", \"\"), t.classList.add(\"trix-active\")) : (t.removeAttribute(\"data-trix-active\"), t.classList.remove(\"trix-active\"));\n      });\n    }\n  }, {\n    key: \"eachAttributeButton\",\n    value: function eachAttributeButton(t) {\n      return Array.from(this.element.querySelectorAll(Rr)).map(function (e) {\n        return t(e, Fr(e));\n      });\n    }\n  }, {\n    key: \"applyKeyboardCommand\",\n    value: function applyKeyboardCommand(t) {\n      var e = JSON.stringify(t.sort());\n\n      for (var _i54 = 0, _Array$from22 = Array.from(this.element.querySelectorAll(\"[data-trix-key]\")); _i54 < _Array$from22.length; _i54++) {\n        var _t60 = _Array$from22[_i54];\n\n        var _i55 = _t60.getAttribute(\"data-trix-key\").split(\"+\");\n\n        if (JSON.stringify(_i55.sort()) === e) return v(\"mousedown\", {\n          onElement: _t60\n        }), !0;\n      }\n\n      return !1;\n    }\n  }, {\n    key: \"dialogIsVisible\",\n    value: function dialogIsVisible(t) {\n      var e = this.getDialog(t);\n      if (e) return e.hasAttribute(\"data-trix-active\");\n    }\n  }, {\n    key: \"toggleDialog\",\n    value: function toggleDialog(t) {\n      return this.dialogIsVisible(t) ? this.hideDialog() : this.showDialog(t);\n    }\n  }, {\n    key: \"showDialog\",\n    value: function showDialog(t) {\n      var e, i;\n      this.hideDialog(), null === (e = this.delegate) || void 0 === e || e.toolbarWillShowDialog();\n      var n = this.getDialog(t);\n      n.setAttribute(\"data-trix-active\", \"\"), n.classList.add(\"trix-active\"), Array.from(n.querySelectorAll(\"input[disabled]\")).forEach(function (t) {\n        t.removeAttribute(\"disabled\");\n      });\n      var r = Fr(n);\n\n      if (r) {\n        var _e55 = Ir(n, t);\n\n        _e55 && (_e55.value = this.attributes[r] || \"\", _e55.select());\n      }\n\n      return null === (i = this.delegate) || void 0 === i ? void 0 : i.toolbarDidShowDialog(t);\n    }\n  }, {\n    key: \"setAttribute\",\n    value: function setAttribute(t) {\n      var e;\n      var i = Fr(t),\n          n = Ir(t, i);\n      return !n.willValidate || (n.setCustomValidity(\"\"), n.checkValidity() && this.isSafeAttribute(n)) ? (null === (e = this.delegate) || void 0 === e || e.toolbarDidUpdateAttribute(i, n.value), this.hideDialog()) : (n.setCustomValidity(\"Invalid value\"), n.setAttribute(\"data-trix-validate\", \"\"), n.classList.add(\"trix-validate\"), n.focus());\n    }\n  }, {\n    key: \"isSafeAttribute\",\n    value: function isSafeAttribute(t) {\n      return !t.hasAttribute(\"data-trix-validate-href\") || si.isValidAttribute(\"a\", \"href\", t.value);\n    }\n  }, {\n    key: \"removeAttribute\",\n    value: function removeAttribute(t) {\n      var e;\n      var i = Fr(t);\n      return null === (e = this.delegate) || void 0 === e || e.toolbarDidRemoveAttribute(i), this.hideDialog();\n    }\n  }, {\n    key: \"hideDialog\",\n    value: function hideDialog() {\n      var t = this.element.querySelector(Lr);\n      var e;\n      if (t) return t.removeAttribute(\"data-trix-active\"), t.classList.remove(\"trix-active\"), this.resetDialogInputs(), null === (e = this.delegate) || void 0 === e ? void 0 : e.toolbarDidHideDialog(function (t) {\n        return t.getAttribute(\"data-trix-dialog\");\n      }(t));\n    }\n  }, {\n    key: \"resetDialogInputs\",\n    value: function resetDialogInputs() {\n      Array.from(this.element.querySelectorAll(Nr)).forEach(function (t) {\n        t.setAttribute(\"disabled\", \"disabled\"), t.removeAttribute(\"data-trix-validate\"), t.classList.remove(\"trix-validate\");\n      });\n    }\n  }, {\n    key: \"getDialog\",\n    value: function getDialog(t) {\n      return this.element.querySelector(\"[data-trix-dialog=\".concat(t, \"]\"));\n    }\n  }]);\n\n  return Pr;\n}(q);\n\nvar Mr = /*#__PURE__*/function (_Yn) {\n  _inherits(Mr, _Yn);\n\n  var _super41 = _createSuper(Mr);\n\n  function Mr(t) {\n    var _this73;\n\n    _classCallCheck(this, Mr);\n\n    var e = t.editorElement,\n        i = t.document,\n        n = t.html;\n    _this73 = _super41.apply(this, arguments), _this73.editorElement = e, _this73.selectionManager = new Wn(_this73.editorElement), _this73.selectionManager.delegate = _assertThisInitialized(_this73), _this73.composition = new kn(), _this73.composition.delegate = _assertThisInitialized(_this73), _this73.attachmentManager = new Sn(_this73.composition.getAttachments()), _this73.attachmentManager.delegate = _assertThisInitialized(_this73), _this73.inputController = 2 === _.getLevel() ? new br(_this73.editorElement) : new hr(_this73.editorElement), _this73.inputController.delegate = _assertThisInitialized(_this73), _this73.inputController.responder = _this73.composition, _this73.compositionController = new Gn(_this73.editorElement, _this73.composition), _this73.compositionController.delegate = _assertThisInitialized(_this73), _this73.toolbarController = new Pr(_this73.editorElement.toolbarElement), _this73.toolbarController.delegate = _assertThisInitialized(_this73), _this73.editor = new On(_this73.composition, _this73.selectionManager, _this73.editorElement), i ? _this73.editor.loadDocument(i) : _this73.editor.loadHTML(n);\n    return _this73;\n  }\n\n  _createClass(Mr, [{\n    key: \"registerSelectionManager\",\n    value: function registerSelectionManager() {\n      return Ft.registerSelectionManager(this.selectionManager);\n    }\n  }, {\n    key: \"unregisterSelectionManager\",\n    value: function unregisterSelectionManager() {\n      return Ft.unregisterSelectionManager(this.selectionManager);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return this.compositionController.render();\n    }\n  }, {\n    key: \"reparse\",\n    value: function reparse() {\n      return this.composition.replaceHTML(this.editorElement.innerHTML);\n    }\n  }, {\n    key: \"compositionDidChangeDocument\",\n    value: function compositionDidChangeDocument(t) {\n      if (this.notifyEditorElement(\"document-change\"), !this.handlingInput) return this.render();\n    }\n  }, {\n    key: \"compositionDidChangeCurrentAttributes\",\n    value: function compositionDidChangeCurrentAttributes(t) {\n      return this.currentAttributes = t, this.toolbarController.updateAttributes(this.currentAttributes), this.updateCurrentActions(), this.notifyEditorElement(\"attributes-change\", {\n        attributes: this.currentAttributes\n      });\n    }\n  }, {\n    key: \"compositionDidPerformInsertionAtRange\",\n    value: function compositionDidPerformInsertionAtRange(t) {\n      this.pasting && (this.pastedRange = t);\n    }\n  }, {\n    key: \"compositionShouldAcceptFile\",\n    value: function compositionShouldAcceptFile(t) {\n      return this.notifyEditorElement(\"file-accept\", {\n        file: t\n      });\n    }\n  }, {\n    key: \"compositionDidAddAttachment\",\n    value: function compositionDidAddAttachment(t) {\n      var e = this.attachmentManager.manageAttachment(t);\n      return this.notifyEditorElement(\"attachment-add\", {\n        attachment: e\n      });\n    }\n  }, {\n    key: \"compositionDidEditAttachment\",\n    value: function compositionDidEditAttachment(t) {\n      this.compositionController.rerenderViewForObject(t);\n      var e = this.attachmentManager.manageAttachment(t);\n      return this.notifyEditorElement(\"attachment-edit\", {\n        attachment: e\n      }), this.notifyEditorElement(\"change\");\n    }\n  }, {\n    key: \"compositionDidChangeAttachmentPreviewURL\",\n    value: function compositionDidChangeAttachmentPreviewURL(t) {\n      return this.compositionController.invalidateViewForObject(t), this.notifyEditorElement(\"change\");\n    }\n  }, {\n    key: \"compositionDidRemoveAttachment\",\n    value: function compositionDidRemoveAttachment(t) {\n      var e = this.attachmentManager.unmanageAttachment(t);\n      return this.notifyEditorElement(\"attachment-remove\", {\n        attachment: e\n      });\n    }\n  }, {\n    key: \"compositionDidStartEditingAttachment\",\n    value: function compositionDidStartEditingAttachment(t, e) {\n      return this.attachmentLocationRange = this.composition.document.getLocationRangeOfAttachment(t), this.compositionController.installAttachmentEditorForAttachment(t, e), this.selectionManager.setLocationRange(this.attachmentLocationRange);\n    }\n  }, {\n    key: \"compositionDidStopEditingAttachment\",\n    value: function compositionDidStopEditingAttachment(t) {\n      this.compositionController.uninstallAttachmentEditor(), this.attachmentLocationRange = null;\n    }\n  }, {\n    key: \"compositionDidRequestChangingSelectionToLocationRange\",\n    value: function compositionDidRequestChangingSelectionToLocationRange(t) {\n      if (!this.loadingSnapshot || this.isFocused()) return this.requestedLocationRange = t, this.compositionRevisionWhenLocationRangeRequested = this.composition.revision, this.handlingInput ? void 0 : this.render();\n    }\n  }, {\n    key: \"compositionWillLoadSnapshot\",\n    value: function compositionWillLoadSnapshot() {\n      this.loadingSnapshot = !0;\n    }\n  }, {\n    key: \"compositionDidLoadSnapshot\",\n    value: function compositionDidLoadSnapshot() {\n      this.compositionController.refreshViewCache(), this.render(), this.loadingSnapshot = !1;\n    }\n  }, {\n    key: \"getSelectionManager\",\n    value: function getSelectionManager() {\n      return this.selectionManager;\n    }\n  }, {\n    key: \"attachmentManagerDidRequestRemovalOfAttachment\",\n    value: function attachmentManagerDidRequestRemovalOfAttachment(t) {\n      return this.removeAttachment(t);\n    }\n  }, {\n    key: \"compositionControllerWillSyncDocumentView\",\n    value: function compositionControllerWillSyncDocumentView() {\n      return this.inputController.editorWillSyncDocumentView(), this.selectionManager.lock(), this.selectionManager.clearSelection();\n    }\n  }, {\n    key: \"compositionControllerDidSyncDocumentView\",\n    value: function compositionControllerDidSyncDocumentView() {\n      return this.inputController.editorDidSyncDocumentView(), this.selectionManager.unlock(), this.updateCurrentActions(), this.notifyEditorElement(\"sync\");\n    }\n  }, {\n    key: \"compositionControllerDidRender\",\n    value: function compositionControllerDidRender() {\n      this.requestedLocationRange && (this.compositionRevisionWhenLocationRangeRequested === this.composition.revision && this.selectionManager.setLocationRange(this.requestedLocationRange), this.requestedLocationRange = null, this.compositionRevisionWhenLocationRangeRequested = null), this.renderedCompositionRevision !== this.composition.revision && (this.runEditorFilters(), this.composition.updateCurrentAttributes(), this.notifyEditorElement(\"render\")), this.renderedCompositionRevision = this.composition.revision;\n    }\n  }, {\n    key: \"compositionControllerDidFocus\",\n    value: function compositionControllerDidFocus() {\n      return this.isFocusedInvisibly() && this.setLocationRange({\n        index: 0,\n        offset: 0\n      }), this.toolbarController.hideDialog(), this.notifyEditorElement(\"focus\");\n    }\n  }, {\n    key: \"compositionControllerDidBlur\",\n    value: function compositionControllerDidBlur() {\n      return this.notifyEditorElement(\"blur\");\n    }\n  }, {\n    key: \"compositionControllerDidSelectAttachment\",\n    value: function compositionControllerDidSelectAttachment(t, e) {\n      return this.toolbarController.hideDialog(), this.composition.editAttachment(t, e);\n    }\n  }, {\n    key: \"compositionControllerDidRequestDeselectingAttachment\",\n    value: function compositionControllerDidRequestDeselectingAttachment(t) {\n      var e = this.attachmentLocationRange || this.composition.document.getLocationRangeOfAttachment(t);\n      return this.selectionManager.setLocationRange(e[1]);\n    }\n  }, {\n    key: \"compositionControllerWillUpdateAttachment\",\n    value: function compositionControllerWillUpdateAttachment(t) {\n      return this.editor.recordUndoEntry(\"Edit Attachment\", {\n        context: t.id,\n        consolidatable: !0\n      });\n    }\n  }, {\n    key: \"compositionControllerDidRequestRemovalOfAttachment\",\n    value: function compositionControllerDidRequestRemovalOfAttachment(t) {\n      return this.removeAttachment(t);\n    }\n  }, {\n    key: \"inputControllerWillHandleInput\",\n    value: function inputControllerWillHandleInput() {\n      this.handlingInput = !0, this.requestedRender = !1;\n    }\n  }, {\n    key: \"inputControllerDidRequestRender\",\n    value: function inputControllerDidRequestRender() {\n      this.requestedRender = !0;\n    }\n  }, {\n    key: \"inputControllerDidHandleInput\",\n    value: function inputControllerDidHandleInput() {\n      if (this.handlingInput = !1, this.requestedRender) return this.requestedRender = !1, this.render();\n    }\n  }, {\n    key: \"inputControllerDidAllowUnhandledInput\",\n    value: function inputControllerDidAllowUnhandledInput() {\n      return this.notifyEditorElement(\"change\");\n    }\n  }, {\n    key: \"inputControllerDidRequestReparse\",\n    value: function inputControllerDidRequestReparse() {\n      return this.reparse();\n    }\n  }, {\n    key: \"inputControllerWillPerformTyping\",\n    value: function inputControllerWillPerformTyping() {\n      return this.recordTypingUndoEntry();\n    }\n  }, {\n    key: \"inputControllerWillPerformFormatting\",\n    value: function inputControllerWillPerformFormatting(t) {\n      return this.recordFormattingUndoEntry(t);\n    }\n  }, {\n    key: \"inputControllerWillCutText\",\n    value: function inputControllerWillCutText() {\n      return this.editor.recordUndoEntry(\"Cut\");\n    }\n  }, {\n    key: \"inputControllerWillPaste\",\n    value: function inputControllerWillPaste(t) {\n      return this.editor.recordUndoEntry(\"Paste\"), this.pasting = !0, this.notifyEditorElement(\"before-paste\", {\n        paste: t\n      });\n    }\n  }, {\n    key: \"inputControllerDidPaste\",\n    value: function inputControllerDidPaste(t) {\n      return t.range = this.pastedRange, this.pastedRange = null, this.pasting = null, this.notifyEditorElement(\"paste\", {\n        paste: t\n      });\n    }\n  }, {\n    key: \"inputControllerWillMoveText\",\n    value: function inputControllerWillMoveText() {\n      return this.editor.recordUndoEntry(\"Move\");\n    }\n  }, {\n    key: \"inputControllerWillAttachFiles\",\n    value: function inputControllerWillAttachFiles() {\n      return this.editor.recordUndoEntry(\"Drop Files\");\n    }\n  }, {\n    key: \"inputControllerWillPerformUndo\",\n    value: function inputControllerWillPerformUndo() {\n      return this.editor.undo();\n    }\n  }, {\n    key: \"inputControllerWillPerformRedo\",\n    value: function inputControllerWillPerformRedo() {\n      return this.editor.redo();\n    }\n  }, {\n    key: \"inputControllerDidReceiveKeyboardCommand\",\n    value: function inputControllerDidReceiveKeyboardCommand(t) {\n      return this.toolbarController.applyKeyboardCommand(t);\n    }\n  }, {\n    key: \"inputControllerDidStartDrag\",\n    value: function inputControllerDidStartDrag() {\n      this.locationRangeBeforeDrag = this.selectionManager.getLocationRange();\n    }\n  }, {\n    key: \"inputControllerDidReceiveDragOverPoint\",\n    value: function inputControllerDidReceiveDragOverPoint(t) {\n      return this.selectionManager.setLocationRangeFromPointRange(t);\n    }\n  }, {\n    key: \"inputControllerDidCancelDrag\",\n    value: function inputControllerDidCancelDrag() {\n      this.selectionManager.setLocationRange(this.locationRangeBeforeDrag), this.locationRangeBeforeDrag = null;\n    }\n  }, {\n    key: \"locationRangeDidChange\",\n    value: function locationRangeDidChange(t) {\n      return this.composition.updateCurrentAttributes(), this.updateCurrentActions(), this.attachmentLocationRange && !Dt(this.attachmentLocationRange, t) && this.composition.stopEditingAttachment(), this.notifyEditorElement(\"selection-change\");\n    }\n  }, {\n    key: \"toolbarDidClickButton\",\n    value: function toolbarDidClickButton() {\n      if (!this.getLocationRange()) return this.setLocationRange({\n        index: 0,\n        offset: 0\n      });\n    }\n  }, {\n    key: \"toolbarDidInvokeAction\",\n    value: function toolbarDidInvokeAction(t, e) {\n      return this.invokeAction(t, e);\n    }\n  }, {\n    key: \"toolbarDidToggleAttribute\",\n    value: function toolbarDidToggleAttribute(t) {\n      if (this.recordFormattingUndoEntry(t), this.composition.toggleCurrentAttribute(t), this.render(), !this.selectionFrozen) return this.editorElement.focus();\n    }\n  }, {\n    key: \"toolbarDidUpdateAttribute\",\n    value: function toolbarDidUpdateAttribute(t, e) {\n      if (this.recordFormattingUndoEntry(t), this.composition.setCurrentAttribute(t, e), this.render(), !this.selectionFrozen) return this.editorElement.focus();\n    }\n  }, {\n    key: \"toolbarDidRemoveAttribute\",\n    value: function toolbarDidRemoveAttribute(t) {\n      if (this.recordFormattingUndoEntry(t), this.composition.removeCurrentAttribute(t), this.render(), !this.selectionFrozen) return this.editorElement.focus();\n    }\n  }, {\n    key: \"toolbarWillShowDialog\",\n    value: function toolbarWillShowDialog(t) {\n      return this.composition.expandSelectionForEditing(), this.freezeSelection();\n    }\n  }, {\n    key: \"toolbarDidShowDialog\",\n    value: function toolbarDidShowDialog(t) {\n      return this.notifyEditorElement(\"toolbar-dialog-show\", {\n        dialogName: t\n      });\n    }\n  }, {\n    key: \"toolbarDidHideDialog\",\n    value: function toolbarDidHideDialog(t) {\n      return this.thawSelection(), this.editorElement.focus(), this.notifyEditorElement(\"toolbar-dialog-hide\", {\n        dialogName: t\n      });\n    }\n  }, {\n    key: \"freezeSelection\",\n    value: function freezeSelection() {\n      if (!this.selectionFrozen) return this.selectionManager.lock(), this.composition.freezeSelection(), this.selectionFrozen = !0, this.render();\n    }\n  }, {\n    key: \"thawSelection\",\n    value: function thawSelection() {\n      if (this.selectionFrozen) return this.composition.thawSelection(), this.selectionManager.unlock(), this.selectionFrozen = !1, this.render();\n    }\n  }, {\n    key: \"canInvokeAction\",\n    value: function canInvokeAction(t) {\n      return !!this.actionIsExternal(t) || !(null === (e = this.actions[t]) || void 0 === e || null === (e = e.test) || void 0 === e || !e.call(this));\n      var e;\n    }\n  }, {\n    key: \"invokeAction\",\n    value: function invokeAction(t, e) {\n      return this.actionIsExternal(t) ? this.notifyEditorElement(\"action-invoke\", {\n        actionName: t,\n        invokingElement: e\n      }) : null === (i = this.actions[t]) || void 0 === i || null === (i = i.perform) || void 0 === i ? void 0 : i.call(this);\n      var i;\n    }\n  }, {\n    key: \"actionIsExternal\",\n    value: function actionIsExternal(t) {\n      return /^x-./.test(t);\n    }\n  }, {\n    key: \"getCurrentActions\",\n    value: function getCurrentActions() {\n      var t = {};\n\n      for (var _e56 in this.actions) {\n        t[_e56] = this.canInvokeAction(_e56);\n      }\n\n      return t;\n    }\n  }, {\n    key: \"updateCurrentActions\",\n    value: function updateCurrentActions() {\n      var t = this.getCurrentActions();\n      if (!Tt(t, this.currentActions)) return this.currentActions = t, this.toolbarController.updateActions(this.currentActions), this.notifyEditorElement(\"actions-change\", {\n        actions: this.currentActions\n      });\n    }\n  }, {\n    key: \"runEditorFilters\",\n    value: function runEditorFilters() {\n      var _this74 = this;\n\n      var t = this.composition.getSnapshot();\n      if (Array.from(this.editor.filters).forEach(function (e) {\n        var _t61 = t,\n            i = _t61.document,\n            n = _t61.selectedRange;\n        t = e.call(_this74.editor, t) || {}, t.document || (t.document = i), t.selectedRange || (t.selectedRange = n);\n      }), e = t, i = this.composition.getSnapshot(), !Dt(e.selectedRange, i.selectedRange) || !e.document.isEqualTo(i.document)) return this.composition.loadSnapshot(t);\n      var e, i;\n    }\n  }, {\n    key: \"updateInputElement\",\n    value: function updateInputElement() {\n      var t = function (t, e) {\n        var i = xn[e];\n        if (i) return i(t);\n        throw new Error(\"unknown content type: \".concat(e));\n      }(this.compositionController.getSerializableElement(), \"text/html\");\n\n      return this.editorElement.setFormValue(t);\n    }\n  }, {\n    key: \"notifyEditorElement\",\n    value: function notifyEditorElement(t, e) {\n      switch (t) {\n        case \"document-change\":\n          this.documentChangedSinceLastRender = !0;\n          break;\n\n        case \"render\":\n          this.documentChangedSinceLastRender && (this.documentChangedSinceLastRender = !1, this.notifyEditorElement(\"change\"));\n          break;\n\n        case \"change\":\n        case \"attachment-add\":\n        case \"attachment-edit\":\n        case \"attachment-remove\":\n          this.updateInputElement();\n      }\n\n      return this.editorElement.notify(t, e);\n    }\n  }, {\n    key: \"removeAttachment\",\n    value: function removeAttachment(t) {\n      return this.editor.recordUndoEntry(\"Delete Attachment\"), this.composition.removeAttachment(t), this.render();\n    }\n  }, {\n    key: \"recordFormattingUndoEntry\",\n    value: function recordFormattingUndoEntry(t) {\n      var e = mt(t),\n          i = this.selectionManager.getLocationRange();\n      if (e || !Lt(i)) return this.editor.recordUndoEntry(\"Formatting\", {\n        context: this.getUndoContext(),\n        consolidatable: !0\n      });\n    }\n  }, {\n    key: \"recordTypingUndoEntry\",\n    value: function recordTypingUndoEntry() {\n      return this.editor.recordUndoEntry(\"Typing\", {\n        context: this.getUndoContext(this.currentAttributes),\n        consolidatable: !0\n      });\n    }\n  }, {\n    key: \"getUndoContext\",\n    value: function getUndoContext() {\n      for (var t = arguments.length, e = new Array(t), i = 0; i < t; i++) {\n        e[i] = arguments[i];\n      }\n\n      return [this.getLocationContext(), this.getTimeContext()].concat(_toConsumableArray(Array.from(e)));\n    }\n  }, {\n    key: \"getLocationContext\",\n    value: function getLocationContext() {\n      var t = this.selectionManager.getLocationRange();\n      return Lt(t) ? t[0].index : t;\n    }\n  }, {\n    key: \"getTimeContext\",\n    value: function getTimeContext() {\n      return V.interval > 0 ? Math.floor(new Date().getTime() / V.interval) : 0;\n    }\n  }, {\n    key: \"isFocused\",\n    value: function isFocused() {\n      var t;\n      return this.editorElement === (null === (t = this.editorElement.ownerDocument) || void 0 === t ? void 0 : t.activeElement);\n    }\n  }, {\n    key: \"isFocusedInvisibly\",\n    value: function isFocusedInvisibly() {\n      return this.isFocused() && !this.getLocationRange();\n    }\n  }, {\n    key: \"actions\",\n    get: function get() {\n      return this.constructor.actions;\n    }\n  }]);\n\n  return Mr;\n}(Yn);\n\nwi(Mr, \"actions\", {\n  undo: {\n    test: function test() {\n      return this.editor.canUndo();\n    },\n    perform: function perform() {\n      return this.editor.undo();\n    }\n  },\n  redo: {\n    test: function test() {\n      return this.editor.canRedo();\n    },\n    perform: function perform() {\n      return this.editor.redo();\n    }\n  },\n  link: {\n    test: function test() {\n      return this.editor.canActivateAttribute(\"href\");\n    }\n  },\n  increaseNestingLevel: {\n    test: function test() {\n      return this.editor.canIncreaseNestingLevel();\n    },\n    perform: function perform() {\n      return this.editor.increaseNestingLevel() && this.render();\n    }\n  },\n  decreaseNestingLevel: {\n    test: function test() {\n      return this.editor.canDecreaseNestingLevel();\n    },\n    perform: function perform() {\n      return this.editor.decreaseNestingLevel() && this.render();\n    }\n  },\n  attachFiles: {\n    test: function test() {\n      return !0;\n    },\n    perform: function perform() {\n      return _.pickFiles(this.editor.insertFiles);\n    }\n  }\n}), Mr.proxyMethod(\"getSelectionManager().setLocationRange\"), Mr.proxyMethod(\"getSelectionManager().getLocationRange\");\n\nvar Br = Object.freeze({\n  __proto__: null,\n  AttachmentEditorController: Kn,\n  CompositionController: Gn,\n  Controller: Yn,\n  EditorController: Mr,\n  InputController: sr,\n  Level0InputController: hr,\n  Level2InputController: br,\n  ToolbarController: Pr\n}),\n    _r = Object.freeze({\n  __proto__: null,\n  MutationObserver: Qn,\n  SelectionChangeObserver: Ot\n}),\n    jr = Object.freeze({\n  __proto__: null,\n  FileVerificationOperation: er,\n  ImagePreloadOperation: ji\n});\n\nvt(\"trix-toolbar\", \"%t {\\n  display: block;\\n}\\n\\n%t {\\n  white-space: nowrap;\\n}\\n\\n%t [data-trix-dialog] {\\n  display: none;\\n}\\n\\n%t [data-trix-dialog][data-trix-active] {\\n  display: block;\\n}\\n\\n%t [data-trix-dialog] [data-trix-validate]:invalid {\\n  background-color: #ffdddd;\\n}\");\n\nvar Wr = /*#__PURE__*/function (_HTMLElement) {\n  _inherits(Wr, _HTMLElement);\n\n  var _super42 = _createSuper(Wr);\n\n  function Wr() {\n    _classCallCheck(this, Wr);\n\n    return _super42.apply(this, arguments);\n  }\n\n  _createClass(Wr, [{\n    key: \"connectedCallback\",\n    value: function connectedCallback() {\n      \"\" === this.innerHTML && (this.innerHTML = U.getDefaultHTML());\n    }\n  }]);\n\n  return Wr;\n}( /*#__PURE__*/_wrapNativeSuper(HTMLElement));\n\nvar Ur = 0;\n\nvar Vr = function Vr(t) {\n  if (!t.hasAttribute(\"contenteditable\")) return t.setAttribute(\"contenteditable\", \"\"), function (t) {\n    var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n    return e.times = 1, b(t, e);\n  }(\"focus\", {\n    onElement: t,\n    withCallback: function withCallback() {\n      return zr(t);\n    }\n  });\n},\n    zr = function zr(t) {\n  return qr(t), Hr(t);\n},\n    qr = function qr(t) {\n  var e, i;\n  if (null !== (e = (i = document).queryCommandSupported) && void 0 !== e && e.call(i, \"enableObjectResizing\")) return document.execCommand(\"enableObjectResizing\", !1, !1), b(\"mscontrolselect\", {\n    onElement: t,\n    preventDefault: !0\n  });\n},\n    Hr = function Hr(t) {\n  var e, i;\n\n  if (null !== (e = (i = document).queryCommandSupported) && void 0 !== e && e.call(i, \"DefaultParagraphSeparator\")) {\n    var _t62 = n.default.tagName;\n    if ([\"div\", \"p\"].includes(_t62)) return document.execCommand(\"DefaultParagraphSeparator\", !1, _t62);\n  }\n},\n    Jr = a.forcesObjectResizing ? {\n  display: \"inline\",\n  width: \"auto\"\n} : {\n  display: \"inline-block\",\n  width: \"1px\"\n};\n\nvt(\"trix-editor\", \"%t {\\n    display: block;\\n}\\n\\n%t:empty::before {\\n    content: attr(placeholder);\\n    color: graytext;\\n    cursor: text;\\n    pointer-events: none;\\n    white-space: pre-line;\\n}\\n\\n%t a[contenteditable=false] {\\n    cursor: text;\\n}\\n\\n%t img {\\n    max-width: 100%;\\n    height: auto;\\n}\\n\\n%t \".concat(e, \" figcaption textarea {\\n    resize: none;\\n}\\n\\n%t \").concat(e, \" figcaption textarea.trix-autoresize-clone {\\n    position: absolute;\\n    left: -9999px;\\n    max-height: 0px;\\n}\\n\\n%t \").concat(e, \" figcaption[data-trix-placeholder]:empty::before {\\n    content: attr(data-trix-placeholder);\\n    color: graytext;\\n}\\n\\n%t [data-trix-cursor-target] {\\n    display: \").concat(Jr.display, \" !important;\\n    width: \").concat(Jr.width, \" !important;\\n    padding: 0 !important;\\n    margin: 0 !important;\\n    border: none !important;\\n}\\n\\n%t [data-trix-cursor-target=left] {\\n    vertical-align: top !important;\\n    margin-left: -1px !important;\\n}\\n\\n%t [data-trix-cursor-target=right] {\\n    vertical-align: bottom !important;\\n    margin-right: -1px !important;\\n}\"));\nvar Kr = new WeakMap(),\n    Gr = new WeakSet();\n\nvar Yr = /*#__PURE__*/function () {\n  function Yr(t) {\n    _classCallCheck(this, Yr);\n\n    var e, i;\n    Mi(e = this, i = Gr), i.add(e), Bi(this, Kr, {\n      writable: !0,\n      value: void 0\n    }), this.element = t, Ni(this, Kr, t.attachInternals());\n  }\n\n  _createClass(Yr, [{\n    key: \"connectedCallback\",\n    value: function connectedCallback() {\n      Pi(this, Gr, $r).call(this);\n    }\n  }, {\n    key: \"disconnectedCallback\",\n    value: function disconnectedCallback() {}\n  }, {\n    key: \"labels\",\n    get: function get() {\n      return Di(this, Kr).labels;\n    }\n  }, {\n    key: \"disabled\",\n    get: function get() {\n      var t;\n      return null === (t = this.element.inputElement) || void 0 === t ? void 0 : t.disabled;\n    },\n    set: function set(t) {\n      this.element.toggleAttribute(\"disabled\", t);\n    }\n  }, {\n    key: \"required\",\n    get: function get() {\n      return this.element.hasAttribute(\"required\");\n    },\n    set: function set(t) {\n      this.element.toggleAttribute(\"required\", t), Pi(this, Gr, $r).call(this);\n    }\n  }, {\n    key: \"validity\",\n    get: function get() {\n      return Di(this, Kr).validity;\n    }\n  }, {\n    key: \"validationMessage\",\n    get: function get() {\n      return Di(this, Kr).validationMessage;\n    }\n  }, {\n    key: \"willValidate\",\n    get: function get() {\n      return Di(this, Kr).willValidate;\n    }\n  }, {\n    key: \"setFormValue\",\n    value: function setFormValue(t) {\n      Pi(this, Gr, $r).call(this);\n    }\n  }, {\n    key: \"checkValidity\",\n    value: function checkValidity() {\n      return Di(this, Kr).checkValidity();\n    }\n  }, {\n    key: \"reportValidity\",\n    value: function reportValidity() {\n      return Di(this, Kr).reportValidity();\n    }\n  }, {\n    key: \"setCustomValidity\",\n    value: function setCustomValidity(t) {\n      Pi(this, Gr, $r).call(this, t);\n    }\n  }]);\n\n  return Yr;\n}();\n\nfunction $r() {\n  var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : \"\";\n  var _this$element = this.element,\n      e = _this$element.required,\n      i = _this$element.value,\n      n = e && !i,\n      r = !!t,\n      o = T(\"input\", {\n    required: e\n  }),\n      s = t || o.validationMessage;\n  Di(this, Kr).setValidity({\n    valueMissing: n,\n    customError: r\n  }, s);\n}\n\nvar Xr = new WeakMap(),\n    Zr = new WeakMap(),\n    Qr = new WeakMap();\n\nvar to = /*#__PURE__*/function () {\n  function to(t) {\n    var _this75 = this;\n\n    _classCallCheck(this, to);\n\n    Bi(this, Xr, {\n      writable: !0,\n      value: void 0\n    }), Bi(this, Zr, {\n      writable: !0,\n      value: function value(t) {\n        t.defaultPrevented || t.target === _this75.element.form && _this75.element.reset();\n      }\n    }), Bi(this, Qr, {\n      writable: !0,\n      value: function value(t) {\n        if (t.defaultPrevented) return;\n        if (_this75.element.contains(t.target)) return;\n        var e = y(t.target, {\n          matchingSelector: \"label\"\n        });\n        e && Array.from(_this75.labels).includes(e) && _this75.element.focus();\n      }\n    }), this.element = t;\n  }\n\n  _createClass(to, [{\n    key: \"connectedCallback\",\n    value: function connectedCallback() {\n      Ni(this, Xr, function (t) {\n        if (t.hasAttribute(\"aria-label\") || t.hasAttribute(\"aria-labelledby\")) return;\n\n        var e = function e() {\n          var e = Array.from(t.labels).map(function (e) {\n            if (!e.contains(t)) return e.textContent;\n          }).filter(function (t) {\n            return t;\n          }),\n              i = e.join(\" \");\n          return i ? t.setAttribute(\"aria-label\", i) : t.removeAttribute(\"aria-label\");\n        };\n\n        return e(), b(\"focus\", {\n          onElement: t,\n          withCallback: e\n        });\n      }(this.element)), window.addEventListener(\"reset\", Di(this, Zr), !1), window.addEventListener(\"click\", Di(this, Qr), !1);\n    }\n  }, {\n    key: \"disconnectedCallback\",\n    value: function disconnectedCallback() {\n      var t;\n      null === (t = Di(this, Xr)) || void 0 === t || t.destroy(), window.removeEventListener(\"reset\", Di(this, Zr), !1), window.removeEventListener(\"click\", Di(this, Qr), !1);\n    }\n  }, {\n    key: \"labels\",\n    get: function get() {\n      var t = [];\n      this.element.id && this.element.ownerDocument && t.push.apply(t, _toConsumableArray(Array.from(this.element.ownerDocument.querySelectorAll(\"label[for='\".concat(this.element.id, \"']\")) || [])));\n      var e = y(this.element, {\n        matchingSelector: \"label\"\n      });\n      return e && [this.element, null].includes(e.control) && t.push(e), t;\n    }\n  }, {\n    key: \"disabled\",\n    get: function get() {\n      return console.warn(\"This browser does not support the [disabled] attribute for trix-editor elements.\"), !1;\n    },\n    set: function set(t) {\n      console.warn(\"This browser does not support the [disabled] attribute for trix-editor elements.\");\n    }\n  }, {\n    key: \"required\",\n    get: function get() {\n      return console.warn(\"This browser does not support the [required] attribute for trix-editor elements.\"), !1;\n    },\n    set: function set(t) {\n      console.warn(\"This browser does not support the [required] attribute for trix-editor elements.\");\n    }\n  }, {\n    key: \"validity\",\n    get: function get() {\n      return console.warn(\"This browser does not support the validity property for trix-editor elements.\"), null;\n    }\n  }, {\n    key: \"validationMessage\",\n    get: function get() {\n      return console.warn(\"This browser does not support the validationMessage property for trix-editor elements.\"), \"\";\n    }\n  }, {\n    key: \"willValidate\",\n    get: function get() {\n      return console.warn(\"This browser does not support the willValidate property for trix-editor elements.\"), !1;\n    }\n  }, {\n    key: \"setFormValue\",\n    value: function setFormValue(t) {}\n  }, {\n    key: \"checkValidity\",\n    value: function checkValidity() {\n      return console.warn(\"This browser does not support checkValidity() for trix-editor elements.\"), !0;\n    }\n  }, {\n    key: \"reportValidity\",\n    value: function reportValidity() {\n      return console.warn(\"This browser does not support reportValidity() for trix-editor elements.\"), !0;\n    }\n  }, {\n    key: \"setCustomValidity\",\n    value: function setCustomValidity(t) {\n      console.warn(\"This browser does not support setCustomValidity(validationMessage) for trix-editor elements.\");\n    }\n  }]);\n\n  return to;\n}();\n\nvar eo = new WeakMap();\n\nvar io = /*#__PURE__*/function (_HTMLElement2) {\n  _inherits(io, _HTMLElement2);\n\n  var _super43 = _createSuper(io);\n\n  function io() {\n    var _this76;\n\n    _classCallCheck(this, io);\n\n    _this76 = _super43.call(this), Bi(_assertThisInitialized(_this76), eo, {\n      writable: !0,\n      value: void 0\n    }), Ni(_assertThisInitialized(_this76), eo, _this76.constructor.formAssociated ? new Yr(_assertThisInitialized(_this76)) : new to(_assertThisInitialized(_this76)));\n    return _this76;\n  }\n\n  _createClass(io, [{\n    key: \"trixId\",\n    get: function get() {\n      return this.hasAttribute(\"trix-id\") ? this.getAttribute(\"trix-id\") : (this.setAttribute(\"trix-id\", ++Ur), this.trixId);\n    }\n  }, {\n    key: \"labels\",\n    get: function get() {\n      return Di(this, eo).labels;\n    }\n  }, {\n    key: \"disabled\",\n    get: function get() {\n      return Di(this, eo).disabled;\n    },\n    set: function set(t) {\n      Di(this, eo).disabled = t;\n    }\n  }, {\n    key: \"required\",\n    get: function get() {\n      return Di(this, eo).required;\n    },\n    set: function set(t) {\n      Di(this, eo).required = t;\n    }\n  }, {\n    key: \"validity\",\n    get: function get() {\n      return Di(this, eo).validity;\n    }\n  }, {\n    key: \"validationMessage\",\n    get: function get() {\n      return Di(this, eo).validationMessage;\n    }\n  }, {\n    key: \"willValidate\",\n    get: function get() {\n      return Di(this, eo).willValidate;\n    }\n  }, {\n    key: \"type\",\n    get: function get() {\n      return this.localName;\n    }\n  }, {\n    key: \"toolbarElement\",\n    get: function get() {\n      var t;\n      if (this.hasAttribute(\"toolbar\")) return null === (t = this.ownerDocument) || void 0 === t ? void 0 : t.getElementById(this.getAttribute(\"toolbar\"));\n\n      if (this.parentNode) {\n        var _t63 = \"trix-toolbar-\".concat(this.trixId);\n\n        this.setAttribute(\"toolbar\", _t63);\n\n        var _e57 = T(\"trix-toolbar\", {\n          id: _t63\n        });\n\n        return this.parentNode.insertBefore(_e57, this), _e57;\n      }\n    }\n  }, {\n    key: \"form\",\n    get: function get() {\n      var t;\n      return null === (t = this.inputElement) || void 0 === t ? void 0 : t.form;\n    }\n  }, {\n    key: \"inputElement\",\n    get: function get() {\n      var t;\n      if (this.hasAttribute(\"input\")) return null === (t = this.ownerDocument) || void 0 === t ? void 0 : t.getElementById(this.getAttribute(\"input\"));\n\n      if (this.parentNode) {\n        var _t64 = \"trix-input-\".concat(this.trixId);\n\n        this.setAttribute(\"input\", _t64);\n\n        var _e58 = T(\"input\", {\n          type: \"hidden\",\n          id: _t64\n        });\n\n        return this.parentNode.insertBefore(_e58, this.nextElementSibling), _e58;\n      }\n    }\n  }, {\n    key: \"editor\",\n    get: function get() {\n      var t;\n      return null === (t = this.editorController) || void 0 === t ? void 0 : t.editor;\n    }\n  }, {\n    key: \"name\",\n    get: function get() {\n      var t;\n      return null === (t = this.inputElement) || void 0 === t ? void 0 : t.name;\n    }\n  }, {\n    key: \"value\",\n    get: function get() {\n      var t;\n      return null === (t = this.inputElement) || void 0 === t ? void 0 : t.value;\n    },\n    set: function set(t) {\n      var e;\n      this.defaultValue = t, null === (e = this.editor) || void 0 === e || e.loadHTML(this.defaultValue);\n    }\n  }, {\n    key: \"notify\",\n    value: function notify(t, e) {\n      if (this.editorController) return v(\"trix-\".concat(t), {\n        onElement: this,\n        attributes: e\n      });\n    }\n  }, {\n    key: \"setFormValue\",\n    value: function setFormValue(t) {\n      this.inputElement && (this.inputElement.value = t, Di(this, eo).setFormValue(t));\n    }\n  }, {\n    key: \"connectedCallback\",\n    value: function connectedCallback() {\n      var _this77 = this;\n\n      this.hasAttribute(\"data-trix-internal\") || (Vr(this), function (t) {\n        if (!t.hasAttribute(\"role\")) t.setAttribute(\"role\", \"textbox\");\n      }(this), this.editorController || (v(\"trix-before-initialize\", {\n        onElement: this\n      }), this.editorController = new Mr({\n        editorElement: this,\n        html: this.defaultValue = this.value\n      }), requestAnimationFrame(function () {\n        return v(\"trix-initialize\", {\n          onElement: _this77\n        });\n      })), this.editorController.registerSelectionManager(), Di(this, eo).connectedCallback(), function (t) {\n        if (!document.querySelector(\":focus\") && t.hasAttribute(\"autofocus\") && document.querySelector(\"[autofocus]\") === t) t.focus();\n      }(this));\n    }\n  }, {\n    key: \"disconnectedCallback\",\n    value: function disconnectedCallback() {\n      var t;\n      null === (t = this.editorController) || void 0 === t || t.unregisterSelectionManager(), Di(this, eo).disconnectedCallback();\n    }\n  }, {\n    key: \"checkValidity\",\n    value: function checkValidity() {\n      return Di(this, eo).checkValidity();\n    }\n  }, {\n    key: \"reportValidity\",\n    value: function reportValidity() {\n      return Di(this, eo).reportValidity();\n    }\n  }, {\n    key: \"setCustomValidity\",\n    value: function setCustomValidity(t) {\n      Di(this, eo).setCustomValidity(t);\n    }\n  }, {\n    key: \"formDisabledCallback\",\n    value: function formDisabledCallback(t) {\n      this.inputElement && (this.inputElement.disabled = t), this.toggleAttribute(\"contenteditable\", !t);\n    }\n  }, {\n    key: \"formResetCallback\",\n    value: function formResetCallback() {\n      this.reset();\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this.value = this.defaultValue;\n    }\n  }]);\n\n  return io;\n}( /*#__PURE__*/_wrapNativeSuper(HTMLElement));\n\nwi(io, \"formAssociated\", \"ElementInternals\" in window);\nvar no = {\n  VERSION: t,\n  config: z,\n  core: Cn,\n  models: Un,\n  views: Vn,\n  controllers: Br,\n  observers: _r,\n  operations: jr,\n  elements: Object.freeze({\n    __proto__: null,\n    TrixEditorElement: io,\n    TrixToolbarElement: Wr\n  }),\n  filters: Object.freeze({\n    __proto__: null,\n    Filter: Dn,\n    attachmentGalleryFilter: Nn\n  })\n};\nObject.assign(no, Un), window.Trix = no, setTimeout(function () {\n  customElements.get(\"trix-toolbar\") || customElements.define(\"trix-toolbar\", Wr), customElements.get(\"trix-editor\") || customElements.define(\"trix-editor\", io);\n}, 0);\nexport { no as default };","import { Calendar } from '@fullcalendar/core'\nimport dayGridPlugin from '@fullcalendar/daygrid'\nimport timeGridPlugin from '@fullcalendar/timegrid'\nimport deLocale from '@fullcalendar/core/locales/de'\nimport listPlugin from '@fullcalendar/list'\nimport interactionPlugin from '@fullcalendar/interaction'\n\n//CHECK WHICH CAL HAS TO BE RENDERED\n\n$(document).on('turbo:load', function () {\n  if ($('#time_table_id').length >= 1) {\n    bookingCalendarInteractive()\n  }\n  //collapse header is clicked:\n  $('#headingFour').click(function () {\n    if ($('#time_table_id_type').length >= 1) {\n      bookingTypeCalendar()\n    } else if ($('#type_id').length >= 1) {\n      bookingTypeCalendarWithoutTimeTable()\n    }\n  })\n})\n\n//CHECK WHICH CAL HAS TO BE RENDERED END\n\n//SOME FUNCTIONS START\n\nvar bookings_json_url\n\nfunction getFinalUrl(url_partial) {\n  var url_string = window.location.href\n  var url = new URL(url_string)\n\n  if ($('#type_id').length >= 1) {\n    var c = $('#type_id').html()\n  } else {\n    var c = $('#preselected_type_id').html() //url.searchParams.get(\"type\");\n  }\n\n  if (window.location.port) {\n    return (bookings_json_url =\n      window.location.protocol +\n      '//' +\n      window.location.hostname +\n      ':' +\n      window.location.port +\n      '/' +\n      url_partial +\n      '/' +\n      c +\n      '.json')\n  } else {\n    return (bookings_json_url =\n      window.location.protocol +\n      '//' +\n      window.location.hostname +\n      '/' +\n      url_partial +\n      '/' +\n      c +\n      '.json')\n  }\n}\n\nfunction getTimeTableURL(tt_id) {\n  var url_string = window.location.href\n  var url = new URL(url_string)\n  var tt_id = tt_id\n  var tt_json_url\n  if (window.location.port) {\n    if (tt_id != null) {\n      return (tt_json_url =\n        window.location.protocol +\n        '//' +\n        window.location.hostname +\n        ':' +\n        window.location.port +\n        '/time_tables/' +\n        tt_id +\n        '.json')\n    } else {\n      return (tt_json_url = window.location.href + '.json')\n    }\n  } else {\n    if (tt_id != null) {\n      return (tt_json_url =\n        window.location.protocol +\n        '//' +\n        window.location.hostname +\n        '/time_tables/' +\n        tt_id +\n        'json')\n    } else {\n      return (tt_json_url = window.location.href + '.json')\n    }\n  }\n}\nfunction add_zeros(hour) {\n  if (hour === '') {\n    return '0:00'\n  } else {\n    return hour + ':00'\n  }\n}\n\nfunction update_inputs(event) {\n  document.getElementById('calendarPickerStartDate').value =\n    event.start.toLocaleString('de-DE')\n  document.getElementById('calendarPickerEndDate').value =\n    event.end.toLocaleString('de-DE')\n  $('#current_time_selection').show()\n  $('#date_picker_inputs').show()\n}\n\nfunction remove_selection(calendar, event) {\n  var id = id || 'neu'\n  event.remove()\n  //only in edit mode\n  if ($('#start_date').length) {\n    var existing_event = calendar.getEventById(\n      parseInt($('#booking_id').html())\n    )\n    existing_event.remove()\n  }\n\n  $('#date_picker_inputs').hide()\n  addedEvent = false\n}\n\nvar addedEvent = false\n//SOME FUNCTIONS END\n\n//calendar for type info with TIMETABLE\nfunction bookingTypeCalendar() {\n  getFinalUrl('type_bookings')\n  $.getJSON(getTimeTableURL($('#time_table_id_type').html())).done(function (\n    data\n  ) {\n    var time_table = data\n\n    function slot(daynr, day, index) {\n      if (time_table[day + '_start'][index] != undefined) {\n        return {\n          daysOfWeek: [daynr],\n          startTime: add_zeros(time_table[day + '_start'][index]),\n          endTime: add_zeros(time_table[day + '_end'][index]),\n        }\n      } else {\n        return {\n          daysOfWeek: [],\n          startTime: '',\n          endTime: '',\n        }\n      }\n    }\n\n    var calendarEl = document.getElementById('type_calendar')\n    var calendar = new Calendar(calendarEl, {\n      plugins: [timeGridPlugin, dayGridPlugin, listPlugin],\n      initialView: window.innerWidth >= 765 ? 'timeGridWeek' : 'timeGridDay',\n      locale: deLocale,\n      eventColor: '#016973',\n      fixedWeekCount: true,\n      headerToolbar: {\n        left: 'prev,next today',\n        center: 'title',\n        right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek',\n      },\n      buttonText: {\n        listWeek: 'Liste',\n      },\n      events: bookings_json_url,\n      themeSystem: 'standard',\n      businessHours: [\n        slot(1, 'mon', 0),\n        slot(1, 'mon', 1),\n        slot(1, 'mon', 2),\n        slot(2, 'tue', 0),\n        slot(2, 'tue', 1),\n        slot(2, 'tue', 2),\n        slot(3, 'wed', 0),\n        slot(3, 'wed', 1),\n        slot(3, 'wed', 2),\n        slot(4, 'thu', 0),\n        slot(4, 'thu', 1),\n        slot(4, 'thu', 2),\n        slot(5, 'fri', 0),\n        slot(5, 'fri', 1),\n        slot(5, 'fri', 2),\n        slot(6, 'sat', 0),\n        slot(6, 'sat', 1),\n        slot(6, 'sat', 2),\n        slot(7, 'sun', 0),\n        slot(7, 'sun', 1),\n        slot(7, 'sun', 2),\n      ],\n      selectConstraint: 'businessHours',\n      eventConstraint: 'businessHours',\n    })\n    calendar.render()\n  })\n}\n\n//END calendar for type info with TIMETABLE\n\n//WITHOUT TIMETABLE\n\nfunction bookingTypeCalendarWithoutTimeTable() {\n  getFinalUrl('type_bookings')\n\n  var calendarEl = document.getElementById('type_calendar')\n  var calendar = new Calendar(calendarEl, {\n    plugins: [timeGridPlugin, dayGridPlugin, listPlugin],\n    initialView: window.innerWidth >= 765 ? 'timeGridWeek' : 'timeGridDay',\n    locale: deLocale,\n    eventColor: '#016973',\n    fixedWeekCount: true,\n    headerToolbar: {\n      left: 'prev,next today',\n      center: 'title',\n      right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek',\n    },\n    buttonText: {\n      listWeek: 'Liste',\n    },\n    events: bookings_json_url,\n    themeSystem: 'standard',\n  })\n  calendar.render()\n}\n//END WITHOUT TIMETABLE\n\n//START INTERACTIVE CAL IN BOOKING FORM\n\nfunction bookingCalendarInteractive() {\n  $('.cal_picker_loading').show()\n  $('.cal_picker').hide()\n  $('.cal_form').hide()\n\n  getFinalUrl('types')\n  //in type/show.json wird es gerendert..\n  $.getJSON(getTimeTableURL($('#time_table_id').html())).done(function (data) {\n    var time_table = data\n    function slot(daynr, day, index) {\n      if (time_table[day + '_start'][index] != undefined) {\n        return {\n          daysOfWeek: [daynr],\n          startTime: add_zeros(time_table[day + '_start'][index]),\n          endTime: add_zeros(time_table[day + '_end'][index]),\n        }\n      } else {\n        return {\n          daysOfWeek: [],\n          startTime: '',\n          endTime: '',\n        }\n      }\n    }\n    $.getJSON(bookings_json_url).done(function (data) {\n      var newRecord = {\n        id: parseInt($('#booking_id').html()),\n        description: 'test mit kalender',\n        title: $('#current_user_name').html(),\n        start: $('#start_date').html(),\n        end: $('#end_date').html(),\n        display: 'auto',\n      }\n      function updateJSON(data, newRecord) {\n        return data.map(function (item) {\n          return item.id === newRecord.id &&\n            item.start === newRecord.start &&\n            item.end === newRecord.end &&\n            item.display === newRecord.display\n            ? newRecord\n            : item\n        })\n      }\n      var updated_booking_json = updateJSON(data, newRecord)\n      var minDate =\n        $('#start_date').html() !== undefined\n          ? $('#start_date').html()\n          : new Date()\n      var selectOverlapAllowed = $('#select_overlap_allowed').text() === 'true'\n      var calendarEl = document.getElementById('type_calendar_interactive')\n      var calendar = new Calendar(calendarEl, {\n        plugins: [timeGridPlugin, interactionPlugin],\n        initialView: window.innerWidth >= 765 ? 'timeGridWeek' : 'timeGridDay',\n        validRange: {\n          start: minDate,\n        },\n        locale: deLocale,\n        eventColor: '#016973',\n        fixedWeekCount: true,\n        nowIndicator: true,\n        headerToolbar: {\n          left: 'prev,next today',\n          center: 'title',\n          right: '',\n        },\n        buttonText: {\n          listWeek: 'Liste',\n        },\n        events: updated_booking_json,\n        themeSystem: 'standard',\n        snapDuration: '00:15:00',\n        allDaySlot: false,\n        editable: true,\n        initialDate: $('#start_date').html(),\n        selectOverlap: selectOverlapAllowed,\n        selectable: true,\n        selectAllow: function (info) {\n          return info.start >= Date.now()\n        },\n        eventAllow: function (info) {\n          return info.start >= Date.now()\n        },\n        businessHours: [\n          slot(1, 'mon', 0),\n          slot(1, 'mon', 1),\n          slot(1, 'mon', 2),\n          slot(2, 'tue', 0),\n          slot(2, 'tue', 1),\n          slot(2, 'tue', 2),\n          slot(3, 'wed', 0),\n          slot(3, 'wed', 1),\n          slot(3, 'wed', 2),\n          slot(4, 'thu', 0),\n          slot(4, 'thu', 1),\n          slot(4, 'thu', 2),\n          slot(5, 'fri', 0),\n          slot(5, 'fri', 1),\n          slot(5, 'fri', 2),\n          slot(6, 'sat', 0),\n          slot(6, 'sat', 1),\n          slot(6, 'sat', 2),\n          slot(7, 'sun', 0),\n          slot(7, 'sun', 1),\n          slot(7, 'sun', 2),\n        ],\n        selectConstraint: 'businessHours',\n        eventConstraint: 'businessHours',\n        select: function (selectionInfo) {\n          var new_event = calendar.getEventById('neu')\n          if (addedEvent === true || $('#start_date').html() == 'undefined') {\n            remove_selection(calendar, new_event)\n          }\n          var username = $('#current_user_name').html()\n          var event = new Object()\n          addedEvent = true\n          event.id = 'neu'\n          event.title = username\n          event.start = selectionInfo.start\n          event.end = selectionInfo.end\n          event.allDay = false\n          update_inputs(event)\n          calendar.addEvent(event)\n        },\n        eventResize: function (eventResizeInfo) {\n          update_inputs(eventResizeInfo.event)\n        },\n        eventDrop: function (eventDropInfo) {\n          update_inputs(eventDropInfo.event)\n        },\n      })\n      if ($('#booking_id').html() !== undefined) {\n        //in edit mode: don't render event in background\n        calendar\n          .getEventById(parseInt($('#booking_id').html()))\n          .setProp('display', 'auto')\n        calendar\n          .getEventById(parseInt($('#booking_id').html()))\n          .setProp('title', $('#current_user_name').html())\n      }\n      $('.cal_picker_loading').hide()\n      $('.cal_picker').show()\n      $('.cal_form').show()\n\n      calendar.render()\n    })\n  })\n}\n\n//END INTERACTIVE CAL IN BOOKING FORM\n","/*\n * Toastr\n * Copyright 2012-2015\n * Authors: John Papa, Hans Fjällemark, and Tim Ferrell.\n * All Rights Reserved.\n * Use, reproduction, distribution, and modification of this code is subject to the terms and\n * conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php\n *\n * ARIA Support: Greta Krafsig\n *\n * Project: https://github.com/CodeSeven/toastr\n */\n\n/* global define */\n(function (define) {\n  define(['jquery'], function ($) {\n    return function () {\n      var $container;\n      var listener;\n      var toastId = 0;\n      var toastType = {\n        error: 'error',\n        info: 'info',\n        success: 'success',\n        warning: 'warning'\n      };\n      var toastr = {\n        clear: clear,\n        remove: remove,\n        error: error,\n        getContainer: getContainer,\n        info: info,\n        options: {},\n        subscribe: subscribe,\n        success: success,\n        version: '2.1.4',\n        warning: warning\n      };\n      var previousToast;\n      return toastr; ////////////////\n\n      function error(message, title, optionsOverride) {\n        return notify({\n          type: toastType.error,\n          iconClass: getOptions().iconClasses.error,\n          message: message,\n          optionsOverride: optionsOverride,\n          title: title\n        });\n      }\n\n      function getContainer(options, create) {\n        if (!options) {\n          options = getOptions();\n        }\n\n        $container = $('#' + options.containerId);\n\n        if ($container.length) {\n          return $container;\n        }\n\n        if (create) {\n          $container = createContainer(options);\n        }\n\n        return $container;\n      }\n\n      function info(message, title, optionsOverride) {\n        return notify({\n          type: toastType.info,\n          iconClass: getOptions().iconClasses.info,\n          message: message,\n          optionsOverride: optionsOverride,\n          title: title\n        });\n      }\n\n      function subscribe(callback) {\n        listener = callback;\n      }\n\n      function success(message, title, optionsOverride) {\n        return notify({\n          type: toastType.success,\n          iconClass: getOptions().iconClasses.success,\n          message: message,\n          optionsOverride: optionsOverride,\n          title: title\n        });\n      }\n\n      function warning(message, title, optionsOverride) {\n        return notify({\n          type: toastType.warning,\n          iconClass: getOptions().iconClasses.warning,\n          message: message,\n          optionsOverride: optionsOverride,\n          title: title\n        });\n      }\n\n      function clear($toastElement, clearOptions) {\n        var options = getOptions();\n\n        if (!$container) {\n          getContainer(options);\n        }\n\n        if (!clearToast($toastElement, options, clearOptions)) {\n          clearContainer(options);\n        }\n      }\n\n      function remove($toastElement) {\n        var options = getOptions();\n\n        if (!$container) {\n          getContainer(options);\n        }\n\n        if ($toastElement && $(':focus', $toastElement).length === 0) {\n          removeToast($toastElement);\n          return;\n        }\n\n        if ($container.children().length) {\n          $container.remove();\n        }\n      } // internal functions\n\n\n      function clearContainer(options) {\n        var toastsToClear = $container.children();\n\n        for (var i = toastsToClear.length - 1; i >= 0; i--) {\n          clearToast($(toastsToClear[i]), options);\n        }\n      }\n\n      function clearToast($toastElement, options, clearOptions) {\n        var force = clearOptions && clearOptions.force ? clearOptions.force : false;\n\n        if ($toastElement && (force || $(':focus', $toastElement).length === 0)) {\n          $toastElement[options.hideMethod]({\n            duration: options.hideDuration,\n            easing: options.hideEasing,\n            complete: function complete() {\n              removeToast($toastElement);\n            }\n          });\n          return true;\n        }\n\n        return false;\n      }\n\n      function createContainer(options) {\n        $container = $('<div/>').attr('id', options.containerId).addClass(options.positionClass);\n        $container.appendTo($(options.target));\n        return $container;\n      }\n\n      function getDefaults() {\n        return {\n          tapToDismiss: true,\n          toastClass: 'toast',\n          containerId: 'toast-container',\n          debug: false,\n          showMethod: 'fadeIn',\n          //fadeIn, slideDown, and show are built into jQuery\n          showDuration: 300,\n          showEasing: 'swing',\n          //swing and linear are built into jQuery\n          onShown: undefined,\n          hideMethod: 'fadeOut',\n          hideDuration: 1000,\n          hideEasing: 'swing',\n          onHidden: undefined,\n          closeMethod: false,\n          closeDuration: false,\n          closeEasing: false,\n          closeOnHover: true,\n          extendedTimeOut: 1000,\n          iconClasses: {\n            error: 'toast-error',\n            info: 'toast-info',\n            success: 'toast-success',\n            warning: 'toast-warning'\n          },\n          iconClass: 'toast-info',\n          positionClass: 'toast-top-right',\n          timeOut: 5000,\n          // Set timeOut and extendedTimeOut to 0 to make it sticky\n          titleClass: 'toast-title',\n          messageClass: 'toast-message',\n          escapeHtml: false,\n          target: 'body',\n          closeHtml: '<button type=\"button\">&times;</button>',\n          closeClass: 'toast-close-button',\n          newestOnTop: true,\n          preventDuplicates: false,\n          progressBar: false,\n          progressClass: 'toast-progress',\n          rtl: false\n        };\n      }\n\n      function publish(args) {\n        if (!listener) {\n          return;\n        }\n\n        listener(args);\n      }\n\n      function notify(map) {\n        var options = getOptions();\n        var iconClass = map.iconClass || options.iconClass;\n\n        if (typeof map.optionsOverride !== 'undefined') {\n          options = $.extend(options, map.optionsOverride);\n          iconClass = map.optionsOverride.iconClass || iconClass;\n        }\n\n        if (shouldExit(options, map)) {\n          return;\n        }\n\n        toastId++;\n        $container = getContainer(options, true);\n        var intervalId = null;\n        var $toastElement = $('<div/>');\n        var $titleElement = $('<div/>');\n        var $messageElement = $('<div/>');\n        var $progressElement = $('<div/>');\n        var $closeElement = $(options.closeHtml);\n        var progressBar = {\n          intervalId: null,\n          hideEta: null,\n          maxHideTime: null\n        };\n        var response = {\n          toastId: toastId,\n          state: 'visible',\n          startTime: new Date(),\n          options: options,\n          map: map\n        };\n        personalizeToast();\n        displayToast();\n        handleEvents();\n        publish(response);\n\n        if (options.debug && console) {\n          console.log(response);\n        }\n\n        return $toastElement;\n\n        function escapeHtml(source) {\n          if (source == null) {\n            source = '';\n          }\n\n          return source.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n        }\n\n        function personalizeToast() {\n          setIcon();\n          setTitle();\n          setMessage();\n          setCloseButton();\n          setProgressBar();\n          setRTL();\n          setSequence();\n          setAria();\n        }\n\n        function setAria() {\n          var ariaValue = '';\n\n          switch (map.iconClass) {\n            case 'toast-success':\n            case 'toast-info':\n              ariaValue = 'polite';\n              break;\n\n            default:\n              ariaValue = 'assertive';\n          }\n\n          $toastElement.attr('aria-live', ariaValue);\n        }\n\n        function handleEvents() {\n          if (options.closeOnHover) {\n            $toastElement.hover(stickAround, delayedHideToast);\n          }\n\n          if (!options.onclick && options.tapToDismiss) {\n            $toastElement.click(hideToast);\n          }\n\n          if (options.closeButton && $closeElement) {\n            $closeElement.click(function (event) {\n              if (event.stopPropagation) {\n                event.stopPropagation();\n              } else if (event.cancelBubble !== undefined && event.cancelBubble !== true) {\n                event.cancelBubble = true;\n              }\n\n              if (options.onCloseClick) {\n                options.onCloseClick(event);\n              }\n\n              hideToast(true);\n            });\n          }\n\n          if (options.onclick) {\n            $toastElement.click(function (event) {\n              options.onclick(event);\n              hideToast();\n            });\n          }\n        }\n\n        function displayToast() {\n          $toastElement.hide();\n          $toastElement[options.showMethod]({\n            duration: options.showDuration,\n            easing: options.showEasing,\n            complete: options.onShown\n          });\n\n          if (options.timeOut > 0) {\n            intervalId = setTimeout(hideToast, options.timeOut);\n            progressBar.maxHideTime = parseFloat(options.timeOut);\n            progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n\n            if (options.progressBar) {\n              progressBar.intervalId = setInterval(updateProgress, 10);\n            }\n          }\n        }\n\n        function setIcon() {\n          if (map.iconClass) {\n            $toastElement.addClass(options.toastClass).addClass(iconClass);\n          }\n        }\n\n        function setSequence() {\n          if (options.newestOnTop) {\n            $container.prepend($toastElement);\n          } else {\n            $container.append($toastElement);\n          }\n        }\n\n        function setTitle() {\n          if (map.title) {\n            var suffix = map.title;\n\n            if (options.escapeHtml) {\n              suffix = escapeHtml(map.title);\n            }\n\n            $titleElement.append(suffix).addClass(options.titleClass);\n            $toastElement.append($titleElement);\n          }\n        }\n\n        function setMessage() {\n          if (map.message) {\n            var suffix = map.message;\n\n            if (options.escapeHtml) {\n              suffix = escapeHtml(map.message);\n            }\n\n            $messageElement.append(suffix).addClass(options.messageClass);\n            $toastElement.append($messageElement);\n          }\n        }\n\n        function setCloseButton() {\n          if (options.closeButton) {\n            $closeElement.addClass(options.closeClass).attr('role', 'button');\n            $toastElement.prepend($closeElement);\n          }\n        }\n\n        function setProgressBar() {\n          if (options.progressBar) {\n            $progressElement.addClass(options.progressClass);\n            $toastElement.prepend($progressElement);\n          }\n        }\n\n        function setRTL() {\n          if (options.rtl) {\n            $toastElement.addClass('rtl');\n          }\n        }\n\n        function shouldExit(options, map) {\n          if (options.preventDuplicates) {\n            if (map.message === previousToast) {\n              return true;\n            } else {\n              previousToast = map.message;\n            }\n          }\n\n          return false;\n        }\n\n        function hideToast(override) {\n          var method = override && options.closeMethod !== false ? options.closeMethod : options.hideMethod;\n          var duration = override && options.closeDuration !== false ? options.closeDuration : options.hideDuration;\n          var easing = override && options.closeEasing !== false ? options.closeEasing : options.hideEasing;\n\n          if ($(':focus', $toastElement).length && !override) {\n            return;\n          }\n\n          clearTimeout(progressBar.intervalId);\n          return $toastElement[method]({\n            duration: duration,\n            easing: easing,\n            complete: function complete() {\n              removeToast($toastElement);\n              clearTimeout(intervalId);\n\n              if (options.onHidden && response.state !== 'hidden') {\n                options.onHidden();\n              }\n\n              response.state = 'hidden';\n              response.endTime = new Date();\n              publish(response);\n            }\n          });\n        }\n\n        function delayedHideToast() {\n          if (options.timeOut > 0 || options.extendedTimeOut > 0) {\n            intervalId = setTimeout(hideToast, options.extendedTimeOut);\n            progressBar.maxHideTime = parseFloat(options.extendedTimeOut);\n            progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n          }\n        }\n\n        function stickAround() {\n          clearTimeout(intervalId);\n          progressBar.hideEta = 0;\n          $toastElement.stop(true, true)[options.showMethod]({\n            duration: options.showDuration,\n            easing: options.showEasing\n          });\n        }\n\n        function updateProgress() {\n          var percentage = (progressBar.hideEta - new Date().getTime()) / progressBar.maxHideTime * 100;\n          $progressElement.width(percentage + '%');\n        }\n      }\n\n      function getOptions() {\n        return $.extend({}, getDefaults(), toastr.options);\n      }\n\n      function removeToast($toastElement) {\n        if (!$container) {\n          $container = getContainer();\n        }\n\n        if ($toastElement.is(':visible')) {\n          return;\n        }\n\n        $toastElement.remove();\n        $toastElement = null;\n\n        if ($container.children().length === 0) {\n          $container.remove();\n          previousToast = undefined;\n        }\n      }\n    }();\n  });\n})(typeof define === 'function' && define.amd ? define : function (deps, factory) {\n  if (typeof module !== 'undefined' && module.exports) {\n    //Node\n    module.exports = factory(require('jquery'));\n  } else {\n    window.toastr = factory(window.jQuery);\n  }\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * jQuery JavaScript Library v3.6.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2022-08-26T17:52Z\n */\n(function (global, factory) {\n  \"use strict\";\n\n  if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && _typeof(module.exports) === \"object\") {\n    // For CommonJS and CommonJS-like environments where a proper `window`\n    // is present, execute the factory and get jQuery.\n    // For environments that do not have a `window` with a `document`\n    // (such as Node.js), expose a factory as module.exports.\n    // This accentuates the need for the creation of a real `window`.\n    // e.g. var jQuery = require(\"jquery\")(window);\n    // See ticket trac-14549 for more info.\n    module.exports = global.document ? factory(global, true) : function (w) {\n      if (!w.document) {\n        throw new Error(\"jQuery requires a window with a document\");\n      }\n\n      return factory(w);\n    };\n  } else {\n    factory(global);\n  } // Pass this if window is not defined yet\n\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\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\n  var arr = [];\n  var getProto = Object.getPrototypeOf;\n  var _slice = arr.slice;\n  var flat = arr.flat ? function (array) {\n    return arr.flat.call(array);\n  } : function (array) {\n    return arr.concat.apply([], array);\n  };\n  var push = arr.push;\n  var indexOf = arr.indexOf;\n  var class2type = {};\n  var toString = class2type.toString;\n  var hasOwn = class2type.hasOwnProperty;\n  var fnToString = hasOwn.toString;\n  var ObjectFunctionString = fnToString.call(Object);\n  var support = {};\n\n  var isFunction = function isFunction(obj) {\n    // Support: Chrome <=57, Firefox <=52\n    // In some browsers, typeof returns \"function\" for HTML <object> elements\n    // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n    // We don't want to classify *any* DOM node as a function.\n    // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n    // Plus for old WebKit, typeof returns \"function\" for HTML collections\n    // (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n    return typeof obj === \"function\" && typeof obj.nodeType !== \"number\" && typeof obj.item !== \"function\";\n  };\n\n  var isWindow = function isWindow(obj) {\n    return obj != null && obj === obj.window;\n  };\n\n  var document = window.document;\n  var preservedScriptAttributes = {\n    type: true,\n    src: true,\n    nonce: true,\n    noModule: true\n  };\n\n  function DOMEval(code, node, doc) {\n    doc = doc || document;\n    var i,\n        val,\n        script = doc.createElement(\"script\");\n    script.text = code;\n\n    if (node) {\n      for (i in preservedScriptAttributes) {\n        // Support: Firefox 64+, Edge 18+\n        // Some browsers don't support the \"nonce\" property on scripts.\n        // On the other hand, just using `getAttribute` is not enough as\n        // the `nonce` attribute is reset to an empty string whenever it\n        // becomes browsing-context connected.\n        // See https://github.com/whatwg/html/issues/2369\n        // See https://html.spec.whatwg.org/#nonce-attributes\n        // The `node.getAttribute` check was added for the sake of\n        // `jQuery.globalEval` so that it can fake a nonce-containing node\n        // via an object.\n        val = node[i] || node.getAttribute && node.getAttribute(i);\n\n        if (val) {\n          script.setAttribute(i, val);\n        }\n      }\n    }\n\n    doc.head.appendChild(script).parentNode.removeChild(script);\n  }\n\n  function toType(obj) {\n    if (obj == null) {\n      return obj + \"\";\n    } // Support: Android <=2.3 only (functionish RegExp)\n\n\n    return _typeof(obj) === \"object\" || typeof obj === \"function\" ? class2type[toString.call(obj)] || \"object\" : _typeof(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  var version = \"3.6.1\",\n      // Define a local copy of jQuery\n  jQuery = function jQuery(selector, context) {\n    // The jQuery object is actually just the init constructor 'enhanced'\n    // Need init if jQuery is called (just allow error to be thrown if not included)\n    return new jQuery.fn.init(selector, context);\n  };\n\n  jQuery.fn = jQuery.prototype = {\n    // The current version of jQuery being used\n    jquery: version,\n    constructor: jQuery,\n    // The default length of a jQuery object is 0\n    length: 0,\n    toArray: function toArray() {\n      return _slice.call(this);\n    },\n    // Get the Nth element in the matched element set OR\n    // Get the whole matched element set as a clean array\n    get: function get(num) {\n      // Return all the elements in a clean array\n      if (num == null) {\n        return _slice.call(this);\n      } // Return just the one element from the set\n\n\n      return num < 0 ? this[num + this.length] : this[num];\n    },\n    // Take an array of elements and push it onto the stack\n    // (returning the new matched element set)\n    pushStack: function pushStack(elems) {\n      // Build a new jQuery matched element set\n      var ret = jQuery.merge(this.constructor(), elems); // Add the old object onto the stack (as a reference)\n\n      ret.prevObject = this; // Return the newly-formed element set\n\n      return ret;\n    },\n    // Execute a callback for every element in the matched set.\n    each: function each(callback) {\n      return jQuery.each(this, callback);\n    },\n    map: function map(callback) {\n      return this.pushStack(jQuery.map(this, function (elem, i) {\n        return callback.call(elem, i, elem);\n      }));\n    },\n    slice: function slice() {\n      return this.pushStack(_slice.apply(this, arguments));\n    },\n    first: function first() {\n      return this.eq(0);\n    },\n    last: function last() {\n      return this.eq(-1);\n    },\n    even: function even() {\n      return this.pushStack(jQuery.grep(this, function (_elem, i) {\n        return (i + 1) % 2;\n      }));\n    },\n    odd: function odd() {\n      return this.pushStack(jQuery.grep(this, function (_elem, i) {\n        return i % 2;\n      }));\n    },\n    eq: function eq(i) {\n      var len = this.length,\n          j = +i + (i < 0 ? len : 0);\n      return this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n    },\n    end: function end() {\n      return this.prevObject || this.constructor();\n    },\n    // For internal use only.\n    // Behaves like an Array's method, not like a jQuery method.\n    push: push,\n    sort: arr.sort,\n    splice: arr.splice\n  };\n\n  jQuery.extend = jQuery.fn.extend = function () {\n    var options,\n        name,\n        src,\n        copy,\n        copyIsArray,\n        clone,\n        target = arguments[0] || {},\n        i = 1,\n        length = arguments.length,\n        deep = false; // Handle a deep copy situation\n\n    if (typeof target === \"boolean\") {\n      deep = target; // Skip the boolean and the target\n\n      target = arguments[i] || {};\n      i++;\n    } // Handle case when target is a string or something (possible in deep copy)\n\n\n    if (_typeof(target) !== \"object\" && !isFunction(target)) {\n      target = {};\n    } // Extend jQuery itself if only one argument is passed\n\n\n    if (i === length) {\n      target = this;\n      i--;\n    }\n\n    for (; i < length; i++) {\n      // Only deal with non-null/undefined values\n      if ((options = arguments[i]) != null) {\n        // Extend the base object\n        for (name in options) {\n          copy = options[name]; // Prevent Object.prototype pollution\n          // Prevent never-ending loop\n\n          if (name === \"__proto__\" || target === copy) {\n            continue;\n          } // Recurse if we're merging plain objects or arrays\n\n\n          if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n            src = target[name]; // Ensure proper type for the source value\n\n            if (copyIsArray && !Array.isArray(src)) {\n              clone = [];\n            } else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n              clone = {};\n            } else {\n              clone = src;\n            }\n\n            copyIsArray = false; // Never move original objects, clone them\n\n            target[name] = jQuery.extend(deep, clone, copy); // Don't bring in undefined values\n          } else if (copy !== undefined) {\n            target[name] = copy;\n          }\n        }\n      }\n    } // Return the modified object\n\n\n    return target;\n  };\n\n  jQuery.extend({\n    // Unique for each copy of jQuery on the page\n    expando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n    // Assume jQuery is ready without the ready module\n    isReady: true,\n    error: function error(msg) {\n      throw new Error(msg);\n    },\n    noop: function noop() {},\n    isPlainObject: function isPlainObject(obj) {\n      var proto, Ctor; // Detect obvious negatives\n      // Use toString instead of jQuery.type to catch host objects\n\n      if (!obj || toString.call(obj) !== \"[object Object]\") {\n        return false;\n      }\n\n      proto = getProto(obj); // Objects with no prototype (e.g., `Object.create( null )`) are plain\n\n      if (!proto) {\n        return true;\n      } // Objects with prototype are plain iff they were constructed by a global Object function\n\n\n      Ctor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n      return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n    },\n    isEmptyObject: function isEmptyObject(obj) {\n      var name;\n\n      for (name in obj) {\n        return false;\n      }\n\n      return true;\n    },\n    // Evaluates a script in a provided context; falls back to the global one\n    // if not specified.\n    globalEval: function globalEval(code, options, doc) {\n      DOMEval(code, {\n        nonce: options && options.nonce\n      }, doc);\n    },\n    each: function each(obj, callback) {\n      var length,\n          i = 0;\n\n      if (isArrayLike(obj)) {\n        length = obj.length;\n\n        for (; i < length; i++) {\n          if (callback.call(obj[i], i, obj[i]) === false) {\n            break;\n          }\n        }\n      } else {\n        for (i in obj) {\n          if (callback.call(obj[i], i, obj[i]) === false) {\n            break;\n          }\n        }\n      }\n\n      return obj;\n    },\n    // results is for internal usage only\n    makeArray: function makeArray(arr, results) {\n      var ret = results || [];\n\n      if (arr != null) {\n        if (isArrayLike(Object(arr))) {\n          jQuery.merge(ret, typeof arr === \"string\" ? [arr] : arr);\n        } else {\n          push.call(ret, arr);\n        }\n      }\n\n      return ret;\n    },\n    inArray: function inArray(elem, arr, i) {\n      return arr == null ? -1 : indexOf.call(arr, elem, i);\n    },\n    // Support: Android <=4.0 only, PhantomJS 1 only\n    // push.apply(_, arraylike) throws on ancient WebKit\n    merge: function merge(first, second) {\n      var len = +second.length,\n          j = 0,\n          i = first.length;\n\n      for (; j < len; j++) {\n        first[i++] = second[j];\n      }\n\n      first.length = i;\n      return first;\n    },\n    grep: function grep(elems, callback, invert) {\n      var callbackInverse,\n          matches = [],\n          i = 0,\n          length = elems.length,\n          callbackExpect = !invert; // Go through the array, only saving the items\n      // that pass the validator function\n\n      for (; i < length; i++) {\n        callbackInverse = !callback(elems[i], i);\n\n        if (callbackInverse !== callbackExpect) {\n          matches.push(elems[i]);\n        }\n      }\n\n      return matches;\n    },\n    // arg is for internal usage only\n    map: function map(elems, callback, arg) {\n      var length,\n          value,\n          i = 0,\n          ret = []; // Go through the array, translating each of the items to their new values\n\n      if (isArrayLike(elems)) {\n        length = elems.length;\n\n        for (; i < length; i++) {\n          value = callback(elems[i], i, arg);\n\n          if (value != null) {\n            ret.push(value);\n          }\n        } // Go through every key on the object,\n\n      } else {\n        for (i in elems) {\n          value = callback(elems[i], i, arg);\n\n          if (value != null) {\n            ret.push(value);\n          }\n        }\n      } // Flatten any nested arrays\n\n\n      return flat(ret);\n    },\n    // A global GUID counter for objects\n    guid: 1,\n    // jQuery.support is not used in Core but other projects attach their\n    // properties to it so it needs to exist.\n    support: support\n  });\n\n  if (typeof Symbol === \"function\") {\n    jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n  } // Populate the class2type map\n\n\n  jQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"), function (_i, name) {\n    class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n  });\n\n  function isArrayLike(obj) {\n    // Support: real iOS 8.2 only (not reproducible in simulator)\n    // `in` check used to prevent JIT error (gh-2145)\n    // hasOwn isn't used here due to false negatives\n    // regarding Nodelist length in IE\n    var length = !!obj && \"length\" in obj && obj.length,\n        type = toType(obj);\n\n    if (isFunction(obj) || isWindow(obj)) {\n      return false;\n    }\n\n    return type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;\n  }\n\n  var Sizzle =\n  /*!\n   * Sizzle CSS Selector Engine v2.3.6\n   * https://sizzlejs.com/\n   *\n   * Copyright JS Foundation and other contributors\n   * Released under the MIT license\n   * https://js.foundation/\n   *\n   * Date: 2021-02-16\n   */\n  function (window) {\n    var i,\n        support,\n        Expr,\n        getText,\n        isXML,\n        tokenize,\n        compile,\n        select,\n        outermostContext,\n        sortInput,\n        hasDuplicate,\n        // Local document vars\n    setDocument,\n        document,\n        docElem,\n        documentIsHTML,\n        rbuggyQSA,\n        rbuggyMatches,\n        matches,\n        contains,\n        // Instance-specific data\n    expando = \"sizzle\" + 1 * new Date(),\n        preferredDoc = window.document,\n        dirruns = 0,\n        done = 0,\n        classCache = createCache(),\n        tokenCache = createCache(),\n        compilerCache = createCache(),\n        nonnativeSelectorCache = createCache(),\n        sortOrder = function sortOrder(a, b) {\n      if (a === b) {\n        hasDuplicate = true;\n      }\n\n      return 0;\n    },\n        // Instance methods\n    hasOwn = {}.hasOwnProperty,\n        arr = [],\n        pop = arr.pop,\n        pushNative = arr.push,\n        push = arr.push,\n        slice = arr.slice,\n        // Use a stripped-down indexOf as it's faster than native\n    // https://jsperf.com/thor-indexof-vs-for/5\n    indexOf = function indexOf(list, elem) {\n      var i = 0,\n          len = list.length;\n\n      for (; i < len; i++) {\n        if (list[i] === elem) {\n          return i;\n        }\n      }\n\n      return -1;\n    },\n        booleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" + \"ismap|loop|multiple|open|readonly|required|scoped\",\n        // Regular expressions\n    // http://www.w3.org/TR/css3-selectors/#whitespace\n    whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n        // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n    identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n        // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n    attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace + // Operator (capture 2)\n    \"*([*^$|!~]?=)\" + whitespace + // \"Attribute values must be CSS identifiers [capture 5]\n    // or strings [capture 3 or capture 4]\"\n    \"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace + \"*\\\\]\",\n        pseudos = \":(\" + identifier + \")(?:\\\\((\" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n    // 1. quoted (capture 3; capture 4 or capture 5)\n    \"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" + // 2. simple (capture 6)\n    \"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" + // 3. anything else (capture 2)\n    \".*\" + \")\\\\)|)\",\n        // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n    rwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n        rtrim = new RegExp(\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\"),\n        rcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n        rcombinators = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\"),\n        rdescend = new RegExp(whitespace + \"|>\"),\n        rpseudo = new RegExp(pseudos),\n        ridentifier = new RegExp(\"^\" + identifier + \"$\"),\n        matchExpr = {\n      \"ID\": new RegExp(\"^#(\" + identifier + \")\"),\n      \"CLASS\": new RegExp(\"^\\\\.(\" + identifier + \")\"),\n      \"TAG\": new RegExp(\"^(\" + identifier + \"|[*])\"),\n      \"ATTR\": new RegExp(\"^\" + attributes),\n      \"PSEUDO\": new RegExp(\"^\" + pseudos),\n      \"CHILD\": new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n      \"bool\": new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n      // For use in libraries implementing .is()\n      // We use this for POS matching in `select`\n      \"needsContext\": new RegExp(\"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n    },\n        rhtml = /HTML$/i,\n        rinputs = /^(?:input|select|textarea|button)$/i,\n        rheader = /^h\\d$/i,\n        rnative = /^[^{]+\\{\\s*\\[native \\w/,\n        // Easily-parseable/retrievable ID or TAG or CLASS selectors\n    rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n        rsibling = /[+~]/,\n        // CSS escapes\n    // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n    runescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n        funescape = function funescape(escape, nonHex) {\n      var high = \"0x\" + escape.slice(1) - 0x10000;\n      return nonHex ? // Strip the backslash prefix from a non-hex escape sequence\n      nonHex : // Replace a hexadecimal escape sequence with the encoded Unicode code point\n      // Support: IE <=11+\n      // For values outside the Basic Multilingual Plane (BMP), manually construct a\n      // surrogate pair\n      high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n    },\n        // CSS string/identifier serialization\n    // https://drafts.csswg.org/cssom/#common-serializing-idioms\n    rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n        fcssescape = function fcssescape(ch, asCodePoint) {\n      if (asCodePoint) {\n        // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n        if (ch === \"\\0\") {\n          return \"\\uFFFD\";\n        } // Control characters and (dependent upon position) numbers get escaped as code points\n\n\n        return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n      } // Other potentially-special ASCII characters get backslash-escaped\n\n\n      return \"\\\\\" + ch;\n    },\n        // Used for iframes\n    // See setDocument()\n    // Removing the function wrapper causes a \"Permission Denied\"\n    // error in IE\n    unloadHandler = function unloadHandler() {\n      setDocument();\n    },\n        inDisabledFieldset = addCombinator(function (elem) {\n      return elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n    }, {\n      dir: \"parentNode\",\n      next: \"legend\"\n    }); // Optimize for push.apply( _, NodeList )\n\n\n    try {\n      push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes); // Support: Android<4.0\n      // Detect silently failing push.apply\n      // eslint-disable-next-line no-unused-expressions\n\n      arr[preferredDoc.childNodes.length].nodeType;\n    } catch (e) {\n      push = {\n        apply: arr.length ? // Leverage slice if possible\n        function (target, els) {\n          pushNative.apply(target, slice.call(els));\n        } : // Support: IE<9\n        // Otherwise append directly\n        function (target, els) {\n          var j = target.length,\n              i = 0; // Can't trust NodeList.length\n\n          while (target[j++] = els[i++]) {}\n\n          target.length = j - 1;\n        }\n      };\n    }\n\n    function Sizzle(selector, context, results, seed) {\n      var m,\n          i,\n          elem,\n          nid,\n          match,\n          groups,\n          newSelector,\n          newContext = context && context.ownerDocument,\n          // nodeType defaults to 9, since context defaults to document\n      nodeType = context ? context.nodeType : 9;\n      results = results || []; // Return early from calls with invalid selector or context\n\n      if (typeof selector !== \"string\" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n        return results;\n      } // Try to shortcut find operations (as opposed to filters) in HTML documents\n\n\n      if (!seed) {\n        setDocument(context);\n        context = context || document;\n\n        if (documentIsHTML) {\n          // If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n          // (excepting DocumentFragment context, where the methods don't exist)\n          if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n            // ID selector\n            if (m = match[1]) {\n              // Document context\n              if (nodeType === 9) {\n                if (elem = context.getElementById(m)) {\n                  // Support: IE, Opera, Webkit\n                  // TODO: identify versions\n                  // getElementById can match elements by name instead of ID\n                  if (elem.id === m) {\n                    results.push(elem);\n                    return results;\n                  }\n                } else {\n                  return results;\n                } // Element context\n\n              } else {\n                // Support: IE, Opera, Webkit\n                // TODO: identify versions\n                // getElementById can match elements by name instead of ID\n                if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {\n                  results.push(elem);\n                  return results;\n                }\n              } // Type selector\n\n            } else if (match[2]) {\n              push.apply(results, context.getElementsByTagName(selector));\n              return results; // Class selector\n            } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {\n              push.apply(results, context.getElementsByClassName(m));\n              return results;\n            }\n          } // Take advantage of querySelectorAll\n\n\n          if (support.qsa && !nonnativeSelectorCache[selector + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && (nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\")) {\n            newSelector = selector;\n            newContext = context; // qSA considers elements outside a scoping root when evaluating child or\n            // descendant combinators, which is not what we want.\n            // In such cases, we work around the behavior by prefixing every selector in the\n            // list with an ID selector referencing the scope context.\n            // The technique has to be used as well when a leading combinator is used\n            // as such selectors are not recognized by querySelectorAll.\n            // Thanks to Andrew Dupont for this technique.\n\n            if (nodeType === 1 && (rdescend.test(selector) || rcombinators.test(selector))) {\n              // Expand context for sibling selectors\n              newContext = rsibling.test(selector) && testContext(context.parentNode) || context; // We can use :scope instead of the ID hack if the browser\n              // supports it & if we're not changing the context.\n\n              if (newContext !== context || !support.scope) {\n                // Capture the context ID, setting it first if necessary\n                if (nid = context.getAttribute(\"id\")) {\n                  nid = nid.replace(rcssescape, fcssescape);\n                } else {\n                  context.setAttribute(\"id\", nid = expando);\n                }\n              } // Prefix every selector in the list\n\n\n              groups = tokenize(selector);\n              i = groups.length;\n\n              while (i--) {\n                groups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" + toSelector(groups[i]);\n              }\n\n              newSelector = groups.join(\",\");\n            }\n\n            try {\n              push.apply(results, newContext.querySelectorAll(newSelector));\n              return results;\n            } catch (qsaError) {\n              nonnativeSelectorCache(selector, true);\n            } finally {\n              if (nid === expando) {\n                context.removeAttribute(\"id\");\n              }\n            }\n          }\n        }\n      } // All others\n\n\n      return select(selector.replace(rtrim, \"$1\"), context, results, seed);\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     */\n\n\n    function createCache() {\n      var keys = [];\n\n      function cache(key, value) {\n        // Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n        if (keys.push(key + \" \") > Expr.cacheLength) {\n          // Only keep the most recent entries\n          delete cache[keys.shift()];\n        }\n\n        return cache[key + \" \"] = value;\n      }\n\n      return cache;\n    }\n    /**\n     * Mark a function for special use by Sizzle\n     * @param {Function} fn The function to mark\n     */\n\n\n    function markFunction(fn) {\n      fn[expando] = true;\n      return fn;\n    }\n    /**\n     * Support testing using an element\n     * @param {Function} fn Passed the created element and returns a boolean result\n     */\n\n\n    function assert(fn) {\n      var el = document.createElement(\"fieldset\");\n\n      try {\n        return !!fn(el);\n      } catch (e) {\n        return false;\n      } finally {\n        // Remove from its parent by default\n        if (el.parentNode) {\n          el.parentNode.removeChild(el);\n        } // release memory in IE\n\n\n        el = null;\n      }\n    }\n    /**\n     * Adds the same handler for all of the specified attrs\n     * @param {String} attrs Pipe-separated list of attributes\n     * @param {Function} handler The method that will be applied\n     */\n\n\n    function addHandle(attrs, handler) {\n      var arr = attrs.split(\"|\"),\n          i = arr.length;\n\n      while (i--) {\n        Expr.attrHandle[arr[i]] = handler;\n      }\n    }\n    /**\n     * Checks document order of two siblings\n     * @param {Element} a\n     * @param {Element} b\n     * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n     */\n\n\n    function siblingCheck(a, b) {\n      var cur = b && a,\n          diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex; // Use IE sourceIndex if available on both nodes\n\n      if (diff) {\n        return diff;\n      } // Check if b follows a\n\n\n      if (cur) {\n        while (cur = cur.nextSibling) {\n          if (cur === b) {\n            return -1;\n          }\n        }\n      }\n\n      return a ? 1 : -1;\n    }\n    /**\n     * Returns a function to use in pseudos for input types\n     * @param {String} type\n     */\n\n\n    function createInputPseudo(type) {\n      return function (elem) {\n        var name = elem.nodeName.toLowerCase();\n        return name === \"input\" && elem.type === type;\n      };\n    }\n    /**\n     * Returns a function to use in pseudos for buttons\n     * @param {String} type\n     */\n\n\n    function createButtonPseudo(type) {\n      return function (elem) {\n        var name = elem.nodeName.toLowerCase();\n        return (name === \"input\" || name === \"button\") && elem.type === type;\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     */\n\n\n    function createDisabledPseudo(disabled) {\n      // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n      return function (elem) {\n        // Only certain elements can match :enabled or :disabled\n        // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n        // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n        if (\"form\" in elem) {\n          // Check for inherited disabledness on relevant non-disabled elements:\n          // * listed form-associated elements in a disabled fieldset\n          //   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n          //   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n          // * option elements in a disabled optgroup\n          //   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n          // All such elements have a \"form\" property.\n          if (elem.parentNode && elem.disabled === false) {\n            // Option elements defer to a parent optgroup if present\n            if (\"label\" in elem) {\n              if (\"label\" in elem.parentNode) {\n                return elem.parentNode.disabled === disabled;\n              } else {\n                return elem.disabled === disabled;\n              }\n            } // Support: IE 6 - 11\n            // Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\n\n            return elem.isDisabled === disabled || // Where there is no isDisabled, check manually\n\n            /* jshint -W018 */\n            elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;\n          }\n\n          return elem.disabled === disabled; // Try to winnow out elements that can't be disabled before trusting the disabled property.\n          // Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n          // even exist on them, let alone have a boolean value.\n        } else if (\"label\" in elem) {\n          return elem.disabled === disabled;\n        } // Remaining elements are neither :enabled nor :disabled\n\n\n        return false;\n      };\n    }\n    /**\n     * Returns a function to use in pseudos for positionals\n     * @param {Function} fn\n     */\n\n\n    function createPositionalPseudo(fn) {\n      return markFunction(function (argument) {\n        argument = +argument;\n        return markFunction(function (seed, matches) {\n          var j,\n              matchIndexes = fn([], seed.length, argument),\n              i = matchIndexes.length; // Match elements found at the specified indexes\n\n          while (i--) {\n            if (seed[j = matchIndexes[i]]) {\n              seed[j] = !(matches[j] = seed[j]);\n            }\n          }\n        });\n      });\n    }\n    /**\n     * Checks a node for validity as a Sizzle context\n     * @param {Element|Object=} context\n     * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n     */\n\n\n    function testContext(context) {\n      return context && typeof context.getElementsByTagName !== \"undefined\" && context;\n    } // Expose support vars for convenience\n\n\n    support = Sizzle.support = {};\n    /**\n     * Detects XML nodes\n     * @param {Element|Object} elem An element or a document\n     * @returns {Boolean} True iff elem is a non-HTML XML node\n     */\n\n    isXML = Sizzle.isXML = function (elem) {\n      var namespace = elem && elem.namespaceURI,\n          docElem = elem && (elem.ownerDocument || elem).documentElement; // Support: IE <=8\n      // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n      // https://bugs.jquery.com/ticket/4833\n\n      return !rhtml.test(namespace || docElem && docElem.nodeName || \"HTML\");\n    };\n    /**\n     * Sets document-related variables once based on the current document\n     * @param {Element|Object} [doc] An element or document object to use to set the document\n     * @returns {Object} Returns the current document\n     */\n\n\n    setDocument = Sizzle.setDocument = function (node) {\n      var hasCompare,\n          subWindow,\n          doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected\n      // Support: IE 11+, Edge 17 - 18+\n      // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n      // two documents; shallow comparisons work.\n      // eslint-disable-next-line eqeqeq\n\n      if (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n        return document;\n      } // Update global variables\n\n\n      document = doc;\n      docElem = document.documentElement;\n      documentIsHTML = !isXML(document); // Support: IE 9 - 11+, Edge 12 - 18+\n      // Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n      // Support: IE 11+, Edge 17 - 18+\n      // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n      // two documents; shallow comparisons work.\n      // eslint-disable-next-line eqeqeq\n\n      if (preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {\n        // Support: IE 11, Edge\n        if (subWindow.addEventListener) {\n          subWindow.addEventListener(\"unload\", unloadHandler, false); // Support: IE 9 - 10 only\n        } else if (subWindow.attachEvent) {\n          subWindow.attachEvent(\"onunload\", unloadHandler);\n        }\n      } // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n      // Safari 4 - 5 only, Opera <=11.6 - 12.x only\n      // IE/Edge & older browsers don't support the :scope pseudo-class.\n      // Support: Safari 6.0 only\n      // Safari 6.0 supports :scope but it's an alias of :root there.\n\n\n      support.scope = assert(function (el) {\n        docElem.appendChild(el).appendChild(document.createElement(\"div\"));\n        return typeof el.querySelectorAll !== \"undefined\" && !el.querySelectorAll(\":scope fieldset div\").length;\n      });\n      /* Attributes\n      ---------------------------------------------------------------------- */\n      // Support: IE<8\n      // Verify that getAttribute really returns attributes and not properties\n      // (excepting IE8 booleans)\n\n      support.attributes = assert(function (el) {\n        el.className = \"i\";\n        return !el.getAttribute(\"className\");\n      });\n      /* getElement(s)By*\n      ---------------------------------------------------------------------- */\n      // Check if getElementsByTagName(\"*\") returns only elements\n\n      support.getElementsByTagName = assert(function (el) {\n        el.appendChild(document.createComment(\"\"));\n        return !el.getElementsByTagName(\"*\").length;\n      }); // Support: IE<9\n\n      support.getElementsByClassName = rnative.test(document.getElementsByClassName); // Support: IE<10\n      // Check if getElementById returns elements by name\n      // The broken getElementById methods don't pick up programmatically-set names,\n      // so use a roundabout getElementsByName test\n\n      support.getById = assert(function (el) {\n        docElem.appendChild(el).id = expando;\n        return !document.getElementsByName || !document.getElementsByName(expando).length;\n      }); // ID filter and find\n\n      if (support.getById) {\n        Expr.filter[\"ID\"] = function (id) {\n          var attrId = id.replace(runescape, funescape);\n          return function (elem) {\n            return elem.getAttribute(\"id\") === attrId;\n          };\n        };\n\n        Expr.find[\"ID\"] = function (id, context) {\n          if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n            var elem = context.getElementById(id);\n            return elem ? [elem] : [];\n          }\n        };\n      } else {\n        Expr.filter[\"ID\"] = function (id) {\n          var attrId = id.replace(runescape, funescape);\n          return function (elem) {\n            var node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n            return node && node.value === attrId;\n          };\n        }; // Support: IE 6 - 7 only\n        // getElementById is not reliable as a find shortcut\n\n\n        Expr.find[\"ID\"] = function (id, context) {\n          if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n            var node,\n                i,\n                elems,\n                elem = context.getElementById(id);\n\n            if (elem) {\n              // Verify the id attribute\n              node = elem.getAttributeNode(\"id\");\n\n              if (node && node.value === id) {\n                return [elem];\n              } // Fall back on getElementsByName\n\n\n              elems = context.getElementsByName(id);\n              i = 0;\n\n              while (elem = elems[i++]) {\n                node = elem.getAttributeNode(\"id\");\n\n                if (node && node.value === id) {\n                  return [elem];\n                }\n              }\n            }\n\n            return [];\n          }\n        };\n      } // Tag\n\n\n      Expr.find[\"TAG\"] = support.getElementsByTagName ? function (tag, context) {\n        if (typeof context.getElementsByTagName !== \"undefined\") {\n          return context.getElementsByTagName(tag); // DocumentFragment nodes don't have gEBTN\n        } else if (support.qsa) {\n          return context.querySelectorAll(tag);\n        }\n      } : function (tag, context) {\n        var elem,\n            tmp = [],\n            i = 0,\n            // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n        results = context.getElementsByTagName(tag); // Filter out possible comments\n\n        if (tag === \"*\") {\n          while (elem = results[i++]) {\n            if (elem.nodeType === 1) {\n              tmp.push(elem);\n            }\n          }\n\n          return tmp;\n        }\n\n        return results;\n      }; // Class\n\n      Expr.find[\"CLASS\"] = support.getElementsByClassName && function (className, context) {\n        if (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n          return context.getElementsByClassName(className);\n        }\n      };\n      /* QSA/matchesSelector\n      ---------------------------------------------------------------------- */\n      // QSA and matchesSelector support\n      // matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\n\n      rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21)\n      // We allow this because of a bug in IE8/9 that throws an error\n      // whenever `document.activeElement` is accessed on an iframe\n      // So, we allow :focus to pass through QSA all the time to avoid the IE error\n      // See https://bugs.jquery.com/ticket/13378\n\n      rbuggyQSA = [];\n\n      if (support.qsa = rnative.test(document.querySelectorAll)) {\n        // Build QSA regex\n        // Regex strategy adopted from Diego Perini\n        assert(function (el) {\n          var input; // Select is set to empty string on purpose\n          // This is to test IE's treatment of not explicitly\n          // setting a boolean content attribute,\n          // since its presence should be enough\n          // https://bugs.jquery.com/ticket/12359\n\n          docElem.appendChild(el).innerHTML = \"<a id='\" + expando + \"'></a>\" + \"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" + \"<option selected=''></option></select>\"; // Support: IE8, Opera 11-12.16\n          // Nothing should be selected when empty strings follow ^= or $= or *=\n          // The test attribute must be unknown in Opera but \"safe\" for WinRT\n          // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\n          if (el.querySelectorAll(\"[msallowcapture^='']\").length) {\n            rbuggyQSA.push(\"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\");\n          } // Support: IE8\n          // Boolean attributes and \"value\" are not treated correctly\n\n\n          if (!el.querySelectorAll(\"[selected]\").length) {\n            rbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n          } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\n\n          if (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n            rbuggyQSA.push(\"~=\");\n          } // Support: IE 11+, Edge 15 - 18+\n          // IE 11/Edge don't find elements on a `[name='']` query in some cases.\n          // Adding a temporary attribute to the document before the selection works\n          // around the issue.\n          // Interestingly, IE 10 & older don't seem to have the issue.\n\n\n          input = document.createElement(\"input\");\n          input.setAttribute(\"name\", \"\");\n          el.appendChild(input);\n\n          if (!el.querySelectorAll(\"[name='']\").length) {\n            rbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" + whitespace + \"*(?:''|\\\"\\\")\");\n          } // Webkit/Opera - :checked should return selected option elements\n          // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n          // IE8 throws error here and will not see later tests\n\n\n          if (!el.querySelectorAll(\":checked\").length) {\n            rbuggyQSA.push(\":checked\");\n          } // Support: Safari 8+, iOS 8+\n          // https://bugs.webkit.org/show_bug.cgi?id=136851\n          // In-page `selector#id sibling-combinator selector` fails\n\n\n          if (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n            rbuggyQSA.push(\".#.+[+~]\");\n          } // Support: Firefox <=3.6 - 5 only\n          // Old Firefox doesn't throw on a badly-escaped identifier.\n\n\n          el.querySelectorAll(\"\\\\\\f\");\n          rbuggyQSA.push(\"[\\\\r\\\\n\\\\f]\");\n        });\n        assert(function (el) {\n          el.innerHTML = \"<a href='' disabled='disabled'></a>\" + \"<select disabled='disabled'><option/></select>\"; // Support: Windows 8 Native Apps\n          // The type and name attributes are restricted during .innerHTML assignment\n\n          var input = document.createElement(\"input\");\n          input.setAttribute(\"type\", \"hidden\");\n          el.appendChild(input).setAttribute(\"name\", \"D\"); // Support: IE8\n          // Enforce case-sensitivity of name attribute\n\n          if (el.querySelectorAll(\"[name=d]\").length) {\n            rbuggyQSA.push(\"name\" + whitespace + \"*[*^$|!~]?=\");\n          } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n          // IE8 throws error here and will not see later tests\n\n\n          if (el.querySelectorAll(\":enabled\").length !== 2) {\n            rbuggyQSA.push(\":enabled\", \":disabled\");\n          } // Support: IE9-11+\n          // IE's :disabled selector does not pick up the children of disabled fieldsets\n\n\n          docElem.appendChild(el).disabled = true;\n\n          if (el.querySelectorAll(\":disabled\").length !== 2) {\n            rbuggyQSA.push(\":enabled\", \":disabled\");\n          } // Support: Opera 10 - 11 only\n          // Opera 10-11 does not throw on post-comma invalid pseudos\n\n\n          el.querySelectorAll(\"*,:x\");\n          rbuggyQSA.push(\",.*:\");\n        });\n      }\n\n      if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {\n        assert(function (el) {\n          // Check to see if it's possible to do matchesSelector\n          // on a disconnected node (IE 9)\n          support.disconnectedMatch = matches.call(el, \"*\"); // This should fail with an exception\n          // Gecko does not error, returns false instead\n\n          matches.call(el, \"[s!='']:x\");\n          rbuggyMatches.push(\"!=\", pseudos);\n        });\n      }\n\n      rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n      rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join(\"|\"));\n      /* Contains\n      ---------------------------------------------------------------------- */\n\n      hasCompare = rnative.test(docElem.compareDocumentPosition); // Element contains another\n      // Purposefully self-exclusive\n      // As in, an element does not contain itself\n\n      contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n        var adown = a.nodeType === 9 ? a.documentElement : a,\n            bup = b && b.parentNode;\n        return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n      } : function (a, b) {\n        if (b) {\n          while (b = b.parentNode) {\n            if (b === a) {\n              return true;\n            }\n          }\n        }\n\n        return false;\n      };\n      /* Sorting\n      ---------------------------------------------------------------------- */\n      // Document order sorting\n\n      sortOrder = hasCompare ? function (a, b) {\n        // Flag for duplicate removal\n        if (a === b) {\n          hasDuplicate = true;\n          return 0;\n        } // Sort on method existence if only one input has compareDocumentPosition\n\n\n        var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\n        if (compare) {\n          return compare;\n        } // Calculate position if both inputs belong to the same document\n        // Support: IE 11+, Edge 17 - 18+\n        // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n        // two documents; shallow comparisons work.\n        // eslint-disable-next-line eqeqeq\n\n\n        compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : // Otherwise we know they are disconnected\n        1; // Disconnected nodes\n\n        if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n          // Choose the first element that is related to our preferred document\n          // Support: IE 11+, Edge 17 - 18+\n          // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n          // two documents; shallow comparisons work.\n          // eslint-disable-next-line eqeqeq\n          if (a == document || a.ownerDocument == preferredDoc && contains(preferredDoc, a)) {\n            return -1;\n          } // Support: IE 11+, Edge 17 - 18+\n          // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n          // two documents; shallow comparisons work.\n          // eslint-disable-next-line eqeqeq\n\n\n          if (b == document || b.ownerDocument == preferredDoc && contains(preferredDoc, b)) {\n            return 1;\n          } // Maintain original order\n\n\n          return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;\n        }\n\n        return compare & 4 ? -1 : 1;\n      } : function (a, b) {\n        // Exit early if the nodes are identical\n        if (a === b) {\n          hasDuplicate = true;\n          return 0;\n        }\n\n        var cur,\n            i = 0,\n            aup = a.parentNode,\n            bup = b.parentNode,\n            ap = [a],\n            bp = [b]; // Parentless nodes are either documents or disconnected\n\n        if (!aup || !bup) {\n          // Support: IE 11+, Edge 17 - 18+\n          // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n          // two documents; shallow comparisons work.\n\n          /* eslint-disable eqeqeq */\n          return a == document ? -1 : b == document ? 1 :\n          /* eslint-enable eqeqeq */\n          aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0; // If the nodes are siblings, we can do a quick check\n        } else if (aup === bup) {\n          return siblingCheck(a, b);\n        } // Otherwise we need full lists of their ancestors for comparison\n\n\n        cur = a;\n\n        while (cur = cur.parentNode) {\n          ap.unshift(cur);\n        }\n\n        cur = b;\n\n        while (cur = cur.parentNode) {\n          bp.unshift(cur);\n        } // Walk down the tree looking for a discrepancy\n\n\n        while (ap[i] === bp[i]) {\n          i++;\n        }\n\n        return i ? // Do a sibling check if the nodes have a common ancestor\n        siblingCheck(ap[i], bp[i]) : // Otherwise nodes in our document sort first\n        // Support: IE 11+, Edge 17 - 18+\n        // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n        // two documents; shallow comparisons work.\n\n        /* eslint-disable eqeqeq */\n        ap[i] == preferredDoc ? -1 : bp[i] == preferredDoc ? 1 :\n        /* eslint-enable eqeqeq */\n        0;\n      };\n      return document;\n    };\n\n    Sizzle.matches = function (expr, elements) {\n      return Sizzle(expr, null, null, elements);\n    };\n\n    Sizzle.matchesSelector = function (elem, expr) {\n      setDocument(elem);\n\n      if (support.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + \" \"] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n        try {\n          var ret = matches.call(elem, expr); // IE 9's matchesSelector returns false on disconnected nodes\n\n          if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document\n          // fragment in IE 9\n          elem.document && elem.document.nodeType !== 11) {\n            return ret;\n          }\n        } catch (e) {\n          nonnativeSelectorCache(expr, true);\n        }\n      }\n\n      return Sizzle(expr, document, null, [elem]).length > 0;\n    };\n\n    Sizzle.contains = function (context, elem) {\n      // Set document vars if needed\n      // Support: IE 11+, Edge 17 - 18+\n      // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n      // two documents; shallow comparisons work.\n      // eslint-disable-next-line eqeqeq\n      if ((context.ownerDocument || context) != document) {\n        setDocument(context);\n      }\n\n      return contains(context, elem);\n    };\n\n    Sizzle.attr = function (elem, name) {\n      // Set document vars if needed\n      // Support: IE 11+, Edge 17 - 18+\n      // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n      // two documents; shallow comparisons work.\n      // eslint-disable-next-line eqeqeq\n      if ((elem.ownerDocument || elem) != document) {\n        setDocument(elem);\n      }\n\n      var fn = Expr.attrHandle[name.toLowerCase()],\n          // Don't get fooled by Object.prototype properties (jQuery #13807)\n      val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n      return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n    };\n\n    Sizzle.escape = function (sel) {\n      return (sel + \"\").replace(rcssescape, fcssescape);\n    };\n\n    Sizzle.error = function (msg) {\n      throw new Error(\"Syntax error, unrecognized expression: \" + msg);\n    };\n    /**\n     * Document sorting and removing duplicates\n     * @param {ArrayLike} results\n     */\n\n\n    Sizzle.uniqueSort = function (results) {\n      var elem,\n          duplicates = [],\n          j = 0,\n          i = 0; // Unless we *know* we can detect duplicates, assume their presence\n\n      hasDuplicate = !support.detectDuplicates;\n      sortInput = !support.sortStable && results.slice(0);\n      results.sort(sortOrder);\n\n      if (hasDuplicate) {\n        while (elem = results[i++]) {\n          if (elem === results[i]) {\n            j = duplicates.push(i);\n          }\n        }\n\n        while (j--) {\n          results.splice(duplicates[j], 1);\n        }\n      } // Clear input after sorting to release objects\n      // See https://github.com/jquery/sizzle/pull/225\n\n\n      sortInput = null;\n      return results;\n    };\n    /**\n     * Utility function for retrieving the text value of an array of DOM nodes\n     * @param {Array|Element} elem\n     */\n\n\n    getText = Sizzle.getText = function (elem) {\n      var node,\n          ret = \"\",\n          i = 0,\n          nodeType = elem.nodeType;\n\n      if (!nodeType) {\n        // If no nodeType, this is expected to be an array\n        while (node = elem[i++]) {\n          // Do not traverse comment nodes\n          ret += getText(node);\n        }\n      } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n        // Use textContent for elements\n        // innerText usage removed for consistency of new lines (jQuery #11153)\n        if (typeof elem.textContent === \"string\") {\n          return elem.textContent;\n        } else {\n          // Traverse its children\n          for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n            ret += getText(elem);\n          }\n        }\n      } else if (nodeType === 3 || nodeType === 4) {\n        return elem.nodeValue;\n      } // Do not include comment or processing instruction nodes\n\n\n      return ret;\n    };\n\n    Expr = Sizzle.selectors = {\n      // Can be adjusted by the user\n      cacheLength: 50,\n      createPseudo: markFunction,\n      match: matchExpr,\n      attrHandle: {},\n      find: {},\n      relative: {\n        \">\": {\n          dir: \"parentNode\",\n          first: true\n        },\n        \" \": {\n          dir: \"parentNode\"\n        },\n        \"+\": {\n          dir: \"previousSibling\",\n          first: true\n        },\n        \"~\": {\n          dir: \"previousSibling\"\n        }\n      },\n      preFilter: {\n        \"ATTR\": function ATTR(match) {\n          match[1] = match[1].replace(runescape, funescape); // Move the given value to match[3] whether quoted or unquoted\n\n          match[3] = (match[3] || match[4] || match[5] || \"\").replace(runescape, funescape);\n\n          if (match[2] === \"~=\") {\n            match[3] = \" \" + match[3] + \" \";\n          }\n\n          return match.slice(0, 4);\n        },\n        \"CHILD\": function CHILD(match) {\n          /* matches from matchExpr[\"CHILD\"]\n          \t1 type (only|nth|...)\n          \t2 what (child|of-type)\n          \t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n          \t4 xn-component of xn+y argument ([+-]?\\d*n|)\n          \t5 sign of xn-component\n          \t6 x of xn-component\n          \t7 sign of y-component\n          \t8 y of y-component\n          */\n          match[1] = match[1].toLowerCase();\n\n          if (match[1].slice(0, 3) === \"nth\") {\n            // nth-* requires argument\n            if (!match[3]) {\n              Sizzle.error(match[0]);\n            } // numeric x and y parameters for Expr.filter.CHILD\n            // remember that false/true cast respectively to 0/1\n\n\n            match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === \"even\" || match[3] === \"odd\"));\n            match[5] = +(match[7] + match[8] || match[3] === \"odd\"); // other types prohibit arguments\n          } else if (match[3]) {\n            Sizzle.error(match[0]);\n          }\n\n          return match;\n        },\n        \"PSEUDO\": function PSEUDO(match) {\n          var excess,\n              unquoted = !match[6] && match[2];\n\n          if (matchExpr[\"CHILD\"].test(match[0])) {\n            return null;\n          } // Accept quoted arguments as-is\n\n\n          if (match[3]) {\n            match[2] = match[4] || match[5] || \"\"; // Strip excess characters from unquoted arguments\n          } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n            // excess is a negative index\n            match[0] = match[0].slice(0, excess);\n            match[2] = unquoted.slice(0, excess);\n          } // Return only captures needed by the pseudo filter method (type and argument)\n\n\n          return match.slice(0, 3);\n        }\n      },\n      filter: {\n        \"TAG\": function TAG(nodeNameSelector) {\n          var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n          return nodeNameSelector === \"*\" ? function () {\n            return true;\n          } : function (elem) {\n            return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n          };\n        },\n        \"CLASS\": function CLASS(className) {\n          var pattern = classCache[className + \" \"];\n          return pattern || (pattern = new RegExp(\"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\")) && classCache(className, function (elem) {\n            return pattern.test(typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\");\n          });\n        },\n        \"ATTR\": function ATTR(name, operator, check) {\n          return function (elem) {\n            var result = Sizzle.attr(elem, name);\n\n            if (result == null) {\n              return operator === \"!=\";\n            }\n\n            if (!operator) {\n              return true;\n            }\n\n            result += \"\";\n            /* eslint-disable max-len */\n\n            return operator === \"=\" ? result === check : operator === \"!=\" ? result !== check : operator === \"^=\" ? check && result.indexOf(check) === 0 : operator === \"*=\" ? check && result.indexOf(check) > -1 : operator === \"$=\" ? check && result.slice(-check.length) === check : operator === \"~=\" ? (\" \" + result.replace(rwhitespace, \" \") + \" \").indexOf(check) > -1 : operator === \"|=\" ? result === check || result.slice(0, check.length + 1) === check + \"-\" : false;\n            /* eslint-enable max-len */\n          };\n        },\n        \"CHILD\": function CHILD(type, what, _argument, first, last) {\n          var simple = type.slice(0, 3) !== \"nth\",\n              forward = type.slice(-4) !== \"last\",\n              ofType = what === \"of-type\";\n          return first === 1 && last === 0 ? // Shortcut for :nth-*(n)\n          function (elem) {\n            return !!elem.parentNode;\n          } : function (elem, _context, xml) {\n            var cache,\n                uniqueCache,\n                outerCache,\n                node,\n                nodeIndex,\n                start,\n                dir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n                parent = elem.parentNode,\n                name = ofType && elem.nodeName.toLowerCase(),\n                useCache = !xml && !ofType,\n                diff = false;\n\n            if (parent) {\n              // :(first|last|only)-(child|of-type)\n              if (simple) {\n                while (dir) {\n                  node = elem;\n\n                  while (node = node[dir]) {\n                    if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n                      return false;\n                    }\n                  } // Reverse direction for :only-* (if we haven't yet done so)\n\n\n                  start = dir = type === \"only\" && !start && \"nextSibling\";\n                }\n\n                return true;\n              }\n\n              start = [forward ? parent.firstChild : parent.lastChild]; // non-xml :nth-child(...) stores cache data on `parent`\n\n              if (forward && useCache) {\n                // Seek `elem` from a previously-cached index\n                // ...in a gzip-friendly way\n                node = parent;\n                outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n                // Defend against cloned attroperties (jQuery gh-1709)\n\n                uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n                cache = uniqueCache[type] || [];\n                nodeIndex = cache[0] === dirruns && cache[1];\n                diff = nodeIndex && cache[2];\n                node = nodeIndex && parent.childNodes[nodeIndex];\n\n                while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n                  // When found, cache indexes on `parent` and break\n                  if (node.nodeType === 1 && ++diff && node === elem) {\n                    uniqueCache[type] = [dirruns, nodeIndex, diff];\n                    break;\n                  }\n                }\n              } else {\n                // Use previously-cached element index if available\n                if (useCache) {\n                  // ...in a gzip-friendly way\n                  node = elem;\n                  outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n                  // Defend against cloned attroperties (jQuery gh-1709)\n\n                  uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n                  cache = uniqueCache[type] || [];\n                  nodeIndex = cache[0] === dirruns && cache[1];\n                  diff = nodeIndex;\n                } // xml :nth-child(...)\n                // or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\n\n                if (diff === false) {\n                  // Use the same loop as above to seek `elem` from the start\n                  while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n                    if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n                      // Cache the index of each encountered element\n                      if (useCache) {\n                        outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n                        // Defend against cloned attroperties (jQuery gh-1709)\n\n                        uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n                        uniqueCache[type] = [dirruns, diff];\n                      }\n\n                      if (node === elem) {\n                        break;\n                      }\n                    }\n                  }\n                }\n              } // Incorporate the offset, then check against cycle size\n\n\n              diff -= last;\n              return diff === first || diff % first === 0 && diff / first >= 0;\n            }\n          };\n        },\n        \"PSEUDO\": function PSEUDO(pseudo, argument) {\n          // pseudo-class names are case-insensitive\n          // http://www.w3.org/TR/selectors/#pseudo-classes\n          // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n          // Remember that setFilters inherits from pseudos\n          var args,\n              fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error(\"unsupported pseudo: \" + pseudo); // The user may use createPseudo to indicate that\n          // arguments are needed to create the filter function\n          // just as Sizzle does\n\n          if (fn[expando]) {\n            return fn(argument);\n          } // But maintain support for old signatures\n\n\n          if (fn.length > 1) {\n            args = [pseudo, pseudo, \"\", argument];\n            return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n              var idx,\n                  matched = fn(seed, argument),\n                  i = matched.length;\n\n              while (i--) {\n                idx = indexOf(seed, matched[i]);\n                seed[idx] = !(matches[idx] = matched[i]);\n              }\n            }) : function (elem) {\n              return fn(elem, 0, args);\n            };\n          }\n\n          return fn;\n        }\n      },\n      pseudos: {\n        // Potentially complex pseudos\n        \"not\": markFunction(function (selector) {\n          // Trim the selector passed to compile\n          // to avoid treating leading and trailing\n          // spaces as combinators\n          var input = [],\n              results = [],\n              matcher = compile(selector.replace(rtrim, \"$1\"));\n          return matcher[expando] ? markFunction(function (seed, matches, _context, xml) {\n            var elem,\n                unmatched = matcher(seed, null, xml, []),\n                i = seed.length; // Match elements unmatched by `matcher`\n\n            while (i--) {\n              if (elem = unmatched[i]) {\n                seed[i] = !(matches[i] = elem);\n              }\n            }\n          }) : function (elem, _context, xml) {\n            input[0] = elem;\n            matcher(input, null, xml, results); // Don't keep the element (issue #299)\n\n            input[0] = null;\n            return !results.pop();\n          };\n        }),\n        \"has\": markFunction(function (selector) {\n          return function (elem) {\n            return Sizzle(selector, elem).length > 0;\n          };\n        }),\n        \"contains\": markFunction(function (text) {\n          text = text.replace(runescape, funescape);\n          return function (elem) {\n            return (elem.textContent || getText(elem)).indexOf(text) > -1;\n          };\n        }),\n        // \"Whether an element is represented by a :lang() selector\n        // is based solely on the element's language value\n        // being equal to the identifier C,\n        // or beginning with the identifier C immediately followed by \"-\".\n        // The matching of C against the element's language value is performed case-insensitively.\n        // The identifier C does not have to be a valid language name.\"\n        // http://www.w3.org/TR/selectors/#lang-pseudo\n        \"lang\": markFunction(function (lang) {\n          // lang value must be a valid identifier\n          if (!ridentifier.test(lang || \"\")) {\n            Sizzle.error(\"unsupported lang: \" + lang);\n          }\n\n          lang = lang.replace(runescape, funescape).toLowerCase();\n          return function (elem) {\n            var elemLang;\n\n            do {\n              if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) {\n                elemLang = elemLang.toLowerCase();\n                return elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n              }\n            } while ((elem = elem.parentNode) && elem.nodeType === 1);\n\n            return false;\n          };\n        }),\n        // Miscellaneous\n        \"target\": function target(elem) {\n          var hash = window.location && window.location.hash;\n          return hash && hash.slice(1) === elem.id;\n        },\n        \"root\": function root(elem) {\n          return elem === docElem;\n        },\n        \"focus\": function focus(elem) {\n          return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n        },\n        // Boolean properties\n        \"enabled\": createDisabledPseudo(false),\n        \"disabled\": createDisabledPseudo(true),\n        \"checked\": function checked(elem) {\n          // In CSS3, :checked should return both checked and selected elements\n          // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n          var nodeName = elem.nodeName.toLowerCase();\n          return nodeName === \"input\" && !!elem.checked || nodeName === \"option\" && !!elem.selected;\n        },\n        \"selected\": function selected(elem) {\n          // Accessing this property makes selected-by-default\n          // options in Safari work properly\n          if (elem.parentNode) {\n            // eslint-disable-next-line no-unused-expressions\n            elem.parentNode.selectedIndex;\n          }\n\n          return elem.selected === true;\n        },\n        // Contents\n        \"empty\": function empty(elem) {\n          // http://www.w3.org/TR/selectors/#empty-pseudo\n          // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n          //   but not by others (comment: 8; processing instruction: 7; etc.)\n          // nodeType < 6 works because attributes (2) do not appear as children\n          for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n            if (elem.nodeType < 6) {\n              return false;\n            }\n          }\n\n          return true;\n        },\n        \"parent\": function parent(elem) {\n          return !Expr.pseudos[\"empty\"](elem);\n        },\n        // Element/input types\n        \"header\": function header(elem) {\n          return rheader.test(elem.nodeName);\n        },\n        \"input\": function input(elem) {\n          return rinputs.test(elem.nodeName);\n        },\n        \"button\": function button(elem) {\n          var name = elem.nodeName.toLowerCase();\n          return name === \"input\" && elem.type === \"button\" || name === \"button\";\n        },\n        \"text\": function text(elem) {\n          var attr;\n          return elem.nodeName.toLowerCase() === \"input\" && elem.type === \"text\" && ((attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\");\n        },\n        // Position-in-collection\n        \"first\": createPositionalPseudo(function () {\n          return [0];\n        }),\n        \"last\": createPositionalPseudo(function (_matchIndexes, length) {\n          return [length - 1];\n        }),\n        \"eq\": createPositionalPseudo(function (_matchIndexes, length, argument) {\n          return [argument < 0 ? argument + length : argument];\n        }),\n        \"even\": createPositionalPseudo(function (matchIndexes, length) {\n          var i = 0;\n\n          for (; i < length; i += 2) {\n            matchIndexes.push(i);\n          }\n\n          return matchIndexes;\n        }),\n        \"odd\": createPositionalPseudo(function (matchIndexes, length) {\n          var i = 1;\n\n          for (; i < length; i += 2) {\n            matchIndexes.push(i);\n          }\n\n          return matchIndexes;\n        }),\n        \"lt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n          var i = argument < 0 ? argument + length : argument > length ? length : argument;\n\n          for (; --i >= 0;) {\n            matchIndexes.push(i);\n          }\n\n          return matchIndexes;\n        }),\n        \"gt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n          var i = argument < 0 ? argument + length : argument;\n\n          for (; ++i < length;) {\n            matchIndexes.push(i);\n          }\n\n          return matchIndexes;\n        })\n      }\n    };\n    Expr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"]; // Add button/input type pseudos\n\n    for (i in {\n      radio: true,\n      checkbox: true,\n      file: true,\n      password: true,\n      image: true\n    }) {\n      Expr.pseudos[i] = createInputPseudo(i);\n    }\n\n    for (i in {\n      submit: true,\n      reset: true\n    }) {\n      Expr.pseudos[i] = createButtonPseudo(i);\n    } // Easy API for creating new setFilters\n\n\n    function setFilters() {}\n\n    setFilters.prototype = Expr.filters = Expr.pseudos;\n    Expr.setFilters = new setFilters();\n\n    tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n      var matched,\n          match,\n          tokens,\n          type,\n          soFar,\n          groups,\n          preFilters,\n          cached = tokenCache[selector + \" \"];\n\n      if (cached) {\n        return parseOnly ? 0 : cached.slice(0);\n      }\n\n      soFar = selector;\n      groups = [];\n      preFilters = Expr.preFilter;\n\n      while (soFar) {\n        // Comma and first run\n        if (!matched || (match = rcomma.exec(soFar))) {\n          if (match) {\n            // Don't consume trailing commas as valid\n            soFar = soFar.slice(match[0].length) || soFar;\n          }\n\n          groups.push(tokens = []);\n        }\n\n        matched = false; // Combinators\n\n        if (match = rcombinators.exec(soFar)) {\n          matched = match.shift();\n          tokens.push({\n            value: matched,\n            // Cast descendant combinators to space\n            type: match[0].replace(rtrim, \" \")\n          });\n          soFar = soFar.slice(matched.length);\n        } // Filters\n\n\n        for (type in Expr.filter) {\n          if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n            matched = match.shift();\n            tokens.push({\n              value: matched,\n              type: type,\n              matches: match\n            });\n            soFar = soFar.slice(matched.length);\n          }\n        }\n\n        if (!matched) {\n          break;\n        }\n      } // Return the length of the invalid excess\n      // if we're just parsing\n      // Otherwise, throw an error or return tokens\n\n\n      return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : // Cache the tokens\n      tokenCache(selector, groups).slice(0);\n    };\n\n    function toSelector(tokens) {\n      var i = 0,\n          len = tokens.length,\n          selector = \"\";\n\n      for (; i < len; i++) {\n        selector += tokens[i].value;\n      }\n\n      return selector;\n    }\n\n    function addCombinator(matcher, combinator, base) {\n      var dir = combinator.dir,\n          skip = combinator.next,\n          key = skip || dir,\n          checkNonElements = base && key === \"parentNode\",\n          doneName = done++;\n      return combinator.first ? // Check against closest ancestor/preceding element\n      function (elem, context, xml) {\n        while (elem = elem[dir]) {\n          if (elem.nodeType === 1 || checkNonElements) {\n            return matcher(elem, context, xml);\n          }\n        }\n\n        return false;\n      } : // Check against all ancestor/preceding elements\n      function (elem, context, xml) {\n        var oldCache,\n            uniqueCache,\n            outerCache,\n            newCache = [dirruns, doneName]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\n        if (xml) {\n          while (elem = elem[dir]) {\n            if (elem.nodeType === 1 || checkNonElements) {\n              if (matcher(elem, context, xml)) {\n                return true;\n              }\n            }\n          }\n        } else {\n          while (elem = elem[dir]) {\n            if (elem.nodeType === 1 || checkNonElements) {\n              outerCache = elem[expando] || (elem[expando] = {}); // Support: IE <9 only\n              // Defend against cloned attroperties (jQuery gh-1709)\n\n              uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});\n\n              if (skip && skip === elem.nodeName.toLowerCase()) {\n                elem = elem[dir] || elem;\n              } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n                // Assign to newCache so results back-propagate to previous elements\n                return newCache[2] = oldCache[2];\n              } else {\n                // Reuse newcache so results back-propagate to previous elements\n                uniqueCache[key] = newCache; // A match means we're done; a fail means we have to keep checking\n\n                if (newCache[2] = matcher(elem, context, xml)) {\n                  return true;\n                }\n              }\n            }\n          }\n        }\n\n        return false;\n      };\n    }\n\n    function elementMatcher(matchers) {\n      return matchers.length > 1 ? function (elem, context, xml) {\n        var i = matchers.length;\n\n        while (i--) {\n          if (!matchers[i](elem, context, xml)) {\n            return false;\n          }\n        }\n\n        return true;\n      } : matchers[0];\n    }\n\n    function multipleContexts(selector, contexts, results) {\n      var i = 0,\n          len = contexts.length;\n\n      for (; i < len; i++) {\n        Sizzle(selector, contexts[i], results);\n      }\n\n      return results;\n    }\n\n    function condense(unmatched, map, filter, context, xml) {\n      var elem,\n          newUnmatched = [],\n          i = 0,\n          len = unmatched.length,\n          mapped = map != null;\n\n      for (; i < len; i++) {\n        if (elem = unmatched[i]) {\n          if (!filter || filter(elem, context, xml)) {\n            newUnmatched.push(elem);\n\n            if (mapped) {\n              map.push(i);\n            }\n          }\n        }\n      }\n\n      return newUnmatched;\n    }\n\n    function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n      if (postFilter && !postFilter[expando]) {\n        postFilter = setMatcher(postFilter);\n      }\n\n      if (postFinder && !postFinder[expando]) {\n        postFinder = setMatcher(postFinder, postSelector);\n      }\n\n      return markFunction(function (seed, results, context, xml) {\n        var temp,\n            i,\n            elem,\n            preMap = [],\n            postMap = [],\n            preexisting = results.length,\n            // Get initial elements from seed or context\n        elems = seed || multipleContexts(selector || \"*\", context.nodeType ? [context] : context, []),\n            // Prefilter to get matcher input, preserving a map for seed-results synchronization\n        matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems,\n            matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n        postFinder || (seed ? preFilter : preexisting || postFilter) ? // ...intermediate processing is necessary\n        [] : // ...otherwise use results directly\n        results : matcherIn; // Find primary matches\n\n        if (matcher) {\n          matcher(matcherIn, matcherOut, context, xml);\n        } // Apply postFilter\n\n\n        if (postFilter) {\n          temp = condense(matcherOut, postMap);\n          postFilter(temp, [], context, xml); // Un-match failing elements by moving them back to matcherIn\n\n          i = temp.length;\n\n          while (i--) {\n            if (elem = temp[i]) {\n              matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n            }\n          }\n        }\n\n        if (seed) {\n          if (postFinder || preFilter) {\n            if (postFinder) {\n              // Get the final matcherOut by condensing this intermediate into postFinder contexts\n              temp = [];\n              i = matcherOut.length;\n\n              while (i--) {\n                if (elem = matcherOut[i]) {\n                  // Restore matcherIn since elem is not yet a final match\n                  temp.push(matcherIn[i] = elem);\n                }\n              }\n\n              postFinder(null, matcherOut = [], temp, xml);\n            } // Move matched elements from seed to results to keep them synchronized\n\n\n            i = matcherOut.length;\n\n            while (i--) {\n              if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {\n                seed[temp] = !(results[temp] = elem);\n              }\n            }\n          } // Add elements to results, through postFinder if defined\n\n        } else {\n          matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n\n          if (postFinder) {\n            postFinder(null, results, matcherOut, xml);\n          } else {\n            push.apply(results, matcherOut);\n          }\n        }\n      });\n    }\n\n    function matcherFromTokens(tokens) {\n      var checkContext,\n          matcher,\n          j,\n          len = tokens.length,\n          leadingRelative = Expr.relative[tokens[0].type],\n          implicitRelative = leadingRelative || Expr.relative[\" \"],\n          i = leadingRelative ? 1 : 0,\n          // The foundational matcher ensures that elements are reachable from top-level context(s)\n      matchContext = addCombinator(function (elem) {\n        return elem === checkContext;\n      }, implicitRelative, true),\n          matchAnyContext = addCombinator(function (elem) {\n        return indexOf(checkContext, elem) > -1;\n      }, implicitRelative, true),\n          matchers = [function (elem, context, xml) {\n        var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); // Avoid hanging onto element (issue #299)\n\n        checkContext = null;\n        return ret;\n      }];\n\n      for (; i < len; i++) {\n        if (matcher = Expr.relative[tokens[i].type]) {\n          matchers = [addCombinator(elementMatcher(matchers), matcher)];\n        } else {\n          matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); // Return special upon seeing a positional matcher\n\n          if (matcher[expando]) {\n            // Find the next relative operator (if any) for proper handling\n            j = ++i;\n\n            for (; j < len; j++) {\n              if (Expr.relative[tokens[j].type]) {\n                break;\n              }\n            }\n\n            return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*`\n            tokens.slice(0, i - 1).concat({\n              value: tokens[i - 2].type === \" \" ? \"*\" : \"\"\n            })).replace(rtrim, \"$1\"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n          }\n\n          matchers.push(matcher);\n        }\n      }\n\n      return elementMatcher(matchers);\n    }\n\n    function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n      var bySet = setMatchers.length > 0,\n          byElement = elementMatchers.length > 0,\n          superMatcher = function superMatcher(seed, context, xml, results, outermost) {\n        var elem,\n            j,\n            matcher,\n            matchedCount = 0,\n            i = \"0\",\n            unmatched = seed && [],\n            setMatched = [],\n            contextBackup = outermostContext,\n            // We must always have either seed elements or outermost context\n        elems = seed || byElement && Expr.find[\"TAG\"](\"*\", outermost),\n            // Use integer dirruns iff this is the outermost matcher\n        dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1,\n            len = elems.length;\n\n        if (outermost) {\n          // Support: IE 11+, Edge 17 - 18+\n          // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n          // two documents; shallow comparisons work.\n          // eslint-disable-next-line eqeqeq\n          outermostContext = context == document || context || outermost;\n        } // Add elements passing elementMatchers directly to results\n        // Support: IE<9, Safari\n        // Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\n\n        for (; i !== len && (elem = elems[i]) != null; i++) {\n          if (byElement && elem) {\n            j = 0; // Support: IE 11+, Edge 17 - 18+\n            // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n            // two documents; shallow comparisons work.\n            // eslint-disable-next-line eqeqeq\n\n            if (!context && elem.ownerDocument != document) {\n              setDocument(elem);\n              xml = !documentIsHTML;\n            }\n\n            while (matcher = elementMatchers[j++]) {\n              if (matcher(elem, context || document, xml)) {\n                results.push(elem);\n                break;\n              }\n            }\n\n            if (outermost) {\n              dirruns = dirrunsUnique;\n            }\n          } // Track unmatched elements for set filters\n\n\n          if (bySet) {\n            // They will have gone through all possible matchers\n            if (elem = !matcher && elem) {\n              matchedCount--;\n            } // Lengthen the array for every element, matched or not\n\n\n            if (seed) {\n              unmatched.push(elem);\n            }\n          }\n        } // `i` is now the count of elements visited above, and adding it to `matchedCount`\n        // makes the latter nonnegative.\n\n\n        matchedCount += i; // Apply set filters to unmatched elements\n        // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n        // equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n        // no element matchers and no seed.\n        // Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n        // case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n        // numerically zero.\n\n        if (bySet && i !== matchedCount) {\n          j = 0;\n\n          while (matcher = setMatchers[j++]) {\n            matcher(unmatched, setMatched, context, xml);\n          }\n\n          if (seed) {\n            // Reintegrate element matches to eliminate the need for sorting\n            if (matchedCount > 0) {\n              while (i--) {\n                if (!(unmatched[i] || setMatched[i])) {\n                  setMatched[i] = pop.call(results);\n                }\n              }\n            } // Discard index placeholder values to get only actual matches\n\n\n            setMatched = condense(setMatched);\n          } // Add matches to results\n\n\n          push.apply(results, setMatched); // Seedless set matches succeeding multiple successful matchers stipulate sorting\n\n          if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n            Sizzle.uniqueSort(results);\n          }\n        } // Override manipulation of globals by nested matchers\n\n\n        if (outermost) {\n          dirruns = dirrunsUnique;\n          outermostContext = contextBackup;\n        }\n\n        return unmatched;\n      };\n\n      return bySet ? markFunction(superMatcher) : superMatcher;\n    }\n\n    compile = Sizzle.compile = function (selector, match\n    /* Internal Use Only */\n    ) {\n      var i,\n          setMatchers = [],\n          elementMatchers = [],\n          cached = compilerCache[selector + \" \"];\n\n      if (!cached) {\n        // Generate a function of recursive functions that can be used to check each element\n        if (!match) {\n          match = tokenize(selector);\n        }\n\n        i = match.length;\n\n        while (i--) {\n          cached = matcherFromTokens(match[i]);\n\n          if (cached[expando]) {\n            setMatchers.push(cached);\n          } else {\n            elementMatchers.push(cached);\n          }\n        } // Cache the compiled function\n\n\n        cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); // Save selector and tokenization\n\n        cached.selector = selector;\n      }\n\n      return cached;\n    };\n    /**\n     * A low-level selection function that works with Sizzle's compiled\n     *  selector functions\n     * @param {String|Function} selector A selector or a pre-compiled\n     *  selector function built with Sizzle.compile\n     * @param {Element} context\n     * @param {Array} [results]\n     * @param {Array} [seed] A set of elements to match against\n     */\n\n\n    select = Sizzle.select = function (selector, context, results, seed) {\n      var i,\n          tokens,\n          token,\n          type,\n          find,\n          compiled = typeof selector === \"function\" && selector,\n          match = !seed && tokenize(selector = compiled.selector || selector);\n      results = results || []; // Try to minimize operations if there is only one selector in the list and no seed\n      // (the latter of which guarantees us context)\n\n      if (match.length === 1) {\n        // Reduce context if the leading compound selector is an ID\n        tokens = match[0] = match[0].slice(0);\n\n        if (tokens.length > 2 && (token = tokens[0]).type === \"ID\" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n          context = (Expr.find[\"ID\"](token.matches[0].replace(runescape, funescape), context) || [])[0];\n\n          if (!context) {\n            return results; // Precompiled matchers will still verify ancestry, so step up a level\n          } else if (compiled) {\n            context = context.parentNode;\n          }\n\n          selector = selector.slice(tokens.shift().value.length);\n        } // Fetch a seed set for right-to-left matching\n\n\n        i = matchExpr[\"needsContext\"].test(selector) ? 0 : tokens.length;\n\n        while (i--) {\n          token = tokens[i]; // Abort if we hit a combinator\n\n          if (Expr.relative[type = token.type]) {\n            break;\n          }\n\n          if (find = Expr.find[type]) {\n            // Search, expanding context for leading sibling combinators\n            if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n              // If seed is empty or no tokens remain, we can return early\n              tokens.splice(i, 1);\n              selector = seed.length && toSelector(tokens);\n\n              if (!selector) {\n                push.apply(results, seed);\n                return results;\n              }\n\n              break;\n            }\n          }\n        }\n      } // Compile and execute a filtering function if one is not provided\n      // Provide `match` to avoid retokenization if we modified the selector above\n\n\n      (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);\n      return results;\n    }; // One-time assignments\n    // Sort stability\n\n\n    support.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando; // Support: Chrome 14-35+\n    // Always assume duplicates if they aren't passed to the comparison function\n\n    support.detectDuplicates = !!hasDuplicate; // Initialize against the default document\n\n    setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n    // Detached nodes confoundingly follow *each other*\n\n    support.sortDetached = assert(function (el) {\n      // Should return 1, but returns 4 (following)\n      return el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n    }); // Support: IE<8\n    // Prevent attribute/property \"interpolation\"\n    // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\n\n    if (!assert(function (el) {\n      el.innerHTML = \"<a href='#'></a>\";\n      return el.firstChild.getAttribute(\"href\") === \"#\";\n    })) {\n      addHandle(\"type|href|height|width\", function (elem, name, isXML) {\n        if (!isXML) {\n          return elem.getAttribute(name, name.toLowerCase() === \"type\" ? 1 : 2);\n        }\n      });\n    } // Support: IE<9\n    // Use defaultValue in place of getAttribute(\"value\")\n\n\n    if (!support.attributes || !assert(function (el) {\n      el.innerHTML = \"<input/>\";\n      el.firstChild.setAttribute(\"value\", \"\");\n      return el.firstChild.getAttribute(\"value\") === \"\";\n    })) {\n      addHandle(\"value\", function (elem, _name, isXML) {\n        if (!isXML && elem.nodeName.toLowerCase() === \"input\") {\n          return elem.defaultValue;\n        }\n      });\n    } // Support: IE<9\n    // Use getAttributeNode to fetch booleans when getAttribute lies\n\n\n    if (!assert(function (el) {\n      return el.getAttribute(\"disabled\") == null;\n    })) {\n      addHandle(booleans, function (elem, name, isXML) {\n        var val;\n\n        if (!isXML) {\n          return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n        }\n      });\n    }\n\n    return Sizzle;\n  }(window);\n\n  jQuery.find = Sizzle;\n  jQuery.expr = Sizzle.selectors; // Deprecated\n\n  jQuery.expr[\":\"] = jQuery.expr.pseudos;\n  jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\n  jQuery.text = Sizzle.getText;\n  jQuery.isXMLDoc = Sizzle.isXML;\n  jQuery.contains = Sizzle.contains;\n  jQuery.escapeSelector = Sizzle.escape;\n\n  var dir = function dir(elem, _dir, until) {\n    var matched = [],\n        truncate = until !== undefined;\n\n    while ((elem = elem[_dir]) && elem.nodeType !== 9) {\n      if (elem.nodeType === 1) {\n        if (truncate && jQuery(elem).is(until)) {\n          break;\n        }\n\n        matched.push(elem);\n      }\n    }\n\n    return matched;\n  };\n\n  var _siblings = function siblings(n, elem) {\n    var matched = [];\n\n    for (; n; n = n.nextSibling) {\n      if (n.nodeType === 1 && n !== elem) {\n        matched.push(n);\n      }\n    }\n\n    return matched;\n  };\n\n  var rneedsContext = jQuery.expr.match.needsContext;\n\n  function nodeName(elem, name) {\n    return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n  }\n\n  var rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i; // Implement the identical functionality for filter and not\n\n  function winnow(elements, qualifier, not) {\n    if (isFunction(qualifier)) {\n      return jQuery.grep(elements, function (elem, i) {\n        return !!qualifier.call(elem, i, elem) !== not;\n      });\n    } // Single element\n\n\n    if (qualifier.nodeType) {\n      return jQuery.grep(elements, function (elem) {\n        return elem === qualifier !== not;\n      });\n    } // Arraylike of elements (jQuery, arguments, Array)\n\n\n    if (typeof qualifier !== \"string\") {\n      return jQuery.grep(elements, function (elem) {\n        return indexOf.call(qualifier, elem) > -1 !== not;\n      });\n    } // Filtered directly for both simple and complex selectors\n\n\n    return jQuery.filter(qualifier, elements, not);\n  }\n\n  jQuery.filter = function (expr, elems, not) {\n    var elem = elems[0];\n\n    if (not) {\n      expr = \":not(\" + expr + \")\";\n    }\n\n    if (elems.length === 1 && elem.nodeType === 1) {\n      return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n    }\n\n    return jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n      return elem.nodeType === 1;\n    }));\n  };\n\n  jQuery.fn.extend({\n    find: function find(selector) {\n      var i,\n          ret,\n          len = this.length,\n          self = this;\n\n      if (typeof selector !== \"string\") {\n        return this.pushStack(jQuery(selector).filter(function () {\n          for (i = 0; i < len; i++) {\n            if (jQuery.contains(self[i], this)) {\n              return true;\n            }\n          }\n        }));\n      }\n\n      ret = this.pushStack([]);\n\n      for (i = 0; i < len; i++) {\n        jQuery.find(selector, self[i], ret);\n      }\n\n      return len > 1 ? jQuery.uniqueSort(ret) : ret;\n    },\n    filter: function filter(selector) {\n      return this.pushStack(winnow(this, selector || [], false));\n    },\n    not: function not(selector) {\n      return this.pushStack(winnow(this, selector || [], true));\n    },\n    is: function is(selector) {\n      return !!winnow(this, // If this is a positional/relative selector, check membership in the returned set\n      // so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n      typeof selector === \"string\" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;\n    }\n  }); // Initialize a jQuery object\n  // A central reference to the root jQuery(document)\n\n  var rootjQuery,\n      // A simple way to check for HTML strings\n  // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n  // Strict HTML recognition (trac-11290: must start with <)\n  // Shortcut simple #id case for speed\n  rquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n      init = jQuery.fn.init = function (selector, context, root) {\n    var match, elem; // HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\n    if (!selector) {\n      return this;\n    } // Method init() accepts an alternate rootjQuery\n    // so migrate can support jQuery.sub (gh-2101)\n\n\n    root = root || rootjQuery; // Handle HTML strings\n\n    if (typeof selector === \"string\") {\n      if (selector[0] === \"<\" && selector[selector.length - 1] === \">\" && selector.length >= 3) {\n        // Assume that strings that start and end with <> are HTML and skip the regex check\n        match = [null, selector, null];\n      } else {\n        match = rquickExpr.exec(selector);\n      } // Match html or make sure no context is specified for #id\n\n\n      if (match && (match[1] || !context)) {\n        // HANDLE: $(html) -> $(array)\n        if (match[1]) {\n          context = context instanceof jQuery ? context[0] : context; // Option to run scripts is true for back-compat\n          // Intentionally let the error be thrown if parseHTML is not present\n\n          jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true)); // HANDLE: $(html, props)\n\n          if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n            for (match in context) {\n              // Properties of context are called as methods if possible\n              if (isFunction(this[match])) {\n                this[match](context[match]); // ...and otherwise set as attributes\n              } else {\n                this.attr(match, context[match]);\n              }\n            }\n          }\n\n          return this; // HANDLE: $(#id)\n        } else {\n          elem = document.getElementById(match[2]);\n\n          if (elem) {\n            // Inject the element directly into the jQuery object\n            this[0] = elem;\n            this.length = 1;\n          }\n\n          return this;\n        } // HANDLE: $(expr, $(...))\n\n      } else if (!context || context.jquery) {\n        return (context || root).find(selector); // HANDLE: $(expr, context)\n        // (which is just equivalent to: $(context).find(expr)\n      } else {\n        return this.constructor(context).find(selector);\n      } // HANDLE: $(DOMElement)\n\n    } else if (selector.nodeType) {\n      this[0] = selector;\n      this.length = 1;\n      return this; // HANDLE: $(function)\n      // Shortcut for document ready\n    } else if (isFunction(selector)) {\n      return root.ready !== undefined ? root.ready(selector) : // Execute immediately if ready is not present\n      selector(jQuery);\n    }\n\n    return jQuery.makeArray(selector, this);\n  }; // Give the init function the jQuery prototype for later instantiation\n\n\n  init.prototype = jQuery.fn; // Initialize central reference\n\n  rootjQuery = jQuery(document);\n  var rparentsprev = /^(?:parents|prev(?:Until|All))/,\n      // Methods guaranteed to produce a unique set when starting from a unique set\n  guaranteedUnique = {\n    children: true,\n    contents: true,\n    next: true,\n    prev: true\n  };\n  jQuery.fn.extend({\n    has: function has(target) {\n      var targets = jQuery(target, this),\n          l = targets.length;\n      return this.filter(function () {\n        var i = 0;\n\n        for (; i < l; i++) {\n          if (jQuery.contains(this, targets[i])) {\n            return true;\n          }\n        }\n      });\n    },\n    closest: function closest(selectors, context) {\n      var cur,\n          i = 0,\n          l = this.length,\n          matched = [],\n          targets = typeof selectors !== \"string\" && jQuery(selectors); // Positional selectors never match, since there's no _selection_ context\n\n      if (!rneedsContext.test(selectors)) {\n        for (; i < l; i++) {\n          for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n            // Always skip document fragments\n            if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : // Don't pass non-elements to Sizzle\n            cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {\n              matched.push(cur);\n              break;\n            }\n          }\n        }\n      }\n\n      return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n    },\n    // Determine the position of an element within the set\n    index: function index(elem) {\n      // No argument, return index in parent\n      if (!elem) {\n        return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;\n      } // Index in selector\n\n\n      if (typeof elem === \"string\") {\n        return indexOf.call(jQuery(elem), this[0]);\n      } // Locate the position of the desired element\n\n\n      return indexOf.call(this, // If it receives a jQuery object, the first element is used\n      elem.jquery ? elem[0] : elem);\n    },\n    add: function add(selector, context) {\n      return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));\n    },\n    addBack: function addBack(selector) {\n      return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));\n    }\n  });\n\n  function sibling(cur, dir) {\n    while ((cur = cur[dir]) && cur.nodeType !== 1) {}\n\n    return cur;\n  }\n\n  jQuery.each({\n    parent: function parent(elem) {\n      var parent = elem.parentNode;\n      return parent && parent.nodeType !== 11 ? parent : null;\n    },\n    parents: function parents(elem) {\n      return dir(elem, \"parentNode\");\n    },\n    parentsUntil: function parentsUntil(elem, _i, until) {\n      return dir(elem, \"parentNode\", until);\n    },\n    next: function next(elem) {\n      return sibling(elem, \"nextSibling\");\n    },\n    prev: function prev(elem) {\n      return sibling(elem, \"previousSibling\");\n    },\n    nextAll: function nextAll(elem) {\n      return dir(elem, \"nextSibling\");\n    },\n    prevAll: function prevAll(elem) {\n      return dir(elem, \"previousSibling\");\n    },\n    nextUntil: function nextUntil(elem, _i, until) {\n      return dir(elem, \"nextSibling\", until);\n    },\n    prevUntil: function prevUntil(elem, _i, until) {\n      return dir(elem, \"previousSibling\", until);\n    },\n    siblings: function siblings(elem) {\n      return _siblings((elem.parentNode || {}).firstChild, elem);\n    },\n    children: function children(elem) {\n      return _siblings(elem.firstChild);\n    },\n    contents: function contents(elem) {\n      if (elem.contentDocument != null && // Support: IE 11+\n      // <object> elements with no `data` attribute has an object\n      // `contentDocument` with a `null` prototype.\n      getProto(elem.contentDocument)) {\n        return elem.contentDocument;\n      } // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n      // Treat the template element as a regular one in browsers that\n      // don't support it.\n\n\n      if (nodeName(elem, \"template\")) {\n        elem = elem.content || elem;\n      }\n\n      return jQuery.merge([], elem.childNodes);\n    }\n  }, function (name, fn) {\n    jQuery.fn[name] = function (until, selector) {\n      var matched = jQuery.map(this, fn, until);\n\n      if (name.slice(-5) !== \"Until\") {\n        selector = until;\n      }\n\n      if (selector && typeof selector === \"string\") {\n        matched = jQuery.filter(selector, matched);\n      }\n\n      if (this.length > 1) {\n        // Remove duplicates\n        if (!guaranteedUnique[name]) {\n          jQuery.uniqueSort(matched);\n        } // Reverse order for parents* and prev-derivatives\n\n\n        if (rparentsprev.test(name)) {\n          matched.reverse();\n        }\n      }\n\n      return this.pushStack(matched);\n    };\n  });\n  var rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g; // Convert String-formatted options into Object-formatted ones\n\n  function createOptions(options) {\n    var object = {};\n    jQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n      object[flag] = true;\n    });\n    return object;\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   */\n\n\n  jQuery.Callbacks = function (options) {\n    // Convert options from String-formatted to Object-formatted if needed\n    // (we check in cache first)\n    options = typeof options === \"string\" ? createOptions(options) : jQuery.extend({}, options);\n\n    var // Flag to know if list is currently firing\n    firing,\n        // Last fire value for non-forgettable lists\n    memory,\n        // Flag to know if list was already fired\n    _fired,\n        // Flag to prevent firing\n    _locked,\n        // Actual callback list\n    list = [],\n        // Queue of execution data for repeatable lists\n    queue = [],\n        // Index of currently firing callback (modified by add/remove as needed)\n    firingIndex = -1,\n        // Fire callbacks\n    fire = function fire() {\n      // Enforce single-firing\n      _locked = _locked || options.once; // Execute callbacks for all pending executions,\n      // respecting firingIndex overrides and runtime changes\n\n      _fired = firing = true;\n\n      for (; queue.length; firingIndex = -1) {\n        memory = queue.shift();\n\n        while (++firingIndex < list.length) {\n          // Run callback and check for early termination\n          if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {\n            // Jump to end and forget the data so .add doesn't re-fire\n            firingIndex = list.length;\n            memory = false;\n          }\n        }\n      } // Forget the data if we're done with it\n\n\n      if (!options.memory) {\n        memory = false;\n      }\n\n      firing = false; // Clean up if we're done firing for good\n\n      if (_locked) {\n        // Keep an empty list if we have data for future add calls\n        if (memory) {\n          list = []; // Otherwise, this object is spent\n        } else {\n          list = \"\";\n        }\n      }\n    },\n        // Actual Callbacks object\n    self = {\n      // Add a callback or a collection of callbacks to the list\n      add: function add() {\n        if (list) {\n          // If we have memory from a past run, we should fire after adding\n          if (memory && !firing) {\n            firingIndex = list.length - 1;\n            queue.push(memory);\n          }\n\n          (function add(args) {\n            jQuery.each(args, function (_, arg) {\n              if (isFunction(arg)) {\n                if (!options.unique || !self.has(arg)) {\n                  list.push(arg);\n                }\n              } else if (arg && arg.length && toType(arg) !== \"string\") {\n                // Inspect recursively\n                add(arg);\n              }\n            });\n          })(arguments);\n\n          if (memory && !firing) {\n            fire();\n          }\n        }\n\n        return this;\n      },\n      // Remove a callback from the list\n      remove: function remove() {\n        jQuery.each(arguments, function (_, arg) {\n          var index;\n\n          while ((index = jQuery.inArray(arg, list, index)) > -1) {\n            list.splice(index, 1); // Handle firing indexes\n\n            if (index <= firingIndex) {\n              firingIndex--;\n            }\n          }\n        });\n        return this;\n      },\n      // Check if a given callback is in the list.\n      // If no argument is given, return whether or not list has callbacks attached.\n      has: function has(fn) {\n        return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;\n      },\n      // Remove all callbacks from the list\n      empty: function empty() {\n        if (list) {\n          list = [];\n        }\n\n        return this;\n      },\n      // Disable .fire and .add\n      // Abort any current/pending executions\n      // Clear all callbacks and values\n      disable: function disable() {\n        _locked = queue = [];\n        list = memory = \"\";\n        return this;\n      },\n      disabled: function disabled() {\n        return !list;\n      },\n      // Disable .fire\n      // Also disable .add unless we have memory (since it would have no effect)\n      // Abort any pending executions\n      lock: function lock() {\n        _locked = queue = [];\n\n        if (!memory && !firing) {\n          list = memory = \"\";\n        }\n\n        return this;\n      },\n      locked: function locked() {\n        return !!_locked;\n      },\n      // Call all callbacks with the given context and arguments\n      fireWith: function fireWith(context, args) {\n        if (!_locked) {\n          args = args || [];\n          args = [context, args.slice ? args.slice() : args];\n          queue.push(args);\n\n          if (!firing) {\n            fire();\n          }\n        }\n\n        return this;\n      },\n      // Call all the callbacks with the given arguments\n      fire: function fire() {\n        self.fireWith(this, arguments);\n        return this;\n      },\n      // To know if the callbacks have already been called at least once\n      fired: function fired() {\n        return !!_fired;\n      }\n    };\n\n    return self;\n  };\n\n  function Identity(v) {\n    return v;\n  }\n\n  function Thrower(ex) {\n    throw ex;\n  }\n\n  function adoptValue(value, resolve, reject, noValue) {\n    var method;\n\n    try {\n      // Check for promise aspect first to privilege synchronous behavior\n      if (value && isFunction(method = value.promise)) {\n        method.call(value).done(resolve).fail(reject); // Other thenables\n      } else if (value && isFunction(method = value.then)) {\n        method.call(value, resolve, reject); // Other non-thenables\n      } else {\n        // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n        // * false: [ value ].slice( 0 ) => resolve( value )\n        // * true: [ value ].slice( 1 ) => resolve()\n        resolve.apply(undefined, [value].slice(noValue));\n      } // For Promises/A+, convert exceptions into rejections\n      // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n      // Deferred#then to conditionally suppress rejection.\n\n    } catch (value) {\n      // Support: Android 4.0 only\n      // Strict mode functions invoked without .call/.apply get global-object context\n      reject.apply(undefined, [value]);\n    }\n  }\n\n  jQuery.extend({\n    Deferred: function Deferred(func) {\n      var tuples = [// action, add listener, callbacks,\n      // ... .then handlers, argument index, [final state]\n      [\"notify\", \"progress\", jQuery.Callbacks(\"memory\"), jQuery.Callbacks(\"memory\"), 2], [\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 0, \"resolved\"], [\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 1, \"rejected\"]],\n          _state = \"pending\",\n          _promise = {\n        state: function state() {\n          return _state;\n        },\n        always: function always() {\n          deferred.done(arguments).fail(arguments);\n          return this;\n        },\n        \"catch\": function _catch(fn) {\n          return _promise.then(null, fn);\n        },\n        // Keep pipe for back-compat\n        pipe: function pipe() {\n          var fns = arguments;\n          return jQuery.Deferred(function (newDefer) {\n            jQuery.each(tuples, function (_i, tuple) {\n              // Map tuples (progress, done, fail) to arguments (done, fail, progress)\n              var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]]; // deferred.progress(function() { bind to newDefer or newDefer.notify })\n              // deferred.done(function() { bind to newDefer or newDefer.resolve })\n              // deferred.fail(function() { bind to newDefer or newDefer.reject })\n\n              deferred[tuple[1]](function () {\n                var returned = fn && fn.apply(this, arguments);\n\n                if (returned && isFunction(returned.promise)) {\n                  returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);\n                } else {\n                  newDefer[tuple[0] + \"With\"](this, fn ? [returned] : arguments);\n                }\n              });\n            });\n            fns = null;\n          }).promise();\n        },\n        then: function then(onFulfilled, onRejected, onProgress) {\n          var maxDepth = 0;\n\n          function resolve(depth, deferred, handler, special) {\n            return function () {\n              var that = this,\n                  args = arguments,\n                  mightThrow = function mightThrow() {\n                var returned, then; // Support: Promises/A+ section 2.3.3.3.3\n                // https://promisesaplus.com/#point-59\n                // Ignore double-resolution attempts\n\n                if (depth < maxDepth) {\n                  return;\n                }\n\n                returned = handler.apply(that, args); // Support: Promises/A+ section 2.3.1\n                // https://promisesaplus.com/#point-48\n\n                if (returned === deferred.promise()) {\n                  throw new TypeError(\"Thenable self-resolution\");\n                } // Support: Promises/A+ sections 2.3.3.1, 3.5\n                // https://promisesaplus.com/#point-54\n                // https://promisesaplus.com/#point-75\n                // Retrieve `then` only once\n\n\n                then = returned && (_typeof(returned) === \"object\" || typeof returned === \"function\") && returned.then; // Handle a returned thenable\n\n                if (isFunction(then)) {\n                  // Special processors (notify) just wait for resolution\n                  if (special) {\n                    then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special)); // Normal processors (resolve) also hook into progress\n                  } else {\n                    // ...and disregard older resolution values\n                    maxDepth++;\n                    then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));\n                  } // Handle all other returned values\n\n                } else {\n                  // Only substitute handlers pass on context\n                  // and multiple values (non-spec behavior)\n                  if (handler !== Identity) {\n                    that = undefined;\n                    args = [returned];\n                  } // Process the value(s)\n                  // Default process is resolve\n\n\n                  (special || deferred.resolveWith)(that, args);\n                }\n              },\n                  // Only normal processors (resolve) catch and reject exceptions\n              process = special ? mightThrow : function () {\n                try {\n                  mightThrow();\n                } catch (e) {\n                  if (jQuery.Deferred.exceptionHook) {\n                    jQuery.Deferred.exceptionHook(e, process.stackTrace);\n                  } // Support: Promises/A+ section 2.3.3.3.4.1\n                  // https://promisesaplus.com/#point-61\n                  // Ignore post-resolution exceptions\n\n\n                  if (depth + 1 >= maxDepth) {\n                    // Only substitute handlers pass on context\n                    // and multiple values (non-spec behavior)\n                    if (handler !== Thrower) {\n                      that = undefined;\n                      args = [e];\n                    }\n\n                    deferred.rejectWith(that, args);\n                  }\n                }\n              }; // Support: Promises/A+ section 2.3.3.3.1\n              // https://promisesaplus.com/#point-57\n              // Re-resolve promises immediately to dodge false rejection from\n              // subsequent errors\n\n\n              if (depth) {\n                process();\n              } else {\n                // Call an optional hook to record the stack, in case of exception\n                // since it's otherwise lost when execution goes async\n                if (jQuery.Deferred.getStackHook) {\n                  process.stackTrace = jQuery.Deferred.getStackHook();\n                }\n\n                window.setTimeout(process);\n              }\n            };\n          }\n\n          return jQuery.Deferred(function (newDefer) {\n            // progress_handlers.add( ... )\n            tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith)); // fulfilled_handlers.add( ... )\n\n            tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity)); // rejected_handlers.add( ... )\n\n            tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));\n          }).promise();\n        },\n        // Get a promise for this deferred\n        // If obj is provided, the promise aspect is added to the object\n        promise: function promise(obj) {\n          return obj != null ? jQuery.extend(obj, _promise) : _promise;\n        }\n      },\n          deferred = {}; // Add list-specific methods\n\n      jQuery.each(tuples, function (i, tuple) {\n        var list = tuple[2],\n            stateString = tuple[5]; // promise.progress = list.add\n        // promise.done = list.add\n        // promise.fail = list.add\n\n        _promise[tuple[1]] = list.add; // Handle state\n\n        if (stateString) {\n          list.add(function () {\n            // state = \"resolved\" (i.e., fulfilled)\n            // state = \"rejected\"\n            _state = stateString;\n          }, // rejected_callbacks.disable\n          // fulfilled_callbacks.disable\n          tuples[3 - i][2].disable, // rejected_handlers.disable\n          // fulfilled_handlers.disable\n          tuples[3 - i][3].disable, // progress_callbacks.lock\n          tuples[0][2].lock, // progress_handlers.lock\n          tuples[0][3].lock);\n        } // progress_handlers.fire\n        // fulfilled_handlers.fire\n        // rejected_handlers.fire\n\n\n        list.add(tuple[3].fire); // deferred.notify = function() { deferred.notifyWith(...) }\n        // deferred.resolve = function() { deferred.resolveWith(...) }\n        // deferred.reject = function() { deferred.rejectWith(...) }\n\n        deferred[tuple[0]] = function () {\n          deferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n          return this;\n        }; // deferred.notifyWith = list.fireWith\n        // deferred.resolveWith = list.fireWith\n        // deferred.rejectWith = list.fireWith\n\n\n        deferred[tuple[0] + \"With\"] = list.fireWith;\n      }); // Make the deferred a promise\n\n      _promise.promise(deferred); // Call given func if any\n\n\n      if (func) {\n        func.call(deferred, deferred);\n      } // All done!\n\n\n      return deferred;\n    },\n    // Deferred helper\n    when: function when(singleValue) {\n      var // count of uncompleted subordinates\n      remaining = arguments.length,\n          // count of unprocessed arguments\n      i = remaining,\n          // subordinate fulfillment data\n      resolveContexts = Array(i),\n          resolveValues = _slice.call(arguments),\n          // the primary Deferred\n      primary = jQuery.Deferred(),\n          // subordinate callback factory\n      updateFunc = function updateFunc(i) {\n        return function (value) {\n          resolveContexts[i] = this;\n          resolveValues[i] = arguments.length > 1 ? _slice.call(arguments) : value;\n\n          if (! --remaining) {\n            primary.resolveWith(resolveContexts, resolveValues);\n          }\n        };\n      }; // Single- and empty arguments are adopted like Promise.resolve\n\n\n      if (remaining <= 1) {\n        adoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject, !remaining); // Use .then() to unwrap secondary thenables (cf. gh-3000)\n\n        if (primary.state() === \"pending\" || isFunction(resolveValues[i] && resolveValues[i].then)) {\n          return primary.then();\n        }\n      } // Multiple arguments are aggregated like Promise.all array elements\n\n\n      while (i--) {\n        adoptValue(resolveValues[i], updateFunc(i), primary.reject);\n      }\n\n      return primary.promise();\n    }\n  }); // These usually indicate a programmer mistake during development,\n  // warn about them ASAP rather than swallowing them by default.\n\n  var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n  jQuery.Deferred.exceptionHook = function (error, stack) {\n    // Support: IE 8 - 9 only\n    // Console exists when dev tools are open, which can happen at any time\n    if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n      window.console.warn(\"jQuery.Deferred exception: \" + error.message, error.stack, stack);\n    }\n  };\n\n  jQuery.readyException = function (error) {\n    window.setTimeout(function () {\n      throw error;\n    });\n  }; // The deferred used on DOM ready\n\n\n  var readyList = jQuery.Deferred();\n\n  jQuery.fn.ready = function (fn) {\n    readyList.then(fn) // Wrap jQuery.readyException in a function so that the lookup\n    // happens at the time of error handling instead of callback\n    // registration.\n    .catch(function (error) {\n      jQuery.readyException(error);\n    });\n    return this;\n  };\n\n  jQuery.extend({\n    // Is the DOM ready to be used? Set to true once it occurs.\n    isReady: false,\n    // A counter to track how many items to wait for before\n    // the ready event fires. See trac-6781\n    readyWait: 1,\n    // Handle when the DOM is ready\n    ready: function ready(wait) {\n      // Abort if there are pending holds or we're already ready\n      if (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n        return;\n      } // Remember that the DOM is ready\n\n\n      jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be\n\n      if (wait !== true && --jQuery.readyWait > 0) {\n        return;\n      } // If there are functions bound, to execute\n\n\n      readyList.resolveWith(document, [jQuery]);\n    }\n  });\n  jQuery.ready.then = readyList.then; // The ready event handler and self cleanup method\n\n  function completed() {\n    document.removeEventListener(\"DOMContentLoaded\", completed);\n    window.removeEventListener(\"load\", completed);\n    jQuery.ready();\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\n\n\n  if (document.readyState === \"complete\" || document.readyState !== \"loading\" && !document.documentElement.doScroll) {\n    // Handle it asynchronously to allow scripts the opportunity to delay ready\n    window.setTimeout(jQuery.ready);\n  } else {\n    // Use the handy event callback\n    document.addEventListener(\"DOMContentLoaded\", completed); // A fallback to window.onload, that will always work\n\n    window.addEventListener(\"load\", completed);\n  } // Multifunctional method to get and set values of a collection\n  // The value/s can optionally be executed if it's a function\n\n\n  var access = function access(elems, fn, key, value, chainable, emptyGet, raw) {\n    var i = 0,\n        len = elems.length,\n        bulk = key == null; // Sets many values\n\n    if (toType(key) === \"object\") {\n      chainable = true;\n\n      for (i in key) {\n        access(elems, fn, i, key[i], true, emptyGet, raw);\n      } // Sets one value\n\n    } else if (value !== undefined) {\n      chainable = true;\n\n      if (!isFunction(value)) {\n        raw = true;\n      }\n\n      if (bulk) {\n        // Bulk operations run against the entire set\n        if (raw) {\n          fn.call(elems, value);\n          fn = null; // ...except when executing function values\n        } else {\n          bulk = fn;\n\n          fn = function fn(elem, _key, value) {\n            return bulk.call(jQuery(elem), value);\n          };\n        }\n      }\n\n      if (fn) {\n        for (; i < len; i++) {\n          fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));\n        }\n      }\n    }\n\n    if (chainable) {\n      return elems;\n    } // Gets\n\n\n    if (bulk) {\n      return fn.call(elems);\n    }\n\n    return len ? fn(elems[0], key) : emptyGet;\n  }; // Matches dashed string for camelizing\n\n\n  var rmsPrefix = /^-ms-/,\n      rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace()\n\n  function fcamelCase(_all, letter) {\n    return letter.toUpperCase();\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)\n\n\n  function camelCase(string) {\n    return string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n  }\n\n  var acceptData = function acceptData(owner) {\n    // Accepts only:\n    //  - Node\n    //    - Node.ELEMENT_NODE\n    //    - Node.DOCUMENT_NODE\n    //  - Object\n    //    - Any\n    return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;\n  };\n\n  function Data() {\n    this.expando = jQuery.expando + Data.uid++;\n  }\n\n  Data.uid = 1;\n  Data.prototype = {\n    cache: function cache(owner) {\n      // Check if the owner object already has a cache\n      var value = owner[this.expando]; // If not, create one\n\n      if (!value) {\n        value = {}; // We can accept data for non-element nodes in modern browsers,\n        // but we should not, see trac-8335.\n        // Always return an empty object.\n\n        if (acceptData(owner)) {\n          // If it is a node unlikely to be stringify-ed or looped over\n          // use plain assignment\n          if (owner.nodeType) {\n            owner[this.expando] = value; // Otherwise secure it in a non-enumerable property\n            // configurable must be true to allow the property to be\n            // deleted when data is removed\n          } else {\n            Object.defineProperty(owner, this.expando, {\n              value: value,\n              configurable: true\n            });\n          }\n        }\n      }\n\n      return value;\n    },\n    set: function set(owner, data, value) {\n      var prop,\n          cache = this.cache(owner); // Handle: [ owner, key, value ] args\n      // Always use camelCase key (gh-2257)\n\n      if (typeof data === \"string\") {\n        cache[camelCase(data)] = value; // Handle: [ owner, { properties } ] args\n      } else {\n        // Copy the properties one-by-one to the cache object\n        for (prop in data) {\n          cache[camelCase(prop)] = data[prop];\n        }\n      }\n\n      return cache;\n    },\n    get: function get(owner, key) {\n      return key === undefined ? this.cache(owner) : // Always use camelCase key (gh-2257)\n      owner[this.expando] && owner[this.expando][camelCase(key)];\n    },\n    access: function access(owner, key, value) {\n      // In cases where either:\n      //\n      //   1. No key was specified\n      //   2. A string key was specified, but no value provided\n      //\n      // Take the \"read\" path and allow the get method to determine\n      // which value to return, respectively either:\n      //\n      //   1. The entire cache object\n      //   2. The data stored at the key\n      //\n      if (key === undefined || key && typeof key === \"string\" && value === undefined) {\n        return this.get(owner, key);\n      } // When the key is not a string, or both a key and value\n      // are specified, set or extend (existing objects) with either:\n      //\n      //   1. An object of properties\n      //   2. A key and value\n      //\n\n\n      this.set(owner, key, value); // Since the \"set\" path can have two possible entry points\n      // return the expected data based on which path was taken[*]\n\n      return value !== undefined ? value : key;\n    },\n    remove: function remove(owner, key) {\n      var i,\n          cache = owner[this.expando];\n\n      if (cache === undefined) {\n        return;\n      }\n\n      if (key !== undefined) {\n        // Support array or space separated string of keys\n        if (Array.isArray(key)) {\n          // If key is an array of keys...\n          // We always set camelCase keys, so remove that.\n          key = key.map(camelCase);\n        } else {\n          key = camelCase(key); // If a key with the spaces exists, use it.\n          // Otherwise, create an array by matching non-whitespace\n\n          key = key in cache ? [key] : key.match(rnothtmlwhite) || [];\n        }\n\n        i = key.length;\n\n        while (i--) {\n          delete cache[key[i]];\n        }\n      } // Remove the expando if there's no more data\n\n\n      if (key === undefined || jQuery.isEmptyObject(cache)) {\n        // Support: Chrome <=35 - 45\n        // Webkit & Blink performance suffers when deleting properties\n        // from DOM nodes, so set to undefined instead\n        // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n        if (owner.nodeType) {\n          owner[this.expando] = undefined;\n        } else {\n          delete owner[this.expando];\n        }\n      }\n    },\n    hasData: function hasData(owner) {\n      var cache = owner[this.expando];\n      return cache !== undefined && !jQuery.isEmptyObject(cache);\n    }\n  };\n  var dataPriv = new Data();\n  var dataUser = new Data(); //\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\n  var rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n      rmultiDash = /[A-Z]/g;\n\n  function getData(data) {\n    if (data === \"true\") {\n      return true;\n    }\n\n    if (data === \"false\") {\n      return false;\n    }\n\n    if (data === \"null\") {\n      return null;\n    } // Only convert to a number if it doesn't change the string\n\n\n    if (data === +data + \"\") {\n      return +data;\n    }\n\n    if (rbrace.test(data)) {\n      return JSON.parse(data);\n    }\n\n    return data;\n  }\n\n  function dataAttr(elem, key, data) {\n    var name; // If nothing was found internally, try to fetch any\n    // data from the HTML5 data-* attribute\n\n    if (data === undefined && elem.nodeType === 1) {\n      name = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n      data = elem.getAttribute(name);\n\n      if (typeof data === \"string\") {\n        try {\n          data = getData(data);\n        } catch (e) {} // Make sure we set the data so it isn't changed later\n\n\n        dataUser.set(elem, key, data);\n      } else {\n        data = undefined;\n      }\n    }\n\n    return data;\n  }\n\n  jQuery.extend({\n    hasData: function hasData(elem) {\n      return dataUser.hasData(elem) || dataPriv.hasData(elem);\n    },\n    data: function data(elem, name, _data) {\n      return dataUser.access(elem, name, _data);\n    },\n    removeData: function removeData(elem, name) {\n      dataUser.remove(elem, name);\n    },\n    // TODO: Now that all calls to _data and _removeData have been replaced\n    // with direct calls to dataPriv methods, these can be deprecated.\n    _data: function _data(elem, name, data) {\n      return dataPriv.access(elem, name, data);\n    },\n    _removeData: function _removeData(elem, name) {\n      dataPriv.remove(elem, name);\n    }\n  });\n  jQuery.fn.extend({\n    data: function data(key, value) {\n      var i,\n          name,\n          data,\n          elem = this[0],\n          attrs = elem && elem.attributes; // Gets all values\n\n      if (key === undefined) {\n        if (this.length) {\n          data = dataUser.get(elem);\n\n          if (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n            i = attrs.length;\n\n            while (i--) {\n              // Support: IE 11 only\n              // The attrs elements can be null (trac-14894)\n              if (attrs[i]) {\n                name = attrs[i].name;\n\n                if (name.indexOf(\"data-\") === 0) {\n                  name = camelCase(name.slice(5));\n                  dataAttr(elem, name, data[name]);\n                }\n              }\n            }\n\n            dataPriv.set(elem, \"hasDataAttrs\", true);\n          }\n        }\n\n        return data;\n      } // Sets multiple values\n\n\n      if (_typeof(key) === \"object\") {\n        return this.each(function () {\n          dataUser.set(this, key);\n        });\n      }\n\n      return access(this, function (value) {\n        var data; // The calling jQuery object (element matches) is not empty\n        // (and therefore has an element appears at this[ 0 ]) and the\n        // `value` parameter was not undefined. An empty jQuery object\n        // will result in `undefined` for elem = this[ 0 ] which will\n        // throw an exception if an attempt to read a data cache is made.\n\n        if (elem && value === undefined) {\n          // Attempt to get data from the cache\n          // The key will always be camelCased in Data\n          data = dataUser.get(elem, key);\n\n          if (data !== undefined) {\n            return data;\n          } // Attempt to \"discover\" the data in\n          // HTML5 custom data-* attrs\n\n\n          data = dataAttr(elem, key);\n\n          if (data !== undefined) {\n            return data;\n          } // We tried really hard, but the data doesn't exist.\n\n\n          return;\n        } // Set the data...\n\n\n        this.each(function () {\n          // We always store the camelCased key\n          dataUser.set(this, key, value);\n        });\n      }, null, value, arguments.length > 1, null, true);\n    },\n    removeData: function removeData(key) {\n      return this.each(function () {\n        dataUser.remove(this, key);\n      });\n    }\n  });\n  jQuery.extend({\n    queue: function queue(elem, type, data) {\n      var queue;\n\n      if (elem) {\n        type = (type || \"fx\") + \"queue\";\n        queue = dataPriv.get(elem, type); // Speed up dequeue by getting out quickly if this is just a lookup\n\n        if (data) {\n          if (!queue || Array.isArray(data)) {\n            queue = dataPriv.access(elem, type, jQuery.makeArray(data));\n          } else {\n            queue.push(data);\n          }\n        }\n\n        return queue || [];\n      }\n    },\n    dequeue: function dequeue(elem, type) {\n      type = type || \"fx\";\n\n      var queue = jQuery.queue(elem, type),\n          startLength = queue.length,\n          fn = queue.shift(),\n          hooks = jQuery._queueHooks(elem, type),\n          next = function next() {\n        jQuery.dequeue(elem, type);\n      }; // If the fx queue is dequeued, always remove the progress sentinel\n\n\n      if (fn === \"inprogress\") {\n        fn = queue.shift();\n        startLength--;\n      }\n\n      if (fn) {\n        // Add a progress sentinel to prevent the fx queue from being\n        // automatically dequeued\n        if (type === \"fx\") {\n          queue.unshift(\"inprogress\");\n        } // Clear up the last queue stop function\n\n\n        delete hooks.stop;\n        fn.call(elem, next, hooks);\n      }\n\n      if (!startLength && hooks) {\n        hooks.empty.fire();\n      }\n    },\n    // Not public - generate a queueHooks object, or return the current one\n    _queueHooks: function _queueHooks(elem, type) {\n      var key = type + \"queueHooks\";\n      return dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n        empty: jQuery.Callbacks(\"once memory\").add(function () {\n          dataPriv.remove(elem, [type + \"queue\", key]);\n        })\n      });\n    }\n  });\n  jQuery.fn.extend({\n    queue: function queue(type, data) {\n      var setter = 2;\n\n      if (typeof type !== \"string\") {\n        data = type;\n        type = \"fx\";\n        setter--;\n      }\n\n      if (arguments.length < setter) {\n        return jQuery.queue(this[0], type);\n      }\n\n      return data === undefined ? this : this.each(function () {\n        var queue = jQuery.queue(this, type, data); // Ensure a hooks for this queue\n\n        jQuery._queueHooks(this, type);\n\n        if (type === \"fx\" && queue[0] !== \"inprogress\") {\n          jQuery.dequeue(this, type);\n        }\n      });\n    },\n    dequeue: function dequeue(type) {\n      return this.each(function () {\n        jQuery.dequeue(this, type);\n      });\n    },\n    clearQueue: function clearQueue(type) {\n      return this.queue(type || \"fx\", []);\n    },\n    // Get a promise resolved when queues of a certain type\n    // are emptied (fx is the type by default)\n    promise: function promise(type, obj) {\n      var tmp,\n          count = 1,\n          defer = jQuery.Deferred(),\n          elements = this,\n          i = this.length,\n          resolve = function resolve() {\n        if (! --count) {\n          defer.resolveWith(elements, [elements]);\n        }\n      };\n\n      if (typeof type !== \"string\") {\n        obj = type;\n        type = undefined;\n      }\n\n      type = type || \"fx\";\n\n      while (i--) {\n        tmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\n        if (tmp && tmp.empty) {\n          count++;\n          tmp.empty.add(resolve);\n        }\n      }\n\n      resolve();\n      return defer.promise(obj);\n    }\n  });\n  var pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n  var rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n  var cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n  var documentElement = document.documentElement;\n\n  var isAttached = function isAttached(elem) {\n    return jQuery.contains(elem.ownerDocument, elem);\n  },\n      composed = {\n    composed: true\n  }; // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n  // Check attachment across shadow DOM boundaries when possible (gh-3504)\n  // Support: iOS 10.0-10.2 only\n  // Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n  // leading to errors. We need to check for `getRootNode`.\n\n\n  if (documentElement.getRootNode) {\n    isAttached = function isAttached(elem) {\n      return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;\n    };\n  }\n\n  var isHiddenWithinTree = function isHiddenWithinTree(elem, el) {\n    // isHiddenWithinTree might be called from jQuery#filter function;\n    // in that case, element will be second argument\n    elem = el || elem; // Inline style trumps all\n\n    return elem.style.display === \"none\" || elem.style.display === \"\" && // Otherwise, check computed style\n    // Support: Firefox <=43 - 45\n    // Disconnected elements can have computed display: none, so first confirm that elem is\n    // in the document.\n    isAttached(elem) && jQuery.css(elem, \"display\") === \"none\";\n  };\n\n  function adjustCSS(elem, prop, valueParts, tween) {\n    var adjusted,\n        scale,\n        maxIterations = 20,\n        currentValue = tween ? function () {\n      return tween.cur();\n    } : function () {\n      return jQuery.css(elem, prop, \"\");\n    },\n        initial = currentValue(),\n        unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n        // Starting value computation is required for potential unit mismatches\n    initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== \"px\" && +initial) && rcssNum.exec(jQuery.css(elem, prop));\n\n    if (initialInUnit && initialInUnit[3] !== unit) {\n      // Support: Firefox <=54\n      // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n      initial = initial / 2; // Trust units reported by jQuery.css\n\n      unit = unit || initialInUnit[3]; // Iteratively approximate from a nonzero starting point\n\n      initialInUnit = +initial || 1;\n\n      while (maxIterations--) {\n        // Evaluate and update our best guess (doubling guesses that zero out).\n        // Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n        jQuery.style(elem, prop, initialInUnit + unit);\n\n        if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n          maxIterations = 0;\n        }\n\n        initialInUnit = initialInUnit / scale;\n      }\n\n      initialInUnit = initialInUnit * 2;\n      jQuery.style(elem, prop, initialInUnit + unit); // Make sure we update the tween properties later on\n\n      valueParts = valueParts || [];\n    }\n\n    if (valueParts) {\n      initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified\n\n      adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];\n\n      if (tween) {\n        tween.unit = unit;\n        tween.start = initialInUnit;\n        tween.end = adjusted;\n      }\n    }\n\n    return adjusted;\n  }\n\n  var defaultDisplayMap = {};\n\n  function getDefaultDisplay(elem) {\n    var temp,\n        doc = elem.ownerDocument,\n        nodeName = elem.nodeName,\n        display = defaultDisplayMap[nodeName];\n\n    if (display) {\n      return display;\n    }\n\n    temp = doc.body.appendChild(doc.createElement(nodeName));\n    display = jQuery.css(temp, \"display\");\n    temp.parentNode.removeChild(temp);\n\n    if (display === \"none\") {\n      display = \"block\";\n    }\n\n    defaultDisplayMap[nodeName] = display;\n    return display;\n  }\n\n  function showHide(elements, show) {\n    var display,\n        elem,\n        values = [],\n        index = 0,\n        length = elements.length; // Determine new display value for elements that need to change\n\n    for (; index < length; index++) {\n      elem = elements[index];\n\n      if (!elem.style) {\n        continue;\n      }\n\n      display = elem.style.display;\n\n      if (show) {\n        // Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n        // check is required in this first loop unless we have a nonempty display value (either\n        // inline or about-to-be-restored)\n        if (display === \"none\") {\n          values[index] = dataPriv.get(elem, \"display\") || null;\n\n          if (!values[index]) {\n            elem.style.display = \"\";\n          }\n        }\n\n        if (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n          values[index] = getDefaultDisplay(elem);\n        }\n      } else {\n        if (display !== \"none\") {\n          values[index] = \"none\"; // Remember what we're overwriting\n\n          dataPriv.set(elem, \"display\", display);\n        }\n      }\n    } // Set the display of the elements in a second loop to avoid constant reflow\n\n\n    for (index = 0; index < length; index++) {\n      if (values[index] != null) {\n        elements[index].style.display = values[index];\n      }\n    }\n\n    return elements;\n  }\n\n  jQuery.fn.extend({\n    show: function show() {\n      return showHide(this, true);\n    },\n    hide: function hide() {\n      return showHide(this);\n    },\n    toggle: function toggle(state) {\n      if (typeof state === \"boolean\") {\n        return state ? this.show() : this.hide();\n      }\n\n      return this.each(function () {\n        if (isHiddenWithinTree(this)) {\n          jQuery(this).show();\n        } else {\n          jQuery(this).hide();\n        }\n      });\n    }\n  });\n  var rcheckableType = /^(?:checkbox|radio)$/i;\n  var rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n  var rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n  (function () {\n    var fragment = document.createDocumentFragment(),\n        div = fragment.appendChild(document.createElement(\"div\")),\n        input = document.createElement(\"input\"); // Support: Android 4.0 - 4.3 only\n    // Check state lost if the name is set (trac-11217)\n    // Support: Windows Web Apps (WWA)\n    // `name` and `type` must use .setAttribute for WWA (trac-14901)\n\n    input.setAttribute(\"type\", \"radio\");\n    input.setAttribute(\"checked\", \"checked\");\n    input.setAttribute(\"name\", \"t\");\n    div.appendChild(input); // Support: Android <=4.1 only\n    // Older WebKit doesn't clone checked state correctly in fragments\n\n    support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; // Support: IE <=11 only\n    // Make sure textarea (and checkbox) defaultValue is properly cloned\n\n    div.innerHTML = \"<textarea>x</textarea>\";\n    support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue; // Support: IE <=9 only\n    // IE <=9 replaces <option> tags with their contents when inserted outside of\n    // the select element.\n\n    div.innerHTML = \"<option></option>\";\n    support.option = !!div.lastChild;\n  })(); // We have to close these tags to support XHTML (trac-13200)\n\n\n  var wrapMap = {\n    // XHTML parsers do not magically insert elements in the\n    // same way that tag soup parsers do. So we cannot shorten\n    // this by omitting <tbody> or other required elements.\n    thead: [1, \"<table>\", \"</table>\"],\n    col: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n    tr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n    td: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n    _default: [0, \"\", \"\"]\n  };\n  wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n  wrapMap.th = wrapMap.td; // Support: IE <=9 only\n\n  if (!support.option) {\n    wrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n  }\n\n  function getAll(context, tag) {\n    // Support: IE <=9 - 11 only\n    // Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n    var ret;\n\n    if (typeof context.getElementsByTagName !== \"undefined\") {\n      ret = context.getElementsByTagName(tag || \"*\");\n    } else if (typeof context.querySelectorAll !== \"undefined\") {\n      ret = context.querySelectorAll(tag || \"*\");\n    } else {\n      ret = [];\n    }\n\n    if (tag === undefined || tag && nodeName(context, tag)) {\n      return jQuery.merge([context], ret);\n    }\n\n    return ret;\n  } // Mark scripts as having already been evaluated\n\n\n  function setGlobalEval(elems, refElements) {\n    var i = 0,\n        l = elems.length;\n\n    for (; i < l; i++) {\n      dataPriv.set(elems[i], \"globalEval\", !refElements || dataPriv.get(refElements[i], \"globalEval\"));\n    }\n  }\n\n  var rhtml = /<|&#?\\w+;/;\n\n  function buildFragment(elems, context, scripts, selection, ignored) {\n    var elem,\n        tmp,\n        tag,\n        wrap,\n        attached,\n        j,\n        fragment = context.createDocumentFragment(),\n        nodes = [],\n        i = 0,\n        l = elems.length;\n\n    for (; i < l; i++) {\n      elem = elems[i];\n\n      if (elem || elem === 0) {\n        // Add nodes directly\n        if (toType(elem) === \"object\") {\n          // Support: Android <=4.0 only, PhantomJS 1 only\n          // push.apply(_, arraylike) throws on ancient WebKit\n          jQuery.merge(nodes, elem.nodeType ? [elem] : elem); // Convert non-html into a text node\n        } else if (!rhtml.test(elem)) {\n          nodes.push(context.createTextNode(elem)); // Convert html into DOM nodes\n        } else {\n          tmp = tmp || fragment.appendChild(context.createElement(\"div\")); // Deserialize a standard representation\n\n          tag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n          wrap = wrapMap[tag] || wrapMap._default;\n          tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2]; // Descend through wrappers to the right content\n\n          j = wrap[0];\n\n          while (j--) {\n            tmp = tmp.lastChild;\n          } // Support: Android <=4.0 only, PhantomJS 1 only\n          // push.apply(_, arraylike) throws on ancient WebKit\n\n\n          jQuery.merge(nodes, tmp.childNodes); // Remember the top-level container\n\n          tmp = fragment.firstChild; // Ensure the created nodes are orphaned (trac-12392)\n\n          tmp.textContent = \"\";\n        }\n      }\n    } // Remove wrapper from fragment\n\n\n    fragment.textContent = \"\";\n    i = 0;\n\n    while (elem = nodes[i++]) {\n      // Skip elements already in the context collection (trac-4087)\n      if (selection && jQuery.inArray(elem, selection) > -1) {\n        if (ignored) {\n          ignored.push(elem);\n        }\n\n        continue;\n      }\n\n      attached = isAttached(elem); // Append to fragment\n\n      tmp = getAll(fragment.appendChild(elem), \"script\"); // Preserve script evaluation history\n\n      if (attached) {\n        setGlobalEval(tmp);\n      } // Capture executables\n\n\n      if (scripts) {\n        j = 0;\n\n        while (elem = tmp[j++]) {\n          if (rscriptType.test(elem.type || \"\")) {\n            scripts.push(elem);\n          }\n        }\n      }\n    }\n\n    return fragment;\n  }\n\n  var rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n  function returnTrue() {\n    return true;\n  }\n\n  function returnFalse() {\n    return false;\n  } // Support: IE <=9 - 11+\n  // focus() and blur() are asynchronous, except when they are no-op.\n  // So expect focus to be synchronous when the element is already active,\n  // and blur to be synchronous when the element is not already active.\n  // (focus and blur are always synchronous in other supported browsers,\n  // this just defines when we can count on it).\n\n\n  function expectSync(elem, type) {\n    return elem === safeActiveElement() === (type === \"focus\");\n  } // Support: IE <=9 only\n  // Accessing document.activeElement can throw unexpectedly\n  // https://bugs.jquery.com/ticket/13393\n\n\n  function safeActiveElement() {\n    try {\n      return document.activeElement;\n    } catch (err) {}\n  }\n\n  function _on(elem, types, selector, data, fn, one) {\n    var origFn, type; // Types can be a map of types/handlers\n\n    if (_typeof(types) === \"object\") {\n      // ( types-Object, selector, data )\n      if (typeof selector !== \"string\") {\n        // ( types-Object, data )\n        data = data || selector;\n        selector = undefined;\n      }\n\n      for (type in types) {\n        _on(elem, type, selector, data, types[type], one);\n      }\n\n      return elem;\n    }\n\n    if (data == null && fn == null) {\n      // ( types, fn )\n      fn = selector;\n      data = selector = undefined;\n    } else if (fn == null) {\n      if (typeof selector === \"string\") {\n        // ( types, selector, fn )\n        fn = data;\n        data = undefined;\n      } else {\n        // ( types, data, fn )\n        fn = data;\n        data = selector;\n        selector = undefined;\n      }\n    }\n\n    if (fn === false) {\n      fn = returnFalse;\n    } else if (!fn) {\n      return elem;\n    }\n\n    if (one === 1) {\n      origFn = fn;\n\n      fn = function fn(event) {\n        // Can use an empty set, since event contains the info\n        jQuery().off(event);\n        return origFn.apply(this, arguments);\n      }; // Use same guid so caller can remove using origFn\n\n\n      fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n    }\n\n    return elem.each(function () {\n      jQuery.event.add(this, types, fn, data, selector);\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   */\n\n\n  jQuery.event = {\n    global: {},\n    add: function add(elem, types, handler, data, selector) {\n      var handleObjIn,\n          eventHandle,\n          tmp,\n          events,\n          t,\n          handleObj,\n          special,\n          handlers,\n          type,\n          namespaces,\n          origType,\n          elemData = dataPriv.get(elem); // Only attach events to objects that accept data\n\n      if (!acceptData(elem)) {\n        return;\n      } // Caller can pass in an object of custom data in lieu of the handler\n\n\n      if (handler.handler) {\n        handleObjIn = handler;\n        handler = handleObjIn.handler;\n        selector = handleObjIn.selector;\n      } // Ensure that invalid selectors throw exceptions at attach time\n      // Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\n\n      if (selector) {\n        jQuery.find.matchesSelector(documentElement, selector);\n      } // Make sure that the handler has a unique ID, used to find/remove it later\n\n\n      if (!handler.guid) {\n        handler.guid = jQuery.guid++;\n      } // Init the element's event structure and main handler, if this is the first\n\n\n      if (!(events = elemData.events)) {\n        events = elemData.events = Object.create(null);\n      }\n\n      if (!(eventHandle = elemData.handle)) {\n        eventHandle = elemData.handle = function (e) {\n          // Discard the second event of a jQuery.event.trigger() and\n          // when an event is called after a page has unloaded\n          return typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;\n        };\n      } // Handle multiple events separated by a space\n\n\n      types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n      t = types.length;\n\n      while (t--) {\n        tmp = rtypenamespace.exec(types[t]) || [];\n        type = origType = tmp[1];\n        namespaces = (tmp[2] || \"\").split(\".\").sort(); // There *must* be a type, no attaching namespace-only handlers\n\n        if (!type) {\n          continue;\n        } // If event changes its type, use the special event handlers for the changed type\n\n\n        special = jQuery.event.special[type] || {}; // If selector defined, determine special event api type, otherwise given type\n\n        type = (selector ? special.delegateType : special.bindType) || type; // Update special based on newly reset type\n\n        special = jQuery.event.special[type] || {}; // handleObj is passed to all event handlers\n\n        handleObj = jQuery.extend({\n          type: type,\n          origType: origType,\n          data: data,\n          handler: handler,\n          guid: handler.guid,\n          selector: selector,\n          needsContext: selector && jQuery.expr.match.needsContext.test(selector),\n          namespace: namespaces.join(\".\")\n        }, handleObjIn); // Init the event handler queue if we're the first\n\n        if (!(handlers = events[type])) {\n          handlers = events[type] = [];\n          handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false\n\n          if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {\n            if (elem.addEventListener) {\n              elem.addEventListener(type, eventHandle);\n            }\n          }\n        }\n\n        if (special.add) {\n          special.add.call(elem, handleObj);\n\n          if (!handleObj.handler.guid) {\n            handleObj.handler.guid = handler.guid;\n          }\n        } // Add to the element's handler list, delegates in front\n\n\n        if (selector) {\n          handlers.splice(handlers.delegateCount++, 0, handleObj);\n        } else {\n          handlers.push(handleObj);\n        } // Keep track of which events have ever been used, for event optimization\n\n\n        jQuery.event.global[type] = true;\n      }\n    },\n    // Detach an event or set of events from an element\n    remove: function remove(elem, types, handler, selector, mappedTypes) {\n      var j,\n          origCount,\n          tmp,\n          events,\n          t,\n          handleObj,\n          special,\n          handlers,\n          type,\n          namespaces,\n          origType,\n          elemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n      if (!elemData || !(events = elemData.events)) {\n        return;\n      } // Once for each type.namespace in types; type may be omitted\n\n\n      types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n      t = types.length;\n\n      while (t--) {\n        tmp = rtypenamespace.exec(types[t]) || [];\n        type = origType = tmp[1];\n        namespaces = (tmp[2] || \"\").split(\".\").sort(); // Unbind all events (on this namespace, if provided) for the element\n\n        if (!type) {\n          for (type in events) {\n            jQuery.event.remove(elem, type + types[t], handler, selector, true);\n          }\n\n          continue;\n        }\n\n        special = jQuery.event.special[type] || {};\n        type = (selector ? special.delegateType : special.bindType) || type;\n        handlers = events[type] || [];\n        tmp = tmp[2] && new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\"); // Remove matching events\n\n        origCount = j = handlers.length;\n\n        while (j--) {\n          handleObj = handlers[j];\n\n          if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector)) {\n            handlers.splice(j, 1);\n\n            if (handleObj.selector) {\n              handlers.delegateCount--;\n            }\n\n            if (special.remove) {\n              special.remove.call(elem, handleObj);\n            }\n          }\n        } // Remove generic event handler if we removed something and no more handlers exist\n        // (avoids potential for endless recursion during removal of special event handlers)\n\n\n        if (origCount && !handlers.length) {\n          if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {\n            jQuery.removeEvent(elem, type, elemData.handle);\n          }\n\n          delete events[type];\n        }\n      } // Remove data and the expando if it's no longer used\n\n\n      if (jQuery.isEmptyObject(events)) {\n        dataPriv.remove(elem, \"handle events\");\n      }\n    },\n    dispatch: function dispatch(nativeEvent) {\n      var i,\n          j,\n          ret,\n          matched,\n          handleObj,\n          handlerQueue,\n          args = new Array(arguments.length),\n          // Make a writable jQuery.Event from the native event object\n      event = jQuery.event.fix(nativeEvent),\n          handlers = (dataPriv.get(this, \"events\") || Object.create(null))[event.type] || [],\n          special = jQuery.event.special[event.type] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event\n\n      args[0] = event;\n\n      for (i = 1; i < arguments.length; i++) {\n        args[i] = arguments[i];\n      }\n\n      event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired\n\n      if (special.preDispatch && special.preDispatch.call(this, event) === false) {\n        return;\n      } // Determine handlers\n\n\n      handlerQueue = jQuery.event.handlers.call(this, event, handlers); // Run delegates first; they may want to stop propagation beneath us\n\n      i = 0;\n\n      while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n        event.currentTarget = matched.elem;\n        j = 0;\n\n        while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {\n          // If the event is namespaced, then each handler is only invoked if it is\n          // specially universal or its namespaces are a superset of the event's.\n          if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {\n            event.handleObj = handleObj;\n            event.data = handleObj.data;\n            ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);\n\n            if (ret !== undefined) {\n              if ((event.result = ret) === false) {\n                event.preventDefault();\n                event.stopPropagation();\n              }\n            }\n          }\n        }\n      } // Call the postDispatch hook for the mapped type\n\n\n      if (special.postDispatch) {\n        special.postDispatch.call(this, event);\n      }\n\n      return event.result;\n    },\n    handlers: function handlers(event, _handlers) {\n      var i,\n          handleObj,\n          sel,\n          matchedHandlers,\n          matchedSelectors,\n          handlerQueue = [],\n          delegateCount = _handlers.delegateCount,\n          cur = event.target; // Find delegate handlers\n\n      if (delegateCount && // Support: IE <=9\n      // Black-hole SVG <use> instance trees (trac-13180)\n      cur.nodeType && // Support: Firefox <=42\n      // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n      // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n      // Support: IE 11 only\n      // ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n      !(event.type === \"click\" && event.button >= 1)) {\n        for (; cur !== this; cur = cur.parentNode || this) {\n          // Don't check non-elements (trac-13208)\n          // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n          if (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n            matchedHandlers = [];\n            matchedSelectors = {};\n\n            for (i = 0; i < delegateCount; i++) {\n              handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (trac-13203)\n\n              sel = handleObj.selector + \" \";\n\n              if (matchedSelectors[sel] === undefined) {\n                matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;\n              }\n\n              if (matchedSelectors[sel]) {\n                matchedHandlers.push(handleObj);\n              }\n            }\n\n            if (matchedHandlers.length) {\n              handlerQueue.push({\n                elem: cur,\n                handlers: matchedHandlers\n              });\n            }\n          }\n        }\n      } // Add the remaining (directly-bound) handlers\n\n\n      cur = this;\n\n      if (delegateCount < _handlers.length) {\n        handlerQueue.push({\n          elem: cur,\n          handlers: _handlers.slice(delegateCount)\n        });\n      }\n\n      return handlerQueue;\n    },\n    addProp: function addProp(name, hook) {\n      Object.defineProperty(jQuery.Event.prototype, name, {\n        enumerable: true,\n        configurable: true,\n        get: isFunction(hook) ? function () {\n          if (this.originalEvent) {\n            return hook(this.originalEvent);\n          }\n        } : function () {\n          if (this.originalEvent) {\n            return this.originalEvent[name];\n          }\n        },\n        set: function set(value) {\n          Object.defineProperty(this, name, {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: value\n          });\n        }\n      });\n    },\n    fix: function fix(originalEvent) {\n      return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);\n    },\n    special: {\n      load: {\n        // Prevent triggered image.load events from bubbling to window.load\n        noBubble: true\n      },\n      click: {\n        // Utilize native event to ensure correct state for checkable inputs\n        setup: function setup(data) {\n          // For mutual compressibility with _default, replace `this` access with a local var.\n          // `|| data` is dead code meant only to preserve the variable through minification.\n          var el = this || data; // Claim the first handler\n\n          if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n            // dataPriv.set( el, \"click\", ... )\n            leverageNative(el, \"click\", returnTrue);\n          } // Return false to allow normal processing in the caller\n\n\n          return false;\n        },\n        trigger: function trigger(data) {\n          // For mutual compressibility with _default, replace `this` access with a local var.\n          // `|| data` is dead code meant only to preserve the variable through minification.\n          var el = this || data; // Force setup before triggering a click\n\n          if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n            leverageNative(el, \"click\");\n          } // Return non-false to allow normal event-path propagation\n\n\n          return true;\n        },\n        // For cross-browser consistency, suppress native .click() on links\n        // Also prevent it if we're currently inside a leveraged native-event stack\n        _default: function _default(event) {\n          var target = event.target;\n          return rcheckableType.test(target.type) && target.click && nodeName(target, \"input\") && dataPriv.get(target, \"click\") || nodeName(target, \"a\");\n        }\n      },\n      beforeunload: {\n        postDispatch: function postDispatch(event) {\n          // Support: Firefox 20+\n          // Firefox doesn't alert if the returnValue field is not set.\n          if (event.result !== undefined && event.originalEvent) {\n            event.originalEvent.returnValue = event.result;\n          }\n        }\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.\n\n  function leverageNative(el, type, expectSync) {\n    // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n    if (!expectSync) {\n      if (dataPriv.get(el, type) === undefined) {\n        jQuery.event.add(el, type, returnTrue);\n      }\n\n      return;\n    } // Register the controller as a special universal handler for all event namespaces\n\n\n    dataPriv.set(el, type, false);\n    jQuery.event.add(el, type, {\n      namespace: false,\n      handler: function handler(event) {\n        var notAsync,\n            result,\n            saved = dataPriv.get(this, type);\n\n        if (event.isTrigger & 1 && this[type]) {\n          // Interrupt processing of the outer synthetic .trigger()ed event\n          // Saved data should be false in such cases, but might be a leftover capture object\n          // from an async native handler (gh-4350)\n          if (!saved.length) {\n            // Store arguments for use when handling the inner native event\n            // There will always be at least one argument (an event object), so this array\n            // will not be confused with a leftover capture object.\n            saved = _slice.call(arguments);\n            dataPriv.set(this, type, saved); // Trigger the native event and capture its result\n            // Support: IE <=9 - 11+\n            // focus() and blur() are asynchronous\n\n            notAsync = expectSync(this, type);\n            this[type]();\n            result = dataPriv.get(this, type);\n\n            if (saved !== result || notAsync) {\n              dataPriv.set(this, type, false);\n            } else {\n              result = {};\n            }\n\n            if (saved !== result) {\n              // Cancel the outer synthetic event\n              event.stopImmediatePropagation();\n              event.preventDefault(); // Support: Chrome 86+\n              // In Chrome, if an element having a focusout handler is blurred by\n              // clicking outside of it, it invokes the handler synchronously. If\n              // that handler calls `.remove()` on the element, the data is cleared,\n              // leaving `result` undefined. We need to guard against this.\n\n              return result && result.value;\n            } // If this is an inner synthetic event for an event with a bubbling surrogate\n            // (focus or blur), assume that the surrogate already propagated from triggering the\n            // native event and prevent that from happening again here.\n            // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n            // bubbling surrogate propagates *after* the non-bubbling base), but that seems\n            // less bad than duplication.\n\n          } else if ((jQuery.event.special[type] || {}).delegateType) {\n            event.stopPropagation();\n          } // If this is a native event triggered above, everything is now in order\n          // Fire an inner synthetic event with the original arguments\n\n        } else if (saved.length) {\n          // ...and capture the result\n          dataPriv.set(this, type, {\n            value: jQuery.event.trigger( // Support: IE <=9 - 11+\n            // Extend with the prototype to reset the above stopImmediatePropagation()\n            jQuery.extend(saved[0], jQuery.Event.prototype), saved.slice(1), this)\n          }); // Abort handling of the native event\n\n          event.stopImmediatePropagation();\n        }\n      }\n    });\n  }\n\n  jQuery.removeEvent = function (elem, type, handle) {\n    // This \"if\" is needed for plain objects\n    if (elem.removeEventListener) {\n      elem.removeEventListener(type, handle);\n    }\n  };\n\n  jQuery.Event = function (src, props) {\n    // Allow instantiation without the 'new' keyword\n    if (!(this instanceof jQuery.Event)) {\n      return new jQuery.Event(src, props);\n    } // Event object\n\n\n    if (src && src.type) {\n      this.originalEvent = src;\n      this.type = src.type; // Events bubbling up the document may have been marked as prevented\n      // by a handler lower down the tree; reflect the correct value.\n\n      this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android <=2.3 only\n      src.returnValue === false ? returnTrue : returnFalse; // Create target properties\n      // Support: Safari <=6 - 7 only\n      // Target should not be a text node (trac-504, trac-13143)\n\n      this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;\n      this.currentTarget = src.currentTarget;\n      this.relatedTarget = src.relatedTarget; // Event type\n    } else {\n      this.type = src;\n    } // Put explicitly provided properties onto the event object\n\n\n    if (props) {\n      jQuery.extend(this, props);\n    } // Create a timestamp if incoming event doesn't have one\n\n\n    this.timeStamp = src && src.timeStamp || Date.now(); // Mark it as fixed\n\n    this[jQuery.expando] = true;\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\n\n\n  jQuery.Event.prototype = {\n    constructor: jQuery.Event,\n    isDefaultPrevented: returnFalse,\n    isPropagationStopped: returnFalse,\n    isImmediatePropagationStopped: returnFalse,\n    isSimulated: false,\n    preventDefault: function preventDefault() {\n      var e = this.originalEvent;\n      this.isDefaultPrevented = returnTrue;\n\n      if (e && !this.isSimulated) {\n        e.preventDefault();\n      }\n    },\n    stopPropagation: function stopPropagation() {\n      var e = this.originalEvent;\n      this.isPropagationStopped = returnTrue;\n\n      if (e && !this.isSimulated) {\n        e.stopPropagation();\n      }\n    },\n    stopImmediatePropagation: function stopImmediatePropagation() {\n      var e = this.originalEvent;\n      this.isImmediatePropagationStopped = returnTrue;\n\n      if (e && !this.isSimulated) {\n        e.stopImmediatePropagation();\n      }\n\n      this.stopPropagation();\n    }\n  }; // Includes all common event props including KeyEvent and MouseEvent specific props\n\n  jQuery.each({\n    altKey: true,\n    bubbles: true,\n    cancelable: true,\n    changedTouches: true,\n    ctrlKey: true,\n    detail: true,\n    eventPhase: true,\n    metaKey: true,\n    pageX: true,\n    pageY: true,\n    shiftKey: true,\n    view: true,\n    \"char\": true,\n    code: true,\n    charCode: true,\n    key: true,\n    keyCode: true,\n    button: true,\n    buttons: true,\n    clientX: true,\n    clientY: true,\n    offsetX: true,\n    offsetY: true,\n    pointerId: true,\n    pointerType: true,\n    screenX: true,\n    screenY: true,\n    targetTouches: true,\n    toElement: true,\n    touches: true,\n    which: true\n  }, jQuery.event.addProp);\n  jQuery.each({\n    focus: \"focusin\",\n    blur: \"focusout\"\n  }, function (type, delegateType) {\n    jQuery.event.special[type] = {\n      // Utilize native event if possible so blur/focus sequence is correct\n      setup: function setup() {\n        // Claim the first handler\n        // dataPriv.set( this, \"focus\", ... )\n        // dataPriv.set( this, \"blur\", ... )\n        leverageNative(this, type, expectSync); // Return false to allow normal processing in the caller\n\n        return false;\n      },\n      trigger: function trigger() {\n        // Force setup before trigger\n        leverageNative(this, type); // Return non-false to allow normal event-path propagation\n\n        return true;\n      },\n      // Suppress native focus or blur if we're currently inside\n      // a leveraged native-event stack\n      _default: function _default(event) {\n        return dataPriv.get(event.target, type);\n      },\n      delegateType: delegateType\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).\n\n  jQuery.each({\n    mouseenter: \"mouseover\",\n    mouseleave: \"mouseout\",\n    pointerenter: \"pointerover\",\n    pointerleave: \"pointerout\"\n  }, function (orig, fix) {\n    jQuery.event.special[orig] = {\n      delegateType: fix,\n      bindType: fix,\n      handle: function handle(event) {\n        var ret,\n            target = this,\n            related = event.relatedTarget,\n            handleObj = event.handleObj; // For mouseenter/leave call the handler if related is outside the target.\n        // NB: No relatedTarget if the mouse left/entered the browser window\n\n        if (!related || related !== target && !jQuery.contains(target, related)) {\n          event.type = handleObj.origType;\n          ret = handleObj.handler.apply(this, arguments);\n          event.type = fix;\n        }\n\n        return ret;\n      }\n    };\n  });\n  jQuery.fn.extend({\n    on: function on(types, selector, data, fn) {\n      return _on(this, types, selector, data, fn);\n    },\n    one: function one(types, selector, data, fn) {\n      return _on(this, types, selector, data, fn, 1);\n    },\n    off: function off(types, selector, fn) {\n      var handleObj, type;\n\n      if (types && types.preventDefault && types.handleObj) {\n        // ( event )  dispatched jQuery.Event\n        handleObj = types.handleObj;\n        jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);\n        return this;\n      }\n\n      if (_typeof(types) === \"object\") {\n        // ( types-object [, selector] )\n        for (type in types) {\n          this.off(type, selector, types[type]);\n        }\n\n        return this;\n      }\n\n      if (selector === false || typeof selector === \"function\") {\n        // ( types [, fn] )\n        fn = selector;\n        selector = undefined;\n      }\n\n      if (fn === false) {\n        fn = returnFalse;\n      }\n\n      return this.each(function () {\n        jQuery.event.remove(this, types, fn, selector);\n      });\n    }\n  });\n  var // Support: IE <=10 - 11, Edge 12 - 13 only\n  // In IE/Edge using regex groups here causes severe slowdowns.\n  // See https://connect.microsoft.com/IE/feedback/details/1736512/\n  rnoInnerhtml = /<script|<style|<link/i,\n      // checked=\"checked\" or checked\n  rchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n      rcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g; // Prefer a tbody over its parent table for containing new rows\n\n  function manipulationTarget(elem, content) {\n    if (nodeName(elem, \"table\") && nodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n      return jQuery(elem).children(\"tbody\")[0] || elem;\n    }\n\n    return elem;\n  } // Replace/restore the type attribute of script elements for safe DOM manipulation\n\n\n  function disableScript(elem) {\n    elem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n    return elem;\n  }\n\n  function restoreScript(elem) {\n    if ((elem.type || \"\").slice(0, 5) === \"true/\") {\n      elem.type = elem.type.slice(5);\n    } else {\n      elem.removeAttribute(\"type\");\n    }\n\n    return elem;\n  }\n\n  function cloneCopyEvent(src, dest) {\n    var i, l, type, pdataOld, udataOld, udataCur, events;\n\n    if (dest.nodeType !== 1) {\n      return;\n    } // 1. Copy private data: events, handlers, etc.\n\n\n    if (dataPriv.hasData(src)) {\n      pdataOld = dataPriv.get(src);\n      events = pdataOld.events;\n\n      if (events) {\n        dataPriv.remove(dest, \"handle events\");\n\n        for (type in events) {\n          for (i = 0, l = events[type].length; i < l; i++) {\n            jQuery.event.add(dest, type, events[type][i]);\n          }\n        }\n      }\n    } // 2. Copy user data\n\n\n    if (dataUser.hasData(src)) {\n      udataOld = dataUser.access(src);\n      udataCur = jQuery.extend({}, udataOld);\n      dataUser.set(dest, udataCur);\n    }\n  } // Fix IE bugs, see support tests\n\n\n  function fixInput(src, dest) {\n    var nodeName = dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button.\n\n    if (nodeName === \"input\" && rcheckableType.test(src.type)) {\n      dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options\n    } else if (nodeName === \"input\" || nodeName === \"textarea\") {\n      dest.defaultValue = src.defaultValue;\n    }\n  }\n\n  function domManip(collection, args, callback, ignored) {\n    // Flatten any nested arrays\n    args = flat(args);\n    var fragment,\n        first,\n        scripts,\n        hasScripts,\n        node,\n        doc,\n        i = 0,\n        l = collection.length,\n        iNoClone = l - 1,\n        value = args[0],\n        valueIsFunction = isFunction(value); // We can't cloneNode fragments that contain checked, in WebKit\n\n    if (valueIsFunction || l > 1 && typeof value === \"string\" && !support.checkClone && rchecked.test(value)) {\n      return collection.each(function (index) {\n        var self = collection.eq(index);\n\n        if (valueIsFunction) {\n          args[0] = value.call(this, index, self.html());\n        }\n\n        domManip(self, args, callback, ignored);\n      });\n    }\n\n    if (l) {\n      fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n      first = fragment.firstChild;\n\n      if (fragment.childNodes.length === 1) {\n        fragment = first;\n      } // Require either new content or an interest in ignored elements to invoke the callback\n\n\n      if (first || ignored) {\n        scripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n        hasScripts = scripts.length; // Use the original fragment for the last item\n        // instead of the first because it can end up\n        // being emptied incorrectly in certain situations (trac-8070).\n\n        for (; i < l; i++) {\n          node = fragment;\n\n          if (i !== iNoClone) {\n            node = jQuery.clone(node, true, true); // Keep references to cloned scripts for later restoration\n\n            if (hasScripts) {\n              // Support: Android <=4.0 only, PhantomJS 1 only\n              // push.apply(_, arraylike) throws on ancient WebKit\n              jQuery.merge(scripts, getAll(node, \"script\"));\n            }\n          }\n\n          callback.call(collection[i], node, i);\n        }\n\n        if (hasScripts) {\n          doc = scripts[scripts.length - 1].ownerDocument; // Reenable scripts\n\n          jQuery.map(scripts, restoreScript); // Evaluate executable scripts on first document insertion\n\n          for (i = 0; i < hasScripts; i++) {\n            node = scripts[i];\n\n            if (rscriptType.test(node.type || \"\") && !dataPriv.access(node, \"globalEval\") && jQuery.contains(doc, node)) {\n              if (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n                // Optional AJAX dependency, but won't run scripts if not present\n                if (jQuery._evalUrl && !node.noModule) {\n                  jQuery._evalUrl(node.src, {\n                    nonce: node.nonce || node.getAttribute(\"nonce\")\n                  }, doc);\n                }\n              } else {\n                // Unwrap a CDATA section containing script contents. This shouldn't be\n                // needed as in XML documents they're already not visible when\n                // inspecting element contents and in HTML documents they have no\n                // meaning but we're preserving that logic for backwards compatibility.\n                // This will be removed completely in 4.0. See gh-4904.\n                DOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return collection;\n  }\n\n  function _remove(elem, selector, keepData) {\n    var node,\n        nodes = selector ? jQuery.filter(selector, elem) : elem,\n        i = 0;\n\n    for (; (node = nodes[i]) != null; i++) {\n      if (!keepData && node.nodeType === 1) {\n        jQuery.cleanData(getAll(node));\n      }\n\n      if (node.parentNode) {\n        if (keepData && isAttached(node)) {\n          setGlobalEval(getAll(node, \"script\"));\n        }\n\n        node.parentNode.removeChild(node);\n      }\n    }\n\n    return elem;\n  }\n\n  jQuery.extend({\n    htmlPrefilter: function htmlPrefilter(html) {\n      return html;\n    },\n    clone: function clone(elem, dataAndEvents, deepDataAndEvents) {\n      var i,\n          l,\n          srcElements,\n          destElements,\n          clone = elem.cloneNode(true),\n          inPage = isAttached(elem); // Fix IE cloning issues\n\n      if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {\n        // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n        destElements = getAll(clone);\n        srcElements = getAll(elem);\n\n        for (i = 0, l = srcElements.length; i < l; i++) {\n          fixInput(srcElements[i], destElements[i]);\n        }\n      } // Copy the events from the original to the clone\n\n\n      if (dataAndEvents) {\n        if (deepDataAndEvents) {\n          srcElements = srcElements || getAll(elem);\n          destElements = destElements || getAll(clone);\n\n          for (i = 0, l = srcElements.length; i < l; i++) {\n            cloneCopyEvent(srcElements[i], destElements[i]);\n          }\n        } else {\n          cloneCopyEvent(elem, clone);\n        }\n      } // Preserve script evaluation history\n\n\n      destElements = getAll(clone, \"script\");\n\n      if (destElements.length > 0) {\n        setGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n      } // Return the cloned set\n\n\n      return clone;\n    },\n    cleanData: function cleanData(elems) {\n      var data,\n          elem,\n          type,\n          special = jQuery.event.special,\n          i = 0;\n\n      for (; (elem = elems[i]) !== undefined; i++) {\n        if (acceptData(elem)) {\n          if (data = elem[dataPriv.expando]) {\n            if (data.events) {\n              for (type in data.events) {\n                if (special[type]) {\n                  jQuery.event.remove(elem, type); // This is a shortcut to avoid jQuery.event.remove's overhead\n                } else {\n                  jQuery.removeEvent(elem, type, data.handle);\n                }\n              }\n            } // Support: Chrome <=35 - 45+\n            // Assign undefined instead of using delete, see Data#remove\n\n\n            elem[dataPriv.expando] = undefined;\n          }\n\n          if (elem[dataUser.expando]) {\n            // Support: Chrome <=35 - 45+\n            // Assign undefined instead of using delete, see Data#remove\n            elem[dataUser.expando] = undefined;\n          }\n        }\n      }\n    }\n  });\n  jQuery.fn.extend({\n    detach: function detach(selector) {\n      return _remove(this, selector, true);\n    },\n    remove: function remove(selector) {\n      return _remove(this, selector);\n    },\n    text: function text(value) {\n      return access(this, function (value) {\n        return value === undefined ? jQuery.text(this) : this.empty().each(function () {\n          if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n            this.textContent = value;\n          }\n        });\n      }, null, value, arguments.length);\n    },\n    append: function append() {\n      return domManip(this, arguments, function (elem) {\n        if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n          var target = manipulationTarget(this, elem);\n          target.appendChild(elem);\n        }\n      });\n    },\n    prepend: function prepend() {\n      return domManip(this, arguments, function (elem) {\n        if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n          var target = manipulationTarget(this, elem);\n          target.insertBefore(elem, target.firstChild);\n        }\n      });\n    },\n    before: function before() {\n      return domManip(this, arguments, function (elem) {\n        if (this.parentNode) {\n          this.parentNode.insertBefore(elem, this);\n        }\n      });\n    },\n    after: function after() {\n      return domManip(this, arguments, function (elem) {\n        if (this.parentNode) {\n          this.parentNode.insertBefore(elem, this.nextSibling);\n        }\n      });\n    },\n    empty: function empty() {\n      var elem,\n          i = 0;\n\n      for (; (elem = this[i]) != null; i++) {\n        if (elem.nodeType === 1) {\n          // Prevent memory leaks\n          jQuery.cleanData(getAll(elem, false)); // Remove any remaining nodes\n\n          elem.textContent = \"\";\n        }\n      }\n\n      return this;\n    },\n    clone: function clone(dataAndEvents, deepDataAndEvents) {\n      dataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n      deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n      return this.map(function () {\n        return jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n      });\n    },\n    html: function html(value) {\n      return access(this, function (value) {\n        var elem = this[0] || {},\n            i = 0,\n            l = this.length;\n\n        if (value === undefined && elem.nodeType === 1) {\n          return elem.innerHTML;\n        } // See if we can take a shortcut and just use innerHTML\n\n\n        if (typeof value === \"string\" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n          value = jQuery.htmlPrefilter(value);\n\n          try {\n            for (; i < l; i++) {\n              elem = this[i] || {}; // Remove element nodes and prevent memory leaks\n\n              if (elem.nodeType === 1) {\n                jQuery.cleanData(getAll(elem, false));\n                elem.innerHTML = value;\n              }\n            }\n\n            elem = 0; // If using innerHTML throws an exception, use the fallback method\n          } catch (e) {}\n        }\n\n        if (elem) {\n          this.empty().append(value);\n        }\n      }, null, value, arguments.length);\n    },\n    replaceWith: function replaceWith() {\n      var ignored = []; // Make the changes, replacing each non-ignored context element with the new content\n\n      return domManip(this, arguments, function (elem) {\n        var parent = this.parentNode;\n\n        if (jQuery.inArray(this, ignored) < 0) {\n          jQuery.cleanData(getAll(this));\n\n          if (parent) {\n            parent.replaceChild(elem, this);\n          }\n        } // Force callback invocation\n\n      }, ignored);\n    }\n  });\n  jQuery.each({\n    appendTo: \"append\",\n    prependTo: \"prepend\",\n    insertBefore: \"before\",\n    insertAfter: \"after\",\n    replaceAll: \"replaceWith\"\n  }, function (name, original) {\n    jQuery.fn[name] = function (selector) {\n      var elems,\n          ret = [],\n          insert = jQuery(selector),\n          last = insert.length - 1,\n          i = 0;\n\n      for (; i <= last; i++) {\n        elems = i === last ? this : this.clone(true);\n        jQuery(insert[i])[original](elems); // Support: Android <=4.0 only, PhantomJS 1 only\n        // .get() because push.apply(_, arraylike) throws on ancient WebKit\n\n        push.apply(ret, elems.get());\n      }\n\n      return this.pushStack(ret);\n    };\n  });\n  var rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n  var rcustomProp = /^--/;\n\n  var getStyles = function getStyles(elem) {\n    // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n    // IE throws on elements created in popups\n    // FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n    var view = elem.ownerDocument.defaultView;\n\n    if (!view || !view.opener) {\n      view = window;\n    }\n\n    return view.getComputedStyle(elem);\n  };\n\n  var swap = function swap(elem, options, callback) {\n    var ret,\n        name,\n        old = {}; // Remember the old values, and insert the new ones\n\n    for (name in options) {\n      old[name] = elem.style[name];\n      elem.style[name] = options[name];\n    }\n\n    ret = callback.call(elem); // Revert the old values\n\n    for (name in options) {\n      elem.style[name] = old[name];\n    }\n\n    return ret;\n  };\n\n  var rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n  var whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n  var rtrimCSS = new RegExp(\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\");\n\n  (function () {\n    // Executing both pixelPosition & boxSizingReliable tests require only one layout\n    // so they're executed at the same time to save the second computation.\n    function computeStyleTests() {\n      // This is a singleton, we need to execute it only once\n      if (!div) {\n        return;\n      }\n\n      container.style.cssText = \"position:absolute;left:-11111px;width:60px;\" + \"margin-top:1px;padding:0;border:0\";\n      div.style.cssText = \"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" + \"margin:auto;border:1px;padding:1px;\" + \"width:60%;top:1%\";\n      documentElement.appendChild(container).appendChild(div);\n      var divStyle = window.getComputedStyle(div);\n      pixelPositionVal = divStyle.top !== \"1%\"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\n      reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12; // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n      // Some styles come back with percentage values, even though they shouldn't\n\n      div.style.right = \"60%\";\n      pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36; // Support: IE 9 - 11 only\n      // Detect misreporting of content dimensions for box-sizing:border-box elements\n\n      boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36; // Support: IE 9 only\n      // Detect overflow:scroll screwiness (gh-3699)\n      // Support: Chrome <=64\n      // Don't get tricked when zoom affects offsetWidth (gh-4029)\n\n      div.style.position = \"absolute\";\n      scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n      documentElement.removeChild(container); // Nullify the div so it wouldn't be stored in the memory and\n      // it will also be a sign that checks already performed\n\n      div = null;\n    }\n\n    function roundPixelMeasures(measure) {\n      return Math.round(parseFloat(measure));\n    }\n\n    var pixelPositionVal,\n        boxSizingReliableVal,\n        scrollboxSizeVal,\n        pixelBoxStylesVal,\n        reliableTrDimensionsVal,\n        reliableMarginLeftVal,\n        container = document.createElement(\"div\"),\n        div = document.createElement(\"div\"); // Finish early in limited (non-browser) environments\n\n    if (!div.style) {\n      return;\n    } // Support: IE <=9 - 11 only\n    // Style of cloned element affects source element cloned (trac-8908)\n\n\n    div.style.backgroundClip = \"content-box\";\n    div.cloneNode(true).style.backgroundClip = \"\";\n    support.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n    jQuery.extend(support, {\n      boxSizingReliable: function boxSizingReliable() {\n        computeStyleTests();\n        return boxSizingReliableVal;\n      },\n      pixelBoxStyles: function pixelBoxStyles() {\n        computeStyleTests();\n        return pixelBoxStylesVal;\n      },\n      pixelPosition: function pixelPosition() {\n        computeStyleTests();\n        return pixelPositionVal;\n      },\n      reliableMarginLeft: function reliableMarginLeft() {\n        computeStyleTests();\n        return reliableMarginLeftVal;\n      },\n      scrollboxSize: function scrollboxSize() {\n        computeStyleTests();\n        return scrollboxSizeVal;\n      },\n      // Support: IE 9 - 11+, Edge 15 - 18+\n      // IE/Edge misreport `getComputedStyle` of table rows with width/height\n      // set in CSS while `offset*` properties report correct values.\n      // Behavior in IE 9 is more subtle than in newer versions & it passes\n      // some versions of this test; make sure not to make it pass there!\n      //\n      // Support: Firefox 70+\n      // Only Firefox includes border widths\n      // in computed dimensions. (gh-4529)\n      reliableTrDimensions: function reliableTrDimensions() {\n        var table, tr, trChild, trStyle;\n\n        if (reliableTrDimensionsVal == null) {\n          table = document.createElement(\"table\");\n          tr = document.createElement(\"tr\");\n          trChild = document.createElement(\"div\");\n          table.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n          tr.style.cssText = \"border:1px solid\"; // Support: Chrome 86+\n          // Height set through cssText does not get applied.\n          // Computed height then comes back as 0.\n\n          tr.style.height = \"1px\";\n          trChild.style.height = \"9px\"; // Support: Android 8 Chrome 86+\n          // In our bodyBackground.html iframe,\n          // display for all div elements is set to \"inline\",\n          // which causes a problem only in Android 8 Chrome 86.\n          // Ensuring the div is display: block\n          // gets around this issue.\n\n          trChild.style.display = \"block\";\n          documentElement.appendChild(table).appendChild(tr).appendChild(trChild);\n          trStyle = window.getComputedStyle(tr);\n          reliableTrDimensionsVal = parseInt(trStyle.height, 10) + parseInt(trStyle.borderTopWidth, 10) + parseInt(trStyle.borderBottomWidth, 10) === tr.offsetHeight;\n          documentElement.removeChild(table);\n        }\n\n        return reliableTrDimensionsVal;\n      }\n    });\n  })();\n\n  function curCSS(elem, name, computed) {\n    var width,\n        minWidth,\n        maxWidth,\n        ret,\n        isCustomProp = rcustomProp.test(name),\n        // Support: Firefox 51+\n    // Retrieving style before computed somehow\n    // fixes an issue with getting wrong values\n    // on detached elements\n    style = elem.style;\n    computed = computed || getStyles(elem); // getPropertyValue is needed for:\n    //   .css('filter') (IE 9 only, trac-12537)\n    //   .css('--customProperty) (gh-3144)\n\n    if (computed) {\n      ret = computed.getPropertyValue(name) || computed[name]; // trim whitespace for custom property (issue gh-4926)\n\n      if (isCustomProp) {\n        // rtrim treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n        // as whitespace while CSS does not, but this is not a problem\n        // because CSS preprocessing replaces them with U+000A LINE FEED\n        // (which *is* CSS whitespace)\n        // https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n        ret = ret.replace(rtrimCSS, \"$1\");\n      }\n\n      if (ret === \"\" && !isAttached(elem)) {\n        ret = jQuery.style(elem, name);\n      } // A tribute to the \"awesome hack by Dean Edwards\"\n      // Android Browser returns percentage for some values,\n      // but width seems to be reliably pixels.\n      // This is against the CSSOM draft spec:\n      // https://drafts.csswg.org/cssom/#resolved-values\n\n\n      if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n        // Remember the original values\n        width = style.width;\n        minWidth = style.minWidth;\n        maxWidth = style.maxWidth; // Put in the new values to get a computed value out\n\n        style.minWidth = style.maxWidth = style.width = ret;\n        ret = computed.width; // Revert the changed values\n\n        style.width = width;\n        style.minWidth = minWidth;\n        style.maxWidth = maxWidth;\n      }\n    }\n\n    return ret !== undefined ? // Support: IE <=9 - 11 only\n    // IE returns zIndex value as an integer.\n    ret + \"\" : ret;\n  }\n\n  function addGetHookIf(conditionFn, hookFn) {\n    // Define the hook, we'll check on the first run if it's really needed.\n    return {\n      get: function get() {\n        if (conditionFn()) {\n          // Hook not needed (or it's not possible to use it due\n          // to missing dependency), remove it.\n          delete this.get;\n          return;\n        } // Hook needed; redefine it so that the support test is not executed again.\n\n\n        return (this.get = hookFn).apply(this, arguments);\n      }\n    };\n  }\n\n  var cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n      emptyStyle = document.createElement(\"div\").style,\n      vendorProps = {}; // Return a vendor-prefixed property or undefined\n\n  function vendorPropName(name) {\n    // Check for vendor prefixed names\n    var capName = name[0].toUpperCase() + name.slice(1),\n        i = cssPrefixes.length;\n\n    while (i--) {\n      name = cssPrefixes[i] + capName;\n\n      if (name in emptyStyle) {\n        return name;\n      }\n    }\n  } // Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\n\n  function finalPropName(name) {\n    var final = jQuery.cssProps[name] || vendorProps[name];\n\n    if (final) {\n      return final;\n    }\n\n    if (name in emptyStyle) {\n      return name;\n    }\n\n    return vendorProps[name] = vendorPropName(name) || name;\n  }\n\n  var // Swappable if display is none or starts with table\n  // except \"table\", \"table-cell\", or \"table-caption\"\n  // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n  rdisplayswap = /^(none|table(?!-c[ea]).+)/,\n      cssShow = {\n    position: \"absolute\",\n    visibility: \"hidden\",\n    display: \"block\"\n  },\n      cssNormalTransform = {\n    letterSpacing: \"0\",\n    fontWeight: \"400\"\n  };\n\n  function setPositiveNumber(_elem, value, subtract) {\n    // Any relative (+/-) values have already been\n    // normalized at this point\n    var matches = rcssNum.exec(value);\n    return matches ? // Guard against undefined \"subtract\", e.g., when used as in cssHooks\n    Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") : value;\n  }\n\n  function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n    var i = dimension === \"width\" ? 1 : 0,\n        extra = 0,\n        delta = 0; // Adjustment may not be necessary\n\n    if (box === (isBorderBox ? \"border\" : \"content\")) {\n      return 0;\n    }\n\n    for (; i < 4; i += 2) {\n      // Both box models exclude margin\n      if (box === \"margin\") {\n        delta += jQuery.css(elem, box + cssExpand[i], true, styles);\n      } // If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\n\n      if (!isBorderBox) {\n        // Add padding\n        delta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles); // For \"border\" or \"margin\", add border\n\n        if (box !== \"padding\") {\n          delta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles); // But still keep track of it otherwise\n        } else {\n          extra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n        } // If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n        // \"padding\" or \"margin\"\n\n      } else {\n        // For \"content\", subtract padding\n        if (box === \"content\") {\n          delta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n        } // For \"content\" or \"padding\", subtract border\n\n\n        if (box !== \"margin\") {\n          delta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n        }\n      }\n    } // Account for positive content-box scroll gutter when requested by providing computedVal\n\n\n    if (!isBorderBox && computedVal >= 0) {\n      // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n      // Assuming integer scroll gutter, subtract the rest and round down\n      delta += Math.max(0, Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n      // Use an explicit zero to avoid NaN (gh-3964)\n      )) || 0;\n    }\n\n    return delta;\n  }\n\n  function getWidthOrHeight(elem, dimension, extra) {\n    // Start with computed style\n    var styles = getStyles(elem),\n        // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n    // Fake content-box until we know it's needed to know the true value.\n    boxSizingNeeded = !support.boxSizingReliable() || extra,\n        isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n        valueIsBorderBox = isBorderBox,\n        val = curCSS(elem, dimension, styles),\n        offsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1); // Support: Firefox <=54\n    // Return a confounding non-pixel value or feign ignorance, as appropriate.\n\n    if (rnumnonpx.test(val)) {\n      if (!extra) {\n        return val;\n      }\n\n      val = \"auto\";\n    } // Support: IE 9 - 11 only\n    // Use offsetWidth/offsetHeight for when box sizing is unreliable.\n    // In those cases, the computed value can be trusted to be border-box.\n\n\n    if ((!support.boxSizingReliable() && isBorderBox || // Support: IE 10 - 11+, Edge 15 - 18+\n    // IE/Edge misreport `getComputedStyle` of table rows with width/height\n    // set in CSS while `offset*` properties report correct values.\n    // Interestingly, in some cases IE 9 doesn't suffer from this issue.\n    !support.reliableTrDimensions() && nodeName(elem, \"tr\") || // Fall back to offsetWidth/offsetHeight when value is \"auto\"\n    // This happens for inline elements with no explicit setting (gh-3571)\n    val === \"auto\" || // Support: Android <=4.1 - 4.3 only\n    // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n    !parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") && // Make sure the element is visible & connected\n    elem.getClientRects().length) {\n      isBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\"; // Where available, offsetWidth/offsetHeight approximate border box dimensions.\n      // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n      // retrieved value as a content box dimension.\n\n      valueIsBorderBox = offsetProp in elem;\n\n      if (valueIsBorderBox) {\n        val = elem[offsetProp];\n      }\n    } // Normalize \"\" and auto\n\n\n    val = parseFloat(val) || 0; // Adjust for the element's box model\n\n    return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? \"border\" : \"content\"), valueIsBorderBox, styles, // Provide the current computed size to request scroll gutter calculation (gh-3589)\n    val) + \"px\";\n  }\n\n  jQuery.extend({\n    // Add in style property hooks for overriding the default\n    // behavior of getting and setting a style property\n    cssHooks: {\n      opacity: {\n        get: function get(elem, computed) {\n          if (computed) {\n            // We should always get a number back from opacity\n            var ret = curCSS(elem, \"opacity\");\n            return ret === \"\" ? \"1\" : ret;\n          }\n        }\n      }\n    },\n    // Don't automatically add \"px\" to these possibly-unitless properties\n    cssNumber: {\n      \"animationIterationCount\": true,\n      \"columnCount\": true,\n      \"fillOpacity\": true,\n      \"flexGrow\": true,\n      \"flexShrink\": true,\n      \"fontWeight\": true,\n      \"gridArea\": true,\n      \"gridColumn\": true,\n      \"gridColumnEnd\": true,\n      \"gridColumnStart\": true,\n      \"gridRow\": true,\n      \"gridRowEnd\": true,\n      \"gridRowStart\": true,\n      \"lineHeight\": true,\n      \"opacity\": true,\n      \"order\": true,\n      \"orphans\": true,\n      \"widows\": true,\n      \"zIndex\": true,\n      \"zoom\": true\n    },\n    // Add in properties whose names you wish to fix before\n    // setting or getting the value\n    cssProps: {},\n    // Get and set the style property on a DOM Node\n    style: function style(elem, name, value, extra) {\n      // Don't set styles on text and comment nodes\n      if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n        return;\n      } // Make sure that we're working with the right name\n\n\n      var ret,\n          type,\n          hooks,\n          origName = camelCase(name),\n          isCustomProp = rcustomProp.test(name),\n          style = elem.style; // Make sure that we're working with the right name. We don't\n      // want to query the value if it is a CSS custom property\n      // since they are user-defined.\n\n      if (!isCustomProp) {\n        name = finalPropName(origName);\n      } // Gets hook for the prefixed version, then unprefixed version\n\n\n      hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // Check if we're setting a value\n\n      if (value !== undefined) {\n        type = _typeof(value); // Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\n        if (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n          value = adjustCSS(elem, name, ret); // Fixes bug trac-9237\n\n          type = \"number\";\n        } // Make sure that null and NaN values aren't set (trac-7116)\n\n\n        if (value == null || value !== value) {\n          return;\n        } // If a number was passed in, add the unit (except for certain CSS properties)\n        // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n        // \"px\" to a few hardcoded values.\n\n\n        if (type === \"number\" && !isCustomProp) {\n          value += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n        } // background-* props affect original clone's values\n\n\n        if (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n          style[name] = \"inherit\";\n        } // If a hook was provided, use that value, otherwise just set the specified value\n\n\n        if (!hooks || !(\"set\" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {\n          if (isCustomProp) {\n            style.setProperty(name, value);\n          } else {\n            style[name] = value;\n          }\n        }\n      } else {\n        // If a hook was provided get the non-computed value from there\n        if (hooks && \"get\" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {\n          return ret;\n        } // Otherwise just get the value from the style object\n\n\n        return style[name];\n      }\n    },\n    css: function css(elem, name, extra, styles) {\n      var val,\n          num,\n          hooks,\n          origName = camelCase(name),\n          isCustomProp = rcustomProp.test(name); // Make sure that we're working with the right name. We don't\n      // want to modify the value if it is a CSS custom property\n      // since they are user-defined.\n\n      if (!isCustomProp) {\n        name = finalPropName(origName);\n      } // Try prefixed name followed by the unprefixed name\n\n\n      hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // If a hook was provided get the computed value from there\n\n      if (hooks && \"get\" in hooks) {\n        val = hooks.get(elem, true, extra);\n      } // Otherwise, if a way to get the computed value exists, use that\n\n\n      if (val === undefined) {\n        val = curCSS(elem, name, styles);\n      } // Convert \"normal\" to computed value\n\n\n      if (val === \"normal\" && name in cssNormalTransform) {\n        val = cssNormalTransform[name];\n      } // Make numeric if forced or a qualifier was provided and val looks numeric\n\n\n      if (extra === \"\" || extra) {\n        num = parseFloat(val);\n        return extra === true || isFinite(num) ? num || 0 : val;\n      }\n\n      return val;\n    }\n  });\n  jQuery.each([\"height\", \"width\"], function (_i, dimension) {\n    jQuery.cssHooks[dimension] = {\n      get: function get(elem, computed, extra) {\n        if (computed) {\n          // Certain elements can have dimension info if we invisibly show them\n          // but it must have a current display style that would benefit\n          return rdisplayswap.test(jQuery.css(elem, \"display\")) && (!elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function () {\n            return getWidthOrHeight(elem, dimension, extra);\n          }) : getWidthOrHeight(elem, dimension, extra);\n        }\n      },\n      set: function set(elem, value, extra) {\n        var matches,\n            styles = getStyles(elem),\n            // Only read styles.position if the test has a chance to fail\n        // to avoid forcing a reflow.\n        scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === \"absolute\",\n            // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n        boxSizingNeeded = scrollboxSizeBuggy || extra,\n            isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n            subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0; // Account for unreliable border-box dimensions by comparing offset* to computed and\n        // faking a content-box to get border and padding (gh-3699)\n\n        if (isBorderBox && scrollboxSizeBuggy) {\n          subtract -= Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, \"border\", false, styles) - 0.5);\n        } // Convert to pixels if value adjustment is needed\n\n\n        if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || \"px\") !== \"px\") {\n          elem.style[dimension] = value;\n          value = jQuery.css(elem, dimension);\n        }\n\n        return setPositiveNumber(elem, value, subtract);\n      }\n    };\n  });\n  jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {\n    if (computed) {\n      return (parseFloat(curCSS(elem, \"marginLeft\")) || elem.getBoundingClientRect().left - swap(elem, {\n        marginLeft: 0\n      }, function () {\n        return elem.getBoundingClientRect().left;\n      })) + \"px\";\n    }\n  }); // These hooks are used by animate to expand properties\n\n  jQuery.each({\n    margin: \"\",\n    padding: \"\",\n    border: \"Width\"\n  }, function (prefix, suffix) {\n    jQuery.cssHooks[prefix + suffix] = {\n      expand: function expand(value) {\n        var i = 0,\n            expanded = {},\n            // Assumes a single number if not a string\n        parts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n        for (; i < 4; i++) {\n          expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];\n        }\n\n        return expanded;\n      }\n    };\n\n    if (prefix !== \"margin\") {\n      jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n    }\n  });\n  jQuery.fn.extend({\n    css: function css(name, value) {\n      return access(this, function (elem, name, value) {\n        var styles,\n            len,\n            map = {},\n            i = 0;\n\n        if (Array.isArray(name)) {\n          styles = getStyles(elem);\n          len = name.length;\n\n          for (; i < len; i++) {\n            map[name[i]] = jQuery.css(elem, name[i], false, styles);\n          }\n\n          return map;\n        }\n\n        return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);\n      }, name, value, arguments.length > 1);\n    }\n  });\n\n  function Tween(elem, options, prop, end, easing) {\n    return new Tween.prototype.init(elem, options, prop, end, easing);\n  }\n\n  jQuery.Tween = Tween;\n  Tween.prototype = {\n    constructor: Tween,\n    init: function init(elem, options, prop, end, easing, unit) {\n      this.elem = elem;\n      this.prop = prop;\n      this.easing = easing || jQuery.easing._default;\n      this.options = options;\n      this.start = this.now = this.cur();\n      this.end = end;\n      this.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n    },\n    cur: function cur() {\n      var hooks = Tween.propHooks[this.prop];\n      return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);\n    },\n    run: function run(percent) {\n      var eased,\n          hooks = Tween.propHooks[this.prop];\n\n      if (this.options.duration) {\n        this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);\n      } else {\n        this.pos = eased = percent;\n      }\n\n      this.now = (this.end - this.start) * eased + this.start;\n\n      if (this.options.step) {\n        this.options.step.call(this.elem, this.now, this);\n      }\n\n      if (hooks && hooks.set) {\n        hooks.set(this);\n      } else {\n        Tween.propHooks._default.set(this);\n      }\n\n      return this;\n    }\n  };\n  Tween.prototype.init.prototype = Tween.prototype;\n  Tween.propHooks = {\n    _default: {\n      get: function get(tween) {\n        var result; // Use a property on the element directly when it is not a DOM element,\n        // or when there is no matching style property that exists.\n\n        if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n          return tween.elem[tween.prop];\n        } // Passing an empty string as a 3rd parameter to .css will automatically\n        // attempt a parseFloat and fallback to a string if the parse fails.\n        // Simple values such as \"10px\" are parsed to Float;\n        // complex values such as \"rotate(1rad)\" are returned as-is.\n\n\n        result = jQuery.css(tween.elem, tween.prop, \"\"); // Empty strings, null, undefined and \"auto\" are converted to 0.\n\n        return !result || result === \"auto\" ? 0 : result;\n      },\n      set: function set(tween) {\n        // Use step hook for back compat.\n        // Use cssHook if its there.\n        // Use .style if available and use plain properties where available.\n        if (jQuery.fx.step[tween.prop]) {\n          jQuery.fx.step[tween.prop](tween);\n        } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {\n          jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n        } else {\n          tween.elem[tween.prop] = tween.now;\n        }\n      }\n    }\n  }; // Support: IE <=9 only\n  // Panic based approach to setting things on disconnected nodes\n\n  Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n    set: function set(tween) {\n      if (tween.elem.nodeType && tween.elem.parentNode) {\n        tween.elem[tween.prop] = tween.now;\n      }\n    }\n  };\n  jQuery.easing = {\n    linear: function linear(p) {\n      return p;\n    },\n    swing: function swing(p) {\n      return 0.5 - Math.cos(p * Math.PI) / 2;\n    },\n    _default: \"swing\"\n  };\n  jQuery.fx = Tween.prototype.init; // Back compat <1.8 extension point\n\n  jQuery.fx.step = {};\n  var fxNow,\n      inProgress,\n      rfxtypes = /^(?:toggle|show|hide)$/,\n      rrun = /queueHooks$/;\n\n  function schedule() {\n    if (inProgress) {\n      if (document.hidden === false && window.requestAnimationFrame) {\n        window.requestAnimationFrame(schedule);\n      } else {\n        window.setTimeout(schedule, jQuery.fx.interval);\n      }\n\n      jQuery.fx.tick();\n    }\n  } // Animations created synchronously will run synchronously\n\n\n  function createFxNow() {\n    window.setTimeout(function () {\n      fxNow = undefined;\n    });\n    return fxNow = Date.now();\n  } // Generate parameters to create a standard animation\n\n\n  function genFx(type, includeWidth) {\n    var which,\n        i = 0,\n        attrs = {\n      height: type\n    }; // If we include width, step value is 1 to do all cssExpand values,\n    // otherwise step value is 2 to skip over Left and Right\n\n    includeWidth = includeWidth ? 1 : 0;\n\n    for (; i < 4; i += 2 - includeWidth) {\n      which = cssExpand[i];\n      attrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n    }\n\n    if (includeWidth) {\n      attrs.opacity = attrs.width = type;\n    }\n\n    return attrs;\n  }\n\n  function createTween(value, prop, animation) {\n    var tween,\n        collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n        index = 0,\n        length = collection.length;\n\n    for (; index < length; index++) {\n      if (tween = collection[index].call(animation, prop, value)) {\n        // We're done with this property\n        return tween;\n      }\n    }\n  }\n\n  function defaultPrefilter(elem, props, opts) {\n    var prop,\n        value,\n        toggle,\n        hooks,\n        oldfire,\n        propTween,\n        restoreDisplay,\n        display,\n        isBox = \"width\" in props || \"height\" in props,\n        anim = this,\n        orig = {},\n        style = elem.style,\n        hidden = elem.nodeType && isHiddenWithinTree(elem),\n        dataShow = dataPriv.get(elem, \"fxshow\"); // Queue-skipping animations hijack the fx hooks\n\n    if (!opts.queue) {\n      hooks = jQuery._queueHooks(elem, \"fx\");\n\n      if (hooks.unqueued == null) {\n        hooks.unqueued = 0;\n        oldfire = hooks.empty.fire;\n\n        hooks.empty.fire = function () {\n          if (!hooks.unqueued) {\n            oldfire();\n          }\n        };\n      }\n\n      hooks.unqueued++;\n      anim.always(function () {\n        // Ensure the complete handler is called before this completes\n        anim.always(function () {\n          hooks.unqueued--;\n\n          if (!jQuery.queue(elem, \"fx\").length) {\n            hooks.empty.fire();\n          }\n        });\n      });\n    } // Detect show/hide animations\n\n\n    for (prop in props) {\n      value = props[prop];\n\n      if (rfxtypes.test(value)) {\n        delete props[prop];\n        toggle = toggle || value === \"toggle\";\n\n        if (value === (hidden ? \"hide\" : \"show\")) {\n          // Pretend to be hidden if this is a \"show\" and\n          // there is still data from a stopped show/hide\n          if (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n            hidden = true; // Ignore all other no-op show/hide data\n          } else {\n            continue;\n          }\n        }\n\n        orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n      }\n    } // Bail out if this is a no-op like .hide().hide()\n\n\n    propTween = !jQuery.isEmptyObject(props);\n\n    if (!propTween && jQuery.isEmptyObject(orig)) {\n      return;\n    } // Restrict \"overflow\" and \"display\" styles during box animations\n\n\n    if (isBox && elem.nodeType === 1) {\n      // Support: IE <=9 - 11, Edge 12 - 15\n      // Record all 3 overflow attributes because IE does not infer the shorthand\n      // from identically-valued overflowX and overflowY and Edge just mirrors\n      // the overflowX value there.\n      opts.overflow = [style.overflow, style.overflowX, style.overflowY]; // Identify a display type, preferring old show/hide data over the CSS cascade\n\n      restoreDisplay = dataShow && dataShow.display;\n\n      if (restoreDisplay == null) {\n        restoreDisplay = dataPriv.get(elem, \"display\");\n      }\n\n      display = jQuery.css(elem, \"display\");\n\n      if (display === \"none\") {\n        if (restoreDisplay) {\n          display = restoreDisplay;\n        } else {\n          // Get nonempty value(s) by temporarily forcing visibility\n          showHide([elem], true);\n          restoreDisplay = elem.style.display || restoreDisplay;\n          display = jQuery.css(elem, \"display\");\n          showHide([elem]);\n        }\n      } // Animate inline elements as inline-block\n\n\n      if (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n        if (jQuery.css(elem, \"float\") === \"none\") {\n          // Restore the original display value at the end of pure show/hide animations\n          if (!propTween) {\n            anim.done(function () {\n              style.display = restoreDisplay;\n            });\n\n            if (restoreDisplay == null) {\n              display = style.display;\n              restoreDisplay = display === \"none\" ? \"\" : display;\n            }\n          }\n\n          style.display = \"inline-block\";\n        }\n      }\n    }\n\n    if (opts.overflow) {\n      style.overflow = \"hidden\";\n      anim.always(function () {\n        style.overflow = opts.overflow[0];\n        style.overflowX = opts.overflow[1];\n        style.overflowY = opts.overflow[2];\n      });\n    } // Implement show/hide animations\n\n\n    propTween = false;\n\n    for (prop in orig) {\n      // General show/hide setup for this element animation\n      if (!propTween) {\n        if (dataShow) {\n          if (\"hidden\" in dataShow) {\n            hidden = dataShow.hidden;\n          }\n        } else {\n          dataShow = dataPriv.access(elem, \"fxshow\", {\n            display: restoreDisplay\n          });\n        } // Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\n\n        if (toggle) {\n          dataShow.hidden = !hidden;\n        } // Show elements before animating them\n\n\n        if (hidden) {\n          showHide([elem], true);\n        }\n        /* eslint-disable no-loop-func */\n\n\n        anim.done(function () {\n          /* eslint-enable no-loop-func */\n          // The final step of a \"hide\" animation is actually hiding the element\n          if (!hidden) {\n            showHide([elem]);\n          }\n\n          dataPriv.remove(elem, \"fxshow\");\n\n          for (prop in orig) {\n            jQuery.style(elem, prop, orig[prop]);\n          }\n        });\n      } // Per-property setup\n\n\n      propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\n      if (!(prop in dataShow)) {\n        dataShow[prop] = propTween.start;\n\n        if (hidden) {\n          propTween.end = propTween.start;\n          propTween.start = 0;\n        }\n      }\n    }\n  }\n\n  function propFilter(props, specialEasing) {\n    var index, name, easing, value, hooks; // camelCase, specialEasing and expand cssHook pass\n\n    for (index in props) {\n      name = camelCase(index);\n      easing = specialEasing[name];\n      value = props[index];\n\n      if (Array.isArray(value)) {\n        easing = value[1];\n        value = props[index] = value[0];\n      }\n\n      if (index !== name) {\n        props[name] = value;\n        delete props[index];\n      }\n\n      hooks = jQuery.cssHooks[name];\n\n      if (hooks && \"expand\" in hooks) {\n        value = hooks.expand(value);\n        delete props[name]; // Not quite $.extend, this won't overwrite existing keys.\n        // Reusing 'index' because we have the correct \"name\"\n\n        for (index in value) {\n          if (!(index in props)) {\n            props[index] = value[index];\n            specialEasing[index] = easing;\n          }\n        }\n      } else {\n        specialEasing[name] = easing;\n      }\n    }\n  }\n\n  function Animation(elem, properties, options) {\n    var result,\n        stopped,\n        index = 0,\n        length = Animation.prefilters.length,\n        deferred = jQuery.Deferred().always(function () {\n      // Don't match elem in the :animated selector\n      delete tick.elem;\n    }),\n        tick = function tick() {\n      if (stopped) {\n        return false;\n      }\n\n      var currentTime = fxNow || createFxNow(),\n          remaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n          // Support: Android 2.3 only\n      // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n      temp = remaining / animation.duration || 0,\n          percent = 1 - temp,\n          index = 0,\n          length = animation.tweens.length;\n\n      for (; index < length; index++) {\n        animation.tweens[index].run(percent);\n      }\n\n      deferred.notifyWith(elem, [animation, percent, remaining]); // If there's more to do, yield\n\n      if (percent < 1 && length) {\n        return remaining;\n      } // If this was an empty animation, synthesize a final progress notification\n\n\n      if (!length) {\n        deferred.notifyWith(elem, [animation, 1, 0]);\n      } // Resolve the animation and report its conclusion\n\n\n      deferred.resolveWith(elem, [animation]);\n      return false;\n    },\n        animation = deferred.promise({\n      elem: elem,\n      props: jQuery.extend({}, properties),\n      opts: jQuery.extend(true, {\n        specialEasing: {},\n        easing: jQuery.easing._default\n      }, options),\n      originalProperties: properties,\n      originalOptions: options,\n      startTime: fxNow || createFxNow(),\n      duration: options.duration,\n      tweens: [],\n      createTween: function createTween(prop, end) {\n        var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);\n        animation.tweens.push(tween);\n        return tween;\n      },\n      stop: function stop(gotoEnd) {\n        var index = 0,\n            // If we are going to the end, we want to run all the tweens\n        // otherwise we skip this part\n        length = gotoEnd ? animation.tweens.length : 0;\n\n        if (stopped) {\n          return this;\n        }\n\n        stopped = true;\n\n        for (; index < length; index++) {\n          animation.tweens[index].run(1);\n        } // Resolve when we played the last frame; otherwise, reject\n\n\n        if (gotoEnd) {\n          deferred.notifyWith(elem, [animation, 1, 0]);\n          deferred.resolveWith(elem, [animation, gotoEnd]);\n        } else {\n          deferred.rejectWith(elem, [animation, gotoEnd]);\n        }\n\n        return this;\n      }\n    }),\n        props = animation.props;\n\n    propFilter(props, animation.opts.specialEasing);\n\n    for (; index < length; index++) {\n      result = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\n      if (result) {\n        if (isFunction(result.stop)) {\n          jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);\n        }\n\n        return result;\n      }\n    }\n\n    jQuery.map(props, createTween, animation);\n\n    if (isFunction(animation.opts.start)) {\n      animation.opts.start.call(elem, animation);\n    } // Attach callbacks from options\n\n\n    animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);\n    jQuery.fx.timer(jQuery.extend(tick, {\n      elem: elem,\n      anim: animation,\n      queue: animation.opts.queue\n    }));\n    return animation;\n  }\n\n  jQuery.Animation = jQuery.extend(Animation, {\n    tweeners: {\n      \"*\": [function (prop, value) {\n        var tween = this.createTween(prop, value);\n        adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n        return tween;\n      }]\n    },\n    tweener: function tweener(props, callback) {\n      if (isFunction(props)) {\n        callback = props;\n        props = [\"*\"];\n      } else {\n        props = props.match(rnothtmlwhite);\n      }\n\n      var prop,\n          index = 0,\n          length = props.length;\n\n      for (; index < length; index++) {\n        prop = props[index];\n        Animation.tweeners[prop] = Animation.tweeners[prop] || [];\n        Animation.tweeners[prop].unshift(callback);\n      }\n    },\n    prefilters: [defaultPrefilter],\n    prefilter: function prefilter(callback, prepend) {\n      if (prepend) {\n        Animation.prefilters.unshift(callback);\n      } else {\n        Animation.prefilters.push(callback);\n      }\n    }\n  });\n\n  jQuery.speed = function (speed, easing, fn) {\n    var opt = speed && _typeof(speed) === \"object\" ? jQuery.extend({}, speed) : {\n      complete: fn || !fn && easing || isFunction(speed) && speed,\n      duration: speed,\n      easing: fn && easing || easing && !isFunction(easing) && easing\n    }; // Go to the end state if fx are off\n\n    if (jQuery.fx.off) {\n      opt.duration = 0;\n    } else {\n      if (typeof opt.duration !== \"number\") {\n        if (opt.duration in jQuery.fx.speeds) {\n          opt.duration = jQuery.fx.speeds[opt.duration];\n        } else {\n          opt.duration = jQuery.fx.speeds._default;\n        }\n      }\n    } // Normalize opt.queue - true/undefined/null -> \"fx\"\n\n\n    if (opt.queue == null || opt.queue === true) {\n      opt.queue = \"fx\";\n    } // Queueing\n\n\n    opt.old = opt.complete;\n\n    opt.complete = function () {\n      if (isFunction(opt.old)) {\n        opt.old.call(this);\n      }\n\n      if (opt.queue) {\n        jQuery.dequeue(this, opt.queue);\n      }\n    };\n\n    return opt;\n  };\n\n  jQuery.fn.extend({\n    fadeTo: function fadeTo(speed, to, easing, callback) {\n      // Show any hidden elements after setting opacity to 0\n      return this.filter(isHiddenWithinTree).css(\"opacity\", 0).show() // Animate to the value specified\n      .end().animate({\n        opacity: to\n      }, speed, easing, callback);\n    },\n    animate: function animate(prop, speed, easing, callback) {\n      var empty = jQuery.isEmptyObject(prop),\n          optall = jQuery.speed(speed, easing, callback),\n          doAnimation = function doAnimation() {\n        // Operate on a copy of prop so per-property easing won't be lost\n        var anim = Animation(this, jQuery.extend({}, prop), optall); // Empty animations, or finishing resolves immediately\n\n        if (empty || dataPriv.get(this, \"finish\")) {\n          anim.stop(true);\n        }\n      };\n\n      doAnimation.finish = doAnimation;\n      return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);\n    },\n    stop: function stop(type, clearQueue, gotoEnd) {\n      var stopQueue = function stopQueue(hooks) {\n        var stop = hooks.stop;\n        delete hooks.stop;\n        stop(gotoEnd);\n      };\n\n      if (typeof type !== \"string\") {\n        gotoEnd = clearQueue;\n        clearQueue = type;\n        type = undefined;\n      }\n\n      if (clearQueue) {\n        this.queue(type || \"fx\", []);\n      }\n\n      return this.each(function () {\n        var dequeue = true,\n            index = type != null && type + \"queueHooks\",\n            timers = jQuery.timers,\n            data = dataPriv.get(this);\n\n        if (index) {\n          if (data[index] && data[index].stop) {\n            stopQueue(data[index]);\n          }\n        } else {\n          for (index in data) {\n            if (data[index] && data[index].stop && rrun.test(index)) {\n              stopQueue(data[index]);\n            }\n          }\n        }\n\n        for (index = timers.length; index--;) {\n          if (timers[index].elem === this && (type == null || timers[index].queue === type)) {\n            timers[index].anim.stop(gotoEnd);\n            dequeue = false;\n            timers.splice(index, 1);\n          }\n        } // Start the next in the queue if the last step wasn't forced.\n        // Timers currently will call their complete callbacks, which\n        // will dequeue but only if they were gotoEnd.\n\n\n        if (dequeue || !gotoEnd) {\n          jQuery.dequeue(this, type);\n        }\n      });\n    },\n    finish: function finish(type) {\n      if (type !== false) {\n        type = type || \"fx\";\n      }\n\n      return this.each(function () {\n        var index,\n            data = dataPriv.get(this),\n            queue = data[type + \"queue\"],\n            hooks = data[type + \"queueHooks\"],\n            timers = jQuery.timers,\n            length = queue ? queue.length : 0; // Enable finishing flag on private data\n\n        data.finish = true; // Empty the queue first\n\n        jQuery.queue(this, type, []);\n\n        if (hooks && hooks.stop) {\n          hooks.stop.call(this, true);\n        } // Look for any active animations, and finish them\n\n\n        for (index = timers.length; index--;) {\n          if (timers[index].elem === this && timers[index].queue === type) {\n            timers[index].anim.stop(true);\n            timers.splice(index, 1);\n          }\n        } // Look for any animations in the old queue and finish them\n\n\n        for (index = 0; index < length; index++) {\n          if (queue[index] && queue[index].finish) {\n            queue[index].finish.call(this);\n          }\n        } // Turn off finishing flag\n\n\n        delete data.finish;\n      });\n    }\n  });\n  jQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n    var cssFn = jQuery.fn[name];\n\n    jQuery.fn[name] = function (speed, easing, callback) {\n      return speed == null || typeof speed === \"boolean\" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);\n    };\n  }); // Generate shortcuts for custom animations\n\n  jQuery.each({\n    slideDown: genFx(\"show\"),\n    slideUp: genFx(\"hide\"),\n    slideToggle: genFx(\"toggle\"),\n    fadeIn: {\n      opacity: \"show\"\n    },\n    fadeOut: {\n      opacity: \"hide\"\n    },\n    fadeToggle: {\n      opacity: \"toggle\"\n    }\n  }, function (name, props) {\n    jQuery.fn[name] = function (speed, easing, callback) {\n      return this.animate(props, speed, easing, callback);\n    };\n  });\n  jQuery.timers = [];\n\n  jQuery.fx.tick = function () {\n    var timer,\n        i = 0,\n        timers = jQuery.timers;\n    fxNow = Date.now();\n\n    for (; i < timers.length; i++) {\n      timer = timers[i]; // Run the timer and safely remove it when done (allowing for external removal)\n\n      if (!timer() && timers[i] === timer) {\n        timers.splice(i--, 1);\n      }\n    }\n\n    if (!timers.length) {\n      jQuery.fx.stop();\n    }\n\n    fxNow = undefined;\n  };\n\n  jQuery.fx.timer = function (timer) {\n    jQuery.timers.push(timer);\n    jQuery.fx.start();\n  };\n\n  jQuery.fx.interval = 13;\n\n  jQuery.fx.start = function () {\n    if (inProgress) {\n      return;\n    }\n\n    inProgress = true;\n    schedule();\n  };\n\n  jQuery.fx.stop = function () {\n    inProgress = null;\n  };\n\n  jQuery.fx.speeds = {\n    slow: 600,\n    fast: 200,\n    // Default speed\n    _default: 400\n  }; // Based off of the plugin by Clint Helfers, with permission.\n\n  jQuery.fn.delay = function (time, type) {\n    time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n    type = type || \"fx\";\n    return this.queue(type, function (next, hooks) {\n      var timeout = window.setTimeout(next, time);\n\n      hooks.stop = function () {\n        window.clearTimeout(timeout);\n      };\n    });\n  };\n\n  (function () {\n    var input = document.createElement(\"input\"),\n        select = document.createElement(\"select\"),\n        opt = select.appendChild(document.createElement(\"option\"));\n    input.type = \"checkbox\"; // Support: Android <=4.3 only\n    // Default value for a checkbox should be \"on\"\n\n    support.checkOn = input.value !== \"\"; // Support: IE <=11 only\n    // Must access selectedIndex to make default options select\n\n    support.optSelected = opt.selected; // Support: IE <=11 only\n    // An input loses its value after becoming a radio\n\n    input = document.createElement(\"input\");\n    input.value = \"t\";\n    input.type = \"radio\";\n    support.radioValue = input.value === \"t\";\n  })();\n\n  var boolHook,\n      attrHandle = jQuery.expr.attrHandle;\n  jQuery.fn.extend({\n    attr: function attr(name, value) {\n      return access(this, jQuery.attr, name, value, arguments.length > 1);\n    },\n    removeAttr: function removeAttr(name) {\n      return this.each(function () {\n        jQuery.removeAttr(this, name);\n      });\n    }\n  });\n  jQuery.extend({\n    attr: function attr(elem, name, value) {\n      var ret,\n          hooks,\n          nType = elem.nodeType; // Don't get/set attributes on text, comment and attribute nodes\n\n      if (nType === 3 || nType === 8 || nType === 2) {\n        return;\n      } // Fallback to prop when attributes are not supported\n\n\n      if (typeof elem.getAttribute === \"undefined\") {\n        return jQuery.prop(elem, name, value);\n      } // Attribute hooks are determined by the lowercase version\n      // Grab necessary hook if one is defined\n\n\n      if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n        hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n      }\n\n      if (value !== undefined) {\n        if (value === null) {\n          jQuery.removeAttr(elem, name);\n          return;\n        }\n\n        if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n          return ret;\n        }\n\n        elem.setAttribute(name, value + \"\");\n        return value;\n      }\n\n      if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n        return ret;\n      }\n\n      ret = jQuery.find.attr(elem, name); // Non-existent attributes return null, we normalize to undefined\n\n      return ret == null ? undefined : ret;\n    },\n    attrHooks: {\n      type: {\n        set: function set(elem, value) {\n          if (!support.radioValue && value === \"radio\" && nodeName(elem, \"input\")) {\n            var val = elem.value;\n            elem.setAttribute(\"type\", value);\n\n            if (val) {\n              elem.value = val;\n            }\n\n            return value;\n          }\n        }\n      }\n    },\n    removeAttr: function removeAttr(elem, value) {\n      var name,\n          i = 0,\n          // Attribute names can contain non-HTML whitespace characters\n      // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n      attrNames = value && value.match(rnothtmlwhite);\n\n      if (attrNames && elem.nodeType === 1) {\n        while (name = attrNames[i++]) {\n          elem.removeAttribute(name);\n        }\n      }\n    }\n  }); // Hooks for boolean attributes\n\n  boolHook = {\n    set: function set(elem, value, name) {\n      if (value === false) {\n        // Remove boolean attributes when set to false\n        jQuery.removeAttr(elem, name);\n      } else {\n        elem.setAttribute(name, name);\n      }\n\n      return name;\n    }\n  };\n  jQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n    var getter = attrHandle[name] || jQuery.find.attr;\n\n    attrHandle[name] = function (elem, name, isXML) {\n      var ret,\n          handle,\n          lowercaseName = name.toLowerCase();\n\n      if (!isXML) {\n        // Avoid an infinite loop by temporarily removing this function from the getter\n        handle = attrHandle[lowercaseName];\n        attrHandle[lowercaseName] = ret;\n        ret = getter(elem, name, isXML) != null ? lowercaseName : null;\n        attrHandle[lowercaseName] = handle;\n      }\n\n      return ret;\n    };\n  });\n  var rfocusable = /^(?:input|select|textarea|button)$/i,\n      rclickable = /^(?:a|area)$/i;\n  jQuery.fn.extend({\n    prop: function prop(name, value) {\n      return access(this, jQuery.prop, name, value, arguments.length > 1);\n    },\n    removeProp: function removeProp(name) {\n      return this.each(function () {\n        delete this[jQuery.propFix[name] || name];\n      });\n    }\n  });\n  jQuery.extend({\n    prop: function prop(elem, name, value) {\n      var ret,\n          hooks,\n          nType = elem.nodeType; // Don't get/set properties on text, comment and attribute nodes\n\n      if (nType === 3 || nType === 8 || nType === 2) {\n        return;\n      }\n\n      if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n        // Fix name and attach hooks\n        name = jQuery.propFix[name] || name;\n        hooks = jQuery.propHooks[name];\n      }\n\n      if (value !== undefined) {\n        if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n          return ret;\n        }\n\n        return elem[name] = value;\n      }\n\n      if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n        return ret;\n      }\n\n      return elem[name];\n    },\n    propHooks: {\n      tabIndex: {\n        get: function get(elem) {\n          // Support: IE <=9 - 11 only\n          // elem.tabIndex doesn't always return the\n          // correct value when it hasn't been explicitly set\n          // Use proper attribute retrieval (trac-12072)\n          var tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n          if (tabindex) {\n            return parseInt(tabindex, 10);\n          }\n\n          if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {\n            return 0;\n          }\n\n          return -1;\n        }\n      }\n    },\n    propFix: {\n      \"for\": \"htmlFor\",\n      \"class\": \"className\"\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\n\n  if (!support.optSelected) {\n    jQuery.propHooks.selected = {\n      get: function get(elem) {\n        /* eslint no-unused-expressions: \"off\" */\n        var parent = elem.parentNode;\n\n        if (parent && parent.parentNode) {\n          parent.parentNode.selectedIndex;\n        }\n\n        return null;\n      },\n      set: function set(elem) {\n        /* eslint no-unused-expressions: \"off\" */\n        var parent = elem.parentNode;\n\n        if (parent) {\n          parent.selectedIndex;\n\n          if (parent.parentNode) {\n            parent.parentNode.selectedIndex;\n          }\n        }\n      }\n    };\n  }\n\n  jQuery.each([\"tabIndex\", \"readOnly\", \"maxLength\", \"cellSpacing\", \"cellPadding\", \"rowSpan\", \"colSpan\", \"useMap\", \"frameBorder\", \"contentEditable\"], function () {\n    jQuery.propFix[this.toLowerCase()] = this;\n  }); // Strip and collapse whitespace according to HTML spec\n  // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\n  function stripAndCollapse(value) {\n    var tokens = value.match(rnothtmlwhite) || [];\n    return tokens.join(\" \");\n  }\n\n  function getClass(elem) {\n    return elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n  }\n\n  function classesToArray(value) {\n    if (Array.isArray(value)) {\n      return value;\n    }\n\n    if (typeof value === \"string\") {\n      return value.match(rnothtmlwhite) || [];\n    }\n\n    return [];\n  }\n\n  jQuery.fn.extend({\n    addClass: function addClass(value) {\n      var classNames, cur, curValue, className, i, finalValue;\n\n      if (isFunction(value)) {\n        return this.each(function (j) {\n          jQuery(this).addClass(value.call(this, j, getClass(this)));\n        });\n      }\n\n      classNames = classesToArray(value);\n\n      if (classNames.length) {\n        return this.each(function () {\n          curValue = getClass(this);\n          cur = this.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n          if (cur) {\n            for (i = 0; i < classNames.length; i++) {\n              className = classNames[i];\n\n              if (cur.indexOf(\" \" + className + \" \") < 0) {\n                cur += className + \" \";\n              }\n            } // Only assign if different to avoid unneeded rendering.\n\n\n            finalValue = stripAndCollapse(cur);\n\n            if (curValue !== finalValue) {\n              this.setAttribute(\"class\", finalValue);\n            }\n          }\n        });\n      }\n\n      return this;\n    },\n    removeClass: function removeClass(value) {\n      var classNames, cur, curValue, className, i, finalValue;\n\n      if (isFunction(value)) {\n        return this.each(function (j) {\n          jQuery(this).removeClass(value.call(this, j, getClass(this)));\n        });\n      }\n\n      if (!arguments.length) {\n        return this.attr(\"class\", \"\");\n      }\n\n      classNames = classesToArray(value);\n\n      if (classNames.length) {\n        return this.each(function () {\n          curValue = getClass(this); // This expression is here for better compressibility (see addClass)\n\n          cur = this.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n          if (cur) {\n            for (i = 0; i < classNames.length; i++) {\n              className = classNames[i]; // Remove *all* instances\n\n              while (cur.indexOf(\" \" + className + \" \") > -1) {\n                cur = cur.replace(\" \" + className + \" \", \" \");\n              }\n            } // Only assign if different to avoid unneeded rendering.\n\n\n            finalValue = stripAndCollapse(cur);\n\n            if (curValue !== finalValue) {\n              this.setAttribute(\"class\", finalValue);\n            }\n          }\n        });\n      }\n\n      return this;\n    },\n    toggleClass: function toggleClass(value, stateVal) {\n      var classNames,\n          className,\n          i,\n          self,\n          type = _typeof(value),\n          isValidValue = type === \"string\" || Array.isArray(value);\n\n      if (isFunction(value)) {\n        return this.each(function (i) {\n          jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);\n        });\n      }\n\n      if (typeof stateVal === \"boolean\" && isValidValue) {\n        return stateVal ? this.addClass(value) : this.removeClass(value);\n      }\n\n      classNames = classesToArray(value);\n      return this.each(function () {\n        if (isValidValue) {\n          // Toggle individual class names\n          self = jQuery(this);\n\n          for (i = 0; i < classNames.length; i++) {\n            className = classNames[i]; // Check each className given, space separated list\n\n            if (self.hasClass(className)) {\n              self.removeClass(className);\n            } else {\n              self.addClass(className);\n            }\n          } // Toggle whole class name\n\n        } else if (value === undefined || type === \"boolean\") {\n          className = getClass(this);\n\n          if (className) {\n            // Store className if set\n            dataPriv.set(this, \"__className__\", className);\n          } // If the element has a class name or if we're passed `false`,\n          // then remove the whole classname (if there was one, the above saved it).\n          // Otherwise bring back whatever was previously saved (if anything),\n          // falling back to the empty string if nothing was stored.\n\n\n          if (this.setAttribute) {\n            this.setAttribute(\"class\", className || value === false ? \"\" : dataPriv.get(this, \"__className__\") || \"\");\n          }\n        }\n      });\n    },\n    hasClass: function hasClass(selector) {\n      var className,\n          elem,\n          i = 0;\n      className = \" \" + selector + \" \";\n\n      while (elem = this[i++]) {\n        if (elem.nodeType === 1 && (\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n  });\n  var rreturn = /\\r/g;\n  jQuery.fn.extend({\n    val: function val(value) {\n      var hooks,\n          ret,\n          valueIsFunction,\n          elem = this[0];\n\n      if (!arguments.length) {\n        if (elem) {\n          hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];\n\n          if (hooks && \"get\" in hooks && (ret = hooks.get(elem, \"value\")) !== undefined) {\n            return ret;\n          }\n\n          ret = elem.value; // Handle most common string cases\n\n          if (typeof ret === \"string\") {\n            return ret.replace(rreturn, \"\");\n          } // Handle cases where value is null/undef or number\n\n\n          return ret == null ? \"\" : ret;\n        }\n\n        return;\n      }\n\n      valueIsFunction = isFunction(value);\n      return this.each(function (i) {\n        var val;\n\n        if (this.nodeType !== 1) {\n          return;\n        }\n\n        if (valueIsFunction) {\n          val = value.call(this, i, jQuery(this).val());\n        } else {\n          val = value;\n        } // Treat null/undefined as \"\"; convert numbers to string\n\n\n        if (val == null) {\n          val = \"\";\n        } else if (typeof val === \"number\") {\n          val += \"\";\n        } else if (Array.isArray(val)) {\n          val = jQuery.map(val, function (value) {\n            return value == null ? \"\" : value + \"\";\n          });\n        }\n\n        hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; // If set returns undefined, fall back to normal setting\n\n        if (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n          this.value = val;\n        }\n      });\n    }\n  });\n  jQuery.extend({\n    valHooks: {\n      option: {\n        get: function get(elem) {\n          var val = jQuery.find.attr(elem, \"value\");\n          return val != null ? val : // Support: IE <=10 - 11 only\n          // option.text throws exceptions (trac-14686, trac-14858)\n          // Strip and collapse whitespace\n          // https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n          stripAndCollapse(jQuery.text(elem));\n        }\n      },\n      select: {\n        get: function get(elem) {\n          var value,\n              option,\n              i,\n              options = elem.options,\n              index = elem.selectedIndex,\n              one = elem.type === \"select-one\",\n              values = one ? null : [],\n              max = one ? index + 1 : options.length;\n\n          if (index < 0) {\n            i = max;\n          } else {\n            i = one ? index : 0;\n          } // Loop through all the selected options\n\n\n          for (; i < max; i++) {\n            option = options[i]; // Support: IE <=9 only\n            // IE8-9 doesn't update selected after form reset (trac-2551)\n\n            if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup\n            !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, \"optgroup\"))) {\n              // Get the specific value for the option\n              value = jQuery(option).val(); // We don't need an array for one selects\n\n              if (one) {\n                return value;\n              } // Multi-Selects return an array\n\n\n              values.push(value);\n            }\n          }\n\n          return values;\n        },\n        set: function set(elem, value) {\n          var optionSet,\n              option,\n              options = elem.options,\n              values = jQuery.makeArray(value),\n              i = options.length;\n\n          while (i--) {\n            option = options[i];\n            /* eslint-disable no-cond-assign */\n\n            if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {\n              optionSet = true;\n            }\n            /* eslint-enable no-cond-assign */\n\n          } // Force browsers to behave consistently when non-matching value is set\n\n\n          if (!optionSet) {\n            elem.selectedIndex = -1;\n          }\n\n          return values;\n        }\n      }\n    }\n  }); // Radios and checkboxes getter/setter\n\n  jQuery.each([\"radio\", \"checkbox\"], function () {\n    jQuery.valHooks[this] = {\n      set: function set(elem, value) {\n        if (Array.isArray(value)) {\n          return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;\n        }\n      }\n    };\n\n    if (!support.checkOn) {\n      jQuery.valHooks[this].get = function (elem) {\n        return elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n      };\n    }\n  }); // Return jQuery for attributes-only inclusion\n\n  support.focusin = \"onfocusin\" in window;\n\n  var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n      stopPropagationCallback = function stopPropagationCallback(e) {\n    e.stopPropagation();\n  };\n\n  jQuery.extend(jQuery.event, {\n    trigger: function trigger(event, data, elem, onlyHandlers) {\n      var i,\n          cur,\n          tmp,\n          bubbleType,\n          ontype,\n          handle,\n          special,\n          lastElement,\n          eventPath = [elem || document],\n          type = hasOwn.call(event, \"type\") ? event.type : event,\n          namespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n      cur = lastElement = tmp = elem = elem || document; // Don't do events on text and comment nodes\n\n      if (elem.nodeType === 3 || elem.nodeType === 8) {\n        return;\n      } // focus/blur morphs to focusin/out; ensure we're not firing them right now\n\n\n      if (rfocusMorph.test(type + jQuery.event.triggered)) {\n        return;\n      }\n\n      if (type.indexOf(\".\") > -1) {\n        // Namespaced trigger; create a regexp to match event type in handle()\n        namespaces = type.split(\".\");\n        type = namespaces.shift();\n        namespaces.sort();\n      }\n\n      ontype = type.indexOf(\":\") < 0 && \"on\" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string\n\n      event = event[jQuery.expando] ? event : new jQuery.Event(type, _typeof(event) === \"object\" && event); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\n      event.isTrigger = onlyHandlers ? 2 : 3;\n      event.namespace = namespaces.join(\".\");\n      event.rnamespace = event.namespace ? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null; // Clean up the event in case it is being reused\n\n      event.result = undefined;\n\n      if (!event.target) {\n        event.target = elem;\n      } // Clone any incoming data and prepend the event, creating the handler arg list\n\n\n      data = data == null ? [event] : jQuery.makeArray(data, [event]); // Allow special events to draw outside the lines\n\n      special = jQuery.event.special[type] || {};\n\n      if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n        return;\n      } // Determine event propagation path in advance, per W3C events spec (trac-9951)\n      // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\n\n      if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n        bubbleType = special.delegateType || type;\n\n        if (!rfocusMorph.test(bubbleType + type)) {\n          cur = cur.parentNode;\n        }\n\n        for (; cur; cur = cur.parentNode) {\n          eventPath.push(cur);\n          tmp = cur;\n        } // Only add window if we got to document (e.g., not plain obj or detached DOM)\n\n\n        if (tmp === (elem.ownerDocument || document)) {\n          eventPath.push(tmp.defaultView || tmp.parentWindow || window);\n        }\n      } // Fire handlers on the event path\n\n\n      i = 0;\n\n      while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n        lastElement = cur;\n        event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler\n\n        handle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] && dataPriv.get(cur, \"handle\");\n\n        if (handle) {\n          handle.apply(cur, data);\n        } // Native handler\n\n\n        handle = ontype && cur[ontype];\n\n        if (handle && handle.apply && acceptData(cur)) {\n          event.result = handle.apply(cur, data);\n\n          if (event.result === false) {\n            event.preventDefault();\n          }\n        }\n      }\n\n      event.type = type; // If nobody prevented the default action, do it now\n\n      if (!onlyHandlers && !event.isDefaultPrevented()) {\n        if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {\n          // Call a native DOM method on the target with the same name as the event.\n          // Don't do default actions on window, that's where global variables be (trac-6170)\n          if (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n            // Don't re-trigger an onFOO event when we call its FOO() method\n            tmp = elem[ontype];\n\n            if (tmp) {\n              elem[ontype] = null;\n            } // Prevent re-triggering of the same event, since we already bubbled it above\n\n\n            jQuery.event.triggered = type;\n\n            if (event.isPropagationStopped()) {\n              lastElement.addEventListener(type, stopPropagationCallback);\n            }\n\n            elem[type]();\n\n            if (event.isPropagationStopped()) {\n              lastElement.removeEventListener(type, stopPropagationCallback);\n            }\n\n            jQuery.event.triggered = undefined;\n\n            if (tmp) {\n              elem[ontype] = tmp;\n            }\n          }\n        }\n      }\n\n      return event.result;\n    },\n    // Piggyback on a donor event to simulate a different one\n    // Used only for `focus(in | out)` events\n    simulate: function simulate(type, elem, event) {\n      var e = jQuery.extend(new jQuery.Event(), event, {\n        type: type,\n        isSimulated: true\n      });\n      jQuery.event.trigger(e, null, elem);\n    }\n  });\n  jQuery.fn.extend({\n    trigger: function trigger(type, data) {\n      return this.each(function () {\n        jQuery.event.trigger(type, data, this);\n      });\n    },\n    triggerHandler: function triggerHandler(type, data) {\n      var elem = this[0];\n\n      if (elem) {\n        return jQuery.event.trigger(type, data, elem, true);\n      }\n    }\n  }); // Support: Firefox <=44\n  // Firefox doesn't have focus(in | out) events\n  // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n  //\n  // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n  // focus(in | out) events fire after focus & blur events,\n  // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n  // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\n  if (!support.focusin) {\n    jQuery.each({\n      focus: \"focusin\",\n      blur: \"focusout\"\n    }, function (orig, fix) {\n      // Attach a single capturing handler on the document while someone wants focusin/focusout\n      var handler = function handler(event) {\n        jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));\n      };\n\n      jQuery.event.special[fix] = {\n        setup: function setup() {\n          // Handle: regular nodes (via `this.ownerDocument`), window\n          // (via `this.document`) & document (via `this`).\n          var doc = this.ownerDocument || this.document || this,\n              attaches = dataPriv.access(doc, fix);\n\n          if (!attaches) {\n            doc.addEventListener(orig, handler, true);\n          }\n\n          dataPriv.access(doc, fix, (attaches || 0) + 1);\n        },\n        teardown: function teardown() {\n          var doc = this.ownerDocument || this.document || this,\n              attaches = dataPriv.access(doc, fix) - 1;\n\n          if (!attaches) {\n            doc.removeEventListener(orig, handler, true);\n            dataPriv.remove(doc, fix);\n          } else {\n            dataPriv.access(doc, fix, attaches);\n          }\n        }\n      };\n    });\n  }\n\n  var location = window.location;\n  var nonce = {\n    guid: Date.now()\n  };\n  var rquery = /\\?/; // Cross-browser xml parsing\n\n  jQuery.parseXML = function (data) {\n    var xml, parserErrorElem;\n\n    if (!data || typeof data !== \"string\") {\n      return null;\n    } // Support: IE 9 - 11 only\n    // IE throws on parseFromString with invalid input.\n\n\n    try {\n      xml = new window.DOMParser().parseFromString(data, \"text/xml\");\n    } catch (e) {}\n\n    parserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\n    if (!xml || parserErrorElem) {\n      jQuery.error(\"Invalid XML: \" + (parserErrorElem ? jQuery.map(parserErrorElem.childNodes, function (el) {\n        return el.textContent;\n      }).join(\"\\n\") : data));\n    }\n\n    return xml;\n  };\n\n  var rbracket = /\\[\\]$/,\n      rCRLF = /\\r?\\n/g,\n      rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n      rsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n  function buildParams(prefix, obj, traditional, add) {\n    var name;\n\n    if (Array.isArray(obj)) {\n      // Serialize array item.\n      jQuery.each(obj, function (i, v) {\n        if (traditional || rbracket.test(prefix)) {\n          // Treat each array item as a scalar.\n          add(prefix, v);\n        } else {\n          // Item is non-scalar (array or object), encode its numeric index.\n          buildParams(prefix + \"[\" + (_typeof(v) === \"object\" && v != null ? i : \"\") + \"]\", v, traditional, add);\n        }\n      });\n    } else if (!traditional && toType(obj) === \"object\") {\n      // Serialize object item.\n      for (name in obj) {\n        buildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n      }\n    } else {\n      // Serialize scalar item.\n      add(prefix, obj);\n    }\n  } // Serialize an array of form elements or a set of\n  // key/values into a query string\n\n\n  jQuery.param = function (a, traditional) {\n    var prefix,\n        s = [],\n        add = function add(key, valueOrFunction) {\n      // If value is a function, invoke it and use its return value\n      var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;\n      s[s.length] = encodeURIComponent(key) + \"=\" + encodeURIComponent(value == null ? \"\" : value);\n    };\n\n    if (a == null) {\n      return \"\";\n    } // If an array was passed in, assume that it is an array of form elements.\n\n\n    if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {\n      // Serialize the form elements\n      jQuery.each(a, function () {\n        add(this.name, this.value);\n      });\n    } else {\n      // If traditional, encode the \"old\" way (the way 1.3.2 or older\n      // did it), otherwise encode params recursively.\n      for (prefix in a) {\n        buildParams(prefix, a[prefix], traditional, add);\n      }\n    } // Return the resulting serialization\n\n\n    return s.join(\"&\");\n  };\n\n  jQuery.fn.extend({\n    serialize: function serialize() {\n      return jQuery.param(this.serializeArray());\n    },\n    serializeArray: function serializeArray() {\n      return this.map(function () {\n        // Can add propHook for \"elements\" to filter or add form elements\n        var elements = jQuery.prop(this, \"elements\");\n        return elements ? jQuery.makeArray(elements) : this;\n      }).filter(function () {\n        var type = this.type; // Use .is( \":disabled\" ) so that fieldset[disabled] works\n\n        return this.name && !jQuery(this).is(\":disabled\") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));\n      }).map(function (_i, elem) {\n        var val = jQuery(this).val();\n\n        if (val == null) {\n          return null;\n        }\n\n        if (Array.isArray(val)) {\n          return jQuery.map(val, function (val) {\n            return {\n              name: elem.name,\n              value: val.replace(rCRLF, \"\\r\\n\")\n            };\n          });\n        }\n\n        return {\n          name: elem.name,\n          value: val.replace(rCRLF, \"\\r\\n\")\n        };\n      }).get();\n    }\n  });\n  var r20 = /%20/g,\n      rhash = /#.*$/,\n      rantiCache = /([?&])_=[^&]*/,\n      rheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n      // trac-7653, trac-8125, trac-8152: local protocol detection\n  rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n      rnoContent = /^(?:GET|HEAD)$/,\n      rprotocol = /^\\/\\//,\n\n  /* Prefilters\n   * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n   * 2) These are called:\n   *    - BEFORE asking for a transport\n   *    - AFTER param serialization (s.data is a string if s.processData is true)\n   * 3) key is the dataType\n   * 4) the catchall symbol \"*\" can be used\n   * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n   */\n  prefilters = {},\n\n  /* Transports bindings\n   * 1) key is the dataType\n   * 2) the catchall symbol \"*\" can be used\n   * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n   */\n  transports = {},\n      // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n  allTypes = \"*/\".concat(\"*\"),\n      // Anchor tag for parsing the document origin\n  originAnchor = document.createElement(\"a\");\n  originAnchor.href = location.href; // Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\n  function addToPrefiltersOrTransports(structure) {\n    // dataTypeExpression is optional and defaults to \"*\"\n    return function (dataTypeExpression, func) {\n      if (typeof dataTypeExpression !== \"string\") {\n        func = dataTypeExpression;\n        dataTypeExpression = \"*\";\n      }\n\n      var dataType,\n          i = 0,\n          dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n      if (isFunction(func)) {\n        // For each dataType in the dataTypeExpression\n        while (dataType = dataTypes[i++]) {\n          // Prepend if requested\n          if (dataType[0] === \"+\") {\n            dataType = dataType.slice(1) || \"*\";\n            (structure[dataType] = structure[dataType] || []).unshift(func); // Otherwise append\n          } else {\n            (structure[dataType] = structure[dataType] || []).push(func);\n          }\n        }\n      }\n    };\n  } // Base inspection function for prefilters and transports\n\n\n  function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n    var inspected = {},\n        seekingTransport = structure === transports;\n\n    function inspect(dataType) {\n      var selected;\n      inspected[dataType] = true;\n      jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n        var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\n        if (typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[dataTypeOrTransport]) {\n          options.dataTypes.unshift(dataTypeOrTransport);\n          inspect(dataTypeOrTransport);\n          return false;\n        } else if (seekingTransport) {\n          return !(selected = dataTypeOrTransport);\n        }\n      });\n      return selected;\n    }\n\n    return inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n  } // A special extend for ajax options\n  // that takes \"flat\" options (not to be deep extended)\n  // Fixes trac-9887\n\n\n  function ajaxExtend(target, src) {\n    var key,\n        deep,\n        flatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n    for (key in src) {\n      if (src[key] !== undefined) {\n        (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];\n      }\n    }\n\n    if (deep) {\n      jQuery.extend(true, target, deep);\n    }\n\n    return target;\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   */\n\n\n  function ajaxHandleResponses(s, jqXHR, responses) {\n    var ct,\n        type,\n        finalDataType,\n        firstDataType,\n        contents = s.contents,\n        dataTypes = s.dataTypes; // Remove auto dataType and get content-type in the process\n\n    while (dataTypes[0] === \"*\") {\n      dataTypes.shift();\n\n      if (ct === undefined) {\n        ct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n      }\n    } // Check if we're dealing with a known content-type\n\n\n    if (ct) {\n      for (type in contents) {\n        if (contents[type] && contents[type].test(ct)) {\n          dataTypes.unshift(type);\n          break;\n        }\n      }\n    } // Check to see if we have a response for the expected dataType\n\n\n    if (dataTypes[0] in responses) {\n      finalDataType = dataTypes[0];\n    } else {\n      // Try convertible dataTypes\n      for (type in responses) {\n        if (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n          finalDataType = type;\n          break;\n        }\n\n        if (!firstDataType) {\n          firstDataType = type;\n        }\n      } // Or just use first one\n\n\n      finalDataType = finalDataType || firstDataType;\n    } // If we found a dataType\n    // We add the dataType to the list if needed\n    // and return the corresponding response\n\n\n    if (finalDataType) {\n      if (finalDataType !== dataTypes[0]) {\n        dataTypes.unshift(finalDataType);\n      }\n\n      return responses[finalDataType];\n    }\n  }\n  /* Chain conversions given the request and the original response\n   * Also sets the responseXXX fields on the jqXHR instance\n   */\n\n\n  function ajaxConvert(s, response, jqXHR, isSuccess) {\n    var conv2,\n        current,\n        conv,\n        tmp,\n        prev,\n        converters = {},\n        // Work with a copy of dataTypes in case we need to modify it for conversion\n    dataTypes = s.dataTypes.slice(); // Create converters map with lowercased keys\n\n    if (dataTypes[1]) {\n      for (conv in s.converters) {\n        converters[conv.toLowerCase()] = s.converters[conv];\n      }\n    }\n\n    current = dataTypes.shift(); // Convert to each sequential dataType\n\n    while (current) {\n      if (s.responseFields[current]) {\n        jqXHR[s.responseFields[current]] = response;\n      } // Apply the dataFilter if provided\n\n\n      if (!prev && isSuccess && s.dataFilter) {\n        response = s.dataFilter(response, s.dataType);\n      }\n\n      prev = current;\n      current = dataTypes.shift();\n\n      if (current) {\n        // There's only work to do if current dataType is non-auto\n        if (current === \"*\") {\n          current = prev; // Convert response if prev dataType is non-auto and differs from current\n        } else if (prev !== \"*\" && prev !== current) {\n          // Seek a direct converter\n          conv = converters[prev + \" \" + current] || converters[\"* \" + current]; // If none found, seek a pair\n\n          if (!conv) {\n            for (conv2 in converters) {\n              // If conv2 outputs current\n              tmp = conv2.split(\" \");\n\n              if (tmp[1] === current) {\n                // If prev can be converted to accepted input\n                conv = converters[prev + \" \" + tmp[0]] || converters[\"* \" + tmp[0]];\n\n                if (conv) {\n                  // Condense equivalence converters\n                  if (conv === true) {\n                    conv = converters[conv2]; // Otherwise, insert the intermediate dataType\n                  } else if (converters[conv2] !== true) {\n                    current = tmp[0];\n                    dataTypes.unshift(tmp[1]);\n                  }\n\n                  break;\n                }\n              }\n            }\n          } // Apply converter (if not an equivalence)\n\n\n          if (conv !== true) {\n            // Unless errors are allowed to bubble, catch and return them\n            if (conv && s.throws) {\n              response = conv(response);\n            } else {\n              try {\n                response = conv(response);\n              } catch (e) {\n                return {\n                  state: \"parsererror\",\n                  error: conv ? e : \"No conversion from \" + prev + \" to \" + current\n                };\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return {\n      state: \"success\",\n      data: response\n    };\n  }\n\n  jQuery.extend({\n    // Counter for holding the number of active queries\n    active: 0,\n    // Last-Modified header cache for next request\n    lastModified: {},\n    etag: {},\n    ajaxSettings: {\n      url: location.href,\n      type: \"GET\",\n      isLocal: rlocalProtocol.test(location.protocol),\n      global: true,\n      processData: true,\n      async: true,\n      contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n      /*\n      timeout: 0,\n      data: null,\n      dataType: null,\n      username: null,\n      password: null,\n      cache: null,\n      throws: false,\n      traditional: false,\n      headers: {},\n      */\n      accepts: {\n        \"*\": allTypes,\n        text: \"text/plain\",\n        html: \"text/html\",\n        xml: \"application/xml, text/xml\",\n        json: \"application/json, text/javascript\"\n      },\n      contents: {\n        xml: /\\bxml\\b/,\n        html: /\\bhtml/,\n        json: /\\bjson\\b/\n      },\n      responseFields: {\n        xml: \"responseXML\",\n        text: \"responseText\",\n        json: \"responseJSON\"\n      },\n      // Data converters\n      // Keys separate source (or catchall \"*\") and destination types with a single space\n      converters: {\n        // Convert anything to text\n        \"* text\": String,\n        // Text to html (true = no transformation)\n        \"text html\": true,\n        // Evaluate text as a json expression\n        \"text json\": JSON.parse,\n        // Parse text as xml\n        \"text xml\": jQuery.parseXML\n      },\n      // For options that shouldn't be deep extended:\n      // you can add your own custom options here if\n      // and when you create one that shouldn't be\n      // deep extended (see ajaxExtend)\n      flatOptions: {\n        url: true,\n        context: true\n      }\n    },\n    // Creates a full fledged settings object into target\n    // with both ajaxSettings and settings fields.\n    // If target is omitted, writes into ajaxSettings.\n    ajaxSetup: function ajaxSetup(target, settings) {\n      return settings ? // Building a settings object\n      ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : // Extending ajaxSettings\n      ajaxExtend(jQuery.ajaxSettings, target);\n    },\n    ajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n    ajaxTransport: addToPrefiltersOrTransports(transports),\n    // Main method\n    ajax: function ajax(url, options) {\n      // If url is an object, simulate pre-1.5 signature\n      if (_typeof(url) === \"object\") {\n        options = url;\n        url = undefined;\n      } // Force options to be an object\n\n\n      options = options || {};\n\n      var transport,\n          // URL without anti-cache param\n      cacheURL,\n          // Response headers\n      responseHeadersString,\n          responseHeaders,\n          // timeout handle\n      timeoutTimer,\n          // Url cleanup var\n      urlAnchor,\n          // Request state (becomes false upon send and true upon completion)\n      completed,\n          // To know if global events are to be dispatched\n      fireGlobals,\n          // Loop variable\n      i,\n          // uncached part of the url\n      uncached,\n          // Create the final options object\n      s = jQuery.ajaxSetup({}, options),\n          // Callbacks context\n      callbackContext = s.context || s,\n          // Context for global events is callbackContext if it is a DOM node or jQuery collection\n      globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event,\n          // Deferreds\n      deferred = jQuery.Deferred(),\n          completeDeferred = jQuery.Callbacks(\"once memory\"),\n          // Status-dependent callbacks\n      _statusCode = s.statusCode || {},\n          // Headers (they are sent all at once)\n      requestHeaders = {},\n          requestHeadersNames = {},\n          // Default abort message\n      strAbort = \"canceled\",\n          // Fake xhr\n      jqXHR = {\n        readyState: 0,\n        // Builds headers hashtable if needed\n        getResponseHeader: function getResponseHeader(key) {\n          var match;\n\n          if (completed) {\n            if (!responseHeaders) {\n              responseHeaders = {};\n\n              while (match = rheaders.exec(responseHeadersString)) {\n                responseHeaders[match[1].toLowerCase() + \" \"] = (responseHeaders[match[1].toLowerCase() + \" \"] || []).concat(match[2]);\n              }\n            }\n\n            match = responseHeaders[key.toLowerCase() + \" \"];\n          }\n\n          return match == null ? null : match.join(\", \");\n        },\n        // Raw string\n        getAllResponseHeaders: function getAllResponseHeaders() {\n          return completed ? responseHeadersString : null;\n        },\n        // Caches the header\n        setRequestHeader: function setRequestHeader(name, value) {\n          if (completed == null) {\n            name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;\n            requestHeaders[name] = value;\n          }\n\n          return this;\n        },\n        // Overrides response content-type header\n        overrideMimeType: function overrideMimeType(type) {\n          if (completed == null) {\n            s.mimeType = type;\n          }\n\n          return this;\n        },\n        // Status-dependent callbacks\n        statusCode: function statusCode(map) {\n          var code;\n\n          if (map) {\n            if (completed) {\n              // Execute the appropriate callbacks\n              jqXHR.always(map[jqXHR.status]);\n            } else {\n              // Lazy-add the new callbacks in a way that preserves old ones\n              for (code in map) {\n                _statusCode[code] = [_statusCode[code], map[code]];\n              }\n            }\n          }\n\n          return this;\n        },\n        // Cancel the request\n        abort: function abort(statusText) {\n          var finalText = statusText || strAbort;\n\n          if (transport) {\n            transport.abort(finalText);\n          }\n\n          done(0, finalText);\n          return this;\n        }\n      }; // Attach deferreds\n\n\n      deferred.promise(jqXHR); // Add protocol if not provided (prefilters might expect it)\n      // Handle falsy url in the settings object (trac-10093: consistency with old signature)\n      // We also use the url parameter if available\n\n      s.url = ((url || s.url || location.href) + \"\").replace(rprotocol, location.protocol + \"//\"); // Alias method option to type as per ticket trac-12004\n\n      s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list\n\n      s.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"]; // A cross-domain request is in order when the origin doesn't match the current origin.\n\n      if (s.crossDomain == null) {\n        urlAnchor = document.createElement(\"a\"); // Support: IE <=8 - 11, Edge 12 - 15\n        // IE throws exception on accessing the href property if url is malformed,\n        // e.g. http://example.com:80x/\n\n        try {\n          urlAnchor.href = s.url; // Support: IE <=8 - 11 only\n          // Anchor's host property isn't correctly set when s.url is relative\n\n          urlAnchor.href = urlAnchor.href;\n          s.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !== urlAnchor.protocol + \"//\" + urlAnchor.host;\n        } catch (e) {\n          // If there is an error parsing the URL, assume it is crossDomain,\n          // it can be rejected by the transport if it is invalid\n          s.crossDomain = true;\n        }\n      } // Convert data if not already a string\n\n\n      if (s.data && s.processData && typeof s.data !== \"string\") {\n        s.data = jQuery.param(s.data, s.traditional);\n      } // Apply prefilters\n\n\n      inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); // If request was aborted inside a prefilter, stop there\n\n      if (completed) {\n        return jqXHR;\n      } // We can fire global events as of now if asked to\n      // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\n\n      fireGlobals = jQuery.event && s.global; // Watch for a new set of requests\n\n      if (fireGlobals && jQuery.active++ === 0) {\n        jQuery.event.trigger(\"ajaxStart\");\n      } // Uppercase the type\n\n\n      s.type = s.type.toUpperCase(); // Determine if request has content\n\n      s.hasContent = !rnoContent.test(s.type); // Save the URL in case we're toying with the If-Modified-Since\n      // and/or If-None-Match header later on\n      // Remove hash to simplify url manipulation\n\n      cacheURL = s.url.replace(rhash, \"\"); // More options handling for requests with no content\n\n      if (!s.hasContent) {\n        // Remember the hash so we can put it back\n        uncached = s.url.slice(cacheURL.length); // If data is available and should be processed, append data to url\n\n        if (s.data && (s.processData || typeof s.data === \"string\")) {\n          cacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data; // trac-9682: remove data so that it's not used in an eventual retry\n\n          delete s.data;\n        } // Add or update anti-cache param if needed\n\n\n        if (s.cache === false) {\n          cacheURL = cacheURL.replace(rantiCache, \"$1\");\n          uncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + nonce.guid++ + uncached;\n        } // Put hash and anti-cache on the URL that will be requested (gh-1732)\n\n\n        s.url = cacheURL + uncached; // Change '%20' to '+' if this is encoded form body content (gh-2658)\n      } else if (s.data && s.processData && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n        s.data = s.data.replace(r20, \"+\");\n      } // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\n\n      if (s.ifModified) {\n        if (jQuery.lastModified[cacheURL]) {\n          jqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n        }\n\n        if (jQuery.etag[cacheURL]) {\n          jqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n        }\n      } // Set the correct header, if data is being sent\n\n\n      if (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n        jqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n      } // Set the Accepts header for the server, depending on the dataType\n\n\n      jqXHR.setRequestHeader(\"Accept\", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") : s.accepts[\"*\"]); // Check for headers option\n\n      for (i in s.headers) {\n        jqXHR.setRequestHeader(i, s.headers[i]);\n      } // Allow custom headers/mimetypes and early abort\n\n\n      if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n        // Abort if not done already and return\n        return jqXHR.abort();\n      } // Aborting is no longer a cancellation\n\n\n      strAbort = \"abort\"; // Install callbacks on deferreds\n\n      completeDeferred.add(s.complete);\n      jqXHR.done(s.success);\n      jqXHR.fail(s.error); // Get transport\n\n      transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); // If no transport, we auto-abort\n\n      if (!transport) {\n        done(-1, \"No Transport\");\n      } else {\n        jqXHR.readyState = 1; // Send global event\n\n        if (fireGlobals) {\n          globalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n        } // If request was aborted inside ajaxSend, stop there\n\n\n        if (completed) {\n          return jqXHR;\n        } // Timeout\n\n\n        if (s.async && s.timeout > 0) {\n          timeoutTimer = window.setTimeout(function () {\n            jqXHR.abort(\"timeout\");\n          }, s.timeout);\n        }\n\n        try {\n          completed = false;\n          transport.send(requestHeaders, done);\n        } catch (e) {\n          // Rethrow post-completion exceptions\n          if (completed) {\n            throw e;\n          } // Propagate others as results\n\n\n          done(-1, e);\n        }\n      } // Callback for when everything is done\n\n\n      function done(status, nativeStatusText, responses, headers) {\n        var isSuccess,\n            success,\n            error,\n            response,\n            modified,\n            statusText = nativeStatusText; // Ignore repeat invocations\n\n        if (completed) {\n          return;\n        }\n\n        completed = true; // Clear timeout if it exists\n\n        if (timeoutTimer) {\n          window.clearTimeout(timeoutTimer);\n        } // Dereference transport for early garbage collection\n        // (no matter how long the jqXHR object will be used)\n\n\n        transport = undefined; // Cache response headers\n\n        responseHeadersString = headers || \"\"; // Set readyState\n\n        jqXHR.readyState = status > 0 ? 4 : 0; // Determine if successful\n\n        isSuccess = status >= 200 && status < 300 || status === 304; // Get response data\n\n        if (responses) {\n          response = ajaxHandleResponses(s, jqXHR, responses);\n        } // Use a noop converter for missing script but not if jsonp\n\n\n        if (!isSuccess && jQuery.inArray(\"script\", s.dataTypes) > -1 && jQuery.inArray(\"json\", s.dataTypes) < 0) {\n          s.converters[\"text script\"] = function () {};\n        } // Convert no matter what (that way responseXXX fields are always set)\n\n\n        response = ajaxConvert(s, response, jqXHR, isSuccess); // If successful, handle type chaining\n\n        if (isSuccess) {\n          // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n          if (s.ifModified) {\n            modified = jqXHR.getResponseHeader(\"Last-Modified\");\n\n            if (modified) {\n              jQuery.lastModified[cacheURL] = modified;\n            }\n\n            modified = jqXHR.getResponseHeader(\"etag\");\n\n            if (modified) {\n              jQuery.etag[cacheURL] = modified;\n            }\n          } // if no content\n\n\n          if (status === 204 || s.type === \"HEAD\") {\n            statusText = \"nocontent\"; // if not modified\n          } else if (status === 304) {\n            statusText = \"notmodified\"; // If we have data, let's convert it\n          } else {\n            statusText = response.state;\n            success = response.data;\n            error = response.error;\n            isSuccess = !error;\n          }\n        } else {\n          // Extract error from statusText and normalize for non-aborts\n          error = statusText;\n\n          if (status || !statusText) {\n            statusText = \"error\";\n\n            if (status < 0) {\n              status = 0;\n            }\n          }\n        } // Set data for the fake xhr object\n\n\n        jqXHR.status = status;\n        jqXHR.statusText = (nativeStatusText || statusText) + \"\"; // Success/Error\n\n        if (isSuccess) {\n          deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n        } else {\n          deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n        } // Status-dependent callbacks\n\n\n        jqXHR.statusCode(_statusCode);\n        _statusCode = undefined;\n\n        if (fireGlobals) {\n          globalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\", [jqXHR, s, isSuccess ? success : error]);\n        } // Complete\n\n\n        completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n        if (fireGlobals) {\n          globalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]); // Handle the global AJAX counter\n\n          if (! --jQuery.active) {\n            jQuery.event.trigger(\"ajaxStop\");\n          }\n        }\n      }\n\n      return jqXHR;\n    },\n    getJSON: function getJSON(url, data, callback) {\n      return jQuery.get(url, data, callback, \"json\");\n    },\n    getScript: function getScript(url, callback) {\n      return jQuery.get(url, undefined, callback, \"script\");\n    }\n  });\n  jQuery.each([\"get\", \"post\"], function (_i, method) {\n    jQuery[method] = function (url, data, callback, type) {\n      // Shift arguments if data argument was omitted\n      if (isFunction(data)) {\n        type = type || callback;\n        callback = data;\n        data = undefined;\n      } // The url can be an options object (which then must have .url)\n\n\n      return jQuery.ajax(jQuery.extend({\n        url: url,\n        type: method,\n        dataType: type,\n        data: data,\n        success: callback\n      }, jQuery.isPlainObject(url) && url));\n    };\n  });\n  jQuery.ajaxPrefilter(function (s) {\n    var i;\n\n    for (i in s.headers) {\n      if (i.toLowerCase() === \"content-type\") {\n        s.contentType = s.headers[i] || \"\";\n      }\n    }\n  });\n\n  jQuery._evalUrl = function (url, options, doc) {\n    return jQuery.ajax({\n      url: url,\n      // Make this explicit, since user can override this through ajaxSetup (trac-11264)\n      type: \"GET\",\n      dataType: \"script\",\n      cache: true,\n      async: false,\n      global: false,\n      // Only evaluate the response if it is successful (gh-4126)\n      // dataFilter is not invoked for failure responses, so using it instead\n      // of the default converter is kludgy but it works.\n      converters: {\n        \"text script\": function textScript() {}\n      },\n      dataFilter: function dataFilter(response) {\n        jQuery.globalEval(response, options, doc);\n      }\n    });\n  };\n\n  jQuery.fn.extend({\n    wrapAll: function wrapAll(html) {\n      var wrap;\n\n      if (this[0]) {\n        if (isFunction(html)) {\n          html = html.call(this[0]);\n        } // The elements to wrap the target around\n\n\n        wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n        if (this[0].parentNode) {\n          wrap.insertBefore(this[0]);\n        }\n\n        wrap.map(function () {\n          var elem = this;\n\n          while (elem.firstElementChild) {\n            elem = elem.firstElementChild;\n          }\n\n          return elem;\n        }).append(this);\n      }\n\n      return this;\n    },\n    wrapInner: function wrapInner(html) {\n      if (isFunction(html)) {\n        return this.each(function (i) {\n          jQuery(this).wrapInner(html.call(this, i));\n        });\n      }\n\n      return this.each(function () {\n        var self = jQuery(this),\n            contents = self.contents();\n\n        if (contents.length) {\n          contents.wrapAll(html);\n        } else {\n          self.append(html);\n        }\n      });\n    },\n    wrap: function wrap(html) {\n      var htmlIsFunction = isFunction(html);\n      return this.each(function (i) {\n        jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n      });\n    },\n    unwrap: function unwrap(selector) {\n      this.parent(selector).not(\"body\").each(function () {\n        jQuery(this).replaceWith(this.childNodes);\n      });\n      return this;\n    }\n  });\n\n  jQuery.expr.pseudos.hidden = function (elem) {\n    return !jQuery.expr.pseudos.visible(elem);\n  };\n\n  jQuery.expr.pseudos.visible = function (elem) {\n    return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n  };\n\n  jQuery.ajaxSettings.xhr = function () {\n    try {\n      return new window.XMLHttpRequest();\n    } catch (e) {}\n  };\n\n  var xhrSuccessStatus = {\n    // File protocol always yields status code 0, assume 200\n    0: 200,\n    // Support: IE <=9 only\n    // trac-1450: sometimes IE returns 1223 when it should be 204\n    1223: 204\n  },\n      xhrSupported = jQuery.ajaxSettings.xhr();\n  support.cors = !!xhrSupported && \"withCredentials\" in xhrSupported;\n  support.ajax = xhrSupported = !!xhrSupported;\n  jQuery.ajaxTransport(function (options) {\n    var _callback, errorCallback; // Cross domain only allowed if supported through XMLHttpRequest\n\n\n    if (support.cors || xhrSupported && !options.crossDomain) {\n      return {\n        send: function send(headers, complete) {\n          var i,\n              xhr = options.xhr();\n          xhr.open(options.type, options.url, options.async, options.username, options.password); // Apply custom fields if provided\n\n          if (options.xhrFields) {\n            for (i in options.xhrFields) {\n              xhr[i] = options.xhrFields[i];\n            }\n          } // Override mime type if needed\n\n\n          if (options.mimeType && xhr.overrideMimeType) {\n            xhr.overrideMimeType(options.mimeType);\n          } // X-Requested-With header\n          // For cross-domain requests, seeing as conditions for a preflight are\n          // akin to a jigsaw puzzle, we simply never set it to be sure.\n          // (it can always be set on a per-request basis or even using ajaxSetup)\n          // For same-domain requests, won't change header if already provided.\n\n\n          if (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n            headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n          } // Set headers\n\n\n          for (i in headers) {\n            xhr.setRequestHeader(i, headers[i]);\n          } // Callback\n\n\n          _callback = function callback(type) {\n            return function () {\n              if (_callback) {\n                _callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;\n\n                if (type === \"abort\") {\n                  xhr.abort();\n                } else if (type === \"error\") {\n                  // Support: IE <=9 only\n                  // On a manual native abort, IE9 throws\n                  // errors on any property access that is not readyState\n                  if (typeof xhr.status !== \"number\") {\n                    complete(0, \"error\");\n                  } else {\n                    complete( // File: protocol always yields status 0; see trac-8605, trac-14207\n                    xhr.status, xhr.statusText);\n                  }\n                } else {\n                  complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, // Support: IE <=9 only\n                  // IE9 has no XHR2 but throws on binary (trac-11426)\n                  // For XHR2 non-text, let the caller handle it (gh-2498)\n                  (xhr.responseType || \"text\") !== \"text\" || typeof xhr.responseText !== \"string\" ? {\n                    binary: xhr.response\n                  } : {\n                    text: xhr.responseText\n                  }, xhr.getAllResponseHeaders());\n                }\n              }\n            };\n          }; // Listen to events\n\n\n          xhr.onload = _callback();\n          errorCallback = xhr.onerror = xhr.ontimeout = _callback(\"error\"); // Support: IE 9 only\n          // Use onreadystatechange to replace onabort\n          // to handle uncaught aborts\n\n          if (xhr.onabort !== undefined) {\n            xhr.onabort = errorCallback;\n          } else {\n            xhr.onreadystatechange = function () {\n              // Check readyState before timeout as it changes\n              if (xhr.readyState === 4) {\n                // Allow onerror to be called first,\n                // but that will not handle a native abort\n                // Also, save errorCallback to a variable\n                // as xhr.onerror cannot be accessed\n                window.setTimeout(function () {\n                  if (_callback) {\n                    errorCallback();\n                  }\n                });\n              }\n            };\n          } // Create the abort callback\n\n\n          _callback = _callback(\"abort\");\n\n          try {\n            // Do send the request (this may raise an exception)\n            xhr.send(options.hasContent && options.data || null);\n          } catch (e) {\n            // trac-14683: Only rethrow if this hasn't been notified as an error yet\n            if (_callback) {\n              throw e;\n            }\n          }\n        },\n        abort: function abort() {\n          if (_callback) {\n            _callback();\n          }\n        }\n      };\n    }\n  }); // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\n  jQuery.ajaxPrefilter(function (s) {\n    if (s.crossDomain) {\n      s.contents.script = false;\n    }\n  }); // Install script dataType\n\n  jQuery.ajaxSetup({\n    accepts: {\n      script: \"text/javascript, application/javascript, \" + \"application/ecmascript, application/x-ecmascript\"\n    },\n    contents: {\n      script: /\\b(?:java|ecma)script\\b/\n    },\n    converters: {\n      \"text script\": function textScript(text) {\n        jQuery.globalEval(text);\n        return text;\n      }\n    }\n  }); // Handle cache's special case and crossDomain\n\n  jQuery.ajaxPrefilter(\"script\", function (s) {\n    if (s.cache === undefined) {\n      s.cache = false;\n    }\n\n    if (s.crossDomain) {\n      s.type = \"GET\";\n    }\n  }); // Bind script tag hack transport\n\n  jQuery.ajaxTransport(\"script\", function (s) {\n    // This transport only deals with cross domain or forced-by-attrs requests\n    if (s.crossDomain || s.scriptAttrs) {\n      var script, _callback2;\n\n      return {\n        send: function send(_, complete) {\n          script = jQuery(\"<script>\").attr(s.scriptAttrs || {}).prop({\n            charset: s.scriptCharset,\n            src: s.url\n          }).on(\"load error\", _callback2 = function callback(evt) {\n            script.remove();\n            _callback2 = null;\n\n            if (evt) {\n              complete(evt.type === \"error\" ? 404 : 200, evt.type);\n            }\n          }); // Use native DOM manipulation to avoid our domManip AJAX trickery\n\n          document.head.appendChild(script[0]);\n        },\n        abort: function abort() {\n          if (_callback2) {\n            _callback2();\n          }\n        }\n      };\n    }\n  });\n  var oldCallbacks = [],\n      rjsonp = /(=)\\?(?=&|$)|\\?\\?/; // Default jsonp settings\n\n  jQuery.ajaxSetup({\n    jsonp: \"callback\",\n    jsonpCallback: function jsonpCallback() {\n      var callback = oldCallbacks.pop() || jQuery.expando + \"_\" + nonce.guid++;\n      this[callback] = true;\n      return callback;\n    }\n  }); // Detect, normalize options and install callbacks for jsonp requests\n\n  jQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n    var callbackName,\n        overwritten,\n        responseContainer,\n        jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? \"url\" : typeof s.data === \"string\" && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0 && rjsonp.test(s.data) && \"data\"); // Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\n    if (jsonProp || s.dataTypes[0] === \"jsonp\") {\n      // Get callback name, remembering preexisting value associated with it\n      callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback; // Insert callback into url or form data\n\n      if (jsonProp) {\n        s[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n      } else if (s.jsonp !== false) {\n        s.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n      } // Use data converter to retrieve json after script execution\n\n\n      s.converters[\"script json\"] = function () {\n        if (!responseContainer) {\n          jQuery.error(callbackName + \" was not called\");\n        }\n\n        return responseContainer[0];\n      }; // Force json dataType\n\n\n      s.dataTypes[0] = \"json\"; // Install callback\n\n      overwritten = window[callbackName];\n\n      window[callbackName] = function () {\n        responseContainer = arguments;\n      }; // Clean-up function (fires after converters)\n\n\n      jqXHR.always(function () {\n        // If previous value didn't exist - remove it\n        if (overwritten === undefined) {\n          jQuery(window).removeProp(callbackName); // Otherwise restore preexisting value\n        } else {\n          window[callbackName] = overwritten;\n        } // Save back as free\n\n\n        if (s[callbackName]) {\n          // Make sure that re-using the options doesn't screw things around\n          s.jsonpCallback = originalSettings.jsonpCallback; // Save the callback name for future use\n\n          oldCallbacks.push(callbackName);\n        } // Call if it was a function and we have a response\n\n\n        if (responseContainer && isFunction(overwritten)) {\n          overwritten(responseContainer[0]);\n        }\n\n        responseContainer = overwritten = undefined;\n      }); // Delegate to script\n\n      return \"script\";\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\n\n  support.createHTMLDocument = function () {\n    var body = document.implementation.createHTMLDocument(\"\").body;\n    body.innerHTML = \"<form></form><form></form>\";\n    return body.childNodes.length === 2;\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\n\n\n  jQuery.parseHTML = function (data, context, keepScripts) {\n    if (typeof data !== \"string\") {\n      return [];\n    }\n\n    if (typeof context === \"boolean\") {\n      keepScripts = context;\n      context = false;\n    }\n\n    var base, parsed, scripts;\n\n    if (!context) {\n      // Stop scripts or inline event handlers from being executed immediately\n      // by using document.implementation\n      if (support.createHTMLDocument) {\n        context = document.implementation.createHTMLDocument(\"\"); // Set the base href for the created document\n        // so any parsed elements with URLs\n        // are based on the document's URL (gh-2965)\n\n        base = context.createElement(\"base\");\n        base.href = document.location.href;\n        context.head.appendChild(base);\n      } else {\n        context = document;\n      }\n    }\n\n    parsed = rsingleTag.exec(data);\n    scripts = !keepScripts && []; // Single tag\n\n    if (parsed) {\n      return [context.createElement(parsed[1])];\n    }\n\n    parsed = buildFragment([data], context, scripts);\n\n    if (scripts && scripts.length) {\n      jQuery(scripts).remove();\n    }\n\n    return jQuery.merge([], parsed.childNodes);\n  };\n  /**\n   * Load a url into a page\n   */\n\n\n  jQuery.fn.load = function (url, params, callback) {\n    var selector,\n        type,\n        response,\n        self = this,\n        off = url.indexOf(\" \");\n\n    if (off > -1) {\n      selector = stripAndCollapse(url.slice(off));\n      url = url.slice(0, off);\n    } // If it's a function\n\n\n    if (isFunction(params)) {\n      // We assume that it's the callback\n      callback = params;\n      params = undefined; // Otherwise, build a param string\n    } else if (params && _typeof(params) === \"object\") {\n      type = \"POST\";\n    } // If we have elements to modify, make the request\n\n\n    if (self.length > 0) {\n      jQuery.ajax({\n        url: url,\n        // If \"type\" variable is undefined, then \"GET\" method will be used.\n        // Make value of this field explicit since\n        // user can override it through ajaxSetup method\n        type: type || \"GET\",\n        dataType: \"html\",\n        data: params\n      }).done(function (responseText) {\n        // Save response for use in complete callback\n        response = arguments;\n        self.html(selector ? // If a selector was specified, locate the right elements in a dummy div\n        // Exclude scripts to avoid IE 'Permission Denied' errors\n        jQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) : // Otherwise use the full result\n        responseText); // If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n        // but they are ignored because response was set above.\n        // If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n      }).always(callback && function (jqXHR, status) {\n        self.each(function () {\n          callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n        });\n      });\n    }\n\n    return this;\n  };\n\n  jQuery.expr.pseudos.animated = function (elem) {\n    return jQuery.grep(jQuery.timers, function (fn) {\n      return elem === fn.elem;\n    }).length;\n  };\n\n  jQuery.offset = {\n    setOffset: function setOffset(elem, options, i) {\n      var curPosition,\n          curLeft,\n          curCSSTop,\n          curTop,\n          curOffset,\n          curCSSLeft,\n          calculatePosition,\n          position = jQuery.css(elem, \"position\"),\n          curElem = jQuery(elem),\n          props = {}; // Set position first, in-case top/left are set even on static elem\n\n      if (position === \"static\") {\n        elem.style.position = \"relative\";\n      }\n\n      curOffset = curElem.offset();\n      curCSSTop = jQuery.css(elem, \"top\");\n      curCSSLeft = jQuery.css(elem, \"left\");\n      calculatePosition = (position === \"absolute\" || position === \"fixed\") && (curCSSTop + curCSSLeft).indexOf(\"auto\") > -1; // Need to be able to calculate position if either\n      // top or left is auto and position is either absolute or fixed\n\n      if (calculatePosition) {\n        curPosition = curElem.position();\n        curTop = curPosition.top;\n        curLeft = curPosition.left;\n      } else {\n        curTop = parseFloat(curCSSTop) || 0;\n        curLeft = parseFloat(curCSSLeft) || 0;\n      }\n\n      if (isFunction(options)) {\n        // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n        options = options.call(elem, i, jQuery.extend({}, curOffset));\n      }\n\n      if (options.top != null) {\n        props.top = options.top - curOffset.top + curTop;\n      }\n\n      if (options.left != null) {\n        props.left = options.left - curOffset.left + curLeft;\n      }\n\n      if (\"using\" in options) {\n        options.using.call(elem, props);\n      } else {\n        curElem.css(props);\n      }\n    }\n  };\n  jQuery.fn.extend({\n    // offset() relates an element's border box to the document origin\n    offset: function offset(options) {\n      // Preserve chaining for setter\n      if (arguments.length) {\n        return options === undefined ? this : this.each(function (i) {\n          jQuery.offset.setOffset(this, options, i);\n        });\n      }\n\n      var rect,\n          win,\n          elem = this[0];\n\n      if (!elem) {\n        return;\n      } // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n      // Support: IE <=11 only\n      // Running getBoundingClientRect on a\n      // disconnected node in IE throws an error\n\n\n      if (!elem.getClientRects().length) {\n        return {\n          top: 0,\n          left: 0\n        };\n      } // Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\n\n      rect = elem.getBoundingClientRect();\n      win = elem.ownerDocument.defaultView;\n      return {\n        top: rect.top + win.pageYOffset,\n        left: rect.left + win.pageXOffset\n      };\n    },\n    // position() relates an element's margin box to its offset parent's padding box\n    // This corresponds to the behavior of CSS absolute positioning\n    position: function position() {\n      if (!this[0]) {\n        return;\n      }\n\n      var offsetParent,\n          offset,\n          doc,\n          elem = this[0],\n          parentOffset = {\n        top: 0,\n        left: 0\n      }; // position:fixed elements are offset from the viewport, which itself always has zero offset\n\n      if (jQuery.css(elem, \"position\") === \"fixed\") {\n        // Assume position:fixed implies availability of getBoundingClientRect\n        offset = elem.getBoundingClientRect();\n      } else {\n        offset = this.offset(); // Account for the *real* offset parent, which can be the document or its root element\n        // when a statically positioned element is identified\n\n        doc = elem.ownerDocument;\n        offsetParent = elem.offsetParent || doc.documentElement;\n\n        while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, \"position\") === \"static\") {\n          offsetParent = offsetParent.parentNode;\n        }\n\n        if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n          // Incorporate borders into its offset, since they are outside its content origin\n          parentOffset = jQuery(offsetParent).offset();\n          parentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n          parentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n        }\n      } // Subtract parent offsets and element margins\n\n\n      return {\n        top: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n        left: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n      };\n    },\n    // This method will return documentElement in the following cases:\n    // 1) For the element inside the iframe without offsetParent, this method will return\n    //    documentElement of the parent window\n    // 2) For the hidden or detached element\n    // 3) For body or html element, i.e. in case of the html node - it will return itself\n    //\n    // but those exceptions were never presented as a real life use-cases\n    // and might be considered as more preferable results.\n    //\n    // This logic, however, is not guaranteed and can change at any point in the future\n    offsetParent: function offsetParent() {\n      return this.map(function () {\n        var offsetParent = this.offsetParent;\n\n        while (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n          offsetParent = offsetParent.offsetParent;\n        }\n\n        return offsetParent || documentElement;\n      });\n    }\n  }); // Create scrollLeft and scrollTop methods\n\n  jQuery.each({\n    scrollLeft: \"pageXOffset\",\n    scrollTop: \"pageYOffset\"\n  }, function (method, prop) {\n    var top = \"pageYOffset\" === prop;\n\n    jQuery.fn[method] = function (val) {\n      return access(this, function (elem, method, val) {\n        // Coalesce documents and windows\n        var win;\n\n        if (isWindow(elem)) {\n          win = elem;\n        } else if (elem.nodeType === 9) {\n          win = elem.defaultView;\n        }\n\n        if (val === undefined) {\n          return win ? win[prop] : elem[method];\n        }\n\n        if (win) {\n          win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);\n        } else {\n          elem[method] = val;\n        }\n      }, method, val, arguments.length);\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\n\n  jQuery.each([\"top\", \"left\"], function (_i, prop) {\n    jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function (elem, computed) {\n      if (computed) {\n        computed = curCSS(elem, prop); // If curCSS returns percentage, fallback to offset\n\n        return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + \"px\" : computed;\n      }\n    });\n  }); // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\n  jQuery.each({\n    Height: \"height\",\n    Width: \"width\"\n  }, function (name, type) {\n    jQuery.each({\n      padding: \"inner\" + name,\n      content: type,\n      \"\": \"outer\" + name\n    }, function (defaultExtra, funcName) {\n      // Margin is only for outerHeight, outerWidth\n      jQuery.fn[funcName] = function (margin, value) {\n        var chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n            extra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n        return access(this, function (elem, type, value) {\n          var doc;\n\n          if (isWindow(elem)) {\n            // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n            return funcName.indexOf(\"outer\") === 0 ? elem[\"inner\" + name] : elem.document.documentElement[\"client\" + name];\n          } // Get document width or height\n\n\n          if (elem.nodeType === 9) {\n            doc = elem.documentElement; // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n            // whichever is greatest\n\n            return Math.max(elem.body[\"scroll\" + name], doc[\"scroll\" + name], elem.body[\"offset\" + name], doc[\"offset\" + name], doc[\"client\" + name]);\n          }\n\n          return value === undefined ? // Get width or height on the element, requesting but not forcing parseFloat\n          jQuery.css(elem, type, extra) : // Set width or height on the element\n          jQuery.style(elem, type, value, extra);\n        }, type, chainable ? margin : undefined, chainable);\n      };\n    });\n  });\n  jQuery.each([\"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\"], function (_i, type) {\n    jQuery.fn[type] = function (fn) {\n      return this.on(type, fn);\n    };\n  });\n  jQuery.fn.extend({\n    bind: function bind(types, data, fn) {\n      return this.on(types, null, data, fn);\n    },\n    unbind: function unbind(types, fn) {\n      return this.off(types, null, fn);\n    },\n    delegate: function delegate(selector, types, data, fn) {\n      return this.on(types, selector, data, fn);\n    },\n    undelegate: function undelegate(selector, types, fn) {\n      // ( namespace ) or ( selector, types [, fn] )\n      return arguments.length === 1 ? this.off(selector, \"**\") : this.off(types, selector || \"**\", fn);\n    },\n    hover: function hover(fnOver, fnOut) {\n      return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n    }\n  });\n  jQuery.each((\"blur focus focusin focusout resize scroll click dblclick \" + \"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" + \"change select submit keydown keypress keyup contextmenu\").split(\" \"), function (_i, name) {\n    // Handle event binding\n    jQuery.fn[name] = function (data, fn) {\n      return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);\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.\n\n  var rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g; // 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\n\n  jQuery.proxy = function (fn, context) {\n    var tmp, args, proxy;\n\n    if (typeof context === \"string\") {\n      tmp = fn[context];\n      context = fn;\n      fn = tmp;\n    } // Quick check to determine if target is callable, in the spec\n    // this throws a TypeError, but we will just return undefined.\n\n\n    if (!isFunction(fn)) {\n      return undefined;\n    } // Simulated bind\n\n\n    args = _slice.call(arguments, 2);\n\n    proxy = function proxy() {\n      return fn.apply(context || this, args.concat(_slice.call(arguments)));\n    }; // Set the guid of unique handler to the same of original handler, so it can be removed\n\n\n    proxy.guid = fn.guid = fn.guid || jQuery.guid++;\n    return proxy;\n  };\n\n  jQuery.holdReady = function (hold) {\n    if (hold) {\n      jQuery.readyWait++;\n    } else {\n      jQuery.ready(true);\n    }\n  };\n\n  jQuery.isArray = Array.isArray;\n  jQuery.parseJSON = JSON.parse;\n  jQuery.nodeName = nodeName;\n  jQuery.isFunction = isFunction;\n  jQuery.isWindow = isWindow;\n  jQuery.camelCase = camelCase;\n  jQuery.type = toType;\n  jQuery.now = Date.now;\n\n  jQuery.isNumeric = function (obj) {\n    // As of jQuery 3.0, isNumeric is limited to\n    // strings and numbers (primitives or objects)\n    // that can be coerced to finite numbers (gh-2662)\n    var type = jQuery.type(obj);\n    return (type === \"number\" || type === \"string\") && // parseFloat NaNs numeric-cast false positives (\"\")\n    // ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n    // subtraction forces infinities to NaN\n    !isNaN(obj - parseFloat(obj));\n  };\n\n  jQuery.trim = function (text) {\n    return text == null ? \"\" : (text + \"\").replace(rtrim, \"$1\");\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  // 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\n\n  if (typeof define === \"function\" && define.amd) {\n    define(\"jquery\", [], function () {\n      return jQuery;\n    });\n  }\n\n  var // Map over jQuery in case of overwrite\n  _jQuery = window.jQuery,\n      // Map over the $ in case of overwrite\n  _$ = window.$;\n\n  jQuery.noConflict = function (deep) {\n    if (window.$ === jQuery) {\n      window.$ = _$;\n    }\n\n    if (deep && window.jQuery === jQuery) {\n      window.jQuery = _jQuery;\n    }\n\n    return jQuery;\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)\n\n\n  if (typeof noGlobal === \"undefined\") {\n    window.jQuery = window.$ = jQuery;\n  }\n\n  return jQuery;\n});","module.exports = function() {\n\tthrow new Error(\"define cannot be used indirect\");\n};\n","\n$(document).on('turbo:load', function () {\n  const $dropdown = $('.dropdown')\n  const $dropdownToggle = $('.dropdown-toggle')\n  const $dropdownMenu = $('.dropdown-menu')\n  const showClass = 'show'\n\n  $(window).on('turbo:load resize', function () {\n    if (this.matchMedia('(min-width: 768px)').matches) {\n      $dropdown.hover(\n        function () {\n          const $this = $(this)\n          $this.addClass(showClass)\n          $this.find($dropdownToggle).attr('aria-expanded', 'true')\n          $this.find($dropdownMenu).addClass(showClass)\n        },\n        function () {\n          const $this = $(this)\n          $this.removeClass(showClass)\n          $this.find($dropdownToggle).attr('aria-expanded', 'false')\n          $this.find($dropdownMenu).removeClass(showClass)\n        }\n      )\n    } else {\n      $dropdown.off('mouseenter mouseleave')\n    }\n  })\n})\n","$(document).on('turbo:load', function () {\n  $('#team_name').keyup(function (evt) {\n    $('#team_subdomain').val(evt.target.value.toLowerCase().replace(/\\s+/g, ''))\n  })\n})\n\n$(document).on('turbo:load', function () {\n  var titles = document.getElementsByClassName('faq_wrap')\n  for (i = 0; i < titles.length; i++) {\n    titles[i].addEventListener('click', function () {\n      $(this).children().next().toggle('fast')\n    })\n  }\n})\n\n$(document).on('turbo:load', function () {\n  $('#faq_search').on('keyup', function () {\n    var value = $(this).val().toLowerCase()\n    $('.faq_title').filter(function () {\n      $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)\n    })\n  })\n})\n","//Toggle Details for Group Table\n$(document).on('turbo:load', function () {\n  rows = document.getElementsByClassName('group_row')\n  if (rows) {\n    for (i = 0; i < rows.length; i++) {\n      rows[i].addEventListener('click', function () {\n        if (this.nextElementSibling.style.display === 'none') {\n          for (j = 0; j < rows.length; j++) {\n            rows[j].classList.remove('active_row')\n            rows[j].nextElementSibling.style.display = 'none'\n          }\n          this.nextElementSibling.style.display = 'table-row'\n          this.classList.add('active_row')\n        } else {\n          this.nextElementSibling.style.display = 'none'\n          this.classList.remove('active_row')\n        }\n      })\n    }\n  }\n})\n","$(document).on('turbo:load', function () {\n  $('#searchInputType').on('keyup', function () {\n    var value = $(this).val().toLowerCase()\n    $('.flex_item').filter(function () {\n      $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)\n    })\n  })\n})\n\n$(document).on('turbo:load', function () {\n  $('#typeGroupSwitch').click(function () {\n    if ($(this).prop('checked')) {\n      $('#type_quantity').show()\n    } else {\n      $('#type_quantity').hide()\n    }\n  })\n})\n\n$(document).on('turbo:load', function () {\n  $('#clickme').click(function () {\n    $('.sub_bg').toggle('slow', function () {})\n  })\n})\n","$(document).on('turbo:load', function () {\n  if (document.querySelector('.custom-file')) {\n    document\n      .querySelector('.custom-file')\n      .addEventListener('change', function (e) {\n        var fileName = document.getElementById('inputGroupFile01').files[0].name\n        var nextSibling = e.target.nextElementSibling\n        nextSibling.innerText = fileName\n      })\n  }\n})\n\nfunction validateInvitationForm() {\n  var approved_domains = $('#approved_domains').html()\n  var mail = $('#user_email').val()\n  var domain = mail.substring(mail.lastIndexOf('@') + 1)\n\n  if (approved_domains.includes(domain)) {\n    return true\n  } else {\n    alert(\n      'Die E-Mail Adresse entspricht nicht den angeforderten Kriterien. \\n \\nErlaubte E-Mail Domains: ' +\n        approved_domains\n    )\n    return false\n  }\n}\n","$(document).on('turbo:load', function () {\n  if ($(\"#booking_anonymous_booking_attributes_name\").val() != '' && $(\"#anonymousFieldsSwitch\").length && $(\"#booking_anonymous_booking_attributes_name\").length){\n    $(\"#anonymousFieldsSwitch\").prop('checked', true);\n    $(\"#anonymousFields\").show();\n    $(\"#userField\").hide();\n  };\n\n  $(\"#anonymousFieldsSwitch\").click(function(){\n    if ($(this).prop(\"checked\")) {\n          $(\"#anonymousFields\").show(100);\n          $(\"#userField\").hide(100);\n          document.getElementById(\"confirmation_comment\").style.display = \"block\"\n\n    } else {\n      if ($(\"#booking_anonymous_booking_attributes_name\").val() != ''){\n        var r = confirm(\"Sollen die Eingaben gelöscht werden?\");\n        if (r == true) {\n          $(\"#booking_anonymous_booking_attributes_name\").val(\"\");\n          $(\"#booking_anonymous_booking_attributes_phone\").val(\"\");\n          $(\"#booking_anonymous_booking_attributes_email\").val(\"\");\n          $(\"#anonymousFields\").hide(100);\n          $(\"#userField\").show(100);\n\n        }\n      } else {\n        $(\"#anonymousFields\").hide(100);\n        $(\"#userField\").show(100);\n        document.getElementById(\"confirmation_comment\").style.display = \"none\"\n      }\n    }\n  });\n})\n\nfunction show_confirmation_comment_field(current_user) {\n  selected_user = document.getElementById(\"booking_user_id\").value\n  if (selected_user != current_user) {\n    $('#confirmation_comment').show()\n  } else {\n    $('#confirmation_comment').hide()\n  }\n}\n\nvar empty_image = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==\"\n","function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport _regeneratorRuntime from \"@babel/runtime/regenerator\";\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n* Tom Select v2.2.2\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n*/\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.TomSelect = factory());\n})(this, function () {\n  'use strict';\n  /**\n   * MicroEvent - to make any js object an event emitter\n   *\n   * - pure javascript - server compatible, browser compatible\n   * - dont rely on the browser doms\n   * - super simple - you get it immediatly, no mistery, no magic involved\n   *\n   * @author Jerome Etienne (https://github.com/jeromeetienne)\n   */\n\n  /**\n   * Execute callback for each event in space separated list of event names\n   *\n   */\n\n  var _marked = /*#__PURE__*/_regeneratorRuntime.mark(generator);\n\n  function forEvents(events, callback) {\n    events.split(/\\s+/).forEach(function (event) {\n      callback(event);\n    });\n  }\n\n  var MicroEvent = /*#__PURE__*/function () {\n    function MicroEvent() {\n      _classCallCheck(this, MicroEvent);\n\n      this._events = void 0;\n      this._events = {};\n    }\n\n    _createClass(MicroEvent, [{\n      key: \"on\",\n      value: function on(events, fct) {\n        var _this = this;\n\n        forEvents(events, function (event) {\n          var event_array = _this._events[event] || [];\n          event_array.push(fct);\n          _this._events[event] = event_array;\n        });\n      }\n    }, {\n      key: \"off\",\n      value: function off(events, fct) {\n        var _this2 = this;\n\n        var n = arguments.length;\n\n        if (n === 0) {\n          this._events = {};\n          return;\n        }\n\n        forEvents(events, function (event) {\n          if (n === 1) {\n            delete _this2._events[event];\n            return;\n          }\n\n          var event_array = _this2._events[event];\n          if (event_array === undefined) return;\n          event_array.splice(event_array.indexOf(fct), 1);\n          _this2._events[event] = event_array;\n        });\n      }\n    }, {\n      key: \"trigger\",\n      value: function trigger(events) {\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n\n        var self = this;\n        forEvents(events, function (event) {\n          var event_array = self._events[event];\n          if (event_array === undefined) return;\n          event_array.forEach(function (fct) {\n            fct.apply(self, args);\n          });\n        });\n      }\n    }]);\n\n    return MicroEvent;\n  }();\n  /**\n   * microplugin.js\n   * Copyright (c) 2013 Brian Reavis & contributors\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   * @author Brian Reavis <brian@thirdroute.com>\n   */\n\n\n  function MicroPlugin(Interface) {\n    Interface.plugins = {};\n    return /*#__PURE__*/function (_Interface) {\n      _inherits(_class, _Interface);\n\n      var _super = _createSuper(_class);\n\n      function _class() {\n        var _this3;\n\n        _classCallCheck(this, _class);\n\n        for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n          args[_key2] = arguments[_key2];\n        }\n\n        _this3 = _super.call.apply(_super, [this].concat(args));\n        _this3.plugins = {\n          names: [],\n          settings: {},\n          requested: {},\n          loaded: {}\n        };\n        return _this3;\n      }\n      /**\n       * Registers a plugin.\n       *\n       * @param {function} fn\n       */\n\n\n      _createClass(_class, [{\n        key: \"initializePlugins\",\n        value:\n        /**\n         * Initializes the listed plugins (with options).\n         * Acceptable formats:\n         *\n         * List (without options):\n         *   ['a', 'b', 'c']\n         *\n         * List (with options):\n         *   [{'name': 'a', options: {}}, {'name': 'b', options: {}}]\n         *\n         * Hash (with options):\n         *   {'a': { ... }, 'b': { ... }, 'c': { ... }}\n         *\n         * @param {array|object} plugins\n         */\n        function initializePlugins(plugins) {\n          var key, name;\n          var self = this;\n          var queue = [];\n\n          if (Array.isArray(plugins)) {\n            plugins.forEach(function (plugin) {\n              if (typeof plugin === 'string') {\n                queue.push(plugin);\n              } else {\n                self.plugins.settings[plugin.name] = plugin.options;\n                queue.push(plugin.name);\n              }\n            });\n          } else if (plugins) {\n            for (key in plugins) {\n              if (plugins.hasOwnProperty(key)) {\n                self.plugins.settings[key] = plugins[key];\n                queue.push(key);\n              }\n            }\n          }\n\n          while (name = queue.shift()) {\n            self.require(name);\n          }\n        }\n      }, {\n        key: \"loadPlugin\",\n        value: function loadPlugin(name) {\n          var self = this;\n          var plugins = self.plugins;\n          var plugin = Interface.plugins[name];\n\n          if (!Interface.plugins.hasOwnProperty(name)) {\n            throw new Error('Unable to find \"' + name + '\" plugin');\n          }\n\n          plugins.requested[name] = true;\n          plugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);\n          plugins.names.push(name);\n        }\n        /**\n         * Initializes a plugin.\n         *\n         */\n\n      }, {\n        key: \"require\",\n        value: function require(name) {\n          var self = this;\n          var plugins = self.plugins;\n\n          if (!self.plugins.loaded.hasOwnProperty(name)) {\n            if (plugins.requested[name]) {\n              throw new Error('Plugin has circular dependency (\"' + name + '\")');\n            }\n\n            self.loadPlugin(name);\n          }\n\n          return plugins.loaded[name];\n        }\n      }], [{\n        key: \"define\",\n        value: function define(name, fn) {\n          Interface.plugins[name] = {\n            'name': name,\n            'fn': fn\n          };\n        }\n      }]);\n\n      return _class;\n    }(Interface);\n  }\n  /*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\n\n  /**\n   * Convert array of strings to a regular expression\n   *\tex ['ab','a'] => (?:ab|a)\n   * \tex ['a','b'] => [ab]\n   * @param {string[]} chars\n   * @return {string}\n   */\n\n\n  var arrayToPattern = function arrayToPattern(chars) {\n    chars = chars.filter(Boolean);\n\n    if (chars.length < 2) {\n      return chars[0] || '';\n    }\n\n    return maxValueLength(chars) == 1 ? '[' + chars.join('') + ']' : '(?:' + chars.join('|') + ')';\n  };\n  /**\n   * @param {string[]} array\n   * @return {string}\n   */\n\n\n  var sequencePattern = function sequencePattern(array) {\n    if (!hasDuplicates(array)) {\n      return array.join('');\n    }\n\n    var pattern = '';\n    var prev_char_count = 0;\n\n    var prev_pattern = function prev_pattern() {\n      if (prev_char_count > 1) {\n        pattern += '{' + prev_char_count + '}';\n      }\n    };\n\n    array.forEach(function (char, i) {\n      if (char === array[i - 1]) {\n        prev_char_count++;\n        return;\n      }\n\n      prev_pattern();\n      pattern += char;\n      prev_char_count = 1;\n    });\n    prev_pattern();\n    return pattern;\n  };\n  /**\n   * Convert array of strings to a regular expression\n   *\tex ['ab','a'] => (?:ab|a)\n   * \tex ['a','b'] => [ab]\n   * @param {Set<string>} chars\n   * @return {string}\n   */\n\n\n  var setToPattern = function setToPattern(chars) {\n    var array = toArray(chars);\n    return arrayToPattern(array);\n  };\n  /**\n   *\n   * https://stackoverflow.com/questions/7376598/in-javascript-how-do-i-check-if-an-array-has-duplicate-values\n   * @param {any[]} array\n   */\n\n\n  var hasDuplicates = function hasDuplicates(array) {\n    return new Set(array).size !== array.length;\n  };\n  /**\n   * https://stackoverflow.com/questions/63006601/why-does-u-throw-an-invalid-escape-error\n   * @param {string} str\n   * @return {string}\n   */\n\n\n  var escape_regex = function escape_regex(str) {\n    return (str + '').replace(/([\\$\\(-\\+\\.\\?\\[-\\^\\{-\\}])/g, '\\\\$1');\n  };\n  /**\n   * Return the max length of array values\n   * @param {string[]} array\n   *\n   */\n\n\n  var maxValueLength = function maxValueLength(array) {\n    return array.reduce(function (longest, value) {\n      return Math.max(longest, unicodeLength(value));\n    }, 0);\n  };\n  /**\n   * @param {string} str\n   */\n\n\n  var unicodeLength = function unicodeLength(str) {\n    return toArray(str).length;\n  };\n  /**\n   * @param {any} p\n   * @return {any[]}\n   */\n\n\n  var toArray = function toArray(p) {\n    return Array.from(p);\n  };\n  /*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\n\n  /**\n   * Get all possible combinations of substrings that add up to the given string\n   * https://stackoverflow.com/questions/30169587/find-all-the-combination-of-substrings-that-add-up-to-the-given-string\n   * @param {string} input\n   * @return {string[][]}\n   */\n\n\n  var allSubstrings = function allSubstrings(input) {\n    if (input.length === 1) return [[input]];\n    /** @type {string[][]} */\n\n    var result = [];\n    var start = input.substring(1);\n    var suba = allSubstrings(start);\n    suba.forEach(function (subresult) {\n      var tmp = subresult.slice(0);\n      tmp[0] = input.charAt(0) + tmp[0];\n      result.push(tmp);\n      tmp = subresult.slice(0);\n      tmp.unshift(input.charAt(0));\n      result.push(tmp);\n    });\n    return result;\n  };\n  /*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\n\n  /**\n   * @typedef {{[key:string]:string}} TUnicodeMap\n   * @typedef {{[key:string]:Set<string>}} TUnicodeSets\n   * @typedef {[[number,number]]} TCodePoints\n   * @typedef {{folded:string,composed:string,code_point:number}} TCodePointObj\n   * @typedef {{start:number,end:number,length:number,substr:string}} TSequencePart\n   */\n\n  /** @type {TCodePoints} */\n\n\n  var code_points = [[0, 65535]];\n  var accent_pat = \"[\\u0300-\\u036F\\xB7\\u02BE\\u02BC]\";\n  /** @type {TUnicodeMap} */\n\n  var unicode_map;\n  /** @type {RegExp} */\n\n  var multi_char_reg;\n  var max_char_length = 3;\n  /** @type {TUnicodeMap} */\n\n  var latin_convert = {};\n  /** @type {TUnicodeMap} */\n\n  var latin_condensed = {\n    '/': '⁄∕',\n    '0': '߀',\n    \"a\": \"ⱥɐɑ\",\n    \"aa\": \"ꜳ\",\n    \"ae\": \"æǽǣ\",\n    \"ao\": \"ꜵ\",\n    \"au\": \"ꜷ\",\n    \"av\": \"ꜹꜻ\",\n    \"ay\": \"ꜽ\",\n    \"b\": \"ƀɓƃ\",\n    \"c\": \"ꜿƈȼↄ\",\n    \"d\": \"đɗɖᴅƌꮷԁɦ\",\n    \"e\": \"ɛǝᴇɇ\",\n    \"f\": \"ꝼƒ\",\n    \"g\": \"ǥɠꞡᵹꝿɢ\",\n    \"h\": \"ħⱨⱶɥ\",\n    \"i\": \"ɨı\",\n    \"j\": \"ɉȷ\",\n    \"k\": \"ƙⱪꝁꝃꝅꞣ\",\n    \"l\": \"łƚɫⱡꝉꝇꞁɭ\",\n    \"m\": \"ɱɯϻ\",\n    \"n\": \"ꞥƞɲꞑᴎлԉ\",\n    \"o\": \"øǿɔɵꝋꝍᴑ\",\n    \"oe\": \"œ\",\n    \"oi\": \"ƣ\",\n    \"oo\": \"ꝏ\",\n    \"ou\": \"ȣ\",\n    \"p\": \"ƥᵽꝑꝓꝕρ\",\n    \"q\": \"ꝗꝙɋ\",\n    \"r\": \"ɍɽꝛꞧꞃ\",\n    \"s\": \"ßȿꞩꞅʂ\",\n    \"t\": \"ŧƭʈⱦꞇ\",\n    \"th\": \"þ\",\n    \"tz\": \"ꜩ\",\n    \"u\": \"ʉ\",\n    \"v\": \"ʋꝟʌ\",\n    \"vy\": \"ꝡ\",\n    \"w\": \"ⱳ\",\n    \"y\": \"ƴɏỿ\",\n    \"z\": \"ƶȥɀⱬꝣ\",\n    \"hv\": \"ƕ\"\n  };\n\n  for (var latin in latin_condensed) {\n    var unicode = latin_condensed[latin] || '';\n\n    for (var i = 0; i < unicode.length; i++) {\n      var char = unicode.substring(i, i + 1);\n      latin_convert[char] = latin;\n    }\n  }\n\n  var convert_pat = new RegExp(Object.keys(latin_convert).join('|') + '|' + accent_pat, 'gu');\n  /**\n   * Initialize the unicode_map from the give code point ranges\n   *\n   * @param {TCodePoints=} _code_points\n   */\n\n  var initialize = function initialize(_code_points) {\n    if (unicode_map !== undefined) return;\n    unicode_map = generateMap(_code_points || code_points);\n  };\n  /**\n   * Helper method for normalize a string\n   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n   * @param {string} str\n   * @param {string} form\n   */\n\n\n  var normalize = function normalize(str) {\n    var form = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'NFKD';\n    return str.normalize(form);\n  };\n  /**\n   * Remove accents without reordering string\n   * calling str.normalize('NFKD') on \\u{594}\\u{595}\\u{596} becomes \\u{596}\\u{594}\\u{595}\n   * via https://github.com/krisk/Fuse/issues/133#issuecomment-318692703\n   * @param {string} str\n   * @return {string}\n   */\n\n\n  var asciifold = function asciifold(str) {\n    return toArray(str).reduce(\n    /**\n     * @param {string} result\n     * @param {string} char\n     */\n    function (result, char) {\n      return result + _asciifold(char);\n    }, '');\n  };\n  /**\n   * @param {string} str\n   * @return {string}\n   */\n\n\n  var _asciifold = function _asciifold(str) {\n    str = normalize(str).toLowerCase().replace(convert_pat, function (\n    /** @type {string} */\n    char) {\n      return latin_convert[char] || '';\n    }); //return str;\n\n    return normalize(str, 'NFC');\n  };\n  /**\n   * Generate a list of unicode variants from the list of code points\n   * @param {TCodePoints} code_points\n   * @yield {TCodePointObj}\n   */\n\n\n  function generator(code_points) {\n    var _iterator, _step, _ref3, _ref2, code_point_min, code_point_max, _i2, composed, folded;\n\n    return _regeneratorRuntime.wrap(function generator$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            _iterator = _createForOfIteratorHelper(code_points);\n            _context.prev = 1;\n\n            _iterator.s();\n\n          case 3:\n            if ((_step = _iterator.n()).done) {\n              _context.next = 25;\n              break;\n            }\n\n            _ref3 = _step.value;\n            _ref2 = _slicedToArray(_ref3, 2);\n            code_point_min = _ref2[0];\n            code_point_max = _ref2[1];\n            _i2 = code_point_min;\n\n          case 9:\n            if (!(_i2 <= code_point_max)) {\n              _context.next = 23;\n              break;\n            }\n\n            composed = String.fromCharCode(_i2);\n            folded = asciifold(composed);\n\n            if (!(folded == composed.toLowerCase())) {\n              _context.next = 14;\n              break;\n            }\n\n            return _context.abrupt(\"continue\", 20);\n\n          case 14:\n            if (!(folded.length > max_char_length)) {\n              _context.next = 16;\n              break;\n            }\n\n            return _context.abrupt(\"continue\", 20);\n\n          case 16:\n            if (!(folded.length == 0)) {\n              _context.next = 18;\n              break;\n            }\n\n            return _context.abrupt(\"continue\", 20);\n\n          case 18:\n            _context.next = 20;\n            return {\n              folded: folded,\n              composed: composed,\n              code_point: _i2\n            };\n\n          case 20:\n            _i2++;\n            _context.next = 9;\n            break;\n\n          case 23:\n            _context.next = 3;\n            break;\n\n          case 25:\n            _context.next = 30;\n            break;\n\n          case 27:\n            _context.prev = 27;\n            _context.t0 = _context[\"catch\"](1);\n\n            _iterator.e(_context.t0);\n\n          case 30:\n            _context.prev = 30;\n\n            _iterator.f();\n\n            return _context.finish(30);\n\n          case 33:\n          case \"end\":\n            return _context.stop();\n        }\n      }\n    }, _marked, null, [[1, 27, 30, 33]]);\n  }\n  /**\n   * Generate a unicode map from the list of code points\n   * @param {TCodePoints} code_points\n   * @return {TUnicodeSets}\n   */\n\n\n  var generateSets = function generateSets(code_points) {\n    /** @type {{[key:string]:Set<string>}} */\n    var unicode_sets = {};\n    /**\n     * @param {string} folded\n     * @param {string} to_add\n     */\n\n    var addMatching = function addMatching(folded, to_add) {\n      /** @type {Set<string>} */\n      var folded_set = unicode_sets[folded] || new Set();\n      var patt = new RegExp('^' + setToPattern(folded_set) + '$', 'iu');\n\n      if (to_add.match(patt)) {\n        return;\n      }\n\n      folded_set.add(escape_regex(to_add));\n      unicode_sets[folded] = folded_set;\n    };\n\n    var _iterator2 = _createForOfIteratorHelper(generator(code_points)),\n        _step2;\n\n    try {\n      for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n        var value = _step2.value;\n        addMatching(value.folded, value.folded);\n        addMatching(value.folded, value.composed);\n      }\n    } catch (err) {\n      _iterator2.e(err);\n    } finally {\n      _iterator2.f();\n    }\n\n    return unicode_sets;\n  };\n  /**\n   * Generate a unicode map from the list of code points\n   * ae => (?:(?:ae|Æ|Ǽ|Ǣ)|(?:A|Ⓐ|A...)(?:E|ɛ|Ⓔ...))\n   *\n   * @param {TCodePoints} code_points\n   * @return {TUnicodeMap}\n   */\n\n\n  var generateMap = function generateMap(code_points) {\n    /** @type {TUnicodeSets} */\n    var unicode_sets = generateSets(code_points);\n    /** @type {TUnicodeMap} */\n\n    var unicode_map = {};\n    /** @type {string[]} */\n\n    var multi_char = [];\n\n    for (var folded in unicode_sets) {\n      var set = unicode_sets[folded];\n\n      if (set) {\n        unicode_map[folded] = setToPattern(set);\n      }\n\n      if (folded.length > 1) {\n        multi_char.push(escape_regex(folded));\n      }\n    }\n\n    multi_char.sort(function (a, b) {\n      return b.length - a.length;\n    });\n    var multi_char_patt = arrayToPattern(multi_char);\n    multi_char_reg = new RegExp('^' + multi_char_patt, 'u');\n    return unicode_map;\n  };\n  /**\n   * Map each element of an array from it's folded value to all possible unicode matches\n   * @param {string[]} strings\n   * @param {number} min_replacement\n   * @return {string}\n   */\n\n\n  var mapSequence = function mapSequence(strings) {\n    var min_replacement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n    var chars_replaced = 0;\n    strings = strings.map(function (str) {\n      if (unicode_map[str]) {\n        chars_replaced += str.length;\n      }\n\n      return unicode_map[str] || str;\n    });\n\n    if (chars_replaced >= min_replacement) {\n      return sequencePattern(strings);\n    }\n\n    return '';\n  };\n  /**\n   * Convert a short string and split it into all possible patterns\n   * Keep a pattern only if min_replacement is met\n   *\n   * 'abc'\n   * \t\t=> [['abc'],['ab','c'],['a','bc'],['a','b','c']]\n   *\t\t=> ['abc-pattern','ab-c-pattern'...]\n   *\n   *\n   * @param {string} str\n   * @param {number} min_replacement\n   * @return {string}\n   */\n\n\n  var substringsToPattern = function substringsToPattern(str) {\n    var min_replacement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n    min_replacement = Math.max(min_replacement, str.length - 1);\n    return arrayToPattern(allSubstrings(str).map(function (sub_pat) {\n      return mapSequence(sub_pat, min_replacement);\n    }));\n  };\n  /**\n   * Convert an array of sequences into a pattern\n   * [{start:0,end:3,length:3,substr:'iii'}...] => (?:iii...)\n   *\n   * @param {Sequence[]} sequences\n   * @param {boolean} all\n   */\n\n\n  var sequencesToPattern = function sequencesToPattern(sequences) {\n    var all = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    var min_replacement = sequences.length > 1 ? 1 : 0;\n    return arrayToPattern(sequences.map(function (sequence) {\n      var seq = [];\n      var len = all ? sequence.length() : sequence.length() - 1;\n\n      for (var j = 0; j < len; j++) {\n        seq.push(substringsToPattern(sequence.substrs[j] || '', min_replacement));\n      }\n\n      return sequencePattern(seq);\n    }));\n  };\n  /**\n   * Return true if the sequence is already in the sequences\n   * @param {Sequence} needle_seq\n   * @param {Sequence[]} sequences\n   */\n\n\n  var inSequences = function inSequences(needle_seq, sequences) {\n    var _iterator3 = _createForOfIteratorHelper(sequences),\n        _step3;\n\n    try {\n      var _loop = function _loop() {\n        var seq = _step3.value;\n\n        if (seq.start != needle_seq.start || seq.end != needle_seq.end) {\n          return \"continue\";\n        }\n\n        if (seq.substrs.join('') !== needle_seq.substrs.join('')) {\n          return \"continue\";\n        }\n\n        var needle_parts = needle_seq.parts;\n        /**\n         * @param {TSequencePart} part\n         */\n\n        var filter = function filter(part) {\n          var _iterator4 = _createForOfIteratorHelper(needle_parts),\n              _step4;\n\n          try {\n            for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n              var needle_part = _step4.value;\n\n              if (needle_part.start === part.start && needle_part.substr === part.substr) {\n                return false;\n              }\n\n              if (part.length == 1 || needle_part.length == 1) {\n                continue;\n              } // check for overlapping parts\n              // a = ['::=','==']\n              // b = ['::','===']\n              // a = ['r','sm']\n              // b = ['rs','m']\n\n\n              if (part.start < needle_part.start && part.end > needle_part.start) {\n                return true;\n              }\n\n              if (needle_part.start < part.start && needle_part.end > part.start) {\n                return true;\n              }\n            }\n          } catch (err) {\n            _iterator4.e(err);\n          } finally {\n            _iterator4.f();\n          }\n\n          return false;\n        };\n\n        var filtered = seq.parts.filter(filter);\n\n        if (filtered.length > 0) {\n          return \"continue\";\n        }\n\n        return {\n          v: true\n        };\n      };\n\n      for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n        var _ret = _loop();\n\n        if (_ret === \"continue\") continue;\n        if (_typeof(_ret) === \"object\") return _ret.v;\n      }\n    } catch (err) {\n      _iterator3.e(err);\n    } finally {\n      _iterator3.f();\n    }\n\n    return false;\n  };\n\n  var Sequence = /*#__PURE__*/function () {\n    function Sequence() {\n      _classCallCheck(this, Sequence);\n\n      /** @type {TSequencePart[]} */\n      this.parts = [];\n      /** @type {string[]} */\n\n      this.substrs = [];\n      this.start = 0;\n      this.end = 0;\n    }\n    /**\n     * @param {TSequencePart|undefined} part\n     */\n\n\n    _createClass(Sequence, [{\n      key: \"add\",\n      value: function add(part) {\n        if (part) {\n          this.parts.push(part);\n          this.substrs.push(part.substr);\n          this.start = Math.min(part.start, this.start);\n          this.end = Math.max(part.end, this.end);\n        }\n      }\n    }, {\n      key: \"last\",\n      value: function last() {\n        return this.parts[this.parts.length - 1];\n      }\n    }, {\n      key: \"length\",\n      value: function length() {\n        return this.parts.length;\n      }\n      /**\n       * @param {number} position\n       * @param {TSequencePart} last_piece\n       */\n\n    }, {\n      key: \"clone\",\n      value: function clone(position, last_piece) {\n        var clone = new Sequence();\n        var parts = JSON.parse(JSON.stringify(this.parts));\n        var last_part = parts.pop();\n\n        var _iterator5 = _createForOfIteratorHelper(parts),\n            _step5;\n\n        try {\n          for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n            var part = _step5.value;\n            clone.add(part);\n          }\n        } catch (err) {\n          _iterator5.e(err);\n        } finally {\n          _iterator5.f();\n        }\n\n        var last_substr = last_piece.substr.substring(0, position - last_part.start);\n        var clone_last_len = last_substr.length;\n        clone.add({\n          start: last_part.start,\n          end: last_part.start + clone_last_len,\n          length: clone_last_len,\n          substr: last_substr\n        });\n        return clone;\n      }\n    }]);\n\n    return Sequence;\n  }();\n  /**\n   * Expand a regular expression pattern to include unicode variants\n   * \teg /a/ becomes /aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐɑAⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ/\n   *\n   * Issue:\n   *  ﺊﺋ [ 'ﺊ = \\\\u{fe8a}', 'ﺋ = \\\\u{fe8b}' ]\n   *\tbecomes:\tئئ [ 'ي = \\\\u{64a}', 'ٔ = \\\\u{654}', 'ي = \\\\u{64a}', 'ٔ = \\\\u{654}' ]\n   *\n   *\tİIJ = IIJ = ⅡJ\n   *\n   * \t1/2/4\n   *\n   * @param {string} str\n   * @return {string|undefined}\n   */\n\n\n  var getPattern = function getPattern(str) {\n    initialize();\n    str = asciifold(str);\n    var pattern = '';\n    var sequences = [new Sequence()];\n\n    for (var _i3 = 0; _i3 < str.length; _i3++) {\n      var substr = str.substring(_i3);\n      var match = substr.match(multi_char_reg);\n\n      var _char = str.substring(_i3, _i3 + 1);\n\n      var match_str = match ? match[0] : null; // loop through sequences\n      // add either the char or multi_match\n\n      var overlapping = [];\n      var added_types = new Set();\n\n      var _iterator6 = _createForOfIteratorHelper(sequences),\n          _step6;\n\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var sequence = _step6.value;\n          var last_piece = sequence.last();\n\n          if (!last_piece || last_piece.length == 1 || last_piece.end <= _i3) {\n            // if we have a multi match\n            if (match_str) {\n              var len = match_str.length;\n              sequence.add({\n                start: _i3,\n                end: _i3 + len,\n                length: len,\n                substr: match_str\n              });\n              added_types.add('1');\n            } else {\n              sequence.add({\n                start: _i3,\n                end: _i3 + 1,\n                length: 1,\n                substr: _char\n              });\n              added_types.add('2');\n            }\n          } else if (match_str) {\n            var _clone = sequence.clone(_i3, last_piece);\n\n            var _len3 = match_str.length;\n\n            _clone.add({\n              start: _i3,\n              end: _i3 + _len3,\n              length: _len3,\n              substr: match_str\n            });\n\n            overlapping.push(_clone);\n          } else {\n            // don't add char\n            // adding would create invalid patterns: 234 => [2,34,4]\n            added_types.add('3');\n          }\n        } // if we have overlapping\n\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n\n      if (overlapping.length > 0) {\n        // ['ii','iii'] before ['i','i','iii']\n        overlapping = overlapping.sort(function (a, b) {\n          return a.length() - b.length();\n        });\n\n        var _iterator7 = _createForOfIteratorHelper(overlapping),\n            _step7;\n\n        try {\n          for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n            var clone = _step7.value;\n\n            // don't add if we already have an equivalent sequence\n            if (inSequences(clone, sequences)) {\n              continue;\n            }\n\n            sequences.push(clone);\n          }\n        } catch (err) {\n          _iterator7.e(err);\n        } finally {\n          _iterator7.f();\n        }\n\n        continue;\n      } // if we haven't done anything unique\n      // clean up the patterns\n      // helps keep patterns smaller\n      // if str = 'r₨㎧aarss', pattern will be 446 instead of 655\n\n\n      if (_i3 > 0 && added_types.size == 1 && !added_types.has('3')) {\n        pattern += sequencesToPattern(sequences, false);\n        var new_seq = new Sequence();\n        var old_seq = sequences[0];\n\n        if (old_seq) {\n          new_seq.add(old_seq.last());\n        }\n\n        sequences = [new_seq];\n      }\n    }\n\n    pattern += sequencesToPattern(sequences, true);\n    return pattern;\n  };\n  /*! sifter.js | https://github.com/orchidjs/sifter.js | Apache License (v2) */\n\n  /**\n   * A property getter resolving dot-notation\n   * @param  {Object}  obj     The root object to fetch property on\n   * @param  {String}  name    The optionally dotted property name to fetch\n   * @return {Object}          The resolved property value\n   */\n\n\n  var getAttr = function getAttr(obj, name) {\n    if (!obj) return;\n    return obj[name];\n  };\n  /**\n   * A property getter resolving dot-notation\n   * @param  {Object}  obj     The root object to fetch property on\n   * @param  {String}  name    The optionally dotted property name to fetch\n   * @return {Object}          The resolved property value\n   */\n\n\n  var getAttrNesting = function getAttrNesting(obj, name) {\n    if (!obj) return;\n    var part,\n        names = name.split(\".\");\n\n    while ((part = names.shift()) && (obj = obj[part])) {\n      ;\n    }\n\n    return obj;\n  };\n  /**\n   * Calculates how close of a match the\n   * given value is against a search token.\n   *\n   */\n\n\n  var scoreValue = function scoreValue(value, token, weight) {\n    var score, pos;\n    if (!value) return 0;\n    value = value + '';\n    if (token.regex == null) return 0;\n    pos = value.search(token.regex);\n    if (pos === -1) return 0;\n    score = token.string.length / value.length;\n    if (pos === 0) score += 0.5;\n    return score * weight;\n  };\n  /**\n   * Cast object property to an array if it exists and has a value\n   *\n   */\n\n\n  var propToArray = function propToArray(obj, key) {\n    var value = obj[key];\n    if (typeof value == 'function') return value;\n\n    if (value && !Array.isArray(value)) {\n      obj[key] = [value];\n    }\n  };\n  /**\n   * Iterates over arrays and hashes.\n   *\n   * ```\n   * iterate(this.items, function(item, id) {\n   *    // invoked for each item\n   * });\n   * ```\n   *\n   */\n\n\n  var iterate$1 = function iterate$1(object, callback) {\n    if (Array.isArray(object)) {\n      object.forEach(callback);\n    } else {\n      for (var key in object) {\n        if (object.hasOwnProperty(key)) {\n          callback(object[key], key);\n        }\n      }\n    }\n  };\n\n  var cmp = function cmp(a, b) {\n    if (typeof a === 'number' && typeof b === 'number') {\n      return a > b ? 1 : a < b ? -1 : 0;\n    }\n\n    a = asciifold(a + '').toLowerCase();\n    b = asciifold(b + '').toLowerCase();\n    if (a > b) return 1;\n    if (b > a) return -1;\n    return 0;\n  };\n  /*! sifter.js | https://github.com/orchidjs/sifter.js | Apache License (v2) */\n\n  /**\n   * sifter.js\n   * Copyright (c) 2013–2020 Brian Reavis & contributors\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   * @author Brian Reavis <brian@thirdroute.com>\n   */\n\n\n  var Sifter = /*#__PURE__*/function () {\n    // []|{};\n\n    /**\n     * Textually searches arrays and hashes of objects\n     * by property (or multiple properties). Designed\n     * specifically for autocomplete.\n     *\n     */\n    function Sifter(items, settings) {\n      _classCallCheck(this, Sifter);\n\n      this.items = void 0;\n      this.settings = void 0;\n      this.items = items;\n      this.settings = settings || {\n        diacritics: true\n      };\n    }\n    /**\n     * Splits a search string into an array of individual\n     * regexps to be used to match results.\n     *\n     */\n\n\n    _createClass(Sifter, [{\n      key: \"tokenize\",\n      value: function tokenize(query, respect_word_boundaries, weights) {\n        var _this4 = this;\n\n        if (!query || !query.length) return [];\n        var tokens = [];\n        var words = query.split(/\\s+/);\n        var field_regex;\n\n        if (weights) {\n          field_regex = new RegExp('^(' + Object.keys(weights).map(escape_regex).join('|') + ')\\:(.*)$');\n        }\n\n        words.forEach(function (word) {\n          var field_match;\n          var field = null;\n          var regex = null; // look for \"field:query\" tokens\n\n          if (field_regex && (field_match = word.match(field_regex))) {\n            field = field_match[1];\n            word = field_match[2];\n          }\n\n          if (word.length > 0) {\n            if (_this4.settings.diacritics) {\n              regex = getPattern(word) || null;\n            } else {\n              regex = escape_regex(word);\n            }\n\n            if (regex && respect_word_boundaries) regex = \"\\\\b\" + regex;\n          }\n\n          tokens.push({\n            string: word,\n            regex: regex ? new RegExp(regex, 'iu') : null,\n            field: field\n          });\n        });\n        return tokens;\n      }\n      /**\n       * Returns a function to be used to score individual results.\n       *\n       * Good matches will have a higher score than poor matches.\n       * If an item is not a match, 0 will be returned by the function.\n       *\n       * @returns {T.ScoreFn}\n       */\n\n    }, {\n      key: \"getScoreFunction\",\n      value: function getScoreFunction(query, options) {\n        var search = this.prepareSearch(query, options);\n        return this._getScoreFunction(search);\n      }\n      /**\n       * @returns {T.ScoreFn}\n       *\n       */\n\n    }, {\n      key: \"_getScoreFunction\",\n      value: function _getScoreFunction(search) {\n        var tokens = search.tokens,\n            token_count = tokens.length;\n\n        if (!token_count) {\n          return function () {\n            return 0;\n          };\n        }\n\n        var fields = search.options.fields,\n            weights = search.weights,\n            field_count = fields.length,\n            getAttrFn = search.getAttrFn;\n\n        if (!field_count) {\n          return function () {\n            return 1;\n          };\n        }\n        /**\n         * Calculates the score of an object\n         * against the search query.\n         *\n         */\n\n\n        var scoreObject = function () {\n          if (field_count === 1) {\n            return function (token, data) {\n              var field = fields[0].field;\n              return scoreValue(getAttrFn(data, field), token, weights[field] || 1);\n            };\n          }\n\n          return function (token, data) {\n            var sum = 0; // is the token specific to a field?\n\n            if (token.field) {\n              var value = getAttrFn(data, token.field);\n\n              if (!token.regex && value) {\n                sum += 1 / field_count;\n              } else {\n                sum += scoreValue(value, token, 1);\n              }\n            } else {\n              iterate$1(weights, function (weight, field) {\n                sum += scoreValue(getAttrFn(data, field), token, weight);\n              });\n            }\n\n            return sum / field_count;\n          };\n        }();\n\n        if (token_count === 1) {\n          return function (data) {\n            return scoreObject(tokens[0], data);\n          };\n        }\n\n        if (search.options.conjunction === 'and') {\n          return function (data) {\n            var score,\n                sum = 0;\n\n            var _iterator8 = _createForOfIteratorHelper(tokens),\n                _step8;\n\n            try {\n              for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n                var token = _step8.value;\n                score = scoreObject(token, data);\n                if (score <= 0) return 0;\n                sum += score;\n              }\n            } catch (err) {\n              _iterator8.e(err);\n            } finally {\n              _iterator8.f();\n            }\n\n            return sum / token_count;\n          };\n        } else {\n          return function (data) {\n            var sum = 0;\n            iterate$1(tokens, function (token) {\n              sum += scoreObject(token, data);\n            });\n            return sum / token_count;\n          };\n        }\n      }\n      /**\n       * Returns a function that can be used to compare two\n       * results, for sorting purposes. If no sorting should\n       * be performed, `null` will be returned.\n       *\n       * @return function(a,b)\n       */\n\n    }, {\n      key: \"getSortFunction\",\n      value: function getSortFunction(query, options) {\n        var search = this.prepareSearch(query, options);\n        return this._getSortFunction(search);\n      }\n    }, {\n      key: \"_getSortFunction\",\n      value: function _getSortFunction(search) {\n        var implicit_score,\n            sort_flds = [];\n        var self = this,\n            options = search.options,\n            sort = !search.query && options.sort_empty ? options.sort_empty : options.sort;\n\n        if (typeof sort == 'function') {\n          return sort.bind(this);\n        }\n        /**\n         * Fetches the specified sort field value\n         * from a search result item.\n         *\n         */\n\n\n        var get_field = function get_field(name, result) {\n          if (name === '$score') return result.score;\n          return search.getAttrFn(self.items[result.id], name);\n        }; // parse options\n\n\n        if (sort) {\n          var _iterator9 = _createForOfIteratorHelper(sort),\n              _step9;\n\n          try {\n            for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n              var s = _step9.value;\n\n              if (search.query || s.field !== '$score') {\n                sort_flds.push(s);\n              }\n            }\n          } catch (err) {\n            _iterator9.e(err);\n          } finally {\n            _iterator9.f();\n          }\n        } // the \"$score\" field is implied to be the primary\n        // sort field, unless it's manually specified\n\n\n        if (search.query) {\n          implicit_score = true;\n\n          var _iterator10 = _createForOfIteratorHelper(sort_flds),\n              _step10;\n\n          try {\n            for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n              var fld = _step10.value;\n\n              if (fld.field === '$score') {\n                implicit_score = false;\n                break;\n              }\n            }\n          } catch (err) {\n            _iterator10.e(err);\n          } finally {\n            _iterator10.f();\n          }\n\n          if (implicit_score) {\n            sort_flds.unshift({\n              field: '$score',\n              direction: 'desc'\n            });\n          } // without a search.query, all items will have the same score\n\n        } else {\n          sort_flds = sort_flds.filter(function (fld) {\n            return fld.field !== '$score';\n          });\n        } // build function\n\n\n        var sort_flds_count = sort_flds.length;\n\n        if (!sort_flds_count) {\n          return null;\n        }\n\n        return function (a, b) {\n          var result, field;\n\n          var _iterator11 = _createForOfIteratorHelper(sort_flds),\n              _step11;\n\n          try {\n            for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n              var sort_fld = _step11.value;\n              field = sort_fld.field;\n              var multiplier = sort_fld.direction === 'desc' ? -1 : 1;\n              result = multiplier * cmp(get_field(field, a), get_field(field, b));\n              if (result) return result;\n            }\n          } catch (err) {\n            _iterator11.e(err);\n          } finally {\n            _iterator11.f();\n          }\n\n          return 0;\n        };\n      }\n      /**\n       * Parses a search query and returns an object\n       * with tokens and fields ready to be populated\n       * with results.\n       *\n       */\n\n    }, {\n      key: \"prepareSearch\",\n      value: function prepareSearch(query, optsUser) {\n        var weights = {};\n        var options = Object.assign({}, optsUser);\n        propToArray(options, 'sort');\n        propToArray(options, 'sort_empty'); // convert fields to new format\n\n        if (options.fields) {\n          propToArray(options, 'fields');\n          var fields = [];\n          options.fields.forEach(function (field) {\n            if (typeof field == 'string') {\n              field = {\n                field: field,\n                weight: 1\n              };\n            }\n\n            fields.push(field);\n            weights[field.field] = 'weight' in field ? field.weight : 1;\n          });\n          options.fields = fields;\n        }\n\n        return {\n          options: options,\n          query: query.toLowerCase().trim(),\n          tokens: this.tokenize(query, options.respect_word_boundaries, weights),\n          total: 0,\n          items: [],\n          weights: weights,\n          getAttrFn: options.nesting ? getAttrNesting : getAttr\n        };\n      }\n      /**\n       * Searches through all items and returns a sorted array of matches.\n       *\n       */\n\n    }, {\n      key: \"search\",\n      value: function search(query, options) {\n        var self = this,\n            score,\n            search;\n        search = this.prepareSearch(query, options);\n        options = search.options;\n        query = search.query; // generate result scoring function\n\n        var fn_score = options.score || self._getScoreFunction(search); // perform search and sort\n\n\n        if (query.length) {\n          iterate$1(self.items, function (item, id) {\n            score = fn_score(item);\n\n            if (options.filter === false || score > 0) {\n              search.items.push({\n                'score': score,\n                'id': id\n              });\n            }\n          });\n        } else {\n          iterate$1(self.items, function (_, id) {\n            search.items.push({\n              'score': 1,\n              'id': id\n            });\n          });\n        }\n\n        var fn_sort = self._getSortFunction(search);\n\n        if (fn_sort) search.items.sort(fn_sort); // apply limits\n\n        search.total = search.items.length;\n\n        if (typeof options.limit === 'number') {\n          search.items = search.items.slice(0, options.limit);\n        }\n\n        return search;\n      }\n    }]);\n\n    return Sifter;\n  }();\n  /**\n   * Iterates over arrays and hashes.\n   *\n   * ```\n   * iterate(this.items, function(item, id) {\n   *    // invoked for each item\n   * });\n   * ```\n   *\n   */\n\n\n  var iterate = function iterate(object, callback) {\n    if (Array.isArray(object)) {\n      object.forEach(callback);\n    } else {\n      for (var key in object) {\n        if (object.hasOwnProperty(key)) {\n          callback(object[key], key);\n        }\n      }\n    }\n  };\n  /**\n   * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n   * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n   *\n   * param query should be {}\n   */\n\n\n  var getDom = function getDom(query) {\n    if (query.jquery) {\n      return query[0];\n    }\n\n    if (query instanceof HTMLElement) {\n      return query;\n    }\n\n    if (isHtmlString(query)) {\n      var tpl = document.createElement('template');\n      tpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\n      return tpl.content.firstChild;\n    }\n\n    return document.querySelector(query);\n  };\n\n  var isHtmlString = function isHtmlString(arg) {\n    if (typeof arg === 'string' && arg.indexOf('<') > -1) {\n      return true;\n    }\n\n    return false;\n  };\n\n  var escapeQuery = function escapeQuery(query) {\n    return query.replace(/['\"\\\\]/g, '\\\\$&');\n  };\n  /**\n   * Dispatch an event\n   *\n   */\n\n\n  var triggerEvent = function triggerEvent(dom_el, event_name) {\n    var event = document.createEvent('HTMLEvents');\n    event.initEvent(event_name, true, false);\n    dom_el.dispatchEvent(event);\n  };\n  /**\n   * Apply CSS rules to a dom element\n   *\n   */\n\n\n  var applyCSS = function applyCSS(dom_el, css) {\n    Object.assign(dom_el.style, css);\n  };\n  /**\n   * Add css classes\n   *\n   */\n\n\n  var addClasses = function addClasses(elmts) {\n    for (var _len4 = arguments.length, classes = new Array(_len4 > 1 ? _len4 - 1 : 0), _key3 = 1; _key3 < _len4; _key3++) {\n      classes[_key3 - 1] = arguments[_key3];\n    }\n\n    var norm_classes = classesArray(classes);\n    elmts = castAsArray(elmts);\n    elmts.map(function (el) {\n      norm_classes.map(function (cls) {\n        el.classList.add(cls);\n      });\n    });\n  };\n  /**\n   * Remove css classes\n   *\n   */\n\n\n  var removeClasses = function removeClasses(elmts) {\n    for (var _len5 = arguments.length, classes = new Array(_len5 > 1 ? _len5 - 1 : 0), _key4 = 1; _key4 < _len5; _key4++) {\n      classes[_key4 - 1] = arguments[_key4];\n    }\n\n    var norm_classes = classesArray(classes);\n    elmts = castAsArray(elmts);\n    elmts.map(function (el) {\n      norm_classes.map(function (cls) {\n        el.classList.remove(cls);\n      });\n    });\n  };\n  /**\n   * Return arguments\n   *\n   */\n\n\n  var classesArray = function classesArray(args) {\n    var classes = [];\n    iterate(args, function (_classes) {\n      if (typeof _classes === 'string') {\n        _classes = _classes.trim().split(/[\\11\\12\\14\\15\\40]/);\n      }\n\n      if (Array.isArray(_classes)) {\n        classes = classes.concat(_classes);\n      }\n    });\n    return classes.filter(Boolean);\n  };\n  /**\n   * Create an array from arg if it's not already an array\n   *\n   */\n\n\n  var castAsArray = function castAsArray(arg) {\n    if (!Array.isArray(arg)) {\n      arg = [arg];\n    }\n\n    return arg;\n  };\n  /**\n   * Get the closest node to the evt.target matching the selector\n   * Stops at wrapper\n   *\n   */\n\n\n  var parentMatch = function parentMatch(target, selector, wrapper) {\n    if (wrapper && !wrapper.contains(target)) {\n      return;\n    }\n\n    while (target && target.matches) {\n      if (target.matches(selector)) {\n        return target;\n      }\n\n      target = target.parentNode;\n    }\n  };\n  /**\n   * Get the first or last item from an array\n   *\n   * > 0 - right (last)\n   * <= 0 - left (first)\n   *\n   */\n\n\n  var getTail = function getTail(list) {\n    var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n    if (direction > 0) {\n      return list[list.length - 1];\n    }\n\n    return list[0];\n  };\n  /**\n   * Return true if an object is empty\n   *\n   */\n\n\n  var isEmptyObject = function isEmptyObject(obj) {\n    return Object.keys(obj).length === 0;\n  };\n  /**\n   * Get the index of an element amongst sibling nodes of the same type\n   *\n   */\n\n\n  var nodeIndex = function nodeIndex(el, amongst) {\n    if (!el) return -1;\n    amongst = amongst || el.nodeName;\n    var i = 0;\n\n    while (el = el.previousElementSibling) {\n      if (el.matches(amongst)) {\n        i++;\n      }\n    }\n\n    return i;\n  };\n  /**\n   * Set attributes of an element\n   *\n   */\n\n\n  var setAttr = function setAttr(el, attrs) {\n    iterate(attrs, function (val, attr) {\n      if (val == null) {\n        el.removeAttribute(attr);\n      } else {\n        el.setAttribute(attr, '' + val);\n      }\n    });\n  };\n  /**\n   * Replace a node\n   */\n\n\n  var replaceNode = function replaceNode(existing, replacement) {\n    if (existing.parentNode) existing.parentNode.replaceChild(replacement, existing);\n  };\n  /**\n   * highlight v3 | MIT license | Johann Burkard <jb@eaio.com>\n   * Highlights arbitrary terms in a node.\n   *\n   * - Modified by Marshal <beatgates@gmail.com> 2011-6-24 (added regex)\n   * - Modified by Brian Reavis <brian@thirdroute.com> 2012-8-27 (cleanup)\n   */\n\n\n  var highlight = function highlight(element, regex) {\n    if (regex === null) return; // convet string to regex\n\n    if (typeof regex === 'string') {\n      if (!regex.length) return;\n      regex = new RegExp(regex, 'i');\n    } // Wrap matching part of text node with highlighting <span>, e.g.\n    // Soccer  ->  <span class=\"highlight\">Soc</span>cer  for regex = /soc/i\n\n\n    var highlightText = function highlightText(node) {\n      var match = node.data.match(regex);\n\n      if (match && node.data.length > 0) {\n        var spannode = document.createElement('span');\n        spannode.className = 'highlight';\n        var middlebit = node.splitText(match.index);\n        middlebit.splitText(match[0].length);\n        var middleclone = middlebit.cloneNode(true);\n        spannode.appendChild(middleclone);\n        replaceNode(middlebit, spannode);\n        return 1;\n      }\n\n      return 0;\n    }; // Recurse element node, looking for child text nodes to highlight, unless element\n    // is childless, <script>, <style>, or already highlighted: <span class=\"hightlight\">\n\n\n    var highlightChildren = function highlightChildren(node) {\n      if (node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName) && (node.className !== 'highlight' || node.tagName !== 'SPAN')) {\n        Array.from(node.childNodes).forEach(function (element) {\n          highlightRecursive(element);\n        });\n      }\n    };\n\n    var highlightRecursive = function highlightRecursive(node) {\n      if (node.nodeType === 3) {\n        return highlightText(node);\n      }\n\n      highlightChildren(node);\n      return 0;\n    };\n\n    highlightRecursive(element);\n  };\n  /**\n   * removeHighlight fn copied from highlight v5 and\n   * edited to remove with(), pass js strict mode, and use without jquery\n   */\n\n\n  var removeHighlight = function removeHighlight(el) {\n    var elements = el.querySelectorAll(\"span.highlight\");\n    Array.prototype.forEach.call(elements, function (el) {\n      var parent = el.parentNode;\n      parent.replaceChild(el.firstChild, el);\n      parent.normalize();\n    });\n  };\n\n  var KEY_A = 65;\n  var KEY_RETURN = 13;\n  var KEY_ESC = 27;\n  var KEY_LEFT = 37;\n  var KEY_UP = 38;\n  var KEY_RIGHT = 39;\n  var KEY_DOWN = 40;\n  var KEY_BACKSPACE = 8;\n  var KEY_DELETE = 46;\n  var KEY_TAB = 9;\n  var IS_MAC = typeof navigator === 'undefined' ? false : /Mac/.test(navigator.userAgent);\n  var KEY_SHORTCUT = IS_MAC ? 'metaKey' : 'ctrlKey'; // ctrl key or apple key for ma\n\n  var defaults = {\n    options: [],\n    optgroups: [],\n    plugins: [],\n    delimiter: ',',\n    splitOn: null,\n    // regexp or string for splitting up values from a paste command\n    persist: true,\n    diacritics: true,\n    create: null,\n    createOnBlur: false,\n    createFilter: null,\n    highlight: true,\n    openOnFocus: true,\n    shouldOpen: null,\n    maxOptions: 50,\n    maxItems: null,\n    hideSelected: null,\n    duplicates: false,\n    addPrecedence: false,\n    selectOnTab: false,\n    preload: null,\n    allowEmptyOption: false,\n    //closeAfterSelect: false,\n    loadThrottle: 300,\n    loadingClass: 'loading',\n    dataAttr: null,\n    //'data-data',\n    optgroupField: 'optgroup',\n    valueField: 'value',\n    labelField: 'text',\n    disabledField: 'disabled',\n    optgroupLabelField: 'label',\n    optgroupValueField: 'value',\n    lockOptgroupOrder: false,\n    sortField: '$order',\n    searchField: ['text'],\n    searchConjunction: 'and',\n    mode: null,\n    wrapperClass: 'ts-wrapper',\n    controlClass: 'ts-control',\n    dropdownClass: 'ts-dropdown',\n    dropdownContentClass: 'ts-dropdown-content',\n    itemClass: 'item',\n    optionClass: 'option',\n    dropdownParent: null,\n    controlInput: '<input type=\"text\" autocomplete=\"off\" size=\"1\" />',\n    copyClassesToDropdown: false,\n    placeholder: null,\n    hidePlaceholder: null,\n    shouldLoad: function shouldLoad(query) {\n      return query.length > 0;\n    },\n\n    /*\n    load                 : null, // function(query, callback) { ... }\n    score                : null, // function(search) { ... }\n    onInitialize         : null, // function() { ... }\n    onChange             : null, // function(value) { ... }\n    onItemAdd            : null, // function(value, $item) { ... }\n    onItemRemove         : null, // function(value) { ... }\n    onClear              : null, // function() { ... }\n    onOptionAdd          : null, // function(value, data) { ... }\n    onOptionRemove       : null, // function(value) { ... }\n    onOptionClear        : null, // function() { ... }\n    onOptionGroupAdd     : null, // function(id, data) { ... }\n    onOptionGroupRemove  : null, // function(id) { ... }\n    onOptionGroupClear   : null, // function() { ... }\n    onDropdownOpen       : null, // function(dropdown) { ... }\n    onDropdownClose      : null, // function(dropdown) { ... }\n    onType               : null, // function(str) { ... }\n    onDelete             : null, // function(values) { ... }\n    */\n    render: {\n      /*\n      item: null,\n      optgroup: null,\n      optgroup_header: null,\n      option: null,\n      option_create: null\n      */\n    }\n  };\n  /**\n   * Converts a scalar to its best string representation\n   * for hash keys and HTML attribute values.\n   *\n   * Transformations:\n   *   'str'     -> 'str'\n   *   null      -> ''\n   *   undefined -> ''\n   *   true      -> '1'\n   *   false     -> '0'\n   *   0         -> '0'\n   *   1         -> '1'\n   *\n   */\n\n  var hash_key = function hash_key(value) {\n    if (typeof value === 'undefined' || value === null) return null;\n    return get_hash(value);\n  };\n\n  var get_hash = function get_hash(value) {\n    if (typeof value === 'boolean') return value ? '1' : '0';\n    return value + '';\n  };\n  /**\n   * Escapes a string for use within HTML.\n   *\n   */\n\n\n  var escape_html = function escape_html(str) {\n    return (str + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n  };\n  /**\n   * Debounce the user provided load function\n   *\n   */\n\n\n  var loadDebounce = function loadDebounce(fn, delay) {\n    var timeout;\n    return function (value, callback) {\n      var self = this;\n\n      if (timeout) {\n        self.loading = Math.max(self.loading - 1, 0);\n        clearTimeout(timeout);\n      }\n\n      timeout = setTimeout(function () {\n        timeout = null;\n        self.loadedSearches[value] = true;\n        fn.call(self, value, callback);\n      }, delay);\n    };\n  };\n  /**\n   * Debounce all fired events types listed in `types`\n   * while executing the provided `fn`.\n   *\n   */\n\n\n  var debounce_events = function debounce_events(self, types, fn) {\n    var type;\n    var trigger = self.trigger;\n    var event_args = {}; // override trigger method\n\n    self.trigger = function () {\n      var type = arguments[0];\n\n      if (types.indexOf(type) !== -1) {\n        event_args[type] = arguments;\n      } else {\n        return trigger.apply(self, arguments);\n      }\n    }; // invoke provided function\n\n\n    fn.apply(self, []);\n    self.trigger = trigger; // trigger queued events\n\n    var _iterator12 = _createForOfIteratorHelper(types),\n        _step12;\n\n    try {\n      for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n        type = _step12.value;\n\n        if (type in event_args) {\n          trigger.apply(self, event_args[type]);\n        }\n      }\n    } catch (err) {\n      _iterator12.e(err);\n    } finally {\n      _iterator12.f();\n    }\n  };\n  /**\n   * Determines the current selection within a text input control.\n   * Returns an object containing:\n   *   - start\n   *   - length\n   *\n   */\n\n\n  var getSelection = function getSelection(input) {\n    return {\n      start: input.selectionStart || 0,\n      length: (input.selectionEnd || 0) - (input.selectionStart || 0)\n    };\n  };\n  /**\n   * Prevent default\n   *\n   */\n\n\n  var preventDefault = function preventDefault(evt) {\n    var stop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    if (evt) {\n      evt.preventDefault();\n\n      if (stop) {\n        evt.stopPropagation();\n      }\n    }\n  };\n  /**\n   * Add event helper\n   *\n   */\n\n\n  var addEvent = function addEvent(target, type, callback, options) {\n    target.addEventListener(type, callback, options);\n  };\n  /**\n   * Return true if the requested key is down\n   * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n   * The current evt may not always set ( eg calling advanceSelection() )\n   *\n   */\n\n\n  var isKeyDown = function isKeyDown(key_name, evt) {\n    if (!evt) {\n      return false;\n    }\n\n    if (!evt[key_name]) {\n      return false;\n    }\n\n    var count = (evt.altKey ? 1 : 0) + (evt.ctrlKey ? 1 : 0) + (evt.shiftKey ? 1 : 0) + (evt.metaKey ? 1 : 0);\n\n    if (count === 1) {\n      return true;\n    }\n\n    return false;\n  };\n  /**\n   * Get the id of an element\n   * If the id attribute is not set, set the attribute with the given id\n   *\n   */\n\n\n  var getId = function getId(el, id) {\n    var existing_id = el.getAttribute('id');\n\n    if (existing_id) {\n      return existing_id;\n    }\n\n    el.setAttribute('id', id);\n    return id;\n  };\n  /**\n   * Returns a string with backslashes added before characters that need to be escaped.\n   */\n\n\n  var addSlashes = function addSlashes(str) {\n    return str.replace(/[\\\\\"']/g, '\\\\$&');\n  };\n  /**\n   *\n   */\n\n\n  var append = function append(parent, node) {\n    if (node) parent.append(node);\n  };\n\n  function getSettings(input, settings_user) {\n    var settings = Object.assign({}, defaults, settings_user);\n    var attr_data = settings.dataAttr;\n    var field_label = settings.labelField;\n    var field_value = settings.valueField;\n    var field_disabled = settings.disabledField;\n    var field_optgroup = settings.optgroupField;\n    var field_optgroup_label = settings.optgroupLabelField;\n    var field_optgroup_value = settings.optgroupValueField;\n    var tag_name = input.tagName.toLowerCase();\n    var placeholder = input.getAttribute('placeholder') || input.getAttribute('data-placeholder');\n\n    if (!placeholder && !settings.allowEmptyOption) {\n      var option = input.querySelector('option[value=\"\"]');\n\n      if (option) {\n        placeholder = option.textContent;\n      }\n    }\n\n    var settings_element = {\n      placeholder: placeholder,\n      options: [],\n      optgroups: [],\n      items: [],\n      maxItems: null\n    };\n    /**\n     * Initialize from a <select> element.\n     *\n     */\n\n    var init_select = function init_select() {\n      var tagName;\n      var options = settings_element.options;\n      var optionsMap = {};\n      var group_count = 1;\n\n      var readData = function readData(el) {\n        var data = Object.assign({}, el.dataset); // get plain object from DOMStringMap\n\n        var json = attr_data && data[attr_data];\n\n        if (typeof json === 'string' && json.length) {\n          data = Object.assign(data, JSON.parse(json));\n        }\n\n        return data;\n      };\n\n      var addOption = function addOption(option, group) {\n        var value = hash_key(option.value);\n        if (value == null) return;\n        if (!value && !settings.allowEmptyOption) return; // if the option already exists, it's probably been\n        // duplicated in another optgroup. in this case, push\n        // the current group to the \"optgroup\" property on the\n        // existing option so that it's rendered in both places.\n\n        if (optionsMap.hasOwnProperty(value)) {\n          if (group) {\n            var arr = optionsMap[value][field_optgroup];\n\n            if (!arr) {\n              optionsMap[value][field_optgroup] = group;\n            } else if (!Array.isArray(arr)) {\n              optionsMap[value][field_optgroup] = [arr, group];\n            } else {\n              arr.push(group);\n            }\n          }\n        } else {\n          var option_data = readData(option);\n          option_data[field_label] = option_data[field_label] || option.textContent;\n          option_data[field_value] = option_data[field_value] || value;\n          option_data[field_disabled] = option_data[field_disabled] || option.disabled;\n          option_data[field_optgroup] = option_data[field_optgroup] || group;\n          option_data.$option = option;\n          optionsMap[value] = option_data;\n          options.push(option_data);\n        }\n\n        if (option.selected) {\n          settings_element.items.push(value);\n        }\n      };\n\n      var addGroup = function addGroup(optgroup) {\n        var id, optgroup_data;\n        optgroup_data = readData(optgroup);\n        optgroup_data[field_optgroup_label] = optgroup_data[field_optgroup_label] || optgroup.getAttribute('label') || '';\n        optgroup_data[field_optgroup_value] = optgroup_data[field_optgroup_value] || group_count++;\n        optgroup_data[field_disabled] = optgroup_data[field_disabled] || optgroup.disabled;\n        settings_element.optgroups.push(optgroup_data);\n        id = optgroup_data[field_optgroup_value];\n        iterate(optgroup.children, function (option) {\n          addOption(option, id);\n        });\n      };\n\n      settings_element.maxItems = input.hasAttribute('multiple') ? null : 1;\n      iterate(input.children, function (child) {\n        tagName = child.tagName.toLowerCase();\n\n        if (tagName === 'optgroup') {\n          addGroup(child);\n        } else if (tagName === 'option') {\n          addOption(child);\n        }\n      });\n    };\n    /**\n     * Initialize from a <input type=\"text\"> element.\n     *\n     */\n\n\n    var init_textbox = function init_textbox() {\n      var data_raw = input.getAttribute(attr_data);\n\n      if (!data_raw) {\n        var value = input.value.trim() || '';\n        if (!settings.allowEmptyOption && !value.length) return;\n        var values = value.split(settings.delimiter);\n        iterate(values, function (value) {\n          var option = {};\n          option[field_label] = value;\n          option[field_value] = value;\n          settings_element.options.push(option);\n        });\n        settings_element.items = values;\n      } else {\n        settings_element.options = JSON.parse(data_raw);\n        iterate(settings_element.options, function (opt) {\n          settings_element.items.push(opt[field_value]);\n        });\n      }\n    };\n\n    if (tag_name === 'select') {\n      init_select();\n    } else {\n      init_textbox();\n    }\n\n    return Object.assign({}, defaults, settings_element, settings_user);\n  }\n\n  var instance_i = 0;\n\n  var TomSelect = /*#__PURE__*/function (_MicroPlugin) {\n    _inherits(TomSelect, _MicroPlugin);\n\n    var _super2 = _createSuper(TomSelect);\n\n    // @deprecated 1.8\n    function TomSelect(input_arg, user_settings) {\n      var _this5;\n\n      _classCallCheck(this, TomSelect);\n\n      _this5 = _super2.call(this);\n      _this5.control_input = void 0;\n      _this5.wrapper = void 0;\n      _this5.dropdown = void 0;\n      _this5.control = void 0;\n      _this5.dropdown_content = void 0;\n      _this5.focus_node = void 0;\n      _this5.order = 0;\n      _this5.settings = void 0;\n      _this5.input = void 0;\n      _this5.tabIndex = void 0;\n      _this5.is_select_tag = void 0;\n      _this5.rtl = void 0;\n      _this5.inputId = void 0;\n      _this5._destroy = void 0;\n      _this5.sifter = void 0;\n      _this5.isOpen = false;\n      _this5.isDisabled = false;\n      _this5.isRequired = void 0;\n      _this5.isInvalid = false;\n      _this5.isValid = true;\n      _this5.isLocked = false;\n      _this5.isFocused = false;\n      _this5.isInputHidden = false;\n      _this5.isSetup = false;\n      _this5.ignoreFocus = false;\n      _this5.ignoreHover = false;\n      _this5.hasOptions = false;\n      _this5.currentResults = void 0;\n      _this5.lastValue = '';\n      _this5.caretPos = 0;\n      _this5.loading = 0;\n      _this5.loadedSearches = {};\n      _this5.activeOption = null;\n      _this5.activeItems = [];\n      _this5.optgroups = {};\n      _this5.options = {};\n      _this5.userOptions = {};\n      _this5.items = [];\n      instance_i++;\n      var dir;\n      var input = getDom(input_arg);\n\n      if (input.tomselect) {\n        throw new Error('Tom Select already initialized on this element');\n      }\n\n      input.tomselect = _assertThisInitialized(_this5); // detect rtl environment\n\n      var computedStyle = window.getComputedStyle && window.getComputedStyle(input, null);\n      dir = computedStyle.getPropertyValue('direction'); // setup default state\n\n      var settings = getSettings(input, user_settings);\n      _this5.settings = settings;\n      _this5.input = input;\n      _this5.tabIndex = input.tabIndex || 0;\n      _this5.is_select_tag = input.tagName.toLowerCase() === 'select';\n      _this5.rtl = /rtl/i.test(dir);\n      _this5.inputId = getId(input, 'tomselect-' + instance_i);\n      _this5.isRequired = input.required; // search system\n\n      _this5.sifter = new Sifter(_this5.options, {\n        diacritics: settings.diacritics\n      }); // option-dependent defaults\n\n      settings.mode = settings.mode || (settings.maxItems === 1 ? 'single' : 'multi');\n\n      if (typeof settings.hideSelected !== 'boolean') {\n        settings.hideSelected = settings.mode === 'multi';\n      }\n\n      if (typeof settings.hidePlaceholder !== 'boolean') {\n        settings.hidePlaceholder = settings.mode !== 'multi';\n      } // set up createFilter callback\n\n\n      var filter = settings.createFilter;\n\n      if (typeof filter !== 'function') {\n        if (typeof filter === 'string') {\n          filter = new RegExp(filter);\n        }\n\n        if (filter instanceof RegExp) {\n          settings.createFilter = function (input) {\n            return filter.test(input);\n          };\n        } else {\n          settings.createFilter = function (value) {\n            return _this5.settings.duplicates || !_this5.options[value];\n          };\n        }\n      }\n\n      _this5.initializePlugins(settings.plugins);\n\n      _this5.setupCallbacks();\n\n      _this5.setupTemplates(); // Create all elements\n\n\n      var wrapper = getDom('<div>');\n      var control = getDom('<div>');\n\n      var dropdown = _this5._render('dropdown');\n\n      var dropdown_content = getDom(\"<div role=\\\"listbox\\\" tabindex=\\\"-1\\\">\");\n      var classes = _this5.input.getAttribute('class') || '';\n      var inputMode = settings.mode;\n      var control_input;\n      addClasses(wrapper, settings.wrapperClass, classes, inputMode);\n      addClasses(control, settings.controlClass);\n      append(wrapper, control);\n      addClasses(dropdown, settings.dropdownClass, inputMode);\n\n      if (settings.copyClassesToDropdown) {\n        addClasses(dropdown, classes);\n      }\n\n      addClasses(dropdown_content, settings.dropdownContentClass);\n      append(dropdown, dropdown_content);\n      getDom(settings.dropdownParent || wrapper).appendChild(dropdown); // default controlInput\n\n      if (isHtmlString(settings.controlInput)) {\n        control_input = getDom(settings.controlInput); // set attributes\n\n        var attrs = ['autocorrect', 'autocapitalize', 'autocomplete'];\n        iterate$1(attrs, function (attr) {\n          if (input.getAttribute(attr)) {\n            setAttr(control_input, _defineProperty({}, attr, input.getAttribute(attr)));\n          }\n        });\n        control_input.tabIndex = -1;\n        control.appendChild(control_input);\n        _this5.focus_node = control_input; // dom element\n      } else if (settings.controlInput) {\n        control_input = getDom(settings.controlInput);\n        _this5.focus_node = control_input;\n      } else {\n        control_input = getDom('<input/>');\n        _this5.focus_node = control;\n      }\n\n      _this5.wrapper = wrapper;\n      _this5.dropdown = dropdown;\n      _this5.dropdown_content = dropdown_content;\n      _this5.control = control;\n      _this5.control_input = control_input;\n\n      _this5.setup();\n\n      return _this5;\n    }\n    /**\n     * set up event bindings.\n     *\n     */\n\n\n    _createClass(TomSelect, [{\n      key: \"setup\",\n      value: function setup() {\n        var self = this;\n        var settings = self.settings;\n        var control_input = self.control_input;\n        var dropdown = self.dropdown;\n        var dropdown_content = self.dropdown_content;\n        var wrapper = self.wrapper;\n        var control = self.control;\n        var input = self.input;\n        var focus_node = self.focus_node;\n        var passive_event = {\n          passive: true\n        };\n        var listboxId = self.inputId + '-ts-dropdown';\n        setAttr(dropdown_content, {\n          id: listboxId\n        });\n        setAttr(focus_node, {\n          role: 'combobox',\n          'aria-haspopup': 'listbox',\n          'aria-expanded': 'false',\n          'aria-controls': listboxId\n        });\n        var control_id = getId(focus_node, self.inputId + '-ts-control');\n        var query = \"label[for='\" + escapeQuery(self.inputId) + \"']\";\n        var label = document.querySelector(query);\n        var label_click = self.focus.bind(self);\n\n        if (label) {\n          addEvent(label, 'click', label_click);\n          setAttr(label, {\n            for: control_id\n          });\n          var label_id = getId(label, self.inputId + '-ts-label');\n          setAttr(focus_node, {\n            'aria-labelledby': label_id\n          });\n          setAttr(dropdown_content, {\n            'aria-labelledby': label_id\n          });\n        }\n\n        wrapper.style.width = input.style.width;\n\n        if (self.plugins.names.length) {\n          var classes_plugins = 'plugin-' + self.plugins.names.join(' plugin-');\n          addClasses([wrapper, dropdown], classes_plugins);\n        }\n\n        if ((settings.maxItems === null || settings.maxItems > 1) && self.is_select_tag) {\n          setAttr(input, {\n            multiple: 'multiple'\n          });\n        }\n\n        if (settings.placeholder) {\n          setAttr(control_input, {\n            placeholder: settings.placeholder\n          });\n        } // if splitOn was not passed in, construct it from the delimiter to allow pasting universally\n\n\n        if (!settings.splitOn && settings.delimiter) {\n          settings.splitOn = new RegExp('\\\\s*' + escape_regex(settings.delimiter) + '+\\\\s*');\n        } // debounce user defined load() if loadThrottle > 0\n        // after initializePlugins() so plugins can create/modify user defined loaders\n\n\n        if (settings.load && settings.loadThrottle) {\n          settings.load = loadDebounce(settings.load, settings.loadThrottle);\n        }\n\n        self.control_input.type = input.type;\n        addEvent(dropdown, 'mousemove', function () {\n          self.ignoreHover = false;\n        });\n        addEvent(dropdown, 'mouseenter', function (e) {\n          var target_match = parentMatch(e.target, '[data-selectable]', dropdown);\n          if (target_match) self.onOptionHover(e, target_match);\n        }, {\n          capture: true\n        }); // clicking on an option should select it\n\n        addEvent(dropdown, 'click', function (evt) {\n          var option = parentMatch(evt.target, '[data-selectable]');\n\n          if (option) {\n            self.onOptionSelect(evt, option);\n            preventDefault(evt, true);\n          }\n        });\n        addEvent(control, 'click', function (evt) {\n          var target_match = parentMatch(evt.target, '[data-ts-item]', control);\n\n          if (target_match && self.onItemSelect(evt, target_match)) {\n            preventDefault(evt, true);\n            return;\n          } // retain focus (see control_input mousedown)\n\n\n          if (control_input.value != '') {\n            return;\n          }\n\n          self.onClick();\n          preventDefault(evt, true);\n        }); // keydown on focus_node for arrow_down/arrow_up\n\n        addEvent(focus_node, 'keydown', function (e) {\n          return self.onKeyDown(e);\n        }); // keypress and input/keyup\n\n        addEvent(control_input, 'keypress', function (e) {\n          return self.onKeyPress(e);\n        });\n        addEvent(control_input, 'input', function (e) {\n          return self.onInput(e);\n        });\n        addEvent(focus_node, 'blur', function (e) {\n          return self.onBlur(e);\n        });\n        addEvent(focus_node, 'focus', function (e) {\n          return self.onFocus(e);\n        });\n        addEvent(control_input, 'paste', function (e) {\n          return self.onPaste(e);\n        });\n\n        var doc_mousedown = function doc_mousedown(evt) {\n          // blur if target is outside of this instance\n          // dropdown is not always inside wrapper\n          var target = evt.composedPath()[0];\n\n          if (!wrapper.contains(target) && !dropdown.contains(target)) {\n            if (self.isFocused) {\n              self.blur();\n            }\n\n            self.inputState();\n            return;\n          } // retain focus by preventing native handling. if the\n          // event target is the input it should not be modified.\n          // otherwise, text selection within the input won't work.\n          // Fixes bug #212 which is no covered by tests\n\n\n          if (target == control_input && self.isOpen) {\n            evt.stopPropagation(); // clicking anywhere in the control should not blur the control_input (which would close the dropdown)\n          } else {\n            preventDefault(evt, true);\n          }\n        };\n\n        var win_scroll = function win_scroll() {\n          if (self.isOpen) {\n            self.positionDropdown();\n          }\n        };\n\n        addEvent(document, 'mousedown', doc_mousedown);\n        addEvent(window, 'scroll', win_scroll, passive_event);\n        addEvent(window, 'resize', win_scroll, passive_event);\n\n        this._destroy = function () {\n          document.removeEventListener('mousedown', doc_mousedown);\n          window.removeEventListener('scroll', win_scroll);\n          window.removeEventListener('resize', win_scroll);\n          if (label) label.removeEventListener('click', label_click);\n        }; // store original html and tab index so that they can be\n        // restored when the destroy() method is called.\n\n\n        this.revertSettings = {\n          innerHTML: input.innerHTML,\n          tabIndex: input.tabIndex\n        };\n        input.tabIndex = -1;\n        input.insertAdjacentElement('afterend', self.wrapper);\n        self.sync(false);\n        settings.items = [];\n        delete settings.optgroups;\n        delete settings.options;\n        addEvent(input, 'invalid', function () {\n          if (self.isValid) {\n            self.isValid = false;\n            self.isInvalid = true;\n            self.refreshState();\n          }\n        });\n        self.updateOriginalInput();\n        self.refreshItems();\n        self.close(false);\n        self.inputState();\n        self.isSetup = true;\n\n        if (input.disabled) {\n          self.disable();\n        } else {\n          self.enable(); //sets tabIndex\n        }\n\n        self.on('change', this.onChange);\n        addClasses(input, 'tomselected', 'ts-hidden-accessible');\n        self.trigger('initialize'); // preload options\n\n        if (settings.preload === true) {\n          self.preload();\n        }\n      }\n      /**\n       * Register options and optgroups\n       *\n       */\n\n    }, {\n      key: \"setupOptions\",\n      value: function setupOptions() {\n        var _this6 = this;\n\n        var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n        var optgroups = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n        // build options table\n        this.addOptions(options); // build optgroup table\n\n        iterate$1(optgroups, function (optgroup) {\n          _this6.registerOptionGroup(optgroup);\n        });\n      }\n      /**\n       * Sets up default rendering functions.\n       */\n\n    }, {\n      key: \"setupTemplates\",\n      value: function setupTemplates() {\n        var self = this;\n        var field_label = self.settings.labelField;\n        var field_optgroup = self.settings.optgroupLabelField;\n        var templates = {\n          'optgroup': function optgroup(data) {\n            var optgroup = document.createElement('div');\n            optgroup.className = 'optgroup';\n            optgroup.appendChild(data.options);\n            return optgroup;\n          },\n          'optgroup_header': function optgroup_header(data, escape) {\n            return '<div class=\"optgroup-header\">' + escape(data[field_optgroup]) + '</div>';\n          },\n          'option': function option(data, escape) {\n            return '<div>' + escape(data[field_label]) + '</div>';\n          },\n          'item': function item(data, escape) {\n            return '<div>' + escape(data[field_label]) + '</div>';\n          },\n          'option_create': function option_create(data, escape) {\n            return '<div class=\"create\">Add <strong>' + escape(data.input) + '</strong>&hellip;</div>';\n          },\n          'no_results': function no_results() {\n            return '<div class=\"no-results\">No results found</div>';\n          },\n          'loading': function loading() {\n            return '<div class=\"spinner\"></div>';\n          },\n          'not_loading': function not_loading() {},\n          'dropdown': function dropdown() {\n            return '<div></div>';\n          }\n        };\n        self.settings.render = Object.assign({}, templates, self.settings.render);\n      }\n      /**\n       * Maps fired events to callbacks provided\n       * in the settings used when creating the control.\n       */\n\n    }, {\n      key: \"setupCallbacks\",\n      value: function setupCallbacks() {\n        var key, fn;\n        var callbacks = {\n          'initialize': 'onInitialize',\n          'change': 'onChange',\n          'item_add': 'onItemAdd',\n          'item_remove': 'onItemRemove',\n          'item_select': 'onItemSelect',\n          'clear': 'onClear',\n          'option_add': 'onOptionAdd',\n          'option_remove': 'onOptionRemove',\n          'option_clear': 'onOptionClear',\n          'optgroup_add': 'onOptionGroupAdd',\n          'optgroup_remove': 'onOptionGroupRemove',\n          'optgroup_clear': 'onOptionGroupClear',\n          'dropdown_open': 'onDropdownOpen',\n          'dropdown_close': 'onDropdownClose',\n          'type': 'onType',\n          'load': 'onLoad',\n          'focus': 'onFocus',\n          'blur': 'onBlur'\n        };\n\n        for (key in callbacks) {\n          fn = this.settings[callbacks[key]];\n          if (fn) this.on(key, fn);\n        }\n      }\n      /**\n       * Sync the Tom Select instance with the original input or select\n       *\n       */\n\n    }, {\n      key: \"sync\",\n      value: function sync() {\n        var get_settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n        var self = this;\n        var settings = get_settings ? getSettings(self.input, {\n          delimiter: self.settings.delimiter\n        }) : self.settings;\n        self.setupOptions(settings.options, settings.optgroups);\n        self.setValue(settings.items || [], true); // silent prevents recursion\n\n        self.lastQuery = null; // so updated options will be displayed in dropdown\n      }\n      /**\n       * Triggered when the main control element\n       * has a click event.\n       *\n       */\n\n    }, {\n      key: \"onClick\",\n      value: function onClick() {\n        var self = this;\n\n        if (self.activeItems.length > 0) {\n          self.clearActiveItems();\n          self.focus();\n          return;\n        }\n\n        if (self.isFocused && self.isOpen) {\n          self.blur();\n        } else {\n          self.focus();\n        }\n      }\n      /**\n       * @deprecated v1.7\n       *\n       */\n\n    }, {\n      key: \"onMouseDown\",\n      value: function onMouseDown() {}\n      /**\n       * Triggered when the value of the control has been changed.\n       * This should propagate the event to the original DOM\n       * input / select element.\n       */\n\n    }, {\n      key: \"onChange\",\n      value: function onChange() {\n        triggerEvent(this.input, 'input');\n        triggerEvent(this.input, 'change');\n      }\n      /**\n       * Triggered on <input> paste.\n       *\n       */\n\n    }, {\n      key: \"onPaste\",\n      value: function onPaste(e) {\n        var _this7 = this;\n\n        var self = this;\n\n        if (self.isInputHidden || self.isLocked) {\n          preventDefault(e);\n          return;\n        } // If a regex or string is included, this will split the pasted\n        // input and create Items for each separate value\n\n\n        if (!self.settings.splitOn) {\n          return;\n        } // Wait for pasted text to be recognized in value\n\n\n        setTimeout(function () {\n          var pastedText = self.inputValue();\n\n          if (!pastedText.match(self.settings.splitOn)) {\n            return;\n          }\n\n          var splitInput = pastedText.trim().split(self.settings.splitOn);\n          iterate$1(splitInput, function (piece) {\n            var hash = hash_key(piece);\n\n            if (hash) {\n              if (_this7.options[piece]) {\n                self.addItem(piece);\n              } else {\n                self.createItem(piece);\n              }\n            }\n          });\n        }, 0);\n      }\n      /**\n       * Triggered on <input> keypress.\n       *\n       */\n\n    }, {\n      key: \"onKeyPress\",\n      value: function onKeyPress(e) {\n        var self = this;\n\n        if (self.isLocked) {\n          preventDefault(e);\n          return;\n        }\n\n        var character = String.fromCharCode(e.keyCode || e.which);\n\n        if (self.settings.create && self.settings.mode === 'multi' && character === self.settings.delimiter) {\n          self.createItem();\n          preventDefault(e);\n          return;\n        }\n      }\n      /**\n       * Triggered on <input> keydown.\n       *\n       */\n\n    }, {\n      key: \"onKeyDown\",\n      value: function onKeyDown(e) {\n        var self = this;\n        self.ignoreHover = true;\n\n        if (self.isLocked) {\n          if (e.keyCode !== KEY_TAB) {\n            preventDefault(e);\n          }\n\n          return;\n        }\n\n        switch (e.keyCode) {\n          // ctrl+A: select all\n          case KEY_A:\n            if (isKeyDown(KEY_SHORTCUT, e)) {\n              if (self.control_input.value == '') {\n                preventDefault(e);\n                self.selectAll();\n                return;\n              }\n            }\n\n            break;\n          // esc: close dropdown\n\n          case KEY_ESC:\n            if (self.isOpen) {\n              preventDefault(e, true);\n              self.close();\n            }\n\n            self.clearActiveItems();\n            return;\n          // down: open dropdown or move selection down\n\n          case KEY_DOWN:\n            if (!self.isOpen && self.hasOptions) {\n              self.open();\n            } else if (self.activeOption) {\n              var next = self.getAdjacent(self.activeOption, 1);\n              if (next) self.setActiveOption(next);\n            }\n\n            preventDefault(e);\n            return;\n          // up: move selection up\n\n          case KEY_UP:\n            if (self.activeOption) {\n              var prev = self.getAdjacent(self.activeOption, -1);\n              if (prev) self.setActiveOption(prev);\n            }\n\n            preventDefault(e);\n            return;\n          // return: select active option\n\n          case KEY_RETURN:\n            if (self.canSelect(self.activeOption)) {\n              self.onOptionSelect(e, self.activeOption);\n              preventDefault(e); // if the option_create=null, the dropdown might be closed\n            } else if (self.settings.create && self.createItem()) {\n              preventDefault(e); // don't submit form when searching for a value\n            } else if (document.activeElement == self.control_input && self.isOpen) {\n              preventDefault(e);\n            }\n\n            return;\n          // left: modifiy item selection to the left\n\n          case KEY_LEFT:\n            self.advanceSelection(-1, e);\n            return;\n          // right: modifiy item selection to the right\n\n          case KEY_RIGHT:\n            self.advanceSelection(1, e);\n            return;\n          // tab: select active option and/or create item\n\n          case KEY_TAB:\n            if (self.settings.selectOnTab) {\n              if (self.canSelect(self.activeOption)) {\n                self.onOptionSelect(e, self.activeOption); // prevent default [tab] behaviour of jump to the next field\n                // if select isFull, then the dropdown won't be open and [tab] will work normally\n\n                preventDefault(e);\n              }\n\n              if (self.settings.create && self.createItem()) {\n                preventDefault(e);\n              }\n            }\n\n            return;\n          // delete|backspace: delete items\n\n          case KEY_BACKSPACE:\n          case KEY_DELETE:\n            self.deleteSelection(e);\n            return;\n        } // don't enter text in the control_input when active items are selected\n\n\n        if (self.isInputHidden && !isKeyDown(KEY_SHORTCUT, e)) {\n          preventDefault(e);\n        }\n      }\n      /**\n       * Triggered on <input> keyup.\n       *\n       */\n\n    }, {\n      key: \"onInput\",\n      value: function onInput(e) {\n        var self = this;\n\n        if (self.isLocked) {\n          return;\n        }\n\n        var value = self.inputValue();\n\n        if (self.lastValue !== value) {\n          self.lastValue = value;\n\n          if (self.settings.shouldLoad.call(self, value)) {\n            self.load(value);\n          }\n\n          self.refreshOptions();\n          self.trigger('type', value);\n        }\n      }\n      /**\n       * Triggered when the user rolls over\n       * an option in the autocomplete dropdown menu.\n       *\n       */\n\n    }, {\n      key: \"onOptionHover\",\n      value: function onOptionHover(evt, option) {\n        if (this.ignoreHover) return;\n        this.setActiveOption(option, false);\n      }\n      /**\n       * Triggered on <input> focus.\n       *\n       */\n\n    }, {\n      key: \"onFocus\",\n      value: function onFocus(e) {\n        var self = this;\n        var wasFocused = self.isFocused;\n\n        if (self.isDisabled) {\n          self.blur();\n          preventDefault(e);\n          return;\n        }\n\n        if (self.ignoreFocus) return;\n        self.isFocused = true;\n        if (self.settings.preload === 'focus') self.preload();\n        if (!wasFocused) self.trigger('focus');\n\n        if (!self.activeItems.length) {\n          self.showInput();\n          self.refreshOptions(!!self.settings.openOnFocus);\n        }\n\n        self.refreshState();\n      }\n      /**\n       * Triggered on <input> blur.\n       *\n       */\n\n    }, {\n      key: \"onBlur\",\n      value: function onBlur(e) {\n        if (document.hasFocus() === false) return;\n        var self = this;\n        if (!self.isFocused) return;\n        self.isFocused = false;\n        self.ignoreFocus = false;\n\n        var deactivate = function deactivate() {\n          self.close();\n          self.setActiveItem();\n          self.setCaret(self.items.length);\n          self.trigger('blur');\n        };\n\n        if (self.settings.create && self.settings.createOnBlur) {\n          self.createItem(null, deactivate);\n        } else {\n          deactivate();\n        }\n      }\n      /**\n       * Triggered when the user clicks on an option\n       * in the autocomplete dropdown menu.\n       *\n       */\n\n    }, {\n      key: \"onOptionSelect\",\n      value: function onOptionSelect(evt, option) {\n        var value,\n            self = this; // should not be possible to trigger a option under a disabled optgroup\n\n        if (option.parentElement && option.parentElement.matches('[data-disabled]')) {\n          return;\n        }\n\n        if (option.classList.contains('create')) {\n          self.createItem(null, function () {\n            if (self.settings.closeAfterSelect) {\n              self.close();\n            }\n          });\n        } else {\n          value = option.dataset.value;\n\n          if (typeof value !== 'undefined') {\n            self.lastQuery = null;\n            self.addItem(value);\n\n            if (self.settings.closeAfterSelect) {\n              self.close();\n            }\n\n            if (!self.settings.hideSelected && evt.type && /click/.test(evt.type)) {\n              self.setActiveOption(option);\n            }\n          }\n        }\n      }\n      /**\n       * Return true if the given option can be selected\n       *\n       */\n\n    }, {\n      key: \"canSelect\",\n      value: function canSelect(option) {\n        if (this.isOpen && option && this.dropdown_content.contains(option)) {\n          return true;\n        }\n\n        return false;\n      }\n      /**\n       * Triggered when the user clicks on an item\n       * that has been selected.\n       *\n       */\n\n    }, {\n      key: \"onItemSelect\",\n      value: function onItemSelect(evt, item) {\n        var self = this;\n\n        if (!self.isLocked && self.settings.mode === 'multi') {\n          preventDefault(evt);\n          self.setActiveItem(item, evt);\n          return true;\n        }\n\n        return false;\n      }\n      /**\n       * Determines whether or not to invoke\n       * the user-provided option provider / loader\n       *\n       * Note, there is a subtle difference between\n       * this.canLoad() and this.settings.shouldLoad();\n       *\n       *\t- settings.shouldLoad() is a user-input validator.\n       *\tWhen false is returned, the not_loading template\n       *\twill be added to the dropdown\n       *\n       *\t- canLoad() is lower level validator that checks\n       * \tthe Tom Select instance. There is no inherent user\n       *\tfeedback when canLoad returns false\n       *\n       */\n\n    }, {\n      key: \"canLoad\",\n      value: function canLoad(value) {\n        if (!this.settings.load) return false;\n        if (this.loadedSearches.hasOwnProperty(value)) return false;\n        return true;\n      }\n      /**\n       * Invokes the user-provided option provider / loader.\n       *\n       */\n\n    }, {\n      key: \"load\",\n      value: function load(value) {\n        var self = this;\n        if (!self.canLoad(value)) return;\n        addClasses(self.wrapper, self.settings.loadingClass);\n        self.loading++;\n        var callback = self.loadCallback.bind(self);\n        self.settings.load.call(self, value, callback);\n      }\n      /**\n       * Invoked by the user-provided option provider\n       *\n       */\n\n    }, {\n      key: \"loadCallback\",\n      value: function loadCallback(options, optgroups) {\n        var self = this;\n        self.loading = Math.max(self.loading - 1, 0);\n        self.lastQuery = null;\n        self.clearActiveOption(); // when new results load, focus should be on first option\n\n        self.setupOptions(options, optgroups);\n        self.refreshOptions(self.isFocused && !self.isInputHidden);\n\n        if (!self.loading) {\n          removeClasses(self.wrapper, self.settings.loadingClass);\n        }\n\n        self.trigger('load', options, optgroups);\n      }\n    }, {\n      key: \"preload\",\n      value: function preload() {\n        var classList = this.wrapper.classList;\n        if (classList.contains('preloaded')) return;\n        classList.add('preloaded');\n        this.load('');\n      }\n      /**\n       * Sets the input field of the control to the specified value.\n       *\n       */\n\n    }, {\n      key: \"setTextboxValue\",\n      value: function setTextboxValue() {\n        var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n        var input = this.control_input;\n        var changed = input.value !== value;\n\n        if (changed) {\n          input.value = value;\n          triggerEvent(input, 'update');\n          this.lastValue = value;\n        }\n      }\n      /**\n       * Returns the value of the control. If multiple items\n       * can be selected (e.g. <select multiple>), this returns\n       * an array. If only one item can be selected, this\n       * returns a string.\n       *\n       */\n\n    }, {\n      key: \"getValue\",\n      value: function getValue() {\n        if (this.is_select_tag && this.input.hasAttribute('multiple')) {\n          return this.items;\n        }\n\n        return this.items.join(this.settings.delimiter);\n      }\n      /**\n       * Resets the selected items to the given value.\n       *\n       */\n\n    }, {\n      key: \"setValue\",\n      value: function setValue(value, silent) {\n        var _this8 = this;\n\n        var events = silent ? [] : ['change'];\n        debounce_events(this, events, function () {\n          _this8.clear(silent);\n\n          _this8.addItems(value, silent);\n        });\n      }\n      /**\n       * Resets the number of max items to the given value\n       *\n       */\n\n    }, {\n      key: \"setMaxItems\",\n      value: function setMaxItems(value) {\n        if (value === 0) value = null; //reset to unlimited items.\n\n        this.settings.maxItems = value;\n        this.refreshState();\n      }\n      /**\n       * Sets the selected item.\n       *\n       */\n\n    }, {\n      key: \"setActiveItem\",\n      value: function setActiveItem(item, e) {\n        var self = this;\n        var eventName;\n        var i, begin, end, swap;\n        var last;\n        if (self.settings.mode === 'single') return; // clear the active selection\n\n        if (!item) {\n          self.clearActiveItems();\n\n          if (self.isFocused) {\n            self.showInput();\n          }\n\n          return;\n        } // modify selection\n\n\n        eventName = e && e.type.toLowerCase();\n\n        if (eventName === 'click' && isKeyDown('shiftKey', e) && self.activeItems.length) {\n          last = self.getLastActive();\n          begin = Array.prototype.indexOf.call(self.control.children, last);\n          end = Array.prototype.indexOf.call(self.control.children, item);\n\n          if (begin > end) {\n            swap = begin;\n            begin = end;\n            end = swap;\n          }\n\n          for (i = begin; i <= end; i++) {\n            item = self.control.children[i];\n\n            if (self.activeItems.indexOf(item) === -1) {\n              self.setActiveItemClass(item);\n            }\n          }\n\n          preventDefault(e);\n        } else if (eventName === 'click' && isKeyDown(KEY_SHORTCUT, e) || eventName === 'keydown' && isKeyDown('shiftKey', e)) {\n          if (item.classList.contains('active')) {\n            self.removeActiveItem(item);\n          } else {\n            self.setActiveItemClass(item);\n          }\n        } else {\n          self.clearActiveItems();\n          self.setActiveItemClass(item);\n        } // ensure control has focus\n\n\n        self.hideInput();\n\n        if (!self.isFocused) {\n          self.focus();\n        }\n      }\n      /**\n       * Set the active and last-active classes\n       *\n       */\n\n    }, {\n      key: \"setActiveItemClass\",\n      value: function setActiveItemClass(item) {\n        var self = this;\n        var last_active = self.control.querySelector('.last-active');\n        if (last_active) removeClasses(last_active, 'last-active');\n        addClasses(item, 'active last-active');\n        self.trigger('item_select', item);\n\n        if (self.activeItems.indexOf(item) == -1) {\n          self.activeItems.push(item);\n        }\n      }\n      /**\n       * Remove active item\n       *\n       */\n\n    }, {\n      key: \"removeActiveItem\",\n      value: function removeActiveItem(item) {\n        var idx = this.activeItems.indexOf(item);\n        this.activeItems.splice(idx, 1);\n        removeClasses(item, 'active');\n      }\n      /**\n       * Clears all the active items\n       *\n       */\n\n    }, {\n      key: \"clearActiveItems\",\n      value: function clearActiveItems() {\n        removeClasses(this.activeItems, 'active');\n        this.activeItems = [];\n      }\n      /**\n       * Sets the selected item in the dropdown menu\n       * of available options.\n       *\n       */\n\n    }, {\n      key: \"setActiveOption\",\n      value: function setActiveOption(option) {\n        var scroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n        if (option === this.activeOption) {\n          return;\n        }\n\n        this.clearActiveOption();\n        if (!option) return;\n        this.activeOption = option;\n        setAttr(this.focus_node, {\n          'aria-activedescendant': option.getAttribute('id')\n        });\n        setAttr(option, {\n          'aria-selected': 'true'\n        });\n        addClasses(option, 'active');\n        if (scroll) this.scrollToOption(option);\n      }\n      /**\n       * Sets the dropdown_content scrollTop to display the option\n       *\n       */\n\n    }, {\n      key: \"scrollToOption\",\n      value: function scrollToOption(option, behavior) {\n        if (!option) return;\n        var content = this.dropdown_content;\n        var height_menu = content.clientHeight;\n        var scrollTop = content.scrollTop || 0;\n        var height_item = option.offsetHeight;\n        var y = option.getBoundingClientRect().top - content.getBoundingClientRect().top + scrollTop;\n\n        if (y + height_item > height_menu + scrollTop) {\n          this.scroll(y - height_menu + height_item, behavior);\n        } else if (y < scrollTop) {\n          this.scroll(y, behavior);\n        }\n      }\n      /**\n       * Scroll the dropdown to the given position\n       *\n       */\n\n    }, {\n      key: \"scroll\",\n      value: function scroll(scrollTop, behavior) {\n        var content = this.dropdown_content;\n\n        if (behavior) {\n          content.style.scrollBehavior = behavior;\n        }\n\n        content.scrollTop = scrollTop;\n        content.style.scrollBehavior = '';\n      }\n      /**\n       * Clears the active option\n       *\n       */\n\n    }, {\n      key: \"clearActiveOption\",\n      value: function clearActiveOption() {\n        if (this.activeOption) {\n          removeClasses(this.activeOption, 'active');\n          setAttr(this.activeOption, {\n            'aria-selected': null\n          });\n        }\n\n        this.activeOption = null;\n        setAttr(this.focus_node, {\n          'aria-activedescendant': null\n        });\n      }\n      /**\n       * Selects all items (CTRL + A).\n       */\n\n    }, {\n      key: \"selectAll\",\n      value: function selectAll() {\n        var self = this;\n        if (self.settings.mode === 'single') return;\n        var activeItems = self.controlChildren();\n        if (!activeItems.length) return;\n        self.hideInput();\n        self.close();\n        self.activeItems = activeItems;\n        iterate$1(activeItems, function (item) {\n          self.setActiveItemClass(item);\n        });\n      }\n      /**\n       * Determines if the control_input should be in a hidden or visible state\n       *\n       */\n\n    }, {\n      key: \"inputState\",\n      value: function inputState() {\n        var self = this;\n        if (!self.control.contains(self.control_input)) return;\n        setAttr(self.control_input, {\n          placeholder: self.settings.placeholder\n        });\n\n        if (self.activeItems.length > 0 || !self.isFocused && self.settings.hidePlaceholder && self.items.length > 0) {\n          self.setTextboxValue();\n          self.isInputHidden = true;\n        } else {\n          if (self.settings.hidePlaceholder && self.items.length > 0) {\n            setAttr(self.control_input, {\n              placeholder: ''\n            });\n          }\n\n          self.isInputHidden = false;\n        }\n\n        self.wrapper.classList.toggle('input-hidden', self.isInputHidden);\n      }\n      /**\n       * Hides the input element out of view, while\n       * retaining its focus.\n       * @deprecated 1.3\n       */\n\n    }, {\n      key: \"hideInput\",\n      value: function hideInput() {\n        this.inputState();\n      }\n      /**\n       * Restores input visibility.\n       * @deprecated 1.3\n       */\n\n    }, {\n      key: \"showInput\",\n      value: function showInput() {\n        this.inputState();\n      }\n      /**\n       * Get the input value\n       */\n\n    }, {\n      key: \"inputValue\",\n      value: function inputValue() {\n        return this.control_input.value.trim();\n      }\n      /**\n       * Gives the control focus.\n       */\n\n    }, {\n      key: \"focus\",\n      value: function focus() {\n        var self = this;\n        if (self.isDisabled) return;\n        self.ignoreFocus = true;\n\n        if (self.control_input.offsetWidth) {\n          self.control_input.focus();\n        } else {\n          self.focus_node.focus();\n        }\n\n        setTimeout(function () {\n          self.ignoreFocus = false;\n          self.onFocus();\n        }, 0);\n      }\n      /**\n       * Forces the control out of focus.\n       *\n       */\n\n    }, {\n      key: \"blur\",\n      value: function blur() {\n        this.focus_node.blur();\n        this.onBlur();\n      }\n      /**\n       * Returns a function that scores an object\n       * to show how good of a match it is to the\n       * provided query.\n       *\n       * @return {function}\n       */\n\n    }, {\n      key: \"getScoreFunction\",\n      value: function getScoreFunction(query) {\n        return this.sifter.getScoreFunction(query, this.getSearchOptions());\n      }\n      /**\n       * Returns search options for sifter (the system\n       * for scoring and sorting results).\n       *\n       * @see https://github.com/orchidjs/sifter.js\n       * @return {object}\n       */\n\n    }, {\n      key: \"getSearchOptions\",\n      value: function getSearchOptions() {\n        var settings = this.settings;\n        var sort = settings.sortField;\n\n        if (typeof settings.sortField === 'string') {\n          sort = [{\n            field: settings.sortField\n          }];\n        }\n\n        return {\n          fields: settings.searchField,\n          conjunction: settings.searchConjunction,\n          sort: sort,\n          nesting: settings.nesting\n        };\n      }\n      /**\n       * Searches through available options and returns\n       * a sorted array of matches.\n       *\n       */\n\n    }, {\n      key: \"search\",\n      value: function search(query) {\n        var result, calculateScore;\n        var self = this;\n        var options = this.getSearchOptions(); // validate user-provided result scoring function\n\n        if (self.settings.score) {\n          calculateScore = self.settings.score.call(self, query);\n\n          if (typeof calculateScore !== 'function') {\n            throw new Error('Tom Select \"score\" setting must be a function that returns a function');\n          }\n        } // perform search\n\n\n        if (query !== self.lastQuery) {\n          self.lastQuery = query;\n          result = self.sifter.search(query, Object.assign(options, {\n            score: calculateScore\n          }));\n          self.currentResults = result;\n        } else {\n          result = Object.assign({}, self.currentResults);\n        } // filter out selected items\n\n\n        if (self.settings.hideSelected) {\n          result.items = result.items.filter(function (item) {\n            var hashed = hash_key(item.id);\n            return !(hashed && self.items.indexOf(hashed) !== -1);\n          });\n        }\n\n        return result;\n      }\n      /**\n       * Refreshes the list of available options shown\n       * in the autocomplete dropdown menu.\n       *\n       */\n\n    }, {\n      key: \"refreshOptions\",\n      value: function refreshOptions() {\n        var triggerDropdown = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n        var i, j, k, n, optgroup, optgroups, html, has_create_option, active_group;\n        var create;\n        var groups = {};\n        var groups_order = [];\n        var self = this;\n        var query = self.inputValue();\n        var same_query = query === self.lastQuery || query == '' && self.lastQuery == null;\n        var results = self.search(query);\n        var active_option = null;\n        var show_dropdown = self.settings.shouldOpen || false;\n        var dropdown_content = self.dropdown_content;\n\n        if (same_query) {\n          active_option = self.activeOption;\n\n          if (active_option) {\n            active_group = active_option.closest('[data-group]');\n          }\n        } // build markup\n\n\n        n = results.items.length;\n\n        if (typeof self.settings.maxOptions === 'number') {\n          n = Math.min(n, self.settings.maxOptions);\n        }\n\n        if (n > 0) {\n          show_dropdown = true;\n        } // render and group available options individually\n\n\n        for (i = 0; i < n; i++) {\n          // get option dom element\n          var item = results.items[i];\n          if (!item) continue;\n          var opt_value = item.id;\n          var option = self.options[opt_value];\n          if (option === undefined) continue;\n          var opt_hash = get_hash(opt_value);\n          var option_el = self.getOption(opt_hash, true); // toggle 'selected' class\n\n          if (!self.settings.hideSelected) {\n            option_el.classList.toggle('selected', self.items.includes(opt_hash));\n          }\n\n          optgroup = option[self.settings.optgroupField] || '';\n          optgroups = Array.isArray(optgroup) ? optgroup : [optgroup];\n\n          for (j = 0, k = optgroups && optgroups.length; j < k; j++) {\n            optgroup = optgroups[j];\n\n            if (!self.optgroups.hasOwnProperty(optgroup)) {\n              optgroup = '';\n            }\n\n            var group_fragment = groups[optgroup];\n\n            if (group_fragment === undefined) {\n              group_fragment = document.createDocumentFragment();\n              groups_order.push(optgroup);\n            } // nodes can only have one parent, so if the option is in mutple groups, we need a clone\n\n\n            if (j > 0) {\n              option_el = option_el.cloneNode(true);\n              setAttr(option_el, {\n                id: option.$id + '-clone-' + j,\n                'aria-selected': null\n              });\n              option_el.classList.add('ts-cloned');\n              removeClasses(option_el, 'active'); // make sure we keep the activeOption in the same group\n\n              if (self.activeOption && self.activeOption.dataset.value == opt_value) {\n                if (active_group && active_group.dataset.group === optgroup.toString()) {\n                  active_option = option_el;\n                }\n              }\n            }\n\n            group_fragment.appendChild(option_el);\n            groups[optgroup] = group_fragment;\n          }\n        } // sort optgroups\n\n\n        if (self.settings.lockOptgroupOrder) {\n          groups_order.sort(function (a, b) {\n            var grp_a = self.optgroups[a];\n            var grp_b = self.optgroups[b];\n            var a_order = grp_a && grp_a.$order || 0;\n            var b_order = grp_b && grp_b.$order || 0;\n            return a_order - b_order;\n          });\n        } // render optgroup headers & join groups\n\n\n        html = document.createDocumentFragment();\n        iterate$1(groups_order, function (optgroup) {\n          var group_fragment = groups[optgroup];\n          if (!group_fragment || !group_fragment.children.length) return;\n          var group_heading = self.optgroups[optgroup];\n\n          if (group_heading !== undefined) {\n            var group_options = document.createDocumentFragment();\n            var header = self.render('optgroup_header', group_heading);\n            append(group_options, header);\n            append(group_options, group_fragment);\n            var group_html = self.render('optgroup', {\n              group: group_heading,\n              options: group_options\n            });\n            append(html, group_html);\n          } else {\n            append(html, group_fragment);\n          }\n        });\n        dropdown_content.innerHTML = '';\n        append(dropdown_content, html); // highlight matching terms inline\n\n        if (self.settings.highlight) {\n          removeHighlight(dropdown_content);\n\n          if (results.query.length && results.tokens.length) {\n            iterate$1(results.tokens, function (tok) {\n              highlight(dropdown_content, tok.regex);\n            });\n          }\n        } // helper method for adding templates to dropdown\n\n\n        var add_template = function add_template(template) {\n          var content = self.render(template, {\n            input: query\n          });\n\n          if (content) {\n            show_dropdown = true;\n            dropdown_content.insertBefore(content, dropdown_content.firstChild);\n          }\n\n          return content;\n        }; // add loading message\n\n\n        if (self.loading) {\n          add_template('loading'); // invalid query\n        } else if (!self.settings.shouldLoad.call(self, query)) {\n          add_template('not_loading'); // add no_results message\n        } else if (results.items.length === 0) {\n          add_template('no_results');\n        } // add create option\n\n\n        has_create_option = self.canCreate(query);\n\n        if (has_create_option) {\n          create = add_template('option_create');\n        } // activate\n\n\n        self.hasOptions = results.items.length > 0 || has_create_option;\n\n        if (show_dropdown) {\n          if (results.items.length > 0) {\n            if (!active_option && self.settings.mode === 'single' && self.items[0] != undefined) {\n              active_option = self.getOption(self.items[0]);\n            }\n\n            if (!dropdown_content.contains(active_option)) {\n              var active_index = 0;\n\n              if (create && !self.settings.addPrecedence) {\n                active_index = 1;\n              }\n\n              active_option = self.selectable()[active_index];\n            }\n          } else if (create) {\n            active_option = create;\n          }\n\n          if (triggerDropdown && !self.isOpen) {\n            self.open();\n            self.scrollToOption(active_option, 'auto');\n          }\n\n          self.setActiveOption(active_option);\n        } else {\n          self.clearActiveOption();\n\n          if (triggerDropdown && self.isOpen) {\n            self.close(false); // if create_option=null, we want the dropdown to close but not reset the textbox value\n          }\n        }\n      }\n      /**\n       * Return list of selectable options\n       *\n       */\n\n    }, {\n      key: \"selectable\",\n      value: function selectable() {\n        return this.dropdown_content.querySelectorAll('[data-selectable]');\n      }\n      /**\n       * Adds an available option. If it already exists,\n       * nothing will happen. Note: this does not refresh\n       * the options list dropdown (use `refreshOptions`\n       * for that).\n       *\n       * Usage:\n       *\n       *   this.addOption(data)\n       *\n       */\n\n    }, {\n      key: \"addOption\",\n      value: function addOption(data) {\n        var user_created = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n        var self = this; // @deprecated 1.7.7\n        // use addOptions( array, user_created ) for adding multiple options\n\n        if (Array.isArray(data)) {\n          self.addOptions(data, user_created);\n          return false;\n        }\n\n        var key = hash_key(data[self.settings.valueField]);\n\n        if (key === null || self.options.hasOwnProperty(key)) {\n          return false;\n        }\n\n        data.$order = data.$order || ++self.order;\n        data.$id = self.inputId + '-opt-' + data.$order;\n        self.options[key] = data;\n        self.lastQuery = null;\n\n        if (user_created) {\n          self.userOptions[key] = user_created;\n          self.trigger('option_add', key, data);\n        }\n\n        return key;\n      }\n      /**\n       * Add multiple options\n       *\n       */\n\n    }, {\n      key: \"addOptions\",\n      value: function addOptions(data) {\n        var _this9 = this;\n\n        var user_created = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n        iterate$1(data, function (dat) {\n          _this9.addOption(dat, user_created);\n        });\n      }\n      /**\n       * @deprecated 1.7.7\n       */\n\n    }, {\n      key: \"registerOption\",\n      value: function registerOption(data) {\n        return this.addOption(data);\n      }\n      /**\n       * Registers an option group to the pool of option groups.\n       *\n       * @return {boolean|string}\n       */\n\n    }, {\n      key: \"registerOptionGroup\",\n      value: function registerOptionGroup(data) {\n        var key = hash_key(data[this.settings.optgroupValueField]);\n        if (key === null) return false;\n        data.$order = data.$order || ++this.order;\n        this.optgroups[key] = data;\n        return key;\n      }\n      /**\n       * Registers a new optgroup for options\n       * to be bucketed into.\n       *\n       */\n\n    }, {\n      key: \"addOptionGroup\",\n      value: function addOptionGroup(id, data) {\n        var hashed_id;\n        data[this.settings.optgroupValueField] = id;\n\n        if (hashed_id = this.registerOptionGroup(data)) {\n          this.trigger('optgroup_add', hashed_id, data);\n        }\n      }\n      /**\n       * Removes an existing option group.\n       *\n       */\n\n    }, {\n      key: \"removeOptionGroup\",\n      value: function removeOptionGroup(id) {\n        if (this.optgroups.hasOwnProperty(id)) {\n          delete this.optgroups[id];\n          this.clearCache();\n          this.trigger('optgroup_remove', id);\n        }\n      }\n      /**\n       * Clears all existing option groups.\n       */\n\n    }, {\n      key: \"clearOptionGroups\",\n      value: function clearOptionGroups() {\n        this.optgroups = {};\n        this.clearCache();\n        this.trigger('optgroup_clear');\n      }\n      /**\n       * Updates an option available for selection. If\n       * it is visible in the selected items or options\n       * dropdown, it will be re-rendered automatically.\n       *\n       */\n\n    }, {\n      key: \"updateOption\",\n      value: function updateOption(value, data) {\n        var self = this;\n        var item_new;\n        var index_item;\n        var value_old = hash_key(value);\n        var value_new = hash_key(data[self.settings.valueField]); // sanity checks\n\n        if (value_old === null) return;\n        var data_old = self.options[value_old];\n        if (data_old == undefined) return;\n        if (typeof value_new !== 'string') throw new Error('Value must be set in option data');\n        var option = self.getOption(value_old);\n        var item = self.getItem(value_old);\n        data.$order = data.$order || data_old.$order;\n        delete self.options[value_old]; // invalidate render cache\n        // don't remove existing node yet, we'll remove it after replacing it\n\n        self.uncacheValue(value_new);\n        self.options[value_new] = data; // update the option if it's in the dropdown\n\n        if (option) {\n          if (self.dropdown_content.contains(option)) {\n            var option_new = self._render('option', data);\n\n            replaceNode(option, option_new);\n\n            if (self.activeOption === option) {\n              self.setActiveOption(option_new);\n            }\n          }\n\n          option.remove();\n        } // update the item if we have one\n\n\n        if (item) {\n          index_item = self.items.indexOf(value_old);\n\n          if (index_item !== -1) {\n            self.items.splice(index_item, 1, value_new);\n          }\n\n          item_new = self._render('item', data);\n          if (item.classList.contains('active')) addClasses(item_new, 'active');\n          replaceNode(item, item_new);\n        } // invalidate last query because we might have updated the sortField\n\n\n        self.lastQuery = null;\n      }\n      /**\n       * Removes a single option.\n       *\n       */\n\n    }, {\n      key: \"removeOption\",\n      value: function removeOption(value, silent) {\n        var self = this;\n        value = get_hash(value);\n        self.uncacheValue(value);\n        delete self.userOptions[value];\n        delete self.options[value];\n        self.lastQuery = null;\n        self.trigger('option_remove', value);\n        self.removeItem(value, silent);\n      }\n      /**\n       * Clears all options.\n       */\n\n    }, {\n      key: \"clearOptions\",\n      value: function clearOptions(filter) {\n        var boundFilter = (filter || this.clearFilter).bind(this);\n        this.loadedSearches = {};\n        this.userOptions = {};\n        this.clearCache();\n        var selected = {};\n        iterate$1(this.options, function (option, key) {\n          if (boundFilter(option, key)) {\n            selected[key] = option;\n          }\n        });\n        this.options = this.sifter.items = selected;\n        this.lastQuery = null;\n        this.trigger('option_clear');\n      }\n      /**\n       * Used by clearOptions() to decide whether or not an option should be removed\n       * Return true to keep an option, false to remove\n       *\n       */\n\n    }, {\n      key: \"clearFilter\",\n      value: function clearFilter(option, value) {\n        if (this.items.indexOf(value) >= 0) {\n          return true;\n        }\n\n        return false;\n      }\n      /**\n       * Returns the dom element of the option\n       * matching the given value.\n       *\n       */\n\n    }, {\n      key: \"getOption\",\n      value: function getOption(value) {\n        var create = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n        var hashed = hash_key(value);\n        if (hashed === null) return null;\n        var option = this.options[hashed];\n\n        if (option != undefined) {\n          if (option.$div) {\n            return option.$div;\n          }\n\n          if (create) {\n            return this._render('option', option);\n          }\n        }\n\n        return null;\n      }\n      /**\n       * Returns the dom element of the next or previous dom element of the same type\n       * Note: adjacent options may not be adjacent DOM elements (optgroups)\n       *\n       */\n\n    }, {\n      key: \"getAdjacent\",\n      value: function getAdjacent(option, direction) {\n        var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'option';\n        var self = this,\n            all;\n\n        if (!option) {\n          return null;\n        }\n\n        if (type == 'item') {\n          all = self.controlChildren();\n        } else {\n          all = self.dropdown_content.querySelectorAll('[data-selectable]');\n        }\n\n        for (var _i4 = 0; _i4 < all.length; _i4++) {\n          if (all[_i4] != option) {\n            continue;\n          }\n\n          if (direction > 0) {\n            return all[_i4 + 1];\n          }\n\n          return all[_i4 - 1];\n        }\n\n        return null;\n      }\n      /**\n       * Returns the dom element of the item\n       * matching the given value.\n       *\n       */\n\n    }, {\n      key: \"getItem\",\n      value: function getItem(item) {\n        if (_typeof(item) == 'object') {\n          return item;\n        }\n\n        var value = hash_key(item);\n        return value !== null ? this.control.querySelector(\"[data-value=\\\"\".concat(addSlashes(value), \"\\\"]\")) : null;\n      }\n      /**\n       * \"Selects\" multiple items at once. Adds them to the list\n       * at the current caret position.\n       *\n       */\n\n    }, {\n      key: \"addItems\",\n      value: function addItems(values, silent) {\n        var self = this;\n        var items = Array.isArray(values) ? values : [values];\n        items = items.filter(function (x) {\n          return self.items.indexOf(x) === -1;\n        });\n        var last_item = items[items.length - 1];\n        items.forEach(function (item) {\n          self.isPending = item !== last_item;\n          self.addItem(item, silent);\n        });\n      }\n      /**\n       * \"Selects\" an item. Adds it to the list\n       * at the current caret position.\n       *\n       */\n\n    }, {\n      key: \"addItem\",\n      value: function addItem(value, silent) {\n        var _this10 = this;\n\n        var events = silent ? [] : ['change', 'dropdown_close'];\n        debounce_events(this, events, function () {\n          var item, wasFull;\n          var self = _this10;\n          var inputMode = self.settings.mode;\n          var hashed = hash_key(value);\n\n          if (hashed && self.items.indexOf(hashed) !== -1) {\n            if (inputMode === 'single') {\n              self.close();\n            }\n\n            if (inputMode === 'single' || !self.settings.duplicates) {\n              return;\n            }\n          }\n\n          if (hashed === null || !self.options.hasOwnProperty(hashed)) return;\n          if (inputMode === 'single') self.clear(silent);\n          if (inputMode === 'multi' && self.isFull()) return;\n          item = self._render('item', self.options[hashed]);\n\n          if (self.control.contains(item)) {\n            // duplicates\n            item = item.cloneNode(true);\n          }\n\n          wasFull = self.isFull();\n          self.items.splice(self.caretPos, 0, hashed);\n          self.insertAtCaret(item);\n\n          if (self.isSetup) {\n            // update menu / remove the option (if this is not one item being added as part of series)\n            if (!self.isPending && self.settings.hideSelected) {\n              var option = self.getOption(hashed);\n              var next = self.getAdjacent(option, 1);\n\n              if (next) {\n                self.setActiveOption(next);\n              }\n            } // refreshOptions after setActiveOption(),\n            // otherwise setActiveOption() will be called by refreshOptions() with the wrong value\n\n\n            if (!self.isPending && !self.settings.closeAfterSelect) {\n              self.refreshOptions(self.isFocused && inputMode !== 'single');\n            } // hide the menu if the maximum number of items have been selected or no options are left\n\n\n            if (self.settings.closeAfterSelect != false && self.isFull()) {\n              self.close();\n            } else if (!self.isPending) {\n              self.positionDropdown();\n            }\n\n            self.trigger('item_add', hashed, item);\n\n            if (!self.isPending) {\n              self.updateOriginalInput({\n                silent: silent\n              });\n            }\n          }\n\n          if (!self.isPending || !wasFull && self.isFull()) {\n            self.inputState();\n            self.refreshState();\n          }\n        });\n      }\n      /**\n       * Removes the selected item matching\n       * the provided value.\n       *\n       */\n\n    }, {\n      key: \"removeItem\",\n      value: function removeItem() {\n        var item = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n        var silent = arguments.length > 1 ? arguments[1] : undefined;\n        var self = this;\n        item = self.getItem(item);\n        if (!item) return;\n        var i, idx;\n        var value = item.dataset.value;\n        i = nodeIndex(item);\n        item.remove();\n\n        if (item.classList.contains('active')) {\n          idx = self.activeItems.indexOf(item);\n          self.activeItems.splice(idx, 1);\n          removeClasses(item, 'active');\n        }\n\n        self.items.splice(i, 1);\n        self.lastQuery = null;\n\n        if (!self.settings.persist && self.userOptions.hasOwnProperty(value)) {\n          self.removeOption(value, silent);\n        }\n\n        if (i < self.caretPos) {\n          self.setCaret(self.caretPos - 1);\n        }\n\n        self.updateOriginalInput({\n          silent: silent\n        });\n        self.refreshState();\n        self.positionDropdown();\n        self.trigger('item_remove', value, item);\n      }\n      /**\n       * Invokes the `create` method provided in the\n       * TomSelect options that should provide the data\n       * for the new item, given the user input.\n       *\n       * Once this completes, it will be added\n       * to the item list.\n       *\n       */\n\n    }, {\n      key: \"createItem\",\n      value: function createItem() {\n        var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n        var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n\n        // triggerDropdown parameter @deprecated 2.1.1\n        if (arguments.length === 3) {\n          callback = arguments[2];\n        }\n\n        if (typeof callback != 'function') {\n          callback = function callback() {};\n        }\n\n        var self = this;\n        var caret = self.caretPos;\n        var output;\n        input = input || self.inputValue();\n\n        if (!self.canCreate(input)) {\n          callback();\n          return false;\n        }\n\n        self.lock();\n        var created = false;\n\n        var create = function create(data) {\n          self.unlock();\n          if (!data || _typeof(data) !== 'object') return callback();\n          var value = hash_key(data[self.settings.valueField]);\n\n          if (typeof value !== 'string') {\n            return callback();\n          }\n\n          self.setTextboxValue();\n          self.addOption(data, true);\n          self.setCaret(caret);\n          self.addItem(value);\n          callback(data);\n          created = true;\n        };\n\n        if (typeof self.settings.create === 'function') {\n          output = self.settings.create.call(this, input, create);\n        } else {\n          var _output;\n\n          output = (_output = {}, _defineProperty(_output, self.settings.labelField, input), _defineProperty(_output, self.settings.valueField, input), _output);\n        }\n\n        if (!created) {\n          create(output);\n        }\n\n        return true;\n      }\n      /**\n       * Re-renders the selected item lists.\n       */\n\n    }, {\n      key: \"refreshItems\",\n      value: function refreshItems() {\n        var self = this;\n        self.lastQuery = null;\n\n        if (self.isSetup) {\n          self.addItems(self.items);\n        }\n\n        self.updateOriginalInput();\n        self.refreshState();\n      }\n      /**\n       * Updates all state-dependent attributes\n       * and CSS classes.\n       */\n\n    }, {\n      key: \"refreshState\",\n      value: function refreshState() {\n        var self = this;\n        self.refreshValidityState();\n        var isFull = self.isFull();\n        var isLocked = self.isLocked;\n        self.wrapper.classList.toggle('rtl', self.rtl);\n        var wrap_classList = self.wrapper.classList;\n        wrap_classList.toggle('focus', self.isFocused);\n        wrap_classList.toggle('disabled', self.isDisabled);\n        wrap_classList.toggle('required', self.isRequired);\n        wrap_classList.toggle('invalid', !self.isValid);\n        wrap_classList.toggle('locked', isLocked);\n        wrap_classList.toggle('full', isFull);\n        wrap_classList.toggle('input-active', self.isFocused && !self.isInputHidden);\n        wrap_classList.toggle('dropdown-active', self.isOpen);\n        wrap_classList.toggle('has-options', isEmptyObject(self.options));\n        wrap_classList.toggle('has-items', self.items.length > 0);\n      }\n      /**\n       * Update the `required` attribute of both input and control input.\n       *\n       * The `required` property needs to be activated on the control input\n       * for the error to be displayed at the right place. `required` also\n       * needs to be temporarily deactivated on the input since the input is\n       * hidden and can't show errors.\n       */\n\n    }, {\n      key: \"refreshValidityState\",\n      value: function refreshValidityState() {\n        var self = this;\n\n        if (!self.input.validity) {\n          return;\n        }\n\n        self.isValid = self.input.validity.valid;\n        self.isInvalid = !self.isValid;\n      }\n      /**\n       * Determines whether or not more items can be added\n       * to the control without exceeding the user-defined maximum.\n       *\n       * @returns {boolean}\n       */\n\n    }, {\n      key: \"isFull\",\n      value: function isFull() {\n        return this.settings.maxItems !== null && this.items.length >= this.settings.maxItems;\n      }\n      /**\n       * Refreshes the original <select> or <input>\n       * element to reflect the current state.\n       *\n       */\n\n    }, {\n      key: \"updateOriginalInput\",\n      value: function updateOriginalInput() {\n        var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n        var self = this;\n        var option, label;\n        var empty_option = self.input.querySelector('option[value=\"\"]');\n\n        if (self.is_select_tag) {\n          var selected = [];\n          var has_selected = self.input.querySelectorAll('option:checked').length;\n\n          function AddSelected(option_el, value, label) {\n            if (!option_el) {\n              option_el = getDom('<option value=\"' + escape_html(value) + '\">' + escape_html(label) + '</option>');\n            } // don't move empty option from top of list\n            // fixes bug in firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1725293\n\n\n            if (option_el != empty_option) {\n              self.input.append(option_el);\n            }\n\n            selected.push(option_el); // marking empty option as selected can break validation\n            // fixes https://github.com/orchidjs/tom-select/issues/303\n\n            if (option_el != empty_option || has_selected > 0) {\n              option_el.selected = true;\n            }\n\n            return option_el;\n          } // unselect all selected options\n\n\n          self.input.querySelectorAll('option:checked').forEach(function (option_el) {\n            option_el.selected = false;\n          }); // nothing selected?\n\n          if (self.items.length == 0 && self.settings.mode == 'single') {\n            AddSelected(empty_option, \"\", \"\"); // order selected <option> tags for values in self.items\n          } else {\n            self.items.forEach(function (value) {\n              option = self.options[value];\n              label = option[self.settings.labelField] || '';\n\n              if (selected.includes(option.$option)) {\n                var reuse_opt = self.input.querySelector(\"option[value=\\\"\".concat(addSlashes(value), \"\\\"]:not(:checked)\"));\n                AddSelected(reuse_opt, value, label);\n              } else {\n                option.$option = AddSelected(option.$option, value, label);\n              }\n            });\n          }\n        } else {\n          self.input.value = self.getValue();\n        }\n\n        if (self.isSetup) {\n          if (!opts.silent) {\n            self.trigger('change', self.getValue());\n          }\n        }\n      }\n      /**\n       * Shows the autocomplete dropdown containing\n       * the available options.\n       */\n\n    }, {\n      key: \"open\",\n      value: function open() {\n        var self = this;\n        if (self.isLocked || self.isOpen || self.settings.mode === 'multi' && self.isFull()) return;\n        self.isOpen = true;\n        setAttr(self.focus_node, {\n          'aria-expanded': 'true'\n        });\n        self.refreshState();\n        applyCSS(self.dropdown, {\n          visibility: 'hidden',\n          display: 'block'\n        });\n        self.positionDropdown();\n        applyCSS(self.dropdown, {\n          visibility: 'visible',\n          display: 'block'\n        });\n        self.focus();\n        self.trigger('dropdown_open', self.dropdown);\n      }\n      /**\n       * Closes the autocomplete dropdown menu.\n       */\n\n    }, {\n      key: \"close\",\n      value: function close() {\n        var setTextboxValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n        var self = this;\n        var trigger = self.isOpen;\n\n        if (setTextboxValue) {\n          // before blur() to prevent form onchange event\n          self.setTextboxValue();\n\n          if (self.settings.mode === 'single' && self.items.length) {\n            self.hideInput();\n          }\n        }\n\n        self.isOpen = false;\n        setAttr(self.focus_node, {\n          'aria-expanded': 'false'\n        });\n        applyCSS(self.dropdown, {\n          display: 'none'\n        });\n\n        if (self.settings.hideSelected) {\n          self.clearActiveOption();\n        }\n\n        self.refreshState();\n        if (trigger) self.trigger('dropdown_close', self.dropdown);\n      }\n      /**\n       * Calculates and applies the appropriate\n       * position of the dropdown if dropdownParent = 'body'.\n       * Otherwise, position is determined by css\n       */\n\n    }, {\n      key: \"positionDropdown\",\n      value: function positionDropdown() {\n        if (this.settings.dropdownParent !== 'body') {\n          return;\n        }\n\n        var context = this.control;\n        var rect = context.getBoundingClientRect();\n        var top = context.offsetHeight + rect.top + window.scrollY;\n        var left = rect.left + window.scrollX;\n        applyCSS(this.dropdown, {\n          width: rect.width + 'px',\n          top: top + 'px',\n          left: left + 'px'\n        });\n      }\n      /**\n       * Resets / clears all selected items\n       * from the control.\n       *\n       */\n\n    }, {\n      key: \"clear\",\n      value: function clear(silent) {\n        var self = this;\n        if (!self.items.length) return;\n        var items = self.controlChildren();\n        iterate$1(items, function (item) {\n          self.removeItem(item, true);\n        });\n        self.showInput();\n        if (!silent) self.updateOriginalInput();\n        self.trigger('clear');\n      }\n      /**\n       * A helper method for inserting an element\n       * at the current caret position.\n       *\n       */\n\n    }, {\n      key: \"insertAtCaret\",\n      value: function insertAtCaret(el) {\n        var self = this;\n        var caret = self.caretPos;\n        var target = self.control;\n        target.insertBefore(el, target.children[caret] || null);\n        self.setCaret(caret + 1);\n      }\n      /**\n       * Removes the current selected item(s).\n       *\n       */\n\n    }, {\n      key: \"deleteSelection\",\n      value: function deleteSelection(e) {\n        var direction, selection, caret, tail;\n        var self = this;\n        direction = e && e.keyCode === KEY_BACKSPACE ? -1 : 1;\n        selection = getSelection(self.control_input); // determine items that will be removed\n\n        var rm_items = [];\n\n        if (self.activeItems.length) {\n          tail = getTail(self.activeItems, direction);\n          caret = nodeIndex(tail);\n\n          if (direction > 0) {\n            caret++;\n          }\n\n          iterate$1(self.activeItems, function (item) {\n            return rm_items.push(item);\n          });\n        } else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) {\n          var items = self.controlChildren();\n          var rm_item;\n\n          if (direction < 0 && selection.start === 0 && selection.length === 0) {\n            rm_item = items[self.caretPos - 1];\n          } else if (direction > 0 && selection.start === self.inputValue().length) {\n            rm_item = items[self.caretPos];\n          }\n\n          if (rm_item !== undefined) {\n            rm_items.push(rm_item);\n          }\n        }\n\n        if (!self.shouldDelete(rm_items, e)) {\n          return false;\n        }\n\n        preventDefault(e, true); // perform removal\n\n        if (typeof caret !== 'undefined') {\n          self.setCaret(caret);\n        }\n\n        while (rm_items.length) {\n          self.removeItem(rm_items.pop());\n        }\n\n        self.showInput();\n        self.positionDropdown();\n        self.refreshOptions(false);\n        return true;\n      }\n      /**\n       * Return true if the items should be deleted\n       */\n\n    }, {\n      key: \"shouldDelete\",\n      value: function shouldDelete(items, evt) {\n        var values = items.map(function (item) {\n          return item.dataset.value;\n        }); // allow the callback to abort\n\n        if (!values.length || typeof this.settings.onDelete === 'function' && this.settings.onDelete(values, evt) === false) {\n          return false;\n        }\n\n        return true;\n      }\n      /**\n       * Selects the previous / next item (depending on the `direction` argument).\n       *\n       * > 0 - right\n       * < 0 - left\n       *\n       */\n\n    }, {\n      key: \"advanceSelection\",\n      value: function advanceSelection(direction, e) {\n        var last_active,\n            adjacent,\n            self = this;\n        if (self.rtl) direction *= -1;\n        if (self.inputValue().length) return; // add or remove to active items\n\n        if (isKeyDown(KEY_SHORTCUT, e) || isKeyDown('shiftKey', e)) {\n          last_active = self.getLastActive(direction);\n\n          if (last_active) {\n            if (!last_active.classList.contains('active')) {\n              adjacent = last_active;\n            } else {\n              adjacent = self.getAdjacent(last_active, direction, 'item');\n            } // if no active item, get items adjacent to the control input\n\n          } else if (direction > 0) {\n            adjacent = self.control_input.nextElementSibling;\n          } else {\n            adjacent = self.control_input.previousElementSibling;\n          }\n\n          if (adjacent) {\n            if (adjacent.classList.contains('active')) {\n              self.removeActiveItem(last_active);\n            }\n\n            self.setActiveItemClass(adjacent); // mark as last_active !! after removeActiveItem() on last_active\n          } // move caret to the left or right\n\n        } else {\n          self.moveCaret(direction);\n        }\n      }\n    }, {\n      key: \"moveCaret\",\n      value: function moveCaret(direction) {}\n      /**\n       * Get the last active item\n       *\n       */\n\n    }, {\n      key: \"getLastActive\",\n      value: function getLastActive(direction) {\n        var last_active = this.control.querySelector('.last-active');\n\n        if (last_active) {\n          return last_active;\n        }\n\n        var result = this.control.querySelectorAll('.active');\n\n        if (result) {\n          return getTail(result, direction);\n        }\n      }\n      /**\n       * Moves the caret to the specified index.\n       *\n       * The input must be moved by leaving it in place and moving the\n       * siblings, due to the fact that focus cannot be restored once lost\n       * on mobile webkit devices\n       *\n       */\n\n    }, {\n      key: \"setCaret\",\n      value: function setCaret(new_pos) {\n        this.caretPos = this.items.length;\n      }\n      /**\n       * Return list of item dom elements\n       *\n       */\n\n    }, {\n      key: \"controlChildren\",\n      value: function controlChildren() {\n        return Array.from(this.control.querySelectorAll('[data-ts-item]'));\n      }\n      /**\n       * Disables user input on the control. Used while\n       * items are being asynchronously created.\n       */\n\n    }, {\n      key: \"lock\",\n      value: function lock() {\n        this.isLocked = true;\n        this.refreshState();\n      }\n      /**\n       * Re-enables user input on the control.\n       */\n\n    }, {\n      key: \"unlock\",\n      value: function unlock() {\n        this.isLocked = false;\n        this.refreshState();\n      }\n      /**\n       * Disables user input on the control completely.\n       * While disabled, it cannot receive focus.\n       */\n\n    }, {\n      key: \"disable\",\n      value: function disable() {\n        var self = this;\n        self.input.disabled = true;\n        self.control_input.disabled = true;\n        self.focus_node.tabIndex = -1;\n        self.isDisabled = true;\n        this.close();\n        self.lock();\n      }\n      /**\n       * Enables the control so that it can respond\n       * to focus and user input.\n       */\n\n    }, {\n      key: \"enable\",\n      value: function enable() {\n        var self = this;\n        self.input.disabled = false;\n        self.control_input.disabled = false;\n        self.focus_node.tabIndex = self.tabIndex;\n        self.isDisabled = false;\n        self.unlock();\n      }\n      /**\n       * Completely destroys the control and\n       * unbinds all event listeners so that it can\n       * be garbage collected.\n       */\n\n    }, {\n      key: \"destroy\",\n      value: function destroy() {\n        var self = this;\n        var revertSettings = self.revertSettings;\n        self.trigger('destroy');\n        self.off();\n        self.wrapper.remove();\n        self.dropdown.remove();\n        self.input.innerHTML = revertSettings.innerHTML;\n        self.input.tabIndex = revertSettings.tabIndex;\n        removeClasses(self.input, 'tomselected', 'ts-hidden-accessible');\n\n        self._destroy();\n\n        delete self.input.tomselect;\n      }\n      /**\n       * A helper method for rendering \"item\" and\n       * \"option\" templates, given the data.\n       *\n       */\n\n    }, {\n      key: \"render\",\n      value: function render(templateName, data) {\n        var id, html;\n        var self = this;\n\n        if (typeof this.settings.render[templateName] !== 'function') {\n          return null;\n        } // render markup\n\n\n        html = self.settings.render[templateName].call(this, data, escape_html);\n\n        if (!html) {\n          return null;\n        }\n\n        html = getDom(html); // add mandatory attributes\n\n        if (templateName === 'option' || templateName === 'option_create') {\n          if (data[self.settings.disabledField]) {\n            setAttr(html, {\n              'aria-disabled': 'true'\n            });\n          } else {\n            setAttr(html, {\n              'data-selectable': ''\n            });\n          }\n        } else if (templateName === 'optgroup') {\n          id = data.group[self.settings.optgroupValueField];\n          setAttr(html, {\n            'data-group': id\n          });\n\n          if (data.group[self.settings.disabledField]) {\n            setAttr(html, {\n              'data-disabled': ''\n            });\n          }\n        }\n\n        if (templateName === 'option' || templateName === 'item') {\n          var value = get_hash(data[self.settings.valueField]);\n          setAttr(html, {\n            'data-value': value\n          }); // make sure we have some classes if a template is overwritten\n\n          if (templateName === 'item') {\n            addClasses(html, self.settings.itemClass);\n            setAttr(html, {\n              'data-ts-item': ''\n            });\n          } else {\n            addClasses(html, self.settings.optionClass);\n            setAttr(html, {\n              role: 'option',\n              id: data.$id\n            }); // update cache\n\n            data.$div = html;\n            self.options[value] = data;\n          }\n        }\n\n        return html;\n      }\n      /**\n       * Type guarded rendering\n       *\n       */\n\n    }, {\n      key: \"_render\",\n      value: function _render(templateName, data) {\n        var html = this.render(templateName, data);\n\n        if (html == null) {\n          throw 'HTMLElement expected';\n        }\n\n        return html;\n      }\n      /**\n       * Clears the render cache for a template. If\n       * no template is given, clears all render\n       * caches.\n       *\n       */\n\n    }, {\n      key: \"clearCache\",\n      value: function clearCache() {\n        iterate$1(this.options, function (option) {\n          if (option.$div) {\n            option.$div.remove();\n            delete option.$div;\n          }\n        });\n      }\n      /**\n       * Removes a value from item and option caches\n       *\n       */\n\n    }, {\n      key: \"uncacheValue\",\n      value: function uncacheValue(value) {\n        var option_el = this.getOption(value);\n        if (option_el) option_el.remove();\n      }\n      /**\n       * Determines whether or not to display the\n       * create item prompt, given a user input.\n       *\n       */\n\n    }, {\n      key: \"canCreate\",\n      value: function canCreate(input) {\n        return this.settings.create && input.length > 0 && this.settings.createFilter.call(this, input);\n      }\n      /**\n       * Wraps this.`method` so that `new_fn` can be invoked 'before', 'after', or 'instead' of the original method\n       *\n       * this.hook('instead','onKeyDown',function( arg1, arg2 ...){\n       *\n       * });\n       */\n\n    }, {\n      key: \"hook\",\n      value: function hook(when, method, new_fn) {\n        var self = this;\n        var orig_method = self[method];\n\n        self[method] = function () {\n          var result, result_new;\n\n          if (when === 'after') {\n            result = orig_method.apply(self, arguments);\n          }\n\n          result_new = new_fn.apply(self, arguments);\n\n          if (when === 'instead') {\n            return result_new;\n          }\n\n          if (when === 'before') {\n            result = orig_method.apply(self, arguments);\n          }\n\n          return result;\n        };\n      }\n    }]);\n\n    return TomSelect;\n  }(MicroPlugin(MicroEvent));\n  /**\n   * Plugin: \"change_listener\" (Tom Select)\n   * Copyright (c) contributors\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   */\n\n\n  function change_listener() {\n    var _this11 = this;\n\n    addEvent(this.input, 'change', function () {\n      _this11.sync();\n    });\n  }\n  /**\n   * Plugin: \"restore_on_backspace\" (Tom Select)\n   * Copyright (c) contributors\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   */\n\n\n  function checkbox_options() {\n    var self = this;\n    var orig_onOptionSelect = self.onOptionSelect;\n    self.settings.hideSelected = false; // update the checkbox for an option\n\n    var UpdateCheckbox = function UpdateCheckbox(option) {\n      setTimeout(function () {\n        var checkbox = option.querySelector('input');\n\n        if (checkbox instanceof HTMLInputElement) {\n          if (option.classList.contains('selected')) {\n            checkbox.checked = true;\n          } else {\n            checkbox.checked = false;\n          }\n        }\n      }, 1);\n    }; // add checkbox to option template\n\n\n    self.hook('after', 'setupTemplates', function () {\n      var orig_render_option = self.settings.render.option;\n\n      self.settings.render.option = function (data, escape_html) {\n        var rendered = getDom(orig_render_option.call(self, data, escape_html));\n        var checkbox = document.createElement('input');\n        checkbox.addEventListener('click', function (evt) {\n          preventDefault(evt);\n        });\n        checkbox.type = 'checkbox';\n        var hashed = hash_key(data[self.settings.valueField]);\n\n        if (hashed && self.items.indexOf(hashed) > -1) {\n          checkbox.checked = true;\n        }\n\n        rendered.prepend(checkbox);\n        return rendered;\n      };\n    }); // uncheck when item removed\n\n    self.on('item_remove', function (value) {\n      var option = self.getOption(value);\n\n      if (option) {\n        // if dropdown hasn't been opened yet, the option won't exist\n        option.classList.remove('selected'); // selected class won't be removed yet\n\n        UpdateCheckbox(option);\n      }\n    }); // check when item added\n\n    self.on('item_add', function (value) {\n      var option = self.getOption(value);\n\n      if (option) {\n        // if dropdown hasn't been opened yet, the option won't exist\n        UpdateCheckbox(option);\n      }\n    }); // remove items when selected option is clicked\n\n    self.hook('instead', 'onOptionSelect', function (evt, option) {\n      if (option.classList.contains('selected')) {\n        option.classList.remove('selected');\n        self.removeItem(option.dataset.value);\n        self.refreshOptions();\n        preventDefault(evt, true);\n        return;\n      }\n\n      orig_onOptionSelect.call(self, evt, option);\n      UpdateCheckbox(option);\n    });\n  }\n  /**\n   * Plugin: \"dropdown_header\" (Tom Select)\n   * Copyright (c) contributors\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   */\n\n\n  function clear_button(userOptions) {\n    var self = this;\n    var options = Object.assign({\n      className: 'clear-button',\n      title: 'Clear All',\n      html: function html(data) {\n        return \"<div class=\\\"\".concat(data.className, \"\\\" title=\\\"\").concat(data.title, \"\\\">&#10799;</div>\");\n      }\n    }, userOptions);\n    self.on('initialize', function () {\n      var button = getDom(options.html(options));\n      button.addEventListener('click', function (evt) {\n        if (self.isDisabled) {\n          return;\n        }\n\n        self.clear();\n\n        if (self.settings.mode === 'single' && self.settings.allowEmptyOption) {\n          self.addItem('');\n        }\n\n        evt.preventDefault();\n        evt.stopPropagation();\n      });\n      self.control.appendChild(button);\n    });\n  }\n  /**\n   * Plugin: \"drag_drop\" (Tom Select)\n   * Copyright (c) contributors\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   */\n\n\n  function drag_drop() {\n    var self = this;\n    if (!$.fn.sortable) throw new Error('The \"drag_drop\" plugin requires jQuery UI \"sortable\".');\n    if (self.settings.mode !== 'multi') return;\n    var orig_lock = self.lock;\n    var orig_unlock = self.unlock;\n    self.hook('instead', 'lock', function () {\n      var sortable = $(self.control).data('sortable');\n      if (sortable) sortable.disable();\n      return orig_lock.call(self);\n    });\n    self.hook('instead', 'unlock', function () {\n      var sortable = $(self.control).data('sortable');\n      if (sortable) sortable.enable();\n      return orig_unlock.call(self);\n    });\n    self.on('initialize', function () {\n      var $control = $(self.control).sortable({\n        items: '[data-value]',\n        forcePlaceholderSize: true,\n        disabled: self.isLocked,\n        start: function start(e, ui) {\n          ui.placeholder.css('width', ui.helper.css('width'));\n          $control.css({\n            overflow: 'visible'\n          });\n        },\n        stop: function stop() {\n          $control.css({\n            overflow: 'hidden'\n          });\n          var values = [];\n          $control.children('[data-value]').each(function () {\n            if (this.dataset.value) values.push(this.dataset.value);\n          });\n          self.setValue(values);\n        }\n      });\n    });\n  }\n  /**\n   * Plugin: \"dropdown_header\" (Tom Select)\n   * Copyright (c) contributors\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   */\n\n\n  function dropdown_header(userOptions) {\n    var self = this;\n    var options = Object.assign({\n      title: 'Untitled',\n      headerClass: 'dropdown-header',\n      titleRowClass: 'dropdown-header-title',\n      labelClass: 'dropdown-header-label',\n      closeClass: 'dropdown-header-close',\n      html: function html(data) {\n        return '<div class=\"' + data.headerClass + '\">' + '<div class=\"' + data.titleRowClass + '\">' + '<span class=\"' + data.labelClass + '\">' + data.title + '</span>' + '<a class=\"' + data.closeClass + '\">&times;</a>' + '</div>' + '</div>';\n      }\n    }, userOptions);\n    self.on('initialize', function () {\n      var header = getDom(options.html(options));\n      var close_link = header.querySelector('.' + options.closeClass);\n\n      if (close_link) {\n        close_link.addEventListener('click', function (evt) {\n          preventDefault(evt, true);\n          self.close();\n        });\n      }\n\n      self.dropdown.insertBefore(header, self.dropdown.firstChild);\n    });\n  }\n  /**\n   * Plugin: \"dropdown_input\" (Tom Select)\n   * Copyright (c) contributors\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   */\n\n\n  function caret_position() {\n    var self = this;\n    /**\n     * Moves the caret to the specified index.\n     *\n     * The input must be moved by leaving it in place and moving the\n     * siblings, due to the fact that focus cannot be restored once lost\n     * on mobile webkit devices\n     *\n     */\n\n    self.hook('instead', 'setCaret', function (new_pos) {\n      if (self.settings.mode === 'single' || !self.control.contains(self.control_input)) {\n        new_pos = self.items.length;\n      } else {\n        new_pos = Math.max(0, Math.min(self.items.length, new_pos));\n\n        if (new_pos != self.caretPos && !self.isPending) {\n          self.controlChildren().forEach(function (child, j) {\n            if (j < new_pos) {\n              self.control_input.insertAdjacentElement('beforebegin', child);\n            } else {\n              self.control.appendChild(child);\n            }\n          });\n        }\n      }\n\n      self.caretPos = new_pos;\n    });\n    self.hook('instead', 'moveCaret', function (direction) {\n      if (!self.isFocused) return; // move caret before or after selected items\n\n      var last_active = self.getLastActive(direction);\n\n      if (last_active) {\n        var idx = nodeIndex(last_active);\n        self.setCaret(direction > 0 ? idx + 1 : idx);\n        self.setActiveItem();\n        removeClasses(last_active, 'last-active'); // move caret left or right of current position\n      } else {\n        self.setCaret(self.caretPos + direction);\n      }\n    });\n  }\n  /**\n   * Plugin: \"dropdown_input\" (Tom Select)\n   * Copyright (c) contributors\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   */\n\n\n  function dropdown_input() {\n    var self = this;\n    self.settings.shouldOpen = true; // make sure the input is shown even if there are no options to display in the dropdown\n\n    self.hook('before', 'setup', function () {\n      self.focus_node = self.control;\n      addClasses(self.control_input, 'dropdown-input');\n      var div = getDom('<div class=\"dropdown-input-wrap\">');\n      div.append(self.control_input);\n      self.dropdown.insertBefore(div, self.dropdown.firstChild); // set a placeholder in the select control\n\n      var placeholder = getDom('<input class=\"items-placeholder\" tabindex=\"-1\" />');\n      placeholder.placeholder = self.settings.placeholder || '';\n      self.control.append(placeholder);\n    });\n    self.on('initialize', function () {\n      // set tabIndex on control to -1, otherwise [shift+tab] will put focus right back on control_input\n      self.control_input.addEventListener('keydown', function (evt) {\n        //addEvent(self.control_input,'keydown' as const,(evt:KeyboardEvent) =>{\n        switch (evt.keyCode) {\n          case KEY_ESC:\n            if (self.isOpen) {\n              preventDefault(evt, true);\n              self.close();\n            }\n\n            self.clearActiveItems();\n            return;\n\n          case KEY_TAB:\n            self.focus_node.tabIndex = -1;\n            break;\n        }\n\n        return self.onKeyDown.call(self, evt);\n      });\n      self.on('blur', function () {\n        self.focus_node.tabIndex = self.isDisabled ? -1 : self.tabIndex;\n      }); // give the control_input focus when the dropdown is open\n\n      self.on('dropdown_open', function () {\n        self.control_input.focus();\n      }); // prevent onBlur from closing when focus is on the control_input\n\n      var orig_onBlur = self.onBlur;\n      self.hook('instead', 'onBlur', function (evt) {\n        if (evt && evt.relatedTarget == self.control_input) return;\n        return orig_onBlur.call(self);\n      });\n      addEvent(self.control_input, 'blur', function () {\n        return self.onBlur();\n      }); // return focus to control to allow further keyboard input\n\n      self.hook('before', 'close', function () {\n        if (!self.isOpen) return;\n        self.focus_node.focus({\n          preventScroll: true\n        });\n      });\n    });\n  }\n  /**\n   * Plugin: \"input_autogrow\" (Tom Select)\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   */\n\n\n  function input_autogrow() {\n    var self = this;\n    self.on('initialize', function () {\n      var test_input = document.createElement('span');\n      var control = self.control_input;\n      test_input.style.cssText = 'position:absolute; top:-99999px; left:-99999px; width:auto; padding:0; white-space:pre; ';\n      self.wrapper.appendChild(test_input);\n      var transfer_styles = ['letterSpacing', 'fontSize', 'fontFamily', 'fontWeight', 'textTransform'];\n\n      for (var _i5 = 0, _transfer_styles = transfer_styles; _i5 < _transfer_styles.length; _i5++) {\n        var style_name = _transfer_styles[_i5];\n        // @ts-ignore TS7015 https://stackoverflow.com/a/50506154/697576\n        test_input.style[style_name] = control.style[style_name];\n      }\n      /**\n       * Set the control width\n       *\n       */\n\n\n      var resize = function resize() {\n        test_input.textContent = control.value;\n        control.style.width = test_input.clientWidth + 'px';\n      };\n\n      resize();\n      self.on('update item_add item_remove', resize);\n      addEvent(control, 'input', resize);\n      addEvent(control, 'keyup', resize);\n      addEvent(control, 'blur', resize);\n      addEvent(control, 'update', resize);\n    });\n  }\n  /**\n   * Plugin: \"input_autogrow\" (Tom Select)\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   */\n\n\n  function no_backspace_delete() {\n    var self = this;\n    var orig_deleteSelection = self.deleteSelection;\n    this.hook('instead', 'deleteSelection', function (evt) {\n      if (self.activeItems.length) {\n        return orig_deleteSelection.call(self, evt);\n      }\n\n      return false;\n    });\n  }\n  /**\n   * Plugin: \"no_active_items\" (Tom Select)\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   */\n\n\n  function no_active_items() {\n    this.hook('instead', 'setActiveItem', function () {});\n    this.hook('instead', 'selectAll', function () {});\n  }\n  /**\n   * Plugin: \"optgroup_columns\" (Tom Select.js)\n   * Copyright (c) contributors\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   */\n\n\n  function optgroup_columns() {\n    var self = this;\n    var orig_keydown = self.onKeyDown;\n    self.hook('instead', 'onKeyDown', function (evt) {\n      var index, option, options, optgroup;\n\n      if (!self.isOpen || !(evt.keyCode === KEY_LEFT || evt.keyCode === KEY_RIGHT)) {\n        return orig_keydown.call(self, evt);\n      }\n\n      self.ignoreHover = true;\n      optgroup = parentMatch(self.activeOption, '[data-group]');\n      index = nodeIndex(self.activeOption, '[data-selectable]');\n\n      if (!optgroup) {\n        return;\n      }\n\n      if (evt.keyCode === KEY_LEFT) {\n        optgroup = optgroup.previousSibling;\n      } else {\n        optgroup = optgroup.nextSibling;\n      }\n\n      if (!optgroup) {\n        return;\n      }\n\n      options = optgroup.querySelectorAll('[data-selectable]');\n      option = options[Math.min(options.length - 1, index)];\n\n      if (option) {\n        self.setActiveOption(option);\n      }\n    });\n  }\n  /**\n   * Plugin: \"remove_button\" (Tom Select)\n   * Copyright (c) contributors\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   */\n\n\n  function remove_button(userOptions) {\n    var options = Object.assign({\n      label: '&times;',\n      title: 'Remove',\n      className: 'remove',\n      append: true\n    }, userOptions); //options.className = 'remove-single';\n\n    var self = this; // override the render method to add remove button to each item\n\n    if (!options.append) {\n      return;\n    }\n\n    var html = '<a href=\"javascript:void(0)\" class=\"' + options.className + '\" tabindex=\"-1\" title=\"' + escape_html(options.title) + '\">' + options.label + '</a>';\n    self.hook('after', 'setupTemplates', function () {\n      var orig_render_item = self.settings.render.item;\n\n      self.settings.render.item = function (data, escape) {\n        var item = getDom(orig_render_item.call(self, data, escape));\n        var close_button = getDom(html);\n        item.appendChild(close_button);\n        addEvent(close_button, 'mousedown', function (evt) {\n          preventDefault(evt, true);\n        });\n        addEvent(close_button, 'click', function (evt) {\n          // propagating will trigger the dropdown to show for single mode\n          preventDefault(evt, true);\n          if (self.isLocked) return;\n          if (!self.shouldDelete([item], evt)) return;\n          self.removeItem(item);\n          self.refreshOptions(false);\n          self.inputState();\n        });\n        return item;\n      };\n    });\n  }\n  /**\n   * Plugin: \"restore_on_backspace\" (Tom Select)\n   * Copyright (c) contributors\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   */\n\n\n  function restore_on_backspace(userOptions) {\n    var self = this;\n    var options = Object.assign({\n      text: function text(option) {\n        return option[self.settings.labelField];\n      }\n    }, userOptions);\n    self.on('item_remove', function (value) {\n      if (!self.isFocused) {\n        return;\n      }\n\n      if (self.control_input.value.trim() === '') {\n        var option = self.options[value];\n\n        if (option) {\n          self.setTextboxValue(options.text.call(self, option));\n        }\n      }\n    });\n  }\n  /**\n   * Plugin: \"restore_on_backspace\" (Tom Select)\n   * Copyright (c) contributors\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n   * file except in compliance with the License. You may obtain a copy of the License at:\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software distributed under\n   * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n   * ANY KIND, either express or implied. See the License for the specific language\n   * governing permissions and limitations under the License.\n   *\n   */\n\n\n  function virtual_scroll() {\n    var self = this;\n    var orig_canLoad = self.canLoad;\n    var orig_clearActiveOption = self.clearActiveOption;\n    var orig_loadCallback = self.loadCallback;\n    var pagination = {};\n    var dropdown_content;\n    var loading_more = false;\n    var load_more_opt;\n    var default_values = [];\n\n    if (!self.settings.shouldLoadMore) {\n      // return true if additional results should be loaded\n      self.settings.shouldLoadMore = function () {\n        var scroll_percent = dropdown_content.clientHeight / (dropdown_content.scrollHeight - dropdown_content.scrollTop);\n\n        if (scroll_percent > 0.9) {\n          return true;\n        }\n\n        if (self.activeOption) {\n          var selectable = self.selectable();\n          var index = Array.from(selectable).indexOf(self.activeOption);\n\n          if (index >= selectable.length - 2) {\n            return true;\n          }\n        }\n\n        return false;\n      };\n    }\n\n    if (!self.settings.firstUrl) {\n      throw 'virtual_scroll plugin requires a firstUrl() method';\n    } // in order for virtual scrolling to work,\n    // options need to be ordered the same way they're returned from the remote data source\n\n\n    self.settings.sortField = [{\n      field: '$order'\n    }, {\n      field: '$score'\n    }]; // can we load more results for given query?\n\n    var canLoadMore = function canLoadMore(query) {\n      if (typeof self.settings.maxOptions === 'number' && dropdown_content.children.length >= self.settings.maxOptions) {\n        return false;\n      }\n\n      if (query in pagination && pagination[query]) {\n        return true;\n      }\n\n      return false;\n    };\n\n    var clearFilter = function clearFilter(option, value) {\n      if (self.items.indexOf(value) >= 0 || default_values.indexOf(value) >= 0) {\n        return true;\n      }\n\n      return false;\n    }; // set the next url that will be\n\n\n    self.setNextUrl = function (value, next_url) {\n      pagination[value] = next_url;\n    }; // getUrl() to be used in settings.load()\n\n\n    self.getUrl = function (query) {\n      if (query in pagination) {\n        var next_url = pagination[query];\n        pagination[query] = false;\n        return next_url;\n      } // if the user goes back to a previous query\n      // we need to load the first page again\n\n\n      pagination = {};\n      return self.settings.firstUrl.call(self, query);\n    }; // don't clear the active option (and cause unwanted dropdown scroll)\n    // while loading more results\n\n\n    self.hook('instead', 'clearActiveOption', function () {\n      if (loading_more) {\n        return;\n      }\n\n      return orig_clearActiveOption.call(self);\n    }); // override the canLoad method\n\n    self.hook('instead', 'canLoad', function (query) {\n      // first time the query has been seen\n      if (!(query in pagination)) {\n        return orig_canLoad.call(self, query);\n      }\n\n      return canLoadMore(query);\n    }); // wrap the load\n\n    self.hook('instead', 'loadCallback', function (options, optgroups) {\n      if (!loading_more) {\n        self.clearOptions(clearFilter);\n      } else if (load_more_opt) {\n        var first_option = options[0];\n\n        if (first_option !== undefined) {\n          load_more_opt.dataset.value = first_option[self.settings.valueField];\n        }\n      }\n\n      orig_loadCallback.call(self, options, optgroups);\n      loading_more = false;\n    }); // add templates to dropdown\n    //\tloading_more if we have another url in the queue\n    //\tno_more_results if we don't have another url in the queue\n\n    self.hook('after', 'refreshOptions', function () {\n      var query = self.lastValue;\n      var option;\n\n      if (canLoadMore(query)) {\n        option = self.render('loading_more', {\n          query: query\n        });\n\n        if (option) {\n          option.setAttribute('data-selectable', ''); // so that navigating dropdown with [down] keypresses can navigate to this node\n\n          load_more_opt = option;\n        }\n      } else if (query in pagination && !dropdown_content.querySelector('.no-results')) {\n        option = self.render('no_more_results', {\n          query: query\n        });\n      }\n\n      if (option) {\n        addClasses(option, self.settings.optionClass);\n        dropdown_content.append(option);\n      }\n    }); // add scroll listener and default templates\n\n    self.on('initialize', function () {\n      default_values = Object.keys(self.options);\n      dropdown_content = self.dropdown_content; // default templates\n\n      self.settings.render = Object.assign({}, {\n        loading_more: function loading_more() {\n          return \"<div class=\\\"loading-more-results\\\">Loading more results ... </div>\";\n        },\n        no_more_results: function no_more_results() {\n          return \"<div class=\\\"no-more-results\\\">No more results</div>\";\n        }\n      }, self.settings.render); // watch dropdown content scroll position\n\n      dropdown_content.addEventListener('scroll', function () {\n        if (!self.settings.shouldLoadMore.call(self)) {\n          return;\n        } // !important: this will get checked again in load() but we still need to check here otherwise loading_more will be set to true\n\n\n        if (!canLoadMore(self.lastValue)) {\n          return;\n        } // don't call load() too much\n\n\n        if (loading_more) return;\n        loading_more = true;\n        self.load.call(self, self.lastValue);\n      });\n    });\n  }\n\n  TomSelect.define('change_listener', change_listener);\n  TomSelect.define('checkbox_options', checkbox_options);\n  TomSelect.define('clear_button', clear_button);\n  TomSelect.define('drag_drop', drag_drop);\n  TomSelect.define('dropdown_header', dropdown_header);\n  TomSelect.define('caret_position', caret_position);\n  TomSelect.define('dropdown_input', dropdown_input);\n  TomSelect.define('input_autogrow', input_autogrow);\n  TomSelect.define('no_backspace_delete', no_backspace_delete);\n  TomSelect.define('no_active_items', no_active_items);\n  TomSelect.define('optgroup_columns', optgroup_columns);\n  TomSelect.define('remove_button', remove_button);\n  TomSelect.define('restore_on_backspace', restore_on_backspace);\n  TomSelect.define('virtual_scroll', virtual_scroll);\n  return TomSelect;\n});\n\nvar tomSelect = function tomSelect(el, opts) {\n  return new TomSelect(el, opts);\n};","module.exports = function (originalModule) {\n  if (!originalModule.webpackPolyfill) {\n    var module = Object.create(originalModule); // module.parent = undefined by default\n\n    if (!module.children) module.children = [];\n    Object.defineProperty(module, \"loaded\", {\n      enumerable: true,\n      get: function get() {\n        return module.l;\n      }\n    });\n    Object.defineProperty(module, \"id\", {\n      enumerable: true,\n      get: function get() {\n        return module.i;\n      }\n    });\n    Object.defineProperty(module, \"exports\", {\n      enumerable: true\n    });\n    module.webpackPolyfill = 1;\n  }\n\n  return module;\n};","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar __assign = this && this.__assign || function () {\n  __assign = Object.assign || function (t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n      s = arguments[i];\n\n      for (var p in s) {\n        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n    }\n\n    return t;\n  };\n\n  return __assign.apply(this, arguments);\n};\n\nvar __spreadArrays = this && this.__spreadArrays || function () {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n    s += arguments[i].length;\n  }\n\n  for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n    for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n      r[k] = a[j];\n    }\n  }\n\n  return r;\n};\n\nimport { defaults as defaultOptions, HOOKS } from \"./types/options\";\nimport English from \"./l10n/default\";\nimport { arrayify, debounce, int, pad } from \"./utils\";\nimport { clearNode, createElement, createNumberInput, findParent, toggleClass, getEventTarget } from \"./utils/dom\";\nimport { compareDates, createDateParser, createDateFormatter, duration, isBetween, getDefaultHours, calculateSecondsSinceMidnight, parseSeconds } from \"./utils/dates\";\nimport { tokenRegex, monthToStr } from \"./utils/formatting\";\nimport \"./utils/polyfills\";\nvar DEBOUNCED_CHANGE_MS = 300;\n\nfunction FlatpickrInstance(element, instanceConfig) {\n  var self = {\n    config: __assign(__assign({}, defaultOptions), flatpickr.defaultConfig),\n    l10n: English\n  };\n  self.parseDate = createDateParser({\n    config: self.config,\n    l10n: self.l10n\n  });\n  self._handlers = [];\n  self.pluginElements = [];\n  self.loadedPlugins = [];\n  self._bind = bind;\n  self._setHoursFromDate = setHoursFromDate;\n  self._positionCalendar = positionCalendar;\n  self.changeMonth = changeMonth;\n  self.changeYear = changeYear;\n  self.clear = clear;\n  self.close = close;\n  self.onMouseOver = onMouseOver;\n  self._createElement = createElement;\n  self.createDay = createDay;\n  self.destroy = destroy;\n  self.isEnabled = isEnabled;\n  self.jumpToDate = jumpToDate;\n  self.updateValue = updateValue;\n  self.open = open;\n  self.redraw = redraw;\n  self.set = set;\n  self.setDate = setDate;\n  self.toggle = toggle;\n\n  function setupHelperFunctions() {\n    self.utils = {\n      getDaysInMonth: function getDaysInMonth(month, yr) {\n        if (month === void 0) {\n          month = self.currentMonth;\n        }\n\n        if (yr === void 0) {\n          yr = self.currentYear;\n        }\n\n        if (month === 1 && (yr % 4 === 0 && yr % 100 !== 0 || yr % 400 === 0)) return 29;\n        return self.l10n.daysInMonth[month];\n      }\n    };\n  }\n\n  function init() {\n    self.element = self.input = element;\n    self.isOpen = false;\n    parseConfig();\n    setupLocale();\n    setupInputs();\n    setupDates();\n    setupHelperFunctions();\n    if (!self.isMobile) build();\n    bindEvents();\n\n    if (self.selectedDates.length || self.config.noCalendar) {\n      if (self.config.enableTime) {\n        setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n      }\n\n      updateValue(false);\n    }\n\n    setCalendarWidth();\n    var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n    if (!self.isMobile && isSafari) {\n      positionCalendar();\n    }\n\n    triggerEvent(\"onReady\");\n  }\n\n  function getClosestActiveElement() {\n    var _a;\n\n    return ((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode()).activeElement || document.activeElement;\n  }\n\n  function bindToInstance(fn) {\n    return fn.bind(self);\n  }\n\n  function setCalendarWidth() {\n    var config = self.config;\n\n    if (config.weekNumbers === false && config.showMonths === 1) {\n      return;\n    } else if (config.noCalendar !== true) {\n      window.requestAnimationFrame(function () {\n        if (self.calendarContainer !== undefined) {\n          self.calendarContainer.style.visibility = \"hidden\";\n          self.calendarContainer.style.display = \"block\";\n        }\n\n        if (self.daysContainer !== undefined) {\n          var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n          self.daysContainer.style.width = daysWidth + \"px\";\n          self.calendarContainer.style.width = daysWidth + (self.weekWrapper !== undefined ? self.weekWrapper.offsetWidth : 0) + \"px\";\n          self.calendarContainer.style.removeProperty(\"visibility\");\n          self.calendarContainer.style.removeProperty(\"display\");\n        }\n      });\n    }\n  }\n\n  function updateTime(e) {\n    if (self.selectedDates.length === 0) {\n      var defaultDate = self.config.minDate === undefined || compareDates(new Date(), self.config.minDate) >= 0 ? new Date() : new Date(self.config.minDate.getTime());\n      var defaults = getDefaultHours(self.config);\n      defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n      self.selectedDates = [defaultDate];\n      self.latestSelectedDateObj = defaultDate;\n    }\n\n    if (e !== undefined && e.type !== \"blur\") {\n      timeWrapper(e);\n    }\n\n    var prevValue = self._input.value;\n    setHoursFromInputs();\n    updateValue();\n\n    if (self._input.value !== prevValue) {\n      self._debouncedChange();\n    }\n  }\n\n  function ampm2military(hour, amPM) {\n    return hour % 12 + 12 * int(amPM === self.l10n.amPM[1]);\n  }\n\n  function military2ampm(hour) {\n    switch (hour % 24) {\n      case 0:\n      case 12:\n        return 12;\n\n      default:\n        return hour % 12;\n    }\n  }\n\n  function setHoursFromInputs() {\n    if (self.hourElement === undefined || self.minuteElement === undefined) return;\n    var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24,\n        minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60,\n        seconds = self.secondElement !== undefined ? (parseInt(self.secondElement.value, 10) || 0) % 60 : 0;\n\n    if (self.amPM !== undefined) {\n      hours = ampm2military(hours, self.amPM.textContent);\n    }\n\n    var limitMinHours = self.config.minTime !== undefined || self.config.minDate && self.minDateHasTime && self.latestSelectedDateObj && compareDates(self.latestSelectedDateObj, self.config.minDate, true) === 0;\n    var limitMaxHours = self.config.maxTime !== undefined || self.config.maxDate && self.maxDateHasTime && self.latestSelectedDateObj && compareDates(self.latestSelectedDateObj, self.config.maxDate, true) === 0;\n\n    if (self.config.maxTime !== undefined && self.config.minTime !== undefined && self.config.minTime > self.config.maxTime) {\n      var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());\n      var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());\n      var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);\n\n      if (currentTime > maxBound && currentTime < minBound) {\n        var result = parseSeconds(minBound);\n        hours = result[0];\n        minutes = result[1];\n        seconds = result[2];\n      }\n    } else {\n      if (limitMaxHours) {\n        var maxTime = self.config.maxTime !== undefined ? self.config.maxTime : self.config.maxDate;\n        hours = Math.min(hours, maxTime.getHours());\n        if (hours === maxTime.getHours()) minutes = Math.min(minutes, maxTime.getMinutes());\n        if (minutes === maxTime.getMinutes()) seconds = Math.min(seconds, maxTime.getSeconds());\n      }\n\n      if (limitMinHours) {\n        var minTime = self.config.minTime !== undefined ? self.config.minTime : self.config.minDate;\n        hours = Math.max(hours, minTime.getHours());\n        if (hours === minTime.getHours() && minutes < minTime.getMinutes()) minutes = minTime.getMinutes();\n        if (minutes === minTime.getMinutes()) seconds = Math.max(seconds, minTime.getSeconds());\n      }\n    }\n\n    setHours(hours, minutes, seconds);\n  }\n\n  function setHoursFromDate(dateObj) {\n    var date = dateObj || self.latestSelectedDateObj;\n\n    if (date && date instanceof Date) {\n      setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n    }\n  }\n\n  function setHours(hours, minutes, seconds) {\n    if (self.latestSelectedDateObj !== undefined) {\n      self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n    }\n\n    if (!self.hourElement || !self.minuteElement || self.isMobile) return;\n    self.hourElement.value = pad(!self.config.time_24hr ? (12 + hours) % 12 + 12 * int(hours % 12 === 0) : hours);\n    self.minuteElement.value = pad(minutes);\n    if (self.amPM !== undefined) self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n    if (self.secondElement !== undefined) self.secondElement.value = pad(seconds);\n  }\n\n  function onYearInput(event) {\n    var eventTarget = getEventTarget(event);\n    var year = parseInt(eventTarget.value) + (event.delta || 0);\n\n    if (year / 1000 > 1 || event.key === \"Enter\" && !/[^\\d]/.test(year.toString())) {\n      changeYear(year);\n    }\n  }\n\n  function bind(element, event, handler, options) {\n    if (event instanceof Array) return event.forEach(function (ev) {\n      return bind(element, ev, handler, options);\n    });\n    if (element instanceof Array) return element.forEach(function (el) {\n      return bind(el, event, handler, options);\n    });\n    element.addEventListener(event, handler, options);\n\n    self._handlers.push({\n      remove: function remove() {\n        return element.removeEventListener(event, handler, options);\n      }\n    });\n  }\n\n  function triggerChange() {\n    triggerEvent(\"onChange\");\n  }\n\n  function bindEvents() {\n    if (self.config.wrap) {\n      [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n        Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n          return bind(el, \"click\", self[evt]);\n        });\n      });\n    }\n\n    if (self.isMobile) {\n      setupMobile();\n      return;\n    }\n\n    var debouncedResize = debounce(onResize, 50);\n    self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n    if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent)) bind(self.daysContainer, \"mouseover\", function (e) {\n      if (self.config.mode === \"range\") onMouseOver(getEventTarget(e));\n    });\n    bind(self._input, \"keydown\", onKeyDown);\n\n    if (self.calendarContainer !== undefined) {\n      bind(self.calendarContainer, \"keydown\", onKeyDown);\n    }\n\n    if (!self.config.inline && !self.config.static) bind(window, \"resize\", debouncedResize);\n    if (window.ontouchstart !== undefined) bind(window.document, \"touchstart\", documentClick);else bind(window.document, \"mousedown\", documentClick);\n    bind(window.document, \"focus\", documentClick, {\n      capture: true\n    });\n\n    if (self.config.clickOpens === true) {\n      bind(self._input, \"focus\", self.open);\n      bind(self._input, \"click\", self.open);\n    }\n\n    if (self.daysContainer !== undefined) {\n      bind(self.monthNav, \"click\", onMonthNavClick);\n      bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n      bind(self.daysContainer, \"click\", selectDate);\n    }\n\n    if (self.timeContainer !== undefined && self.minuteElement !== undefined && self.hourElement !== undefined) {\n      var selText = function selText(e) {\n        return getEventTarget(e).select();\n      };\n\n      bind(self.timeContainer, [\"increment\"], updateTime);\n      bind(self.timeContainer, \"blur\", updateTime, {\n        capture: true\n      });\n      bind(self.timeContainer, \"click\", timeIncrement);\n      bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n      if (self.secondElement !== undefined) bind(self.secondElement, \"focus\", function () {\n        return self.secondElement && self.secondElement.select();\n      });\n\n      if (self.amPM !== undefined) {\n        bind(self.amPM, \"click\", function (e) {\n          updateTime(e);\n        });\n      }\n    }\n\n    if (self.config.allowInput) {\n      bind(self._input, \"blur\", onBlur);\n    }\n  }\n\n  function jumpToDate(jumpDate, triggerChange) {\n    var jumpTo = jumpDate !== undefined ? self.parseDate(jumpDate) : self.latestSelectedDateObj || (self.config.minDate && self.config.minDate > self.now ? self.config.minDate : self.config.maxDate && self.config.maxDate < self.now ? self.config.maxDate : self.now);\n    var oldYear = self.currentYear;\n    var oldMonth = self.currentMonth;\n\n    try {\n      if (jumpTo !== undefined) {\n        self.currentYear = jumpTo.getFullYear();\n        self.currentMonth = jumpTo.getMonth();\n      }\n    } catch (e) {\n      e.message = \"Invalid date supplied: \" + jumpTo;\n      self.config.errorHandler(e);\n    }\n\n    if (triggerChange && self.currentYear !== oldYear) {\n      triggerEvent(\"onYearChange\");\n      buildMonthSwitch();\n    }\n\n    if (triggerChange && (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n      triggerEvent(\"onMonthChange\");\n    }\n\n    self.redraw();\n  }\n\n  function timeIncrement(e) {\n    var eventTarget = getEventTarget(e);\n    if (~eventTarget.className.indexOf(\"arrow\")) incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n  }\n\n  function incrementNumInput(e, delta, inputElem) {\n    var target = e && getEventTarget(e);\n    var input = inputElem || target && target.parentNode && target.parentNode.firstChild;\n    var event = createEvent(\"increment\");\n    event.delta = delta;\n    input && input.dispatchEvent(event);\n  }\n\n  function build() {\n    var fragment = window.document.createDocumentFragment();\n    self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n    self.calendarContainer.tabIndex = -1;\n\n    if (!self.config.noCalendar) {\n      fragment.appendChild(buildMonthNav());\n      self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n\n      if (self.config.weekNumbers) {\n        var _a = buildWeeks(),\n            weekWrapper = _a.weekWrapper,\n            weekNumbers = _a.weekNumbers;\n\n        self.innerContainer.appendChild(weekWrapper);\n        self.weekNumbers = weekNumbers;\n        self.weekWrapper = weekWrapper;\n      }\n\n      self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n      self.rContainer.appendChild(buildWeekdays());\n\n      if (!self.daysContainer) {\n        self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n        self.daysContainer.tabIndex = -1;\n      }\n\n      buildDays();\n      self.rContainer.appendChild(self.daysContainer);\n      self.innerContainer.appendChild(self.rContainer);\n      fragment.appendChild(self.innerContainer);\n    }\n\n    if (self.config.enableTime) {\n      fragment.appendChild(buildTime());\n    }\n\n    toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n    toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n    toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n    self.calendarContainer.appendChild(fragment);\n    var customAppend = self.config.appendTo !== undefined && self.config.appendTo.nodeType !== undefined;\n\n    if (self.config.inline || self.config.static) {\n      self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n\n      if (self.config.inline) {\n        if (!customAppend && self.element.parentNode) self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);else if (self.config.appendTo !== undefined) self.config.appendTo.appendChild(self.calendarContainer);\n      }\n\n      if (self.config.static) {\n        var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n        if (self.element.parentNode) self.element.parentNode.insertBefore(wrapper, self.element);\n        wrapper.appendChild(self.element);\n        if (self.altInput) wrapper.appendChild(self.altInput);\n        wrapper.appendChild(self.calendarContainer);\n      }\n    }\n\n    if (!self.config.static && !self.config.inline) (self.config.appendTo !== undefined ? self.config.appendTo : window.document.body).appendChild(self.calendarContainer);\n  }\n\n  function createDay(className, date, _dayNumber, i) {\n    var dateIsEnabled = isEnabled(date, true),\n        dayElement = createElement(\"span\", className, date.getDate().toString());\n    dayElement.dateObj = date;\n    dayElement.$i = i;\n    dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n\n    if (className.indexOf(\"hidden\") === -1 && compareDates(date, self.now) === 0) {\n      self.todayDateElem = dayElement;\n      dayElement.classList.add(\"today\");\n      dayElement.setAttribute(\"aria-current\", \"date\");\n    }\n\n    if (dateIsEnabled) {\n      dayElement.tabIndex = -1;\n\n      if (isDateSelected(date)) {\n        dayElement.classList.add(\"selected\");\n        self.selectedDateElem = dayElement;\n\n        if (self.config.mode === \"range\") {\n          toggleClass(dayElement, \"startRange\", self.selectedDates[0] && compareDates(date, self.selectedDates[0], true) === 0);\n          toggleClass(dayElement, \"endRange\", self.selectedDates[1] && compareDates(date, self.selectedDates[1], true) === 0);\n          if (className === \"nextMonthDay\") dayElement.classList.add(\"inRange\");\n        }\n      }\n    } else {\n      dayElement.classList.add(\"flatpickr-disabled\");\n    }\n\n    if (self.config.mode === \"range\") {\n      if (isDateInRange(date) && !isDateSelected(date)) dayElement.classList.add(\"inRange\");\n    }\n\n    if (self.weekNumbers && self.config.showMonths === 1 && className !== \"prevMonthDay\" && i % 7 === 6) {\n      self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n    }\n\n    triggerEvent(\"onDayCreate\", dayElement);\n    return dayElement;\n  }\n\n  function focusOnDayElem(targetNode) {\n    targetNode.focus();\n    if (self.config.mode === \"range\") onMouseOver(targetNode);\n  }\n\n  function getFirstAvailableDay(delta) {\n    var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n    var endMonth = delta > 0 ? self.config.showMonths : -1;\n\n    for (var m = startMonth; m != endMonth; m += delta) {\n      var month = self.daysContainer.children[m];\n      var startIndex = delta > 0 ? 0 : month.children.length - 1;\n      var endIndex = delta > 0 ? month.children.length : -1;\n\n      for (var i = startIndex; i != endIndex; i += delta) {\n        var c = month.children[i];\n        if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj)) return c;\n      }\n    }\n\n    return undefined;\n  }\n\n  function getNextAvailableDay(current, delta) {\n    var givenMonth = current.className.indexOf(\"Month\") === -1 ? current.dateObj.getMonth() : self.currentMonth;\n    var endMonth = delta > 0 ? self.config.showMonths : -1;\n    var loopDelta = delta > 0 ? 1 : -1;\n\n    for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n      var month = self.daysContainer.children[m];\n      var startIndex = givenMonth - self.currentMonth === m ? current.$i + delta : delta < 0 ? month.children.length - 1 : 0;\n      var numMonthDays = month.children.length;\n\n      for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n        var c = month.children[i];\n        if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj) && Math.abs(current.$i - i) >= Math.abs(delta)) return focusOnDayElem(c);\n      }\n    }\n\n    self.changeMonth(loopDelta);\n    focusOnDay(getFirstAvailableDay(loopDelta), 0);\n    return undefined;\n  }\n\n  function focusOnDay(current, offset) {\n    var activeElement = getClosestActiveElement();\n    var dayFocused = isInView(activeElement || document.body);\n    var startElem = current !== undefined ? current : dayFocused ? activeElement : self.selectedDateElem !== undefined && isInView(self.selectedDateElem) ? self.selectedDateElem : self.todayDateElem !== undefined && isInView(self.todayDateElem) ? self.todayDateElem : getFirstAvailableDay(offset > 0 ? 1 : -1);\n\n    if (startElem === undefined) {\n      self._input.focus();\n    } else if (!dayFocused) {\n      focusOnDayElem(startElem);\n    } else {\n      getNextAvailableDay(startElem, offset);\n    }\n  }\n\n  function buildMonthDays(year, month) {\n    var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n    var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n    var daysInMonth = self.utils.getDaysInMonth(month, year),\n        days = window.document.createDocumentFragment(),\n        isMultiMonth = self.config.showMonths > 1,\n        prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\",\n        nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n    var dayNumber = prevMonthDays + 1 - firstOfMonth,\n        dayIndex = 0;\n\n    for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n      days.appendChild(createDay(\"flatpickr-day \" + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n    }\n\n    for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n      days.appendChild(createDay(\"flatpickr-day\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n    }\n\n    for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth && (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n      days.appendChild(createDay(\"flatpickr-day \" + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n    }\n\n    var dayContainer = createElement(\"div\", \"dayContainer\");\n    dayContainer.appendChild(days);\n    return dayContainer;\n  }\n\n  function buildDays() {\n    if (self.daysContainer === undefined) {\n      return;\n    }\n\n    clearNode(self.daysContainer);\n    if (self.weekNumbers) clearNode(self.weekNumbers);\n    var frag = document.createDocumentFragment();\n\n    for (var i = 0; i < self.config.showMonths; i++) {\n      var d = new Date(self.currentYear, self.currentMonth, 1);\n      d.setMonth(self.currentMonth + i);\n      frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n    }\n\n    self.daysContainer.appendChild(frag);\n    self.days = self.daysContainer.firstChild;\n\n    if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n      onMouseOver();\n    }\n  }\n\n  function buildMonthSwitch() {\n    if (self.config.showMonths > 1 || self.config.monthSelectorType !== \"dropdown\") return;\n\n    var shouldBuildMonth = function shouldBuildMonth(month) {\n      if (self.config.minDate !== undefined && self.currentYear === self.config.minDate.getFullYear() && month < self.config.minDate.getMonth()) {\n        return false;\n      }\n\n      return !(self.config.maxDate !== undefined && self.currentYear === self.config.maxDate.getFullYear() && month > self.config.maxDate.getMonth());\n    };\n\n    self.monthsDropdownContainer.tabIndex = -1;\n    self.monthsDropdownContainer.innerHTML = \"\";\n\n    for (var i = 0; i < 12; i++) {\n      if (!shouldBuildMonth(i)) continue;\n      var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n      month.value = new Date(self.currentYear, i).getMonth().toString();\n      month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n      month.tabIndex = -1;\n\n      if (self.currentMonth === i) {\n        month.selected = true;\n      }\n\n      self.monthsDropdownContainer.appendChild(month);\n    }\n  }\n\n  function buildMonth() {\n    var container = createElement(\"div\", \"flatpickr-month\");\n    var monthNavFragment = window.document.createDocumentFragment();\n    var monthElement;\n\n    if (self.config.showMonths > 1 || self.config.monthSelectorType === \"static\") {\n      monthElement = createElement(\"span\", \"cur-month\");\n    } else {\n      self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n      self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n      bind(self.monthsDropdownContainer, \"change\", function (e) {\n        var target = getEventTarget(e);\n        var selectedMonth = parseInt(target.value, 10);\n        self.changeMonth(selectedMonth - self.currentMonth);\n        triggerEvent(\"onMonthChange\");\n      });\n      buildMonthSwitch();\n      monthElement = self.monthsDropdownContainer;\n    }\n\n    var yearInput = createNumberInput(\"cur-year\", {\n      tabindex: \"-1\"\n    });\n    var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n    yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n\n    if (self.config.minDate) {\n      yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n    }\n\n    if (self.config.maxDate) {\n      yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n      yearElement.disabled = !!self.config.minDate && self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n    }\n\n    var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n    currentMonth.appendChild(monthElement);\n    currentMonth.appendChild(yearInput);\n    monthNavFragment.appendChild(currentMonth);\n    container.appendChild(monthNavFragment);\n    return {\n      container: container,\n      yearElement: yearElement,\n      monthElement: monthElement\n    };\n  }\n\n  function buildMonths() {\n    clearNode(self.monthNav);\n    self.monthNav.appendChild(self.prevMonthNav);\n\n    if (self.config.showMonths) {\n      self.yearElements = [];\n      self.monthElements = [];\n    }\n\n    for (var m = self.config.showMonths; m--;) {\n      var month = buildMonth();\n      self.yearElements.push(month.yearElement);\n      self.monthElements.push(month.monthElement);\n      self.monthNav.appendChild(month.container);\n    }\n\n    self.monthNav.appendChild(self.nextMonthNav);\n  }\n\n  function buildMonthNav() {\n    self.monthNav = createElement(\"div\", \"flatpickr-months\");\n    self.yearElements = [];\n    self.monthElements = [];\n    self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n    self.prevMonthNav.innerHTML = self.config.prevArrow;\n    self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n    self.nextMonthNav.innerHTML = self.config.nextArrow;\n    buildMonths();\n    Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n      get: function get() {\n        return self.__hidePrevMonthArrow;\n      },\n      set: function set(bool) {\n        if (self.__hidePrevMonthArrow !== bool) {\n          toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n          self.__hidePrevMonthArrow = bool;\n        }\n      }\n    });\n    Object.defineProperty(self, \"_hideNextMonthArrow\", {\n      get: function get() {\n        return self.__hideNextMonthArrow;\n      },\n      set: function set(bool) {\n        if (self.__hideNextMonthArrow !== bool) {\n          toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n          self.__hideNextMonthArrow = bool;\n        }\n      }\n    });\n    self.currentYearElement = self.yearElements[0];\n    updateNavigationCurrentMonth();\n    return self.monthNav;\n  }\n\n  function buildTime() {\n    self.calendarContainer.classList.add(\"hasTime\");\n    if (self.config.noCalendar) self.calendarContainer.classList.add(\"noCalendar\");\n    var defaults = getDefaultHours(self.config);\n    self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n    self.timeContainer.tabIndex = -1;\n    var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n    var hourInput = createNumberInput(\"flatpickr-hour\", {\n      \"aria-label\": self.l10n.hourAriaLabel\n    });\n    self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n    var minuteInput = createNumberInput(\"flatpickr-minute\", {\n      \"aria-label\": self.l10n.minuteAriaLabel\n    });\n    self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n    self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n    self.hourElement.value = pad(self.latestSelectedDateObj ? self.latestSelectedDateObj.getHours() : self.config.time_24hr ? defaults.hours : military2ampm(defaults.hours));\n    self.minuteElement.value = pad(self.latestSelectedDateObj ? self.latestSelectedDateObj.getMinutes() : defaults.minutes);\n    self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n    self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n    self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n    self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n    self.hourElement.setAttribute(\"maxlength\", \"2\");\n    self.minuteElement.setAttribute(\"min\", \"0\");\n    self.minuteElement.setAttribute(\"max\", \"59\");\n    self.minuteElement.setAttribute(\"maxlength\", \"2\");\n    self.timeContainer.appendChild(hourInput);\n    self.timeContainer.appendChild(separator);\n    self.timeContainer.appendChild(minuteInput);\n    if (self.config.time_24hr) self.timeContainer.classList.add(\"time24hr\");\n\n    if (self.config.enableSeconds) {\n      self.timeContainer.classList.add(\"hasSeconds\");\n      var secondInput = createNumberInput(\"flatpickr-second\");\n      self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n      self.secondElement.value = pad(self.latestSelectedDateObj ? self.latestSelectedDateObj.getSeconds() : defaults.seconds);\n      self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n      self.secondElement.setAttribute(\"min\", \"0\");\n      self.secondElement.setAttribute(\"max\", \"59\");\n      self.secondElement.setAttribute(\"maxlength\", \"2\");\n      self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n      self.timeContainer.appendChild(secondInput);\n    }\n\n    if (!self.config.time_24hr) {\n      self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj ? self.hourElement.value : self.config.defaultHour) > 11)]);\n      self.amPM.title = self.l10n.toggleTitle;\n      self.amPM.tabIndex = -1;\n      self.timeContainer.appendChild(self.amPM);\n    }\n\n    return self.timeContainer;\n  }\n\n  function buildWeekdays() {\n    if (!self.weekdayContainer) self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");else clearNode(self.weekdayContainer);\n\n    for (var i = self.config.showMonths; i--;) {\n      var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n      self.weekdayContainer.appendChild(container);\n    }\n\n    updateWeekdays();\n    return self.weekdayContainer;\n  }\n\n  function updateWeekdays() {\n    if (!self.weekdayContainer) {\n      return;\n    }\n\n    var firstDayOfWeek = self.l10n.firstDayOfWeek;\n\n    var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);\n\n    if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n      weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));\n    }\n\n    for (var i = self.config.showMonths; i--;) {\n      self.weekdayContainer.children[i].innerHTML = \"\\n      <span class='flatpickr-weekday'>\\n        \" + weekdays.join(\"</span><span class='flatpickr-weekday'>\") + \"\\n      </span>\\n      \";\n    }\n  }\n\n  function buildWeeks() {\n    self.calendarContainer.classList.add(\"hasWeeks\");\n    var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n    weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n    var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n    weekWrapper.appendChild(weekNumbers);\n    return {\n      weekWrapper: weekWrapper,\n      weekNumbers: weekNumbers\n    };\n  }\n\n  function changeMonth(value, isOffset) {\n    if (isOffset === void 0) {\n      isOffset = true;\n    }\n\n    var delta = isOffset ? value : value - self.currentMonth;\n    if (delta < 0 && self._hidePrevMonthArrow === true || delta > 0 && self._hideNextMonthArrow === true) return;\n    self.currentMonth += delta;\n\n    if (self.currentMonth < 0 || self.currentMonth > 11) {\n      self.currentYear += self.currentMonth > 11 ? 1 : -1;\n      self.currentMonth = (self.currentMonth + 12) % 12;\n      triggerEvent(\"onYearChange\");\n      buildMonthSwitch();\n    }\n\n    buildDays();\n    triggerEvent(\"onMonthChange\");\n    updateNavigationCurrentMonth();\n  }\n\n  function clear(triggerChangeEvent, toInitial) {\n    if (triggerChangeEvent === void 0) {\n      triggerChangeEvent = true;\n    }\n\n    if (toInitial === void 0) {\n      toInitial = true;\n    }\n\n    self.input.value = \"\";\n    if (self.altInput !== undefined) self.altInput.value = \"\";\n    if (self.mobileInput !== undefined) self.mobileInput.value = \"\";\n    self.selectedDates = [];\n    self.latestSelectedDateObj = undefined;\n\n    if (toInitial === true) {\n      self.currentYear = self._initialDate.getFullYear();\n      self.currentMonth = self._initialDate.getMonth();\n    }\n\n    if (self.config.enableTime === true) {\n      var _a = getDefaultHours(self.config),\n          hours = _a.hours,\n          minutes = _a.minutes,\n          seconds = _a.seconds;\n\n      setHours(hours, minutes, seconds);\n    }\n\n    self.redraw();\n    if (triggerChangeEvent) triggerEvent(\"onChange\");\n  }\n\n  function close() {\n    self.isOpen = false;\n\n    if (!self.isMobile) {\n      if (self.calendarContainer !== undefined) {\n        self.calendarContainer.classList.remove(\"open\");\n      }\n\n      if (self._input !== undefined) {\n        self._input.classList.remove(\"active\");\n      }\n    }\n\n    triggerEvent(\"onClose\");\n  }\n\n  function destroy() {\n    if (self.config !== undefined) triggerEvent(\"onDestroy\");\n\n    for (var i = self._handlers.length; i--;) {\n      self._handlers[i].remove();\n    }\n\n    self._handlers = [];\n\n    if (self.mobileInput) {\n      if (self.mobileInput.parentNode) self.mobileInput.parentNode.removeChild(self.mobileInput);\n      self.mobileInput = undefined;\n    } else if (self.calendarContainer && self.calendarContainer.parentNode) {\n      if (self.config.static && self.calendarContainer.parentNode) {\n        var wrapper = self.calendarContainer.parentNode;\n        wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n\n        if (wrapper.parentNode) {\n          while (wrapper.firstChild) {\n            wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n          }\n\n          wrapper.parentNode.removeChild(wrapper);\n        }\n      } else self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n    }\n\n    if (self.altInput) {\n      self.input.type = \"text\";\n      if (self.altInput.parentNode) self.altInput.parentNode.removeChild(self.altInput);\n      delete self.altInput;\n    }\n\n    if (self.input) {\n      self.input.type = self.input._type;\n      self.input.classList.remove(\"flatpickr-input\");\n      self.input.removeAttribute(\"readonly\");\n    }\n\n    [\"_showTimeInput\", \"latestSelectedDateObj\", \"_hideNextMonthArrow\", \"_hidePrevMonthArrow\", \"__hideNextMonthArrow\", \"__hidePrevMonthArrow\", \"isMobile\", \"isOpen\", \"selectedDateElem\", \"minDateHasTime\", \"maxDateHasTime\", \"days\", \"daysContainer\", \"_input\", \"_positionElement\", \"innerContainer\", \"rContainer\", \"monthNav\", \"todayDateElem\", \"calendarContainer\", \"weekdayContainer\", \"prevMonthNav\", \"nextMonthNav\", \"monthsDropdownContainer\", \"currentMonthElement\", \"currentYearElement\", \"navigationCurrentMonth\", \"selectedDateElem\", \"config\"].forEach(function (k) {\n      try {\n        delete self[k];\n      } catch (_) {}\n    });\n  }\n\n  function isCalendarElem(elem) {\n    return self.calendarContainer.contains(elem);\n  }\n\n  function documentClick(e) {\n    if (self.isOpen && !self.config.inline) {\n      var eventTarget_1 = getEventTarget(e);\n      var isCalendarElement = isCalendarElem(eventTarget_1);\n      var isInput = eventTarget_1 === self.input || eventTarget_1 === self.altInput || self.element.contains(eventTarget_1) || e.path && e.path.indexOf && (~e.path.indexOf(self.input) || ~e.path.indexOf(self.altInput));\n      var lostFocus = !isInput && !isCalendarElement && !isCalendarElem(e.relatedTarget);\n      var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n        return elem.contains(eventTarget_1);\n      });\n\n      if (lostFocus && isIgnored) {\n        if (self.config.allowInput) {\n          self.setDate(self._input.value, false, self.config.altInput ? self.config.altFormat : self.config.dateFormat);\n        }\n\n        if (self.timeContainer !== undefined && self.minuteElement !== undefined && self.hourElement !== undefined && self.input.value !== \"\" && self.input.value !== undefined) {\n          updateTime();\n        }\n\n        self.close();\n        if (self.config && self.config.mode === \"range\" && self.selectedDates.length === 1) self.clear(false);\n      }\n    }\n  }\n\n  function changeYear(newYear) {\n    if (!newYear || self.config.minDate && newYear < self.config.minDate.getFullYear() || self.config.maxDate && newYear > self.config.maxDate.getFullYear()) return;\n    var newYearNum = newYear,\n        isNewYear = self.currentYear !== newYearNum;\n    self.currentYear = newYearNum || self.currentYear;\n\n    if (self.config.maxDate && self.currentYear === self.config.maxDate.getFullYear()) {\n      self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n    } else if (self.config.minDate && self.currentYear === self.config.minDate.getFullYear()) {\n      self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n    }\n\n    if (isNewYear) {\n      self.redraw();\n      triggerEvent(\"onYearChange\");\n      buildMonthSwitch();\n    }\n  }\n\n  function isEnabled(date, timeless) {\n    var _a;\n\n    if (timeless === void 0) {\n      timeless = true;\n    }\n\n    var dateToCheck = self.parseDate(date, undefined, timeless);\n    if (self.config.minDate && dateToCheck && compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0 || self.config.maxDate && dateToCheck && compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0) return false;\n    if (!self.config.enable && self.config.disable.length === 0) return true;\n    if (dateToCheck === undefined) return false;\n    var bool = !!self.config.enable,\n        array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n\n    for (var i = 0, d = void 0; i < array.length; i++) {\n      d = array[i];\n      if (typeof d === \"function\" && d(dateToCheck)) return bool;else if (d instanceof Date && dateToCheck !== undefined && d.getTime() === dateToCheck.getTime()) return bool;else if (typeof d === \"string\") {\n        var parsed = self.parseDate(d, undefined, true);\n        return parsed && parsed.getTime() === dateToCheck.getTime() ? bool : !bool;\n      } else if (_typeof(d) === \"object\" && dateToCheck !== undefined && d.from && d.to && dateToCheck.getTime() >= d.from.getTime() && dateToCheck.getTime() <= d.to.getTime()) return bool;\n    }\n\n    return !bool;\n  }\n\n  function isInView(elem) {\n    if (self.daysContainer !== undefined) return elem.className.indexOf(\"hidden\") === -1 && elem.className.indexOf(\"flatpickr-disabled\") === -1 && self.daysContainer.contains(elem);\n    return false;\n  }\n\n  function onBlur(e) {\n    var isInput = e.target === self._input;\n    var valueChanged = self._input.value.trimEnd() !== getDateStr();\n\n    if (isInput && valueChanged && !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n      self.setDate(self._input.value, true, e.target === self.altInput ? self.config.altFormat : self.config.dateFormat);\n    }\n  }\n\n  function onKeyDown(e) {\n    var eventTarget = getEventTarget(e);\n    var isInput = self.config.wrap ? element.contains(eventTarget) : eventTarget === self._input;\n    var allowInput = self.config.allowInput;\n    var allowKeydown = self.isOpen && (!allowInput || !isInput);\n    var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n\n    if (e.keyCode === 13 && isInput) {\n      if (allowInput) {\n        self.setDate(self._input.value, true, eventTarget === self.altInput ? self.config.altFormat : self.config.dateFormat);\n        self.close();\n        return eventTarget.blur();\n      } else {\n        self.open();\n      }\n    } else if (isCalendarElem(eventTarget) || allowKeydown || allowInlineKeydown) {\n      var isTimeObj = !!self.timeContainer && self.timeContainer.contains(eventTarget);\n\n      switch (e.keyCode) {\n        case 13:\n          if (isTimeObj) {\n            e.preventDefault();\n            updateTime();\n            focusAndClose();\n          } else selectDate(e);\n\n          break;\n\n        case 27:\n          e.preventDefault();\n          focusAndClose();\n          break;\n\n        case 8:\n        case 46:\n          if (isInput && !self.config.allowInput) {\n            e.preventDefault();\n            self.clear();\n          }\n\n          break;\n\n        case 37:\n        case 39:\n          if (!isTimeObj && !isInput) {\n            e.preventDefault();\n            var activeElement = getClosestActiveElement();\n\n            if (self.daysContainer !== undefined && (allowInput === false || activeElement && isInView(activeElement))) {\n              var delta_1 = e.keyCode === 39 ? 1 : -1;\n              if (!e.ctrlKey) focusOnDay(undefined, delta_1);else {\n                e.stopPropagation();\n                changeMonth(delta_1);\n                focusOnDay(getFirstAvailableDay(1), 0);\n              }\n            }\n          } else if (self.hourElement) self.hourElement.focus();\n\n          break;\n\n        case 38:\n        case 40:\n          e.preventDefault();\n          var delta = e.keyCode === 40 ? 1 : -1;\n\n          if (self.daysContainer && eventTarget.$i !== undefined || eventTarget === self.input || eventTarget === self.altInput) {\n            if (e.ctrlKey) {\n              e.stopPropagation();\n              changeYear(self.currentYear - delta);\n              focusOnDay(getFirstAvailableDay(1), 0);\n            } else if (!isTimeObj) focusOnDay(undefined, delta * 7);\n          } else if (eventTarget === self.currentYearElement) {\n            changeYear(self.currentYear - delta);\n          } else if (self.config.enableTime) {\n            if (!isTimeObj && self.hourElement) self.hourElement.focus();\n            updateTime(e);\n\n            self._debouncedChange();\n          }\n\n          break;\n\n        case 9:\n          if (isTimeObj) {\n            var elems = [self.hourElement, self.minuteElement, self.secondElement, self.amPM].concat(self.pluginElements).filter(function (x) {\n              return x;\n            });\n            var i = elems.indexOf(eventTarget);\n\n            if (i !== -1) {\n              var target = elems[i + (e.shiftKey ? -1 : 1)];\n              e.preventDefault();\n\n              (target || self._input).focus();\n            }\n          } else if (!self.config.noCalendar && self.daysContainer && self.daysContainer.contains(eventTarget) && e.shiftKey) {\n            e.preventDefault();\n\n            self._input.focus();\n          }\n\n          break;\n\n        default:\n          break;\n      }\n    }\n\n    if (self.amPM !== undefined && eventTarget === self.amPM) {\n      switch (e.key) {\n        case self.l10n.amPM[0].charAt(0):\n        case self.l10n.amPM[0].charAt(0).toLowerCase():\n          self.amPM.textContent = self.l10n.amPM[0];\n          setHoursFromInputs();\n          updateValue();\n          break;\n\n        case self.l10n.amPM[1].charAt(0):\n        case self.l10n.amPM[1].charAt(0).toLowerCase():\n          self.amPM.textContent = self.l10n.amPM[1];\n          setHoursFromInputs();\n          updateValue();\n          break;\n      }\n    }\n\n    if (isInput || isCalendarElem(eventTarget)) {\n      triggerEvent(\"onKeyDown\", e);\n    }\n  }\n\n  function onMouseOver(elem, cellClass) {\n    if (cellClass === void 0) {\n      cellClass = \"flatpickr-day\";\n    }\n\n    if (self.selectedDates.length !== 1 || elem && (!elem.classList.contains(cellClass) || elem.classList.contains(\"flatpickr-disabled\"))) return;\n    var hoverDate = elem ? elem.dateObj.getTime() : self.days.firstElementChild.dateObj.getTime(),\n        initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(),\n        rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()),\n        rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n    var containsDisabled = false;\n    var minRange = 0,\n        maxRange = 0;\n\n    for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n      if (!isEnabled(new Date(t), true)) {\n        containsDisabled = containsDisabled || t > rangeStartDate && t < rangeEndDate;\n        if (t < initialDate && (!minRange || t > minRange)) minRange = t;else if (t > initialDate && (!maxRange || t < maxRange)) maxRange = t;\n      }\n    }\n\n    var hoverableCells = Array.from(self.rContainer.querySelectorAll(\"*:nth-child(-n+\" + self.config.showMonths + \") > .\" + cellClass));\n    hoverableCells.forEach(function (dayElem) {\n      var date = dayElem.dateObj;\n      var timestamp = date.getTime();\n      var outOfRange = minRange > 0 && timestamp < minRange || maxRange > 0 && timestamp > maxRange;\n\n      if (outOfRange) {\n        dayElem.classList.add(\"notAllowed\");\n        [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n          dayElem.classList.remove(c);\n        });\n        return;\n      } else if (containsDisabled && !outOfRange) return;\n\n      [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n        dayElem.classList.remove(c);\n      });\n\n      if (elem !== undefined) {\n        elem.classList.add(hoverDate <= self.selectedDates[0].getTime() ? \"startRange\" : \"endRange\");\n        if (initialDate < hoverDate && timestamp === initialDate) dayElem.classList.add(\"startRange\");else if (initialDate > hoverDate && timestamp === initialDate) dayElem.classList.add(\"endRange\");\n        if (timestamp >= minRange && (maxRange === 0 || timestamp <= maxRange) && isBetween(timestamp, initialDate, hoverDate)) dayElem.classList.add(\"inRange\");\n      }\n    });\n  }\n\n  function onResize() {\n    if (self.isOpen && !self.config.static && !self.config.inline) positionCalendar();\n  }\n\n  function open(e, positionElement) {\n    if (positionElement === void 0) {\n      positionElement = self._positionElement;\n    }\n\n    if (self.isMobile === true) {\n      if (e) {\n        e.preventDefault();\n        var eventTarget = getEventTarget(e);\n\n        if (eventTarget) {\n          eventTarget.blur();\n        }\n      }\n\n      if (self.mobileInput !== undefined) {\n        self.mobileInput.focus();\n        self.mobileInput.click();\n      }\n\n      triggerEvent(\"onOpen\");\n      return;\n    } else if (self._input.disabled || self.config.inline) {\n      return;\n    }\n\n    var wasOpen = self.isOpen;\n    self.isOpen = true;\n\n    if (!wasOpen) {\n      self.calendarContainer.classList.add(\"open\");\n\n      self._input.classList.add(\"active\");\n\n      triggerEvent(\"onOpen\");\n      positionCalendar(positionElement);\n    }\n\n    if (self.config.enableTime === true && self.config.noCalendar === true) {\n      if (self.config.allowInput === false && (e === undefined || !self.timeContainer.contains(e.relatedTarget))) {\n        setTimeout(function () {\n          return self.hourElement.select();\n        }, 50);\n      }\n    }\n  }\n\n  function minMaxDateSetter(type) {\n    return function (date) {\n      var dateObj = self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat);\n      var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n\n      if (dateObj !== undefined) {\n        self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] = dateObj.getHours() > 0 || dateObj.getMinutes() > 0 || dateObj.getSeconds() > 0;\n      }\n\n      if (self.selectedDates) {\n        self.selectedDates = self.selectedDates.filter(function (d) {\n          return isEnabled(d);\n        });\n        if (!self.selectedDates.length && type === \"min\") setHoursFromDate(dateObj);\n        updateValue();\n      }\n\n      if (self.daysContainer) {\n        redraw();\n        if (dateObj !== undefined) self.currentYearElement[type] = dateObj.getFullYear().toString();else self.currentYearElement.removeAttribute(type);\n        self.currentYearElement.disabled = !!inverseDateObj && dateObj !== undefined && inverseDateObj.getFullYear() === dateObj.getFullYear();\n      }\n    };\n  }\n\n  function parseConfig() {\n    var boolOpts = [\"wrap\", \"weekNumbers\", \"allowInput\", \"allowInvalidPreload\", \"clickOpens\", \"time_24hr\", \"enableTime\", \"noCalendar\", \"altInput\", \"shorthandCurrentMonth\", \"inline\", \"static\", \"enableSeconds\", \"disableMobile\"];\n\n    var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n\n    var formats = {};\n    self.config.parseDate = userConfig.parseDate;\n    self.config.formatDate = userConfig.formatDate;\n    Object.defineProperty(self.config, \"enable\", {\n      get: function get() {\n        return self.config._enable;\n      },\n      set: function set(dates) {\n        self.config._enable = parseDateRules(dates);\n      }\n    });\n    Object.defineProperty(self.config, \"disable\", {\n      get: function get() {\n        return self.config._disable;\n      },\n      set: function set(dates) {\n        self.config._disable = parseDateRules(dates);\n      }\n    });\n    var timeMode = userConfig.mode === \"time\";\n\n    if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n      var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaultOptions.dateFormat;\n      formats.dateFormat = userConfig.noCalendar || timeMode ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\") : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n    }\n\n    if (userConfig.altInput && (userConfig.enableTime || timeMode) && !userConfig.altFormat) {\n      var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaultOptions.altFormat;\n      formats.altFormat = userConfig.noCalendar || timeMode ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\") : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n    }\n\n    Object.defineProperty(self.config, \"minDate\", {\n      get: function get() {\n        return self.config._minDate;\n      },\n      set: minMaxDateSetter(\"min\")\n    });\n    Object.defineProperty(self.config, \"maxDate\", {\n      get: function get() {\n        return self.config._maxDate;\n      },\n      set: minMaxDateSetter(\"max\")\n    });\n\n    var minMaxTimeSetter = function minMaxTimeSetter(type) {\n      return function (val) {\n        self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n      };\n    };\n\n    Object.defineProperty(self.config, \"minTime\", {\n      get: function get() {\n        return self.config._minTime;\n      },\n      set: minMaxTimeSetter(\"min\")\n    });\n    Object.defineProperty(self.config, \"maxTime\", {\n      get: function get() {\n        return self.config._maxTime;\n      },\n      set: minMaxTimeSetter(\"max\")\n    });\n\n    if (userConfig.mode === \"time\") {\n      self.config.noCalendar = true;\n      self.config.enableTime = true;\n    }\n\n    Object.assign(self.config, formats, userConfig);\n\n    for (var i = 0; i < boolOpts.length; i++) {\n      self.config[boolOpts[i]] = self.config[boolOpts[i]] === true || self.config[boolOpts[i]] === \"true\";\n    }\n\n    HOOKS.filter(function (hook) {\n      return self.config[hook] !== undefined;\n    }).forEach(function (hook) {\n      self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n    });\n    self.isMobile = !self.config.disableMobile && !self.config.inline && self.config.mode === \"single\" && !self.config.disable.length && !self.config.enable && !self.config.weekNumbers && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\n    for (var i = 0; i < self.config.plugins.length; i++) {\n      var pluginConf = self.config.plugins[i](self) || {};\n\n      for (var key in pluginConf) {\n        if (HOOKS.indexOf(key) > -1) {\n          self.config[key] = arrayify(pluginConf[key]).map(bindToInstance).concat(self.config[key]);\n        } else if (typeof userConfig[key] === \"undefined\") self.config[key] = pluginConf[key];\n      }\n    }\n\n    if (!userConfig.altInputClass) {\n      self.config.altInputClass = getInputElem().className + \" \" + self.config.altInputClass;\n    }\n\n    triggerEvent(\"onParseConfig\");\n  }\n\n  function getInputElem() {\n    return self.config.wrap ? element.querySelector(\"[data-input]\") : element;\n  }\n\n  function setupLocale() {\n    if (_typeof(self.config.locale) !== \"object\" && typeof flatpickr.l10ns[self.config.locale] === \"undefined\") self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n    self.l10n = __assign(__assign({}, flatpickr.l10ns.default), _typeof(self.config.locale) === \"object\" ? self.config.locale : self.config.locale !== \"default\" ? flatpickr.l10ns[self.config.locale] : undefined);\n    tokenRegex.D = \"(\" + self.l10n.weekdays.shorthand.join(\"|\") + \")\";\n    tokenRegex.l = \"(\" + self.l10n.weekdays.longhand.join(\"|\") + \")\";\n    tokenRegex.M = \"(\" + self.l10n.months.shorthand.join(\"|\") + \")\";\n    tokenRegex.F = \"(\" + self.l10n.months.longhand.join(\"|\") + \")\";\n    tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n\n    var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n\n    if (userConfig.time_24hr === undefined && flatpickr.defaultConfig.time_24hr === undefined) {\n      self.config.time_24hr = self.l10n.time_24hr;\n    }\n\n    self.formatDate = createDateFormatter(self);\n    self.parseDate = createDateParser({\n      config: self.config,\n      l10n: self.l10n\n    });\n  }\n\n  function positionCalendar(customPositionElement) {\n    if (typeof self.config.position === \"function\") {\n      return void self.config.position(self, customPositionElement);\n    }\n\n    if (self.calendarContainer === undefined) return;\n    triggerEvent(\"onPreCalendarPosition\");\n    var positionElement = customPositionElement || self._positionElement;\n    var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, function (acc, child) {\n      return acc + child.offsetHeight;\n    }, 0),\n        calendarWidth = self.calendarContainer.offsetWidth,\n        configPos = self.config.position.split(\" \"),\n        configPosVertical = configPos[0],\n        configPosHorizontal = configPos.length > 1 ? configPos[1] : null,\n        inputBounds = positionElement.getBoundingClientRect(),\n        distanceFromBottom = window.innerHeight - inputBounds.bottom,\n        showOnTop = configPosVertical === \"above\" || configPosVertical !== \"below\" && distanceFromBottom < calendarHeight && inputBounds.top > calendarHeight;\n    var top = window.pageYOffset + inputBounds.top + (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n    toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n    toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n    if (self.config.inline) return;\n    var left = window.pageXOffset + inputBounds.left;\n    var isCenter = false;\n    var isRight = false;\n\n    if (configPosHorizontal === \"center\") {\n      left -= (calendarWidth - inputBounds.width) / 2;\n      isCenter = true;\n    } else if (configPosHorizontal === \"right\") {\n      left -= calendarWidth - inputBounds.width;\n      isRight = true;\n    }\n\n    toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n    toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n    toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n    var right = window.document.body.offsetWidth - (window.pageXOffset + inputBounds.right);\n    var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n    var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n    toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n    if (self.config.static) return;\n    self.calendarContainer.style.top = top + \"px\";\n\n    if (!rightMost) {\n      self.calendarContainer.style.left = left + \"px\";\n      self.calendarContainer.style.right = \"auto\";\n    } else if (!centerMost) {\n      self.calendarContainer.style.left = \"auto\";\n      self.calendarContainer.style.right = right + \"px\";\n    } else {\n      var doc = getDocumentStyleSheet();\n      if (doc === undefined) return;\n      var bodyWidth = window.document.body.offsetWidth;\n      var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n      var centerBefore = \".flatpickr-calendar.centerMost:before\";\n      var centerAfter = \".flatpickr-calendar.centerMost:after\";\n      var centerIndex = doc.cssRules.length;\n      var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n      toggleClass(self.calendarContainer, \"rightMost\", false);\n      toggleClass(self.calendarContainer, \"centerMost\", true);\n      doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n      self.calendarContainer.style.left = centerLeft + \"px\";\n      self.calendarContainer.style.right = \"auto\";\n    }\n  }\n\n  function getDocumentStyleSheet() {\n    var editableSheet = null;\n\n    for (var i = 0; i < document.styleSheets.length; i++) {\n      var sheet = document.styleSheets[i];\n      if (!sheet.cssRules) continue;\n\n      try {\n        sheet.cssRules;\n      } catch (err) {\n        continue;\n      }\n\n      editableSheet = sheet;\n      break;\n    }\n\n    return editableSheet != null ? editableSheet : createStyleSheet();\n  }\n\n  function createStyleSheet() {\n    var style = document.createElement(\"style\");\n    document.head.appendChild(style);\n    return style.sheet;\n  }\n\n  function redraw() {\n    if (self.config.noCalendar || self.isMobile) return;\n    buildMonthSwitch();\n    updateNavigationCurrentMonth();\n    buildDays();\n  }\n\n  function focusAndClose() {\n    self._input.focus();\n\n    if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 || navigator.msMaxTouchPoints !== undefined) {\n      setTimeout(self.close, 0);\n    } else {\n      self.close();\n    }\n  }\n\n  function selectDate(e) {\n    e.preventDefault();\n    e.stopPropagation();\n\n    var isSelectable = function isSelectable(day) {\n      return day.classList && day.classList.contains(\"flatpickr-day\") && !day.classList.contains(\"flatpickr-disabled\") && !day.classList.contains(\"notAllowed\");\n    };\n\n    var t = findParent(getEventTarget(e), isSelectable);\n    if (t === undefined) return;\n    var target = t;\n    var selectedDate = self.latestSelectedDateObj = new Date(target.dateObj.getTime());\n    var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth || selectedDate.getMonth() > self.currentMonth + self.config.showMonths - 1) && self.config.mode !== \"range\";\n    self.selectedDateElem = target;\n    if (self.config.mode === \"single\") self.selectedDates = [selectedDate];else if (self.config.mode === \"multiple\") {\n      var selectedIndex = isDateSelected(selectedDate);\n      if (selectedIndex) self.selectedDates.splice(parseInt(selectedIndex), 1);else self.selectedDates.push(selectedDate);\n    } else if (self.config.mode === \"range\") {\n      if (self.selectedDates.length === 2) {\n        self.clear(false, false);\n      }\n\n      self.latestSelectedDateObj = selectedDate;\n      self.selectedDates.push(selectedDate);\n      if (compareDates(selectedDate, self.selectedDates[0], true) !== 0) self.selectedDates.sort(function (a, b) {\n        return a.getTime() - b.getTime();\n      });\n    }\n    setHoursFromInputs();\n\n    if (shouldChangeMonth) {\n      var isNewYear = self.currentYear !== selectedDate.getFullYear();\n      self.currentYear = selectedDate.getFullYear();\n      self.currentMonth = selectedDate.getMonth();\n\n      if (isNewYear) {\n        triggerEvent(\"onYearChange\");\n        buildMonthSwitch();\n      }\n\n      triggerEvent(\"onMonthChange\");\n    }\n\n    updateNavigationCurrentMonth();\n    buildDays();\n    updateValue();\n    if (!shouldChangeMonth && self.config.mode !== \"range\" && self.config.showMonths === 1) focusOnDayElem(target);else if (self.selectedDateElem !== undefined && self.hourElement === undefined) {\n      self.selectedDateElem && self.selectedDateElem.focus();\n    }\n    if (self.hourElement !== undefined) self.hourElement !== undefined && self.hourElement.focus();\n\n    if (self.config.closeOnSelect) {\n      var single = self.config.mode === \"single\" && !self.config.enableTime;\n      var range = self.config.mode === \"range\" && self.selectedDates.length === 2 && !self.config.enableTime;\n\n      if (single || range) {\n        focusAndClose();\n      }\n    }\n\n    triggerChange();\n  }\n\n  var CALLBACKS = {\n    locale: [setupLocale, updateWeekdays],\n    showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n    minDate: [jumpToDate],\n    maxDate: [jumpToDate],\n    positionElement: [updatePositionElement],\n    clickOpens: [function () {\n      if (self.config.clickOpens === true) {\n        bind(self._input, \"focus\", self.open);\n        bind(self._input, \"click\", self.open);\n      } else {\n        self._input.removeEventListener(\"focus\", self.open);\n\n        self._input.removeEventListener(\"click\", self.open);\n      }\n    }]\n  };\n\n  function set(option, value) {\n    if (option !== null && _typeof(option) === \"object\") {\n      Object.assign(self.config, option);\n\n      for (var key in option) {\n        if (CALLBACKS[key] !== undefined) CALLBACKS[key].forEach(function (x) {\n          return x();\n        });\n      }\n    } else {\n      self.config[option] = value;\n      if (CALLBACKS[option] !== undefined) CALLBACKS[option].forEach(function (x) {\n        return x();\n      });else if (HOOKS.indexOf(option) > -1) self.config[option] = arrayify(value);\n    }\n\n    self.redraw();\n    updateValue(true);\n  }\n\n  function setSelectedDate(inputDate, format) {\n    var dates = [];\n    if (inputDate instanceof Array) dates = inputDate.map(function (d) {\n      return self.parseDate(d, format);\n    });else if (inputDate instanceof Date || typeof inputDate === \"number\") dates = [self.parseDate(inputDate, format)];else if (typeof inputDate === \"string\") {\n      switch (self.config.mode) {\n        case \"single\":\n        case \"time\":\n          dates = [self.parseDate(inputDate, format)];\n          break;\n\n        case \"multiple\":\n          dates = inputDate.split(self.config.conjunction).map(function (date) {\n            return self.parseDate(date, format);\n          });\n          break;\n\n        case \"range\":\n          dates = inputDate.split(self.l10n.rangeSeparator).map(function (date) {\n            return self.parseDate(date, format);\n          });\n          break;\n\n        default:\n          break;\n      }\n    } else self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n    self.selectedDates = self.config.allowInvalidPreload ? dates : dates.filter(function (d) {\n      return d instanceof Date && isEnabled(d, false);\n    });\n    if (self.config.mode === \"range\") self.selectedDates.sort(function (a, b) {\n      return a.getTime() - b.getTime();\n    });\n  }\n\n  function setDate(date, triggerChange, format) {\n    if (triggerChange === void 0) {\n      triggerChange = false;\n    }\n\n    if (format === void 0) {\n      format = self.config.dateFormat;\n    }\n\n    if (date !== 0 && !date || date instanceof Array && date.length === 0) return self.clear(triggerChange);\n    setSelectedDate(date, format);\n    self.latestSelectedDateObj = self.selectedDates[self.selectedDates.length - 1];\n    self.redraw();\n    jumpToDate(undefined, triggerChange);\n    setHoursFromDate();\n\n    if (self.selectedDates.length === 0) {\n      self.clear(false);\n    }\n\n    updateValue(triggerChange);\n    if (triggerChange) triggerEvent(\"onChange\");\n  }\n\n  function parseDateRules(arr) {\n    return arr.slice().map(function (rule) {\n      if (typeof rule === \"string\" || typeof rule === \"number\" || rule instanceof Date) {\n        return self.parseDate(rule, undefined, true);\n      } else if (rule && _typeof(rule) === \"object\" && rule.from && rule.to) return {\n        from: self.parseDate(rule.from, undefined),\n        to: self.parseDate(rule.to, undefined)\n      };\n\n      return rule;\n    }).filter(function (x) {\n      return x;\n    });\n  }\n\n  function setupDates() {\n    self.selectedDates = [];\n    self.now = self.parseDate(self.config.now) || new Date();\n    var preloadedDate = self.config.defaultDate || ((self.input.nodeName === \"INPUT\" || self.input.nodeName === \"TEXTAREA\") && self.input.placeholder && self.input.value === self.input.placeholder ? null : self.input.value);\n    if (preloadedDate) setSelectedDate(preloadedDate, self.config.dateFormat);\n    self._initialDate = self.selectedDates.length > 0 ? self.selectedDates[0] : self.config.minDate && self.config.minDate.getTime() > self.now.getTime() ? self.config.minDate : self.config.maxDate && self.config.maxDate.getTime() < self.now.getTime() ? self.config.maxDate : self.now;\n    self.currentYear = self._initialDate.getFullYear();\n    self.currentMonth = self._initialDate.getMonth();\n    if (self.selectedDates.length > 0) self.latestSelectedDateObj = self.selectedDates[0];\n    if (self.config.minTime !== undefined) self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n    if (self.config.maxTime !== undefined) self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n    self.minDateHasTime = !!self.config.minDate && (self.config.minDate.getHours() > 0 || self.config.minDate.getMinutes() > 0 || self.config.minDate.getSeconds() > 0);\n    self.maxDateHasTime = !!self.config.maxDate && (self.config.maxDate.getHours() > 0 || self.config.maxDate.getMinutes() > 0 || self.config.maxDate.getSeconds() > 0);\n  }\n\n  function setupInputs() {\n    self.input = getInputElem();\n\n    if (!self.input) {\n      self.config.errorHandler(new Error(\"Invalid input element specified\"));\n      return;\n    }\n\n    self.input._type = self.input.type;\n    self.input.type = \"text\";\n    self.input.classList.add(\"flatpickr-input\");\n    self._input = self.input;\n\n    if (self.config.altInput) {\n      self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n      self._input = self.altInput;\n      self.altInput.placeholder = self.input.placeholder;\n      self.altInput.disabled = self.input.disabled;\n      self.altInput.required = self.input.required;\n      self.altInput.tabIndex = self.input.tabIndex;\n      self.altInput.type = \"text\";\n      self.input.setAttribute(\"type\", \"hidden\");\n      if (!self.config.static && self.input.parentNode) self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n    }\n\n    if (!self.config.allowInput) self._input.setAttribute(\"readonly\", \"readonly\");\n    updatePositionElement();\n  }\n\n  function updatePositionElement() {\n    self._positionElement = self.config.positionElement || self._input;\n  }\n\n  function setupMobile() {\n    var inputType = self.config.enableTime ? self.config.noCalendar ? \"time\" : \"datetime-local\" : \"date\";\n    self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n    self.mobileInput.tabIndex = 1;\n    self.mobileInput.type = inputType;\n    self.mobileInput.disabled = self.input.disabled;\n    self.mobileInput.required = self.input.required;\n    self.mobileInput.placeholder = self.input.placeholder;\n    self.mobileFormatStr = inputType === \"datetime-local\" ? \"Y-m-d\\\\TH:i:S\" : inputType === \"date\" ? \"Y-m-d\" : \"H:i:S\";\n\n    if (self.selectedDates.length > 0) {\n      self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n    }\n\n    if (self.config.minDate) self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n    if (self.config.maxDate) self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n    if (self.input.getAttribute(\"step\")) self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n    self.input.type = \"hidden\";\n    if (self.altInput !== undefined) self.altInput.type = \"hidden\";\n\n    try {\n      if (self.input.parentNode) self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n    } catch (_a) {}\n\n    bind(self.mobileInput, \"change\", function (e) {\n      self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n      triggerEvent(\"onChange\");\n      triggerEvent(\"onClose\");\n    });\n  }\n\n  function toggle(e) {\n    if (self.isOpen === true) return self.close();\n    self.open(e);\n  }\n\n  function triggerEvent(event, data) {\n    if (self.config === undefined) return;\n    var hooks = self.config[event];\n\n    if (hooks !== undefined && hooks.length > 0) {\n      for (var i = 0; hooks[i] && i < hooks.length; i++) {\n        hooks[i](self.selectedDates, self.input.value, self, data);\n      }\n    }\n\n    if (event === \"onChange\") {\n      self.input.dispatchEvent(createEvent(\"change\"));\n      self.input.dispatchEvent(createEvent(\"input\"));\n    }\n  }\n\n  function createEvent(name) {\n    var e = document.createEvent(\"Event\");\n    e.initEvent(name, true, true);\n    return e;\n  }\n\n  function isDateSelected(date) {\n    for (var i = 0; i < self.selectedDates.length; i++) {\n      var selectedDate = self.selectedDates[i];\n      if (selectedDate instanceof Date && compareDates(selectedDate, date) === 0) return \"\" + i;\n    }\n\n    return false;\n  }\n\n  function isDateInRange(date) {\n    if (self.config.mode !== \"range\" || self.selectedDates.length < 2) return false;\n    return compareDates(date, self.selectedDates[0]) >= 0 && compareDates(date, self.selectedDates[1]) <= 0;\n  }\n\n  function updateNavigationCurrentMonth() {\n    if (self.config.noCalendar || self.isMobile || !self.monthNav) return;\n    self.yearElements.forEach(function (yearElement, i) {\n      var d = new Date(self.currentYear, self.currentMonth, 1);\n      d.setMonth(self.currentMonth + i);\n\n      if (self.config.showMonths > 1 || self.config.monthSelectorType === \"static\") {\n        self.monthElements[i].textContent = monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n      } else {\n        self.monthsDropdownContainer.value = d.getMonth().toString();\n      }\n\n      yearElement.value = d.getFullYear().toString();\n    });\n    self._hidePrevMonthArrow = self.config.minDate !== undefined && (self.currentYear === self.config.minDate.getFullYear() ? self.currentMonth <= self.config.minDate.getMonth() : self.currentYear < self.config.minDate.getFullYear());\n    self._hideNextMonthArrow = self.config.maxDate !== undefined && (self.currentYear === self.config.maxDate.getFullYear() ? self.currentMonth + 1 > self.config.maxDate.getMonth() : self.currentYear > self.config.maxDate.getFullYear());\n  }\n\n  function getDateStr(specificFormat) {\n    var format = specificFormat || (self.config.altInput ? self.config.altFormat : self.config.dateFormat);\n    return self.selectedDates.map(function (dObj) {\n      return self.formatDate(dObj, format);\n    }).filter(function (d, i, arr) {\n      return self.config.mode !== \"range\" || self.config.enableTime || arr.indexOf(d) === i;\n    }).join(self.config.mode !== \"range\" ? self.config.conjunction : self.l10n.rangeSeparator);\n  }\n\n  function updateValue(triggerChange) {\n    if (triggerChange === void 0) {\n      triggerChange = true;\n    }\n\n    if (self.mobileInput !== undefined && self.mobileFormatStr) {\n      self.mobileInput.value = self.latestSelectedDateObj !== undefined ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr) : \"\";\n    }\n\n    self.input.value = getDateStr(self.config.dateFormat);\n\n    if (self.altInput !== undefined) {\n      self.altInput.value = getDateStr(self.config.altFormat);\n    }\n\n    if (triggerChange !== false) triggerEvent(\"onValueUpdate\");\n  }\n\n  function onMonthNavClick(e) {\n    var eventTarget = getEventTarget(e);\n    var isPrevMonth = self.prevMonthNav.contains(eventTarget);\n    var isNextMonth = self.nextMonthNav.contains(eventTarget);\n\n    if (isPrevMonth || isNextMonth) {\n      changeMonth(isPrevMonth ? -1 : 1);\n    } else if (self.yearElements.indexOf(eventTarget) >= 0) {\n      eventTarget.select();\n    } else if (eventTarget.classList.contains(\"arrowUp\")) {\n      self.changeYear(self.currentYear + 1);\n    } else if (eventTarget.classList.contains(\"arrowDown\")) {\n      self.changeYear(self.currentYear - 1);\n    }\n  }\n\n  function timeWrapper(e) {\n    e.preventDefault();\n    var isKeyDown = e.type === \"keydown\",\n        eventTarget = getEventTarget(e),\n        input = eventTarget;\n\n    if (self.amPM !== undefined && eventTarget === self.amPM) {\n      self.amPM.textContent = self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n    }\n\n    var min = parseFloat(input.getAttribute(\"min\")),\n        max = parseFloat(input.getAttribute(\"max\")),\n        step = parseFloat(input.getAttribute(\"step\")),\n        curValue = parseInt(input.value, 10),\n        delta = e.delta || (isKeyDown ? e.which === 38 ? 1 : -1 : 0);\n    var newValue = curValue + step * delta;\n\n    if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n      var isHourElem = input === self.hourElement,\n          isMinuteElem = input === self.minuteElement;\n\n      if (newValue < min) {\n        newValue = max + newValue + int(!isHourElem) + (int(isHourElem) && int(!self.amPM));\n        if (isMinuteElem) incrementNumInput(undefined, -1, self.hourElement);\n      } else if (newValue > max) {\n        newValue = input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n        if (isMinuteElem) incrementNumInput(undefined, 1, self.hourElement);\n      }\n\n      if (self.amPM && isHourElem && (step === 1 ? newValue + curValue === 23 : Math.abs(newValue - curValue) > step)) {\n        self.amPM.textContent = self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n      }\n\n      input.value = pad(newValue);\n    }\n  }\n\n  init();\n  return self;\n}\n\nfunction _flatpickr(nodeList, config) {\n  var nodes = Array.prototype.slice.call(nodeList).filter(function (x) {\n    return x instanceof HTMLElement;\n  });\n  var instances = [];\n\n  for (var i = 0; i < nodes.length; i++) {\n    var node = nodes[i];\n\n    try {\n      if (node.getAttribute(\"data-fp-omit\") !== null) continue;\n\n      if (node._flatpickr !== undefined) {\n        node._flatpickr.destroy();\n\n        node._flatpickr = undefined;\n      }\n\n      node._flatpickr = FlatpickrInstance(node, config || {});\n      instances.push(node._flatpickr);\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  return instances.length === 1 ? instances[0] : instances;\n}\n\nif (typeof HTMLElement !== \"undefined\" && typeof HTMLCollection !== \"undefined\" && typeof NodeList !== \"undefined\") {\n  HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n    return _flatpickr(this, config);\n  };\n\n  HTMLElement.prototype.flatpickr = function (config) {\n    return _flatpickr([this], config);\n  };\n}\n\nvar flatpickr = function flatpickr(selector, config) {\n  if (typeof selector === \"string\") {\n    return _flatpickr(window.document.querySelectorAll(selector), config);\n  } else if (selector instanceof Node) {\n    return _flatpickr([selector], config);\n  } else {\n    return _flatpickr(selector, config);\n  }\n};\n\nflatpickr.defaultConfig = {};\nflatpickr.l10ns = {\n  en: __assign({}, English),\n  default: __assign({}, English)\n};\n\nflatpickr.localize = function (l10n) {\n  flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);\n};\n\nflatpickr.setDefaults = function (config) {\n  flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);\n};\n\nflatpickr.parseDate = createDateParser({});\nflatpickr.formatDate = createDateFormatter({});\nflatpickr.compareDates = compareDates;\n\nif (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n  jQuery.fn.flatpickr = function (config) {\n    return _flatpickr(this, config);\n  };\n}\n\nDate.prototype.fp_incr = function (days) {\n  return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n};\n\nif (typeof window !== \"undefined\") {\n  window.flatpickr = flatpickr;\n}\n\nexport default flatpickr;","\"use strict\";\n\nif (typeof Object.assign !== \"function\") {\n  Object.assign = function (target) {\n    var args = [];\n\n    for (var _i = 1; _i < arguments.length; _i++) {\n      args[_i - 1] = arguments[_i];\n    }\n\n    if (!target) {\n      throw TypeError(\"Cannot convert undefined or null to object\");\n    }\n\n    var _loop_1 = function _loop_1(source) {\n      if (source) {\n        Object.keys(source).forEach(function (key) {\n          return target[key] = source[key];\n        });\n      }\n    };\n\n    for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n      var source = args_1[_a];\n\n      _loop_1(source);\n    }\n\n    return target;\n  };\n}","/*!\n * Chartkick.js v5.0.1\n * Create beautiful charts with one line of JavaScript\n * https://github.com/ankane/chartkick.js\n * MIT License\n */\nfunction isArray(variable) {\n  return Object.prototype.toString.call(variable) === \"[object Array]\";\n}\n\nfunction isFunction(variable) {\n  return variable instanceof Function;\n}\n\nfunction isPlainObject(variable) {\n  // protect against prototype pollution, defense 2\n  return Object.prototype.toString.call(variable) === \"[object Object]\" && !isFunction(variable) && variable instanceof Object;\n} // https://github.com/madrobby/zepto/blob/master/src/zepto.js\n\n\nfunction extend(target, source) {\n  for (var key in source) {\n    // protect against prototype pollution, defense 1\n    if (key === \"__proto__\") {\n      continue;\n    }\n\n    if (isPlainObject(source[key]) || isArray(source[key])) {\n      if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n        target[key] = {};\n      }\n\n      if (isArray(source[key]) && !isArray(target[key])) {\n        target[key] = [];\n      }\n\n      extend(target[key], source[key]);\n    } else if (source[key] !== undefined) {\n      target[key] = source[key];\n    }\n  }\n}\n\nfunction merge(obj1, obj2) {\n  var target = {};\n  extend(target, obj1);\n  extend(target, obj2);\n  return target;\n}\n\nvar DATE_PATTERN = /^(\\d\\d\\d\\d)(?:-)?(\\d\\d)(?:-)?(\\d\\d)$/i;\n\nfunction negativeValues(series) {\n  for (var i = 0; i < series.length; i++) {\n    var data = series[i].data;\n\n    for (var j = 0; j < data.length; j++) {\n      if (data[j][1] < 0) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n}\n\nfunction toStr(obj) {\n  return \"\" + obj;\n}\n\nfunction toFloat(obj) {\n  return parseFloat(obj);\n}\n\nfunction toDate(obj) {\n  if (obj instanceof Date) {\n    return obj;\n  } else if (typeof obj === \"number\") {\n    return new Date(obj * 1000); // ms\n  } else {\n    var s = toStr(obj);\n    var matches = s.match(DATE_PATTERN);\n\n    if (matches) {\n      var year = parseInt(matches[1], 10);\n      var month = parseInt(matches[2], 10) - 1;\n      var day = parseInt(matches[3], 10);\n      return new Date(year, month, day);\n    } else {\n      // try our best to get the str into iso8601\n      // TODO be smarter about this\n      var str = s.replace(/ /, \"T\").replace(\" \", \"\").replace(\"UTC\", \"Z\"); // Date.parse returns milliseconds if valid and NaN if invalid\n\n      return new Date(Date.parse(str) || s);\n    }\n  }\n}\n\nfunction toArr(obj) {\n  if (isArray(obj)) {\n    return obj;\n  } else {\n    var arr = [];\n\n    for (var i in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, i)) {\n        arr.push([i, obj[i]]);\n      }\n    }\n\n    return arr;\n  }\n}\n\nfunction jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle) {\n  return function (chart, opts, chartOptions) {\n    var series = chart.data;\n    var options = merge({}, defaultOptions);\n    options = merge(options, chartOptions || {});\n\n    if (chart.singleSeriesFormat || \"legend\" in opts) {\n      hideLegend(options, opts.legend, chart.singleSeriesFormat);\n    }\n\n    if (opts.title) {\n      setTitle(options, opts.title);\n    } // min\n\n\n    if (\"min\" in opts) {\n      setMin(options, opts.min);\n    } else if (!negativeValues(series)) {\n      setMin(options, 0);\n    } // max\n\n\n    if (opts.max) {\n      setMax(options, opts.max);\n    }\n\n    if (\"stacked\" in opts) {\n      setStacked(options, opts.stacked);\n    }\n\n    if (opts.colors) {\n      options.colors = opts.colors;\n    }\n\n    if (opts.xtitle) {\n      setXtitle(options, opts.xtitle);\n    }\n\n    if (opts.ytitle) {\n      setYtitle(options, opts.ytitle);\n    } // merge library last\n\n\n    options = merge(options, opts.library || {});\n    return options;\n  };\n}\n\nfunction sortByTime(a, b) {\n  return a[0].getTime() - b[0].getTime();\n}\n\nfunction sortByNumberSeries(a, b) {\n  return a[0] - b[0];\n} // needed since sort() without arguments does string comparison\n\n\nfunction sortByNumber(a, b) {\n  return a - b;\n}\n\nfunction every(values, fn) {\n  for (var i = 0; i < values.length; i++) {\n    if (!fn(values[i])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction isDay(timeUnit) {\n  return timeUnit === \"day\" || timeUnit === \"week\" || timeUnit === \"month\" || timeUnit === \"year\";\n}\n\nfunction calculateTimeUnit(values, maxDay) {\n  if (maxDay === void 0) maxDay = false;\n\n  if (values.length === 0) {\n    return null;\n  }\n\n  var minute = every(values, function (d) {\n    return d.getMilliseconds() === 0 && d.getSeconds() === 0;\n  });\n\n  if (!minute) {\n    return null;\n  }\n\n  var hour = every(values, function (d) {\n    return d.getMinutes() === 0;\n  });\n\n  if (!hour) {\n    return \"minute\";\n  }\n\n  var day = every(values, function (d) {\n    return d.getHours() === 0;\n  });\n\n  if (!day) {\n    return \"hour\";\n  }\n\n  if (maxDay) {\n    return \"day\";\n  }\n\n  var month = every(values, function (d) {\n    return d.getDate() === 1;\n  });\n\n  if (!month) {\n    var dayOfWeek = values[0].getDay();\n    var week = every(values, function (d) {\n      return d.getDay() === dayOfWeek;\n    });\n    return week ? \"week\" : \"day\";\n  }\n\n  var year = every(values, function (d) {\n    return d.getMonth() === 0;\n  });\n\n  if (!year) {\n    return \"month\";\n  }\n\n  return \"year\";\n}\n\nfunction isDate(obj) {\n  return !isNaN(toDate(obj)) && toStr(obj).length >= 6;\n}\n\nfunction isNumber(obj) {\n  return typeof obj === \"number\";\n}\n\nvar byteSuffixes = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\"];\n\nfunction formatValue(pre, value, options, axis) {\n  pre = pre || \"\";\n\n  if (options.prefix) {\n    if (value < 0) {\n      value = value * -1;\n      pre += \"-\";\n    }\n\n    pre += options.prefix;\n  }\n\n  var suffix = options.suffix || \"\";\n  var precision = options.precision;\n  var round = options.round;\n\n  if (options.byteScale) {\n    var positive = value >= 0;\n\n    if (!positive) {\n      value *= -1;\n    }\n\n    var baseValue = axis ? options.byteScale : value;\n    var suffixIdx;\n\n    if (baseValue >= 1152921504606846976) {\n      value /= 1152921504606846976;\n      suffixIdx = 6;\n    } else if (baseValue >= 1125899906842624) {\n      value /= 1125899906842624;\n      suffixIdx = 5;\n    } else if (baseValue >= 1099511627776) {\n      value /= 1099511627776;\n      suffixIdx = 4;\n    } else if (baseValue >= 1073741824) {\n      value /= 1073741824;\n      suffixIdx = 3;\n    } else if (baseValue >= 1048576) {\n      value /= 1048576;\n      suffixIdx = 2;\n    } else if (baseValue >= 1024) {\n      value /= 1024;\n      suffixIdx = 1;\n    } else {\n      suffixIdx = 0;\n    } // TODO handle manual precision case\n\n\n    if (precision === undefined && round === undefined) {\n      if (value >= 1023.5) {\n        if (suffixIdx < byteSuffixes.length - 1) {\n          value = 1.0;\n          suffixIdx += 1;\n        }\n      }\n\n      precision = value >= 1000 ? 4 : 3;\n    }\n\n    suffix = \" \" + byteSuffixes[suffixIdx]; // flip value back\n\n    if (!positive) {\n      value *= -1;\n    }\n  }\n\n  if (precision !== undefined && round !== undefined) {\n    throw Error(\"Use either round or precision, not both\");\n  }\n\n  if (!axis) {\n    if (precision !== undefined) {\n      value = value.toPrecision(precision);\n\n      if (!options.zeros) {\n        value = parseFloat(value);\n      }\n    }\n\n    if (round !== undefined) {\n      if (round < 0) {\n        var num = Math.pow(10, -1 * round);\n        value = parseInt((1.0 * value / num).toFixed(0)) * num;\n      } else {\n        value = value.toFixed(round);\n\n        if (!options.zeros) {\n          value = parseFloat(value);\n        }\n      }\n    }\n  }\n\n  if (options.thousands || options.decimal) {\n    value = toStr(value);\n    var parts = value.split(\".\");\n    value = parts[0];\n\n    if (options.thousands) {\n      value = value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, options.thousands);\n    }\n\n    if (parts.length > 1) {\n      value += (options.decimal || \".\") + parts[1];\n    }\n  }\n\n  return pre + value + suffix;\n}\n\nfunction seriesOption(chart, series, option) {\n  if (option in series) {\n    return series[option];\n  } else if (option in chart.options) {\n    return chart.options[option];\n  }\n\n  return null;\n}\n\nvar baseOptions = {\n  maintainAspectRatio: false,\n  animation: false,\n  plugins: {\n    legend: {},\n    tooltip: {\n      displayColors: false,\n      callbacks: {}\n    },\n    title: {\n      font: {\n        size: 20\n      },\n      color: \"#333\"\n    }\n  },\n  interaction: {}\n};\nvar defaultOptions$2 = {\n  scales: {\n    y: {\n      ticks: {\n        maxTicksLimit: 4\n      },\n      title: {\n        font: {\n          size: 16\n        },\n        color: \"#333\"\n      },\n      grid: {}\n    },\n    x: {\n      grid: {\n        drawOnChartArea: false\n      },\n      title: {\n        font: {\n          size: 16\n        },\n        color: \"#333\"\n      },\n      time: {},\n      ticks: {}\n    }\n  }\n}; // http://there4.io/2012/05/02/google-chart-color-list/\n\nvar defaultColors = [\"#3366CC\", \"#DC3912\", \"#FF9900\", \"#109618\", \"#990099\", \"#3B3EAC\", \"#0099C6\", \"#DD4477\", \"#66AA00\", \"#B82E2E\", \"#316395\", \"#994499\", \"#22AA99\", \"#AAAA11\", \"#6633CC\", \"#E67300\", \"#8B0707\", \"#329262\", \"#5574A6\", \"#651067\"];\n\nfunction hideLegend$2(options, legend, hideLegend) {\n  if (legend !== undefined) {\n    options.plugins.legend.display = !!legend;\n\n    if (legend && legend !== true) {\n      options.plugins.legend.position = legend;\n    }\n  } else if (hideLegend) {\n    options.plugins.legend.display = false;\n  }\n}\n\nfunction setTitle$2(options, title) {\n  options.plugins.title.display = true;\n  options.plugins.title.text = title;\n}\n\nfunction setMin$2(options, min) {\n  if (min !== null) {\n    options.scales.y.min = toFloat(min);\n  }\n}\n\nfunction setMax$2(options, max) {\n  options.scales.y.max = toFloat(max);\n}\n\nfunction setBarMin$1(options, min) {\n  if (min !== null) {\n    options.scales.x.min = toFloat(min);\n  }\n}\n\nfunction setBarMax$1(options, max) {\n  options.scales.x.max = toFloat(max);\n}\n\nfunction setStacked$2(options, stacked) {\n  options.scales.x.stacked = !!stacked;\n  options.scales.y.stacked = !!stacked;\n}\n\nfunction setXtitle$2(options, title) {\n  options.scales.x.title.display = true;\n  options.scales.x.title.text = title;\n}\n\nfunction setYtitle$2(options, title) {\n  options.scales.y.title.display = true;\n  options.scales.y.title.text = title;\n} // https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb\n\n\nfunction addOpacity(hex, opacity) {\n  var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n  return result ? \"rgba(\" + parseInt(result[1], 16) + \", \" + parseInt(result[2], 16) + \", \" + parseInt(result[3], 16) + \", \" + opacity + \")\" : hex;\n}\n\nfunction notnull(x) {\n  return x !== null && x !== undefined;\n}\n\nfunction setLabelSize(chart, data, options) {\n  var maxLabelSize = Math.ceil(chart.element.offsetWidth / 4.0 / data.labels.length);\n\n  if (maxLabelSize > 25) {\n    maxLabelSize = 25;\n  } else if (maxLabelSize < 10) {\n    maxLabelSize = 10;\n  }\n\n  if (!options.scales.x.ticks.callback) {\n    options.scales.x.ticks.callback = function (value) {\n      value = toStr(this.getLabelForValue(value));\n\n      if (value.length > maxLabelSize) {\n        return value.substring(0, maxLabelSize - 2) + \"...\";\n      } else {\n        return value;\n      }\n    };\n  }\n}\n\nfunction calculateScale(series) {\n  var scale = 1;\n  var max = maxAbsY(series);\n\n  while (max >= 1024) {\n    scale *= 1024;\n    max /= 1024;\n  }\n\n  return scale;\n}\n\nfunction setFormatOptions$1(chart, options, chartType) {\n  // options to apply to x and r values for scatter and bubble\n  var numericOptions = {\n    thousands: chart.options.thousands,\n    decimal: chart.options.decimal\n  }; // options to apply to y value\n\n  var formatOptions = merge({\n    prefix: chart.options.prefix,\n    suffix: chart.options.suffix,\n    precision: chart.options.precision,\n    round: chart.options.round,\n    zeros: chart.options.zeros\n  }, numericOptions);\n\n  if (chart.options.bytes) {\n    var series = chart.data;\n\n    if (chartType === \"pie\") {\n      series = [{\n        data: series\n      }];\n    } // set step size\n\n\n    formatOptions.byteScale = calculateScale(series);\n  }\n\n  if (chartType !== \"pie\") {\n    var axis = options.scales.y;\n\n    if (chartType === \"bar\") {\n      axis = options.scales.x;\n    }\n\n    if (formatOptions.byteScale) {\n      if (!axis.ticks.stepSize) {\n        axis.ticks.stepSize = formatOptions.byteScale / 2;\n      }\n\n      if (!axis.ticks.maxTicksLimit) {\n        axis.ticks.maxTicksLimit = 4;\n      }\n    }\n\n    if (!axis.ticks.callback) {\n      axis.ticks.callback = function (value) {\n        return formatValue(\"\", value, formatOptions, true);\n      };\n    }\n\n    if ((chartType === \"scatter\" || chartType === \"bubble\") && !options.scales.x.ticks.callback) {\n      options.scales.x.ticks.callback = function (value) {\n        return formatValue(\"\", value, numericOptions, true);\n      };\n    }\n  }\n\n  if (!options.plugins.tooltip.callbacks.label) {\n    if (chartType === \"scatter\") {\n      options.plugins.tooltip.callbacks.label = function (context) {\n        var label = context.dataset.label || '';\n\n        if (label) {\n          label += ': ';\n        }\n\n        var dataPoint = context.parsed;\n        return label + '(' + formatValue('', dataPoint.x, numericOptions) + ', ' + formatValue('', dataPoint.y, formatOptions) + ')';\n      };\n    } else if (chartType === \"bubble\") {\n      options.plugins.tooltip.callbacks.label = function (context) {\n        var label = context.dataset.label || '';\n\n        if (label) {\n          label += ': ';\n        }\n\n        var dataPoint = context.raw;\n        return label + '(' + formatValue('', dataPoint.x, numericOptions) + ', ' + formatValue('', dataPoint.y, formatOptions) + ', ' + formatValue('', dataPoint.v, numericOptions) + ')';\n      };\n    } else if (chartType === \"pie\") {\n      // need to use separate label for pie charts\n      options.plugins.tooltip.callbacks.label = function (context) {\n        return formatValue('', context.parsed, formatOptions);\n      };\n    } else {\n      var valueLabel = chartType === \"bar\" ? \"x\" : \"y\";\n\n      options.plugins.tooltip.callbacks.label = function (context) {\n        // don't show null values for stacked charts\n        if (context.parsed[valueLabel] === null) {\n          return;\n        }\n\n        var label = context.dataset.label || '';\n\n        if (label) {\n          label += ': ';\n        }\n\n        return formatValue(label, context.parsed[valueLabel], formatOptions);\n      };\n    }\n  } // avoid formatting x-axis labels\n  // by default, Chart.js applies locale\n\n\n  if ((chartType === \"line\" || chartType === \"area\") && chart.xtype === \"number\") {\n    if (!options.scales.x.ticks.callback) {\n      options.scales.x.ticks.callback = function (value) {\n        return toStr(value);\n      };\n    }\n\n    if (!options.plugins.tooltip.callbacks.title) {\n      options.plugins.tooltip.callbacks.title = function (context) {\n        return toStr(context[0].parsed.x);\n      };\n    }\n  }\n}\n\nfunction maxAbsY(series) {\n  var max = 0;\n\n  for (var i = 0; i < series.length; i++) {\n    var data = series[i].data;\n\n    for (var j = 0; j < data.length; j++) {\n      var v = Math.abs(data[j][1]);\n\n      if (v > max) {\n        max = v;\n      }\n    }\n  }\n\n  return max;\n}\n\nfunction maxR(series) {\n  // start at zero since radius must be positive\n  var max = 0;\n\n  for (var i = 0; i < series.length; i++) {\n    var data = series[i].data;\n\n    for (var j = 0; j < data.length; j++) {\n      var v = data[j][2];\n\n      if (v > max) {\n        max = v;\n      }\n    }\n  }\n\n  return max;\n}\n\nvar jsOptions$2 = jsOptionsFunc(merge(baseOptions, defaultOptions$2), hideLegend$2, setTitle$2, setMin$2, setMax$2, setStacked$2, setXtitle$2, setYtitle$2);\n\nfunction prepareDefaultData(chart) {\n  var series = chart.data;\n  var rows = {};\n  var keys = [];\n  var labels = [];\n  var values = [];\n\n  for (var i = 0; i < series.length; i++) {\n    var data = series[i].data;\n\n    for (var j = 0; j < data.length; j++) {\n      var d = data[j];\n      var key = chart.xtype === \"datetime\" ? d[0].getTime() : d[0];\n\n      if (!rows[key]) {\n        rows[key] = new Array(series.length);\n        keys.push(key);\n      }\n\n      rows[key][i] = d[1];\n    }\n  }\n\n  if (chart.xtype === \"datetime\" || chart.xtype === \"number\") {\n    keys.sort(sortByNumber);\n  }\n\n  for (var i$1 = 0; i$1 < series.length; i$1++) {\n    values.push([]);\n  }\n\n  for (var i$2 = 0; i$2 < keys.length; i$2++) {\n    var key$1 = keys[i$2];\n    var label = chart.xtype === \"datetime\" ? new Date(key$1) : key$1;\n    labels.push(label);\n    var row = rows[key$1];\n\n    for (var j$1 = 0; j$1 < series.length; j$1++) {\n      var v = row[j$1]; // Chart.js doesn't like undefined\n\n      values[j$1].push(v === undefined ? null : v);\n    }\n  }\n\n  return {\n    labels: labels,\n    values: values\n  };\n}\n\nfunction prepareBubbleData(chart) {\n  var series = chart.data;\n  var values = [];\n  var max = maxR(series);\n\n  for (var i = 0; i < series.length; i++) {\n    var data = series[i].data;\n    var points = [];\n\n    for (var j = 0; j < data.length; j++) {\n      var v = data[j];\n      points.push({\n        x: v[0],\n        y: v[1],\n        r: v[2] * 20 / max,\n        // custom attribute, for tooltip\n        v: v[2]\n      });\n    }\n\n    values.push(points);\n  }\n\n  return {\n    labels: [],\n    values: values\n  };\n} // scatter or numeric line/area\n\n\nfunction prepareNumberData(chart) {\n  var series = chart.data;\n  var values = [];\n\n  for (var i = 0; i < series.length; i++) {\n    var data = series[i].data;\n    data.sort(sortByNumberSeries);\n    var points = [];\n\n    for (var j = 0; j < data.length; j++) {\n      var v = data[j];\n      points.push({\n        x: v[0],\n        y: v[1]\n      });\n    }\n\n    values.push(points);\n  }\n\n  return {\n    labels: [],\n    values: values\n  };\n}\n\nfunction prepareData(chart, chartType) {\n  if (chartType === \"bubble\") {\n    return prepareBubbleData(chart);\n  } else if (chart.xtype === \"number\" && chartType !== \"bar\" && chartType !== \"column\") {\n    return prepareNumberData(chart);\n  } else {\n    return prepareDefaultData(chart);\n  }\n}\n\nfunction createDataTable(chart, options, chartType) {\n  var ref = prepareData(chart, chartType);\n  var labels = ref.labels;\n  var values = ref.values;\n  var series = chart.data;\n  var datasets = [];\n  var colors = chart.options.colors || defaultColors;\n\n  for (var i = 0; i < series.length; i++) {\n    var s = series[i]; // use colors for each bar for single series format\n\n    var color = void 0;\n    var backgroundColor = void 0;\n\n    if (chart.options.colors && chart.singleSeriesFormat && (chartType === \"bar\" || chartType === \"column\") && !s.color && isArray(chart.options.colors) && !isArray(chart.options.colors[0])) {\n      color = colors;\n      backgroundColor = [];\n\n      for (var j = 0; j < colors.length; j++) {\n        backgroundColor[j] = addOpacity(color[j], 0.5);\n      }\n    } else {\n      color = s.color || colors[i];\n      backgroundColor = chartType !== \"line\" ? addOpacity(color, 0.5) : color;\n    }\n\n    var dataset = {\n      label: s.name || \"\",\n      data: values[i],\n      fill: chartType === \"area\",\n      borderColor: color,\n      backgroundColor: backgroundColor,\n      borderWidth: 2\n    };\n    var pointChart = chartType === \"line\" || chartType === \"area\" || chartType === \"scatter\" || chartType === \"bubble\";\n\n    if (pointChart) {\n      dataset.pointBackgroundColor = color;\n      dataset.pointHoverBackgroundColor = color;\n      dataset.pointHitRadius = 50;\n    }\n\n    if (chartType === \"bubble\") {\n      dataset.pointBackgroundColor = backgroundColor;\n      dataset.pointHoverBackgroundColor = backgroundColor;\n      dataset.pointHoverBorderWidth = 2;\n    }\n\n    if (s.stack) {\n      dataset.stack = s.stack;\n    }\n\n    var curve = seriesOption(chart, s, \"curve\");\n\n    if (curve === false) {\n      dataset.tension = 0;\n    } else if (pointChart) {\n      dataset.tension = 0.4;\n    }\n\n    var points = seriesOption(chart, s, \"points\");\n\n    if (points === false) {\n      dataset.pointRadius = 0;\n      dataset.pointHoverRadius = 0;\n    }\n\n    dataset = merge(dataset, chart.options.dataset || {});\n    dataset = merge(dataset, s.library || {});\n    dataset = merge(dataset, s.dataset || {});\n    datasets.push(dataset);\n  }\n\n  var xmin = chart.options.xmin;\n  var xmax = chart.options.xmax;\n\n  if (chart.xtype === \"datetime\") {\n    if (notnull(xmin)) {\n      options.scales.x.min = toDate(xmin).getTime();\n    }\n\n    if (notnull(xmax)) {\n      options.scales.x.max = toDate(xmax).getTime();\n    }\n  } else if (chart.xtype === \"number\") {\n    if (notnull(xmin)) {\n      options.scales.x.min = xmin;\n    }\n\n    if (notnull(xmax)) {\n      options.scales.x.max = xmax;\n    }\n  }\n\n  if (chart.xtype === \"datetime\") {\n    var timeUnit = calculateTimeUnit(labels); // for empty datetime chart\n\n    if (labels.length === 0) {\n      if (notnull(xmin)) {\n        labels.push(toDate(xmin));\n      }\n\n      if (notnull(xmax)) {\n        labels.push(toDate(xmax));\n      }\n    }\n\n    if (labels.length > 0) {\n      var minTime = (notnull(xmin) ? toDate(xmin) : labels[0]).getTime();\n      var maxTime = (notnull(xmax) ? toDate(xmax) : labels[0]).getTime();\n\n      for (var i$1 = 1; i$1 < labels.length; i$1++) {\n        var value = labels[i$1].getTime();\n\n        if (value < minTime) {\n          minTime = value;\n        }\n\n        if (value > maxTime) {\n          maxTime = value;\n        }\n      }\n\n      var timeDiff = (maxTime - minTime) / (86400 * 1000.0);\n\n      if (!options.scales.x.time.unit) {\n        var step;\n\n        if (timeUnit === \"year\" || timeDiff > 365 * 10) {\n          options.scales.x.time.unit = \"year\";\n          step = 365;\n        } else if (timeUnit === \"month\" || timeDiff > 30 * 10) {\n          options.scales.x.time.unit = \"month\";\n          step = 30;\n        } else if (timeUnit === \"week\" || timeUnit === \"day\" || timeDiff > 10) {\n          options.scales.x.time.unit = \"day\";\n          step = 1;\n        } else if (timeUnit === \"hour\" || timeDiff > 0.5) {\n          options.scales.x.time.displayFormats = {\n            hour: \"MMM d, h a\"\n          };\n          options.scales.x.time.unit = \"hour\";\n          step = 1 / 24.0;\n        } else if (timeUnit === \"minute\") {\n          options.scales.x.time.displayFormats = {\n            minute: \"h:mm a\"\n          };\n          options.scales.x.time.unit = \"minute\";\n          step = 1 / 24.0 / 60.0;\n        }\n\n        if (step && timeDiff > 0) {\n          // width not available for hidden elements\n          var width = chart.element.offsetWidth;\n\n          if (width > 0) {\n            var unitStepSize = Math.ceil(timeDiff / step / (width / 100.0));\n\n            if (timeUnit === \"week\" && step === 1) {\n              unitStepSize = Math.ceil(unitStepSize / 7.0) * 7;\n            }\n\n            options.scales.x.ticks.stepSize = unitStepSize;\n          }\n        }\n      }\n\n      if (!options.scales.x.time.tooltipFormat) {\n        if (timeUnit === \"year\") {\n          options.scales.x.time.tooltipFormat = \"yyyy\";\n        } else if (timeUnit === \"month\") {\n          options.scales.x.time.tooltipFormat = \"MMM yyyy\";\n        } else if (timeUnit === \"week\" || timeUnit === \"day\") {\n          options.scales.x.time.tooltipFormat = \"PP\";\n        } else if (timeUnit === \"hour\") {\n          options.scales.x.time.tooltipFormat = \"MMM d, h a\";\n        } else if (timeUnit === \"minute\") {\n          options.scales.x.time.tooltipFormat = \"h:mm a\";\n        }\n      }\n    }\n  }\n\n  return {\n    labels: labels,\n    datasets: datasets\n  };\n}\n\nvar defaultExport$2 = function defaultExport(library) {\n  this.name = \"chartjs\";\n  this.library = library;\n};\n\ndefaultExport$2.prototype.renderLineChart = function renderLineChart(chart, chartType) {\n  if (!chartType) {\n    chartType = \"line\";\n  }\n\n  var chartOptions = {};\n  var options = jsOptions$2(chart, merge(chartOptions, chart.options));\n  setFormatOptions$1(chart, options, chartType);\n  var data = createDataTable(chart, options, chartType);\n\n  if (chart.xtype === \"number\") {\n    options.scales.x.type = options.scales.x.type || \"linear\";\n    options.scales.x.position = options.scales.x.position || \"bottom\";\n  } else {\n    options.scales.x.type = chart.xtype === \"string\" ? \"category\" : \"time\";\n  }\n\n  this.drawChart(chart, \"line\", data, options);\n};\n\ndefaultExport$2.prototype.renderPieChart = function renderPieChart(chart) {\n  var options = merge({}, baseOptions);\n\n  if (chart.options.donut) {\n    options.cutout = \"50%\";\n  }\n\n  if (\"legend\" in chart.options) {\n    hideLegend$2(options, chart.options.legend);\n  }\n\n  if (chart.options.title) {\n    setTitle$2(options, chart.options.title);\n  }\n\n  options = merge(options, chart.options.library || {});\n  setFormatOptions$1(chart, options, \"pie\");\n  var labels = [];\n  var values = [];\n\n  for (var i = 0; i < chart.data.length; i++) {\n    var point = chart.data[i];\n    labels.push(point[0]);\n    values.push(point[1]);\n  }\n\n  var dataset = {\n    data: values,\n    backgroundColor: chart.options.colors || defaultColors\n  };\n  dataset = merge(dataset, chart.options.dataset || {});\n  var data = {\n    labels: labels,\n    datasets: [dataset]\n  };\n  this.drawChart(chart, \"pie\", data, options);\n};\n\ndefaultExport$2.prototype.renderColumnChart = function renderColumnChart(chart, chartType) {\n  var options;\n\n  if (chartType === \"bar\") {\n    var barOptions = merge(baseOptions, defaultOptions$2);\n    barOptions.indexAxis = \"y\"; // ensure gridlines have proper orientation\n\n    barOptions.scales.x.grid.drawOnChartArea = true;\n    barOptions.scales.y.grid.drawOnChartArea = false;\n    delete barOptions.scales.y.ticks.maxTicksLimit;\n    options = jsOptionsFunc(barOptions, hideLegend$2, setTitle$2, setBarMin$1, setBarMax$1, setStacked$2, setXtitle$2, setYtitle$2)(chart, chart.options);\n  } else {\n    options = jsOptions$2(chart, chart.options);\n  }\n\n  setFormatOptions$1(chart, options, chartType);\n  var data = createDataTable(chart, options, \"column\");\n\n  if (chartType !== \"bar\") {\n    setLabelSize(chart, data, options);\n  }\n\n  if (!(\"mode\" in options.interaction)) {\n    options.interaction.mode = \"index\";\n  }\n\n  this.drawChart(chart, \"bar\", data, options);\n};\n\ndefaultExport$2.prototype.renderAreaChart = function renderAreaChart(chart) {\n  this.renderLineChart(chart, \"area\");\n};\n\ndefaultExport$2.prototype.renderBarChart = function renderBarChart(chart) {\n  this.renderColumnChart(chart, \"bar\");\n};\n\ndefaultExport$2.prototype.renderScatterChart = function renderScatterChart(chart, chartType) {\n  chartType = chartType || \"scatter\";\n  var options = jsOptions$2(chart, chart.options);\n  setFormatOptions$1(chart, options, chartType);\n\n  if (!(\"showLine\" in options)) {\n    options.showLine = false;\n  }\n\n  var data = createDataTable(chart, options, chartType);\n  options.scales.x.type = options.scales.x.type || \"linear\";\n  options.scales.x.position = options.scales.x.position || \"bottom\"; // prevent grouping hover and tooltips\n\n  if (!(\"mode\" in options.interaction)) {\n    options.interaction.mode = \"nearest\";\n  }\n\n  this.drawChart(chart, chartType, data, options);\n};\n\ndefaultExport$2.prototype.renderBubbleChart = function renderBubbleChart(chart) {\n  this.renderScatterChart(chart, \"bubble\");\n};\n\ndefaultExport$2.prototype.destroy = function destroy(chart) {\n  if (chart.chart) {\n    chart.chart.destroy();\n  }\n};\n\ndefaultExport$2.prototype.drawChart = function drawChart(chart, type, data, options) {\n  this.destroy(chart);\n\n  if (chart.destroyed) {\n    return;\n  }\n\n  var chartOptions = {\n    type: type,\n    data: data,\n    options: options\n  };\n\n  if (chart.options.code) {\n    window.console.log(\"new Chart(ctx, \" + JSON.stringify(chartOptions) + \");\");\n  }\n\n  chart.element.innerHTML = \"<canvas></canvas>\";\n  var ctx = chart.element.getElementsByTagName(\"CANVAS\")[0];\n  chart.chart = new this.library(ctx, chartOptions);\n};\n\nvar defaultOptions$1 = {\n  chart: {},\n  xAxis: {\n    title: {\n      text: null\n    },\n    labels: {\n      style: {\n        fontSize: \"12px\"\n      }\n    }\n  },\n  yAxis: {\n    title: {\n      text: null\n    },\n    labels: {\n      style: {\n        fontSize: \"12px\"\n      }\n    }\n  },\n  title: {\n    text: null\n  },\n  credits: {\n    enabled: false\n  },\n  legend: {\n    borderWidth: 0\n  },\n  tooltip: {\n    style: {\n      fontSize: \"12px\"\n    }\n  },\n  plotOptions: {\n    areaspline: {},\n    area: {},\n    series: {\n      marker: {}\n    }\n  },\n  time: {\n    useUTC: false\n  }\n};\n\nfunction hideLegend$1(options, legend, hideLegend) {\n  if (legend !== undefined) {\n    options.legend.enabled = !!legend;\n\n    if (legend && legend !== true) {\n      if (legend === \"top\" || legend === \"bottom\") {\n        options.legend.verticalAlign = legend;\n      } else {\n        options.legend.layout = \"vertical\";\n        options.legend.verticalAlign = \"middle\";\n        options.legend.align = legend;\n      }\n    }\n  } else if (hideLegend) {\n    options.legend.enabled = false;\n  }\n}\n\nfunction setTitle$1(options, title) {\n  options.title.text = title;\n}\n\nfunction setMin$1(options, min) {\n  options.yAxis.min = min;\n}\n\nfunction setMax$1(options, max) {\n  options.yAxis.max = max;\n}\n\nfunction setStacked$1(options, stacked) {\n  var stackedValue = stacked ? stacked === true ? \"normal\" : stacked : null;\n  options.plotOptions.series.stacking = stackedValue;\n  options.plotOptions.area.stacking = stackedValue;\n  options.plotOptions.areaspline.stacking = stackedValue;\n}\n\nfunction setXtitle$1(options, title) {\n  options.xAxis.title.text = title;\n}\n\nfunction setYtitle$1(options, title) {\n  options.yAxis.title.text = title;\n}\n\nvar jsOptions$1 = jsOptionsFunc(defaultOptions$1, hideLegend$1, setTitle$1, setMin$1, setMax$1, setStacked$1, setXtitle$1, setYtitle$1);\n\nfunction setFormatOptions(chart, options, chartType) {\n  var formatOptions = {\n    prefix: chart.options.prefix,\n    suffix: chart.options.suffix,\n    thousands: chart.options.thousands,\n    decimal: chart.options.decimal,\n    precision: chart.options.precision,\n    round: chart.options.round,\n    zeros: chart.options.zeros\n  }; // skip when axis is an array (like with min/max)\n\n  if (chartType !== \"pie\" && !isArray(options.yAxis) && !options.yAxis.labels.formatter) {\n    options.yAxis.labels.formatter = function () {\n      return formatValue(\"\", this.value, formatOptions);\n    };\n  }\n\n  if (!options.tooltip.pointFormatter && !options.tooltip.pointFormat) {\n    options.tooltip.pointFormatter = function () {\n      return '<span style=\"color:' + this.color + \"\\\">\\u25CF</span> \" + formatValue(this.series.name + ': <b>', this.y, formatOptions) + '</b><br/>';\n    };\n  }\n}\n\nvar defaultExport$1 = function defaultExport(library) {\n  this.name = \"highcharts\";\n  this.library = library;\n};\n\ndefaultExport$1.prototype.renderLineChart = function renderLineChart(chart, chartType) {\n  chartType = chartType || \"spline\";\n  var chartOptions = {};\n\n  if (chartType === \"areaspline\") {\n    chartOptions = {\n      plotOptions: {\n        areaspline: {\n          stacking: \"normal\"\n        },\n        area: {\n          stacking: \"normal\"\n        },\n        series: {\n          marker: {\n            enabled: false\n          }\n        }\n      }\n    };\n  }\n\n  if (chart.options.curve === false) {\n    if (chartType === \"areaspline\") {\n      chartType = \"area\";\n    } else if (chartType === \"spline\") {\n      chartType = \"line\";\n    }\n  }\n\n  var options = jsOptions$1(chart, chart.options, chartOptions);\n\n  if (chart.xtype === \"number\") {\n    options.xAxis.type = options.xAxis.type || \"linear\";\n  } else {\n    options.xAxis.type = chart.xtype === \"string\" ? \"category\" : \"datetime\";\n  }\n\n  if (!options.chart.type) {\n    options.chart.type = chartType;\n  }\n\n  setFormatOptions(chart, options, chartType);\n  var series = chart.data;\n\n  for (var i = 0; i < series.length; i++) {\n    series[i].name = series[i].name || \"Value\";\n    var data = series[i].data;\n\n    if (chart.xtype === \"datetime\") {\n      for (var j = 0; j < data.length; j++) {\n        data[j][0] = data[j][0].getTime();\n      }\n    } else if (chart.xtype === \"number\") {\n      data.sort(sortByNumberSeries);\n    }\n\n    series[i].marker = {\n      symbol: \"circle\"\n    };\n\n    if (chart.options.points === false) {\n      series[i].marker.enabled = false;\n    }\n  }\n\n  this.drawChart(chart, series, options);\n};\n\ndefaultExport$1.prototype.renderScatterChart = function renderScatterChart(chart) {\n  var options = jsOptions$1(chart, chart.options, {});\n  options.chart.type = \"scatter\";\n  this.drawChart(chart, chart.data, options);\n};\n\ndefaultExport$1.prototype.renderPieChart = function renderPieChart(chart) {\n  var chartOptions = merge(defaultOptions$1, {});\n\n  if (chart.options.colors) {\n    chartOptions.colors = chart.options.colors;\n  }\n\n  if (chart.options.donut) {\n    chartOptions.plotOptions = {\n      pie: {\n        innerSize: \"50%\"\n      }\n    };\n  }\n\n  if (\"legend\" in chart.options) {\n    hideLegend$1(chartOptions, chart.options.legend);\n  }\n\n  if (chart.options.title) {\n    setTitle$1(chartOptions, chart.options.title);\n  }\n\n  var options = merge(chartOptions, chart.options.library || {});\n  setFormatOptions(chart, options, \"pie\");\n  var series = [{\n    type: \"pie\",\n    name: chart.options.label || \"Value\",\n    data: chart.data\n  }];\n  this.drawChart(chart, series, options);\n};\n\ndefaultExport$1.prototype.renderColumnChart = function renderColumnChart(chart, chartType) {\n  chartType = chartType || \"column\";\n  var series = chart.data;\n  var options = jsOptions$1(chart, chart.options);\n  var rows = [];\n  var categories = [];\n  options.chart.type = chartType;\n  setFormatOptions(chart, options, chartType);\n\n  for (var i = 0; i < series.length; i++) {\n    var s = series[i];\n\n    for (var j = 0; j < s.data.length; j++) {\n      var d = s.data[j];\n\n      if (!rows[d[0]]) {\n        rows[d[0]] = new Array(series.length);\n        categories.push(d[0]);\n      }\n\n      rows[d[0]][i] = d[1];\n    }\n  }\n\n  if (chart.xtype === \"number\") {\n    categories.sort(sortByNumber);\n  }\n\n  options.xAxis.categories = categories;\n  var newSeries = [];\n\n  for (var i$1 = 0; i$1 < series.length; i$1++) {\n    var d$1 = [];\n\n    for (var j$1 = 0; j$1 < categories.length; j$1++) {\n      d$1.push(rows[categories[j$1]][i$1] || 0);\n    }\n\n    var d2 = {\n      name: series[i$1].name || \"Value\",\n      data: d$1\n    };\n\n    if (series[i$1].stack) {\n      d2.stack = series[i$1].stack;\n    }\n\n    newSeries.push(d2);\n  }\n\n  this.drawChart(chart, newSeries, options);\n};\n\ndefaultExport$1.prototype.renderBarChart = function renderBarChart(chart) {\n  this.renderColumnChart(chart, \"bar\");\n};\n\ndefaultExport$1.prototype.renderAreaChart = function renderAreaChart(chart) {\n  this.renderLineChart(chart, \"areaspline\");\n};\n\ndefaultExport$1.prototype.destroy = function destroy(chart) {\n  if (chart.chart) {\n    chart.chart.destroy();\n  }\n};\n\ndefaultExport$1.prototype.drawChart = function drawChart(chart, data, options) {\n  this.destroy(chart);\n\n  if (chart.destroyed) {\n    return;\n  }\n\n  options.chart.renderTo = chart.element.id;\n  options.series = data;\n\n  if (chart.options.code) {\n    window.console.log(\"new Highcharts.Chart(\" + JSON.stringify(options) + \");\");\n  }\n\n  chart.chart = new this.library.Chart(options);\n};\n\nvar loaded = {};\nvar callbacks = []; // Set chart options\n\nvar defaultOptions = {\n  chartArea: {},\n  fontName: \"'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif\",\n  pointSize: 6,\n  legend: {\n    textStyle: {\n      fontSize: 12,\n      color: \"#444\"\n    },\n    alignment: \"center\",\n    position: \"right\"\n  },\n  curveType: \"function\",\n  hAxis: {\n    textStyle: {\n      color: \"#666\",\n      fontSize: 12\n    },\n    titleTextStyle: {},\n    gridlines: {\n      color: \"transparent\"\n    },\n    baselineColor: \"#ccc\",\n    viewWindow: {}\n  },\n  vAxis: {\n    textStyle: {\n      color: \"#666\",\n      fontSize: 12\n    },\n    titleTextStyle: {},\n    baselineColor: \"#ccc\",\n    viewWindow: {}\n  },\n  tooltip: {\n    textStyle: {\n      color: \"#666\",\n      fontSize: 12\n    }\n  }\n};\n\nfunction hideLegend(options, legend, hideLegend) {\n  if (legend !== undefined) {\n    var position;\n\n    if (!legend) {\n      position = \"none\";\n    } else if (legend === true) {\n      position = \"right\";\n    } else {\n      position = legend;\n    }\n\n    options.legend.position = position;\n  } else if (hideLegend) {\n    options.legend.position = \"none\";\n  }\n}\n\nfunction setTitle(options, title) {\n  options.title = title;\n  options.titleTextStyle = {\n    color: \"#333\",\n    fontSize: \"20px\"\n  };\n}\n\nfunction setMin(options, min) {\n  options.vAxis.viewWindow.min = min;\n}\n\nfunction setMax(options, max) {\n  options.vAxis.viewWindow.max = max;\n}\n\nfunction setBarMin(options, min) {\n  options.hAxis.viewWindow.min = min;\n}\n\nfunction setBarMax(options, max) {\n  options.hAxis.viewWindow.max = max;\n}\n\nfunction setStacked(options, stacked) {\n  options.isStacked = stacked || false;\n}\n\nfunction setXtitle(options, title) {\n  options.hAxis.title = title;\n  options.hAxis.titleTextStyle.italic = false;\n}\n\nfunction setYtitle(options, title) {\n  options.vAxis.title = title;\n  options.vAxis.titleTextStyle.italic = false;\n}\n\nvar jsOptions = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);\n\nfunction resize(callback) {\n  if (window.attachEvent) {\n    window.attachEvent(\"onresize\", callback);\n  } else if (window.addEventListener) {\n    window.addEventListener(\"resize\", callback, true);\n  }\n\n  callback();\n}\n\nvar defaultExport = function defaultExport(library) {\n  this.name = \"google\";\n  this.library = library;\n};\n\ndefaultExport.prototype.renderLineChart = function renderLineChart(chart) {\n  var this$1$1 = this;\n  this.waitForLoaded(chart, function () {\n    var chartOptions = {};\n\n    if (chart.options.curve === false) {\n      chartOptions.curveType = \"none\";\n    }\n\n    if (chart.options.points === false) {\n      chartOptions.pointSize = 0;\n    }\n\n    var options = jsOptions(chart, chart.options, chartOptions);\n    var data = this$1$1.createDataTable(chart.data, chart.xtype);\n    this$1$1.drawChart(chart, \"LineChart\", data, options);\n  });\n};\n\ndefaultExport.prototype.renderPieChart = function renderPieChart(chart) {\n  var this$1$1 = this;\n  this.waitForLoaded(chart, function () {\n    var chartOptions = {\n      chartArea: {\n        top: \"10%\",\n        height: \"80%\"\n      },\n      legend: {}\n    };\n\n    if (chart.options.colors) {\n      chartOptions.colors = chart.options.colors;\n    }\n\n    if (chart.options.donut) {\n      chartOptions.pieHole = 0.5;\n    }\n\n    if (\"legend\" in chart.options) {\n      hideLegend(chartOptions, chart.options.legend);\n    }\n\n    if (chart.options.title) {\n      setTitle(chartOptions, chart.options.title);\n    }\n\n    var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n    var data = new this$1$1.library.visualization.DataTable();\n    data.addColumn(\"string\", \"\");\n    data.addColumn(\"number\", \"Value\");\n    data.addRows(chart.data);\n    this$1$1.drawChart(chart, \"PieChart\", data, options);\n  });\n};\n\ndefaultExport.prototype.renderColumnChart = function renderColumnChart(chart) {\n  var this$1$1 = this;\n  this.waitForLoaded(chart, function () {\n    var options = jsOptions(chart, chart.options);\n    var data = this$1$1.createDataTable(chart.data, chart.xtype);\n    this$1$1.drawChart(chart, \"ColumnChart\", data, options);\n  });\n};\n\ndefaultExport.prototype.renderBarChart = function renderBarChart(chart) {\n  var this$1$1 = this;\n  this.waitForLoaded(chart, function () {\n    var chartOptions = {\n      hAxis: {\n        gridlines: {\n          color: \"#ccc\"\n        }\n      }\n    };\n    var options = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options, chartOptions);\n    var data = this$1$1.createDataTable(chart.data, chart.xtype);\n    this$1$1.drawChart(chart, \"BarChart\", data, options);\n  });\n};\n\ndefaultExport.prototype.renderAreaChart = function renderAreaChart(chart) {\n  var this$1$1 = this;\n  this.waitForLoaded(chart, function () {\n    var chartOptions = {\n      isStacked: true,\n      pointSize: 0,\n      areaOpacity: 0.5\n    };\n    var options = jsOptions(chart, chart.options, chartOptions);\n    var data = this$1$1.createDataTable(chart.data, chart.xtype);\n    this$1$1.drawChart(chart, \"AreaChart\", data, options);\n  });\n};\n\ndefaultExport.prototype.renderGeoChart = function renderGeoChart(chart) {\n  var this$1$1 = this;\n  this.waitForLoaded(chart, \"geochart\", function () {\n    var chartOptions = {\n      legend: \"none\",\n      colorAxis: {\n        colors: chart.options.colors || [\"#f6c7b6\", \"#ce502d\"]\n      }\n    };\n    var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n    var data = new this$1$1.library.visualization.DataTable();\n    data.addColumn(\"string\", \"\");\n    data.addColumn(\"number\", chart.options.label || \"Value\");\n    data.addRows(chart.data);\n    this$1$1.drawChart(chart, \"GeoChart\", data, options);\n  });\n};\n\ndefaultExport.prototype.renderScatterChart = function renderScatterChart(chart) {\n  var this$1$1 = this;\n  this.waitForLoaded(chart, function () {\n    var chartOptions = {};\n    var options = jsOptions(chart, chart.options, chartOptions);\n    var series = chart.data;\n    var rows2 = [];\n\n    for (var i = 0; i < series.length; i++) {\n      series[i].name = series[i].name || \"Value\";\n      var d = series[i].data;\n\n      for (var j = 0; j < d.length; j++) {\n        var row = new Array(series.length + 1);\n        row[0] = d[j][0];\n        row[i + 1] = d[j][1];\n        rows2.push(row);\n      }\n    }\n\n    var data = new this$1$1.library.visualization.DataTable();\n    data.addColumn(\"number\", \"\");\n\n    for (var i$1 = 0; i$1 < series.length; i$1++) {\n      data.addColumn(\"number\", series[i$1].name);\n    }\n\n    data.addRows(rows2);\n    this$1$1.drawChart(chart, \"ScatterChart\", data, options);\n  });\n};\n\ndefaultExport.prototype.renderTimeline = function renderTimeline(chart) {\n  var this$1$1 = this;\n  this.waitForLoaded(chart, \"timeline\", function () {\n    var chartOptions = {\n      legend: \"none\"\n    };\n\n    if (chart.options.colors) {\n      chartOptions.colors = chart.options.colors;\n    }\n\n    var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n    var data = new this$1$1.library.visualization.DataTable();\n    data.addColumn({\n      type: \"string\",\n      id: \"Name\"\n    });\n    data.addColumn({\n      type: \"date\",\n      id: \"Start\"\n    });\n    data.addColumn({\n      type: \"date\",\n      id: \"End\"\n    });\n    data.addRows(chart.data);\n    chart.element.style.lineHeight = \"normal\";\n    this$1$1.drawChart(chart, \"Timeline\", data, options);\n  });\n}; // TODO remove resize events\n\n\ndefaultExport.prototype.destroy = function destroy(chart) {\n  if (chart.chart) {\n    chart.chart.clearChart();\n  }\n};\n\ndefaultExport.prototype.drawChart = function drawChart(chart, type, data, options) {\n  this.destroy(chart);\n\n  if (chart.destroyed) {\n    return;\n  }\n\n  if (chart.options.code) {\n    window.console.log(\"var data = new google.visualization.DataTable(\" + data.toJSON() + \");\\nvar chart = new google.visualization.\" + type + \"(element);\\nchart.draw(data, \" + JSON.stringify(options) + \");\");\n  }\n\n  chart.chart = new this.library.visualization[type](chart.element);\n  resize(function () {\n    chart.chart.draw(data, options);\n  });\n};\n\ndefaultExport.prototype.waitForLoaded = function waitForLoaded(chart, pack, callback) {\n  var this$1$1 = this;\n\n  if (!callback) {\n    callback = pack;\n    pack = \"corechart\";\n  }\n\n  callbacks.push({\n    pack: pack,\n    callback: callback\n  });\n\n  if (loaded[pack]) {\n    this.runCallbacks();\n  } else {\n    loaded[pack] = true; // https://groups.google.com/forum/#!topic/google-visualization-api/fMKJcyA2yyI\n\n    var loadOptions = {\n      packages: [pack],\n      callback: function callback() {\n        this$1$1.runCallbacks();\n      }\n    };\n\n    var config = chart.__config();\n\n    if (config.language) {\n      loadOptions.language = config.language;\n    }\n\n    if (pack === \"geochart\" && config.mapsApiKey) {\n      loadOptions.mapsApiKey = config.mapsApiKey;\n    }\n\n    this.library.charts.load(\"current\", loadOptions);\n  }\n};\n\ndefaultExport.prototype.runCallbacks = function runCallbacks() {\n  for (var i = 0; i < callbacks.length; i++) {\n    var cb = callbacks[i];\n    var call = this.library.visualization && (cb.pack === \"corechart\" && this.library.visualization.LineChart || cb.pack === \"timeline\" && this.library.visualization.Timeline || cb.pack === \"geochart\" && this.library.visualization.GeoChart);\n\n    if (call) {\n      cb.callback();\n      callbacks.splice(i, 1);\n      i--;\n    }\n  }\n}; // cant use object as key\n\n\ndefaultExport.prototype.createDataTable = function createDataTable(series, columnType) {\n  var rows = [];\n  var sortedLabels = [];\n\n  for (var i = 0; i < series.length; i++) {\n    var s = series[i];\n    series[i].name = series[i].name || \"Value\";\n\n    for (var j = 0; j < s.data.length; j++) {\n      var d = s.data[j];\n      var key = columnType === \"datetime\" ? d[0].getTime() : d[0];\n\n      if (!rows[key]) {\n        rows[key] = new Array(series.length);\n        sortedLabels.push(key);\n      }\n\n      rows[key][i] = d[1];\n    }\n  }\n\n  var rows2 = [];\n  var values = [];\n\n  for (var j$1 = 0; j$1 < sortedLabels.length; j$1++) {\n    var i$1 = sortedLabels[j$1];\n    var value = void 0;\n\n    if (columnType === \"datetime\") {\n      value = new Date(i$1);\n      values.push(value);\n    } else {\n      value = i$1;\n    }\n\n    rows2.push([value].concat(rows[i$1]));\n  }\n\n  var day = true;\n\n  if (columnType === \"datetime\") {\n    rows2.sort(sortByTime);\n    var timeUnit = calculateTimeUnit(values, true);\n    day = isDay(timeUnit);\n  } else if (columnType === \"number\") {\n    rows2.sort(sortByNumberSeries);\n\n    for (var i$2 = 0; i$2 < rows2.length; i$2++) {\n      rows2[i$2][0] = toStr(rows2[i$2][0]);\n    }\n\n    columnType = \"string\";\n  } // create datatable\n\n\n  var data = new this.library.visualization.DataTable();\n  columnType = columnType === \"datetime\" && day ? \"date\" : columnType;\n  data.addColumn(columnType, \"\");\n\n  for (var i$3 = 0; i$3 < series.length; i$3++) {\n    data.addColumn(\"number\", series[i$3].name);\n  }\n\n  data.addRows(rows2);\n  return data;\n};\n\nvar adapters = [];\n\nfunction getAdapterType(library) {\n  if (library) {\n    if (library.product === \"Highcharts\") {\n      return defaultExport$1;\n    } else if (library.charts) {\n      return defaultExport;\n    } else if (isFunction(library)) {\n      return defaultExport$2;\n    }\n  }\n\n  throw new Error(\"Unknown adapter\");\n}\n\nfunction addAdapter(library) {\n  var adapterType = getAdapterType(library);\n\n  for (var i = 0; i < adapters.length; i++) {\n    if (adapters[i].library === library) {\n      return;\n    }\n  }\n\n  adapters.push(new adapterType(library));\n}\n\nfunction loadAdapters() {\n  if (\"Chart\" in window) {\n    addAdapter(window.Chart);\n  }\n\n  if (\"Highcharts\" in window) {\n    addAdapter(window.Highcharts);\n  }\n\n  if (window.google && window.google.charts) {\n    addAdapter(window.google);\n  }\n} // TODO remove chartType if cross-browser way\n// to get the name of the chart class\n\n\nfunction callAdapter(chartType, chart) {\n  var fnName = \"render\" + chartType;\n  var adapterName = chart.options.adapter;\n  loadAdapters();\n\n  for (var i = 0; i < adapters.length; i++) {\n    var adapter = adapters[i];\n\n    if ((!adapterName || adapterName === adapter.name) && isFunction(adapter[fnName])) {\n      chart.adapter = adapter.name;\n      chart.__adapterObject = adapter;\n      return adapter[fnName](chart);\n    }\n  }\n\n  if (adapters.length > 0) {\n    throw new Error(\"No charting library found for \" + chartType);\n  } else {\n    throw new Error(\"No charting libraries found - be sure to include one before your charts\");\n  }\n}\n\nvar Chartkick = {\n  charts: {},\n  configure: function configure(options) {\n    for (var key in options) {\n      if (Object.prototype.hasOwnProperty.call(options, key)) {\n        Chartkick.config[key] = options[key];\n      }\n    }\n  },\n  setDefaultOptions: function setDefaultOptions(opts) {\n    Chartkick.options = opts;\n  },\n  eachChart: function eachChart(callback) {\n    for (var chartId in Chartkick.charts) {\n      if (Object.prototype.hasOwnProperty.call(Chartkick.charts, chartId)) {\n        callback(Chartkick.charts[chartId]);\n      }\n    }\n  },\n  destroyAll: function destroyAll() {\n    for (var chartId in Chartkick.charts) {\n      if (Object.prototype.hasOwnProperty.call(Chartkick.charts, chartId)) {\n        Chartkick.charts[chartId].destroy();\n        delete Chartkick.charts[chartId];\n      }\n    }\n  },\n  config: {},\n  options: {},\n  adapters: adapters,\n  addAdapter: addAdapter,\n  use: function use(adapter) {\n    addAdapter(adapter);\n    return Chartkick;\n  }\n};\n\nfunction formatSeriesBubble(data) {\n  var r = [];\n\n  for (var i = 0; i < data.length; i++) {\n    r.push([toFloat(data[i][0]), toFloat(data[i][1]), toFloat(data[i][2])]);\n  }\n\n  return r;\n} // casts data to proper type\n// sorting is left to adapters\n\n\nfunction formatSeriesData(data, keyType) {\n  if (keyType === \"bubble\") {\n    return formatSeriesBubble(data);\n  }\n\n  var keyFunc;\n\n  if (keyType === \"number\") {\n    keyFunc = toFloat;\n  } else if (keyType === \"datetime\") {\n    keyFunc = toDate;\n  } else {\n    keyFunc = toStr;\n  }\n\n  var r = [];\n\n  for (var i = 0; i < data.length; i++) {\n    r.push([keyFunc(data[i][0]), toFloat(data[i][1])]);\n  }\n\n  return r;\n}\n\nfunction detectXType(series, noDatetime, options) {\n  if (dataEmpty(series)) {\n    if ((options.xmin || options.xmax) && (!options.xmin || isDate(options.xmin)) && (!options.xmax || isDate(options.xmax))) {\n      return \"datetime\";\n    } else {\n      return \"number\";\n    }\n  } else if (detectXTypeWithFunction(series, isNumber)) {\n    return \"number\";\n  } else if (!noDatetime && detectXTypeWithFunction(series, isDate)) {\n    return \"datetime\";\n  } else {\n    return \"string\";\n  }\n}\n\nfunction detectXTypeWithFunction(series, func) {\n  for (var i = 0; i < series.length; i++) {\n    var data = toArr(series[i].data);\n\n    for (var j = 0; j < data.length; j++) {\n      if (!func(data[j][0])) {\n        return false;\n      }\n    }\n  }\n\n  return true;\n} // creates a shallow copy of each element of the array\n// elements are expected to be objects\n\n\nfunction copySeries(series) {\n  var newSeries = [];\n\n  for (var i = 0; i < series.length; i++) {\n    var copy = {};\n\n    for (var j in series[i]) {\n      if (Object.prototype.hasOwnProperty.call(series[i], j)) {\n        copy[j] = series[i][j];\n      }\n    }\n\n    newSeries.push(copy);\n  }\n\n  return newSeries;\n}\n\nfunction processSeries(chart, keyType, noDatetime) {\n  var opts = chart.options;\n  var series = chart.rawData; // see if one series or multiple\n\n  chart.singleSeriesFormat = !isArray(series) || !isPlainObject(series[0]);\n\n  if (chart.singleSeriesFormat) {\n    series = [{\n      name: opts.label,\n      data: series\n    }];\n  } // convert to array\n  // must come before dataEmpty check\n\n\n  series = copySeries(series);\n\n  for (var i = 0; i < series.length; i++) {\n    series[i].data = toArr(series[i].data);\n  }\n\n  chart.xtype = keyType || (opts.discrete ? \"string\" : detectXType(series, noDatetime, opts)); // right format\n\n  for (var i$1 = 0; i$1 < series.length; i$1++) {\n    series[i$1].data = formatSeriesData(series[i$1].data, chart.xtype);\n  }\n\n  return series;\n}\n\nfunction processSimple(chart) {\n  var perfectData = toArr(chart.rawData);\n\n  for (var i = 0; i < perfectData.length; i++) {\n    perfectData[i] = [toStr(perfectData[i][0]), toFloat(perfectData[i][1])];\n  }\n\n  return perfectData;\n}\n\nfunction dataEmpty(data, chartType) {\n  if (chartType === \"PieChart\" || chartType === \"GeoChart\" || chartType === \"Timeline\") {\n    return data.length === 0;\n  } else {\n    for (var i = 0; i < data.length; i++) {\n      if (data[i].data.length > 0) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n}\n\nfunction addDownloadButton(chart) {\n  var download = chart.options.download;\n\n  if (download === true) {\n    download = {};\n  } else if (typeof download === \"string\") {\n    download = {\n      filename: download\n    };\n  }\n\n  var link = document.createElement(\"a\");\n  link.download = download.filename || \"chart.png\";\n  link.style.position = \"absolute\";\n  link.style.top = \"20px\";\n  link.style.right = \"20px\";\n  link.style.zIndex = 1000;\n  link.style.lineHeight = \"20px\";\n  link.target = \"_blank\"; // for safari\n\n  var image = document.createElement(\"img\"); // icon from Font Awesome, modified to set fill color\n\n  var svg = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path fill=\\\"#CCCCCC\\\" d=\\\"M344 240h-56L287.1 152c0-13.25-10.75-24-24-24h-16C234.7 128 223.1 138.8 223.1 152L224 240h-56c-9.531 0-18.16 5.656-22 14.38C142.2 263.1 143.9 273.3 150.4 280.3l88.75 96C243.7 381.2 250.1 384 256.8 384c7.781-.3125 13.25-2.875 17.75-7.844l87.25-96c6.406-7.031 8.031-17.19 4.188-25.88S353.5 240 344 240zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464z\\\"/></svg>\";\n  image.src = \"data:image/svg+xml;utf8,\" + encodeURIComponent(svg);\n  image.alt = \"Download\";\n  image.style.width = \"20px\";\n  image.style.height = \"20px\";\n  image.style.border = \"none\";\n  link.appendChild(image);\n  var element = chart.element;\n  element.style.position = \"relative\";\n  chart.__downloadAttached = true; // mouseenter\n\n  chart.__enterEvent = element.addEventListener(\"mouseover\", function (e) {\n    var related = e.relatedTarget; // check download option again to ensure it wasn't changed\n\n    if ((!related || related !== this && !this.contains(related)) && chart.options.download) {\n      link.href = chart.toImage(download);\n      element.appendChild(link);\n    }\n  }); // mouseleave\n\n  chart.__leaveEvent = element.addEventListener(\"mouseout\", function (e) {\n    var related = e.relatedTarget;\n\n    if (!related || related !== this && !this.contains(related)) {\n      if (link.parentNode) {\n        link.parentNode.removeChild(link);\n      }\n    }\n  });\n}\n\nvar pendingRequests = [];\nvar runningRequests = 0;\nvar maxRequests = 4;\n\nfunction pushRequest(url, success, error) {\n  pendingRequests.push([url, success, error]);\n  runNext();\n}\n\nfunction runNext() {\n  if (runningRequests < maxRequests) {\n    var request = pendingRequests.shift();\n\n    if (request) {\n      runningRequests++;\n      getJSON(request[0], request[1], request[2]);\n      runNext();\n    }\n  }\n}\n\nfunction requestComplete() {\n  runningRequests--;\n  runNext();\n}\n\nfunction getJSON(url, success, error) {\n  var xhr = new XMLHttpRequest();\n  xhr.open(\"GET\", url, true);\n  xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n\n  xhr.onload = function () {\n    requestComplete();\n\n    if (xhr.status === 200) {\n      success(JSON.parse(xhr.responseText));\n    } else {\n      error(xhr.statusText);\n    }\n  };\n\n  xhr.send();\n} // helpers\n\n\nfunction setText(element, text) {\n  element.textContent = text;\n} // TODO remove prefix for all messages\n\n\nfunction chartError(element, message, noPrefix) {\n  if (!noPrefix) {\n    message = \"Error Loading Chart: \" + message;\n  }\n\n  setText(element, message);\n  element.style.color = \"#ff0000\";\n}\n\nfunction errorCatcher(chart) {\n  try {\n    chart.__render();\n  } catch (err) {\n    chartError(chart.element, err.message);\n    throw err;\n  }\n}\n\nfunction fetchDataSource(chart, dataSource, showLoading) {\n  // only show loading message for urls and callbacks\n  if (showLoading && chart.options.loading && (typeof dataSource === \"string\" || typeof dataSource === \"function\")) {\n    setText(chart.element, chart.options.loading);\n  }\n\n  if (typeof dataSource === \"string\") {\n    pushRequest(dataSource, function (data) {\n      chart.rawData = data;\n      errorCatcher(chart);\n    }, function (message) {\n      chartError(chart.element, message);\n    });\n  } else if (typeof dataSource === \"function\") {\n    try {\n      dataSource(function (data) {\n        chart.rawData = data;\n        errorCatcher(chart);\n      }, function (message) {\n        chartError(chart.element, message, true);\n      });\n    } catch (err) {\n      chartError(chart.element, err, true);\n    }\n  } else {\n    chart.rawData = dataSource;\n    errorCatcher(chart);\n  }\n}\n\nfunction renderChart(chartType, chart) {\n  if (dataEmpty(chart.data, chartType)) {\n    var message = chart.options.empty || chart.options.messages && chart.options.messages.empty || \"No data\";\n    setText(chart.element, message);\n  } else {\n    callAdapter(chartType, chart); // TODO add downloadSupported method to adapter\n\n    if (chart.options.download && !chart.__downloadAttached && chart.adapter === \"chartjs\") {\n      addDownloadButton(chart);\n    }\n  }\n}\n\nfunction getElement(element) {\n  if (typeof element === \"string\") {\n    var elementId = element;\n    element = document.getElementById(element);\n\n    if (!element) {\n      throw new Error(\"No element with id \" + elementId);\n    }\n  }\n\n  return element;\n} // define classes\n\n\nvar Chart = function Chart(element, dataSource, options) {\n  this.element = getElement(element);\n  this.options = merge(Chartkick.options, options || {});\n  this.dataSource = dataSource; // TODO handle charts without an id for eachChart and destroyAll\n\n  if (this.element.id) {\n    Chartkick.charts[this.element.id] = this;\n  }\n\n  fetchDataSource(this, dataSource, true);\n\n  if (this.options.refresh) {\n    this.startRefresh();\n  }\n};\n\nChart.prototype.getElement = function getElement() {\n  return this.element;\n};\n\nChart.prototype.getDataSource = function getDataSource() {\n  return this.dataSource;\n};\n\nChart.prototype.getData = function getData() {\n  return this.data;\n};\n\nChart.prototype.getOptions = function getOptions() {\n  return this.options;\n};\n\nChart.prototype.getChartObject = function getChartObject() {\n  return this.chart;\n};\n\nChart.prototype.getAdapter = function getAdapter() {\n  return this.adapter;\n};\n\nChart.prototype.updateData = function updateData(dataSource, options) {\n  this.dataSource = dataSource;\n\n  if (options) {\n    this.__updateOptions(options);\n  }\n\n  fetchDataSource(this, dataSource, true);\n};\n\nChart.prototype.setOptions = function setOptions(options) {\n  this.__updateOptions(options);\n\n  this.redraw();\n};\n\nChart.prototype.redraw = function redraw() {\n  fetchDataSource(this, this.rawData);\n};\n\nChart.prototype.refreshData = function refreshData() {\n  if (typeof this.dataSource === \"string\") {\n    // prevent browser from caching\n    var sep = this.dataSource.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n    var url = this.dataSource + sep + \"_=\" + new Date().getTime();\n    fetchDataSource(this, url);\n  } else if (typeof this.dataSource === \"function\") {\n    fetchDataSource(this, this.dataSource);\n  }\n};\n\nChart.prototype.startRefresh = function startRefresh() {\n  var this$1$1 = this;\n  var refresh = this.options.refresh;\n\n  if (refresh && typeof this.dataSource !== \"string\" && typeof this.dataSource !== \"function\") {\n    throw new Error(\"Data source must be a URL or callback for refresh\");\n  }\n\n  if (!this.intervalId) {\n    if (refresh) {\n      this.intervalId = setInterval(function () {\n        this$1$1.refreshData();\n      }, refresh * 1000);\n    } else {\n      throw new Error(\"No refresh interval\");\n    }\n  }\n};\n\nChart.prototype.stopRefresh = function stopRefresh() {\n  if (this.intervalId) {\n    clearInterval(this.intervalId);\n    this.intervalId = null;\n  }\n};\n\nChart.prototype.toImage = function toImage(download) {\n  // TODO move logic to adapter\n  if (this.adapter === \"chartjs\") {\n    if (download && download.background && download.background !== \"transparent\") {\n      // https://stackoverflow.com/questions/30464750/chartjs-line-chart-set-background-color\n      var canvas = this.chart.canvas;\n      var ctx = this.chart.ctx;\n      var tmpCanvas = document.createElement(\"canvas\");\n      var tmpCtx = tmpCanvas.getContext(\"2d\");\n      tmpCanvas.width = ctx.canvas.width;\n      tmpCanvas.height = ctx.canvas.height;\n      tmpCtx.fillStyle = download.background;\n      tmpCtx.fillRect(0, 0, tmpCanvas.width, tmpCanvas.height);\n      tmpCtx.drawImage(canvas, 0, 0);\n      return tmpCanvas.toDataURL(\"image/png\");\n    } else {\n      return this.chart.toBase64Image();\n    }\n  } else {\n    throw new Error(\"Feature only available for Chart.js\");\n  }\n};\n\nChart.prototype.destroy = function destroy() {\n  this.destroyed = true;\n  this.stopRefresh();\n\n  if (this.__adapterObject) {\n    this.__adapterObject.destroy(this);\n  }\n\n  if (this.__enterEvent) {\n    this.element.removeEventListener(\"mouseover\", this.__enterEvent);\n  }\n\n  if (this.__leaveEvent) {\n    this.element.removeEventListener(\"mouseout\", this.__leaveEvent);\n  }\n};\n\nChart.prototype.__updateOptions = function __updateOptions(options) {\n  var updateRefresh = options.refresh && options.refresh !== this.options.refresh;\n  this.options = merge(Chartkick.options, options);\n\n  if (updateRefresh) {\n    this.stopRefresh();\n    this.startRefresh();\n  }\n};\n\nChart.prototype.__render = function __render() {\n  this.data = this.__processData();\n  renderChart(this.__chartName(), this);\n};\n\nChart.prototype.__config = function __config() {\n  return Chartkick.config;\n};\n\nvar LineChart = function (Chart) {\n  function LineChart() {\n    Chart.apply(this, arguments);\n  }\n\n  if (Chart) LineChart.__proto__ = Chart;\n  LineChart.prototype = Object.create(Chart && Chart.prototype);\n  LineChart.prototype.constructor = LineChart;\n\n  LineChart.prototype.__processData = function __processData() {\n    return processSeries(this);\n  };\n\n  LineChart.prototype.__chartName = function __chartName() {\n    return \"LineChart\";\n  };\n\n  return LineChart;\n}(Chart);\n\nvar PieChart = function (Chart) {\n  function PieChart() {\n    Chart.apply(this, arguments);\n  }\n\n  if (Chart) PieChart.__proto__ = Chart;\n  PieChart.prototype = Object.create(Chart && Chart.prototype);\n  PieChart.prototype.constructor = PieChart;\n\n  PieChart.prototype.__processData = function __processData() {\n    return processSimple(this);\n  };\n\n  PieChart.prototype.__chartName = function __chartName() {\n    return \"PieChart\";\n  };\n\n  return PieChart;\n}(Chart);\n\nvar ColumnChart = function (Chart) {\n  function ColumnChart() {\n    Chart.apply(this, arguments);\n  }\n\n  if (Chart) ColumnChart.__proto__ = Chart;\n  ColumnChart.prototype = Object.create(Chart && Chart.prototype);\n  ColumnChart.prototype.constructor = ColumnChart;\n\n  ColumnChart.prototype.__processData = function __processData() {\n    return processSeries(this, null, true);\n  };\n\n  ColumnChart.prototype.__chartName = function __chartName() {\n    return \"ColumnChart\";\n  };\n\n  return ColumnChart;\n}(Chart);\n\nvar BarChart = function (Chart) {\n  function BarChart() {\n    Chart.apply(this, arguments);\n  }\n\n  if (Chart) BarChart.__proto__ = Chart;\n  BarChart.prototype = Object.create(Chart && Chart.prototype);\n  BarChart.prototype.constructor = BarChart;\n\n  BarChart.prototype.__processData = function __processData() {\n    return processSeries(this, null, true);\n  };\n\n  BarChart.prototype.__chartName = function __chartName() {\n    return \"BarChart\";\n  };\n\n  return BarChart;\n}(Chart);\n\nvar AreaChart = function (Chart) {\n  function AreaChart() {\n    Chart.apply(this, arguments);\n  }\n\n  if (Chart) AreaChart.__proto__ = Chart;\n  AreaChart.prototype = Object.create(Chart && Chart.prototype);\n  AreaChart.prototype.constructor = AreaChart;\n\n  AreaChart.prototype.__processData = function __processData() {\n    return processSeries(this);\n  };\n\n  AreaChart.prototype.__chartName = function __chartName() {\n    return \"AreaChart\";\n  };\n\n  return AreaChart;\n}(Chart);\n\nvar GeoChart = function (Chart) {\n  function GeoChart() {\n    Chart.apply(this, arguments);\n  }\n\n  if (Chart) GeoChart.__proto__ = Chart;\n  GeoChart.prototype = Object.create(Chart && Chart.prototype);\n  GeoChart.prototype.constructor = GeoChart;\n\n  GeoChart.prototype.__processData = function __processData() {\n    return processSimple(this);\n  };\n\n  GeoChart.prototype.__chartName = function __chartName() {\n    return \"GeoChart\";\n  };\n\n  return GeoChart;\n}(Chart);\n\nvar ScatterChart = function (Chart) {\n  function ScatterChart() {\n    Chart.apply(this, arguments);\n  }\n\n  if (Chart) ScatterChart.__proto__ = Chart;\n  ScatterChart.prototype = Object.create(Chart && Chart.prototype);\n  ScatterChart.prototype.constructor = ScatterChart;\n\n  ScatterChart.prototype.__processData = function __processData() {\n    return processSeries(this, \"number\");\n  };\n\n  ScatterChart.prototype.__chartName = function __chartName() {\n    return \"ScatterChart\";\n  };\n\n  return ScatterChart;\n}(Chart);\n\nvar BubbleChart = function (Chart) {\n  function BubbleChart() {\n    Chart.apply(this, arguments);\n  }\n\n  if (Chart) BubbleChart.__proto__ = Chart;\n  BubbleChart.prototype = Object.create(Chart && Chart.prototype);\n  BubbleChart.prototype.constructor = BubbleChart;\n\n  BubbleChart.prototype.__processData = function __processData() {\n    return processSeries(this, \"bubble\");\n  };\n\n  BubbleChart.prototype.__chartName = function __chartName() {\n    return \"BubbleChart\";\n  };\n\n  return BubbleChart;\n}(Chart);\n\nvar Timeline = function (Chart) {\n  function Timeline() {\n    Chart.apply(this, arguments);\n  }\n\n  if (Chart) Timeline.__proto__ = Chart;\n  Timeline.prototype = Object.create(Chart && Chart.prototype);\n  Timeline.prototype.constructor = Timeline;\n\n  Timeline.prototype.__processData = function __processData() {\n    var data = this.rawData;\n\n    for (var i = 0; i < data.length; i++) {\n      data[i][1] = toDate(data[i][1]);\n      data[i][2] = toDate(data[i][2]);\n    }\n\n    return data;\n  };\n\n  Timeline.prototype.__chartName = function __chartName() {\n    return \"Timeline\";\n  };\n\n  return Timeline;\n}(Chart);\n\nChartkick.LineChart = LineChart;\nChartkick.PieChart = PieChart;\nChartkick.ColumnChart = ColumnChart;\nChartkick.BarChart = BarChart;\nChartkick.AreaChart = AreaChart;\nChartkick.GeoChart = GeoChart;\nChartkick.ScatterChart = ScatterChart;\nChartkick.BubbleChart = BubbleChart;\nChartkick.Timeline = Timeline; // not ideal, but allows for simpler integration\n\nif (typeof window !== \"undefined\" && !window.Chartkick) {\n  window.Chartkick = Chartkick; // clean up previous charts before Turbolinks loads new page\n\n  document.addEventListener(\"turbolinks:before-render\", function () {\n    if (Chartkick.config.autoDestroy !== false) {\n      Chartkick.destroyAll();\n    }\n  }); // clean up previous charts before Turbo loads new page\n\n  document.addEventListener(\"turbo:before-render\", function () {\n    if (Chartkick.config.autoDestroy !== false) {\n      Chartkick.destroyAll();\n    }\n  }); // use setTimeout so charting library can come later in same JS file\n\n  setTimeout(function () {\n    window.dispatchEvent(new Event(\"chartkick:load\"));\n  }, 0);\n} // backwards compatibility for esm require\n\n\nChartkick.default = Chartkick;\nexport { Chartkick as default };","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { Chart, registerables } from '../dist/chart.js';\nChart.register.apply(Chart, _toConsumableArray(registerables));\nexport * from '../dist/chart.js';\nexport default Chart;","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n *   return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport var daysInWeek = 7;\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\n\nexport var daysInYear = 365.2425;\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\n\nexport var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\n\nexport var minTime = -maxTime;\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\n\nexport var millisecondsInWeek = 604800000;\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\n\nexport var millisecondsInDay = 86400000;\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\n\nexport var millisecondsInMinute = 60000;\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\n\nexport var millisecondsInHour = 3600000;\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\n\nexport var millisecondsInSecond = 1000;\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\n\nexport var minutesInYear = 525600;\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\n\nexport var minutesInMonth = 43200;\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\n\nexport var minutesInDay = 1440;\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\n\nexport var minutesInHour = 60;\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\n\nexport var monthsInQuarter = 3;\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\n\nexport var monthsInYear = 12;\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\n\nexport var quartersInYear = 4;\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\n\nexport var secondsInHour = 3600;\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\n\nexport var secondsInMinute = 60;\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\n\nexport var secondsInDay = secondsInHour * 24;\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\n\nexport var secondsInWeek = secondsInDay * 7;\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\n\nexport var secondsInYear = secondsInDay * daysInYear;\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\n\nexport var secondsInMonth = secondsInYear / 12;\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\n\nexport var secondsInQuarter = secondsInMonth * 3;\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\n\nexport var constructFromSymbol = Symbol.for(\"constructDateFrom\");","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport { constructFromSymbol } from \"./constants.js\";\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n *   return constructFrom(\n *     date, // Use constructor from the given date\n *     date.getTime() // Use the date value to create a new date\n *   );\n * }\n */\n\nexport function constructFrom(date, value) {\n  if (typeof date === \"function\") return date(value);\n  if (date && _typeof(date) === \"object\" && constructFromSymbol in date) return date[constructFromSymbol](value);\n  if (date instanceof Date) return new date.constructor(value);\n  return new Date(value);\n} // Fallback for modularized imports:\n\nexport default constructFrom;","import { constructFrom } from \"./constructFrom.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\n\nexport function toDate(argument, context) {\n  // [TODO] Get rid of `toDate` or `constructFrom`?\n  return constructFrom(context || argument, argument);\n} // Fallback for modularized imports:\n\nexport default toDate;","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: \"less than a second\",\n    other: \"less than {{count}} seconds\"\n  },\n  xSeconds: {\n    one: \"1 second\",\n    other: \"{{count}} seconds\"\n  },\n  halfAMinute: \"half a minute\",\n  lessThanXMinutes: {\n    one: \"less than a minute\",\n    other: \"less than {{count}} minutes\"\n  },\n  xMinutes: {\n    one: \"1 minute\",\n    other: \"{{count}} minutes\"\n  },\n  aboutXHours: {\n    one: \"about 1 hour\",\n    other: \"about {{count}} hours\"\n  },\n  xHours: {\n    one: \"1 hour\",\n    other: \"{{count}} hours\"\n  },\n  xDays: {\n    one: \"1 day\",\n    other: \"{{count}} days\"\n  },\n  aboutXWeeks: {\n    one: \"about 1 week\",\n    other: \"about {{count}} weeks\"\n  },\n  xWeeks: {\n    one: \"1 week\",\n    other: \"{{count}} weeks\"\n  },\n  aboutXMonths: {\n    one: \"about 1 month\",\n    other: \"about {{count}} months\"\n  },\n  xMonths: {\n    one: \"1 month\",\n    other: \"{{count}} months\"\n  },\n  aboutXYears: {\n    one: \"about 1 year\",\n    other: \"about {{count}} years\"\n  },\n  xYears: {\n    one: \"1 year\",\n    other: \"{{count}} years\"\n  },\n  overXYears: {\n    one: \"over 1 year\",\n    other: \"over {{count}} years\"\n  },\n  almostXYears: {\n    one: \"almost 1 year\",\n    other: \"almost {{count}} years\"\n  }\n};\nexport var formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n\n  if (typeof tokenValue === \"string\") {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace(\"{{count}}\", count.toString());\n  }\n\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return \"in \" + result;\n    } else {\n      return result + \" ago\";\n    }\n  }\n\n  return result;\n};","export function buildFormatLongFn(args) {\n  return function () {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    // TODO: Remove String()\n    var width = options.width ? String(options.width) : args.defaultWidth;\n    var format = args.formats[width] || args.formats[args.defaultWidth];\n    return format;\n  };\n}","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\nvar dateFormats = {\n  full: \"EEEE, MMMM do, y\",\n  long: \"MMMM do, y\",\n  medium: \"MMM d, y\",\n  short: \"MM/dd/yyyy\"\n};\nvar timeFormats = {\n  full: \"h:mm:ss a zzzz\",\n  long: \"h:mm:ss a z\",\n  medium: \"h:mm:ss a\",\n  short: \"h:mm a\"\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: \"{{date}}, {{time}}\",\n  short: \"{{date}}, {{time}}\"\n};\nexport var formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: \"full\"\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: \"full\"\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: \"full\"\n  })\n};","var formatRelativeLocale = {\n  lastWeek: \"'last' eeee 'at' p\",\n  yesterday: \"'yesterday at' p\",\n  today: \"'today at' p\",\n  tomorrow: \"'tomorrow at' p\",\n  nextWeek: \"eeee 'at' p\",\n  other: \"P\"\n};\nexport var formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\nexport function buildLocalizeFn(args) {\n  return function (value, options) {\n    var context = options !== null && options !== void 0 && options.context ? String(options.context) : \"standalone\";\n    var valuesArray;\n\n    if (context === \"formatting\" && args.formattingValues) {\n      var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n      var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;\n      valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n    } else {\n      var _defaultWidth = args.defaultWidth;\n\n      var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;\n\n      valuesArray = args.values[_width] || args.values[_defaultWidth];\n    }\n\n    var index = args.argumentCallback ? args.argumentCallback(value) : value; // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n\n    return valuesArray[index];\n  };\n}","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\nvar eraValues = {\n  narrow: [\"B\", \"A\"],\n  abbreviated: [\"BC\", \"AD\"],\n  wide: [\"Before Christ\", \"Anno Domini\"]\n};\nvar quarterValues = {\n  narrow: [\"1\", \"2\", \"3\", \"4\"],\n  abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n  wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"]\n}; // Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n\nvar monthValues = {\n  narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n  abbreviated: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n  wide: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]\n};\nvar dayValues = {\n  narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n  short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n  abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  wide: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: \"a\",\n    pm: \"p\",\n    midnight: \"mi\",\n    noon: \"n\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\"\n  },\n  abbreviated: {\n    am: \"AM\",\n    pm: \"PM\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\"\n  },\n  wide: {\n    am: \"a.m.\",\n    pm: \"p.m.\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\"\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: \"a\",\n    pm: \"p\",\n    midnight: \"mi\",\n    noon: \"n\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\"\n  },\n  abbreviated: {\n    am: \"AM\",\n    pm: \"PM\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\"\n  },\n  wide: {\n    am: \"a.m.\",\n    pm: \"p.m.\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\"\n  }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example,\n  // if they are different for different grammatical genders,\n  // use `options.unit`.\n  //\n  // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n  // 'day', 'hour', 'minute', 'second'.\n\n  var rem100 = number % 100;\n\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + \"st\";\n\n      case 2:\n        return number + \"nd\";\n\n      case 3:\n        return number + \"rd\";\n    }\n  }\n\n  return number + \"th\";\n};\n\nexport var localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: \"wide\"\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: \"wide\",\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: \"wide\"\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: \"wide\"\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: \"wide\",\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: \"wide\"\n  })\n};","export function buildMatchFn(args) {\n  return function (string) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var width = options.width;\n    var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n    var matchResult = string.match(matchPattern);\n\n    if (!matchResult) {\n      return null;\n    }\n\n    var matchedString = matchResult[0];\n    var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n    var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n      return pattern.test(matchedString);\n    }) : // [TODO] -- I challenge you to fix the type\n    findKey(parsePatterns, function (pattern) {\n      return pattern.test(matchedString);\n    });\n    var value;\n    value = args.valueCallback ? args.valueCallback(key) : key;\n    value = options.valueCallback ? // [TODO] -- I challenge you to fix the type\n    options.valueCallback(value) : value;\n    var rest = string.slice(matchedString.length);\n    return {\n      value: value,\n      rest: rest\n    };\n  };\n}\n\nfunction findKey(object, predicate) {\n  for (var key in object) {\n    if (Object.prototype.hasOwnProperty.call(object, key) && predicate(object[key])) {\n      return key;\n    }\n  }\n\n  return undefined;\n}\n\nfunction findIndex(array, predicate) {\n  for (var key = 0; key < array.length; key++) {\n    if (predicate(array[key])) {\n      return key;\n    }\n  }\n\n  return undefined;\n}","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(b|a)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n  wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(su|mo|tu|we|th|fr|sa)/i,\n  abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n  wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i\n  }\n};\nexport var match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: \"any\"\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: \"any\",\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: \"any\"\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: \"any\"\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: \"any\",\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: \"any\"\n  })\n};","export function buildMatchPatternFn(args) {\n  return function (string) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var matchResult = string.match(args.matchPattern);\n    if (!matchResult) return null;\n    var matchedString = matchResult[0];\n    var parseResult = string.match(args.parsePattern);\n    if (!parseResult) return null;\n    var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; // [TODO] I challenge you to fix the type\n\n    value = options.valueCallback ? options.valueCallback(value) : value;\n    var rest = string.slice(matchedString.length);\n    return {\n      value: value,\n      rest: rest\n    };\n  };\n}","import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\n\nexport var enUS = {\n  code: \"en-US\",\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0\n    /* Sunday */\n    ,\n    firstWeekContainsDate: 1\n  }\n}; // Fallback for modularized imports:\n\nexport default enUS;","var dateLongFormatter = function dateLongFormatter(pattern, formatLong) {\n  switch (pattern) {\n    case \"P\":\n      return formatLong.date({\n        width: \"short\"\n      });\n\n    case \"PP\":\n      return formatLong.date({\n        width: \"medium\"\n      });\n\n    case \"PPP\":\n      return formatLong.date({\n        width: \"long\"\n      });\n\n    case \"PPPP\":\n    default:\n      return formatLong.date({\n        width: \"full\"\n      });\n  }\n};\n\nvar timeLongFormatter = function timeLongFormatter(pattern, formatLong) {\n  switch (pattern) {\n    case \"p\":\n      return formatLong.time({\n        width: \"short\"\n      });\n\n    case \"pp\":\n      return formatLong.time({\n        width: \"medium\"\n      });\n\n    case \"ppp\":\n      return formatLong.time({\n        width: \"long\"\n      });\n\n    case \"pppp\":\n    default:\n      return formatLong.time({\n        width: \"full\"\n      });\n  }\n};\n\nvar dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) {\n  var matchResult = pattern.match(/(P+)(p+)?/) || [];\n  var datePattern = matchResult[1];\n  var timePattern = matchResult[2];\n\n  if (!timePattern) {\n    return dateLongFormatter(pattern, formatLong);\n  }\n\n  var dateTimeFormat;\n\n  switch (datePattern) {\n    case \"P\":\n      dateTimeFormat = formatLong.dateTime({\n        width: \"short\"\n      });\n      break;\n\n    case \"PP\":\n      dateTimeFormat = formatLong.dateTime({\n        width: \"medium\"\n      });\n      break;\n\n    case \"PPP\":\n      dateTimeFormat = formatLong.dateTime({\n        width: \"long\"\n      });\n      break;\n\n    case \"PPPP\":\n    default:\n      dateTimeFormat = formatLong.dateTime({\n        width: \"full\"\n      });\n      break;\n  }\n\n  return dateTimeFormat.replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong)).replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport var longFormatters = {\n  p: timeLongFormatter,\n  P: dateTimeLongFormatter\n};","var dayOfYearTokenRE = /^D+$/;\nvar weekYearTokenRE = /^Y+$/;\nvar throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\nexport function isProtectedDayOfYearToken(token) {\n  return dayOfYearTokenRE.test(token);\n}\nexport function isProtectedWeekYearToken(token) {\n  return weekYearTokenRE.test(token);\n}\nexport function warnOrThrowProtectedError(token, format, input) {\n  var _message = message(token, format, input);\n\n  console.warn(_message);\n  if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n  var subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n  return \"Use `\".concat(token.toLowerCase(), \"` instead of `\").concat(token, \"` (in `\").concat(format, \"`) for formatting \").concat(subject, \" to the input `\").concat(input, \"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\");\n}","var defaultOptions = {};\nexport function getDefaultOptions() {\n  return defaultOptions;\n}\nexport function setDefaultOptions(newOptions) {\n  defaultOptions = newOptions;\n}","import { getDefaultOptions as getInternalDefaultOptions } from \"./_lib/defaultOptions.js\";\n/**\n * @name getDefaultOptions\n * @category Common Helpers\n * @summary Get default options.\n * @pure false\n *\n * @description\n * Returns an object that contains defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * You can change these with [setDefaultOptions](https://date-fns.org/docs/setDefaultOptions).\n *\n * @returns The default options\n *\n * @example\n * const result = getDefaultOptions()\n * //=> {}\n *\n * @example\n * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 })\n * const result = getDefaultOptions()\n * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 }\n */\n\nexport function getDefaultOptions() {\n  return Object.assign({}, getInternalDefaultOptions());\n} // Fallback for modularized imports:\n\nexport default getDefaultOptions;","import { constructFrom } from \"./constructFrom.js\";\n/**\n * @name transpose\n * @category Generic Helpers\n * @summary Transpose the date to the given constructor.\n *\n * @description\n * The function transposes the date to the given constructor. It helps you\n * to transpose the date in the system time zone to say `UTCDate` or any other\n * date extension.\n *\n * @typeParam InputDate - The input `Date` type derived from the passed argument.\n * @typeParam ResultDate - The result `Date` type derived from the passed constructor.\n *\n * @param date - The date to use values from\n * @param constructor - The date constructor to use\n *\n * @returns Date transposed to the given constructor\n *\n * @example\n * // Create July 10, 2022 00:00 in locale time zone\n * const date = new Date(2022, 6, 10)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)'\n *\n * @example\n * // Transpose the date to July 10, 2022 00:00 in UTC\n * transpose(date, UTCDate)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)'\n */\n\nexport function transpose(date, constructor) {\n  var date_ = isConstructor(constructor) ? new constructor(0) : constructFrom(constructor, 0);\n  date_.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n  date_.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n  return date_;\n}\n\nfunction isConstructor(constructor) {\n  var _constructor$prototyp;\n\n  return typeof constructor === \"function\" && ((_constructor$prototyp = constructor.prototype) === null || _constructor$prototyp === void 0 ? void 0 : _constructor$prototyp.constructor) === constructor;\n} // Fallback for modularized imports:\n\n\nexport default transpose;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { constructFrom } from \"../../constructFrom.js\";\nimport { transpose } from \"../../transpose.js\";\nvar TIMEZONE_UNIT_PRIORITY = 10;\nexport var Setter = /*#__PURE__*/function () {\n  function Setter() {\n    _classCallCheck(this, Setter);\n\n    this.subPriority = 0;\n  }\n\n  _createClass(Setter, [{\n    key: \"validate\",\n    value: function validate(_utcDate, _options) {\n      return true;\n    }\n  }]);\n\n  return Setter;\n}();\nexport var ValueSetter = /*#__PURE__*/function (_Setter) {\n  _inherits(ValueSetter, _Setter);\n\n  var _super = _createSuper(ValueSetter);\n\n  function ValueSetter(value, validateValue, setValue, priority, subPriority) {\n    var _this;\n\n    _classCallCheck(this, ValueSetter);\n\n    _this = _super.call(this);\n    _this.value = value;\n    _this.validateValue = validateValue;\n    _this.setValue = setValue;\n    _this.priority = priority;\n\n    if (subPriority) {\n      _this.subPriority = subPriority;\n    }\n\n    return _this;\n  }\n\n  _createClass(ValueSetter, [{\n    key: \"validate\",\n    value: function validate(date, options) {\n      return this.validateValue(date, this.value, options);\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, options) {\n      return this.setValue(date, flags, this.value, options);\n    }\n  }]);\n\n  return ValueSetter;\n}(Setter);\nexport var DateTimezoneSetter = /*#__PURE__*/function (_Setter2) {\n  _inherits(DateTimezoneSetter, _Setter2);\n\n  var _super2 = _createSuper(DateTimezoneSetter);\n\n  function DateTimezoneSetter(context, reference) {\n    var _this2;\n\n    _classCallCheck(this, DateTimezoneSetter);\n\n    _this2 = _super2.call(this);\n    _this2.priority = TIMEZONE_UNIT_PRIORITY;\n    _this2.subPriority = -1;\n\n    _this2.context = context || function (date) {\n      return constructFrom(reference, date);\n    };\n\n    return _this2;\n  }\n\n  _createClass(DateTimezoneSetter, [{\n    key: \"set\",\n    value: function set(date, flags) {\n      if (flags.timestampIsSet) return date;\n      return constructFrom(date, transpose(date, this.context));\n    }\n  }]);\n\n  return DateTimezoneSetter;\n}(Setter);","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { ValueSetter } from \"./Setter.js\";\nexport var Parser = /*#__PURE__*/function () {\n  function Parser() {\n    _classCallCheck(this, Parser);\n  }\n\n  _createClass(Parser, [{\n    key: \"run\",\n    value: function run(dateString, token, match, options) {\n      var result = this.parse(dateString, token, match, options);\n\n      if (!result) {\n        return null;\n      }\n\n      return {\n        setter: new ValueSetter(result.value, this.validate, this.set, this.priority, this.subPriority),\n        rest: result.rest\n      };\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_utcDate, _value, _options) {\n      return true;\n    }\n  }]);\n\n  return Parser;\n}();","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { Parser } from \"../Parser.js\";\nexport var EraParser = /*#__PURE__*/function (_Parser) {\n  _inherits(EraParser, _Parser);\n\n  var _super = _createSuper(EraParser);\n\n  function EraParser() {\n    var _this;\n\n    _classCallCheck(this, EraParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 140;\n    _this.incompatibleTokens = [\"R\", \"u\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(EraParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        // AD, BC\n        case \"G\":\n        case \"GG\":\n        case \"GGG\":\n          return match.era(dateString, {\n            width: \"abbreviated\"\n          }) || match.era(dateString, {\n            width: \"narrow\"\n          });\n        // A, B\n\n        case \"GGGGG\":\n          return match.era(dateString, {\n            width: \"narrow\"\n          });\n        // Anno Domini, Before Christ\n\n        case \"GGGG\":\n        default:\n          return match.era(dateString, {\n            width: \"wide\"\n          }) || match.era(dateString, {\n            width: \"abbreviated\"\n          }) || match.era(dateString, {\n            width: \"narrow\"\n          });\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value) {\n      flags.era = value;\n      date.setFullYear(value, 0, 1);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return EraParser;\n}(Parser);","export var numericPatterns = {\n  month: /^(1[0-2]|0?\\d)/,\n  // 0 to 12\n  date: /^(3[0-1]|[0-2]?\\d)/,\n  // 0 to 31\n  dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n  // 0 to 366\n  week: /^(5[0-3]|[0-4]?\\d)/,\n  // 0 to 53\n  hour23h: /^(2[0-3]|[0-1]?\\d)/,\n  // 0 to 23\n  hour24h: /^(2[0-4]|[0-1]?\\d)/,\n  // 0 to 24\n  hour11h: /^(1[0-1]|0?\\d)/,\n  // 0 to 11\n  hour12h: /^(1[0-2]|0?\\d)/,\n  // 0 to 12\n  minute: /^[0-5]?\\d/,\n  // 0 to 59\n  second: /^[0-5]?\\d/,\n  // 0 to 59\n  singleDigit: /^\\d/,\n  // 0 to 9\n  twoDigits: /^\\d{1,2}/,\n  // 0 to 99\n  threeDigits: /^\\d{1,3}/,\n  // 0 to 999\n  fourDigits: /^\\d{1,4}/,\n  // 0 to 9999\n  anyDigitsSigned: /^-?\\d+/,\n  singleDigitSigned: /^-?\\d/,\n  // 0 to 9, -0 to -9\n  twoDigitsSigned: /^-?\\d{1,2}/,\n  // 0 to 99, -0 to -99\n  threeDigitsSigned: /^-?\\d{1,3}/,\n  // 0 to 999, -0 to -999\n  fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nexport var timezonePatterns = {\n  basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n  basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n  basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n  extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n  extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};","import { millisecondsInHour, millisecondsInMinute, millisecondsInSecond } from \"../../constants.js\";\nimport { numericPatterns } from \"./constants.js\";\nexport function mapValue(parseFnResult, mapFn) {\n  if (!parseFnResult) {\n    return parseFnResult;\n  }\n\n  return {\n    value: mapFn(parseFnResult.value),\n    rest: parseFnResult.rest\n  };\n}\nexport function parseNumericPattern(pattern, dateString) {\n  var matchResult = dateString.match(pattern);\n\n  if (!matchResult) {\n    return null;\n  }\n\n  return {\n    value: parseInt(matchResult[0], 10),\n    rest: dateString.slice(matchResult[0].length)\n  };\n}\nexport function parseTimezonePattern(pattern, dateString) {\n  var matchResult = dateString.match(pattern);\n\n  if (!matchResult) {\n    return null;\n  } // Input is 'Z'\n\n\n  if (matchResult[0] === \"Z\") {\n    return {\n      value: 0,\n      rest: dateString.slice(1)\n    };\n  }\n\n  var sign = matchResult[1] === \"+\" ? 1 : -1;\n  var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n  var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n  var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n  return {\n    value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),\n    rest: dateString.slice(matchResult[0].length)\n  };\n}\nexport function parseAnyDigitsSigned(dateString) {\n  return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\nexport function parseNDigits(n, dateString) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigit, dateString);\n\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigits, dateString);\n\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigits, dateString);\n\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigits, dateString);\n\n    default:\n      return parseNumericPattern(new RegExp(\"^\\\\d{1,\" + n + \"}\"), dateString);\n  }\n}\nexport function parseNDigitsSigned(n, dateString) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n\n    default:\n      return parseNumericPattern(new RegExp(\"^-?\\\\d{1,\" + n + \"}\"), dateString);\n  }\n}\nexport function dayPeriodEnumToHours(dayPeriod) {\n  switch (dayPeriod) {\n    case \"morning\":\n      return 4;\n\n    case \"evening\":\n      return 17;\n\n    case \"pm\":\n    case \"noon\":\n    case \"afternoon\":\n      return 12;\n\n    case \"am\":\n    case \"midnight\":\n    case \"night\":\n    default:\n      return 0;\n  }\n}\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n  var isCommonEra = currentYear > 0; // Absolute number of the current year:\n  // 1 -> 1 AC\n  // 0 -> 1 BC\n  // -1 -> 2 BC\n\n  var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n  var result;\n\n  if (absCurrentYear <= 50) {\n    result = twoDigitYear || 100;\n  } else {\n    var rangeEnd = absCurrentYear + 50;\n    var rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;\n    var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n    result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n  }\n\n  return isCommonEra ? result : 1 - result;\n}\nexport function isLeapYearIndex(year) {\n  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\"; // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n// | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n// | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n// | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\nexport var YearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(YearParser, _Parser);\n\n  var _super = _createSuper(YearParser);\n\n  function YearParser() {\n    var _this;\n\n    _classCallCheck(this, YearParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 130;\n    _this.incompatibleTokens = [\"Y\", \"R\", \"u\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(YearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(year) {\n        return {\n          year: year,\n          isTwoDigitYear: token === \"yy\"\n        };\n      };\n\n      switch (token) {\n        case \"y\":\n          return mapValue(parseNDigits(4, dateString), valueCallback);\n\n        case \"yo\":\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: \"year\"\n          }), valueCallback);\n\n        default:\n          return mapValue(parseNDigits(token.length, dateString), valueCallback);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value.isTwoDigitYear || value.year > 0;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value) {\n      var currentYear = date.getFullYear();\n\n      if (value.isTwoDigitYear) {\n        var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n        date.setFullYear(normalizedTwoDigitYear, 0, 1);\n        date.setHours(0, 0, 0, 0);\n        return date;\n      }\n\n      var year = !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n      date.setFullYear(year, 0, 1);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return YearParser;\n}(Parser);","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport function startOfWeek(date, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = (_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0;\n\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  var day = _date.getDay();\n\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n  _date.setDate(_date.getDate() - diff);\n\n  _date.setHours(0, 0, 0, 0);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default startOfWeek;","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\n\nexport function getWeekYear(date, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  var year = _date.getFullYear();\n\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = (_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1;\n  var firstWeekOfNextYear = constructFrom((options === null || options === void 0 ? void 0 : options.in) || date, 0);\n  firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setHours(0, 0, 0, 0);\n  var startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n  var firstWeekOfThisYear = constructFrom((options === null || options === void 0 ? void 0 : options.in) || date, 0);\n  firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setHours(0, 0, 0, 0);\n  var startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n  if (+_date >= +startOfNextYear) {\n    return year + 1;\n  } else if (+_date >= +startOfThisYear) {\n    return year;\n  } else {\n    return year - 1;\n  }\n} // Fallback for modularized imports:\n\nexport default getWeekYear;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { getWeekYear } from \"../../../getWeekYear.js\";\nimport { startOfWeek } from \"../../../startOfWeek.js\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.js\"; // Local week-numbering year\n\nexport var LocalWeekYearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(LocalWeekYearParser, _Parser);\n\n  var _super = _createSuper(LocalWeekYearParser);\n\n  function LocalWeekYearParser() {\n    var _this;\n\n    _classCallCheck(this, LocalWeekYearParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 130;\n    _this.incompatibleTokens = [\"y\", \"R\", \"u\", \"Q\", \"q\", \"M\", \"L\", \"I\", \"d\", \"D\", \"i\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(LocalWeekYearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(year) {\n        return {\n          year: year,\n          isTwoDigitYear: token === \"YY\"\n        };\n      };\n\n      switch (token) {\n        case \"Y\":\n          return mapValue(parseNDigits(4, dateString), valueCallback);\n\n        case \"Yo\":\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: \"year\"\n          }), valueCallback);\n\n        default:\n          return mapValue(parseNDigits(token.length, dateString), valueCallback);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value.isTwoDigitYear || value.year > 0;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value, options) {\n      var currentYear = getWeekYear(date, options);\n\n      if (value.isTwoDigitYear) {\n        var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n        date.setFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n        date.setHours(0, 0, 0, 0);\n        return startOfWeek(date, options);\n      }\n\n      var year = !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n      date.setFullYear(year, 0, options.firstWeekContainsDate);\n      date.setHours(0, 0, 0, 0);\n      return startOfWeek(date, options);\n    }\n  }]);\n\n  return LocalWeekYearParser;\n}(Parser);","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { startOfWeek } from \"./startOfWeek.js\";\n/**\n * The {@link startOfISOWeek} function options.\n */\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport function startOfISOWeek(date, options) {\n  return startOfWeek(date, _objectSpread(_objectSpread({}, options), {}, {\n    weekStartsOn: 1\n  }));\n} // Fallback for modularized imports:\n\nexport default startOfISOWeek;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { startOfISOWeek } from \"../../../startOfISOWeek.js\";\nimport { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\"; // ISO week-numbering year\n\nexport var ISOWeekYearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISOWeekYearParser, _Parser);\n\n  var _super = _createSuper(ISOWeekYearParser);\n\n  function ISOWeekYearParser() {\n    var _this;\n\n    _classCallCheck(this, ISOWeekYearParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 130;\n    _this.incompatibleTokens = [\"G\", \"y\", \"Y\", \"u\", \"Q\", \"q\", \"M\", \"L\", \"w\", \"d\", \"D\", \"e\", \"c\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(ISOWeekYearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      if (token === \"R\") {\n        return parseNDigitsSigned(4, dateString);\n      }\n\n      return parseNDigitsSigned(token.length, dateString);\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      var firstWeekOfYear = constructFrom(date, 0);\n      firstWeekOfYear.setFullYear(value, 0, 4);\n      firstWeekOfYear.setHours(0, 0, 0, 0);\n      return startOfISOWeek(firstWeekOfYear);\n    }\n  }]);\n\n  return ISOWeekYearParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigitsSigned } from \"../utils.js\";\nexport var ExtendedYearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ExtendedYearParser, _Parser);\n\n  var _super = _createSuper(ExtendedYearParser);\n\n  function ExtendedYearParser() {\n    var _this;\n\n    _classCallCheck(this, ExtendedYearParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 130;\n    _this.incompatibleTokens = [\"G\", \"y\", \"Y\", \"R\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(ExtendedYearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      if (token === \"u\") {\n        return parseNDigitsSigned(4, dateString);\n      }\n\n      return parseNDigitsSigned(token.length, dateString);\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setFullYear(value, 0, 1);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return ExtendedYearParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var QuarterParser = /*#__PURE__*/function (_Parser) {\n  _inherits(QuarterParser, _Parser);\n\n  var _super = _createSuper(QuarterParser);\n\n  function QuarterParser() {\n    var _this;\n\n    _classCallCheck(this, QuarterParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 120;\n    _this.incompatibleTokens = [\"Y\", \"R\", \"q\", \"M\", \"L\", \"w\", \"I\", \"d\", \"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(QuarterParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        // 1, 2, 3, 4\n        case \"Q\":\n        case \"QQ\":\n          // 01, 02, 03, 04\n          return parseNDigits(token.length, dateString);\n        // 1st, 2nd, 3rd, 4th\n\n        case \"Qo\":\n          return match.ordinalNumber(dateString, {\n            unit: \"quarter\"\n          });\n        // Q1, Q2, Q3, Q4\n\n        case \"QQQ\":\n          return match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n        // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n        case \"QQQQQ\":\n          return match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n        // 1st quarter, 2nd quarter, ...\n\n        case \"QQQQ\":\n        default:\n          return match.quarter(dateString, {\n            width: \"wide\",\n            context: \"formatting\"\n          }) || match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 4;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setMonth((value - 1) * 3, 1);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return QuarterParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits } from \"../utils.js\";\nexport var StandAloneQuarterParser = /*#__PURE__*/function (_Parser) {\n  _inherits(StandAloneQuarterParser, _Parser);\n\n  var _super = _createSuper(StandAloneQuarterParser);\n\n  function StandAloneQuarterParser() {\n    var _this;\n\n    _classCallCheck(this, StandAloneQuarterParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 120;\n    _this.incompatibleTokens = [\"Y\", \"R\", \"Q\", \"M\", \"L\", \"w\", \"I\", \"d\", \"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(StandAloneQuarterParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        // 1, 2, 3, 4\n        case \"q\":\n        case \"qq\":\n          // 01, 02, 03, 04\n          return parseNDigits(token.length, dateString);\n        // 1st, 2nd, 3rd, 4th\n\n        case \"qo\":\n          return match.ordinalNumber(dateString, {\n            unit: \"quarter\"\n          });\n        // Q1, Q2, Q3, Q4\n\n        case \"qqq\":\n          return match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\"\n          }) || match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"standalone\"\n          });\n        // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n        case \"qqqqq\":\n          return match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"standalone\"\n          });\n        // 1st quarter, 2nd quarter, ...\n\n        case \"qqqq\":\n        default:\n          return match.quarter(dateString, {\n            width: \"wide\",\n            context: \"standalone\"\n          }) || match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\"\n          }) || match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"standalone\"\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 4;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setMonth((value - 1) * 3, 1);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return StandAloneQuarterParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\nexport var MonthParser = /*#__PURE__*/function (_Parser) {\n  _inherits(MonthParser, _Parser);\n\n  var _super = _createSuper(MonthParser);\n\n  function MonthParser() {\n    var _this;\n\n    _classCallCheck(this, MonthParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.incompatibleTokens = [\"Y\", \"R\", \"q\", \"Q\", \"L\", \"w\", \"I\", \"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n    _this.priority = 110;\n    return _this;\n  }\n\n  _createClass(MonthParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(value) {\n        return value - 1;\n      };\n\n      switch (token) {\n        // 1, 2, ..., 12\n        case \"M\":\n          return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n        // 01, 02, ..., 12\n\n        case \"MM\":\n          return mapValue(parseNDigits(2, dateString), valueCallback);\n        // 1st, 2nd, ..., 12th\n\n        case \"Mo\":\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: \"month\"\n          }), valueCallback);\n        // Jan, Feb, ..., Dec\n\n        case \"MMM\":\n          return match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.month(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n        // J, F, ..., D\n\n        case \"MMMMM\":\n          return match.month(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n        // January, February, ..., December\n\n        case \"MMMM\":\n        default:\n          return match.month(dateString, {\n            width: \"wide\",\n            context: \"formatting\"\n          }) || match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.month(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 11;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setMonth(value, 1);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return MonthParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.js\";\nexport var StandAloneMonthParser = /*#__PURE__*/function (_Parser) {\n  _inherits(StandAloneMonthParser, _Parser);\n\n  var _super = _createSuper(StandAloneMonthParser);\n\n  function StandAloneMonthParser() {\n    var _this;\n\n    _classCallCheck(this, StandAloneMonthParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 110;\n    _this.incompatibleTokens = [\"Y\", \"R\", \"q\", \"Q\", \"M\", \"w\", \"I\", \"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(StandAloneMonthParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(value) {\n        return value - 1;\n      };\n\n      switch (token) {\n        // 1, 2, ..., 12\n        case \"L\":\n          return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback);\n        // 01, 02, ..., 12\n\n        case \"LL\":\n          return mapValue(parseNDigits(2, dateString), valueCallback);\n        // 1st, 2nd, ..., 12th\n\n        case \"Lo\":\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: \"month\"\n          }), valueCallback);\n        // Jan, Feb, ..., Dec\n\n        case \"LLL\":\n          return match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\"\n          }) || match.month(dateString, {\n            width: \"narrow\",\n            context: \"standalone\"\n          });\n        // J, F, ..., D\n\n        case \"LLLLL\":\n          return match.month(dateString, {\n            width: \"narrow\",\n            context: \"standalone\"\n          });\n        // January, February, ..., December\n\n        case \"LLLL\":\n        default:\n          return match.month(dateString, {\n            width: \"wide\",\n            context: \"standalone\"\n          }) || match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\"\n          }) || match.month(dateString, {\n            width: \"narrow\",\n            context: \"standalone\"\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 11;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setMonth(value, 1);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return StandAloneMonthParser;\n}(Parser);","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\n\nexport function startOfWeekYear(date, options) {\n  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n  var defaultOptions = getDefaultOptions();\n  var firstWeekContainsDate = (_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1;\n  var year = getWeekYear(date, options);\n  var firstWeek = constructFrom((options === null || options === void 0 ? void 0 : options.in) || date, 0);\n  firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setHours(0, 0, 0, 0);\n\n  var _date = startOfWeek(firstWeek, options);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default startOfWeekYear;","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { startOfWeekYear } from \"./startOfWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport function getWeek(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  var diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options); // Round the number of weeks to the nearest integer because the number of\n  // milliseconds in a week is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n\n  return Math.round(diff / millisecondsInWeek) + 1;\n} // Fallback for modularized imports:\n\nexport default getWeek;","import { getWeek } from \"./getWeek.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link setWeek} function options.\n */\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param week - The week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the local week set\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * const result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * const result = setWeek(new Date(2005, 0, 2), 1, {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\n\nexport function setWeek(date, week, options) {\n  var date_ = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n  var diff = getWeek(date_, options) - week;\n  date_.setDate(date_.getDate() - diff * 7);\n  return toDate(date_, options === null || options === void 0 ? void 0 : options.in);\n} // Fallback for modularized imports:\n\nexport default setWeek;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { setWeek } from \"../../../setWeek.js\";\nimport { startOfWeek } from \"../../../startOfWeek.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\"; // Local week of year\n\nexport var LocalWeekParser = /*#__PURE__*/function (_Parser) {\n  _inherits(LocalWeekParser, _Parser);\n\n  var _super = _createSuper(LocalWeekParser);\n\n  function LocalWeekParser() {\n    var _this;\n\n    _classCallCheck(this, LocalWeekParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 100;\n    _this.incompatibleTokens = [\"y\", \"R\", \"u\", \"q\", \"Q\", \"M\", \"L\", \"I\", \"d\", \"D\", \"i\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(LocalWeekParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case \"w\":\n          return parseNumericPattern(numericPatterns.week, dateString);\n\n        case \"wo\":\n          return match.ordinalNumber(dateString, {\n            unit: \"week\"\n          });\n\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 53;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value, options) {\n      return startOfWeek(setWeek(date, value, options), options);\n    }\n  }]);\n\n  return LocalWeekParser;\n}(Parser);","import { constructFrom } from \"./constructFrom.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link getISOWeekYear} function options.\n */\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\n\nexport function getISOWeekYear(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  var year = _date.getFullYear();\n\n  var fourthOfJanuaryOfNextYear = constructFrom(_date, 0);\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n  var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n  var fourthOfJanuaryOfThisYear = constructFrom(_date, 0);\n  fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n  var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n  if (_date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (_date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n} // Fallback for modularized imports:\n\nexport default getISOWeekYear;","import { constructFrom } from \"./constructFrom.js\";\nimport { getISOWeekYear } from \"./getISOWeekYear.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\n/**\n * The {@link startOfISOWeekYear} function options.\n */\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\n\nexport function startOfISOWeekYear(date, options) {\n  var year = getISOWeekYear(date, options);\n  var fourthOfJanuary = constructFrom((options === null || options === void 0 ? void 0 : options.in) || date, 0);\n  fourthOfJanuary.setFullYear(year, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  return startOfISOWeek(fourthOfJanuary);\n} // Fallback for modularized imports:\n\nexport default startOfISOWeekYear;","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link getISOWeek} function options.\n */\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\n\nexport function getISOWeek(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  var diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date); // Round the number of weeks to the nearest integer because the number of\n  // milliseconds in a week is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n\n  return Math.round(diff / millisecondsInWeek) + 1;\n} // Fallback for modularized imports:\n\nexport default getISOWeek;","import { getISOWeek } from \"./getISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link setISOWeek} function options.\n */\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The `Date` type of the context function.\n *\n * @param date - The date to be changed\n * @param week - The ISO week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the ISO week set\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * const result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\n\nexport function setISOWeek(date, week, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  var diff = getISOWeek(_date, options) - week;\n\n  _date.setDate(_date.getDate() - diff * 7);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default setISOWeek;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { setISOWeek } from \"../../../setISOWeek.js\";\nimport { startOfISOWeek } from \"../../../startOfISOWeek.js\";\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\"; // ISO week of year\n\nexport var ISOWeekParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISOWeekParser, _Parser);\n\n  var _super = _createSuper(ISOWeekParser);\n\n  function ISOWeekParser() {\n    var _this;\n\n    _classCallCheck(this, ISOWeekParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 100;\n    _this.incompatibleTokens = [\"y\", \"Y\", \"u\", \"q\", \"Q\", \"M\", \"L\", \"w\", \"d\", \"D\", \"e\", \"c\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(ISOWeekParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case \"I\":\n          return parseNumericPattern(numericPatterns.week, dateString);\n\n        case \"Io\":\n          return match.ordinalNumber(dateString, {\n            unit: \"week\"\n          });\n\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 53;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      return startOfISOWeek(setISOWeek(date, value));\n    }\n  }]);\n\n  return ISOWeekParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\nimport { isLeapYearIndex, parseNDigits, parseNumericPattern } from \"../utils.js\";\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Day of the month\n\nexport var DateParser = /*#__PURE__*/function (_Parser) {\n  _inherits(DateParser, _Parser);\n\n  var _super = _createSuper(DateParser);\n\n  function DateParser() {\n    var _this;\n\n    _classCallCheck(this, DateParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 90;\n    _this.subPriority = 1;\n    _this.incompatibleTokens = [\"Y\", \"R\", \"q\", \"Q\", \"w\", \"I\", \"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(DateParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case \"d\":\n          return parseNumericPattern(numericPatterns.date, dateString);\n\n        case \"do\":\n          return match.ordinalNumber(dateString, {\n            unit: \"date\"\n          });\n\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(date, value) {\n      var year = date.getFullYear();\n      var isLeapYear = isLeapYearIndex(year);\n      var month = date.getMonth();\n\n      if (isLeapYear) {\n        return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n      } else {\n        return value >= 1 && value <= DAYS_IN_MONTH[month];\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setDate(value);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return DateParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\nimport { isLeapYearIndex, parseNDigits, parseNumericPattern } from \"../utils.js\";\nexport var DayOfYearParser = /*#__PURE__*/function (_Parser) {\n  _inherits(DayOfYearParser, _Parser);\n\n  var _super = _createSuper(DayOfYearParser);\n\n  function DayOfYearParser() {\n    var _this;\n\n    _classCallCheck(this, DayOfYearParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 90;\n    _this.subpriority = 1;\n    _this.incompatibleTokens = [\"Y\", \"R\", \"q\", \"Q\", \"M\", \"L\", \"w\", \"I\", \"d\", \"E\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(DayOfYearParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case \"D\":\n        case \"DD\":\n          return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n\n        case \"Do\":\n          return match.ordinalNumber(dateString, {\n            unit: \"date\"\n          });\n\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(date, value) {\n      var year = date.getFullYear();\n      var isLeapYear = isLeapYearIndex(year);\n\n      if (isLeapYear) {\n        return value >= 1 && value <= 366;\n      } else {\n        return value >= 1 && value <= 365;\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setMonth(0, value);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return DayOfYearParser;\n}(Parser);","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link addDays} function options.\n */\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n * @param options - An object with options\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\n\nexport function addDays(date, amount, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  if (isNaN(amount)) return constructFrom((options === null || options === void 0 ? void 0 : options.in) || date, NaN); // If 0 days, no-op to avoid changing times in the hour before end of DST\n\n  if (!amount) return _date;\n\n  _date.setDate(_date.getDate() + amount);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default addDays;","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { addDays } from \"./addDays.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link setDay} function options.\n */\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param day - The day of the week of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the day of the week set\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\n\nexport function setDay(date, day, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = (_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0;\n  var date_ = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n  var currentDay = date_.getDay();\n  var remainder = day % 7;\n  var dayIndex = (remainder + 7) % 7;\n  var delta = 7 - weekStartsOn;\n  var diff = day < 0 || day > 6 ? day - (currentDay + delta) % 7 : (dayIndex + delta) % 7 - (currentDay + delta) % 7;\n  return addDays(date_, diff, options);\n} // Fallback for modularized imports:\n\nexport default setDay;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\"; // Day of week\n\nexport var DayParser = /*#__PURE__*/function (_Parser) {\n  _inherits(DayParser, _Parser);\n\n  var _super = _createSuper(DayParser);\n\n  function DayParser() {\n    var _this;\n\n    _classCallCheck(this, DayParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 90;\n    _this.incompatibleTokens = [\"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(DayParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        // Tue\n        case \"E\":\n        case \"EE\":\n        case \"EEE\":\n          return match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"short\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n        // T\n\n        case \"EEEEE\":\n          return match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n        // Tu\n\n        case \"EEEEEE\":\n          return match.day(dateString, {\n            width: \"short\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n        // Tuesday\n\n        case \"EEEE\":\n        default:\n          return match.day(dateString, {\n            width: \"wide\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"short\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 6;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value, options) {\n      date = setDay(date, value, options);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return DayParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\"; // Local day of week\n\nexport var LocalDayParser = /*#__PURE__*/function (_Parser) {\n  _inherits(LocalDayParser, _Parser);\n\n  var _super = _createSuper(LocalDayParser);\n\n  function LocalDayParser() {\n    var _this;\n\n    _classCallCheck(this, LocalDayParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 90;\n    _this.incompatibleTokens = [\"y\", \"R\", \"u\", \"q\", \"Q\", \"M\", \"L\", \"I\", \"d\", \"D\", \"E\", \"i\", \"c\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(LocalDayParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match, options) {\n      var valueCallback = function valueCallback(value) {\n        // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n        var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n        return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n      };\n\n      switch (token) {\n        // 3\n        case \"e\":\n        case \"ee\":\n          // 03\n          return mapValue(parseNDigits(token.length, dateString), valueCallback);\n        // 3rd\n\n        case \"eo\":\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: \"day\"\n          }), valueCallback);\n        // Tue\n\n        case \"eee\":\n          return match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"short\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n        // T\n\n        case \"eeeee\":\n          return match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n        // Tu\n\n        case \"eeeeee\":\n          return match.day(dateString, {\n            width: \"short\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n        // Tuesday\n\n        case \"eeee\":\n        default:\n          return match.day(dateString, {\n            width: \"wide\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"short\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 6;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value, options) {\n      date = setDay(date, value, options);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return LocalDayParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { setDay } from \"../../../setDay.js\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\"; // Stand-alone local day of week\n\nexport var StandAloneLocalDayParser = /*#__PURE__*/function (_Parser) {\n  _inherits(StandAloneLocalDayParser, _Parser);\n\n  var _super = _createSuper(StandAloneLocalDayParser);\n\n  function StandAloneLocalDayParser() {\n    var _this;\n\n    _classCallCheck(this, StandAloneLocalDayParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 90;\n    _this.incompatibleTokens = [\"y\", \"R\", \"u\", \"q\", \"Q\", \"M\", \"L\", \"I\", \"d\", \"D\", \"E\", \"i\", \"e\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(StandAloneLocalDayParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match, options) {\n      var valueCallback = function valueCallback(value) {\n        // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n        var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n        return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n      };\n\n      switch (token) {\n        // 3\n        case \"c\":\n        case \"cc\":\n          // 03\n          return mapValue(parseNDigits(token.length, dateString), valueCallback);\n        // 3rd\n\n        case \"co\":\n          return mapValue(match.ordinalNumber(dateString, {\n            unit: \"day\"\n          }), valueCallback);\n        // Tue\n\n        case \"ccc\":\n          return match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\"\n          }) || match.day(dateString, {\n            width: \"short\",\n            context: \"standalone\"\n          }) || match.day(dateString, {\n            width: \"narrow\",\n            context: \"standalone\"\n          });\n        // T\n\n        case \"ccccc\":\n          return match.day(dateString, {\n            width: \"narrow\",\n            context: \"standalone\"\n          });\n        // Tu\n\n        case \"cccccc\":\n          return match.day(dateString, {\n            width: \"short\",\n            context: \"standalone\"\n          }) || match.day(dateString, {\n            width: \"narrow\",\n            context: \"standalone\"\n          });\n        // Tuesday\n\n        case \"cccc\":\n        default:\n          return match.day(dateString, {\n            width: \"wide\",\n            context: \"standalone\"\n          }) || match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\"\n          }) || match.day(dateString, {\n            width: \"short\",\n            context: \"standalone\"\n          }) || match.day(dateString, {\n            width: \"narrow\",\n            context: \"standalone\"\n          });\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 6;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value, options) {\n      date = setDay(date, value, options);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return StandAloneLocalDayParser;\n}(Parser);","import { toDate } from \"./toDate.js\";\n/**\n * The {@link getISODay} function options.\n */\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The day of ISO week\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * const result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\n\nexport function getISODay(date, options) {\n  var day = toDate(date, options === null || options === void 0 ? void 0 : options.in).getDay();\n  return day === 0 ? 7 : day;\n} // Fallback for modularized imports:\n\nexport default getISODay;","import { addDays } from \"./addDays.js\";\nimport { getISODay } from \"./getISODay.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link setISODay} function options.\n */\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday, etc.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param day - The day of the ISO week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the day of the ISO week set\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * const result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\n\nexport function setISODay(date, day, options) {\n  var date_ = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n  var currentDay = getISODay(date_, options);\n  var diff = day - currentDay;\n  return addDays(date_, diff, options);\n} // Fallback for modularized imports:\n\nexport default setISODay;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { setISODay } from \"../../../setISODay.js\";\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\"; // ISO day of week\n\nexport var ISODayParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISODayParser, _Parser);\n\n  var _super = _createSuper(ISODayParser);\n\n  function ISODayParser() {\n    var _this;\n\n    _classCallCheck(this, ISODayParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 90;\n    _this.incompatibleTokens = [\"y\", \"Y\", \"u\", \"q\", \"Q\", \"M\", \"L\", \"w\", \"d\", \"D\", \"E\", \"e\", \"c\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(ISODayParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      var valueCallback = function valueCallback(value) {\n        if (value === 0) {\n          return 7;\n        }\n\n        return value;\n      };\n\n      switch (token) {\n        // 2\n        case \"i\":\n        case \"ii\":\n          // 02\n          return parseNDigits(token.length, dateString);\n        // 2nd\n\n        case \"io\":\n          return match.ordinalNumber(dateString, {\n            unit: \"day\"\n          });\n        // Tue\n\n        case \"iii\":\n          return mapValue(match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"short\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          }), valueCallback);\n        // T\n\n        case \"iiiii\":\n          return mapValue(match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          }), valueCallback);\n        // Tu\n\n        case \"iiiiii\":\n          return mapValue(match.day(dateString, {\n            width: \"short\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          }), valueCallback);\n        // Tuesday\n\n        case \"iiii\":\n        default:\n          return mapValue(match.day(dateString, {\n            width: \"wide\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"short\",\n            context: \"formatting\"\n          }) || match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          }), valueCallback);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 7;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date = setISODay(date, value);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return ISODayParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMParser = /*#__PURE__*/function (_Parser) {\n  _inherits(AMPMParser, _Parser);\n\n  var _super = _createSuper(AMPMParser);\n\n  function AMPMParser() {\n    var _this;\n\n    _classCallCheck(this, AMPMParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 80;\n    _this.incompatibleTokens = [\"b\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(AMPMParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case \"a\":\n        case \"aa\":\n        case \"aaa\":\n          return match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n\n        case \"aaaaa\":\n          return match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n\n        case \"aaaa\":\n        default:\n          return match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\"\n          }) || match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return AMPMParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\";\nexport var AMPMMidnightParser = /*#__PURE__*/function (_Parser) {\n  _inherits(AMPMMidnightParser, _Parser);\n\n  var _super = _createSuper(AMPMMidnightParser);\n\n  function AMPMMidnightParser() {\n    var _this;\n\n    _classCallCheck(this, AMPMMidnightParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 80;\n    _this.incompatibleTokens = [\"a\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(AMPMMidnightParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case \"b\":\n        case \"bb\":\n        case \"bbb\":\n          return match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n\n        case \"bbbbb\":\n          return match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n\n        case \"bbbb\":\n        default:\n          return match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\"\n          }) || match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return AMPMMidnightParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { Parser } from \"../Parser.js\";\nimport { dayPeriodEnumToHours } from \"../utils.js\"; // in the morning, in the afternoon, in the evening, at night\n\nexport var DayPeriodParser = /*#__PURE__*/function (_Parser) {\n  _inherits(DayPeriodParser, _Parser);\n\n  var _super = _createSuper(DayPeriodParser);\n\n  function DayPeriodParser() {\n    var _this;\n\n    _classCallCheck(this, DayPeriodParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 80;\n    _this.incompatibleTokens = [\"a\", \"b\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(DayPeriodParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case \"B\":\n        case \"BB\":\n        case \"BBB\":\n          return match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n\n        case \"BBBBB\":\n          return match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n\n        case \"BBBB\":\n        default:\n          return match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\"\n          }) || match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\"\n          }) || match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\"\n          });\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return DayPeriodParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\nexport var Hour1to12Parser = /*#__PURE__*/function (_Parser) {\n  _inherits(Hour1to12Parser, _Parser);\n\n  var _super = _createSuper(Hour1to12Parser);\n\n  function Hour1to12Parser() {\n    var _this;\n\n    _classCallCheck(this, Hour1to12Parser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 70;\n    _this.incompatibleTokens = [\"H\", \"K\", \"k\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(Hour1to12Parser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case \"h\":\n          return parseNumericPattern(numericPatterns.hour12h, dateString);\n\n        case \"ho\":\n          return match.ordinalNumber(dateString, {\n            unit: \"hour\"\n          });\n\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 12;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      var isPM = date.getHours() >= 12;\n\n      if (isPM && value < 12) {\n        date.setHours(value + 12, 0, 0, 0);\n      } else if (!isPM && value === 12) {\n        date.setHours(0, 0, 0, 0);\n      } else {\n        date.setHours(value, 0, 0, 0);\n      }\n\n      return date;\n    }\n  }]);\n\n  return Hour1to12Parser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\nexport var Hour0to23Parser = /*#__PURE__*/function (_Parser) {\n  _inherits(Hour0to23Parser, _Parser);\n\n  var _super = _createSuper(Hour0to23Parser);\n\n  function Hour0to23Parser() {\n    var _this;\n\n    _classCallCheck(this, Hour0to23Parser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 70;\n    _this.incompatibleTokens = [\"a\", \"b\", \"h\", \"K\", \"k\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(Hour0to23Parser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case \"H\":\n          return parseNumericPattern(numericPatterns.hour23h, dateString);\n\n        case \"Ho\":\n          return match.ordinalNumber(dateString, {\n            unit: \"hour\"\n          });\n\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 23;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setHours(value, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return Hour0to23Parser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\nexport var Hour0To11Parser = /*#__PURE__*/function (_Parser) {\n  _inherits(Hour0To11Parser, _Parser);\n\n  var _super = _createSuper(Hour0To11Parser);\n\n  function Hour0To11Parser() {\n    var _this;\n\n    _classCallCheck(this, Hour0To11Parser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 70;\n    _this.incompatibleTokens = [\"h\", \"H\", \"k\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(Hour0To11Parser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case \"K\":\n          return parseNumericPattern(numericPatterns.hour11h, dateString);\n\n        case \"Ko\":\n          return match.ordinalNumber(dateString, {\n            unit: \"hour\"\n          });\n\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 11;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      var isPM = date.getHours() >= 12;\n\n      if (isPM && value < 12) {\n        date.setHours(value + 12, 0, 0, 0);\n      } else {\n        date.setHours(value, 0, 0, 0);\n      }\n\n      return date;\n    }\n  }]);\n\n  return Hour0To11Parser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\nexport var Hour1To24Parser = /*#__PURE__*/function (_Parser) {\n  _inherits(Hour1To24Parser, _Parser);\n\n  var _super = _createSuper(Hour1To24Parser);\n\n  function Hour1To24Parser() {\n    var _this;\n\n    _classCallCheck(this, Hour1To24Parser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 70;\n    _this.incompatibleTokens = [\"a\", \"b\", \"h\", \"H\", \"K\", \"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(Hour1To24Parser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case \"k\":\n          return parseNumericPattern(numericPatterns.hour24h, dateString);\n\n        case \"ko\":\n          return match.ordinalNumber(dateString, {\n            unit: \"hour\"\n          });\n\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 1 && value <= 24;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      var hours = value <= 24 ? value % 24 : value;\n      date.setHours(hours, 0, 0, 0);\n      return date;\n    }\n  }]);\n\n  return Hour1To24Parser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\nexport var MinuteParser = /*#__PURE__*/function (_Parser) {\n  _inherits(MinuteParser, _Parser);\n\n  var _super = _createSuper(MinuteParser);\n\n  function MinuteParser() {\n    var _this;\n\n    _classCallCheck(this, MinuteParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 60;\n    _this.incompatibleTokens = [\"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(MinuteParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case \"m\":\n          return parseNumericPattern(numericPatterns.minute, dateString);\n\n        case \"mo\":\n          return match.ordinalNumber(dateString, {\n            unit: \"minute\"\n          });\n\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 59;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setMinutes(value, 0, 0);\n      return date;\n    }\n  }]);\n\n  return MinuteParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { numericPatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.js\";\nexport var SecondParser = /*#__PURE__*/function (_Parser) {\n  _inherits(SecondParser, _Parser);\n\n  var _super = _createSuper(SecondParser);\n\n  function SecondParser() {\n    var _this;\n\n    _classCallCheck(this, SecondParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 50;\n    _this.incompatibleTokens = [\"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(SecondParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token, match) {\n      switch (token) {\n        case \"s\":\n          return parseNumericPattern(numericPatterns.second, dateString);\n\n        case \"so\":\n          return match.ordinalNumber(dateString, {\n            unit: \"second\"\n          });\n\n        default:\n          return parseNDigits(token.length, dateString);\n      }\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(_date, value) {\n      return value >= 0 && value <= 59;\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setSeconds(value, 0);\n      return date;\n    }\n  }]);\n\n  return SecondParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { Parser } from \"../Parser.js\";\nimport { mapValue, parseNDigits } from \"../utils.js\";\nexport var FractionOfSecondParser = /*#__PURE__*/function (_Parser) {\n  _inherits(FractionOfSecondParser, _Parser);\n\n  var _super = _createSuper(FractionOfSecondParser);\n\n  function FractionOfSecondParser() {\n    var _this;\n\n    _classCallCheck(this, FractionOfSecondParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 30;\n    _this.incompatibleTokens = [\"t\", \"T\"];\n    return _this;\n  }\n\n  _createClass(FractionOfSecondParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      var valueCallback = function valueCallback(value) {\n        return Math.trunc(value * Math.pow(10, -token.length + 3));\n      };\n\n      return mapValue(parseNDigits(token.length, dateString), valueCallback);\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      date.setMilliseconds(value);\n      return date;\n    }\n  }]);\n\n  return FractionOfSecondParser;\n}(Parser);","import { toDate } from \"../toDate.js\";\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\n\nexport function getTimezoneOffsetInMilliseconds(date) {\n  var _date = toDate(date);\n\n  var utcDate = new Date(Date.UTC(_date.getFullYear(), _date.getMonth(), _date.getDate(), _date.getHours(), _date.getMinutes(), _date.getSeconds(), _date.getMilliseconds()));\n  utcDate.setUTCFullYear(_date.getFullYear());\n  return +date - +utcDate;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { constructFrom } from \"../../../constructFrom.js\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601. +00:00 is `'Z'`)\n\nexport var ISOTimezoneWithZParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISOTimezoneWithZParser, _Parser);\n\n  var _super = _createSuper(ISOTimezoneWithZParser);\n\n  function ISOTimezoneWithZParser() {\n    var _this;\n\n    _classCallCheck(this, ISOTimezoneWithZParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 10;\n    _this.incompatibleTokens = [\"t\", \"T\", \"x\"];\n    return _this;\n  }\n\n  _createClass(ISOTimezoneWithZParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      switch (token) {\n        case \"X\":\n          return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n        case \"XX\":\n          return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n        case \"XXXX\":\n          return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n        case \"XXXXX\":\n          return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n        case \"XXX\":\n        default:\n          return parseTimezonePattern(timezonePatterns.extended, dateString);\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value) {\n      if (flags.timestampIsSet) return date;\n      return constructFrom(date, date.getTime() - getTimezoneOffsetInMilliseconds(date) - value);\n    }\n  }]);\n\n  return ISOTimezoneWithZParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { constructFrom } from \"../../../constructFrom.js\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { timezonePatterns } from \"../constants.js\";\nimport { Parser } from \"../Parser.js\";\nimport { parseTimezonePattern } from \"../utils.js\"; // Timezone (ISO-8601)\n\nexport var ISOTimezoneParser = /*#__PURE__*/function (_Parser) {\n  _inherits(ISOTimezoneParser, _Parser);\n\n  var _super = _createSuper(ISOTimezoneParser);\n\n  function ISOTimezoneParser() {\n    var _this;\n\n    _classCallCheck(this, ISOTimezoneParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 10;\n    _this.incompatibleTokens = [\"t\", \"T\", \"X\"];\n    return _this;\n  }\n\n  _createClass(ISOTimezoneParser, [{\n    key: \"parse\",\n    value: function parse(dateString, token) {\n      switch (token) {\n        case \"x\":\n          return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, dateString);\n\n        case \"xx\":\n          return parseTimezonePattern(timezonePatterns.basic, dateString);\n\n        case \"xxxx\":\n          return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, dateString);\n\n        case \"xxxxx\":\n          return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, dateString);\n\n        case \"xxx\":\n        default:\n          return parseTimezonePattern(timezonePatterns.extended, dateString);\n      }\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, flags, value) {\n      if (flags.timestampIsSet) return date;\n      return constructFrom(date, date.getTime() - getTimezoneOffsetInMilliseconds(date) - value);\n    }\n  }]);\n\n  return ISOTimezoneParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampSecondsParser = /*#__PURE__*/function (_Parser) {\n  _inherits(TimestampSecondsParser, _Parser);\n\n  var _super = _createSuper(TimestampSecondsParser);\n\n  function TimestampSecondsParser() {\n    var _this;\n\n    _classCallCheck(this, TimestampSecondsParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 40;\n    _this.incompatibleTokens = \"*\";\n    return _this;\n  }\n\n  _createClass(TimestampSecondsParser, [{\n    key: \"parse\",\n    value: function parse(dateString) {\n      return parseAnyDigitsSigned(dateString);\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      return [constructFrom(date, value * 1000), {\n        timestampIsSet: true\n      }];\n    }\n  }]);\n\n  return TimestampSecondsParser;\n}(Parser);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { constructFrom } from \"../../../constructFrom.js\";\nimport { Parser } from \"../Parser.js\";\nimport { parseAnyDigitsSigned } from \"../utils.js\";\nexport var TimestampMillisecondsParser = /*#__PURE__*/function (_Parser) {\n  _inherits(TimestampMillisecondsParser, _Parser);\n\n  var _super = _createSuper(TimestampMillisecondsParser);\n\n  function TimestampMillisecondsParser() {\n    var _this;\n\n    _classCallCheck(this, TimestampMillisecondsParser);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.priority = 20;\n    _this.incompatibleTokens = \"*\";\n    return _this;\n  }\n\n  _createClass(TimestampMillisecondsParser, [{\n    key: \"parse\",\n    value: function parse(dateString) {\n      return parseAnyDigitsSigned(dateString);\n    }\n  }, {\n    key: \"set\",\n    value: function set(date, _flags, value) {\n      return [constructFrom(date, value), {\n        timestampIsSet: true\n      }];\n    }\n  }]);\n\n  return TimestampMillisecondsParser;\n}(Parser);","import { EraParser } from \"./parsers/EraParser.js\";\nimport { YearParser } from \"./parsers/YearParser.js\";\nimport { LocalWeekYearParser } from \"./parsers/LocalWeekYearParser.js\";\nimport { ISOWeekYearParser } from \"./parsers/ISOWeekYearParser.js\";\nimport { ExtendedYearParser } from \"./parsers/ExtendedYearParser.js\";\nimport { QuarterParser } from \"./parsers/QuarterParser.js\";\nimport { StandAloneQuarterParser } from \"./parsers/StandAloneQuarterParser.js\";\nimport { MonthParser } from \"./parsers/MonthParser.js\";\nimport { StandAloneMonthParser } from \"./parsers/StandAloneMonthParser.js\";\nimport { LocalWeekParser } from \"./parsers/LocalWeekParser.js\";\nimport { ISOWeekParser } from \"./parsers/ISOWeekParser.js\";\nimport { DateParser } from \"./parsers/DateParser.js\";\nimport { DayOfYearParser } from \"./parsers/DayOfYearParser.js\";\nimport { DayParser } from \"./parsers/DayParser.js\";\nimport { LocalDayParser } from \"./parsers/LocalDayParser.js\";\nimport { StandAloneLocalDayParser } from \"./parsers/StandAloneLocalDayParser.js\";\nimport { ISODayParser } from \"./parsers/ISODayParser.js\";\nimport { AMPMParser } from \"./parsers/AMPMParser.js\";\nimport { AMPMMidnightParser } from \"./parsers/AMPMMidnightParser.js\";\nimport { DayPeriodParser } from \"./parsers/DayPeriodParser.js\";\nimport { Hour1to12Parser } from \"./parsers/Hour1to12Parser.js\";\nimport { Hour0to23Parser } from \"./parsers/Hour0to23Parser.js\";\nimport { Hour0To11Parser } from \"./parsers/Hour0To11Parser.js\";\nimport { Hour1To24Parser } from \"./parsers/Hour1To24Parser.js\";\nimport { MinuteParser } from \"./parsers/MinuteParser.js\";\nimport { SecondParser } from \"./parsers/SecondParser.js\";\nimport { FractionOfSecondParser } from \"./parsers/FractionOfSecondParser.js\";\nimport { ISOTimezoneWithZParser } from \"./parsers/ISOTimezoneWithZParser.js\";\nimport { ISOTimezoneParser } from \"./parsers/ISOTimezoneParser.js\";\nimport { TimestampSecondsParser } from \"./parsers/TimestampSecondsParser.js\";\nimport { TimestampMillisecondsParser } from \"./parsers/TimestampMillisecondsParser.js\";\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O* | Timezone (GMT)                 |\n * |  p  |                                |  P  |                                |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z* | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n */\n\nexport var parsers = {\n  G: new EraParser(),\n  y: new YearParser(),\n  Y: new LocalWeekYearParser(),\n  R: new ISOWeekYearParser(),\n  u: new ExtendedYearParser(),\n  Q: new QuarterParser(),\n  q: new StandAloneQuarterParser(),\n  M: new MonthParser(),\n  L: new StandAloneMonthParser(),\n  w: new LocalWeekParser(),\n  I: new ISOWeekParser(),\n  d: new DateParser(),\n  D: new DayOfYearParser(),\n  E: new DayParser(),\n  e: new LocalDayParser(),\n  c: new StandAloneLocalDayParser(),\n  i: new ISODayParser(),\n  a: new AMPMParser(),\n  b: new AMPMMidnightParser(),\n  B: new DayPeriodParser(),\n  h: new Hour1to12Parser(),\n  H: new Hour0to23Parser(),\n  K: new Hour0To11Parser(),\n  k: new Hour1To24Parser(),\n  m: new MinuteParser(),\n  s: new SecondParser(),\n  S: new FractionOfSecondParser(),\n  X: new ISOTimezoneWithZParser(),\n  x: new ISOTimezoneParser(),\n  t: new TimestampSecondsParser(),\n  T: new TimestampMillisecondsParser()\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, warnOrThrowProtectedError } from \"./_lib/protectedTokens.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getDefaultOptions } from \"./getDefaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\nimport { DateTimezoneSetter } from \"./parse/_lib/Setter.js\";\nimport { parsers } from \"./parse/_lib/parsers.js\"; // Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\n\nexport { longFormatters, parsers };\n/**\n * The {@link parse} function options.\n */\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit                            |Prior| Pattern | Result examples                   | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era                             | 140 | G..GGG  | AD, BC                            |       |\n * |                                 |     | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 |     | GGGGG   | A, B                              |       |\n * | Calendar year                   | 130 | y       | 44, 1, 1900, 2017, 9999           | 4     |\n * |                                 |     | yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | yy      | 44, 01, 00, 17                    | 4     |\n * |                                 |     | yyy     | 044, 001, 123, 999                | 4     |\n * |                                 |     | yyyy    | 0044, 0001, 1900, 2017            | 4     |\n * |                                 |     | yyyyy   | ...                               | 2,4   |\n * | Local week-numbering year       | 130 | Y       | 44, 1, 1900, 2017, 9000           | 4     |\n * |                                 |     | Yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | YY      | 44, 01, 00, 17                    | 4,6   |\n * |                                 |     | YYY     | 044, 001, 123, 999                | 4     |\n * |                                 |     | YYYY    | 0044, 0001, 1900, 2017            | 4,6   |\n * |                                 |     | YYYYY   | ...                               | 2,4   |\n * | ISO week-numbering year         | 130 | R       | -43, 1, 1900, 2017, 9999, -9999   | 4,5   |\n * |                                 |     | RR      | -43, 01, 00, 17                   | 4,5   |\n * |                                 |     | RRR     | -043, 001, 123, 999, -999         | 4,5   |\n * |                                 |     | RRRR    | -0043, 0001, 2017, 9999, -9999    | 4,5   |\n * |                                 |     | RRRRR   | ...                               | 2,4,5 |\n * | Extended year                   | 130 | u       | -43, 1, 1900, 2017, 9999, -999    | 4     |\n * |                                 |     | uu      | -43, 01, 99, -99                  | 4     |\n * |                                 |     | uuu     | -043, 001, 123, 999, -999         | 4     |\n * |                                 |     | uuuu    | -0043, 0001, 2017, 9999, -9999    | 4     |\n * |                                 |     | uuuuu   | ...                               | 2,4   |\n * | Quarter (formatting)            | 120 | Q       | 1, 2, 3, 4                        |       |\n * |                                 |     | Qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | QQ      | 01, 02, 03, 04                    |       |\n * |                                 |     | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | 120 | q       | 1, 2, 3, 4                        |       |\n * |                                 |     | qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | qq      | 01, 02, 03, 04                    |       |\n * |                                 |     | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | qqqqq   | 1, 2, 3, 4                        | 3     |\n * | Month (formatting)              | 110 | M       | 1, 2, ..., 12                     |       |\n * |                                 |     | Mo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | MM      | 01, 02, ..., 12                   |       |\n * |                                 |     | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | MMMM    | January, February, ..., December  | 2     |\n * |                                 |     | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | 110 | L       | 1, 2, ..., 12                     |       |\n * |                                 |     | Lo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | LL      | 01, 02, ..., 12                   |       |\n * |                                 |     | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | LLLL    | January, February, ..., December  | 2     |\n * |                                 |     | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | 100 | w       | 1, 2, ..., 53                     |       |\n * |                                 |     | wo      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | 100 | I       | 1, 2, ..., 53                     | 5     |\n * |                                 |     | Io      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | II      | 01, 02, ..., 53                   | 5     |\n * | Day of month                    |  90 | d       | 1, 2, ..., 31                     |       |\n * |                                 |     | do      | 1st, 2nd, ..., 31st               | 5     |\n * |                                 |     | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     |  90 | D       | 1, 2, ..., 365, 366               | 7     |\n * |                                 |     | Do      | 1st, 2nd, ..., 365th, 366th       | 5     |\n * |                                 |     | DD      | 01, 02, ..., 365, 366             | 7     |\n * |                                 |     | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 |     | DDDD    | ...                               | 2     |\n * | Day of week (formatting)        |  90 | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 |     | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    |  90 | i       | 1, 2, 3, ..., 7                   | 5     |\n * |                                 |     | io      | 1st, 2nd, ..., 7th                | 5     |\n * |                                 |     | ii      | 01, 02, ..., 07                   | 5     |\n * |                                 |     | iii     | Mon, Tue, Wed, ..., Sun           | 5     |\n * |                                 |     | iiii    | Monday, Tuesday, ..., Sunday      | 2,5   |\n * |                                 |     | iiiii   | M, T, W, T, F, S, S               | 5     |\n * |                                 |     | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 5     |\n * | Local day of week (formatting)  |  90 | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | eo      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | ee      | 02, 03, ..., 01                   |       |\n * |                                 |     | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 |     | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) |  90 | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | co      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | cc      | 02, 03, ..., 01                   |       |\n * |                                 |     | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 |     | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          |  80 | a..aaa  | AM, PM                            |       |\n * |                                 |     | aaaa    | a.m., p.m.                        | 2     |\n * |                                 |     | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          |  80 | b..bbb  | AM, PM, noon, midnight            |       |\n * |                                 |     | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 |     | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             |  80 | B..BBB  | at night, in the morning, ...     |       |\n * |                                 |     | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 |     | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     |  70 | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 |     | ho      | 1st, 2nd, ..., 11th, 12th         | 5     |\n * |                                 |     | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     |  70 | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 |     | Ho      | 0th, 1st, 2nd, ..., 23rd          | 5     |\n * |                                 |     | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     |  70 | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 |     | Ko      | 1st, 2nd, ..., 11th, 0th          | 5     |\n * |                                 |     | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     |  70 | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 |     | ko      | 24th, 1st, 2nd, ..., 23rd         | 5     |\n * |                                 |     | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          |  60 | m       | 0, 1, ..., 59                     |       |\n * |                                 |     | mo      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | mm      | 00, 01, ..., 59                   |       |\n * | Second                          |  50 | s       | 0, 1, ..., 59                     |       |\n * |                                 |     | so      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | ss      | 00, 01, ..., 59                   |       |\n * | Seconds timestamp               |  40 | t       | 512969520                         |       |\n * |                                 |     | tt      | ...                               | 2     |\n * | Fraction of second              |  30 | S       | 0, 1, ..., 9                      |       |\n * |                                 |     | SS      | 00, 01, ..., 99                   |       |\n * |                                 |     | SSS     | 000, 001, ..., 999                |       |\n * |                                 |     | SSSS    | ...                               | 2     |\n * | Milliseconds timestamp          |  20 | T       | 512969520900                      |       |\n * |                                 |     | TT      | ...                               | 2     |\n * | Timezone (ISO-8601 w/ Z)        |  10 | X       | -08, +0530, Z                     |       |\n * |                                 |     | XX      | -0800, +0530, Z                   |       |\n * |                                 |     | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 |     | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 |     | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       |  10 | x       | -08, +0530, +00                   |       |\n * |                                 |     | xx      | -0800, +0530, +0000               |       |\n * |                                 |     | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 |     | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 |     | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Long localized date             |  NA | P       | 05/29/1453                        | 5,8   |\n * |                                 |     | PP      | May 29, 1453                      |       |\n * |                                 |     | PPP     | May 29th, 1453                    |       |\n * |                                 |     | PPPP    | Sunday, May 29th, 1453            | 2,5,8 |\n * | Long localized time             |  NA | p       | 12:00 AM                          | 5,8   |\n * |                                 |     | pp      | 12:00:00 AM                       |       |\n * | Combination of date and time    |  NA | Pp      | 05/29/1453, 12:00 AM              |       |\n * |                                 |     | PPpp    | May 29, 1453, 12:00:00 AM         |       |\n * |                                 |     | PPPpp   | May 29th, 1453 at ...             |       |\n * |                                 |     | PPPPpp  | Sunday, May 29th, 1453 at ...     | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular.\n *    In `format` function, they will produce different result:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n *    `parse` will try to match both formatting and stand-alone units interchangeably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table:\n *    - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n *      as wide as the sequence\n *    - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n *      These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n *    `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n *    `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n *    while `uu` will just assign the year as is:\n *\n *    `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n *    `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear)\n *    and [setWeekYear](https://date-fns.org/docs/setWeekYear)).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n *    on the given locale.\n *\n *    using `en-US` locale: `P` => `MM/dd/yyyy`\n *    using `en-US` locale: `p` => `hh:mm a`\n *    using `pt-BR` locale: `P` => `dd/MM/yyyy`\n *    using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param dateStr - The string to parse\n * @param formatStr - The string of tokens\n * @param referenceDate - defines values missing from the parsed dateString\n * @param options - An object with options.\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @returns The parsed date\n *\n * @throws `options.locale` must contain `match` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n *   locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\n\nexport function parse(dateStr, formatStr, referenceDate, options) {\n  var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n\n  var invalidDate = function invalidDate() {\n    return constructFrom((options === null || options === void 0 ? void 0 : options.in) || referenceDate, NaN);\n  };\n\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  var firstWeekContainsDate = (_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1;\n  var weekStartsOn = (_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0;\n  if (!formatStr) return dateStr ? invalidDate() : toDate(referenceDate, options === null || options === void 0 ? void 0 : options.in);\n  var subFnOptions = {\n    firstWeekContainsDate: firstWeekContainsDate,\n    weekStartsOn: weekStartsOn,\n    locale: locale\n  }; // If timezone isn't specified, it will try to use the context or\n  // the reference date and fallback to the system time zone.\n\n  var setters = [new DateTimezoneSetter(options === null || options === void 0 ? void 0 : options.in, referenceDate)];\n  var tokens = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n    var firstCharacter = substring[0];\n\n    if (firstCharacter in longFormatters) {\n      var longFormatter = longFormatters[firstCharacter];\n      return longFormatter(substring, locale.formatLong);\n    }\n\n    return substring;\n  }).join(\"\").match(formattingTokensRegExp);\n  var usedTokens = [];\n\n  var _iterator = _createForOfIteratorHelper(tokens),\n      _step;\n\n  try {\n    var _loop = function _loop() {\n      var token = _step.value;\n\n      if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(token)) {\n        warnOrThrowProtectedError(token, formatStr, dateStr);\n      }\n\n      if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(token)) {\n        warnOrThrowProtectedError(token, formatStr, dateStr);\n      }\n\n      var firstCharacter = token[0];\n      var parser = parsers[firstCharacter];\n\n      if (parser) {\n        var incompatibleTokens = parser.incompatibleTokens;\n\n        if (Array.isArray(incompatibleTokens)) {\n          var incompatibleToken = usedTokens.find(function (usedToken) {\n            return incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter;\n          });\n\n          if (incompatibleToken) {\n            throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n          }\n        } else if (parser.incompatibleTokens === \"*\" && usedTokens.length > 0) {\n          throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n        }\n\n        usedTokens.push({\n          token: firstCharacter,\n          fullToken: token\n        });\n        var parseResult = parser.run(dateStr, token, locale.match, subFnOptions);\n\n        if (!parseResult) {\n          return {\n            v: invalidDate()\n          };\n        }\n\n        setters.push(parseResult.setter);\n        dateStr = parseResult.rest;\n      } else {\n        if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n          throw new RangeError(\"Format string contains an unescaped latin alphabet character `\" + firstCharacter + \"`\");\n        } // Replace two single quote characters with one single quote character\n\n\n        if (token === \"''\") {\n          token = \"'\";\n        } else if (firstCharacter === \"'\") {\n          token = cleanEscapedString(token);\n        } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n        if (dateStr.indexOf(token) === 0) {\n          dateStr = dateStr.slice(token.length);\n        } else {\n          return {\n            v: invalidDate()\n          };\n        }\n      }\n    };\n\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var _ret = _loop();\n\n      if (_typeof(_ret) === \"object\") return _ret.v;\n    } // Check if the remaining input contains something other than whitespace\n\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) {\n    return invalidDate();\n  }\n\n  var uniquePrioritySetters = setters.map(function (setter) {\n    return setter.priority;\n  }).sort(function (a, b) {\n    return b - a;\n  }).filter(function (priority, index, array) {\n    return array.indexOf(priority) === index;\n  }).map(function (priority) {\n    return setters.filter(function (setter) {\n      return setter.priority === priority;\n    }).sort(function (a, b) {\n      return b.subPriority - a.subPriority;\n    });\n  }).map(function (setterArray) {\n    return setterArray[0];\n  });\n  var date = toDate(referenceDate, options === null || options === void 0 ? void 0 : options.in);\n  if (isNaN(+date)) return invalidDate();\n  var flags = {};\n\n  var _iterator2 = _createForOfIteratorHelper(uniquePrioritySetters),\n      _step2;\n\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var setter = _step2.value;\n\n      if (!setter.validate(date, subFnOptions)) {\n        return invalidDate();\n      }\n\n      var result = setter.set(date, flags, subFnOptions); // Result is tuple (date, flags)\n\n      if (Array.isArray(result)) {\n        date = result[0];\n        Object.assign(flags, result[1]); // Result is date\n      } else {\n        date = result;\n      }\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n\n  return date;\n}\n\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n} // Fallback for modularized imports:\n\n\nexport default parse;","import { millisecondsInHour, millisecondsInMinute } from \"./constants.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link parseISO} function options.\n */\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n * @param options - An object with options\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\n\nexport function parseISO(argument, options) {\n  var _options$additionalDi;\n\n  var invalidDate = function invalidDate() {\n    return constructFrom(options === null || options === void 0 ? void 0 : options.in, NaN);\n  };\n\n  var additionalDigits = (_options$additionalDi = options === null || options === void 0 ? void 0 : options.additionalDigits) !== null && _options$additionalDi !== void 0 ? _options$additionalDi : 2;\n  var dateStrings = splitDateString(argument);\n  var date;\n\n  if (dateStrings.date) {\n    var parseYearResult = parseYear(dateStrings.date, additionalDigits);\n    date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n  }\n\n  if (!date || isNaN(+date)) return invalidDate();\n  var timestamp = +date;\n  var time = 0;\n  var offset;\n\n  if (dateStrings.time) {\n    time = parseTime(dateStrings.time);\n    if (isNaN(time)) return invalidDate();\n  }\n\n  if (dateStrings.timezone) {\n    offset = parseTimezone(dateStrings.timezone);\n    if (isNaN(offset)) return invalidDate();\n  } else {\n    var tmpDate = new Date(timestamp + time);\n    var result = toDate(0, options === null || options === void 0 ? void 0 : options.in);\n    result.setFullYear(tmpDate.getUTCFullYear(), tmpDate.getUTCMonth(), tmpDate.getUTCDate());\n    result.setHours(tmpDate.getUTCHours(), tmpDate.getUTCMinutes(), tmpDate.getUTCSeconds(), tmpDate.getUTCMilliseconds());\n    return result;\n  }\n\n  return toDate(timestamp + time + offset, options === null || options === void 0 ? void 0 : options.in);\n}\nvar patterns = {\n  dateTimeDelimiter: /[T ]/,\n  timeZoneDelimiter: /[Z ]/i,\n  timezone: /([Z+-].*)$/\n};\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n  var dateStrings = {};\n  var array = dateString.split(patterns.dateTimeDelimiter);\n  var timeString; // The regex match should only return at maximum two array elements.\n  // [date], [time], or [date, time].\n\n  if (array.length > 2) {\n    return dateStrings;\n  }\n\n  if (/:/.test(array[0])) {\n    timeString = array[0];\n  } else {\n    dateStrings.date = array[0];\n    timeString = array[1];\n\n    if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n      dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n      timeString = dateString.substr(dateStrings.date.length, dateString.length);\n    }\n  }\n\n  if (timeString) {\n    var token = patterns.timezone.exec(timeString);\n\n    if (token) {\n      dateStrings.time = timeString.replace(token[1], \"\");\n      dateStrings.timezone = token[1];\n    } else {\n      dateStrings.time = timeString;\n    }\n  }\n\n  return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n  var regex = new RegExp(\"^(?:(\\\\d{4}|[+-]\\\\d{\" + (4 + additionalDigits) + \"})|(\\\\d{2}|[+-]\\\\d{\" + (2 + additionalDigits) + \"})$)\");\n  var captures = dateString.match(regex); // Invalid ISO-formatted year\n\n  if (!captures) return {\n    year: NaN,\n    restDateString: \"\"\n  };\n  var year = captures[1] ? parseInt(captures[1]) : null;\n  var century = captures[2] ? parseInt(captures[2]) : null; // either year or century is null, not both\n\n  return {\n    year: century === null ? year : century * 100,\n    restDateString: dateString.slice((captures[1] || captures[2]).length)\n  };\n}\n\nfunction parseDate(dateString, year) {\n  // Invalid ISO-formatted year\n  if (year === null) return new Date(NaN);\n  var captures = dateString.match(dateRegex); // Invalid ISO-formatted string\n\n  if (!captures) return new Date(NaN);\n  var isWeekDate = !!captures[4];\n  var dayOfYear = parseDateUnit(captures[1]);\n  var month = parseDateUnit(captures[2]) - 1;\n  var day = parseDateUnit(captures[3]);\n  var week = parseDateUnit(captures[4]);\n  var dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n  if (isWeekDate) {\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN);\n    }\n\n    return dayOfISOWeekYear(year, week, dayOfWeek);\n  } else {\n    var date = new Date(0);\n\n    if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {\n      return new Date(NaN);\n    }\n\n    date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n    return date;\n  }\n}\n\nfunction parseDateUnit(value) {\n  return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n  var captures = timeString.match(timeRegex);\n  if (!captures) return NaN; // Invalid ISO-formatted time\n\n  var hours = parseTimeUnit(captures[1]);\n  var minutes = parseTimeUnit(captures[2]);\n  var seconds = parseTimeUnit(captures[3]);\n\n  if (!validateTime(hours, minutes, seconds)) {\n    return NaN;\n  }\n\n  return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000;\n}\n\nfunction parseTimeUnit(value) {\n  return value && parseFloat(value.replace(\",\", \".\")) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n  if (timezoneString === \"Z\") return 0;\n  var captures = timezoneString.match(timezoneRegex);\n  if (!captures) return 0;\n  var sign = captures[1] === \"+\" ? -1 : 1;\n  var hours = parseInt(captures[2]);\n  var minutes = captures[3] && parseInt(captures[3]) || 0;\n\n  if (!validateTimezone(hours, minutes)) {\n    return NaN;\n  }\n\n  return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  var date = new Date(0);\n  date.setUTCFullYear(isoWeekYear, 0, 4);\n  var fourthOfJanuaryDay = date.getUTCDay() || 7;\n  var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n} // Validation functions\n// February is null to handle the leap year (using ||)\n\n\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\n\nfunction validateDate(year, month, date) {\n  return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n  return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n  return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n  if (hours === 24) {\n    return minutes === 0 && seconds === 0;\n  }\n\n  return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;\n}\n\nfunction validateTimezone(_hours, minutes) {\n  return minutes >= 0 && minutes <= 59;\n} // Fallback for modularized imports:\n\n\nexport default parseISO;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n  return value instanceof Date || _typeof(value) === \"object\" && Object.prototype.toString.call(value) === \"[object Date]\";\n} // Fallback for modularized imports:\n\nexport default isDate;","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\n\nexport function isValid(date) {\n  return !(!isDate(date) && typeof date !== \"number\" || isNaN(+toDate(date)));\n} // Fallback for modularized imports:\n\nexport default isValid;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport { constructFrom } from \"../constructFrom.js\";\nexport function normalizeDates(context) {\n  for (var _len = arguments.length, dates = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    dates[_key - 1] = arguments[_key];\n  }\n\n  var normalize = constructFrom.bind(null, context || dates.find(function (date) {\n    return _typeof(date) === \"object\";\n  }));\n  return dates.map(normalize);\n}","import { toDate } from \"./toDate.js\";\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\n\nexport function startOfDay(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  _date.setHours(0, 0, 0, 0);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default startOfDay;","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\n\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n  var _normalizeDates = normalizeDates(options === null || options === void 0 ? void 0 : options.in, laterDate, earlierDate),\n      _normalizeDates2 = _slicedToArray(_normalizeDates, 2),\n      laterDate_ = _normalizeDates2[0],\n      earlierDate_ = _normalizeDates2[1];\n\n  var laterStartOfDay = startOfDay(laterDate_);\n  var earlierStartOfDay = startOfDay(earlierDate_);\n  var laterTimestamp = +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n  var earlierTimestamp = +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay); // Round the number of days to the nearest integer because the number of\n  // milliseconds in a day is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n\n  return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n} // Fallback for modularized imports:\n\nexport default differenceInCalendarDays;","import { toDate } from \"./toDate.js\";\n/**\n * The {@link startOfYear} function options.\n */\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\n\nexport function startOfYear(date, options) {\n  var date_ = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n  date_.setFullYear(date_.getFullYear(), 0, 1);\n  date_.setHours(0, 0, 0, 0);\n  return date_;\n} // Fallback for modularized imports:\n\nexport default startOfYear;","import { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { startOfYear } from \"./startOfYear.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link getDayOfYear} function options.\n */\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\n\nexport function getDayOfYear(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  var diff = differenceInCalendarDays(_date, startOfYear(_date));\n  var dayOfYear = diff + 1;\n  return dayOfYear;\n} // Fallback for modularized imports:\n\nexport default getDayOfYear;","export function addLeadingZeros(number, targetLength) {\n  var sign = number < 0 ? \"-\" : \"\";\n  var output = Math.abs(number).toString().padStart(targetLength, \"0\");\n  return sign + output;\n}","import { addLeadingZeros } from \"../addLeadingZeros.js\";\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* |                                |\n * |  d  | Day of month                   |  D  |                                |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  m  | Minute                         |  M  | Month                          |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  y  | Year (abs)                     |  Y  |                                |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport var lightFormatters = {\n  // Year\n  y: function y(date, token) {\n    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n    // |----------|-------|----|-------|-------|-------|\n    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n    var signedYear = date.getFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n    var year = signedYear > 0 ? signedYear : 1 - signedYear;\n    return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n  },\n  // Month\n  M: function M(date, token) {\n    var month = date.getMonth();\n    return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n  },\n  // Day of the month\n  d: function d(date, token) {\n    return addLeadingZeros(date.getDate(), token.length);\n  },\n  // AM or PM\n  a: function a(date, token) {\n    var dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n        return dayPeriodEnumValue.toUpperCase();\n\n      case \"aaa\":\n        return dayPeriodEnumValue;\n\n      case \"aaaaa\":\n        return dayPeriodEnumValue[0];\n\n      case \"aaaa\":\n      default:\n        return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n    }\n  },\n  // Hour [1-12]\n  h: function h(date, token) {\n    return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n  },\n  // Hour [0-23]\n  H: function H(date, token) {\n    return addLeadingZeros(date.getHours(), token.length);\n  },\n  // Minute\n  m: function m(date, token) {\n    return addLeadingZeros(date.getMinutes(), token.length);\n  },\n  // Second\n  s: function s(date, token) {\n    return addLeadingZeros(date.getSeconds(), token.length);\n  },\n  // Fraction of second\n  S: function S(date, token) {\n    var numberOfDigits = token.length;\n    var milliseconds = date.getMilliseconds();\n    var fractionalSeconds = Math.trunc(milliseconds * Math.pow(10, numberOfDigits - 3));\n    return addLeadingZeros(fractionalSeconds, token.length);\n  }\n};","import { getDayOfYear } from \"../../getDayOfYear.js\";\nimport { getISOWeek } from \"../../getISOWeek.js\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.js\";\nimport { getWeek } from \"../../getWeek.js\";\nimport { getWeekYear } from \"../../getWeekYear.js\";\nimport { addLeadingZeros } from \"../addLeadingZeros.js\";\nimport { lightFormatters } from \"./lightFormatters.js\";\nvar dayPeriodEnum = {\n  am: \"am\",\n  pm: \"pm\",\n  midnight: \"midnight\",\n  noon: \"noon\",\n  morning: \"morning\",\n  afternoon: \"afternoon\",\n  evening: \"evening\",\n  night: \"night\"\n};\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |\n * |  p! | Long localized time            |  P! | Long localized date            |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport var formatters = {\n  // Era\n  G: function G(date, token, localize) {\n    var era = date.getFullYear() > 0 ? 1 : 0;\n\n    switch (token) {\n      // AD, BC\n      case \"G\":\n      case \"GG\":\n      case \"GGG\":\n        return localize.era(era, {\n          width: \"abbreviated\"\n        });\n      // A, B\n\n      case \"GGGGG\":\n        return localize.era(era, {\n          width: \"narrow\"\n        });\n      // Anno Domini, Before Christ\n\n      case \"GGGG\":\n      default:\n        return localize.era(era, {\n          width: \"wide\"\n        });\n    }\n  },\n  // Year\n  y: function y(date, token, localize) {\n    // Ordinal number\n    if (token === \"yo\") {\n      var signedYear = date.getFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n      var year = signedYear > 0 ? signedYear : 1 - signedYear;\n      return localize.ordinalNumber(year, {\n        unit: \"year\"\n      });\n    }\n\n    return lightFormatters.y(date, token);\n  },\n  // Local week-numbering year\n  Y: function Y(date, token, localize, options) {\n    var signedWeekYear = getWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n    var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year\n\n    if (token === \"YY\") {\n      var twoDigitYear = weekYear % 100;\n      return addLeadingZeros(twoDigitYear, 2);\n    } // Ordinal number\n\n\n    if (token === \"Yo\") {\n      return localize.ordinalNumber(weekYear, {\n        unit: \"year\"\n      });\n    } // Padding\n\n\n    return addLeadingZeros(weekYear, token.length);\n  },\n  // ISO week-numbering year\n  R: function R(date, token) {\n    var isoWeekYear = getISOWeekYear(date); // Padding\n\n    return addLeadingZeros(isoWeekYear, token.length);\n  },\n  // Extended year. This is a single number designating the year of this calendar system.\n  // The main difference between `y` and `u` localizers are B.C. years:\n  // | Year | `y` | `u` |\n  // |------|-----|-----|\n  // | AC 1 |   1 |   1 |\n  // | BC 1 |   1 |   0 |\n  // | BC 2 |   2 |  -1 |\n  // Also `yy` always returns the last two digits of a year,\n  // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n  u: function u(date, token) {\n    var year = date.getFullYear();\n    return addLeadingZeros(year, token.length);\n  },\n  // Quarter\n  Q: function Q(date, token, localize) {\n    var quarter = Math.ceil((date.getMonth() + 1) / 3);\n\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"Q\":\n        return String(quarter);\n      // 01, 02, 03, 04\n\n      case \"QQ\":\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n\n      case \"Qo\":\n        return localize.ordinalNumber(quarter, {\n          unit: \"quarter\"\n        });\n      // Q1, Q2, Q3, Q4\n\n      case \"QQQ\":\n        return localize.quarter(quarter, {\n          width: \"abbreviated\",\n          context: \"formatting\"\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n      case \"QQQQQ\":\n        return localize.quarter(quarter, {\n          width: \"narrow\",\n          context: \"formatting\"\n        });\n      // 1st quarter, 2nd quarter, ...\n\n      case \"QQQQ\":\n      default:\n        return localize.quarter(quarter, {\n          width: \"wide\",\n          context: \"formatting\"\n        });\n    }\n  },\n  // Stand-alone quarter\n  q: function q(date, token, localize) {\n    var quarter = Math.ceil((date.getMonth() + 1) / 3);\n\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"q\":\n        return String(quarter);\n      // 01, 02, 03, 04\n\n      case \"qq\":\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n\n      case \"qo\":\n        return localize.ordinalNumber(quarter, {\n          unit: \"quarter\"\n        });\n      // Q1, Q2, Q3, Q4\n\n      case \"qqq\":\n        return localize.quarter(quarter, {\n          width: \"abbreviated\",\n          context: \"standalone\"\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n      case \"qqqqq\":\n        return localize.quarter(quarter, {\n          width: \"narrow\",\n          context: \"standalone\"\n        });\n      // 1st quarter, 2nd quarter, ...\n\n      case \"qqqq\":\n      default:\n        return localize.quarter(quarter, {\n          width: \"wide\",\n          context: \"standalone\"\n        });\n    }\n  },\n  // Month\n  M: function M(date, token, localize) {\n    var month = date.getMonth();\n\n    switch (token) {\n      case \"M\":\n      case \"MM\":\n        return lightFormatters.M(date, token);\n      // 1st, 2nd, ..., 12th\n\n      case \"Mo\":\n        return localize.ordinalNumber(month + 1, {\n          unit: \"month\"\n        });\n      // Jan, Feb, ..., Dec\n\n      case \"MMM\":\n        return localize.month(month, {\n          width: \"abbreviated\",\n          context: \"formatting\"\n        });\n      // J, F, ..., D\n\n      case \"MMMMM\":\n        return localize.month(month, {\n          width: \"narrow\",\n          context: \"formatting\"\n        });\n      // January, February, ..., December\n\n      case \"MMMM\":\n      default:\n        return localize.month(month, {\n          width: \"wide\",\n          context: \"formatting\"\n        });\n    }\n  },\n  // Stand-alone month\n  L: function L(date, token, localize) {\n    var month = date.getMonth();\n\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"L\":\n        return String(month + 1);\n      // 01, 02, ..., 12\n\n      case \"LL\":\n        return addLeadingZeros(month + 1, 2);\n      // 1st, 2nd, ..., 12th\n\n      case \"Lo\":\n        return localize.ordinalNumber(month + 1, {\n          unit: \"month\"\n        });\n      // Jan, Feb, ..., Dec\n\n      case \"LLL\":\n        return localize.month(month, {\n          width: \"abbreviated\",\n          context: \"standalone\"\n        });\n      // J, F, ..., D\n\n      case \"LLLLL\":\n        return localize.month(month, {\n          width: \"narrow\",\n          context: \"standalone\"\n        });\n      // January, February, ..., December\n\n      case \"LLLL\":\n      default:\n        return localize.month(month, {\n          width: \"wide\",\n          context: \"standalone\"\n        });\n    }\n  },\n  // Local week of year\n  w: function w(date, token, localize, options) {\n    var week = getWeek(date, options);\n\n    if (token === \"wo\") {\n      return localize.ordinalNumber(week, {\n        unit: \"week\"\n      });\n    }\n\n    return addLeadingZeros(week, token.length);\n  },\n  // ISO week of year\n  I: function I(date, token, localize) {\n    var isoWeek = getISOWeek(date);\n\n    if (token === \"Io\") {\n      return localize.ordinalNumber(isoWeek, {\n        unit: \"week\"\n      });\n    }\n\n    return addLeadingZeros(isoWeek, token.length);\n  },\n  // Day of the month\n  d: function d(date, token, localize) {\n    if (token === \"do\") {\n      return localize.ordinalNumber(date.getDate(), {\n        unit: \"date\"\n      });\n    }\n\n    return lightFormatters.d(date, token);\n  },\n  // Day of year\n  D: function D(date, token, localize) {\n    var dayOfYear = getDayOfYear(date);\n\n    if (token === \"Do\") {\n      return localize.ordinalNumber(dayOfYear, {\n        unit: \"dayOfYear\"\n      });\n    }\n\n    return addLeadingZeros(dayOfYear, token.length);\n  },\n  // Day of week\n  E: function E(date, token, localize) {\n    var dayOfWeek = date.getDay();\n\n    switch (token) {\n      // Tue\n      case \"E\":\n      case \"EE\":\n      case \"EEE\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\"\n        });\n      // T\n\n      case \"EEEEE\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\"\n        });\n      // Tu\n\n      case \"EEEEEE\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\"\n        });\n      // Tuesday\n\n      case \"EEEE\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\"\n        });\n    }\n  },\n  // Local day of week\n  e: function e(date, token, localize, options) {\n    var dayOfWeek = date.getDay();\n    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n    switch (token) {\n      // Numerical value (Nth day of week with current locale or weekStartsOn)\n      case \"e\":\n        return String(localDayOfWeek);\n      // Padded numerical value\n\n      case \"ee\":\n        return addLeadingZeros(localDayOfWeek, 2);\n      // 1st, 2nd, ..., 7th\n\n      case \"eo\":\n        return localize.ordinalNumber(localDayOfWeek, {\n          unit: \"day\"\n        });\n\n      case \"eee\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\"\n        });\n      // T\n\n      case \"eeeee\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\"\n        });\n      // Tu\n\n      case \"eeeeee\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\"\n        });\n      // Tuesday\n\n      case \"eeee\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\"\n        });\n    }\n  },\n  // Stand-alone local day of week\n  c: function c(date, token, localize, options) {\n    var dayOfWeek = date.getDay();\n    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n    switch (token) {\n      // Numerical value (same as in `e`)\n      case \"c\":\n        return String(localDayOfWeek);\n      // Padded numerical value\n\n      case \"cc\":\n        return addLeadingZeros(localDayOfWeek, token.length);\n      // 1st, 2nd, ..., 7th\n\n      case \"co\":\n        return localize.ordinalNumber(localDayOfWeek, {\n          unit: \"day\"\n        });\n\n      case \"ccc\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"standalone\"\n        });\n      // T\n\n      case \"ccccc\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"standalone\"\n        });\n      // Tu\n\n      case \"cccccc\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"standalone\"\n        });\n      // Tuesday\n\n      case \"cccc\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"standalone\"\n        });\n    }\n  },\n  // ISO day of week\n  i: function i(date, token, localize) {\n    var dayOfWeek = date.getDay();\n    var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n\n    switch (token) {\n      // 2\n      case \"i\":\n        return String(isoDayOfWeek);\n      // 02\n\n      case \"ii\":\n        return addLeadingZeros(isoDayOfWeek, token.length);\n      // 2nd\n\n      case \"io\":\n        return localize.ordinalNumber(isoDayOfWeek, {\n          unit: \"day\"\n        });\n      // Tue\n\n      case \"iii\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\"\n        });\n      // T\n\n      case \"iiiii\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\"\n        });\n      // Tu\n\n      case \"iiiiii\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\"\n        });\n      // Tuesday\n\n      case \"iiii\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\"\n        });\n    }\n  },\n  // AM or PM\n  a: function a(date, token, localize) {\n    var hours = date.getHours();\n    var dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\"\n        });\n\n      case \"aaa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\"\n        }).toLowerCase();\n\n      case \"aaaaa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\"\n        });\n\n      case \"aaaa\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\"\n        });\n    }\n  },\n  // AM, PM, midnight, noon\n  b: function b(date, token, localize) {\n    var hours = date.getHours();\n    var dayPeriodEnumValue;\n\n    if (hours === 12) {\n      dayPeriodEnumValue = dayPeriodEnum.noon;\n    } else if (hours === 0) {\n      dayPeriodEnumValue = dayPeriodEnum.midnight;\n    } else {\n      dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n    }\n\n    switch (token) {\n      case \"b\":\n      case \"bb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\"\n        });\n\n      case \"bbb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\"\n        }).toLowerCase();\n\n      case \"bbbbb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\"\n        });\n\n      case \"bbbb\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\"\n        });\n    }\n  },\n  // in the morning, in the afternoon, in the evening, at night\n  B: function B(date, token, localize) {\n    var hours = date.getHours();\n    var dayPeriodEnumValue;\n\n    if (hours >= 17) {\n      dayPeriodEnumValue = dayPeriodEnum.evening;\n    } else if (hours >= 12) {\n      dayPeriodEnumValue = dayPeriodEnum.afternoon;\n    } else if (hours >= 4) {\n      dayPeriodEnumValue = dayPeriodEnum.morning;\n    } else {\n      dayPeriodEnumValue = dayPeriodEnum.night;\n    }\n\n    switch (token) {\n      case \"B\":\n      case \"BB\":\n      case \"BBB\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\"\n        });\n\n      case \"BBBBB\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\"\n        });\n\n      case \"BBBB\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\"\n        });\n    }\n  },\n  // Hour [1-12]\n  h: function h(date, token, localize) {\n    if (token === \"ho\") {\n      var hours = date.getHours() % 12;\n      if (hours === 0) hours = 12;\n      return localize.ordinalNumber(hours, {\n        unit: \"hour\"\n      });\n    }\n\n    return lightFormatters.h(date, token);\n  },\n  // Hour [0-23]\n  H: function H(date, token, localize) {\n    if (token === \"Ho\") {\n      return localize.ordinalNumber(date.getHours(), {\n        unit: \"hour\"\n      });\n    }\n\n    return lightFormatters.H(date, token);\n  },\n  // Hour [0-11]\n  K: function K(date, token, localize) {\n    var hours = date.getHours() % 12;\n\n    if (token === \"Ko\") {\n      return localize.ordinalNumber(hours, {\n        unit: \"hour\"\n      });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n  // Hour [1-24]\n  k: function k(date, token, localize) {\n    var hours = date.getHours();\n    if (hours === 0) hours = 24;\n\n    if (token === \"ko\") {\n      return localize.ordinalNumber(hours, {\n        unit: \"hour\"\n      });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n  // Minute\n  m: function m(date, token, localize) {\n    if (token === \"mo\") {\n      return localize.ordinalNumber(date.getMinutes(), {\n        unit: \"minute\"\n      });\n    }\n\n    return lightFormatters.m(date, token);\n  },\n  // Second\n  s: function s(date, token, localize) {\n    if (token === \"so\") {\n      return localize.ordinalNumber(date.getSeconds(), {\n        unit: \"second\"\n      });\n    }\n\n    return lightFormatters.s(date, token);\n  },\n  // Fraction of second\n  S: function S(date, token) {\n    return lightFormatters.S(date, token);\n  },\n  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n  X: function X(date, token, _localize) {\n    var timezoneOffset = date.getTimezoneOffset();\n\n    if (timezoneOffset === 0) {\n      return \"Z\";\n    }\n\n    switch (token) {\n      // Hours and optional minutes\n      case \"X\":\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XX`\n\n      case \"XXXX\":\n      case \"XX\":\n        // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XXX`\n\n      case \"XXXXX\":\n      case \"XXX\": // Hours and minutes with `:` delimiter\n\n      default:\n        return formatTimezone(timezoneOffset, \":\");\n    }\n  },\n  // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n  x: function x(date, token, _localize) {\n    var timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Hours and optional minutes\n      case \"x\":\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xx`\n\n      case \"xxxx\":\n      case \"xx\":\n        // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xxx`\n\n      case \"xxxxx\":\n      case \"xxx\": // Hours and minutes with `:` delimiter\n\n      default:\n        return formatTimezone(timezoneOffset, \":\");\n    }\n  },\n  // Timezone (GMT)\n  O: function O(date, token, _localize) {\n    var timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case \"O\":\n      case \"OO\":\n      case \"OOO\":\n        return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n      // Long\n\n      case \"OOOO\":\n      default:\n        return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n    }\n  },\n  // Timezone (specific non-location)\n  z: function z(date, token, _localize) {\n    var timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case \"z\":\n      case \"zz\":\n      case \"zzz\":\n        return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n      // Long\n\n      case \"zzzz\":\n      default:\n        return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n    }\n  },\n  // Seconds timestamp\n  t: function t(date, token, _localize) {\n    var timestamp = Math.trunc(+date / 1000);\n    return addLeadingZeros(timestamp, token.length);\n  },\n  // Milliseconds timestamp\n  T: function T(date, token, _localize) {\n    return addLeadingZeros(+date, token.length);\n  }\n};\n\nfunction formatTimezoneShort(offset) {\n  var delimiter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n  var sign = offset > 0 ? \"-\" : \"+\";\n  var absOffset = Math.abs(offset);\n  var hours = Math.trunc(absOffset / 60);\n  var minutes = absOffset % 60;\n\n  if (minutes === 0) {\n    return sign + String(hours);\n  }\n\n  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n  if (offset % 60 === 0) {\n    var sign = offset > 0 ? \"-\" : \"+\";\n    return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n  }\n\n  return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset) {\n  var delimiter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n  var sign = offset > 0 ? \"-\" : \"+\";\n  var absOffset = Math.abs(offset);\n  var hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n  var minutes = addLeadingZeros(absOffset % 60, 2);\n  return sign + hours + delimiter + minutes;\n}","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { formatters } from \"./_lib/format/formatters.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, warnOrThrowProtectedError } from \"./_lib/protectedTokens.js\";\nimport { isValid } from \"./isValid.js\";\nimport { toDate } from \"./toDate.js\"; // Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\n\nexport { formatters, longFormatters }; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\nexport { format as formatDate };\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era                             | G..GGG  | AD, BC                            |       |\n * |                                 | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 | GGGGG   | A, B                              |       |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | yo      | 44th, 1st, 0th, 17th              | 5,7   |\n * |                                 | yy      | 44, 01, 00, 17                    | 5     |\n * |                                 | yyy     | 044, 001, 1900, 2017              | 5     |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            | 5     |\n * |                                 | yyyyy   | ...                               | 3,5   |\n * | Local week-numbering year       | Y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | Yo      | 44th, 1st, 1900th, 2017th         | 5,7   |\n * |                                 | YY      | 44, 01, 00, 17                    | 5,8   |\n * |                                 | YYY     | 044, 001, 1900, 2017              | 5     |\n * |                                 | YYYY    | 0044, 0001, 1900, 2017            | 5,8   |\n * |                                 | YYYYY   | ...                               | 3,5   |\n * | ISO week-numbering year         | R       | -43, 0, 1, 1900, 2017             | 5,7   |\n * |                                 | RR      | -43, 00, 01, 1900, 2017           | 5,7   |\n * |                                 | RRR     | -043, 000, 001, 1900, 2017        | 5,7   |\n * |                                 | RRRR    | -0043, 0000, 0001, 1900, 2017     | 5,7   |\n * |                                 | RRRRR   | ...                               | 3,5,7 |\n * | Extended year                   | u       | -43, 0, 1, 1900, 2017             | 5     |\n * |                                 | uu      | -43, 01, 1900, 2017               | 5     |\n * |                                 | uuu     | -043, 001, 1900, 2017             | 5     |\n * |                                 | uuuu    | -0043, 0001, 1900, 2017           | 5     |\n * |                                 | uuuuu   | ...                               | 3,5   |\n * | Quarter (formatting)            | Q       | 1, 2, 3, 4                        |       |\n * |                                 | Qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | QQ      | 01, 02, 03, 04                    |       |\n * |                                 | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | q       | 1, 2, 3, 4                        |       |\n * |                                 | qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | qq      | 01, 02, 03, 04                    |       |\n * |                                 | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | qqqqq   | 1, 2, 3, 4                        | 4     |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |       |\n * |                                 | Mo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | MM      | 01, 02, ..., 12                   |       |\n * |                                 | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 | MMMM    | January, February, ..., December  | 2     |\n * |                                 | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | L       | 1, 2, ..., 12                     |       |\n * |                                 | Lo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | LL      | 01, 02, ..., 12                   |       |\n * |                                 | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 | LLLL    | January, February, ..., December  | 2     |\n * |                                 | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | w       | 1, 2, ..., 53                     |       |\n * |                                 | wo      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | I       | 1, 2, ..., 53                     | 7     |\n * |                                 | Io      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | II      | 01, 02, ..., 53                   | 7     |\n * | Day of month                    | d       | 1, 2, ..., 31                     |       |\n * |                                 | do      | 1st, 2nd, ..., 31st               | 7     |\n * |                                 | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     | D       | 1, 2, ..., 365, 366               | 9     |\n * |                                 | Do      | 1st, 2nd, ..., 365th, 366th       | 7     |\n * |                                 | DD      | 01, 02, ..., 365, 366             | 9     |\n * |                                 | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 | DDDD    | ...                               | 3     |\n * | Day of week (formatting)        | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    | i       | 1, 2, 3, ..., 7                   | 7     |\n * |                                 | io      | 1st, 2nd, ..., 7th                | 7     |\n * |                                 | ii      | 01, 02, ..., 07                   | 7     |\n * |                                 | iii     | Mon, Tue, Wed, ..., Sun           | 7     |\n * |                                 | iiii    | Monday, Tuesday, ..., Sunday      | 2,7   |\n * |                                 | iiiii   | M, T, W, T, F, S, S               | 7     |\n * |                                 | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 7     |\n * | Local day of week (formatting)  | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 | eo      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | ee      | 02, 03, ..., 01                   |       |\n * |                                 | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 | co      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | cc      | 02, 03, ..., 01                   |       |\n * |                                 | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          | a..aa   | AM, PM                            |       |\n * |                                 | aaa     | am, pm                            |       |\n * |                                 | aaaa    | a.m., p.m.                        | 2     |\n * |                                 | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          | b..bb   | AM, PM, noon, midnight            |       |\n * |                                 | bbb     | am, pm, noon, midnight            |       |\n * |                                 | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             | B..BBB  | at night, in the morning, ...     |       |\n * |                                 | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 | ho      | 1st, 2nd, ..., 11th, 12th         | 7     |\n * |                                 | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 | Ho      | 0th, 1st, 2nd, ..., 23rd          | 7     |\n * |                                 | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 | Ko      | 1st, 2nd, ..., 11th, 0th          | 7     |\n * |                                 | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 | ko      | 24th, 1st, 2nd, ..., 23rd         | 7     |\n * |                                 | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          | m       | 0, 1, ..., 59                     |       |\n * |                                 | mo      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | mm      | 00, 01, ..., 59                   |       |\n * | Second                          | s       | 0, 1, ..., 59                     |       |\n * |                                 | so      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | ss      | 00, 01, ..., 59                   |       |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |       |\n * |                                 | SS      | 00, 01, ..., 99                   |       |\n * |                                 | SSS     | 000, 001, ..., 999                |       |\n * |                                 | SSSS    | ...                               | 3     |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |       |\n * |                                 | XX      | -0800, +0530, Z                   |       |\n * |                                 | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |       |\n * |                                 | xx      | -0800, +0530, +0000               |       |\n * |                                 | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Timezone (GMT)                  | O...OOO | GMT-8, GMT+5:30, GMT+0            |       |\n * |                                 | OOOO    | GMT-08:00, GMT+05:30, GMT+00:00   | 2     |\n * | Timezone (specific non-locat.)  | z...zzz | GMT-8, GMT+5:30, GMT+0            | 6     |\n * |                                 | zzzz    | GMT-08:00, GMT+05:30, GMT+00:00   | 2,6   |\n * | Seconds timestamp               | t       | 512969520                         | 7     |\n * |                                 | tt      | ...                               | 3,7   |\n * | Milliseconds timestamp          | T       | 512969520900                      | 7     |\n * |                                 | TT      | ...                               | 3,7   |\n * | Long localized date             | P       | 04/29/1453                        | 7     |\n * |                                 | PP      | Apr 29, 1453                      | 7     |\n * |                                 | PPP     | April 29th, 1453                  | 7     |\n * |                                 | PPPP    | Friday, April 29th, 1453          | 2,7   |\n * | Long localized time             | p       | 12:00 AM                          | 7     |\n * |                                 | pp      | 12:00:00 AM                       | 7     |\n * |                                 | ppp     | 12:00:00 AM GMT+2                 | 7     |\n * |                                 | pppp    | 12:00:00 AM GMT+02:00             | 2,7   |\n * | Combination of date and time    | Pp      | 04/29/1453, 12:00 AM              | 7     |\n * |                                 | PPpp    | Apr 29, 1453, 12:00:00 AM         | 7     |\n * |                                 | PPPppp  | April 29th, 1453 at ...           | 7     |\n * |                                 | PPPPpppp| Friday, April 29th, 1453 at ...   | 2,7   |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n *    the output will be the same as default pattern for this unit, usually\n *    the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n *    are marked with \"2\" in the last column of the table.\n *\n *    `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n *    The output will be padded with zeros to match the length of the pattern.\n *\n *    `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` always returns the last two digits of a year,\n *    while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n *    | Year | `yy` | `uu` |\n *    |------|------|------|\n *    | 1    |   01 |   01 |\n *    | 14   |   14 |   14 |\n *    | 376  |   76 |  376 |\n *    | 1453 |   53 | 1453 |\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n *    and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n *    so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `t`: seconds timestamp\n *    - `T`: milliseconds timestamp\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n *   locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport function format(date, formatStr, options) {\n  var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;\n\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  var firstWeekContainsDate = (_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1;\n  var weekStartsOn = (_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0;\n  var originalDate = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  if (!isValid(originalDate)) {\n    throw new RangeError(\"Invalid time value\");\n  }\n\n  var parts = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n    var firstCharacter = substring[0];\n\n    if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n      var longFormatter = longFormatters[firstCharacter];\n      return longFormatter(substring, locale.formatLong);\n    }\n\n    return substring;\n  }).join(\"\").match(formattingTokensRegExp).map(function (substring) {\n    // Replace two single quote characters with one single quote character\n    if (substring === \"''\") {\n      return {\n        isToken: false,\n        value: \"'\"\n      };\n    }\n\n    var firstCharacter = substring[0];\n\n    if (firstCharacter === \"'\") {\n      return {\n        isToken: false,\n        value: cleanEscapedString(substring)\n      };\n    }\n\n    if (formatters[firstCharacter]) {\n      return {\n        isToken: true,\n        value: substring\n      };\n    }\n\n    if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n      throw new RangeError(\"Format string contains an unescaped latin alphabet character `\" + firstCharacter + \"`\");\n    }\n\n    return {\n      isToken: false,\n      value: substring\n    };\n  }); // invoke localize preprocessor (only for french locales at the moment)\n\n  if (locale.localize.preprocessor) {\n    parts = locale.localize.preprocessor(originalDate, parts);\n  }\n\n  var formatterOptions = {\n    firstWeekContainsDate: firstWeekContainsDate,\n    weekStartsOn: weekStartsOn,\n    locale: locale\n  };\n  return parts.map(function (part) {\n    if (!part.isToken) return part.value;\n    var token = part.value;\n\n    if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(token) || !(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(token)) {\n      warnOrThrowProtectedError(token, formatStr, String(date));\n    }\n\n    var formatter = formatters[token[0]];\n    return formatter(originalDate, token, locale.localize, formatterOptions);\n  }).join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n  var matched = input.match(escapedStringRegExp);\n\n  if (!matched) {\n    return input;\n  }\n\n  return matched[1].replace(doubleQuoteRegExp, \"'\");\n} // Fallback for modularized imports:\n\n\nexport default format;","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link addMilliseconds} function options.\n */\n\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of milliseconds to be added.\n * @param options - The options object\n *\n * @returns The new date with the milliseconds added\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\n\nexport function addMilliseconds(date, amount, options) {\n  return constructFrom((options === null || options === void 0 ? void 0 : options.in) || date, +toDate(date) + amount);\n} // Fallback for modularized imports:\n\nexport default addMilliseconds;","import { addMilliseconds } from \"./addMilliseconds.js\";\n/**\n * The {@link addSeconds} function options.\n */\n\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of seconds to be added.\n * @param options - An object with options\n *\n * @returns The new date with the seconds added\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\n\nexport function addSeconds(date, amount, options) {\n  return addMilliseconds(date, amount * 1000, options);\n} // Fallback for modularized imports:\n\nexport default addSeconds;","import { millisecondsInMinute } from \"./constants.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link addMinutes} function options.\n */\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of minutes to be added.\n * @param options - An object with options\n *\n * @returns The new date with the minutes added\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\n\nexport function addMinutes(date, amount, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  _date.setTime(_date.getTime() + amount * millisecondsInMinute);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default addMinutes;","import { addMilliseconds } from \"./addMilliseconds.js\";\nimport { millisecondsInHour } from \"./constants.js\";\n/**\n * The {@link addHours} function options.\n */\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of hours to be added\n * @param options - An object with options\n *\n * @returns The new date with the hours added\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\n\nexport function addHours(date, amount, options) {\n  return addMilliseconds(date, amount * millisecondsInHour, options);\n} // Fallback for modularized imports:\n\nexport default addHours;","import { addDays } from \"./addDays.js\";\n/**\n * The {@link addWeeks} function options.\n */\n\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of weeks to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of weeks to be added.\n * @param options - An object with options\n *\n * @returns The new date with the weeks added\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * const result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\n\nexport function addWeeks(date, amount, options) {\n  return addDays(date, amount * 7, options);\n} // Fallback for modularized imports:\n\nexport default addWeeks;","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link addMonths} function options.\n */\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be added.\n * @param options - The options object\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\n\nexport function addMonths(date, amount, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  if (isNaN(amount)) return constructFrom((options === null || options === void 0 ? void 0 : options.in) || date, NaN);\n\n  if (!amount) {\n    // If 0 months, no-op to avoid changing times in the hour before end of DST\n    return _date;\n  }\n\n  var dayOfMonth = _date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for\n  // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n  // new Date(2020, 13, 1) returns 1 Feb 2021.  This is *almost* the behavior we\n  // want except that dates will wrap around the end of a month, meaning that\n  // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n  // we'll default to the end of the desired month by adding 1 to the desired\n  // month and using a date of 0 to back up one day to the end of the desired\n  // month.\n\n\n  var endOfDesiredMonth = constructFrom((options === null || options === void 0 ? void 0 : options.in) || date, _date.getTime());\n  endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n  var daysInMonth = endOfDesiredMonth.getDate();\n\n  if (dayOfMonth >= daysInMonth) {\n    // If we're already at the end of the month, then this is the correct date\n    // and we're done.\n    return endOfDesiredMonth;\n  } else {\n    // Otherwise, we now know that setting the original day-of-month value won't\n    // cause an overflow, so set the desired day-of-month. Note that we can't\n    // just set the date of `endOfDesiredMonth` because that object may have had\n    // its time changed in the unusual case where where a DST transition was on\n    // the last day of the month and its local time was in the hour skipped or\n    // repeated next to a DST transition.  So we use `date` instead which is\n    // guaranteed to still have the original time.\n    _date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n\n    return _date;\n  }\n} // Fallback for modularized imports:\n\nexport default addMonths;","import { addMonths } from \"./addMonths.js\";\n/**\n * The {@link addQuarters} function options.\n */\n\n/**\n * @name addQuarters\n * @category Quarter Helpers\n * @summary Add the specified number of year quarters to the given date.\n *\n * @description\n * Add the specified number of year quarters to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of quarters to be added.\n * @param options - An object with options\n *\n * @returns The new date with the quarters added\n *\n * @example\n * // Add 1 quarter to 1 September 2014:\n * const result = addQuarters(new Date(2014, 8, 1), 1)\n * //=; Mon Dec 01 2014 00:00:00\n */\n\nexport function addQuarters(date, amount, options) {\n  return addMonths(date, amount * 3, options);\n} // Fallback for modularized imports:\n\nexport default addQuarters;","import { addMonths } from \"./addMonths.js\";\n/**\n * The {@link addYears} function options.\n */\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be added.\n * @param options - The options\n *\n * @returns The new date with the years added\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\n\nexport function addYears(date, amount, options) {\n  return addMonths(date, amount * 12, options);\n} // Fallback for modularized imports:\n\nexport default addYears;","import { toDate } from \"./toDate.js\";\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n *\n * @returns The number of milliseconds\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n *   new Date(2014, 6, 2, 12, 30, 21, 700),\n *   new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\n\nexport function differenceInMilliseconds(laterDate, earlierDate) {\n  return +toDate(laterDate) - +toDate(earlierDate);\n} // Fallback for modularized imports:\n\nexport default differenceInMilliseconds;","export function getRoundingMethod(method) {\n  return function (number) {\n    var round = method ? Math[method] : Math.trunc;\n    var result = round(number); // Prevent negative zero\n\n    return result === 0 ? 0 : result;\n  };\n}","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { differenceInMilliseconds } from \"./differenceInMilliseconds.js\";\n/**\n * The {@link differenceInSeconds} function options.\n */\n\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of seconds\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n *   new Date(2014, 6, 2, 12, 30, 20, 0),\n *   new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\n\nexport function differenceInSeconds(laterDate, earlierDate, options) {\n  var diff = differenceInMilliseconds(laterDate, earlierDate) / 1000;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n} // Fallback for modularized imports:\n\nexport default differenceInSeconds;","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { millisecondsInMinute } from \"./constants.js\";\nimport { differenceInMilliseconds } from \"./differenceInMilliseconds.js\";\n/**\n * The {@link differenceInMinutes} function options.\n */\n\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the signed number of full (rounded towards 0) minutes between the given dates.\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of minutes\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * const result = differenceInMinutes(\n *   new Date(2014, 6, 2, 12, 20, 0),\n *   new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n *\n * @example\n * // How many minutes are between 10:01:59 and 10:00:00\n * const result = differenceInMinutes(\n *   new Date(2000, 0, 1, 10, 0, 0),\n *   new Date(2000, 0, 1, 10, 1, 59)\n * )\n * //=> -1\n */\n\nexport function differenceInMinutes(dateLeft, dateRight, options) {\n  var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInMinute;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n} // Fallback for modularized imports:\n\nexport default differenceInMinutes;","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInHour } from \"./constants.js\";\n/**\n * The {@link differenceInHours} function options.\n */\n\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of hours\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * const result = differenceInHours(\n *   new Date(2014, 6, 2, 19, 0),\n *   new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\n\nexport function differenceInHours(laterDate, earlierDate, options) {\n  var _normalizeDates = normalizeDates(options === null || options === void 0 ? void 0 : options.in, laterDate, earlierDate),\n      _normalizeDates2 = _slicedToArray(_normalizeDates, 2),\n      laterDate_ = _normalizeDates2[0],\n      earlierDate_ = _normalizeDates2[1];\n\n  var diff = (+laterDate_ - +earlierDate_) / millisecondsInHour;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n} // Fallback for modularized imports:\n\nexport default differenceInHours;","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\n/**\n * The {@link differenceInDays} function options.\n */\n\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.trunc(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full days according to the local timezone\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n *\n * @example\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n *   new Date(2020, 5, 1),\n *   new Date(2020, 2, 1)\n * )\n * //=> 92\n */\n\nexport function differenceInDays(laterDate, earlierDate, options) {\n  var _normalizeDates = normalizeDates(options === null || options === void 0 ? void 0 : options.in, laterDate, earlierDate),\n      _normalizeDates2 = _slicedToArray(_normalizeDates, 2),\n      laterDate_ = _normalizeDates2[0],\n      earlierDate_ = _normalizeDates2[1];\n\n  var sign = compareLocalAsc(laterDate_, earlierDate_);\n  var difference = Math.abs(differenceInCalendarDays(laterDate_, earlierDate_));\n  laterDate_.setDate(laterDate_.getDate() - sign * difference); // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n  // If so, result must be decreased by 1 in absolute value\n\n  var isLastDayNotFull = Number(compareLocalAsc(laterDate_, earlierDate_) === -sign);\n  var result = sign * (difference - isLastDayNotFull); // Prevent negative zero\n\n  return result === 0 ? 0 : result;\n} // Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\n\nfunction compareLocalAsc(laterDate, earlierDate) {\n  var diff = laterDate.getFullYear() - earlierDate.getFullYear() || laterDate.getMonth() - earlierDate.getMonth() || laterDate.getDate() - earlierDate.getDate() || laterDate.getHours() - earlierDate.getHours() || laterDate.getMinutes() - earlierDate.getMinutes() || laterDate.getSeconds() - earlierDate.getSeconds() || laterDate.getMilliseconds() - earlierDate.getMilliseconds();\n  if (diff < 0) return -1;\n  if (diff > 0) return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n\n  return diff;\n} // Fallback for modularized imports:\n\n\nexport default differenceInDays;","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { differenceInDays } from \"./differenceInDays.js\";\n/**\n * The {@link differenceInWeeks} function options.\n */\n\n/**\n * @name differenceInWeeks\n * @category Week Helpers\n * @summary Get the number of full weeks between the given dates.\n *\n * @description\n * Get the number of full weeks between two dates. Fractional weeks are\n * truncated towards zero by default.\n *\n * One \"full week\" is the distance between a local time in one day to the same\n * local time 7 days earlier or later. A full week can sometimes be less than\n * or more than 7*24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 7*24-hour periods, use this instead:\n * `Math.trunc(differenceInHours(dateLeft, dateRight)/(7*24))|0`.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full weeks\n *\n * @example\n * // How many full weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))\n * //=> 2\n *\n * @example\n * // How many full weeks are between\n * // 1 March 2020 0:00 and 6 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 8 weeks (54 days),\n * // even if DST starts and the period has\n * // only 54*24-1 hours.\n * const result = differenceInWeeks(\n *   new Date(2020, 5, 1),\n *   new Date(2020, 2, 6)\n * )\n * //=> 8\n */\n\nexport function differenceInWeeks(laterDate, earlierDate, options) {\n  var diff = differenceInDays(laterDate, earlierDate, options) / 7;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n} // Fallback for modularized imports:\n\nexport default differenceInWeeks;","import { toDate } from \"./toDate.js\";\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * @param dateLeft - The first date to compare\n * @param dateRight - The second date to compare\n *\n * @returns The result of the comparison\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n *   new Date(1995, 6, 2),\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * //   Wed Feb 11 1987 00:00:00,\n * //   Mon Jul 10 1989 00:00:00,\n * //   Sun Jul 02 1995 00:00:00\n * // ]\n */\n\nexport function compareAsc(dateLeft, dateRight) {\n  var diff = +toDate(dateLeft) - +toDate(dateRight);\n  if (diff < 0) return -1;else if (diff > 0) return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n\n  return diff;\n} // Fallback for modularized imports:\n\nexport default compareAsc;","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\n/**\n * The {@link differenceInCalendarMonths} function options.\n */\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of calendar months\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n *   new Date(2014, 8, 1),\n *   new Date(2014, 0, 31)\n * )\n * //=> 8\n */\n\nexport function differenceInCalendarMonths(laterDate, earlierDate, options) {\n  var _normalizeDates = normalizeDates(options === null || options === void 0 ? void 0 : options.in, laterDate, earlierDate),\n      _normalizeDates2 = _slicedToArray(_normalizeDates, 2),\n      laterDate_ = _normalizeDates2[0],\n      earlierDate_ = _normalizeDates2[1];\n\n  var yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear();\n  var monthsDiff = laterDate_.getMonth() - earlierDate_.getMonth();\n  return yearsDiff * 12 + monthsDiff;\n} // Fallback for modularized imports:\n\nexport default differenceInCalendarMonths;","import { toDate } from \"./toDate.js\";\n/**\n * The {@link endOfDay} function options.\n */\n\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a day\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\n\nexport function endOfDay(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  _date.setHours(23, 59, 59, 999);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default endOfDay;","import { toDate } from \"./toDate.js\";\n/**\n * The {@link endOfMonth} function options.\n */\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a month\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\n\nexport function endOfMonth(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  var month = _date.getMonth();\n\n  _date.setFullYear(_date.getFullYear(), month + 1, 0);\n\n  _date.setHours(23, 59, 59, 999);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default endOfMonth;","import { endOfDay } from \"./endOfDay.js\";\nimport { endOfMonth } from \"./endOfMonth.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * @param date - The date to check\n * @param options - An object with options\n *\n * @returns The date is the last day of a month\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * const result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\n\nexport function isLastDayOfMonth(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  return +endOfDay(_date, options) === +endOfMonth(_date, options);\n} // Fallback for modularized imports:\n\nexport default isLastDayOfMonth;","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { compareAsc } from \"./compareAsc.js\";\nimport { differenceInCalendarMonths } from \"./differenceInCalendarMonths.js\";\nimport { isLastDayOfMonth } from \"./isLastDayOfMonth.js\";\n/**\n * The {@link differenceInMonths} function options.\n */\n\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full months\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\n\nexport function differenceInMonths(laterDate, earlierDate, options) {\n  var _normalizeDates = normalizeDates(options === null || options === void 0 ? void 0 : options.in, laterDate, laterDate, earlierDate),\n      _normalizeDates2 = _slicedToArray(_normalizeDates, 3),\n      laterDate_ = _normalizeDates2[0],\n      workingLaterDate = _normalizeDates2[1],\n      earlierDate_ = _normalizeDates2[2];\n\n  var sign = compareAsc(workingLaterDate, earlierDate_);\n  var difference = Math.abs(differenceInCalendarMonths(workingLaterDate, earlierDate_));\n  if (difference < 1) return 0;\n  if (workingLaterDate.getMonth() === 1 && workingLaterDate.getDate() > 27) workingLaterDate.setDate(30);\n  workingLaterDate.setMonth(workingLaterDate.getMonth() - sign * difference);\n  var isLastMonthNotFull = compareAsc(workingLaterDate, earlierDate_) === -sign;\n\n  if (isLastDayOfMonth(laterDate_) && difference === 1 && compareAsc(laterDate_, earlierDate_) === 1) {\n    isLastMonthNotFull = false;\n  }\n\n  var result = sign * (difference - +isLastMonthNotFull);\n  return result === 0 ? 0 : result;\n} // Fallback for modularized imports:\n\nexport default differenceInMonths;","import { getRoundingMethod } from \"./_lib/getRoundingMethod.js\";\nimport { differenceInMonths } from \"./differenceInMonths.js\";\n/**\n * The {@link differenceInQuarters} function options.\n */\n\n/**\n * @name differenceInQuarters\n * @category Quarter Helpers\n * @summary Get the number of quarters between the given dates.\n *\n * @description\n * Get the number of quarters between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of full quarters\n *\n * @example\n * // How many full quarters are between 31 December 2013 and 2 July 2014?\n * const result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))\n * //=> 2\n */\n\nexport function differenceInQuarters(laterDate, earlierDate, options) {\n  var diff = differenceInMonths(laterDate, earlierDate, options) / 3;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n} // Fallback for modularized imports:\n\nexport default differenceInQuarters;","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\n/**\n * The {@link differenceInCalendarYears} function options.\n */\n\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n\n * @returns The number of calendar years\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInCalendarYears(\n *   new Date(2015, 1, 11),\n *   new Date(2013, 11, 31)\n * );\n * //=> 2\n */\n\nexport function differenceInCalendarYears(laterDate, earlierDate, options) {\n  var _normalizeDates = normalizeDates(options === null || options === void 0 ? void 0 : options.in, laterDate, earlierDate),\n      _normalizeDates2 = _slicedToArray(_normalizeDates, 2),\n      laterDate_ = _normalizeDates2[0],\n      earlierDate_ = _normalizeDates2[1];\n\n  return laterDate_.getFullYear() - earlierDate_.getFullYear();\n} // Fallback for modularized imports:\n\nexport default differenceInCalendarYears;","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { compareAsc } from \"./compareAsc.js\";\nimport { differenceInCalendarYears } from \"./differenceInCalendarYears.js\";\n/**\n * The {@link differenceInYears} function options.\n */\n\n/**\n * @name differenceInYears\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full years\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))\n * //=> 1\n */\n\nexport function differenceInYears(laterDate, earlierDate, options) {\n  var _normalizeDates = normalizeDates(options === null || options === void 0 ? void 0 : options.in, laterDate, earlierDate),\n      _normalizeDates2 = _slicedToArray(_normalizeDates, 2),\n      laterDate_ = _normalizeDates2[0],\n      earlierDate_ = _normalizeDates2[1]; // -1 if the left date is earlier than the right date\n  // 2023-12-31 - 2024-01-01 = -1\n\n\n  var sign = compareAsc(laterDate_, earlierDate_); // First calculate the difference in calendar years\n  // 2024-01-01 - 2023-12-31 = 1 year\n\n  var diff = Math.abs(differenceInCalendarYears(laterDate_, earlierDate_)); // Now we need to calculate if the difference is full. To do that we set\n  // both dates to the same year and check if the both date's month and day\n  // form a full year.\n\n  laterDate_.setFullYear(1584);\n  earlierDate_.setFullYear(1584); // For it to be true, when the later date is indeed later than the earlier date\n  // (2026-02-01 - 2023-12-10 = 3 years), the difference is full if\n  // the normalized later date is also later than the normalized earlier date.\n  // In our example, 1584-02-01 is earlier than 1584-12-10, so the difference\n  // is partial, hence we need to subtract 1 from the difference 3 - 1 = 2.\n\n  var partial = compareAsc(laterDate_, earlierDate_) === -sign;\n  var result = sign * (diff - +partial); // Prevent negative zero\n\n  return result === 0 ? 0 : result;\n} // Fallback for modularized imports:\n\nexport default differenceInYears;","import { toDate } from \"./toDate.js\";\n/**\n * The {@link startOfSecond} function options.\n */\n\n/**\n * @name startOfSecond\n * @category Second Helpers\n * @summary Return the start of a second for the given date.\n *\n * @description\n * Return the start of a second for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a second\n *\n * @example\n * // The start of a second for 1 December 2014 22:15:45.400:\n * const result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.000\n */\n\nexport function startOfSecond(date, options) {\n  var date_ = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n  date_.setMilliseconds(0);\n  return date_;\n} // Fallback for modularized imports:\n\nexport default startOfSecond;","import { toDate } from \"./toDate.js\";\n/**\n * The {@link startOfMinute} function options.\n */\n\n/**\n * @name startOfMinute\n * @category Minute Helpers\n * @summary Return the start of a minute for the given date.\n *\n * @description\n * Return the start of a minute for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a minute\n *\n * @example\n * // The start of a minute for 1 December 2014 22:15:45.400:\n * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:00\n */\n\nexport function startOfMinute(date, options) {\n  var date_ = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n  date_.setSeconds(0, 0);\n  return date_;\n} // Fallback for modularized imports:\n\nexport default startOfMinute;","import { toDate } from \"./toDate.js\";\n/**\n * The {@link startOfHour} function options.\n */\n\n/**\n * @name startOfHour\n * @category Hour Helpers\n * @summary Return the start of an hour for the given date.\n *\n * @description\n * Return the start of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an hour\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * const result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\n\nexport function startOfHour(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  _date.setMinutes(0, 0, 0);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default startOfHour;","import { toDate } from \"./toDate.js\";\n/**\n * The {@link startOfMonth} function options.\n */\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date. The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments.\n * Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed,\n * or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a month\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport function startOfMonth(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  _date.setDate(1);\n\n  _date.setHours(0, 0, 0, 0);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default startOfMonth;","import { toDate } from \"./toDate.js\";\n/**\n * The {@link startOfQuarter} function options.\n */\n\n/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a quarter\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * const result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\n\nexport function startOfQuarter(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  var currentMonth = _date.getMonth();\n\n  var month = currentMonth - currentMonth % 3;\n\n  _date.setMonth(month, 1);\n\n  _date.setHours(0, 0, 0, 0);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default startOfQuarter;","import { toDate } from \"./toDate.js\";\n/**\n * The {@link endOfSecond} function options.\n */\n\n/**\n * @name endOfSecond\n * @category Second Helpers\n * @summary Return the end of a second for the given date.\n *\n * @description\n * Return the end of a second for the given date.\n * The result will be in the local timezone if no `in` option is specified.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a second\n *\n * @example\n * // The end of a second for 1 December 2014 22:15:45.400:\n * const result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.999\n */\n\nexport function endOfSecond(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  _date.setMilliseconds(999);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default endOfSecond;","import { toDate } from \"./toDate.js\";\n/**\n * The {@link endOfMinute} function options.\n */\n\n/**\n * @name endOfMinute\n * @category Minute Helpers\n * @summary Return the end of a minute for the given date.\n *\n * @description\n * Return the end of a minute for the given date.\n * The result will be in the local timezone or the provided context.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a minute\n *\n * @example\n * // The end of a minute for 1 December 2014 22:15:45.400:\n * const result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:59.999\n */\n\nexport function endOfMinute(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  _date.setSeconds(59, 999);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default endOfMinute;","import { toDate } from \"./toDate.js\";\n/**\n * The {@link endOfHour} function options.\n */\n\n/**\n * @name endOfHour\n * @category Hour Helpers\n * @summary Return the end of an hour for the given date.\n *\n * @description\n * Return the end of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of an hour\n *\n * @example\n * // The end of an hour for 2 September 2014 11:55:00:\n * const result = endOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:59:59.999\n */\n\nexport function endOfHour(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  _date.setMinutes(59, 59, 999);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default endOfHour;","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n/**\n * The {@link endOfWeek} function options.\n */\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a week\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\n\nexport function endOfWeek(date, options) {\n  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n\n  var defaultOptions = getDefaultOptions();\n  var weekStartsOn = (_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0;\n\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  var day = _date.getDay();\n\n  var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n\n  _date.setDate(_date.getDate() + diff);\n\n  _date.setHours(23, 59, 59, 999);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default endOfWeek;","import { toDate } from \"./toDate.js\";\n/**\n * The {@link endOfQuarter} function options.\n */\n\n/**\n * @name endOfQuarter\n * @category Quarter Helpers\n * @summary Return the end of a year quarter for the given date.\n *\n * @description\n * Return the end of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a quarter\n *\n * @example\n * // The end of a quarter for 2 September 2014 11:55:00:\n * const result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\n\nexport function endOfQuarter(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  var currentMonth = _date.getMonth();\n\n  var month = currentMonth - currentMonth % 3 + 3;\n\n  _date.setMonth(month, 0);\n\n  _date.setHours(23, 59, 59, 999);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default endOfQuarter;","import { toDate } from \"./toDate.js\";\n/**\n * The {@link endOfYear} function options.\n */\n\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The end of a year\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * const result = endOfYear(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\n\nexport function endOfYear(date, options) {\n  var _date = toDate(date, options === null || options === void 0 ? void 0 : options.in);\n\n  var year = _date.getFullYear();\n\n  _date.setFullYear(year + 1, 0, 0);\n\n  _date.setHours(23, 59, 59, 999);\n\n  return _date;\n} // Fallback for modularized imports:\n\nexport default endOfYear;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * chartjs-adapter-date-fns v3.0.0\n * https://www.chartjs.org\n * (c) 2022 chartjs-adapter-date-fns Contributors\n * Released under the MIT license\n */\nimport { _adapters } from 'chart.js';\nimport { toDate, parse as _parse, parseISO, isValid, format as _format, addYears, addQuarters, addMonths, addWeeks, addDays, addHours, addMinutes, addSeconds, addMilliseconds, differenceInYears, differenceInQuarters, differenceInMonths, differenceInWeeks, differenceInDays, differenceInHours, differenceInMinutes, differenceInSeconds, differenceInMilliseconds, startOfYear, startOfQuarter, startOfMonth, startOfWeek, startOfDay, startOfHour, startOfMinute, startOfSecond, endOfYear, endOfQuarter, endOfMonth, endOfWeek, endOfDay, endOfHour, endOfMinute, endOfSecond } from 'date-fns';\nvar FORMATS = {\n  datetime: 'MMM d, yyyy, h:mm:ss aaaa',\n  millisecond: 'h:mm:ss.SSS aaaa',\n  second: 'h:mm:ss aaaa',\n  minute: 'h:mm aaaa',\n  hour: 'ha',\n  day: 'MMM d',\n  week: 'PP',\n  month: 'MMM yyyy',\n  quarter: 'qqq - yyyy',\n  year: 'yyyy'\n};\n\n_adapters._date.override({\n  _id: 'date-fns',\n  // DEBUG\n  formats: function formats() {\n    return FORMATS;\n  },\n  parse: function parse(value, fmt) {\n    if (value === null || typeof value === 'undefined') {\n      return null;\n    }\n\n    var type = _typeof(value);\n\n    if (type === 'number' || value instanceof Date) {\n      value = toDate(value);\n    } else if (type === 'string') {\n      if (typeof fmt === 'string') {\n        value = _parse(value, fmt, new Date(), this.options);\n      } else {\n        value = parseISO(value, this.options);\n      }\n    }\n\n    return isValid(value) ? value.getTime() : null;\n  },\n  format: function format(time, fmt) {\n    return _format(time, fmt, this.options);\n  },\n  add: function add(time, amount, unit) {\n    switch (unit) {\n      case 'millisecond':\n        return addMilliseconds(time, amount);\n\n      case 'second':\n        return addSeconds(time, amount);\n\n      case 'minute':\n        return addMinutes(time, amount);\n\n      case 'hour':\n        return addHours(time, amount);\n\n      case 'day':\n        return addDays(time, amount);\n\n      case 'week':\n        return addWeeks(time, amount);\n\n      case 'month':\n        return addMonths(time, amount);\n\n      case 'quarter':\n        return addQuarters(time, amount);\n\n      case 'year':\n        return addYears(time, amount);\n\n      default:\n        return time;\n    }\n  },\n  diff: function diff(max, min, unit) {\n    switch (unit) {\n      case 'millisecond':\n        return differenceInMilliseconds(max, min);\n\n      case 'second':\n        return differenceInSeconds(max, min);\n\n      case 'minute':\n        return differenceInMinutes(max, min);\n\n      case 'hour':\n        return differenceInHours(max, min);\n\n      case 'day':\n        return differenceInDays(max, min);\n\n      case 'week':\n        return differenceInWeeks(max, min);\n\n      case 'month':\n        return differenceInMonths(max, min);\n\n      case 'quarter':\n        return differenceInQuarters(max, min);\n\n      case 'year':\n        return differenceInYears(max, min);\n\n      default:\n        return 0;\n    }\n  },\n  startOf: function startOf(time, unit, weekday) {\n    switch (unit) {\n      case 'second':\n        return startOfSecond(time);\n\n      case 'minute':\n        return startOfMinute(time);\n\n      case 'hour':\n        return startOfHour(time);\n\n      case 'day':\n        return startOfDay(time);\n\n      case 'week':\n        return startOfWeek(time);\n\n      case 'isoWeek':\n        return startOfWeek(time, {\n          weekStartsOn: +weekday\n        });\n\n      case 'month':\n        return startOfMonth(time);\n\n      case 'quarter':\n        return startOfQuarter(time);\n\n      case 'year':\n        return startOfYear(time);\n\n      default:\n        return time;\n    }\n  },\n  endOf: function endOf(time, unit) {\n    switch (unit) {\n      case 'second':\n        return endOfSecond(time);\n\n      case 'minute':\n        return endOfMinute(time);\n\n      case 'hour':\n        return endOfHour(time);\n\n      case 'day':\n        return endOfDay(time);\n\n      case 'week':\n        return endOfWeek(time);\n\n      case 'month':\n        return endOfMonth(time);\n\n      case 'quarter':\n        return endOfQuarter(time);\n\n      case 'year':\n        return endOfYear(time);\n\n      default:\n        return time;\n    }\n  }\n});","import Chartkick from \"chartkick\";\nimport Chart from \"chart.js/auto\";\nimport \"chartjs-adapter-date-fns\";\nChartkick.use(Chart);","import { Application } from '@hotwired/stimulus'\n\nconst application = Application.start()\n\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus = application\n\nexport { application }\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  static target = ['input']\n\n  connect() {\n    this.settings = {\n      plugins: {\n        remove_button: {\n          title: 'Dieses Element entfernen',\n        },\n      },\n    }\n\n    this.initializeByClass()\n  }\n\n  inputTargetConnected(el) {\n    if (el.dataset.disableRemoval === 'true') {\n      this.settings.plugins = {}\n    }\n\n    new TomSelect(el, this.settings)\n  }\n\n  initializeByClass() {\n    document.querySelectorAll('.tom-select').forEach((el) => {\n      if (el.dataset.disableRemoval === 'true') {\n        this.settings.plugins = {}\n      }\n\n      new TomSelect(el, this.settings)\n    })\n  }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport { Tooltip } from 'bootstrap'\n\nexport default class extends Controller {\n  connect() {\n    var tooltipTriggerList = [].slice.call(\n      document.querySelectorAll('[data-bs-toggle=\"tooltip\"]')\n    )\n    var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {\n      return new Tooltip(tooltipTriggerEl)\n    })\n  }\n\n  disconnect() {\n    // Optional: Tooltips aufräumen wenn Controller disconnected wird\n    var tooltips = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'))\n    tooltips.forEach(element => {\n      const tooltip = Tooltip.getInstance(element)\n      if (tooltip) {\n        tooltip.dispose()\n      }\n    })\n  }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n  static values = { timeRemaining: Number };\n\n  connect() {\n    this.startCountdown();\n  }\n\n  startCountdown() {\n    this.intervalId = setInterval(() => {\n      this.updateCountdown();\n    }, 1000);\n  }\n\n  disconnect() {\n    clearInterval(this.intervalId);\n  }\n\n  updateCountdown() {\n    if (this.timeRemainingValue > 0) {\n      const minutes = Math.floor(this.timeRemainingValue / 60);\n      const seconds = Math.floor(this.timeRemainingValue % 60);\n      const formattedTime = `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;\n\n      this.element.textContent = formattedTime;\n\n      this.timeRemainingValue -= 1;\n    } else {\n      clearInterval(this.intervalId);\n      this.element.textContent = ''\n    }\n  }\n}\n","import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  static targets = ['info']\n\n  showInfo(event) {\n    this.user_id = event.target.value\n    this.url = \"/users/\" + this.user_id + \"/user_info\"\n    this.sendRequest()\n  }\n\n  sendRequest = () => {\n    fetch(this.url)\n      .then(response =>\n        response.json()\n      )\n      .then((data) => {\n        this.showData(data)\n      })\n  }\n\n  showData(data) {\n    if (data['comment'] != undefined) {\n      this.infoTarget.innerText = data['name'] + \": \" + data['comment'];\n      this.infoTarget.classList.remove('d-none');\n    } else {\n      this.infoTarget.innerText = '';\n      this.infoTarget.classList.add('d-none');\n    }\n  }\n}\n","import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  connect() {\n    if (!this.hasConsent()) {\n      this.showBanner();\n    }\n  }\n\n  hasConsent() {\n    return document.cookie.includes('cookieConsent=true');\n  }\n\n  setConsent() {\n    document.cookie = 'cookieConsent=true; expires=' + this.getCookieExpirationDate() + '; path=/';\n    this.hideBanner();\n  }\n\n  getCookieExpirationDate() {\n    const expirationDate = new Date();\n    expirationDate.setFullYear(expirationDate.getFullYear() + 1);\n    return expirationDate.toUTCString();\n  }\n\n  showBanner() {\n    this.element.innerHTML = `\n      <div class=\"cookie-consent-banner\">\n        Diese Webseite verwendet Cookies, um Ihnen ein optimales Erlebnis zu bieten. Durch die Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. <br>Weitere Informationen finden Sie in unserer Datenschutzerklärung. \n        <div class=\"mt-3\"><button data-action=\"click->cookie-consent#setConsent\" class=\"btn btn-outline-primary mb-3\">Verstanden</button></div>\n      </div>\n    `;\n  }\n\n  hideBanner() {\n    this.element.innerHTML = '';\n  }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport { German } from 'flatpickr/dist/l10n/de'\n\nexport default class extends Controller {\n  static targets = ['items', 'types']\n\n\n  connect() {\n    this.itemsTarget.addEventListener('change', this.fetch_types)\n  }\n\n  fetch_types = () => {\n    fetch('/items/get_types?item_id=' + this.itemsTarget.value)\n      .then((response) => response.json())\n      .then((data) =>\n    {\n      this.typesTarget.value = data\n      this.typesTarget.dispatchEvent(new Event('change'))\n    })\n  }\n}\n","import {Controller} from '@hotwired/stimulus'\nimport {German} from 'flatpickr/dist/l10n/de'\n\nexport default class extends Controller {\n  static targets = ['start', 'startTime', 'end']\n  static values = {\n    withTime: Boolean,\n    format: String,\n    startDate: String,\n    endDate: String,\n    types: String,\n    minDate: String,\n  }\n\n  connect() {\n    if (this.formatValue) {\n      this.options = {dateFormat: this.formatValue}\n    }\n\n    this.startInstance = this.initializeDatePicker(this.startTarget, { minDate: this.minDateValue, ...this.options })\n\n    if (this.hasEndTarget) {\n      this.endInstance = this.initializeDatePicker(this.endTarget, { minDate: this.startInstance.selectedDates[0], ...this.options })\n    }\n    if (this.hasStartTimeTarget) {\n      this.fetchOpeningTimes()\n    }\n\n    if (this.typesValue) {\n      this.fetchDisabledDates()\n      this.startInstance.config.onMonthChange.push(this.fetchDisabledDates)\n    }\n  }\n\n  initializeDatePicker(element, options) {\n    return flatpickr(element, {\n      locale: German,\n      altInput: true,\n      enableTime: false,\n      noCalendar: false,\n      altFormat: 'D, j. F Y',\n      dateFormat: 'd.m.Y',\n      time_24hr: true,\n      minuteIncrement: 15,\n      disableMobile: true,\n      ...options,\n    })\n  }\n\n  toggle(event) {\n    event.target.closest('.input-group').querySelector('.form-control')._flatpickr.toggle()\n  }\n\n  updateEndDate() {\n    this.endInstance.set('minDate', this.startInstance.selectedDates[0])\n  }\n\n  fetchDisabledDates = () => {\n    fetch(\n      '/unavailable_dates/?current_month=' +\n      (this.startInstance.currentMonth + 1) +\n      '&current_year=' +\n      this.startInstance.currentYear +\n      '&type_id=' +\n      this.typesValue\n    )\n      .then((response) => response.json())\n      .then((data) => this.setDisabledDates(data, this.startInstance))\n  }\n\n  fetchOpeningTimes = () => {\n    fetch(\n      '/start_time/?start_date=' +\n      this.startInstance.selectedDates[0] +\n      '&type_id=' +\n      this.typesValue\n    )\n      .then((response) => response.json())\n      .then((data) => this.setTimeRange(data, this.startTimeTarget))\n  }\n\n  setTimeRange(data, target) {\n    let options = {\n      defaultHour: target.value,\n      minTime: data.start_hour + ':' + data.start_minute,\n      maxTime: data.end_hour + ':' + data.end_minute,\n      enableTime: true,\n      noCalendar: true,\n      altFormat: 'H:i',\n      dateFormat: 'H:i',\n    }\n    this.startTimeInstance = this.initializeDatePicker(target, options)\n  }\n\n  setDisabledDates(data, instance) {\n    instance.set('disable', data.unavailable_dates)\n  }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  static targets = ['select', 'individual', 'allVirtualTypes', 'allNonVirtualTypes']\n\n  connect() {\n    this.toggle()\n  }\n\n  toggle() {\n    let shown_element = this.selectTarget.value\n    this.individualTarget.classList.toggle('d-none', shown_element != 'individual')\n    this.allVirtualTypesTarget.classList.toggle('d-none', shown_element != 'all_virtual_types')\n    this.allNonVirtualTypesTarget.classList.toggle('d-none', shown_element != 'all_non_virtual_types')\n  }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  static values = { formId: String }\n\n  connect() {\n    this.element.addEventListener('change', this.submit)\n    this.element.addEventListener('keyup', this.delay)\n  }\n\n  submit = () => {\n    var form = null;\n    if (this.formIdValue) {\n      form = document.getElementById(this.formIdValue)\n    } else {\n      form = this.element.closest('form')\n    }\n\n    if (form) {\n      form.requestSubmit()\n    }\n  }\n\n  delay = () => {\n    clearTimeout(this.timeout)\n    this.timeout = setTimeout(this.submit, 1000)\n  }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nfunction nearestToggleGroup(input) {\n  return input.closest('[data-controller*=toggle-group]')\n}\n\nexport default class extends Controller {\n  static targets = ['toggle']\n\n  connect() {\n    document\n      .querySelectorAll(\n        'select[data-toggle-group], input[data-toggle-group][checked=\"checked\"]'\n      )\n      .forEach((el) => el.dispatchEvent(new Event('change')))\n  }\n\n  toggle(event) {\n    const toggleGroup = event.target.dataset.toggleGroup\n    let value = event.target.value || event.target.dataset.value\n\n    if (event.target.type == 'checkbox' && !event.target.checked) {\n      value = '0'\n    }\n\n    this.toggleTargets\n      .filter((input) => input.dataset.toggleGroup == toggleGroup)\n      .forEach((el, i) => {\n        if (\n          el.dataset.if === value ||\n          (el.dataset.unless !== undefined && el.dataset.unless !== value)\n        ) {\n          el.classList.remove('d-none')\n          for (const input of el.querySelectorAll('input, select, textarea')) {\n            if (nearestToggleGroup(input) !== this.element) continue\n\n            input.disabled = false\n          }\n        } else {\n          el.classList.add('d-none')\n          for (const input of el.querySelectorAll('input, select, textarea')) {\n            if (nearestToggleGroup(input) !== this.element) continue\n\n            input.disabled = true\n          }\n        }\n      })\n\n    if (event.target.dataset.hideOnToggle === 'true') {\n      event.target.classList.add('d-none')\n    }\n  }\n}\n","import {Controller} from '@hotwired/stimulus'\n\n\nexport default class extends Controller {\n  static targets = ['checkbox', 'input', 'hint']\n\n  connect() {\n  }\n\n  toggle(event) {\n    this.hintTarget.classList.toggle('d-none', !this.checkboxTarget.checked)\n    if (this.checkboxTarget.checked) {\n      this.inputTarget.required = false\n      this.inputTarget.disabled = true\n    } else {\n      this.inputTarget.required = true\n      this.inputTarget.disabled = false\n    }\n  }\n}\n","import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  connect() {\n    this.initTomSelect()\n  }\n\n  initTomSelect = () => {\n    let settings = {\n      plugins: {\n        remove_button: {\n          title: 'Dieses Element entfernen',\n        },\n      },\n    }\n\n    if (this.element.dataset.create) {\n      settings.create = true\n    }\n\n    if (this.element.dataset.dropdown) {\n       var yetAnotherObject = {dropdown_input: {}};\n      settings['plugins'] = yetAnotherObject;\n    }\n\n    if (this.element.dataset.duplicates) {\n      settings.duplicates = true\n      settings.hideSelected = false\n    }\n\n    new TomSelect(this.element, settings)\n  }\n}\n","import {Controller} from '@hotwired/stimulus'\nimport {Modal} from 'bootstrap'\n\nexport default class extends Controller {\n  static values = {open: Boolean}\n\n  connect() {\n    this.modal = new Modal(this.element)\n\n    if (this.openValue) {\n      this.modal.show()\n    }\n  }\n}\n","import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  static values = {text: String, title: String, autohide: Boolean, variant: String, onclick: Boolean}\n\n  connect() {\n    this.timeout = this.autohideValue ? 5000 : 0\n    this.onclick = this.onclickValue ? this.onclickValue : false\n\n    if (this.variantValue === 'warning') {\n      toastr.warning(this.textValue, this.titleValue, {timeOut: this.timeout, onclick: this.onclick})\n    } else if (this.variantValue === 'info') {\n      toastr.info(this.textValue, this.titleValue, {timeOut: this.timeout, onclick: this.onclick})\n    } else {\n      toastr.info(this.textValue, this.titleValue, {timeOut: this.timeout, onclick: this.onclick})\n    }\n  }\n}\n","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/*!\n* chartjs-plugin-annotation v3.1.0\n* https://www.chartjs.org/chartjs-plugin-annotation/index\n * (c) 2024 chartjs-plugin-annotation Contributors\n * Released under the MIT License\n */\nimport { Element, DoughnutController, defaults, Animations, Chart } from 'chart.js';\nimport { distanceBetweenPoints, toRadians, isObject, valueOrDefault, defined, isFunction, callback, isArray, toFont, addRoundedRectPath, toTRBLCorners, QUARTER_PI, PI, HALF_PI, TWO_THIRDS_PI, TAU, isNumber, RAD_PER_DEG, toPadding, isFinite, getAngleFromPoint, toDegrees, clipArea, unclipArea } from 'chart.js/helpers';\n/**\n * @typedef { import(\"chart.js\").ChartEvent } ChartEvent\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\nvar interaction = {\n  modes: {\n    /**\n     * Point mode returns all elements that hit test based on the event position\n     * @param {AnnotationElement[]} visibleElements - annotation elements which are visible\n     * @param {ChartEvent} event - the event we are find things at\n     * @return {AnnotationElement[]} - elements that are found\n     */\n    point: function point(visibleElements, event) {\n      return filterElements(visibleElements, event, {\n        intersect: true\n      });\n    },\n\n    /**\n     * Nearest mode returns the element closest to the event position\n     * @param {AnnotationElement[]} visibleElements - annotation elements which are visible\n     * @param {ChartEvent} event - the event we are find things at\n     * @param {Object} options - interaction options to use\n     * @return {AnnotationElement[]} - elements that are found (only 1 element)\n     */\n    nearest: function nearest(visibleElements, event, options) {\n      return getNearestItem(visibleElements, event, options);\n    },\n\n    /**\n     * x mode returns the elements that hit-test at the current x coordinate\n     * @param {AnnotationElement[]} visibleElements - annotation elements which are visible\n     * @param {ChartEvent} event - the event we are find things at\n     * @param {Object} options - interaction options to use\n     * @return {AnnotationElement[]} - elements that are found\n     */\n    x: function x(visibleElements, event, options) {\n      return filterElements(visibleElements, event, {\n        intersect: options.intersect,\n        axis: 'x'\n      });\n    },\n\n    /**\n     * y mode returns the elements that hit-test at the current y coordinate\n     * @param {AnnotationElement[]} visibleElements - annotation elements which are visible\n     * @param {ChartEvent} event - the event we are find things at\n     * @param {Object} options - interaction options to use\n     * @return {AnnotationElement[]} - elements that are found\n     */\n    y: function y(visibleElements, event, options) {\n      return filterElements(visibleElements, event, {\n        intersect: options.intersect,\n        axis: 'y'\n      });\n    }\n  }\n};\n/**\n * Returns all elements that hit test based on the event position\n * @param {AnnotationElement[]} visibleElements - annotation elements which are visible\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found\n */\n\nfunction getElements(visibleElements, event, options) {\n  var mode = interaction.modes[options.mode] || interaction.modes.nearest;\n  return mode(visibleElements, event, options);\n}\n\nfunction inRangeByAxis(element, event, axis) {\n  if (axis !== 'x' && axis !== 'y') {\n    return element.inRange(event.x, event.y, 'x', true) || element.inRange(event.x, event.y, 'y', true);\n  }\n\n  return element.inRange(event.x, event.y, axis, true);\n}\n\nfunction getPointByAxis(event, center, axis) {\n  if (axis === 'x') {\n    return {\n      x: event.x,\n      y: center.y\n    };\n  } else if (axis === 'y') {\n    return {\n      x: center.x,\n      y: event.y\n    };\n  }\n\n  return center;\n}\n\nfunction filterElements(visibleElements, event, options) {\n  return visibleElements.filter(function (element) {\n    return options.intersect ? element.inRange(event.x, event.y) : inRangeByAxis(element, event, options.axis);\n  });\n}\n\nfunction getNearestItem(visibleElements, event, options) {\n  var minDistance = Number.POSITIVE_INFINITY;\n  return filterElements(visibleElements, event, options).reduce(function (nearestItems, element) {\n    var center = element.getCenterPoint();\n    var evenPoint = getPointByAxis(event, center, options.axis);\n    var distance = distanceBetweenPoints(event, evenPoint);\n\n    if (distance < minDistance) {\n      nearestItems = [element];\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      nearestItems.push(element);\n    }\n\n    return nearestItems;\n  }, []).sort(function (a, b) {\n    return a._index - b._index;\n  }).slice(0, 1); // return only the top item;\n}\n/**\n * @typedef {import('chart.js').Point} Point\n */\n\n/**\n * Rotate a `point` relative to `center` point by `angle`\n * @param {Point} point - the point to rotate\n * @param {Point} center - center point for rotation\n * @param {number} angle - angle for rotation, in radians\n * @returns {Point} rotated point\n */\n\n\nfunction rotated(point, center, angle) {\n  var cos = Math.cos(angle);\n  var sin = Math.sin(angle);\n  var cx = center.x;\n  var cy = center.y;\n  return {\n    x: cx + cos * (point.x - cx) - sin * (point.y - cy),\n    y: cy + sin * (point.x - cx) + cos * (point.y - cy)\n  };\n}\n\nvar isOlderPart = function isOlderPart(act, req) {\n  return req > act || act.length > req.length && act.slice(0, req.length) === req;\n};\n/**\n * @typedef { import('chart.js').Point } Point\n * @typedef { import('chart.js').InteractionAxis } InteractionAxis\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\n\nvar EPSILON = 0.001;\n\nvar clamp = function clamp(x, from, to) {\n  return Math.min(to, Math.max(from, x));\n};\n/**\n * @param {{value: number, start: number, end: number}} limit\n * @param {number} hitSize\n * @returns {boolean}\n */\n\n\nvar inLimit = function inLimit(limit, hitSize) {\n  return limit.value >= limit.start - hitSize && limit.value <= limit.end + hitSize;\n};\n/**\n * @param {Object} obj\n * @param {number} from\n * @param {number} to\n * @returns {Object}\n */\n\n\nfunction clampAll(obj, from, to) {\n  for (var _i = 0, _Object$keys = Object.keys(obj); _i < _Object$keys.length; _i++) {\n    var key = _Object$keys[_i];\n    obj[key] = clamp(obj[key], from, to);\n  }\n\n  return obj;\n}\n/**\n * @param {Point} point\n * @param {Point} center\n * @param {number} radius\n * @param {number} hitSize\n * @returns {boolean}\n */\n\n\nfunction inPointRange(point, center, radius, hitSize) {\n  if (!point || !center || radius <= 0) {\n    return false;\n  }\n\n  return Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2) <= Math.pow(radius + hitSize, 2);\n}\n/**\n * @param {Point} point\n * @param {{x: number, y: number, x2: number, y2: number}} rect\n * @param {InteractionAxis} axis\n * @param {{borderWidth: number, hitTolerance: number}} hitsize\n * @returns {boolean}\n */\n\n\nfunction inBoxRange(point, _ref, axis, _ref2) {\n  var x = _ref.x,\n      y = _ref.y,\n      x2 = _ref.x2,\n      y2 = _ref.y2;\n  var borderWidth = _ref2.borderWidth,\n      hitTolerance = _ref2.hitTolerance;\n  var hitSize = (borderWidth + hitTolerance) / 2;\n  var inRangeX = point.x >= x - hitSize - EPSILON && point.x <= x2 + hitSize + EPSILON;\n  var inRangeY = point.y >= y - hitSize - EPSILON && point.y <= y2 + hitSize + EPSILON;\n\n  if (axis === 'x') {\n    return inRangeX;\n  } else if (axis === 'y') {\n    return inRangeY;\n  }\n\n  return inRangeX && inRangeY;\n}\n/**\n * @param {Point} point\n * @param {rect: {x: number, y: number, x2: number, y2: number}, center: {x: number, y: number}} element\n * @param {InteractionAxis} axis\n * @param {{rotation: number, borderWidth: number, hitTolerance: number}}\n * @returns {boolean}\n */\n\n\nfunction inLabelRange(point, _ref3, axis, _ref4) {\n  var rect = _ref3.rect,\n      center = _ref3.center;\n  var rotation = _ref4.rotation,\n      borderWidth = _ref4.borderWidth,\n      hitTolerance = _ref4.hitTolerance;\n  var rotPoint = rotated(point, center, toRadians(-rotation));\n  return inBoxRange(rotPoint, rect, axis, {\n    borderWidth: borderWidth,\n    hitTolerance: hitTolerance\n  });\n}\n/**\n * @param {AnnotationElement} element\n * @param {boolean} useFinalPosition\n * @returns {Point}\n */\n\n\nfunction getElementCenterPoint(element, useFinalPosition) {\n  var _element$getProps = element.getProps(['centerX', 'centerY'], useFinalPosition),\n      centerX = _element$getProps.centerX,\n      centerY = _element$getProps.centerY;\n\n  return {\n    x: centerX,\n    y: centerY\n  };\n}\n/**\n * @param {string} pkg\n * @param {string} min\n * @param {string} ver\n * @param {boolean} [strict=true]\n * @returns {boolean}\n */\n\n\nfunction requireVersion(pkg, min, ver) {\n  var strict = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n  var parts = ver.split('.');\n  var i = 0;\n\n  var _iterator = _createForOfIteratorHelper(min.split('.')),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var req = _step.value;\n      var act = parts[i++];\n\n      if (parseInt(req, 10) < parseInt(act, 10)) {\n        break;\n      }\n\n      if (isOlderPart(act, req)) {\n        if (strict) {\n          throw new Error(\"\".concat(pkg, \" v\").concat(ver, \" is not supported. v\").concat(min, \" or newer is required.\"));\n        } else {\n          return false;\n        }\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  return true;\n}\n\nvar isPercentString = function isPercentString(s) {\n  return typeof s === 'string' && s.endsWith('%');\n};\n\nvar toPercent = function toPercent(s) {\n  return parseFloat(s) / 100;\n};\n\nvar toPositivePercent = function toPositivePercent(s) {\n  return clamp(toPercent(s), 0, 1);\n};\n\nvar boxAppering = function boxAppering(x, y) {\n  return {\n    x: x,\n    y: y,\n    x2: x,\n    y2: y,\n    width: 0,\n    height: 0\n  };\n};\n\nvar defaultInitAnimation = {\n  box: function box(properties) {\n    return boxAppering(properties.centerX, properties.centerY);\n  },\n  doughnutLabel: function doughnutLabel(properties) {\n    return boxAppering(properties.centerX, properties.centerY);\n  },\n  ellipse: function ellipse(properties) {\n    return {\n      centerX: properties.centerX,\n      centerY: properties.centerX,\n      radius: 0,\n      width: 0,\n      height: 0\n    };\n  },\n  label: function label(properties) {\n    return boxAppering(properties.centerX, properties.centerY);\n  },\n  line: function line(properties) {\n    return boxAppering(properties.x, properties.y);\n  },\n  point: function point(properties) {\n    return {\n      centerX: properties.centerX,\n      centerY: properties.centerY,\n      radius: 0,\n      width: 0,\n      height: 0\n    };\n  },\n  polygon: function polygon(properties) {\n    return boxAppering(properties.centerX, properties.centerY);\n  }\n};\n/**\n * @typedef { import('chart.js').FontSpec } FontSpec\n * @typedef { import('chart.js').Point } Point\n * @typedef { import('chart.js').Padding } Padding\n * @typedef { import('../../types/element').AnnotationBoxModel } AnnotationBoxModel\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n * @typedef { import('../../types/options').AnnotationPointCoordinates } AnnotationPointCoordinates\n * @typedef { import('../../types/label').CoreLabelOptions } CoreLabelOptions\n * @typedef { import('../../types/label').LabelPositionObject } LabelPositionObject\n */\n\n/**\n * @param {number} size\n * @param {number|string} position\n * @returns {number}\n */\n\nfunction getRelativePosition(size, position) {\n  if (position === 'start') {\n    return 0;\n  }\n\n  if (position === 'end') {\n    return size;\n  }\n\n  if (isPercentString(position)) {\n    return toPositivePercent(position) * size;\n  }\n\n  return size / 2;\n}\n/**\n * @param {number} size\n * @param {number|string} value\n * @param {boolean} [positivePercent=true]\n * @returns {number}\n */\n\n\nfunction getSize(size, value) {\n  var positivePercent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n  if (typeof value === 'number') {\n    return value;\n  } else if (isPercentString(value)) {\n    return (positivePercent ? toPositivePercent(value) : toPercent(value)) * size;\n  }\n\n  return size;\n}\n/**\n * @param {{x: number, width: number}} size\n * @param {CoreLabelOptions} options\n * @returns {number}\n */\n\n\nfunction calculateTextAlignment(size, options) {\n  var x = size.x,\n      width = size.width;\n  var textAlign = options.textAlign;\n\n  if (textAlign === 'center') {\n    return x + width / 2;\n  } else if (textAlign === 'end' || textAlign === 'right') {\n    return x + width;\n  }\n\n  return x;\n}\n/**\n * @param {Point} point\n * @param {{height: number, width: number}} labelSize\n * @param {{borderWidth: number, position: {LabelPositionObject|string}, xAdjust: number, yAdjust: number}} options\n * @param {Padding|undefined} padding\n * @returns {{x: number, y: number, x2: number, y2: number, height: number, width: number, centerX: number, centerY: number}}\n */\n\n\nfunction measureLabelRectangle(point, labelSize, _ref5, padding) {\n  var borderWidth = _ref5.borderWidth,\n      position = _ref5.position,\n      xAdjust = _ref5.xAdjust,\n      yAdjust = _ref5.yAdjust;\n  var hasPadding = isObject(padding);\n  var width = labelSize.width + (hasPadding ? padding.width : 0) + borderWidth;\n  var height = labelSize.height + (hasPadding ? padding.height : 0) + borderWidth;\n  var positionObj = toPosition(position);\n  var x = calculateLabelPosition$1(point.x, width, xAdjust, positionObj.x);\n  var y = calculateLabelPosition$1(point.y, height, yAdjust, positionObj.y);\n  return {\n    x: x,\n    y: y,\n    x2: x + width,\n    y2: y + height,\n    width: width,\n    height: height,\n    centerX: x + width / 2,\n    centerY: y + height / 2\n  };\n}\n/**\n * @param {LabelPositionObject|string} value\n * @param {string|number} defaultValue\n * @returns {LabelPositionObject}\n */\n\n\nfunction toPosition(value) {\n  var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'center';\n\n  if (isObject(value)) {\n    return {\n      x: valueOrDefault(value.x, defaultValue),\n      y: valueOrDefault(value.y, defaultValue)\n    };\n  }\n\n  value = valueOrDefault(value, defaultValue);\n  return {\n    x: value,\n    y: value\n  };\n}\n/**\n * @param {CoreLabelOptions} options\n * @param {number} fitRatio\n * @returns {boolean}\n */\n\n\nvar shouldFit = function shouldFit(options, fitRatio) {\n  return options && options.autoFit && fitRatio < 1;\n};\n/**\n * @param {CoreLabelOptions} options\n * @param {number} fitRatio\n * @returns {FontSpec[]}\n */\n\n\nfunction toFonts(options, fitRatio) {\n  var optFont = options.font;\n  var fonts = isArray(optFont) ? optFont : [optFont];\n\n  if (shouldFit(options, fitRatio)) {\n    return fonts.map(function (f) {\n      var font = toFont(f);\n      font.size = Math.floor(f.size * fitRatio);\n      font.lineHeight = f.lineHeight;\n      return toFont(font);\n    });\n  }\n\n  return fonts.map(function (f) {\n    return toFont(f);\n  });\n}\n/**\n * @param {AnnotationPointCoordinates} options\n * @returns {boolean}\n */\n\n\nfunction isBoundToPoint(options) {\n  return options && (defined(options.xValue) || defined(options.yValue));\n}\n\nfunction calculateLabelPosition$1(start, size) {\n  var adjust = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n  var position = arguments.length > 3 ? arguments[3] : undefined;\n  return start - getRelativePosition(size, position) + adjust;\n}\n/**\n * @param {Chart} chart\n * @param {AnnotationBoxModel} properties\n * @param {CoreAnnotationOptions} options\n * @returns {AnnotationElement}\n */\n\n\nfunction initAnimationProperties(chart, properties, options) {\n  var initAnim = options.init;\n\n  if (!initAnim) {\n    return;\n  } else if (initAnim === true) {\n    return applyDefault(properties, options);\n  }\n\n  return execCallback(chart, properties, options);\n}\n/**\n * @param {Object} options\n * @param {Array} hooks\n * @param {Object} hooksContainer\n * @returns {boolean}\n */\n\n\nfunction loadHooks(options, hooks, hooksContainer) {\n  var activated = false;\n  hooks.forEach(function (hook) {\n    if (isFunction(options[hook])) {\n      activated = true;\n      hooksContainer[hook] = options[hook];\n    } else if (defined(hooksContainer[hook])) {\n      delete hooksContainer[hook];\n    }\n  });\n  return activated;\n}\n\nfunction applyDefault(properties, options) {\n  var type = options.type || 'line';\n  return defaultInitAnimation[type](properties);\n}\n\nfunction execCallback(chart, properties, options) {\n  var result = callback(options.init, [{\n    chart: chart,\n    properties: properties,\n    options: options\n  }]);\n\n  if (result === true) {\n    return applyDefault(properties, options);\n  } else if (isObject(result)) {\n    return result;\n  }\n}\n\nvar widthCache = new Map();\n\nvar notRadius = function notRadius(radius) {\n  return isNaN(radius) || radius <= 0;\n};\n\nvar fontsKey = function fontsKey(fonts) {\n  return fonts.reduce(function (prev, item) {\n    prev += item.string;\n    return prev;\n  }, '');\n};\n/**\n * @typedef { import('chart.js').Point } Point\n * @typedef { import('../../types/label').CoreLabelOptions } CoreLabelOptions\n * @typedef { import('../../types/options').PointAnnotationOptions } PointAnnotationOptions\n */\n\n/**\n * Determine if content is an image or a canvas.\n * @param {*} content\n * @returns boolean|undefined\n * @todo move this function to chart.js helpers\n */\n\n\nfunction isImageOrCanvas(content) {\n  if (content && _typeof(content) === 'object') {\n    var type = content.toString();\n    return type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]';\n  }\n}\n/**\n * Set the translation on the canvas if the rotation must be applied.\n * @param {CanvasRenderingContext2D} ctx - chart canvas context\n * @param {Point} point - the point of translation\n * @param {number} rotation - rotation (in degrees) to apply\n */\n\n\nfunction translate(ctx, _ref6, rotation) {\n  var x = _ref6.x,\n      y = _ref6.y;\n\n  if (rotation) {\n    ctx.translate(x, y);\n    ctx.rotate(toRadians(rotation));\n    ctx.translate(-x, -y);\n  }\n}\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {Object} options\n * @returns {boolean|undefined}\n */\n\n\nfunction setBorderStyle(ctx, options) {\n  if (options && options.borderWidth) {\n    ctx.lineCap = options.borderCapStyle || 'butt';\n    ctx.setLineDash(options.borderDash);\n    ctx.lineDashOffset = options.borderDashOffset;\n    ctx.lineJoin = options.borderJoinStyle || 'miter';\n    ctx.lineWidth = options.borderWidth;\n    ctx.strokeStyle = options.borderColor;\n    return true;\n  }\n}\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {Object} options\n */\n\n\nfunction setShadowStyle(ctx, options) {\n  ctx.shadowColor = options.backgroundShadowColor;\n  ctx.shadowBlur = options.shadowBlur;\n  ctx.shadowOffsetX = options.shadowOffsetX;\n  ctx.shadowOffsetY = options.shadowOffsetY;\n}\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {CoreLabelOptions} options\n * @returns {{width: number, height: number}}\n */\n\n\nfunction measureLabelSize(ctx, options) {\n  var content = options.content;\n\n  if (isImageOrCanvas(content)) {\n    var size = {\n      width: getSize(content.width, options.width),\n      height: getSize(content.height, options.height)\n    };\n    return size;\n  }\n\n  var fonts = toFonts(options);\n  var strokeWidth = options.textStrokeWidth;\n  var lines = isArray(content) ? content : [content];\n  var mapKey = lines.join() + fontsKey(fonts) + strokeWidth + (ctx._measureText ? '-spriting' : '');\n\n  if (!widthCache.has(mapKey)) {\n    widthCache.set(mapKey, calculateLabelSize(ctx, lines, fonts, strokeWidth));\n  }\n\n  return widthCache.get(mapKey);\n}\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{x: number, y: number, width: number, height: number}} rect\n * @param {Object} options\n */\n\n\nfunction drawBox(ctx, rect, options) {\n  var x = rect.x,\n      y = rect.y,\n      width = rect.width,\n      height = rect.height;\n  ctx.save();\n  setShadowStyle(ctx, options);\n  var stroke = setBorderStyle(ctx, options);\n  ctx.fillStyle = options.backgroundColor;\n  ctx.beginPath();\n  addRoundedRectPath(ctx, {\n    x: x,\n    y: y,\n    w: width,\n    h: height,\n    radius: clampAll(toTRBLCorners(options.borderRadius), 0, Math.min(width, height) / 2)\n  });\n  ctx.closePath();\n  ctx.fill();\n\n  if (stroke) {\n    ctx.shadowColor = options.borderShadowColor;\n    ctx.stroke();\n  }\n\n  ctx.restore();\n}\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{x: number, y: number, width: number, height: number}} rect\n * @param {CoreLabelOptions} options\n * @param {number} fitRatio\n */\n\n\nfunction drawLabel(ctx, rect, options, fitRatio) {\n  var content = options.content;\n\n  if (isImageOrCanvas(content)) {\n    ctx.save();\n    ctx.globalAlpha = getOpacity(options.opacity, content.style.opacity);\n    ctx.drawImage(content, rect.x, rect.y, rect.width, rect.height);\n    ctx.restore();\n    return;\n  }\n\n  var labels = isArray(content) ? content : [content];\n  var fonts = toFonts(options, fitRatio);\n  var optColor = options.color;\n  var colors = isArray(optColor) ? optColor : [optColor];\n  var x = calculateTextAlignment(rect, options);\n  var y = rect.y + options.textStrokeWidth / 2;\n  ctx.save();\n  ctx.textBaseline = 'middle';\n  ctx.textAlign = options.textAlign;\n\n  if (setTextStrokeStyle(ctx, options)) {\n    applyLabelDecoration(ctx, {\n      x: x,\n      y: y\n    }, labels, fonts);\n  }\n\n  applyLabelContent(ctx, {\n    x: x,\n    y: y\n  }, labels, {\n    fonts: fonts,\n    colors: colors\n  });\n  ctx.restore();\n}\n\nfunction setTextStrokeStyle(ctx, options) {\n  if (options.textStrokeWidth > 0) {\n    // https://stackoverflow.com/questions/13627111/drawing-text-with-an-outer-stroke-with-html5s-canvas\n    ctx.lineJoin = 'round';\n    ctx.miterLimit = 2;\n    ctx.lineWidth = options.textStrokeWidth;\n    ctx.strokeStyle = options.textStrokeColor;\n    return true;\n  }\n}\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{radius: number, options: PointAnnotationOptions}} element\n * @param {number} x\n * @param {number} y\n */\n\n\nfunction drawPoint(ctx, element, x, y) {\n  var radius = element.radius,\n      options = element.options;\n  var style = options.pointStyle;\n  var rotation = options.rotation;\n  var rad = (rotation || 0) * RAD_PER_DEG;\n\n  if (isImageOrCanvas(style)) {\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  if (notRadius(radius)) {\n    return;\n  }\n\n  drawPointStyle(ctx, {\n    x: x,\n    y: y,\n    radius: radius,\n    rotation: rotation,\n    style: style,\n    rad: rad\n  });\n}\n\nfunction drawPointStyle(ctx, _ref7) {\n  var x = _ref7.x,\n      y = _ref7.y,\n      radius = _ref7.radius,\n      rotation = _ref7.rotation,\n      style = _ref7.style,\n      rad = _ref7.rad;\n  var xOffset, yOffset, size, cornerRadius;\n  ctx.beginPath();\n\n  switch (style) {\n    // Default includes circle\n    default:\n      ctx.arc(x, y, radius, 0, TAU);\n      ctx.closePath();\n      break;\n\n    case 'triangle':\n      ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n      ctx.closePath();\n      break;\n\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      yOffset = Math.sin(rad + QUARTER_PI) * size;\n      ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n      ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n      ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n      ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n      ctx.closePath();\n      break;\n\n    case 'rect':\n      if (!rotation) {\n        size = Math.SQRT1_2 * radius;\n        ctx.rect(x - size, y - size, 2 * size, 2 * size);\n        break;\n      }\n\n      rad += QUARTER_PI;\n\n    /* falls through */\n\n    case 'rectRot':\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + yOffset, y - xOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      ctx.lineTo(x - yOffset, y + xOffset);\n      ctx.closePath();\n      break;\n\n    case 'crossRot':\n      rad += QUARTER_PI;\n\n    /* falls through */\n\n    case 'cross':\n      xOffset = 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      ctx.moveTo(x + yOffset, y - xOffset);\n      ctx.lineTo(x - yOffset, y + xOffset);\n      break;\n\n    case 'star':\n      xOffset = 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      ctx.moveTo(x + yOffset, y - xOffset);\n      ctx.lineTo(x - yOffset, y + xOffset);\n      rad += QUARTER_PI;\n      xOffset = 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      ctx.moveTo(x + yOffset, y - xOffset);\n      ctx.lineTo(x - yOffset, y + xOffset);\n      break;\n\n    case 'line':\n      xOffset = 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\n    case 'dash':\n      ctx.moveTo(x, y);\n      ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n      break;\n  }\n\n  ctx.fill();\n}\n\nfunction calculateLabelSize(ctx, lines, fonts, strokeWidth) {\n  ctx.save();\n  var count = lines.length;\n  var width = 0;\n  var height = strokeWidth;\n\n  for (var i = 0; i < count; i++) {\n    var font = fonts[Math.min(i, fonts.length - 1)];\n    ctx.font = font.string;\n    var text = lines[i];\n    width = Math.max(width, ctx.measureText(text).width + strokeWidth);\n    height += font.lineHeight;\n  }\n\n  ctx.restore();\n  return {\n    width: width,\n    height: height\n  };\n}\n\nfunction applyLabelDecoration(ctx, _ref8, labels, fonts) {\n  var x = _ref8.x,\n      y = _ref8.y;\n  ctx.beginPath();\n  var lhs = 0;\n  labels.forEach(function (l, i) {\n    var f = fonts[Math.min(i, fonts.length - 1)];\n    var lh = f.lineHeight;\n    ctx.font = f.string;\n    ctx.strokeText(l, x, y + lh / 2 + lhs);\n    lhs += lh;\n  });\n  ctx.stroke();\n}\n\nfunction applyLabelContent(ctx, _ref9, labels, _ref10) {\n  var x = _ref9.x,\n      y = _ref9.y;\n  var fonts = _ref10.fonts,\n      colors = _ref10.colors;\n  var lhs = 0;\n  labels.forEach(function (l, i) {\n    var c = colors[Math.min(i, colors.length - 1)];\n    var f = fonts[Math.min(i, fonts.length - 1)];\n    var lh = f.lineHeight;\n    ctx.beginPath();\n    ctx.font = f.string;\n    ctx.fillStyle = c;\n    ctx.fillText(l, x, y + lh / 2 + lhs);\n    lhs += lh;\n    ctx.fill();\n  });\n}\n\nfunction getOpacity(value, elementValue) {\n  var opacity = isNumber(value) ? value : elementValue;\n  return isNumber(opacity) ? clamp(opacity, 0, 1) : 1;\n}\n\nvar positions = ['left', 'bottom', 'top', 'right'];\n/**\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\n/**\n * Drawa the callout component for labels.\n * @param {CanvasRenderingContext2D} ctx - chart canvas context\n * @param {AnnotationElement} element - the label element\n */\n\nfunction drawCallout(ctx, element) {\n  var pointX = element.pointX,\n      pointY = element.pointY,\n      options = element.options;\n  var callout = options.callout;\n  var calloutPosition = callout && callout.display && resolveCalloutPosition(element, callout);\n\n  if (!calloutPosition || isPointInRange(element, callout, calloutPosition)) {\n    return;\n  }\n\n  ctx.save();\n  ctx.beginPath();\n  var stroke = setBorderStyle(ctx, callout);\n\n  if (!stroke) {\n    return ctx.restore();\n  }\n\n  var _getCalloutSeparatorC = getCalloutSeparatorCoord(element, calloutPosition),\n      separatorStart = _getCalloutSeparatorC.separatorStart,\n      separatorEnd = _getCalloutSeparatorC.separatorEnd;\n\n  var _getCalloutSideCoord = getCalloutSideCoord(element, calloutPosition, separatorStart),\n      sideStart = _getCalloutSideCoord.sideStart,\n      sideEnd = _getCalloutSideCoord.sideEnd;\n\n  if (callout.margin > 0 || options.borderWidth === 0) {\n    ctx.moveTo(separatorStart.x, separatorStart.y);\n    ctx.lineTo(separatorEnd.x, separatorEnd.y);\n  }\n\n  ctx.moveTo(sideStart.x, sideStart.y);\n  ctx.lineTo(sideEnd.x, sideEnd.y);\n  var rotatedPoint = rotated({\n    x: pointX,\n    y: pointY\n  }, element.getCenterPoint(), toRadians(-element.rotation));\n  ctx.lineTo(rotatedPoint.x, rotatedPoint.y);\n  ctx.stroke();\n  ctx.restore();\n}\n\nfunction getCalloutSeparatorCoord(element, position) {\n  var x = element.x,\n      y = element.y,\n      x2 = element.x2,\n      y2 = element.y2;\n  var adjust = getCalloutSeparatorAdjust(element, position);\n  var separatorStart, separatorEnd;\n\n  if (position === 'left' || position === 'right') {\n    separatorStart = {\n      x: x + adjust,\n      y: y\n    };\n    separatorEnd = {\n      x: separatorStart.x,\n      y: y2\n    };\n  } else {\n    //  position 'top' or 'bottom'\n    separatorStart = {\n      x: x,\n      y: y + adjust\n    };\n    separatorEnd = {\n      x: x2,\n      y: separatorStart.y\n    };\n  }\n\n  return {\n    separatorStart: separatorStart,\n    separatorEnd: separatorEnd\n  };\n}\n\nfunction getCalloutSeparatorAdjust(element, position) {\n  var width = element.width,\n      height = element.height,\n      options = element.options;\n  var adjust = options.callout.margin + options.borderWidth / 2;\n\n  if (position === 'right') {\n    return width + adjust;\n  } else if (position === 'bottom') {\n    return height + adjust;\n  }\n\n  return -adjust;\n}\n\nfunction getCalloutSideCoord(element, position, separatorStart) {\n  var y = element.y,\n      width = element.width,\n      height = element.height,\n      options = element.options;\n  var start = options.callout.start;\n  var side = getCalloutSideAdjust(position, options.callout);\n  var sideStart, sideEnd;\n\n  if (position === 'left' || position === 'right') {\n    sideStart = {\n      x: separatorStart.x,\n      y: y + getSize(height, start)\n    };\n    sideEnd = {\n      x: sideStart.x + side,\n      y: sideStart.y\n    };\n  } else {\n    //  position 'top' or 'bottom'\n    sideStart = {\n      x: separatorStart.x + getSize(width, start),\n      y: separatorStart.y\n    };\n    sideEnd = {\n      x: sideStart.x,\n      y: sideStart.y + side\n    };\n  }\n\n  return {\n    sideStart: sideStart,\n    sideEnd: sideEnd\n  };\n}\n\nfunction getCalloutSideAdjust(position, options) {\n  var side = options.side;\n\n  if (position === 'left' || position === 'top') {\n    return -side;\n  }\n\n  return side;\n}\n\nfunction resolveCalloutPosition(element, options) {\n  var position = options.position;\n\n  if (positions.includes(position)) {\n    return position;\n  }\n\n  return resolveCalloutAutoPosition(element, options);\n}\n\nfunction resolveCalloutAutoPosition(element, options) {\n  var x = element.x,\n      y = element.y,\n      x2 = element.x2,\n      y2 = element.y2,\n      width = element.width,\n      height = element.height,\n      pointX = element.pointX,\n      pointY = element.pointY,\n      centerX = element.centerX,\n      centerY = element.centerY,\n      rotation = element.rotation;\n  var center = {\n    x: centerX,\n    y: centerY\n  };\n  var start = options.start;\n  var xAdjust = getSize(width, start);\n  var yAdjust = getSize(height, start);\n  var xPoints = [x, x + xAdjust, x + xAdjust, x2];\n  var yPoints = [y + yAdjust, y2, y, y2];\n  var result = [];\n\n  for (var index = 0; index < 4; index++) {\n    var rotatedPoint = rotated({\n      x: xPoints[index],\n      y: yPoints[index]\n    }, center, toRadians(rotation));\n    result.push({\n      position: positions[index],\n      distance: distanceBetweenPoints(rotatedPoint, {\n        x: pointX,\n        y: pointY\n      })\n    });\n  }\n\n  return result.sort(function (a, b) {\n    return a.distance - b.distance;\n  })[0].position;\n}\n\nfunction isPointInRange(element, callout, position) {\n  var pointX = element.pointX,\n      pointY = element.pointY;\n  var margin = callout.margin;\n  var x = pointX;\n  var y = pointY;\n\n  if (position === 'left') {\n    x += margin;\n  } else if (position === 'right') {\n    x -= margin;\n  } else if (position === 'top') {\n    y += margin;\n  } else if (position === 'bottom') {\n    y -= margin;\n  }\n\n  return element.inRange(x, y);\n}\n\nvar limitedLineScale = {\n  xScaleID: {\n    min: 'xMin',\n    max: 'xMax',\n    start: 'left',\n    end: 'right',\n    startProp: 'x',\n    endProp: 'x2'\n  },\n  yScaleID: {\n    min: 'yMin',\n    max: 'yMax',\n    start: 'bottom',\n    end: 'top',\n    startProp: 'y',\n    endProp: 'y2'\n  }\n};\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").Scale } Scale\n * @typedef { import(\"chart.js\").Point } Point\n * @typedef { import('../../types/element').AnnotationBoxModel } AnnotationBoxModel\n * @typedef { import('../../types/options').CoreAnnotationOptions } CoreAnnotationOptions\n * @typedef { import('../../types/options').LineAnnotationOptions } LineAnnotationOptions\n * @typedef { import('../../types/options').PointAnnotationOptions } PointAnnotationOptions\n * @typedef { import('../../types/options').PolygonAnnotationOptions } PolygonAnnotationOptions\n */\n\n/**\n * @param {Scale} scale\n * @param {number|string} value\n * @param {number} fallback\n * @returns {number}\n */\n\nfunction scaleValue(scale, value, fallback) {\n  value = typeof value === 'number' ? value : scale.parse(value);\n  return isFinite(value) ? scale.getPixelForValue(value) : fallback;\n}\n/**\n * Search the scale defined in chartjs by the axis related to the annotation options key.\n * @param {{ [key: string]: Scale }} scales\n * @param {CoreAnnotationOptions} options\n * @param {string} key\n * @returns {string}\n */\n\n\nfunction retrieveScaleID(scales, options, key) {\n  var scaleID = options[key];\n\n  if (scaleID || key === 'scaleID') {\n    return scaleID;\n  }\n\n  var axis = key.charAt(0);\n  var axes = Object.values(scales).filter(function (scale) {\n    return scale.axis && scale.axis === axis;\n  });\n\n  if (axes.length) {\n    return axes[0].id;\n  }\n\n  return axis;\n}\n/**\n * @param {Scale} scale\n * @param {{min: number, max: number, start: number, end: number}} options\n * @returns {{start: number, end: number}|undefined}\n */\n\n\nfunction getDimensionByScale(scale, options) {\n  if (scale) {\n    var reverse = scale.options.reverse;\n    var start = scaleValue(scale, options.min, reverse ? options.end : options.start);\n    var end = scaleValue(scale, options.max, reverse ? options.start : options.end);\n    return {\n      start: start,\n      end: end\n    };\n  }\n}\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @returns {Point}\n */\n\n\nfunction getChartPoint(chart, options) {\n  var chartArea = chart.chartArea,\n      scales = chart.scales;\n  var xScale = scales[retrieveScaleID(scales, options, 'xScaleID')];\n  var yScale = scales[retrieveScaleID(scales, options, 'yScaleID')];\n  var x = chartArea.width / 2;\n  var y = chartArea.height / 2;\n\n  if (xScale) {\n    x = scaleValue(xScale, options.xValue, xScale.left + xScale.width / 2);\n  }\n\n  if (yScale) {\n    y = scaleValue(yScale, options.yValue, yScale.top + yScale.height / 2);\n  }\n\n  return {\n    x: x,\n    y: y\n  };\n}\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\n\n\nfunction resolveBoxProperties(chart, options) {\n  var scales = chart.scales;\n  var xScale = scales[retrieveScaleID(scales, options, 'xScaleID')];\n  var yScale = scales[retrieveScaleID(scales, options, 'yScaleID')];\n\n  if (!xScale && !yScale) {\n    return {};\n  }\n\n  var _ref11 = xScale || chart.chartArea,\n      x = _ref11.left,\n      x2 = _ref11.right;\n\n  var _ref12 = yScale || chart.chartArea,\n      y = _ref12.top,\n      y2 = _ref12.bottom;\n\n  var xDim = getChartDimensionByScale(xScale, {\n    min: options.xMin,\n    max: options.xMax,\n    start: x,\n    end: x2\n  });\n  x = xDim.start;\n  x2 = xDim.end;\n  var yDim = getChartDimensionByScale(yScale, {\n    min: options.yMin,\n    max: options.yMax,\n    start: y2,\n    end: y\n  });\n  y = yDim.start;\n  y2 = yDim.end;\n  return {\n    x: x,\n    y: y,\n    x2: x2,\n    y2: y2,\n    width: x2 - x,\n    height: y2 - y,\n    centerX: x + (x2 - x) / 2,\n    centerY: y + (y2 - y) / 2\n  };\n}\n/**\n * @param {Chart} chart\n * @param {PointAnnotationOptions|PolygonAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\n\n\nfunction resolvePointProperties(chart, options) {\n  if (!isBoundToPoint(options)) {\n    var box = resolveBoxProperties(chart, options);\n    var radius = options.radius;\n\n    if (!radius || isNaN(radius)) {\n      radius = Math.min(box.width, box.height) / 2;\n      options.radius = radius;\n    }\n\n    var size = radius * 2;\n    var adjustCenterX = box.centerX + options.xAdjust;\n    var adjustCenterY = box.centerY + options.yAdjust;\n    return {\n      x: adjustCenterX - radius,\n      y: adjustCenterY - radius,\n      x2: adjustCenterX + radius,\n      y2: adjustCenterY + radius,\n      centerX: adjustCenterX,\n      centerY: adjustCenterY,\n      width: size,\n      height: size,\n      radius: radius\n    };\n  }\n\n  return getChartCircle(chart, options);\n}\n/**\n * @param {Chart} chart\n * @param {LineAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\n\n\nfunction resolveLineProperties(chart, options) {\n  var scales = chart.scales,\n      chartArea = chart.chartArea;\n  var scale = scales[options.scaleID];\n  var area = {\n    x: chartArea.left,\n    y: chartArea.top,\n    x2: chartArea.right,\n    y2: chartArea.bottom\n  };\n\n  if (scale) {\n    resolveFullLineProperties(scale, area, options);\n  } else {\n    resolveLimitedLineProperties(scales, area, options);\n  }\n\n  return area;\n}\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @param {boolean} [centerBased=false]\n * @returns {AnnotationBoxModel}\n */\n\n\nfunction resolveBoxAndLabelProperties(chart, options) {\n  var properties = resolveBoxProperties(chart, options);\n  properties.initProperties = initAnimationProperties(chart, properties, options);\n  properties.elements = [{\n    type: 'label',\n    optionScope: 'label',\n    properties: resolveLabelElementProperties$1(chart, properties, options),\n    initProperties: properties.initProperties\n  }];\n  return properties;\n}\n\nfunction getChartCircle(chart, options) {\n  var point = getChartPoint(chart, options);\n  var size = options.radius * 2;\n  return {\n    x: point.x - options.radius + options.xAdjust,\n    y: point.y - options.radius + options.yAdjust,\n    x2: point.x + options.radius + options.xAdjust,\n    y2: point.y + options.radius + options.yAdjust,\n    centerX: point.x + options.xAdjust,\n    centerY: point.y + options.yAdjust,\n    radius: options.radius,\n    width: size,\n    height: size\n  };\n}\n\nfunction getChartDimensionByScale(scale, options) {\n  var result = getDimensionByScale(scale, options) || options;\n  return {\n    start: Math.min(result.start, result.end),\n    end: Math.max(result.start, result.end)\n  };\n}\n\nfunction resolveFullLineProperties(scale, area, options) {\n  var min = scaleValue(scale, options.value, NaN);\n  var max = scaleValue(scale, options.endValue, min);\n\n  if (scale.isHorizontal()) {\n    area.x = min;\n    area.x2 = max;\n  } else {\n    area.y = min;\n    area.y2 = max;\n  }\n}\n\nfunction resolveLimitedLineProperties(scales, area, options) {\n  for (var _i2 = 0, _Object$keys2 = Object.keys(limitedLineScale); _i2 < _Object$keys2.length; _i2++) {\n    var scaleId = _Object$keys2[_i2];\n    var scale = scales[retrieveScaleID(scales, options, scaleId)];\n\n    if (scale) {\n      var _limitedLineScale$sca = limitedLineScale[scaleId],\n          min = _limitedLineScale$sca.min,\n          max = _limitedLineScale$sca.max,\n          start = _limitedLineScale$sca.start,\n          end = _limitedLineScale$sca.end,\n          startProp = _limitedLineScale$sca.startProp,\n          endProp = _limitedLineScale$sca.endProp;\n      var dim = getDimensionByScale(scale, {\n        min: options[min],\n        max: options[max],\n        start: scale[start],\n        end: scale[end]\n      });\n      area[startProp] = dim.start;\n      area[endProp] = dim.end;\n    }\n  }\n}\n\nfunction calculateX(_ref13, labelSize, position, padding) {\n  var properties = _ref13.properties,\n      options = _ref13.options;\n  var start = properties.x,\n      end = properties.x2,\n      size = properties.width;\n  return calculatePosition({\n    start: start,\n    end: end,\n    size: size,\n    borderWidth: options.borderWidth\n  }, {\n    position: position.x,\n    padding: {\n      start: padding.left,\n      end: padding.right\n    },\n    adjust: options.label.xAdjust,\n    size: labelSize.width\n  });\n}\n\nfunction calculateY(_ref14, labelSize, position, padding) {\n  var properties = _ref14.properties,\n      options = _ref14.options;\n  var start = properties.y,\n      end = properties.y2,\n      size = properties.height;\n  return calculatePosition({\n    start: start,\n    end: end,\n    size: size,\n    borderWidth: options.borderWidth\n  }, {\n    position: position.y,\n    padding: {\n      start: padding.top,\n      end: padding.bottom\n    },\n    adjust: options.label.yAdjust,\n    size: labelSize.height\n  });\n}\n\nfunction calculatePosition(boxOpts, labelOpts) {\n  var start = boxOpts.start,\n      end = boxOpts.end,\n      borderWidth = boxOpts.borderWidth;\n  var position = labelOpts.position,\n      _labelOpts$padding = labelOpts.padding,\n      padStart = _labelOpts$padding.start,\n      padEnd = _labelOpts$padding.end,\n      adjust = labelOpts.adjust;\n  var availableSize = end - borderWidth - start - padStart - padEnd - labelOpts.size;\n  return start + borderWidth / 2 + adjust + getRelativePosition(availableSize, position);\n}\n\nfunction resolveLabelElementProperties$1(chart, properties, options) {\n  var label = options.label;\n  label.backgroundColor = 'transparent';\n  label.callout.display = false;\n  var position = toPosition(label.position);\n  var padding = toPadding(label.padding);\n  var labelSize = measureLabelSize(chart.ctx, label);\n  var x = calculateX({\n    properties: properties,\n    options: options\n  }, labelSize, position, padding);\n  var y = calculateY({\n    properties: properties,\n    options: options\n  }, labelSize, position, padding);\n  var width = labelSize.width + padding.width;\n  var height = labelSize.height + padding.height;\n  return {\n    x: x,\n    y: y,\n    x2: x + width,\n    y2: y + height,\n    width: width,\n    height: height,\n    centerX: x + width / 2,\n    centerY: y + height / 2,\n    rotation: label.rotation\n  };\n}\n\nvar moveHooks = ['enter', 'leave'];\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n */\n\nvar eventHooks = moveHooks.concat('click');\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n */\n\nfunction updateListeners(chart, state, options) {\n  state.listened = loadHooks(options, eventHooks, state.listeners);\n  state.moveListened = false;\n  moveHooks.forEach(function (hook) {\n    if (isFunction(options[hook])) {\n      state.moveListened = true;\n    }\n  });\n\n  if (!state.listened || !state.moveListened) {\n    state.annotations.forEach(function (scope) {\n      if (!state.listened && isFunction(scope.click)) {\n        state.listened = true;\n      }\n\n      if (!state.moveListened) {\n        moveHooks.forEach(function (hook) {\n          if (isFunction(scope[hook])) {\n            state.listened = true;\n            state.moveListened = true;\n          }\n        });\n      }\n    });\n  }\n}\n/**\n * @param {Object} state\n * @param {ChartEvent} event\n * @param {AnnotationPluginOptions} options\n * @return {boolean|undefined}\n */\n\n\nfunction handleEvent(state, event, options) {\n  if (state.listened) {\n    switch (event.type) {\n      case 'mousemove':\n      case 'mouseout':\n        return handleMoveEvents(state, event, options);\n\n      case 'click':\n        return handleClickEvents(state, event, options);\n    }\n  }\n}\n\nfunction handleMoveEvents(state, event, options) {\n  if (!state.moveListened) {\n    return;\n  }\n\n  var elements;\n\n  if (event.type === 'mousemove') {\n    elements = getElements(state.visibleElements, event, options.interaction);\n  } else {\n    elements = [];\n  }\n\n  var previous = state.hovered;\n  state.hovered = elements;\n  var context = {\n    state: state,\n    event: event\n  };\n  var changed = dispatchMoveEvents(context, 'leave', previous, elements);\n  return dispatchMoveEvents(context, 'enter', elements, previous) || changed;\n}\n\nfunction dispatchMoveEvents(_ref15, hook, elements, checkElements) {\n  var state = _ref15.state,\n      event = _ref15.event;\n  var changed;\n\n  var _iterator2 = _createForOfIteratorHelper(elements),\n      _step2;\n\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var element = _step2.value;\n\n      if (checkElements.indexOf(element) < 0) {\n        changed = dispatchEvent(element.options[hook] || state.listeners[hook], element, event) || changed;\n      }\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n\n  return changed;\n}\n\nfunction handleClickEvents(state, event, options) {\n  var listeners = state.listeners;\n  var elements = getElements(state.visibleElements, event, options.interaction);\n  var changed;\n\n  var _iterator3 = _createForOfIteratorHelper(elements),\n      _step3;\n\n  try {\n    for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n      var element = _step3.value;\n      changed = dispatchEvent(element.options.click || listeners.click, element, event) || changed;\n    }\n  } catch (err) {\n    _iterator3.e(err);\n  } finally {\n    _iterator3.f();\n  }\n\n  return changed;\n}\n\nfunction dispatchEvent(handler, element, event) {\n  return callback(handler, [element.$context, event]) === true;\n}\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\n\nvar elementHooks = ['afterDraw', 'beforeDraw'];\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n */\n\nfunction updateHooks(chart, state, options) {\n  var visibleElements = state.visibleElements;\n  state.hooked = loadHooks(options, elementHooks, state.hooks);\n\n  if (!state.hooked) {\n    visibleElements.forEach(function (scope) {\n      if (!state.hooked) {\n        elementHooks.forEach(function (hook) {\n          if (isFunction(scope.options[hook])) {\n            state.hooked = true;\n          }\n        });\n      }\n    });\n  }\n}\n/**\n * @param {Object} state\n * @param {AnnotationElement} element\n * @param {string} hook\n */\n\n\nfunction invokeHook(state, element, hook) {\n  if (state.hooked) {\n    var callbackHook = element.options[hook] || state.hooks[hook];\n    return callback(callbackHook, [element.$context]);\n  }\n}\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").Scale } Scale\n * @typedef { import('../../types/options').CoreAnnotationOptions } CoreAnnotationOptions\n */\n\n/**\n * @param {Chart} chart\n * @param {Scale} scale\n * @param {CoreAnnotationOptions[]} annotations\n */\n\n\nfunction adjustScaleRange(chart, scale, annotations) {\n  var range = getScaleLimits(chart.scales, scale, annotations);\n  var changed = changeScaleLimit(scale, range, 'min', 'suggestedMin');\n  changed = changeScaleLimit(scale, range, 'max', 'suggestedMax') || changed;\n\n  if (changed && isFunction(scale.handleTickRangeOptions)) {\n    scale.handleTickRangeOptions();\n  }\n}\n/**\n * @param {CoreAnnotationOptions[]} annotations\n * @param {{ [key: string]: Scale }} scales\n */\n\n\nfunction verifyScaleOptions(annotations, scales) {\n  var _iterator4 = _createForOfIteratorHelper(annotations),\n      _step4;\n\n  try {\n    for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n      var _annotation = _step4.value;\n      verifyScaleIDs(_annotation, scales);\n    }\n  } catch (err) {\n    _iterator4.e(err);\n  } finally {\n    _iterator4.f();\n  }\n}\n\nfunction changeScaleLimit(scale, range, limit, suggestedLimit) {\n  if (isFinite(range[limit]) && !scaleLimitDefined(scale.options, limit, suggestedLimit)) {\n    var changed = scale[limit] !== range[limit];\n    scale[limit] = range[limit];\n    return changed;\n  }\n}\n\nfunction scaleLimitDefined(scaleOptions, limit, suggestedLimit) {\n  return defined(scaleOptions[limit]) || defined(scaleOptions[suggestedLimit]);\n}\n\nfunction verifyScaleIDs(annotation, scales) {\n  for (var _i3 = 0, _arr = ['scaleID', 'xScaleID', 'yScaleID']; _i3 < _arr.length; _i3++) {\n    var key = _arr[_i3];\n    var scaleID = retrieveScaleID(scales, annotation, key);\n\n    if (scaleID && !scales[scaleID] && verifyProperties(annotation, key)) {\n      console.warn(\"No scale found with id '\".concat(scaleID, \"' for annotation '\").concat(annotation.id, \"'\"));\n    }\n  }\n}\n\nfunction verifyProperties(annotation, key) {\n  if (key === 'scaleID') {\n    return true;\n  }\n\n  var axis = key.charAt(0);\n\n  for (var _i4 = 0, _arr2 = ['Min', 'Max', 'Value']; _i4 < _arr2.length; _i4++) {\n    var prop = _arr2[_i4];\n\n    if (defined(annotation[axis + prop])) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction getScaleLimits(scales, scale, annotations) {\n  var axis = scale.axis;\n  var scaleID = scale.id;\n  var scaleIDOption = axis + 'ScaleID';\n  var limits = {\n    min: valueOrDefault(scale.min, Number.NEGATIVE_INFINITY),\n    max: valueOrDefault(scale.max, Number.POSITIVE_INFINITY)\n  };\n\n  var _iterator5 = _createForOfIteratorHelper(annotations),\n      _step5;\n\n  try {\n    for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n      var _annotation2 = _step5.value;\n\n      if (_annotation2.scaleID === scaleID) {\n        updateLimits(_annotation2, scale, ['value', 'endValue'], limits);\n      } else if (retrieveScaleID(scales, _annotation2, scaleIDOption) === scaleID) {\n        updateLimits(_annotation2, scale, [axis + 'Min', axis + 'Max', axis + 'Value'], limits);\n      }\n    }\n  } catch (err) {\n    _iterator5.e(err);\n  } finally {\n    _iterator5.f();\n  }\n\n  return limits;\n}\n\nfunction updateLimits(annotation, scale, props, limits) {\n  var _iterator6 = _createForOfIteratorHelper(props),\n      _step6;\n\n  try {\n    for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n      var prop = _step6.value;\n      var raw = annotation[prop];\n\n      if (defined(raw)) {\n        var value = scale.parse(raw);\n        limits.min = Math.min(limits.min, value);\n        limits.max = Math.max(limits.max, value);\n      }\n    }\n  } catch (err) {\n    _iterator6.e(err);\n  } finally {\n    _iterator6.f();\n  }\n}\n\nvar BoxAnnotation = /*#__PURE__*/function (_Element) {\n  _inherits(BoxAnnotation, _Element);\n\n  var _super = _createSuper(BoxAnnotation);\n\n  function BoxAnnotation() {\n    _classCallCheck(this, BoxAnnotation);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(BoxAnnotation, [{\n    key: \"inRange\",\n    value: function inRange(mouseX, mouseY, axis, useFinalPosition) {\n      var _rotated = rotated({\n        x: mouseX,\n        y: mouseY\n      }, this.getCenterPoint(useFinalPosition), toRadians(-this.options.rotation)),\n          x = _rotated.x,\n          y = _rotated.y;\n\n      return inBoxRange({\n        x: x,\n        y: y\n      }, this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis, this.options);\n    }\n  }, {\n    key: \"getCenterPoint\",\n    value: function getCenterPoint(useFinalPosition) {\n      return getElementCenterPoint(this, useFinalPosition);\n    }\n  }, {\n    key: \"draw\",\n    value: function draw(ctx) {\n      ctx.save();\n      translate(ctx, this.getCenterPoint(), this.options.rotation);\n      drawBox(ctx, this, this.options);\n      ctx.restore();\n    }\n  }, {\n    key: \"label\",\n    get: function get() {\n      return this.elements && this.elements[0];\n    }\n  }, {\n    key: \"resolveElementProperties\",\n    value: function resolveElementProperties(chart, options) {\n      return resolveBoxAndLabelProperties(chart, options);\n    }\n  }]);\n\n  return BoxAnnotation;\n}(Element);\n\nBoxAnnotation.id = 'boxAnnotation';\nBoxAnnotation.defaults = {\n  adjustScaleRange: true,\n  backgroundShadowColor: 'transparent',\n  borderCapStyle: 'butt',\n  borderDash: [],\n  borderDashOffset: 0,\n  borderJoinStyle: 'miter',\n  borderRadius: 0,\n  borderShadowColor: 'transparent',\n  borderWidth: 1,\n  display: true,\n  init: undefined,\n  hitTolerance: 0,\n  label: {\n    backgroundColor: 'transparent',\n    borderWidth: 0,\n    callout: {\n      display: false\n    },\n    color: 'black',\n    content: null,\n    display: false,\n    drawTime: undefined,\n    font: {\n      family: undefined,\n      lineHeight: undefined,\n      size: undefined,\n      style: undefined,\n      weight: 'bold'\n    },\n    height: undefined,\n    hitTolerance: undefined,\n    opacity: undefined,\n    padding: 6,\n    position: 'center',\n    rotation: undefined,\n    textAlign: 'start',\n    textStrokeColor: undefined,\n    textStrokeWidth: 0,\n    width: undefined,\n    xAdjust: 0,\n    yAdjust: 0,\n    z: undefined\n  },\n  rotation: 0,\n  shadowBlur: 0,\n  shadowOffsetX: 0,\n  shadowOffsetY: 0,\n  xMax: undefined,\n  xMin: undefined,\n  xScaleID: undefined,\n  yMax: undefined,\n  yMin: undefined,\n  yScaleID: undefined,\n  z: 0\n};\nBoxAnnotation.defaultRoutes = {\n  borderColor: 'color',\n  backgroundColor: 'color'\n};\nBoxAnnotation.descriptors = {\n  label: {\n    _fallback: true\n  }\n};\n\nvar DoughnutLabelAnnotation = /*#__PURE__*/function (_Element2) {\n  _inherits(DoughnutLabelAnnotation, _Element2);\n\n  var _super2 = _createSuper(DoughnutLabelAnnotation);\n\n  function DoughnutLabelAnnotation() {\n    _classCallCheck(this, DoughnutLabelAnnotation);\n\n    return _super2.apply(this, arguments);\n  }\n\n  _createClass(DoughnutLabelAnnotation, [{\n    key: \"inRange\",\n    value: function inRange(mouseX, mouseY, axis, useFinalPosition) {\n      return inLabelRange({\n        x: mouseX,\n        y: mouseY\n      }, {\n        rect: this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition),\n        center: this.getCenterPoint(useFinalPosition)\n      }, axis, {\n        rotation: this.rotation,\n        borderWidth: 0,\n        hitTolerance: this.options.hitTolerance\n      });\n    }\n  }, {\n    key: \"getCenterPoint\",\n    value: function getCenterPoint(useFinalPosition) {\n      return getElementCenterPoint(this, useFinalPosition);\n    }\n  }, {\n    key: \"draw\",\n    value: function draw(ctx) {\n      var options = this.options;\n\n      if (!options.display || !options.content) {\n        return;\n      }\n\n      drawBackground(ctx, this);\n      ctx.save();\n      translate(ctx, this.getCenterPoint(), this.rotation);\n      drawLabel(ctx, this, options, this._fitRatio);\n      ctx.restore();\n    }\n  }, {\n    key: \"resolveElementProperties\",\n    value: function resolveElementProperties(chart, options) {\n      var meta = getDatasetMeta(chart, options);\n\n      if (!meta) {\n        return {};\n      }\n\n      var _getControllerMeta = getControllerMeta(chart, options, meta),\n          controllerMeta = _getControllerMeta.controllerMeta,\n          point = _getControllerMeta.point,\n          radius = _getControllerMeta.radius;\n\n      var labelSize = measureLabelSize(chart.ctx, options);\n\n      var _fitRatio = getFitRatio(labelSize, radius);\n\n      if (shouldFit(options, _fitRatio)) {\n        labelSize = {\n          width: labelSize.width * _fitRatio,\n          height: labelSize.height * _fitRatio\n        };\n      }\n\n      var position = options.position,\n          xAdjust = options.xAdjust,\n          yAdjust = options.yAdjust;\n      var boxSize = measureLabelRectangle(point, labelSize, {\n        borderWidth: 0,\n        position: position,\n        xAdjust: xAdjust,\n        yAdjust: yAdjust\n      });\n      return _objectSpread(_objectSpread(_objectSpread({\n        initProperties: initAnimationProperties(chart, boxSize, options)\n      }, boxSize), controllerMeta), {}, {\n        rotation: options.rotation,\n        _fitRatio: _fitRatio\n      });\n    }\n  }]);\n\n  return DoughnutLabelAnnotation;\n}(Element);\n\nDoughnutLabelAnnotation.id = 'doughnutLabelAnnotation';\nDoughnutLabelAnnotation.defaults = {\n  autoFit: true,\n  autoHide: true,\n  backgroundColor: 'transparent',\n  backgroundShadowColor: 'transparent',\n  borderColor: 'transparent',\n  borderDash: [],\n  borderDashOffset: 0,\n  borderJoinStyle: 'miter',\n  borderShadowColor: 'transparent',\n  borderWidth: 0,\n  color: 'black',\n  content: null,\n  display: true,\n  font: {\n    family: undefined,\n    lineHeight: undefined,\n    size: undefined,\n    style: undefined,\n    weight: undefined\n  },\n  height: undefined,\n  hitTolerance: 0,\n  init: undefined,\n  opacity: undefined,\n  position: 'center',\n  rotation: 0,\n  shadowBlur: 0,\n  shadowOffsetX: 0,\n  shadowOffsetY: 0,\n  spacing: 1,\n  textAlign: 'center',\n  textStrokeColor: undefined,\n  textStrokeWidth: 0,\n  width: undefined,\n  xAdjust: 0,\n  yAdjust: 0\n};\nDoughnutLabelAnnotation.defaultRoutes = {};\n\nfunction getDatasetMeta(chart, options) {\n  return chart.getSortedVisibleDatasetMetas().reduce(function (result, value) {\n    var controller = value.controller;\n\n    if (controller instanceof DoughnutController && isControllerVisible(chart, options, value.data) && (!result || controller.innerRadius < result.controller.innerRadius) && controller.options.circumference >= 90) {\n      return value;\n    }\n\n    return result;\n  }, undefined);\n}\n\nfunction isControllerVisible(chart, options, elements) {\n  if (!options.autoHide) {\n    return true;\n  }\n\n  for (var i = 0; i < elements.length; i++) {\n    if (!elements[i].hidden && chart.getDataVisibility(i)) {\n      return true;\n    }\n  }\n}\n\nfunction getControllerMeta(_ref16, options, meta) {\n  var chartArea = _ref16.chartArea;\n  var left = chartArea.left,\n      top = chartArea.top,\n      right = chartArea.right,\n      bottom = chartArea.bottom;\n  var _meta$controller = meta.controller,\n      innerRadius = _meta$controller.innerRadius,\n      offsetX = _meta$controller.offsetX,\n      offsetY = _meta$controller.offsetY;\n  var x = (left + right) / 2 + offsetX;\n  var y = (top + bottom) / 2 + offsetY;\n  var square = {\n    left: Math.max(x - innerRadius, left),\n    right: Math.min(x + innerRadius, right),\n    top: Math.max(y - innerRadius, top),\n    bottom: Math.min(y + innerRadius, bottom)\n  };\n  var point = {\n    x: (square.left + square.right) / 2,\n    y: (square.top + square.bottom) / 2\n  };\n  var space = options.spacing + options.borderWidth / 2;\n\n  var _radius = innerRadius - space;\n\n  var _counterclockwise = point.y > y;\n\n  var side = _counterclockwise ? top + space : bottom - space;\n  var angles = getAngles(side, x, y, _radius);\n\n  var controllerMeta = _objectSpread({\n    _centerX: x,\n    _centerY: y,\n    _radius: _radius,\n    _counterclockwise: _counterclockwise\n  }, angles);\n\n  return {\n    controllerMeta: controllerMeta,\n    point: point,\n    radius: Math.min(innerRadius, Math.min(square.right - square.left, square.bottom - square.top) / 2)\n  };\n}\n\nfunction getFitRatio(_ref17, radius) {\n  var width = _ref17.width,\n      height = _ref17.height;\n  var hypo = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));\n  return radius * 2 / hypo;\n}\n\nfunction getAngles(y, centerX, centerY, radius) {\n  var yk2 = Math.pow(centerY - y, 2);\n  var r2 = Math.pow(radius, 2);\n  var b = centerX * -2;\n  var c = Math.pow(centerX, 2) + yk2 - r2;\n  var delta = Math.pow(b, 2) - 4 * c;\n\n  if (delta <= 0) {\n    return {\n      _startAngle: 0,\n      _endAngle: TAU\n    };\n  }\n\n  var start = (-b - Math.sqrt(delta)) / 2;\n  var end = (-b + Math.sqrt(delta)) / 2;\n  return {\n    _startAngle: getAngleFromPoint({\n      x: centerX,\n      y: centerY\n    }, {\n      x: start,\n      y: y\n    }).angle,\n    _endAngle: getAngleFromPoint({\n      x: centerX,\n      y: centerY\n    }, {\n      x: end,\n      y: y\n    }).angle\n  };\n}\n\nfunction drawBackground(ctx, element) {\n  var _centerX = element._centerX,\n      _centerY = element._centerY,\n      _radius = element._radius,\n      _startAngle = element._startAngle,\n      _endAngle = element._endAngle,\n      _counterclockwise = element._counterclockwise,\n      options = element.options;\n  ctx.save();\n  var stroke = setBorderStyle(ctx, options);\n  ctx.fillStyle = options.backgroundColor;\n  ctx.beginPath();\n  ctx.arc(_centerX, _centerY, _radius, _startAngle, _endAngle, _counterclockwise);\n  ctx.closePath();\n  ctx.fill();\n\n  if (stroke) {\n    ctx.stroke();\n  }\n\n  ctx.restore();\n}\n\nvar LabelAnnotation = /*#__PURE__*/function (_Element3) {\n  _inherits(LabelAnnotation, _Element3);\n\n  var _super3 = _createSuper(LabelAnnotation);\n\n  function LabelAnnotation() {\n    _classCallCheck(this, LabelAnnotation);\n\n    return _super3.apply(this, arguments);\n  }\n\n  _createClass(LabelAnnotation, [{\n    key: \"inRange\",\n    value: function inRange(mouseX, mouseY, axis, useFinalPosition) {\n      return inLabelRange({\n        x: mouseX,\n        y: mouseY\n      }, {\n        rect: this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition),\n        center: this.getCenterPoint(useFinalPosition)\n      }, axis, {\n        rotation: this.rotation,\n        borderWidth: this.options.borderWidth,\n        hitTolerance: this.options.hitTolerance\n      });\n    }\n  }, {\n    key: \"getCenterPoint\",\n    value: function getCenterPoint(useFinalPosition) {\n      return getElementCenterPoint(this, useFinalPosition);\n    }\n  }, {\n    key: \"draw\",\n    value: function draw(ctx) {\n      var options = this.options;\n      var visible = !defined(this._visible) || this._visible;\n\n      if (!options.display || !options.content || !visible) {\n        return;\n      }\n\n      ctx.save();\n      translate(ctx, this.getCenterPoint(), this.rotation);\n      drawCallout(ctx, this);\n      drawBox(ctx, this, options);\n      drawLabel(ctx, getLabelSize(this), options);\n      ctx.restore();\n    }\n  }, {\n    key: \"resolveElementProperties\",\n    value: function resolveElementProperties(chart, options) {\n      var point;\n\n      if (!isBoundToPoint(options)) {\n        var _resolveBoxProperties = resolveBoxProperties(chart, options),\n            centerX = _resolveBoxProperties.centerX,\n            centerY = _resolveBoxProperties.centerY;\n\n        point = {\n          x: centerX,\n          y: centerY\n        };\n      } else {\n        point = getChartPoint(chart, options);\n      }\n\n      var padding = toPadding(options.padding);\n      var labelSize = measureLabelSize(chart.ctx, options);\n      var boxSize = measureLabelRectangle(point, labelSize, options, padding);\n      return _objectSpread(_objectSpread({\n        initProperties: initAnimationProperties(chart, boxSize, options),\n        pointX: point.x,\n        pointY: point.y\n      }, boxSize), {}, {\n        rotation: options.rotation\n      });\n    }\n  }]);\n\n  return LabelAnnotation;\n}(Element);\n\nLabelAnnotation.id = 'labelAnnotation';\nLabelAnnotation.defaults = {\n  adjustScaleRange: true,\n  backgroundColor: 'transparent',\n  backgroundShadowColor: 'transparent',\n  borderCapStyle: 'butt',\n  borderDash: [],\n  borderDashOffset: 0,\n  borderJoinStyle: 'miter',\n  borderRadius: 0,\n  borderShadowColor: 'transparent',\n  borderWidth: 0,\n  callout: {\n    borderCapStyle: 'butt',\n    borderColor: undefined,\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: 'miter',\n    borderWidth: 1,\n    display: false,\n    margin: 5,\n    position: 'auto',\n    side: 5,\n    start: '50%'\n  },\n  color: 'black',\n  content: null,\n  display: true,\n  font: {\n    family: undefined,\n    lineHeight: undefined,\n    size: undefined,\n    style: undefined,\n    weight: undefined\n  },\n  height: undefined,\n  hitTolerance: 0,\n  init: undefined,\n  opacity: undefined,\n  padding: 6,\n  position: 'center',\n  rotation: 0,\n  shadowBlur: 0,\n  shadowOffsetX: 0,\n  shadowOffsetY: 0,\n  textAlign: 'center',\n  textStrokeColor: undefined,\n  textStrokeWidth: 0,\n  width: undefined,\n  xAdjust: 0,\n  xMax: undefined,\n  xMin: undefined,\n  xScaleID: undefined,\n  xValue: undefined,\n  yAdjust: 0,\n  yMax: undefined,\n  yMin: undefined,\n  yScaleID: undefined,\n  yValue: undefined,\n  z: 0\n};\nLabelAnnotation.defaultRoutes = {\n  borderColor: 'color'\n};\n\nfunction getLabelSize(_ref18) {\n  var x = _ref18.x,\n      y = _ref18.y,\n      width = _ref18.width,\n      height = _ref18.height,\n      options = _ref18.options;\n  var hBorderWidth = options.borderWidth / 2;\n  var padding = toPadding(options.padding);\n  return {\n    x: x + padding.left + hBorderWidth,\n    y: y + padding.top + hBorderWidth,\n    width: width - padding.left - padding.right - options.borderWidth,\n    height: height - padding.top - padding.bottom - options.borderWidth\n  };\n}\n\nvar pointInLine = function pointInLine(p1, p2, t) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n};\n\nvar interpolateX = function interpolateX(y, p1, p2) {\n  return pointInLine(p1, p2, Math.abs((y - p1.y) / (p2.y - p1.y))).x;\n};\n\nvar interpolateY = function interpolateY(x, p1, p2) {\n  return pointInLine(p1, p2, Math.abs((x - p1.x) / (p2.x - p1.x))).y;\n};\n\nvar sqr = function sqr(v) {\n  return v * v;\n};\n\nvar rangeLimit = function rangeLimit(mouseX, mouseY, _ref19, axis) {\n  var x = _ref19.x,\n      y = _ref19.y,\n      x2 = _ref19.x2,\n      y2 = _ref19.y2;\n  return axis === 'y' ? {\n    start: Math.min(y, y2),\n    end: Math.max(y, y2),\n    value: mouseY\n  } : {\n    start: Math.min(x, x2),\n    end: Math.max(x, x2),\n    value: mouseX\n  };\n}; // http://www.independent-software.com/determining-coordinates-on-a-html-canvas-bezier-curve.html\n\n\nvar coordInCurve = function coordInCurve(start, cp, end, t) {\n  return (1 - t) * (1 - t) * start + 2 * (1 - t) * t * cp + t * t * end;\n};\n\nvar pointInCurve = function pointInCurve(start, cp, end, t) {\n  return {\n    x: coordInCurve(start.x, cp.x, end.x, t),\n    y: coordInCurve(start.y, cp.y, end.y, t)\n  };\n};\n\nvar coordAngleInCurve = function coordAngleInCurve(start, cp, end, t) {\n  return 2 * (1 - t) * (cp - start) + 2 * t * (end - cp);\n};\n\nvar angleInCurve = function angleInCurve(start, cp, end, t) {\n  return -Math.atan2(coordAngleInCurve(start.x, cp.x, end.x, t), coordAngleInCurve(start.y, cp.y, end.y, t)) + 0.5 * PI;\n};\n\nvar LineAnnotation = /*#__PURE__*/function (_Element4) {\n  _inherits(LineAnnotation, _Element4);\n\n  var _super4 = _createSuper(LineAnnotation);\n\n  function LineAnnotation() {\n    _classCallCheck(this, LineAnnotation);\n\n    return _super4.apply(this, arguments);\n  }\n\n  _createClass(LineAnnotation, [{\n    key: \"inRange\",\n    value: function inRange(mouseX, mouseY, axis, useFinalPosition) {\n      var hitSize = (this.options.borderWidth + this.options.hitTolerance) / 2;\n\n      if (axis !== 'x' && axis !== 'y') {\n        var point = {\n          mouseX: mouseX,\n          mouseY: mouseY\n        };\n        var path = this.path,\n            ctx = this.ctx;\n\n        if (path) {\n          setBorderStyle(ctx, this.options);\n          ctx.lineWidth += this.options.hitTolerance;\n          var chart = this.$context.chart;\n          var mx = mouseX * chart.currentDevicePixelRatio;\n          var my = mouseY * chart.currentDevicePixelRatio;\n          var result = ctx.isPointInStroke(path, mx, my) || isOnLabel(this, point, useFinalPosition);\n          ctx.restore();\n          return result;\n        }\n\n        var epsilon = sqr(hitSize);\n        return intersects(this, point, epsilon, useFinalPosition) || isOnLabel(this, point, useFinalPosition);\n      }\n\n      return inAxisRange(this, {\n        mouseX: mouseX,\n        mouseY: mouseY\n      }, axis, {\n        hitSize: hitSize,\n        useFinalPosition: useFinalPosition\n      });\n    }\n  }, {\n    key: \"getCenterPoint\",\n    value: function getCenterPoint(useFinalPosition) {\n      return getElementCenterPoint(this, useFinalPosition);\n    }\n  }, {\n    key: \"draw\",\n    value: function draw(ctx) {\n      var x = this.x,\n          y = this.y,\n          x2 = this.x2,\n          y2 = this.y2,\n          cp = this.cp,\n          options = this.options;\n      ctx.save();\n\n      if (!setBorderStyle(ctx, options)) {\n        // no border width, then line is not drawn\n        return ctx.restore();\n      }\n\n      setShadowStyle(ctx, options);\n      var length = Math.sqrt(Math.pow(x2 - x, 2) + Math.pow(y2 - y, 2));\n\n      if (options.curve && cp) {\n        drawCurve(ctx, this, cp, length);\n        return ctx.restore();\n      }\n\n      var _getArrowHeads = getArrowHeads(this),\n          startOpts = _getArrowHeads.startOpts,\n          endOpts = _getArrowHeads.endOpts,\n          startAdjust = _getArrowHeads.startAdjust,\n          endAdjust = _getArrowHeads.endAdjust;\n\n      var angle = Math.atan2(y2 - y, x2 - x);\n      ctx.translate(x, y);\n      ctx.rotate(angle);\n      ctx.beginPath();\n      ctx.moveTo(0 + startAdjust, 0);\n      ctx.lineTo(length - endAdjust, 0);\n      ctx.shadowColor = options.borderShadowColor;\n      ctx.stroke();\n      drawArrowHead(ctx, 0, startAdjust, startOpts);\n      drawArrowHead(ctx, length, -endAdjust, endOpts);\n      ctx.restore();\n    }\n  }, {\n    key: \"label\",\n    get: function get() {\n      return this.elements && this.elements[0];\n    }\n  }, {\n    key: \"resolveElementProperties\",\n    value: function resolveElementProperties(chart, options) {\n      var area = resolveLineProperties(chart, options);\n      var x = area.x,\n          y = area.y,\n          x2 = area.x2,\n          y2 = area.y2;\n      var inside = isLineInArea(area, chart.chartArea);\n      var properties = inside ? limitLineToArea({\n        x: x,\n        y: y\n      }, {\n        x: x2,\n        y: y2\n      }, chart.chartArea) : {\n        x: x,\n        y: y,\n        x2: x2,\n        y2: y2,\n        width: Math.abs(x2 - x),\n        height: Math.abs(y2 - y)\n      };\n      properties.centerX = (x2 + x) / 2;\n      properties.centerY = (y2 + y) / 2;\n      properties.initProperties = initAnimationProperties(chart, properties, options);\n\n      if (options.curve) {\n        var p1 = {\n          x: properties.x,\n          y: properties.y\n        };\n        var p2 = {\n          x: properties.x2,\n          y: properties.y2\n        };\n        properties.cp = getControlPoint(properties, options, distanceBetweenPoints(p1, p2));\n      }\n\n      var labelProperties = resolveLabelElementProperties(chart, properties, options.label); // additonal prop to manage zoom/pan\n\n      labelProperties._visible = inside;\n      properties.elements = [{\n        type: 'label',\n        optionScope: 'label',\n        properties: labelProperties,\n        initProperties: properties.initProperties\n      }];\n      return properties;\n    }\n  }]);\n\n  return LineAnnotation;\n}(Element);\n\nLineAnnotation.id = 'lineAnnotation';\nvar arrowHeadsDefaults = {\n  backgroundColor: undefined,\n  backgroundShadowColor: undefined,\n  borderColor: undefined,\n  borderDash: undefined,\n  borderDashOffset: undefined,\n  borderShadowColor: undefined,\n  borderWidth: undefined,\n  display: undefined,\n  fill: undefined,\n  length: undefined,\n  shadowBlur: undefined,\n  shadowOffsetX: undefined,\n  shadowOffsetY: undefined,\n  width: undefined\n};\nLineAnnotation.defaults = {\n  adjustScaleRange: true,\n  arrowHeads: {\n    display: false,\n    end: Object.assign({}, arrowHeadsDefaults),\n    fill: false,\n    length: 12,\n    start: Object.assign({}, arrowHeadsDefaults),\n    width: 6\n  },\n  borderDash: [],\n  borderDashOffset: 0,\n  borderShadowColor: 'transparent',\n  borderWidth: 2,\n  curve: false,\n  controlPoint: {\n    y: '-50%'\n  },\n  display: true,\n  endValue: undefined,\n  init: undefined,\n  hitTolerance: 0,\n  label: {\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    backgroundShadowColor: 'transparent',\n    borderCapStyle: 'butt',\n    borderColor: 'black',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: 'miter',\n    borderRadius: 6,\n    borderShadowColor: 'transparent',\n    borderWidth: 0,\n    callout: Object.assign({}, LabelAnnotation.defaults.callout),\n    color: '#fff',\n    content: null,\n    display: false,\n    drawTime: undefined,\n    font: {\n      family: undefined,\n      lineHeight: undefined,\n      size: undefined,\n      style: undefined,\n      weight: 'bold'\n    },\n    height: undefined,\n    hitTolerance: undefined,\n    opacity: undefined,\n    padding: 6,\n    position: 'center',\n    rotation: 0,\n    shadowBlur: 0,\n    shadowOffsetX: 0,\n    shadowOffsetY: 0,\n    textAlign: 'center',\n    textStrokeColor: undefined,\n    textStrokeWidth: 0,\n    width: undefined,\n    xAdjust: 0,\n    yAdjust: 0,\n    z: undefined\n  },\n  scaleID: undefined,\n  shadowBlur: 0,\n  shadowOffsetX: 0,\n  shadowOffsetY: 0,\n  value: undefined,\n  xMax: undefined,\n  xMin: undefined,\n  xScaleID: undefined,\n  yMax: undefined,\n  yMin: undefined,\n  yScaleID: undefined,\n  z: 0\n};\nLineAnnotation.descriptors = {\n  arrowHeads: {\n    start: {\n      _fallback: true\n    },\n    end: {\n      _fallback: true\n    },\n    _fallback: true\n  }\n};\nLineAnnotation.defaultRoutes = {\n  borderColor: 'color'\n};\n\nfunction inAxisRange(element, _ref20, axis, _ref21) {\n  var mouseX = _ref20.mouseX,\n      mouseY = _ref20.mouseY;\n  var hitSize = _ref21.hitSize,\n      useFinalPosition = _ref21.useFinalPosition;\n  var limit = rangeLimit(mouseX, mouseY, element.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis);\n  return inLimit(limit, hitSize) || isOnLabel(element, {\n    mouseX: mouseX,\n    mouseY: mouseY\n  }, useFinalPosition, axis);\n}\n\nfunction isLineInArea(_ref22, _ref23) {\n  var x = _ref22.x,\n      y = _ref22.y,\n      x2 = _ref22.x2,\n      y2 = _ref22.y2;\n  var top = _ref23.top,\n      right = _ref23.right,\n      bottom = _ref23.bottom,\n      left = _ref23.left;\n  return !(x < left && x2 < left || x > right && x2 > right || y < top && y2 < top || y > bottom && y2 > bottom);\n}\n\nfunction limitPointToArea(_ref24, p2, _ref25) {\n  var x = _ref24.x,\n      y = _ref24.y;\n  var top = _ref25.top,\n      right = _ref25.right,\n      bottom = _ref25.bottom,\n      left = _ref25.left;\n\n  if (x < left) {\n    y = interpolateY(left, {\n      x: x,\n      y: y\n    }, p2);\n    x = left;\n  }\n\n  if (x > right) {\n    y = interpolateY(right, {\n      x: x,\n      y: y\n    }, p2);\n    x = right;\n  }\n\n  if (y < top) {\n    x = interpolateX(top, {\n      x: x,\n      y: y\n    }, p2);\n    y = top;\n  }\n\n  if (y > bottom) {\n    x = interpolateX(bottom, {\n      x: x,\n      y: y\n    }, p2);\n    y = bottom;\n  }\n\n  return {\n    x: x,\n    y: y\n  };\n}\n\nfunction limitLineToArea(p1, p2, area) {\n  var _limitPointToArea = limitPointToArea(p1, p2, area),\n      x = _limitPointToArea.x,\n      y = _limitPointToArea.y;\n\n  var _limitPointToArea2 = limitPointToArea(p2, p1, area),\n      x2 = _limitPointToArea2.x,\n      y2 = _limitPointToArea2.y;\n\n  return {\n    x: x,\n    y: y,\n    x2: x2,\n    y2: y2,\n    width: Math.abs(x2 - x),\n    height: Math.abs(y2 - y)\n  };\n}\n\nfunction intersects(element, _ref26) {\n  var mouseX = _ref26.mouseX,\n      mouseY = _ref26.mouseY;\n  var epsilon = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EPSILON;\n  var useFinalPosition = arguments.length > 3 ? arguments[3] : undefined;\n\n  // Adapted from https://stackoverflow.com/a/6853926/25507\n  var _element$getProps2 = element.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition),\n      x1 = _element$getProps2.x,\n      y1 = _element$getProps2.y,\n      x2 = _element$getProps2.x2,\n      y2 = _element$getProps2.y2;\n\n  var dx = x2 - x1;\n  var dy = y2 - y1;\n  var lenSq = sqr(dx) + sqr(dy);\n  var t = lenSq === 0 ? -1 : ((mouseX - x1) * dx + (mouseY - y1) * dy) / lenSq;\n  var xx, yy;\n\n  if (t < 0) {\n    xx = x1;\n    yy = y1;\n  } else if (t > 1) {\n    xx = x2;\n    yy = y2;\n  } else {\n    xx = x1 + t * dx;\n    yy = y1 + t * dy;\n  }\n\n  return sqr(mouseX - xx) + sqr(mouseY - yy) <= epsilon;\n}\n\nfunction isOnLabel(element, _ref27, useFinalPosition, axis) {\n  var mouseX = _ref27.mouseX,\n      mouseY = _ref27.mouseY;\n  var label = element.label;\n  return label.options.display && label.inRange(mouseX, mouseY, axis, useFinalPosition);\n}\n\nfunction resolveLabelElementProperties(chart, properties, options) {\n  var borderWidth = options.borderWidth;\n  var padding = toPadding(options.padding);\n  var textSize = measureLabelSize(chart.ctx, options);\n  var width = textSize.width + padding.width + borderWidth;\n  var height = textSize.height + padding.height + borderWidth;\n  return calculateLabelPosition(properties, options, {\n    width: width,\n    height: height,\n    padding: padding\n  }, chart.chartArea);\n}\n\nfunction calculateAutoRotation(properties) {\n  var x = properties.x,\n      y = properties.y,\n      x2 = properties.x2,\n      y2 = properties.y2;\n  var rotation = Math.atan2(y2 - y, x2 - x); // Flip the rotation if it goes > PI/2 or < -PI/2, so label stays upright\n\n  return rotation > PI / 2 ? rotation - PI : rotation < PI / -2 ? rotation + PI : rotation;\n}\n\nfunction calculateLabelPosition(properties, label, sizes, chartArea) {\n  var width = sizes.width,\n      height = sizes.height,\n      padding = sizes.padding;\n  var xAdjust = label.xAdjust,\n      yAdjust = label.yAdjust;\n  var p1 = {\n    x: properties.x,\n    y: properties.y\n  };\n  var p2 = {\n    x: properties.x2,\n    y: properties.y2\n  };\n  var rotation = label.rotation === 'auto' ? calculateAutoRotation(properties) : toRadians(label.rotation);\n  var size = rotatedSize(width, height, rotation);\n  var t = calculateT(properties, label, {\n    labelSize: size,\n    padding: padding\n  }, chartArea);\n  var pt = properties.cp ? pointInCurve(p1, properties.cp, p2, t) : pointInLine(p1, p2, t);\n  var xCoordinateSizes = {\n    size: size.w,\n    min: chartArea.left,\n    max: chartArea.right,\n    padding: padding.left\n  };\n  var yCoordinateSizes = {\n    size: size.h,\n    min: chartArea.top,\n    max: chartArea.bottom,\n    padding: padding.top\n  };\n  var centerX = adjustLabelCoordinate(pt.x, xCoordinateSizes) + xAdjust;\n  var centerY = adjustLabelCoordinate(pt.y, yCoordinateSizes) + yAdjust;\n  return {\n    x: centerX - width / 2,\n    y: centerY - height / 2,\n    x2: centerX + width / 2,\n    y2: centerY + height / 2,\n    centerX: centerX,\n    centerY: centerY,\n    pointX: pt.x,\n    pointY: pt.y,\n    width: width,\n    height: height,\n    rotation: toDegrees(rotation)\n  };\n}\n\nfunction rotatedSize(width, height, rotation) {\n  var cos = Math.cos(rotation);\n  var sin = Math.sin(rotation);\n  return {\n    w: Math.abs(width * cos) + Math.abs(height * sin),\n    h: Math.abs(width * sin) + Math.abs(height * cos)\n  };\n}\n\nfunction calculateT(properties, label, sizes, chartArea) {\n  var t;\n  var space = spaceAround(properties, chartArea);\n\n  if (label.position === 'start') {\n    t = calculateTAdjust({\n      w: properties.x2 - properties.x,\n      h: properties.y2 - properties.y\n    }, sizes, label, space);\n  } else if (label.position === 'end') {\n    t = 1 - calculateTAdjust({\n      w: properties.x - properties.x2,\n      h: properties.y - properties.y2\n    }, sizes, label, space);\n  } else {\n    t = getRelativePosition(1, label.position);\n  }\n\n  return t;\n}\n\nfunction calculateTAdjust(lineSize, sizes, label, space) {\n  var labelSize = sizes.labelSize,\n      padding = sizes.padding;\n  var lineW = lineSize.w * space.dx;\n  var lineH = lineSize.h * space.dy;\n  var x = lineW > 0 && (labelSize.w / 2 + padding.left - space.x) / lineW;\n  var y = lineH > 0 && (labelSize.h / 2 + padding.top - space.y) / lineH;\n  return clamp(Math.max(x, y), 0, 0.25);\n}\n\nfunction spaceAround(properties, chartArea) {\n  var x = properties.x,\n      x2 = properties.x2,\n      y = properties.y,\n      y2 = properties.y2;\n  var t = Math.min(y, y2) - chartArea.top;\n  var l = Math.min(x, x2) - chartArea.left;\n  var b = chartArea.bottom - Math.max(y, y2);\n  var r = chartArea.right - Math.max(x, x2);\n  return {\n    x: Math.min(l, r),\n    y: Math.min(t, b),\n    dx: l <= r ? 1 : -1,\n    dy: t <= b ? 1 : -1\n  };\n}\n\nfunction adjustLabelCoordinate(coordinate, labelSizes) {\n  var size = labelSizes.size,\n      min = labelSizes.min,\n      max = labelSizes.max,\n      padding = labelSizes.padding;\n  var halfSize = size / 2;\n\n  if (size > max - min) {\n    // if it does not fit, display as much as possible\n    return (max + min) / 2;\n  }\n\n  if (min >= coordinate - padding - halfSize) {\n    coordinate = min + padding + halfSize;\n  }\n\n  if (max <= coordinate + padding + halfSize) {\n    coordinate = max - padding - halfSize;\n  }\n\n  return coordinate;\n}\n\nfunction getArrowHeads(line) {\n  var options = line.options;\n  var arrowStartOpts = options.arrowHeads && options.arrowHeads.start;\n  var arrowEndOpts = options.arrowHeads && options.arrowHeads.end;\n  return {\n    startOpts: arrowStartOpts,\n    endOpts: arrowEndOpts,\n    startAdjust: getLineAdjust(line, arrowStartOpts),\n    endAdjust: getLineAdjust(line, arrowEndOpts)\n  };\n}\n\nfunction getLineAdjust(line, arrowOpts) {\n  if (!arrowOpts || !arrowOpts.display) {\n    return 0;\n  }\n\n  var length = arrowOpts.length,\n      width = arrowOpts.width;\n  var adjust = line.options.borderWidth / 2;\n  var p1 = {\n    x: length,\n    y: width + adjust\n  };\n  var p2 = {\n    x: 0,\n    y: adjust\n  };\n  return Math.abs(interpolateX(0, p1, p2));\n}\n\nfunction drawArrowHead(ctx, offset, adjust, arrowOpts) {\n  if (!arrowOpts || !arrowOpts.display) {\n    return;\n  }\n\n  var length = arrowOpts.length,\n      width = arrowOpts.width,\n      fill = arrowOpts.fill,\n      backgroundColor = arrowOpts.backgroundColor,\n      borderColor = arrowOpts.borderColor;\n  var arrowOffsetX = Math.abs(offset - length) + adjust;\n  ctx.beginPath();\n  setShadowStyle(ctx, arrowOpts);\n  setBorderStyle(ctx, arrowOpts);\n  ctx.moveTo(arrowOffsetX, -width);\n  ctx.lineTo(offset + adjust, 0);\n  ctx.lineTo(arrowOffsetX, width);\n\n  if (fill === true) {\n    ctx.fillStyle = backgroundColor || borderColor;\n    ctx.closePath();\n    ctx.fill();\n    ctx.shadowColor = 'transparent';\n  } else {\n    ctx.shadowColor = arrowOpts.borderShadowColor;\n  }\n\n  ctx.stroke();\n}\n\nfunction getControlPoint(properties, options, distance) {\n  var x = properties.x,\n      y = properties.y,\n      x2 = properties.x2,\n      y2 = properties.y2,\n      centerX = properties.centerX,\n      centerY = properties.centerY;\n  var angle = Math.atan2(y2 - y, x2 - x);\n  var cp = toPosition(options.controlPoint, 0);\n  var point = {\n    x: centerX + getSize(distance, cp.x, false),\n    y: centerY + getSize(distance, cp.y, false)\n  };\n  return rotated(point, {\n    x: centerX,\n    y: centerY\n  }, angle);\n}\n\nfunction drawArrowHeadOnCurve(ctx, _ref28, _ref29, arrowOpts) {\n  var x = _ref28.x,\n      y = _ref28.y;\n  var angle = _ref29.angle,\n      adjust = _ref29.adjust;\n\n  if (!arrowOpts || !arrowOpts.display) {\n    return;\n  }\n\n  ctx.save();\n  ctx.translate(x, y);\n  ctx.rotate(angle);\n  drawArrowHead(ctx, 0, -adjust, arrowOpts);\n  ctx.restore();\n}\n\nfunction drawCurve(ctx, element, cp, length) {\n  var x = element.x,\n      y = element.y,\n      x2 = element.x2,\n      y2 = element.y2,\n      options = element.options;\n\n  var _getArrowHeads2 = getArrowHeads(element),\n      startOpts = _getArrowHeads2.startOpts,\n      endOpts = _getArrowHeads2.endOpts,\n      startAdjust = _getArrowHeads2.startAdjust,\n      endAdjust = _getArrowHeads2.endAdjust;\n\n  var p1 = {\n    x: x,\n    y: y\n  };\n  var p2 = {\n    x: x2,\n    y: y2\n  };\n  var startAngle = angleInCurve(p1, cp, p2, 0);\n  var endAngle = angleInCurve(p1, cp, p2, 1) - PI;\n  var ps = pointInCurve(p1, cp, p2, startAdjust / length);\n  var pe = pointInCurve(p1, cp, p2, 1 - endAdjust / length);\n  var path = new Path2D();\n  ctx.beginPath();\n  path.moveTo(ps.x, ps.y);\n  path.quadraticCurveTo(cp.x, cp.y, pe.x, pe.y);\n  ctx.shadowColor = options.borderShadowColor;\n  ctx.stroke(path);\n  element.path = path;\n  element.ctx = ctx;\n  drawArrowHeadOnCurve(ctx, ps, {\n    angle: startAngle,\n    adjust: startAdjust\n  }, startOpts);\n  drawArrowHeadOnCurve(ctx, pe, {\n    angle: endAngle,\n    adjust: endAdjust\n  }, endOpts);\n}\n\nvar EllipseAnnotation = /*#__PURE__*/function (_Element5) {\n  _inherits(EllipseAnnotation, _Element5);\n\n  var _super5 = _createSuper(EllipseAnnotation);\n\n  function EllipseAnnotation() {\n    _classCallCheck(this, EllipseAnnotation);\n\n    return _super5.apply(this, arguments);\n  }\n\n  _createClass(EllipseAnnotation, [{\n    key: \"inRange\",\n    value: function inRange(mouseX, mouseY, axis, useFinalPosition) {\n      var rotation = this.options.rotation;\n      var hitSize = (this.options.borderWidth + this.options.hitTolerance) / 2;\n\n      if (axis !== 'x' && axis !== 'y') {\n        return pointInEllipse({\n          x: mouseX,\n          y: mouseY\n        }, this.getProps(['width', 'height', 'centerX', 'centerY'], useFinalPosition), rotation, hitSize);\n      }\n\n      var _this$getProps = this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition),\n          x = _this$getProps.x,\n          y = _this$getProps.y,\n          x2 = _this$getProps.x2,\n          y2 = _this$getProps.y2;\n\n      var limit = axis === 'y' ? {\n        start: y,\n        end: y2\n      } : {\n        start: x,\n        end: x2\n      };\n      var rotatedPoint = rotated({\n        x: mouseX,\n        y: mouseY\n      }, this.getCenterPoint(useFinalPosition), toRadians(-rotation));\n      return rotatedPoint[axis] >= limit.start - hitSize - EPSILON && rotatedPoint[axis] <= limit.end + hitSize + EPSILON;\n    }\n  }, {\n    key: \"getCenterPoint\",\n    value: function getCenterPoint(useFinalPosition) {\n      return getElementCenterPoint(this, useFinalPosition);\n    }\n  }, {\n    key: \"draw\",\n    value: function draw(ctx) {\n      var width = this.width,\n          height = this.height,\n          centerX = this.centerX,\n          centerY = this.centerY,\n          options = this.options;\n      ctx.save();\n      translate(ctx, this.getCenterPoint(), options.rotation);\n      setShadowStyle(ctx, this.options);\n      ctx.beginPath();\n      ctx.fillStyle = options.backgroundColor;\n      var stroke = setBorderStyle(ctx, options);\n      ctx.ellipse(centerX, centerY, height / 2, width / 2, PI / 2, 0, 2 * PI);\n      ctx.fill();\n\n      if (stroke) {\n        ctx.shadowColor = options.borderShadowColor;\n        ctx.stroke();\n      }\n\n      ctx.restore();\n    }\n  }, {\n    key: \"label\",\n    get: function get() {\n      return this.elements && this.elements[0];\n    }\n  }, {\n    key: \"resolveElementProperties\",\n    value: function resolveElementProperties(chart, options) {\n      return resolveBoxAndLabelProperties(chart, options);\n    }\n  }]);\n\n  return EllipseAnnotation;\n}(Element);\n\nEllipseAnnotation.id = 'ellipseAnnotation';\nEllipseAnnotation.defaults = {\n  adjustScaleRange: true,\n  backgroundShadowColor: 'transparent',\n  borderDash: [],\n  borderDashOffset: 0,\n  borderShadowColor: 'transparent',\n  borderWidth: 1,\n  display: true,\n  hitTolerance: 0,\n  init: undefined,\n  label: Object.assign({}, BoxAnnotation.defaults.label),\n  rotation: 0,\n  shadowBlur: 0,\n  shadowOffsetX: 0,\n  shadowOffsetY: 0,\n  xMax: undefined,\n  xMin: undefined,\n  xScaleID: undefined,\n  yMax: undefined,\n  yMin: undefined,\n  yScaleID: undefined,\n  z: 0\n};\nEllipseAnnotation.defaultRoutes = {\n  borderColor: 'color',\n  backgroundColor: 'color'\n};\nEllipseAnnotation.descriptors = {\n  label: {\n    _fallback: true\n  }\n};\n\nfunction pointInEllipse(p, ellipse, rotation, hitSize) {\n  var width = ellipse.width,\n      height = ellipse.height,\n      centerX = ellipse.centerX,\n      centerY = ellipse.centerY;\n  var xRadius = width / 2;\n  var yRadius = height / 2;\n\n  if (xRadius <= 0 || yRadius <= 0) {\n    return false;\n  } // https://stackoverflow.com/questions/7946187/point-and-ellipse-rotated-position-test-algorithm\n\n\n  var angle = toRadians(rotation || 0);\n  var cosAngle = Math.cos(angle);\n  var sinAngle = Math.sin(angle);\n  var a = Math.pow(cosAngle * (p.x - centerX) + sinAngle * (p.y - centerY), 2);\n  var b = Math.pow(sinAngle * (p.x - centerX) - cosAngle * (p.y - centerY), 2);\n  return a / Math.pow(xRadius + hitSize, 2) + b / Math.pow(yRadius + hitSize, 2) <= 1.0001;\n}\n\nvar PointAnnotation = /*#__PURE__*/function (_Element6) {\n  _inherits(PointAnnotation, _Element6);\n\n  var _super6 = _createSuper(PointAnnotation);\n\n  function PointAnnotation() {\n    _classCallCheck(this, PointAnnotation);\n\n    return _super6.apply(this, arguments);\n  }\n\n  _createClass(PointAnnotation, [{\n    key: \"inRange\",\n    value: function inRange(mouseX, mouseY, axis, useFinalPosition) {\n      var _this$getProps2 = this.getProps(['x', 'y', 'x2', 'y2', 'width'], useFinalPosition),\n          x = _this$getProps2.x,\n          y = _this$getProps2.y,\n          x2 = _this$getProps2.x2,\n          y2 = _this$getProps2.y2,\n          width = _this$getProps2.width;\n\n      var hitSize = (this.options.borderWidth + this.options.hitTolerance) / 2;\n\n      if (axis !== 'x' && axis !== 'y') {\n        return inPointRange({\n          x: mouseX,\n          y: mouseY\n        }, this.getCenterPoint(useFinalPosition), width / 2, hitSize);\n      }\n\n      var limit = axis === 'y' ? {\n        start: y,\n        end: y2,\n        value: mouseY\n      } : {\n        start: x,\n        end: x2,\n        value: mouseX\n      };\n      return inLimit(limit, hitSize);\n    }\n  }, {\n    key: \"getCenterPoint\",\n    value: function getCenterPoint(useFinalPosition) {\n      return getElementCenterPoint(this, useFinalPosition);\n    }\n  }, {\n    key: \"draw\",\n    value: function draw(ctx) {\n      var options = this.options;\n      var borderWidth = options.borderWidth;\n\n      if (options.radius < 0.1) {\n        return;\n      }\n\n      ctx.save();\n      ctx.fillStyle = options.backgroundColor;\n      setShadowStyle(ctx, options);\n      var stroke = setBorderStyle(ctx, options);\n      drawPoint(ctx, this, this.centerX, this.centerY);\n\n      if (stroke && !isImageOrCanvas(options.pointStyle)) {\n        ctx.shadowColor = options.borderShadowColor;\n        ctx.stroke();\n      }\n\n      ctx.restore();\n      options.borderWidth = borderWidth;\n    }\n  }, {\n    key: \"resolveElementProperties\",\n    value: function resolveElementProperties(chart, options) {\n      var properties = resolvePointProperties(chart, options);\n      properties.initProperties = initAnimationProperties(chart, properties, options);\n      return properties;\n    }\n  }]);\n\n  return PointAnnotation;\n}(Element);\n\nPointAnnotation.id = 'pointAnnotation';\nPointAnnotation.defaults = {\n  adjustScaleRange: true,\n  backgroundShadowColor: 'transparent',\n  borderDash: [],\n  borderDashOffset: 0,\n  borderShadowColor: 'transparent',\n  borderWidth: 1,\n  display: true,\n  hitTolerance: 0,\n  init: undefined,\n  pointStyle: 'circle',\n  radius: 10,\n  rotation: 0,\n  shadowBlur: 0,\n  shadowOffsetX: 0,\n  shadowOffsetY: 0,\n  xAdjust: 0,\n  xMax: undefined,\n  xMin: undefined,\n  xScaleID: undefined,\n  xValue: undefined,\n  yAdjust: 0,\n  yMax: undefined,\n  yMin: undefined,\n  yScaleID: undefined,\n  yValue: undefined,\n  z: 0\n};\nPointAnnotation.defaultRoutes = {\n  borderColor: 'color',\n  backgroundColor: 'color'\n};\n\nvar PolygonAnnotation = /*#__PURE__*/function (_Element7) {\n  _inherits(PolygonAnnotation, _Element7);\n\n  var _super7 = _createSuper(PolygonAnnotation);\n\n  function PolygonAnnotation() {\n    _classCallCheck(this, PolygonAnnotation);\n\n    return _super7.apply(this, arguments);\n  }\n\n  _createClass(PolygonAnnotation, [{\n    key: \"inRange\",\n    value: function inRange(mouseX, mouseY, axis, useFinalPosition) {\n      if (axis !== 'x' && axis !== 'y') {\n        return this.options.radius >= 0.1 && this.elements.length > 1 && pointIsInPolygon(this.elements, mouseX, mouseY, useFinalPosition);\n      }\n\n      var rotatedPoint = rotated({\n        x: mouseX,\n        y: mouseY\n      }, this.getCenterPoint(useFinalPosition), toRadians(-this.options.rotation));\n      var axisPoints = this.elements.map(function (point) {\n        return axis === 'y' ? point.bY : point.bX;\n      });\n      var start = Math.min.apply(Math, _toConsumableArray(axisPoints));\n      var end = Math.max.apply(Math, _toConsumableArray(axisPoints));\n      return rotatedPoint[axis] >= start && rotatedPoint[axis] <= end;\n    }\n  }, {\n    key: \"getCenterPoint\",\n    value: function getCenterPoint(useFinalPosition) {\n      return getElementCenterPoint(this, useFinalPosition);\n    }\n  }, {\n    key: \"draw\",\n    value: function draw(ctx) {\n      var elements = this.elements,\n          options = this.options;\n      ctx.save();\n      ctx.beginPath();\n      ctx.fillStyle = options.backgroundColor;\n      setShadowStyle(ctx, options);\n      var stroke = setBorderStyle(ctx, options);\n      var first = true;\n\n      var _iterator7 = _createForOfIteratorHelper(elements),\n          _step7;\n\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var el = _step7.value;\n\n          if (first) {\n            ctx.moveTo(el.x, el.y);\n            first = false;\n          } else {\n            ctx.lineTo(el.x, el.y);\n          }\n        }\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n\n      ctx.closePath();\n      ctx.fill(); // If no border, don't draw it\n\n      if (stroke) {\n        ctx.shadowColor = options.borderShadowColor;\n        ctx.stroke();\n      }\n\n      ctx.restore();\n    }\n  }, {\n    key: \"resolveElementProperties\",\n    value: function resolveElementProperties(chart, options) {\n      var properties = resolvePointProperties(chart, options);\n      var sides = options.sides,\n          rotation = options.rotation;\n      var elements = [];\n      var angle = 2 * PI / sides;\n      var rad = rotation * RAD_PER_DEG;\n\n      for (var i = 0; i < sides; i++, rad += angle) {\n        var elProps = buildPointElement(properties, options, rad);\n        elProps.initProperties = initAnimationProperties(chart, properties, options);\n        elements.push(elProps);\n      }\n\n      properties.elements = elements;\n      return properties;\n    }\n  }]);\n\n  return PolygonAnnotation;\n}(Element);\n\nPolygonAnnotation.id = 'polygonAnnotation';\nPolygonAnnotation.defaults = {\n  adjustScaleRange: true,\n  backgroundShadowColor: 'transparent',\n  borderCapStyle: 'butt',\n  borderDash: [],\n  borderDashOffset: 0,\n  borderJoinStyle: 'miter',\n  borderShadowColor: 'transparent',\n  borderWidth: 1,\n  display: true,\n  hitTolerance: 0,\n  init: undefined,\n  point: {\n    radius: 0\n  },\n  radius: 10,\n  rotation: 0,\n  shadowBlur: 0,\n  shadowOffsetX: 0,\n  shadowOffsetY: 0,\n  sides: 3,\n  xAdjust: 0,\n  xMax: undefined,\n  xMin: undefined,\n  xScaleID: undefined,\n  xValue: undefined,\n  yAdjust: 0,\n  yMax: undefined,\n  yMin: undefined,\n  yScaleID: undefined,\n  yValue: undefined,\n  z: 0\n};\nPolygonAnnotation.defaultRoutes = {\n  borderColor: 'color',\n  backgroundColor: 'color'\n};\n\nfunction buildPointElement(_ref30, _ref31, rad) {\n  var centerX = _ref30.centerX,\n      centerY = _ref30.centerY;\n  var radius = _ref31.radius,\n      borderWidth = _ref31.borderWidth,\n      hitTolerance = _ref31.hitTolerance;\n  var hitSize = (borderWidth + hitTolerance) / 2;\n  var sin = Math.sin(rad);\n  var cos = Math.cos(rad);\n  var point = {\n    x: centerX + sin * radius,\n    y: centerY - cos * radius\n  };\n  return {\n    type: 'point',\n    optionScope: 'point',\n    properties: {\n      x: point.x,\n      y: point.y,\n      centerX: point.x,\n      centerY: point.y,\n      bX: centerX + sin * (radius + hitSize),\n      bY: centerY - cos * (radius + hitSize)\n    }\n  };\n}\n\nfunction pointIsInPolygon(points, x, y, useFinalPosition) {\n  var isInside = false;\n  var A = points[points.length - 1].getProps(['bX', 'bY'], useFinalPosition);\n\n  var _iterator8 = _createForOfIteratorHelper(points),\n      _step8;\n\n  try {\n    for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n      var point = _step8.value;\n      var B = point.getProps(['bX', 'bY'], useFinalPosition);\n\n      if (B.bY > y !== A.bY > y && x < (A.bX - B.bX) * (y - B.bY) / (A.bY - B.bY) + B.bX) {\n        isInside = !isInside;\n      }\n\n      A = B;\n    }\n  } catch (err) {\n    _iterator8.e(err);\n  } finally {\n    _iterator8.f();\n  }\n\n  return isInside;\n}\n\nvar annotationTypes = {\n  box: BoxAnnotation,\n  doughnutLabel: DoughnutLabelAnnotation,\n  ellipse: EllipseAnnotation,\n  label: LabelAnnotation,\n  line: LineAnnotation,\n  point: PointAnnotation,\n  polygon: PolygonAnnotation\n};\n/**\n * Register fallback for annotation elements\n * For example lineAnnotation options would be looked through:\n * - the annotation object (options.plugins.annotation.annotations[id])\n * - element options (options.elements.lineAnnotation)\n * - element defaults (defaults.elements.lineAnnotation)\n * - annotation plugin defaults (defaults.plugins.annotation, this is what we are registering here)\n */\n\nObject.keys(annotationTypes).forEach(function (key) {\n  defaults.describe(\"elements.\".concat(annotationTypes[key].id), {\n    _fallback: 'plugins.annotation.common'\n  });\n});\nvar directUpdater = {\n  update: Object.assign\n};\nvar hooks$1 = eventHooks.concat(elementHooks);\n\nvar resolve = function resolve(value, optDefs) {\n  return isObject(optDefs) ? resolveObj(value, optDefs) : value;\n};\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").UpdateMode } UpdateMode\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n */\n\n/**\n * @param {string} prop\n * @returns {boolean}\n */\n\n\nvar isIndexable = function isIndexable(prop) {\n  return prop === 'color' || prop === 'font';\n};\n/**\n * Resolve the annotation type, checking if is supported.\n * @param {string} [type=line] - annotation type\n * @returns {string} resolved annotation type\n */\n\n\nfunction resolveType() {\n  var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'line';\n\n  if (annotationTypes[type]) {\n    return type;\n  }\n\n  console.warn(\"Unknown annotation type: '\".concat(type, \"', defaulting to 'line'\"));\n  return 'line';\n}\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n * @param {UpdateMode} mode\n */\n\n\nfunction updateElements(chart, state, options, mode) {\n  var animations = resolveAnimations(chart, options.animations, mode);\n  var annotations = state.annotations;\n  var elements = resyncElements(state.elements, annotations);\n\n  for (var i = 0; i < annotations.length; i++) {\n    var annotationOptions = annotations[i];\n    var element = getOrCreateElement(elements, i, annotationOptions.type);\n    var resolver = annotationOptions.setContext(getContext(chart, element, elements, annotationOptions));\n    var properties = element.resolveElementProperties(chart, resolver);\n    properties.skip = toSkip(properties);\n\n    if ('elements' in properties) {\n      updateSubElements(element, properties.elements, resolver, animations); // Remove the sub-element definitions from properties, so the actual elements\n      // are not overwritten by their definitions\n\n      delete properties.elements;\n    }\n\n    if (!defined(element.x)) {\n      // If the element is newly created, assing the properties directly - to\n      // make them readily awailable to any scriptable options. If we do not do this,\n      // the properties retruned by `resolveElementProperties` are available only\n      // after options resolution.\n      Object.assign(element, properties);\n    }\n\n    Object.assign(element, properties.initProperties);\n    properties.options = resolveAnnotationOptions(resolver);\n    animations.update(element, properties);\n  }\n}\n\nfunction toSkip(properties) {\n  return isNaN(properties.x) || isNaN(properties.y);\n}\n\nfunction resolveAnimations(chart, animOpts, mode) {\n  if (mode === 'reset' || mode === 'none' || mode === 'resize') {\n    return directUpdater;\n  }\n\n  return new Animations(chart, animOpts);\n}\n\nfunction updateSubElements(mainElement, elements, resolver, animations) {\n  var subElements = mainElement.elements || (mainElement.elements = []);\n  subElements.length = elements.length;\n\n  for (var i = 0; i < elements.length; i++) {\n    var definition = elements[i];\n    var properties = definition.properties;\n    var subElement = getOrCreateElement(subElements, i, definition.type, definition.initProperties);\n    var subResolver = resolver[definition.optionScope].override(definition);\n    properties.options = resolveAnnotationOptions(subResolver);\n    animations.update(subElement, properties);\n  }\n}\n\nfunction getOrCreateElement(elements, index, type, initProperties) {\n  var elementClass = annotationTypes[resolveType(type)];\n  var element = elements[index];\n\n  if (!element || !(element instanceof elementClass)) {\n    element = elements[index] = new elementClass();\n    Object.assign(element, initProperties);\n  }\n\n  return element;\n}\n\nfunction resolveAnnotationOptions(resolver) {\n  var elementClass = annotationTypes[resolveType(resolver.type)];\n  var result = {};\n  result.id = resolver.id;\n  result.type = resolver.type;\n  result.drawTime = resolver.drawTime;\n  Object.assign(result, resolveObj(resolver, elementClass.defaults), resolveObj(resolver, elementClass.defaultRoutes));\n\n  var _iterator9 = _createForOfIteratorHelper(hooks$1),\n      _step9;\n\n  try {\n    for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n      var hook = _step9.value;\n      result[hook] = resolver[hook];\n    }\n  } catch (err) {\n    _iterator9.e(err);\n  } finally {\n    _iterator9.f();\n  }\n\n  return result;\n}\n\nfunction resolveObj(resolver, defs) {\n  var result = {};\n\n  var _loop = function _loop() {\n    var prop = _Object$keys3[_i5];\n    var optDefs = defs[prop];\n    var value = resolver[prop];\n\n    if (isIndexable(prop) && isArray(value)) {\n      result[prop] = value.map(function (item) {\n        return resolve(item, optDefs);\n      });\n    } else {\n      result[prop] = resolve(value, optDefs);\n    }\n  };\n\n  for (var _i5 = 0, _Object$keys3 = Object.keys(defs); _i5 < _Object$keys3.length; _i5++) {\n    _loop();\n  }\n\n  return result;\n}\n\nfunction getContext(chart, element, elements, annotation) {\n  return element.$context || (element.$context = Object.assign(Object.create(chart.getContext()), {\n    element: element,\n\n    get elements() {\n      return elements.filter(function (el) {\n        return el && el.options;\n      });\n    },\n\n    id: annotation.id,\n    type: 'annotation'\n  }));\n}\n\nfunction resyncElements(elements, annotations) {\n  var count = annotations.length;\n  var start = elements.length;\n\n  if (start < count) {\n    var add = count - start;\n    elements.splice.apply(elements, [start, 0].concat(_toConsumableArray(new Array(add))));\n  } else if (start > count) {\n    elements.splice(count, start - count);\n  }\n\n  return elements;\n}\n\nvar version = \"3.1.0\";\nvar chartStates = new Map();\n\nvar isNotDoughnutLabel = function isNotDoughnutLabel(annotation) {\n  return annotation.type !== 'doughnutLabel';\n};\n\nvar hooks = eventHooks.concat(elementHooks);\nvar annotation = {\n  id: 'annotation',\n  version: version,\n  beforeRegister: function beforeRegister() {\n    requireVersion('chart.js', '4.0', Chart.version);\n  },\n  afterRegister: function afterRegister() {\n    Chart.register(annotationTypes);\n  },\n  afterUnregister: function afterUnregister() {\n    Chart.unregister(annotationTypes);\n  },\n  beforeInit: function beforeInit(chart) {\n    chartStates.set(chart, {\n      annotations: [],\n      elements: [],\n      visibleElements: [],\n      listeners: {},\n      listened: false,\n      moveListened: false,\n      hooks: {},\n      hooked: false,\n      hovered: []\n    });\n  },\n  beforeUpdate: function beforeUpdate(chart, args, options) {\n    var state = chartStates.get(chart);\n    var annotations = state.annotations = [];\n    var annotationOptions = options.annotations;\n\n    if (isObject(annotationOptions)) {\n      Object.keys(annotationOptions).forEach(function (key) {\n        var value = annotationOptions[key];\n\n        if (isObject(value)) {\n          value.id = key;\n          annotations.push(value);\n        }\n      });\n    } else if (isArray(annotationOptions)) {\n      annotations.push.apply(annotations, _toConsumableArray(annotationOptions));\n    }\n\n    verifyScaleOptions(annotations.filter(isNotDoughnutLabel), chart.scales);\n  },\n  afterDataLimits: function afterDataLimits(chart, args) {\n    var state = chartStates.get(chart);\n    adjustScaleRange(chart, args.scale, state.annotations.filter(isNotDoughnutLabel).filter(function (a) {\n      return a.display && a.adjustScaleRange;\n    }));\n  },\n  afterUpdate: function afterUpdate(chart, args, options) {\n    var state = chartStates.get(chart);\n    updateListeners(chart, state, options);\n    updateElements(chart, state, options, args.mode);\n    state.visibleElements = state.elements.filter(function (el) {\n      return !el.skip && el.options.display;\n    });\n    updateHooks(chart, state, options);\n  },\n  beforeDatasetsDraw: function beforeDatasetsDraw(chart, _args, options) {\n    draw(chart, 'beforeDatasetsDraw', options.clip);\n  },\n  afterDatasetsDraw: function afterDatasetsDraw(chart, _args, options) {\n    draw(chart, 'afterDatasetsDraw', options.clip);\n  },\n  beforeDatasetDraw: function beforeDatasetDraw(chart, _args, options) {\n    draw(chart, _args.index, options.clip);\n  },\n  beforeDraw: function beforeDraw(chart, _args, options) {\n    draw(chart, 'beforeDraw', options.clip);\n  },\n  afterDraw: function afterDraw(chart, _args, options) {\n    draw(chart, 'afterDraw', options.clip);\n  },\n  beforeEvent: function beforeEvent(chart, args, options) {\n    var state = chartStates.get(chart);\n\n    if (handleEvent(state, args.event, options)) {\n      args.changed = true;\n    }\n  },\n  afterDestroy: function afterDestroy(chart) {\n    chartStates.delete(chart);\n  },\n  getAnnotations: function getAnnotations(chart) {\n    var state = chartStates.get(chart);\n    return state ? state.elements : [];\n  },\n  // only for testing\n  _getAnnotationElementsAtEventForMode: function _getAnnotationElementsAtEventForMode(visibleElements, event, options) {\n    return getElements(visibleElements, event, options);\n  },\n  defaults: {\n    animations: {\n      numbers: {\n        properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'centerX', 'centerY', 'pointX', 'pointY', 'radius'],\n        type: 'number'\n      },\n      colors: {\n        properties: ['backgroundColor', 'borderColor'],\n        type: 'color'\n      }\n    },\n    clip: true,\n    interaction: {\n      mode: undefined,\n      axis: undefined,\n      intersect: undefined\n    },\n    common: {\n      drawTime: 'afterDatasetsDraw',\n      init: false,\n      label: {}\n    }\n  },\n  descriptors: {\n    _indexable: false,\n    _scriptable: function _scriptable(prop) {\n      return !hooks.includes(prop) && prop !== 'init';\n    },\n    annotations: {\n      _allKeys: false,\n      _fallback: function _fallback(prop, opts) {\n        return \"elements.\".concat(annotationTypes[resolveType(opts.type)].id);\n      }\n    },\n    interaction: {\n      _fallback: true\n    },\n    common: {\n      label: {\n        _indexable: isIndexable,\n        _fallback: true\n      },\n      _indexable: isIndexable\n    }\n  },\n  additionalOptionScopes: ['']\n};\n\nfunction draw(chart, caller, clip) {\n  var ctx = chart.ctx,\n      chartArea = chart.chartArea;\n  var state = chartStates.get(chart);\n\n  if (clip) {\n    clipArea(ctx, chartArea);\n  }\n\n  var drawableElements = getDrawableElements(state.visibleElements, caller).sort(function (a, b) {\n    return a.element.options.z - b.element.options.z;\n  });\n\n  var _iterator10 = _createForOfIteratorHelper(drawableElements),\n      _step10;\n\n  try {\n    for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n      var item = _step10.value;\n      drawElement(ctx, chartArea, state, item);\n    }\n  } catch (err) {\n    _iterator10.e(err);\n  } finally {\n    _iterator10.f();\n  }\n\n  if (clip) {\n    unclipArea(ctx);\n  }\n}\n\nfunction getDrawableElements(elements, caller) {\n  var drawableElements = [];\n\n  var _iterator11 = _createForOfIteratorHelper(elements),\n      _step11;\n\n  try {\n    for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n      var el = _step11.value;\n\n      if (el.options.drawTime === caller) {\n        drawableElements.push({\n          element: el,\n          main: true\n        });\n      }\n\n      if (el.elements && el.elements.length) {\n        var _iterator12 = _createForOfIteratorHelper(el.elements),\n            _step12;\n\n        try {\n          for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n            var sub = _step12.value;\n\n            if (sub.options.display && sub.options.drawTime === caller) {\n              drawableElements.push({\n                element: sub\n              });\n            }\n          }\n        } catch (err) {\n          _iterator12.e(err);\n        } finally {\n          _iterator12.f();\n        }\n      }\n    }\n  } catch (err) {\n    _iterator11.e(err);\n  } finally {\n    _iterator11.f();\n  }\n\n  return drawableElements;\n}\n\nfunction drawElement(ctx, chartArea, state, item) {\n  var el = item.element;\n\n  if (item.main) {\n    invokeHook(state, el, 'beforeDraw');\n    el.draw(ctx, chartArea);\n    invokeHook(state, el, 'afterDraw');\n  } else {\n    el.draw(ctx, chartArea);\n  }\n}\n\nexport { annotation as default };","import {Controller} from '@hotwired/stimulus'\nimport { Chart, LineElement, PointElement, LineController, CategoryScale, LinearScale, Title, Tooltip, Legend } from \"chart.js\";\nimport annotationPlugin from \"chartjs-plugin-annotation\";\n\nChart.register(\n  LineElement,\n  PointElement,\n  LineController,\n  CategoryScale,\n  LinearScale,\n  Title,\n  Tooltip,\n  Legend,\n  annotationPlugin\n);\n\nexport default class extends Controller {\n  static values = { chartData: Array, options: Object, type: String }\n\n  connect() {\n   this.renderChart()\n  }\n\n  renderChart() {\n    const ctx = this.element.getContext(\"2d\")\n    if (this.chart) this.chart.destroy()\n\n    this.chart = new Chart(ctx, {\n      type: \"line\",\n      data: {\n        labels: this.chartDataValue.map(d => d[0]),\n        datasets: [{\n          data: this.chartDataValue.map(d => d[1]),\n          backgroundColor: \"rgba(1, 105, 115, 0.3)\",\n          borderColor: \"rgba(1, 105, 115, 1)\",\n          borderWidth: 1,\n          fill: true\n        },\n        {\n          data: this.chartDataValue.map(d => d[2]),\n          backgroundColor: \"rgba(130, 130, 130, 0.1)\",\n          borderColor: \"rgba(130,130,130,0.3\",\n          borderWidth: 1,\n          fill: true\n        }],\n      },\n      options: this.optionsValue || {}\n    })\n  }\n}\n","import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  static targets = ['startTime', 'startDate', 'endDate', 'endTime', 'info', 'type', 'button']\n  static values = {url: String, bookingId: String}\n\n  check = () => {\n    this.sendRequest()\n  }\n\n  typeTargetConnected(element) {\n    if (this.hasStartDateTarget) {\n      element.addEventListener('change', this.check)\n    }\n  }\n\n  typeTargetDisconnected(element) {\n    if (this.hasStartDateTarget) {\n      this.check()\n      element.removeEventListener('change', this.check)\n    }\n  }\n\n  sendRequest() {\n    if (!this.hasEndTimeTarget || !this.hasStartTimeTarget || !this.hasStartDateTarget || !this.hasEndDateTarget ||\n        !this.endTimeTarget.value || !this.startTimeTarget.value || !this.startDateTarget.value || !this.endDateTarget.value) {\n      return;\n    }\n    \n    let url = this.urlValue\n    let params = {\n      type_ids: Array.from(this.typeTargets).map((input) => input.value),\n      start_date: this.startDateTarget.value,\n      start_time: this.startTimeTarget.value,\n      end_date: this.endDateTarget.value,\n      end_time: this.endTimeTarget.value,\n      booking_id: this.bookingIdValue\n    }\n\n    let queryString = Object.keys(params).map(key => key + '=' + params[key]).join('&')\n\n    if (this.endDateTarget.value != '' && this.startDateTarget.value != '') {\n      fetch(url + '?' + queryString)\n        .then(response =>\n          response.json()\n        )\n        .then((data) => {\n          this.showInfo(data)\n        })\n    } else if (this.endDateTarget.value === '') {\n      this.showInfo({'available': 'Bitte Enddatum auswählen'})\n    }\n  }\n\n  showInfo(data) {\n    const availability = data['available'];\n\n    this.buttonTarget.disabled = availability;\n    this.infoTarget.innerText = availability !== undefined ? availability : '';\n    this.infoTarget.classList.toggle('d-none', availability === undefined);\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { Calendar } from \"@fullcalendar/core\";\nimport dayGridPlugin from \"@fullcalendar/daygrid\";\nimport timeGridPlugin from \"@fullcalendar/timegrid\";\nimport listPlugin from '@fullcalendar/list'\nimport deLocale from '@fullcalendar/core/locales/de'\n\nexport default class extends Controller {\n  static values = {\n    events: Array,\n  };\n\n  connect() {\n    console.log(this.eventsValue)\n\n    this.calendar = new Calendar(this.element, {\n      plugins: [dayGridPlugin, timeGridPlugin, listPlugin],\n      initialView: \"dayGridMonth\",\n      events: this.eventsValue,\n      locale: deLocale,\n      eventColor: '#016973',\n      fixedWeekCount: true,\n      headerToolbar: {\n        left: 'prev,next today',\n        center: 'title',\n        right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek',\n      },\n      themeSystem: 'standard',\n\n    });\n\n    this.calendar.render();\n  }\n\n  disconnect() {\n    this.calendar.destroy();\n  }\n}\n","// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\"\n\nimport SelectizeController from \"./selectize_controller\"\napplication.register(\"selectize\", SelectizeController)\n\nimport TooltipsController from \"./tooltips_controller\"\napplication.register(\"tooltips\", TooltipsController)\n\nimport DatetimeController from \"./datetime_controller\"\napplication.register(\"datetime\", DatetimeController)\n\nimport CountdownController from \"./countdown_controller\"\napplication.register(\"countdown\", CountdownController)\n\nimport UserInfoController from \"./user_info_controller\"\napplication.register(\"user-info\", UserInfoController)\n\nimport CookieConsentController from \"./cookie_consent_controller\"\napplication.register(\"cookie-consent\", CookieConsentController)\n\nimport DirectBookingController from \"./direct_booking_controller\"\napplication.register(\"direct-booking\", DirectBookingController)\n\nimport FlatpickrController from \"./flatpickr_controller\"\napplication.register(\"flatpickr\", FlatpickrController)\n\nimport OfftimesController from \"./offtimes_controller\"\napplication.register(\"offtimes\", OfftimesController)\n\nimport SubmitFormController from \"./submit_form_controller\"\napplication.register('submit-form', SubmitFormController)\n\nimport ToggleController from \"./toggle_controller\"\napplication.register('toggle', ToggleController)\n\nimport DisableWithCheckbox from \"./disable_with_checkbox_controller\"\napplication.register('disable-with-checkbox', DisableWithCheckbox)\n\nimport Tomselect from \"./tomselect_controller\"\napplication.register('tomselect', Tomselect)\n\nimport ModalController from \"./modal_controller\"\napplication.register('modal', ModalController)\n\nimport ToastController from \"./toast_controller\"\napplication.register('toast', ToastController)\n\nimport ChartController from \"./chart_controller\"\napplication.register('chart', ChartController)\n\nimport AvailabilityController from \"./availability_controller\"\napplication.register('availability', AvailabilityController)\n\nimport CalendarController from \"./calendar_controller\"\napplication.register('calendar', CalendarController)\n","var _templateObject, _templateObject2;\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nimport _regeneratorRuntime from \"@babel/runtime/regenerator\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n/*\nTurbo 7.3.0\nCopyright © 2023 37signals LLC\n */\n(function () {\n  if (window.Reflect === undefined || window.customElements === undefined || window.customElements.polyfillWrapFlushCallback) {\n    return;\n  }\n\n  var BuiltInHTMLElement = HTMLElement;\n  var wrapperForTheName = {\n    HTMLElement: function HTMLElement() {\n      return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n    }\n  };\n  window.HTMLElement = wrapperForTheName[\"HTMLElement\"];\n  HTMLElement.prototype = BuiltInHTMLElement.prototype;\n  HTMLElement.prototype.constructor = HTMLElement;\n  Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\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\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 || 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\nvar submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n  var element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n  var candidate = element ? element.closest(\"input, button\") : null;\n  return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\n\nfunction clickCaptured(event) {\n  var 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  var prototype = window.Event.prototype;\n\n  if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n    prototype = window.SubmitEvent.prototype;\n  } else if (\"SubmitEvent\" in window) {\n    return;\n  }\n\n  addEventListener(\"click\", clickCaptured, true);\n  Object.defineProperty(prototype, \"submitter\", {\n    get: function get() {\n      if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n        return submittersByForm.get(this.target);\n      }\n    }\n  });\n})();\n\nvar FrameLoadingStyle;\n\n(function (FrameLoadingStyle) {\n  FrameLoadingStyle[\"eager\"] = \"eager\";\n  FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\n\nvar FrameElement = /*#__PURE__*/function (_HTMLElement) {\n  _inherits(FrameElement, _HTMLElement);\n\n  var _super = _createSuper(FrameElement);\n\n  function FrameElement() {\n    var _this;\n\n    _classCallCheck(this, FrameElement);\n\n    _this = _super.call(this);\n    _this.loaded = Promise.resolve();\n    _this.delegate = new FrameElement.delegateConstructor(_assertThisInitialized(_this));\n    return _this;\n  }\n\n  _createClass(FrameElement, [{\n    key: \"connectedCallback\",\n    value: function connectedCallback() {\n      this.delegate.connect();\n    }\n  }, {\n    key: \"disconnectedCallback\",\n    value: function disconnectedCallback() {\n      this.delegate.disconnect();\n    }\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      return this.delegate.sourceURLReloaded();\n    }\n  }, {\n    key: \"attributeChangedCallback\",\n    value: function attributeChangedCallback(name) {\n      if (name == \"loading\") {\n        this.delegate.loadingStyleChanged();\n      } else if (name == \"complete\") {\n        this.delegate.completeChanged();\n      } else if (name == \"src\") {\n        this.delegate.sourceURLChanged();\n      } else {\n        this.delegate.disabledChanged();\n      }\n    }\n  }, {\n    key: \"src\",\n    get: function get() {\n      return this.getAttribute(\"src\");\n    },\n    set: function set(value) {\n      if (value) {\n        this.setAttribute(\"src\", value);\n      } else {\n        this.removeAttribute(\"src\");\n      }\n    }\n  }, {\n    key: \"loading\",\n    get: function get() {\n      return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n    },\n    set: function set(value) {\n      if (value) {\n        this.setAttribute(\"loading\", value);\n      } else {\n        this.removeAttribute(\"loading\");\n      }\n    }\n  }, {\n    key: \"disabled\",\n    get: function get() {\n      return this.hasAttribute(\"disabled\");\n    },\n    set: function set(value) {\n      if (value) {\n        this.setAttribute(\"disabled\", \"\");\n      } else {\n        this.removeAttribute(\"disabled\");\n      }\n    }\n  }, {\n    key: \"autoscroll\",\n    get: function get() {\n      return this.hasAttribute(\"autoscroll\");\n    },\n    set: function set(value) {\n      if (value) {\n        this.setAttribute(\"autoscroll\", \"\");\n      } else {\n        this.removeAttribute(\"autoscroll\");\n      }\n    }\n  }, {\n    key: \"complete\",\n    get: function get() {\n      return !this.delegate.isLoading;\n    }\n  }, {\n    key: \"isActive\",\n    get: function get() {\n      return this.ownerDocument === document && !this.isPreview;\n    }\n  }, {\n    key: \"isPreview\",\n    get: function get() {\n      var _a, _b;\n\n      return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n    }\n  }], [{\n    key: \"observedAttributes\",\n    get: function get() {\n      return [\"disabled\", \"complete\", \"loading\", \"src\"];\n    }\n  }]);\n\n  return FrameElement;\n}( /*#__PURE__*/_wrapNativeSuper(HTMLElement));\n\nfunction frameLoadingStyleFromString(style) {\n  switch (style.toLowerCase()) {\n    case \"lazy\":\n      return FrameLoadingStyle.lazy;\n\n    default:\n      return FrameLoadingStyle.eager;\n  }\n}\n\nfunction expandURL(locatable) {\n  return new URL(locatable.toString(), document.baseURI);\n}\n\nfunction getAnchor(url) {\n  var anchorMatch;\n\n  if (url.hash) {\n    return url.hash.slice(1);\n  } else if (anchorMatch = url.href.match(/#(.*)$/)) {\n    return anchorMatch[1];\n  }\n}\n\nfunction getAction(form, submitter) {\n  var action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n  return expandURL(action);\n}\n\nfunction getExtension(url) {\n  return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\n\nfunction isHTML(url) {\n  return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/);\n}\n\nfunction isPrefixedBy(baseURL, url) {\n  var 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) && isHTML(location);\n}\n\nfunction getRequestURL(url) {\n  var 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\nvar FetchResponse = /*#__PURE__*/function () {\n  function FetchResponse(response) {\n    _classCallCheck(this, FetchResponse);\n\n    this.response = response;\n  }\n\n  _createClass(FetchResponse, [{\n    key: \"succeeded\",\n    get: function get() {\n      return this.response.ok;\n    }\n  }, {\n    key: \"failed\",\n    get: function get() {\n      return !this.succeeded;\n    }\n  }, {\n    key: \"clientError\",\n    get: function get() {\n      return this.statusCode >= 400 && this.statusCode <= 499;\n    }\n  }, {\n    key: \"serverError\",\n    get: function get() {\n      return this.statusCode >= 500 && this.statusCode <= 599;\n    }\n  }, {\n    key: \"redirected\",\n    get: function get() {\n      return this.response.redirected;\n    }\n  }, {\n    key: \"location\",\n    get: function get() {\n      return expandURL(this.response.url);\n    }\n  }, {\n    key: \"isHTML\",\n    get: function get() {\n      return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n    }\n  }, {\n    key: \"statusCode\",\n    get: function get() {\n      return this.response.status;\n    }\n  }, {\n    key: \"contentType\",\n    get: function get() {\n      return this.header(\"Content-Type\");\n    }\n  }, {\n    key: \"responseText\",\n    get: function get() {\n      return this.response.clone().text();\n    }\n  }, {\n    key: \"responseHTML\",\n    get: function get() {\n      if (this.isHTML) {\n        return this.response.clone().text();\n      } else {\n        return Promise.resolve(undefined);\n      }\n    }\n  }, {\n    key: \"header\",\n    value: function header(name) {\n      return this.response.headers.get(name);\n    }\n  }]);\n\n  return FetchResponse;\n}();\n\nfunction activateScriptElement(element) {\n  if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n    return element;\n  } else {\n    var createdScriptElement = document.createElement(\"script\");\n    var cspNonce = getMetaContent(\"csp-nonce\");\n\n    if (cspNonce) {\n      createdScriptElement.nonce = cspNonce;\n    }\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  var _iterator = _createForOfIteratorHelper(sourceElement.attributes),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var _ref2 = _step.value;\n      var name = _ref2.name;\n      var value = _ref2.value;\n      destinationElement.setAttribute(name, value);\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n}\n\nfunction createDocumentFragment(html) {\n  var template = document.createElement(\"template\");\n  template.innerHTML = html;\n  return template.content;\n}\n\nfunction dispatch(eventName) {\n  var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n      target = _ref3.target,\n      cancelable = _ref3.cancelable,\n      detail = _ref3.detail;\n\n  var event = new CustomEvent(eventName, {\n    cancelable: cancelable,\n    bubbles: true,\n    composed: true,\n    detail: 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 nextAnimationFrame() {\n  return new Promise(function (resolve) {\n    return requestAnimationFrame(function () {\n      return resolve();\n    });\n  });\n}\n\nfunction nextEventLoopTick() {\n  return new Promise(function (resolve) {\n    return setTimeout(function () {\n      return resolve();\n    }, 0);\n  });\n}\n\nfunction nextMicrotask() {\n  return Promise.resolve();\n}\n\nfunction parseHTMLDocument() {\n  var html = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n  return new DOMParser().parseFromString(html, \"text/html\");\n}\n\nfunction unindent(strings) {\n  for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    values[_key - 1] = arguments[_key];\n  }\n\n  var lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n  var match = lines[0].match(/^\\s+/);\n  var indent = match ? match[0].length : 0;\n  return lines.map(function (line) {\n    return line.slice(indent);\n  }).join(\"\\n\");\n}\n\nfunction interpolate(strings, values) {\n  return strings.reduce(function (result, string, i) {\n    var value = values[i] == undefined ? \"\" : values[i];\n    return result + string + value;\n  }, \"\");\n}\n\nfunction uuid() {\n  return Array.from({\n    length: 36\n  }).map(function (_, 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  }).join(\"\");\n}\n\nfunction getAttribute(attributeName) {\n  for (var _len2 = arguments.length, elements = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    elements[_key2 - 1] = arguments[_key2];\n  }\n\n  var _iterator2 = _createForOfIteratorHelper(elements.map(function (element) {\n    return element === null || element === void 0 ? void 0 : element.getAttribute(attributeName);\n  })),\n      _step2;\n\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var value = _step2.value;\n      if (typeof value == \"string\") return value;\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n\n  return null;\n}\n\nfunction hasAttribute(attributeName) {\n  for (var _len3 = arguments.length, elements = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n    elements[_key3 - 1] = arguments[_key3];\n  }\n\n  return elements.some(function (element) {\n    return element && element.hasAttribute(attributeName);\n  });\n}\n\nfunction markAsBusy() {\n  for (var _len4 = arguments.length, elements = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n    elements[_key4] = arguments[_key4];\n  }\n\n  for (var _i = 0, _elements = elements; _i < _elements.length; _i++) {\n    var element = _elements[_i];\n\n    if (element.localName == \"turbo-frame\") {\n      element.setAttribute(\"busy\", \"\");\n    }\n\n    element.setAttribute(\"aria-busy\", \"true\");\n  }\n}\n\nfunction clearBusyState() {\n  for (var _len5 = arguments.length, elements = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n    elements[_key5] = arguments[_key5];\n  }\n\n  for (var _i2 = 0, _elements2 = elements; _i2 < _elements2.length; _i2++) {\n    var element = _elements2[_i2];\n\n    if (element.localName == \"turbo-frame\") {\n      element.removeAttribute(\"busy\");\n    }\n\n    element.removeAttribute(\"aria-busy\");\n  }\n}\n\nfunction waitForLoad(element) {\n  var timeoutInMilliseconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2000;\n  return new Promise(function (resolve) {\n    var onComplete = function onComplete() {\n      element.removeEventListener(\"error\", onComplete);\n      element.removeEventListener(\"load\", onComplete);\n      resolve();\n    };\n\n    element.addEventListener(\"load\", onComplete, {\n      once: true\n    });\n    element.addEventListener(\"error\", onComplete, {\n      once: true\n    });\n    setTimeout(resolve, timeoutInMilliseconds);\n  });\n}\n\nfunction getHistoryMethodForAction(action) {\n  switch (action) {\n    case \"replace\":\n      return history.replaceState;\n\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() {\n  for (var _len6 = arguments.length, elements = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n    elements[_key6] = arguments[_key6];\n  }\n\n  var action = getAttribute.apply(void 0, [\"data-turbo-action\"].concat(elements));\n  return isAction(action) ? action : null;\n}\n\nfunction getMetaElement(name) {\n  return document.querySelector(\"meta[name=\\\"\".concat(name, \"\\\"]\"));\n}\n\nfunction getMetaContent(name) {\n  var element = getMetaElement(name);\n  return element && element.content;\n}\n\nfunction setMetaContent(name, content) {\n  var element = getMetaElement(name);\n\n  if (!element) {\n    element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", name);\n    document.head.appendChild(element);\n  }\n\n  element.setAttribute(\"content\", content);\n  return element;\n}\n\nfunction findClosestRecursively(element, selector) {\n  var _a;\n\n  if (element instanceof Element) {\n    return element.closest(selector) || findClosestRecursively(element.assignedSlot || ((_a = element.getRootNode()) === null || _a === void 0 ? void 0 : _a.host), selector);\n  }\n}\n\nvar FetchMethod;\n\n(function (FetchMethod) {\n  FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n  FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n  FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n  FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n  FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\n\nfunction fetchMethodFromString(method) {\n  switch (method.toLowerCase()) {\n    case \"get\":\n      return FetchMethod.get;\n\n    case \"post\":\n      return FetchMethod.post;\n\n    case \"put\":\n      return FetchMethod.put;\n\n    case \"patch\":\n      return FetchMethod.patch;\n\n    case \"delete\":\n      return FetchMethod.delete;\n  }\n}\n\nvar FetchRequest = /*#__PURE__*/function () {\n  function FetchRequest(delegate, method, location) {\n    var body = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new URLSearchParams();\n    var target = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n\n    _classCallCheck(this, FetchRequest);\n\n    this.abortController = new AbortController();\n\n    this.resolveRequestPromise = function (_value) {};\n\n    this.delegate = delegate;\n    this.method = method;\n    this.headers = this.defaultHeaders;\n    this.body = body;\n    this.url = location;\n    this.target = target;\n  }\n\n  _createClass(FetchRequest, [{\n    key: \"location\",\n    get: function get() {\n      return this.url;\n    }\n  }, {\n    key: \"params\",\n    get: function get() {\n      return this.url.searchParams;\n    }\n  }, {\n    key: \"entries\",\n    get: function get() {\n      return this.body ? Array.from(this.body.entries()) : [];\n    }\n  }, {\n    key: \"cancel\",\n    value: function cancel() {\n      this.abortController.abort();\n    }\n  }, {\n    key: \"perform\",\n    value: function () {\n      var _perform = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {\n        var fetchOptions, response;\n        return _regeneratorRuntime.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                fetchOptions = this.fetchOptions;\n                this.delegate.prepareRequest(this);\n                _context.next = 4;\n                return this.allowRequestToBeIntercepted(fetchOptions);\n\n              case 4:\n                _context.prev = 4;\n                this.delegate.requestStarted(this);\n                _context.next = 8;\n                return fetch(this.url.href, fetchOptions);\n\n              case 8:\n                response = _context.sent;\n                _context.next = 11;\n                return this.receive(response);\n\n              case 11:\n                return _context.abrupt(\"return\", _context.sent);\n\n              case 14:\n                _context.prev = 14;\n                _context.t0 = _context[\"catch\"](4);\n\n                if (!(_context.t0.name !== \"AbortError\")) {\n                  _context.next = 19;\n                  break;\n                }\n\n                if (this.willDelegateErrorHandling(_context.t0)) {\n                  this.delegate.requestErrored(this, _context.t0);\n                }\n\n                throw _context.t0;\n\n              case 19:\n                _context.prev = 19;\n                this.delegate.requestFinished(this);\n                return _context.finish(19);\n\n              case 22:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee, this, [[4, 14, 19, 22]]);\n      }));\n\n      function perform() {\n        return _perform.apply(this, arguments);\n      }\n\n      return perform;\n    }()\n  }, {\n    key: \"receive\",\n    value: function () {\n      var _receive = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(response) {\n        var fetchResponse, event;\n        return _regeneratorRuntime.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                fetchResponse = new FetchResponse(response);\n                event = dispatch(\"turbo:before-fetch-response\", {\n                  cancelable: true,\n                  detail: {\n                    fetchResponse: fetchResponse\n                  },\n                  target: this.target\n                });\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\n                return _context2.abrupt(\"return\", fetchResponse);\n\n              case 4:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function receive(_x) {\n        return _receive.apply(this, arguments);\n      }\n\n      return receive;\n    }()\n  }, {\n    key: \"fetchOptions\",\n    get: function get() {\n      var _a;\n\n      return {\n        method: FetchMethod[this.method].toUpperCase(),\n        credentials: \"same-origin\",\n        headers: this.headers,\n        redirect: \"follow\",\n        body: this.isSafe ? null : this.body,\n        signal: this.abortSignal,\n        referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href\n      };\n    }\n  }, {\n    key: \"defaultHeaders\",\n    get: function get() {\n      return {\n        Accept: \"text/html, application/xhtml+xml\"\n      };\n    }\n  }, {\n    key: \"isSafe\",\n    get: function get() {\n      return this.method === FetchMethod.get;\n    }\n  }, {\n    key: \"abortSignal\",\n    get: function get() {\n      return this.abortController.signal;\n    }\n  }, {\n    key: \"acceptResponseType\",\n    value: function acceptResponseType(mimeType) {\n      this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n    }\n  }, {\n    key: \"allowRequestToBeIntercepted\",\n    value: function () {\n      var _allowRequestToBeIntercepted = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(fetchOptions) {\n        var _this2 = this;\n\n        var requestInterception, event;\n        return _regeneratorRuntime.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                requestInterception = new Promise(function (resolve) {\n                  return _this2.resolveRequestPromise = resolve;\n                });\n                event = dispatch(\"turbo:before-fetch-request\", {\n                  cancelable: true,\n                  detail: {\n                    fetchOptions: fetchOptions,\n                    url: this.url,\n                    resume: this.resolveRequestPromise\n                  },\n                  target: this.target\n                });\n\n                if (!event.defaultPrevented) {\n                  _context3.next = 5;\n                  break;\n                }\n\n                _context3.next = 5;\n                return requestInterception;\n\n              case 5:\n              case \"end\":\n                return _context3.stop();\n            }\n          }\n        }, _callee3, this);\n      }));\n\n      function allowRequestToBeIntercepted(_x2) {\n        return _allowRequestToBeIntercepted.apply(this, arguments);\n      }\n\n      return allowRequestToBeIntercepted;\n    }()\n  }, {\n    key: \"willDelegateErrorHandling\",\n    value: function willDelegateErrorHandling(error) {\n      var event = dispatch(\"turbo:fetch-request-error\", {\n        target: this.target,\n        cancelable: true,\n        detail: {\n          request: this,\n          error: error\n        }\n      });\n      return !event.defaultPrevented;\n    }\n  }]);\n\n  return FetchRequest;\n}();\n\nvar AppearanceObserver = /*#__PURE__*/function () {\n  function AppearanceObserver(delegate, element) {\n    var _this3 = this;\n\n    _classCallCheck(this, AppearanceObserver);\n\n    this.started = false;\n\n    this.intersect = function (entries) {\n      var lastEntry = entries.slice(-1)[0];\n\n      if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n        _this3.delegate.elementAppearedInViewport(_this3.element);\n      }\n    };\n\n    this.delegate = delegate;\n    this.element = element;\n    this.intersectionObserver = new IntersectionObserver(this.intersect);\n  }\n\n  _createClass(AppearanceObserver, [{\n    key: \"start\",\n    value: function start() {\n      if (!this.started) {\n        this.started = true;\n        this.intersectionObserver.observe(this.element);\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (this.started) {\n        this.started = false;\n        this.intersectionObserver.unobserve(this.element);\n      }\n    }\n  }]);\n\n  return AppearanceObserver;\n}();\n\nvar StreamMessage = /*#__PURE__*/function () {\n  function StreamMessage(fragment) {\n    _classCallCheck(this, StreamMessage);\n\n    this.fragment = importStreamElements(fragment);\n  }\n\n  _createClass(StreamMessage, null, [{\n    key: \"wrap\",\n    value: function wrap(message) {\n      if (typeof message == \"string\") {\n        return new this(createDocumentFragment(message));\n      } else {\n        return message;\n      }\n    }\n  }]);\n\n  return StreamMessage;\n}();\n\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\n\nfunction importStreamElements(fragment) {\n  var _iterator3 = _createForOfIteratorHelper(fragment.querySelectorAll(\"turbo-stream\")),\n      _step3;\n\n  try {\n    for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n      var element = _step3.value;\n      var streamElement = document.importNode(element, true);\n\n      var _iterator4 = _createForOfIteratorHelper(streamElement.templateElement.content.querySelectorAll(\"script\")),\n          _step4;\n\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var inertScriptElement = _step4.value;\n          inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n\n      element.replaceWith(streamElement);\n    }\n  } catch (err) {\n    _iterator3.e(err);\n  } finally {\n    _iterator3.f();\n  }\n\n  return fragment;\n}\n\nvar FormSubmissionState;\n\n(function (FormSubmissionState) {\n  FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n  FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n  FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n  FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n  FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n  FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\n\nvar FormEnctype;\n\n(function (FormEnctype) {\n  FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n  FormEnctype[\"multipart\"] = \"multipart/form-data\";\n  FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\n\nfunction formEnctypeFromString(encoding) {\n  switch (encoding.toLowerCase()) {\n    case FormEnctype.multipart:\n      return FormEnctype.multipart;\n\n    case FormEnctype.plain:\n      return FormEnctype.plain;\n\n    default:\n      return FormEnctype.urlEncoded;\n  }\n}\n\nvar FormSubmission = /*#__PURE__*/function () {\n  function FormSubmission(delegate, formElement, submitter) {\n    var mustRedirect = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n    _classCallCheck(this, FormSubmission);\n\n    this.state = FormSubmissionState.initialized;\n    this.delegate = delegate;\n    this.formElement = formElement;\n    this.submitter = submitter;\n    this.formData = buildFormData(formElement, submitter);\n    this.location = expandURL(this.action);\n\n    if (this.method == FetchMethod.get) {\n      mergeFormDataEntries(this.location, _toConsumableArray(this.body.entries()));\n    }\n\n    this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n    this.mustRedirect = mustRedirect;\n  }\n\n  _createClass(FormSubmission, [{\n    key: \"method\",\n    get: function get() {\n      var _a;\n\n      var method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n      return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n    }\n  }, {\n    key: \"action\",\n    get: function get() {\n      var _a;\n\n      var formElementAction = typeof this.formElement.action === \"string\" ? this.formElement.action : null;\n\n      if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"formaction\")) {\n        return this.submitter.getAttribute(\"formaction\") || \"\";\n      } else {\n        return this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n      }\n    }\n  }, {\n    key: \"body\",\n    get: function get() {\n      if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n        return new URLSearchParams(this.stringFormData);\n      } else {\n        return this.formData;\n      }\n    }\n  }, {\n    key: \"enctype\",\n    get: function get() {\n      var _a;\n\n      return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n    }\n  }, {\n    key: \"isSafe\",\n    get: function get() {\n      return this.fetchRequest.isSafe;\n    }\n  }, {\n    key: \"stringFormData\",\n    get: function get() {\n      return _toConsumableArray(this.formData).reduce(function (entries, _ref4) {\n        var _ref5 = _slicedToArray(_ref4, 2),\n            name = _ref5[0],\n            value = _ref5[1];\n\n        return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n      }, []);\n    }\n  }, {\n    key: \"start\",\n    value: function () {\n      var _start = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {\n        var _FormSubmissionState, initialized, requesting, confirmationMessage, answer;\n\n        return _regeneratorRuntime.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                _FormSubmissionState = FormSubmissionState, initialized = _FormSubmissionState.initialized, requesting = _FormSubmissionState.requesting;\n                confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n                if (!(typeof confirmationMessage === \"string\")) {\n                  _context4.next = 8;\n                  break;\n                }\n\n                _context4.next = 5;\n                return FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n\n              case 5:\n                answer = _context4.sent;\n\n                if (answer) {\n                  _context4.next = 8;\n                  break;\n                }\n\n                return _context4.abrupt(\"return\");\n\n              case 8:\n                if (!(this.state == initialized)) {\n                  _context4.next = 11;\n                  break;\n                }\n\n                this.state = requesting;\n                return _context4.abrupt(\"return\", this.fetchRequest.perform());\n\n              case 11:\n              case \"end\":\n                return _context4.stop();\n            }\n          }\n        }, _callee4, this);\n      }));\n\n      function start() {\n        return _start.apply(this, arguments);\n      }\n\n      return start;\n    }()\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      var _FormSubmissionState2 = FormSubmissionState,\n          stopping = _FormSubmissionState2.stopping,\n          stopped = _FormSubmissionState2.stopped;\n\n      if (this.state != stopping && this.state != stopped) {\n        this.state = stopping;\n        this.fetchRequest.cancel();\n        return true;\n      }\n    }\n  }, {\n    key: \"prepareRequest\",\n    value: function prepareRequest(request) {\n      if (!request.isSafe) {\n        var token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n\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    key: \"requestStarted\",\n    value: function requestStarted(_request) {\n      var _a;\n\n      this.state = FormSubmissionState.waiting;\n      (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n      this.setSubmitsWith();\n      dispatch(\"turbo:submit-start\", {\n        target: this.formElement,\n        detail: {\n          formSubmission: this\n        }\n      });\n      this.delegate.formSubmissionStarted(this);\n    }\n  }, {\n    key: \"requestPreventedHandlingResponse\",\n    value: function requestPreventedHandlingResponse(request, response) {\n      this.result = {\n        success: response.succeeded,\n        fetchResponse: response\n      };\n    }\n  }, {\n    key: \"requestSucceededWithResponse\",\n    value: function requestSucceededWithResponse(request, response) {\n      if (response.clientError || response.serverError) {\n        this.delegate.formSubmissionFailedWithResponse(this, response);\n      } else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n        var 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 = {\n          success: true,\n          fetchResponse: response\n        };\n        this.delegate.formSubmissionSucceededWithResponse(this, response);\n      }\n    }\n  }, {\n    key: \"requestFailedWithResponse\",\n    value: function requestFailedWithResponse(request, response) {\n      this.result = {\n        success: false,\n        fetchResponse: response\n      };\n      this.delegate.formSubmissionFailedWithResponse(this, response);\n    }\n  }, {\n    key: \"requestErrored\",\n    value: function requestErrored(request, error) {\n      this.result = {\n        success: false,\n        error: error\n      };\n      this.delegate.formSubmissionErrored(this, error);\n    }\n  }, {\n    key: \"requestFinished\",\n    value: function requestFinished(_request) {\n      var _a;\n\n      this.state = FormSubmissionState.stopped;\n      (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n      this.resetSubmitterText();\n      dispatch(\"turbo:submit-end\", {\n        target: this.formElement,\n        detail: Object.assign({\n          formSubmission: this\n        }, this.result)\n      });\n      this.delegate.formSubmissionFinished(this);\n    }\n  }, {\n    key: \"setSubmitsWith\",\n    value: function 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        var input = this.submitter;\n        this.originalSubmitText = input.value;\n        input.value = this.submitsWith;\n      }\n    }\n  }, {\n    key: \"resetSubmitterText\",\n    value: function 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        var input = this.submitter;\n        input.value = this.originalSubmitText;\n      }\n    }\n  }, {\n    key: \"requestMustRedirect\",\n    value: function requestMustRedirect(request) {\n      return !request.isSafe && this.mustRedirect;\n    }\n  }, {\n    key: \"requestAcceptsTurboStreamResponse\",\n    value: function requestAcceptsTurboStreamResponse(request) {\n      return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\n    }\n  }, {\n    key: \"submitsWith\",\n    get: function get() {\n      var _a;\n\n      return (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"data-turbo-submits-with\");\n    }\n  }], [{\n    key: \"confirmMethod\",\n    value: function confirmMethod(message, _element, _submitter) {\n      return Promise.resolve(confirm(message));\n    }\n  }]);\n\n  return FormSubmission;\n}();\n\nfunction buildFormData(formElement, submitter) {\n  var formData = new FormData(formElement);\n  var name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n  var value = submitter === null || submitter === void 0 ? void 0 : 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    var cookies = document.cookie ? document.cookie.split(\"; \") : [];\n    var cookie = cookies.find(function (cookie) {\n      return cookie.startsWith(cookieName);\n    });\n\n    if (cookie) {\n      var 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 mergeFormDataEntries(url, entries) {\n  var searchParams = new URLSearchParams();\n\n  var _iterator5 = _createForOfIteratorHelper(entries),\n      _step5;\n\n  try {\n    for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n      var _ref8 = _step5.value;\n\n      var _ref7 = _slicedToArray(_ref8, 2);\n\n      var name = _ref7[0];\n      var value = _ref7[1];\n      if (value instanceof File) continue;\n      searchParams.append(name, value);\n    }\n  } catch (err) {\n    _iterator5.e(err);\n  } finally {\n    _iterator5.f();\n  }\n\n  url.search = searchParams.toString();\n  return url;\n}\n\nvar Snapshot = /*#__PURE__*/function () {\n  function Snapshot(element) {\n    _classCallCheck(this, Snapshot);\n\n    this.element = element;\n  }\n\n  _createClass(Snapshot, [{\n    key: \"activeElement\",\n    get: function get() {\n      return this.element.ownerDocument.activeElement;\n    }\n  }, {\n    key: \"children\",\n    get: function get() {\n      return _toConsumableArray(this.element.children);\n    }\n  }, {\n    key: \"hasAnchor\",\n    value: function hasAnchor(anchor) {\n      return this.getElementForAnchor(anchor) != null;\n    }\n  }, {\n    key: \"getElementForAnchor\",\n    value: function getElementForAnchor(anchor) {\n      return anchor ? this.element.querySelector(\"[id='\".concat(anchor, \"'], a[name='\").concat(anchor, \"']\")) : null;\n    }\n  }, {\n    key: \"isConnected\",\n    get: function get() {\n      return this.element.isConnected;\n    }\n  }, {\n    key: \"firstAutofocusableElement\",\n    get: function get() {\n      var inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n      var _iterator6 = _createForOfIteratorHelper(this.element.querySelectorAll(\"[autofocus]\")),\n          _step6;\n\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var element = _step6.value;\n          if (element.closest(inertDisabledOrHidden) == null) return element;else continue;\n        }\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n\n      return null;\n    }\n  }, {\n    key: \"permanentElements\",\n    get: function get() {\n      return queryPermanentElementsAll(this.element);\n    }\n  }, {\n    key: \"getPermanentElementById\",\n    value: function getPermanentElementById(id) {\n      return _getPermanentElementById(this.element, id);\n    }\n  }, {\n    key: \"getPermanentElementMapForSnapshot\",\n    value: function getPermanentElementMapForSnapshot(snapshot) {\n      var permanentElementMap = {};\n\n      var _iterator7 = _createForOfIteratorHelper(this.permanentElements),\n          _step7;\n\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var currentPermanentElement = _step7.value;\n          var id = currentPermanentElement.id;\n          var newPermanentElement = snapshot.getPermanentElementById(id);\n\n          if (newPermanentElement) {\n            permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n          }\n        }\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n\n      return permanentElementMap;\n    }\n  }]);\n\n  return Snapshot;\n}();\n\nfunction _getPermanentElementById(node, id) {\n  return node.querySelector(\"#\".concat(id, \"[data-turbo-permanent]\"));\n}\n\nfunction queryPermanentElementsAll(node) {\n  return node.querySelectorAll(\"[id][data-turbo-permanent]\");\n}\n\nvar FormSubmitObserver = /*#__PURE__*/function () {\n  function FormSubmitObserver(delegate, eventTarget) {\n    var _this4 = this;\n\n    _classCallCheck(this, FormSubmitObserver);\n\n    this.started = false;\n\n    this.submitCaptured = function () {\n      _this4.eventTarget.removeEventListener(\"submit\", _this4.submitBubbled, false);\n\n      _this4.eventTarget.addEventListener(\"submit\", _this4.submitBubbled, false);\n    };\n\n    this.submitBubbled = function (event) {\n      if (!event.defaultPrevented) {\n        var form = event.target instanceof HTMLFormElement ? event.target : undefined;\n        var submitter = event.submitter || undefined;\n\n        if (form && submissionDoesNotDismissDialog(form, submitter) && submissionDoesNotTargetIFrame(form, submitter) && _this4.delegate.willSubmitForm(form, submitter)) {\n          event.preventDefault();\n          event.stopImmediatePropagation();\n\n          _this4.delegate.formSubmitted(form, submitter);\n        }\n      }\n    };\n\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  _createClass(FormSubmitObserver, [{\n    key: \"start\",\n    value: function start() {\n      if (!this.started) {\n        this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n        this.started = true;\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (this.started) {\n        this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n        this.started = false;\n      }\n    }\n  }]);\n\n  return FormSubmitObserver;\n}();\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n  var method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n  return method != \"dialog\";\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n  if ((submitter === null || submitter === void 0 ? void 0 : submitter.hasAttribute(\"formtarget\")) || form.hasAttribute(\"target\")) {\n    var target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formtarget\")) || form.target;\n\n    var _iterator8 = _createForOfIteratorHelper(document.getElementsByName(target)),\n        _step8;\n\n    try {\n      for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n        var element = _step8.value;\n        if (element instanceof HTMLIFrameElement) return false;\n      }\n    } catch (err) {\n      _iterator8.e(err);\n    } finally {\n      _iterator8.f();\n    }\n\n    return true;\n  } else {\n    return true;\n  }\n}\n\nvar View = /*#__PURE__*/function () {\n  function View(delegate, element) {\n    _classCallCheck(this, View);\n\n    this.resolveRenderPromise = function (_value) {};\n\n    this.resolveInterceptionPromise = function (_value) {};\n\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  _createClass(View, [{\n    key: \"scrollToAnchor\",\n    value: function scrollToAnchor(anchor) {\n      var element = this.snapshot.getElementForAnchor(anchor);\n\n      if (element) {\n        this.scrollToElement(element);\n        this.focusElement(element);\n      } else {\n        this.scrollToPosition({\n          x: 0,\n          y: 0\n        });\n      }\n    }\n  }, {\n    key: \"scrollToAnchorFromLocation\",\n    value: function scrollToAnchorFromLocation(location) {\n      this.scrollToAnchor(getAnchor(location));\n    }\n  }, {\n    key: \"scrollToElement\",\n    value: function scrollToElement(element) {\n      element.scrollIntoView();\n    }\n  }, {\n    key: \"focusElement\",\n    value: function 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    key: \"scrollToPosition\",\n    value: function scrollToPosition(_ref9) {\n      var x = _ref9.x,\n          y = _ref9.y;\n      this.scrollRoot.scrollTo(x, y);\n    }\n  }, {\n    key: \"scrollToTop\",\n    value: function scrollToTop() {\n      this.scrollToPosition({\n        x: 0,\n        y: 0\n      });\n    }\n  }, {\n    key: \"scrollRoot\",\n    get: function get() {\n      return window;\n    }\n  }, {\n    key: \"render\",\n    value: function () {\n      var _render = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(renderer) {\n        var _this5 = this;\n\n        var isPreview, shouldRender, snapshot, renderInterception, options, immediateRender;\n        return _regeneratorRuntime.wrap(function _callee5$(_context5) {\n          while (1) {\n            switch (_context5.prev = _context5.next) {\n              case 0:\n                isPreview = renderer.isPreview, shouldRender = renderer.shouldRender, snapshot = renderer.newSnapshot;\n\n                if (!shouldRender) {\n                  _context5.next = 25;\n                  break;\n                }\n\n                _context5.prev = 2;\n                this.renderPromise = new Promise(function (resolve) {\n                  return _this5.resolveRenderPromise = resolve;\n                });\n                this.renderer = renderer;\n                _context5.next = 7;\n                return this.prepareToRenderSnapshot(renderer);\n\n              case 7:\n                renderInterception = new Promise(function (resolve) {\n                  return _this5.resolveInterceptionPromise = resolve;\n                });\n                options = {\n                  resume: this.resolveInterceptionPromise,\n                  render: this.renderer.renderElement\n                };\n                immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n\n                if (immediateRender) {\n                  _context5.next = 13;\n                  break;\n                }\n\n                _context5.next = 13;\n                return renderInterception;\n\n              case 13:\n                _context5.next = 15;\n                return this.renderSnapshot(renderer);\n\n              case 15:\n                this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n                this.delegate.preloadOnLoadLinksForView(this.element);\n                this.finishRenderingSnapshot(renderer);\n\n              case 18:\n                _context5.prev = 18;\n                delete this.renderer;\n                this.resolveRenderPromise(undefined);\n                delete this.renderPromise;\n                return _context5.finish(18);\n\n              case 23:\n                _context5.next = 26;\n                break;\n\n              case 25:\n                this.invalidate(renderer.reloadReason);\n\n              case 26:\n              case \"end\":\n                return _context5.stop();\n            }\n          }\n        }, _callee5, this, [[2,, 18, 23]]);\n      }));\n\n      function render(_x3) {\n        return _render.apply(this, arguments);\n      }\n\n      return render;\n    }()\n  }, {\n    key: \"invalidate\",\n    value: function invalidate(reason) {\n      this.delegate.viewInvalidated(reason);\n    }\n  }, {\n    key: \"prepareToRenderSnapshot\",\n    value: function () {\n      var _prepareToRenderSnapshot = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6(renderer) {\n        return _regeneratorRuntime.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                this.markAsPreview(renderer.isPreview);\n                _context6.next = 3;\n                return renderer.prepareToRender();\n\n              case 3:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6, this);\n      }));\n\n      function prepareToRenderSnapshot(_x4) {\n        return _prepareToRenderSnapshot.apply(this, arguments);\n      }\n\n      return prepareToRenderSnapshot;\n    }()\n  }, {\n    key: \"markAsPreview\",\n    value: function 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    key: \"renderSnapshot\",\n    value: function () {\n      var _renderSnapshot = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee7(renderer) {\n        return _regeneratorRuntime.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                _context7.next = 2;\n                return renderer.render();\n\n              case 2:\n              case \"end\":\n                return _context7.stop();\n            }\n          }\n        }, _callee7);\n      }));\n\n      function renderSnapshot(_x5) {\n        return _renderSnapshot.apply(this, arguments);\n      }\n\n      return renderSnapshot;\n    }()\n  }, {\n    key: \"finishRenderingSnapshot\",\n    value: function finishRenderingSnapshot(renderer) {\n      renderer.finishRendering();\n    }\n  }]);\n\n  return View;\n}();\n\nvar FrameView = /*#__PURE__*/function (_View) {\n  _inherits(FrameView, _View);\n\n  var _super2 = _createSuper(FrameView);\n\n  function FrameView() {\n    _classCallCheck(this, FrameView);\n\n    return _super2.apply(this, arguments);\n  }\n\n  _createClass(FrameView, [{\n    key: \"missing\",\n    value: function missing() {\n      this.element.innerHTML = \"<strong class=\\\"turbo-frame-error\\\">Content missing</strong>\";\n    }\n  }, {\n    key: \"snapshot\",\n    get: function get() {\n      return new Snapshot(this.element);\n    }\n  }]);\n\n  return FrameView;\n}(View);\n\nvar LinkInterceptor = /*#__PURE__*/function () {\n  function LinkInterceptor(delegate, element) {\n    var _this6 = this;\n\n    _classCallCheck(this, LinkInterceptor);\n\n    this.clickBubbled = function (event) {\n      if (_this6.respondsToEventTarget(event.target)) {\n        _this6.clickEvent = event;\n      } else {\n        delete _this6.clickEvent;\n      }\n    };\n\n    this.linkClicked = function (event) {\n      if (_this6.clickEvent && _this6.respondsToEventTarget(event.target) && event.target instanceof Element) {\n        if (_this6.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n          _this6.clickEvent.preventDefault();\n\n          event.preventDefault();\n\n          _this6.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n        }\n      }\n\n      delete _this6.clickEvent;\n    };\n\n    this.willVisit = function (_event) {\n      delete _this6.clickEvent;\n    };\n\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  _createClass(LinkInterceptor, [{\n    key: \"start\",\n    value: function 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    key: \"stop\",\n    value: function 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    key: \"respondsToEventTarget\",\n    value: function respondsToEventTarget(target) {\n      var element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n      return element && element.closest(\"turbo-frame, html\") == this.element;\n    }\n  }]);\n\n  return LinkInterceptor;\n}();\n\nvar LinkClickObserver = /*#__PURE__*/function () {\n  function LinkClickObserver(delegate, eventTarget) {\n    var _this7 = this;\n\n    _classCallCheck(this, LinkClickObserver);\n\n    this.started = false;\n\n    this.clickCaptured = function () {\n      _this7.eventTarget.removeEventListener(\"click\", _this7.clickBubbled, false);\n\n      _this7.eventTarget.addEventListener(\"click\", _this7.clickBubbled, false);\n    };\n\n    this.clickBubbled = function (event) {\n      if (event instanceof MouseEvent && _this7.clickEventIsSignificant(event)) {\n        var target = event.composedPath && event.composedPath()[0] || event.target;\n\n        var link = _this7.findLinkFromClickTarget(target);\n\n        if (link && doesNotTargetIFrame(link)) {\n          var _location2 = _this7.getLocationForLink(link);\n\n          if (_this7.delegate.willFollowLinkToLocation(link, _location2, event)) {\n            event.preventDefault();\n\n            _this7.delegate.followedLinkToLocation(link, _location2);\n          }\n        }\n      }\n    };\n\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  _createClass(LinkClickObserver, [{\n    key: \"start\",\n    value: function start() {\n      if (!this.started) {\n        this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n        this.started = true;\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (this.started) {\n        this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n        this.started = false;\n      }\n    }\n  }, {\n    key: \"clickEventIsSignificant\",\n    value: function clickEventIsSignificant(event) {\n      return !(event.target && event.target.isContentEditable || event.defaultPrevented || event.which > 1 || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey);\n    }\n  }, {\n    key: \"findLinkFromClickTarget\",\n    value: function findLinkFromClickTarget(target) {\n      return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\");\n    }\n  }, {\n    key: \"getLocationForLink\",\n    value: function getLocationForLink(link) {\n      return expandURL(link.getAttribute(\"href\") || \"\");\n    }\n  }]);\n\n  return LinkClickObserver;\n}();\n\nfunction doesNotTargetIFrame(anchor) {\n  if (anchor.hasAttribute(\"target\")) {\n    var _iterator9 = _createForOfIteratorHelper(document.getElementsByName(anchor.target)),\n        _step9;\n\n    try {\n      for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n        var element = _step9.value;\n        if (element instanceof HTMLIFrameElement) return false;\n      }\n    } catch (err) {\n      _iterator9.e(err);\n    } finally {\n      _iterator9.f();\n    }\n\n    return true;\n  } else {\n    return true;\n  }\n}\n\nvar FormLinkClickObserver = /*#__PURE__*/function () {\n  function FormLinkClickObserver(delegate, element) {\n    _classCallCheck(this, FormLinkClickObserver);\n\n    this.delegate = delegate;\n    this.linkInterceptor = new LinkClickObserver(this, element);\n  }\n\n  _createClass(FormLinkClickObserver, [{\n    key: \"start\",\n    value: function start() {\n      this.linkInterceptor.start();\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      this.linkInterceptor.stop();\n    }\n  }, {\n    key: \"willFollowLinkToLocation\",\n    value: function willFollowLinkToLocation(link, location, originalEvent) {\n      return this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) && link.hasAttribute(\"data-turbo-method\");\n    }\n  }, {\n    key: \"followedLinkToLocation\",\n    value: function followedLinkToLocation(link, location) {\n      var form = document.createElement(\"form\");\n      var type = \"hidden\";\n\n      var _iterator10 = _createForOfIteratorHelper(location.searchParams),\n          _step10;\n\n      try {\n        for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n          var _ref12 = _step10.value;\n\n          var _ref11 = _slicedToArray(_ref12, 2);\n\n          var name = _ref11[0];\n          var value = _ref11[1];\n          form.append(Object.assign(document.createElement(\"input\"), {\n            type: type,\n            name: name,\n            value: value\n          }));\n        }\n      } catch (err) {\n        _iterator10.e(err);\n      } finally {\n        _iterator10.f();\n      }\n\n      var action = Object.assign(location, {\n        search: \"\"\n      });\n      form.setAttribute(\"data-turbo\", \"true\");\n      form.setAttribute(\"action\", action.href);\n      form.setAttribute(\"hidden\", \"\");\n      var method = link.getAttribute(\"data-turbo-method\");\n      if (method) form.setAttribute(\"method\", method);\n      var turboFrame = link.getAttribute(\"data-turbo-frame\");\n      if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n      var turboAction = getVisitAction(link);\n      if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n      var turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n      if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n      var turboStream = link.hasAttribute(\"data-turbo-stream\");\n      if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n      this.delegate.submittedFormLinkToLocation(link, location, form);\n      document.body.appendChild(form);\n      form.addEventListener(\"turbo:submit-end\", function () {\n        return form.remove();\n      }, {\n        once: true\n      });\n      requestAnimationFrame(function () {\n        return form.requestSubmit();\n      });\n    }\n  }]);\n\n  return FormLinkClickObserver;\n}();\n\nvar Bardo = /*#__PURE__*/function () {\n  function Bardo(delegate, permanentElementMap) {\n    _classCallCheck(this, Bardo);\n\n    this.delegate = delegate;\n    this.permanentElementMap = permanentElementMap;\n  }\n\n  _createClass(Bardo, [{\n    key: \"enter\",\n    value: function enter() {\n      for (var id in this.permanentElementMap) {\n        var _this$permanentElemen = _slicedToArray(this.permanentElementMap[id], 2),\n            currentPermanentElement = _this$permanentElemen[0],\n            newPermanentElement = _this$permanentElemen[1];\n\n        this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n        this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n      }\n    }\n  }, {\n    key: \"leave\",\n    value: function leave() {\n      for (var id in this.permanentElementMap) {\n        var _this$permanentElemen2 = _slicedToArray(this.permanentElementMap[id], 1),\n            currentPermanentElement = _this$permanentElemen2[0];\n\n        this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n        this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n        this.delegate.leavingBardo(currentPermanentElement);\n      }\n    }\n  }, {\n    key: \"replaceNewPermanentElementWithPlaceholder\",\n    value: function replaceNewPermanentElementWithPlaceholder(permanentElement) {\n      var placeholder = createPlaceholderForPermanentElement(permanentElement);\n      permanentElement.replaceWith(placeholder);\n    }\n  }, {\n    key: \"replaceCurrentPermanentElementWithClone\",\n    value: function replaceCurrentPermanentElementWithClone(permanentElement) {\n      var clone = permanentElement.cloneNode(true);\n      permanentElement.replaceWith(clone);\n    }\n  }, {\n    key: \"replacePlaceholderWithPermanentElement\",\n    value: function replacePlaceholderWithPermanentElement(permanentElement) {\n      var placeholder = this.getPlaceholderById(permanentElement.id);\n      placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n    }\n  }, {\n    key: \"getPlaceholderById\",\n    value: function getPlaceholderById(id) {\n      return this.placeholders.find(function (element) {\n        return element.content == id;\n      });\n    }\n  }, {\n    key: \"placeholders\",\n    get: function get() {\n      return _toConsumableArray(document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\"));\n    }\n  }], [{\n    key: \"preservingPermanentElements\",\n    value: function () {\n      var _preservingPermanentElements = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee8(delegate, permanentElementMap, callback) {\n        var bardo;\n        return _regeneratorRuntime.wrap(function _callee8$(_context8) {\n          while (1) {\n            switch (_context8.prev = _context8.next) {\n              case 0:\n                bardo = new this(delegate, permanentElementMap);\n                bardo.enter();\n                _context8.next = 4;\n                return callback();\n\n              case 4:\n                bardo.leave();\n\n              case 5:\n              case \"end\":\n                return _context8.stop();\n            }\n          }\n        }, _callee8, this);\n      }));\n\n      function preservingPermanentElements(_x6, _x7, _x8) {\n        return _preservingPermanentElements.apply(this, arguments);\n      }\n\n      return preservingPermanentElements;\n    }()\n  }]);\n\n  return Bardo;\n}();\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n  var element = document.createElement(\"meta\");\n  element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n  element.setAttribute(\"content\", permanentElement.id);\n  return element;\n}\n\nvar Renderer = /*#__PURE__*/function () {\n  function Renderer(currentSnapshot, newSnapshot, renderElement, isPreview) {\n    var _this8 = this;\n\n    var willRender = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n\n    _classCallCheck(this, Renderer);\n\n    this.activeElement = null;\n    this.currentSnapshot = currentSnapshot;\n    this.newSnapshot = newSnapshot;\n    this.isPreview = isPreview;\n    this.willRender = willRender;\n    this.renderElement = renderElement;\n    this.promise = new Promise(function (resolve, reject) {\n      return _this8.resolvingFunctions = {\n        resolve: resolve,\n        reject: reject\n      };\n    });\n  }\n\n  _createClass(Renderer, [{\n    key: \"shouldRender\",\n    get: function get() {\n      return true;\n    }\n  }, {\n    key: \"reloadReason\",\n    get: function get() {\n      return;\n    }\n  }, {\n    key: \"prepareToRender\",\n    value: function prepareToRender() {\n      return;\n    }\n  }, {\n    key: \"finishRendering\",\n    value: function finishRendering() {\n      if (this.resolvingFunctions) {\n        this.resolvingFunctions.resolve();\n        delete this.resolvingFunctions;\n      }\n    }\n  }, {\n    key: \"preservingPermanentElements\",\n    value: function () {\n      var _preservingPermanentElements2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9(callback) {\n        return _regeneratorRuntime.wrap(function _callee9$(_context9) {\n          while (1) {\n            switch (_context9.prev = _context9.next) {\n              case 0:\n                _context9.next = 2;\n                return Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n\n              case 2:\n              case \"end\":\n                return _context9.stop();\n            }\n          }\n        }, _callee9, this);\n      }));\n\n      function preservingPermanentElements(_x9) {\n        return _preservingPermanentElements2.apply(this, arguments);\n      }\n\n      return preservingPermanentElements;\n    }()\n  }, {\n    key: \"focusFirstAutofocusableElement\",\n    value: function focusFirstAutofocusableElement() {\n      var element = this.connectedSnapshot.firstAutofocusableElement;\n\n      if (elementIsFocusable(element)) {\n        element.focus();\n      }\n    }\n  }, {\n    key: \"enteringBardo\",\n    value: function 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    key: \"leavingBardo\",\n    value: function leavingBardo(currentPermanentElement) {\n      if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {\n        this.activeElement.focus();\n        this.activeElement = null;\n      }\n    }\n  }, {\n    key: \"connectedSnapshot\",\n    get: function get() {\n      return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n    }\n  }, {\n    key: \"currentElement\",\n    get: function get() {\n      return this.currentSnapshot.element;\n    }\n  }, {\n    key: \"newElement\",\n    get: function get() {\n      return this.newSnapshot.element;\n    }\n  }, {\n    key: \"permanentElementMap\",\n    get: function get() {\n      return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n    }\n  }]);\n\n  return Renderer;\n}();\n\nfunction elementIsFocusable(element) {\n  return element && typeof element.focus == \"function\";\n}\n\nvar FrameRenderer = /*#__PURE__*/function (_Renderer) {\n  _inherits(FrameRenderer, _Renderer);\n\n  var _super3 = _createSuper(FrameRenderer);\n\n  function FrameRenderer(delegate, currentSnapshot, newSnapshot, renderElement, isPreview) {\n    var _this9;\n\n    var willRender = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n\n    _classCallCheck(this, FrameRenderer);\n\n    _this9 = _super3.call(this, currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n    _this9.delegate = delegate;\n    return _this9;\n  }\n\n  _createClass(FrameRenderer, [{\n    key: \"shouldRender\",\n    get: function get() {\n      return true;\n    }\n  }, {\n    key: \"render\",\n    value: function () {\n      var _render2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10() {\n        var _this10 = this;\n\n        return _regeneratorRuntime.wrap(function _callee10$(_context10) {\n          while (1) {\n            switch (_context10.prev = _context10.next) {\n              case 0:\n                _context10.next = 2;\n                return nextAnimationFrame();\n\n              case 2:\n                this.preservingPermanentElements(function () {\n                  _this10.loadFrameElement();\n                });\n                this.scrollFrameIntoView();\n                _context10.next = 6;\n                return nextAnimationFrame();\n\n              case 6:\n                this.focusFirstAutofocusableElement();\n                _context10.next = 9;\n                return nextAnimationFrame();\n\n              case 9:\n                this.activateScriptElements();\n\n              case 10:\n              case \"end\":\n                return _context10.stop();\n            }\n          }\n        }, _callee10, this);\n      }));\n\n      function render() {\n        return _render2.apply(this, arguments);\n      }\n\n      return render;\n    }()\n  }, {\n    key: \"loadFrameElement\",\n    value: function loadFrameElement() {\n      this.delegate.willRenderFrame(this.currentElement, this.newElement);\n      this.renderElement(this.currentElement, this.newElement);\n    }\n  }, {\n    key: \"scrollFrameIntoView\",\n    value: function scrollFrameIntoView() {\n      if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n        var element = this.currentElement.firstElementChild;\n        var block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n        var behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n        if (element) {\n          element.scrollIntoView({\n            block: block,\n            behavior: behavior\n          });\n          return true;\n        }\n      }\n\n      return false;\n    }\n  }, {\n    key: \"activateScriptElements\",\n    value: function activateScriptElements() {\n      var _iterator11 = _createForOfIteratorHelper(this.newScriptElements),\n          _step11;\n\n      try {\n        for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n          var inertScriptElement = _step11.value;\n          var activatedScriptElement = activateScriptElement(inertScriptElement);\n          inertScriptElement.replaceWith(activatedScriptElement);\n        }\n      } catch (err) {\n        _iterator11.e(err);\n      } finally {\n        _iterator11.f();\n      }\n    }\n  }, {\n    key: \"newScriptElements\",\n    get: function get() {\n      return this.currentElement.querySelectorAll(\"script\");\n    }\n  }], [{\n    key: \"renderElement\",\n    value: function renderElement(currentElement, newElement) {\n      var _a;\n\n      var destinationRange = document.createRange();\n      destinationRange.selectNodeContents(currentElement);\n      destinationRange.deleteContents();\n      var frameElement = newElement;\n      var sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n\n      if (sourceRange) {\n        sourceRange.selectNodeContents(frameElement);\n        currentElement.appendChild(sourceRange.extractContents());\n      }\n    }\n  }]);\n\n  return FrameRenderer;\n}(Renderer);\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\nvar ProgressBar = /*#__PURE__*/function () {\n  function ProgressBar() {\n    var _this11 = this;\n\n    _classCallCheck(this, ProgressBar);\n\n    this.hiding = false;\n    this.value = 0;\n    this.visible = false;\n\n    this.trickle = function () {\n      _this11.setValue(_this11.value + Math.random() / 100);\n    };\n\n    this.stylesheetElement = this.createStylesheetElement();\n    this.progressElement = this.createProgressElement();\n    this.installStylesheetElement();\n    this.setValue(0);\n  }\n\n  _createClass(ProgressBar, [{\n    key: \"show\",\n    value: function show() {\n      if (!this.visible) {\n        this.visible = true;\n        this.installProgressElement();\n        this.startTrickling();\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      var _this12 = this;\n\n      if (this.visible && !this.hiding) {\n        this.hiding = true;\n        this.fadeProgressElement(function () {\n          _this12.uninstallProgressElement();\n\n          _this12.stopTrickling();\n\n          _this12.visible = false;\n          _this12.hiding = false;\n        });\n      }\n    }\n  }, {\n    key: \"setValue\",\n    value: function setValue(value) {\n      this.value = value;\n      this.refresh();\n    }\n  }, {\n    key: \"installStylesheetElement\",\n    value: function installStylesheetElement() {\n      document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n    }\n  }, {\n    key: \"installProgressElement\",\n    value: function 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    key: \"fadeProgressElement\",\n    value: function fadeProgressElement(callback) {\n      this.progressElement.style.opacity = \"0\";\n      setTimeout(callback, ProgressBar.animationDuration * 1.5);\n    }\n  }, {\n    key: \"uninstallProgressElement\",\n    value: function uninstallProgressElement() {\n      if (this.progressElement.parentNode) {\n        document.documentElement.removeChild(this.progressElement);\n      }\n    }\n  }, {\n    key: \"startTrickling\",\n    value: function startTrickling() {\n      if (!this.trickleInterval) {\n        this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n      }\n    }\n  }, {\n    key: \"stopTrickling\",\n    value: function stopTrickling() {\n      window.clearInterval(this.trickleInterval);\n      delete this.trickleInterval;\n    }\n  }, {\n    key: \"refresh\",\n    value: function refresh() {\n      var _this13 = this;\n\n      requestAnimationFrame(function () {\n        _this13.progressElement.style.width = \"\".concat(10 + _this13.value * 90, \"%\");\n      });\n    }\n  }, {\n    key: \"createStylesheetElement\",\n    value: function createStylesheetElement() {\n      var element = document.createElement(\"style\");\n      element.type = \"text/css\";\n      element.textContent = ProgressBar.defaultCSS;\n\n      if (this.cspNonce) {\n        element.nonce = this.cspNonce;\n      }\n\n      return element;\n    }\n  }, {\n    key: \"createProgressElement\",\n    value: function createProgressElement() {\n      var element = document.createElement(\"div\");\n      element.className = \"turbo-progress-bar\";\n      return element;\n    }\n  }, {\n    key: \"cspNonce\",\n    get: function get() {\n      return getMetaContent(\"csp-nonce\");\n    }\n  }], [{\n    key: \"defaultCSS\",\n    get: function get() {\n      return unindent(_templateObject || (_templateObject = _taggedTemplateLiteral([\"\\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 \", \"ms ease-out,\\n          opacity \", \"ms \", \"ms ease-in;\\n        transform: translate3d(0, 0, 0);\\n      }\\n    \"])), ProgressBar.animationDuration, ProgressBar.animationDuration / 2, ProgressBar.animationDuration / 2);\n    }\n  }]);\n\n  return ProgressBar;\n}();\n\nProgressBar.animationDuration = 300;\n\nvar HeadSnapshot = /*#__PURE__*/function (_Snapshot) {\n  _inherits(HeadSnapshot, _Snapshot);\n\n  var _super4 = _createSuper(HeadSnapshot);\n\n  function HeadSnapshot() {\n    var _this14;\n\n    _classCallCheck(this, HeadSnapshot);\n\n    _this14 = _super4.apply(this, arguments);\n    _this14.detailsByOuterHTML = _this14.children.filter(function (element) {\n      return !elementIsNoscript(element);\n    }).map(function (element) {\n      return elementWithoutNonce(element);\n    }).reduce(function (result, element) {\n      var outerHTML = element.outerHTML;\n      var details = outerHTML in result ? result[outerHTML] : {\n        type: elementType(element),\n        tracked: elementIsTracked(element),\n        elements: []\n      };\n      return Object.assign(Object.assign({}, result), _defineProperty({}, outerHTML, Object.assign(Object.assign({}, details), {\n        elements: [].concat(_toConsumableArray(details.elements), [element])\n      })));\n    }, {});\n    return _this14;\n  }\n\n  _createClass(HeadSnapshot, [{\n    key: \"trackedElementSignature\",\n    get: function get() {\n      var _this15 = this;\n\n      return Object.keys(this.detailsByOuterHTML).filter(function (outerHTML) {\n        return _this15.detailsByOuterHTML[outerHTML].tracked;\n      }).join(\"\");\n    }\n  }, {\n    key: \"getScriptElementsNotInSnapshot\",\n    value: function getScriptElementsNotInSnapshot(snapshot) {\n      return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n    }\n  }, {\n    key: \"getStylesheetElementsNotInSnapshot\",\n    value: function getStylesheetElementsNotInSnapshot(snapshot) {\n      return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n    }\n  }, {\n    key: \"getElementsMatchingTypeNotInSnapshot\",\n    value: function getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n      var _this16 = this;\n\n      return Object.keys(this.detailsByOuterHTML).filter(function (outerHTML) {\n        return !(outerHTML in snapshot.detailsByOuterHTML);\n      }).map(function (outerHTML) {\n        return _this16.detailsByOuterHTML[outerHTML];\n      }).filter(function (_ref13) {\n        var type = _ref13.type;\n        return type == matchedType;\n      }).map(function (_ref14) {\n        var _ref14$elements = _slicedToArray(_ref14.elements, 1),\n            element = _ref14$elements[0];\n\n        return element;\n      });\n    }\n  }, {\n    key: \"provisionalElements\",\n    get: function get() {\n      var _this17 = this;\n\n      return Object.keys(this.detailsByOuterHTML).reduce(function (result, outerHTML) {\n        var _this17$detailsByOute = _this17.detailsByOuterHTML[outerHTML],\n            type = _this17$detailsByOute.type,\n            tracked = _this17$detailsByOute.tracked,\n            elements = _this17$detailsByOute.elements;\n\n        if (type == null && !tracked) {\n          return [].concat(_toConsumableArray(result), _toConsumableArray(elements));\n        } else if (elements.length > 1) {\n          return [].concat(_toConsumableArray(result), _toConsumableArray(elements.slice(1)));\n        } else {\n          return result;\n        }\n      }, []);\n    }\n  }, {\n    key: \"getMetaValue\",\n    value: function getMetaValue(name) {\n      var element = this.findMetaElementByName(name);\n      return element ? element.getAttribute(\"content\") : null;\n    }\n  }, {\n    key: \"findMetaElementByName\",\n    value: function findMetaElementByName(name) {\n      var _this18 = this;\n\n      return Object.keys(this.detailsByOuterHTML).reduce(function (result, outerHTML) {\n        var _this18$detailsByOute = _slicedToArray(_this18.detailsByOuterHTML[outerHTML].elements, 1),\n            element = _this18$detailsByOute[0];\n\n        return elementIsMetaElementWithName(element, name) ? element : result;\n      }, undefined);\n    }\n  }]);\n\n  return HeadSnapshot;\n}(Snapshot);\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  var tagName = element.localName;\n  return tagName == \"script\";\n}\n\nfunction elementIsNoscript(element) {\n  var tagName = element.localName;\n  return tagName == \"noscript\";\n}\n\nfunction elementIsStylesheet(element) {\n  var tagName = element.localName;\n  return tagName == \"style\" || tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\";\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n  var 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\nvar PageSnapshot = /*#__PURE__*/function (_Snapshot2) {\n  _inherits(PageSnapshot, _Snapshot2);\n\n  var _super5 = _createSuper(PageSnapshot);\n\n  function PageSnapshot(element, headSnapshot) {\n    var _this19;\n\n    _classCallCheck(this, PageSnapshot);\n\n    _this19 = _super5.call(this, element);\n    _this19.headSnapshot = headSnapshot;\n    return _this19;\n  }\n\n  _createClass(PageSnapshot, [{\n    key: \"clone\",\n    value: function clone() {\n      var clonedElement = this.element.cloneNode(true);\n      var selectElements = this.element.querySelectorAll(\"select\");\n      var clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n      var _iterator12 = _createForOfIteratorHelper(selectElements.entries()),\n          _step12;\n\n      try {\n        for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n          var _ref17 = _step12.value;\n\n          var _ref16 = _slicedToArray(_ref17, 2);\n\n          var index = _ref16[0];\n          var source = _ref16[1];\n          var clone = clonedSelectElements[index];\n\n          var _iterator14 = _createForOfIteratorHelper(clone.selectedOptions),\n              _step14;\n\n          try {\n            for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n              var option = _step14.value;\n              option.selected = false;\n            }\n          } catch (err) {\n            _iterator14.e(err);\n          } finally {\n            _iterator14.f();\n          }\n\n          var _iterator15 = _createForOfIteratorHelper(source.selectedOptions),\n              _step15;\n\n          try {\n            for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n              var _option = _step15.value;\n              clone.options[_option.index].selected = true;\n            }\n          } catch (err) {\n            _iterator15.e(err);\n          } finally {\n            _iterator15.f();\n          }\n        }\n      } catch (err) {\n        _iterator12.e(err);\n      } finally {\n        _iterator12.f();\n      }\n\n      var _iterator13 = _createForOfIteratorHelper(clonedElement.querySelectorAll('input[type=\"password\"]')),\n          _step13;\n\n      try {\n        for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n          var clonedPasswordInput = _step13.value;\n          clonedPasswordInput.value = \"\";\n        }\n      } catch (err) {\n        _iterator13.e(err);\n      } finally {\n        _iterator13.f();\n      }\n\n      return new PageSnapshot(clonedElement, this.headSnapshot);\n    }\n  }, {\n    key: \"headElement\",\n    get: function get() {\n      return this.headSnapshot.element;\n    }\n  }, {\n    key: \"rootLocation\",\n    get: function get() {\n      var _a;\n\n      var root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n      return expandURL(root);\n    }\n  }, {\n    key: \"cacheControlValue\",\n    get: function get() {\n      return this.getSetting(\"cache-control\");\n    }\n  }, {\n    key: \"isPreviewable\",\n    get: function get() {\n      return this.cacheControlValue != \"no-preview\";\n    }\n  }, {\n    key: \"isCacheable\",\n    get: function get() {\n      return this.cacheControlValue != \"no-cache\";\n    }\n  }, {\n    key: \"isVisitable\",\n    get: function get() {\n      return this.getSetting(\"visit-control\") != \"reload\";\n    }\n  }, {\n    key: \"getSetting\",\n    value: function getSetting(name) {\n      return this.headSnapshot.getMetaValue(\"turbo-\".concat(name));\n    }\n  }], [{\n    key: \"fromHTMLString\",\n    value: function fromHTMLString() {\n      var html = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n      return this.fromDocument(parseHTMLDocument(html));\n    }\n  }, {\n    key: \"fromElement\",\n    value: function fromElement(element) {\n      return this.fromDocument(element.ownerDocument);\n    }\n  }, {\n    key: \"fromDocument\",\n    value: function fromDocument(_ref18) {\n      var head = _ref18.head,\n          body = _ref18.body;\n      return new this(body, new HeadSnapshot(head));\n    }\n  }]);\n\n  return PageSnapshot;\n}(Snapshot);\n\nvar TimingMetric;\n\n(function (TimingMetric) {\n  TimingMetric[\"visitStart\"] = \"visitStart\";\n  TimingMetric[\"requestStart\"] = \"requestStart\";\n  TimingMetric[\"requestEnd\"] = \"requestEnd\";\n  TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\n\nvar VisitState;\n\n(function (VisitState) {\n  VisitState[\"initialized\"] = \"initialized\";\n  VisitState[\"started\"] = \"started\";\n  VisitState[\"canceled\"] = \"canceled\";\n  VisitState[\"failed\"] = \"failed\";\n  VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\n\nvar defaultOptions = {\n  action: \"advance\",\n  historyChanged: false,\n  visitCachedSnapshot: function visitCachedSnapshot() {},\n  willRender: true,\n  updateHistory: true,\n  shouldCacheSnapshot: true,\n  acceptsStreamResponse: false\n};\nvar SystemStatusCode;\n\n(function (SystemStatusCode) {\n  SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n  SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n  SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\n\nvar Visit = /*#__PURE__*/function () {\n  function Visit(delegate, location, restorationIdentifier) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n    _classCallCheck(this, Visit);\n\n    this.identifier = uuid();\n    this.timingMetrics = {};\n    this.followedRedirect = false;\n    this.historyChanged = false;\n    this.scrolled = false;\n    this.shouldCacheSnapshot = true;\n    this.acceptsStreamResponse = false;\n    this.snapshotCached = false;\n    this.state = VisitState.initialized;\n    this.delegate = delegate;\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier || uuid();\n\n    var _Object$assign2 = Object.assign(Object.assign({}, defaultOptions), options),\n        action = _Object$assign2.action,\n        historyChanged = _Object$assign2.historyChanged,\n        referrer = _Object$assign2.referrer,\n        snapshot = _Object$assign2.snapshot,\n        snapshotHTML = _Object$assign2.snapshotHTML,\n        response = _Object$assign2.response,\n        visitCachedSnapshot = _Object$assign2.visitCachedSnapshot,\n        willRender = _Object$assign2.willRender,\n        updateHistory = _Object$assign2.updateHistory,\n        shouldCacheSnapshot = _Object$assign2.shouldCacheSnapshot,\n        acceptsStreamResponse = _Object$assign2.acceptsStreamResponse;\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.visitCachedSnapshot = visitCachedSnapshot;\n    this.willRender = willRender;\n    this.updateHistory = updateHistory;\n    this.scrolled = !willRender;\n    this.shouldCacheSnapshot = shouldCacheSnapshot;\n    this.acceptsStreamResponse = acceptsStreamResponse;\n  }\n\n  _createClass(Visit, [{\n    key: \"adapter\",\n    get: function get() {\n      return this.delegate.adapter;\n    }\n  }, {\n    key: \"view\",\n    get: function get() {\n      return this.delegate.view;\n    }\n  }, {\n    key: \"history\",\n    get: function get() {\n      return this.delegate.history;\n    }\n  }, {\n    key: \"restorationData\",\n    get: function get() {\n      return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n    }\n  }, {\n    key: \"silent\",\n    get: function get() {\n      return this.isSamePage;\n    }\n  }, {\n    key: \"start\",\n    value: function 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    key: \"cancel\",\n    value: function cancel() {\n      if (this.state == VisitState.started) {\n        if (this.request) {\n          this.request.cancel();\n        }\n\n        this.cancelRender();\n        this.state = VisitState.canceled;\n      }\n    }\n  }, {\n    key: \"complete\",\n    value: function complete() {\n      if (this.state == VisitState.started) {\n        this.recordTimingMetric(TimingMetric.visitEnd);\n        this.state = VisitState.completed;\n        this.followRedirect();\n\n        if (!this.followedRedirect) {\n          this.adapter.visitCompleted(this);\n          this.delegate.visitCompleted(this);\n        }\n      }\n    }\n  }, {\n    key: \"fail\",\n    value: function fail() {\n      if (this.state == VisitState.started) {\n        this.state = VisitState.failed;\n        this.adapter.visitFailed(this);\n      }\n    }\n  }, {\n    key: \"changeHistory\",\n    value: function changeHistory() {\n      var _a;\n\n      if (!this.historyChanged && this.updateHistory) {\n        var actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n        var method = getHistoryMethodForAction(actionForHistory);\n        this.history.update(method, this.location, this.restorationIdentifier);\n        this.historyChanged = true;\n      }\n    }\n  }, {\n    key: \"issueRequest\",\n    value: function 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    key: \"simulateRequest\",\n    value: function simulateRequest() {\n      if (this.response) {\n        this.startRequest();\n        this.recordResponse();\n        this.finishRequest();\n      }\n    }\n  }, {\n    key: \"startRequest\",\n    value: function startRequest() {\n      this.recordTimingMetric(TimingMetric.requestStart);\n      this.adapter.visitRequestStarted(this);\n    }\n  }, {\n    key: \"recordResponse\",\n    value: function recordResponse() {\n      var response = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.response;\n      this.response = response;\n\n      if (response) {\n        var statusCode = response.statusCode;\n\n        if (isSuccessful(statusCode)) {\n          this.adapter.visitRequestCompleted(this);\n        } else {\n          this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n        }\n      }\n    }\n  }, {\n    key: \"finishRequest\",\n    value: function finishRequest() {\n      this.recordTimingMetric(TimingMetric.requestEnd);\n      this.adapter.visitRequestFinished(this);\n    }\n  }, {\n    key: \"loadResponse\",\n    value: function loadResponse() {\n      var _this20 = this;\n\n      if (this.response) {\n        var _this$response = this.response,\n            statusCode = _this$response.statusCode,\n            responseHTML = _this$response.responseHTML;\n        this.render( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee11() {\n          return _regeneratorRuntime.wrap(function _callee11$(_context11) {\n            while (1) {\n              switch (_context11.prev = _context11.next) {\n                case 0:\n                  if (_this20.shouldCacheSnapshot) _this20.cacheSnapshot();\n\n                  if (!_this20.view.renderPromise) {\n                    _context11.next = 4;\n                    break;\n                  }\n\n                  _context11.next = 4;\n                  return _this20.view.renderPromise;\n\n                case 4:\n                  if (!(isSuccessful(statusCode) && responseHTML != null)) {\n                    _context11.next = 12;\n                    break;\n                  }\n\n                  _context11.next = 7;\n                  return _this20.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, _this20.willRender, _this20);\n\n                case 7:\n                  _this20.performScroll();\n\n                  _this20.adapter.visitRendered(_this20);\n\n                  _this20.complete();\n\n                  _context11.next = 16;\n                  break;\n\n                case 12:\n                  _context11.next = 14;\n                  return _this20.view.renderError(PageSnapshot.fromHTMLString(responseHTML), _this20);\n\n                case 14:\n                  _this20.adapter.visitRendered(_this20);\n\n                  _this20.fail();\n\n                case 16:\n                case \"end\":\n                  return _context11.stop();\n              }\n            }\n          }, _callee11);\n        })));\n      }\n    }\n  }, {\n    key: \"getCachedSnapshot\",\n    value: function getCachedSnapshot() {\n      var 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    key: \"getPreloadedSnapshot\",\n    value: function getPreloadedSnapshot() {\n      if (this.snapshotHTML) {\n        return PageSnapshot.fromHTMLString(this.snapshotHTML);\n      }\n    }\n  }, {\n    key: \"hasCachedSnapshot\",\n    value: function hasCachedSnapshot() {\n      return this.getCachedSnapshot() != null;\n    }\n  }, {\n    key: \"loadCachedSnapshot\",\n    value: function loadCachedSnapshot() {\n      var _this21 = this;\n\n      var snapshot = this.getCachedSnapshot();\n\n      if (snapshot) {\n        var isPreview = this.shouldIssueRequest();\n        this.render( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee12() {\n          return _regeneratorRuntime.wrap(function _callee12$(_context12) {\n            while (1) {\n              switch (_context12.prev = _context12.next) {\n                case 0:\n                  _this21.cacheSnapshot();\n\n                  if (!_this21.isSamePage) {\n                    _context12.next = 5;\n                    break;\n                  }\n\n                  _this21.adapter.visitRendered(_this21);\n\n                  _context12.next = 13;\n                  break;\n\n                case 5:\n                  if (!_this21.view.renderPromise) {\n                    _context12.next = 8;\n                    break;\n                  }\n\n                  _context12.next = 8;\n                  return _this21.view.renderPromise;\n\n                case 8:\n                  _context12.next = 10;\n                  return _this21.view.renderPage(snapshot, isPreview, _this21.willRender, _this21);\n\n                case 10:\n                  _this21.performScroll();\n\n                  _this21.adapter.visitRendered(_this21);\n\n                  if (!isPreview) {\n                    _this21.complete();\n                  }\n\n                case 13:\n                case \"end\":\n                  return _context12.stop();\n              }\n            }\n          }, _callee12);\n        })));\n      }\n    }\n  }, {\n    key: \"followRedirect\",\n    value: function followRedirect() {\n      var _a;\n\n      if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.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    key: \"goToSamePageAnchor\",\n    value: function goToSamePageAnchor() {\n      var _this22 = this;\n\n      if (this.isSamePage) {\n        this.render( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee13() {\n          return _regeneratorRuntime.wrap(function _callee13$(_context13) {\n            while (1) {\n              switch (_context13.prev = _context13.next) {\n                case 0:\n                  _this22.cacheSnapshot();\n\n                  _this22.performScroll();\n\n                  _this22.changeHistory();\n\n                  _this22.adapter.visitRendered(_this22);\n\n                case 4:\n                case \"end\":\n                  return _context13.stop();\n              }\n            }\n          }, _callee13);\n        })));\n      }\n    }\n  }, {\n    key: \"prepareRequest\",\n    value: function prepareRequest(request) {\n      if (this.acceptsStreamResponse) {\n        request.acceptResponseType(StreamMessage.contentType);\n      }\n    }\n  }, {\n    key: \"requestStarted\",\n    value: function requestStarted() {\n      this.startRequest();\n    }\n  }, {\n    key: \"requestPreventedHandlingResponse\",\n    value: function requestPreventedHandlingResponse(_request, _response) {}\n  }, {\n    key: \"requestSucceededWithResponse\",\n    value: function () {\n      var _requestSucceededWithResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee14(request, response) {\n        var responseHTML, redirected, statusCode;\n        return _regeneratorRuntime.wrap(function _callee14$(_context14) {\n          while (1) {\n            switch (_context14.prev = _context14.next) {\n              case 0:\n                _context14.next = 2;\n                return response.responseHTML;\n\n              case 2:\n                responseHTML = _context14.sent;\n                redirected = response.redirected, statusCode = response.statusCode;\n\n                if (responseHTML == undefined) {\n                  this.recordResponse({\n                    statusCode: SystemStatusCode.contentTypeMismatch,\n                    redirected: redirected\n                  });\n                } else {\n                  this.redirectedToLocation = response.redirected ? response.location : undefined;\n                  this.recordResponse({\n                    statusCode: statusCode,\n                    responseHTML: responseHTML,\n                    redirected: redirected\n                  });\n                }\n\n              case 5:\n              case \"end\":\n                return _context14.stop();\n            }\n          }\n        }, _callee14, this);\n      }));\n\n      function requestSucceededWithResponse(_x10, _x11) {\n        return _requestSucceededWithResponse.apply(this, arguments);\n      }\n\n      return requestSucceededWithResponse;\n    }()\n  }, {\n    key: \"requestFailedWithResponse\",\n    value: function () {\n      var _requestFailedWithResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee15(request, response) {\n        var responseHTML, redirected, statusCode;\n        return _regeneratorRuntime.wrap(function _callee15$(_context15) {\n          while (1) {\n            switch (_context15.prev = _context15.next) {\n              case 0:\n                _context15.next = 2;\n                return response.responseHTML;\n\n              case 2:\n                responseHTML = _context15.sent;\n                redirected = response.redirected, statusCode = response.statusCode;\n\n                if (responseHTML == undefined) {\n                  this.recordResponse({\n                    statusCode: SystemStatusCode.contentTypeMismatch,\n                    redirected: redirected\n                  });\n                } else {\n                  this.recordResponse({\n                    statusCode: statusCode,\n                    responseHTML: responseHTML,\n                    redirected: redirected\n                  });\n                }\n\n              case 5:\n              case \"end\":\n                return _context15.stop();\n            }\n          }\n        }, _callee15, this);\n      }));\n\n      function requestFailedWithResponse(_x12, _x13) {\n        return _requestFailedWithResponse.apply(this, arguments);\n      }\n\n      return requestFailedWithResponse;\n    }()\n  }, {\n    key: \"requestErrored\",\n    value: function requestErrored(_request, _error) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.networkFailure,\n        redirected: false\n      });\n    }\n  }, {\n    key: \"requestFinished\",\n    value: function requestFinished() {\n      this.finishRequest();\n    }\n  }, {\n    key: \"performScroll\",\n    value: function performScroll() {\n      if (!this.scrolled && !this.view.forceReloaded) {\n        if (this.action == \"restore\") {\n          this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n        } else {\n          this.scrollToAnchor() || this.view.scrollToTop();\n        }\n\n        if (this.isSamePage) {\n          this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n        }\n\n        this.scrolled = true;\n      }\n    }\n  }, {\n    key: \"scrollToRestoredPosition\",\n    value: function scrollToRestoredPosition() {\n      var scrollPosition = this.restorationData.scrollPosition;\n\n      if (scrollPosition) {\n        this.view.scrollToPosition(scrollPosition);\n        return true;\n      }\n    }\n  }, {\n    key: \"scrollToAnchor\",\n    value: function scrollToAnchor() {\n      var anchor = getAnchor(this.location);\n\n      if (anchor != null) {\n        this.view.scrollToAnchor(anchor);\n        return true;\n      }\n    }\n  }, {\n    key: \"recordTimingMetric\",\n    value: function recordTimingMetric(metric) {\n      this.timingMetrics[metric] = new Date().getTime();\n    }\n  }, {\n    key: \"getTimingMetrics\",\n    value: function getTimingMetrics() {\n      return Object.assign({}, this.timingMetrics);\n    }\n  }, {\n    key: \"getHistoryMethodForAction\",\n    value: function getHistoryMethodForAction(action) {\n      switch (action) {\n        case \"replace\":\n          return history.replaceState;\n\n        case \"advance\":\n        case \"restore\":\n          return history.pushState;\n      }\n    }\n  }, {\n    key: \"hasPreloadedResponse\",\n    value: function hasPreloadedResponse() {\n      return _typeof(this.response) == \"object\";\n    }\n  }, {\n    key: \"shouldIssueRequest\",\n    value: function 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    key: \"cacheSnapshot\",\n    value: function cacheSnapshot() {\n      var _this23 = this;\n\n      if (!this.snapshotCached) {\n        this.view.cacheSnapshot(this.snapshot).then(function (snapshot) {\n          return snapshot && _this23.visitCachedSnapshot(snapshot);\n        });\n        this.snapshotCached = true;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function () {\n      var _render3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee16(callback) {\n        var _this24 = this;\n\n        return _regeneratorRuntime.wrap(function _callee16$(_context16) {\n          while (1) {\n            switch (_context16.prev = _context16.next) {\n              case 0:\n                this.cancelRender();\n                _context16.next = 3;\n                return new Promise(function (resolve) {\n                  _this24.frame = requestAnimationFrame(function () {\n                    return resolve();\n                  });\n                });\n\n              case 3:\n                _context16.next = 5;\n                return callback();\n\n              case 5:\n                delete this.frame;\n\n              case 6:\n              case \"end\":\n                return _context16.stop();\n            }\n          }\n        }, _callee16, this);\n      }));\n\n      function render(_x14) {\n        return _render3.apply(this, arguments);\n      }\n\n      return render;\n    }()\n  }, {\n    key: \"cancelRender\",\n    value: function cancelRender() {\n      if (this.frame) {\n        cancelAnimationFrame(this.frame);\n        delete this.frame;\n      }\n    }\n  }]);\n\n  return Visit;\n}();\n\nfunction isSuccessful(statusCode) {\n  return statusCode >= 200 && statusCode < 300;\n}\n\nvar BrowserAdapter = /*#__PURE__*/function () {\n  function BrowserAdapter(session) {\n    var _this25 = this;\n\n    _classCallCheck(this, BrowserAdapter);\n\n    this.progressBar = new ProgressBar();\n\n    this.showProgressBar = function () {\n      _this25.progressBar.show();\n    };\n\n    this.session = session;\n  }\n\n  _createClass(BrowserAdapter, [{\n    key: \"visitProposedToLocation\",\n    value: function visitProposedToLocation(location, options) {\n      this.navigator.startVisit(location, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);\n    }\n  }, {\n    key: \"visitStarted\",\n    value: function visitStarted(visit) {\n      this.location = visit.location;\n      visit.loadCachedSnapshot();\n      visit.issueRequest();\n      visit.goToSamePageAnchor();\n    }\n  }, {\n    key: \"visitRequestStarted\",\n    value: function visitRequestStarted(visit) {\n      this.progressBar.setValue(0);\n\n      if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n        this.showVisitProgressBarAfterDelay();\n      } else {\n        this.showProgressBar();\n      }\n    }\n  }, {\n    key: \"visitRequestCompleted\",\n    value: function visitRequestCompleted(visit) {\n      visit.loadResponse();\n    }\n  }, {\n    key: \"visitRequestFailedWithStatusCode\",\n    value: function 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: statusCode\n            }\n          });\n\n        default:\n          return visit.loadResponse();\n      }\n    }\n  }, {\n    key: \"visitRequestFinished\",\n    value: function visitRequestFinished(_visit) {\n      this.progressBar.setValue(1);\n      this.hideVisitProgressBar();\n    }\n  }, {\n    key: \"visitCompleted\",\n    value: function visitCompleted(_visit) {}\n  }, {\n    key: \"pageInvalidated\",\n    value: function pageInvalidated(reason) {\n      this.reload(reason);\n    }\n  }, {\n    key: \"visitFailed\",\n    value: function visitFailed(_visit) {}\n  }, {\n    key: \"visitRendered\",\n    value: function visitRendered(_visit) {}\n  }, {\n    key: \"formSubmissionStarted\",\n    value: function formSubmissionStarted(_formSubmission) {\n      this.progressBar.setValue(0);\n      this.showFormProgressBarAfterDelay();\n    }\n  }, {\n    key: \"formSubmissionFinished\",\n    value: function formSubmissionFinished(_formSubmission) {\n      this.progressBar.setValue(1);\n      this.hideFormProgressBar();\n    }\n  }, {\n    key: \"showVisitProgressBarAfterDelay\",\n    value: function showVisitProgressBarAfterDelay() {\n      this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n  }, {\n    key: \"hideVisitProgressBar\",\n    value: function hideVisitProgressBar() {\n      this.progressBar.hide();\n\n      if (this.visitProgressBarTimeout != null) {\n        window.clearTimeout(this.visitProgressBarTimeout);\n        delete this.visitProgressBarTimeout;\n      }\n    }\n  }, {\n    key: \"showFormProgressBarAfterDelay\",\n    value: function showFormProgressBarAfterDelay() {\n      if (this.formProgressBarTimeout == null) {\n        this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n      }\n    }\n  }, {\n    key: \"hideFormProgressBar\",\n    value: function hideFormProgressBar() {\n      this.progressBar.hide();\n\n      if (this.formProgressBarTimeout != null) {\n        window.clearTimeout(this.formProgressBarTimeout);\n        delete this.formProgressBarTimeout;\n      }\n    }\n  }, {\n    key: \"reload\",\n    value: function reload(reason) {\n      var _a;\n\n      dispatch(\"turbo:reload\", {\n        detail: reason\n      });\n      window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;\n    }\n  }, {\n    key: \"navigator\",\n    get: function get() {\n      return this.session.navigator;\n    }\n  }]);\n\n  return BrowserAdapter;\n}();\n\nvar CacheObserver = /*#__PURE__*/function () {\n  function CacheObserver() {\n    var _this26 = this;\n\n    _classCallCheck(this, CacheObserver);\n\n    this.selector = \"[data-turbo-temporary]\";\n    this.deprecatedSelector = \"[data-turbo-cache=false]\";\n    this.started = false;\n\n    this.removeTemporaryElements = function (_event) {\n      var _iterator16 = _createForOfIteratorHelper(_this26.temporaryElements),\n          _step16;\n\n      try {\n        for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n          var element = _step16.value;\n          element.remove();\n        }\n      } catch (err) {\n        _iterator16.e(err);\n      } finally {\n        _iterator16.f();\n      }\n    };\n  }\n\n  _createClass(CacheObserver, [{\n    key: \"start\",\n    value: function start() {\n      if (!this.started) {\n        this.started = true;\n        addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (this.started) {\n        this.started = false;\n        removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n      }\n    }\n  }, {\n    key: \"temporaryElements\",\n    get: function get() {\n      return [].concat(_toConsumableArray(document.querySelectorAll(this.selector)), _toConsumableArray(this.temporaryElementsWithDeprecation));\n    }\n  }, {\n    key: \"temporaryElementsWithDeprecation\",\n    get: function get() {\n      var elements = document.querySelectorAll(this.deprecatedSelector);\n\n      if (elements.length) {\n        console.warn(\"The \".concat(this.deprecatedSelector, \" selector is deprecated and will be removed in a future version. Use \").concat(this.selector, \" instead.\"));\n      }\n\n      return _toConsumableArray(elements);\n    }\n  }]);\n\n  return CacheObserver;\n}();\n\nvar FrameRedirector = /*#__PURE__*/function () {\n  function FrameRedirector(session, element) {\n    _classCallCheck(this, FrameRedirector);\n\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  _createClass(FrameRedirector, [{\n    key: \"start\",\n    value: function start() {\n      this.linkInterceptor.start();\n      this.formSubmitObserver.start();\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      this.linkInterceptor.stop();\n      this.formSubmitObserver.stop();\n    }\n  }, {\n    key: \"shouldInterceptLinkClick\",\n    value: function shouldInterceptLinkClick(element, _location, _event) {\n      return this.shouldRedirect(element);\n    }\n  }, {\n    key: \"linkClickIntercepted\",\n    value: function linkClickIntercepted(element, url, event) {\n      var frame = this.findFrameElement(element);\n\n      if (frame) {\n        frame.delegate.linkClickIntercepted(element, url, event);\n      }\n    }\n  }, {\n    key: \"willSubmitForm\",\n    value: function willSubmitForm(element, submitter) {\n      return element.closest(\"turbo-frame\") == null && this.shouldSubmit(element, submitter) && this.shouldRedirect(element, submitter);\n    }\n  }, {\n    key: \"formSubmitted\",\n    value: function formSubmitted(element, submitter) {\n      var frame = this.findFrameElement(element, submitter);\n\n      if (frame) {\n        frame.delegate.formSubmitted(element, submitter);\n      }\n    }\n  }, {\n    key: \"shouldSubmit\",\n    value: function shouldSubmit(form, submitter) {\n      var _a;\n\n      var action = getAction(form, submitter);\n      var meta = this.element.ownerDocument.querySelector(\"meta[name=\\\"turbo-root\\\"]\");\n      var rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n      return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n    }\n  }, {\n    key: \"shouldRedirect\",\n    value: function shouldRedirect(element, submitter) {\n      var isNavigatable = element instanceof HTMLFormElement ? this.session.submissionIsNavigatable(element, submitter) : this.session.elementIsNavigatable(element);\n\n      if (isNavigatable) {\n        var frame = this.findFrameElement(element, submitter);\n        return frame ? frame != element.closest(\"turbo-frame\") : false;\n      } else {\n        return false;\n      }\n    }\n  }, {\n    key: \"findFrameElement\",\n    value: function findFrameElement(element, submitter) {\n      var id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n\n      if (id && id != \"_top\") {\n        var frame = this.element.querySelector(\"#\".concat(id, \":not([disabled])\"));\n\n        if (frame instanceof FrameElement) {\n          return frame;\n        }\n      }\n    }\n  }]);\n\n  return FrameRedirector;\n}();\n\nvar History = /*#__PURE__*/function () {\n  function History(delegate) {\n    var _this27 = this;\n\n    _classCallCheck(this, History);\n\n    this.restorationIdentifier = uuid();\n    this.restorationData = {};\n    this.started = false;\n    this.pageLoaded = false;\n\n    this.onPopState = function (event) {\n      if (_this27.shouldHandlePopState()) {\n        var _ref22 = event.state || {},\n            turbo = _ref22.turbo;\n\n        if (turbo) {\n          _this27.location = new URL(window.location.href);\n          var restorationIdentifier = turbo.restorationIdentifier;\n          _this27.restorationIdentifier = restorationIdentifier;\n\n          _this27.delegate.historyPoppedToLocationWithRestorationIdentifier(_this27.location, restorationIdentifier);\n        }\n      }\n    };\n\n    this.onPageLoad = /*#__PURE__*/function () {\n      var _ref23 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee17(_event) {\n        return _regeneratorRuntime.wrap(function _callee17$(_context17) {\n          while (1) {\n            switch (_context17.prev = _context17.next) {\n              case 0:\n                _context17.next = 2;\n                return nextMicrotask();\n\n              case 2:\n                _this27.pageLoaded = true;\n\n              case 3:\n              case \"end\":\n                return _context17.stop();\n            }\n          }\n        }, _callee17);\n      }));\n\n      return function (_x15) {\n        return _ref23.apply(this, arguments);\n      };\n    }();\n\n    this.delegate = delegate;\n  }\n\n  _createClass(History, [{\n    key: \"start\",\n    value: function start() {\n      if (!this.started) {\n        addEventListener(\"popstate\", this.onPopState, false);\n        addEventListener(\"load\", this.onPageLoad, false);\n        this.started = true;\n        this.replace(new URL(window.location.href));\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function 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    key: \"push\",\n    value: function push(location, restorationIdentifier) {\n      this.update(history.pushState, location, restorationIdentifier);\n    }\n  }, {\n    key: \"replace\",\n    value: function replace(location, restorationIdentifier) {\n      this.update(history.replaceState, location, restorationIdentifier);\n    }\n  }, {\n    key: \"update\",\n    value: function update(method, location) {\n      var restorationIdentifier = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : uuid();\n      var state = {\n        turbo: {\n          restorationIdentifier: restorationIdentifier\n        }\n      };\n      method.call(history, state, \"\", location.href);\n      this.location = location;\n      this.restorationIdentifier = restorationIdentifier;\n    }\n  }, {\n    key: \"getRestorationDataForIdentifier\",\n    value: function getRestorationDataForIdentifier(restorationIdentifier) {\n      return this.restorationData[restorationIdentifier] || {};\n    }\n  }, {\n    key: \"updateRestorationData\",\n    value: function updateRestorationData(additionalData) {\n      var restorationIdentifier = this.restorationIdentifier;\n      var restorationData = this.restorationData[restorationIdentifier];\n      this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n    }\n  }, {\n    key: \"assumeControlOfScrollRestoration\",\n    value: function assumeControlOfScrollRestoration() {\n      var _a;\n\n      if (!this.previousScrollRestoration) {\n        this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n        history.scrollRestoration = \"manual\";\n      }\n    }\n  }, {\n    key: \"relinquishControlOfScrollRestoration\",\n    value: function relinquishControlOfScrollRestoration() {\n      if (this.previousScrollRestoration) {\n        history.scrollRestoration = this.previousScrollRestoration;\n        delete this.previousScrollRestoration;\n      }\n    }\n  }, {\n    key: \"shouldHandlePopState\",\n    value: function shouldHandlePopState() {\n      return this.pageIsLoaded();\n    }\n  }, {\n    key: \"pageIsLoaded\",\n    value: function pageIsLoaded() {\n      return this.pageLoaded || document.readyState == \"complete\";\n    }\n  }]);\n\n  return History;\n}();\n\nvar Navigator = /*#__PURE__*/function () {\n  function Navigator(delegate) {\n    _classCallCheck(this, Navigator);\n\n    this.delegate = delegate;\n  }\n\n  _createClass(Navigator, [{\n    key: \"proposeVisit\",\n    value: function proposeVisit(location) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n        if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n          this.delegate.visitProposedToLocation(location, options);\n        } else {\n          window.location.href = location.toString();\n        }\n      }\n    }\n  }, {\n    key: \"startVisit\",\n    value: function startVisit(locatable, restorationIdentifier) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      this.stop();\n      this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({\n        referrer: this.location\n      }, options));\n      this.currentVisit.start();\n    }\n  }, {\n    key: \"submitForm\",\n    value: function submitForm(form, submitter) {\n      this.stop();\n      this.formSubmission = new FormSubmission(this, form, submitter, true);\n      this.formSubmission.start();\n    }\n  }, {\n    key: \"stop\",\n    value: function 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    key: \"adapter\",\n    get: function get() {\n      return this.delegate.adapter;\n    }\n  }, {\n    key: \"view\",\n    get: function get() {\n      return this.delegate.view;\n    }\n  }, {\n    key: \"history\",\n    get: function get() {\n      return this.delegate.history;\n    }\n  }, {\n    key: \"formSubmissionStarted\",\n    value: function formSubmissionStarted(formSubmission) {\n      if (typeof this.adapter.formSubmissionStarted === \"function\") {\n        this.adapter.formSubmissionStarted(formSubmission);\n      }\n    }\n  }, {\n    key: \"formSubmissionSucceededWithResponse\",\n    value: function () {\n      var _formSubmissionSucceededWithResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee18(formSubmission, fetchResponse) {\n        var responseHTML, shouldCacheSnapshot, statusCode, redirected, action, visitOptions;\n        return _regeneratorRuntime.wrap(function _callee18$(_context18) {\n          while (1) {\n            switch (_context18.prev = _context18.next) {\n              case 0:\n                if (!(formSubmission == this.formSubmission)) {\n                  _context18.next = 5;\n                  break;\n                }\n\n                _context18.next = 3;\n                return fetchResponse.responseHTML;\n\n              case 3:\n                responseHTML = _context18.sent;\n\n                if (responseHTML) {\n                  shouldCacheSnapshot = formSubmission.isSafe;\n\n                  if (!shouldCacheSnapshot) {\n                    this.view.clearSnapshotCache();\n                  }\n\n                  statusCode = fetchResponse.statusCode, redirected = fetchResponse.redirected;\n                  action = this.getActionForFormSubmission(formSubmission);\n                  visitOptions = {\n                    action: action,\n                    shouldCacheSnapshot: shouldCacheSnapshot,\n                    response: {\n                      statusCode: statusCode,\n                      responseHTML: responseHTML,\n                      redirected: redirected\n                    }\n                  };\n                  this.proposeVisit(fetchResponse.location, visitOptions);\n                }\n\n              case 5:\n              case \"end\":\n                return _context18.stop();\n            }\n          }\n        }, _callee18, this);\n      }));\n\n      function formSubmissionSucceededWithResponse(_x16, _x17) {\n        return _formSubmissionSucceededWithResponse.apply(this, arguments);\n      }\n\n      return formSubmissionSucceededWithResponse;\n    }()\n  }, {\n    key: \"formSubmissionFailedWithResponse\",\n    value: function () {\n      var _formSubmissionFailedWithResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee19(formSubmission, fetchResponse) {\n        var responseHTML, snapshot;\n        return _regeneratorRuntime.wrap(function _callee19$(_context19) {\n          while (1) {\n            switch (_context19.prev = _context19.next) {\n              case 0:\n                _context19.next = 2;\n                return fetchResponse.responseHTML;\n\n              case 2:\n                responseHTML = _context19.sent;\n\n                if (!responseHTML) {\n                  _context19.next = 14;\n                  break;\n                }\n\n                snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n                if (!fetchResponse.serverError) {\n                  _context19.next = 10;\n                  break;\n                }\n\n                _context19.next = 8;\n                return this.view.renderError(snapshot, this.currentVisit);\n\n              case 8:\n                _context19.next = 12;\n                break;\n\n              case 10:\n                _context19.next = 12;\n                return this.view.renderPage(snapshot, false, true, this.currentVisit);\n\n              case 12:\n                this.view.scrollToTop();\n                this.view.clearSnapshotCache();\n\n              case 14:\n              case \"end\":\n                return _context19.stop();\n            }\n          }\n        }, _callee19, this);\n      }));\n\n      function formSubmissionFailedWithResponse(_x18, _x19) {\n        return _formSubmissionFailedWithResponse.apply(this, arguments);\n      }\n\n      return formSubmissionFailedWithResponse;\n    }()\n  }, {\n    key: \"formSubmissionErrored\",\n    value: function formSubmissionErrored(formSubmission, error) {\n      console.error(error);\n    }\n  }, {\n    key: \"formSubmissionFinished\",\n    value: function formSubmissionFinished(formSubmission) {\n      if (typeof this.adapter.formSubmissionFinished === \"function\") {\n        this.adapter.formSubmissionFinished(formSubmission);\n      }\n    }\n  }, {\n    key: \"visitStarted\",\n    value: function visitStarted(visit) {\n      this.delegate.visitStarted(visit);\n    }\n  }, {\n    key: \"visitCompleted\",\n    value: function visitCompleted(visit) {\n      this.delegate.visitCompleted(visit);\n    }\n  }, {\n    key: \"locationWithActionIsSamePage\",\n    value: function locationWithActionIsSamePage(location, action) {\n      var anchor = getAnchor(location);\n      var currentAnchor = getAnchor(this.view.lastRenderedLocation);\n      var isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n      return action !== \"replace\" && getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) && (isRestorationToTop || anchor != null && anchor !== currentAnchor);\n    }\n  }, {\n    key: \"visitScrolledToSamePageLocation\",\n    value: function visitScrolledToSamePageLocation(oldURL, newURL) {\n      this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n    }\n  }, {\n    key: \"location\",\n    get: function get() {\n      return this.history.location;\n    }\n  }, {\n    key: \"restorationIdentifier\",\n    get: function get() {\n      return this.history.restorationIdentifier;\n    }\n  }, {\n    key: \"getActionForFormSubmission\",\n    value: function getActionForFormSubmission(_ref24) {\n      var submitter = _ref24.submitter,\n          formElement = _ref24.formElement;\n      return getVisitAction(submitter, formElement) || \"advance\";\n    }\n  }]);\n\n  return Navigator;\n}();\n\nvar PageStage;\n\n(function (PageStage) {\n  PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n  PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n  PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n  PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\n\nvar PageObserver = /*#__PURE__*/function () {\n  function PageObserver(delegate) {\n    var _this28 = this;\n\n    _classCallCheck(this, PageObserver);\n\n    this.stage = PageStage.initial;\n    this.started = false;\n\n    this.interpretReadyState = function () {\n      var readyState = _this28.readyState;\n\n      if (readyState == \"interactive\") {\n        _this28.pageIsInteractive();\n      } else if (readyState == \"complete\") {\n        _this28.pageIsComplete();\n      }\n    };\n\n    this.pageWillUnload = function () {\n      _this28.delegate.pageWillUnload();\n    };\n\n    this.delegate = delegate;\n  }\n\n  _createClass(PageObserver, [{\n    key: \"start\",\n    value: function start() {\n      if (!this.started) {\n        if (this.stage == PageStage.initial) {\n          this.stage = PageStage.loading;\n        }\n\n        document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n        addEventListener(\"pagehide\", this.pageWillUnload, false);\n        this.started = true;\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function 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    key: \"pageIsInteractive\",\n    value: function pageIsInteractive() {\n      if (this.stage == PageStage.loading) {\n        this.stage = PageStage.interactive;\n        this.delegate.pageBecameInteractive();\n      }\n    }\n  }, {\n    key: \"pageIsComplete\",\n    value: function pageIsComplete() {\n      this.pageIsInteractive();\n\n      if (this.stage == PageStage.interactive) {\n        this.stage = PageStage.complete;\n        this.delegate.pageLoaded();\n      }\n    }\n  }, {\n    key: \"readyState\",\n    get: function get() {\n      return document.readyState;\n    }\n  }]);\n\n  return PageObserver;\n}();\n\nvar ScrollObserver = /*#__PURE__*/function () {\n  function ScrollObserver(delegate) {\n    var _this29 = this;\n\n    _classCallCheck(this, ScrollObserver);\n\n    this.started = false;\n\n    this.onScroll = function () {\n      _this29.updatePosition({\n        x: window.pageXOffset,\n        y: window.pageYOffset\n      });\n    };\n\n    this.delegate = delegate;\n  }\n\n  _createClass(ScrollObserver, [{\n    key: \"start\",\n    value: function start() {\n      if (!this.started) {\n        addEventListener(\"scroll\", this.onScroll, false);\n        this.onScroll();\n        this.started = true;\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (this.started) {\n        removeEventListener(\"scroll\", this.onScroll, false);\n        this.started = false;\n      }\n    }\n  }, {\n    key: \"updatePosition\",\n    value: function updatePosition(position) {\n      this.delegate.scrollPositionChanged(position);\n    }\n  }]);\n\n  return ScrollObserver;\n}();\n\nvar StreamMessageRenderer = /*#__PURE__*/function () {\n  function StreamMessageRenderer() {\n    _classCallCheck(this, StreamMessageRenderer);\n  }\n\n  _createClass(StreamMessageRenderer, [{\n    key: \"render\",\n    value: function render(_ref25) {\n      var fragment = _ref25.fragment;\n      Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), function () {\n        return document.documentElement.appendChild(fragment);\n      });\n    }\n  }, {\n    key: \"enteringBardo\",\n    value: function enteringBardo(currentPermanentElement, newPermanentElement) {\n      newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n    }\n  }, {\n    key: \"leavingBardo\",\n    value: function leavingBardo() {}\n  }]);\n\n  return StreamMessageRenderer;\n}();\n\nfunction getPermanentElementMapForFragment(fragment) {\n  var permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n  var permanentElementMap = {};\n\n  var _iterator17 = _createForOfIteratorHelper(permanentElementsInDocument),\n      _step17;\n\n  try {\n    for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n      var permanentElementInDocument = _step17.value;\n      var id = permanentElementInDocument.id;\n\n      var _iterator18 = _createForOfIteratorHelper(fragment.querySelectorAll(\"turbo-stream\")),\n          _step18;\n\n      try {\n        for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n          var streamElement = _step18.value;\n\n          var elementInStream = _getPermanentElementById(streamElement.templateElement.content, id);\n\n          if (elementInStream) {\n            permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n          }\n        }\n      } catch (err) {\n        _iterator18.e(err);\n      } finally {\n        _iterator18.f();\n      }\n    }\n  } catch (err) {\n    _iterator17.e(err);\n  } finally {\n    _iterator17.f();\n  }\n\n  return permanentElementMap;\n}\n\nvar StreamObserver = /*#__PURE__*/function () {\n  function StreamObserver(delegate) {\n    var _this30 = this;\n\n    _classCallCheck(this, StreamObserver);\n\n    this.sources = new Set();\n    this.started = false;\n\n    this.inspectFetchResponse = function (event) {\n      var response = fetchResponseFromEvent(event);\n\n      if (response && fetchResponseIsStream(response)) {\n        event.preventDefault();\n\n        _this30.receiveMessageResponse(response);\n      }\n    };\n\n    this.receiveMessageEvent = function (event) {\n      if (_this30.started && typeof event.data == \"string\") {\n        _this30.receiveMessageHTML(event.data);\n      }\n    };\n\n    this.delegate = delegate;\n  }\n\n  _createClass(StreamObserver, [{\n    key: \"start\",\n    value: function start() {\n      if (!this.started) {\n        this.started = true;\n        addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (this.started) {\n        this.started = false;\n        removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n      }\n    }\n  }, {\n    key: \"connectStreamSource\",\n    value: function connectStreamSource(source) {\n      if (!this.streamSourceIsConnected(source)) {\n        this.sources.add(source);\n        source.addEventListener(\"message\", this.receiveMessageEvent, false);\n      }\n    }\n  }, {\n    key: \"disconnectStreamSource\",\n    value: function disconnectStreamSource(source) {\n      if (this.streamSourceIsConnected(source)) {\n        this.sources.delete(source);\n        source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n      }\n    }\n  }, {\n    key: \"streamSourceIsConnected\",\n    value: function streamSourceIsConnected(source) {\n      return this.sources.has(source);\n    }\n  }, {\n    key: \"receiveMessageResponse\",\n    value: function () {\n      var _receiveMessageResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee20(response) {\n        var html;\n        return _regeneratorRuntime.wrap(function _callee20$(_context20) {\n          while (1) {\n            switch (_context20.prev = _context20.next) {\n              case 0:\n                _context20.next = 2;\n                return response.responseHTML;\n\n              case 2:\n                html = _context20.sent;\n\n                if (html) {\n                  this.receiveMessageHTML(html);\n                }\n\n              case 4:\n              case \"end\":\n                return _context20.stop();\n            }\n          }\n        }, _callee20, this);\n      }));\n\n      function receiveMessageResponse(_x20) {\n        return _receiveMessageResponse.apply(this, arguments);\n      }\n\n      return receiveMessageResponse;\n    }()\n  }, {\n    key: \"receiveMessageHTML\",\n    value: function receiveMessageHTML(html) {\n      this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n    }\n  }]);\n\n  return StreamObserver;\n}();\n\nfunction fetchResponseFromEvent(event) {\n  var _a;\n\n  var fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n\n  if (fetchResponse instanceof FetchResponse) {\n    return fetchResponse;\n  }\n}\n\nfunction fetchResponseIsStream(response) {\n  var _a;\n\n  var contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n  return contentType.startsWith(StreamMessage.contentType);\n}\n\nvar ErrorRenderer = /*#__PURE__*/function (_Renderer2) {\n  _inherits(ErrorRenderer, _Renderer2);\n\n  var _super6 = _createSuper(ErrorRenderer);\n\n  function ErrorRenderer() {\n    _classCallCheck(this, ErrorRenderer);\n\n    return _super6.apply(this, arguments);\n  }\n\n  _createClass(ErrorRenderer, [{\n    key: \"render\",\n    value: function () {\n      var _render4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee21() {\n        return _regeneratorRuntime.wrap(function _callee21$(_context21) {\n          while (1) {\n            switch (_context21.prev = _context21.next) {\n              case 0:\n                this.replaceHeadAndBody();\n                this.activateScriptElements();\n\n              case 2:\n              case \"end\":\n                return _context21.stop();\n            }\n          }\n        }, _callee21, this);\n      }));\n\n      function render() {\n        return _render4.apply(this, arguments);\n      }\n\n      return render;\n    }()\n  }, {\n    key: \"replaceHeadAndBody\",\n    value: function replaceHeadAndBody() {\n      var _document = document,\n          documentElement = _document.documentElement,\n          head = _document.head;\n      documentElement.replaceChild(this.newHead, head);\n      this.renderElement(this.currentElement, this.newElement);\n    }\n  }, {\n    key: \"activateScriptElements\",\n    value: function activateScriptElements() {\n      var _iterator19 = _createForOfIteratorHelper(this.scriptElements),\n          _step19;\n\n      try {\n        for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n          var replaceableElement = _step19.value;\n          var parentNode = replaceableElement.parentNode;\n\n          if (parentNode) {\n            var element = activateScriptElement(replaceableElement);\n            parentNode.replaceChild(element, replaceableElement);\n          }\n        }\n      } catch (err) {\n        _iterator19.e(err);\n      } finally {\n        _iterator19.f();\n      }\n    }\n  }, {\n    key: \"newHead\",\n    get: function get() {\n      return this.newSnapshot.headSnapshot.element;\n    }\n  }, {\n    key: \"scriptElements\",\n    get: function get() {\n      return document.documentElement.querySelectorAll(\"script\");\n    }\n  }], [{\n    key: \"renderElement\",\n    value: function renderElement(currentElement, newElement) {\n      var _document2 = document,\n          documentElement = _document2.documentElement,\n          body = _document2.body;\n      documentElement.replaceChild(newElement, body);\n    }\n  }]);\n\n  return ErrorRenderer;\n}(Renderer);\n\nvar PageRenderer = /*#__PURE__*/function (_Renderer3) {\n  _inherits(PageRenderer, _Renderer3);\n\n  var _super7 = _createSuper(PageRenderer);\n\n  function PageRenderer() {\n    _classCallCheck(this, PageRenderer);\n\n    return _super7.apply(this, arguments);\n  }\n\n  _createClass(PageRenderer, [{\n    key: \"shouldRender\",\n    get: function get() {\n      return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n    }\n  }, {\n    key: \"reloadReason\",\n    get: function get() {\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    key: \"prepareToRender\",\n    value: function () {\n      var _prepareToRender = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee22() {\n        return _regeneratorRuntime.wrap(function _callee22$(_context22) {\n          while (1) {\n            switch (_context22.prev = _context22.next) {\n              case 0:\n                _context22.next = 2;\n                return this.mergeHead();\n\n              case 2:\n              case \"end\":\n                return _context22.stop();\n            }\n          }\n        }, _callee22, this);\n      }));\n\n      function prepareToRender() {\n        return _prepareToRender.apply(this, arguments);\n      }\n\n      return prepareToRender;\n    }()\n  }, {\n    key: \"render\",\n    value: function () {\n      var _render5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee23() {\n        return _regeneratorRuntime.wrap(function _callee23$(_context23) {\n          while (1) {\n            switch (_context23.prev = _context23.next) {\n              case 0:\n                if (!this.willRender) {\n                  _context23.next = 3;\n                  break;\n                }\n\n                _context23.next = 3;\n                return this.replaceBody();\n\n              case 3:\n              case \"end\":\n                return _context23.stop();\n            }\n          }\n        }, _callee23, this);\n      }));\n\n      function render() {\n        return _render5.apply(this, arguments);\n      }\n\n      return render;\n    }()\n  }, {\n    key: \"finishRendering\",\n    value: function finishRendering() {\n      _get(_getPrototypeOf(PageRenderer.prototype), \"finishRendering\", this).call(this);\n\n      if (!this.isPreview) {\n        this.focusFirstAutofocusableElement();\n      }\n    }\n  }, {\n    key: \"currentHeadSnapshot\",\n    get: function get() {\n      return this.currentSnapshot.headSnapshot;\n    }\n  }, {\n    key: \"newHeadSnapshot\",\n    get: function get() {\n      return this.newSnapshot.headSnapshot;\n    }\n  }, {\n    key: \"newElement\",\n    get: function get() {\n      return this.newSnapshot.element;\n    }\n  }, {\n    key: \"mergeHead\",\n    value: function () {\n      var _mergeHead = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee24() {\n        var mergedHeadElements, newStylesheetElements;\n        return _regeneratorRuntime.wrap(function _callee24$(_context24) {\n          while (1) {\n            switch (_context24.prev = _context24.next) {\n              case 0:\n                mergedHeadElements = this.mergeProvisionalElements();\n                newStylesheetElements = this.copyNewHeadStylesheetElements();\n                this.copyNewHeadScriptElements();\n                _context24.next = 5;\n                return mergedHeadElements;\n\n              case 5:\n                _context24.next = 7;\n                return newStylesheetElements;\n\n              case 7:\n              case \"end\":\n                return _context24.stop();\n            }\n          }\n        }, _callee24, this);\n      }));\n\n      function mergeHead() {\n        return _mergeHead.apply(this, arguments);\n      }\n\n      return mergeHead;\n    }()\n  }, {\n    key: \"replaceBody\",\n    value: function () {\n      var _replaceBody = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee26() {\n        var _this31 = this;\n\n        return _regeneratorRuntime.wrap(function _callee26$(_context26) {\n          while (1) {\n            switch (_context26.prev = _context26.next) {\n              case 0:\n                _context26.next = 2;\n                return this.preservingPermanentElements( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee25() {\n                  return _regeneratorRuntime.wrap(function _callee25$(_context25) {\n                    while (1) {\n                      switch (_context25.prev = _context25.next) {\n                        case 0:\n                          _this31.activateNewBody();\n\n                          _context25.next = 3;\n                          return _this31.assignNewBody();\n\n                        case 3:\n                        case \"end\":\n                          return _context25.stop();\n                      }\n                    }\n                  }, _callee25);\n                })));\n\n              case 2:\n              case \"end\":\n                return _context26.stop();\n            }\n          }\n        }, _callee26, this);\n      }));\n\n      function replaceBody() {\n        return _replaceBody.apply(this, arguments);\n      }\n\n      return replaceBody;\n    }()\n  }, {\n    key: \"trackedElementsAreIdentical\",\n    get: function get() {\n      return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n    }\n  }, {\n    key: \"copyNewHeadStylesheetElements\",\n    value: function () {\n      var _copyNewHeadStylesheetElements = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee27() {\n        var loadingElements, _iterator20, _step20, element;\n\n        return _regeneratorRuntime.wrap(function _callee27$(_context27) {\n          while (1) {\n            switch (_context27.prev = _context27.next) {\n              case 0:\n                loadingElements = [];\n                _iterator20 = _createForOfIteratorHelper(this.newHeadStylesheetElements);\n\n                try {\n                  for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\n                    element = _step20.value;\n                    loadingElements.push(waitForLoad(element));\n                    document.head.appendChild(element);\n                  }\n                } catch (err) {\n                  _iterator20.e(err);\n                } finally {\n                  _iterator20.f();\n                }\n\n                _context27.next = 5;\n                return Promise.all(loadingElements);\n\n              case 5:\n              case \"end\":\n                return _context27.stop();\n            }\n          }\n        }, _callee27, this);\n      }));\n\n      function copyNewHeadStylesheetElements() {\n        return _copyNewHeadStylesheetElements.apply(this, arguments);\n      }\n\n      return copyNewHeadStylesheetElements;\n    }()\n  }, {\n    key: \"copyNewHeadScriptElements\",\n    value: function copyNewHeadScriptElements() {\n      var _iterator21 = _createForOfIteratorHelper(this.newHeadScriptElements),\n          _step21;\n\n      try {\n        for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n          var element = _step21.value;\n          document.head.appendChild(activateScriptElement(element));\n        }\n      } catch (err) {\n        _iterator21.e(err);\n      } finally {\n        _iterator21.f();\n      }\n    }\n  }, {\n    key: \"mergeProvisionalElements\",\n    value: function () {\n      var _mergeProvisionalElements = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee28() {\n        var newHeadElements, _iterator22, _step22, element, _iterator23, _step23, _element2;\n\n        return _regeneratorRuntime.wrap(function _callee28$(_context28) {\n          while (1) {\n            switch (_context28.prev = _context28.next) {\n              case 0:\n                newHeadElements = _toConsumableArray(this.newHeadProvisionalElements);\n                _iterator22 = _createForOfIteratorHelper(this.currentHeadProvisionalElements);\n\n                try {\n                  for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {\n                    element = _step22.value;\n\n                    if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n                      document.head.removeChild(element);\n                    }\n                  }\n                } catch (err) {\n                  _iterator22.e(err);\n                } finally {\n                  _iterator22.f();\n                }\n\n                _iterator23 = _createForOfIteratorHelper(newHeadElements);\n\n                try {\n                  for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {\n                    _element2 = _step23.value;\n                    document.head.appendChild(_element2);\n                  }\n                } catch (err) {\n                  _iterator23.e(err);\n                } finally {\n                  _iterator23.f();\n                }\n\n              case 5:\n              case \"end\":\n                return _context28.stop();\n            }\n          }\n        }, _callee28, this);\n      }));\n\n      function mergeProvisionalElements() {\n        return _mergeProvisionalElements.apply(this, arguments);\n      }\n\n      return mergeProvisionalElements;\n    }()\n  }, {\n    key: \"isCurrentElementInElementList\",\n    value: function isCurrentElementInElementList(element, elementList) {\n      var _iterator24 = _createForOfIteratorHelper(elementList.entries()),\n          _step24;\n\n      try {\n        for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {\n          var _ref29 = _step24.value;\n\n          var _ref28 = _slicedToArray(_ref29, 2);\n\n          var index = _ref28[0];\n          var newElement = _ref28[1];\n\n          if (element.tagName == \"TITLE\") {\n            if (newElement.tagName != \"TITLE\") {\n              continue;\n            }\n\n            if (element.innerHTML == newElement.innerHTML) {\n              elementList.splice(index, 1);\n              return true;\n            }\n          }\n\n          if (newElement.isEqualNode(element)) {\n            elementList.splice(index, 1);\n            return true;\n          }\n        }\n      } catch (err) {\n        _iterator24.e(err);\n      } finally {\n        _iterator24.f();\n      }\n\n      return false;\n    }\n  }, {\n    key: \"removeCurrentHeadProvisionalElements\",\n    value: function removeCurrentHeadProvisionalElements() {\n      var _iterator25 = _createForOfIteratorHelper(this.currentHeadProvisionalElements),\n          _step25;\n\n      try {\n        for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {\n          var element = _step25.value;\n          document.head.removeChild(element);\n        }\n      } catch (err) {\n        _iterator25.e(err);\n      } finally {\n        _iterator25.f();\n      }\n    }\n  }, {\n    key: \"copyNewHeadProvisionalElements\",\n    value: function copyNewHeadProvisionalElements() {\n      var _iterator26 = _createForOfIteratorHelper(this.newHeadProvisionalElements),\n          _step26;\n\n      try {\n        for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {\n          var element = _step26.value;\n          document.head.appendChild(element);\n        }\n      } catch (err) {\n        _iterator26.e(err);\n      } finally {\n        _iterator26.f();\n      }\n    }\n  }, {\n    key: \"activateNewBody\",\n    value: function activateNewBody() {\n      document.adoptNode(this.newElement);\n      this.activateNewBodyScriptElements();\n    }\n  }, {\n    key: \"activateNewBodyScriptElements\",\n    value: function activateNewBodyScriptElements() {\n      var _iterator27 = _createForOfIteratorHelper(this.newBodyScriptElements),\n          _step27;\n\n      try {\n        for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {\n          var inertScriptElement = _step27.value;\n          var activatedScriptElement = activateScriptElement(inertScriptElement);\n          inertScriptElement.replaceWith(activatedScriptElement);\n        }\n      } catch (err) {\n        _iterator27.e(err);\n      } finally {\n        _iterator27.f();\n      }\n    }\n  }, {\n    key: \"assignNewBody\",\n    value: function () {\n      var _assignNewBody = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee29() {\n        return _regeneratorRuntime.wrap(function _callee29$(_context29) {\n          while (1) {\n            switch (_context29.prev = _context29.next) {\n              case 0:\n                _context29.next = 2;\n                return this.renderElement(this.currentElement, this.newElement);\n\n              case 2:\n              case \"end\":\n                return _context29.stop();\n            }\n          }\n        }, _callee29, this);\n      }));\n\n      function assignNewBody() {\n        return _assignNewBody.apply(this, arguments);\n      }\n\n      return assignNewBody;\n    }()\n  }, {\n    key: \"newHeadStylesheetElements\",\n    get: function get() {\n      return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n  }, {\n    key: \"newHeadScriptElements\",\n    get: function get() {\n      return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n  }, {\n    key: \"currentHeadProvisionalElements\",\n    get: function get() {\n      return this.currentHeadSnapshot.provisionalElements;\n    }\n  }, {\n    key: \"newHeadProvisionalElements\",\n    get: function get() {\n      return this.newHeadSnapshot.provisionalElements;\n    }\n  }, {\n    key: \"newBodyScriptElements\",\n    get: function get() {\n      return this.newElement.querySelectorAll(\"script\");\n    }\n  }], [{\n    key: \"renderElement\",\n    value: function 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\n  return PageRenderer;\n}(Renderer);\n\nvar SnapshotCache = /*#__PURE__*/function () {\n  function SnapshotCache(size) {\n    _classCallCheck(this, SnapshotCache);\n\n    this.keys = [];\n    this.snapshots = {};\n    this.size = size;\n  }\n\n  _createClass(SnapshotCache, [{\n    key: \"has\",\n    value: function has(location) {\n      return toCacheKey(location) in this.snapshots;\n    }\n  }, {\n    key: \"get\",\n    value: function get(location) {\n      if (this.has(location)) {\n        var snapshot = this.read(location);\n        this.touch(location);\n        return snapshot;\n      }\n    }\n  }, {\n    key: \"put\",\n    value: function put(location, snapshot) {\n      this.write(location, snapshot);\n      this.touch(location);\n      return snapshot;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.snapshots = {};\n    }\n  }, {\n    key: \"read\",\n    value: function read(location) {\n      return this.snapshots[toCacheKey(location)];\n    }\n  }, {\n    key: \"write\",\n    value: function write(location, snapshot) {\n      this.snapshots[toCacheKey(location)] = snapshot;\n    }\n  }, {\n    key: \"touch\",\n    value: function touch(location) {\n      var key = toCacheKey(location);\n      var 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    key: \"trim\",\n    value: function trim() {\n      var _iterator28 = _createForOfIteratorHelper(this.keys.splice(this.size)),\n          _step28;\n\n      try {\n        for (_iterator28.s(); !(_step28 = _iterator28.n()).done;) {\n          var key = _step28.value;\n          delete this.snapshots[key];\n        }\n      } catch (err) {\n        _iterator28.e(err);\n      } finally {\n        _iterator28.f();\n      }\n    }\n  }]);\n\n  return SnapshotCache;\n}();\n\nvar PageView = /*#__PURE__*/function (_View2) {\n  _inherits(PageView, _View2);\n\n  var _super8 = _createSuper(PageView);\n\n  function PageView() {\n    var _this32;\n\n    _classCallCheck(this, PageView);\n\n    _this32 = _super8.apply(this, arguments);\n    _this32.snapshotCache = new SnapshotCache(10);\n    _this32.lastRenderedLocation = new URL(location.href);\n    _this32.forceReloaded = false;\n    return _this32;\n  }\n\n  _createClass(PageView, [{\n    key: \"renderPage\",\n    value: function renderPage(snapshot) {\n      var isPreview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var willRender = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      var visit = arguments.length > 3 ? arguments[3] : undefined;\n      var renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n\n      if (!renderer.shouldRender) {\n        this.forceReloaded = true;\n      } else {\n        visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n      }\n\n      return this.render(renderer);\n    }\n  }, {\n    key: \"renderError\",\n    value: function renderError(snapshot, visit) {\n      visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n      var renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n      return this.render(renderer);\n    }\n  }, {\n    key: \"clearSnapshotCache\",\n    value: function clearSnapshotCache() {\n      this.snapshotCache.clear();\n    }\n  }, {\n    key: \"cacheSnapshot\",\n    value: function () {\n      var _cacheSnapshot = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee30() {\n        var snapshot,\n            _location3,\n            cachedSnapshot,\n            _args30 = arguments;\n\n        return _regeneratorRuntime.wrap(function _callee30$(_context30) {\n          while (1) {\n            switch (_context30.prev = _context30.next) {\n              case 0:\n                snapshot = _args30.length > 0 && _args30[0] !== undefined ? _args30[0] : this.snapshot;\n\n                if (!snapshot.isCacheable) {\n                  _context30.next = 9;\n                  break;\n                }\n\n                this.delegate.viewWillCacheSnapshot();\n                _location3 = this.lastRenderedLocation;\n                _context30.next = 6;\n                return nextEventLoopTick();\n\n              case 6:\n                cachedSnapshot = snapshot.clone();\n                this.snapshotCache.put(_location3, cachedSnapshot);\n                return _context30.abrupt(\"return\", cachedSnapshot);\n\n              case 9:\n              case \"end\":\n                return _context30.stop();\n            }\n          }\n        }, _callee30, this);\n      }));\n\n      function cacheSnapshot() {\n        return _cacheSnapshot.apply(this, arguments);\n      }\n\n      return cacheSnapshot;\n    }()\n  }, {\n    key: \"getCachedSnapshotForLocation\",\n    value: function getCachedSnapshotForLocation(location) {\n      return this.snapshotCache.get(location);\n    }\n  }, {\n    key: \"snapshot\",\n    get: function get() {\n      return PageSnapshot.fromElement(this.element);\n    }\n  }]);\n\n  return PageView;\n}(View);\n\nvar Preloader = /*#__PURE__*/function () {\n  function Preloader(delegate) {\n    _classCallCheck(this, Preloader);\n\n    this.selector = \"a[data-turbo-preload]\";\n    this.delegate = delegate;\n  }\n\n  _createClass(Preloader, [{\n    key: \"snapshotCache\",\n    get: function get() {\n      return this.delegate.navigator.view.snapshotCache;\n    }\n  }, {\n    key: \"start\",\n    value: function start() {\n      var _this33 = this;\n\n      if (document.readyState === \"loading\") {\n        return document.addEventListener(\"DOMContentLoaded\", function () {\n          _this33.preloadOnLoadLinksForView(document.body);\n        });\n      } else {\n        this.preloadOnLoadLinksForView(document.body);\n      }\n    }\n  }, {\n    key: \"preloadOnLoadLinksForView\",\n    value: function preloadOnLoadLinksForView(element) {\n      var _iterator29 = _createForOfIteratorHelper(element.querySelectorAll(this.selector)),\n          _step29;\n\n      try {\n        for (_iterator29.s(); !(_step29 = _iterator29.n()).done;) {\n          var link = _step29.value;\n          this.preloadURL(link);\n        }\n      } catch (err) {\n        _iterator29.e(err);\n      } finally {\n        _iterator29.f();\n      }\n    }\n  }, {\n    key: \"preloadURL\",\n    value: function () {\n      var _preloadURL = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee31(link) {\n        var location, response, responseText, snapshot;\n        return _regeneratorRuntime.wrap(function _callee31$(_context31) {\n          while (1) {\n            switch (_context31.prev = _context31.next) {\n              case 0:\n                location = new URL(link.href);\n\n                if (!this.snapshotCache.has(location)) {\n                  _context31.next = 3;\n                  break;\n                }\n\n                return _context31.abrupt(\"return\");\n\n              case 3:\n                _context31.prev = 3;\n                _context31.next = 6;\n                return fetch(location.toString(), {\n                  headers: {\n                    \"VND.PREFETCH\": \"true\",\n                    Accept: \"text/html\"\n                  }\n                });\n\n              case 6:\n                response = _context31.sent;\n                _context31.next = 9;\n                return response.text();\n\n              case 9:\n                responseText = _context31.sent;\n                snapshot = PageSnapshot.fromHTMLString(responseText);\n                this.snapshotCache.put(location, snapshot);\n                _context31.next = 16;\n                break;\n\n              case 14:\n                _context31.prev = 14;\n                _context31.t0 = _context31[\"catch\"](3);\n\n              case 16:\n              case \"end\":\n                return _context31.stop();\n            }\n          }\n        }, _callee31, this, [[3, 14]]);\n      }));\n\n      function preloadURL(_x21) {\n        return _preloadURL.apply(this, arguments);\n      }\n\n      return preloadURL;\n    }()\n  }]);\n\n  return Preloader;\n}();\n\nvar Session = /*#__PURE__*/function () {\n  function Session() {\n    _classCallCheck(this, Session);\n\n    this.navigator = new Navigator(this);\n    this.history = new History(this);\n    this.preloader = new Preloader(this);\n    this.view = new PageView(this, document.documentElement);\n    this.adapter = new BrowserAdapter(this);\n    this.pageObserver = new PageObserver(this);\n    this.cacheObserver = new CacheObserver();\n    this.linkClickObserver = new LinkClickObserver(this, window);\n    this.formSubmitObserver = new FormSubmitObserver(this, document);\n    this.scrollObserver = new ScrollObserver(this);\n    this.streamObserver = new StreamObserver(this);\n    this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);\n    this.frameRedirector = new FrameRedirector(this, document.documentElement);\n    this.streamMessageRenderer = new StreamMessageRenderer();\n    this.drive = true;\n    this.enabled = true;\n    this.progressBarDelay = 500;\n    this.started = false;\n    this.formMode = \"on\";\n  }\n\n  _createClass(Session, [{\n    key: \"start\",\n    value: function start() {\n      if (!this.started) {\n        this.pageObserver.start();\n        this.cacheObserver.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    key: \"disable\",\n    value: function disable() {\n      this.enabled = false;\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (this.started) {\n        this.pageObserver.stop();\n        this.cacheObserver.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.started = false;\n      }\n    }\n  }, {\n    key: \"registerAdapter\",\n    value: function registerAdapter(adapter) {\n      this.adapter = adapter;\n    }\n  }, {\n    key: \"visit\",\n    value: function visit(location) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n      if (frameElement instanceof FrameElement) {\n        frameElement.src = location.toString();\n        frameElement.loaded;\n      } else {\n        this.navigator.proposeVisit(expandURL(location), options);\n      }\n    }\n  }, {\n    key: \"connectStreamSource\",\n    value: function connectStreamSource(source) {\n      this.streamObserver.connectStreamSource(source);\n    }\n  }, {\n    key: \"disconnectStreamSource\",\n    value: function disconnectStreamSource(source) {\n      this.streamObserver.disconnectStreamSource(source);\n    }\n  }, {\n    key: \"renderStreamMessage\",\n    value: function renderStreamMessage(message) {\n      this.streamMessageRenderer.render(StreamMessage.wrap(message));\n    }\n  }, {\n    key: \"clearCache\",\n    value: function clearCache() {\n      this.view.clearSnapshotCache();\n    }\n  }, {\n    key: \"setProgressBarDelay\",\n    value: function setProgressBarDelay(delay) {\n      this.progressBarDelay = delay;\n    }\n  }, {\n    key: \"setFormMode\",\n    value: function setFormMode(mode) {\n      this.formMode = mode;\n    }\n  }, {\n    key: \"location\",\n    get: function get() {\n      return this.history.location;\n    }\n  }, {\n    key: \"restorationIdentifier\",\n    get: function get() {\n      return this.history.restorationIdentifier;\n    }\n  }, {\n    key: \"historyPoppedToLocationWithRestorationIdentifier\",\n    value: function historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n      if (this.enabled) {\n        this.navigator.startVisit(location, restorationIdentifier, {\n          action: \"restore\",\n          historyChanged: true\n        });\n      } else {\n        this.adapter.pageInvalidated({\n          reason: \"turbo_disabled\"\n        });\n      }\n    }\n  }, {\n    key: \"scrollPositionChanged\",\n    value: function scrollPositionChanged(position) {\n      this.history.updateRestorationData({\n        scrollPosition: position\n      });\n    }\n  }, {\n    key: \"willSubmitFormLinkToLocation\",\n    value: function willSubmitFormLinkToLocation(link, location) {\n      return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation);\n    }\n  }, {\n    key: \"submittedFormLinkToLocation\",\n    value: function submittedFormLinkToLocation() {}\n  }, {\n    key: \"willFollowLinkToLocation\",\n    value: function willFollowLinkToLocation(link, location, event) {\n      return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation) && this.applicationAllowsFollowingLinkToLocation(link, location, event);\n    }\n  }, {\n    key: \"followedLinkToLocation\",\n    value: function followedLinkToLocation(link, location) {\n      var action = this.getActionForLink(link);\n      var acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n      this.visit(location.href, {\n        action: action,\n        acceptsStreamResponse: acceptsStreamResponse\n      });\n    }\n  }, {\n    key: \"allowsVisitingLocationWithAction\",\n    value: function allowsVisitingLocationWithAction(location, action) {\n      return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n    }\n  }, {\n    key: \"visitProposedToLocation\",\n    value: function visitProposedToLocation(location, options) {\n      extendURLWithDeprecatedProperties(location);\n      this.adapter.visitProposedToLocation(location, options);\n    }\n  }, {\n    key: \"visitStarted\",\n    value: function visitStarted(visit) {\n      if (!visit.acceptsStreamResponse) {\n        markAsBusy(document.documentElement);\n      }\n\n      extendURLWithDeprecatedProperties(visit.location);\n\n      if (!visit.silent) {\n        this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n      }\n    }\n  }, {\n    key: \"visitCompleted\",\n    value: function visitCompleted(visit) {\n      clearBusyState(document.documentElement);\n      this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n    }\n  }, {\n    key: \"locationWithActionIsSamePage\",\n    value: function locationWithActionIsSamePage(location, action) {\n      return this.navigator.locationWithActionIsSamePage(location, action);\n    }\n  }, {\n    key: \"visitScrolledToSamePageLocation\",\n    value: function visitScrolledToSamePageLocation(oldURL, newURL) {\n      this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n    }\n  }, {\n    key: \"willSubmitForm\",\n    value: function willSubmitForm(form, submitter) {\n      var action = getAction(form, submitter);\n      return this.submissionIsNavigatable(form, submitter) && locationIsVisitable(expandURL(action), this.snapshot.rootLocation);\n    }\n  }, {\n    key: \"formSubmitted\",\n    value: function formSubmitted(form, submitter) {\n      this.navigator.submitForm(form, submitter);\n    }\n  }, {\n    key: \"pageBecameInteractive\",\n    value: function pageBecameInteractive() {\n      this.view.lastRenderedLocation = this.location;\n      this.notifyApplicationAfterPageLoad();\n    }\n  }, {\n    key: \"pageLoaded\",\n    value: function pageLoaded() {\n      this.history.assumeControlOfScrollRestoration();\n    }\n  }, {\n    key: \"pageWillUnload\",\n    value: function pageWillUnload() {\n      this.history.relinquishControlOfScrollRestoration();\n    }\n  }, {\n    key: \"receivedMessageFromStream\",\n    value: function receivedMessageFromStream(message) {\n      this.renderStreamMessage(message);\n    }\n  }, {\n    key: \"viewWillCacheSnapshot\",\n    value: function viewWillCacheSnapshot() {\n      var _a;\n\n      if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n        this.notifyApplicationBeforeCachingSnapshot();\n      }\n    }\n  }, {\n    key: \"allowsImmediateRender\",\n    value: function allowsImmediateRender(_ref30, options) {\n      var element = _ref30.element;\n      var event = this.notifyApplicationBeforeRender(element, options);\n      var defaultPrevented = event.defaultPrevented,\n          render = event.detail.render;\n\n      if (this.view.renderer && render) {\n        this.view.renderer.renderElement = render;\n      }\n\n      return !defaultPrevented;\n    }\n  }, {\n    key: \"viewRenderedSnapshot\",\n    value: function viewRenderedSnapshot(_snapshot, _isPreview) {\n      this.view.lastRenderedLocation = this.history.location;\n      this.notifyApplicationAfterRender();\n    }\n  }, {\n    key: \"preloadOnLoadLinksForView\",\n    value: function preloadOnLoadLinksForView(element) {\n      this.preloader.preloadOnLoadLinksForView(element);\n    }\n  }, {\n    key: \"viewInvalidated\",\n    value: function viewInvalidated(reason) {\n      this.adapter.pageInvalidated(reason);\n    }\n  }, {\n    key: \"frameLoaded\",\n    value: function frameLoaded(frame) {\n      this.notifyApplicationAfterFrameLoad(frame);\n    }\n  }, {\n    key: \"frameRendered\",\n    value: function frameRendered(fetchResponse, frame) {\n      this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n    }\n  }, {\n    key: \"applicationAllowsFollowingLinkToLocation\",\n    value: function applicationAllowsFollowingLinkToLocation(link, location, ev) {\n      var event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n      return !event.defaultPrevented;\n    }\n  }, {\n    key: \"applicationAllowsVisitingLocation\",\n    value: function applicationAllowsVisitingLocation(location) {\n      var event = this.notifyApplicationBeforeVisitingLocation(location);\n      return !event.defaultPrevented;\n    }\n  }, {\n    key: \"notifyApplicationAfterClickingLinkToLocation\",\n    value: function notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n      return dispatch(\"turbo:click\", {\n        target: link,\n        detail: {\n          url: location.href,\n          originalEvent: event\n        },\n        cancelable: true\n      });\n    }\n  }, {\n    key: \"notifyApplicationBeforeVisitingLocation\",\n    value: function notifyApplicationBeforeVisitingLocation(location) {\n      return dispatch(\"turbo:before-visit\", {\n        detail: {\n          url: location.href\n        },\n        cancelable: true\n      });\n    }\n  }, {\n    key: \"notifyApplicationAfterVisitingLocation\",\n    value: function notifyApplicationAfterVisitingLocation(location, action) {\n      return dispatch(\"turbo:visit\", {\n        detail: {\n          url: location.href,\n          action: action\n        }\n      });\n    }\n  }, {\n    key: \"notifyApplicationBeforeCachingSnapshot\",\n    value: function notifyApplicationBeforeCachingSnapshot() {\n      return dispatch(\"turbo:before-cache\");\n    }\n  }, {\n    key: \"notifyApplicationBeforeRender\",\n    value: function notifyApplicationBeforeRender(newBody, options) {\n      return dispatch(\"turbo:before-render\", {\n        detail: Object.assign({\n          newBody: newBody\n        }, options),\n        cancelable: true\n      });\n    }\n  }, {\n    key: \"notifyApplicationAfterRender\",\n    value: function notifyApplicationAfterRender() {\n      return dispatch(\"turbo:render\");\n    }\n  }, {\n    key: \"notifyApplicationAfterPageLoad\",\n    value: function notifyApplicationAfterPageLoad() {\n      var timing = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return dispatch(\"turbo:load\", {\n        detail: {\n          url: this.location.href,\n          timing: timing\n        }\n      });\n    }\n  }, {\n    key: \"notifyApplicationAfterVisitingSamePageLocation\",\n    value: function notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n      dispatchEvent(new HashChangeEvent(\"hashchange\", {\n        oldURL: oldURL.toString(),\n        newURL: newURL.toString()\n      }));\n    }\n  }, {\n    key: \"notifyApplicationAfterFrameLoad\",\n    value: function notifyApplicationAfterFrameLoad(frame) {\n      return dispatch(\"turbo:frame-load\", {\n        target: frame\n      });\n    }\n  }, {\n    key: \"notifyApplicationAfterFrameRender\",\n    value: function notifyApplicationAfterFrameRender(fetchResponse, frame) {\n      return dispatch(\"turbo:frame-render\", {\n        detail: {\n          fetchResponse: fetchResponse\n        },\n        target: frame,\n        cancelable: true\n      });\n    }\n  }, {\n    key: \"submissionIsNavigatable\",\n    value: function submissionIsNavigatable(form, submitter) {\n      if (this.formMode == \"off\") {\n        return false;\n      } else {\n        var submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n        if (this.formMode == \"optin\") {\n          return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null;\n        } else {\n          return submitterIsNavigatable && this.elementIsNavigatable(form);\n        }\n      }\n    }\n  }, {\n    key: \"elementIsNavigatable\",\n    value: function elementIsNavigatable(element) {\n      var container = findClosestRecursively(element, \"[data-turbo]\");\n      var withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n      if (this.drive || withinFrame) {\n        if (container) {\n          return container.getAttribute(\"data-turbo\") != \"false\";\n        } else {\n          return true;\n        }\n      } else {\n        if (container) {\n          return container.getAttribute(\"data-turbo\") == \"true\";\n        } else {\n          return false;\n        }\n      }\n    }\n  }, {\n    key: \"getActionForLink\",\n    value: function getActionForLink(link) {\n      return getVisitAction(link) || \"advance\";\n    }\n  }, {\n    key: \"snapshot\",\n    get: function get() {\n      return this.view.snapshot;\n    }\n  }]);\n\n  return Session;\n}();\n\nfunction extendURLWithDeprecatedProperties(url) {\n  Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nvar deprecatedLocationPropertyDescriptors = {\n  absoluteURL: {\n    get: function get() {\n      return this.toString();\n    }\n  }\n};\n\nvar Cache = /*#__PURE__*/function () {\n  function Cache(session) {\n    _classCallCheck(this, Cache);\n\n    this.session = session;\n  }\n\n  _createClass(Cache, [{\n    key: \"clear\",\n    value: function clear() {\n      this.session.clearCache();\n    }\n  }, {\n    key: \"resetCacheControl\",\n    value: function resetCacheControl() {\n      this.setCacheControl(\"\");\n    }\n  }, {\n    key: \"exemptPageFromCache\",\n    value: function exemptPageFromCache() {\n      this.setCacheControl(\"no-cache\");\n    }\n  }, {\n    key: \"exemptPageFromPreview\",\n    value: function exemptPageFromPreview() {\n      this.setCacheControl(\"no-preview\");\n    }\n  }, {\n    key: \"setCacheControl\",\n    value: function setCacheControl(value) {\n      setMetaContent(\"turbo-cache-control\", value);\n    }\n  }]);\n\n  return Cache;\n}();\n\nvar StreamActions = {\n  after: function after() {\n    var _this34 = this;\n\n    this.targetElements.forEach(function (e) {\n      var _a;\n\n      return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(_this34.templateContent, e.nextSibling);\n    });\n  },\n  append: function append() {\n    var _this35 = this;\n\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach(function (e) {\n      return e.append(_this35.templateContent);\n    });\n  },\n  before: function before() {\n    var _this36 = this;\n\n    this.targetElements.forEach(function (e) {\n      var _a;\n\n      return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(_this36.templateContent, e);\n    });\n  },\n  prepend: function prepend() {\n    var _this37 = this;\n\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach(function (e) {\n      return e.prepend(_this37.templateContent);\n    });\n  },\n  remove: function remove() {\n    this.targetElements.forEach(function (e) {\n      return e.remove();\n    });\n  },\n  replace: function replace() {\n    var _this38 = this;\n\n    this.targetElements.forEach(function (e) {\n      return e.replaceWith(_this38.templateContent);\n    });\n  },\n  update: function update() {\n    var _this39 = this;\n\n    this.targetElements.forEach(function (targetElement) {\n      targetElement.innerHTML = \"\";\n      targetElement.append(_this39.templateContent);\n    });\n  }\n};\nvar session = new Session();\nvar cache = new Cache(session);\nvar navigator$1 = session.navigator;\n\nfunction start() {\n  session.start();\n}\n\nfunction registerAdapter(adapter) {\n  session.registerAdapter(adapter);\n}\n\nfunction visit(location, options) {\n  session.visit(location, options);\n}\n\nfunction connectStreamSource(source) {\n  session.connectStreamSource(source);\n}\n\nfunction disconnectStreamSource(source) {\n  session.disconnectStreamSource(source);\n}\n\nfunction renderStreamMessage(message) {\n  session.renderStreamMessage(message);\n}\n\nfunction clearCache() {\n  console.warn(\"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  session.clearCache();\n}\n\nfunction setProgressBarDelay(delay) {\n  session.setProgressBarDelay(delay);\n}\n\nfunction setConfirmMethod(confirmMethod) {\n  FormSubmission.confirmMethod = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n  session.setFormMode(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  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  StreamActions: StreamActions\n});\n\nvar TurboFrameMissingError = /*#__PURE__*/function (_Error) {\n  _inherits(TurboFrameMissingError, _Error);\n\n  var _super9 = _createSuper(TurboFrameMissingError);\n\n  function TurboFrameMissingError() {\n    _classCallCheck(this, TurboFrameMissingError);\n\n    return _super9.apply(this, arguments);\n  }\n\n  return TurboFrameMissingError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nvar FrameController = /*#__PURE__*/function () {\n  function FrameController(element) {\n    var _this40 = this;\n\n    _classCallCheck(this, FrameController);\n\n    this.fetchResponseLoaded = function (_fetchResponse) {};\n\n    this.currentFetchRequest = null;\n\n    this.resolveVisitPromise = function () {};\n\n    this.connected = false;\n    this.hasBeenLoaded = false;\n    this.ignoredAttributes = new Set();\n    this.action = null;\n\n    this.visitCachedSnapshot = function (_ref31) {\n      var element = _ref31.element;\n      var frame = element.querySelector(\"#\" + _this40.element.id);\n\n      if (frame && _this40.previousFrameElement) {\n        frame.replaceChildren.apply(frame, _toConsumableArray(_this40.previousFrameElement.children));\n      }\n\n      delete _this40.previousFrameElement;\n    };\n\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  _createClass(FrameController, [{\n    key: \"connect\",\n    value: function connect() {\n      if (!this.connected) {\n        this.connected = true;\n\n        if (this.loadingStyle == FrameLoadingStyle.lazy) {\n          this.appearanceObserver.start();\n        } else {\n          this.loadSourceURL();\n        }\n\n        this.formLinkClickObserver.start();\n        this.linkInterceptor.start();\n        this.formSubmitObserver.start();\n      }\n    }\n  }, {\n    key: \"disconnect\",\n    value: function 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    key: \"disabledChanged\",\n    value: function disabledChanged() {\n      if (this.loadingStyle == FrameLoadingStyle.eager) {\n        this.loadSourceURL();\n      }\n    }\n  }, {\n    key: \"sourceURLChanged\",\n    value: function 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    key: \"sourceURLReloaded\",\n    value: function sourceURLReloaded() {\n      var _this41 = this;\n\n      var src = this.element.src;\n      this.ignoringChangesToAttribute(\"complete\", function () {\n        _this41.element.removeAttribute(\"complete\");\n      });\n      this.element.src = null;\n      this.element.src = src;\n      return this.element.loaded;\n    }\n  }, {\n    key: \"completeChanged\",\n    value: function completeChanged() {\n      if (this.isIgnoringChangesTo(\"complete\")) return;\n      this.loadSourceURL();\n    }\n  }, {\n    key: \"loadingStyleChanged\",\n    value: function loadingStyleChanged() {\n      if (this.loadingStyle == FrameLoadingStyle.lazy) {\n        this.appearanceObserver.start();\n      } else {\n        this.appearanceObserver.stop();\n        this.loadSourceURL();\n      }\n    }\n  }, {\n    key: \"loadSourceURL\",\n    value: function () {\n      var _loadSourceURL = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee32() {\n        return _regeneratorRuntime.wrap(function _callee32$(_context32) {\n          while (1) {\n            switch (_context32.prev = _context32.next) {\n              case 0:\n                if (!(this.enabled && this.isActive && !this.complete && this.sourceURL)) {\n                  _context32.next = 6;\n                  break;\n                }\n\n                this.element.loaded = this.visit(expandURL(this.sourceURL));\n                this.appearanceObserver.stop();\n                _context32.next = 5;\n                return this.element.loaded;\n\n              case 5:\n                this.hasBeenLoaded = true;\n\n              case 6:\n              case \"end\":\n                return _context32.stop();\n            }\n          }\n        }, _callee32, this);\n      }));\n\n      function loadSourceURL() {\n        return _loadSourceURL.apply(this, arguments);\n      }\n\n      return loadSourceURL;\n    }()\n  }, {\n    key: \"loadResponse\",\n    value: function () {\n      var _loadResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee33(fetchResponse) {\n        var html, _document3, pageSnapshot;\n\n        return _regeneratorRuntime.wrap(function _callee33$(_context33) {\n          while (1) {\n            switch (_context33.prev = _context33.next) {\n              case 0:\n                if (fetchResponse.redirected || fetchResponse.succeeded && fetchResponse.isHTML) {\n                  this.sourceURL = fetchResponse.response.url;\n                }\n\n                _context33.prev = 1;\n                _context33.next = 4;\n                return fetchResponse.responseHTML;\n\n              case 4:\n                html = _context33.sent;\n\n                if (!html) {\n                  _context33.next = 15;\n                  break;\n                }\n\n                _document3 = parseHTMLDocument(html);\n                pageSnapshot = PageSnapshot.fromDocument(_document3);\n\n                if (!pageSnapshot.isVisitable) {\n                  _context33.next = 13;\n                  break;\n                }\n\n                _context33.next = 11;\n                return this.loadFrameResponse(fetchResponse, _document3);\n\n              case 11:\n                _context33.next = 15;\n                break;\n\n              case 13:\n                _context33.next = 15;\n                return this.handleUnvisitableFrameResponse(fetchResponse);\n\n              case 15:\n                _context33.prev = 15;\n\n                this.fetchResponseLoaded = function () {};\n\n                return _context33.finish(15);\n\n              case 18:\n              case \"end\":\n                return _context33.stop();\n            }\n          }\n        }, _callee33, this, [[1,, 15, 18]]);\n      }));\n\n      function loadResponse(_x22) {\n        return _loadResponse.apply(this, arguments);\n      }\n\n      return loadResponse;\n    }()\n  }, {\n    key: \"elementAppearedInViewport\",\n    value: function elementAppearedInViewport(element) {\n      this.proposeVisitIfNavigatedWithAction(element, element);\n      this.loadSourceURL();\n    }\n  }, {\n    key: \"willSubmitFormLinkToLocation\",\n    value: function willSubmitFormLinkToLocation(link) {\n      return this.shouldInterceptNavigation(link);\n    }\n  }, {\n    key: \"submittedFormLinkToLocation\",\n    value: function submittedFormLinkToLocation(link, _location, form) {\n      var frame = this.findFrameElement(link);\n      if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n    }\n  }, {\n    key: \"shouldInterceptLinkClick\",\n    value: function shouldInterceptLinkClick(element, _location, _event) {\n      return this.shouldInterceptNavigation(element);\n    }\n  }, {\n    key: \"linkClickIntercepted\",\n    value: function linkClickIntercepted(element, location) {\n      this.navigateFrame(element, location);\n    }\n  }, {\n    key: \"willSubmitForm\",\n    value: function willSubmitForm(element, submitter) {\n      return element.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(element, submitter);\n    }\n  }, {\n    key: \"formSubmitted\",\n    value: function formSubmitted(element, submitter) {\n      if (this.formSubmission) {\n        this.formSubmission.stop();\n      }\n\n      this.formSubmission = new FormSubmission(this, element, submitter);\n      var fetchRequest = this.formSubmission.fetchRequest;\n      this.prepareRequest(fetchRequest);\n      this.formSubmission.start();\n    }\n  }, {\n    key: \"prepareRequest\",\n    value: function prepareRequest(request) {\n      var _a;\n\n      request.headers[\"Turbo-Frame\"] = this.id;\n\n      if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"data-turbo-stream\")) {\n        request.acceptResponseType(StreamMessage.contentType);\n      }\n    }\n  }, {\n    key: \"requestStarted\",\n    value: function requestStarted(_request) {\n      markAsBusy(this.element);\n    }\n  }, {\n    key: \"requestPreventedHandlingResponse\",\n    value: function requestPreventedHandlingResponse(_request, _response) {\n      this.resolveVisitPromise();\n    }\n  }, {\n    key: \"requestSucceededWithResponse\",\n    value: function () {\n      var _requestSucceededWithResponse2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee34(request, response) {\n        return _regeneratorRuntime.wrap(function _callee34$(_context34) {\n          while (1) {\n            switch (_context34.prev = _context34.next) {\n              case 0:\n                _context34.next = 2;\n                return this.loadResponse(response);\n\n              case 2:\n                this.resolveVisitPromise();\n\n              case 3:\n              case \"end\":\n                return _context34.stop();\n            }\n          }\n        }, _callee34, this);\n      }));\n\n      function requestSucceededWithResponse(_x23, _x24) {\n        return _requestSucceededWithResponse2.apply(this, arguments);\n      }\n\n      return requestSucceededWithResponse;\n    }()\n  }, {\n    key: \"requestFailedWithResponse\",\n    value: function () {\n      var _requestFailedWithResponse2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee35(request, response) {\n        return _regeneratorRuntime.wrap(function _callee35$(_context35) {\n          while (1) {\n            switch (_context35.prev = _context35.next) {\n              case 0:\n                _context35.next = 2;\n                return this.loadResponse(response);\n\n              case 2:\n                this.resolveVisitPromise();\n\n              case 3:\n              case \"end\":\n                return _context35.stop();\n            }\n          }\n        }, _callee35, this);\n      }));\n\n      function requestFailedWithResponse(_x25, _x26) {\n        return _requestFailedWithResponse2.apply(this, arguments);\n      }\n\n      return requestFailedWithResponse;\n    }()\n  }, {\n    key: \"requestErrored\",\n    value: function requestErrored(request, error) {\n      console.error(error);\n      this.resolveVisitPromise();\n    }\n  }, {\n    key: \"requestFinished\",\n    value: function requestFinished(_request) {\n      clearBusyState(this.element);\n    }\n  }, {\n    key: \"formSubmissionStarted\",\n    value: function formSubmissionStarted(_ref32) {\n      var formElement = _ref32.formElement;\n      markAsBusy(formElement, this.findFrameElement(formElement));\n    }\n  }, {\n    key: \"formSubmissionSucceededWithResponse\",\n    value: function formSubmissionSucceededWithResponse(formSubmission, response) {\n      var frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n      frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n      frame.delegate.loadResponse(response);\n\n      if (!formSubmission.isSafe) {\n        session.clearCache();\n      }\n    }\n  }, {\n    key: \"formSubmissionFailedWithResponse\",\n    value: function formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n      this.element.delegate.loadResponse(fetchResponse);\n      session.clearCache();\n    }\n  }, {\n    key: \"formSubmissionErrored\",\n    value: function formSubmissionErrored(formSubmission, error) {\n      console.error(error);\n    }\n  }, {\n    key: \"formSubmissionFinished\",\n    value: function formSubmissionFinished(_ref33) {\n      var formElement = _ref33.formElement;\n      clearBusyState(formElement, this.findFrameElement(formElement));\n    }\n  }, {\n    key: \"allowsImmediateRender\",\n    value: function allowsImmediateRender(_ref34, options) {\n      var newFrame = _ref34.element;\n      var event = dispatch(\"turbo:before-frame-render\", {\n        target: this.element,\n        detail: Object.assign({\n          newFrame: newFrame\n        }, options),\n        cancelable: true\n      });\n      var defaultPrevented = event.defaultPrevented,\n          render = event.detail.render;\n\n      if (this.view.renderer && render) {\n        this.view.renderer.renderElement = render;\n      }\n\n      return !defaultPrevented;\n    }\n  }, {\n    key: \"viewRenderedSnapshot\",\n    value: function viewRenderedSnapshot(_snapshot, _isPreview) {}\n  }, {\n    key: \"preloadOnLoadLinksForView\",\n    value: function preloadOnLoadLinksForView(element) {\n      session.preloadOnLoadLinksForView(element);\n    }\n  }, {\n    key: \"viewInvalidated\",\n    value: function viewInvalidated() {}\n  }, {\n    key: \"willRenderFrame\",\n    value: function willRenderFrame(currentElement, _newElement) {\n      this.previousFrameElement = currentElement.cloneNode(true);\n    }\n  }, {\n    key: \"loadFrameResponse\",\n    value: function () {\n      var _loadFrameResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee36(fetchResponse, document) {\n        var newFrameElement, snapshot, renderer;\n        return _regeneratorRuntime.wrap(function _callee36$(_context36) {\n          while (1) {\n            switch (_context36.prev = _context36.next) {\n              case 0:\n                _context36.next = 2;\n                return this.extractForeignFrameElement(document.body);\n\n              case 2:\n                newFrameElement = _context36.sent;\n\n                if (!newFrameElement) {\n                  _context36.next = 18;\n                  break;\n                }\n\n                snapshot = new Snapshot(newFrameElement);\n                renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n\n                if (!this.view.renderPromise) {\n                  _context36.next = 9;\n                  break;\n                }\n\n                _context36.next = 9;\n                return this.view.renderPromise;\n\n              case 9:\n                this.changeHistory();\n                _context36.next = 12;\n                return this.view.render(renderer);\n\n              case 12:\n                this.complete = true;\n                session.frameRendered(fetchResponse, this.element);\n                session.frameLoaded(this.element);\n                this.fetchResponseLoaded(fetchResponse);\n                _context36.next = 19;\n                break;\n\n              case 18:\n                if (this.willHandleFrameMissingFromResponse(fetchResponse)) {\n                  this.handleFrameMissingFromResponse(fetchResponse);\n                }\n\n              case 19:\n              case \"end\":\n                return _context36.stop();\n            }\n          }\n        }, _callee36, this);\n      }));\n\n      function loadFrameResponse(_x27, _x28) {\n        return _loadFrameResponse.apply(this, arguments);\n      }\n\n      return loadFrameResponse;\n    }()\n  }, {\n    key: \"visit\",\n    value: function () {\n      var _visit2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee37(url) {\n        var _this42 = this;\n\n        var _a, request;\n\n        return _regeneratorRuntime.wrap(function _callee37$(_context37) {\n          while (1) {\n            switch (_context37.prev = _context37.next) {\n              case 0:\n                request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n                (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n                this.currentFetchRequest = request;\n                return _context37.abrupt(\"return\", new Promise(function (resolve) {\n                  _this42.resolveVisitPromise = function () {\n                    _this42.resolveVisitPromise = function () {};\n\n                    _this42.currentFetchRequest = null;\n                    resolve();\n                  };\n\n                  request.perform();\n                }));\n\n              case 4:\n              case \"end\":\n                return _context37.stop();\n            }\n          }\n        }, _callee37, this);\n      }));\n\n      function visit(_x29) {\n        return _visit2.apply(this, arguments);\n      }\n\n      return visit;\n    }()\n  }, {\n    key: \"navigateFrame\",\n    value: function navigateFrame(element, url, submitter) {\n      var frame = this.findFrameElement(element, submitter);\n      frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n      this.withCurrentNavigationElement(element, function () {\n        frame.src = url;\n      });\n    }\n  }, {\n    key: \"proposeVisitIfNavigatedWithAction\",\n    value: function proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n      var _this43 = this;\n\n      this.action = getVisitAction(submitter, element, frame);\n\n      if (this.action) {\n        var pageSnapshot = PageSnapshot.fromElement(frame).clone();\n        var visitCachedSnapshot = frame.delegate.visitCachedSnapshot;\n\n        frame.delegate.fetchResponseLoaded = function (fetchResponse) {\n          if (frame.src) {\n            var statusCode = fetchResponse.statusCode,\n                redirected = fetchResponse.redirected;\n            var responseHTML = frame.ownerDocument.documentElement.outerHTML;\n            var response = {\n              statusCode: statusCode,\n              redirected: redirected,\n              responseHTML: responseHTML\n            };\n            var options = {\n              response: response,\n              visitCachedSnapshot: visitCachedSnapshot,\n              willRender: false,\n              updateHistory: false,\n              restorationIdentifier: _this43.restorationIdentifier,\n              snapshot: pageSnapshot\n            };\n            if (_this43.action) options.action = _this43.action;\n            session.visit(frame.src, options);\n          }\n        };\n      }\n    }\n  }, {\n    key: \"changeHistory\",\n    value: function changeHistory() {\n      if (this.action) {\n        var method = getHistoryMethodForAction(this.action);\n        session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n      }\n    }\n  }, {\n    key: \"handleUnvisitableFrameResponse\",\n    value: function () {\n      var _handleUnvisitableFrameResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee38(fetchResponse) {\n        return _regeneratorRuntime.wrap(function _callee38$(_context38) {\n          while (1) {\n            switch (_context38.prev = _context38.next) {\n              case 0:\n                console.warn(\"The response (\".concat(fetchResponse.statusCode, \") from <turbo-frame id=\\\"\").concat(this.element.id, \"\\\"> is performing a full page visit due to turbo-visit-control.\"));\n                _context38.next = 3;\n                return this.visitResponse(fetchResponse.response);\n\n              case 3:\n              case \"end\":\n                return _context38.stop();\n            }\n          }\n        }, _callee38, this);\n      }));\n\n      function handleUnvisitableFrameResponse(_x30) {\n        return _handleUnvisitableFrameResponse.apply(this, arguments);\n      }\n\n      return handleUnvisitableFrameResponse;\n    }()\n  }, {\n    key: \"willHandleFrameMissingFromResponse\",\n    value: function willHandleFrameMissingFromResponse(fetchResponse) {\n      var _this44 = this;\n\n      this.element.setAttribute(\"complete\", \"\");\n      var response = fetchResponse.response;\n\n      var visit = /*#__PURE__*/function () {\n        var _ref35 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee39(url) {\n          var options,\n              _args39 = arguments;\n          return _regeneratorRuntime.wrap(function _callee39$(_context39) {\n            while (1) {\n              switch (_context39.prev = _context39.next) {\n                case 0:\n                  options = _args39.length > 1 && _args39[1] !== undefined ? _args39[1] : {};\n\n                  if (url instanceof Response) {\n                    _this44.visitResponse(url);\n                  } else {\n                    session.visit(url, options);\n                  }\n\n                case 2:\n                case \"end\":\n                  return _context39.stop();\n              }\n            }\n          }, _callee39);\n        }));\n\n        return function visit(_x31) {\n          return _ref35.apply(this, arguments);\n        };\n      }();\n\n      var event = dispatch(\"turbo:frame-missing\", {\n        target: this.element,\n        detail: {\n          response: response,\n          visit: visit\n        },\n        cancelable: true\n      });\n      return !event.defaultPrevented;\n    }\n  }, {\n    key: \"handleFrameMissingFromResponse\",\n    value: function handleFrameMissingFromResponse(fetchResponse) {\n      this.view.missing();\n      this.throwFrameMissingError(fetchResponse);\n    }\n  }, {\n    key: \"throwFrameMissingError\",\n    value: function throwFrameMissingError(fetchResponse) {\n      var message = \"The response (\".concat(fetchResponse.statusCode, \") did not contain the expected <turbo-frame id=\\\"\").concat(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    key: \"visitResponse\",\n    value: function () {\n      var _visitResponse = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee40(response) {\n        var wrapped, responseHTML, location, redirected, statusCode;\n        return _regeneratorRuntime.wrap(function _callee40$(_context40) {\n          while (1) {\n            switch (_context40.prev = _context40.next) {\n              case 0:\n                wrapped = new FetchResponse(response);\n                _context40.next = 3;\n                return wrapped.responseHTML;\n\n              case 3:\n                responseHTML = _context40.sent;\n                location = wrapped.location, redirected = wrapped.redirected, statusCode = wrapped.statusCode;\n                return _context40.abrupt(\"return\", session.visit(location, {\n                  response: {\n                    redirected: redirected,\n                    statusCode: statusCode,\n                    responseHTML: responseHTML\n                  }\n                }));\n\n              case 6:\n              case \"end\":\n                return _context40.stop();\n            }\n          }\n        }, _callee40);\n      }));\n\n      function visitResponse(_x32) {\n        return _visitResponse.apply(this, arguments);\n      }\n\n      return visitResponse;\n    }()\n  }, {\n    key: \"findFrameElement\",\n    value: function findFrameElement(element, submitter) {\n      var _a;\n\n      var id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n      return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n    }\n  }, {\n    key: \"extractForeignFrameElement\",\n    value: function () {\n      var _extractForeignFrameElement = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee41(container) {\n        var element, id;\n        return _regeneratorRuntime.wrap(function _callee41$(_context41) {\n          while (1) {\n            switch (_context41.prev = _context41.next) {\n              case 0:\n                id = CSS.escape(this.id);\n                _context41.prev = 1;\n                element = activateElement(container.querySelector(\"turbo-frame#\".concat(id)), this.sourceURL);\n\n                if (!element) {\n                  _context41.next = 5;\n                  break;\n                }\n\n                return _context41.abrupt(\"return\", element);\n\n              case 5:\n                element = activateElement(container.querySelector(\"turbo-frame[src][recurse~=\".concat(id, \"]\")), this.sourceURL);\n\n                if (!element) {\n                  _context41.next = 12;\n                  break;\n                }\n\n                _context41.next = 9;\n                return element.loaded;\n\n              case 9:\n                _context41.next = 11;\n                return this.extractForeignFrameElement(element);\n\n              case 11:\n                return _context41.abrupt(\"return\", _context41.sent);\n\n              case 12:\n                _context41.next = 18;\n                break;\n\n              case 14:\n                _context41.prev = 14;\n                _context41.t0 = _context41[\"catch\"](1);\n                console.error(_context41.t0);\n                return _context41.abrupt(\"return\", new FrameElement());\n\n              case 18:\n                return _context41.abrupt(\"return\", null);\n\n              case 19:\n              case \"end\":\n                return _context41.stop();\n            }\n          }\n        }, _callee41, this, [[1, 14]]);\n      }));\n\n      function extractForeignFrameElement(_x33) {\n        return _extractForeignFrameElement.apply(this, arguments);\n      }\n\n      return extractForeignFrameElement;\n    }()\n  }, {\n    key: \"formActionIsVisitable\",\n    value: function formActionIsVisitable(form, submitter) {\n      var action = getAction(form, submitter);\n      return locationIsVisitable(expandURL(action), this.rootLocation);\n    }\n  }, {\n    key: \"shouldInterceptNavigation\",\n    value: function shouldInterceptNavigation(element, submitter) {\n      var 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        var frameElement = getFrameElementById(id);\n\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    key: \"id\",\n    get: function get() {\n      return this.element.id;\n    }\n  }, {\n    key: \"enabled\",\n    get: function get() {\n      return !this.element.disabled;\n    }\n  }, {\n    key: \"sourceURL\",\n    get: function get() {\n      if (this.element.src) {\n        return this.element.src;\n      }\n    },\n    set: function set(sourceURL) {\n      var _this45 = this;\n\n      this.ignoringChangesToAttribute(\"src\", function () {\n        _this45.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n      });\n    }\n  }, {\n    key: \"loadingStyle\",\n    get: function get() {\n      return this.element.loading;\n    }\n  }, {\n    key: \"isLoading\",\n    get: function get() {\n      return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n    }\n  }, {\n    key: \"complete\",\n    get: function get() {\n      return this.element.hasAttribute(\"complete\");\n    },\n    set: function set(value) {\n      var _this46 = this;\n\n      this.ignoringChangesToAttribute(\"complete\", function () {\n        if (value) {\n          _this46.element.setAttribute(\"complete\", \"\");\n        } else {\n          _this46.element.removeAttribute(\"complete\");\n        }\n      });\n    }\n  }, {\n    key: \"isActive\",\n    get: function get() {\n      return this.element.isActive && this.connected;\n    }\n  }, {\n    key: \"rootLocation\",\n    get: function get() {\n      var _a;\n\n      var meta = this.element.ownerDocument.querySelector(\"meta[name=\\\"turbo-root\\\"]\");\n      var root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n      return expandURL(root);\n    }\n  }, {\n    key: \"isIgnoringChangesTo\",\n    value: function isIgnoringChangesTo(attributeName) {\n      return this.ignoredAttributes.has(attributeName);\n    }\n  }, {\n    key: \"ignoringChangesToAttribute\",\n    value: function ignoringChangesToAttribute(attributeName, callback) {\n      this.ignoredAttributes.add(attributeName);\n      callback();\n      this.ignoredAttributes.delete(attributeName);\n    }\n  }, {\n    key: \"withCurrentNavigationElement\",\n    value: function withCurrentNavigationElement(element, callback) {\n      this.currentNavigationElement = element;\n      callback();\n      delete this.currentNavigationElement;\n    }\n  }]);\n\n  return FrameController;\n}();\n\nfunction getFrameElementById(id) {\n  if (id != null) {\n    var element = document.getElementById(id);\n\n    if (element instanceof FrameElement) {\n      return element;\n    }\n  }\n}\n\nfunction activateElement(element, currentURL) {\n  if (element) {\n    var src = element.getAttribute(\"src\");\n\n    if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n      throw new Error(\"Matching <turbo-frame id=\\\"\".concat(element.id, \"\\\"> element has a source URL which references itself\"));\n    }\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\nvar StreamElement = /*#__PURE__*/function (_HTMLElement2) {\n  _inherits(StreamElement, _HTMLElement2);\n\n  var _super10 = _createSuper(StreamElement);\n\n  function StreamElement() {\n    _classCallCheck(this, StreamElement);\n\n    return _super10.apply(this, arguments);\n  }\n\n  _createClass(StreamElement, [{\n    key: \"connectedCallback\",\n    value: function () {\n      var _connectedCallback = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee42() {\n        return _regeneratorRuntime.wrap(function _callee42$(_context42) {\n          while (1) {\n            switch (_context42.prev = _context42.next) {\n              case 0:\n                _context42.prev = 0;\n                _context42.next = 3;\n                return this.render();\n\n              case 3:\n                _context42.next = 8;\n                break;\n\n              case 5:\n                _context42.prev = 5;\n                _context42.t0 = _context42[\"catch\"](0);\n                console.error(_context42.t0);\n\n              case 8:\n                _context42.prev = 8;\n                this.disconnect();\n                return _context42.finish(8);\n\n              case 11:\n              case \"end\":\n                return _context42.stop();\n            }\n          }\n        }, _callee42, this, [[0, 5, 8, 11]]);\n      }));\n\n      function connectedCallback() {\n        return _connectedCallback.apply(this, arguments);\n      }\n\n      return connectedCallback;\n    }()\n  }, {\n    key: \"render\",\n    value: function () {\n      var _render6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee44() {\n        var _this47 = this;\n\n        var _a;\n\n        return _regeneratorRuntime.wrap(function _callee44$(_context44) {\n          while (1) {\n            switch (_context44.prev = _context44.next) {\n              case 0:\n                return _context44.abrupt(\"return\", (_a = this.renderPromise) !== null && _a !== void 0 ? _a : this.renderPromise = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee43() {\n                  var event;\n                  return _regeneratorRuntime.wrap(function _callee43$(_context43) {\n                    while (1) {\n                      switch (_context43.prev = _context43.next) {\n                        case 0:\n                          event = _this47.beforeRenderEvent;\n\n                          if (!_this47.dispatchEvent(event)) {\n                            _context43.next = 6;\n                            break;\n                          }\n\n                          _context43.next = 4;\n                          return nextAnimationFrame();\n\n                        case 4:\n                          _context43.next = 6;\n                          return event.detail.render(_this47);\n\n                        case 6:\n                        case \"end\":\n                          return _context43.stop();\n                      }\n                    }\n                  }, _callee43);\n                }))());\n\n              case 1:\n              case \"end\":\n                return _context44.stop();\n            }\n          }\n        }, _callee44, this);\n      }));\n\n      function render() {\n        return _render6.apply(this, arguments);\n      }\n\n      return render;\n    }()\n  }, {\n    key: \"disconnect\",\n    value: function disconnect() {\n      try {\n        this.remove();\n      } catch (_a) {}\n    }\n  }, {\n    key: \"removeDuplicateTargetChildren\",\n    value: function removeDuplicateTargetChildren() {\n      this.duplicateChildren.forEach(function (c) {\n        return c.remove();\n      });\n    }\n  }, {\n    key: \"duplicateChildren\",\n    get: function get() {\n      var _a;\n\n      var existingChildren = this.targetElements.flatMap(function (e) {\n        return _toConsumableArray(e.children);\n      }).filter(function (c) {\n        return !!c.id;\n      });\n\n      var newChildrenIds = _toConsumableArray(((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children) || []).filter(function (c) {\n        return !!c.id;\n      }).map(function (c) {\n        return c.id;\n      });\n\n      return existingChildren.filter(function (c) {\n        return newChildrenIds.includes(c.id);\n      });\n    }\n  }, {\n    key: \"performAction\",\n    get: function get() {\n      if (this.action) {\n        var actionFunction = StreamActions[this.action];\n\n        if (actionFunction) {\n          return actionFunction;\n        }\n\n        this.raise(\"unknown action\");\n      }\n\n      this.raise(\"action attribute is missing\");\n    }\n  }, {\n    key: \"targetElements\",\n    get: function get() {\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    key: \"templateContent\",\n    get: function get() {\n      return this.templateElement.content.cloneNode(true);\n    }\n  }, {\n    key: \"templateElement\",\n    get: function get() {\n      if (this.firstElementChild === null) {\n        var 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\n      this.raise(\"first child element must be a <template> element\");\n    }\n  }, {\n    key: \"action\",\n    get: function get() {\n      return this.getAttribute(\"action\");\n    }\n  }, {\n    key: \"target\",\n    get: function get() {\n      return this.getAttribute(\"target\");\n    }\n  }, {\n    key: \"targets\",\n    get: function get() {\n      return this.getAttribute(\"targets\");\n    }\n  }, {\n    key: \"raise\",\n    value: function raise(message) {\n      throw new Error(\"\".concat(this.description, \": \").concat(message));\n    }\n  }, {\n    key: \"description\",\n    get: function get() {\n      var _a, _b;\n\n      return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : \"<turbo-stream>\";\n    }\n  }, {\n    key: \"beforeRenderEvent\",\n    get: function get() {\n      return new CustomEvent(\"turbo:before-stream-render\", {\n        bubbles: true,\n        cancelable: true,\n        detail: {\n          newStream: this,\n          render: StreamElement.renderElement\n        }\n      });\n    }\n  }, {\n    key: \"targetElementsById\",\n    get: function get() {\n      var _a;\n\n      var element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);\n\n      if (element !== null) {\n        return [element];\n      } else {\n        return [];\n      }\n    }\n  }, {\n    key: \"targetElementsByQuery\",\n    get: function get() {\n      var _a;\n\n      var elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);\n\n      if (elements.length !== 0) {\n        return Array.prototype.slice.call(elements);\n      } else {\n        return [];\n      }\n    }\n  }], [{\n    key: \"renderElement\",\n    value: function () {\n      var _renderElement = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee45(newElement) {\n        return _regeneratorRuntime.wrap(function _callee45$(_context45) {\n          while (1) {\n            switch (_context45.prev = _context45.next) {\n              case 0:\n                _context45.next = 2;\n                return newElement.performAction();\n\n              case 2:\n              case \"end\":\n                return _context45.stop();\n            }\n          }\n        }, _callee45);\n      }));\n\n      function renderElement(_x34) {\n        return _renderElement.apply(this, arguments);\n      }\n\n      return renderElement;\n    }()\n  }]);\n\n  return StreamElement;\n}( /*#__PURE__*/_wrapNativeSuper(HTMLElement));\n\nvar StreamSourceElement = /*#__PURE__*/function (_HTMLElement3) {\n  _inherits(StreamSourceElement, _HTMLElement3);\n\n  var _super11 = _createSuper(StreamSourceElement);\n\n  function StreamSourceElement() {\n    var _this48;\n\n    _classCallCheck(this, StreamSourceElement);\n\n    _this48 = _super11.apply(this, arguments);\n    _this48.streamSource = null;\n    return _this48;\n  }\n\n  _createClass(StreamSourceElement, [{\n    key: \"connectedCallback\",\n    value: function connectedCallback() {\n      this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n      connectStreamSource(this.streamSource);\n    }\n  }, {\n    key: \"disconnectedCallback\",\n    value: function disconnectedCallback() {\n      if (this.streamSource) {\n        disconnectStreamSource(this.streamSource);\n      }\n    }\n  }, {\n    key: \"src\",\n    get: function get() {\n      return this.getAttribute(\"src\") || \"\";\n    }\n  }]);\n\n  return StreamSourceElement;\n}( /*#__PURE__*/_wrapNativeSuper(HTMLElement));\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(function () {\n  var element = document.currentScript;\n  if (!element) return;\n  if (element.hasAttribute(\"data-turbo-suppress-warning\")) return;\n  element = element.parentElement;\n\n  while (element) {\n    if (element == document.body) {\n      return console.warn(unindent(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral([\"\\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\\u2019s 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        \\u2014\\u2014\\n        Suppress this warning by adding a \\\"data-turbo-suppress-warning\\\" attribute to: %s\\n      \"]))), element.outerHTML);\n    }\n\n    element = element.parentElement;\n  }\n})();\n\nwindow.Turbo = Turbo;\nstart();\nexport { FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, connectStreamSource, disconnectStreamSource, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };","import _regeneratorRuntime from \"@babel/runtime/regenerator\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar consumer;\nexport function getConsumer() {\n  return _getConsumer.apply(this, arguments);\n}\n\nfunction _getConsumer() {\n  _getConsumer = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {\n    return _regeneratorRuntime.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            return _context.abrupt(\"return\", consumer || setConsumer(createConsumer().then(setConsumer)));\n\n          case 1:\n          case \"end\":\n            return _context.stop();\n        }\n      }\n    }, _callee);\n  }));\n  return _getConsumer.apply(this, arguments);\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer;\n}\nexport function createConsumer() {\n  return _createConsumer.apply(this, arguments);\n}\n\nfunction _createConsumer() {\n  _createConsumer = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {\n    var _yield$import, createConsumer;\n\n    return _regeneratorRuntime.wrap(function _callee2$(_context2) {\n      while (1) {\n        switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return import(\n            /* webpackChunkName: \"actioncable\" */\n            \"@rails/actioncable/src\");\n\n          case 2:\n            _yield$import = _context2.sent;\n            createConsumer = _yield$import.createConsumer;\n            return _context2.abrupt(\"return\", createConsumer());\n\n          case 5:\n          case \"end\":\n            return _context2.stop();\n        }\n      }\n    }, _callee2);\n  }));\n  return _createConsumer.apply(this, arguments);\n}\n\nexport function subscribeTo(_x, _x2) {\n  return _subscribeTo.apply(this, arguments);\n}\n\nfunction _subscribeTo() {\n  _subscribeTo = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(channel, mixin) {\n    var _yield$getConsumer, subscriptions;\n\n    return _regeneratorRuntime.wrap(function _callee3$(_context3) {\n      while (1) {\n        switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.next = 2;\n            return getConsumer();\n\n          case 2:\n            _yield$getConsumer = _context3.sent;\n            subscriptions = _yield$getConsumer.subscriptions;\n            return _context3.abrupt(\"return\", subscriptions.create(channel, mixin));\n\n          case 5:\n          case \"end\":\n            return _context3.stop();\n        }\n      }\n    }, _callee3);\n  }));\n  return _subscribeTo.apply(this, arguments);\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\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// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\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}\n;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport _regeneratorRuntime from \"@babel/runtime/regenerator\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\";\nimport { subscribeTo } from \"./cable\";\nimport snakeize from \"./snakeize\";\n\nvar TurboCableStreamSourceElement = /*#__PURE__*/function (_HTMLElement) {\n  _inherits(TurboCableStreamSourceElement, _HTMLElement);\n\n  var _super = _createSuper(TurboCableStreamSourceElement);\n\n  function TurboCableStreamSourceElement() {\n    _classCallCheck(this, TurboCableStreamSourceElement);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(TurboCableStreamSourceElement, [{\n    key: \"connectedCallback\",\n    value: function () {\n      var _connectedCallback = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {\n        return _regeneratorRuntime.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                connectStreamSource(this);\n                _context.next = 3;\n                return subscribeTo(this.channel, {\n                  received: this.dispatchMessageEvent.bind(this),\n                  connected: this.subscriptionConnected.bind(this),\n                  disconnected: this.subscriptionDisconnected.bind(this)\n                });\n\n              case 3:\n                this.subscription = _context.sent;\n\n              case 4:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function connectedCallback() {\n        return _connectedCallback.apply(this, arguments);\n      }\n\n      return connectedCallback;\n    }()\n  }, {\n    key: \"disconnectedCallback\",\n    value: function disconnectedCallback() {\n      disconnectStreamSource(this);\n      if (this.subscription) this.subscription.unsubscribe();\n    }\n  }, {\n    key: \"dispatchMessageEvent\",\n    value: function dispatchMessageEvent(data) {\n      var event = new MessageEvent(\"message\", {\n        data: data\n      });\n      return this.dispatchEvent(event);\n    }\n  }, {\n    key: \"subscriptionConnected\",\n    value: function subscriptionConnected() {\n      this.setAttribute(\"connected\", \"\");\n    }\n  }, {\n    key: \"subscriptionDisconnected\",\n    value: function subscriptionDisconnected() {\n      this.removeAttribute(\"connected\");\n    }\n  }, {\n    key: \"channel\",\n    get: function get() {\n      var channel = this.getAttribute(\"channel\");\n      var signed_stream_name = this.getAttribute(\"signed-stream-name\");\n      return _objectSpread({\n        channel: channel,\n        signed_stream_name: signed_stream_name\n      }, snakeize(_objectSpread({}, this.dataset)));\n    }\n  }]);\n\n  return TurboCableStreamSourceElement;\n}( /*#__PURE__*/_wrapNativeSuper(HTMLElement));\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n  customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement);\n}","import \"./cable_stream_source_element\";\nimport * as Turbo from \"@hotwired/turbo\";\nexport { Turbo };\nimport * as cable from \"./cable\";\nexport { cable };\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\";\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody);","export function encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    var form = event.target,\n        fetchOptions = event.detail.fetchOptions;\n    form.addEventListener(\"turbo:submit-start\", function (_ref) {\n      var submitter = _ref.detail.formSubmission.submitter;\n      var body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams();\n      var 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    }, {\n      once: true\n    });\n  }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n  var formMethod = determineFormMethod(submitter);\n  var overrideMethod = body.get(\"_method\");\n  var 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    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}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { DirectUpload } from \"@rails/activestorage\";\nexport var AttachmentUpload = /*#__PURE__*/function () {\n  function AttachmentUpload(attachment, element) {\n    _classCallCheck(this, AttachmentUpload);\n\n    this.attachment = attachment;\n    this.element = element;\n    this.directUpload = new DirectUpload(attachment.file, this.directUploadUrl, this);\n  }\n\n  _createClass(AttachmentUpload, [{\n    key: \"start\",\n    value: function start() {\n      this.directUpload.create(this.directUploadDidComplete.bind(this));\n    }\n  }, {\n    key: \"directUploadWillStoreFileWithXHR\",\n    value: function directUploadWillStoreFileWithXHR(xhr) {\n      var _this = this;\n\n      xhr.upload.addEventListener(\"progress\", function (event) {\n        var progress = event.loaded / event.total * 100;\n\n        _this.attachment.setUploadProgress(progress);\n      });\n    }\n  }, {\n    key: \"directUploadDidComplete\",\n    value: function directUploadDidComplete(error, attributes) {\n      if (error) {\n        throw new Error(\"Direct upload failed: \".concat(error));\n      }\n\n      this.attachment.setAttributes({\n        sgid: attributes.attachable_sgid,\n        url: this.createBlobUrl(attributes.signed_id, attributes.filename)\n      });\n    }\n  }, {\n    key: \"createBlobUrl\",\n    value: function createBlobUrl(signedId, filename) {\n      return this.blobUrlTemplate.replace(\":signed_id\", signedId).replace(\":filename\", encodeURIComponent(filename));\n    }\n  }, {\n    key: \"directUploadUrl\",\n    get: function get() {\n      return this.element.dataset.directUploadUrl;\n    }\n  }, {\n    key: \"blobUrlTemplate\",\n    get: function get() {\n      return this.element.dataset.blobUrlTemplate;\n    }\n  }]);\n\n  return AttachmentUpload;\n}();","import { AttachmentUpload } from \"./attachment_upload\";\naddEventListener(\"trix-attachment-add\", function (event) {\n  var attachment = event.attachment,\n      target = event.target;\n\n  if (attachment.file) {\n    var upload = new AttachmentUpload(attachment, target);\n    upload.start();\n  }\n});"],"sourceRoot":""}