1/******/ (() => { // webpackBootstrap 2/******/ var __webpack_modules__ = ({ 3 4/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=script&lang=js&": 5/*!**************************************************************************************************************************************************************************************************************************************************************************!*\ 6 !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=script&lang=js& ***! 7 \**************************************************************************************************************************************************************************************************************************************************************************/ 8/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 9 10"use strict"; 11__webpack_require__.r(__webpack_exports__); 12/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 14/* harmony export */ }); 15/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 16 props: ['slides'], 17 data: function data() { 18 return { 19 currentSlide: 0 20 }; 21 }, 22 mounted: function mounted() { 23 var _this = this; 24 setInterval(function () { 25 return _this.currentSlide = (_this.currentSlide + 1) % _this.slides.length; 26 }, 4000); 27 } 28}); 29 30/***/ }), 31 32/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true&": 33/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ 34 !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true& ***! 35 \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ 36/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 37 38"use strict"; 39__webpack_require__.r(__webpack_exports__); 40/* harmony export */ __webpack_require__.d(__webpack_exports__, { 41/* harmony export */ "render": () => (/* binding */ render), 42/* harmony export */ "staticRenderFns": () => (/* binding */ staticRenderFns) 43/* harmony export */ }); 44var render = function render() { 45 var _vm = this, 46 _c = _vm._self._c; 47 return _vm.slides.length ? _c("div", { 48 staticClass: "background-slider" 49 }, _vm._l(_vm.slides, function (slide, key) { 50 return _c("div", { 51 "class": { 52 "slide-item": true, 53 showing: key === _vm.currentSlide 54 }, 55 style: { 56 "background-image": "url('".concat(slide, "')") 57 } 58 }); 59 }), 0) : _vm._e(); 60}; 61var staticRenderFns = []; 62render._withStripped = true; 63 64 65/***/ }), 66
67/***/ "./resources/assets/scripts/app.js": 68/*!*****************************************!*\ 69 !*** ./resources/assets/scripts/app.js ***! 70 \*****************************************/ 71/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 72 73"use strict"; 74__webpack_require__.r(__webpack_exports__); 75/* harmony import */ var _autoload_bootstrap_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./autoload/_bootstrap.js */ "./resources/assets/scripts/autoload/_bootstrap.js"); 76/* harmony import */ var _utils_Router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/Router */ "./resources/assets/scripts/utils/Router.js"); 77/* harmony import */ var _routes_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./routes/common */ "./resources/assets/scripts/routes/common.js"); 78/* harmony import */ var _routes_home__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./routes/home */ "./resources/assets/scripts/routes/home.js"); 79/* harmony import */ var _routes_about__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./routes/about */ "./resources/assets/scripts/routes/about.js"); 80/* harmony import */ var _routes_blog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./routes/blog */ "./resources/assets/scripts/routes/blog.js"); 81/* harmony import */ var _routes_single__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./routes/single */ "./resources/assets/scripts/routes/single.js"); 82/* harmony import */ var _routes_projects__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./routes/projects */ "./resources/assets/scripts/routes/projects.js"); 83// import external dependencies 84 85// Import everything from autoload 86 87 88// import local dependencies 89 90 91 92 93 94 95 96document.addEventListener('DOMContentLoaded', function load() { 97 if (!window.jQuery) return setTimeout(load, 50); 98 var jQuery = __webpack_require__(/*! jquery */ "jquery"); 99 100 /** Populate Router instance with DOM routes */ 101 var routes = new _utils_Router__WEBPACK_IMPORTED_MODULE_1__["default"]({ 102 // All pages 103 common: _routes_common__WEBPACK_IMPORTED_MODULE_2__["default"], 104 // Home page 105 home: _routes_home__WEBPACK_IMPORTED_MODULE_3__["default"], 106 // About page. 107 about: _routes_about__WEBPACK_IMPORTED_MODULE_4__["default"], 108 // Home page. 109 blog: _routes_blog__WEBPACK_IMPORTED_MODULE_5__["default"], 110 single: _routes_single__WEBPACK_IMPORTED_MODULE_6__["default"], 111 projects: _routes_projects__WEBPACK_IMPORTED_MODULE_7__["default"] 112 }); 113 114 // Load Events 115 jQuery(function ($) { 116 return routes.loadEvents($); 117 }); 118 var Parallax = __webpack_require__(/*! parallax-js */ "./node_modules/parallax-js/dist/parallax.js"); 119 jQuery(function ($) { 120 var scene = document.getElementById("scene"); 121 var scene2 = document.getElementById("scene2"); 122 var scene3 = document.getElementById("scene3"); 123 if (scene) { 124 var parallaxInstance = new Parallax(scene, { 125 onReady: myAwesomeCallback 126 }); 127 var parallaxInstance2 = new Parallax(scene2, { 128 onReady: myAwesomeCallback 129 }); 130 } 131 if (scene3) { 132 var parallaxInstance3 = new Parallax(scene3, { 133 calibrateX: true, 134 calibrateY: true, 135 onReady: myAwesomeCallback 136 }); 137 } 138 function myAwesomeCallback() { 139 // console.log('myAwesomeCallback'); 140 $("#spinnerWrap").delay(2000).fadeOut(1200); 141 } 142 }); 143}, false); 144 145/***/ }), 146
147/***/ "./resources/assets/scripts/autoload/_bootstrap.js": 148/*!*********************************************************!*\ 149 !*** ./resources/assets/scripts/autoload/_bootstrap.js ***! 150 \*********************************************************/ 151/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 152 153"use strict"; 154__webpack_require__.r(__webpack_exports__); 155/* harmony import */ var bootstrap_js_dist_modal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap/js/dist/modal */ "./node_modules/bootstrap/js/dist/modal.js"); 156/* harmony import */ var bootstrap_js_dist_modal__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(bootstrap_js_dist_modal__WEBPACK_IMPORTED_MODULE_0__); 157// `sage preset` installed this file automatically. 158// Running `sage preset` again could result in automatic deletion of this file. 159// Because of this, we do not recommend editing this file. 160 161 162// import 'bootstrap/js/dist/alert'; 163// import 'bootstrap/js/dist/tab'; 164// import 'bootstrap/js/dist/util'; 165window.Vue = (__webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js")["default"]); 166 167/** 168 * The following block of code may be used to automatically register your 169 * Vue components. It will recursively scan this directory for the Vue 170 * components and automatically register them with their "basename". 171 * 172 * Eg. ./components/ExampleComponent.vue -> <example-component></example-component> 173 */ 174 175var files = __webpack_require__("./resources/assets/scripts/components sync recursive \\.vue$/"); 176files.keys().map(function (key) { 177 return Vue.component(key.split("/").pop().split(".")[0], files(key)["default"]); 178}); 179 180/** 181 * Next, we will create a fresh Vue application instance and attach it to 182 * the page. Then, you may begin adding components to this application 183 * or customize the JavaScript scaffolding to fit your unique needs. 184 */ 185 186new Vue({ 187 el: "#app" 188}); 189 190/***/ }), 191
192/***/ "./resources/assets/scripts/routes/about.js": 193/*!**************************************************!*\ 194 !*** ./resources/assets/scripts/routes/about.js ***! 195 \**************************************************/ 196/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 197 198"use strict"; 199__webpack_require__.r(__webpack_exports__); 200/* harmony export */ __webpack_require__.d(__webpack_exports__, { 201/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 202/* harmony export */ }); 203/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 204 init: function init() { 205 // JavaScript to be fired on the about page 206 }, 207 finalize: function finalize($) { 208 // JavaScript to be fired on the about page, after the init JS 209 // console.log('about'); 210 var cell = $(".card"); 211 $(cell).each(function () { 212 $(this).children(".card__inner").height($(this).height()); 213 }); 214 //open and close card when clicked on card 215 cell.find(".js-expander").click(function () { 216 var thisCell = $(this).closest(".card"), 217 wrappCells = $(this).closest(".cards"), 218 naerCells = wrappCells.children(".card"); 219 if (thisCell.hasClass("is-collapsed")) { 220 naerCells.not(thisCell).removeClass("is-expanded").addClass("is-collapsed").addClass("is-inactive"); 221 thisCell.removeClass("is-collapsed").addClass("is-expanded").removeClass("is-inactive"); 222 thisCell.children(".card__expander").css("transform", "translateX(" + (wrappCells.offset().left + parseInt(wrappCells.css("paddingLeft"), 10) - thisCell.offset().left) + "px)"); 223 } else { 224 thisCell.removeClass("is-expanded").addClass("is-collapsed"); 225 naerCells.not(thisCell).removeClass("is-expanded").addClass("is-collapsed").removeClass("is-inactive"); 226 } 227 }); 228 229 //close card when click on cross 230 cell.find(".js-collapser").click(function () { 231 var thisCell = $(this).closest(".card"), 232 wrappCells = $(this).closest(".cards"), 233 naerCells = wrappCells.children(".card"); 234 thisCell.removeClass("is-expanded").addClass("is-collapsed"); 235 naerCells.not(thisCell).removeClass("is-expanded").addClass("is-collapsed").removeClass("is-inactive"); 236 }); 237 } 238}); 239 240/***/ }), 241
242/***/ "./resources/assets/scripts/routes/blog.js": 243/*!*************************************************!*\ 244 !*** ./resources/assets/scripts/routes/blog.js ***! 245 \*************************************************/ 246/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 247 248"use strict"; 249__webpack_require__.r(__webpack_exports__); 250/* harmony export */ __webpack_require__.d(__webpack_exports__, { 251/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 252/* harmony export */ }); 253/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 254 init: function init($) { 255 // JavaScript to be fired on the blog page 256 var filterBar = document.querySelector('.filter'); 257 var headerBar = document.querySelector('#headerBar'); 258 var urlParams = new URLSearchParams(window.location.search); 259 var cat = urlParams.get('cat'); 260 var search = urlParams.get('search'); 261 if (filterBar && (cat || search) && headerBar) { 262 var elementPosition = filterBar.offsetTop; 263 var offset = document.querySelector('#headerBar').getBoundingClientRect().top + document.querySelector('#headerBar').getBoundingClientRect().height; 264 window.scrollTo({ 265 top: elementPosition - offset, 266 behavior: 'smooth' 267 }); 268 } 269 }, 270 finalize: function finalize($) { 271 // JavaScript to be fired on the blog page, after the init JS 272 } 273}); 274 275/***/ }), 276
277/***/ "./resources/assets/scripts/routes/common.js": 278/*!***************************************************!*\ 279 !*** ./resources/assets/scripts/routes/common.js ***! 280 \***************************************************/ 281/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 282 283"use strict"; 284__webpack_require__.r(__webpack_exports__); 285/* harmony export */ __webpack_require__.d(__webpack_exports__, { 286/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 287/* harmony export */ }); 288/* harmony import */ var _utils_adjustMenus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/adjustMenus */ "./resources/assets/scripts/utils/adjustMenus.js"); 289/* harmony import */ var throttle_debounce__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! throttle-debounce */ "./node_modules/throttle-debounce/index.umd.js"); 290/* harmony import */ var throttle_debounce__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(throttle_debounce__WEBPACK_IMPORTED_MODULE_5__); 291/* harmony import */ var _utils_adjustStickyHeader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/adjustStickyHeader */ "./resources/assets/scripts/utils/adjustStickyHeader.js"); 292/* harmony import */ var _utils_animate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/animate */ "./resources/assets/scripts/utils/animate.js"); 293/* harmony import */ var owl_carousel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! owl.carousel */ "./node_modules/owl.carousel/dist/owl.carousel.js"); 294/* harmony import */ var owl_carousel__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(owl_carousel__WEBPACK_IMPORTED_MODULE_3__); 295/* harmony import */ var venobox__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! venobox */ "./node_modules/venobox/dist/venobox.min.js"); 296/* harmony import */ var venobox__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(venobox__WEBPACK_IMPORTED_MODULE_4__); 297 298 299 300 301 302 303// require('venobox'); 304 305/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 306 init: function init($, classRoutes) { 307 // animateOnScroll($('body:not(.home) [data-animate]')); 308 309 $(".menu-trigger-button").on("click", function () { 310 return $("body").toggleClass("menu-open"); 311 }); 312 $(".category-dynamic-selector").on("change", function (event) { 313 // const data = $(event.target).find(':selected').data(); 314 315 window.location.href = "?cat=".concat(event.target.value); 316 }); 317 $(".main-content a").attr("target", "_blank"); 318 var adjustElements = (0,throttle_debounce__WEBPACK_IMPORTED_MODULE_5__.throttle)(100, function () { 319 (0,_utils_adjustMenus__WEBPACK_IMPORTED_MODULE_0__["default"])(); 320 (0,_utils_adjustStickyHeader__WEBPACK_IMPORTED_MODULE_1__["default"])(); 321 if (classRoutes.indexOf("pageTemplateHome") === -1) {} 322 }); 323 $(window).on("resize", adjustElements).trigger("resize"); 324 $(window).on("scroll", (0,throttle_debounce__WEBPACK_IMPORTED_MODULE_5__.throttle)(10, function () { 325 if (!$("body").hasClass("scroll") && $(window).scrollTop() > 50) { 326 $("body").addClass("scroll"); 327 } else if ($("body").hasClass("scroll") && $(window).scrollTop() <= 50) { 328 $("body").removeClass("scroll"); 329 } 330 })).trigger("scroll"); 331 $(document).ready(function () { 332 var owl1 = $(".project-carusel.owl-carousel, .feature-projects .owl-carousel"), 333 owl2 = $(".wrapp-banner.owl-carousel"); 334 owl1.owlCarousel({ 335 loop: true, 336 autoplay: true, 337 dots: true, 338 autoplayTimeout: 5000, 339 autoplayHoverPause: true, 340 responsiveClass: true, 341 mouseDrag: false, 342 responsive: { 343 0: { 344 items: 1 345 }, 346 700: { 347 items: 3, 348 onChanged: callback, 349 onInitialized: callback 350 } 351 } 352 }); 353 owl2.owlCarousel({ 354 loop: true, 355 items: 1, 356 autoplay: true, 357 autoplayTimeout: 8000, 358 autoplayHoverPause: true, 359 mouseDrag: false, 360 onInitialized: showTitle 361 }); 362 function showTitle(event) { 363 (0,_utils_animate__WEBPACK_IMPORTED_MODULE_2__.animate)($(".wrapp-banner [data-animate]")); 364 } 365 function callback(event) { 366 $(".project-carusel .owl-item").removeClass("middle").removeClass("prev-to-mid").removeClass("next-to-mid"); 367 setTimeout(function () { 368 $(".project-carusel .active").eq(1).addClass("middle"); 369 $(".project-carusel .active").eq(0).addClass("prev-to-mid"); 370 $(".project-carusel .active").eq(2).addClass("next-to-mid"); 371 }, 1); 372 } 373 }); 374 }, 375 finalize: function finalize($) { 376 var isIOS = /iphone|ipad/gi.test(navigator.appVersion); 377 var click = isIOS ? "touchstart" : "click"; 378 setTimeout(function () { 379 $("body").addClass("loaded");
380 (0,_utils_animate__WEBPACK_IMPORTED_MODULE_2__.animateOnScroll)($('[data-animate]:not([data-animate*="customLine"])')); 381 (0,_utils_animate__WEBPACK_IMPORTED_MODULE_2__.animate)($('[data-animate*="customLine"]')); 382 $("#ic_signupform .submit-container > input").val("GO"); 383 // $("#ic_signupform .formEl.fieldtype-input.required input").attr("placeholder", "Enter your email to subscribe") 384 }, 1000); 385 $(".scroll-arrow > .fa-angle-double-down").click(function (e) { 386 e.preventDefault(); 387 e.stopPropagation(); 388 window.scrollBy({ 389 top: window.innerHeight - 150, 390 behavior: "smooth" 391 }); 392 }); 393 $(".lines-button").on(click, function (e) { 394 e.preventDefault(); 395 $(this).toggleClass("x close"); 396 $("#top-menu").toggleClass("open"); 397 }); 398 $(".open-in-popup").click(function (event) { 399 event.preventDefault(); 400 event.stopPropagation(); 401 var $currentTarget = $(event.currentTarget); 402 var popupDataAttrs = $currentTarget.data(); 403 var $slide = $currentTarget.closest(".post-item"); 404 var $modal = $(popupDataAttrs.target); 405 $(popupDataAttrs.target).modal(); 406 var categoryHTML = $slide.find(".post-category").html(); 407 var title = $slide.find(".post-title").html(); 408 var subtitle = $slide.find(".post-subtitle").html(); 409 var details = $slide.find(".post-full-details").html(); 410 var image = $slide.find(".post-image-wrapp").html(); 411 var $modalBody = $modal.find(".modal-body"); 412 $modalBody.find(".image").html(image); 413 $modalBody.find(".title").html(title); 414 $modalBody.find(".subtitle").html(subtitle); 415 $modalBody.find(".details").html(details); 416 $modal.find(".modal-header").find(".modal-title").html(categoryHTML); 417 $modal.modal("handleUpdate"); 418 }); 419 new (venobox__WEBPACK_IMPORTED_MODULE_4___default())({ 420 selector: ".venobox", 421 autoplay: true 422 }); 423 } 424}); 425 426/***/ }), 427
428/***/ "./resources/assets/scripts/routes/home.js": 429/*!*************************************************!*\ 430 !*** ./resources/assets/scripts/routes/home.js ***! 431 \*************************************************/ 432/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 433 434"use strict"; 435__webpack_require__.r(__webpack_exports__); 436/* harmony export */ __webpack_require__.d(__webpack_exports__, { 437/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 438/* harmony export */ }); 439// import '../util/scrollToNextSection'; 440// import {animateOnScroll, animate} from "../utils/animate"; 441// import adjustStickyHeader from "../util/adjustStickyHeader"; 442 443/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 444 init: function init($) { 445 // JavaScript to be fired on the home page 446 }, 447 finalize: function finalize($) { 448 $(document); 449 } 450}); 451 452/***/ }), 453
454/***/ "./resources/assets/scripts/routes/projects.js": 455/*!*****************************************************!*\ 456 !*** ./resources/assets/scripts/routes/projects.js ***! 457 \*****************************************************/ 458/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 459 460"use strict"; 461__webpack_require__.r(__webpack_exports__); 462/* harmony export */ __webpack_require__.d(__webpack_exports__, { 463/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 464/* harmony export */ }); 465/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 466 init: function init() { 467 // JavaScript to be fired on the about page 468 }, 469 finalize: function finalize($) { 470 // JavaScript to be fired on the about page, after the init JS 471 $("#project-film-chooser").on('change', function (event) { 472 location.href = event.currentTarget.value; 473 }); 474 } 475}); 476 477/***/ }), 478
479/***/ "./resources/assets/scripts/routes/single.js": 480/*!***************************************************!*\ 481 !*** ./resources/assets/scripts/routes/single.js ***! 482 \***************************************************/ 483/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 484 485"use strict"; 486__webpack_require__.r(__webpack_exports__); 487/* harmony export */ __webpack_require__.d(__webpack_exports__, { 488/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 489/* harmony export */ }); 490/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 491 init: function init($) { 492 // JavaScript to be fired on the blog page 493 }, 494 finalize: function finalize($) { 495 // JavaScript to be fired on the blog page, after the init JS 496 var AddToAnyBlock = $('.addtoany_share_save_container.addtoany_content'); 497 if (AddToAnyBlock.length) { 498 $('.share-wrap').html(AddToAnyBlock); 499 } 500 } 501}); 502 503/***/ }), 504
505/***/ "./resources/assets/scripts/utils/Router.js": 506/*!**************************************************!*\ 507 !*** ./resources/assets/scripts/utils/Router.js ***! 508 \**************************************************/ 509/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 510 511"use strict"; 512__webpack_require__.r(__webpack_exports__); 513/* harmony export */ __webpack_require__.d(__webpack_exports__, { 514/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 515/* harmony export */ }); 516/* harmony import */ var _camelCase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./camelCase */ "./resources/assets/scripts/utils/camelCase.js"); 517function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } 518function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 519function _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, _toPropertyKey(descriptor.key), descriptor); } } 520function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 521function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } 522function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } 523 524 525/** 526 * DOM-based Routing 527 * 528 * Based on {@link http://goo.gl/EUTi53|Markup-based Unobtrusive Comprehensive DOM-ready Execution} by Paul Irish 529 * 530 * The routing fires all common scripts, followed by the page specific scripts. 531 * Add additional events for more control over timing e.g. a finalize event 532 */ 533var Router = /*#__PURE__*/function () { 534 /** 535 * Create a new Router 536 * @param {Object} routes 537 */ 538 function Router(routes) { 539 _classCallCheck(this, Router); 540 this.routes = routes; 541 } 542 543 /** 544 * Fire Router events 545 * @param {string} route DOM-based route derived from body classes (`<body class="...">`) 546 * @param {string} [event] Events on the route. By default, `init` and `finalize` events are called. 547 * @param {string} [arg] Any custom argument to be passed to the event. 548 */ 549 _createClass(Router, [{ 550 key: "fire", 551 value: function fire(route) { 552 var event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'init'; 553 var arg = arguments.length > 2 ? arguments[2] : undefined; 554 var classRoutes = arguments.length > 3 ? arguments[3] : undefined; 555 document.dispatchEvent(new CustomEvent('routed', { 556 bubbles: true, 557 detail: { 558 route: route, 559 fn: event 560 } 561 })); 562 var fire = route !== '' && this.routes[route] && typeof this.routes[route][event] === 'function'; 563 if (fire) { 564 this.routes[route][event](arg, classRoutes); 565 } 566 } 567 568 /** 569 * Automatically load and fire Router events 570 * 571 * Events are fired in the following order: 572 * * common init 573 * * page-specific init 574 * * page-specific finalize 575 * * common finalize 576 */ 577 }, { 578 key: "loadEvents", 579 value: function loadEvents(arg) { 580 var _this = this; 581 var classRoutes = document.body.className.toLowerCase().replace(/-/g, '_').split(/\s+/).map(_camelCase__WEBPACK_IMPORTED_MODULE_0__["default"]); 582 583 // Fire common init JS 584 this.fire('common', 'init', arg, classRoutes); 585 586 // Fire page-specific init JS, and then finalize JS
587 classRoutes.forEach(function (className) { 588 _this.fire(className, 'init', arg, classRoutes); 589 _this.fire(className, 'finalize', arg, classRoutes); 590 }); 591 592 // Fire common finalize JS 593 this.fire('common', 'finalize', arg, classRoutes); 594 } 595 }]); 596 return Router; 597}(); 598/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Router); 599 600/***/ }), 601
602/***/ "./resources/assets/scripts/utils/adjustMenus.js": 603/*!*******************************************************!*\ 604 !*** ./resources/assets/scripts/utils/adjustMenus.js ***! 605 \*******************************************************/ 606/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 607 608"use strict"; 609__webpack_require__.r(__webpack_exports__); 610/* harmony export */ __webpack_require__.d(__webpack_exports__, { 611/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 612/* harmony export */ }); 613/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 614/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 615 616/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function () { 617 var $ = (jquery__WEBPACK_IMPORTED_MODULE_0___default()); 618 var ddMenu = $('.menu-dropdown').not('#top-menu'); 619 // 1st level sub-menus 620 ddMenu.find('>.menu-item').each(function () { 621 if ($(this).hasClass('menu-item-has-children')) { 622 var _1stLevelSubMenu = $(this).find('>.sub-menu'); 623 if (_1stLevelSubMenu.length) { 624 var _1stLevelSubMenuOffset = _1stLevelSubMenu.offset().left + (_1stLevelSubMenu.outerWidth(true) + 5); 625 if (_1stLevelSubMenuOffset > $(window).width() && !_1stLevelSubMenu.attr('style')) { 626 _1stLevelSubMenu.css('left', $(window).width() - _1stLevelSubMenuOffset); 627 } 628 } 629 } 630 }); 631 632 // 2nd+ level sub-menus 633 ddMenu.find('>.menu-item>.sub-menu .sub-menu').each(function () { 634 var _2ndLevelSubMenu = $(this); 635 var parentSubmenu = _2ndLevelSubMenu.parents('.sub-menu'); 636 if (parentSubmenu.hasClass('sub-menus-on-left')) return; 637 var _2ndLevelSubMenuOffset = _2ndLevelSubMenu.offset().left + _2ndLevelSubMenu.outerWidth(true); 638 if (_2ndLevelSubMenuOffset > $(window).width()) { 639 parentSubmenu.addClass('sub-menus-on-left'); 640 } 641 }); 642}); 643 644/***/ }), 645
646/***/ "./resources/assets/scripts/utils/adjustStickyHeader.js": 647/*!**************************************************************!*\ 648 !*** ./resources/assets/scripts/utils/adjustStickyHeader.js ***! 649 \**************************************************************/ 650/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 651 652"use strict"; 653__webpack_require__.r(__webpack_exports__); 654/* harmony export */ __webpack_require__.d(__webpack_exports__, { 655/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 656/* harmony export */ }); 657/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 658/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 659 660/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (callback) { 661 var $ = (jquery__WEBPACK_IMPORTED_MODULE_0___default()); 662 var stickyHeader = $(".sticky-header"); 663 if (stickyHeader.length) { 664 //console.log(""); 665 $(".main-container").css("padding-top", stickyHeader.outerHeight(true)); 666 if (typeof callback == "function") { 667 callback(stickyHeader.outerHeight(true)); 668 } 669 } 670}); 671 672/***/ }), 673
674/***/ "./resources/assets/scripts/utils/animate.js": 675/*!***************************************************!*\ 676 !*** ./resources/assets/scripts/utils/animate.js ***! 677 \***************************************************/ 678/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 679 680"use strict"; 681__webpack_require__.r(__webpack_exports__); 682/* harmony export */ __webpack_require__.d(__webpack_exports__, { 683/* harmony export */ "animate": () => (/* binding */ animate), 684/* harmony export */ "animateOnScroll": () => (/* binding */ animateOnScroll) 685/* harmony export */ }); 686/* harmony import */ var scrollmonitor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! scrollmonitor */ "./node_modules/scrollmonitor/dist/module/index.js"); 687/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jquery */ "jquery"); 688/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_1__); 689/* harmony
689import */ var _pseudoStyle_jquery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./pseudoStyle.jquery */ "./resources/assets/scripts/utils/pseudoStyle.jquery.js"); 690/* harmony import */ var _pseudoStyle_jquery__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_pseudoStyle_jquery__WEBPACK_IMPORTED_MODULE_2__); 691 692 693 694var $ = (jquery__WEBPACK_IMPORTED_MODULE_1___default()); 695var isAnyPartInViewport = function isAnyPartInViewport(element) { 696 var top = element.offsetTop; 697 var left = element.offsetLeft; 698 var width = element.offsetWidth; 699 var height = element.offsetHeight; 700 while (element.offsetParent) { 701 element = element.offsetParent; 702 top += element.offsetTop; 703 left += element.offsetLeft; 704 } 705 return top < window.pageYOffset + window.innerHeight && left < window.pageXOffset + window.innerWidth && top + height > window.pageYOffset && left + width > window.pageXOffset; 706}; 707var parseAnimation = function parseAnimation($element) { 708 var params = $element.data("animate") || ":,"; 709 var animation = params.split(":")[0] || ""; 710 var dd = params.split(":")[1] || ""; 711 var duration = dd.split(",")[0] || null; 712 var delay = dd.split(",")[1] || null; 713 var once = !!(dd.split(",")[2] || false); 714 return { 715 animation: animation, 716 duration: duration, 717 delay: delay, 718 once: once 719 }; 720}; 721var toMs = function toMs(s) { 722 return parseFloat(s) * (/\ds$/.test(s) ? 1000 : 1); 723}; 724var animateElement = function animateElement($element, once, instant) { 725 if ($element.hasClass("animation-end")) return; 726 var _parseAnimation = parseAnimation($element), 727 animation = _parseAnimation.animation, 728 duration = _parseAnimation.duration,
729 delay = _parseAnimation.delay, 730 _once = _parseAnimation._once; 731 delay = instant ? false : delay; 732 var isPseudo = animation.match(/pseudo/i); 733 var cssObj = {}; 734 if (duration) cssObj["animation-duration"] = duration; 735 if (delay) cssObj["animation-delay"] = delay; 736 if (isPseudo) { 737 cssObj["animation-fill-mode"] = "both"; 738 $element.addClass("animated ".concat(animation)); 739 $element.psBeforeAfter(cssObj); 740 } else { 741 cssObj["animation-fill-mode"] = "both"; 742 $element.addClass("animated ".concat(animation)); 743 $element.css(cssObj); 744 } 745 once = _once || once; 746 if (duration || delay) { 747 var off = toMs(duration); 748 off += delay ? toMs(delay) : 0; 749 setTimeout(function ($element, animation) { 750 return function () { 751 if (!isPseudo) { 752 $element.css({ 753 "animation-duration": "", 754 "animation-delay": "" 755 }); //.removeClass(`${animation}`); 756 757 if (once === true) { 758 $element.removeAttr("data-animate").removeClass("animated").addClass("animation-end"); 759 // .removeClass(`${animation}`); 760 } 761 } 762 }; 763 }($element, animation), off + 10); 764 } 765}; 766var makeWatcherOrAnimate = function makeWatcherOrAnimate(element, once) { 767 once = once === undefined ? true : once; 768 var watcher = scrollmonitor__WEBPACK_IMPORTED_MODULE_0__["default"].create(element); 769 if (isAnyPartInViewport(element)) { 770 animateElement($(element), once); 771 } 772 watcher.stateChange(function () { 773 var $element = $(this.watchItem); 774 var instant = true; 775 if (this.isInViewport) { 776 animateElement($element, once, instant); 777 } else if (this.isAboveViewport || this.isBelowViewport) { 778 // if (!once) { 779 // $element.removeClass(`animated ${animation}`) 780 // .removeAttr('style') 781 // .removeAttr('data-animate'); 782 // } 783 } 784 }); 785 return watcher; 786}; 787var animateOnScroll = function animateOnScroll($elements) { 788 $elements.each(function () { 789 makeWatcherOrAnimate($(this)[0]); 790 }); 791}; 792var animate = function animate($elements, once) { 793 $elements.each(function () { 794 animateElement($(this), once); 795 }); 796}; 797 798 799/***/ }), 800
801/***/ "./resources/assets/scripts/utils/camelCase.js": 802/*!*****************************************************!*\ 803 !*** ./resources/assets/scripts/utils/camelCase.js ***! 804 \*****************************************************/ 805/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 806 807"use strict"; 808__webpack_require__.r(__webpack_exports__); 809/* harmony export */ __webpack_require__.d(__webpack_exports__, { 810/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 811/* harmony export */ }); 812/** 813 * the most terrible camelizer on the internet, guaranteed! 814 * @param {string} str String that isn't camel-case, e.g., CAMeL_CaSEiS-harD 815 * @return {string} String converted to camel-case, e.g., camelCaseIsHard 816 */ 817/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (str) { 818 return "".concat(str.charAt(0).toLowerCase()).concat(str.replace(/[\W_]/g, '|').split('|').map(function (part) { 819 return "".concat(part.charAt(0).toUpperCase()).concat(part.slice(1)); 820 }).join('').slice(1)); 821}); 822 823/***/ }), 824
825/***/ "./resources/assets/scripts/utils/pseudoStyle.jquery.js": 826/*!**************************************************************!*\ 827 !*** ./resources/assets/scripts/utils/pseudoStyle.jquery.js ***! 828 \**************************************************************/ 829/***/ ((module, exports, __webpack_require__) => { 830 831var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } 832function _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."); } 833function _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); } 834function _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; } 835function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } } 836function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } 837function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } 838(function (factory) { 839 if (true) { 840 // AMD 841 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "jquery")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), 842 __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? 843 (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), 844 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 845 } else {} 846})(function ($) { 847 var UID = { 848 _current: 0, 849 getNew: function getNew() { 850 this._current++; 851 return this._current; 852 } 853 }; 854 var pseudoStyle = function pseudoStyle(element, pseudo, cssPropsObject, options) { 855 var settings = $.extend({ 856 // append : false 857 }, options); 858 if (Object.keys(cssPropsObject).length === 0 && cssPropsObject.constructor === Object) return this; 859 var _this = element; 860 var pseudoId = _this.getAttribute('data-pseudo-id') || UID.getNew(); 861 var _sheetId = "pseudoStyles".concat(pseudoId); 862 var _head = document.head || document.getElementsByTagName('head')[0]; 863 var _sheet = document.getElementById(_sheetId) || document.createElement('style'); 864 _sheet.id = _sheetId; 865 var selector = "[data-pseudo-id=\"".concat(pseudoId, "\"]"); 866 _this.setAttribute('data-pseudo-id', pseudoId); 867 if (pseudo === 'both') { 868 _sheet.innerHTML = "".concat(selector, ":before,").concat(selector, ":after{"); 869 } else { 870 _sheet.innerHTML = "".concat(selector, ":").concat(pseudo, "{"); 871 } 872 var hasContent = false; 873 for (var _i = 0, _Object$entries = Object.entries(cssPropsObject); _i < _Object$entries.length; _i++) { 874 var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), 875 prop = _Object$entries$_i[0], 876 value = _Object$entries$_i[1]; 877 _sheet.innerHTML += "".concat(prop, ":").concat(value, ";"); 878 if (prop == 'content') { 879 hasContent = true; 880 } 881 } 882 if (!hasContent) { 883 _sheet.innerHTML += "content:'';"; 884 } 885 _sheet.innerHTML += "}"; 886 _head.appendChild(_sheet); 887 return this; 888 }; 889 $.fn.psBeforeAfter = function (cssPropsObject, options) { 890 return this.each(function () { 891 pseudoStyle(this, 'both', cssPropsObject, options); 892 }); 893 return this; 894 }; 895 $.fn.psBefore = function (cssPropsObject, options) { 896 return this.each(function () { 897 pseudoStyle(this, 'before', cssPropsObject, options); 898 }); 899 return this; 900 }; 901 $.fn.psAfter = function (cssPropsObject, options) { 902 return this.each(function () { 903 pseudoStyle(this, 'after', cssPropsObject, options); 904 }); 905 return this; 906 }; 907}); 908 909/***/ }), 910 911/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLo
911ader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true&": 912/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ 913 !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true& ***! 914 \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ 915/***/ ((module, __webpack_exports__, __webpack_require__) => { 916 917"use strict"; 918__webpack_require__.r(__webpack_exports__); 919/* harmony export */ __webpack_require__.d(__webpack_exports__, { 920/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 921/* harmony export */ }); 922/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js"); 923/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__); 924// Imports 925 926var ___CSS_LOADER_EXPORT___ = _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]}); 927// Module 928___CSS_LOADER_EXPORT___.push([module.id, ".background-slider .slide-item[data-v-e19de8a6], .background-slider[data-v-e19de8a6]:after, .background-slider[data-v-e19de8a6] {\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n position: absolute;\n}\n.background-slider[data-v-e19de8a6] {\n z-index: 0;\n}\n.background-slider[data-v-e19de8a6]:after {\n content: \"\";\n z-index: -1;\n background-color: #000;\n}\n.background-slider .slide-item[data-v-e19de8a6] {\n opacity: 0;\n z-index: 0;\n transition: opacity 1.5s;\n background-size: cover;\n background-repeat: no-repeat;\n background-position: 50% 50%;\n}\n.background-slider .slide-item.showing[data-v-e19de8a6] {\n opacity: 0.7;\n z-index: 1;\n}", ""]); 929// Exports 930/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); 931 932 933/***/ }), 934
935/***/ "./resources/assets/styles/app.scss": 936/*!******************************************!*\ 937 !*** ./resources/assets/styles/app.scss ***! 938 \******************************************/ 939/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 940 941"use strict"; 942__webpack_require__.r(__webpack_exports__); 943// extracted by mini-css-extract-plugin 944 945 946/***/ }), 947
948/***/ "./resources/assets/styles/editor-styles.scss": 949/*!****************************************************!*\ 950 !*** ./resources/assets/styles/editor-styles.scss ***! 951 \****************************************************/ 952/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 953 954"use strict"; 955__webpack_require__.r(__webpack_exports__); 956// extracted by mini-css-extract-plugin 957 958 959/***/ }), 960 961/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true&": 962/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ 963 !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true& ***! 964 \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ 965/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 966 967"use strict"; 968__webpack_require__.r(__webpack_exports__); 969/* harmony export */ __webpack_require__.d(__webpack_exports__, { 970/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 971/* harmony export */ }); 972/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); 973/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); 974/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_13_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_13_use_3_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_style_index_0_id_e19de8a6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!../../../../node_modules/vue-loader/lib/loaders/stylePostLo
974ader.js!../../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!../../../../node_modules/webpack-import-glob-loader/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true& */ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true&"); 975 976 977 978var options = {}; 979 980options.insert = "head"; 981options.singleton = false; 982 983var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_13_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_13_use_3_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_style_index_0_id_e19de8a6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_1__["default"], options); 984 985 986 987/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_13_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_13_use_3_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_style_index_0_id_e19de8a6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_1__["default"].locals || {}); 988 989/***/ }), 990
vendor: 7,200 bytes, lines 991-1269
991/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": 992/*!****************************************************************************!*\ 993 !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! 994 \****************************************************************************/ 995/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 996 997"use strict"; 998 999 1000var isOldIE = function isOldIE() { 1001 var memo; 1002 return function memorize() { 1003 if (typeof memo === 'undefined') { 1004 // Test for IE <= 9 as proposed by Browserhacks 1005 // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 1006 // Tests for existence of standard globals is to allow style-loader 1007 // to operate correctly into non-standard environments 1008 // @see https://github.com/webpack-contrib/style-loader/issues/177 1009 memo = Boolean(window && document && document.all && !window.atob); 1010 } 1011 1012 return memo; 1013 }; 1014}(); 1015 1016var getTarget = function getTarget() { 1017 var memo = {}; 1018 return function memorize(target) { 1019 if (typeof memo[target] === 'undefined') { 1020 var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself 1021 1022 if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { 1023 try { 1024 // This will throw an exception if access to iframe is blocked 1025 // due to cross-origin restrictions 1026 styleTarget = styleTarget.contentDocument.head; 1027 } catch (e) { 1028 // istanbul ignore next 1029 styleTarget = null; 1030 } 1031 } 1032 1033 memo[target] = styleTarget; 1034 } 1035 1036 return memo[target]; 1037 }; 1038}(); 1039 1040var stylesInDom = []; 1041 1042function getIndexByIdentifier(identifier) { 1043 var result = -1; 1044 1045 for (var i = 0; i < stylesInDom.length; i++) { 1046 if (stylesInDom[i].identifier === identifier) { 1047 result = i; 1048 break; 1049 } 1050 } 1051 1052 return result; 1053} 1054 1055function modulesToDom(list, options) { 1056 var idCountMap = {}; 1057 var identifiers = []; 1058 1059 for (var i = 0; i < list.length; i++) { 1060 var item = list[i]; 1061 var id = options.base ? item[0] + options.base : item[0]; 1062 var count = idCountMap[id] || 0; 1063 var identifier = "".concat(id, " ").concat(count); 1064 idCountMap[id] = count + 1; 1065 var index = getIndexByIdentifier(identifier); 1066 var obj = { 1067 css: item[1], 1068 media: item[2], 1069 sourceMap: item[3] 1070 }; 1071 1072 if (index !== -1) { 1073 stylesInDom[index].references++; 1074 stylesInDom[index].updater(obj); 1075 } else { 1076 stylesInDom.push({ 1077 identifier: identifier, 1078 updater: addStyle(obj, options), 1079 references: 1 1080 }); 1081 } 1082 1083 identifiers.push(identifier); 1084 } 1085 1086 return identifiers; 1087} 1088 1089function insertStyleElement(options) { 1090 var style = document.createElement('style'); 1091 var attributes = options.attributes || {}; 1092 1093 if (typeof attributes.nonce === 'undefined') { 1094 var nonce = true ? __webpack_require__.nc : 0; 1095 1096 if (nonce) { 1097 attributes.nonce = nonce; 1098 } 1099 } 1100 1101 Object.keys(attributes).forEach(function (key) { 1102 style.setAttribute(key, attributes[key]); 1103 }); 1104 1105 if (typeof options.insert === 'function') { 1106 options.insert(style); 1107 } else { 1108 var target = getTarget(options.insert || 'head'); 1109 1110 if (!target) { 1111 throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); 1112 } 1113 1114 target.appendChild(style); 1115 } 1116 1117 return style; 1118} 1119 1120function removeStyleElement(style) { 1121 // istanbul ignore if 1122 if (style.parentNode === null) { 1123 return false; 1124 } 1125 1126 style.parentNode.removeChild(style); 1127} 1128/* istanbul ignore next */ 1129 1130 1131var replaceText = function replaceText() { 1132 var textStore = []; 1133 return function replace(index, replacement) { 1134 textStore[index] = replacement; 1135 return textStore.filter(Boolean).join('\n'); 1136 }; 1137}(); 1138 1139function applyToSingletonTag(style, index, remove, obj) { 1140 var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE 1141 1142 /* istanbul ignore if */ 1143 1144 if (style.styleSheet) { 1145 style.styleSheet.cssText = replaceText(index, css); 1146 } else { 1147 var cssNode = document.createTextNode(css); 1148 var childNodes = style.childNodes; 1149 1150 if (childNodes[index]) { 1151 style.removeChild(childNodes[index]); 1152 } 1153 1154 if (childNodes.length) { 1155 style.insertBefore(cssNode, childNodes[index]); 1156 } else { 1157 style.appendChild(cssNode); 1158 } 1159 } 1160} 1161 1162function applyToTag(style, options, obj) { 1163 var css = obj.css; 1164 var media = obj.media; 1165 var sourceMap = obj.sourceMap; 1166 1167 if (media) { 1168 style.setAttribute('media', media); 1169 } else { 1170 style.removeAttribute('media'); 1171 } 1172 1173 if (sourceMap && typeof btoa !== 'undefined') { 1174 css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); 1175 } // For old IE 1176 1177 /* istanbul ignore if */ 1178 1179 1180 if (style.styleSheet) { 1181 style.styleSheet.cssText = css; 1182 } else { 1183 while (style.firstChild) { 1184 style.removeChild(style.firstChild); 1185 } 1186 1187 style.appendChild(document.createTextNode(css)); 1188 } 1189} 1190 1191var singleton = null; 1192var singletonCounter = 0; 1193 1194function addStyle(obj, options) { 1195 var style; 1196 var update; 1197 var remove; 1198 1199 if (options.singleton) { 1200 var styleIndex = singletonCounter++; 1201 style = singleton || (singleton = insertStyleElement(options)); 1202 update = applyToSingletonTag.bind(null, style, styleIndex, false); 1203 remove = applyToSingletonTag.bind(null, style, styleIndex, true); 1204 } else { 1205 style = insertStyleElement(options); 1206 update = applyToTag.bind(null, style, options); 1207 1208 remove = function remove() { 1209 removeStyleElement(style); 1210 }; 1211 } 1212 1213 update(obj); 1214 return function updateStyle(newObj) { 1215 if (newObj) { 1216 if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) { 1217 return; 1218 } 1219 1220 update(obj = newObj); 1221 } else { 1222 remove(); 1223 } 1224 }; 1225} 1226 1227module.exports = function (list, options) { 1228 options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style> 1229 // tags it will allow on a page 1230 1231 if (!options.singleton && typeof options.singleton !== 'boolean') { 1232 options.singleton = isOldIE(); 1233 } 1234 1235 list = list || []; 1236 var lastIdentifiers = modulesToDom(list, options); 1237 return function update(newList) { 1238 newList = newList || []; 1239 1240 if (Object.prototype.toString.call(newList) !== '[object Array]') { 1241 return; 1242 } 1243 1244 for (var i = 0; i < lastIdentifiers.length; i++) { 1245 var identifier = lastIdentifiers[i]; 1246 var index = getIndexByIdentifier(identifier); 1247 stylesInDom[index].references--; 1248 } 1249 1250 var newLastIdentifiers = modulesToDom(newList, options); 1251 1252 for (var _i = 0; _i < lastIdentifiers.length; _i++) { 1253 var _identifier = lastIdentifiers[_i]; 1254 1255 var _index = getIndexByIdentifier(_identifier); 1256 1257 if (stylesInDom[_index].references === 0) { 1258 stylesInDom[_index].updater(); 1259 1260 stylesInDom.splice(_index, 1); 1261 } 1262 } 1263 1264 lastIdentifiers = newLastIdentifiers; 1265 }; 1266}; 1267 1268/***/ }), 1269
1270/***/ "./resources/assets/scripts/components/backgroundSlider.vue": 1271/*!******************************************************************!*\ 1272 !*** ./resources/assets/scripts/components/backgroundSlider.vue ***! 1273 \******************************************************************/ 1274/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1275 1276"use strict"; 1277__webpack_require__.r(__webpack_exports__); 1278/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1279/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 1280/* harmony export */ }); 1281/* harmony import */ var _backgroundSlider_vue_vue_type_template_id_e19de8a6_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true& */ "./resources/assets/scripts/components/backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true&"); 1282/* harmony import */ var _backgroundSlider_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./backgroundSlider.vue?vue&type=script&lang=js& */ "./resources/assets/scripts/components/backgroundSlider.vue?vue&type=script&lang=js&"); 1283/* harmony import */ var _backgroundSlider_vue_vue_type_style_index_0_id_e19de8a6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true& */ "./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true&"); 1284/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); 1285 1286 1287 1288; 1289 1290 1291/* normalize component */ 1292 1293var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])( 1294 _backgroundSlider_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], 1295 _backgroundSlider_vue_vue_type_template_id_e19de8a6_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render, 1296 _backgroundSlider_vue_vue_type_template_id_e19de8a6_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns, 1297 false, 1298 null, 1299 "e19de8a6", 1300 null 1301 1302) 1303 1304/* hot reload */ 1305if (false) { var api; } 1306component.options.__file = "resources/assets/scripts/components/backgroundSlider.vue" 1307/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports); 1308 1309/***/ }), 1310 1311/***/ "./resources/assets/scripts/components/backgroundSlider.vue?vue&type=script&lang=js&": 1312/*!*******************************************************************************************!*\ 1313 !*** ./resources/assets/scripts/components/backgroundSlider.vue?vue&type=script&lang=js& ***! 1314 \*******************************************************************************************/ 1315/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1316 1317"use strict"; 1318__webpack_require__.r(__webpack_exports__); 1319/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1320/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 1321/* harmony export */ }); 1322/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/webpack-import-glob-loader/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backgroundSlider.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=script&lang=js&"); 1323 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); 1324 1325/***/ }), 1326 1327/***/ "./resources/assets/scripts/components/backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true&": 1328/*!*************************************************************************************************************!*\ 1329 !*** ./resources/assets/scripts/components/backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true& ***! 1330 \*************************************************************************************************************/ 1331/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1332 1333"use strict"; 1334__webpack_require__.r(__webpack_exports__); 1335/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1336/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_template_id_e19de8a6_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render), 1337/* harmony export */ "staticRenderFns": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_template_id_e19de8a6_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns) 1338/* harmony export */ }); 1339/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_template_id_e19de8a6_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/webpack-import-glob-loader/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=template&id=e19de8a6&scoped=true&"); 1340 1341 1342/***/ }), 1343 1344/***/ "./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true&": 1345/*!****************************************************************************************************************************!*\ 1346 !*** ./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true& ***! 1347 \****************************************************************************************************************************/ 1348/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1349 1350"use strict"; 1351__webpack_require__.r(__webpack_exports__); 1352/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_13_use_1_node_modules_vue_loader_lib_loaders_stylePostLo
1352ader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_13_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_13_use_3_node_modules_webpack_import_glob_loader_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_backgroundSlider_vue_vue_type_style_index_0_id_e19de8a6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!../../../../node_modules/webpack-import-glob-loader/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/webpack-import-glob-loader/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/assets/scripts/components/backgroundSlider.vue?vue&type=style&index=0&id=e19de8a6&lang=scss&scoped=true&"); 1353 1354 1355/***/ }), 1356
vendor: 3,357 bytes, lines 1357-1467
1357/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js": 1358/*!********************************************************************!*\ 1359 !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***! 1360 \********************************************************************/ 1361/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1362 1363"use strict"; 1364__webpack_require__.r(__webpack_exports__); 1365/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1366/* harmony export */ "default": () => (/* binding */ normalizeComponent) 1367/* harmony export */ }); 1368/* globals __VUE_SSR_CONTEXT__ */ 1369 1370// IMPORTANT: Do NOT use ES2015 features in this file (except for modules). 1371// This module is a runtime utility for cleaner component module output and will 1372// be included in the final webpack user bundle. 1373 1374function normalizeComponent( 1375 scriptExports, 1376 render, 1377 staticRenderFns, 1378 functionalTemplate, 1379 injectStyles, 1380 scopeId, 1381 moduleIdentifier /* server only */, 1382 shadowMode /* vue-cli only */ 1383) { 1384 // Vue.extend constructor export interop 1385 var options = 1386 typeof scriptExports === 'function' ? scriptExports.options : scriptExports 1387 1388 // render functions 1389 if (render) { 1390 options.render = render 1391 options.staticRenderFns = staticRenderFns 1392 options._compiled = true 1393 } 1394 1395 // functional template 1396 if (functionalTemplate) { 1397 options.functional = true 1398 } 1399 1400 // scopedId 1401 if (scopeId) { 1402 options._scopeId = 'data-v-' + scopeId 1403 } 1404 1405 var hook 1406 if (moduleIdentifier) { 1407 // server build 1408 hook = function (context) { 1409 // 2.3 injection 1410 context = 1411 context || // cached call 1412 (this.$vnode && this.$vnode.ssrContext) || // stateful 1413 (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional 1414 // 2.2 with runInNewContext: true 1415 if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { 1416 context = __VUE_SSR_CONTEXT__ 1417 } 1418 // inject component styles 1419 if (injectStyles) { 1420 injectStyles.call(this, context) 1421 } 1422 // register component module identifier for async chunk inferrence 1423 if (context && context._registeredComponents) { 1424 context._registeredComponents.add(moduleIdentifier) 1425 } 1426 } 1427 // used by ssr in case component is cached and beforeCreate 1428 // never gets called 1429 options._ssrRegister = hook 1430 } else if (injectStyles) { 1431 hook = shadowMode 1432 ? function () { 1433 injectStyles.call( 1434 this, 1435 (options.functional ? this.parent : this).$root.$options.shadowRoot 1436 ) 1437 } 1438 : injectStyles 1439 } 1440 1441 if (hook) { 1442 if (options.functional) { 1443 // for template-only hot-reload because in that case the render fn doesn't 1444 // go through the normalizer 1445 options._injectStyles = hook 1446 // register for functional component in vue file 1447 var originalRender = options.render 1448 options.render = function renderWithStyleInjection(h, context) { 1449 hook.call(context) 1450 return originalRender(h, context) 1451 } 1452 } else { 1453 // inject component registration as beforeCreate hook 1454 var existing = options.beforeCreate 1455 options.beforeCreate = existing ? [].concat(existing, hook) : [hook] 1456 } 1457 } 1458 1459 return { 1460 exports: scriptExports, 1461 options: options 1462 } 1463} 1464 1465 1466/***/ }), 1467
vendor: 22,936 bytes, lines 1468-2139
1468/***/ "./node_modules/bootstrap/js/dist/modal.js": 1469/*!*************************************************!*\ 1470 !*** ./node_modules/bootstrap/js/dist/modal.js ***! 1471 \*************************************************/ 1472/***/ (function(module, __unused_webpack_exports, __webpack_require__) { 1473 1474/*! 1475 * Bootstrap modal.js v4.6.2 (https://getbootstrap.com/) 1476 * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 1477 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1478 */ 1479(function (global, factory) { 1480 true ? module.exports = factory(__webpack_require__(/*! jquery */ "jquery"), __webpack_require__(/*! ./util.js */ "./node_modules/bootstrap/js/dist/util.js")) : 1481 0; 1482})(this, (function ($, Util) { 'use strict'; 1483 1484 function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } 1485 1486 var $__default = /*#__PURE__*/_interopDefaultLegacy($); 1487 var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util); 1488 1489 function _defineProperties(target, props) { 1490 for (var i = 0; i < props.length; i++) { 1491 var descriptor = props[i]; 1492 descriptor.enumerable = descriptor.enumerable || false; 1493 descriptor.configurable = true; 1494 if ("value" in descriptor) descriptor.writable = true; 1495 Object.defineProperty(target, descriptor.key, descriptor); 1496 } 1497 } 1498 1499 function _createClass(Constructor, protoProps, staticProps) { 1500 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 1501 if (staticProps) _defineProperties(Constructor, staticProps); 1502 Object.defineProperty(Constructor, "prototype", { 1503 writable: false 1504 }); 1505 return Constructor; 1506 } 1507 1508 function _extends() { 1509 _extends = Object.assign ? Object.assign.bind() : function (target) { 1510 for (var i = 1; i < arguments.length; i++) { 1511 var source = arguments[i]; 1512 1513 for (var key in source) { 1514 if (Object.prototype.hasOwnProperty.call(source, key)) { 1515 target[key] = source[key]; 1516 } 1517 } 1518 } 1519 1520 return target; 1521 }; 1522 return _extends.apply(this, arguments); 1523 } 1524 1525 /** 1526 * Constants 1527 */ 1528 1529 var NAME = 'modal'; 1530 var VERSION = '4.6.2'; 1531 var DATA_KEY = 'bs.modal'; 1532 var EVENT_KEY = "." + DATA_KEY; 1533 var DATA_API_KEY = '.data-api'; 1534 var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME]; 1535 var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key 1536 1537 var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'; 1538 var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'; 1539 var CLASS_NAME_BACKDROP = 'modal-backdrop'; 1540 var CLASS_NAME_OPEN = 'modal-open'; 1541 var CLASS_NAME_FADE = 'fade'; 1542 var CLASS_NAME_SHOW = 'show'; 1543 var CLASS_NAME_STATIC = 'modal-static'; 1544 var EVENT_HIDE = "hide" + EVENT_KEY; 1545 var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY; 1546 var EVENT_HIDDEN = "hidden" + EVENT_KEY; 1547 var EVENT_SHOW = "show" + EVENT_KEY; 1548 var EVENT_SHOWN = "shown" + EVENT_KEY; 1549 var EVENT_FOCUSIN = "focusin" + EVENT_KEY; 1550 var EVENT_RESIZE = "resize" + EVENT_KEY; 1551 var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY; 1552 var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY; 1553 var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY; 1554 var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY; 1555 var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY; 1556 var SELECTOR_DIALOG = '.modal-dialog'; 1557 var SELECTOR_MODAL_BODY = '.modal-body'; 1558 var SELECTOR_DATA_TOGGLE = '[data-toggle="modal"]'; 1559 var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]'; 1560 var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; 1561 var SELECTOR_STICKY_CONTENT = '.sticky-top'; 1562 var Default = { 1563 backdrop: true, 1564 keyboard: true, 1565 focus: true, 1566 show: true 1567 }; 1568 var DefaultType = { 1569 backdrop: '(boolean|string)', 1570 keyboard: 'boolean', 1571 focus: 'boolean', 1572 show: 'boolean' 1573 }; 1574 /** 1575 * Class definition 1576 */ 1577 1578 var Modal = /*#__PURE__*/function () { 1579 function Modal(element, config) { 1580 this._config = this._getConfig(config); 1581 this._element = element; 1582 this._dialog = element.querySelector(SELECTOR_DIALOG); 1583 this._backdrop = null; 1584 this._isShown = false; 1585 this._isBodyOverflowing = false; 1586 this._ignoreBackdropClick = false; 1587 this._isTransitioning = false; 1588 this._scrollbarWidth = 0; 1589 } // Getters 1590 1591 1592 var _proto = Modal.prototype; 1593 1594 // Public 1595 _proto.toggle = function toggle(relatedTarget) { 1596 return this._isShown ? this.hide() : this.show(relatedTarget); 1597 }; 1598 1599 _proto.show = function show(relatedTarget) { 1600 var _this = this; 1601 1602 if (this._isShown || this._isTransitioning) { 1603 return; 1604 } 1605 1606 var showEvent = $__default["default"].Event(EVENT_SHOW, { 1607 relatedTarget: relatedTarget 1608 }); 1609 $__default["default"](this._element).trigger(showEvent); 1610 1611 if (showEvent.isDefaultPrevented()) { 1612 return; 1613 } 1614 1615 this._isShown = true; 1616 1617 if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE)) { 1618 this._isTransitioning = true; 1619 } 1620 1621 this._checkScrollbar(); 1622 1623 this._setScrollbar(); 1624 1625 this._adjustDialog(); 1626 1627 this._setEscapeEvent(); 1628 1629 this._setResizeEvent(); 1630 1631 $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) { 1632 return _this.hide(event); 1633 }); 1634 $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () { 1635 $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) { 1636 if ($__default["default"](event.target).is(_this._element)) { 1637 _this._ignoreBackdropClick = true; 1638 } 1639 }); 1640 }); 1641 1642 this._showBackdrop(function () { 1643 return _this._showElement(relatedTarget); 1644 }); 1645 }; 1646 1647 _proto.hide = function hide(event) { 1648 var _this2 = this; 1649 1650 if (event) { 1651 event.preventDefault(); 1652 } 1653 1654 if (!this._isShown || this._isTransitioning) { 1655 return; 1656 } 1657 1658 var hideEvent = $__default["default"].Event(EVENT_HIDE); 1659 $__default["default"](this._element).trigger(hideEvent); 1660 1661 if (!this._isShown || hideEvent.isDefaultPrevented()) { 1662 return; 1663 } 1664 1665 this._isShown = false; 1666 var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE); 1667 1668 if (transition) { 1669 this._isTransitioning = true; 1670 } 1671 1672 this._setEscapeEvent(); 1673 1674 this._setResizeEvent(); 1675 1676 $__default["default"](document).off(EVENT_FOCUSIN); 1677 $__default["default"](this._element).removeClass(CLASS_NAME_SHOW); 1678 $__default["default"](this._element).off(EVENT_CLICK_DISMISS); 1679 $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS); 1680 1681 if (transition) { 1682 var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._element); 1683 $__default["default"](this._element).one(Util__default["default"].TRANSITION_END, function (event) { 1684 return _this2._hideModal(event); 1685 }).emulateTransitionEnd(transitionDuration); 1686 } else { 1687 this._hideModal(); 1688 } 1689 }; 1690 1691 _proto.dispose = function dispose() { 1692 [window, this._element, this._dialog].forEach(function (htmlElement) { 1693 return $__default["default"](htmlElement).off(EVENT_KEY); 1694 }); 1695 /** 1696 * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API` 1697 * Do not move `document` in `htmlElements` array 1698 * It will remove `EVENT_CLICK_DATA_API` event that should remain 1699 */ 1700 1701 $__default["default"](document).off(EVENT_FOCUSIN); 1702 $__default["default"].removeData(this._element, DATA_KEY); 1703 this._config = null; 1704 this._element = null; 1705 this._dialog = null; 1706 this._backdrop = null; 1707 this._isShown = null; 1708 this._isBodyOverflowing = null; 1709 this._ignoreBackdropClick = null; 1710 this._isTransitioning = null; 1711 this._scrollbarWidth = null; 1712 }; 1713 1714 _proto.handleUpdate = function handleUpdate() { 1715 this._adjustDialog(); 1716 } // Private 1717 ; 1718 1719 _proto._getConfig = function _getConfig(config) { 1720 config = _extends({}, Default, config); 1721 Util__default["default"].typeCheckConfig(NAME, config, DefaultType); 1722 return config; 1723 }; 1724 1725 _proto._triggerBackdropTransition = function _triggerBackdropTransition() { 1726 var _this3 = this; 1727 1728 var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED); 1729 $__default["default"](this._element).trigger(hideEventPrevented); 1730 1731 if (hideEventPrevented.isDefaultPrevented()) { 1732 return; 1733 } 1734 1735 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 1736 1737 if (!isModalOverflowing) { 1738 this._element.style.overflowY = 'hidden'; 1739 } 1740 1741 this._element.classList.add(CLASS_NAME_STATIC); 1742 1743 var modalTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._dialog); 1744 $__default["default"](this._element).off(Util__default["default"].TRANSITION_END); 1745 $__default["default"](this._element).one(Util__default["default"].TRANSITION_END, function () { 1746 _this3._element.classList.remove(CLASS_NAME_STATIC); 1747 1748 if (!isModalOverflowing) { 1749 $__default["default"](_this3._element).one(Util__default["default"].TRANSITION_END, function () { 1750 _this3._element.style.overflowY = ''; 1751 }).emulateTransitionEnd(_this3._element, modalTransitionDuration); 1752 } 1753 }).emulateTransitionEnd(modalTransitionDuration); 1754 1755 this._element.focus(); 1756 }; 1757 1758 _proto._showElement = function _showElement(relatedTarget) { 1759 var _this4 = this; 1760 1761 var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE); 1762 var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null; 1763 1764 if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { 1765 // Don't move modal's DOM position 1766 document.body.appendChild(this._element); 1767 } 1768 1769 this._element.style.display = 'block'; 1770 1771 this._element.removeAttribute('aria-hidden'); 1772 1773 this._element.setAttribute('aria-modal', true); 1774 1775 this._element.setAttribute('role', 'dialog'); 1776 1777 if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) { 1778 modalBody.scrollTop = 0; 1779 } else { 1780 this._element.scrollTop = 0; 1781 } 1782 1783 if (transition) { 1784 Util__default["default"].reflow(this._element); 1785 } 1786 1787 $__default["default"](this._element).addClass(CLASS_NAME_SHOW); 1788 1789 if (this._config.focus) { 1790 this._enforceFocus(); 1791 } 1792 1793 var shownEvent = $__default["default"].Event(EVENT_SHOWN, { 1794 relatedTarget: relatedTarget 1795 }); 1796 1797 var transitionComplete = function transitionComplete() { 1798 if (_this4._config.focus) { 1799 _this4._element.focus(); 1800 } 1801 1802 _this4._isTransitioning = false; 1803 $__default["default"](_this4._element).trigger(shownEvent); 1804 }; 1805 1806 if (transition) { 1807 var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._dialog); 1808 $__default["default"](this._dialog).one(Util__default["default"].TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); 1809 } else { 1810 transitionComplete(); 1811 } 1812 }; 1813 1814 _proto._enforceFocus = function _enforceFocus() { 1815 var _this5 = this; 1816 1817 $__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop 1818 .on(EVENT_FOCUSIN, function (event) { 1819 if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) { 1820 _this5._element.focus(); 1821 } 1822 }); 1823 }; 1824 1825 _proto._setEscapeEvent = function _setEscapeEvent() { 1826 var _this6 = this; 1827 1828 if (this._isShown) { 1829 $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) { 1830 if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) { 1831 event.preventDefault(); 1832 1833 _this6.hide(); 1834 } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) { 1835 _this6._triggerBackdropTransition(); 1836 } 1837 }); 1838 } else if (!this._isShown) { 1839 $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS); 1840 } 1841 }; 1842 1843 _proto._setResizeEvent = function _setResizeEvent() { 1844 var _this7 = this; 1845 1846 if (this._isShown) { 1847 $__default["default"](window).on(EVENT_RESIZE, function (event) { 1848 return _this7.handleUpdate(event); 1849 }); 1850 } else { 1851 $__default["default"](window).off(EVENT_RESIZE); 1852 } 1853 }; 1854 1855 _proto._hideModal = function _hideModal() { 1856 var _this8 = this; 1857 1858 this._element.style.display = 'none'; 1859 1860 this._element.setAttribute('aria-hidden', true); 1861 1862 this._element.removeAttribute('aria-modal'); 1863 1864 this._element.removeAttribute('role'); 1865 1866 this._isTransitioning = false; 1867 1868 this._showBackdrop(function () { 1869 $__default["default"](document.body).removeClass(CLASS_NAME_OPEN); 1870 1871 _this8._resetAdjustments(); 1872 1873 _this8._resetScrollbar(); 1874 1875 $__default["default"](_this8._element).trigger(EVENT_HIDDEN); 1876 }); 1877 }; 1878 1879 _proto._removeBackdrop = function _removeBackdrop() { 1880 if (this._backdrop) { 1881 $__default["default"](this._backdrop).remove(); 1882 this._backdrop = null; 1883 } 1884 }; 1885 1886 _proto._showBackdrop = function _showBackdrop(callback) { 1887 var _this9 = this; 1888 1889 var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE) ? CLASS_NAME_FADE : ''; 1890 1891 if (this._isShown && this._config.backdrop) { 1892 this._backdrop = document.createElement('div'); 1893 this._backdrop.className = CLASS_NAME_BACKDROP; 1894 1895 if (animate) { 1896 this._backdrop.classList.add(animate); 1897 } 1898 1899 $__default["default"](this._backdrop).appendTo(document.body); 1900 $__default["default"](this._element).on(EVENT_CLICK_DISMISS, function (event) { 1901 if (_this9._ignoreBackdropClick) { 1902 _this9._ignoreBackdropClick = false; 1903 return; 1904 } 1905 1906 if (event.target !== event.currentTarget) { 1907 return; 1908 } 1909 1910 if (_this9._config.backdrop === 'static') { 1911 _this9._triggerBackdropTransition(); 1912 } else { 1913 _this9.hide(); 1914 } 1915 }); 1916 1917 if (animate) { 1918 Util__default["default"].reflow(this._backdrop); 1919 } 1920 1921 $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW); 1922 1923 if (!callback) { 1924 return; 1925 } 1926 1927 if (!animate) { 1928 callback(); 1929 return; 1930 } 1931 1932 var backdropTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._backdrop); 1933 $__default["default"](this._backdrop).one(Util__default["default"].TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); 1934 } else if (!this._isShown && this._backdrop) { 1935 $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW); 1936 1937 var callbackRemove = function callbackRemove() { 1938 _this9._removeBackdrop(); 1939 1940 if (callback) { 1941 callback(); 1942 } 1943 }; 1944 1945 if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE)) { 1946 var _backdropTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._backdrop); 1947 1948 $__default["default"](this._backdrop).one(Util__default["default"].TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); 1949 } else { 1950 callbackRemove(); 1951 } 1952 } else if (callback) { 1953 callback(); 1954 } 1955 } // ---------------------------------------------------------------------- 1956 // the following methods are used to handle overflowing modals 1957 // todo (fat): these should probably be refactored out of modal.js 1958 // ---------------------------------------------------------------------- 1959 ; 1960 1961 _proto._adjustDialog = function _adjustDialog() { 1962 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 1963 1964 if (!this._isBodyOverflowing && isModalOverflowing) { 1965 this._element.style.paddingLeft = this._scrollbarWidth + "px"; 1966 } 1967 1968 if (this._isBodyOverflowing && !isModalOverflowing) { 1969 this._element.style.paddingRight = this._scrollbarWidth + "px"; 1970 } 1971 }; 1972 1973 _proto._resetAdjustments = function _resetAdjustments() { 1974 this._element.style.paddingLeft = ''; 1975 this._element.style.paddingRight = ''; 1976 }; 1977 1978 _proto._checkScrollbar = function _checkScrollbar() { 1979 var rect = document.body.getBoundingClientRect(); 1980 this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth; 1981 this._scrollbarWidth = this._getScrollbarWidth(); 1982 }; 1983 1984 _proto._setScrollbar = function _setScrollbar() { 1985 var _this10 = this; 1986 1987 if (this._isBodyOverflowing) { 1988 // Note: DOMNode.style.paddingRight returns the actual value or '' if not set 1989 // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set 1990 var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)); 1991 var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding 1992 1993 $__default["default"](fixedContent).each(function (index, element) { 1994 var actualPadding = element.style.paddingRight; 1995 var calculatedPadding = $__default["default"](element).css('padding-right'); 1996 $__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px"); 1997 }); // Adjust sticky content margin 1998 1999 $__default["default"](stickyContent).each(function (index, element) { 2000 var actualMargin = element.style.marginRight; 2001 var calculatedMargin = $__default["default"](element).css('margin-right'); 2002 $__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px"); 2003 }); // Adjust body padding 2004 2005 var actualPadding = document.body.style.paddingRight; 2006 var calculatedPadding = $__default["default"](document.body).css('padding-right'); 2007 $__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); 2008 } 2009 2010 $__default["default"](document.body).addClass(CLASS_NAME_OPEN); 2011 }; 2012 2013 _proto._resetScrollbar = function _resetScrollbar() { 2014 // Restore fixed content padding 2015 var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)); 2016 $__default["default"](fixedContent).each(function (index, element) { 2017 var padding = $__default["default"](element).data('padding-right'); 2018 $__default["default"](element).removeData('padding-right'); 2019 element.style.paddingRight = padding ? padding : ''; 2020 }); // Restore sticky content 2021 2022 var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT)); 2023 $__default["default"](elements).each(function (index, element) { 2024 var margin = $__default["default"](element).data('margin-right'); 2025 2026 if (typeof margin !== 'undefined') { 2027 $__default["default"](element).css('margin-right', margin).removeData('margin-right'); 2028 } 2029 }); // Restore body padding 2030 2031 var padding = $__default["default"](document.body).data('padding-right'); 2032 $__default["default"](document.body).removeData('padding-right'); 2033 document.body.style.paddingRight = padding ? padding : ''; 2034 }; 2035 2036 _proto._getScrollbarWidth = function _getScrollbarWidth() { 2037 // thx d.walsh 2038 var scrollDiv = document.createElement('div'); 2039 scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER; 2040 document.body.appendChild(scrollDiv); 2041 var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; 2042 document.body.removeChild(scrollDiv); 2043 return scrollbarWidth; 2044 } // Static 2045 ; 2046 2047 Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { 2048 return this.each(function () { 2049 var data = $__default["default"](this).data(DATA_KEY); 2050 2051 var _config = _extends({}, Default, $__default["default"](this).data(), typeof config === 'object' && config ? config : {}); 2052 2053 if (!data) { 2054 data = new Modal(this, _config); 2055 $__default["default"](this).data(DATA_KEY, data); 2056 } 2057 2058 if (typeof config === 'string') { 2059 if (typeof data[config] === 'undefined') { 2060 throw new TypeError("No method named \"" + config + "\""); 2061 } 2062 2063 data[config](relatedTarget); 2064 } else if (_config.show) { 2065 data.show(relatedTarget); 2066 } 2067 }); 2068 }; 2069 2070 _createClass(Modal, null, [{ 2071 key: "VERSION", 2072 get: function get() { 2073 return VERSION; 2074 } 2075 }, { 2076 key: "Default", 2077 get: function get() { 2078 return Default; 2079 } 2080 }]); 2081 2082 return Modal; 2083 }(); 2084 /** 2085 * Data API implementation 2086 */ 2087 2088 2089 $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 2090 var _this11 = this; 2091 2092 var target; 2093 var selector = Util__default["default"].getSelectorFromElement(this); 2094 2095 if (selector) { 2096 target = document.querySelector(selector); 2097 } 2098 2099 var config = $__default["default"](target).data(DATA_KEY) ? 'toggle' : _extends({}, $__default["default"](target).data(), $__default["default"](this).data()); 2100 2101 if (this.tagName === 'A' || this.tagName === 'AREA') { 2102 event.preventDefault(); 2103 } 2104 2105 var $target = $__default["default"](target).one(EVENT_SHOW, function (showEvent) { 2106 if (showEvent.isDefaultPrevented()) { 2107 // Only register focus restorer if modal will actually get shown 2108 return; 2109 } 2110 2111 $target.one(EVENT_HIDDEN, function () { 2112 if ($__default["default"](_this11).is(':visible')) { 2113 _this11.focus(); 2114 } 2115 }); 2116 }); 2117 2118 Modal._jQueryInterface.call($__default["default"](target), config, this); 2119 }); 2120 /** 2121 * jQuery 2122 */ 2123 2124 $__default["default"].fn[NAME] = Modal._jQueryInterface; 2125 $__default["default"].fn[NAME].Constructor = Modal; 2126 2127 $__default["default"].fn[NAME].noConflict = function () { 2128 $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT; 2129 return Modal._jQueryInterface; 2130 }; 2131 2132 return Modal; 2133 2134})); 2135//# sourceMappingURL=modal.js.map 2136 2137 2138/***/ }), 2139
vendor: 6,712 bytes, lines 2140-2338
2140/***/ "./node_modules/bootstrap/js/dist/util.js": 2141/*!************************************************!*\ 2142 !*** ./node_modules/bootstrap/js/dist/util.js ***! 2143 \************************************************/ 2144/***/ (function(module, __unused_webpack_exports, __webpack_require__) { 2145 2146/*! 2147 * Bootstrap util.js v4.6.2 (https://getbootstrap.com/) 2148 * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 2149 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2150 */ 2151(function (global, factory) { 2152 true ? module.exports = factory(__webpack_require__(/*! jquery */ "jquery")) : 2153 0; 2154})(this, (function ($) { 'use strict'; 2155 2156 function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } 2157 2158 var $__default = /*#__PURE__*/_interopDefaultLegacy($); 2159 2160 /** 2161 * -------------------------------------------------------------------------- 2162 * Bootstrap (v4.6.2): util.js 2163 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2164 * -------------------------------------------------------------------------- 2165 */ 2166 /** 2167 * Private TransitionEnd Helpers 2168 */ 2169 2170 var TRANSITION_END = 'transitionend'; 2171 var MAX_UID = 1000000; 2172 var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) 2173 2174 function toType(obj) { 2175 if (obj === null || typeof obj === 'undefined') { 2176 return "" + obj; 2177 } 2178 2179 return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); 2180 } 2181 2182 function getSpecialTransitionEndEvent() { 2183 return { 2184 bindType: TRANSITION_END, 2185 delegateType: TRANSITION_END, 2186 handle: function handle(event) { 2187 if ($__default["default"](event.target).is(this)) { 2188 return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params 2189 } 2190 2191 return undefined; 2192 } 2193 }; 2194 } 2195 2196 function transitionEndEmulator(duration) { 2197 var _this = this; 2198 2199 var called = false; 2200 $__default["default"](this).one(Util.TRANSITION_END, function () { 2201 called = true; 2202 }); 2203 setTimeout(function () { 2204 if (!called) { 2205 Util.triggerTransitionEnd(_this); 2206 } 2207 }, duration); 2208 return this; 2209 } 2210 2211 function setTransitionEndSupport() { 2212 $__default["default"].fn.emulateTransitionEnd = transitionEndEmulator; 2213 $__default["default"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); 2214 } 2215 /** 2216 * Public Util API 2217 */ 2218 2219 2220 var Util = { 2221 TRANSITION_END: 'bsTransitionEnd', 2222 getUID: function getUID(prefix) { 2223 do { 2224 // eslint-disable-next-line no-bitwise 2225 prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here 2226 } while (document.getElementById(prefix)); 2227 2228 return prefix; 2229 }, 2230 getSelectorFromElement: function getSelectorFromElement(element) { 2231 var selector = element.getAttribute('data-target'); 2232 2233 if (!selector || selector === '#') { 2234 var hrefAttr = element.getAttribute('href'); 2235 selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; 2236 } 2237 2238 try { 2239 return document.querySelector(selector) ? selector : null; 2240 } catch (_) { 2241 return null; 2242 } 2243 }, 2244 getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { 2245 if (!element) { 2246 return 0; 2247 } // Get transition-duration of the element 2248 2249 2250 var transitionDuration = $__default["default"](element).css('transition-duration'); 2251 var transitionDelay = $__default["default"](element).css('transition-delay'); 2252 var floatTransitionDuration = parseFloat(transitionDuration); 2253 var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found 2254 2255 if (!floatTransitionDuration && !floatTransitionDelay) { 2256 return 0; 2257 } // If multiple durations are defined, take the first 2258 2259 2260 transitionDuration = transitionDuration.split(',')[0]; 2261 transitionDelay = transitionDelay.split(',')[0]; 2262 return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 2263 }, 2264 reflow: function reflow(element) { 2265 return element.offsetHeight; 2266 }, 2267 triggerTransitionEnd: function triggerTransitionEnd(element) { 2268 $__default["default"](element).trigger(TRANSITION_END); 2269 }, 2270 supportsTransitionEnd: function supportsTransitionEnd() { 2271 return Boolean(TRANSITION_END); 2272 }, 2273 isElement: function isElement(obj) { 2274 return (obj[0] || obj).nodeType; 2275 }, 2276 typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { 2277 for (var property in configTypes) { 2278 if (Object.prototype.hasOwnProperty.call(configTypes, property)) { 2279 var expectedTypes = configTypes[property]; 2280 var value = config[property]; 2281 var valueType = value && Util.isElement(value) ? 'element' : toType(value); 2282 2283 if (!new RegExp(expectedTypes).test(valueType)) { 2284 throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); 2285 } 2286 } 2287 } 2288 }, 2289 findShadowRoot: function findShadowRoot(element) { 2290 if (!document.documentElement.attachShadow) { 2291 return null; 2292 } // Can find the shadow root otherwise it'll return the document 2293 2294 2295 if (typeof element.getRootNode === 'function') { 2296 var root = element.getRootNode(); 2297 return root instanceof ShadowRoot ? root : null; 2298 } 2299 2300 if (element instanceof ShadowRoot) { 2301 return element; 2302 } // when we don't find a shadow root 2303 2304 2305 if (!element.parentNode) { 2306 return null; 2307 } 2308 2309 return Util.findShadowRoot(element.parentNode); 2310 }, 2311 jQueryDetection: function jQueryDetection() { 2312 if (typeof $__default["default"] === 'undefined') { 2313 throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); 2314 } 2315 2316 var version = $__default["default"].fn.jquery.split(' ')[0].split('.'); 2317 var minMajor = 1; 2318 var ltMajor = 2; 2319 var minMinor = 9; 2320 var minPatch = 1; 2321 var maxMajor = 4; 2322 2323 if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { 2324 throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0'); 2325 } 2326 } 2327 }; 2328 Util.jQueryDetection(); 2329 setTransitionEndSupport(); 2330 2331 return Util; 2332 2333})); 2334//# sourceMappingURL=util.js.map 2335 2336 2337/***/ }), 2338
vendor: 1,972 bytes, lines 2339-2414
2339/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js": 2340/*!******************************************************************************!*\ 2341 !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js ***! 2342 \******************************************************************************/ 2343/***/ ((module) => { 2344 2345"use strict"; 2346 2347 2348/* 2349 MIT License http://www.opensource.org/licenses/mit-license.php 2350 Author Tobias Koppers @sokra 2351*/ 2352// css base code, injected by the css-loader 2353// eslint-disable-next-line func-names 2354module.exports = function (cssWithMappingToString) { 2355 var list = []; // return the list of modules as css string 2356 2357 list.toString = function toString() { 2358 return this.map(function (item) { 2359 var content = cssWithMappingToString(item); 2360 2361 if (item[2]) { 2362 return "@media ".concat(item[2], " {").concat(content, "}"); 2363 } 2364 2365 return content; 2366 }).join(""); 2367 }; // import a list of modules into the list 2368 // eslint-disable-next-line func-names 2369 2370 2371 list.i = function (modules, mediaQuery, dedupe) { 2372 if (typeof modules === "string") { 2373 // eslint-disable-next-line no-param-reassign 2374 modules = [[null, modules, ""]]; 2375 } 2376 2377 var alreadyImportedModules = {}; 2378 2379 if (dedupe) { 2380 for (var i = 0; i < this.length; i++) { 2381 // eslint-disable-next-line prefer-destructuring 2382 var id = this[i][0]; 2383 2384 if (id != null) { 2385 alreadyImportedModules[id] = true; 2386 } 2387 } 2388 } 2389 2390 for (var _i = 0; _i < modules.length; _i++) { 2391 var item = [].concat(modules[_i]); 2392 2393 if (dedupe && alreadyImportedModules[item[0]]) { 2394 // eslint-disable-next-line no-continue 2395 continue; 2396 } 2397 2398 if (mediaQuery) { 2399 if (!item[2]) { 2400 item[2] = mediaQuery; 2401 } else { 2402 item[2] = "".concat(mediaQuery, " and ").concat(item[2]); 2403 } 2404 } 2405 2406 list.push(item); 2407 } 2408 }; 2409 2410 return list; 2411}; 2412 2413/***/ }), 2414
vendor: 90,264 bytes, lines 2415-5872
2415/***/ "./node_modules/owl.carousel/dist/owl.carousel.js": 2416/*!********************************************************!*\ 2417 !*** ./node_modules/owl.carousel/dist/owl.carousel.js ***! 2418 \********************************************************/ 2419/***/ (() => { 2420 2421/** 2422 * Owl Carousel v2.3.4 2423 * Copyright 2013-2018 David Deutsch 2424 * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 2425 */ 2426/** 2427 * Owl carousel 2428 * @version 2.3.4 2429 * @author Bartosz Wojciechowski 2430 * @author David Deutsch 2431 * @license The MIT License (MIT) 2432 * @todo Lazy Load Icon 2433 * @todo prevent animationend bubling 2434 * @todo itemsScaleUp 2435 * @todo Test Zepto 2436 * @todo stagePadding calculate wrong active classes 2437 */ 2438;(function($, window, document, undefined) { 2439 2440 /** 2441 * Creates a carousel. 2442 * @class The Owl Carousel. 2443 * @public 2444 * @param {HTMLElement|jQuery} element - The element to create the carousel for. 2445 * @param {Object} [options] - The options 2446 */ 2447 function Owl(element, options) { 2448 2449 /** 2450 * Current settings for the carousel. 2451 * @public 2452 */ 2453 this.settings = null; 2454 2455 /** 2456 * Current options set by the caller including defaults. 2457 * @public 2458 */ 2459 this.options = $.extend({}, Owl.Defaults, options); 2460 2461 /** 2462 * Plugin element. 2463 * @public 2464 */ 2465 this.$element = $(element); 2466 2467 /** 2468 * Proxied event handlers. 2469 * @protected 2470 */ 2471 this._handlers = {}; 2472 2473 /** 2474 * References to the running plugins of this carousel. 2475 * @protected 2476 */ 2477 this._plugins = {}; 2478 2479 /** 2480 * Currently suppressed events to prevent them from being retriggered. 2481 * @protected 2482 */ 2483 this._supress = {}; 2484 2485 /** 2486 * Absolute current position. 2487 * @protected 2488 */ 2489 this._current = null; 2490 2491 /** 2492 * Animation speed in milliseconds. 2493 * @protected 2494 */ 2495 this._speed = null; 2496 2497 /** 2498 * Coordinates of all items in pixel. 2499 * @todo The name of this member is missleading. 2500 * @protected 2501 */ 2502 this._coordinates = []; 2503 2504 /** 2505 * Current breakpoint. 2506 * @todo Real media queries would be nice. 2507 * @protected 2508 */ 2509 this._breakpoint = null; 2510 2511 /** 2512 * Current width of the plugin element. 2513 */ 2514 this._width = null; 2515 2516 /** 2517 * All real items. 2518 * @protected 2519 */ 2520 this._items = []; 2521 2522 /** 2523 * All cloned items. 2524 * @protected 2525 */ 2526 this._clones = []; 2527 2528 /** 2529 * Merge values of all items. 2530 * @todo Maybe this could be part of a plugin. 2531 * @protected 2532 */ 2533 this._mergers = []; 2534 2535 /** 2536 * Widths of all items. 2537 */ 2538 this._widths = []; 2539 2540 /** 2541 * Invalidated parts within the update process. 2542 * @protected 2543 */ 2544 this._invalidated = {}; 2545 2546 /** 2547 * Ordered list of workers for the update process. 2548 * @protected 2549 */ 2550 this._pipe = []; 2551 2552 /** 2553 * Current state information for the drag operation. 2554 * @todo #261 2555 * @protected 2556 */ 2557 this._drag = { 2558 time: null, 2559 target: null, 2560 pointer: null, 2561 stage: { 2562 start: null, 2563 current: null 2564 }, 2565 direction: null 2566 }; 2567 2568 /** 2569 * Current state information and their tags. 2570 * @type {Object} 2571 * @protected 2572 */ 2573 this._states = { 2574 current: {}, 2575 tags: { 2576 'initializing': [ 'busy' ], 2577 'animating': [ 'busy' ], 2578 'dragging': [ 'interacting' ] 2579 } 2580 }; 2581 2582 $.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) { 2583 this._handlers[handler] = $.proxy(this[handler], this); 2584 }, this)); 2585 2586 $.each(Owl.Plugins, $.proxy(function(key, plugin) { 2587 this._plugins[key.charAt(0).toLowerCase() + key.slice(1)] 2588 = new plugin(this); 2589 }, this)); 2590 2591 $.each(Owl.Workers, $.proxy(function(priority, worker) { 2592 this._pipe.push({ 2593 'filter': worker.filter, 2594 'run': $.proxy(worker.run, this) 2595 }); 2596 }, this)); 2597 2598 this.setup(); 2599 this.initialize(); 2600 } 2601 2602 /** 2603 * Default options for the carousel. 2604 * @public 2605 */ 2606 Owl.Defaults = { 2607 items: 3, 2608 loop: false, 2609 center: false, 2610 rewind: false, 2611 checkVisibility: true, 2612 2613 mouseDrag: true, 2614 touchDrag: true, 2615 pullDrag: true, 2616 freeDrag: false, 2617 2618 margin: 0, 2619 stagePadding: 0, 2620 2621 merge: false, 2622 mergeFit: true, 2623 autoWidth: false, 2624 2625 startPosition: 0, 2626 rtl: false, 2627 2628 smartSpeed: 250, 2629 fluidSpeed: false, 2630 dragEndSpeed: false, 2631 2632 responsive: {}, 2633 responsiveRefreshRate: 200, 2634 responsiveBaseElement: window, 2635 2636 fallbackEasing: 'swing', 2637 slideTransition: '', 2638 2639 info: false, 2640 2641 nestedItemSelector: false, 2642 itemElement: 'div', 2643 stageElement: 'div', 2644 2645 refreshClass: 'owl-refresh', 2646 loadedClass: 'owl-loaded', 2647 loadingClass: 'owl-loading', 2648 rtlClass: 'owl-rtl', 2649 responsiveClass: 'owl-responsive', 2650 dragClass: 'owl-drag', 2651 itemClass: 'owl-item', 2652 stageClass: 'owl-stage', 2653 stageOuterClass: 'owl-stage-outer', 2654 grabClass: 'owl-grab' 2655 }; 2656 2657 /** 2658 * Enumeration for width. 2659 * @public 2660 * @readonly 2661 * @enum {String} 2662 */ 2663 Owl.Width = { 2664 Default: 'default', 2665 Inner: 'inner', 2666 Outer: 'outer' 2667 }; 2668 2669 /** 2670 * Enumeration for types. 2671 * @public 2672 * @readonly 2673 * @enum {String} 2674 */ 2675 Owl.Type = { 2676 Event: 'event', 2677 State: 'state' 2678 }; 2679 2680 /** 2681 * Contains all registered plugins. 2682 * @public 2683 */ 2684 Owl.Plugins = {}; 2685 2686 /** 2687 * List of workers involved in the update process. 2688 */ 2689 Owl.Workers = [ { 2690 filter: [ 'width', 'settings' ], 2691 run: function() { 2692 this._width = this.$element.width(); 2693 } 2694 }, { 2695 filter: [ 'width', 'items', 'settings' ], 2696 run: function(cache) { 2697 cache.current = this._items && this._items[this.relative(this._current)]; 2698 } 2699 }, { 2700 filter: [ 'items', 'settings' ], 2701 run: function() { 2702 this.$stage.children('.cloned').remove(); 2703 } 2704 }, { 2705 filter: [ 'width', 'items', 'settings' ], 2706 run: function(cache) { 2707 var margin = this.settings.margin || '', 2708 grid = !this.settings.autoWidth, 2709 rtl = this.settings.rtl, 2710 css = { 2711 'width': 'auto', 2712 'margin-left': rtl ? margin : '', 2713 'margin-right': rtl ? '' : margin 2714 }; 2715 2716 !grid && this.$stage.children().css(css); 2717 2718 cache.css = css; 2719 } 2720 }, { 2721 filter: [ 'width', 'items', 'settings' ], 2722 run: function(cache) { 2723 var width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin, 2724 merge = null, 2725 iterator = this._items.length, 2726 grid = !this.settings.autoWidth, 2727 widths = []; 2728 2729 cache.items = { 2730 merge: false, 2731 width: width 2732 }; 2733 2734 while (iterator--) { 2735 merge = this._mergers[iterator]; 2736 merge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge; 2737 2738 cache.items.merge = merge > 1 || cache.items.merge; 2739 2740 widths[iterator] = !grid ? this._items[iterator].width() : width * merge; 2741 } 2742 2743 this._widths = widths; 2744 } 2745 }, { 2746 filter: [ 'items', 'settings' ], 2747 run: function() { 2748 var clones = [], 2749 items = this._items, 2750 settings = this.settings, 2751 // TODO: Should be computed from number of min width items in stage 2752 view = Math.max(settings.items * 2, 4), 2753 size = Math.ceil(items.length / 2) * 2, 2754 repeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0, 2755 append = '', 2756 prepend = ''; 2757 2758 repeat /= 2; 2759 2760 while (repeat > 0) { 2761 // Switch to only using appended clones 2762 clones.push(this.normalize(clones.length / 2, true)); 2763 append = append + items[clones[clones.length - 1]][0].outerHTML; 2764 clones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true)); 2765 prepend = items[clones[clones.length - 1]][0].outerHTML + prepend; 2766 repeat -= 1; 2767 } 2768 2769 this._clones = clones; 2770 2771 $(append).addClass('cloned').appendTo(this.$stage); 2772 $(prepend).addClass('cloned').prependTo(this.$stage); 2773 } 2774 }, { 2775 filter: [ 'width', 'items', 'settings' ], 2776 run: function() { 2777 var rtl = this.settings.rtl ? 1 : -1, 2778 size = this._clones.length + this._items.length, 2779 iterator = -1, 2780 previous = 0, 2781 current = 0, 2782 coordinates = []; 2783 2784 while (++iterator < size) { 2785 previous = coordinates[iterator - 1] || 0; 2786 current = this._widths[this.relative(iterator)] + this.settings.margin; 2787 coordinates.push(previous + current * rtl); 2788 } 2789 2790 this._coordinates = coordinates; 2791 } 2792 }, { 2793 filter: [ 'width', 'items', 'settings' ], 2794 run: function() { 2795 var padding = this.settings.stagePadding, 2796 coordinates = this._coordinates, 2797 css = { 2798 'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2, 2799 'padding-left': padding || '', 2800 'padding-right': padding || '' 2801 }; 2802 2803 this.$stage.css(css); 2804 } 2805 }, { 2806 filter: [ 'width', 'items', 'settings' ], 2807 run: function(cache) { 2808 var iterator = this._coordinates.length, 2809 grid = !this.settings.autoWidth, 2810 items = this.$stage.children(); 2811 2812 if (grid && cache.items.merge) { 2813 while (iterator--) { 2814 cache.css.width = this._widths[this.relative(iterator)]; 2815 items.eq(iterator).css(cache.css); 2816 } 2817 } else if (grid) { 2818 cache.css.width = cache.items.width; 2819 items.css(cache.css); 2820 } 2821 } 2822 }, { 2823 filter: [ 'items' ], 2824 run: function() { 2825 this._coordinates.length < 1 && this.$stage.removeAttr('style'); 2826 } 2827 }, { 2828 filter: [ 'width', 'items', 'settings' ], 2829 run: function(cache) { 2830 cache.current = cache.current ? this.$stage.children().index(cache.current) : 0; 2831 cache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current)); 2832 this.reset(cache.current); 2833 } 2834 }, { 2835 filter: [ 'position' ], 2836 run: function() { 2837 this.animate(this.coordinates(this._current)); 2838 } 2839 }, { 2840 filter: [ 'width', 'position', 'items', 'settings' ], 2841 run: function() { 2842 var rtl = this.settings.rtl ? 1 : -1, 2843 padding = this.settings.stagePadding * 2, 2844 begin = this.coordinates(this.current()) + padding, 2845 end = begin + this.width() * rtl, 2846 inner, outer, matches = [], i, n; 2847 2848 for (i = 0, n = this._coordinates.length; i < n; i++) { 2849 inner = this._coordinates[i - 1] || 0; 2850 outer = Math.abs(this._coordinates[i]) + padding * rtl; 2851 2852 if ((this.op(inner, '<=', begin) && (this.op(inner, '>', end))) 2853 || (this.op(outer, '<', begin) && this.op(outer, '>', end))) { 2854 matches.push(i); 2855 } 2856 } 2857 2858 this.$stage.children('.active').removeClass('active'); 2859 this.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active'); 2860 2861 this.$stage.children('.center').removeClass('center'); 2862 if (this.settings.center) { 2863 this.$stage.children().eq(this.current()).addClass('center'); 2864 } 2865 } 2866 } ]; 2867 2868 /** 2869 * Create the stage DOM element 2870 */ 2871 Owl.prototype.initializeStage = function() { 2872 this.$stage = this.$element.find('.' + this.settings.stageClass); 2873 2874 // if the stage is already in the DOM, grab it and skip stage initialization 2875 if (this.$stage.length) { 2876 return; 2877 } 2878 2879 this.$element.addClass(this.options.loadingClass); 2880 2881 // create stage 2882 this.$stage = $('<' + this.settings.stageElement + '>', { 2883 "class": this.settings.stageClass 2884 }).wrap( $( '<div/>', { 2885 "class": this.settings.stageOuterClass 2886 })); 2887 2888 // append stage 2889 this.$element.append(this.$stage.parent()); 2890 }; 2891 2892 /** 2893 * Create item DOM elements 2894 */ 2895 Owl.prototype.initializeItems = function() { 2896 var $items = this.$element.find('.owl-item'); 2897 2898 // if the items are already in the DOM, grab them and skip item initialization 2899 if ($items.length) { 2900 this._items = $items.get().map(function(item) { 2901 return $(item); 2902 }); 2903 2904 this._mergers = this._items.map(function() { 2905 return 1; 2906 }); 2907 2908 this.refresh(); 2909 2910 return; 2911 } 2912 2913 // append content 2914 this.replace(this.$element.children().not(this.$stage.parent())); 2915 2916 // check visibility 2917 if (this.isVisible()) { 2918 // update view 2919 this.refresh(); 2920 } else { 2921 // invalidate width 2922 this.invalidate('width'); 2923 } 2924 2925 this.$element 2926 .removeClass(this.options.loadingClass) 2927 .addClass(this.options.loadedClass); 2928 }; 2929 2930 /** 2931 * Initializes the carousel. 2932 * @protected 2933 */ 2934 Owl.prototype.initialize = function() { 2935 this.enter('initializing'); 2936 this.trigger('initialize'); 2937 2938 this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl); 2939 2940 if (this.settings.autoWidth && !this.is('pre-loading')) { 2941 var imgs, nestedSelector, width; 2942 imgs = this.$element.find('img'); 2943 nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined; 2944 width = this.$element.children(nestedSelector).width(); 2945 2946 if (imgs.length && width <= 0) { 2947 this.preloadAutoWidthImages(imgs); 2948 } 2949 } 2950 2951 this.initializeStage(); 2952 this.initializeItems(); 2953 2954 // register event handlers 2955 this.registerEventHandlers(); 2956 2957 this.leave('initializing'); 2958 this.trigger('initialized'); 2959 }; 2960 2961 /** 2962 * @returns {Boolean} visibility of $element 2963 * if you know the carousel will always be visible you can set `checkVisibility` to `false` to 2964 * prevent the expensive browser layout forced reflow the $element.is(':visible') does 2965 */ 2966 Owl.prototype.isVisible = function() { 2967 return this.settings.checkVisibility 2968 ? this.$element.is(':visible') 2969 : true; 2970 }; 2971 2972 /** 2973 * Setups the current settings. 2974 * @todo Remove responsive classes. Why should adaptive designs be brought into IE8? 2975 * @todo Support for media queries by using `matchMedia` would be nice. 2976 * @public 2977 */ 2978 Owl.prototype.setup = function() { 2979 var viewport = this.viewport(), 2980 overwrites = this.options.responsive, 2981 match = -1, 2982 settings = null; 2983 2984 if (!overwrites) { 2985 settings = $.extend({}, this.options); 2986 } else { 2987 $.each(overwrites, function(breakpoint) { 2988 if (breakpoint <= viewport && breakpoint > match) { 2989 match = Number(breakpoint); 2990 } 2991 }); 2992 2993 settings = $.extend({}, this.options, overwrites[match]); 2994 if (typeof settings.stagePadding === 'function') { 2995 settings.stagePadding = settings.stagePadding(); 2996 } 2997 delete settings.responsive; 2998 2999 // responsive class 3000 if (settings.responsiveClass) { 3001 this.$element.attr('class', 3002 this.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\S+\\s', 'g'), '$1' + match) 3003 ); 3004 } 3005 } 3006 3007 this.trigger('change', { property: { name: 'settings', value: settings } }); 3008 this._breakpoint = match; 3009 this.settings = settings; 3010 this.invalidate('settings'); 3011 this.trigger('changed', { property: { name: 'settings', value: this.settings } }); 3012 }; 3013 3014 /** 3015 * Updates option logic if necessery. 3016 * @protected 3017 */ 3018 Owl.prototype.optionsLogic = function() { 3019 if (this.settings.autoWidth) { 3020 this.settings.stagePadding = false; 3021 this.settings.merge = false; 3022 } 3023 }; 3024 3025 /** 3026 * Prepares an item before add. 3027 * @todo Rename event parameter `content` to `item`. 3028 * @protected 3029 * @returns {jQuery|HTMLElement} - The item container. 3030 */ 3031 Owl.prototype.prepare = function(item) { 3032 var event = this.trigger('prepare', { content: item }); 3033 3034 if (!event.data) { 3035 event.data = $('<' + this.settings.itemElement + '/>') 3036 .addClass(this.options.itemClass).append(item) 3037 } 3038 3039 this.trigger('prepared', { content: event.data }); 3040 3041 return event.data; 3042 }; 3043 3044 /** 3045 * Updates the view. 3046 * @public 3047 */ 3048 Owl.prototype.update = function() { 3049 var i = 0, 3050 n = this._pipe.length, 3051 filter = $.proxy(function(p) { return this[p] }, this._invalidated), 3052 cache = {}; 3053 3054 while (i < n) { 3055 if (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) { 3056 this._pipe[i].run(cache); 3057 } 3058 i++; 3059 } 3060 3061 this._invalidated = {}; 3062 3063 !this.is('valid') && this.enter('valid'); 3064 }; 3065 3066 /** 3067 * Gets the width of the view. 3068 * @public 3069 * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return. 3070 * @returns {Number} - The width of the view in pixel. 3071 */ 3072 Owl.prototype.width = function(dimension) { 3073 dimension = dimension || Owl.Width.Default; 3074 switch (dimension) { 3075 case Owl.Width.Inner: 3076 case Owl.Width.Outer: 3077 return this._width; 3078 default: 3079 return this._width - this.settings.stagePadding * 2 + this.settings.margin; 3080 } 3081 }; 3082 3083 /** 3084 * Refreshes the carousel primarily for adaptive purposes. 3085 * @public 3086 */ 3087 Owl.prototype.refresh = function() { 3088 this.enter('refreshing'); 3089 this.trigger('refresh'); 3090 3091 this.setup(); 3092 3093 this.optionsLogic(); 3094 3095 this.$element.addClass(this.options.refreshClass); 3096 3097 this.update(); 3098 3099 this.$element.removeClass(this.options.refreshClass); 3100 3101 this.leave('refreshing'); 3102 this.trigger('refreshed'); 3103 }; 3104 3105 /** 3106 * Checks window `resize` event. 3107 * @protected 3108 */ 3109 Owl.prototype.onThrottledResize = function() { 3110 window.clearTimeout(this.resizeTimer); 3111 this.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate); 3112 }; 3113 3114 /** 3115 * Checks window `resize` event. 3116 * @protected 3117 */ 3118 Owl.prototype.onResize = function() { 3119 if (!this._items.length) { 3120 return false; 3121 } 3122 3123 if (this._width === this.$element.width()) { 3124 return false; 3125 } 3126 3127 if (!this.isVisible()) { 3128 return false; 3129 } 3130 3131 this.enter('resizing'); 3132 3133 if (this.trigger('resize').isDefaultPrevented()) { 3134 this.leave('resizing'); 3135 return false; 3136 } 3137 3138 this.invalidate('width'); 3139 3140 this.refresh(); 3141 3142 this.leave('resizing'); 3143 this.trigger('resized'); 3144 }; 3145 3146 /** 3147 * Registers event handlers. 3148 * @todo Check `msPointerEnabled` 3149 * @todo #261 3150 * @protected 3151 */ 3152 Owl.prototype.registerEventHandlers = function() { 3153 if ($.support.transition) { 3154 this.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this)); 3155 } 3156 3157 if (this.settings.responsive !== false) { 3158 this.on(window, 'resize', this._handlers.onThrottledResize); 3159 } 3160 3161 if (this.settings.mouseDrag) { 3162 this.$element.addClass(this.options.dragClass); 3163 this.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this)); 3164 this.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false }); 3165 } 3166 3167 if (this.settings.touchDrag){ 3168 this.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this)); 3169 this.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this)); 3170 } 3171 }; 3172 3173 /** 3174 * Handles `touchstart` and `mousedown` events. 3175 * @todo Horizontal swipe threshold as option 3176 * @todo #261 3177 * @protected 3178 * @param {Event} event - The event arguments. 3179 */ 3180 Owl.prototype.onDragStart = function(event) { 3181 var stage = null; 3182 3183 if (event.which === 3) { 3184 return; 3185 } 3186 3187 if ($.support.transform) { 3188 stage = this.$stage.css('transform').replace(/.*\(|\)| /g, '').split(','); 3189 stage = { 3190 x: stage[stage.length === 16 ? 12 : 4], 3191 y: stage[stage.length === 16 ? 13 : 5] 3192 }; 3193 } else { 3194 stage = this.$stage.position(); 3195 stage = { 3196 x: this.settings.rtl ? 3197 stage.left + this.$stage.width() - this.width() + this.settings.margin : 3198 stage.left, 3199 y: stage.top 3200 }; 3201 } 3202 3203 if (this.is('animating')) { 3204 $.support.transform ? this.animate(stage.x) : this.$stage.stop() 3205 this.invalidate('position'); 3206 } 3207 3208 this.$element.toggleClass(this.options.grabClass, event.type === 'mousedown'); 3209 3210 this.speed(0); 3211 3212 this._drag.time = new Date().getTime(); 3213 this._drag.target = $(event.target); 3214 this._drag.stage.start = stage; 3215 this._drag.stage.current = stage; 3216 this._drag.pointer = this.pointer(event); 3217 3218 $(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this)); 3219 3220 $(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) { 3221 var delta = this.difference(this._drag.pointer, this.pointer(event)); 3222 3223 $(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this)); 3224 3225 if (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) { 3226 return; 3227 } 3228 3229 event.preventDefault(); 3230 3231 this.enter('dragging'); 3232 this.trigger('drag'); 3233 }, this)); 3234 }; 3235 3236 /** 3237 * Handles the `touchmove` and `mousemove` events. 3238 * @todo #261 3239 * @protected 3240 * @param {Event} event - The event arguments. 3241 */ 3242 Owl.prototype.onDragMove = function(event) { 3243 var minimum = null, 3244 maximum = null, 3245 pull = null, 3246 delta = this.difference(this._drag.pointer, this.pointer(event)), 3247 stage = this.difference(this._drag.stage.start, delta); 3248 3249 if (!this.is('dragging')) { 3250 return; 3251 } 3252 3253 event.preventDefault(); 3254 3255 if (this.settings.loop) { 3256 minimum = this.coordinates(this.minimum()); 3257 maximum = this.coordinates(this.maximum() + 1) - minimum; 3258 stage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum; 3259 } else { 3260 minimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum()); 3261 maximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum()); 3262 pull = this.settings.pullDrag ? -1 * delta.x / 5 : 0; 3263 stage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull); 3264 } 3265 3266 this._drag.stage.current = stage; 3267 3268 this.animate(stage.x); 3269 }; 3270 3271 /** 3272 * Handles the `touchend` and `mouseup` events. 3273 * @todo #261 3274 * @todo Threshold for click event 3275 * @protected 3276 * @param {Event} event - The event arguments. 3277 */ 3278 Owl.prototype.onDragEnd = function(event) { 3279 var delta = this.difference(this._drag.pointer, this.pointer(event)), 3280 stage = this._drag.stage.current, 3281 direction = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right'; 3282 3283 $(document).off('.owl.core'); 3284 3285 this.$element.removeClass(this.options.grabClass); 3286 3287 if (delta.x !== 0 && this.is('dragging') || !this.is('valid')) { 3288 this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed); 3289 this.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction)); 3290 this.invalidate('position'); 3291 this.update(); 3292 3293 this._drag.direction = direction; 3294 3295 if (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) { 3296 this._drag.target.one('click.owl.core', function() { return false; }); 3297 } 3298 } 3299 3300 if (!this.is('dragging')) { 3301 return; 3302 } 3303 3304 this.leave('dragging'); 3305 this.trigger('dragged'); 3306 }; 3307 3308 /** 3309 * Gets absolute position of the closest item for a coordinate. 3310 * @todo Setting `freeDrag` makes `closest` not reusable. See #165. 3311 * @protected 3312 * @param {Number} coordinate - The coordinate in pixel. 3313 * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`. 3314 * @return {Number} - The absolute position of the closest item. 3315 */ 3316 Owl.prototype.closest = function(coordinate, direction) { 3317 var position = -1, 3318 pull = 30, 3319 width = this.width(), 3320 coordinates = this.coordinates(); 3321 3322 if (!this.settings.freeDrag) { 3323 // check closest item 3324 $.each(coordinates, $.proxy(function(index, value) { 3325 // on a left pull, check on current index 3326 if (direction === 'left' && coordinate > value - pull && coordinate < value + pull) { 3327 position = index; 3328 // on a right pull, check on previous index 3329 // to do so, subtract width from value and set position = index + 1 3330 } else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) { 3331 position = index + 1; 3332 } else if (this.op(coordinate, '<', value) 3333 && this.op(coordinate, '>', coordinates[index + 1] !== undefined ? coordinates[index + 1] : value - width)) { 3334 position = direction === 'left' ? index + 1 : index; 3335 } 3336 return position === -1; 3337 }, this)); 3338 } 3339 3340 if (!this.settings.loop) { 3341 // non loop boundries 3342 if (this.op(coordinate, '>', coordinates[this.minimum()])) { 3343 position = coordinate = this.minimum(); 3344 } else if (this.op(coordinate, '<', coordinates[this.maximum()])) { 3345 position = coordinate = this.maximum(); 3346 } 3347 } 3348 3349 return position; 3350 }; 3351 3352 /** 3353 * Animates the stage. 3354 * @todo #270 3355 * @public 3356 * @param {Number} coordinate - The coordinate in pixels. 3357 */ 3358 Owl.prototype.animate = function(coordinate) { 3359 var animate = this.speed() > 0; 3360 3361 this.is('animating') && this.onTransitionEnd(); 3362 3363 if (animate) { 3364 this.enter('animating'); 3365 this.trigger('translate'); 3366 } 3367 3368 if ($.support.transform3d && $.support.transition) { 3369 this.$stage.css({ 3370 transform: 'translate3d(' + coordinate + 'px,0px,0px)', 3371 transition: (this.speed() / 1000) + 's' + ( 3372 this.settings.slideTransition ? ' ' + this.settings.slideTransition : '' 3373 ) 3374 }); 3375 } else if (animate) { 3376 this.$stage.animate({ 3377 left: coordinate + 'px' 3378 }, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this)); 3379 } else { 3380 this.$stage.css({ 3381 left: coordinate + 'px' 3382 }); 3383 } 3384 }; 3385 3386 /** 3387 * Checks whether the carousel is in a specific state or not. 3388 * @param {String} state - The state to check. 3389 * @returns {Boolean} - The flag which indicates if the carousel is busy. 3390 */ 3391 Owl.prototype.is = function(state) { 3392 return this._states.current[state] && this._states.current[state] > 0; 3393 }; 3394 3395 /** 3396 * Sets the absolute position of the current item. 3397 * @public 3398 * @param {Number} [position] - The new absolute position or nothing to leave it unchanged. 3399 * @returns {Number} - The absolute position of the current item. 3400 */ 3401 Owl.prototype.current = function(position) { 3402 if (position === undefined) { 3403 return this._current; 3404 } 3405 3406 if (this._items.length === 0) { 3407 return undefined; 3408 } 3409 3410 position = this.normalize(position); 3411 3412 if (this._current !== position) { 3413 var event = this.trigger('change', { property: { name: 'position', value: position } }); 3414 3415 if (event.data !== undefined) { 3416 position = this.normalize(event.data); 3417 } 3418 3419 this._current = position; 3420 3421 this.invalidate('position'); 3422 3423 this.trigger('changed', { property: { name: 'position', value: this._current } }); 3424 } 3425 3426 return this._current; 3427 }; 3428 3429 /** 3430 * Invalidates the given part of the update routine. 3431 * @param {String} [part] - The part to invalidate. 3432 * @returns {Array.<String>} - The invalidated parts. 3433 */ 3434 Owl.prototype.invalidate = function(part) { 3435 if ($.type(part) === 'string') { 3436 this._invalidated[part] = true; 3437 this.is('valid') && this.leave('valid'); 3438 } 3439 return $.map(this._invalidated, function(v, i) { return i }); 3440 }; 3441 3442 /** 3443 * Resets the absolute position of the current item. 3444 * @public 3445 * @param {Number} position - The absolute position of the new item. 3446 */ 3447 Owl.prototype.reset = function(position) { 3448 position = this.normalize(position); 3449 3450 if (position === undefined) { 3451 return; 3452 } 3453 3454 this._speed = 0; 3455 this._current = position; 3456 3457 this.suppress([ 'translate', 'translated' ]); 3458 3459 this.animate(this.coordinates(position)); 3460 3461 this.release([ 'translate', 'translated' ]); 3462 }; 3463 3464 /** 3465 * Normalizes an absolute or a relative position of an item. 3466 * @public 3467 * @param {Number} position - The absolute or relative position to normalize. 3468 * @param {Boolean} [relative=false] - Whether the given position is relative or not. 3469 * @returns {Number} - The normalized position. 3470 */ 3471 Owl.prototype.normalize = function(position, relative) { 3472 var n = this._items.length, 3473 m = relative ? 0 : this._clones.length; 3474 3475 if (!this.isNumeric(position) || n < 1) { 3476 position = undefined; 3477 } else if (position < 0 || position >= n + m) { 3478 position = ((position - m / 2) % n + n) % n + m / 2; 3479 } 3480 3481 return position; 3482 }; 3483 3484 /** 3485 * Converts an absolute position of an item into a relative one. 3486 * @public 3487 * @param {Number} position - The absolute position to convert. 3488 * @returns {Number} - The converted position. 3489 */ 3490 Owl.prototype.relative = function(position) { 3491 position -= this._clones.length / 2; 3492 return this.normalize(position, true); 3493 }; 3494 3495 /** 3496 * Gets the maximum position for the current item. 3497 * @public 3498 * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position. 3499 * @returns {Number} 3500 */ 3501 Owl.prototype.maximum = function(relative) { 3502 var settings = this.settings, 3503 maximum = this._coordinates.length, 3504 iterator, 3505 reciprocalItemsWidth, 3506 elementWidth; 3507 3508 if (settings.loop) { 3509 maximum = this._clones.length / 2 + this._items.length - 1; 3510 } else if (settings.autoWidth || settings.merge) { 3511 iterator = this._items.length; 3512 if (iterator) { 3513 reciprocalItemsWidth = this._items[--iterator].width(); 3514 elementWidth = this.$element.width(); 3515 while (iterator--) { 3516 reciprocalItemsWidth += this._items[iterator].width() + this.settings.margin; 3517 if (reciprocalItemsWidth > elementWidth) { 3518 break; 3519 } 3520 } 3521 } 3522 maximum = iterator + 1; 3523 } else if (settings.center) { 3524 maximum = this._items.length - 1; 3525 } else { 3526 maximum = this._items.length - settings.items; 3527 } 3528 3529 if (relative) { 3530 maximum -= this._clones.length / 2; 3531 } 3532 3533 return Math.max(maximum, 0); 3534 }; 3535 3536 /** 3537 * Gets the minimum position for the current item. 3538 * @public 3539 * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position. 3540 * @returns {Number} 3541 */ 3542 Owl.prototype.minimum = function(relative) { 3543 return relative ? 0 : this._clones.length / 2; 3544 }; 3545 3546 /** 3547 * Gets an item at the specified relative position. 3548 * @public 3549 * @param {Number} [position] - The relative position of the item. 3550 * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given. 3551 */ 3552 Owl.prototype.items = function(position) { 3553 if (position === undefined) { 3554 return this._items.slice(); 3555 } 3556 3557 position = this.normalize(position, true); 3558 return this._items[position]; 3559 }; 3560 3561 /** 3562 * Gets an item at the specified relative position. 3563 * @public 3564 * @param {Number} [position] - The relative position of the item. 3565 * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given. 3566 */ 3567 Owl.prototype.mergers = function(position) { 3568 if (position === undefined) { 3569 return this._mergers.slice(); 3570 } 3571 3572 position = this.normalize(position, true); 3573 return this._mergers[position]; 3574 }; 3575 3576 /** 3577 * Gets the absolute positions of clones for an item. 3578 * @public 3579 * @param {Number} [position] - The relative position of the item. 3580 * @returns {Array.<Number>} - The absolute positions of clones for the item or all if no position was given. 3581 */ 3582 Owl.prototype.clones = function(position) { 3583 var odd = this._clones.length / 2, 3584 even = odd + this._items.length, 3585 map = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 }; 3586 3587 if (position === undefined) { 3588 return $.map(this._clones, function(v, i) { return map(i) }); 3589 } 3590 3591 return $.map(this._clones, function(v, i) { return v === position ? map(i) : null }); 3592 }; 3593 3594 /** 3595 * Sets the current animation speed. 3596 * @public 3597 * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged. 3598 * @returns {Number} - The current animation speed in milliseconds. 3599 */ 3600 Owl.prototype.speed = function(speed) { 3601 if (speed !== undefined) { 3602 this._speed = speed; 3603 } 3604 3605 return this._speed; 3606 }; 3607 3608 /** 3609 * Gets the coordinate of an item. 3610 * @todo The name of this method is missleanding. 3611 * @public 3612 * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`. 3613 * @returns {Number|Array.<Number>} - The coordinate of the item in pixel or all coordinates. 3614 */ 3615 Owl.prototype.coordinates = function(position) { 3616 var multiplier = 1, 3617 newPosition = position - 1, 3618 coordinate; 3619 3620 if (position === undefined) { 3621 return $.map(this._coordinates, $.proxy(function(coordinate, index) { 3622 return this.coordinates(index); 3623 }, this)); 3624 } 3625 3626 if (this.settings.center) { 3627 if (this.settings.rtl) { 3628 multiplier = -1; 3629 newPosition = position + 1; 3630 } 3631 3632 coordinate = this._coordinates[position]; 3633 coordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier; 3634 } else { 3635 coordinate = this._coordinates[newPosition] || 0; 3636 } 3637 3638 coordinate = Math.ceil(coordinate); 3639 3640 return coordinate; 3641 }; 3642 3643 /** 3644 * Calculates the speed for a translation. 3645 * @protected 3646 * @param {Number} from - The absolute position of the start item. 3647 * @param {Number} to - The absolute position of the target item. 3648 * @param {Number} [factor=undefined] - The time factor in milliseconds. 3649 * @returns {Number} - The time in milliseconds for the translation. 3650 */ 3651 Owl.prototype.duration = function(from, to, factor) { 3652 if (factor === 0) { 3653 return 0; 3654 } 3655 3656 return Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed)); 3657 }; 3658 3659 /** 3660 * Slides to the specified item. 3661 * @public 3662 * @param {Number} position - The position of the item. 3663 * @param {Number} [speed] - The time in milliseconds for the transition. 3664 */ 3665 Owl.prototype.to = function(position, speed) { 3666 var current = this.current(), 3667 revert = null, 3668 distance = position - this.relative(current), 3669 direction = (distance > 0) - (distance < 0), 3670 items = this._items.length, 3671 minimum = this.minimum(), 3672 maximum = this.maximum(); 3673 3674 if (this.settings.loop) { 3675 if (!this.settings.rewind && Math.abs(distance) > items / 2) { 3676 distance += direction * -1 * items; 3677 } 3678 3679 position = current + distance; 3680 revert = ((position - minimum) % items + items) % items + minimum; 3681 3682 if (revert !== position && revert - distance <= maximum && revert - distance > 0) { 3683 current = revert - distance; 3684 position = revert; 3685 this.reset(current); 3686 } 3687 } else if (this.settings.rewind) { 3688 maximum += 1; 3689 position = (position % maximum + maximum) % maximum; 3690 } else { 3691 position = Math.max(minimum, Math.min(maximum, position)); 3692 } 3693 3694 this.speed(this.duration(current, position, speed)); 3695 this.current(position); 3696 3697 if (this.isVisible()) { 3698 this.update(); 3699 } 3700 }; 3701 3702 /** 3703 * Slides to the next item. 3704 * @public 3705 * @param {Number} [speed] - The time in milliseconds for the transition. 3706 */ 3707 Owl.prototype.next = function(speed) { 3708 speed = speed || false; 3709 this.to(this.relative(this.current()) + 1, speed); 3710 }; 3711 3712 /** 3713 * Slides to the previous item. 3714 * @public 3715 * @param {Number} [speed] - The time in milliseconds for the transition. 3716 */ 3717 Owl.prototype.prev = function(speed) { 3718 speed = speed || false; 3719 this.to(this.relative(this.current()) - 1, speed); 3720 }; 3721 3722 /** 3723 * Handles the end of an animation. 3724 * @protected 3725 * @param {Event} event - The event arguments. 3726 */ 3727 Owl.prototype.onTransitionEnd = function(event) { 3728 3729 // if css2 animation then event object is undefined 3730 if (event !== undefined) { 3731 event.stopPropagation(); 3732 3733 // Catch only owl-stage transitionEnd event 3734 if ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) { 3735 return false; 3736 } 3737 } 3738 3739 this.leave('animating'); 3740 this.trigger('translated'); 3741 }; 3742 3743 /** 3744 * Gets viewport width. 3745 * @protected 3746 * @return {Number} - The width in pixel. 3747 */ 3748 Owl.prototype.viewport = function() { 3749 var width; 3750 if (this.options.responsiveBaseElement !== window) { 3751 width = $(this.options.responsiveBaseElement).width(); 3752 } else if (window.innerWidth) { 3753 width = window.innerWidth; 3754 } else if (document.documentElement && document.documentElement.clientWidth) { 3755 width = document.documentElement.clientWidth; 3756 } else { 3757 console.warn('Can not detect viewport width.'); 3758 } 3759 return width; 3760 }; 3761 3762 /** 3763 * Replaces the current content. 3764 * @public 3765 * @param {HTMLElement|jQuery|String} content - The new content. 3766 */ 3767 Owl.prototype.replace = function(content) { 3768 this.$stage.empty(); 3769 this._items = []; 3770 3771 if (content) { 3772 content = (content instanceof jQuery) ? content : $(content); 3773 } 3774 3775 if (this.settings.nestedItemSelector) { 3776 content = content.find('.' + this.settings.nestedItemSelector); 3777 } 3778 3779 content.filter(function() { 3780 return this.nodeType === 1; 3781 }).each($.proxy(function(index, item) { 3782 item = this.prepare(item); 3783 this.$stage.append(item); 3784 this._items.push(item); 3785 this._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1); 3786 }, this)); 3787 3788 this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0); 3789 3790 this.invalidate('items'); 3791 }; 3792 3793 /** 3794 * Adds an item. 3795 * @todo Use `item` instead of `content` for the event arguments. 3796 * @public 3797 * @param {HTMLElement|jQuery|String} content - The item content to add. 3798 * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end. 3799 */ 3800 Owl.prototype.add = function(content, position) { 3801 var current = this.relative(this._current); 3802 3803 position = position === undefined ? this._items.length : this.normalize(position, true); 3804 content = content instanceof jQuery ? content : $(content); 3805 3806 this.trigger('add', { content: content, position: position }); 3807 3808 content = this.prepare(content); 3809 3810 if (this._items.length === 0 || position === this._items.length) { 3811 this._items.length === 0 && this.$stage.append(content); 3812 this._items.length !== 0 && this._items[position - 1].after(content); 3813 this._items.push(content); 3814 this._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1); 3815 } else { 3816 this._items[position].before(content); 3817 this._items.splice(position, 0, content); 3818 this._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1); 3819 } 3820 3821 this._items[current] && this.reset(this._items[current].index()); 3822 3823 this.invalidate('items'); 3824 3825 this.trigger('added', { content: content, position: position }); 3826 }; 3827 3828 /** 3829 * Removes an item by its position. 3830 * @todo Use `item` instead of `content` for the event arguments. 3831 * @public 3832 * @param {Number} position - The relative position of the item to remove. 3833 */ 3834 Owl.prototype.remove = function(position) { 3835 position = this.normalize(position, true); 3836 3837 if (position === undefined) { 3838 return; 3839 } 3840 3841 this.trigger('remove', { content: this._items[position], position: position }); 3842 3843 this._items[position].remove(); 3844 this._items.splice(position, 1); 3845 this._mergers.splice(position, 1); 3846 3847 this.invalidate('items'); 3848 3849 this.trigger('removed', { content: null, position: position }); 3850 }; 3851 3852 /** 3853 * Preloads images with auto width. 3854 * @todo Replace by a more generic approach 3855 * @protected 3856 */ 3857 Owl.prototype.preloadAutoWidthImages = function(images) { 3858 images.each($.proxy(function(i, element) { 3859 this.enter('pre-loading'); 3860 element = $(element); 3861 $(new Image()).one('load', $.proxy(function(e) { 3862 element.attr('src', e.target.src); 3863 element.css('opacity', 1); 3864 this.leave('pre-loading'); 3865 !this.is('pre-loading') && !this.is('initializing') && this.refresh(); 3866 }, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina')); 3867 }, this)); 3868 }; 3869 3870 /** 3871 * Destroys the carousel. 3872 * @public 3873 */ 3874 Owl.prototype.destroy = function() { 3875 3876 this.$element.off('.owl.core'); 3877 this.$stage.off('.owl.core'); 3878 $(document).off('.owl.core'); 3879 3880 if (this.settings.responsive !== false) { 3881 window.clearTimeout(this.resizeTimer); 3882 this.off(window, 'resize', this._handlers.onThrottledResize); 3883 } 3884 3885 for (var i in this._plugins) { 3886 this._plugins[i].destroy(); 3887 } 3888 3889 this.$stage.children('.cloned').remove(); 3890 3891 this.$stage.unwrap(); 3892 this.$stage.children().contents().unwrap(); 3893 this.$stage.children().unwrap(); 3894 this.$stage.remove(); 3895 this.$element 3896 .removeClass(this.options.refreshClass) 3897 .removeClass(this.options.loadingClass) 3898 .removeClass(this.options.loadedClass) 3899 .removeClass(this.options.rtlClass) 3900 .removeClass(this.options.dragClass) 3901 .removeClass(this.options.grabClass) 3902 .attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\S+\\s', 'g'), '')) 3903 .removeData('owl.carousel'); 3904 }; 3905 3906 /** 3907 * Operators to calculate right-to-left and left-to-right. 3908 * @protected 3909 * @param {Number} [a] - The left side operand. 3910 * @param {String} [o] - The operator. 3911 * @param {Number} [b] - The right side operand. 3912 */ 3913 Owl.prototype.op = function(a, o, b) { 3914 var rtl = this.settings.rtl; 3915 switch (o) { 3916 case '<': 3917 return rtl ? a > b : a < b; 3918 case '>': 3919 return rtl ? a < b : a > b; 3920 case '>=': 3921 return rtl ? a <= b : a >= b; 3922 case '<=': 3923 return rtl ? a >= b : a <= b; 3924 default: 3925 break; 3926 } 3927 }; 3928 3929 /** 3930 * Attaches to an internal event. 3931 * @protected 3932 * @param {HTMLElement} element - The event source. 3933 * @param {String} event - The event name. 3934 * @param {Function} listener - The event handler to attach. 3935 * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not. 3936 */ 3937 Owl.prototype.on = function(element, event, listener, capture) { 3938 if (element.addEventListener) { 3939 element.addEventListener(event, listener, capture); 3940 } else if (element.attachEvent) { 3941 element.attachEvent('on' + event, listener); 3942 } 3943 }; 3944 3945 /** 3946 * Detaches from an internal event. 3947 * @protected 3948 * @param {HTMLElement} element - The event source. 3949 * @param {String} event - The event name. 3950 * @param {Function} listener - The attached event handler to detach. 3951 * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not. 3952 */ 3953 Owl.prototype.off = function(element, event, listener, capture) { 3954 if (element.removeEventListener) { 3955 element.removeEventListener(event, listener, capture); 3956 } else if (element.detachEvent) { 3957 element.detachEvent('on' + event, listener); 3958 } 3959 }; 3960 3961 /** 3962 * Triggers a public event. 3963 * @todo Remove `status`, `relatedTarget` should be used instead. 3964 * @protected 3965 * @param {String} name - The event name. 3966 * @param {*} [data=null] - The event data. 3967 * @param {String} [namespace=carousel] - The event namespace. 3968 * @param {String} [state] - The state which is associated with the event. 3969 * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not. 3970 * @returns {Event} - The event arguments. 3971 */ 3972 Owl.prototype.trigger = function(name, data, namespace, state, enter) { 3973 var status = { 3974 item: { count: this._items.length, index: this.current() } 3975 }, handler = $.camelCase( 3976 $.grep([ 'on', name, namespace ], function(v) { return v }) 3977 .join('-').toLowerCase() 3978 ), event = $.Event( 3979 [ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(), 3980 $.extend({ relatedTarget: this }, status, data) 3981 ); 3982 3983 if (!this._supress[name]) { 3984 $.each(this._plugins, function(name, plugin) { 3985 if (plugin.onTrigger) { 3986 plugin.onTrigger(event); 3987 } 3988 }); 3989 3990 this.register({ type: Owl.Type.Event, name: name }); 3991 this.$element.trigger(event); 3992 3993 if (this.settings && typeof this.settings[handler] === 'function') { 3994 this.settings[handler].call(this, event); 3995 } 3996 } 3997 3998 return event; 3999 }; 4000 4001 /** 4002 * Enters a state. 4003 * @param name - The state name. 4004 */ 4005 Owl.prototype.enter = function(name) { 4006 $.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) { 4007 if (this._states.current[name] === undefined) { 4008 this._states.current[name] = 0; 4009 } 4010 4011 this._states.current[name]++; 4012 }, this)); 4013 }; 4014 4015 /** 4016 * Leaves a state. 4017 * @param name - The state name. 4018 */ 4019 Owl.prototype.leave = function(name) { 4020 $.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) { 4021 this._states.current[name]--; 4022 }, this)); 4023 }; 4024 4025 /** 4026 * Registers an event or state. 4027 * @public 4028 * @param {Object} object - The event or state to register. 4029 */ 4030 Owl.prototype.register = function(object) { 4031 if (object.type === Owl.Type.Event) { 4032 if (!$.event.special[object.name]) { 4033 $.event.special[object.name] = {}; 4034 } 4035 4036 if (!$.event.special[object.name].owl) { 4037 var _default = $.event.special[object.name]._default; 4038 $.event.special[object.name]._default = function(e) { 4039 if (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) { 4040 return _default.apply(this, arguments); 4041 } 4042 return e.namespace && e.namespace.indexOf('owl') > -1; 4043 }; 4044 $.event.special[object.name].owl = true; 4045 } 4046 } else if (object.type === Owl.Type.State) { 4047 if (!this._states.tags[object.name]) { 4048 this._states.tags[object.name] = object.tags; 4049 } else { 4050 this._states.tags[object.name] = this._states.tags[object.name].concat(object.tags); 4051 } 4052 4053 this._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) { 4054 return $.inArray(tag, this._states.tags[object.name]) === i; 4055 }, this)); 4056 } 4057 }; 4058 4059 /** 4060 * Suppresses events. 4061 * @protected 4062 * @param {Array.<String>} events - The events to suppress. 4063 */ 4064 Owl.prototype.suppress = function(events) { 4065 $.each(events, $.proxy(function(index, event) { 4066 this._supress[event] = true; 4067 }, this)); 4068 }; 4069 4070 /** 4071 * Releases suppressed events. 4072 * @protected 4073 * @param {Array.<String>} events - The events to release. 4074 */ 4075 Owl.prototype.release = function(events) { 4076 $.each(events, $.proxy(function(index, event) { 4077 delete this._supress[event]; 4078 }, this)); 4079 }; 4080 4081 /** 4082 * Gets unified pointer coordinates from event. 4083 * @todo #261 4084 * @protected 4085 * @param {Event} - The `mousedown` or `touchstart` event. 4086 * @returns {Object} - Contains `x` and `y` coordinates of current pointer position. 4087 */ 4088 Owl.prototype.pointer = function(event) { 4089 var result = { x: null, y: null }; 4090 4091 event = event.originalEvent || event || window.event; 4092 4093 event = event.touches && event.touches.length ? 4094 event.touches[0] : event.changedTouches && event.changedTouches.length ? 4095 event.changedTouches[0] : event; 4096 4097 if (event.pageX) { 4098 result.x = event.pageX; 4099 result.y = event.pageY; 4100 } else { 4101 result.x = event.clientX; 4102 result.y = event.clientY; 4103 } 4104 4105 return result; 4106 }; 4107 4108 /** 4109 * Determines if the input is a Number or something that can be coerced to a Number 4110 * @protected 4111 * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested 4112 * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number 4113 */ 4114 Owl.prototype.isNumeric = function(number) { 4115 return !isNaN(parseFloat(number)); 4116 }; 4117 4118 /** 4119 * Gets the difference of two vectors. 4120 * @todo #261 4121 * @protected 4122 * @param {Object} - The first vector. 4123 * @param {Object} - The second vector. 4124 * @returns {Object} - The difference. 4125 */ 4126 Owl.prototype.difference = function(first, second) { 4127 return { 4128 x: first.x - second.x, 4129 y: first.y - second.y 4130 }; 4131 }; 4132 4133 /** 4134 * The jQuery Plugin for the Owl Carousel 4135 * @todo Navigation plugin `next` and `prev` 4136 * @public 4137 */ 4138 $.fn.owlCarousel = function(option) { 4139 var args = Array.prototype.slice.call(arguments, 1); 4140 4141 return this.each(function() { 4142 var $this = $(this), 4143 data = $this.data('owl.carousel'); 4144 4145 if (!data) { 4146 data = new Owl(this, typeof option == 'object' && option); 4147 $this.data('owl.carousel', data); 4148 4149 $.each([ 4150 'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove' 4151 ], function(i, event) { 4152 data.register({ type: Owl.Type.Event, name: event }); 4153 data.$element.on(event + '.owl.carousel.core', $.proxy(function(e) { 4154 if (e.namespace && e.relatedTarget !== this) { 4155 this.suppress([ event ]); 4156 data[event].apply(this, [].slice.call(arguments, 1)); 4157 this.release([ event ]); 4158 } 4159 }, data)); 4160 }); 4161 } 4162 4163 if (typeof option == 'string' && option.charAt(0) !== '_') { 4164 data[option].apply(data, args); 4165 } 4166 }); 4167 }; 4168 4169 /** 4170 * The constructor for the jQuery Plugin 4171 * @public 4172 */ 4173 $.fn.owlCarousel.Constructor = Owl; 4174 4175})(window.Zepto || window.jQuery, window, document); 4176 4177/** 4178 * AutoRefresh Plugin 4179 * @version 2.3.4 4180 * @author Artus Kolanowski 4181 * @author David Deutsch 4182 * @license The MIT License (MIT) 4183 */ 4184;(function($, window, document, undefined) { 4185 4186 /** 4187 * Creates the auto refresh plugin. 4188 * @class The Auto Refresh Plugin 4189 * @param {Owl} carousel - The Owl Carousel 4190 */ 4191 var AutoRefresh = function(carousel) { 4192 /** 4193 * Reference to the core. 4194 * @protected 4195 * @type {Owl} 4196 */ 4197 this._core = carousel; 4198 4199 /** 4200 * Refresh interval. 4201 * @protected 4202 * @type {number} 4203 */ 4204 this._interval = null; 4205 4206 /** 4207 * Whether the element is currently visible or not. 4208 * @protected 4209 * @type {Boolean} 4210 */ 4211 this._visible = null; 4212 4213 /** 4214 * All event handlers. 4215 * @protected 4216 * @type {Object} 4217 */ 4218 this._handlers = { 4219 'initialized.owl.carousel': $.proxy(function(e) { 4220 if (e.namespace && this._core.settings.autoRefresh) { 4221 this.watch(); 4222 } 4223 }, this) 4224 }; 4225 4226 // set default options 4227 this._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options); 4228 4229 // register event handlers 4230 this._core.$element.on(this._handlers); 4231 }; 4232 4233 /** 4234 * Default options. 4235 * @public 4236 */ 4237 AutoRefresh.Defaults = { 4238 autoRefresh: true, 4239 autoRefreshInterval: 500 4240 }; 4241 4242 /** 4243 * Watches the element. 4244 */ 4245 AutoRefresh.prototype.watch = function() { 4246 if (this._interval) { 4247 return; 4248 } 4249 4250 this._visible = this._core.isVisible(); 4251 this._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval); 4252 }; 4253 4254 /** 4255 * Refreshes the element. 4256 */ 4257 AutoRefresh.prototype.refresh = function() { 4258 if (this._core.isVisible() === this._visible) { 4259 return; 4260 } 4261 4262 this._visible = !this._visible; 4263 4264 this._core.$element.toggleClass('owl-hidden', !this._visible); 4265 4266 this._visible && (this._core.invalidate('width') && this._core.refresh()); 4267 }; 4268 4269 /** 4270 * Destroys the plugin. 4271 */ 4272 AutoRefresh.prototype.destroy = function() { 4273 var handler, property; 4274 4275 window.clearInterval(this._interval); 4276 4277 for (handler in this._handlers) { 4278 this._core.$element.off(handler, this._handlers[handler]); 4279 } 4280 for (property in Object.getOwnPropertyNames(this)) { 4281 typeof this[property] != 'function' && (this[property] = null); 4282 } 4283 }; 4284 4285 $.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh; 4286 4287})(window.Zepto || window.jQuery, window, document); 4288 4289/** 4290 * Lazy Plugin 4291 * @version 2.3.4 4292 * @author Bartosz Wojciechowski 4293 * @author David Deutsch 4294 * @license The MIT License (MIT) 4295 */ 4296;(function($, window, document, undefined) { 4297 4298 /** 4299 * Creates the lazy plugin. 4300 * @class The Lazy Plugin 4301 * @param {Owl} carousel - The Owl Carousel 4302 */ 4303 var Lazy = function(carousel) { 4304 4305 /** 4306 * Reference to the core. 4307 * @protected 4308 * @type {Owl} 4309 */ 4310 this._core = carousel; 4311 4312 /** 4313 * Already loaded items. 4314 * @protected 4315 * @type {Array.<jQuery>} 4316 */ 4317 this._loaded = []; 4318 4319 /** 4320 * Event handlers. 4321 * @protected 4322 * @type {Object} 4323 */ 4324 this._handlers = { 4325 'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) { 4326 if (!e.namespace) { 4327 return; 4328 } 4329 4330 if (!this._core.settings || !this._core.settings.lazyLoad) { 4331 return; 4332 } 4333 4334 if ((e.property && e.property.name == 'position') || e.type == 'initialized') { 4335 var settings = this._core.settings, 4336 n = (settings.center && Math.ceil(settings.items / 2) || settings.items), 4337 i = ((settings.center && n * -1) || 0), 4338 position = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i, 4339 clones = this._core.clones().length, 4340 load = $.proxy(function(i, v) { this.load(v) }, this); 4341 //TODO: Need documentation for this new option 4342 if (settings.lazyLoadEager > 0) { 4343 n += settings.lazyLoadEager; 4344 // If the carousel is looping also preload images that are to the "left" 4345 if (settings.loop) { 4346 position -= settings.lazyLoadEager; 4347 n++; 4348 } 4349 } 4350 4351 while (i++ < n) { 4352 this.load(clones / 2 + this._core.relative(position)); 4353 clones && $.each(this._core.clones(this._core.relative(position)), load); 4354 position++; 4355 } 4356 } 4357 }, this) 4358 }; 4359 4360 // set the default options 4361 this._core.options = $.extend({}, Lazy.Defaults, this._core.options); 4362 4363 // register event handler 4364 this._core.$element.on(this._handlers); 4365 }; 4366 4367 /** 4368 * Default options. 4369 * @public 4370 */ 4371 Lazy.Defaults = { 4372 lazyLoad: false, 4373 lazyLoadEager: 0 4374 }; 4375 4376 /** 4377 * Loads all resources of an item at the specified position. 4378 * @param {Number} position - The absolute position of the item. 4379 * @protected 4380 */ 4381 Lazy.prototype.load = function(position) { 4382 var $item = this._core.$stage.children().eq(position), 4383 $elements = $item && $item.find('.owl-lazy'); 4384 4385 if (!$elements || $.inArray($item.get(0), this._loaded) > -1) { 4386 return; 4387 } 4388 4389 $elements.each($.proxy(function(index, element) { 4390 var $element = $(element), image, 4391 url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src') || $element.attr('data-srcset'); 4392 4393 this._core.trigger('load', { element: $element, url: url }, 'lazy'); 4394 4395 if ($element.is('img')) { 4396 $element.one('load.owl.lazy', $.proxy(function() { 4397 $element.css('opacity', 1); 4398 this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); 4399 }, this)).attr('src', url); 4400 } else if ($element.is('source')) { 4401 $element.one('load.owl.lazy', $.proxy(function() { 4402 this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); 4403 }, this)).attr('srcset', url); 4404 } else { 4405 image = new Image(); 4406 image.onload = $.proxy(function() { 4407 $element.css({ 4408 'background-image': 'url("' + url + '")', 4409 'opacity': '1' 4410 }); 4411 this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); 4412 }, this); 4413 image.src = url; 4414 } 4415 }, this)); 4416 4417 this._loaded.push($item.get(0)); 4418 }; 4419 4420 /** 4421 * Destroys the plugin. 4422 * @public 4423 */ 4424 Lazy.prototype.destroy = function() { 4425 var handler, property; 4426 4427 for (handler in this.handlers) { 4428 this._core.$element.off(handler, this.handlers[handler]); 4429 } 4430 for (property in Object.getOwnPropertyNames(this)) { 4431 typeof this[property] != 'function' && (this[property] = null); 4432 } 4433 }; 4434 4435 $.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy; 4436 4437})(window.Zepto || window.jQuery, window, document); 4438 4439/** 4440 * AutoHeight Plugin 4441 * @version 2.3.4 4442 * @author Bartosz Wojciechowski 4443 * @author David Deutsch 4444 * @license The MIT License (MIT) 4445 */ 4446;(function($, window, document, undefined) { 4447 4448 /** 4449 * Creates the auto height plugin. 4450 * @class The Auto Height Plugin 4451 * @param {Owl} carousel - The Owl Carousel 4452 */ 4453 var AutoHeight = function(carousel) { 4454 /** 4455 * Reference to the core. 4456 * @protected 4457 * @type {Owl} 4458 */ 4459 this._core = carousel; 4460 4461 this._previousHeight = null; 4462 4463 /** 4464 * All event handlers. 4465 * @protected 4466 * @type {Object} 4467 */ 4468 this._handlers = { 4469 'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) { 4470 if (e.namespace && this._core.settings.autoHeight) { 4471 this.update(); 4472 } 4473 }, this), 4474 'changed.owl.carousel': $.proxy(function(e) { 4475 if (e.namespace && this._core.settings.autoHeight && e.property.name === 'position'){ 4476 this.update(); 4477 } 4478 }, this), 4479 'loaded.owl.lazy': $.proxy(function(e) { 4480 if (e.namespace && this._core.settings.autoHeight 4481 && e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) { 4482 this.update(); 4483 } 4484 }, this) 4485 }; 4486 4487 // set default options 4488 this._core.options = $.extend({}, AutoHeight.Defaults, this._core.options); 4489 4490 // register event handlers 4491 this._core.$element.on(this._handlers); 4492 this._intervalId = null; 4493 var refThis = this; 4494 4495 // These changes have been taken from a PR by gavrochelegnou proposed in #1575 4496 // and have been made compatible with the latest jQuery version 4497 $(window).on('load', function() { 4498 if (refThis._core.settings.autoHeight) { 4499 refThis.update(); 4500 } 4501 }); 4502 4503 // Autoresize the height of the carousel when window is resized 4504 // When carousel has images, the height is dependent on the width 4505 // and should also change on resize 4506 $(window).resize(function() { 4507 if (refThis._core.settings.autoHeight) { 4508 if (refThis._intervalId != null) { 4509 clearTimeout(refThis._intervalId); 4510 } 4511 4512 refThis._intervalId = setTimeout(function() { 4513 refThis.update(); 4514 }, 250); 4515 } 4516 }); 4517 4518 }; 4519 4520 /** 4521 * Default options. 4522 * @public 4523 */ 4524 AutoHeight.Defaults = { 4525 autoHeight: false, 4526 autoHeightClass: 'owl-height' 4527 }; 4528 4529 /** 4530 * Updates the view. 4531 */ 4532 AutoHeight.prototype.update = function() { 4533 var start = this._core._current, 4534 end = start + this._core.settings.items, 4535 lazyLoadEnabled = this._core.settings.lazyLoad, 4536 visible = this._core.$stage.children().toArray().slice(start, end), 4537 heights = [], 4538 maxheight = 0; 4539 4540 $.each(visible, function(index, item) { 4541 heights.push($(item).height()); 4542 }); 4543 4544 maxheight = Math.max.apply(null, heights); 4545 4546 if (maxheight <= 1 && lazyLoadEnabled && this._previousHeight) { 4547 maxheight = this._previousHeight; 4548 } 4549 4550 this._previousHeight = maxheight; 4551 4552 this._core.$stage.parent() 4553 .height(maxheight) 4554 .addClass(this._core.settings.autoHeightClass); 4555 }; 4556 4557 AutoHeight.prototype.destroy = function() { 4558 var handler, property; 4559 4560 for (handler in this._handlers) { 4561 this._core.$element.off(handler, this._handlers[handler]); 4562 } 4563 for (property in Object.getOwnPropertyNames(this)) { 4564 typeof this[property] !== 'function' && (this[property] = null); 4565 } 4566 }; 4567 4568 $.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight; 4569 4570})(window.Zepto || window.jQuery, window, document); 4571 4572/** 4573 * Video Plugin 4574 * @version 2.3.4 4575 * @author Bartosz Wojciechowski 4576 * @author David Deutsch 4577 * @license The MIT License (MIT) 4578 */ 4579;(function($, window, document, undefined) { 4580 4581 /** 4582 * Creates the video plugin. 4583 * @class The Video Plugin 4584 * @param {Owl} carousel - The Owl Carousel 4585 */ 4586 var Video = function(carousel) { 4587 /** 4588 * Reference to the core. 4589 * @protected 4590 * @type {Owl} 4591 */ 4592 this._core = carousel; 4593 4594 /** 4595 * Cache all video URLs. 4596 * @protected 4597 * @type {Object} 4598 */ 4599 this._videos = {}; 4600 4601 /** 4602 * Current playing item. 4603 * @protected 4604 * @type {jQuery} 4605 */ 4606 this._playing = null; 4607 4608 /** 4609 * All event handlers. 4610 * @todo The cloned content removale is too late 4611 * @protected 4612 * @type {Object} 4613 */ 4614 this._handlers = { 4615 'initialized.owl.carousel': $.proxy(function(e) { 4616 if (e.namespace) { 4617 this._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] }); 4618 } 4619 }, this), 4620 'resize.owl.carousel': $.proxy(function(e) { 4621 if (e.namespace && this._core.settings.video && this.isInFullScreen()) { 4622 e.preventDefault(); 4623 } 4624 }, this), 4625 'refreshed.owl.carousel': $.proxy(function(e) { 4626 if (e.namespace && this._core.is('resizing')) { 4627 this._core.$stage.find('.cloned .owl-video-frame').remove(); 4628 } 4629 }, this), 4630 'changed.owl.carousel': $.proxy(function(e) { 4631 if (e.namespace && e.property.name === 'position' && this._playing) { 4632 this.stop(); 4633 } 4634 }, this), 4635 'prepared.owl.carousel': $.proxy(function(e) { 4636 if (!e.namespace) { 4637 return; 4638 } 4639 4640 var $element = $(e.content).find('.owl-video'); 4641 4642 if ($element.length) { 4643 $element.css('display', 'none'); 4644 this.fetch($element, $(e.content)); 4645 } 4646 }, this) 4647 }; 4648 4649 // set default options 4650 this._core.options = $.extend({}, Video.Defaults, this._core.options); 4651 4652 // register event handlers 4653 this._core.$element.on(this._handlers); 4654 4655 this._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) { 4656 this.play(e); 4657 }, this)); 4658 }; 4659 4660 /** 4661 * Default options. 4662 * @public 4663 */ 4664 Video.Defaults = { 4665 video: false, 4666 videoHeight: false, 4667 videoWidth: false 4668 }; 4669 4670 /** 4671 * Gets the video ID and the type (YouTube/Vimeo/vzaar only). 4672 * @protected 4673 * @param {jQuery} target - The target containing the video data. 4674 * @param {jQuery} item - The item containing the video. 4675 */ 4676 Video.prototype.fetch = function(target, item) { 4677 var type = (function() { 4678 if (target.attr('data-vimeo-id')) { 4679 return 'vimeo'; 4680 } else if (target.attr('data-vzaar-id')) { 4681 return 'vzaar' 4682 } else { 4683 return 'youtube'; 4684 } 4685 })(), 4686 id = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'), 4687 width = target.attr('data-width') || this._core.settings.videoWidth, 4688 height = target.attr('data-height') || this._core.settings.videoHeight, 4689 url = target.attr('href'); 4690 4691 if (url) { 4692 4693 /* 4694 Parses the id's out of the following urls (and probably more): 4695 https://www.youtube.com/watch?v=:id 4696 https://youtu.be/:id 4697 https://vimeo.com/:id 4698 https://vimeo.com/channels/:channel/:id 4699 https://vimeo.com/groups/:group/videos/:id 4700 https://app.vzaar.com/videos/:id 4701 4702 Visual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F 4703 */ 4704 4705 id = url.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com|be\-nocookie\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/); 4706 4707 if (id[3].indexOf('youtu') > -1) { 4708 type = 'youtube'; 4709 } else if (id[3].indexOf('vimeo') > -1) { 4710 type = 'vimeo'; 4711 } else if (id[3].indexOf('vzaar') > -1) { 4712 type = 'vzaar'; 4713 } else { 4714 throw new Error('Video URL not supported.'); 4715 } 4716 id = id[6]; 4717 } else { 4718 throw new Error('Missing video URL.'); 4719 } 4720 4721 this._videos[url] = { 4722 type: type, 4723 id: id, 4724 width: width, 4725 height: height 4726 }; 4727 4728 item.attr('data-video', url); 4729 4730 this.thumbnail(target, this._videos[url]); 4731 }; 4732 4733 /** 4734 * Creates video thumbnail. 4735 * @protected 4736 * @param {jQuery} target - The target containing the video data. 4737 * @param {Object} info - The video info object. 4738 * @see `fetch` 4739 */ 4740 Video.prototype.thumbnail = function(target, video) { 4741 var tnLink, 4742 icon, 4743 path, 4744 dimensions = video.width && video.height ? 'width:' + video.width + 'px;height:' + video.height + 'px;' : '', 4745 customTn = target.find('img'), 4746 srcType = 'src', 4747 lazyClass = '', 4748 settings = this._core.settings, 4749 create = function(path) { 4750 icon = '<div class="owl-video-play-icon"></div>'; 4751 4752 if (settings.lazyLoad) { 4753 tnLink = $('<div/>',{ 4754 "class": 'owl-video-tn ' + lazyClass, 4755 "srcType": path 4756 }); 4757 } else { 4758 tnLink = $( '<div/>', { 4759 "class": "owl-video-tn", 4760 "style": 'opacity:1;background-image:url(' + path + ')' 4761 }); 4762 } 4763 target.after(tnLink); 4764 target.after(icon); 4765 }; 4766 4767 // wrap video content into owl-video-wrapper div 4768 target.wrap( $( '<div/>', { 4769 "class": "owl-video-wrapper", 4770 "style": dimensions 4771 })); 4772 4773 if (this._core.settings.lazyLoad) { 4774 srcType = 'data-src'; 4775 lazyClass = 'owl-lazy'; 4776 } 4777 4778 // custom thumbnail 4779 if (customTn.length) { 4780 create(customTn.attr(srcType)); 4781 customTn.remove(); 4782 return false; 4783 } 4784 4785 if (video.type === 'youtube') { 4786 path = "//img.youtube.com/vi/" + video.id + "/hqdefault.jpg"; 4787 create(path); 4788 } else if (video.type === 'vimeo') { 4789 $.ajax({ 4790 type: 'GET', 4791 url: '//vimeo.com/api/v2/video/' + video.id + '.json', 4792 jsonp: 'callback', 4793 dataType: 'jsonp', 4794 success: function(data) { 4795 path = data[0].thumbnail_large; 4796 create(path); 4797 } 4798 }); 4799 } else if (video.type === 'vzaar') { 4800 $.ajax({ 4801 type: 'GET', 4802 url: '//vzaar.com/api/videos/' + video.id + '.json', 4803 jsonp: 'callback', 4804 dataType: 'jsonp', 4805 success: function(data) { 4806 path = data.framegrab_url; 4807 create(path); 4808 } 4809 }); 4810 } 4811 }; 4812 4813 /** 4814 * Stops the current video. 4815 * @public 4816 */ 4817 Video.prototype.stop = function() { 4818 this._core.trigger('stop', null, 'video'); 4819 this._playing.find('.owl-video-frame').remove(); 4820 this._playing.removeClass('owl-video-playing'); 4821 this._playing = null; 4822 this._core.leave('playing'); 4823 this._core.trigger('stopped', null, 'video'); 4824 }; 4825 4826 /** 4827 * Starts the current video. 4828 * @public 4829 * @param {Event} event - The event arguments. 4830 */ 4831 Video.prototype.play = function(event) { 4832 var target = $(event.target), 4833 item = target.closest('.' + this._core.settings.itemClass), 4834 video = this._videos[item.attr('data-video')], 4835 width = video.width || '100%', 4836 height = video.height || this._core.$stage.height(), 4837 html, 4838 iframe; 4839 4840 if (this._playing) { 4841 return; 4842 } 4843 4844 this._core.enter('playing'); 4845 this._core.trigger('play', null, 'video'); 4846 4847 item = this._core.items(this._core.relative(item.index())); 4848 4849 this._core.reset(item.index()); 4850 4851 html = $( '<iframe frameborder="0" allowfullscreen mozallowfullscreen webkitAllowFullScreen ></iframe>' ); 4852 html.attr( 'height', height ); 4853 html.attr( 'width', width ); 4854 if (video.type === 'youtube') { 4855 html.attr( 'src', '//www.youtube.com/embed/' + video.id + '?autoplay=1&rel=0&v=' + video.id ); 4856 } else if (video.type === 'vimeo') { 4857 html.attr( 'src', '//player.vimeo.com/video/' + video.id + '?autoplay=1' ); 4858 } else if (video.type === 'vzaar') { 4859 html.attr( 'src', '//view.vzaar.com/' + video.id + '/player?autoplay=true' ); 4860 } 4861 4862 iframe = $(html).wrap( '<div class="owl-video-frame" />' ).insertAfter(item.find('.owl-video')); 4863 4864 this._playing = item.addClass('owl-video-playing'); 4865 }; 4866 4867 /** 4868 * Checks whether an video is currently in full screen mode or not. 4869 * @todo Bad style because looks like a readonly method but changes members. 4870 * @protected 4871 * @returns {Boolean} 4872 */ 4873 Video.prototype.isInFullScreen = function() { 4874 var element = document.fullscreenElement || document.mozFullScreenElement || 4875 document.webkitFullscreenElement; 4876 4877 return element && $(element).parent().hasClass('owl-video-frame'); 4878 }; 4879 4880 /** 4881 * Destroys the plugin. 4882 */ 4883 Video.prototype.destroy = function() { 4884 var handler, property; 4885 4886 this._core.$element.off('click.owl.video'); 4887 4888 for (handler in this._handlers) { 4889 this._core.$element.off(handler, this._handlers[handler]); 4890 } 4891 for (property in Object.getOwnPropertyNames(this)) { 4892 typeof this[property] != 'function' && (this[property] = null); 4893 } 4894 }; 4895 4896 $.fn.owlCarousel.Constructor.Plugins.Video = Video; 4897 4898})(window.Zepto || window.jQuery, window, document); 4899 4900/** 4901 * Animate Plugin 4902 * @version 2.3.4 4903 * @author Bartosz Wojciechowski 4904 * @author David Deutsch 4905 * @license The MIT License (MIT) 4906 */ 4907;(function($, window, document, undefined) { 4908 4909 /** 4910 * Creates the animate plugin. 4911 * @class The Navigation Plugin 4912 * @param {Owl} scope - The Owl Carousel 4913 */ 4914 var Animate = function(scope) { 4915 this.core = scope; 4916 this.core.options = $.extend({}, Animate.Defaults, this.core.options); 4917 this.swapping = true; 4918 this.previous = undefined; 4919 this.next = undefined; 4920 4921 this.handlers = { 4922 'change.owl.carousel': $.proxy(function(e) { 4923 if (e.namespace && e.property.name == 'position') { 4924 this.previous = this.core.current(); 4925 this.next = e.property.value; 4926 } 4927 }, this), 4928 'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) { 4929 if (e.namespace) { 4930 this.swapping = e.type == 'translated'; 4931 } 4932 }, this), 4933 'translate.owl.carousel': $.proxy(function(e) { 4934 if (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) { 4935 this.swap(); 4936 } 4937 }, this) 4938 }; 4939 4940 this.core.$element.on(this.handlers); 4941 }; 4942 4943 /** 4944 * Default options. 4945 * @public 4946 */ 4947 Animate.Defaults = { 4948 animateOut: false, 4949 animateIn: false 4950 }; 4951 4952 /** 4953 * Toggles the animation classes whenever an translations starts. 4954 * @protected 4955 * @returns {Boolean|undefined} 4956 */ 4957 Animate.prototype.swap = function() { 4958 4959 if (this.core.settings.items !== 1) { 4960 return; 4961 } 4962 4963 if (!$.support.animation || !$.support.transition) { 4964 return; 4965 } 4966 4967 this.core.speed(0); 4968 4969 var left, 4970 clear = $.proxy(this.clear, this), 4971 previous = this.core.$stage.children().eq(this.previous), 4972 next = this.core.$stage.children().eq(this.next), 4973 incoming = this.core.settings.animateIn, 4974 outgoing = this.core.settings.animateOut; 4975 4976 if (this.core.current() === this.previous) { 4977 return; 4978 } 4979 4980 if (outgoing) { 4981 left = this.core.coordinates(this.previous) - this.core.coordinates(this.next); 4982 previous.one($.support.animation.end, clear) 4983 .css( { 'left': left + 'px' } ) 4984 .addClass('animated owl-animated-out') 4985 .addClass(outgoing); 4986 } 4987 4988 if (incoming) { 4989 next.one($.support.animation.end, clear) 4990 .addClass('animated owl-animated-in') 4991 .addClass(incoming); 4992 } 4993 }; 4994 4995 Animate.prototype.clear = function(e) { 4996 $(e.target).css( { 'left': '' } ) 4997 .removeClass('animated owl-animated-out owl-animated-in') 4998 .removeClass(this.core.settings.animateIn) 4999 .removeClass(this.core.settings.animateOut); 5000 this.core.onTransitionEnd(); 5001 }; 5002 5003 /** 5004 * Destroys the plugin. 5005 * @public 5006 */ 5007 Animate.prototype.destroy = function() { 5008 var handler, property; 5009 5010 for (handler in this.handlers) { 5011 this.core.$element.off(handler, this.handlers[handler]); 5012 } 5013 for (property in Object.getOwnPropertyNames(this)) { 5014 typeof this[property] != 'function' && (this[property] = null); 5015 } 5016 }; 5017 5018 $.fn.owlCarousel.Constructor.Plugins.Animate = Animate; 5019 5020})(window.Zepto || window.jQuery, window, document); 5021 5022/** 5023 * Autoplay Plugin 5024 * @version 2.3.4 5025 * @author Bartosz Wojciechowski 5026 * @author Artus Kolanowski 5027 * @author David Deutsch 5028 * @author Tom De Caluwé 5029 * @license The MIT License (MIT) 5030 */ 5031;(function($, window, document, undefined) { 5032 5033 /** 5034 * Creates the autoplay plugin. 5035 * @class The Autoplay Plugin 5036 * @param {Owl} scope - The Owl Carousel 5037 */ 5038 var Autoplay = function(carousel) { 5039 /** 5040 * Reference to the core. 5041 * @protected 5042 * @type {Owl} 5043 */ 5044 this._core = carousel; 5045 5046 /** 5047 * The autoplay timeout id. 5048 * @type {Number} 5049 */ 5050 this._call = null; 5051 5052 /** 5053 * Depending on the state of the plugin, this variable contains either 5054 * the start time of the timer or the current timer value if it's 5055 * paused. Since we start in a paused state we initialize the timer 5056 * value. 5057 * @type {Number} 5058 */ 5059 this._time = 0; 5060 5061 /** 5062 * Stores the timeout currently used. 5063 * @type {Number} 5064 */ 5065 this._timeout = 0; 5066 5067 /** 5068 * Indicates whenever the autoplay is paused. 5069 * @type {Boolean} 5070 */ 5071 this._paused = true; 5072 5073 /** 5074 * All event handlers. 5075 * @protected 5076 * @type {Object} 5077 */ 5078 this._handlers = { 5079 'changed.owl.carousel': $.proxy(function(e) { 5080 if (e.namespace && e.property.name === 'settings') { 5081 if (this._core.settings.autoplay) { 5082 this.play(); 5083 } else { 5084 this.stop(); 5085 } 5086 } else if (e.namespace && e.property.name === 'position' && this._paused) { 5087 // Reset the timer. This code is triggered when the position 5088 // of the carousel was changed through user interaction. 5089 this._time = 0; 5090 } 5091 }, this), 5092 'initialized.owl.carousel': $.proxy(function(e) { 5093 if (e.namespace && this._core.settings.autoplay) { 5094 this.play(); 5095 } 5096 }, this), 5097 'play.owl.autoplay': $.proxy(function(e, t, s) { 5098 if (e.namespace) { 5099 this.play(t, s); 5100 } 5101 }, this), 5102 'stop.owl.autoplay': $.proxy(function(e) { 5103 if (e.namespace) { 5104 this.stop(); 5105 } 5106 }, this), 5107 'mouseover.owl.autoplay': $.proxy(function() { 5108 if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) { 5109 this.pause(); 5110 } 5111 }, this), 5112 'mouseleave.owl.autoplay': $.proxy(function() { 5113 if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) { 5114 this.play(); 5115 } 5116 }, this), 5117 'touchstart.owl.core': $.proxy(function() { 5118 if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) { 5119 this.pause(); 5120 } 5121 }, this), 5122 'touchend.owl.core': $.proxy(function() { 5123 if (this._core.settings.autoplayHoverPause) { 5124 this.play(); 5125 } 5126 }, this) 5127 }; 5128 5129 // register event handlers 5130 this._core.$element.on(this._handlers); 5131 5132 // set default options 5133 this._core.options = $.extend({}, Autoplay.Defaults, this._core.options); 5134 }; 5135 5136 /** 5137 * Default options. 5138 * @public 5139 */ 5140 Autoplay.Defaults = { 5141 autoplay: false, 5142 autoplayTimeout: 5000, 5143 autoplayHoverPause: false, 5144 autoplaySpeed: false 5145 }; 5146 5147 /** 5148 * Transition to the next slide and set a timeout for the next transition. 5149 * @private 5150 * @param {Number} [speed] - The animation speed for the animations. 5151 */ 5152 Autoplay.prototype._next = function(speed) { 5153 this._call = window.setTimeout( 5154 $.proxy(this._next, this, speed), 5155 this._timeout * (Math.round(this.read() / this._timeout) + 1) - this.read() 5156 ); 5157 5158 if (this._core.is('interacting') || document.hidden) { 5159 return; 5160 } 5161 this._core.next(speed || this._core.settings.autoplaySpeed); 5162 } 5163 5164 /** 5165 * Reads the current timer value when the timer is playing. 5166 * @public 5167 */ 5168 Autoplay.prototype.read = function() { 5169 return new Date().getTime() - this._time; 5170 }; 5171 5172 /** 5173 * Starts the autoplay. 5174 * @public 5175 * @param {Number} [timeout] - The interval before the next animation starts. 5176 * @param {Number} [speed] - The animation speed for the animations. 5177 */ 5178 Autoplay.prototype.play = function(timeout, speed) { 5179 var elapsed; 5180 5181 if (!this._core.is('rotating')) { 5182 this._core.enter('rotating'); 5183 } 5184 5185 timeout = timeout || this._core.settings.autoplayTimeout; 5186 5187 // Calculate the elapsed time since the last transition. If the carousel 5188 // wasn't playing this calculation will yield zero. 5189 elapsed = Math.min(this._time % (this._timeout || timeout), timeout); 5190 5191 if (this._paused) { 5192 // Start the clock. 5193 this._time = this.read(); 5194 this._paused = false; 5195 } else { 5196 // Clear the active timeout to allow replacement. 5197 window.clearTimeout(this._call); 5198 } 5199 5200 // Adjust the origin of the timer to match the new timeout value. 5201 this._time += this.read() % timeout - elapsed; 5202 5203 this._timeout = timeout; 5204 this._call = window.setTimeout($.proxy(this._next, this, speed), timeout - elapsed); 5205 }; 5206 5207 /** 5208 * Stops the autoplay. 5209 * @public 5210 */ 5211 Autoplay.prototype.stop = function() { 5212 if (this._core.is('rotating')) { 5213 // Reset the clock. 5214 this._time = 0; 5215 this._paused = true; 5216 5217 window.clearTimeout(this._call); 5218 this._core.leave('rotating'); 5219 } 5220 }; 5221 5222 /** 5223 * Pauses the autoplay. 5224 * @public 5225 */ 5226 Autoplay.prototype.pause = function() { 5227 if (this._core.is('rotating') && !this._paused) { 5228 // Pause the clock. 5229 this._time = this.read(); 5230 this._paused = true; 5231 5232 window.clearTimeout(this._call); 5233 } 5234 }; 5235 5236 /** 5237 * Destroys the plugin. 5238 */ 5239 Autoplay.prototype.destroy = function() { 5240 var handler, property; 5241 5242 this.stop(); 5243 5244 for (handler in this._handlers) { 5245 this._core.$element.off(handler, this._handlers[handler]); 5246 } 5247 for (property in Object.getOwnPropertyNames(this)) { 5248 typeof this[property] != 'function' && (this[property] = null); 5249 } 5250 }; 5251 5252 $.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay; 5253 5254})(window.Zepto || window.jQuery, window, document); 5255 5256/** 5257 * Navigation Plugin 5258 * @version 2.3.4 5259 * @author Artus Kolanowski 5260 * @author David Deutsch 5261 * @license The MIT License (MIT) 5262 */ 5263;(function($, window, document, undefined) { 5264 'use strict'; 5265 5266 /** 5267 * Creates the navigation plugin. 5268 * @class The Navigation Plugin 5269 * @param {Owl} carousel - The Owl Carousel. 5270 */ 5271 var Navigation = function(carousel) { 5272 /** 5273 * Reference to the core. 5274 * @protected 5275 * @type {Owl} 5276 */ 5277 this._core = carousel; 5278 5279 /** 5280 * Indicates whether the plugin is initialized or not. 5281 * @protected 5282 * @type {Boolean} 5283 */ 5284 this._initialized = false; 5285 5286 /** 5287 * The current paging indexes. 5288 * @protected 5289 * @type {Array} 5290 */ 5291 this._pages = []; 5292 5293 /** 5294 * All DOM elements of the user interface. 5295 * @protected 5296 * @type {Object} 5297 */ 5298 this._controls = {}; 5299 5300 /** 5301 * Markup for an indicator. 5302 * @protected 5303 * @type {Array.<String>} 5304 */ 5305 this._templates = []; 5306 5307 /** 5308 * The carousel element. 5309 * @type {jQuery} 5310 */ 5311 this.$element = this._core.$element; 5312 5313 /** 5314 * Overridden methods of the carousel. 5315 * @protected 5316 * @type {Object} 5317 */ 5318 this._overrides = { 5319 next: this._core.next, 5320 prev: this._core.prev, 5321 to: this._core.to 5322 }; 5323 5324 /** 5325 * All event handlers. 5326 * @protected 5327 * @type {Object} 5328 */ 5329 this._handlers = { 5330 'prepared.owl.carousel': $.proxy(function(e) { 5331 if (e.namespace && this._core.settings.dotsData) { 5332 this._templates.push('<div class="' + this._core.settings.dotClass + '">' + 5333 $(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '</div>'); 5334 } 5335 }, this), 5336 'added.owl.carousel': $.proxy(function(e) { 5337 if (e.namespace && this._core.settings.dotsData) { 5338 this._templates.splice(e.position, 0, this._templates.pop()); 5339 } 5340 }, this), 5341 'remove.owl.carousel': $.proxy(function(e) { 5342 if (e.namespace && this._core.settings.dotsData) { 5343 this._templates.splice(e.position, 1); 5344 } 5345 }, this), 5346 'changed.owl.carousel': $.proxy(function(e) { 5347 if (e.namespace && e.property.name == 'position') { 5348 this.draw(); 5349 } 5350 }, this), 5351 'initialized.owl.carousel': $.proxy(function(e) { 5352 if (e.namespace && !this._initialized) { 5353 this._core.trigger('initialize', null, 'navigation'); 5354 this.initialize(); 5355 this.update(); 5356 this.draw(); 5357 this._initialized = true; 5358 this._core.trigger('initialized', null, 'navigation'); 5359 } 5360 }, this), 5361 'refreshed.owl.carousel': $.proxy(function(e) { 5362 if (e.namespace && this._initialized) { 5363 this._core.trigger('refresh', null, 'navigation'); 5364 this.update(); 5365 this.draw(); 5366 this._core.trigger('refreshed', null, 'navigation'); 5367 } 5368 }, this) 5369 }; 5370 5371 // set default options 5372 this._core.options = $.extend({}, Navigation.Defaults, this._core.options); 5373 5374 // register event handlers 5375 this.$element.on(this._handlers); 5376 }; 5377 5378 /** 5379 * Default options. 5380 * @public 5381 * @todo Rename `slideBy` to `navBy` 5382 */ 5383 Navigation.Defaults = { 5384 nav: false, 5385 navText: [ 5386 '<span aria-label="' + 'Previous' + '">‹</span>', 5387 '<span aria-label="' + 'Next' + '">›</span>' 5388 ], 5389 navSpeed: false, 5390 navElement: 'button type="button" role="presentation"', 5391 navContainer: false, 5392 navContainerClass: 'owl-nav', 5393 navClass: [ 5394 'owl-prev', 5395 'owl-next' 5396 ], 5397 slideBy: 1, 5398 dotClass: 'owl-dot', 5399 dotsClass: 'owl-dots', 5400 dots: true, 5401 dotsEach: false, 5402 dotsData: false, 5403 dotsSpeed: false, 5404 dotsContainer: false 5405 }; 5406 5407 /** 5408 * Initializes the layout of the plugin and extends the carousel. 5409 * @protected 5410 */ 5411 Navigation.prototype.initialize = function() { 5412 var override, 5413 settings = this._core.settings; 5414 5415 // create DOM structure for relative navigation 5416 this._controls.$relative = (settings.navContainer ? $(settings.navContainer) 5417 : $('<div>').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled'); 5418 5419 this._controls.$previous = $('<' + settings.navElement + '>') 5420 .addClass(settings.navClass[0]) 5421 .html(settings.navText[0]) 5422 .prependTo(this._controls.$relative) 5423 .on('click', $.proxy(function(e) { 5424 this.prev(settings.navSpeed); 5425 }, this)); 5426 this._controls.$next = $('<' + settings.navElement + '>') 5427 .addClass(settings.navClass[1]) 5428 .html(settings.navText[1]) 5429 .appendTo(this._controls.$relative) 5430 .on('click', $.proxy(function(e) { 5431 this.next(settings.navSpeed); 5432 }, this)); 5433 5434 // create DOM structure for absolute navigation 5435 if (!settings.dotsData) { 5436 this._templates = [ $('<button role="button">') 5437 .addClass(settings.dotClass) 5438 .append($('<span>')) 5439 .prop('outerHTML') ]; 5440 } 5441 5442 this._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer) 5443 : $('<div>').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled'); 5444 5445 this._controls.$absolute.on('click', 'button', $.proxy(function(e) { 5446 var index = $(e.target).parent().is(this._controls.$absolute) 5447 ? $(e.target).index() : $(e.target).parent().index(); 5448 5449 e.preventDefault(); 5450 5451 this.to(index, settings.dotsSpeed); 5452 }, this)); 5453 5454 /*$el.on('focusin', function() { 5455 $(document).off(".carousel"); 5456 5457 $(document).on('keydown.carousel', function(e) { 5458 if(e.keyCode == 37) { 5459 $el.trigger('prev.owl') 5460 } 5461 if(e.keyCode == 39) { 5462 $el.trigger('next.owl') 5463 } 5464 }); 5465 });*/ 5466 5467 // override public methods of the carousel 5468 for (override in this._overrides) { 5469 this._core[override] = $.proxy(this[override], this); 5470 } 5471 }; 5472 5473 /** 5474 * Destroys the plugin. 5475 * @protected 5476 */ 5477 Navigation.prototype.destroy = function() { 5478 var handler, control, property, override, settings; 5479 settings = this._core.settings; 5480 5481 for (handler in this._handlers) { 5482 this.$element.off(handler, this._handlers[handler]); 5483 } 5484 for (control in this._controls) { 5485 if (control === '$relative' && settings.navContainer) { 5486 this._controls[control].html(''); 5487 } else { 5488 this._controls[control].remove(); 5489 } 5490 } 5491 for (override in this.overides) { 5492 this._core[override] = this._overrides[override]; 5493 } 5494 for (property in Object.getOwnPropertyNames(this)) { 5495 typeof this[property] != 'function' && (this[property] = null); 5496 } 5497 }; 5498 5499 /** 5500 * Updates the internal state. 5501 * @protected 5502 */ 5503 Navigation.prototype.update = function() { 5504 var i, j, k, 5505 lower = this._core.clones().length / 2, 5506 upper = lower + this._core.items().length, 5507 maximum = this._core.maximum(true), 5508 settings = this._core.settings, 5509 size = settings.center || settings.autoWidth || settings.dotsData 5510 ? 1 : settings.dotsEach || settings.items; 5511 5512 if (settings.slideBy !== 'page') { 5513 settings.slideBy = Math.min(settings.slideBy, settings.items); 5514 } 5515 5516 if (settings.dots || settings.slideBy == 'page') { 5517 this._pages = []; 5518 5519 for (i = lower, j = 0, k = 0; i < upper; i++) { 5520 if (j >= size || j === 0) { 5521 this._pages.push({ 5522 start: Math.min(maximum, i - lower), 5523 end: i - lower + size - 1 5524 }); 5525 if (Math.min(maximum, i - lower) === maximum) { 5526 break; 5527 } 5528 j = 0, ++k; 5529 } 5530 j += this._core.mergers(this._core.relative(i)); 5531 } 5532 } 5533 }; 5534 5535 /** 5536 * Draws the user interface. 5537 * @todo The option `dotsData` wont work. 5538 * @protected 5539 */ 5540 Navigation.prototype.draw = function() { 5541 var difference, 5542 settings = this._core.settings, 5543 disabled = this._core.items().length <= settings.items, 5544 index = this._core.relative(this._core.current()), 5545 loop = settings.loop || settings.rewind; 5546 5547 this._controls.$relative.toggleClass('disabled', !settings.nav || disabled); 5548 5549 if (settings.nav) { 5550 this._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true)); 5551 this._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true)); 5552 } 5553 5554 this._controls.$absolute.toggleClass('disabled', !settings.dots || disabled); 5555 5556 if (settings.dots) { 5557 difference = this._pages.length - this._controls.$absolute.children().length; 5558 5559 if (settings.dotsData && difference !== 0) { 5560 this._controls.$absolute.html(this._templates.join('')); 5561 } else if (difference > 0) { 5562 this._controls.$absolute.append(new Array(difference + 1).join(this._templates[0])); 5563 } else if (difference < 0) { 5564 this._controls.$absolute.children().slice(difference).remove(); 5565 } 5566 5567 this._controls.$absolute.find('.active').removeClass('active'); 5568 this._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active'); 5569 } 5570 }; 5571 5572 /** 5573 * Extends event data. 5574 * @protected 5575 * @param {Event} event - The event object which gets thrown. 5576 */ 5577 Navigation.prototype.onTrigger = function(event) { 5578 var settings = this._core.settings; 5579 5580 event.page = { 5581 index: $.inArray(this.current(), this._pages), 5582 count: this._pages.length, 5583 size: settings && (settings.center || settings.autoWidth || settings.dotsData 5584 ? 1 : settings.dotsEach || settings.items) 5585 }; 5586 }; 5587 5588 /** 5589 * Gets the current page position of the carousel. 5590 * @protected 5591 * @returns {Number} 5592 */ 5593 Navigation.prototype.current = function() { 5594 var current = this._core.relative(this._core.current()); 5595 return $.grep(this._pages, $.proxy(function(page, index) { 5596 return page.start <= current && page.end >= current; 5597 }, this)).pop(); 5598 }; 5599 5600 /** 5601 * Gets the current succesor/predecessor position. 5602 * @protected 5603 * @returns {Number} 5604 */ 5605 Navigation.prototype.getPosition = function(successor) { 5606 var position, length, 5607 settings = this._core.settings; 5608 5609 if (settings.slideBy == 'page') { 5610 position = $.inArray(this.current(), this._pages); 5611 length = this._pages.length; 5612 successor ? ++position : --position; 5613 position = this._pages[((position % length) + length) % length].start; 5614 } else { 5615 position = this._core.relative(this._core.current()); 5616 length = this._core.items().length; 5617 successor ? position += settings.slideBy : position -= settings.slideBy; 5618 } 5619 5620 return position; 5621 }; 5622 5623 /** 5624 * Slides to the next item or page. 5625 * @public 5626 * @param {Number} [speed=false] - The time in milliseconds for the transition. 5627 */ 5628 Navigation.prototype.next = function(speed) { 5629 $.proxy(this._overrides.to, this._core)(this.getPosition(true), speed); 5630 }; 5631 5632 /** 5633 * Slides to the previous item or page. 5634 * @public 5635 * @param {Number} [speed=false] - The time in milliseconds for the transition. 5636 */ 5637 Navigation.prototype.prev = function(speed) { 5638 $.proxy(this._overrides.to, this._core)(this.getPosition(false), speed); 5639 }; 5640 5641 /** 5642 * Slides to the specified item or page. 5643 * @public 5644 * @param {Number} position - The position of the item or page. 5645 * @param {Number} [speed] - The time in milliseconds for the transition. 5646 * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not. 5647 */ 5648 Navigation.prototype.to = function(position, speed, standard) { 5649 var length; 5650 5651 if (!standard && this._pages.length) { 5652 length = this._pages.length; 5653 $.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed); 5654 } else { 5655 $.proxy(this._overrides.to, this._core)(position, speed); 5656 } 5657 }; 5658 5659 $.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation; 5660 5661})(window.Zepto || window.jQuery, window, document); 5662 5663/** 5664 * Hash Plugin 5665 * @version 2.3.4 5666 * @author Artus Kolanowski 5667 * @author David Deutsch 5668 * @license The MIT License (MIT) 5669 */ 5670;(function($, window, document, undefined) { 5671 'use strict'; 5672 5673 /** 5674 * Creates the hash plugin. 5675 * @class The Hash Plugin 5676 * @param {Owl} carousel - The Owl Carousel 5677 */ 5678 var Hash = function(carousel) { 5679 /** 5680 * Reference to the core. 5681 * @protected 5682 * @type {Owl} 5683 */ 5684 this._core = carousel; 5685 5686 /** 5687 * Hash index for the items. 5688 * @protected 5689 * @type {Object} 5690 */ 5691 this._hashes = {}; 5692 5693 /** 5694 * The carousel element. 5695 * @type {jQuery} 5696 */ 5697 this.$element = this._core.$element; 5698 5699 /** 5700 * All event handlers. 5701 * @protected 5702 * @type {Object} 5703 */ 5704 this._handlers = { 5705 'initialized.owl.carousel': $.proxy(function(e) { 5706 if (e.namespace && this._core.settings.startPosition === 'URLHash') { 5707 $(window).trigger('hashchange.owl.navigation'); 5708 } 5709 }, this), 5710 'prepared.owl.carousel': $.proxy(function(e) { 5711 if (e.namespace) { 5712 var hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash'); 5713 5714 if (!hash) { 5715 return; 5716 } 5717 5718 this._hashes[hash] = e.content; 5719 } 5720 }, this), 5721 'changed.owl.carousel': $.proxy(function(e) { 5722 if (e.namespace && e.property.name === 'position') { 5723 var current = this._core.items(this._core.relative(this._core.current())), 5724 hash = $.map(this._hashes, function(item, hash) { 5725 return item === current ? hash : null; 5726 }).join(); 5727 5728 if (!hash || window.location.hash.slice(1) === hash) { 5729 return; 5730 } 5731 5732 window.location.hash = hash; 5733 } 5734 }, this) 5735 }; 5736 5737 // set default options 5738 this._core.options = $.extend({}, Hash.Defaults, this._core.options); 5739 5740 // register the event handlers 5741 this.$element.on(this._handlers); 5742 5743 // register event listener for hash navigation 5744 $(window).on('hashchange.owl.navigation', $.proxy(function(e) { 5745 var hash = window.location.hash.substring(1), 5746 items = this._core.$stage.children(), 5747 position = this._hashes[hash] && items.index(this._hashes[hash]); 5748 5749 if (position === undefined || position === this._core.current()) { 5750 return; 5751 } 5752 5753 this._core.to(this._core.relative(position), false, true); 5754 }, this)); 5755 }; 5756 5757 /** 5758 * Default options. 5759 * @public 5760 */ 5761 Hash.Defaults = { 5762 URLhashListener: false 5763 }; 5764 5765 /** 5766 * Destroys the plugin. 5767 * @public 5768 */ 5769 Hash.prototype.destroy = function() { 5770 var handler, property; 5771 5772 $(window).off('hashchange.owl.navigation'); 5773 5774 for (handler in this._handlers) { 5775 this._core.$element.off(handler, this._handlers[handler]); 5776 } 5777 for (property in Object.getOwnPropertyNames(this)) { 5778 typeof this[property] != 'function' && (this[property] = null); 5779 } 5780 }; 5781 5782 $.fn.owlCarousel.Constructor.Plugins.Hash = Hash; 5783 5784})(window.Zepto || window.jQuery, window, document); 5785 5786/** 5787 * Support Plugin 5788 * 5789 * @version 2.3.4 5790 * @author Vivid Planet Software GmbH 5791 * @author Artus Kolanowski 5792 * @author David Deutsch 5793 * @license The MIT License (MIT) 5794 */ 5795;(function($, window, document, undefined) { 5796 5797 var style = $('<support>').get(0).style, 5798 prefixes = 'Webkit Moz O ms'.split(' '), 5799 events = { 5800 transition: { 5801 end: { 5802 WebkitTransition: 'webkitTransitionEnd', 5803 MozTransition: 'transitionend', 5804 OTransition: 'oTransitionEnd', 5805 transition: 'transitionend' 5806 } 5807 }, 5808 animation: { 5809 end: { 5810 WebkitAnimation: 'webkitAnimationEnd', 5811 MozAnimation: 'animationend', 5812 OAnimation: 'oAnimationEnd', 5813 animation: 'animationend' 5814 } 5815 } 5816 }, 5817 tests = { 5818 csstransforms: function() { 5819 return !!test('transform'); 5820 }, 5821 csstransforms3d: function() { 5822 return !!test('perspective'); 5823 }, 5824 csstransitions: function() { 5825 return !!test('transition'); 5826 }, 5827 cssanimations: function() { 5828 return !!test('animation'); 5829 } 5830 }; 5831 5832 function test(property, prefixed) { 5833 var result = false, 5834 upper = property.charAt(0).toUpperCase() + property.slice(1); 5835 5836 $.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) { 5837 if (style[property] !== undefined) { 5838 result = prefixed ? property : true; 5839 return false; 5840 } 5841 }); 5842 5843 return result; 5844 } 5845 5846 function prefixed(property) { 5847 return test(property, true); 5848 } 5849 5850 if (tests.csstransitions()) { 5851 /* jshint -W053 */ 5852 $.support.transition = new String(prefixed('transition')) 5853 $.support.transition.end = events.transition.end[ $.support.transition ]; 5854 } 5855 5856 if (tests.cssanimations()) { 5857 /* jshint -W053 */ 5858 $.support.animation = new String(prefixed('animation')) 5859 $.support.animation.end = events.animation.end[ $.support.animation ]; 5860 } 5861 5862 if (tests.csstransforms()) { 5863 /* jshint -W053 */ 5864 $.support.transform = new String(prefixed('transform')); 5865 $.support.transform3d = tests.csstransforms3d(); 5866 } 5867 5868})(window.Zepto || window.jQuery, window, document); 5869 5870 5871/***/ }), 5872
vendor: 96,634 bytes, lines 5873-6903
5873/***/ "./node_modules/parallax-js/dist/parallax.js": 5874/*!***************************************************!*\ 5875 !*** ./node_modules/parallax-js/dist/parallax.js ***! 5876 \***************************************************/ 5877/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 5878 5879(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=undefined;if(!u&&a)return require(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=undefined;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ 5880/* 5881object-assign 5882(c) Sindre Sorhus 5883@license MIT 5884*/ 5885 5886'use strict'; 5887/* eslint-disable no-unused-vars */ 5888var getOwnPropertySymbols = Object.getOwnPropertySymbols; 5889var hasOwnProperty = Object.prototype.hasOwnProperty; 5890var propIsEnumerable = Object.prototype.propertyIsEnumerable; 5891 5892function toObject(val) { 5893 if (val === null || val === undefined) { 5894 throw new TypeError('Object.assign cannot be called with null or undefined'); 5895 } 5896 5897 return Object(val); 5898} 5899 5900function shouldUseNative() { 5901 try { 5902 if (!Object.assign) { 5903 return false; 5904 } 5905 5906 // Detect buggy property enumeration order in older V8 versions. 5907 5908 // https://bugs.chromium.org/p/v8/issues/detail?id=4118 5909 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers 5910 test1[5] = 'de'; 5911 if (Object.getOwnPropertyNames(test1)[0] === '5') { 5912 return false; 5913 } 5914 5915 // https://bugs.chromium.org/p/v8/issues/detail?id=3056 5916 var test2 = {}; 5917 for (var i = 0; i < 10; i++) { 5918 test2['_' + String.fromCharCode(i)] = i; 5919 } 5920 var order2 = Object.getOwnPropertyNames(test2).map(function (n) { 5921 return test2[n]; 5922 }); 5923 if (order2.join('') !== '0123456789') { 5924 return false; 5925 } 5926 5927 // https://bugs.chromium.org/p/v8/issues/detail?id=3056 5928 var test3 = {}; 5929 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { 5930 test3[letter] = letter; 5931 }); 5932 if (Object.keys(Object.assign({}, test3)).join('') !== 5933 'abcdefghijklmnopqrst') { 5934 return false; 5935 } 5936 5937 return true; 5938 } catch (err) { 5939 // We don't expect any of the above to throw, but better to be safe. 5940 return false; 5941 } 5942} 5943 5944module.exports = shouldUseNative() ? Object.assign : function (target, source) { 5945 var from; 5946 var to = toObject(target); 5947 var symbols; 5948 5949 for (var s = 1; s < arguments.length; s++) { 5950 from = Object(arguments[s]); 5951 5952 for (var key in from) { 5953 if (hasOwnProperty.call(from, key)) { 5954 to[key] = from[key]; 5955 } 5956 } 5957 5958 if (getOwnPropertySymbols) { 5959 symbols = getOwnPropertySymbols(from); 5960 for (var i = 0; i < symbols.length; i++) { 5961 if (propIsEnumerable.call(from, symbols[i])) { 5962 to[symbols[i]] = from[symbols[i]]; 5963 } 5964 } 5965 } 5966 } 5967 5968 return to; 5969}; 5970 5971},{}],2:[function(require,module,exports){ 5972(function (process){ 5973// Generated by CoffeeScript 1.12.2 5974(function() { 5975 var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime; 5976 5977 if ((typeof performance !== "undefined" && performance !== null) && performance.now) { 5978 module.exports = function() { 5979 return performance.now(); 5980 }; 5981 } else if ((typeof process !== "undefined" && process !== null) && process.hrtime) { 5982 module.exports = function() { 5983 return (getNanoSeconds() - nodeLoadTime) / 1e6; 5984 }; 5985 hrtime = process.hrtime; 5986 getNanoSeconds = function() { 5987 var hr; 5988 hr = hrtime(); 5989 return hr[0] * 1e9 + hr[1]; 5990 }; 5991 moduleLoadTime = getNanoSeconds(); 5992 upTime = process.uptime() * 1e9; 5993 nodeLoadTime = moduleLoadTime - upTime; 5994 } else if (Date.now) { 5995 module.exports = function() { 5996 return Date.now() - loadTime; 5997 }; 5998 loadTime = Date.now(); 5999 } else { 6000 module.exports = function() { 6001 return new Date().getTime() - loadTime; 6002 }; 6003 loadTime = new Date().getTime(); 6004 } 6005 6006}).call(this); 6007 6008 6009 6010}).call(this,require('_process')) 6011 6012},{"_process":3}],3:[function(require,module,exports){ 6013// shim for using process in browser 6014var process = module.exports = {}; 6015 6016// cached from whatever global is present so that test runners that stub it 6017// don't break things. But we need to wrap it in a try catch in case it is 6018// wrapped in strict mode code which doesn't define any globals. It's inside a 6019// function because try/catches deoptimize in certain engines. 6020 6021var cachedSetTimeout; 6022var cachedClearTimeout; 6023 6024function defaultSetTimout() { 6025 throw new Error('setTimeout has not been defined'); 6026} 6027function defaultClearTimeout () { 6028 throw new Error('clearTimeout has not been defined'); 6029} 6030(function () { 6031 try { 6032 if (typeof setTimeout === 'function') { 6033 cachedSetTimeout = setTimeout; 6034 } else { 6035 cachedSetTimeout = defaultSetTimout; 6036 } 6037 } catch (e) { 6038 cachedSetTimeout = defaultSetTimout; 6039 } 6040 try { 6041 if (typeof clearTimeout === 'function') { 6042 cachedClearTimeout = clearTimeout; 6043 } else { 6044 cachedClearTimeout = defaultClearTimeout; 6045 } 6046 } catch (e) { 6047 cachedClearTimeout = defaultClearTimeout; 6048 } 6049} ()) 6050function runTimeout(fun) { 6051 if (cachedSetTimeout === setTimeout) { 6052 //normal enviroments in sane situations 6053 return setTimeout(fun, 0); 6054 } 6055 // if setTimeout wasn't available but was latter defined 6056 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { 6057 cachedSetTimeout = setTimeout; 6058 return setTimeout(fun, 0); 6059 } 6060 try { 6061 // when when somebody has screwed with setTimeout but no I.E. maddness 6062 return cachedSetTimeout(fun, 0); 6063 } catch(e){ 6064 try { 6065 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 6066 return cachedSetTimeout.call(null, fun, 0); 6067 } catch(e){ 6068 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error 6069 return cachedSetTimeout.call(this, fun, 0); 6070 } 6071 } 6072 6073 6074} 6075function runClearTimeout(marker) { 6076 if (cachedClearTimeout === clearTimeout) { 6077 //normal enviroments in sane situations 6078 return clearTimeout(marker); 6079 } 6080 // if clearTimeout wasn't available but was latter defined 6081 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { 6082 cachedClearTimeout = clearTimeout; 6083 return clearTimeout(marker); 6084 } 6085 try { 6086 // when when somebody has screwed with setTimeout but no I.E. maddness 6087 return cachedClearTimeout(marker); 6088 } catch (e){ 6089 try { 6090 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 6091 return cachedClearTimeout.call(null, marker); 6092 } catch (e){ 6093 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. 6094 // Some versions of I.E. have different rules for clearTimeout vs setTimeout 6095 return cachedClearTimeout.call(this, marker); 6096 } 6097 } 6098 6099 6100 6101} 6102var queue = []; 6103var draining = false; 6104var currentQueue; 6105var queueIndex = -1; 6106 6107function cleanUpNextTick() { 6108 if (!draining || !currentQueue) { 6109 return; 6110 } 6111 draining = false; 6112 if (currentQueue.length) { 6113 queue = currentQueue.concat(queue); 6114 } else { 6115 queueIndex = -1; 6116 } 6117 if (queue.length) { 6118 drainQueue(); 6119 } 6120} 6121 6122function drainQueue() { 6123 if (draining) { 6124 return; 6125 } 6126 var timeout = runTimeout(cleanUpNextTick); 6127 draining = true; 6128 6129 var len = queue.length; 6130 while(len) { 6131 currentQueue = queue; 6132 queue = []; 6133 while (++queueIndex < len) { 6134 if (currentQueue) { 6135 currentQueue[queueIndex].run(); 6136 } 6137 } 6138 queueIndex = -1; 6139 len = queue.length; 6140 } 6141 currentQueue = null; 6142 draining = false; 6143 runClearTimeout(timeout); 6144} 6145 6146process.nextTick = function (fun) { 6147 var args = new Array(arguments.length - 1); 6148 if (arguments.length > 1) { 6149 for (var i = 1; i < arguments.length; i++) { 6150 args[i - 1] = arguments[i]; 6151 } 6152 } 6153 queue.push(new Item(fun, args)); 6154 if (queue.length === 1 && !draining) { 6155 runTimeout(drainQueue); 6156 } 6157}; 6158 6159// v8 likes predictible objects 6160function Item(fun, array) { 6161 this.fun = fun; 6162 this.array = array; 6163} 6164Item.prototype.run = function () { 6165 this.fun.apply(null, this.array); 6166}; 6167process.title = 'browser'; 6168process.browser = true; 6169process.env = {}; 6170process.argv = []; 6171process.version = ''; // empty string to avoid regexp issues 6172process.versions = {}; 6173 6174function noop() {} 6175 6176process.on = noop; 6177process.addListener = noop; 6178process.once = noop; 6179process.off = noop; 6180process.removeListener = noop; 6181process.removeAllListeners = noop; 6182process.emit = noop; 6183process.prependListener = noop; 6184process.prependOnceListener = noop; 6185 6186process.listeners = function (name) { return [] } 6187 6188process.binding = function (name) { 6189 throw new Error('process.binding is not supported'); 6190}; 6191 6192process.cwd = function () { return '/' }; 6193process.chdir = function (dir) { 6194 throw new Error('process.chdir is not supported'); 6195}; 6196process.umask = function() { return 0; }; 6197 6198},{}],4:[function(require,module,exports){ 6199(function (global){ 6200var now = require('performance-now') 6201 , root = typeof window === 'undefined' ? global : window 6202 , vendors = ['moz', 'webkit'] 6203 , suffix = 'AnimationFrame' 6204 , raf = root['request' + suffix] 6205 , caf = root['cancel' + suffix] || root['cancelRequest' + suffix] 6206 6207for(var i = 0; !raf && i < vendors.length; i++) { 6208 raf = root[vendors[i] + 'Request' + suffix] 6209 caf = root[vendors[i] + 'Cancel' + suffix] 6210 || root[vendors[i] + 'CancelRequest' + suffix] 6211} 6212 6213// Some versions of FF have rAF but not cAF 6214if(!raf || !caf) { 6215 var last = 0 6216 , id = 0 6217 , queue = [] 6218 , frameDuration = 1000 / 60 6219 6220 raf = function(callback) { 6221 if(queue.length === 0) { 6222 var _now = now() 6223 , next = Math.max(0, frameDuration - (_now - last)) 6224 last = next + _now 6225 setTimeout(function() { 6226 var cp = queue.slice(0) 6227 // Clear queue here to prevent 6228 // callbacks from appending listeners 6229 // to the current frame's queue 6230 queue.length = 0 6231 for(var i = 0; i < cp.length; i++) { 6232 if(!cp[i].cancelled) { 6233 try{ 6234 cp[i].callback(last) 6235 } catch(e) { 6236 setTimeout(function() { throw e }, 0) 6237 } 6238 } 6239 } 6240 }, Math.round(next)) 6241 } 6242 queue.push({ 6243 handle: ++id, 6244 callback: callback, 6245 cancelled: false 6246 }) 6247 return id 6248 } 6249 6250 caf = function(handle) { 6251 for(var i = 0; i < queue.length; i++) { 6252 if(queue[i].handle === handle) { 6253 queue[i].cancelled = true 6254 } 6255 } 6256 } 6257} 6258 6259module.exports = function(fn) { 6260 // Wrap in a new function to prevent 6261 // `cancel` potentially being assigned 6262 // to the native rAF function 6263 return raf.call(root, fn) 6264} 6265module.exports.cancel = function() { 6266 caf.apply(root, arguments) 6267} 6268module.exports.polyfill = function() { 6269 root.requestAnimationFrame = raf 6270 root.cancelAnimationFrame = caf 6271} 6272 6273}).call(this,typeof __webpack_require__.g !== "undefined" ? __webpack_require__.g : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) 6274 6275},{"performance-now":2}],5:[function(require,module,exports){ 6276'use strict'; 6277 6278var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); 6279 6280function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 6281 6282/** 6283* Parallax.js 6284* @author Matthew Wagerfield - @wagerfield, René Roth - [email protected] 6285* @description Creates a parallax effect between an array of layers, 6286* driving the motion from the gyroscope output of a smartdevice. 6287* If no gyroscope is available, the cursor position is used. 6288*/ 6289 6290var rqAnFr = require('raf'); 6291var objectAssign = require('object-assign'); 6292 6293var helpers = { 6294 propertyCache: {}, 6295 vendors: [null, ['-webkit-', 'webkit'], ['-moz-', 'Moz'], ['-o-', 'O'], ['-ms-', 'ms']], 6296 6297 clamp: function clamp(value, min, max) { 6298 return min < max ? value < min ? min : value > max ? max : value : value < max ? max : value > min ? min : value; 6299 }, 6300 data: function data(element, name) { 6301 return helpers.deserialize(element.getAttribute('data-' + name)); 6302 }, 6303 deserialize: function deserialize(value) { 6304 if (value === 'true') { 6305 return true; 6306 } else if (value === 'false') { 6307 return false; 6308 } else if (value === 'null') { 6309 return null; 6310 } else if (!isNaN(parseFloat(value)) && isFinite(value)) { 6311 return parseFloat(value); 6312 } else { 6313 return value; 6314 } 6315 }, 6316 camelCase: function camelCase(value) { 6317 return value.replace(/-+(.)?/g, function (match, character) { 6318 return character ? character.toUpperCase() : ''; 6319 }); 6320 }, 6321 accelerate: function accelerate(element) { 6322 helpers.css(element, 'transform', 'translate3d(0,0,0) rotate(0.0001deg)'); 6323 helpers.css(element, 'transform-style', 'preserve-3d'); 6324 helpers.css(element, 'backface-visibility', 'hidden'); 6325 }, 6326 transformSupport: function transformSupport(value) { 6327 var element = document.createElement('div'), 6328 propertySupport = false, 6329 propertyValue = null, 6330 featureSupport = false, 6331 cssProperty = null, 6332 jsProperty = null; 6333 for (var i = 0, l = helpers.vendors.length; i < l; i++) { 6334 if (helpers.vendors[i] !== null) { 6335 cssProperty = helpers.vendors[i][0] + 'transform'; 6336 jsProperty = helpers.vendors[i][1] + 'Transform'; 6337 } else { 6338 cssProperty = 'transform'; 6339 jsProperty = 'transform'; 6340 } 6341 if (element.style[jsProperty] !== undefined) { 6342 propertySupport = true; 6343 break; 6344 } 6345 } 6346 switch (value) { 6347 case '2D': 6348 featureSupport = propertySupport; 6349 break; 6350 case '3D': 6351 if (propertySupport) { 6352 var body = document.body || document.createElement('body'), 6353 documentElement = document.documentElement, 6354 documentOverflow = documentElement.style.overflow, 6355 isCreatedBody = false; 6356 6357 if (!document.body) { 6358 isCreatedBody = true; 6359 documentElement.style.overflow = 'hidden'; 6360 documentElement.appendChild(body); 6361 body.style.overflow = 'hidden'; 6362 body.style.background = ''; 6363 } 6364 6365 body.appendChild(element); 6366 element.style[jsProperty] = 'translate3d(1px,1px,1px)'; 6367 propertyValue = window.getComputedStyle(element).getPropertyValue(cssProperty); 6368 featureSupport = propertyValue !== undefined && propertyValue.length > 0 && propertyValue !== 'none'; 6369 documentElement.style.overflow = documentOverflow; 6370 body.removeChild(element); 6371 6372 if (isCreatedBody) { 6373 body.removeAttribute('style'); 6374 body.parentNode.removeChild(body); 6375 } 6376 } 6377 break; 6378 } 6379 return featureSupport; 6380 }, 6381 css: function css(element, property, value) { 6382 var jsProperty = helpers.propertyCache[property]; 6383 if (!jsProperty) { 6384 for (var i = 0, l = helpers.vendors.length; i < l; i++) { 6385 if (helpers.vendors[i] !== null) { 6386 jsProperty = helpers.camelCase(helpers.vendors[i][1] + '-' + property); 6387 } else { 6388 jsProperty = property; 6389 } 6390 if (element.style[jsProperty] !== undefined) { 6391 helpers.propertyCache[property] = jsProperty; 6392 break; 6393 } 6394 } 6395 } 6396 element.style[jsProperty] = value; 6397 } 6398}; 6399 6400var MAGIC_NUMBER = 30, 6401 DEFAULTS = { 6402 relativeInput: false, 6403 clipRelativeInput: false, 6404 inputElement: null, 6405 hoverOnly: false, 6406 calibrationThreshold: 100, 6407 calibrationDelay: 500, 6408 supportDelay: 500, 6409 calibrateX: false, 6410 calibrateY: true, 6411 invertX: true, 6412 invertY: true, 6413 limitX: false, 6414 limitY: false, 6415 scalarX: 10.0, 6416 scalarY: 10.0, 6417 frictionX: 0.1, 6418 frictionY: 0.1, 6419 originX: 0.5, 6420 originY: 0.5, 6421 pointerEvents: false, 6422 precision: 1, 6423 onReady: null, 6424 selector: null 6425}; 6426 6427var Parallax = function () { 6428 function Parallax(element, options) { 6429 _classCallCheck(this, Parallax); 6430 6431 this.element = element; 6432 6433 var data = { 6434 calibrateX: helpers.data(this.element, 'calibrate-x'), 6435 calibrateY: helpers.data(this.element, 'calibrate-y'), 6436 invertX: helpers.data(this.element, 'invert-x'), 6437 invertY: helpers.data(this.element, 'invert-y'), 6438 limitX: helpers.data(this.element, 'limit-x'), 6439 limitY: helpers.data(this.element, 'limit-y'), 6440 scalarX: helpers.data(this.element, 'scalar-x'), 6441 scalarY: helpers.data(this.element, 'scalar-y'), 6442 frictionX: helpers.data(this.element, 'friction-x'), 6443 frictionY: helpers.data(this.element, 'friction-y'), 6444 originX: helpers.data(this.element, 'origin-x'), 6445 originY: helpers.data(this.element, 'origin-y'), 6446 pointerEvents: helpers.data(this.element, 'pointer-events'), 6447 precision: helpers.data(this.element, 'precision'), 6448 relativeInput: helpers.data(this.element, 'relative-input'), 6449 clipRelativeInput: helpers.data(this.element, 'clip-relative-input'), 6450 hoverOnly: helpers.data(this.element, 'hover-only'), 6451 inputElement: document.querySelector(helpers.data(this.element, 'input-element')), 6452 selector: helpers.data(this.element, 'selector') 6453 }; 6454 6455 for (var key in data) { 6456 if (data[key] === null) { 6457 delete data[key]; 6458 } 6459 } 6460 6461 objectAssign(this, DEFAULTS, data, options); 6462 6463 if (!this.inputElement) { 6464 this.inputElement = this.element; 6465 } 6466 6467 this.calibrationTimer = null; 6468 this.calibrationFlag = true; 6469 this.enabled = false; 6470 this.depthsX = []; 6471 this.depthsY = []; 6472 this.raf = null; 6473 6474 this.bounds = null; 6475 this.elementPositionX = 0; 6476 this.elementPositionY = 0; 6477 this.elementWidth = 0; 6478 this.elementHeight = 0; 6479 6480 this.elementCenterX = 0; 6481 this.elementCenterY = 0; 6482 6483 this.elementRangeX = 0; 6484 this.elementRangeY = 0; 6485 6486 this.calibrationX = 0; 6487 this.calibrationY = 0; 6488 6489 this.inputX = 0; 6490 this.inputY = 0; 6491 6492 this.motionX = 0; 6493 this.motionY = 0; 6494 6495 this.velocityX = 0; 6496 this.velocityY = 0; 6497 6498 this.onMouseMove = this.onMouseMove.bind(this); 6499 this.onDeviceOrientation = this.onDeviceOrientation.bind(this); 6500 this.onDeviceMotion = this.onDeviceMotion.bind(this); 6501 this.onOrientationTimer = this.onOrientationTimer.bind(this); 6502 this.onMotionTimer = this.onMotionTimer.bind(this); 6503 this.onCalibrationTimer = this.onCalibrationTimer.bind(this); 6504 this.onAnimationFrame = this.onAnimationFrame.bind(this); 6505 this.onWindowResize = this.onWindowResize.bind(this); 6506 6507 this.windowWidth = null; 6508 this.windowHeight = null; 6509 this.windowCenterX = null; 6510 this.windowCenterY = null; 6511 this.windowRadiusX = null; 6512 this.windowRadiusY = null; 6513 this.portrait = false; 6514 this.desktop = !navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|mobi|tablet|opera mini|nexus 7)/i); 6515 this.motionSupport = !!window.DeviceMotionEvent && !this.desktop; 6516 this.orientationSupport = !!window.DeviceOrientationEvent && !this.desktop; 6517 this.orientationStatus = 0; 6518 this.motionStatus = 0; 6519 6520 this.initialise(); 6521 } 6522 6523 _createClass(Parallax, [{ 6524 key: 'initialise', 6525 value: function initialise() { 6526 if (this.transform2DSupport === undefined) { 6527 this.transform2DSupport = helpers.transformSupport('2D'); 6528 this.transform3DSupport = helpers.transformSupport('3D'); 6529 } 6530 6531 // Configure Context Styles 6532 if (this.transform3DSupport) { 6533 helpers.accelerate(this.element); 6534 } 6535 6536 var style = window.getComputedStyle(this.element); 6537 if (style.getPropertyValue('position') === 'static') { 6538 this.element.style.position = 'relative'; 6539 } 6540 6541 // Pointer events 6542 if (!this.pointerEvents) { 6543 this.element.style.pointerEvents = 'none'; 6544 } 6545 6546 // Setup 6547 this.updateLayers(); 6548 this.updateDimensions(); 6549 this.enable(); 6550 this.queueCalibration(this.calibrationDelay); 6551 } 6552 }, { 6553 key: 'doReadyCallback', 6554 value: function doReadyCallback() { 6555 if (this.onReady) { 6556 this.onReady(); 6557 } 6558 } 6559 }, { 6560 key: 'updateLayers', 6561 value: function updateLayers() { 6562 if (this.selector) { 6563 this.layers = this.element.querySelectorAll(this.selector); 6564 } else { 6565 this.layers = this.element.children; 6566 } 6567 6568 if (!this.layers.length) { 6569 console.warn('ParallaxJS: Your scene does not have any layers.'); 6570 } 6571 6572 this.depthsX = []; 6573 this.depthsY = []; 6574 6575 for (var index = 0; index < this.layers.length; index++) { 6576 var layer = this.layers[index]; 6577 6578 if (this.transform3DSupport) { 6579 helpers.accelerate(layer); 6580 } 6581 6582 layer.style.position = index ? 'absolute' : 'relative'; 6583 layer.style.display = 'block'; 6584 layer.style.left = 0; 6585 layer.style.top = 0; 6586 6587 var depth = helpers.data(layer, 'depth') || 0; 6588 this.depthsX.push(helpers.data(layer, 'depth-x') || depth); 6589 this.depthsY.push(helpers.data(layer, 'depth-y') || depth); 6590 } 6591 } 6592 }, { 6593 key: 'updateDimensions', 6594 value: function updateDimensions() { 6595 this.windowWidth = window.innerWidth; 6596 this.windowHeight = window.innerHeight; 6597 this.windowCenterX = this.windowWidth * this.originX; 6598 this.windowCenterY = this.windowHeight * this.originY; 6599 this.windowRadiusX = Math.max(this.windowCenterX, this.windowWidth - this.windowCenterX); 6600 this.windowRadiusY = Math.max(this.windowCenterY, this.windowHeight - this.windowCenterY); 6601 } 6602 }, { 6603 key: 'updateBounds', 6604 value: function updateBounds() { 6605 this.bounds = this.inputElement.getBoundingClientRect(); 6606 this.elementPositionX = this.bounds.left; 6607 this.elementPositionY = this.bounds.top; 6608 this.elementWidth = this.bounds.width; 6609 this.elementHeight = this.bounds.height; 6610 this.elementCenterX = this.elementWidth * this.originX; 6611 this.elementCenterY = this.elementHeight * this.originY; 6612 this.elementRangeX = Math.max(this.elementCenterX, this.elementWidth - this.elementCenterX); 6613 this.elementRangeY = Math.max(this.elementCenterY, this.elementHeight - this.elementCenterY); 6614 } 6615 }, { 6616 key: 'queueCalibration', 6617 value: function queueCalibration(delay) { 6618 clearTimeout(this.calibrationTimer); 6619 this.calibrationTimer = setTimeout(this.onCalibrationTimer, delay); 6620 } 6621 }, { 6622 key: 'enable', 6623 value: function enable() { 6624 if (this.enabled) { 6625 return; 6626 } 6627 this.enabled = true; 6628 6629 if (this.orientationSupport) { 6630 this.portrait = false; 6631 window.addEventListener('deviceorientation', this.onDeviceOrientation); 6632 this.detectionTimer = setTimeout(this.onOrientationTimer, this.supportDelay); 6633 } else if (this.motionSupport) { 6634 this.portrait = false; 6635 window.addEventListener('devicemotion', this.onDeviceMotion); 6636 this.detectionTimer = setTimeout(this.onMotionTimer, this.supportDelay); 6637 } else { 6638 this.calibrationX = 0; 6639 this.calibrationY = 0; 6640 this.portrait = false; 6641 window.addEventListener('mousemove', this.onMouseMove); 6642 this.doReadyCallback(); 6643 } 6644 6645 window.addEventListener('resize', this.onWindowResize); 6646 this.raf = rqAnFr(this.onAnimationFrame); 6647 } 6648 }, { 6649 key: 'disable', 6650 value: function disable() { 6651 if (!this.enabled) { 6652 return; 6653 } 6654 this.enabled = false; 6655 6656 if (this.orientationSupport) { 6657 window.removeEventListener('deviceorientation', this.onDeviceOrientation); 6658 } else if (this.motionSupport) { 6659 window.removeEventListener('devicemotion', this.onDeviceMotion); 6660 } else { 6661 window.removeEventListener('mousemove', this.onMouseMove); 6662 } 6663 6664 window.removeEventListener('resize', this.onWindowResize); 6665 rqAnFr.cancel(this.raf); 6666 } 6667 }, { 6668 key: 'calibrate', 6669 value: function calibrate(x, y) { 6670 this.calibrateX = x === undefined ? this.calibrateX : x; 6671 this.calibrateY = y === undefined ? this.calibrateY : y; 6672 } 6673 }, { 6674 key: 'invert', 6675 value: function invert(x, y) { 6676 this.invertX = x === undefined ? this.invertX : x; 6677 this.invertY = y === undefined ? this.invertY : y; 6678 } 6679 }, { 6680 key: 'friction', 6681 value: function friction(x, y) { 6682 this.frictionX = x === undefined ? this.frictionX : x; 6683 this.frictionY = y === undefined ? this.frictionY : y; 6684 } 6685 }, { 6686 key: 'scalar', 6687 value: function scalar(x, y) { 6688 this.scalarX = x === undefined ? this.scalarX : x; 6689 this.scalarY = y === undefined ? this.scalarY : y; 6690 } 6691 }, { 6692 key: 'limit', 6693 value: function limit(x, y) { 6694 this.limitX = x === undefined ? this.limitX : x; 6695 this.limitY = y === undefined ? this.limitY : y; 6696 } 6697 }, { 6698 key: 'origin', 6699 value: function origin(x, y) { 6700 this.originX = x === undefined ? this.originX : x; 6701 this.originY = y === undefined ? this.originY : y; 6702 } 6703 }, { 6704 key: 'setInputElement', 6705 value: function setInputElement(element) { 6706 this.inputElement = element; 6707 this.updateDimensions(); 6708 } 6709 }, { 6710 key: 'setPosition', 6711 value: function setPosition(element, x, y) { 6712 x = x.toFixed(this.precision) + 'px'; 6713 y = y.toFixed(this.precision) + 'px'; 6714 if (this.transform3DSupport) { 6715 helpers.css(element, 'transform', 'translate3d(' + x + ',' + y + ',0)'); 6716 } else if (this.transform2DSupport) { 6717 helpers.css(element, 'transform', 'translate(' + x + ',' + y + ')'); 6718 } else { 6719 element.style.left = x; 6720 element.style.top = y; 6721 } 6722 } 6723 }, { 6724 key: 'onOrientationTimer', 6725 value: function onOrientationTimer() { 6726 if (this.orientationSupport && this.orientationStatus === 0) { 6727 this.disable(); 6728 this.orientationSupport = false; 6729 this.enable(); 6730 } else { 6731 this.doReadyCallback(); 6732 } 6733 } 6734 }, { 6735 key: 'onMotionTimer', 6736 value: function onMotionTimer() { 6737 if (this.motionSupport && this.motionStatus === 0) { 6738 this.disable(); 6739 this.motionSupport = false; 6740 this.enable(); 6741 } else { 6742 this.doReadyCallback(); 6743 } 6744 } 6745 }, { 6746 key: 'onCalibrationTimer', 6747 value: function onCalibrationTimer() { 6748 this.calibrationFlag = true; 6749 } 6750 }, { 6751 key: 'onWindowResize', 6752 value: function onWindowResize() { 6753 this.updateDimensions(); 6754 } 6755 }, { 6756 key: 'onAnimationFrame', 6757 value: function onAnimationFrame() { 6758 this.updateBounds(); 6759 var calibratedInputX = this.inputX - this.calibrationX, 6760 calibratedInputY = this.inputY - this.calibrationY; 6761 if (Math.abs(calibratedInputX) > this.calibrationThreshold || Math.abs(calibratedInputY) > this.calibrationThreshold) { 6762 this.queueCalibration(0); 6763 } 6764 if (this.portrait) { 6765 this.motionX = this.calibrateX ? calibratedInputY : this.inputY; 6766 this.motionY = this.calibrateY ? calibratedInputX : this.inputX; 6767 } else { 6768 this.motionX = this.calibrateX ? calibratedInputX : this.inputX; 6769 this.motionY = this.calibrateY ? calibratedInputY : this.inputY; 6770 } 6771 this.motionX *= this.elementWidth * (this.scalarX / 100); 6772 this.motionY *= this.elementHeight * (this.scalarY / 100); 6773 if (!isNaN(parseFloat(this.limitX))) { 6774 this.motionX = helpers.clamp(this.motionX, -this.limitX, this.limitX); 6775 } 6776 if (!isNaN(parseFloat(this.limitY))) { 6777 this.motionY = helpers.clamp(this.motionY, -this.limitY, this.limitY); 6778 } 6779 this.velocityX += (this.motionX - this.velocityX) * this.frictionX; 6780 this.velocityY += (this.motionY - this.velocityY) * this.frictionY; 6781 for (var index = 0; index < this.layers.length; index++) { 6782 var layer = this.layers[index], 6783 depthX = this.depthsX[index], 6784 depthY = this.depthsY[index], 6785 xOffset = this.velocityX * (depthX * (this.invertX ? -1 : 1)), 6786 yOffset = this.velocityY * (depthY * (this.invertY ? -1 : 1)); 6787 this.setPosition(layer, xOffset, yOffset); 6788 } 6789 this.raf = rqAnFr(this.onAnimationFrame); 6790 } 6791 }, { 6792 key: 'rotate', 6793 value: function rotate(beta, gamma) { 6794 // Extract Rotation 6795 var x = (beta || 0) / MAGIC_NUMBER, 6796 // -90 :: 90 6797 y = (gamma || 0) / MAGIC_NUMBER; // -180 :: 180 6798 6799 // Detect Orientation Change 6800 var portrait = this.windowHeight > this.windowWidth; 6801 if (this.portrait !== portrait) { 6802 this.portrait = portrait; 6803 this.calibrationFlag = true; 6804 } 6805 6806 if (this.calibrationFlag) { 6807 this.calibrationFlag = false; 6808 this.calibrationX = x; 6809 this.calibrationY = y; 6810 } 6811 6812 this.inputX = x; 6813 this.inputY = y; 6814 } 6815 }, { 6816 key: 'onDeviceOrientation', 6817 value: function onDeviceOrientation(event) { 6818 var beta = event.beta; 6819 var gamma = event.gamma; 6820 if (beta !== null && gamma !== null) { 6821 this.orientationStatus = 1; 6822 this.rotate(beta, gamma); 6823 } 6824 } 6825 }, { 6826 key: 'onDeviceMotion', 6827 value: function onDeviceMotion(event) { 6828 var beta = event.rotationRate.beta; 6829 var gamma = event.rotationRate.gamma; 6830 if (beta !== null && gamma !== null) { 6831 this.motionStatus = 1; 6832 this.rotate(beta, gamma); 6833 } 6834 } 6835 }, { 6836 key: 'onMouseMove', 6837 value: function onMouseMove(event) { 6838 var clientX = event.clientX, 6839 clientY = event.clientY; 6840 6841 // reset input to center if hoverOnly is set and we're not hovering the element 6842 if (this.hoverOnly && (clientX < this.elementPositionX || clientX > this.elementPositionX + this.elementWidth || clientY < this.elementPositionY || clientY > this.elementPositionY + this.elementHeight)) { 6843 this.inputX = 0; 6844 this.inputY = 0; 6845 return; 6846 } 6847 6848 if (this.relativeInput) { 6849 // Clip mouse coordinates inside element bounds. 6850 if (this.clipRelativeInput) { 6851 clientX = Math.max(clientX, this.elementPositionX); 6852 clientX = Math.min(clientX, this.elementPositionX + this.elementWidth); 6853 clientY = Math.max(clientY, this.elementPositionY); 6854 clientY = Math.min(clientY, this.elementPositionY + this.elementHeight); 6855 } 6856 // Calculate input relative to the element. 6857 if (this.elementRangeX && this.elementRangeY) { 6858 this.inputX = (clientX - this.elementPositionX - this.elementCenterX) / this.elementRangeX; 6859 this.inputY = (clientY - this.elementPositionY - this.elementCenterY) / this.elementRangeY; 6860 } 6861 } else { 6862 // Calculate input relative to the window. 6863 if (this.windowRadiusX && this.windowRadiusY) { 6864 this.inputX = (clientX - this.windowCenterX) / this.windowRadiusX; 6865 this.inputY = (clientY - this.windowCenterY) / this.windowRadiusY; 6866 } 6867 } 6868 } 6869 }, { 6870 key: 'destroy', 6871 value: function destroy() { 6872 this.disable(); 6873 6874 clearTimeout(this.calibrationTimer); 6875 clearTimeout(this.detectionTimer); 6876 6877 this.element.removeAttribute('style'); 6878 for (var index = 0; index < this.layers.length; index++) { 6879 this.layers[index].removeAttribute('style'); 6880 } 6881 6882 delete this.element; 6883 delete this.layers; 6884 } 6885 }, { 6886 key: 'version', 6887 value: function version() { 6888 return '3.1.0'; 6889 } 6890 }]); 6891 6892 return Parallax; 6893}(); 6894 6895module.exports = Parallax; 6896 6897},{"object-assign":1,"raf":4}]},{},[5])(5) 6898}); 6899//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wZXJmb3JtYW5jZS1ub3cvbGliL3BlcmZvcm1hbmNlLW5vdy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcmFmL2luZGV4LmpzIiwic3JjL3BhcmFsbGF4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUN4RUE7Ozs7Ozs7O0FBUUEsSUFBTSxTQUFTLFFBQVEsS0FBUixDQUFmO0FBQ0EsSUFBTSxlQUFlLFFBQVEsZUFBUixDQUFyQjs7QUFFQSxJQUFNLFVBQVU7QUFDZCxpQkFBZSxFQUREO0FBRWQsV0FBUyxDQUFDLElBQUQsRUFBTyxDQUFDLFVBQUQsRUFBWSxRQUFaLENBQVAsRUFBOEIsQ0FBQyxPQUFELEVBQVMsS0FBVCxDQUE5QixFQUErQyxDQUFDLEtBQUQsRUFBTyxHQUFQLENBQS9DLEVBQTRELENBQUMsTUFBRCxFQUFRLElBQVIsQ0FBNUQsQ0FGSzs7QUFJZCxPQUpjLGlCQUlSLEtBSlEsRUFJRCxHQUpDLEVBSUksR0FKSixFQUlTO0FBQ3JCLFdBQU8sTUFBTSxHQUFOLEdBQ0YsUUFBUSxHQUFSLEdBQWMsR0FBZCxHQUFvQixRQUFRLEdBQVIsR0FBYyxHQUFkLEdBQW9CLEtBRHRDLEdBRUYsUUFBUSxHQUFSLEdBQWMsR0FBZCxHQUFvQixRQUFRLEdBQVIsR0FBYyxHQUFkLEdBQW9CLEtBRjdDO0FBR0QsR0FSYTtBQVVkLE1BVmMsZ0JBVVQsT0FWUyxFQVVBLElBVkEsRUFVTTtBQUNsQixXQUFPLFFBQVEsV0FBUixDQUFvQixRQUFRLFlBQVIsQ0FBcUIsVUFBUSxJQUE3QixDQUFwQixDQUFQO0FBQ0QsR0FaYTtBQWNkLGFBZGMsdUJBY0YsS0FkRSxFQWNLO0FBQ2pCLFFBQUksVUFBVSxNQUFkLEVBQXNCO0FBQ3BCLGFBQU8sSUFBUDtBQUNELEtBRkQsTUFFTyxJQUFJLFVBQVUsT0FBZCxFQUF1QjtBQUM1QixhQUFPLEtBQVA7QUFDRCxLQUZNLE1BRUEsSUFBSSxVQUFVLE1BQWQsRUFBc0I7QUFDM0IsYUFBTyxJQUFQO0FBQ0QsS0FGTSxNQUVBLElBQUksQ0FBQyxNQUFNLFdBQVcsS0FBWCxDQUFOLENBQUQsSUFBNkIsU0FBUyxLQUFULENBQWpDLEVBQWtEO0FBQ3ZELGFBQU8sV0FBVyxLQUFYLENBQVA7QUFDRCxLQUZNLE1BRUE7QUFDTCxhQUFPLEtBQVA7QUFDRDtBQUNGLEdBMUJhO0FBNEJkLFdBNUJjLHFCQTRCSixLQTVCSSxFQTRCRztBQUNmLFdBQU8sTUFBTSxPQUFOLENBQWMsU0FBZCxFQUF5QixVQUFDLEtBQUQsRUFBUSxTQUFSLEVBQXNCO0FBQ3BELGFBQU8sWUFBWSxVQUFVLFdBQVYsRUFBWixHQUFzQyxFQUE3QztBQUNELEtBRk0sQ0FBUDtBQUdELEdBaENhO0FBa0NkLFlBbENjLHNCQWtDSCxPQWxDRyxFQWtDTTtBQUNsQixZQUFRLEdBQVIsQ0FBWSxPQUFaLEVBQXFCLFdBQXJCLEVBQWtDLHNDQUFsQztBQUNBLFlBQVEsR0FBUixDQUFZLE9BQVosRUFBcUIsaUJBQXJCLEVBQXdDLGFBQXhDO0FBQ0EsWUFBUSxHQUFSLENBQVksT0FBWixFQUFxQixxQkFBckIsRUFBNEMsUUFBNUM7QUFDRCxHQXRDYTtBQXdDZCxrQkF4Q2MsNEJBd0NHLEtBeENILEVBd0NVO0FBQ3RCLFFBQUksVUFBVSxTQUFTLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBZDtBQUFBLFFBQ0ksa0JBQWtCLEtBRHRCO0FBQUEsUUFFSSxnQkFBZ0IsSUFGcEI7QUFBQSxRQUdJLGlCQUFpQixLQUhyQjtBQUFBLFFBSUksY0FBYyxJQUpsQjtBQUFBLFFBS0ksYUFBYSxJQUxqQjtBQU1BLFNBQUssSUFBSSxJQUFJLENBQVIsRUFBVyxJQUFJLFFBQVEsT0FBUixDQUFnQixNQUFwQyxFQUE0QyxJQUFJLENBQWhELEVBQW1ELEdBQW5ELEVBQXdEO0FBQ3RELFVBQUksUUFBUSxPQUFSLENBQWdCLENBQWhCLE1BQXVCLElBQTNCLEVBQWlDO0FBQy9CLHNCQUFjLFFBQVEsT0FBUixDQUFnQixDQUFoQixFQUFtQixDQUFuQixJQUF3QixXQUF0QztBQUNBLHFCQUFhLFFBQVEsT0FBUixDQUFnQixDQUFoQixFQUFtQixDQUFuQixJQUF3QixXQUFyQztBQUNELE9BSEQsTUFHTztBQUNMLHNCQUFjLFdBQWQ7QUFDQSxxQkFBYSxXQUFiO0FBQ0Q7QUFDRCxVQUFJLFFBQVEsS0FBUixDQUFjLFVBQWQsTUFBOEIsU0FBbEMsRUFBNkM7QUFDM0MsMEJBQWtCLElBQWxCO0FBQ0E7QUFDRDtBQUNGO0FBQ0QsWUFBTyxLQUFQO0FBQ0UsV0FBSyxJQUFMO0FBQ0UseUJBQWlCLGVBQWpCO0FBQ0E7QUFDRixXQUFLLElBQUw7QUFDRSxZQUFJLGVBQUosRUFBcUI7QUFDbkIsY0FBSSxPQUFPLFNBQVMsSUFBVCxJQUFpQixTQUFTLGFBQVQsQ0FBdUIsTUFBdkIsQ0FBNUI7QUFBQSxjQUNJLGtCQUFrQixTQUFTLGVBRC9CO0FBQUEsY0FFSSxtQkFBbUIsZ0JBQWdCLEtBQWhCLENBQXNCLFFBRjdDO0FBQUEsY0FHSSxnQkFBZ0IsS0FIcEI7O0FBS0EsY0FBSSxDQUFDLFNBQVMsSUFBZCxFQUFvQjtBQUNsQiw0QkFBZ0IsSUFBaEI7QUFDQSw0QkFBZ0IsS0FBaEIsQ0FBc0IsUUFBdEIsR0FBaUMsUUFBakM7QUFDQSw0QkFBZ0IsV0FBaEIsQ0FBNEIsSUFBNUI7QUFDQSxpQkFBSyxLQUFMLENBQVcsUUFBWCxHQUFzQixRQUF0QjtBQUNBLGlCQUFLLEtBQUwsQ0FBVyxVQUFYLEdBQXdCLEVBQXhCO0FBQ0Q7O0FBRUQsZUFBSyxXQUFMLENBQWlCLE9BQWpCO0FBQ0Esa0JBQVEsS0FBUixDQUFjLFVBQWQsSUFBNEIsMEJBQTVCO0FBQ0EsMEJBQWdCLE9BQU8sZ0JBQVAsQ0FBd0IsT0FBeEIsRUFBaUMsZ0JBQWpDLENBQWtELFdBQWxELENBQWhCO0FBQ0EsMkJBQWlCLGtCQUFrQixTQUFsQixJQUErQixjQUFjLE1BQWQsR0FBdUIsQ0FBdEQsSUFBMkQsa0JBQWtCLE1BQTlGO0FBQ0EsMEJBQWdCLEtBQWhCLENBQXNCLFFBQXRCLEdBQWlDLGdCQUFqQztBQUNBLGVBQUssV0FBTCxDQUFpQixPQUFqQjs7QUFFQSxjQUFLLGFBQUwsRUFBcUI7QUFDbkIsaUJBQUssZUFBTCxDQUFxQixPQUFyQjtBQUNBLGlCQUFLLFVBQUwsQ0FBZ0IsV0FBaEIsQ0FBNEIsSUFBNUI7QUFDRDtBQUNGO0FBQ0Q7QUEvQko7QUFpQ0EsV0FBTyxjQUFQO0FBQ0QsR0E5RmE7QUFnR2QsS0FoR2MsZUFnR1YsT0FoR1UsRUFnR0QsUUFoR0MsRUFnR1MsS0FoR1QsRUFnR2dCO0FBQzVCLFFBQUksYUFBYSxRQUFRLGFBQVIsQ0FBc0IsUUFBdEIsQ0FBakI7QUFDQSxRQUFJLENBQUMsVUFBTCxFQUFpQjtBQUNmLFdBQUssSUFBSSxJQUFJLENBQVIsRUFBVyxJQUFJLFFBQVEsT0FBUixDQUFnQixNQUFwQyxFQUE0QyxJQUFJLENBQWhELEVBQW1ELEdBQW5ELEVBQXdEO0FBQ3RELFlBQUksUUFBUSxPQUFSLENBQWdCLENBQWhCLE1BQXVCLElBQTNCLEVBQWlDO0FBQy9CLHVCQUFhLFFBQVEsU0FBUixDQUFrQixRQUFRLE9BQVIsQ0FBZ0IsQ0FBaEIsRUFBbUIsQ0FBbkIsSUFBd0IsR0FBeEIsR0FBOEIsUUFBaEQsQ0FBYjtBQUNELFNBRkQsTUFFTztBQUNMLHVCQUFhLFFBQWI7QUFDRDtBQUNELFlBQUksUUFBUSxLQUFSLENBQWMsVUFBZCxNQUE4QixTQUFsQyxFQUE2QztBQUMzQyxrQkFBUSxhQUFSLENBQXNCLFFBQXRCLElBQWtDLFVBQWxDO0FBQ0E7QUFDRDtBQUNGO0FBQ0Y7QUFDRCxZQUFRLEtBQVIsQ0FBYyxVQUFkLElBQTRCLEtBQTVCO0FBQ0Q7QUFoSGEsQ0FBaEI7O0FBb0hBLElBQU0sZUFBZSxFQUFyQjtBQUFBLElBQ00sV0FBVztBQUNULGlCQUFlLEtBRE47QUFFVCxxQkFBbUIsS0FGVjtBQUdULGdCQUFjLElBSEw7QUFJVCxhQUFXLEtBSkY7QUFLVCx3QkFBc0IsR0FMYjtBQU1ULG9CQUFrQixHQU5UO0FBT1QsZ0JBQWMsR0FQTDtBQVFULGNBQVksS0FSSDtBQVNULGNBQVksSUFUSDtBQVVULFdBQVMsSUFWQTtBQVdULFdBQVMsSUFYQTtBQVlULFVBQVEsS0FaQztBQWFULFVBQVEsS0FiQztBQWNULFdBQVMsSUFkQTtBQWVULFdBQVMsSUFmQTtBQWdCVCxhQUFXLEdBaEJGO0FBaUJULGFBQVcsR0FqQkY7QUFrQlQsV0FBUyxHQWxCQTtBQW1CVCxXQUFTLEdBbkJBO0FBb0JULGlCQUFlLEtBcEJOO0FBcUJULGFBQVcsQ0FyQkY7QUFzQlQsV0FBUyxJQXRCQTtBQXVCVCxZQUFVO0FBdkJELENBRGpCOztJQTJCTSxRO0FBQ0osb0JBQVksT0FBWixFQUFxQixPQUFyQixFQUE4QjtBQUFBOztBQUU1QixTQUFLLE9BQUwsR0FBZSxPQUFmOztBQUVBLFFBQU0sT0FBTztBQUNYLGtCQUFZLFFBQVEsSUFBUixDQUFhLEtBQUssT0FBbEIsRUFBMkIsYUFBM0IsQ0FERDtBQUVYLGtCQUFZLFFBQVEsSUFBUixDQUFhLEtBQUssT0FBbEIsRUFBMkIsYUFBM0IsQ0FGRDtBQUdYLGVBQVMsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixVQUEzQixDQUhFO0FBSVgsZUFBUyxRQUFRLElBQVIsQ0FBYSxLQUFLLE9BQWxCLEVBQTJCLFVBQTNCLENBSkU7QUFLWCxjQUFRLFFBQVEsSUFBUixDQUFhLEtBQUssT0FBbEIsRUFBMkIsU0FBM0IsQ0FMRztBQU1YLGNBQVEsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixTQUEzQixDQU5HO0FBT1gsZUFBUyxRQUFRLElBQVIsQ0FBYSxLQUFLLE9BQWxCLEVBQTJCLFVBQTNCLENBUEU7QUFRWCxlQUFTLFFBQVEsSUFBUixDQUFhLEtBQUssT0FBbEIsRUFBMkIsVUFBM0IsQ0FSRTtBQVNYLGlCQUFXLFFBQVEsSUFBUixDQUFhLEtBQUssT0FBbEIsRUFBMkIsWUFBM0IsQ0FUQTtBQVVYLGlCQUFXLFFBQVEsSUFBUixDQUFhLEtBQUssT0FBbEIsRUFBMkIsWUFBM0IsQ0FWQTtBQVdYLGVBQVMsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixVQUEzQixDQVhFO0FBWVgsZUFBUyxRQUFRLElBQVIsQ0FBYSxLQUFLLE9BQWxCLEVBQTJCLFVBQTNCLENBWkU7QUFhWCxxQkFBZSxRQUFRLElBQVIsQ0FBYSxLQUFLLE9BQWxCLEVBQTJCLGdCQUEzQixDQWJKO0FBY1gsaUJBQVcsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixXQUEzQixDQWRBO0FBZVgscUJBQWUsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixnQkFBM0IsQ0FmSjtBQWdCWCx5QkFBbUIsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixxQkFBM0IsQ0FoQlI7QUFpQlgsaUJBQVcsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixZQUEzQixDQWpCQTtBQWtCWCxvQkFBYyxTQUFTLGFBQVQsQ0FBdUIsUUFBUSxJQUFSLENBQWEsS0FBSyxPQUFsQixFQUEyQixlQUEzQixDQUF2QixDQWxCSDtBQW1CWCxnQkFBVSxRQUFRLElBQVIsQ0FBYSxLQUFLLE9BQWxCLEVBQTJCLFVBQTNCO0FBbkJDLEtBQWI7O0FBc0JBLFNBQUssSUFBSSxHQUFULElBQWdCLElBQWhCLEVBQXNCO0FBQ3BCLFVBQUksS0FBSyxHQUFMLE1BQWMsSUFBbEIsRUFBd0I7QUFDdEIsZUFBTyxLQUFLLEdBQUwsQ0FBUDtBQUNEO0FBQ0Y7O0FBRUQsaUJBQWEsSUFBYixFQUFtQixRQUFuQixFQUE2QixJQUE3QixFQUFtQyxPQUFuQzs7QUFFQSxRQUFHLENBQUMsS0FBSyxZQUFULEVBQXVCO0FBQ3JCLFdBQUssWUFBTCxHQUFvQixLQUFLLE9BQXpCO0FBQ0Q7O0FBRUQsU0FBSyxnQkFBTCxHQUF3QixJQUF4QjtBQUNBLFNBQUssZUFBTCxHQUF1QixJQUF2QjtBQUNBLFNBQUssT0FBTCxHQUFlLEtBQWY7QUFDQSxTQUFLLE9BQUwsR0FBZSxFQUFmO0FBQ0EsU0FBSyxPQUFMLEdBQWUsRUFBZjtBQUNBLFNBQUssR0FBTCxHQUFXLElBQVg7O0FBRUEsU0FBSyxNQUFMLEdBQWMsSUFBZDtBQUNBLFNBQUssZ0JBQUwsR0FBd0IsQ0FBeEI7QUFDQSxTQUFLLGdCQUFMLEdBQXdCLENBQXhCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLENBQXBCO0FBQ0EsU0FBSyxhQUFMLEdBQXFCLENBQXJCOztBQUVBLFNBQUssY0FBTCxHQUFzQixDQUF0QjtBQUNBLFNBQUssY0FBTCxHQUFzQixDQUF0Qjs7QUFFQSxTQUFLLGFBQUwsR0FBcUIsQ0FBckI7QUFDQSxTQUFLLGFBQUwsR0FBcUIsQ0FBckI7O0FBRUEsU0FBSyxZQUFMLEdBQW9CLENBQXBCO0FBQ0EsU0FBSyxZQUFMLEdBQW9CLENBQXBCOztBQUVBLFNBQUssTUFBTCxHQUFjLENBQWQ7QUFDQSxTQUFLLE1BQUwsR0FBYyxDQUFkOztBQUVBLFNBQUssT0FBTCxHQUFlLENBQWY7QUFDQSxTQUFLLE9BQUwsR0FBZSxDQUFmOztBQUVBLFNBQUssU0FBTCxHQUFpQixDQUFqQjtBQUNBLFNBQUssU0FBTCxHQUFpQixDQUFqQjs7QUFFQSxTQUFLLFdBQUwsR0FBbUIsS0FBSyxXQUFMLENBQWlCLElBQWpCLENBQXNCLElBQXRCLENBQW5CO0FBQ0EsU0FBSyxtQkFBTCxHQUEyQixLQUFLLG1CQUFMLENBQXlCLElBQXpCLENBQThCLElBQTlCLENBQTNCO0FBQ0EsU0FBSyxjQUFMLEdBQXNCLEtBQUssY0FBTCxDQUFvQixJQUFwQixDQUF5QixJQUF6QixDQUF0QjtBQUNBLFNBQUssa0JBQUwsR0FBMEIsS0FBSyxrQkFBTCxDQUF3QixJQUF4QixDQUE2QixJQUE3QixDQUExQjtBQUNBLFNBQUssYUFBTCxHQUFxQixLQUFLLGFBQUwsQ0FBbUIsSUFBbkIsQ0FBd0IsSUFBeEIsQ0FBckI7QUFDQSxTQUFLLGtCQUFMLEdBQTBCLEtBQUssa0JBQUwsQ0FBd0IsSUFBeEIsQ0FBNkIsSUFBN0IsQ0FBMUI7QUFDQSxTQUFLLGdCQUFMLEdBQXdCLEtBQUssZ0JBQUwsQ0FBc0IsSUFBdEIsQ0FBMkIsSUFBM0IsQ0FBeEI7QUFDQSxTQUFLLGNBQUwsR0FBc0IsS0FBSyxjQUFMLENBQW9CLElBQXBCLENBQXlCLElBQXpCLENBQXRCOztBQUVBLFNBQUssV0FBTCxHQUFtQixJQUFuQjtBQUNBLFNBQUssWUFBTCxHQUFvQixJQUFwQjtBQUNBLFNBQUssYUFBTCxHQUFxQixJQUFyQjtBQUNBLFNBQUssYUFBTCxHQUFxQixJQUFyQjtBQUNBLFNBQUssYUFBTCxHQUFxQixJQUFyQjtBQUNBLFNBQUssYUFBTCxHQUFxQixJQUFyQjtBQUNBLFNBQUssUUFBTCxHQUFnQixLQUFoQjtBQUNBLFNBQUssT0FBTCxHQUFlLENBQUMsVUFBVSxTQUFWLENBQW9CLEtBQXBCLENBQTBCLDRFQUExQixDQUFoQjtBQUNBLFNBQUssYUFBTCxHQUFxQixDQUFDLENBQUMsT0FBTyxpQkFBVCxJQUE4QixDQUFDLEtBQUssT0FBekQ7QUFDQSxTQUFLLGtCQUFMLEdBQTBCLENBQUMsQ0FBQyxPQUFPLHNCQUFULElBQW1DLENBQUMsS0FBSyxPQUFuRTtBQUNBLFNBQUssaUJBQUwsR0FBeUIsQ0FBekI7QUFDQSxTQUFLLFlBQUwsR0FBb0IsQ0FBcEI7O0FBRUEsU0FBSyxVQUFMO0FBQ0Q7Ozs7aUNBRVk7QUFDWCxVQUFJLEtBQUssa0JBQUwsS0FBNEIsU0FBaEMsRUFBMkM7QUFDekMsYUFBSyxrQkFBTCxHQUEwQixRQUFRLGdCQUFSLENBQXlCLElBQXpCLENBQTFCO0FBQ0EsYUFBSyxrQkFBTCxHQUEwQixRQUFRLGdCQUFSLENBQXlCLElBQXpCLENBQTFCO0FBQ0Q7O0FBRUQ7QUFDQSxVQUFJLEtBQUssa0JBQVQsRUFBNkI7QUFDM0IsZ0JBQVEsVUFBUixDQUFtQixLQUFLLE9BQXhCO0FBQ0Q7O0FBRUQsVUFBSSxRQUFRLE9BQU8sZ0JBQVAsQ0FBd0IsS0FBSyxPQUE3QixDQUFaO0FBQ0EsVUFBSSxNQUFNLGdCQUFOLENBQXVCLFVBQXZCLE1BQXVDLFFBQTNDLEVBQXFEO0FBQ25ELGFBQUssT0FBTCxDQUFhLEtBQWIsQ0FBbUIsUUFBbkIsR0FBOEIsVUFBOUI7QUFDRDs7QUFFRDtBQUNBLFVBQUcsQ0FBQyxLQUFLLGFBQVQsRUFBd0I7QUFDdEIsYUFBSyxPQUFMLENBQWEsS0FBYixDQUFtQixhQUFuQixHQUFtQyxNQUFuQztBQUNEOztBQUVEO0FBQ0EsV0FBSyxZQUFMO0FBQ0EsV0FBSyxnQkFBTDtBQUNBLFdBQUssTUFBTDtBQUNBLFdBQUssZ0JBQUwsQ0FBc0IsS0FBSyxnQkFBM0I7QUFDRDs7O3NDQUVpQjtBQUNoQixVQUFHLEtBQUssT0FBUixFQUFpQjtBQUNmLGFBQUssT0FBTDtBQUNEO0FBQ0Y7OzttQ0FFYztBQUNiLFVBQUcsS0FBSyxRQUFSLEVBQWtCO0FBQ2hCLGFBQUssTUFBTCxHQUFjLEtBQUssT0FBTCxDQUFhLGdCQUFiLENBQThCLEtBQUssUUFBbkMsQ0FBZDtBQUNELE9BRkQsTUFFTztBQUNMLGFBQUssTUFBTCxHQUFjLEtBQUssT0FBTCxDQUFhLFFBQTNCO0FBQ0Q7O0FBRUQsVUFBRyxDQUFDLEtBQUssTUFBTCxDQUFZLE1BQWhCLEVBQXdCO0FBQ3RCLGdCQUFRLElBQVIsQ0FBYSxrREFBYjtBQUNEOztBQUVELFdBQUssT0FBTCxHQUFlLEVBQWY7QUFDQSxXQUFLLE9BQUwsR0FBZSxFQUFmOztBQUVBLFdBQUssSUFBSSxRQUFRLENBQWpCLEVBQW9CLFFBQVEsS0FBSyxNQUFMLENBQVksTUFBeEMsRUFBZ0QsT0FBaEQsRUFBeUQ7QUFDdkQsWUFBSSxRQUFRLEtBQUssTUFBTCxDQUFZLEtBQVosQ0FBWjs7QUFFQSxZQUFJLEtBQUssa0JBQVQsRUFBNkI7QUFDM0Isa0JBQVEsVUFBUixDQUFtQixLQUFuQjtBQUNEOztBQUVELGNBQU0sS0FBTixDQUFZLFFBQVosR0FBdUIsUUFBUSxVQUFSLEdBQXFCLFVBQTVDO0FBQ0EsY0FBTSxLQUFOLENBQVksT0FBWixHQUFzQixPQUF0QjtBQUNBLGNBQU0sS0FBTixDQUFZLElBQVosR0FBbUIsQ0FBbkI7QUFDQSxjQUFNLEtBQU4sQ0FBWSxHQUFaLEdBQWtCLENBQWxCOztBQUVBLFlBQUksUUFBUSxRQUFRLElBQVIsQ0FBYSxLQUFiLEVBQW9CLE9BQXBCLEtBQWdDLENBQTVDO0FBQ0EsYUFBSyxPQUFMLENBQWEsSUFBYixDQUFrQixRQUFRLElBQVIsQ0FBYSxLQUFiLEVBQW9CLFNBQXBCLEtBQWtDLEtBQXBEO0FBQ0EsYUFBSyxPQUFMLENBQWEsSUFBYixDQUFrQixRQUFRLElBQVIsQ0FBYSxLQUFiLEVBQW9CLFNBQXBCLEtBQWtDLEtBQXBEO0FBQ0Q7QUFDRjs7O3VDQUVrQjtBQUNqQixXQUFLLFdBQUwsR0FBbUIsT0FBTyxVQUExQjtBQUNBLFdBQUssWUFBTCxHQUFvQixPQUFPLFdBQTNCO0FBQ0EsV0FBSyxhQUFMLEdBQXFCLEtBQUssV0FBTCxHQUFtQixLQUFLLE9BQTdDO0FBQ0EsV0FBSyxhQUFMLEdBQXFCLEtBQUssWUFBTCxHQUFvQixLQUFLLE9BQTlDO0FBQ0EsV0FBSyxhQUFMLEdBQXFCLEtBQUssR0FBTCxDQUFTLEtBQUssYUFBZCxFQUE2QixLQUFLLFdBQUwsR0FBbUIsS0FBSyxhQUFyRCxDQUFyQjtBQUNBLFdBQUssYUFBTCxHQUFxQixLQUFLLEdBQUwsQ0FBUyxLQUFLLGFBQWQsRUFBNkIsS0FBSyxZQUFMLEdBQW9CLEtBQUssYUFBdEQsQ0FBckI7QUFDRDs7O21DQUVjO0FBQ2IsV0FBSyxNQUFMLEdBQWMsS0FBSyxZQUFMLENBQWtCLHFCQUFsQixFQUFkO0FBQ0EsV0FBSyxnQkFBTCxHQUF3QixLQUFLLE1BQUwsQ0FBWSxJQUFwQztBQUNBLFdBQUssZ0JBQUwsR0FBd0IsS0FBSyxNQUFMLENBQVksR0FBcEM7QUFDQSxXQUFLLFlBQUwsR0FBb0IsS0FBSyxNQUFMLENBQVksS0FBaEM7QUFDQSxXQUFLLGFBQUwsR0FBcUIsS0FBSyxNQUFMLENBQVksTUFBakM7QUFDQSxXQUFLLGNBQUwsR0FBc0IsS0FBSyxZQUFMLEdBQW9CLEtBQUssT0FBL0M7QUFDQSxXQUFLLGNBQUwsR0FBc0IsS0FBSyxhQUFMLEdBQXFCLEtBQUssT0FBaEQ7QUFDQSxXQUFLLGFBQUwsR0FBcUIsS0FBSyxHQUFMLENBQVMsS0FBSyxjQUFkLEVBQThCLEtBQUssWUFBTCxHQUFvQixLQUFLLGNBQXZELENBQXJCO0FBQ0EsV0FBSyxhQUFMLEdBQXFCLEtBQUssR0FBTCxDQUFTLEtBQUssY0FBZCxFQUE4QixLQUFLLGFBQUwsR0FBcUIsS0FBSyxjQUF4RCxDQUFyQjtBQUNEOzs7cUNBRWdCLEssRUFBTztBQUN0QixtQkFBYSxLQUFLLGdCQUFsQjtBQUNBLFdBQUssZ0JBQUwsR0FBd0IsV0FBVyxLQUFLLGtCQUFoQixFQUFvQyxLQUFwQyxDQUF4QjtBQUNEOzs7NkJBRVE7QUFDUCxVQUFJLEtBQUssT0FBVCxFQUFrQjtBQUNoQjtBQUNEO0FBQ0QsV0FBSyxPQUFMLEdBQWUsSUFBZjs7QUFFQSxVQUFJLEtBQUssa0JBQVQsRUFBNkI7QUFDM0IsYUFBSyxRQUFMLEdBQWdCLEtBQWhCO0FBQ0EsZUFBTyxnQkFBUCxDQUF3QixtQkFBeEIsRUFBNkMsS0FBSyxtQkFBbEQ7QUFDQSxhQUFLLGNBQUwsR0FBc0IsV0FBVyxLQUFLLGtCQUFoQixFQUFvQyxLQUFLLFlBQXpDLENBQXRCO0FBQ0QsT0FKRCxNQUlPLElBQUksS0FBSyxhQUFULEVBQXdCO0FBQzdCLGFBQUssUUFBTCxHQUFnQixLQUFoQjtBQUNBLGVBQU8sZ0JBQVAsQ0FBd0IsY0FBeEIsRUFBd0MsS0FBSyxjQUE3QztBQUNBLGFBQUssY0FBTCxHQUFzQixXQUFXLEtBQUssYUFBaEIsRUFBK0IsS0FBSyxZQUFwQyxDQUF0QjtBQUNELE9BSk0sTUFJQTtBQUNMLGFBQUssWUFBTCxHQUFvQixDQUFwQjtBQUNBLGFBQUssWUFBTCxHQUFvQixDQUFwQjtBQUNBLGFBQUssUUFBTCxHQUFnQixLQUFoQjtBQUNBLGVBQU8sZ0JBQVAsQ0FBd0IsV0FBeEIsRUFBcUMsS0FBSyxXQUExQztBQUNBLGFBQUssZUFBTDtBQUNEOztBQUVELGFBQU8sZ0JBQVAsQ0FBd0IsUUFBeEIsRUFBa0MsS0FBSyxjQUF2QztBQUNBLFdBQUssR0FBTCxHQUFXLE9BQU8sS0FBSyxnQkFBWixDQUFYO0FBQ0Q7Ozs4QkFFUztBQUNSLFVBQUksQ0FBQyxLQUFLLE9BQVYsRUFBbUI7QUFDakI7QUFDRDtBQUNELFdBQUssT0FBTCxHQUFlLEtBQWY7O0FBRUEsVUFBSSxLQUFLLGtCQUFULEVBQTZCO0FBQzNCLGVBQU8sbUJBQVAsQ0FBMkIsbUJBQTNCLEVBQWdELEtBQUssbUJBQXJEO0FBQ0QsT0FGRCxNQUVPLElBQUksS0FBSyxhQUFULEVBQXdCO0FBQzdCLGVBQU8sbUJBQVAsQ0FBMkIsY0FBM0IsRUFBMkMsS0FBSyxjQUFoRDtBQUNELE9BRk0sTUFFQTtBQUNMLGVBQU8sbUJBQVAsQ0FBMkIsV0FBM0IsRUFBd0MsS0FBSyxXQUE3QztBQUNEOztBQUVELGFBQU8sbUJBQVAsQ0FBMkIsUUFBM0IsRUFBcUMsS0FBSyxjQUExQztBQUNBLGFBQU8sTUFBUCxDQUFjLEtBQUssR0FBbkI7QUFDRDs7OzhCQUVTLEMsRUFBRyxDLEVBQUc7QUFDZCxXQUFLLFVBQUwsR0FBa0IsTUFBTSxTQUFOLEdBQWtCLEtBQUssVUFBdkIsR0FBb0MsQ0FBdEQ7QUFDQSxXQUFLLFVBQUwsR0FBa0IsTUFBTSxTQUFOLEdBQWtCLEtBQUssVUFBdkIsR0FBb0MsQ0FBdEQ7QUFDRDs7OzJCQUVNLEMsRUFBRyxDLEVBQUc7QUFDWCxXQUFLLE9BQUwsR0FBZSxNQUFNLFNBQU4sR0FBa0IsS0FBSyxPQUF2QixHQUFpQyxDQUFoRDtBQUNBLFdBQUssT0FBTCxHQUFlLE1BQU0sU0FBTixHQUFrQixLQUFLLE9BQXZCLEdBQWlDLENBQWhEO0FBQ0Q7Ozs2QkFFUSxDLEVBQUcsQyxFQUFHO0FBQ2IsV0FBSyxTQUFMLEdBQWlCLE1BQU0sU0FBTixHQUFrQixLQUFLLFNBQXZCLEdBQW1DLENBQXBEO0FBQ0EsV0FBSyxTQUFMLEdBQWlCLE1BQU0sU0FBTixHQUFrQixLQUFLLFNBQXZCLEdBQW1DLENBQXBEO0FBQ0Q7OzsyQkFFTSxDLEVBQUcsQyxFQUFHO0FBQ1gsV0FBSyxPQUFMLEdBQWUsTUFBTSxTQUFOLEdBQWtCLEtBQUssT0FBdkIsR0FBaUMsQ0FBaEQ7QUFDQSxXQUFLLE9BQUwsR0FBZSxNQUFNLFNBQU4sR0FBa0IsS0FBSyxPQUF2QixHQUFpQyxDQUFoRDtBQUNEOzs7MEJBRUssQyxFQUFHLEMsRUFBRztBQUNWLFdBQUssTUFBTCxHQUFjLE1BQU0sU0FBTixHQUFrQixLQUFLLE1BQXZCLEdBQWdDLENBQTlDO0FBQ0EsV0FBSyxNQUFMLEdBQWMsTUFBTSxTQUFOLEdBQWtCLEtBQUssTUFBdkIsR0FBZ0MsQ0FBOUM7QUFDRDs7OzJCQUVNLEMsRUFBRyxDLEVBQUc7QUFDWCxXQUFLLE9BQUwsR0FBZSxNQUFNLFNBQU4sR0FBa0IsS0FBSyxPQUF2QixHQUFpQyxDQUFoRDtBQUNBLFdBQUssT0FBTCxHQUFlLE1BQU0sU0FBTixHQUFrQixLQUFLLE9BQXZCLEdBQWlDLENBQWhEO0FBQ0Q7OztvQ0FFZSxPLEVBQVM7QUFDdkIsV0FBSyxZQUFMLEdBQW9CLE9BQXBCO0FBQ0EsV0FBSyxnQkFBTDtBQUNEOzs7Z0NBRVcsTyxFQUFTLEMsRUFBRyxDLEVBQUc7QUFDekIsVUFBSSxFQUFFLE9BQUYsQ0FBVSxLQUFLLFNBQWYsSUFBNEIsSUFBaEM7QUFDQSxVQUFJLEVBQUUsT0FBRixDQUFVLEtBQUssU0FBZixJQUE0QixJQUFoQztBQUNBLFVBQUksS0FBSyxrQkFBVCxFQUE2QjtBQUMzQixnQkFBUSxHQUFSLENBQVksT0FBWixFQUFxQixXQUFyQixFQUFrQyxpQkFBaUIsQ0FBakIsR0FBcUIsR0FBckIsR0FBMkIsQ0FBM0IsR0FBK0IsS0FBakU7QUFDRCxPQUZELE1BRU8sSUFBSSxLQUFLLGtCQUFULEVBQTZCO0FBQ2xDLGdCQUFRLEdBQVIsQ0FBWSxPQUFaLEVBQXFCLFdBQXJCLEVBQWtDLGVBQWUsQ0FBZixHQUFtQixHQUFuQixHQUF5QixDQUF6QixHQUE2QixHQUEvRDtBQUNELE9BRk0sTUFFQTtBQUNMLGdCQUFRLEtBQVIsQ0FBYyxJQUFkLEdBQXFCLENBQXJCO0FBQ0EsZ0JBQVEsS0FBUixDQUFjLEdBQWQsR0FBb0IsQ0FBcEI7QUFDRDtBQUNGOzs7eUNBRW9CO0FBQ25CLFVBQUksS0FBSyxrQkFBTCxJQUEyQixLQUFLLGlCQUFMLEtBQTJCLENBQTFELEVBQTZEO0FBQzNELGFBQUssT0FBTDtBQUNBLGFBQUssa0JBQUwsR0FBMEIsS0FBMUI7QUFDQSxhQUFLLE1BQUw7QUFDRCxPQUpELE1BSU87QUFDTCxhQUFLLGVBQUw7QUFDRDtBQUNGOzs7b0NBRWU7QUFDZCxVQUFJLEtBQUssYUFBTCxJQUFzQixLQUFLLFlBQUwsS0FBc0IsQ0FBaEQsRUFBbUQ7QUFDakQsYUFBSyxPQUFMO0FBQ0EsYUFBSyxhQUFMLEdBQXFCLEtBQXJCO0FBQ0EsYUFBSyxNQUFMO0FBQ0QsT0FKRCxNQUlPO0FBQ0wsYUFBSyxlQUFMO0FBQ0Q7QUFDRjs7O3lDQUVvQjtBQUNuQixXQUFLLGVBQUwsR0FBdUIsSUFBdkI7QUFDRDs7O3FDQUVnQjtBQUNmLFdBQUssZ0JBQUw7QUFDRDs7O3VDQUVrQjtBQUNqQixXQUFLLFlBQUw7QUFDQSxVQUFJLG1CQUFtQixLQUFLLE1BQUwsR0FBYyxLQUFLLFlBQTFDO0FBQUEsVUFDSSxtQkFBbUIsS0FBSyxNQUFMLEdBQWMsS0FBSyxZQUQxQztBQUVBLFVBQUssS0FBSyxHQUFMLENBQVMsZ0JBQVQsSUFBNkIsS0FBSyxvQkFBbkMsSUFBNkQsS0FBSyxHQUFMLENBQVMsZ0JBQVQsSUFBNkIsS0FBSyxvQkFBbkcsRUFBMEg7QUFDeEgsYUFBSyxnQkFBTCxDQUFzQixDQUF0QjtBQUNEO0FBQ0QsVUFBSSxLQUFLLFFBQVQsRUFBbUI7QUFDakIsYUFBSyxPQUFMLEdBQWUsS0FBSyxVQUFMLEdBQWtCLGdCQUFsQixHQUFxQyxLQUFLLE1BQXpEO0FBQ0EsYUFBSyxPQUFMLEdBQWUsS0FBSyxVQUFMLEdBQWtCLGdCQUFsQixHQUFxQyxLQUFLLE1BQXpEO0FBQ0QsT0FIRCxNQUdPO0FBQ0wsYUFBSyxPQUFMLEdBQWUsS0FBSyxVQUFMLEdBQWtCLGdCQUFsQixHQUFxQyxLQUFLLE1BQXpEO0FBQ0EsYUFBSyxPQUFMLEdBQWUsS0FBSyxVQUFMLEdBQWtCLGdCQUFsQixHQUFxQyxLQUFLLE1BQXpEO0FBQ0Q7QUFDRCxXQUFLLE9BQUwsSUFBZ0IsS0FBSyxZQUFMLElBQXFCLEtBQUssT0FBTCxHQUFlLEdBQXBDLENBQWhCO0FBQ0EsV0FBSyxPQUFMLElBQWdCLEtBQUssYUFBTCxJQUFzQixLQUFLLE9BQUwsR0FBZSxHQUFyQyxDQUFoQjtBQUNBLFVBQUksQ0FBQyxNQUFNLFdBQVcsS0FBSyxNQUFoQixDQUFOLENBQUwsRUFBcUM7QUFDbkMsYUFBSyxPQUFMLEdBQWUsUUFBUSxLQUFSLENBQWMsS0FBSyxPQUFuQixFQUE0QixDQUFDLEtBQUssTUFBbEMsRUFBMEMsS0FBSyxNQUEvQyxDQUFmO0FBQ0Q7QUFDRCxVQUFJLENBQUMsTUFBTSxXQUFXLEtBQUssTUFBaEIsQ0FBTixDQUFMLEVBQXFDO0FBQ25DLGFBQUssT0FBTCxHQUFlLFFBQVEsS0FBUixDQUFjLEtBQUssT0FBbkIsRUFBNEIsQ0FBQyxLQUFLLE1BQWxDLEVBQTBDLEtBQUssTUFBL0MsQ0FBZjtBQUNEO0FBQ0QsV0FBSyxTQUFMLElBQWtCLENBQUMsS0FBSyxPQUFMLEdBQWUsS0FBSyxTQUFyQixJQUFrQyxLQUFLLFNBQXpEO0FBQ0EsV0FBSyxTQUFMLElBQWtCLENBQUMsS0FBSyxPQUFMLEdBQWUsS0FBSyxTQUFyQixJQUFrQyxLQUFLLFNBQXpEO0FBQ0EsV0FBSyxJQUFJLFFBQVEsQ0FBakIsRUFBb0IsUUFBUSxLQUFLLE1BQUwsQ0FBWSxNQUF4QyxFQUFnRCxPQUFoRCxFQUF5RDtBQUN2RCxZQUFJLFFBQVEsS0FBSyxNQUFMLENBQVksS0FBWixDQUFaO0FBQUEsWUFDSSxTQUFTLEtBQUssT0FBTCxDQUFhLEtBQWIsQ0FEYjtBQUFBLFlBRUksU0FBUyxLQUFLLE9BQUwsQ0FBYSxLQUFiLENBRmI7QUFBQSxZQUdJLFVBQVUsS0FBSyxTQUFMLElBQWtCLFVBQVUsS0FBSyxPQUFMLEdBQWUsQ0FBQyxDQUFoQixHQUFvQixDQUE5QixDQUFsQixDQUhkO0FBQUEsWUFJSSxVQUFVLEtBQUssU0FBTCxJQUFrQixVQUFVLEtBQUssT0FBTCxHQUFlLENBQUMsQ0FBaEIsR0FBb0IsQ0FBOUIsQ0FBbEIsQ0FKZDtBQUtBLGFBQUssV0FBTCxDQUFpQixLQUFqQixFQUF3QixPQUF4QixFQUFpQyxPQUFqQztBQUNEO0FBQ0QsV0FBSyxHQUFMLEdBQVcsT0FBTyxLQUFLLGdCQUFaLENBQVg7QUFDRDs7OzJCQUVNLEksRUFBTSxLLEVBQU07QUFDakI7QUFDQSxVQUFJLElBQUksQ0FBQyxRQUFRLENBQVQsSUFBYyxZQUF0QjtBQUFBLFVBQW9DO0FBQ2hDLFVBQUksQ0FBQyxTQUFTLENBQVYsSUFBZSxZQUR2QixDQUZpQixDQUdtQjs7QUFFcEM7QUFDQSxVQUFJLFdBQVcsS0FBSyxZQUFMLEdBQW9CLEtBQUssV0FBeEM7QUFDQSxVQUFJLEtBQUssUUFBTCxLQUFrQixRQUF0QixFQUFnQztBQUM5QixhQUFLLFFBQUwsR0FBZ0IsUUFBaEI7QUFDQSxhQUFLLGVBQUwsR0FBdUIsSUFBdkI7QUFDRDs7QUFFRCxVQUFJLEtBQUssZUFBVCxFQUEwQjtBQUN4QixhQUFLLGVBQUwsR0FBdUIsS0FBdkI7QUFDQSxhQUFLLFlBQUwsR0FBb0IsQ0FBcEI7QUFDQSxhQUFLLFlBQUwsR0FBb0IsQ0FBcEI7QUFDRDs7QUFFRCxXQUFLLE1BQUwsR0FBYyxDQUFkO0FBQ0EsV0FBSyxNQUFMLEdBQWMsQ0FBZDtBQUNEOzs7d0NBRW1CLEssRUFBTztBQUN6QixVQUFJLE9BQU8sTUFBTSxJQUFqQjtBQUNBLFVBQUksUUFBUSxNQUFNLEtBQWxCO0FBQ0EsVUFBSSxTQUFTLElBQVQsSUFBaUIsVUFBVSxJQUEvQixFQUFxQztBQUNuQyxhQUFLLGlCQUFMLEdBQXlCLENBQXpCO0FBQ0EsYUFBSyxNQUFMLENBQVksSUFBWixFQUFrQixLQUFsQjtBQUNEO0FBQ0Y7OzttQ0FFYyxLLEVBQU87QUFDcEIsVUFBSSxPQUFPLE1BQU0sWUFBTixDQUFtQixJQUE5QjtBQUNBLFVBQUksUUFBUSxNQUFNLFlBQU4sQ0FBbUIsS0FBL0I7QUFDQSxVQUFJLFNBQVMsSUFBVCxJQUFpQixVQUFVLElBQS9CLEVBQXFDO0FBQ25DLGFBQUssWUFBTCxHQUFvQixDQUFwQjtBQUNBLGFBQUssTUFBTCxDQUFZLElBQVosRUFBa0IsS0FBbEI7QUFDRDtBQUNGOzs7Z0NBRVcsSyxFQUFPO0FBQ2pCLFVBQUksVUFBVSxNQUFNLE9BQXBCO0FBQUEsVUFDSSxVQUFVLE1BQU0sT0FEcEI7O0FBR0E7QUFDQSxVQUFHLEtBQUssU0FBTCxLQUNDLFVBQVUsS0FBSyxnQkFBZixJQUFtQyxVQUFVLEtBQUssZ0JBQUwsR0FBd0IsS0FBSyxZQUEzRSxJQUNBLFVBQVUsS0FBSyxnQkFBZixJQUFtQyxVQUFVLEtBQUssZ0JBQUwsR0FBd0IsS0FBSyxhQUYxRSxDQUFILEVBRThGO0FBQzFGLGFBQUssTUFBTCxHQUFjLENBQWQ7QUFDQSxhQUFLLE1BQUwsR0FBYyxDQUFkO0FBQ0E7QUFDRDs7QUFFSCxVQUFJLEtBQUssYUFBVCxFQUF3QjtBQUN0QjtBQUNBLFlBQUksS0FBSyxpQkFBVCxFQUE0QjtBQUMxQixvQkFBVSxLQUFLLEdBQUwsQ0FBUyxPQUFULEVBQWtCLEtBQUssZ0JBQXZCLENBQVY7QUFDQSxvQkFBVSxLQUFLLEdBQUwsQ0FBUyxPQUFULEVBQWtCLEtBQUssZ0JBQUwsR0FBd0IsS0FBSyxZQUEvQyxDQUFWO0FBQ0Esb0JBQVUsS0FBSyxHQUFMLENBQVMsT0FBVCxFQUFrQixLQUFLLGdCQUF2QixDQUFWO0FBQ0Esb0JBQVUsS0FBSyxHQUFMLENBQVMsT0FBVCxFQUFrQixLQUFLLGdCQUFMLEdBQXdCLEtBQUssYUFBL0MsQ0FBVjtBQUNEO0FBQ0Q7QUFDQSxZQUFHLEtBQUssYUFBTCxJQUFzQixLQUFLLGFBQTlCLEVBQTZDO0FBQzNDLGVBQUssTUFBTCxHQUFjLENBQUMsVUFBVSxLQUFLLGdCQUFmLEdBQWtDLEtBQUssY0FBeEMsSUFBMEQsS0FBSyxhQUE3RTtBQUNBLGVBQUssTUFBTCxHQUFjLENBQUMsVUFBVSxLQUFLLGdCQUFmLEdBQWtDLEtBQUssY0FBeEMsSUFBMEQsS0FBSyxhQUE3RTtBQUNEO0FBQ0YsT0FiRCxNQWFPO0FBQ0w7QUFDQSxZQUFHLEtBQUssYUFBTCxJQUFzQixLQUFLLGFBQTlCLEVBQTZDO0FBQzNDLGVBQUssTUFBTCxHQUFjLENBQUMsVUFBVSxLQUFLLGFBQWhCLElBQWlDLEtBQUssYUFBcEQ7QUFDQSxlQUFLLE1BQUwsR0FBYyxDQUFDLFVBQVUsS0FBSyxhQUFoQixJQUFpQyxLQUFLLGFBQXBEO0FBQ0Q7QUFDRjtBQUNGOzs7OEJBRVM7QUFDUixXQUFLLE9BQUw7O0FBRUEsbUJBQWEsS0FBSyxnQkFBbEI7QUFDQSxtQkFBYSxLQUFLLGNBQWxCOztBQUVBLFdBQUssT0FBTCxDQUFhLGVBQWIsQ0FBNkIsT0FBN0I7QUFDQSxXQUFLLElBQUksUUFBUSxDQUFqQixFQUFvQixRQUFRLEtBQUssTUFBTCxDQUFZLE1BQXhDLEVBQWdELE9BQWhELEVBQXlEO0FBQ3ZELGFBQUssTUFBTCxDQUFZLEtBQVosRUFBbUIsZUFBbkIsQ0FBbUMsT0FBbkM7QUFDRDs7QUFFRCxhQUFPLEtBQUssT0FBWjtBQUNBLGFBQU8sS0FBSyxNQUFaO0FBQ0Q7Ozs4QkFFUztBQUNSLGFBQU8sT0FBUDtBQUNEOzs7Ozs7QUFJSCxPQUFPLE9BQVAsR0FBaUIsUUFBakIiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi4yXG4oZnVuY3Rpb24oKSB7XG4gIHZhciBnZXROYW5vU2Vjb25kcywgaHJ0aW1lLCBsb2FkVGltZSwgbW9kdWxlTG9hZFRpbWUsIG5vZGVMb2FkVGltZSwgdXBUaW1lO1xuXG4gIGlmICgodHlwZW9mIHBlcmZvcm1hbmNlICE9PSBcInVuZGVmaW5lZFwiICYmIHBlcmZvcm1hbmNlICE9PSBudWxsKSAmJiBwZXJmb3JtYW5jZS5ub3cpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIH07XG4gIH0gZWxzZSBpZiAoKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MgIT09IG51bGwpICYmIHByb2Nlc3MuaHJ0aW1lKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAoZ2V0TmFub1NlY29uZHMoKSAtIG5vZGVMb2FkVGltZSkgLyAxZTY7XG4gICAgfTtcbiAgICBocnRpbWUgPSBwcm9jZXNzLmhydGltZTtcbiAgICBnZXROYW5vU2Vjb25kcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGhyO1xuICAgICAgaHIgPSBocnRpbWUoKTtcbiAgICAgIHJldHVybiBoclswXSAqIDFlOSArIGhyWzFdO1xuICAgIH07XG4gICAgbW9kdWxlTG9hZFRpbWUgPSBnZXROYW5vU2Vjb25kcygpO1xuICAgIHVwVGltZSA9IHByb2Nlc3MudXB0aW1lKCkgKiAxZTk7XG4gICAgbm9kZUxvYWRUaW1lID0gbW9kdWxlTG9hZFRpbWUgLSB1cFRpbWU7XG4gIH0gZWxzZSBpZiAoRGF0ZS5ub3cpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KCkgLSBsb2FkVGltZTtcbiAgICB9O1xuICAgIGxvYWRUaW1lID0gRGF0ZS5ub3coKTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbG9hZFRpbWU7XG4gICAgfTtcbiAgICBsb2FkVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9XG5cbn0pLmNhbGwodGhpcyk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBlcmZvcm1hbmNlLW5vdy5qcy5tYXBcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCJ2YXIgbm93ID0gcmVxdWlyZSgncGVyZm9ybWFuY2Utbm93JylcbiAgLCByb290ID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3dcbiAgLCB2ZW5kb3JzID0gWydtb3onLCAnd2Via2l0J11cbiAgLCBzdWZmaXggPSAnQW5pbWF0aW9uRnJhbWUnXG4gICwgcmFmID0gcm9vdFsncmVxdWVzdCcgKyBzdWZmaXhdXG4gICwgY2FmID0gcm9vdFsnY2FuY2VsJyArIHN1ZmZpeF0gfHwgcm9vdFsnY2FuY2VsUmVxdWVzdCcgKyBzdWZmaXhdXG5cbmZvcih2YXIgaSA9IDA7ICFyYWYgJiYgaSA8IHZlbmRvcnMubGVuZ3RoOyBpKyspIHtcbiAgcmFmID0gcm9vdFt2ZW5kb3JzW2ldICsgJ1JlcXVlc3QnICsgc3VmZml4XVxuICBjYWYgPSByb290W3ZlbmRvcnNbaV0gKyAnQ2FuY2VsJyArIHN1ZmZpeF1cbiAgICAgIHx8IHJvb3RbdmVuZG9yc1tpXSArICdDYW5jZWxSZXF1ZXN0JyArIHN1ZmZpeF1cbn1cblxuLy8gU29tZSB2ZXJzaW9ucyBvZiBGRiBoYXZlIHJBRiBidXQgbm90IGNBRlxuaWYoIXJhZiB8fCAhY2FmKSB7XG4gIHZhciBsYXN0ID0gMFxuICAgICwgaWQgPSAwXG4gICAgLCBxdWV1ZSA9IFtdXG4gICAgLCBmcmFtZUR1cmF0aW9uID0gMTAwMCAvIDYwXG5cbiAgcmFmID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICBpZihxdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHZhciBfbm93ID0gbm93KClcbiAgICAgICAgLCBuZXh0ID0gTWF0aC5tYXgoMCwgZnJhbWVEdXJhdGlvbiAtIChfbm93IC0gbGFzdCkpXG4gICAgICBsYXN0ID0gbmV4dCArIF9ub3dcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjcCA9IHF1ZXVlLnNsaWNlKDApXG4gICAgICAgIC8vIENsZWFyIHF1ZXVlIGhlcmUgdG8gcHJldmVudFxuICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBhcHBlbmRpbmcgbGlzdGVuZXJzXG4gICAgICAgIC8vIHRvIHRoZSBjdXJyZW50IGZyYW1lJ3MgcXVldWVcbiAgICAgICAgcXVldWUubGVuZ3RoID0gMFxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgY3AubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZighY3BbaV0uY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgIGNwW2ldLmNhbGxiYWNrKGxhc3QpXG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgdGhyb3cgZSB9LCAwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgTWF0aC5yb3VuZChuZXh0KSlcbiAgICB9XG4gICAgcXVldWUucHVzaCh7XG4gICAgICBoYW5kbGU6ICsraWQsXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICBjYW5jZWxsZWQ6IGZhbHNlXG4gICAgfSlcbiAgICByZXR1cm4gaWRcbiAgfVxuXG4gIGNhZiA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYocXVldWVbaV0uaGFuZGxlID09PSBoYW5kbGUpIHtcbiAgICAgICAgcXVldWVbaV0uY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuKSB7XG4gIC8vIFdyYXAgaW4gYSBuZXcgZnVuY3Rpb24gdG8gcHJldmVudFxuICAvLyBgY2FuY2VsYCBwb3RlbnRpYWxseSBiZWluZyBhc3NpZ25lZFxuICAvLyB0byB0aGUgbmF0aXZlIHJBRiBmdW5jdGlvblxuICByZXR1cm4gcmFmLmNhbGwocm9vdCwgZm4pXG59XG5tb2R1bGUuZXhwb3J0cy5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgY2FmLmFwcGx5KHJvb3QsIGFyZ3VtZW50cylcbn1cbm1vZHVsZS5leHBvcnRzLnBvbHlmaWxsID0gZnVuY3Rpb24oKSB7XG4gIHJvb3QucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gcmFmXG4gIHJvb3QuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBjYWZcbn1cbiIsIi8qKlxuKiBQYXJhbGxheC5qc1xuKiBAYXV0aG9yIE1hdHRoZXcgV2FnZXJmaWVsZCAtIEB3YWdlcmZpZWxkLCBSZW7DqSBSb3RoIC0gbWFpbEByZW5lcm90aC5vcmdcbiogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBwYXJhbGxheCBlZmZlY3QgYmV0d2VlbiBhbiBhcnJheSBvZiBsYXllcnMsXG4qICAgICAgICAgICAgICBkcml2aW5nIHRoZSBtb3Rpb24gZnJvbSB0aGUgZ3lyb3Njb3BlIG91dHB1dCBvZiBhIHNtYXJ0ZGV2aWNlLlxuKiAgICAgICAgICAgICAgSWYgbm8gZ3lyb3Njb3BlIGlzIGF2YWlsYWJsZSwgdGhlIGN1cnNvciBwb3NpdGlvbiBpcyB1c2VkLlxuKi9cblxuY29uc3QgcnFBbkZyID0gcmVxdWlyZSgncmFmJylcbmNvbnN0IG9iamVjdEFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKVxuXG5jb25zdCBoZWxwZXJzID0ge1xuICBwcm9wZXJ0eUNhY2hlOiB7fSxcbiAgdmVuZG9yczogW251bGwsIFsnLXdlYmtpdC0nLCd3ZWJraXQnXSwgWyctbW96LScsJ01veiddLCBbJy1vLScsJ08nXSwgWyctbXMtJywnbXMnXV0sXG5cbiAgY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIG1pbiA8IG1heFxuICAgICAgPyAodmFsdWUgPCBtaW4gPyBtaW4gOiB2YWx1ZSA+IG1heCA/IG1heCA6IHZhbHVlKVxuICAgICAgOiAodmFsdWUgPCBtYXggPyBtYXggOiB2YWx1ZSA+IG1pbiA/IG1pbiA6IHZhbHVlKVxuICB9LFxuXG4gIGRhdGEoZWxlbWVudCwgbmFtZSkge1xuICAgIHJldHVybiBoZWxwZXJzLmRlc2VyaWFsaXplKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLScrbmFtZSkpXG4gIH0sXG5cbiAgZGVzZXJpYWxpemUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIGlmICghaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpICYmIGlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgfSxcblxuICBjYW1lbENhc2UodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvLSsoLik/L2csIChtYXRjaCwgY2hhcmFjdGVyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhcmFjdGVyID8gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCkgOiAnJ1xuICAgIH0pXG4gIH0sXG5cbiAgYWNjZWxlcmF0ZShlbGVtZW50KSB7XG4gICAgaGVscGVycy5jc3MoZWxlbWVudCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUzZCgwLDAsMCkgcm90YXRlKDAuMDAwMWRlZyknKVxuICAgIGhlbHBlcnMuY3NzKGVsZW1lbnQsICd0cmFuc2Zvcm0tc3R5bGUnLCAncHJlc2VydmUtM2QnKVxuICAgIGhlbHBlcnMuY3NzKGVsZW1lbnQsICdiYWNrZmFjZS12aXNpYmlsaXR5JywgJ2hpZGRlbicpXG4gIH0sXG5cbiAgdHJhbnNmb3JtU3VwcG9ydCh2YWx1ZSkge1xuICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG4gICAgICAgIHByb3BlcnR5U3VwcG9ydCA9IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0eVZhbHVlID0gbnVsbCxcbiAgICAgICAgZmVhdHVyZVN1cHBvcnQgPSBmYWxzZSxcbiAgICAgICAgY3NzUHJvcGVydHkgPSBudWxsLFxuICAgICAgICBqc1Byb3BlcnR5ID0gbnVsbFxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gaGVscGVycy52ZW5kb3JzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGhlbHBlcnMudmVuZG9yc1tpXSAhPT0gbnVsbCkge1xuICAgICAgICBjc3NQcm9wZXJ0eSA9IGhlbHBlcnMudmVuZG9yc1tpXVswXSArICd0cmFuc2Zvcm0nXG4gICAgICAgIGpzUHJvcGVydHkgPSBoZWxwZXJzLnZlbmRvcnNbaV1bMV0gKyAnVHJhbnNmb3JtJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3NzUHJvcGVydHkgPSAndHJhbnNmb3JtJ1xuICAgICAgICBqc1Byb3BlcnR5ID0gJ3RyYW5zZm9ybSdcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50LnN0eWxlW2pzUHJvcGVydHldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcGVydHlTdXBwb3J0ID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2godmFsdWUpIHtcbiAgICAgIGNhc2UgJzJEJzpcbiAgICAgICAgZmVhdHVyZVN1cHBvcnQgPSBwcm9wZXJ0eVN1cHBvcnRcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJzNEJzpcbiAgICAgICAgaWYgKHByb3BlcnR5U3VwcG9ydCkge1xuICAgICAgICAgIGxldCBib2R5ID0gZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdib2R5JyksXG4gICAgICAgICAgICAgIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgICAgICAgICAgZG9jdW1lbnRPdmVyZmxvdyA9IGRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyxcbiAgICAgICAgICAgICAgaXNDcmVhdGVkQm9keSA9IGZhbHNlXG5cbiAgICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgICAgIGlzQ3JlYXRlZEJvZHkgPSB0cnVlXG4gICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuICAgICAgICAgICAgZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGJvZHkpXG4gICAgICAgICAgICBib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcbiAgICAgICAgICAgIGJvZHkuc3R5bGUuYmFja2dyb3VuZCA9ICcnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KVxuICAgICAgICAgIGVsZW1lbnQuc3R5bGVbanNQcm9wZXJ0eV0gPSAndHJhbnNsYXRlM2QoMXB4LDFweCwxcHgpJ1xuICAgICAgICAgIHByb3BlcnR5VmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGNzc1Byb3BlcnR5KVxuICAgICAgICAgIGZlYXR1cmVTdXBwb3J0ID0gcHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5VmFsdWUubGVuZ3RoID4gMCAmJiBwcm9wZXJ0eVZhbHVlICE9PSAnbm9uZSdcbiAgICAgICAgICBkb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBkb2N1bWVudE92ZXJmbG93XG4gICAgICAgICAgYm9keS5yZW1vdmVDaGlsZChlbGVtZW50KVxuXG4gICAgICAgICAgaWYgKCBpc0NyZWF0ZWRCb2R5ICkge1xuICAgICAgICAgICAgYm9keS5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJylcbiAgICAgICAgICAgIGJvZHkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChib2R5KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgIH1cbiAgICByZXR1cm4gZmVhdHVyZVN1cHBvcnRcbiAgfSxcblxuICBjc3MoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlKSB7XG4gICAgbGV0IGpzUHJvcGVydHkgPSBoZWxwZXJzLnByb3BlcnR5Q2FjaGVbcHJvcGVydHldXG4gICAgaWYgKCFqc1Byb3BlcnR5KSB7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGhlbHBlcnMudmVuZG9ycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGhlbHBlcnMudmVuZG9yc1tpXSAhPT0gbnVsbCkge1xuICAgICAgICAgIGpzUHJvcGVydHkgPSBoZWxwZXJzLmNhbWVsQ2FzZShoZWxwZXJzLnZlbmRvcnNbaV1bMV0gKyAnLScgKyBwcm9wZXJ0eSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBqc1Byb3BlcnR5ID0gcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudC5zdHlsZVtqc1Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaGVscGVycy5wcm9wZXJ0eUNhY2hlW3Byb3BlcnR5XSA9IGpzUHJvcGVydHlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsZW1lbnQuc3R5bGVbanNQcm9wZXJ0eV0gPSB2YWx1ZVxuICB9XG5cbn1cblxuY29uc3QgTUFHSUNfTlVNQkVSID0gMzAsXG4gICAgICBERUZBVUxUUyA9IHtcbiAgICAgICAgcmVsYXRpdmVJbnB1dDogZmFsc2UsXG4gICAgICAgIGNsaXBSZWxhdGl2ZUlucHV0OiBmYWxzZSxcbiAgICAgICAgaW5wdXRFbGVtZW50OiBudWxsLFxuICAgICAgICBob3Zlck9ubHk6IGZhbHNlLFxuICAgICAgICBjYWxpYnJhdGlvblRocmVzaG9sZDogMTAwLFxuICAgICAgICBjYWxpYnJhdGlvbkRlbGF5OiA1MDAsXG4gICAgICAgIHN1cHBvcnREZWxheTogNTAwLFxuICAgICAgICBjYWxpYnJhdGVYOiBmYWxzZSxcbiAgICAgICAgY2FsaWJyYXRlWTogdHJ1ZSxcbiAgICAgICAgaW52ZXJ0WDogdHJ1ZSxcbiAgICAgICAgaW52ZXJ0WTogdHJ1ZSxcbiAgICAgICAgbGltaXRYOiBmYWxzZSxcbiAgICAgICAgbGltaXRZOiBmYWxzZSxcbiAgICAgICAgc2NhbGFyWDogMTAuMCxcbiAgICAgICAgc2NhbGFyWTogMTAuMCxcbiAgICAgICAgZnJpY3Rpb25YOiAwLjEsXG4gICAgICAgIGZyaWN0aW9uWTogMC4xLFxuICAgICAgICBvcmlnaW5YOiAwLjUsXG4gICAgICAgIG9yaWdpblk6IDAuNSxcbiAgICAgICAgcG9pbnRlckV2ZW50czogZmFsc2UsXG4gICAgICAgIHByZWNpc2lvbjogMSxcbiAgICAgICAgb25SZWFkeTogbnVsbCxcbiAgICAgICAgc2VsZWN0b3I6IG51bGxcbiAgICAgIH1cblxuY2xhc3MgUGFyYWxsYXgge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvcHRpb25zKSB7XG5cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgY2FsaWJyYXRlWDogaGVscGVycy5kYXRhKHRoaXMuZWxlbWVudCwgJ2NhbGlicmF0ZS14JyksXG4gICAgICBjYWxpYnJhdGVZOiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAnY2FsaWJyYXRlLXknKSxcbiAgICAgIGludmVydFg6IGhlbHBlcnMuZGF0YSh0aGlzLmVsZW1lbnQsICdpbnZlcnQteCcpLFxuICAgICAgaW52ZXJ0WTogaGVscGVycy5kYXRhKHRoaXMuZWxlbWVudCwgJ2ludmVydC15JyksXG4gICAgICBsaW1pdFg6IGhlbHBlcnMuZGF0YSh0aGlzLmVsZW1lbnQsICdsaW1pdC14JyksXG4gICAgICBsaW1pdFk6IGhlbHBlcnMuZGF0YSh0aGlzLmVsZW1lbnQsICdsaW1pdC15JyksXG4gICAgICBzY2FsYXJYOiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAnc2NhbGFyLXgnKSxcbiAgICAgIHNjYWxhclk6IGhlbHBlcnMuZGF0YSh0aGlzLmVsZW1lbnQsICdzY2FsYXIteScpLFxuICAgICAgZnJpY3Rpb25YOiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAnZnJpY3Rpb24teCcpLFxuICAgICAgZnJpY3Rpb25ZOiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAnZnJpY3Rpb24teScpLFxuICAgICAgb3JpZ2luWDogaGVscGVycy5kYXRhKHRoaXMuZWxlbWVudCwgJ29yaWdpbi14JyksXG4gICAgICBvcmlnaW5ZOiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAnb3JpZ2luLXknKSxcbiAgICAgIHBvaW50ZXJFdmVudHM6IGhlbHBlcnMuZGF0YSh0aGlzLmVsZW1lbnQsICdwb2ludGVyLWV2ZW50cycpLFxuICAgICAgcHJlY2lzaW9uOiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAncHJlY2lzaW9uJyksXG4gICAgICByZWxhdGl2ZUlucHV0OiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAncmVsYXRpdmUtaW5wdXQnKSxcbiAgICAgIGNsaXBSZWxhdGl2ZUlucHV0OiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAnY2xpcC1yZWxhdGl2ZS1pbnB1dCcpLFxuICAgICAgaG92ZXJPbmx5OiBoZWxwZXJzLmRhdGEodGhpcy5lbGVtZW50LCAnaG92ZXItb25seScpLFxuICAgICAgaW5wdXRFbGVtZW50OiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGhlbHBlcnMuZGF0YSh0aGlzLmVsZW1lbnQsICdpbnB1dC1lbGVtZW50JykpLFxuICAgICAgc2VsZWN0b3I6IGhlbHBlcnMuZGF0YSh0aGlzLmVsZW1lbnQsICdzZWxlY3RvcicpXG4gICAgfVxuXG4gICAgZm9yIChsZXQga2V5IGluIGRhdGEpIHtcbiAgICAgIGlmIChkYXRhW2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgZGVsZXRlIGRhdGFba2V5XVxuICAgICAgfVxuICAgIH1cblxuICAgIG9iamVjdEFzc2lnbih0aGlzLCBERUZBVUxUUywgZGF0YSwgb3B0aW9ucylcblxuICAgIGlmKCF0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRcbiAgICB9XG5cbiAgICB0aGlzLmNhbGlicmF0aW9uVGltZXIgPSBudWxsXG4gICAgdGhpcy5jYWxpYnJhdGlvbkZsYWcgPSB0cnVlXG4gICAgdGhpcy5lbmFibGVkID0gZmFsc2VcbiAgICB0aGlzLmRlcHRoc1ggPSBbXVxuICAgIHRoaXMuZGVwdGhzWSA9IFtdXG4gICAgdGhpcy5yYWYgPSBudWxsXG5cbiAgICB0aGlzLmJvdW5kcyA9IG51bGxcbiAgICB0aGlzLmVsZW1lbnRQb3NpdGlvblggPSAwXG4gICAgdGhpcy5lbGVtZW50UG9zaXRpb25ZID0gMFxuICAgIHRoaXMuZWxlbWVudFdpZHRoID0gMFxuICAgIHRoaXMuZWxlbWVudEhlaWdodCA9IDBcblxuICAgIHRoaXMuZWxlbWVudENlbnRlclggPSAwXG4gICAgdGhpcy5lbGVtZW50Q2VudGVyWSA9IDBcblxuICAgIHRoaXMuZWxlbWVudFJhbmdlWCA9IDBcbiAgICB0aGlzLmVsZW1lbnRSYW5nZVkgPSAwXG5cbiAgICB0aGlzLmNhbGlicmF0aW9uWCA9IDBcbiAgICB0aGlzLmNhbGlicmF0aW9uWSA9IDBcblxuICAgIHRoaXMuaW5wdXRYID0gMFxuICAgIHRoaXMuaW5wdXRZID0gMFxuXG4gICAgdGhpcy5tb3Rpb25YID0gMFxuICAgIHRoaXMubW90aW9uWSA9IDBcblxuICAgIHRoaXMudmVsb2NpdHlYID0gMFxuICAgIHRoaXMudmVsb2NpdHlZID0gMFxuXG4gICAgdGhpcy5vbk1vdXNlTW92ZSA9IHRoaXMub25Nb3VzZU1vdmUuYmluZCh0aGlzKVxuICAgIHRoaXMub25EZXZpY2VPcmllbnRhdGlvbiA9IHRoaXMub25EZXZpY2VPcmllbnRhdGlvbi5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkRldmljZU1vdGlvbiA9IHRoaXMub25EZXZpY2VNb3Rpb24uYmluZCh0aGlzKVxuICAgIHRoaXMub25PcmllbnRhdGlvblRpbWVyID0gdGhpcy5vbk9yaWVudGF0aW9uVGltZXIuYmluZCh0aGlzKVxuICAgIHRoaXMub25Nb3Rpb25UaW1lciA9IHRoaXMub25Nb3Rpb25UaW1lci5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkNhbGlicmF0aW9uVGltZXIgPSB0aGlzLm9uQ2FsaWJyYXRpb25UaW1lci5iaW5kKHRoaXMpXG4gICAgdGhpcy5vbkFuaW1hdGlvbkZyYW1lID0gdGhpcy5vbkFuaW1hdGlvbkZyYW1lLmJpbmQodGhpcylcbiAgICB0aGlzLm9uV2luZG93UmVzaXplID0gdGhpcy5vbldpbmRvd1Jlc2l6ZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLndpbmRvd1dpZHRoID0gbnVsbFxuICAgIHRoaXMud2luZG93SGVpZ2h0ID0gbnVsbFxuICAgIHRoaXMud2luZG93Q2VudGVyWCA9IG51bGxcbiAgICB0aGlzLndpbmRvd0NlbnRlclkgPSBudWxsXG4gICAgdGhpcy53aW5kb3dSYWRpdXNYID0gbnVsbFxuICAgIHRoaXMud2luZG93UmFkaXVzWSA9IG51bGxcbiAgICB0aGlzLnBvcnRyYWl0ID0gZmFsc2VcbiAgICB0aGlzLmRlc2t0b3AgPSAhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvKGlQaG9uZXxpUG9kfGlQYWR8QW5kcm9pZHxCbGFja0JlcnJ5fEJCMTB8bW9iaXx0YWJsZXR8b3BlcmEgbWluaXxuZXh1cyA3KS9pKVxuICAgIHRoaXMubW90aW9uU3VwcG9ydCA9ICEhd2luZG93LkRldmljZU1vdGlvbkV2ZW50ICYmICF0aGlzLmRlc2t0b3BcbiAgICB0aGlzLm9yaWVudGF0aW9uU3VwcG9ydCA9ICEhd2luZG93LkRldmljZU9yaWVudGF0aW9uRXZlbnQgJiYgIXRoaXMuZGVza3RvcFxuICAgIHRoaXMub3JpZW50YXRpb25TdGF0dXMgPSAwXG4gICAgdGhpcy5tb3Rpb25TdGF0dXMgPSAwXG5cbiAgICB0aGlzLmluaXRpYWxpc2UoKVxuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgICBpZiAodGhpcy50cmFuc2Zvcm0yRFN1cHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy50cmFuc2Zvcm0yRFN1cHBvcnQgPSBoZWxwZXJzLnRyYW5zZm9ybVN1cHBvcnQoJzJEJylcbiAgICAgIHRoaXMudHJhbnNmb3JtM0RTdXBwb3J0ID0gaGVscGVycy50cmFuc2Zvcm1TdXBwb3J0KCczRCcpXG4gICAgfVxuXG4gICAgLy8gQ29uZmlndXJlIENvbnRleHQgU3R5bGVzXG4gICAgaWYgKHRoaXMudHJhbnNmb3JtM0RTdXBwb3J0KSB7XG4gICAgICBoZWxwZXJzLmFjY2VsZXJhdGUodGhpcy5lbGVtZW50KVxuICAgIH1cblxuICAgIGxldCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudClcbiAgICBpZiAoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncG9zaXRpb24nKSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSdcbiAgICB9XG5cbiAgICAvLyBQb2ludGVyIGV2ZW50c1xuICAgIGlmKCF0aGlzLnBvaW50ZXJFdmVudHMpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gU2V0dXBcbiAgICB0aGlzLnVwZGF0ZUxheWVycygpXG4gICAgdGhpcy51cGRhdGVEaW1lbnNpb25zKClcbiAgICB0aGlzLmVuYWJsZSgpXG4gICAgdGhpcy5xdWV1ZUNhbGlicmF0aW9uKHRoaXMuY2FsaWJyYXRpb25EZWxheSlcbiAgfVxuXG4gIGRvUmVhZHlDYWxsYmFjaygpIHtcbiAgICBpZih0aGlzLm9uUmVhZHkpIHtcbiAgICAgIHRoaXMub25SZWFkeSgpXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTGF5ZXJzKCkge1xuICAgIGlmKHRoaXMuc2VsZWN0b3IpIHtcbiAgICAgIHRoaXMubGF5ZXJzID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZWxlY3RvcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYXllcnMgPSB0aGlzLmVsZW1lbnQuY2hpbGRyZW5cbiAgICB9XG5cbiAgICBpZighdGhpcy5sYXllcnMubGVuZ3RoKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1BhcmFsbGF4SlM6IFlvdXIgc2NlbmUgZG9lcyBub3QgaGF2ZSBhbnkgbGF5ZXJzLicpXG4gICAgfVxuXG4gICAgdGhpcy5kZXB0aHNYID0gW11cbiAgICB0aGlzLmRlcHRoc1kgPSBbXVxuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGF5ZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgbGV0IGxheWVyID0gdGhpcy5sYXllcnNbaW5kZXhdXG5cbiAgICAgIGlmICh0aGlzLnRyYW5zZm9ybTNEU3VwcG9ydCkge1xuICAgICAgICBoZWxwZXJzLmFjY2VsZXJhdGUobGF5ZXIpXG4gICAgICB9XG5cbiAgICAgIGxheWVyLnN0eWxlLnBvc2l0aW9uID0gaW5kZXggPyAnYWJzb2x1dGUnIDogJ3JlbGF0aXZlJ1xuICAgICAgbGF5ZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgICAgIGxheWVyLnN0eWxlLmxlZnQgPSAwXG4gICAgICBsYXllci5zdHlsZS50b3AgPSAwXG5cbiAgICAgIGxldCBkZXB0aCA9IGhlbHBlcnMuZGF0YShsYXllciwgJ2RlcHRoJykgfHwgMFxuICAgICAgdGhpcy5kZXB0aHNYLnB1c2goaGVscGVycy5kYXRhKGxheWVyLCAnZGVwdGgteCcpIHx8IGRlcHRoKVxuICAgICAgdGhpcy5kZXB0aHNZLnB1c2goaGVscGVycy5kYXRhKGxheWVyLCAnZGVwdGgteScpIHx8IGRlcHRoKVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZURpbWVuc2lvbnMoKSB7XG4gICAgdGhpcy53aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgdGhpcy53aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICB0aGlzLndpbmRvd0NlbnRlclggPSB0aGlzLndpbmRvd1dpZHRoICogdGhpcy5vcmlnaW5YXG4gICAgdGhpcy53aW5kb3dDZW50ZXJZID0gdGhpcy53aW5kb3dIZWlnaHQgKiB0aGlzLm9yaWdpbllcbiAgICB0aGlzLndpbmRvd1JhZGl1c1ggPSBNYXRoLm1heCh0aGlzLndpbmRvd0NlbnRlclgsIHRoaXMud2luZG93V2lkdGggLSB0aGlzLndpbmRvd0NlbnRlclgpXG4gICAgdGhpcy53aW5kb3dSYWRpdXNZID0gTWF0aC5tYXgodGhpcy53aW5kb3dDZW50ZXJZLCB0aGlzLndpbmRvd0hlaWdodCAtIHRoaXMud2luZG93Q2VudGVyWSlcbiAgfVxuXG4gIHVwZGF0ZUJvdW5kcygpIHtcbiAgICB0aGlzLmJvdW5kcyA9IHRoaXMuaW5wdXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgdGhpcy5lbGVtZW50UG9zaXRpb25YID0gdGhpcy5ib3VuZHMubGVmdFxuICAgIHRoaXMuZWxlbWVudFBvc2l0aW9uWSA9IHRoaXMuYm91bmRzLnRvcFxuICAgIHRoaXMuZWxlbWVudFdpZHRoID0gdGhpcy5ib3VuZHMud2lkdGhcbiAgICB0aGlzLmVsZW1lbnRIZWlnaHQgPSB0aGlzLmJvdW5kcy5oZWlnaHRcbiAgICB0aGlzLmVsZW1lbnRDZW50ZXJYID0gdGhpcy5lbGVtZW50V2lkdGggKiB0aGlzLm9yaWdpblhcbiAgICB0aGlzLmVsZW1lbnRDZW50ZXJZID0gdGhpcy5lbGVtZW50SGVpZ2h0ICogdGhpcy5vcmlnaW5ZXG4gICAgdGhpcy5lbGVtZW50UmFuZ2VYID0gTWF0aC5tYXgodGhpcy5lbGVtZW50Q2VudGVyWCwgdGhpcy5lbGVtZW50V2lkdGggLSB0aGlzLmVsZW1lbnRDZW50ZXJYKVxuICAgIHRoaXMuZWxlbWVudFJhbmdlWSA9IE1hdGgubWF4KHRoaXMuZWxlbWVudENlbnRlclksIHRoaXMuZWxlbWVudEhlaWdodCAtIHRoaXMuZWxlbWVudENlbnRlclkpXG4gIH1cblxuICBxdWV1ZUNhbGlicmF0aW9uKGRlbGF5KSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2FsaWJyYXRpb25UaW1lcilcbiAgICB0aGlzLmNhbGlicmF0aW9uVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMub25DYWxpYnJhdGlvblRpbWVyLCBkZWxheSlcbiAgfVxuXG4gIGVuYWJsZSgpIHtcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxuXG4gICAgaWYgKHRoaXMub3JpZW50YXRpb25TdXBwb3J0KSB7XG4gICAgICB0aGlzLnBvcnRyYWl0ID0gZmFsc2VcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkZXZpY2VvcmllbnRhdGlvbicsIHRoaXMub25EZXZpY2VPcmllbnRhdGlvbilcbiAgICAgIHRoaXMuZGV0ZWN0aW9uVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMub25PcmllbnRhdGlvblRpbWVyLCB0aGlzLnN1cHBvcnREZWxheSlcbiAgICB9IGVsc2UgaWYgKHRoaXMubW90aW9uU3VwcG9ydCkge1xuICAgICAgdGhpcy5wb3J0cmFpdCA9IGZhbHNlXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZGV2aWNlbW90aW9uJywgdGhpcy5vbkRldmljZU1vdGlvbilcbiAgICAgIHRoaXMuZGV0ZWN0aW9uVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMub25Nb3Rpb25UaW1lciwgdGhpcy5zdXBwb3J0RGVsYXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FsaWJyYXRpb25YID0gMFxuICAgICAgdGhpcy5jYWxpYnJhdGlvblkgPSAwXG4gICAgICB0aGlzLnBvcnRyYWl0ID0gZmFsc2VcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlKVxuICAgICAgdGhpcy5kb1JlYWR5Q2FsbGJhY2soKVxuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uV2luZG93UmVzaXplKVxuICAgIHRoaXMucmFmID0gcnFBbkZyKHRoaXMub25BbmltYXRpb25GcmFtZSlcbiAgfVxuXG4gIGRpc2FibGUoKSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxuXG4gICAgaWYgKHRoaXMub3JpZW50YXRpb25TdXBwb3J0KSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGV2aWNlb3JpZW50YXRpb24nLCB0aGlzLm9uRGV2aWNlT3JpZW50YXRpb24pXG4gICAgfSBlbHNlIGlmICh0aGlzLm1vdGlvblN1cHBvcnQpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdkZXZpY2Vtb3Rpb24nLCB0aGlzLm9uRGV2aWNlTW90aW9uKVxuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSlcbiAgICB9XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5vbldpbmRvd1Jlc2l6ZSlcbiAgICBycUFuRnIuY2FuY2VsKHRoaXMucmFmKVxuICB9XG5cbiAgY2FsaWJyYXRlKHgsIHkpIHtcbiAgICB0aGlzLmNhbGlicmF0ZVggPSB4ID09PSB1bmRlZmluZWQgPyB0aGlzLmNhbGlicmF0ZVggOiB4XG4gICAgdGhpcy5jYWxpYnJhdGVZID0geSA9PT0gdW5kZWZpbmVkID8gdGhpcy5jYWxpYnJhdGVZIDogeVxuICB9XG5cbiAgaW52ZXJ0KHgsIHkpIHtcbiAgICB0aGlzLmludmVydFggPSB4ID09PSB1bmRlZmluZWQgPyB0aGlzLmludmVydFggOiB4XG4gICAgdGhpcy5pbnZlcnRZID0geSA9PT0gdW5kZWZpbmVkID8gdGhpcy5pbnZlcnRZIDogeVxuICB9XG5cbiAgZnJpY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuZnJpY3Rpb25YID0geCA9PT0gdW5kZWZpbmVkID8gdGhpcy5mcmljdGlvblggOiB4XG4gICAgdGhpcy5mcmljdGlvblkgPSB5ID09PSB1bmRlZmluZWQgPyB0aGlzLmZyaWN0aW9uWSA6IHlcbiAgfVxuXG4gIHNjYWxhcih4LCB5KSB7XG4gICAgdGhpcy5zY2FsYXJYID0geCA9PT0gdW5kZWZpbmVkID8gdGhpcy5zY2FsYXJYIDogeFxuICAgIHRoaXMuc2NhbGFyWSA9IHkgPT09IHVuZGVmaW5lZCA/IHRoaXMuc2NhbGFyWSA6IHlcbiAgfVxuXG4gIGxpbWl0KHgsIHkpIHtcbiAgICB0aGlzLmxpbWl0WCA9IHggPT09IHVuZGVmaW5lZCA/IHRoaXMubGltaXRYIDogeFxuICAgIHRoaXMubGltaXRZID0geSA9PT0gdW5kZWZpbmVkID8gdGhpcy5saW1pdFkgOiB5XG4gIH1cblxuICBvcmlnaW4oeCwgeSkge1xuICAgIHRoaXMub3JpZ2luWCA9IHggPT09IHVuZGVmaW5lZCA/IHRoaXMub3JpZ2luWCA6IHhcbiAgICB0aGlzLm9yaWdpblkgPSB5ID09PSB1bmRlZmluZWQgPyB0aGlzLm9yaWdpblkgOiB5XG4gIH1cblxuICBzZXRJbnB1dEVsZW1lbnQoZWxlbWVudCkge1xuICAgIHRoaXMuaW5wdXRFbGVtZW50ID0gZWxlbWVudFxuICAgIHRoaXMudXBkYXRlRGltZW5zaW9ucygpXG4gIH1cblxuICBzZXRQb3NpdGlvbihlbGVtZW50LCB4LCB5KSB7XG4gICAgeCA9IHgudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAncHgnXG4gICAgeSA9IHkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikgKyAncHgnXG4gICAgaWYgKHRoaXMudHJhbnNmb3JtM0RTdXBwb3J0KSB7XG4gICAgICBoZWxwZXJzLmNzcyhlbGVtZW50LCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZTNkKCcgKyB4ICsgJywnICsgeSArICcsMCknKVxuICAgIH0gZWxzZSBpZiAodGhpcy50cmFuc2Zvcm0yRFN1cHBvcnQpIHtcbiAgICAgIGhlbHBlcnMuY3NzKGVsZW1lbnQsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyB4ICsgJywnICsgeSArICcpJylcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0geFxuICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSB5XG4gICAgfVxuICB9XG5cbiAgb25PcmllbnRhdGlvblRpbWVyKCkge1xuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uU3VwcG9ydCAmJiB0aGlzLm9yaWVudGF0aW9uU3RhdHVzID09PSAwKSB7XG4gICAgICB0aGlzLmRpc2FibGUoKVxuICAgICAgdGhpcy5vcmllbnRhdGlvblN1cHBvcnQgPSBmYWxzZVxuICAgICAgdGhpcy5lbmFibGUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvUmVhZHlDYWxsYmFjaygpXG4gICAgfVxuICB9XG5cbiAgb25Nb3Rpb25UaW1lcigpIHtcbiAgICBpZiAodGhpcy5tb3Rpb25TdXBwb3J0ICYmIHRoaXMubW90aW9uU3RhdHVzID09PSAwKSB7XG4gICAgICB0aGlzLmRpc2FibGUoKVxuICAgICAgdGhpcy5tb3Rpb25TdXBwb3J0ID0gZmFsc2VcbiAgICAgIHRoaXMuZW5hYmxlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb1JlYWR5Q2FsbGJhY2soKVxuICAgIH1cbiAgfVxuXG4gIG9uQ2FsaWJyYXRpb25UaW1lcigpIHtcbiAgICB0aGlzLmNhbGlicmF0aW9uRmxhZyA9IHRydWVcbiAgfVxuXG4gIG9uV2luZG93UmVzaXplKCkge1xuICAgIHRoaXMudXBkYXRlRGltZW5zaW9ucygpXG4gIH1cblxuICBvbkFuaW1hdGlvbkZyYW1lKCkge1xuICAgIHRoaXMudXBkYXRlQm91bmRzKClcbiAgICBsZXQgY2FsaWJyYXRlZElucHV0WCA9IHRoaXMuaW5wdXRYIC0gdGhpcy5jYWxpYnJhdGlvblgsXG4gICAgICAgIGNhbGlicmF0ZWRJbnB1dFkgPSB0aGlzLmlucHV0WSAtIHRoaXMuY2FsaWJyYXRpb25ZXG4gICAgaWYgKChNYXRoLmFicyhjYWxpYnJhdGVkSW5wdXRYKSA+IHRoaXMuY2FsaWJyYXRpb25UaHJlc2hvbGQpIHx8IChNYXRoLmFicyhjYWxpYnJhdGVkSW5wdXRZKSA+IHRoaXMuY2FsaWJyYXRpb25UaHJlc2hvbGQpKSB7XG4gICAgICB0aGlzLnF1ZXVlQ2FsaWJyYXRpb24oMClcbiAgICB9XG4gICAgaWYgKHRoaXMucG9ydHJhaXQpIHtcbiAgICAgIHRoaXMubW90aW9uWCA9IHRoaXMuY2FsaWJyYXRlWCA/IGNhbGlicmF0ZWRJbnB1dFkgOiB0aGlzLmlucHV0WVxuICAgICAgdGhpcy5tb3Rpb25ZID0gdGhpcy5jYWxpYnJhdGVZID8gY2FsaWJyYXRlZElucHV0WCA6IHRoaXMuaW5wdXRYXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW90aW9uWCA9IHRoaXMuY2FsaWJyYXRlWCA/IGNhbGlicmF0ZWRJbnB1dFggOiB0aGlzLmlucHV0WFxuICAgICAgdGhpcy5tb3Rpb25ZID0gdGhpcy5jYWxpYnJhdGVZID8gY2FsaWJyYXRlZElucHV0WSA6IHRoaXMuaW5wdXRZXG4gICAgfVxuICAgIHRoaXMubW90aW9uWCAqPSB0aGlzLmVsZW1lbnRXaWR0aCAqICh0aGlzLnNjYWxhclggLyAxMDApXG4gICAgdGhpcy5tb3Rpb25ZICo9IHRoaXMuZWxlbWVudEhlaWdodCAqICh0aGlzLnNjYWxhclkgLyAxMDApXG4gICAgaWYgKCFpc05hTihwYXJzZUZsb2F0KHRoaXMubGltaXRYKSkpIHtcbiAgICAgIHRoaXMubW90aW9uWCA9IGhlbHBlcnMuY2xhbXAodGhpcy5tb3Rpb25YLCAtdGhpcy5saW1pdFgsIHRoaXMubGltaXRYKVxuICAgIH1cbiAgICBpZiAoIWlzTmFOKHBhcnNlRmxvYXQodGhpcy5saW1pdFkpKSkge1xuICAgICAgdGhpcy5tb3Rpb25ZID0gaGVscGVycy5jbGFtcCh0aGlzLm1vdGlvblksIC10aGlzLmxpbWl0WSwgdGhpcy5saW1pdFkpXG4gICAgfVxuICAgIHRoaXMudmVsb2NpdHlYICs9ICh0aGlzLm1vdGlvblggLSB0aGlzLnZlbG9jaXR5WCkgKiB0aGlzLmZyaWN0aW9uWFxuICAgIHRoaXMudmVsb2NpdHlZICs9ICh0aGlzLm1vdGlvblkgLSB0aGlzLnZlbG9jaXR5WSkgKiB0aGlzLmZyaWN0aW9uWVxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmxheWVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGxldCBsYXllciA9IHRoaXMubGF5ZXJzW2luZGV4XSxcbiAgICAgICAgICBkZXB0aFggPSB0aGlzLmRlcHRoc1hbaW5kZXhdLFxuICAgICAgICAgIGRlcHRoWSA9IHRoaXMuZGVwdGhzWVtpbmRleF0sXG4gICAgICAgICAgeE9mZnNldCA9IHRoaXMudmVsb2NpdHlYICogKGRlcHRoWCAqICh0aGlzLmludmVydFggPyAtMSA6IDEpKSxcbiAgICAgICAgICB5T2Zmc2V0ID0gdGhpcy52ZWxvY2l0eVkgKiAoZGVwdGhZICogKHRoaXMuaW52ZXJ0WSA/IC0xIDogMSkpXG4gICAgICB0aGlzLnNldFBvc2l0aW9uKGxheWVyLCB4T2Zmc2V0LCB5T2Zmc2V0KVxuICAgIH1cbiAgICB0aGlzLnJhZiA9IHJxQW5Gcih0aGlzLm9uQW5pbWF0aW9uRnJhbWUpXG4gIH1cblxuICByb3RhdGUoYmV0YSwgZ2FtbWEpe1xuICAgIC8vIEV4dHJhY3QgUm90YXRpb25cbiAgICBsZXQgeCA9IChiZXRhIHx8IDApIC8gTUFHSUNfTlVNQkVSLCAvLyAgLTkwIDo6IDkwXG4gICAgICAgIHkgPSAoZ2FtbWEgfHwgMCkgLyBNQUdJQ19OVU1CRVIgLy8gLTE4MCA6OiAxODBcblxuICAgIC8vIERldGVjdCBPcmllbnRhdGlvbiBDaGFuZ2VcbiAgICBsZXQgcG9ydHJhaXQgPSB0aGlzLndpbmRvd0hlaWdodCA+IHRoaXMud2luZG93V2lkdGhcbiAgICBpZiAodGhpcy5wb3J0cmFpdCAhPT0gcG9ydHJhaXQpIHtcbiAgICAgIHRoaXMucG9ydHJhaXQgPSBwb3J0cmFpdFxuICAgICAgdGhpcy5jYWxpYnJhdGlvbkZsYWcgPSB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FsaWJyYXRpb25GbGFnKSB7XG4gICAgICB0aGlzLmNhbGlicmF0aW9uRmxhZyA9IGZhbHNlXG4gICAgICB0aGlzLmNhbGlicmF0aW9uWCA9IHhcbiAgICAgIHRoaXMuY2FsaWJyYXRpb25ZID0geVxuICAgIH1cblxuICAgIHRoaXMuaW5wdXRYID0geFxuICAgIHRoaXMuaW5wdXRZID0geVxuICB9XG5cbiAgb25EZXZpY2VPcmllbnRhdGlvbihldmVudCkge1xuICAgIGxldCBiZXRhID0gZXZlbnQuYmV0YVxuICAgIGxldCBnYW1tYSA9IGV2ZW50LmdhbW1hXG4gICAgaWYgKGJldGEgIT09IG51bGwgJiYgZ2FtbWEgIT09IG51bGwpIHtcbiAgICAgIHRoaXMub3JpZW50YXRpb25TdGF0dXMgPSAxXG4gICAgICB0aGlzLnJvdGF0ZShiZXRhLCBnYW1tYSlcbiAgICB9XG4gIH1cblxuICBvbkRldmljZU1vdGlvbihldmVudCkge1xuICAgIGxldCBiZXRhID0gZXZlbnQucm90YXRpb25SYXRlLmJldGFcbiAgICBsZXQgZ2FtbWEgPSBldmVudC5yb3RhdGlvblJhdGUuZ2FtbWFcbiAgICBpZiAoYmV0YSAhPT0gbnVsbCAmJiBnYW1tYSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5tb3Rpb25TdGF0dXMgPSAxXG4gICAgICB0aGlzLnJvdGF0ZShiZXRhLCBnYW1tYSlcbiAgICB9XG4gIH1cblxuICBvbk1vdXNlTW92ZShldmVudCkge1xuICAgIGxldCBjbGllbnRYID0gZXZlbnQuY2xpZW50WCxcbiAgICAgICAgY2xpZW50WSA9IGV2ZW50LmNsaWVudFlcblxuICAgIC8vIHJlc2V0IGlucHV0IHRvIGNlbnRlciBpZiBob3Zlck9ubHkgaXMgc2V0IGFuZCB3ZSdyZSBub3QgaG92ZXJpbmcgdGhlIGVsZW1lbnRcbiAgICBpZih0aGlzLmhvdmVyT25seSAmJlxuICAgICAgKChjbGllbnRYIDwgdGhpcy5lbGVtZW50UG9zaXRpb25YIHx8IGNsaWVudFggPiB0aGlzLmVsZW1lbnRQb3NpdGlvblggKyB0aGlzLmVsZW1lbnRXaWR0aCkgfHxcbiAgICAgIChjbGllbnRZIDwgdGhpcy5lbGVtZW50UG9zaXRpb25ZIHx8IGNsaWVudFkgPiB0aGlzLmVsZW1lbnRQb3NpdGlvblkgKyB0aGlzLmVsZW1lbnRIZWlnaHQpKSkge1xuICAgICAgICB0aGlzLmlucHV0WCA9IDBcbiAgICAgICAgdGhpcy5pbnB1dFkgPSAwXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgaWYgKHRoaXMucmVsYXRpdmVJbnB1dCkge1xuICAgICAgLy8gQ2xpcCBtb3VzZSBjb29yZGluYXRlcyBpbnNpZGUgZWxlbWVudCBib3VuZHMuXG4gICAgICBpZiAodGhpcy5jbGlwUmVsYXRpdmVJbnB1dCkge1xuICAgICAgICBjbGllbnRYID0gTWF0aC5tYXgoY2xpZW50WCwgdGhpcy5lbGVtZW50UG9zaXRpb25YKVxuICAgICAgICBjbGllbnRYID0gTWF0aC5taW4oY2xpZW50WCwgdGhpcy5lbGVtZW50UG9zaXRpb25YICsgdGhpcy5lbGVtZW50V2lkdGgpXG4gICAgICAgIGNsaWVudFkgPSBNYXRoLm1heChjbGllbnRZLCB0aGlzLmVsZW1lbnRQb3NpdGlvblkpXG4gICAgICAgIGNsaWVudFkgPSBNYXRoLm1pbihjbGllbnRZLCB0aGlzLmVsZW1lbnRQb3NpdGlvblkgKyB0aGlzLmVsZW1lbnRIZWlnaHQpXG4gICAgICB9XG4gICAgICAvLyBDYWxjdWxhdGUgaW5wdXQgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQuXG4gICAgICBpZih0aGlzLmVsZW1lbnRSYW5nZVggJiYgdGhpcy5lbGVtZW50UmFuZ2VZKSB7XG4gICAgICAgIHRoaXMuaW5wdXRYID0gKGNsaWVudFggLSB0aGlzLmVsZW1lbnRQb3NpdGlvblggLSB0aGlzLmVsZW1lbnRDZW50ZXJYKSAvIHRoaXMuZWxlbWVudFJhbmdlWFxuICAgICAgICB0aGlzLmlucHV0WSA9IChjbGllbnRZIC0gdGhpcy5lbGVtZW50UG9zaXRpb25ZIC0gdGhpcy5lbGVtZW50Q2VudGVyWSkgLyB0aGlzLmVsZW1lbnRSYW5nZVlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2FsY3VsYXRlIGlucHV0IHJlbGF0aXZlIHRvIHRoZSB3aW5kb3cuXG4gICAgICBpZih0aGlzLndpbmRvd1JhZGl1c1ggJiYgdGhpcy53aW5kb3dSYWRpdXNZKSB7XG4gICAgICAgIHRoaXMuaW5wdXRYID0gKGNsaWVudFggLSB0aGlzLndpbmRvd0NlbnRlclgpIC8gdGhpcy53aW5kb3dSYWRpdXNYXG4gICAgICAgIHRoaXMuaW5wdXRZID0gKGNsaWVudFkgLSB0aGlzLndpbmRvd0NlbnRlclkpIC8gdGhpcy53aW5kb3dSYWRpdXNZXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmRpc2FibGUoKVxuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2FsaWJyYXRpb25UaW1lcilcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kZXRlY3Rpb25UaW1lcilcblxuICAgIHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJylcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5sYXllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxheWVyc1tpbmRleF0ucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpXG4gICAgfVxuXG4gICAgZGVsZXRlIHRoaXMuZWxlbWVudFxuICAgIGRlbGV0ZSB0aGlzLmxheWVyc1xuICB9XG5cbiAgdmVyc2lvbigpIHtcbiAgICByZXR1cm4gJzMuMS4wJ1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQYXJhbGxheFxuIl19 6900 6901 6902/***/ }), 6903
vendor: 2,227 bytes, lines 6904-6940
6904/***/ "./node_modules/scrollmonitor/dist/module/index.js": 6905/*!*********************************************************!*\ 6906 !*** ./node_modules/scrollmonitor/dist/module/index.js ***! 6907 \*********************************************************/ 6908/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 6909 6910"use strict"; 6911__webpack_require__.r(__webpack_exports__); 6912/* harmony export */ __webpack_require__.d(__webpack_exports__, { 6913/* harmony export */ "ScrollMonitorContainer": () => (/* reexport safe */ _src_container_js__WEBPACK_IMPORTED_MODULE_0__.ScrollMonitorContainer), 6914/* harmony export */ "Watcher": () => (/* reexport safe */ _src_watcher_js__WEBPACK_IMPORTED_MODULE_1__.Watcher), 6915/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 6916/* harmony export */ }); 6917/* harmony import */ var _src_container_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/container.js */ "./node_modules/scrollmonitor/dist/module/src/container.js"); 6918/* harmony import */ var _src_watcher_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./src/watcher.js */ "./node_modules/scrollmonitor/dist/module/src/watcher.js"); 6919/* harmony import */ var _src_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./src/types */ "./node_modules/scrollmonitor/dist/module/src/types.js"); 6920/* harmony import */ var _src_constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./src/constants.js */ "./node_modules/scrollmonitor/dist/module/src/constants.js"); 6921 6922 6923 6924 6925 6926// this is needed for the type, but if we're not in a browser the only 6927// way listenToDOM will be called is if you call scrollmonitor.createContainer 6928// and you can't do that until you have a DOM element. 6929var scrollMonitor = new _src_container_js__WEBPACK_IMPORTED_MODULE_0__.ScrollMonitorContainer(_src_constants_js__WEBPACK_IMPORTED_MODULE_3__.isInBrowser ? document.body : undefined); 6930if (_src_constants_js__WEBPACK_IMPORTED_MODULE_3__.isInBrowser) { 6931 scrollMonitor.updateState(); 6932 scrollMonitor.listenToDOM(); 6933 //@ts-ignore 6934 window.scrollMonitor = scrollMonitor; 6935} 6936/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (scrollMonitor); 6937//# sourceMappingURL=index.js.map 6938 6939/***/ }), 6940
vendor: 1,998 bytes, lines 6941-6984
6941/***/ "./node_modules/scrollmonitor/dist/module/src/constants.js": 6942/*!*****************************************************************!*\ 6943 !*** ./node_modules/scrollmonitor/dist/module/src/constants.js ***! 6944 \*****************************************************************/ 6945/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 6946 6947"use strict"; 6948__webpack_require__.r(__webpack_exports__); 6949/* harmony export */ __webpack_require__.d(__webpack_exports__, { 6950/* harmony export */ "ENTERVIEWPORT": () => (/* binding */ ENTERVIEWPORT), 6951/* harmony export */ "EXITVIEWPORT": () => (/* binding */ EXITVIEWPORT), 6952/* harmony export */ "FULLYENTERVIEWPORT": () => (/* binding */ FULLYENTERVIEWPORT), 6953/* harmony export */ "LOCATIONCHANGE": () => (/* binding */ LOCATIONCHANGE), 6954/* harmony export */ "PARTIALLYEXITVIEWPORT": () => (/* binding */ PARTIALLYEXITVIEWPORT), 6955/* harmony export */ "STATECHANGE": () => (/* binding */ STATECHANGE), 6956/* harmony export */ "VISIBILITYCHANGE": () => (/* binding */ VISIBILITYCHANGE), 6957/* harmony export */ "defaultOffsets": () => (/* binding */ defaultOffsets), 6958/* harmony export */ "eventTypes": () => (/* binding */ eventTypes), 6959/* harmony export */ "isInBrowser": () => (/* binding */ isInBrowser), 6960/* harmony export */ "isOnServer": () => (/* binding */ isOnServer) 6961/* harmony export */ }); 6962var VISIBILITYCHANGE = 'visibilityChange'; 6963var ENTERVIEWPORT = 'enterViewport'; 6964var FULLYENTERVIEWPORT = 'fullyEnterViewport'; 6965var EXITVIEWPORT = 'exitViewport'; 6966var PARTIALLYEXITVIEWPORT = 'partiallyExitViewport'; 6967var LOCATIONCHANGE = 'locationChange'; 6968var STATECHANGE = 'stateChange'; 6969var eventTypes = [ 6970 VISIBILITYCHANGE, 6971 ENTERVIEWPORT, 6972 FULLYENTERVIEWPORT, 6973 EXITVIEWPORT, 6974 PARTIALLYEXITVIEWPORT, 6975 LOCATIONCHANGE, 6976 STATECHANGE, 6977]; 6978var isOnServer = typeof window === 'undefined'; 6979var isInBrowser = !isOnServer; 6980var defaultOffsets = { top: 0, bottom: 0 }; 6981//# sourceMappingURL=constants.js.map 6982 6983/***/ }), 6984
vendor: 8,339 bytes, lines 6985-7200
6985/***/ "./node_modules/scrollmonitor/dist/module/src/container.js": 6986/*!*****************************************************************!*\ 6987 !*** ./node_modules/scrollmonitor/dist/module/src/container.js ***! 6988 \*****************************************************************/ 6989/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 6990 6991"use strict"; 6992__webpack_require__.r(__webpack_exports__); 6993/* harmony export */ __webpack_require__.d(__webpack_exports__, { 6994/* harmony export */ "ScrollMonitorContainer": () => (/* binding */ ScrollMonitorContainer) 6995/* harmony export */ }); 6996/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.js */ "./node_modules/scrollmonitor/dist/module/src/constants.js"); 6997/* harmony import */ var _watcher_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./watcher.js */ "./node_modules/scrollmonitor/dist/module/src/watcher.js"); 6998 6999 7000function getViewportHeight(element) { 7001 if (_constants_js__WEBPACK_IMPORTED_MODULE_0__.isOnServer) { 7002 return 0; 7003 } 7004 if (element === document.body) { 7005 return window.innerHeight || document.documentElement.clientHeight; 7006 } 7007 else { 7008 return element.clientHeight; 7009 } 7010} 7011function getContentHeight(element) { 7012 if (_constants_js__WEBPACK_IMPORTED_MODULE_0__.isOnServer) { 7013 return 0; 7014 } 7015 if (element === document.body) { 7016 // jQuery approach 7017 // whichever is greatest 7018 return Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.documentElement.clientHeight); 7019 } 7020 else { 7021 return element.scrollHeight; 7022 } 7023} 7024function scrollTop(element) { 7025 if (_constants_js__WEBPACK_IMPORTED_MODULE_0__.isOnServer) { 7026 return 0; 7027 } 7028 if (element === document.body) { 7029 return (window.pageYOffset || 7030 (document.documentElement && document.documentElement.scrollTop) || 7031 document.body.scrollTop); 7032 } 7033 else { 7034 return element.scrollTop; 7035 } 7036} 7037var browserSupportsPassive = false; 7038if (_constants_js__WEBPACK_IMPORTED_MODULE_0__.isInBrowser) { 7039 try { 7040 var opts = Object.defineProperty({}, 'passive', { 7041 get: function () { 7042 browserSupportsPassive = true; 7043 }, 7044 }); 7045 window.addEventListener('test', null, opts); 7046 } 7047 catch (e) { } 7048} 7049var useCapture = browserSupportsPassive ? { capture: false, passive: true } : false; 7050var ScrollMonitorContainer = /** @class */ (function () { 7051 function ScrollMonitorContainer(item, parentWatcher) { 7052 this.eventTypes = _constants_js__WEBPACK_IMPORTED_MODULE_0__.eventTypes; 7053 var self = this; 7054 this.item = item; 7055 this.watchers = []; 7056 this.viewportTop = null; 7057 this.viewportBottom = null; 7058 this.documentHeight = getContentHeight(item); 7059 this.viewportHeight = getViewportHeight(item); 7060 this.DOMListener = function () { 7061 ScrollMonitorContainer.prototype.DOMListener.apply(self, arguments); 7062 }; 7063 if (parentWatcher) { 7064 this.containerWatcher = parentWatcher.create(item); 7065 } 7066 var previousDocumentHeight; 7067 var calculateViewportI; 7068 function calculateViewport() { 7069 self.viewportTop = scrollTop(item); 7070 self.viewportBottom = self.viewportTop + self.viewportHeight; 7071 self.documentHeight = getContentHeight(item); 7072 if (self.documentHeight !== previousDocumentHeight) { 7073 calculateViewportI = self.watchers.length; 7074 while (calculateViewportI--) { 7075 self.watchers[calculateViewportI].recalculateLocation(); 7076 } 7077 previousDocumentHeight = self.documentHeight; 7078 } 7079 } 7080 var updateAndTriggerWatchersI; 7081 function updateAndTriggerWatchers() { 7082 // update all watchers then trigger the events so one can rely on another being up to date. 7083 updateAndTriggerWatchersI = self.watchers.length; 7084 while (updateAndTriggerWatchersI--) { 7085 self.watchers[updateAndTriggerWatchersI].update(); 7086 } 7087 updateAndTriggerWatchersI = self.watchers.length; 7088 while (updateAndTriggerWatchersI--) { 7089 self.watchers[updateAndTriggerWatchersI].triggerCallbacks(undefined); 7090 } 7091 } 7092 this.update = function () { 7093 calculateViewport(); 7094 updateAndTriggerWatchers(); 7095 }; 7096 this.recalculateLocations = function () { 7097 this.documentHeight = 0; 7098 this.update(); 7099 }; 7100 } 7101 ScrollMonitorContainer.prototype.listenToDOM = function () { 7102 if (_constants_js__WEBPACK_IMPORTED_MODULE_0__.isInBrowser) { 7103 if (this.item === document.body) { 7104 window.addEventListener('scroll', this.DOMListener, useCapture); 7105 } 7106 else { 7107 this.item.addEventListener('scroll', this.DOMListener, useCapture); 7108 } 7109 window.addEventListener('resize', this.DOMListener); 7110 this.destroy = function () { 7111 if (this.item === document.body) { 7112 window.removeEventListener('scroll', this.DOMListener, useCapture); 7113 this.containerWatcher.destroy(); 7114 } 7115 else { 7116 this.item.removeEventListener('scroll', this.DOMListener, useCapture); 7117 } 7118 window.removeEventListener('resize', this.DOMListener); 7119 }; 7120 } 7121 }; 7122 ScrollMonitorContainer.prototype.destroy = function () { 7123 // noop, override for your own purposes. 7124 // in listenToDOM, for example. 7125 }; 7126 ScrollMonitorContainer.prototype.DOMListener = function (event) { 7127 //alert('got scroll'); 7128 this.updateState(); 7129 this.updateAndTriggerWatchers(event); 7130 }; 7131 ScrollMonitorContainer.prototype.updateState = function () { 7132 var viewportTop = scrollTop(this.item); 7133 var viewportHeight = getViewportHeight(this.item); 7134 var contentHeight = getContentHeight(this.item); 7135 var needsRecalcuate = viewportHeight !== this.viewportHeight || contentHeight !== this.contentHeight; 7136 this.viewportTop = viewportTop; 7137 this.viewportHeight = viewportHeight; 7138 this.viewportBottom = viewportTop + viewportHeight; 7139 this.contentHeight = contentHeight; 7140 if (needsRecalcuate) { 7141 var i = this.watchers.length; 7142 while (i--) { 7143 this.watchers[i].recalculateLocation(); 7144 } 7145 } 7146 }; 7147 ScrollMonitorContainer.prototype.updateAndTriggerWatchers = function (event) { 7148 var i = this.watchers.length; 7149 while (i--) { 7150 this.watchers[i].update(); 7151 } 7152 i = this.watchers.length; 7153 while (i--) { 7154 this.watchers[i].triggerCallbacks(event); 7155 } 7156 }; 7157 ScrollMonitorContainer.prototype.createContainer = function (input) { 7158 var item; 7159 if (typeof input === 'string') { 7160 item = document.querySelector(input); 7161 } 7162 else if (Array.isArray(input) || input instanceof NodeList) { 7163 item = input[0]; 7164 } 7165 else { 7166 item = input; 7167 } 7168 var container = new ScrollMonitorContainer(item, this); 7169 this.updateState(); 7170 container.listenToDOM(); 7171 return container; 7172 }; 7173 ScrollMonitorContainer.prototype.create = function (input, offsets) { 7174 var item; 7175 if (typeof item === 'string') { 7176 item = document.querySelector(item); 7177 } 7178 else if (Array.isArray(input) || input instanceof NodeList) { 7179 item = input[0]; 7180 } 7181 else { 7182 item = input; 7183 } 7184 var watcher = new _watcher_js__WEBPACK_IMPORTED_MODULE_1__.Watcher(this, item, offsets); 7185 this.watchers.push(watcher); 7186 return watcher; 7187 }; 7188 /** 7189 * @deprecated since version 1.1 7190 */ 7191 ScrollMonitorContainer.prototype.beget = function (input, offsets) { 7192 return this.create(input, offsets); 7193 }; 7194 return ScrollMonitorContainer; 7195}()); 7196 7197//# sourceMappingURL=container.js.map 7198 7199/***/ }), 7200
vendor: 449 bytes, lines 7201-7213
7201/***/ "./node_modules/scrollmonitor/dist/module/src/types.js": 7202/*!*************************************************************!*\ 7203 !*** ./node_modules/scrollmonitor/dist/module/src/types.js ***! 7204 \*************************************************************/ 7205/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 7206 7207"use strict"; 7208__webpack_require__.r(__webpack_exports__); 7209 7210//# sourceMappingURL=types.js.map 7211 7212/***/ }), 7213
vendor: 11,342 bytes, lines 7214-7452
7214/***/ "./node_modules/scrollmonitor/dist/module/src/watcher.js": 7215/*!***************************************************************!*\ 7216 !*** ./node_modules/scrollmonitor/dist/module/src/watcher.js ***! 7217 \***************************************************************/ 7218/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 7219 7220"use strict"; 7221__webpack_require__.r(__webpack_exports__); 7222/* harmony export */ __webpack_require__.d(__webpack_exports__, { 7223/* harmony export */ "Watcher": () => (/* binding */ Watcher) 7224/* harmony export */ }); 7225/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.js */ "./node_modules/scrollmonitor/dist/module/src/constants.js"); 7226 7227var Watcher = /** @class */ (function () { 7228 function Watcher(container, watchItem, offsets) { 7229 this.container = container; 7230 this.watchItem = watchItem; 7231 this.locked = false; 7232 this.callbacks = {}; 7233 var self = this; 7234 if (!offsets) { 7235 this.offsets = _constants_js__WEBPACK_IMPORTED_MODULE_0__.defaultOffsets; 7236 } 7237 else if (typeof offsets === 'number') { 7238 this.offsets = { top: offsets, bottom: offsets }; 7239 } 7240 else { 7241 this.offsets = { 7242 top: 'top' in offsets ? offsets.top : _constants_js__WEBPACK_IMPORTED_MODULE_0__.defaultOffsets.top, 7243 bottom: 'bottom' in offsets ? offsets.bottom : _constants_js__WEBPACK_IMPORTED_MODULE_0__.defaultOffsets.bottom, 7244 }; 7245 } 7246 for (var i = 0, j = _constants_js__WEBPACK_IMPORTED_MODULE_0__.eventTypes.length; i < j; i++) { 7247 self.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.eventTypes[i]] = []; 7248 } 7249 this.locked = false; 7250 var wasInViewport; 7251 var wasFullyInViewport; 7252 var wasAboveViewport; 7253 var wasBelowViewport; 7254 var listenerToTriggerListI; 7255 var listener; 7256 var needToTriggerStateChange = false; 7257 function triggerCallbackArray(listeners, event) { 7258 needToTriggerStateChange = true; 7259 if (listeners.length === 0) { 7260 return; 7261 } 7262 listenerToTriggerListI = listeners.length; 7263 while (listenerToTriggerListI--) { 7264 listener = listeners[listenerToTriggerListI]; 7265 listener.callback.call(self, event, self); 7266 if (listener.isOne) { 7267 listeners.splice(listenerToTriggerListI, 1); 7268 } 7269 } 7270 } 7271 this.triggerCallbacks = function triggerCallbacks(event) { 7272 if (this.isInViewport && !wasInViewport) { 7273 triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.ENTERVIEWPORT], event); 7274 } 7275 if (this.isFullyInViewport && !wasFullyInViewport) { 7276 triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.FULLYENTERVIEWPORT], event); 7277 } 7278 if (this.isAboveViewport !== wasAboveViewport && 7279 this.isBelowViewport !== wasBelowViewport) { 7280 triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.VISIBILITYCHANGE], event); 7281 // if you skip completely past this element 7282 if (!wasFullyInViewport && !this.isFullyInViewport) { 7283 triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.FULLYENTERVIEWPORT], event); 7284 triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.PARTIALLYEXITVIEWPORT], event); 7285 } 7286 if (!wasInViewport && !this.isInViewport) { 7287 triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.ENTERVIEWPORT], event); 7288 triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.EXITVIEWPORT], event); 7289 } 7290 } 7291 if (!this.isFullyInViewport && wasFullyInViewport) { 7292 triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.PARTIALLYEXITVIEWPORT], event); 7293 } 7294 if (!this.isInViewport && wasInViewport) { 7295 triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.EXITVIEWPORT], event); 7296 } 7297 if (this.isInViewport !== wasInViewport) { 7298 triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.VISIBILITYCHANGE], event); 7299 } 7300 if (needToTriggerStateChange) { 7301 needToTriggerStateChange = false; 7302 triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.STATECHANGE], event); 7303 } 7304 wasInViewport = this.isInViewport; 7305 wasFullyInViewport = this.isFullyInViewport; 7306 wasAboveViewport = this.isAboveViewport; 7307 wasBelowViewport = this.isBelowViewport; 7308 }; 7309 this.recalculateLocation = function () { 7310 if (this.locked) { 7311 return; 7312 } 7313 var previousTop = this.top; 7314 var previousBottom = this.bottom; 7315 if (this.watchItem.nodeName) { 7316 // a dom element 7317 var cachedDisplay = this.watchItem.style.display; 7318 if (cachedDisplay === 'none') { 7319 this.watchItem.style.display = ''; 7320 } 7321 var containerOffset = 0; 7322 var container = this.container; 7323 while (container.containerWatcher) { 7324 containerOffset += 7325 container.containerWatcher.top - 7326 container.containerWatcher.container.viewportTop; 7327 container = container.containerWatcher.container; 7328 } 7329 var boundingRect = this.watchItem.getBoundingClientRect(); 7330 this.top = boundingRect.top + this.container.viewportTop - containerOffset; 7331 this.bottom = boundingRect.bottom + this.container.viewportTop - containerOffset; 7332 if (cachedDisplay === 'none') { 7333 this.watchItem.style.display = cachedDisplay; 7334 } 7335 } 7336 else if (this.watchItem === +this.watchItem) { 7337 // number 7338 if (this.watchItem > 0) { 7339 this.top = this.bottom = this.watchItem; 7340 } 7341 else { 7342 this.top = this.bottom = this.container.documentHeight - this.watchItem; 7343 } 7344 } 7345 else { 7346 // an object with a top and bottom property 7347 this.top = this.watchItem.top; 7348 this.bottom = this.watchItem.bottom; 7349 } 7350 this.top -= this.offsets.top; 7351 this.bottom += this.offsets.bottom; 7352 this.height = this.bottom - this.top; 7353 if ((previousTop !== undefined || previousBottom !== undefined) && 7354 (this.top !== previousTop || this.bottom !== previousBottom)) { 7355 triggerCallbackArray(this.callbacks[_constants_js__WEBPACK_IMPORTED_MODULE_0__.LOCATIONCHANGE], undefined); 7356 } 7357 }; 7358 this.recalculateLocation(); 7359 this.update(); 7360 wasInViewport = this.isInViewport; 7361 wasFullyInViewport = this.isFullyInViewport; 7362 wasAboveViewport = this.isAboveViewport; 7363 wasBelowViewport = this.isBelowViewport; 7364 } 7365 Watcher.prototype.on = function (event, callback, isOne) { 7366 if (isOne === void 0) { isOne = false; } 7367 // trigger the event if it applies to the element right now. 7368 switch (true) { 7369 case event === _constants_js__WEBPACK_IMPORTED_MODULE_0__.VISIBILITYCHANGE && !this.isInViewport && this.isAboveViewport: 7370 case event === _constants_js__WEBPACK_IMPORTED_MODULE_0__.ENTERVIEWPORT && this.isInViewport: 7371 case event === _constants_js__WEBPACK_IMPORTED_MODULE_0__.FULLYENTERVIEWPORT && this.isFullyInViewport: 7372 case event === _constants_js__WEBPACK_IMPORTED_MODULE_0__.EXITVIEWPORT && this.isAboveViewport && !this.isInViewport: 7373 case event === _constants_js__WEBPACK_IMPORTED_MODULE_0__.PARTIALLYEXITVIEWPORT && this.isInViewport && this.isAboveViewport: 7374 callback.call(this, this); 7375 if (isOne) { 7376 return; 7377 } 7378 } 7379 if (this.callbacks[event]) { 7380 this.callbacks[event].push({ callback: callback, isOne: isOne }); 7381 } 7382 else { 7383 throw new Error('Tried to add a scroll monitor listener of type ' + 7384 event + 7385 '. Your options are: ' + 7386 _constants_js__WEBPACK_IMPORTED_MODULE_0__.eventTypes.join(', ')); 7387 } 7388 }; 7389 Watcher.prototype.off = function (event, callback) { 7390 if (this.callbacks[event]) { 7391 for (var i = 0, item; (item = this.callbacks[event][i]); i++) { 7392 if (item.callback === callback) { 7393 this.callbacks[event].splice(i, 1); 7394 break; 7395 } 7396 } 7397 } 7398 else { 7399 throw new Error('Tried to remove a scroll monitor listener of type ' + 7400 event + 7401 '. Your options are: ' + 7402 _constants_js__WEBPACK_IMPORTED_MODULE_0__.eventTypes.join(', ')); 7403 } 7404 }; 7405 Watcher.prototype.one = function (event, callback) { 7406 this.on(event, callback, true); 7407 }; 7408 Watcher.prototype.recalculateSize = function () { 7409 if (this.watchItem instanceof HTMLElement) { 7410 this.height = this.watchItem.offsetHeight + this.offsets.top + this.offsets.bottom; 7411 this.bottom = this.top + this.height; 7412 } 7413 }; 7414 Watcher.prototype.update = function () { 7415 this.isAboveViewport = this.top < this.container.viewportTop; 7416 this.isBelowViewport = this.bottom > this.container.viewportBottom; 7417 this.isInViewport = 7418 this.top < this.container.viewportBottom && this.bottom > this.container.viewportTop; 7419 this.isFullyInViewport = 7420 (this.top >= this.container.viewportTop && 7421 this.bottom <= this.container.viewportBottom) || 7422 (this.isAboveViewport && this.isBelowViewport); 7423 }; 7424 Watcher.prototype.destroy = function () { 7425 var index = this.container.watchers.indexOf(this), self = this; 7426 this.container.watchers.splice(index, 1); 7427 self.callbacks = {}; 7428 }; 7429 // prevent recalculating the element location 7430 Watcher.prototype.lock = function () { 7431 this.locked = true; 7432 }; 7433 Watcher.prototype.unlock = function () { 7434 this.locked = false; 7435 }; 7436 return Watcher; 7437}()); 7438 7439var eventHandlerFactory = function (type) { 7440 return function (callback, isOne) { 7441 if (isOne === void 0) { isOne = false; } 7442 this.on.call(this, type, callback, isOne); 7443 }; 7444}; 7445for (var i = 0, j = _constants_js__WEBPACK_IMPORTED_MODULE_0__.eventTypes.length; i < j; i++) { 7446 var type = _constants_js__WEBPACK_IMPORTED_MODULE_0__.eventTypes[i]; 7447 Watcher.prototype[type] = eventHandlerFactory(type); 7448} 7449//# sourceMappingURL=watcher.js.map 7450 7451/***/ }), 7452
vendor: 6,133 bytes, lines 7453-7612
7453/***/ "./node_modules/throttle-debounce/index.umd.js": 7454/*!*****************************************************!*\ 7455 !*** ./node_modules/throttle-debounce/index.umd.js ***! 7456 \*****************************************************/ 7457/***/ (function(__unused_webpack_module, exports) { 7458 7459(function (global, factory) { 7460 true ? factory(exports) : 7461 0; 7462}(this, (function (exports) { 'use strict'; 7463 7464 /* eslint-disable no-undefined,no-param-reassign,no-shadow */ 7465 7466 /** 7467 * Throttle execution of a function. Especially useful for rate limiting 7468 * execution of handlers on events like resize and scroll. 7469 * 7470 * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful. 7471 * @param {boolean} [noTrailing] - Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the 7472 * throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time 7473 * after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds, 7474 * the internal counter is reset). 7475 * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is, 7476 * to `callback` when the throttled-function is executed. 7477 * @param {boolean} [debounceMode] - If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end), 7478 * schedule `callback` to execute after `delay` ms. 7479 * 7480 * @returns {Function} A new, throttled, function. 7481 */ 7482 function throttle (delay, noTrailing, callback, debounceMode) { 7483 /* 7484 * After wrapper has stopped being called, this timeout ensures that 7485 * `callback` is executed at the proper times in `throttle` and `end` 7486 * debounce modes. 7487 */ 7488 var timeoutID; 7489 var cancelled = false; // Keep track of the last time `callback` was executed. 7490 7491 var lastExec = 0; // Function to clear existing timeout 7492 7493 function clearExistingTimeout() { 7494 if (timeoutID) { 7495 clearTimeout(timeoutID); 7496 } 7497 } // Function to cancel next exec 7498 7499 7500 function cancel() { 7501 clearExistingTimeout(); 7502 cancelled = true; 7503 } // `noTrailing` defaults to falsy. 7504 7505 7506 if (typeof noTrailing !== 'boolean') { 7507 debounceMode = callback; 7508 callback = noTrailing; 7509 noTrailing = undefined; 7510 } 7511 /* 7512 * The `wrapper` function encapsulates all of the throttling / debouncing 7513 * functionality and when executed will limit the rate at which `callback` 7514 * is executed. 7515 */ 7516 7517 7518 function wrapper() { 7519 for (var _len = arguments.length, arguments_ = new Array(_len), _key = 0; _key < _len; _key++) { 7520 arguments_[_key] = arguments[_key]; 7521 } 7522 7523 var self = this; 7524 var elapsed = Date.now() - lastExec; 7525 7526 if (cancelled) { 7527 return; 7528 } // Execute `callback` and update the `lastExec` timestamp. 7529 7530 7531 function exec() { 7532 lastExec = Date.now(); 7533 callback.apply(self, arguments_); 7534 } 7535 /* 7536 * If `debounceMode` is true (at begin) this is used to clear the flag 7537 * to allow future `callback` executions. 7538 */ 7539 7540 7541 function clear() { 7542 timeoutID = undefined; 7543 } 7544 7545 if (debounceMode && !timeoutID) { 7546 /* 7547 * Since `wrapper` is being called for the first time and 7548 * `debounceMode` is true (at begin), execute `callback`. 7549 */ 7550 exec(); 7551 } 7552 7553 clearExistingTimeout(); 7554 7555 if (debounceMode === undefined && elapsed > delay) { 7556 /* 7557 * In throttle mode, if `delay` time has been exceeded, execute 7558 * `callback`. 7559 */ 7560 exec(); 7561 } else if (noTrailing !== true) { 7562 /* 7563 * In trailing throttle mode, since `delay` time has not been 7564 * exceeded, schedule `callback` to execute `delay` ms after most 7565 * recent execution. 7566 * 7567 * If `debounceMode` is true (at begin), schedule `clear` to execute 7568 * after `delay` ms. 7569 * 7570 * If `debounceMode` is false (at end), schedule `callback` to 7571 * execute after `delay` ms. 7572 */ 7573 timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay); 7574 } 7575 } 7576 7577 wrapper.cancel = cancel; // Return the wrapper function. 7578 7579 return wrapper; 7580 } 7581 7582 /* eslint-disable no-undefined */ 7583 /** 7584 * Debounce execution of a function. Debouncing, unlike throttling, 7585 * guarantees that a function is only executed a single time, either at the 7586 * very beginning of a series of calls, or at the very end. 7587 * 7588 * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful. 7589 * @param {boolean} [atBegin] - Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds 7590 * after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call. 7591 * (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset). 7592 * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is, 7593 * to `callback` when the debounced-function is executed. 7594 * 7595 * @returns {Function} A new, debounced function. 7596 */ 7597 7598 function debounce (delay, atBegin, callback) { 7599 return callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false); 7600 } 7601 7602 exports.debounce = debounce; 7603 exports.throttle = throttle; 7604 7605 Object.defineProperty(exports, '__esModule', { value: true }); 7606 7607}))); 7608//# sourceMappingURL=index.umd.js.map 7609 7610 7611/***/ }), 7612
vendor: 15,965 bytes, lines 7613-7629
7613/***/ "./node_modules/venobox/dist/venobox.min.js": 7614/*!**************************************************!*\ 7615 !*** ./node_modules/venobox/dist/venobox.min.js ***! 7616 \**************************************************/ 7617/***/ (function(module) { 7618 7619!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict"; 7620/** 7621 * VenoBox 2.0.4 7622 * Copyright 2013-2021 Nicola Franchini 7623 * @license: https://github.com/nicolafranchini/VenoBox/blob/master/LICENSE 7624 */let e,t,o,n,s,i,a,r,l,d,c,v,u,b,p,g,f,m,y,x,h,L,w,k,S,C,E,A,P,q,M,T,j,H,O,z,B;const I=document.createElement("div");let V=0,R=0,D=0,N=!1,Q=new Image;const W={bounce:["sk-bounce","sk-bounce-dot",2],chase:["sk-chase","sk-chase-dot",6],circle:["sk-circle","sk-circle-dot",12],"circle-fade":["sk-circle-fade","sk-circle-fade-dot",12],flow:["sk-flow","sk-flow-dot",3],fold:["sk-fold","sk-fold-cube",4],grid:["sk-grid","sk-grid-cube",9],plane:["sk-plane","",0],pulse:["sk-pulse","",5],swing:["sk-swing","sk-swing-dot",2],wander:["sk-wander","sk-wander-cube",3],wave:["sk-wave","sk-wave-rec",5]},X={selector:".venobox",autoplay:!1,bgcolor:"#fff",border:"0",customClass:!1,infinigall:!1,maxWidth:"100%",navigation:!0,navKeyboard:!0,navTouch:!0,navSpeed:300,numeration:!1,overlayClose:!0,overlayColor:"rgba(23,23,23,0.95)",popup:!1,ratio:"16x9",share:!1,shareStyle:"pill",spinner:"bounce",spinColor:"#d2d2d2",titleattr:"title",titlePosition:"top",titleStyle:"bar",toolsBackground:"#1C1C1C",toolsColor:"#d2d2d2",onPreOpen:function(){return!0},onPostOpen:function(){},onPreClose:function(){return!0},onNavComplete:function(){},onContentLoaded:function(){},onInit:function(){},jQuerySelectors:!1};function Y(e,t,o){if("[object Object]"===Object.prototype.toString.call(e)){let n;for(n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.call(o,e[n],n,e)}else{let n=0,s=e.length;for(n=0;n<s;n++)t.call(o,e[n],n,e)}}function Z(e){return e}function $({timing:e,draw:t,duration:o}){let n=performance.now();requestAnimationFrame((function s(i){let a=(i-n)/o;a>1&&(a=1);let r=e(a);t(r),a<1&&requestAnimationFrame(s)}))}function F(e){if(!e)return!1;y=!0,r=e,L=!1,w=!1,S=e.getAttribute("data-maxwidth")||e.settings.maxWidth,C=e.getAttribute("data-overlay")||e.settings.overlayColor,E=e.getAttribute("data-ratio")||e.settings.ratio,A=e.getAttribute("data-autoplay")||e.settings.autoplay,P=e.getAttribute("data-href")||e.getAttribute("href"),q=e.getAttribute("data-customclass")||e.settings.customClass,z=e.getAttribute(e.settings.titleattr)||"",H=e.getAttribute("data-border")||e.settings.border}function K(){return!(!r||!document.body.classList.contains("vbox-open"))&&((!r.settings.onPreClose||"function"!=typeof r.settings.onPreClose||(r.settings.onPreClose(r,p,T,j),!1!==r.settings.onPreClose))&&(document.body.removeEventListener("keydown",G),document.body.classList.remove("vbox-open"),r.focus(),void $({duration:200,timing:Z,draw:function(e){k.style.opacity=1-e,1===e&&k.remove()}})))}function U(){le(T)}function _(){le(j)}function G(e){27===e.keyCode&&K(),B||(37==e.keyCode&&!0===w&&le(j),39==e.keyCode&&!0===L&&le(T),B=setTimeout((()=>{B=null}),100))}function J(e){a.classList.contains("vbox-"+e)||function(){y=!1,a.style.opacity=0,a.innerHTML=x;let e=a.querySelector(":first-child");e.classList.add("vbox-child"),e.style.backgroundColor=r.settings.bgcolor,e.style.maxWidth=S,e.style.transform="scale(0.9)",e.style.transition="transform 200ms";let t=a.querySelector(".vbox-child img");t&&t.addEventListener("dragstart",(function(e){e.preventDefault()})),i.scrollTo(0,0),e.style.transform="scale(1)",k.style.setProperty("--vbox-padding",H),Y(k.classList,(function(e){"vbox-overlay"!==e&&k.classList.remove(e)})),q&&k.classList.add(q),$({duration:200,timing:Z,draw:function(e){a.style.opacity=e,1===e&&u.classList.add("vbox-hidden")}}),r.settings.onContentLoaded&&"function"==typeof r.settings.onContentLoaded&&r.settings.onContentLoaded(x)}()}function ee(e,t,o){let n;if(a.classList.add("vbox-loading"),-1!==e.search(/.+\.mp4|og[gv]|webm/))n=o?" autoplay":"",x='<div class="venoratio venoratio-'+t+'"><video src="'+e+'"'+n+" controls>Your browser does not support the video tag.</video></div>";else{let s,i=function(e){let t;return e.match(/(http:|https:|)\/\/(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),RegExp.$3.indexOf("youtu")>-1?t="youtube":RegExp.$3.indexOf("vimeo")>-1&&(t="vimeo"),{type:t,id:RegExp.$6}}(e);n=o?"?rel=0&autoplay=1":"?rel=0";let a=n+function(e){let t="",o=decodeURIComponent(e).split("?");if(void 0!==o[1]){let e,n,s=o[1].split("&");for(n=0;n<s.length;n++)e=s[n].split("="),t=t+"&"+e[0]+"="+e[1]}return encodeURI(t)}(e);"vimeo"==i.type?s="https://player.vimeo.com/video/":"youtube"==i.type&&(s="https://www.youtube.com/embed/"),x='<div class="venoratio venoratio-'+t+'"><iframe webkitallowfullscreen mozallowfullscreen allowfullscreen allow="autoplay" frameborder="0" src="'+s+i.id+a+'"></iframe></div>'}a.classList.remove("vbox-loading"),J("animated")}function te(){var e;if(e=x,I.innerHTML=e,g=I.querySelectorAll("img"),g.length){let e=0;Y(g,(function(t){let o=t.src;Q=new Image,Q.onload=function(){e++,e==g.length&&(a.classList.remove("vbox-loading"),J("animated"))},Q.onerror=function(){e++,e==g.length&&(a.classList.remove("vbox-loading"),J("animated"))},Q.src=o}))}else a.classList.remove("vbox-loading"),J("animated")}function oe(e){if(!y){let t=.84*r.settings.navSpeed;a.style.transition="margin "+t+"ms ease-out, opacity "+t+"ms ease-out",M=v=e.pageY,V=R=e.pageX,N=!0}}function ne(e){if(N){N=!1;let e=r,t=!1;D=R-V,D<0&&L&&(e=T,t=!0),D>0&&w&&(e=j,t=!0),Math.abs(D)>=50&&t?le(e):(a.style.marginLeft=0,a.style.opacity=1)}}function se(e){if(N&&!y){R=e.pageX,v=e.pageY,d=R-V,c=v-M;let t=Math.abs(d);if(t>Math.abs(c)&&t<=180){let o=1.5*(1-t/180);e.preventDefault(),a.style.marginLeft=d+"px",a.style.opacity=o}}}function ie(e){if(!e)return!1;O=e.dataset.gall,h=e.settings.numeration,f=e.settings.infinigall,o.innerHTML="";let s=e.dataset.vbtype;e.settings.share&&"iframe"!==s&&"inline"!==s&&"ajax"!==s&&function(e){if(navigator.canShare){const t={url:e};o.insertAdjacentHTML("beforeend",'<div class="vbox-link-btn vbox-share-mobile"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor"><path fill-rule="evenodd" d="M3.5 6a.5.5 0 0 0-.5.5v8a.5.5 0 0 0 .5.5h9a.5.5 0 0 0 .5-.5v-8a.5.5 0 0 0-.5-.5h-2a.5.5 0 0 1 0-1h2A1.5 1.5 0 0 1 14 6.5v8a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 2 14.5v-8A1.5 1.5 0 0 1 3.5 5h2a.5.5 0 0 1 0 1h-2z"/><path fill-rule="evenodd" d="M7.646.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L8.5 1.707V10.5a.5.5 0 0 1-1 0V1.707L5.354 3.854a.5.5 0 1 1-.708-.708l3-3z"/></svg></div>'),o.querySelector(".vbox-share-mobile").addEventListener("click",(function(e){e.preventDefault(),navigator.share(t)}))}o.insertAdjacentHTML("beforeend",'<a target="_blank" href="'+e+'" download><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor"><path d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5z"/><path d="M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3z"/></svg></a>'),o.insertAdjacentHTML("beforeend",'<div class="vbox-tooltip"><div class="vbox-link-btn vbox-share-copy"><span class="vbox-tooltip-text" id="myTooltip"></span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor"><path fill-rule="evenodd" d="M10.854 7.146a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 1 1 .708-.708L7.5 9.793l2.646-2.647a.5.5 0 0 1 .708 0z"/><path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/><path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/></svg></div ></div>'),o.querySelector(".vbox-share-copy").addEventListener("click",(function(t){t.preventDefault();let o=document.getElementById("myTooltip");navigator.clipboard.writeText(e).then((function(){o.innerHTML='<div class="vbox-tooltip-inner">Copied</div>'}),(function(){console.log("copy failed")}))}))}(e.href),m=document.querySelectorAll('.vbox-item[data-gall="'+O+'"]'),l=Array.prototype.indexOf.call(m,e),m.length<2&&(f=!1,h=!1),T=m[l+1],j=m[l-1],!T&&f&&(T=m[0]),!j&&f&&(j=m[m.length-1]),m.length>=1?(p=l+1,t.innerHTML=p+" / "+m.length):p=1,h?t.classList.remove("vbox-hidden"):t.classList.add("vbox-hidden"),""!==z?n.classList.remove("vbox-hidden"):n.classList.add("vbox-hidden"),n.innerHTML=z,w=!1,L=!1,(T||f)&&(L=!0),(l>0||f)&&(w=!0),(w||L)&&e.settings.navTouch?(a.classList.add("vbox-grab"),a.addEventListener("touchstart",oe,!1),a.addEventListener("touchend",ne,!1),a.addEventListener("touchmove",se,!1),a.addEventListener("mousedown",oe,!1),a.addEventListener("mouseup",ne,!1),a.addEventListener("mouseout",ne,!1),a.addEventListener("mousemove",se,!1)):(a.classList.remove("vbox-grab"),a.removeEventListener("touchstart",oe,!1),a.removeEventListener("touchend",ne,!1),a.removeEventListener("touchmove",se,!1),a.removeEventListener("mousedown",oe,!1),a.removeEventListener("mouseup",ne,!1),a.removeEventListener("mouseout",ne,!1),a.removeEventListener("mousemove",se,!1));let i=k.querySelector(".vbox-next"),r=k.querySelector(".vbox-prev");w?r.classList.remove("vbox-hidden"):r.classList.add("vbox-hidden"),L?i.classList.remove("vbox-hidden"):i.classList.add("vbox-hidden"),e.settings.navigation||(i.classList.add("vbox-hidden"),r.classList.add("vbox-hidden"))}function ae(t){if(!t)return!1;e.style.backgroundColor=C,b.innerHTML=function(e){if(!e)return"Loading...";let t='<div class="sk-center '+e[0]+'">',o=0;for(o=0;o<e[2];o++)t+='<div class="'+e[1]+'"></div>';return t+="</div>",t}(W[t.settings.spinner]),k.style.setProperty("--sk-color",t.settings.spinColor),u.classList.remove("vbox-hidden"),o.classList.remove("vbox-top","vbox-bottom"),n.classList.remove("vbox-top","vbox-bottom"),"top"==t.settings.titlePosition?(n.classList.add("vbox-top"),o.classList.add("vbox-bottom")):(n.classList.add("vbox-bottom"),o.classList.add("vbox-top"));let s="bar"===t.settings.titleStyle?"100%":"auto",i="pill"===t.settings.titleStyle?"5em":"0",a="bar"===t.settings.shareStyle?"100%":"auto",r="pill"===t.settings.shareStyle?"5em":"0",l="transparent"===t.settings.titleStyle?"transparent":t.settings.toolsBackground,d="transparent"===t.settings.shareStyle?"transparent":t.settings.toolsBackground;k.style.setProperty("--vbox-title-width",s),k.style.setProperty("--vbox-title-radius",i),k.style.setProperty("--vbox-share-width",a),k.style.setProperty("--vbox-share-radius",r),k.style.setProperty("--vbox-tools-color",t.settings.toolsColor),k.style.setProperty("--vbox-title-background",l),k.style.setProperty("--vbox-share-background",d)}function re(){if(!r)return!1;switch(r.dataset.vbtype){case"iframe":e=P,t=E,a.classList.add("vbox-loading"),x='<div class="venoratio venoratio-'+t+'"><iframe src="'+e+'"></iframe></div>',a.classList.remove("vbox-loading"),J("animated");break;case"inline":!function(e){let t=document.querySelector(e);t&&(a.classList.add("vbox-loading"),x='<div class="vbox-inline">'+t.innerHTML+"</div>",a.classList.remove("vbox-loading"),J("animated"))}(P);break;case"ajax":!function(e){a.classList.add("vbox-loading");let t=new XMLHttpRequest;t.open("GET",e,!0),t.onload=function(){x='<div class="vbox-inline">'+t.response+"</div>",te()},t.onerror=function(){x='<div class="vbox-inline"></div>',a.classList.remove("vbox-loading"),J("animated")},t.send()}(P);break;case"video":ee(P,E,A);break;default:!function(e){Q.onload=function(){x='<div class="vbox-child"><img src="'+e+'"></div>',a.classList.remove("vbox-loading"),J("animated")},Q.src=e}(P)}var e,t}function le(e){if(!e||y||!document.body.classList.contains("vbox-open"))return!1;F(e),ae(e);let t=.84*r.settings.navSpeed;a.style.transition="margin "+t+"ms ease-out, opacity "+t+"ms ease-out",e===j&&a.classList.add("swipe-right"),e===T&&a.classList.add("swipe-left"),u.classList.remove("vbox-hidden");let o=a.style.opacity;a.classList.add("vbox-animated","vbox-loading"),ie(e),$({duration:r.settings.navSpeed,timing:Z,draw:function(e){a.style.opacity=o-e/o,1===e&&(a.classList.remove("swipe-left","swipe-right","vbox-animated"),a.style.marginLeft=0,a.style.transition="",J("loading"),y=!1,r.settings.onNavComplete&&"function"==typeof r.settings.onNavComplete&&r.settings.onNavComplete(r,p,T,j))}}),re()}function de(l){return!(document.body.classList.contains("vbox-open")||!l)&&(l.settings.onPreOpen&&"function"==typeof l.settings.onPreOpen&&l.settings.onPreOpen(l),!!l.settings.onPreOpen&&(F(l),document.body.insertAdjacentHTML("beforeend",s),document.body.classList.add("vbox-open"),k=document.querySelector(".vbox-overlay"),e=k.querySelector(".vbox-backdrop"),i=k.querySelector(".vbox-container"),a=i.querySelector(".vbox-content"),t=k.querySelector(".vbox-num"),o=k.querySelector(".vbox-share"),n=k.querySelector(".vbox-title"),u=k.querySelector(".vbox-preloader"),b=u.querySelector(".vbox-preloader-inner"),k.style.opacity=0,ae(l),ie(l),a.classList.add("vbox-animated","vbox-loading"),$({duration:200,timing:Z,draw:function(e){k.style.opacity=e,1===e&&(a.classList.remove("vbox-animated"),y=!1,J("loading"),r.settings.onPostOpen&&"function"==typeof r.settings.onPostOpen&&r.settings.onPostOpen(r,p,T,j))}}),re(),l.settings.navKeyboard&&(document.body.addEventListener("keydown",G),document.body.addEventListener("keyup",(()=>{B&&(clearTimeout(B),B=null)}))),document.querySelector(".vbox-prev").addEventListener("click",(function(){le(j)})),document.querySelector(".vbox-next").addEventListener("click",(function(){le(T)})),void k.addEventListener("click",(function(e){let t=document.querySelector(".vbox-close");t&&(t.contains(e.target)||t===e.target||r.settings.overlayClose&&e.target.classList.contains("vbox-overlay")||e.target.classList.contains("vbox-content")||e.target.classList.contains("vbox-backdrop")||e.target.classList.contains("vbox-close")||e.target.classList.contains("vbox-preloader")||e.target.classList.contains("vbox-container"))&&K()}))))}const ce=function(e){const t={};let o=function(e,t){let o={};return Y(e,(function(t,n){o[n]=e[n]})),Y(t,(function(e,n){o[n]=t[n]})),o}(X,e||{});return t.close=K,t.next=U,t.prev=_,t.open=de,t.settings=o,function(e,t){t.onInit&&"function"==typeof t.onInit&&t.onInit(e);let o=t.jQuerySelectors||document.querySelectorAll(t.selector);if(s='<div class="vbox-overlay"><div class="vbox-backdrop"></div><div class="vbox-preloader"><div class="vbox-preloader-inner"></div></div><div class="vbox-container"><div class="vbox-content"></div></div><div class="vbox-title"></div><div class="vbox-left-corner"><div class="vbox-num">0/0</div></div><div class="vbox-close"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" class="vbox-close-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M13.854 2.146a.5.5 0 0 1 0 .708l-11 11a.5.5 0 0 1-.708-.708l11-11a.5.5 0 0 1 .708 0Z"/><path fill-rule="evenodd" d="M2.146 2.146a.5.5 0 0 0 0 .708l11 11a.5.5 0 0 0 .708-.708l-11-11a.5.5 0 0 0-.708 0Z"/></svg></div><a class="vbox-next"><span>Next</span></a><a class="vbox-prev"><span>Prev</span></a><div class="vbox-share"></div></div>',Y(o,(function(e){if(e.classList.contains("vbox-item"))return!0;e.settings=t,e.classList.add("vbox-item"),e.addEventListener("click",(function(t){return t.preventDefault(),e.blur(),de(e),!1}))})),t.popup){let e=document.querySelector(t.popup);e.settings=t,de(e)}}(t,o),t};return"function"==typeof jQuery&&jQuery.fn.extend({venobox:function(e){const t=e||{};t.jQuerySelectors=this,new ce({pluginoptions:t})}}),ce})); 7625//# sourceMappingURL=venobox.min.js.map 7626 7627 7628/***/ }), 7629
vendor: 415,117 bytes, lines 7630-19568
7630/***/ "./node_modules/vue/dist/vue.esm.js": 7631/*!******************************************!*\ 7632 !*** ./node_modules/vue/dist/vue.esm.js ***! 7633 \******************************************/ 7634/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 7635 7636"use strict"; 7637__webpack_require__.r(__webpack_exports__); 7638/* harmony export */ __webpack_require__.d(__webpack_exports__, { 7639/* harmony export */ "EffectScope": () => (/* binding */ EffectScope), 7640/* harmony export */ "computed": () => (/* binding */ computed), 7641/* harmony export */ "customRef": () => (/* binding */ customRef), 7642/* harmony export */ "default": () => (/* binding */ Vue), 7643/* harmony export */ "defineAsyncComponent": () => (/* binding */ defineAsyncComponent), 7644/* harmony export */ "defineComponent": () => (/* binding */ defineComponent), 7645/* harmony export */ "del": () => (/* binding */ del), 7646/* harmony export */ "effectScope": () => (/* binding */ effectScope), 7647/* harmony export */ "getCurrentInstance": () => (/* binding */ getCurrentInstance), 7648/* harmony export */ "getCurrentScope": () => (/* binding */ getCurrentScope), 7649/* harmony export */ "h": () => (/* binding */ h), 7650/* harmony export */ "inject": () => (/* binding */ inject), 7651/* harmony export */ "isProxy": () => (/* binding */ isProxy), 7652/* harmony export */ "isReactive": () => (/* binding */ isReactive), 7653/* harmony export */ "isReadonly": () => (/* binding */ isReadonly), 7654/* harmony export */ "isRef": () => (/* binding */ isRef), 7655/* harmony export */ "isShallow": () => (/* binding */ isShallow), 7656/* harmony export */ "markRaw": () => (/* binding */ markRaw), 7657/* harmony export */ "mergeDefaults": () => (/* binding */ mergeDefaults), 7658/* harmony export */ "nextTick": () => (/* binding */ nextTick), 7659/* harmony export */ "onActivated": () => (/* binding */ onActivated), 7660/* harmony export */ "onBeforeMount": () => (/* binding */ onBeforeMount), 7661/* harmony export */ "onBeforeUnmount": () => (/* binding */ onBeforeUnmount), 7662/* harmony export */ "onBeforeUpdate": () => (/* binding */ onBeforeUpdate), 7663/* harmony export */ "onDeactivated": () => (/* binding */ onDeactivated), 7664/* harmony export */ "onErrorCaptured": () => (/* binding */ onErrorCaptured), 7665/* harmony export */ "onMounted": () => (/* binding */ onMounted), 7666/* harmony export */ "onRenderTracked": () => (/* binding */ onRenderTracked), 7667/* harmony export */ "onRenderTriggered": () => (/* binding */ onRenderTriggered), 7668/* harmony export */ "onScopeDispose": () => (/* binding */ onScopeDispose), 7669/* harmony export */ "onServerPrefetch": () => (/* binding */ onServerPrefetch), 7670/* harmony export */ "onUnmounted": () => (/* binding */ onUnmounted), 7671/* harmony export */ "onUpdated": () => (/* binding */ onUpdated), 7672/* harmony export */ "provide": () => (/* binding */ provide), 7673/* harmony export */ "proxyRefs": () => (/* binding */ proxyRefs), 7674/* harmony export */ "reactive": () => (/* binding */ reactive), 7675/* harmony export */ "readonly": () => (/* binding */ readonly), 7676/* harmony export */ "ref": () => (/* binding */ ref$1), 7677/* harmony export */ "set": () => (/* binding */ set), 7678/* harmony export */ "shallowReactive": () => (/* binding */ shallowReactive), 7679/* harmony export */ "shallowReadonly": () => (/* binding */ shallowReadonly), 7680/* harmony export */ "shallowRef": () => (/* binding */ shallowRef), 7681/* harmony export */ "toRaw": () => (/* binding */ toRaw), 7682/* harmony export */ "toRef": () => (/* binding */ toRef), 7683/* harmony export */ "toRefs": () => (/* binding */ toRefs), 7684/* harmony export */ "triggerRef": () => (/* binding */ triggerRef), 7685/* harmony export */ "unref": () => (/* binding */ unref), 7686/* harmony export */ "useAttrs": () => (/* binding */ useAttrs), 7687/* harmony export */ "useCssModule": () => (/* binding */ useCssModule), 7688/* harmony export */ "useCssVars": () => (/* binding */ useCssVars), 7689/* harmony export */ "useListeners": () => (/* binding */ useListeners), 7690/* harmony export */ "useSlots": () => (/* binding */ useSlots), 7691/* harmony export */ "version": () => (/* binding */ version), 7692/* harmony export */ "watch": () => (/* binding */ watch), 7693/* harmony export */ "watchEffect": () => (/* binding */ watchEffect), 7694/* harmony export */ "watchPostEffect": () => (/* binding */ watchPostEffect), 7695/* harmony export */ "watchSyncEffect": () => (/* binding */ watchSyncEffect) 7696/* harmony export */ }); 7697/*! 7698 * Vue.js v2.7.14 7699 * (c) 2014-2022 Evan You 7700 * Released under the MIT License. 7701 */ 7702var emptyObject = Object.freeze({}); 7703var isArray = Array.isArray; 7704// These helpers produce better VM code in JS engines due to their 7705// explicitness and function inlining. 7706function isUndef(v) { 7707 return v === undefined || v === null; 7708} 7709function isDef(v) { 7710 return v !== undefined && v !== null; 7711} 7712function isTrue(v) { 7713 return v === true; 7714} 7715function isFalse(v) { 7716 return v === false; 7717} 7718/** 7719 * Check if value is primitive. 7720 */ 7721function isPrimitive(value) { 7722 return (typeof value === 'string' || 7723 typeof value === 'number' || 7724 // $flow-disable-line 7725 typeof value === 'symbol' || 7726 typeof value === 'boolean'); 7727} 7728function isFunction(value) { 7729 return typeof value === 'function'; 7730} 7731/** 7732 * Quick object check - this is primarily used to tell 7733 * objects from primitive values when we know the value 7734 * is a JSON-compliant type. 7735 */ 7736function isObject(obj) { 7737 return obj !== null && typeof obj === 'object'; 7738} 7739/** 7740 * Get the raw type string of a value, e.g., [object Object]. 7741 */ 7742var _toString = Object.prototype.toString; 7743function toRawType(value) { 7744 return _toString.call(value).slice(8, -1); 7745} 7746/** 7747 * Strict object type check. Only returns true 7748 * for plain JavaScript objects. 7749 */ 7750function isPlainObject(obj) { 7751 return _toString.call(obj) === '[object Object]'; 7752} 7753function isRegExp(v) { 7754 return _toString.call(v) === '[object RegExp]'; 7755} 7756/** 7757 * Check if val is a valid array index. 7758 */ 7759function isValidArrayIndex(val) { 7760 var n = parseFloat(String(val)); 7761 return n >= 0 && Math.floor(n) === n && isFinite(val); 7762} 7763function isPromise(val) { 7764 return (isDef(val) && 7765 typeof val.then === 'function' && 7766 typeof val.catch === 'function'); 7767} 7768/** 7769 * Convert a value to a string that is actually rendered. 7770 */ 7771function toString(val) { 7772 return val == null 7773 ? '' 7774 : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString) 7775 ? JSON.stringify(val, null, 2) 7776 : String(val); 7777} 7778/** 7779 * Convert an input value to a number for persistence. 7780 * If the conversion fails, return original string. 7781 */ 7782function toNumber(val) { 7783 var n = parseFloat(val); 7784 return isNaN(n) ? val : n; 7785} 7786/** 7787 * Make a map and return a function for checking if a key 7788 * is in that map. 7789 */ 7790function makeMap(str, expectsLowerCase) { 7791 var map = Object.create(null); 7792 var list = str.split(','); 7793 for (var i = 0; i < list.length; i++) { 7794 map[list[i]] = true; 7795 } 7796 return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; }; 7797} 7798/** 7799 * Check if a tag is a built-in tag. 7800 */ 7801var isBuiltInTag = makeMap('slot,component', true); 7802/** 7803 * Check if an attribute is a reserved attribute. 7804 */ 7805var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is'); 7806/** 7807 * Remove an item from an array. 7808 */ 7809function remove$2(arr, item) { 7810 var len = arr.length; 7811 if (len) { 7812 // fast path for the only / last item 7813 if (item === arr[len - 1]) { 7814 arr.length = len - 1; 7815 return; 7816 } 7817 var index = arr.indexOf(item); 7818 if (index > -1) { 7819 return arr.splice(index, 1); 7820 } 7821 } 7822} 7823/** 7824 * Check whether an object has the property. 7825 */ 7826var hasOwnProperty = Object.prototype.hasOwnProperty; 7827function hasOwn(obj, key) { 7828 return hasOwnProperty.call(obj, key); 7829} 7830/** 7831 * Create a cached version of a pure function. 7832 */ 7833function cached(fn) { 7834 var cache = Object.create(null); 7835 return function cachedFn(str) { 7836 var hit = cache[str]; 7837 return hit || (cache[str] = fn(str)); 7838 }; 7839} 7840/** 7841 * Camelize a hyphen-delimited string. 7842 */ 7843var camelizeRE = /-(\w)/g; 7844var camelize = cached(function (str) { 7845 return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); }); 7846}); 7847/** 7848 * Capitalize a string. 7849 */ 7850var capitalize = cached(function (str) { 7851 return str.charAt(0).toUpperCase() + str.slice(1); 7852}); 7853/** 7854 * Hyphenate a camelCase string. 7855 */ 7856var hyphenateRE = /\B([A-Z])/g; 7857var hyphenate = cached(function (str) { 7858 return str.replace(hyphenateRE, '-$1').toLowerCase(); 7859}); 7860/** 7861 * Simple bind polyfill for environments that do not support it, 7862 * e.g., PhantomJS 1.x. Technically, we don't need this anymore 7863 * since native bind is now performant enough in most browsers. 7864 * But removing it would mean breaking code that was able to run in 7865 * PhantomJS 1.x, so this must be kept for backward compatibility. 7866 */ 7867/* istanbul ignore next */ 7868function polyfillBind(fn, ctx) { 7869 function boundFn(a) { 7870 var l = arguments.length; 7871 return l 7872 ? l > 1 7873 ? fn.apply(ctx, arguments) 7874 : fn.call(ctx, a) 7875 : fn.call(ctx); 7876 } 7877 boundFn._length = fn.length; 7878 return boundFn; 7879} 7880function nativeBind(fn, ctx) { 7881 return fn.bind(ctx); 7882} 7883// @ts-expect-error bind cannot be `undefined` 7884var bind$1 = Function.prototype.bind ? nativeBind : polyfillBind; 7885/** 7886 * Convert an Array-like object to a real Array. 7887 */ 7888function toArray(list, start) { 7889 start = start || 0; 7890 var i = list.length - start; 7891 var ret = new Array(i); 7892 while (i--) { 7893 ret[i] = list[i + start]; 7894 } 7895 return ret; 7896} 7897/** 7898 * Mix properties into target object. 7899 */ 7900function extend(to, _from) { 7901 for (var key in _from) { 7902 to[key] = _from[key]; 7903 } 7904 return to; 7905} 7906/** 7907 * Merge an Array of Objects into a single Object. 7908 */ 7909function toObject(arr) { 7910 var res = {}; 7911 for (var i = 0; i < arr.length; i++) { 7912 if (arr[i]) { 7913 extend(res, arr[i]); 7914 } 7915 } 7916 return res; 7917} 7918/* eslint-disable no-unused-vars */ 7919/** 7920 * Perform no operation. 7921 * Stubbing args to make Flow happy without leaving useless transpiled code 7922 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/). 7923 */ 7924function noop(a, b, c) { } 7925/** 7926 * Always return false. 7927 */ 7928var no = function (a, b, c) { return false; }; 7929/* eslint-enable no-unused-vars */ 7930/** 7931 * Return the same value. 7932 */ 7933var identity = function (_) { return _; }; 7934/** 7935 * Generate a string containing static keys from compiler modules. 7936 */ 7937function genStaticKeys$1(modules) { 7938 return modules 7939 .reduce(function (keys, m) { 7940 return keys.concat(m.staticKeys || []); 7941 }, []) 7942 .join(','); 7943} 7944/** 7945 * Check if two values are loosely equal - that is, 7946 * if they are plain objects, do they have the same shape? 7947 */ 7948function looseEqual(a, b) { 7949 if (a === b) 7950 return true; 7951 var isObjectA = isObject(a); 7952 var isObjectB = isObject(b); 7953 if (isObjectA && isObjectB) { 7954 try { 7955 var isArrayA = Array.isArray(a); 7956 var isArrayB = Array.isArray(b); 7957 if (isArrayA && isArrayB) { 7958 return (a.length === b.length && 7959 a.every(function (e, i) { 7960 return looseEqual(e, b[i]); 7961 })); 7962 } 7963 else if (a instanceof Date && b instanceof Date) { 7964 return a.getTime() === b.getTime(); 7965 } 7966 else if (!isArrayA && !isArrayB) { 7967 var keysA = Object.keys(a); 7968 var keysB = Object.keys(b); 7969 return (keysA.length === keysB.length && 7970 keysA.every(function (key) { 7971 return looseEqual(a[key], b[key]); 7972 })); 7973 } 7974 else { 7975 /* istanbul ignore next */ 7976 return false; 7977 } 7978 } 7979 catch (e) { 7980 /* istanbul ignore next */ 7981 return false; 7982 } 7983 } 7984 else if (!isObjectA && !isObjectB) { 7985 return String(a) === String(b); 7986 } 7987 else { 7988 return false; 7989 } 7990} 7991/** 7992 * Return the first index at which a loosely equal value can be 7993 * found in the array (if value is a plain object, the array must 7994 * contain an object of the same shape), or -1 if it is not present. 7995 */ 7996function looseIndexOf(arr, val) { 7997 for (var i = 0; i < arr.length; i++) { 7998 if (looseEqual(arr[i], val)) 7999 return i; 8000 } 8001 return -1; 8002} 8003/** 8004 * Ensure a function is called only once. 8005 */ 8006function once(fn) { 8007 var called = false; 8008 return function () { 8009 if (!called) { 8010 called = true; 8011 fn.apply(this, arguments); 8012 } 8013 }; 8014} 8015// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill 8016function hasChanged(x, y) { 8017 if (x === y) { 8018 return x === 0 && 1 / x !== 1 / y; 8019 } 8020 else { 8021 return x === x || y === y; 8022 } 8023} 8024 8025var SSR_ATTR = 'data-server-rendered'; 8026var ASSET_TYPES = ['component', 'directive', 'filter']; 8027var LIFECYCLE_HOOKS = [ 8028 'beforeCreate', 8029 'created', 8030 'beforeMount', 8031 'mounted', 8032 'beforeUpdate', 8033 'updated', 8034 'beforeDestroy', 8035 'destroyed', 8036 'activated', 8037 'deactivated', 8038 'errorCaptured', 8039 'serverPrefetch', 8040 'renderTracked', 8041 'renderTriggered' 8042]; 8043 8044var config = { 8045 /** 8046 * Option merge strategies (used in core/util/options) 8047 */ 8048 // $flow-disable-line 8049 optionMergeStrategies: Object.create(null), 8050 /** 8051 * Whether to suppress warnings. 8052 */ 8053 silent: false, 8054 /** 8055 * Show production mode tip message on boot? 8056 */ 8057 productionTip: "development" !== 'production', 8058 /** 8059 * Whether to enable devtools 8060 */ 8061 devtools: "development" !== 'production', 8062 /** 8063 * Whether to record perf 8064 */ 8065 performance: false, 8066 /** 8067 * Error handler for watcher errors 8068 */ 8069 errorHandler: null, 8070 /** 8071 * Warn handler for watcher warns 8072 */ 8073 warnHandler: null, 8074 /** 8075 * Ignore certain custom elements 8076 */ 8077 ignoredElements: [], 8078 /** 8079 * Custom user key aliases for v-on 8080 */ 8081 // $flow-disable-line 8082 keyCodes: Object.create(null), 8083 /** 8084 * Check if a tag is reserved so that it cannot be registered as a 8085 * component. This is platform-dependent and may be overwritten. 8086 */ 8087 isReservedTag: no, 8088 /** 8089 * Check if an attribute is reserved so that it cannot be used as a component 8090 * prop. This is platform-dependent and may be overwritten. 8091 */ 8092 isReservedAttr: no, 8093 /** 8094 * Check if a tag is an unknown element. 8095 * Platform-dependent. 8096 */ 8097 isUnknownElement: no, 8098 /** 8099 * Get the namespace of an element 8100 */ 8101 getTagNamespace: noop, 8102 /** 8103 * Parse the real tag name for the specific platform. 8104 */ 8105 parsePlatformTagName: identity, 8106 /** 8107 * Check if an attribute must be bound using property, e.g. value 8108 * Platform-dependent. 8109 */ 8110 mustUseProp: no, 8111 /** 8112 * Perform updates asynchronously. Intended to be used by Vue Test Utils 8113 * This will significantly reduce performance if set to false. 8114 */ 8115 async: true, 8116 /** 8117 * Exposed for legacy reasons 8118 */ 8119 _lifecycleHooks: LIFECYCLE_HOOKS 8120}; 8121 8122/** 8123 * unicode letters used for parsing html tags, component names and property paths. 8124 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname 8125 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS 8126 */ 8127var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/; 8128/** 8129 * Check if a string starts with $ or _ 8130 */ 8131function isReserved(str) { 8132 var c = (str + '').charCodeAt(0); 8133 return c === 0x24 || c === 0x5f; 8134} 8135/** 8136 * Define a property. 8137 */ 8138function def(obj, key, val, enumerable) { 8139 Object.defineProperty(obj, key, { 8140 value: val, 8141 enumerable: !!enumerable, 8142 writable: true, 8143 configurable: true 8144 }); 8145} 8146/** 8147 * Parse simple path. 8148 */ 8149var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]")); 8150function parsePath(path) { 8151 if (bailRE.test(path)) { 8152 return; 8153 } 8154 var segments = path.split('.'); 8155 return function (obj) { 8156 for (var i = 0; i < segments.length; i++) { 8157 if (!obj) 8158 return; 8159 obj = obj[segments[i]]; 8160 } 8161 return obj; 8162 }; 8163} 8164 8165// can we use __proto__? 8166var hasProto = '__proto__' in {}; 8167// Browser environment sniffing 8168var inBrowser = typeof window !== 'undefined'; 8169var UA = inBrowser && window.navigator.userAgent.toLowerCase(); 8170var isIE = UA && /msie|trident/.test(UA); 8171var isIE9 = UA && UA.indexOf('msie 9.0') > 0; 8172var isEdge = UA && UA.indexOf('edge/') > 0; 8173UA && UA.indexOf('android') > 0; 8174var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA); 8175UA && /chrome\/\d+/.test(UA) && !isEdge; 8176UA && /phantomjs/.test(UA); 8177var isFF = UA && UA.match(/firefox\/(\d+)/); 8178// Firefox has a "watch" function on Object.prototype... 8179// @ts-expect-error firebox support 8180var nativeWatch = {}.watch; 8181var supportsPassive = false; 8182if (inBrowser) { 8183 try { 8184 var opts = {}; 8185 Object.defineProperty(opts, 'passive', { 8186 get: function () { 8187 /* istanbul ignore next */ 8188 supportsPassive = true; 8189 } 8190 }); // https://github.com/facebook/flow/issues/285 8191 window.addEventListener('test-passive', null, opts); 8192 } 8193 catch (e) { } 8194} 8195// this needs to be lazy-evaled because vue may be required before 8196// vue-server-renderer can set VUE_ENV 8197var _isServer; 8198var isServerRendering = function () { 8199 if (_isServer === undefined) { 8200 /* istanbul ignore if */ 8201 if (!inBrowser && typeof __webpack_require__.g !== 'undefined') { 8202 // detect presence of vue-server-renderer and avoid 8203 // Webpack shimming the process 8204 _isServer = 8205 __webpack_require__.g['process'] && __webpack_require__.g['process'].env.VUE_ENV === 'server'; 8206 } 8207 else { 8208 _isServer = false; 8209 } 8210 } 8211 return _isServer; 8212}; 8213// detect devtools 8214var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; 8215/* istanbul ignore next */ 8216function isNative(Ctor) { 8217 return typeof Ctor === 'function' && /native code/.test(Ctor.toString()); 8218} 8219var hasSymbol = typeof Symbol !== 'undefined' && 8220 isNative(Symbol) && 8221 typeof Reflect !== 'undefined' && 8222 isNative(Reflect.ownKeys); 8223var _Set; // $flow-disable-line 8224/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) { 8225 // use native Set when available. 8226 _Set = Set; 8227} 8228else { 8229 // a non-standard Set polyfill that only works with primitive keys. 8230 _Set = /** @class */ (function () { 8231 function Set() { 8232 this.set = Object.create(null); 8233 } 8234 Set.prototype.has = function (key) { 8235 return this.set[key] === true; 8236 }; 8237 Set.prototype.add = function (key) { 8238 this.set[key] = true; 8239 }; 8240 Set.prototype.clear = function () { 8241 this.set = Object.create(null); 8242 }; 8243 return Set; 8244 }()); 8245} 8246 8247var currentInstance = null; 8248/** 8249 * This is exposed for compatibility with v3 (e.g. some functions in VueUse 8250 * relies on it). Do not use this internally, just use `currentInstance`. 8251 * 8252 * @internal this function needs manual type declaration because it relies 8253 * on previously manually authored types from Vue 2 8254 */ 8255function getCurrentInstance() { 8256 return currentInstance && { proxy: currentInstance }; 8257} 8258/** 8259 * @internal 8260 */ 8261function setCurrentInstance(vm) { 8262 if (vm === void 0) { vm = null; } 8263 if (!vm) 8264 currentInstance && currentInstance._scope.off(); 8265 currentInstance = vm; 8266 vm && vm._scope.on(); 8267} 8268 8269/** 8270 * @internal 8271 */ 8272var VNode = /** @class */ (function () { 8273 function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) { 8274 this.tag = tag; 8275 this.data = data; 8276 this.children = children; 8277 this.text = text; 8278 this.elm = elm; 8279 this.ns = undefined; 8280 this.context = context; 8281 this.fnContext = undefined; 8282 this.fnOptions = undefined; 8283 this.fnScopeId = undefined; 8284 this.key = data && data.key; 8285 this.componentOptions = componentOptions; 8286 this.componentInstance = undefined; 8287 this.parent = undefined; 8288 this.raw = false; 8289 this.isStatic = false; 8290 this.isRootInsert = true; 8291 this.isComment = false; 8292 this.isCloned = false; 8293 this.isOnce = false; 8294 this.asyncFactory = asyncFactory; 8295 this.asyncMeta = undefined; 8296 this.isAsyncPlaceholder = false; 8297 } 8298 Object.defineProperty(VNode.prototype, "child", { 8299 // DEPRECATED: alias for componentInstance for backwards compat. 8300 /* istanbul ignore next */ 8301 get: function () { 8302 return this.componentInstance; 8303 }, 8304 enumerable: false, 8305 configurable: true 8306 }); 8307 return VNode; 8308}()); 8309var createEmptyVNode = function (text) { 8310 if (text === void 0) { text = ''; } 8311 var node = new VNode(); 8312 node.text = text; 8313 node.isComment = true; 8314 return node; 8315}; 8316function createTextVNode(val) { 8317 return new VNode(undefined, undefined, undefined, String(val)); 8318} 8319// optimized shallow clone 8320// used for static nodes and slot nodes because they may be reused across 8321// multiple renders, cloning them avoids errors when DOM manipulations rely 8322// on their elm reference. 8323function cloneVNode(vnode) { 8324 var cloned = new VNode(vnode.tag, vnode.data, 8325 // #7975 8326 // clone children array to avoid mutating original in case of cloning 8327 // a child. 8328 vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory); 8329 cloned.ns = vnode.ns; 8330 cloned.isStatic = vnode.isStatic; 8331 cloned.key = vnode.key; 8332 cloned.isComment = vnode.isComment; 8333 cloned.fnContext = vnode.fnContext; 8334 cloned.fnOptions = vnode.fnOptions; 8335 cloned.fnScopeId = vnode.fnScopeId; 8336 cloned.asyncMeta = vnode.asyncMeta; 8337 cloned.isCloned = true; 8338 return cloned; 8339} 8340 8341/* not type checking this file because flow doesn't play well with Proxy */ 8342var initProxy; 8343if (true) { 8344 var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' + 8345 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' + 8346 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' + 8347 'require' // for Webpack/Browserify 8348 ); 8349 var warnNonPresent_1 = function (target, key) { 8350 warn$2("Property or method \"".concat(key, "\" is not defined on the instance but ") + 8351 'referenced during render. Make sure that this property is reactive, ' + 8352 'either in the data option, or for class-based components, by ' + 8353 'initializing the property. ' + 8354 'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target); 8355 }; 8356 var warnReservedPrefix_1 = function (target, key) { 8357 warn$2("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") + 8358 'properties starting with "$" or "_" are not proxied in the Vue instance to ' + 8359 'prevent conflicts with Vue internals. ' + 8360 'See: https://v2.vuejs.org/v2/api/#data', target); 8361 }; 8362 var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy); 8363 if (hasProxy_1) { 8364 var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact'); 8365 config.keyCodes = new Proxy(config.keyCodes, { 8366 set: function (target, key, value) { 8367 if (isBuiltInModifier_1(key)) { 8368 warn$2("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key)); 8369 return false; 8370 } 8371 else { 8372 target[key] = value; 8373 return true; 8374 } 8375 } 8376 }); 8377 } 8378 var hasHandler_1 = { 8379 has: function (target, key) { 8380 var has = key in target; 8381 var isAllowed = allowedGlobals_1(key) || 8382 (typeof key === 'string' && 8383 key.charAt(0) === '_' && 8384 !(key in target.$data)); 8385 if (!has && !isAllowed) { 8386 if (key in target.$data) 8387 warnReservedPrefix_1(target, key); 8388 else 8389 warnNonPresent_1(target, key); 8390 } 8391 return has || !isAllowed; 8392 } 8393 }; 8394 var getHandler_1 = { 8395 get: function (target, key) { 8396 if (typeof key === 'string' && !(key in target)) { 8397 if (key in target.$data) 8398 warnReservedPrefix_1(target, key); 8399 else 8400 warnNonPresent_1(target, key); 8401 } 8402 return target[key]; 8403 } 8404 }; 8405 initProxy = function initProxy(vm) { 8406 if (hasProxy_1) { 8407 // determine which proxy handler to use 8408 var options = vm.$options; 8409 var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1; 8410 vm._renderProxy = new Proxy(vm, handlers); 8411 } 8412 else { 8413 vm._renderProxy = vm; 8414 } 8415 }; 8416} 8417 8418/****************************************************************************** 8419Copyright (c) Microsoft Corporation. 8420 8421Permission to use, copy, modify, and/or distribute this software for any 8422purpose with or without fee is hereby granted. 8423 8424THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 8425REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 8426AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 8427INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 8428LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 8429OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 8430PERFORMANCE OF THIS SOFTWARE. 8431***************************************************************************** */ 8432 8433var __assign = function() { 8434 __assign = Object.assign || function __assign(t) { 8435 for (var s, i = 1, n = arguments.length; i < n; i++) { 8436 s = arguments[i]; 8437 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; 8438 } 8439 return t; 8440 }; 8441 return __assign.apply(this, arguments); 8442}; 8443 8444var uid$2 = 0; 8445var pendingCleanupDeps = []; 8446var cleanupDeps = function () { 8447 for (var i = 0; i < pendingCleanupDeps.length; i++) { 8448 var dep = pendingCleanupDeps[i]; 8449 dep.subs = dep.subs.filter(function (s) { return s; }); 8450 dep._pending = false; 8451 } 8452 pendingCleanupDeps.length = 0; 8453}; 8454/** 8455 * A dep is an observable that can have multiple 8456 * directives subscribing to it. 8457 * @internal 8458 */ 8459var Dep = /** @class */ (function () { 8460 function Dep() { 8461 // pending subs cleanup 8462 this._pending = false; 8463 this.id = uid$2++; 8464 this.subs = []; 8465 } 8466 Dep.prototype.addSub = function (sub) { 8467 this.subs.push(sub); 8468 }; 8469 Dep.prototype.removeSub = function (sub) { 8470 // #12696 deps with massive amount of subscribers are extremely slow to 8471 // clean up in Chromium 8472 // to workaround this, we unset the sub for now, and clear them on 8473 // next scheduler flush. 8474 this.subs[this.subs.indexOf(sub)] = null; 8475 if (!this._pending) { 8476 this._pending = true; 8477 pendingCleanupDeps.push(this); 8478 } 8479 }; 8480 Dep.prototype.depend = function (info) { 8481 if (Dep.target) { 8482 Dep.target.addDep(this); 8483 if ( true && info && Dep.target.onTrack) { 8484 Dep.target.onTrack(__assign({ effect: Dep.target }, info)); 8485 } 8486 } 8487 }; 8488 Dep.prototype.notify = function (info) { 8489 // stabilize the subscriber list first 8490 var subs = this.subs.filter(function (s) { return s; }); 8491 if ( true && !config.async) { 8492 // subs aren't sorted in scheduler if not running async 8493 // we need to sort them now to make sure they fire in correct 8494 // order 8495 subs.sort(function (a, b) { return a.id - b.id; }); 8496 } 8497 for (var i = 0, l = subs.length; i < l; i++) { 8498 var sub = subs[i]; 8499 if ( true && info) { 8500 sub.onTrigger && 8501 sub.onTrigger(__assign({ effect: subs[i] }, info)); 8502 } 8503 sub.update(); 8504 } 8505 }; 8506 return Dep; 8507}()); 8508// The current target watcher being evaluated. 8509// This is globally unique because only one watcher 8510// can be evaluated at a time. 8511Dep.target = null; 8512var targetStack = []; 8513function pushTarget(target) { 8514 targetStack.push(target); 8515 Dep.target = target; 8516} 8517function popTarget() { 8518 targetStack.pop(); 8519 Dep.target = targetStack[targetStack.length - 1]; 8520} 8521 8522/* 8523 * not type checking this file because flow doesn't play well with 8524 * dynamically accessing methods on Array prototype 8525 */ 8526var arrayProto = Array.prototype; 8527var arrayMethods = Object.create(arrayProto); 8528var methodsToPatch = [ 8529 'push', 8530 'pop', 8531 'shift', 8532 'unshift', 8533 'splice', 8534 'sort', 8535 'reverse' 8536]; 8537/** 8538 * Intercept mutating methods and emit events 8539 */ 8540methodsToPatch.forEach(function (method) { 8541 // cache original method 8542 var original = arrayProto[method]; 8543 def(arrayMethods, method, function mutator() { 8544 var args = []; 8545 for (var _i = 0; _i < arguments.length; _i++) { 8546 args[_i] = arguments[_i]; 8547 } 8548 var result = original.apply(this, args); 8549 var ob = this.__ob__; 8550 var inserted; 8551 switch (method) { 8552 case 'push': 8553 case 'unshift': 8554 inserted = args; 8555 break; 8556 case 'splice': 8557 inserted = args.slice(2); 8558 break; 8559 } 8560 if (inserted) 8561 ob.observeArray(inserted); 8562 // notify change 8563 if (true) { 8564 ob.dep.notify({ 8565 type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */, 8566 target: this, 8567 key: method 8568 }); 8569 } 8570 else {} 8571 return result; 8572 }); 8573}); 8574 8575var arrayKeys = Object.getOwnPropertyNames(arrayMethods); 8576var NO_INIITIAL_VALUE = {}; 8577/** 8578 * In some cases we may want to disable observation inside a component's 8579 * update computation. 8580 */ 8581var shouldObserve = true; 8582function toggleObserving(value) { 8583 shouldObserve = value; 8584} 8585// ssr mock dep 8586var mockDep = { 8587 notify: noop, 8588 depend: noop, 8589 addSub: noop, 8590 removeSub: noop 8591}; 8592/** 8593 * Observer class that is attached to each observed 8594 * object. Once attached, the observer converts the target 8595 * object's property keys into getter/setters that 8596 * collect dependencies and dispatch updates. 8597 */ 8598var Observer = /** @class */ (function () { 8599 function Observer(value, shallow, mock) { 8600 if (shallow === void 0) { shallow = false; } 8601 if (mock === void 0) { mock = false; } 8602 this.value = value; 8603 this.shallow = shallow; 8604 this.mock = mock; 8605 // this.value = value 8606 this.dep = mock ? mockDep : new Dep(); 8607 this.vmCount = 0; 8608 def(value, '__ob__', this); 8609 if (isArray(value)) { 8610 if (!mock) { 8611 if (hasProto) { 8612 value.__proto__ = arrayMethods; 8613 /* eslint-enable no-proto */ 8614 } 8615 else { 8616 for (var i = 0, l = arrayKeys.length; i < l; i++) { 8617 var key = arrayKeys[i]; 8618 def(value, key, arrayMethods[key]); 8619 } 8620 } 8621 } 8622 if (!shallow) { 8623 this.observeArray(value); 8624 } 8625 } 8626 else { 8627 /** 8628 * Walk through all properties and convert them into 8629 * getter/setters. This method should only be called when 8630 * value type is Object. 8631 */ 8632 var keys = Object.keys(value); 8633 for (var i = 0; i < keys.length; i++) { 8634 var key = keys[i]; 8635 defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock); 8636 } 8637 } 8638 } 8639 /** 8640 * Observe a list of Array items. 8641 */ 8642 Observer.prototype.observeArray = function (value) { 8643 for (var i = 0, l = value.length; i < l; i++) { 8644 observe(value[i], false, this.mock); 8645 } 8646 }; 8647 return Observer; 8648}()); 8649// helpers 8650/** 8651 * Attempt to create an observer instance for a value, 8652 * returns the new observer if successfully observed, 8653 * or the existing observer if the value already has one. 8654 */ 8655function observe(value, shallow, ssrMockReactivity) { 8656 if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { 8657 return value.__ob__; 8658 } 8659 if (shouldObserve && 8660 (ssrMockReactivity || !isServerRendering()) && 8661 (isArray(value) || isPlainObject(value)) && 8662 Object.isExtensible(value) && 8663 !value.__v_skip /* ReactiveFlags.SKIP */ && 8664 !isRef(value) && 8665 !(value instanceof VNode)) { 8666 return new Observer(value, shallow, ssrMockReactivity); 8667 } 8668} 8669/** 8670 * Define a reactive property on an Object. 8671 */ 8672function defineReactive(obj, key, val, customSetter, shallow, mock) { 8673 var dep = new Dep(); 8674 var property = Object.getOwnPropertyDescriptor(obj, key); 8675 if (property && property.configurable === false) { 8676 return; 8677 } 8678 // cater for pre-defined getter/setters 8679 var getter = property && property.get; 8680 var setter = property && property.set; 8681 if ((!getter || setter) && 8682 (val === NO_INIITIAL_VALUE || arguments.length === 2)) { 8683 val = obj[key]; 8684 } 8685 var childOb = !shallow && observe(val, false, mock); 8686 Object.defineProperty(obj, key, { 8687 enumerable: true, 8688 configurable: true, 8689 get: function reactiveGetter() { 8690 var value = getter ? getter.call(obj) : val; 8691 if (Dep.target) { 8692 if (true) { 8693 dep.depend({ 8694 target: obj, 8695 type: "get" /* TrackOpTypes.GET */, 8696 key: key 8697 }); 8698 } 8699 else {} 8700 if (childOb) { 8701 childOb.dep.depend(); 8702 if (isArray(value)) { 8703 dependArray(value); 8704 } 8705 } 8706 } 8707 return isRef(value) && !shallow ? value.value : value; 8708 }, 8709 set: function reactiveSetter(newVal) { 8710 var value = getter ? getter.call(obj) : val; 8711 if (!hasChanged(value, newVal)) { 8712 return; 8713 } 8714 if ( true && customSetter) { 8715 customSetter(); 8716 } 8717 if (setter) { 8718 setter.call(obj, newVal); 8719 } 8720 else if (getter) { 8721 // #7981: for accessor properties without setter 8722 return; 8723 } 8724 else if (!shallow && isRef(value) && !isRef(newVal)) { 8725 value.value = newVal; 8726 return; 8727 } 8728 else { 8729 val = newVal; 8730 } 8731 childOb = !shallow && observe(newVal, false, mock); 8732 if (true) { 8733 dep.notify({ 8734 type: "set" /* TriggerOpTypes.SET */, 8735 target: obj, 8736 key: key, 8737 newValue: newVal, 8738 oldValue: value 8739 }); 8740 } 8741 else {} 8742 } 8743 }); 8744 return dep; 8745} 8746function set(target, key, val) { 8747 if ( true && (isUndef(target) || isPrimitive(target))) { 8748 warn$2("Cannot set reactive property on undefined, null, or primitive value: ".concat(target)); 8749 } 8750 if (isReadonly(target)) { 8751 true && warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly.")); 8752 return; 8753 } 8754 var ob = target.__ob__; 8755 if (isArray(target) && isValidArrayIndex(key)) { 8756 target.length = Math.max(target.length, key); 8757 target.splice(key, 1, val); 8758 // when mocking for SSR, array methods are not hijacked 8759 if (ob && !ob.shallow && ob.mock) { 8760 observe(val, false, true); 8761 } 8762 return val; 8763 } 8764 if (key in target && !(key in Object.prototype)) { 8765 target[key] = val; 8766 return val; 8767 } 8768 if (target._isVue || (ob && ob.vmCount)) { 8769 true && 8770 warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' + 8771 'at runtime - declare it upfront in the data option.'); 8772 return val; 8773 } 8774 if (!ob) { 8775 target[key] = val; 8776 return val; 8777 } 8778 defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock); 8779 if (true) { 8780 ob.dep.notify({ 8781 type: "add" /* TriggerOpTypes.ADD */, 8782 target: target, 8783 key: key, 8784 newValue: val, 8785 oldValue: undefined 8786 }); 8787 } 8788 else {} 8789 return val; 8790} 8791function del(target, key) { 8792 if ( true && (isUndef(target) || isPrimitive(target))) { 8793 warn$2("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target)); 8794 } 8795 if (isArray(target) && isValidArrayIndex(key)) { 8796 target.splice(key, 1); 8797 return; 8798 } 8799 var ob = target.__ob__; 8800 if (target._isVue || (ob && ob.vmCount)) { 8801 true && 8802 warn$2('Avoid deleting properties on a Vue instance or its root $data ' + 8803 '- just set it to null.'); 8804 return; 8805 } 8806 if (isReadonly(target)) { 8807 true && 8808 warn$2("Delete operation on key \"".concat(key, "\" failed: target is readonly.")); 8809 return; 8810 } 8811 if (!hasOwn(target, key)) { 8812 return; 8813 } 8814 delete target[key]; 8815 if (!ob) { 8816 return; 8817 } 8818 if (true) { 8819 ob.dep.notify({ 8820 type: "delete" /* TriggerOpTypes.DELETE */, 8821 target: target, 8822 key: key 8823 }); 8824 } 8825 else {} 8826} 8827/** 8828 * Collect dependencies on array elements when the array is touched, since 8829 * we cannot intercept array element access like property getters. 8830 */ 8831function dependArray(value) { 8832 for (var e = void 0, i = 0, l = value.length; i < l; i++) { 8833 e = value[i]; 8834 if (e && e.__ob__) { 8835 e.__ob__.dep.depend(); 8836 } 8837 if (isArray(e)) { 8838 dependArray(e); 8839 } 8840 } 8841} 8842 8843function reactive(target) { 8844 makeReactive(target, false); 8845 return target; 8846} 8847/** 8848 * Return a shallowly-reactive copy of the original object, where only the root 8849 * level properties are reactive. It also does not auto-unwrap refs (even at the 8850 * root level). 8851 */ 8852function shallowReactive(target) { 8853 makeReactive(target, true); 8854 def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true); 8855 return target; 8856} 8857function makeReactive(target, shallow) { 8858 // if trying to observe a readonly proxy, return the readonly version. 8859 if (!isReadonly(target)) { 8860 if (true) { 8861 if (isArray(target)) { 8862 warn$2("Avoid using Array as root value for ".concat(shallow ? "shallowReactive()" : "reactive()", " as it cannot be tracked in watch() or watchEffect(). Use ").concat(shallow ? "shallowRef()" : "ref()", " instead. This is a Vue-2-only limitation.")); 8863 } 8864 var existingOb = target && target.__ob__; 8865 if (existingOb && existingOb.shallow !== shallow) { 8866 warn$2("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow.")); 8867 } 8868 } 8869 var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */); 8870 if ( true && !ob) { 8871 if (target == null || isPrimitive(target)) { 8872 warn$2("value cannot be made reactive: ".concat(String(target))); 8873 } 8874 if (isCollectionType(target)) { 8875 warn$2("Vue 2 does not support reactive collection types such as Map or Set."); 8876 } 8877 } 8878 } 8879} 8880function isReactive(value) { 8881 if (isReadonly(value)) { 8882 return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]); 8883 } 8884 return !!(value && value.__ob__); 8885} 8886function isShallow(value) { 8887 return !!(value && value.__v_isShallow); 8888} 8889function isReadonly(value) { 8890 return !!(value && value.__v_isReadonly); 8891} 8892function isProxy(value) { 8893 return isReactive(value) || isReadonly(value); 8894} 8895function toRaw(observed) { 8896 var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */]; 8897 return raw ? toRaw(raw) : observed; 8898} 8899function markRaw(value) { 8900 // non-extensible objects won't be observed anyway 8901 if (Object.isExtensible(value)) { 8902 def(value, "__v_skip" /* ReactiveFlags.SKIP */, true); 8903 } 8904 return value; 8905} 8906/** 8907 * @internal 8908 */ 8909function isCollectionType(value) { 8910 var type = toRawType(value); 8911 return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet'); 8912} 8913 8914/** 8915 * @internal 8916 */ 8917var RefFlag = "__v_isRef"; 8918function isRef(r) { 8919 return !!(r && r.__v_isRef === true); 8920} 8921function ref$1(value) { 8922 return createRef(value, false); 8923} 8924function shallowRef(value) { 8925 return createRef(value, true); 8926} 8927function createRef(rawValue, shallow) { 8928 if (isRef(rawValue)) { 8929 return rawValue; 8930 } 8931 var ref = {}; 8932 def(ref, RefFlag, true); 8933 def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow); 8934 def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering())); 8935 return ref; 8936} 8937function triggerRef(ref) { 8938 if ( true && !ref.dep) { 8939 warn$2("received object is not a triggerable ref."); 8940 } 8941 if (true) { 8942 ref.dep && 8943 ref.dep.notify({ 8944 type: "set" /* TriggerOpTypes.SET */, 8945 target: ref, 8946 key: 'value' 8947 }); 8948 } 8949 else {} 8950} 8951function unref(ref) { 8952 return isRef(ref) ? ref.value : ref; 8953} 8954function proxyRefs(objectWithRefs) { 8955 if (isReactive(objectWithRefs)) { 8956 return objectWithRefs; 8957 } 8958 var proxy = {}; 8959 var keys = Object.keys(objectWithRefs); 8960 for (var i = 0; i < keys.length; i++) { 8961 proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]); 8962 } 8963 return proxy; 8964} 8965function proxyWithRefUnwrap(target, source, key) { 8966 Object.defineProperty(target, key, { 8967 enumerable: true, 8968 configurable: true, 8969 get: function () { 8970 var val = source[key]; 8971 if (isRef(val)) { 8972 return val.value; 8973 } 8974 else { 8975 var ob = val && val.__ob__; 8976 if (ob) 8977 ob.dep.depend(); 8978 return val; 8979 } 8980 }, 8981 set: function (value) { 8982 var oldValue = source[key]; 8983 if (isRef(oldValue) && !isRef(value)) { 8984 oldValue.value = value; 8985 } 8986 else { 8987 source[key] = value; 8988 } 8989 } 8990 }); 8991} 8992function customRef(factory) { 8993 var dep = new Dep(); 8994 var _a = factory(function () { 8995 if (true) { 8996 dep.depend({ 8997 target: ref, 8998 type: "get" /* TrackOpTypes.GET */, 8999 key: 'value' 9000 }); 9001 } 9002 else {} 9003 }, function () { 9004 if (true) { 9005 dep.notify({ 9006 target: ref, 9007 type: "set" /* TriggerOpTypes.SET */, 9008 key: 'value' 9009 }); 9010 } 9011 else {} 9012 }), get = _a.get, set = _a.set; 9013 var ref = { 9014 get value() { 9015 return get(); 9016 }, 9017 set value(newVal) { 9018 set(newVal); 9019 } 9020 }; 9021 def(ref, RefFlag, true); 9022 return ref; 9023} 9024function toRefs(object) { 9025 if ( true && !isReactive(object)) { 9026 warn$2("toRefs() expects a reactive object but received a plain one."); 9027 } 9028 var ret = isArray(object) ? new Array(object.length) : {}; 9029 for (var key in object) { 9030 ret[key] = toRef(object, key); 9031 } 9032 return ret; 9033} 9034function toRef(object, key, defaultValue) { 9035 var val = object[key]; 9036 if (isRef(val)) { 9037 return val; 9038 } 9039 var ref = { 9040 get value() { 9041 var val = object[key]; 9042 return val === undefined ? defaultValue : val; 9043 }, 9044 set value(newVal) { 9045 object[key] = newVal; 9046 } 9047 }; 9048 def(ref, RefFlag, true); 9049 return ref; 9050} 9051 9052var rawToReadonlyFlag = "__v_rawToReadonly"; 9053var rawToShallowReadonlyFlag = "__v_rawToShallowReadonly"; 9054function readonly(target) { 9055 return createReadonly(target, false); 9056} 9057function createReadonly(target, shallow) { 9058 if (!isPlainObject(target)) { 9059 if (true) { 9060 if (isArray(target)) { 9061 warn$2("Vue 2 does not support readonly arrays."); 9062 } 9063 else if (isCollectionType(target)) { 9064 warn$2("Vue 2 does not support readonly collection types such as Map or Set."); 9065 } 9066 else { 9067 warn$2("value cannot be made readonly: ".concat(typeof target)); 9068 } 9069 } 9070 return target; 9071 } 9072 if ( true && !Object.isExtensible(target)) { 9073 warn$2("Vue 2 does not support creating readonly proxy for non-extensible object."); 9074 } 9075 // already a readonly object 9076 if (isReadonly(target)) { 9077 return target; 9078 } 9079 // already has a readonly proxy 9080 var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag; 9081 var existingProxy = target[existingFlag]; 9082 if (existingProxy) { 9083 return existingProxy; 9084 } 9085 var proxy = Object.create(Object.getPrototypeOf(target)); 9086 def(target, existingFlag, proxy); 9087 def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true); 9088 def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target); 9089 if (isRef(target)) { 9090 def(proxy, RefFlag, true); 9091 } 9092 if (shallow || isShallow(target)) { 9093 def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true); 9094 } 9095 var keys = Object.keys(target); 9096 for (var i = 0; i < keys.length; i++) { 9097 defineReadonlyProperty(proxy, target, keys[i], shallow); 9098 } 9099 return proxy; 9100} 9101function defineReadonlyProperty(proxy, target, key, shallow) { 9102 Object.defineProperty(proxy, key, { 9103 enumerable: true, 9104 configurable: true, 9105 get: function () { 9106 var val = target[key]; 9107 return shallow || !isPlainObject(val) ? val : readonly(val); 9108 }, 9109 set: function () { 9110 true && 9111 warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly.")); 9112 } 9113 }); 9114} 9115/** 9116 * Returns a reactive-copy of the original object, where only the root level 9117 * properties are readonly, and does NOT unwrap refs nor recursively convert 9118 * returned properties. 9119 * This is used for creating the props proxy object for stateful components. 9120 */ 9121function shallowReadonly(target) { 9122 return createReadonly(target, true); 9123} 9124 9125function computed(getterOrOptions, debugOptions) { 9126 var getter; 9127 var setter; 9128 var onlyGetter = isFunction(getterOrOptions); 9129 if (onlyGetter) { 9130 getter = getterOrOptions; 9131 setter = true 9132 ? function () { 9133 warn$2('Write operation failed: computed value is readonly'); 9134 } 9135 : 0; 9136 } 9137 else { 9138 getter = getterOrOptions.get; 9139 setter = getterOrOptions.set; 9140 } 9141 var watcher = isServerRendering() 9142 ? null 9143 : new Watcher(currentInstance, getter, noop, { lazy: true }); 9144 if ( true && watcher && debugOptions) { 9145 watcher.onTrack = debugOptions.onTrack; 9146 watcher.onTrigger = debugOptions.onTrigger; 9147 } 9148 var ref = { 9149 // some libs rely on the presence effect for checking computed refs 9150 // from normal refs, but the implementation doesn't matter 9151 effect: watcher, 9152 get value() { 9153 if (watcher) { 9154 if (watcher.dirty) { 9155 watcher.evaluate(); 9156 } 9157 if (Dep.target) { 9158 if ( true && Dep.target.onTrack) { 9159 Dep.target.onTrack({ 9160 effect: Dep.target, 9161 target: ref, 9162 type: "get" /* TrackOpTypes.GET */, 9163 key: 'value' 9164 }); 9165 } 9166 watcher.depend(); 9167 } 9168 return watcher.value; 9169 } 9170 else { 9171 return getter(); 9172 } 9173 }, 9174 set value(newVal) { 9175 setter(newVal); 9176 } 9177 }; 9178 def(ref, RefFlag, true); 9179 def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter); 9180 return ref; 9181} 9182 9183var mark; 9184var measure; 9185if (true) { 9186 var perf_1 = inBrowser && window.performance; 9187 /* istanbul ignore if */ 9188 if (perf_1 && 9189 // @ts-ignore 9190 perf_1.mark && 9191 // @ts-ignore 9192 perf_1.measure && 9193 // @ts-ignore 9194 perf_1.clearMarks && 9195 // @ts-ignore 9196 perf_1.clearMeasures) { 9197 mark = function (tag) { return perf_1.mark(tag); }; 9198 measure = function (name, startTag, endTag) { 9199 perf_1.measure(name, startTag, endTag); 9200 perf_1.clearMarks(startTag); 9201 perf_1.clearMarks(endTag); 9202 // perf.clearMeasures(name) 9203 }; 9204 } 9205} 9206 9207var normalizeEvent = cached(function (name) { 9208 var passive = name.charAt(0) === '&'; 9209 name = passive ? name.slice(1) : name; 9210 var once = name.charAt(0) === '~'; // Prefixed last, checked first 9211 name = once ? name.slice(1) : name; 9212 var capture = name.charAt(0) === '!'; 9213 name = capture ? name.slice(1) : name; 9214 return { 9215 name: name, 9216 once: once, 9217 capture: capture, 9218 passive: passive 9219 }; 9220}); 9221function createFnInvoker(fns, vm) { 9222 function invoker() { 9223 var fns = invoker.fns; 9224 if (isArray(fns)) { 9225 var cloned = fns.slice(); 9226 for (var i = 0; i < cloned.length; i++) { 9227 invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler"); 9228 } 9229 } 9230 else { 9231 // return handler return value for single handlers 9232 return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler"); 9233 } 9234 } 9235 invoker.fns = fns; 9236 return invoker; 9237} 9238function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) { 9239 var name, cur, old, event; 9240 for (name in on) { 9241 cur = on[name]; 9242 old = oldOn[name]; 9243 event = normalizeEvent(name); 9244 if (isUndef(cur)) { 9245 true && 9246 warn$2("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm); 9247 } 9248 else if (isUndef(old)) { 9249 if (isUndef(cur.fns)) { 9250 cur = on[name] = createFnInvoker(cur, vm); 9251 } 9252 if (isTrue(event.once)) { 9253 cur = on[name] = createOnceHandler(event.name, cur, event.capture); 9254 } 9255 add(event.name, cur, event.capture, event.passive, event.params); 9256 } 9257 else if (cur !== old) { 9258 old.fns = cur; 9259 on[name] = old; 9260 } 9261 } 9262 for (name in oldOn) { 9263 if (isUndef(on[name])) { 9264 event = normalizeEvent(name); 9265 remove(event.name, oldOn[name], event.capture); 9266 } 9267 } 9268} 9269 9270function mergeVNodeHook(def, hookKey, hook) { 9271 if (def instanceof VNode) { 9272 def = def.data.hook || (def.data.hook = {}); 9273 } 9274 var invoker; 9275 var oldHook = def[hookKey]; 9276 function wrappedHook() { 9277 hook.apply(this, arguments); 9278 // important: remove merged hook to ensure it's called only once 9279 // and prevent memory leak 9280 remove$2(invoker.fns, wrappedHook); 9281 } 9282 if (isUndef(oldHook)) { 9283 // no existing hook 9284 invoker = createFnInvoker([wrappedHook]); 9285 } 9286 else { 9287 /* istanbul ignore if */ 9288 if (isDef(oldHook.fns) && isTrue(oldHook.merged)) { 9289 // already a merged invoker 9290 invoker = oldHook; 9291 invoker.fns.push(wrappedHook); 9292 } 9293 else { 9294 // existing plain hook 9295 invoker = createFnInvoker([oldHook, wrappedHook]); 9296 } 9297 } 9298 invoker.merged = true; 9299 def[hookKey] = invoker; 9300} 9301 9302function extractPropsFromVNodeData(data, Ctor, tag) { 9303 // we are only extracting raw values here. 9304 // validation and default values are handled in the child 9305 // component itself. 9306 var propOptions = Ctor.options.props; 9307 if (isUndef(propOptions)) { 9308 return; 9309 } 9310 var res = {}; 9311 var attrs = data.attrs, props = data.props; 9312 if (isDef(attrs) || isDef(props)) { 9313 for (var key in propOptions) { 9314 var altKey = hyphenate(key); 9315 if (true) { 9316 var keyInLowerCase = key.toLowerCase(); 9317 if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) { 9318 tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") + 9319 "".concat(formatComponentName( 9320 // @ts-expect-error tag is string 9321 tag || Ctor), ", but the declared prop name is") + 9322 " \"".concat(key, "\". ") + 9323 "Note that HTML attributes are case-insensitive and camelCased " + 9324 "props need to use their kebab-case equivalents when using in-DOM " + 9325 "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\".")); 9326 } 9327 } 9328 checkProp(res, props, key, altKey, true) || 9329 checkProp(res, attrs, key, altKey, false); 9330 } 9331 } 9332 return res; 9333} 9334function checkProp(res, hash, key, altKey, preserve) { 9335 if (isDef(hash)) { 9336 if (hasOwn(hash, key)) { 9337 res[key] = hash[key]; 9338 if (!preserve) { 9339 delete hash[key]; 9340 } 9341 return true; 9342 } 9343 else if (hasOwn(hash, altKey)) { 9344 res[key] = hash[altKey]; 9345 if (!preserve) { 9346 delete hash[altKey]; 9347 } 9348 return true; 9349 } 9350 } 9351 return false; 9352} 9353 9354// The template compiler attempts to minimize the need for normalization by 9355// statically analyzing the template at compile time. 9356// 9357// For plain HTML markup, normalization can be completely skipped because the 9358// generated render function is guaranteed to return Array<VNode>. There are 9359// two cases where extra normalization is needed: 9360// 1. When the children contains components - because a functional component 9361// may return an Array instead of a single root. In this case, just a simple 9362// normalization is needed - if any child is an Array, we flatten the whole 9363// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep 9364// because functional components already normalize their own children. 9365function simpleNormalizeChildren(children) { 9366 for (var i = 0; i < children.length; i++) { 9367 if (isArray(children[i])) { 9368 return Array.prototype.concat.apply([], children); 9369 } 9370 } 9371 return children; 9372} 9373// 2. When the children contains constructs that always generated nested Arrays, 9374// e.g. <template>, <slot>, v-for, or when the children is provided by user 9375// with hand-written render functions / JSX. In such cases a full normalization 9376// is needed to cater to all possible types of children values. 9377function normalizeChildren(children) { 9378 return isPrimitive(children) 9379 ? [createTextVNode(children)] 9380 : isArray(children) 9381 ? normalizeArrayChildren(children) 9382 : undefined; 9383} 9384function isTextNode(node) { 9385 return isDef(node) && isDef(node.text) && isFalse(node.isComment); 9386} 9387function normalizeArrayChildren(children, nestedIndex) { 9388 var res = []; 9389 var i, c, lastIndex, last; 9390 for (i = 0; i < children.length; i++) { 9391 c = children[i]; 9392 if (isUndef(c) || typeof c === 'boolean') 9393 continue; 9394 lastIndex = res.length - 1; 9395 last = res[lastIndex]; 9396 // nested 9397 if (isArray(c)) { 9398 if (c.length > 0) { 9399 c = normalizeArrayChildren(c, "".concat(nestedIndex || '', "_").concat(i)); 9400 // merge adjacent text nodes 9401 if (isTextNode(c[0]) && isTextNode(last)) { 9402 res[lastIndex] = createTextVNode(last.text + c[0].text); 9403 c.shift(); 9404 } 9405 res.push.apply(res, c); 9406 } 9407 } 9408 else if (isPrimitive(c)) { 9409 if (isTextNode(last)) { 9410 // merge adjacent text nodes 9411 // this is necessary for SSR hydration because text nodes are 9412 // essentially merged when rendered to HTML strings 9413 res[lastIndex] = createTextVNode(last.text + c); 9414 } 9415 else if (c !== '') { 9416 // convert primitive to vnode 9417 res.push(createTextVNode(c)); 9418 } 9419 } 9420 else { 9421 if (isTextNode(c) && isTextNode(last)) { 9422 // merge adjacent text nodes 9423 res[lastIndex] = createTextVNode(last.text + c.text); 9424 } 9425 else { 9426 // default key for nested array children (likely generated by v-for) 9427 if (isTrue(children._isVList) && 9428 isDef(c.tag) && 9429 isUndef(c.key) && 9430 isDef(nestedIndex)) { 9431 c.key = "__vlist".concat(nestedIndex, "_").concat(i, "__"); 9432 } 9433 res.push(c); 9434 } 9435 } 9436 } 9437 return res; 9438} 9439 9440var SIMPLE_NORMALIZE = 1; 9441var ALWAYS_NORMALIZE = 2; 9442// wrapper function for providing a more flexible interface 9443// without getting yelled at by flow 9444function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) { 9445 if (isArray(data) || isPrimitive(data)) { 9446 normalizationType = children; 9447 children = data; 9448 data = undefined; 9449 } 9450 if (isTrue(alwaysNormalize)) { 9451 normalizationType = ALWAYS_NORMALIZE; 9452 } 9453 return _createElement(context, tag, data, children, normalizationType); 9454} 9455function _createElement(context, tag, data, children, normalizationType) { 9456 if (isDef(data) && isDef(data.__ob__)) { 9457 true && 9458 warn$2("Avoid using observed data object as vnode data: ".concat(JSON.stringify(data), "\n") + 'Always create fresh vnode data objects in each render!', context); 9459 return createEmptyVNode(); 9460 } 9461 // object syntax in v-bind 9462 if (isDef(data) && isDef(data.is)) { 9463 tag = data.is; 9464 } 9465 if (!tag) { 9466 // in case of component :is set to falsy value 9467 return createEmptyVNode(); 9468 } 9469 // warn against non-primitive key 9470 if ( true && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) { 9471 warn$2('Avoid using non-primitive value as key, ' + 9472 'use string/number value instead.', context); 9473 } 9474 // support single function children as default scoped slot 9475 if (isArray(children) && isFunction(children[0])) { 9476 data = data || {}; 9477 data.scopedSlots = { default: children[0] }; 9478 children.length = 0; 9479 } 9480 if (normalizationType === ALWAYS_NORMALIZE) { 9481 children = normalizeChildren(children); 9482 } 9483 else if (normalizationType === SIMPLE_NORMALIZE) { 9484 children = simpleNormalizeChildren(children); 9485 } 9486 var vnode, ns; 9487 if (typeof tag === 'string') { 9488 var Ctor = void 0; 9489 ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag); 9490 if (config.isReservedTag(tag)) { 9491 // platform built-in elements 9492 if ( true && 9493 isDef(data) && 9494 isDef(data.nativeOn) && 9495 data.tag !== 'component') { 9496 warn$2("The .native modifier for v-on is only valid on components but it was used on <".concat(tag, ">."), context); 9497 } 9498 vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context); 9499 } 9500 else if ((!data || !data.pre) && 9501 isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) { 9502 // component 9503 vnode = createComponent(Ctor, data, context, children, tag); 9504 } 9505 else { 9506 // unknown or unlisted namespaced elements 9507 // check at runtime because it may get assigned a namespace when its 9508 // parent normalizes children 9509 vnode = new VNode(tag, data, children, undefined, undefined, context); 9510 } 9511 } 9512 else { 9513 // direct component options / constructor 9514 vnode = createComponent(tag, data, context, children); 9515 } 9516 if (isArray(vnode)) { 9517 return vnode; 9518 } 9519 else if (isDef(vnode)) { 9520 if (isDef(ns)) 9521 applyNS(vnode, ns); 9522 if (isDef(data)) 9523 registerDeepBindings(data); 9524 return vnode; 9525 } 9526 else { 9527 return createEmptyVNode(); 9528 } 9529} 9530function applyNS(vnode, ns, force) { 9531 vnode.ns = ns; 9532 if (vnode.tag === 'foreignObject') { 9533 // use default namespace inside foreignObject 9534 ns = undefined; 9535 force = true; 9536 } 9537 if (isDef(vnode.children)) { 9538 for (var i = 0, l = vnode.children.length; i < l; i++) { 9539 var child = vnode.children[i]; 9540 if (isDef(child.tag) && 9541 (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) { 9542 applyNS(child, ns, force); 9543 } 9544 } 9545 } 9546} 9547// ref #5318 9548// necessary to ensure parent re-render when deep bindings like :style and 9549// :class are used on slot nodes 9550function registerDeepBindings(data) { 9551 if (isObject(data.style)) { 9552 traverse(data.style); 9553 } 9554 if (isObject(data.class)) { 9555 traverse(data.class); 9556 } 9557} 9558 9559/** 9560 * Runtime helper for rendering v-for lists. 9561 */ 9562function renderList(val, render) { 9563 var ret = null, i, l, keys, key; 9564 if (isArray(val) || typeof val === 'string') { 9565 ret = new Array(val.length); 9566 for (i = 0, l = val.length; i < l; i++) { 9567 ret[i] = render(val[i], i); 9568 } 9569 } 9570 else if (typeof val === 'number') { 9571 ret = new Array(val); 9572 for (i = 0; i < val; i++) { 9573 ret[i] = render(i + 1, i); 9574 } 9575 } 9576 else if (isObject(val)) { 9577 if (hasSymbol && val[Symbol.iterator]) { 9578 ret = []; 9579 var iterator = val[Symbol.iterator](); 9580 var result = iterator.next(); 9581 while (!result.done) { 9582 ret.push(render(result.value, ret.length)); 9583 result = iterator.next(); 9584 } 9585 } 9586 else { 9587 keys = Object.keys(val); 9588 ret = new Array(keys.length); 9589 for (i = 0, l = keys.length; i < l; i++) { 9590 key = keys[i]; 9591 ret[i] = render(val[key], key, i); 9592 } 9593 } 9594 } 9595 if (!isDef(ret)) { 9596 ret = []; 9597 } 9598 ret._isVList = true; 9599 return ret; 9600} 9601 9602/** 9603 * Runtime helper for rendering <slot> 9604 */ 9605function renderSlot(name, fallbackRender, props, bindObject) { 9606 var scopedSlotFn = this.$scopedSlots[name]; 9607 var nodes; 9608 if (scopedSlotFn) { 9609 // scoped slot 9610 props = props || {}; 9611 if (bindObject) { 9612 if ( true && !isObject(bindObject)) { 9613 warn$2('slot v-bind without argument expects an Object', this); 9614 } 9615 props = extend(extend({}, bindObject), props); 9616 } 9617 nodes = 9618 scopedSlotFn(props) || 9619 (isFunction(fallbackRender) ? fallbackRender() : fallbackRender); 9620 } 9621 else { 9622 nodes = 9623 this.$slots[name] || 9624 (isFunction(fallbackRender) ? fallbackRender() : fallbackRender); 9625 } 9626 var target = props && props.slot; 9627 if (target) { 9628 return this.$createElement('template', { slot: target }, nodes); 9629 } 9630 else { 9631 return nodes; 9632 } 9633} 9634 9635/** 9636 * Runtime helper for resolving filters 9637 */ 9638function resolveFilter(id) { 9639 return resolveAsset(this.$options, 'filters', id, true) || identity; 9640} 9641 9642function isKeyNotMatch(expect, actual) { 9643 if (isArray(expect)) { 9644 return expect.indexOf(actual) === -1; 9645 } 9646 else { 9647 return expect !== actual; 9648 } 9649} 9650/** 9651 * Runtime helper for checking keyCodes from config. 9652 * exposed as Vue.prototype._k 9653 * passing in eventKeyName as last argument separately for backwards compat 9654 */ 9655function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) { 9656 var mappedKeyCode = config.keyCodes[key] || builtInKeyCode; 9657 if (builtInKeyName && eventKeyName && !config.keyCodes[key]) { 9658 return isKeyNotMatch(builtInKeyName, eventKeyName); 9659 } 9660 else if (mappedKeyCode) { 9661 return isKeyNotMatch(mappedKeyCode, eventKeyCode); 9662 } 9663 else if (eventKeyName) { 9664 return hyphenate(eventKeyName) !== key; 9665 } 9666 return eventKeyCode === undefined; 9667} 9668 9669/** 9670 * Runtime helper for merging v-bind="object" into a VNode's data. 9671 */ 9672function bindObjectProps(data, tag, value, asProp, isSync) { 9673 if (value) { 9674 if (!isObject(value)) { 9675 true && 9676 warn$2('v-bind without argument expects an Object or Array value', this); 9677 } 9678 else { 9679 if (isArray(value)) { 9680 value = toObject(value); 9681 } 9682 var hash = void 0; 9683 var _loop_1 = function (key) { 9684 if (key === 'class' || key === 'style' || isReservedAttribute(key)) { 9685 hash = data; 9686 } 9687 else { 9688 var type = data.attrs && data.attrs.type; 9689 hash = 9690 asProp || config.mustUseProp(tag, type, key) 9691 ? data.domProps || (data.domProps = {}) 9692 : data.attrs || (data.attrs = {}); 9693 } 9694 var camelizedKey = camelize(key); 9695 var hyphenatedKey = hyphenate(key); 9696 if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) { 9697 hash[key] = value[key]; 9698 if (isSync) { 9699 var on = data.on || (data.on = {}); 9700 on["update:".concat(key)] = function ($event) { 9701 value[key] = $event; 9702 }; 9703 } 9704 } 9705 }; 9706 for (var key in value) { 9707 _loop_1(key); 9708 } 9709 } 9710 } 9711 return data; 9712} 9713 9714/** 9715 * Runtime helper for rendering static trees. 9716 */ 9717function renderStatic(index, isInFor) { 9718 var cached = this._staticTrees || (this._staticTrees = []); 9719 var tree = cached[index]; 9720 // if has already-rendered static tree and not inside v-for, 9721 // we can reuse the same tree. 9722 if (tree && !isInFor) { 9723 return tree; 9724 } 9725 // otherwise, render a fresh tree. 9726 tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates 9727 ); 9728 markStatic$1(tree, "__static__".concat(index), false); 9729 return tree; 9730} 9731/** 9732 * Runtime helper for v-once. 9733 * Effectively it means marking the node as static with a unique key. 9734 */ 9735function markOnce(tree, index, key) { 9736 markStatic$1(tree, "__once__".concat(index).concat(key ? "_".concat(key) : ""), true); 9737 return tree; 9738} 9739function markStatic$1(tree, key, isOnce) { 9740 if (isArray(tree)) { 9741 for (var i = 0; i < tree.length; i++) { 9742 if (tree[i] && typeof tree[i] !== 'string') { 9743 markStaticNode(tree[i], "".concat(key, "_").concat(i), isOnce); 9744 } 9745 } 9746 } 9747 else { 9748 markStaticNode(tree, key, isOnce); 9749 } 9750} 9751function markStaticNode(node, key, isOnce) { 9752 node.isStatic = true; 9753 node.key = key; 9754 node.isOnce = isOnce; 9755} 9756 9757function bindObjectListeners(data, value) { 9758 if (value) { 9759 if (!isPlainObject(value)) { 9760 true && warn$2('v-on without argument expects an Object value', this); 9761 } 9762 else { 9763 var on = (data.on = data.on ? extend({}, data.on) : {}); 9764 for (var key in value) { 9765 var existing = on[key]; 9766 var ours = value[key]; 9767 on[key] = existing ? [].concat(existing, ours) : ours; 9768 } 9769 } 9770 } 9771 return data; 9772} 9773 9774function resolveScopedSlots(fns, res, 9775// the following are added in 2.6 9776hasDynamicKeys, contentHashKey) { 9777 res = res || { $stable: !hasDynamicKeys }; 9778 for (var i = 0; i < fns.length; i++) { 9779 var slot = fns[i]; 9780 if (isArray(slot)) { 9781 resolveScopedSlots(slot, res, hasDynamicKeys); 9782 } 9783 else if (slot) { 9784 // marker for reverse proxying v-slot without scope on this.$slots 9785 // @ts-expect-error 9786 if (slot.proxy) { 9787 // @ts-expect-error 9788 slot.fn.proxy = true; 9789 } 9790 res[slot.key] = slot.fn; 9791 } 9792 } 9793 if (contentHashKey) { 9794 res.$key = contentHashKey; 9795 } 9796 return res; 9797} 9798 9799// helper to process dynamic keys for dynamic arguments in v-bind and v-on. 9800function bindDynamicKeys(baseObj, values) { 9801 for (var i = 0; i < values.length; i += 2) { 9802 var key = values[i]; 9803 if (typeof key === 'string' && key) { 9804 baseObj[values[i]] = values[i + 1]; 9805 } 9806 else if ( true && key !== '' && key !== null) { 9807 // null is a special value for explicitly removing a binding 9808 warn$2("Invalid value for dynamic directive argument (expected string or null): ".concat(key), this); 9809 } 9810 } 9811 return baseObj; 9812} 9813// helper to dynamically append modifier runtime markers to event names. 9814// ensure only append when value is already string, otherwise it will be cast 9815// to string and cause the type check to miss. 9816function prependModifier(value, symbol) { 9817 return typeof value === 'string' ? symbol + value : value; 9818} 9819 9820function installRenderHelpers(target) { 9821 target._o = markOnce; 9822 target._n = toNumber; 9823 target._s = toString; 9824 target._l = renderList; 9825 target._t = renderSlot; 9826 target._q = looseEqual; 9827 target._i = looseIndexOf; 9828 target._m = renderStatic; 9829 target._f = resolveFilter; 9830 target._k = checkKeyCodes; 9831 target._b = bindObjectProps; 9832 target._v = createTextVNode; 9833 target._e = createEmptyVNode; 9834 target._u = resolveScopedSlots; 9835 target._g = bindObjectListeners; 9836 target._d = bindDynamicKeys; 9837 target._p = prependModifier; 9838} 9839 9840/** 9841 * Runtime helper for resolving raw children VNodes into a slot object. 9842 */ 9843function resolveSlots(children, context) { 9844 if (!children || !children.length) { 9845 return {}; 9846 } 9847 var slots = {}; 9848 for (var i = 0, l = children.length; i < l; i++) { 9849 var child = children[i]; 9850 var data = child.data; 9851 // remove slot attribute if the node is resolved as a Vue slot node 9852 if (data && data.attrs && data.attrs.slot) { 9853 delete data.attrs.slot; 9854 } 9855 // named slots should only be respected if the vnode was rendered in the 9856 // same context. 9857 if ((child.context === context || child.fnContext === context) && 9858 data && 9859 data.slot != null) { 9860 var name_1 = data.slot; 9861 var slot = slots[name_1] || (slots[name_1] = []); 9862 if (child.tag === 'template') { 9863 slot.push.apply(slot, child.children || []); 9864 } 9865 else { 9866 slot.push(child); 9867 } 9868 } 9869 else { 9870 (slots.default || (slots.default = [])).push(child); 9871 } 9872 } 9873 // ignore slots that contains only whitespace 9874 for (var name_2 in slots) { 9875 if (slots[name_2].every(isWhitespace)) { 9876 delete slots[name_2]; 9877 } 9878 } 9879 return slots; 9880} 9881function isWhitespace(node) { 9882 return (node.isComment && !node.asyncFactory) || node.text === ' '; 9883} 9884 9885function isAsyncPlaceholder(node) { 9886 // @ts-expect-error not really boolean type 9887 return node.isComment && node.asyncFactory; 9888} 9889 9890function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) { 9891 var res; 9892 var hasNormalSlots = Object.keys(normalSlots).length > 0; 9893 var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots; 9894 var key = scopedSlots && scopedSlots.$key; 9895 if (!scopedSlots) { 9896 res = {}; 9897 } 9898 else if (scopedSlots._normalized) { 9899 // fast path 1: child component re-render only, parent did not change 9900 return scopedSlots._normalized; 9901 } 9902 else if (isStable && 9903 prevScopedSlots && 9904 prevScopedSlots !== emptyObject && 9905 key === prevScopedSlots.$key && 9906 !hasNormalSlots && 9907 !prevScopedSlots.$hasNormal) { 9908 // fast path 2: stable scoped slots w/ no normal slots to proxy, 9909 // only need to normalize once 9910 return prevScopedSlots; 9911 } 9912 else { 9913 res = {}; 9914 for (var key_1 in scopedSlots) { 9915 if (scopedSlots[key_1] && key_1[0] !== '$') { 9916 res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]); 9917 } 9918 } 9919 } 9920 // expose normal slots on scopedSlots 9921 for (var key_2 in normalSlots) { 9922 if (!(key_2 in res)) { 9923 res[key_2] = proxyNormalSlot(normalSlots, key_2); 9924 } 9925 } 9926 // avoriaz seems to mock a non-extensible $scopedSlots object 9927 // and when that is passed down this would cause an error 9928 if (scopedSlots && Object.isExtensible(scopedSlots)) { 9929 scopedSlots._normalized = res; 9930 } 9931 def(res, '$stable', isStable); 9932 def(res, '$key', key); 9933 def(res, '$hasNormal', hasNormalSlots); 9934 return res; 9935} 9936function normalizeScopedSlot(vm, normalSlots, key, fn) { 9937 var normalized = function () { 9938 var cur = currentInstance; 9939 setCurrentInstance(vm); 9940 var res = arguments.length ? fn.apply(null, arguments) : fn({}); 9941 res = 9942 res && typeof res === 'object' && !isArray(res) 9943 ? [res] // single vnode 9944 : normalizeChildren(res); 9945 var vnode = res && res[0]; 9946 setCurrentInstance(cur); 9947 return res && 9948 (!vnode || 9949 (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391 9950 ? undefined 9951 : res; 9952 }; 9953 // this is a slot using the new v-slot syntax without scope. although it is 9954 // compiled as a scoped slot, render fn users would expect it to be present 9955 // on this.$slots because the usage is semantically a normal slot. 9956 if (fn.proxy) { 9957 Object.defineProperty(normalSlots, key, { 9958 get: normalized, 9959 enumerable: true, 9960 configurable: true 9961 }); 9962 } 9963 return normalized; 9964} 9965function proxyNormalSlot(slots, key) { 9966 return function () { return slots[key]; }; 9967} 9968 9969function initSetup(vm) { 9970 var options = vm.$options; 9971 var setup = options.setup; 9972 if (setup) { 9973 var ctx = (vm._setupContext = createSetupContext(vm)); 9974 setCurrentInstance(vm); 9975 pushTarget(); 9976 var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, "setup"); 9977 popTarget(); 9978 setCurrentInstance(); 9979 if (isFunction(setupResult)) { 9980 // render function 9981 // @ts-ignore 9982 options.render = setupResult; 9983 } 9984 else if (isObject(setupResult)) { 9985 // bindings 9986 if ( true && setupResult instanceof VNode) { 9987 warn$2("setup() should not return VNodes directly - " + 9988 "return a render function instead."); 9989 } 9990 vm._setupState = setupResult; 9991 // __sfc indicates compiled bindings from <script setup> 9992 if (!setupResult.__sfc) { 9993 for (var key in setupResult) { 9994 if (!isReserved(key)) { 9995 proxyWithRefUnwrap(vm, setupResult, key); 9996 } 9997 else if (true) { 9998 warn$2("Avoid using variables that start with _ or $ in setup()."); 9999 } 10000 } 10001 } 10002 else { 10003 // exposed for compiled render fn 10004 var proxy = (vm._setupProxy = {}); 10005 for (var key in setupResult) { 10006 if (key !== '__sfc') { 10007 proxyWithRefUnwrap(proxy, setupResult, key); 10008 } 10009 } 10010 } 10011 } 10012 else if ( true && setupResult !== undefined) { 10013 warn$2("setup() should return an object. Received: ".concat(setupResult === null ? 'null' : typeof setupResult)); 10014 } 10015 } 10016} 10017function createSetupContext(vm) { 10018 var exposeCalled = false; 10019 return { 10020 get attrs() { 10021 if (!vm._attrsProxy) { 10022 var proxy = (vm._attrsProxy = {}); 10023 def(proxy, '_v_attr_proxy', true); 10024 syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs'); 10025 } 10026 return vm._attrsProxy; 10027 }, 10028 get listeners() { 10029 if (!vm._listenersProxy) { 10030 var proxy = (vm._listenersProxy = {}); 10031 syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners'); 10032 } 10033 return vm._listenersProxy; 10034 }, 10035 get slots() { 10036 return initSlotsProxy(vm); 10037 }, 10038 emit: bind$1(vm.$emit, vm), 10039 expose: function (exposed) { 10040 if (true) { 10041 if (exposeCalled) { 10042 warn$2("expose() should be called only once per setup().", vm); 10043 } 10044 exposeCalled = true; 10045 } 10046 if (exposed) { 10047 Object.keys(exposed).forEach(function (key) { 10048 return proxyWithRefUnwrap(vm, exposed, key); 10049 }); 10050 } 10051 } 10052 }; 10053} 10054function syncSetupProxy(to, from, prev, instance, type) { 10055 var changed = false; 10056 for (var key in from) { 10057 if (!(key in to)) { 10058 changed = true; 10059 defineProxyAttr(to, key, instance, type); 10060 } 10061 else if (from[key] !== prev[key]) { 10062 changed = true; 10063 } 10064 } 10065 for (var key in to) { 10066 if (!(key in from)) { 10067 changed = true; 10068 delete to[key]; 10069 } 10070 } 10071 return changed; 10072} 10073function defineProxyAttr(proxy, key, instance, type) { 10074 Object.defineProperty(proxy, key, { 10075 enumerable: true, 10076 configurable: true, 10077 get: function () { 10078 return instance[type][key]; 10079 } 10080 }); 10081} 10082function initSlotsProxy(vm) { 10083 if (!vm._slotsProxy) { 10084 syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots); 10085 } 10086 return vm._slotsProxy; 10087} 10088function syncSetupSlots(to, from) { 10089 for (var key in from) { 10090 to[key] = from[key]; 10091 } 10092 for (var key in to) { 10093 if (!(key in from)) { 10094 delete to[key]; 10095 } 10096 } 10097} 10098/** 10099 * @internal use manual type def because public setup context type relies on 10100 * legacy VNode types 10101 */ 10102function useSlots() { 10103 return getContext().slots; 10104} 10105/** 10106 * @internal use manual type def because public setup context type relies on 10107 * legacy VNode types 10108 */ 10109function useAttrs() { 10110 return getContext().attrs; 10111} 10112/** 10113 * Vue 2 only 10114 * @internal use manual type def because public setup context type relies on 10115 * legacy VNode types 10116 */ 10117function useListeners() { 10118 return getContext().listeners; 10119} 10120function getContext() { 10121 if ( true && !currentInstance) { 10122 warn$2("useContext() called without active instance."); 10123 } 10124 var vm = currentInstance; 10125 return vm._setupContext || (vm._setupContext = createSetupContext(vm)); 10126} 10127/** 10128 * Runtime helper for merging default declarations. Imported by compiled code 10129 * only. 10130 * @internal 10131 */ 10132function mergeDefaults(raw, defaults) { 10133 var props = isArray(raw) 10134 ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {}) 10135 : raw; 10136 for (var key in defaults) { 10137 var opt = props[key]; 10138 if (opt) { 10139 if (isArray(opt) || isFunction(opt)) { 10140 props[key] = { type: opt, default: defaults[key] }; 10141 } 10142 else { 10143 opt.default = defaults[key]; 10144 } 10145 } 10146 else if (opt === null) { 10147 props[key] = { default: defaults[key] }; 10148 } 10149 else if (true) { 10150 warn$2("props default key \"".concat(key, "\" has no corresponding declaration.")); 10151 } 10152 } 10153 return props; 10154} 10155 10156function initRender(vm) { 10157 vm._vnode = null; // the root of the child tree 10158 vm._staticTrees = null; // v-once cached trees 10159 var options = vm.$options; 10160 var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree 10161 var renderContext = parentVnode && parentVnode.context; 10162 vm.$slots = resolveSlots(options._renderChildren, renderContext); 10163 vm.$scopedSlots = parentVnode 10164 ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots) 10165 : emptyObject; 10166 // bind the createElement fn to this instance 10167 // so that we get proper render context inside it. 10168 // args order: tag, data, children, normalizationType, alwaysNormalize 10169 // internal version is used by render functions compiled from templates 10170 // @ts-expect-error 10171 vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); }; 10172 // normalization is always applied for the public version, used in 10173 // user-written render functions. 10174 // @ts-expect-error 10175 vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); }; 10176 // $attrs & $listeners are exposed for easier HOC creation. 10177 // they need to be reactive so that HOCs using them are always updated 10178 var parentData = parentVnode && parentVnode.data; 10179 /* istanbul ignore else */ 10180 if (true) { 10181 defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () { 10182 !isUpdatingChildComponent && warn$2("$attrs is readonly.", vm); 10183 }, true); 10184 defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () { 10185 !isUpdatingChildComponent && warn$2("$listeners is readonly.", vm); 10186 }, true); 10187 } 10188 else {} 10189} 10190var currentRenderingInstance = null; 10191function renderMixin(Vue) { 10192 // install runtime convenience helpers 10193 installRenderHelpers(Vue.prototype); 10194 Vue.prototype.$nextTick = function (fn) { 10195 return nextTick(fn, this); 10196 }; 10197 Vue.prototype._render = function () { 10198 var vm = this; 10199 var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode; 10200 if (_parentVnode && vm._isMounted) { 10201 vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots); 10202 if (vm._slotsProxy) { 10203 syncSetupSlots(vm._slotsProxy, vm.$scopedSlots); 10204 } 10205 } 10206 // set parent vnode. this allows render functions to have access 10207 // to the data on the placeholder node. 10208 vm.$vnode = _parentVnode; 10209 // render self 10210 var vnode; 10211 try { 10212 // There's no need to maintain a stack because all render fns are called 10213 // separately from one another. Nested component's render fns are called 10214 // when parent component is patched. 10215 setCurrentInstance(vm); 10216 currentRenderingInstance = vm; 10217 vnode = render.call(vm._renderProxy, vm.$createElement); 10218 } 10219 catch (e) { 10220 handleError(e, vm, "render"); 10221 // return error render result, 10222 // or previous vnode to prevent render error causing blank component 10223 /* istanbul ignore else */ 10224 if ( true && vm.$options.renderError) { 10225 try { 10226 vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e); 10227 } 10228 catch (e) { 10229 handleError(e, vm, "renderError"); 10230 vnode = vm._vnode; 10231 } 10232 } 10233 else { 10234 vnode = vm._vnode; 10235 } 10236 } 10237 finally { 10238 currentRenderingInstance = null; 10239 setCurrentInstance(); 10240 } 10241 // if the returned array contains only a single node, allow it 10242 if (isArray(vnode) && vnode.length === 1) { 10243 vnode = vnode[0]; 10244 } 10245 // return empty vnode in case the render function errored out 10246 if (!(vnode instanceof VNode)) { 10247 if ( true && isArray(vnode)) { 10248 warn$2('Multiple root nodes returned from render function. Render function ' + 10249 'should return a single root node.', vm); 10250 } 10251 vnode = createEmptyVNode(); 10252 } 10253 // set parent 10254 vnode.parent = _parentVnode; 10255 return vnode; 10256 }; 10257} 10258 10259function ensureCtor(comp, base) { 10260 if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) { 10261 comp = comp.default; 10262 } 10263 return isObject(comp) ? base.extend(comp) : comp; 10264} 10265function createAsyncPlaceholder(factory, data, context, children, tag) { 10266 var node = createEmptyVNode(); 10267 node.asyncFactory = factory; 10268 node.asyncMeta = { data: data, context: context, children: children, tag: tag }; 10269 return node; 10270} 10271function resolveAsyncComponent(factory, baseCtor) { 10272 if (isTrue(factory.error) && isDef(factory.errorComp)) { 10273 return factory.errorComp; 10274 } 10275 if (isDef(factory.resolved)) { 10276 return factory.resolved; 10277 } 10278 var owner = currentRenderingInstance; 10279 if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) { 10280 // already pending 10281 factory.owners.push(owner); 10282 } 10283 if (isTrue(factory.loading) && isDef(factory.loadingComp)) { 10284 return factory.loadingComp; 10285 } 10286 if (owner && !isDef(factory.owners)) { 10287 var owners_1 = (factory.owners = [owner]); 10288 var sync_1 = true; 10289 var timerLoading_1 = null; 10290 var timerTimeout_1 = null; 10291 owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); }); 10292 var forceRender_1 = function (renderCompleted) { 10293 for (var i = 0, l = owners_1.length; i < l; i++) { 10294 owners_1[i].$forceUpdate(); 10295 } 10296 if (renderCompleted) { 10297 owners_1.length = 0; 10298 if (timerLoading_1 !== null) { 10299 clearTimeout(timerLoading_1); 10300 timerLoading_1 = null; 10301 } 10302 if (timerTimeout_1 !== null) { 10303 clearTimeout(timerTimeout_1); 10304 timerTimeout_1 = null; 10305 } 10306 } 10307 }; 10308 var resolve = once(function (res) { 10309 // cache resolved 10310 factory.resolved = ensureCtor(res, baseCtor); 10311 // invoke callbacks only if this is not a synchronous resolve 10312 // (async resolves are shimmed as synchronous during SSR) 10313 if (!sync_1) { 10314 forceRender_1(true); 10315 } 10316 else { 10317 owners_1.length = 0; 10318 } 10319 }); 10320 var reject_1 = once(function (reason) { 10321 true && 10322 warn$2("Failed to resolve async component: ".concat(String(factory)) + 10323 (reason ? "\nReason: ".concat(reason) : '')); 10324 if (isDef(factory.errorComp)) { 10325 factory.error = true; 10326 forceRender_1(true); 10327 } 10328 }); 10329 var res_1 = factory(resolve, reject_1); 10330 if (isObject(res_1)) { 10331 if (isPromise(res_1)) { 10332 // () => Promise 10333 if (isUndef(factory.resolved)) { 10334 res_1.then(resolve, reject_1); 10335 } 10336 } 10337 else if (isPromise(res_1.component)) { 10338 res_1.component.then(resolve, reject_1); 10339 if (isDef(res_1.error)) { 10340 factory.errorComp = ensureCtor(res_1.error, baseCtor); 10341 } 10342 if (isDef(res_1.loading)) { 10343 factory.loadingComp = ensureCtor(res_1.loading, baseCtor); 10344 if (res_1.delay === 0) { 10345 factory.loading = true; 10346 } 10347 else { 10348 // @ts-expect-error NodeJS timeout type 10349 timerLoading_1 = setTimeout(function () { 10350 timerLoading_1 = null; 10351 if (isUndef(factory.resolved) && isUndef(factory.error)) { 10352 factory.loading = true; 10353 forceRender_1(false); 10354 } 10355 }, res_1.delay || 200); 10356 } 10357 } 10358 if (isDef(res_1.timeout)) { 10359 // @ts-expect-error NodeJS timeout type 10360 timerTimeout_1 = setTimeout(function () { 10361 timerTimeout_1 = null; 10362 if (isUndef(factory.resolved)) { 10363 reject_1( true ? "timeout (".concat(res_1.timeout, "ms)") : 0); 10364 } 10365 }, res_1.timeout); 10366 } 10367 } 10368 } 10369 sync_1 = false; 10370 // return in case resolved synchronously 10371 return factory.loading ? factory.loadingComp : factory.resolved; 10372 } 10373} 10374 10375function getFirstComponentChild(children) { 10376 if (isArray(children)) { 10377 for (var i = 0; i < children.length; i++) { 10378 var c = children[i]; 10379 if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) { 10380 return c; 10381 } 10382 } 10383 } 10384} 10385 10386function initEvents(vm) { 10387 vm._events = Object.create(null); 10388 vm._hasHookEvent = false; 10389 // init parent attached events 10390 var listeners = vm.$options._parentListeners; 10391 if (listeners) { 10392 updateComponentListeners(vm, listeners); 10393 } 10394} 10395var target$1; 10396function add$1(event, fn) { 10397 target$1.$on(event, fn); 10398} 10399function remove$1(event, fn) { 10400 target$1.$off(event, fn); 10401} 10402function createOnceHandler$1(event, fn) { 10403 var _target = target$1; 10404 return function onceHandler() { 10405 var res = fn.apply(null, arguments); 10406 if (res !== null) { 10407 _target.$off(event, onceHandler); 10408 } 10409 }; 10410} 10411function updateComponentListeners(vm, listeners, oldListeners) { 10412 target$1 = vm; 10413 updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm); 10414 target$1 = undefined; 10415} 10416function eventsMixin(Vue) { 10417 var hookRE = /^hook:/; 10418 Vue.prototype.$on = function (event, fn) { 10419 var vm = this; 10420 if (isArray(event)) { 10421 for (var i = 0, l = event.length; i < l; i++) { 10422 vm.$on(event[i], fn); 10423 } 10424 } 10425 else { 10426 (vm._events[event] || (vm._events[event] = [])).push(fn); 10427 // optimize hook:event cost by using a boolean flag marked at registration 10428 // instead of a hash lookup 10429 if (hookRE.test(event)) { 10430 vm._hasHookEvent = true; 10431 } 10432 } 10433 return vm; 10434 }; 10435 Vue.prototype.$once = function (event, fn) { 10436 var vm = this; 10437 function on() { 10438 vm.$off(event, on); 10439 fn.apply(vm, arguments); 10440 } 10441 on.fn = fn; 10442 vm.$on(event, on); 10443 return vm; 10444 }; 10445 Vue.prototype.$off = function (event, fn) { 10446 var vm = this; 10447 // all 10448 if (!arguments.length) { 10449 vm._events = Object.create(null); 10450 return vm; 10451 } 10452 // array of events 10453 if (isArray(event)) { 10454 for (var i_1 = 0, l = event.length; i_1 < l; i_1++) { 10455 vm.$off(event[i_1], fn); 10456 } 10457 return vm; 10458 } 10459 // specific event 10460 var cbs = vm._events[event]; 10461 if (!cbs) { 10462 return vm; 10463 } 10464 if (!fn) { 10465 vm._events[event] = null; 10466 return vm; 10467 } 10468 // specific handler 10469 var cb; 10470 var i = cbs.length; 10471 while (i--) { 10472 cb = cbs[i]; 10473 if (cb === fn || cb.fn === fn) { 10474 cbs.splice(i, 1); 10475 break; 10476 } 10477 } 10478 return vm; 10479 }; 10480 Vue.prototype.$emit = function (event) { 10481 var vm = this; 10482 if (true) { 10483 var lowerCaseEvent = event.toLowerCase(); 10484 if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) { 10485 tip("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") + 10486 "".concat(formatComponentName(vm), " but the handler is registered for \"").concat(event, "\". ") + 10487 "Note that HTML attributes are case-insensitive and you cannot use " + 10488 "v-on to listen to camelCase events when using in-DOM templates. " + 10489 "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\".")); 10490 } 10491 } 10492 var cbs = vm._events[event]; 10493 if (cbs) { 10494 cbs = cbs.length > 1 ? toArray(cbs) : cbs; 10495 var args = toArray(arguments, 1); 10496 var info = "event handler for \"".concat(event, "\""); 10497 for (var i = 0, l = cbs.length; i < l; i++) { 10498 invokeWithErrorHandling(cbs[i], vm, args, vm, info); 10499 } 10500 } 10501 return vm; 10502 }; 10503} 10504 10505var activeInstance = null; 10506var isUpdatingChildComponent = false; 10507function setActiveInstance(vm) { 10508 var prevActiveInstance = activeInstance; 10509 activeInstance = vm; 10510 return function () { 10511 activeInstance = prevActiveInstance; 10512 }; 10513} 10514function initLifecycle(vm) { 10515 var options = vm.$options; 10516 // locate first non-abstract parent 10517 var parent = options.parent; 10518 if (parent && !options.abstract) { 10519 while (parent.$options.abstract && parent.$parent) { 10520 parent = parent.$parent; 10521 } 10522 parent.$children.push(vm); 10523 } 10524 vm.$parent = parent; 10525 vm.$root = parent ? parent.$root : vm; 10526 vm.$children = []; 10527 vm.$refs = {}; 10528 vm._provided = parent ? parent._provided : Object.create(null); 10529 vm._watcher = null; 10530 vm._inactive = null; 10531 vm._directInactive = false; 10532 vm._isMounted = false; 10533 vm._isDestroyed = false; 10534 vm._isBeingDestroyed = false; 10535} 10536function lifecycleMixin(Vue) { 10537 Vue.prototype._update = function (vnode, hydrating) { 10538 var vm = this; 10539 var prevEl = vm.$el; 10540 var prevVnode = vm._vnode; 10541 var restoreActiveInstance = setActiveInstance(vm); 10542 vm._vnode = vnode; 10543 // Vue.prototype.__patch__ is injected in entry points 10544 // based on the rendering backend used. 10545 if (!prevVnode) { 10546 // initial render 10547 vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */); 10548 } 10549 else { 10550 // updates 10551 vm.$el = vm.__patch__(prevVnode, vnode); 10552 } 10553 restoreActiveInstance(); 10554 // update __vue__ reference 10555 if (prevEl) { 10556 prevEl.__vue__ = null; 10557 } 10558 if (vm.$el) { 10559 vm.$el.__vue__ = vm; 10560 } 10561 // if parent is an HOC, update its $el as well 10562 var wrapper = vm; 10563 while (wrapper && 10564 wrapper.$vnode && 10565 wrapper.$parent && 10566 wrapper.$vnode === wrapper.$parent._vnode) { 10567 wrapper.$parent.$el = wrapper.$el; 10568 wrapper = wrapper.$parent; 10569 } 10570 // updated hook is called by the scheduler to ensure that children are 10571 // updated in a parent's updated hook. 10572 }; 10573 Vue.prototype.$forceUpdate = function () { 10574 var vm = this; 10575 if (vm._watcher) { 10576 vm._watcher.update(); 10577 } 10578 }; 10579 Vue.prototype.$destroy = function () { 10580 var vm = this; 10581 if (vm._isBeingDestroyed) { 10582 return; 10583 } 10584 callHook$1(vm, 'beforeDestroy'); 10585 vm._isBeingDestroyed = true; 10586 // remove self from parent 10587 var parent = vm.$parent; 10588 if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) { 10589 remove$2(parent.$children, vm); 10590 } 10591 // teardown scope. this includes both the render watcher and other 10592 // watchers created 10593 vm._scope.stop(); 10594 // remove reference from data ob 10595 // frozen object may not have observer. 10596 if (vm._data.__ob__) { 10597 vm._data.__ob__.vmCount--; 10598 } 10599 // call the last hook... 10600 vm._isDestroyed = true; 10601 // invoke destroy hooks on current rendered tree 10602 vm.__patch__(vm._vnode, null); 10603 // fire destroyed hook 10604 callHook$1(vm, 'destroyed'); 10605 // turn off all instance listeners. 10606 vm.$off(); 10607 // remove __vue__ reference 10608 if (vm.$el) { 10609 vm.$el.__vue__ = null; 10610 } 10611 // release circular reference (#6759) 10612 if (vm.$vnode) { 10613 vm.$vnode.parent = null; 10614 } 10615 }; 10616} 10617function mountComponent(vm, el, hydrating) { 10618 vm.$el = el; 10619 if (!vm.$options.render) { 10620 // @ts-expect-error invalid type 10621 vm.$options.render = createEmptyVNode; 10622 if (true) { 10623 /* istanbul ignore if */ 10624 if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') || 10625 vm.$options.el || 10626 el) { 10627 warn$2('You are using the runtime-only build of Vue where the template ' + 10628 'compiler is not available. Either pre-compile the templates into ' + 10629 'render functions, or use the compiler-included build.', vm); 10630 } 10631 else { 10632 warn$2('Failed to mount component: template or render function not defined.', vm); 10633 } 10634 } 10635 } 10636 callHook$1(vm, 'beforeMount'); 10637 var updateComponent; 10638 /* istanbul ignore if */ 10639 if ( true && config.performance && mark) { 10640 updateComponent = function () { 10641 var name = vm._name; 10642 var id = vm._uid; 10643 var startTag = "vue-perf-start:".concat(id); 10644 var endTag = "vue-perf-end:".concat(id); 10645 mark(startTag); 10646 var vnode = vm._render(); 10647 mark(endTag); 10648 measure("vue ".concat(name, " render"), startTag, endTag); 10649 mark(startTag); 10650 vm._update(vnode, hydrating); 10651 mark(endTag); 10652 measure("vue ".concat(name, " patch"), startTag, endTag); 10653 }; 10654 } 10655 else { 10656 updateComponent = function () { 10657 vm._update(vm._render(), hydrating); 10658 }; 10659 } 10660 var watcherOptions = { 10661 before: function () { 10662 if (vm._isMounted && !vm._isDestroyed) { 10663 callHook$1(vm, 'beforeUpdate'); 10664 } 10665 } 10666 }; 10667 if (true) { 10668 watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); }; 10669 watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); }; 10670 } 10671 // we set this to vm._watcher inside the watcher's constructor 10672 // since the watcher's initial patch may call $forceUpdate (e.g. inside child 10673 // component's mounted hook), which relies on vm._watcher being already defined 10674 new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */); 10675 hydrating = false; 10676 // flush buffer for flush: "pre" watchers queued in setup() 10677 var preWatchers = vm._preWatchers; 10678 if (preWatchers) { 10679 for (var i = 0; i < preWatchers.length; i++) { 10680 preWatchers[i].run(); 10681 } 10682 } 10683 // manually mounted instance, call mounted on self 10684 // mounted is called for render-created child components in its inserted hook 10685 if (vm.$vnode == null) { 10686 vm._isMounted = true; 10687 callHook$1(vm, 'mounted'); 10688 } 10689 return vm; 10690} 10691function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) { 10692 if (true) { 10693 isUpdatingChildComponent = true; 10694 } 10695 // determine whether component has slot children 10696 // we need to do this before overwriting $options._renderChildren. 10697 // check if there are dynamic scopedSlots (hand-written or compiled but with 10698 // dynamic slot names). Static scoped slots compiled from template has the 10699 // "$stable" marker. 10700 var newScopedSlots = parentVnode.data.scopedSlots; 10701 var oldScopedSlots = vm.$scopedSlots; 10702 var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) || 10703 (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) || 10704 (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) || 10705 (!newScopedSlots && vm.$scopedSlots.$key)); 10706 // Any static slot children from the parent may have changed during parent's 10707 // update. Dynamic scoped slots may also have changed. In such cases, a forced 10708 // update is necessary to ensure correctness. 10709 var needsForceUpdate = !!(renderChildren || // has new static slots 10710 vm.$options._renderChildren || // has old static slots 10711 hasDynamicScopedSlot); 10712 var prevVNode = vm.$vnode; 10713 vm.$options._parentVnode = parentVnode; 10714 vm.$vnode = parentVnode; // update vm's placeholder node without re-render 10715 if (vm._vnode) { 10716 // update child tree's parent 10717 vm._vnode.parent = parentVnode; 10718 } 10719 vm.$options._renderChildren = renderChildren; 10720 // update $attrs and $listeners hash 10721 // these are also reactive so they may trigger child update if the child 10722 // used them during render 10723 var attrs = parentVnode.data.attrs || emptyObject; 10724 if (vm._attrsProxy) { 10725 // force update if attrs are accessed and has changed since it may be 10726 // passed to a child component. 10727 if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) { 10728 needsForceUpdate = true; 10729 } 10730 } 10731 vm.$attrs = attrs; 10732 // update listeners 10733 listeners = listeners || emptyObject; 10734 var prevListeners = vm.$options._parentListeners; 10735 if (vm._listenersProxy) { 10736 syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners'); 10737 } 10738 vm.$listeners = vm.$options._parentListeners = listeners; 10739 updateComponentListeners(vm, listeners, prevListeners); 10740 // update props 10741 if (propsData && vm.$options.props) { 10742 toggleObserving(false); 10743 var props = vm._props; 10744 var propKeys = vm.$options._propKeys || []; 10745 for (var i = 0; i < propKeys.length; i++) { 10746 var key = propKeys[i]; 10747 var propOptions = vm.$options.props; // wtf flow? 10748 props[key] = validateProp(key, propOptions, propsData, vm); 10749 } 10750 toggleObserving(true); 10751 // keep a copy of raw propsData 10752 vm.$options.propsData = propsData; 10753 } 10754 // resolve slots + force update if has children 10755 if (needsForceUpdate) { 10756 vm.$slots = resolveSlots(renderChildren, parentVnode.context); 10757 vm.$forceUpdate(); 10758 } 10759 if (true) { 10760 isUpdatingChildComponent = false; 10761 } 10762} 10763function isInInactiveTree(vm) { 10764 while (vm && (vm = vm.$parent)) { 10765 if (vm._inactive) 10766 return true; 10767 } 10768 return false; 10769} 10770function activateChildComponent(vm, direct) { 10771 if (direct) { 10772 vm._directInactive = false; 10773 if (isInInactiveTree(vm)) { 10774 return; 10775 } 10776 } 10777 else if (vm._directInactive) { 10778 return; 10779 } 10780 if (vm._inactive || vm._inactive === null) { 10781 vm._inactive = false; 10782 for (var i = 0; i < vm.$children.length; i++) { 10783 activateChildComponent(vm.$children[i]); 10784 } 10785 callHook$1(vm, 'activated'); 10786 } 10787} 10788function deactivateChildComponent(vm, direct) { 10789 if (direct) { 10790 vm._directInactive = true; 10791 if (isInInactiveTree(vm)) { 10792 return; 10793 } 10794 } 10795 if (!vm._inactive) { 10796 vm._inactive = true; 10797 for (var i = 0; i < vm.$children.length; i++) { 10798 deactivateChildComponent(vm.$children[i]); 10799 } 10800 callHook$1(vm, 'deactivated'); 10801 } 10802} 10803function callHook$1(vm, hook, args, setContext) { 10804 if (setContext === void 0) { setContext = true; } 10805 // #7573 disable dep collection when invoking lifecycle hooks 10806 pushTarget(); 10807 var prev = currentInstance; 10808 setContext && setCurrentInstance(vm); 10809 var handlers = vm.$options[hook]; 10810 var info = "".concat(hook, " hook"); 10811 if (handlers) { 10812 for (var i = 0, j = handlers.length; i < j; i++) { 10813 invokeWithErrorHandling(handlers[i], vm, args || null, vm, info); 10814 } 10815 } 10816 if (vm._hasHookEvent) { 10817 vm.$emit('hook:' + hook); 10818 } 10819 setContext && setCurrentInstance(prev); 10820 popTarget(); 10821} 10822 10823var MAX_UPDATE_COUNT = 100; 10824var queue = []; 10825var activatedChildren = []; 10826var has = {}; 10827var circular = {}; 10828var waiting = false; 10829var flushing = false; 10830var index$1 = 0; 10831/** 10832 * Reset the scheduler's state. 10833 */ 10834function resetSchedulerState() { 10835 index$1 = queue.length = activatedChildren.length = 0; 10836 has = {}; 10837 if (true) { 10838 circular = {}; 10839 } 10840 waiting = flushing = false; 10841} 10842// Async edge case #6566 requires saving the timestamp when event listeners are 10843// attached. However, calling performance.now() has a perf overhead especially 10844// if the page has thousands of event listeners. Instead, we take a timestamp 10845// every time the scheduler flushes and use that for all event listeners 10846// attached during that flush. 10847var currentFlushTimestamp = 0; 10848// Async edge case fix requires storing an event listener's attach timestamp. 10849var getNow = Date.now; 10850// Determine what event timestamp the browser is using. Annoyingly, the 10851// timestamp can either be hi-res (relative to page load) or low-res 10852// (relative to UNIX epoch), so in order to compare time we have to use the 10853// same timestamp type when saving the flush timestamp. 10854// All IE versions use low-res event timestamps, and have problematic clock 10855// implementations (#9632) 10856if (inBrowser && !isIE) { 10857 var performance_1 = window.performance; 10858 if (performance_1 && 10859 typeof performance_1.now === 'function' && 10860 getNow() > document.createEvent('Event').timeStamp) { 10861 // if the event timestamp, although evaluated AFTER the Date.now(), is 10862 // smaller than it, it means the event is using a hi-res timestamp, 10863 // and we need to use the hi-res version for event listener timestamps as 10864 // well. 10865 getNow = function () { return performance_1.now(); }; 10866 } 10867} 10868var sortCompareFn = function (a, b) { 10869 if (a.post) { 10870 if (!b.post) 10871 return 1; 10872 } 10873 else if (b.post) { 10874 return -1; 10875 } 10876 return a.id - b.id; 10877}; 10878/** 10879 * Flush both queues and run the watchers. 10880 */ 10881function flushSchedulerQueue() { 10882 currentFlushTimestamp = getNow(); 10883 flushing = true; 10884 var watcher, id; 10885 // Sort queue before flush. 10886 // This ensures that: 10887 // 1. Components are updated from parent to child. (because parent is always 10888 // created before the child) 10889 // 2. A component's user watchers are run before its render watcher (because 10890 // user watchers are created before the render watcher) 10891 // 3. If a component is destroyed during a parent component's watcher run, 10892 // its watchers can be skipped. 10893 queue.sort(sortCompareFn); 10894 // do not cache length because more watchers might be pushed 10895 // as we run existing watchers 10896 for (index$1 = 0; index$1 < queue.length; index$1++) { 10897 watcher = queue[index$1]; 10898 if (watcher.before) { 10899 watcher.before(); 10900 } 10901 id = watcher.id; 10902 has[id] = null; 10903 watcher.run(); 10904 // in dev build, check and stop circular updates. 10905 if ( true && has[id] != null) { 10906 circular[id] = (circular[id] || 0) + 1; 10907 if (circular[id] > MAX_UPDATE_COUNT) { 10908 warn$2('You may have an infinite update loop ' + 10909 (watcher.user 10910 ? "in watcher with expression \"".concat(watcher.expression, "\"") 10911 : "in a component render function."), watcher.vm); 10912 break; 10913 } 10914 } 10915 } 10916 // keep copies of post queues before resetting state 10917 var activatedQueue = activatedChildren.slice(); 10918 var updatedQueue = queue.slice(); 10919 resetSchedulerState(); 10920 // call component updated and activated hooks 10921 callActivatedHooks(activatedQueue); 10922 callUpdatedHooks(updatedQueue); 10923 cleanupDeps(); 10924 // devtool hook 10925 /* istanbul ignore if */ 10926 if (devtools && config.devtools) { 10927 devtools.emit('flush'); 10928 } 10929} 10930function callUpdatedHooks(queue) { 10931 var i = queue.length; 10932 while (i--) { 10933 var watcher = queue[i]; 10934 var vm = watcher.vm; 10935 if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) { 10936 callHook$1(vm, 'updated'); 10937 } 10938 } 10939} 10940/** 10941 * Queue a kept-alive component that was activated during patch. 10942 * The queue will be processed after the entire tree has been patched. 10943 */ 10944function queueActivatedComponent(vm) { 10945 // setting _inactive to false here so that a render function can 10946 // rely on checking whether it's in an inactive tree (e.g. router-view) 10947 vm._inactive = false; 10948 activatedChildren.push(vm); 10949} 10950function callActivatedHooks(queue) { 10951 for (var i = 0; i < queue.length; i++) { 10952 queue[i]._inactive = true; 10953 activateChildComponent(queue[i], true /* true */); 10954 } 10955} 10956/** 10957 * Push a watcher into the watcher queue. 10958 * Jobs with duplicate IDs will be skipped unless it's 10959 * pushed when the queue is being flushed. 10960 */ 10961function queueWatcher(watcher) { 10962 var id = watcher.id; 10963 if (has[id] != null) { 10964 return; 10965 } 10966 if (watcher === Dep.target && watcher.noRecurse) { 10967 return; 10968 } 10969 has[id] = true; 10970 if (!flushing) { 10971 queue.push(watcher); 10972 } 10973 else { 10974 // if already flushing, splice the watcher based on its id 10975 // if already past its id, it will be run next immediately. 10976 var i = queue.length - 1; 10977 while (i > index$1 && queue[i].id > watcher.id) { 10978 i--; 10979 } 10980 queue.splice(i + 1, 0, watcher); 10981 } 10982 // queue the flush 10983 if (!waiting) { 10984 waiting = true; 10985 if ( true && !config.async) { 10986 flushSchedulerQueue(); 10987 return; 10988 } 10989 nextTick(flushSchedulerQueue); 10990 } 10991} 10992 10993var WATCHER = "watcher"; 10994var WATCHER_CB = "".concat(WATCHER, " callback"); 10995var WATCHER_GETTER = "".concat(WATCHER, " getter"); 10996var WATCHER_CLEANUP = "".concat(WATCHER, " cleanup"); 10997// Simple effect. 10998function watchEffect(effect, options) { 10999 return doWatch(effect, null, options); 11000} 11001function watchPostEffect(effect, options) { 11002 return doWatch(effect, null, ( true 11003 ? __assign(__assign({}, options), { flush: 'post' }) : 0)); 11004} 11005function watchSyncEffect(effect, options) { 11006 return doWatch(effect, null, ( true 11007 ? __assign(__assign({}, options), { flush: 'sync' }) : 0)); 11008} 11009// initial value for watchers to trigger on undefined initial values 11010var INITIAL_WATCHER_VALUE = {}; 11011// implementation 11012function watch(source, cb, options) { 11013 if ( true && typeof cb !== 'function') { 11014 warn$2("`watch(fn, options?)` signature has been moved to a separate API. " + 11015 "Use `watchEffect(fn, options?)` instead. `watch` now only " + 11016 "supports `watch(source, cb, options?) signature."); 11017 } 11018 return doWatch(source, cb, options); 11019} 11020function doWatch(source, cb, _a) { 11021 var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger; 11022 if ( true && !cb) { 11023 if (immediate !== undefined) { 11024 warn$2("watch() \"immediate\" option is only respected when using the " + 11025 "watch(source, callback, options?) signature."); 11026 } 11027 if (deep !== undefined) { 11028 warn$2("watch() \"deep\" option is only respected when using the " + 11029 "watch(source, callback, options?) signature."); 11030 } 11031 } 11032 var warnInvalidSource = function (s) { 11033 warn$2("Invalid watch source: ".concat(s, ". A watch source can only be a getter/effect ") + 11034 "function, a ref, a reactive object, or an array of these types."); 11035 }; 11036 var instance = currentInstance; 11037 var call = function (fn, type, args) { 11038 if (args === void 0) { args = null; } 11039 return invokeWithErrorHandling(fn, null, args, instance, type); 11040 }; 11041 var getter; 11042 var forceTrigger = false; 11043 var isMultiSource = false; 11044 if (isRef(source)) { 11045 getter = function () { return source.value; }; 11046 forceTrigger = isShallow(source); 11047 } 11048 else if (isReactive(source)) { 11049 getter = function () { 11050 source.__ob__.dep.depend(); 11051 return source; 11052 }; 11053 deep = true; 11054 } 11055 else if (isArray(source)) { 11056 isMultiSource = true; 11057 forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); }); 11058 getter = function () { 11059 return source.map(function (s) { 11060 if (isRef(s)) { 11061 return s.value; 11062 } 11063 else if (isReactive(s)) { 11064 return traverse(s); 11065 } 11066 else if (isFunction(s)) { 11067 return call(s, WATCHER_GETTER); 11068 } 11069 else { 11070 true && warnInvalidSource(s); 11071 } 11072 }); 11073 }; 11074 } 11075 else if (isFunction(source)) { 11076 if (cb) { 11077 // getter with cb 11078 getter = function () { return call(source, WATCHER_GETTER); }; 11079 } 11080 else { 11081 // no cb -> simple effect 11082 getter = function () { 11083 if (instance && instance._isDestroyed) { 11084 return; 11085 } 11086 if (cleanup) { 11087 cleanup(); 11088 } 11089 return call(source, WATCHER, [onCleanup]); 11090 }; 11091 } 11092 } 11093 else { 11094 getter = noop; 11095 true && warnInvalidSource(source); 11096 } 11097 if (cb && deep) { 11098 var baseGetter_1 = getter; 11099 getter = function () { return traverse(baseGetter_1()); }; 11100 } 11101 var cleanup; 11102 var onCleanup = function (fn) { 11103 cleanup = watcher.onStop = function () { 11104 call(fn, WATCHER_CLEANUP); 11105 }; 11106 }; 11107 // in SSR there is no need to setup an actual effect, and it should be noop 11108 // unless it's eager 11109 if (isServerRendering()) { 11110 // we will also not call the invalidate callback (+ runner is not set up) 11111 onCleanup = noop; 11112 if (!cb) { 11113 getter(); 11114 } 11115 else if (immediate) { 11116 call(cb, WATCHER_CB, [ 11117 getter(), 11118 isMultiSource ? [] : undefined, 11119 onCleanup 11120 ]); 11121 } 11122 return noop; 11123 } 11124 var watcher = new Watcher(currentInstance, getter, noop, { 11125 lazy: true 11126 }); 11127 watcher.noRecurse = !cb; 11128 var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE; 11129 // overwrite default run 11130 watcher.run = function () { 11131 if (!watcher.active) { 11132 return; 11133 } 11134 if (cb) { 11135 // watch(source, cb) 11136 var newValue = watcher.get(); 11137 if (deep || 11138 forceTrigger || 11139 (isMultiSource 11140 ? newValue.some(function (v, i) { 11141 return hasChanged(v, oldValue[i]); 11142 }) 11143 : hasChanged(newValue, oldValue))) { 11144 // cleanup before running cb again 11145 if (cleanup) { 11146 cleanup(); 11147 } 11148 call(cb, WATCHER_CB, [ 11149 newValue, 11150 // pass undefined as the old value when it's changed for the first time 11151 oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue, 11152 onCleanup 11153 ]); 11154 oldValue = newValue; 11155 } 11156 } 11157 else { 11158 // watchEffect 11159 watcher.get(); 11160 } 11161 }; 11162 if (flush === 'sync') { 11163 watcher.update = watcher.run; 11164 } 11165 else if (flush === 'post') { 11166 watcher.post = true; 11167 watcher.update = function () { return queueWatcher(watcher); }; 11168 } 11169 else { 11170 // pre 11171 watcher.update = function () { 11172 if (instance && instance === currentInstance && !instance._isMounted) { 11173 // pre-watcher triggered before 11174 var buffer = instance._preWatchers || (instance._preWatchers = []); 11175 if (buffer.indexOf(watcher) < 0) 11176 buffer.push(watcher); 11177 } 11178 else { 11179 queueWatcher(watcher); 11180 } 11181 }; 11182 } 11183 if (true) { 11184 watcher.onTrack = onTrack; 11185 watcher.onTrigger = onTrigger; 11186 } 11187 // initial run 11188 if (cb) { 11189 if (immediate) { 11190 watcher.run(); 11191 } 11192 else { 11193 oldValue = watcher.get(); 11194 } 11195 } 11196 else if (flush === 'post' && instance) { 11197 instance.$once('hook:mounted', function () { return watcher.get(); }); 11198 } 11199 else { 11200 watcher.get(); 11201 } 11202 return function () { 11203 watcher.teardown(); 11204 }; 11205} 11206 11207var activeEffectScope; 11208var EffectScope = /** @class */ (function () { 11209 function EffectScope(detached) { 11210 if (detached === void 0) { detached = false; } 11211 this.detached = detached; 11212 /** 11213 * @internal 11214 */ 11215 this.active = true; 11216 /** 11217 * @internal 11218 */ 11219 this.effects = []; 11220 /** 11221 * @internal 11222 */ 11223 this.cleanups = []; 11224 this.parent = activeEffectScope; 11225 if (!detached && activeEffectScope) { 11226 this.index = 11227 (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1; 11228 } 11229 } 11230 EffectScope.prototype.run = function (fn) { 11231 if (this.active) { 11232 var currentEffectScope = activeEffectScope; 11233 try { 11234 activeEffectScope = this; 11235 return fn(); 11236 } 11237 finally { 11238 activeEffectScope = currentEffectScope; 11239 } 11240 } 11241 else if (true) { 11242 warn$2("cannot run an inactive effect scope."); 11243 } 11244 }; 11245 /** 11246 * This should only be called on non-detached scopes 11247 * @internal 11248 */ 11249 EffectScope.prototype.on = function () { 11250 activeEffectScope = this; 11251 }; 11252 /** 11253 * This should only be called on non-detached scopes 11254 * @internal 11255 */ 11256 EffectScope.prototype.off = function () { 11257 activeEffectScope = this.parent; 11258 }; 11259 EffectScope.prototype.stop = function (fromParent) { 11260 if (this.active) { 11261 var i = void 0, l = void 0; 11262 for (i = 0, l = this.effects.length; i < l; i++) { 11263 this.effects[i].teardown(); 11264 } 11265 for (i = 0, l = this.cleanups.length; i < l; i++) { 11266 this.cleanups[i](); 11267 } 11268 if (this.scopes) { 11269 for (i = 0, l = this.scopes.length; i < l; i++) { 11270 this.scopes[i].stop(true); 11271 } 11272 } 11273 // nested scope, dereference from parent to avoid memory leaks 11274 if (!this.detached && this.parent && !fromParent) { 11275 // optimized O(1) removal 11276 var last = this.parent.scopes.pop(); 11277 if (last && last !== this) { 11278 this.parent.scopes[this.index] = last; 11279 last.index = this.index; 11280 } 11281 } 11282 this.parent = undefined; 11283 this.active = false; 11284 } 11285 }; 11286 return EffectScope; 11287}()); 11288function effectScope(detached) { 11289 return new EffectScope(detached); 11290} 11291/** 11292 * @internal 11293 */ 11294function recordEffectScope(effect, scope) { 11295 if (scope === void 0) { scope = activeEffectScope; } 11296 if (scope && scope.active) { 11297 scope.effects.push(effect); 11298 } 11299} 11300function getCurrentScope() { 11301 return activeEffectScope; 11302} 11303function onScopeDispose(fn) { 11304 if (activeEffectScope) { 11305 activeEffectScope.cleanups.push(fn); 11306 } 11307 else if (true) { 11308 warn$2("onScopeDispose() is called when there is no active effect scope" + 11309 " to be associated with."); 11310 } 11311} 11312 11313function provide(key, value) { 11314 if (!currentInstance) { 11315 if (true) { 11316 warn$2("provide() can only be used inside setup()."); 11317 } 11318 } 11319 else { 11320 // TS doesn't allow symbol as index type 11321 resolveProvided(currentInstance)[key] = value; 11322 } 11323} 11324function resolveProvided(vm) { 11325 // by default an instance inherits its parent's provides object 11326 // but when it needs to provide values of its own, it creates its 11327 // own provides object using parent provides object as prototype. 11328 // this way in `inject` we can simply look up injections from direct 11329 // parent and let the prototype chain do the work. 11330 var existing = vm._provided; 11331 var parentProvides = vm.$parent && vm.$parent._provided; 11332 if (parentProvides === existing) { 11333 return (vm._provided = Object.create(parentProvides)); 11334 } 11335 else { 11336 return existing; 11337 } 11338} 11339function inject(key, defaultValue, treatDefaultAsFactory) { 11340 if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; } 11341 // fallback to `currentRenderingInstance` so that this can be called in 11342 // a functional component 11343 var instance = currentInstance; 11344 if (instance) { 11345 // #2400 11346 // to support `app.use` plugins, 11347 // fallback to appContext's `provides` if the instance is at root 11348 var provides = instance.$parent && instance.$parent._provided; 11349 if (provides && key in provides) { 11350 // TS doesn't allow symbol as index type 11351 return provides[key]; 11352 } 11353 else if (arguments.length > 1) { 11354 return treatDefaultAsFactory && isFunction(defaultValue) 11355 ? defaultValue.call(instance) 11356 : defaultValue; 11357 } 11358 else if (true) { 11359 warn$2("injection \"".concat(String(key), "\" not found.")); 11360 } 11361 } 11362 else if (true) { 11363 warn$2("inject() can only be used inside setup() or functional components."); 11364 } 11365} 11366 11367/** 11368 * @internal this function needs manual public type declaration because it relies 11369 * on previously manually authored types from Vue 2 11370 */ 11371function h(type, props, children) { 11372 if (!currentInstance) { 11373 true && 11374 warn$2("globally imported h() can only be invoked when there is an active " + 11375 "component instance, e.g. synchronously in a component's render or setup function."); 11376 } 11377 return createElement$1(currentInstance, type, props, children, 2, true); 11378} 11379 11380function handleError(err, vm, info) { 11381 // Deactivate deps tracking while processing error handler to avoid possible infinite rendering. 11382 // See: https://github.com/vuejs/vuex/issues/1505 11383 pushTarget(); 11384 try { 11385 if (vm) { 11386 var cur = vm; 11387 while ((cur = cur.$parent)) { 11388 var hooks = cur.$options.errorCaptured; 11389 if (hooks) { 11390 for (var i = 0; i < hooks.length; i++) { 11391 try { 11392 var capture = hooks[i].call(cur, err, vm, info) === false; 11393 if (capture) 11394 return; 11395 } 11396 catch (e) { 11397 globalHandleError(e, cur, 'errorCaptured hook'); 11398 } 11399 } 11400 } 11401 } 11402 } 11403 globalHandleError(err, vm, info); 11404 } 11405 finally { 11406 popTarget(); 11407 } 11408} 11409function invokeWithErrorHandling(handler, context, args, vm, info) { 11410 var res; 11411 try { 11412 res = args ? handler.apply(context, args) : handler.call(context); 11413 if (res && !res._isVue && isPromise(res) && !res._handled) { 11414 res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); }); 11415 res._handled = true; 11416 } 11417 } 11418 catch (e) { 11419 handleError(e, vm, info); 11420 } 11421 return res; 11422} 11423function globalHandleError(err, vm, info) { 11424 if (config.errorHandler) { 11425 try { 11426 return config.errorHandler.call(null, err, vm, info); 11427 } 11428 catch (e) { 11429 // if the user intentionally throws the original error in the handler, 11430 // do not log it twice 11431 if (e !== err) { 11432 logError(e, null, 'config.errorHandler'); 11433 } 11434 } 11435 } 11436 logError(err, vm, info); 11437} 11438function logError(err, vm, info) { 11439 if (true) { 11440 warn$2("Error in ".concat(info, ": \"").concat(err.toString(), "\""), vm); 11441 } 11442 /* istanbul ignore else */ 11443 if (inBrowser && typeof console !== 'undefined') { 11444 console.error(err); 11445 } 11446 else { 11447 throw err; 11448 } 11449} 11450 11451/* globals MutationObserver */ 11452var isUsingMicroTask = false; 11453var callbacks = []; 11454var pending = false; 11455function flushCallbacks() { 11456 pending = false; 11457 var copies = callbacks.slice(0); 11458 callbacks.length = 0; 11459 for (var i = 0; i < copies.length; i++) { 11460 copies[i](); 11461 } 11462} 11463// Here we have async deferring wrappers using microtasks. 11464// In 2.5 we used (macro) tasks (in combination with microtasks). 11465// However, it has subtle problems when state is changed right before repaint 11466// (e.g. #6813, out-in transitions). 11467// Also, using (macro) tasks in event handler would cause some weird behaviors 11468// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109). 11469// So we now use microtasks everywhere, again. 11470// A major drawback of this tradeoff is that there are some scenarios 11471// where microtasks have too high a priority and fire in between supposedly 11472// sequential events (e.g. #4521, #6690, which have workarounds) 11473// or even between bubbling of the same event (#6566). 11474var timerFunc; 11475// The nextTick behavior leverages the microtask queue, which can be accessed 11476// via either native Promise.then or MutationObserver. 11477// MutationObserver has wider support, however it is seriously bugged in 11478// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It 11479// completely stops working after triggering a few times... so, if native 11480// Promise is available, we will use it: 11481/* istanbul ignore next, $flow-disable-line */ 11482if (typeof Promise !== 'undefined' && isNative(Promise)) { 11483 var p_1 = Promise.resolve(); 11484 timerFunc = function () { 11485 p_1.then(flushCallbacks); 11486 // In problematic UIWebViews, Promise.then doesn't completely break, but 11487 // it can get stuck in a weird state where callbacks are pushed into the 11488 // microtask queue but the queue isn't being flushed, until the browser 11489 // needs to do some other work, e.g. handle a timer. Therefore we can 11490 // "force" the microtask queue to be flushed by adding an empty timer. 11491 if (isIOS) 11492 setTimeout(noop); 11493 }; 11494 isUsingMicroTask = true; 11495} 11496else if (!isIE && 11497 typeof MutationObserver !== 'undefined' && 11498 (isNative(MutationObserver) || 11499 // PhantomJS and iOS 7.x 11500 MutationObserver.toString() === '[object MutationObserverConstructor]')) { 11501 // Use MutationObserver where native Promise is not available, 11502 // e.g. PhantomJS, iOS7, Android 4.4 11503 // (#6466 MutationObserver is unreliable in IE11) 11504 var counter_1 = 1; 11505 var observer = new MutationObserver(flushCallbacks); 11506 var textNode_1 = document.createTextNode(String(counter_1)); 11507 observer.observe(textNode_1, { 11508 characterData: true 11509 }); 11510 timerFunc = function () { 11511 counter_1 = (counter_1 + 1) % 2; 11512 textNode_1.data = String(counter_1); 11513 }; 11514 isUsingMicroTask = true; 11515} 11516else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) { 11517 // Fallback to setImmediate. 11518 // Technically it leverages the (macro) task queue, 11519 // but it is still a better choice than setTimeout. 11520 timerFunc = function () { 11521 setImmediate(flushCallbacks); 11522 }; 11523} 11524else { 11525 // Fallback to setTimeout. 11526 timerFunc = function () { 11527 setTimeout(flushCallbacks, 0); 11528 }; 11529} 11530/** 11531 * @internal 11532 */ 11533function nextTick(cb, ctx) { 11534 var _resolve; 11535 callbacks.push(function () { 11536 if (cb) { 11537 try { 11538 cb.call(ctx); 11539 } 11540 catch (e) { 11541 handleError(e, ctx, 'nextTick'); 11542 } 11543 } 11544 else if (_resolve) { 11545 _resolve(ctx); 11546 } 11547 }); 11548 if (!pending) { 11549 pending = true; 11550 timerFunc(); 11551 } 11552 // $flow-disable-line 11553 if (!cb && typeof Promise !== 'undefined') { 11554 return new Promise(function (resolve) { 11555 _resolve = resolve; 11556 }); 11557 } 11558} 11559 11560function useCssModule(name) { 11561 if (name === void 0) { name = '$style'; } 11562 /* istanbul ignore else */ 11563 { 11564 if (!currentInstance) { 11565 true && warn$2("useCssModule must be called inside setup()"); 11566 return emptyObject; 11567 } 11568 var mod = currentInstance[name]; 11569 if (!mod) { 11570 true && 11571 warn$2("Current instance does not have CSS module named \"".concat(name, "\".")); 11572 return emptyObject; 11573 } 11574 return mod; 11575 } 11576} 11577 11578/** 11579 * Runtime helper for SFC's CSS variable injection feature. 11580 * @private 11581 */ 11582function useCssVars(getter) { 11583 if (!inBrowser && !false) 11584 return; 11585 var instance = currentInstance; 11586 if (!instance) { 11587 true && 11588 warn$2("useCssVars is called without current active component instance."); 11589 return; 11590 } 11591 watchPostEffect(function () { 11592 var el = instance.$el; 11593 var vars = getter(instance, instance._setupProxy); 11594 if (el && el.nodeType === 1) { 11595 var style = el.style; 11596 for (var key in vars) { 11597 style.setProperty("--".concat(key), vars[key]); 11598 } 11599 } 11600 }); 11601} 11602 11603/** 11604 * v3-compatible async component API. 11605 * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts 11606 * because it relies on existing manual types 11607 */ 11608function defineAsyncComponent(source) { 11609 if (isFunction(source)) { 11610 source = { loader: source }; 11611 } 11612 var loader = source.loader, loadingComponent = source.loadingComponent, errorComponent = source.errorComponent, _a = source.delay, delay = _a === void 0 ? 200 : _a, timeout = source.timeout, // undefined = never times out 11613 _b = source.suspensible, // undefined = never times out 11614 suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true 11615 userOnError = source.onError; 11616 if ( true && suspensible) { 11617 warn$2("The suspensiblbe option for async components is not supported in Vue2. It is ignored."); 11618 } 11619 var pendingRequest = null; 11620 var retries = 0; 11621 var retry = function () { 11622 retries++; 11623 pendingRequest = null; 11624 return load(); 11625 }; 11626 var load = function () { 11627 var thisRequest; 11628 return (pendingRequest || 11629 (thisRequest = pendingRequest = 11630 loader() 11631 .catch(function (err) { 11632 err = err instanceof Error ? err : new Error(String(err)); 11633 if (userOnError) { 11634 return new Promise(function (resolve, reject) { 11635 var userRetry = function () { return resolve(retry()); }; 11636 var userFail = function () { return reject(err); }; 11637 userOnError(err, userRetry, userFail, retries + 1); 11638 }); 11639 } 11640 else { 11641 throw err; 11642 } 11643 }) 11644 .then(function (comp) { 11645 if (thisRequest !== pendingRequest && pendingRequest) { 11646 return pendingRequest; 11647 } 11648 if ( true && !comp) { 11649 warn$2("Async component loader resolved to undefined. " + 11650 "If you are using retry(), make sure to return its return value."); 11651 } 11652 // interop module default 11653 if (comp && 11654 (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) { 11655 comp = comp.default; 11656 } 11657 if ( true && comp && !isObject(comp) && !isFunction(comp)) { 11658 throw new Error("Invalid async component load result: ".concat(comp)); 11659 } 11660 return comp; 11661 }))); 11662 }; 11663 return function () { 11664 var component = load(); 11665 return { 11666 component: component, 11667 delay: delay, 11668 timeout: timeout, 11669 error: errorComponent, 11670 loading: loadingComponent 11671 }; 11672 }; 11673} 11674 11675function createLifeCycle(hookName) { 11676 return function (fn, target) { 11677 if (target === void 0) { target = currentInstance; } 11678 if (!target) { 11679 true && 11680 warn$2("".concat(formatName(hookName), " is called when there is no active component instance to be ") + 11681 "associated with. " + 11682 "Lifecycle injection APIs can only be used during execution of setup()."); 11683 return; 11684 } 11685 return injectHook(target, hookName, fn); 11686 }; 11687} 11688function formatName(name) { 11689 if (name === 'beforeDestroy') { 11690 name = 'beforeUnmount'; 11691 } 11692 else if (name === 'destroyed') { 11693 name = 'unmounted'; 11694 } 11695 return "on".concat(name[0].toUpperCase() + name.slice(1)); 11696} 11697function injectHook(instance, hookName, fn) { 11698 var options = instance.$options; 11699 options[hookName] = mergeLifecycleHook(options[hookName], fn); 11700} 11701var onBeforeMount = createLifeCycle('beforeMount'); 11702var onMounted = createLifeCycle('mounted'); 11703var onBeforeUpdate = createLifeCycle('beforeUpdate'); 11704var onUpdated = createLifeCycle('updated'); 11705var onBeforeUnmount = createLifeCycle('beforeDestroy'); 11706var onUnmounted = createLifeCycle('destroyed'); 11707var onActivated = createLifeCycle('activated'); 11708var onDeactivated = createLifeCycle('deactivated'); 11709var onServerPrefetch = createLifeCycle('serverPrefetch'); 11710var onRenderTracked = createLifeCycle('renderTracked'); 11711var onRenderTriggered = createLifeCycle('renderTriggered'); 11712var injectErrorCapturedHook = createLifeCycle('errorCaptured'); 11713function onErrorCaptured(hook, target) { 11714 if (target === void 0) { target = currentInstance; } 11715 injectErrorCapturedHook(hook, target); 11716} 11717 11718/** 11719 * Note: also update dist/vue.runtime.mjs when adding new exports to this file. 11720 */ 11721var version = '2.7.14'; 11722/** 11723 * @internal type is manually declared in <root>/types/v3-define-component.d.ts 11724 */ 11725function defineComponent(options) { 11726 return options; 11727} 11728 11729var seenObjects = new _Set(); 11730/** 11731 * Recursively traverse an object to evoke all converted 11732 * getters, so that every nested property inside the object 11733 * is collected as a "deep" dependency. 11734 */ 11735function traverse(val) { 11736 _traverse(val, seenObjects); 11737 seenObjects.clear(); 11738 return val; 11739} 11740function _traverse(val, seen) { 11741 var i, keys; 11742 var isA = isArray(val); 11743 if ((!isA && !isObject(val)) || 11744 val.__v_skip /* ReactiveFlags.SKIP */ || 11745 Object.isFrozen(val) || 11746 val instanceof VNode) { 11747 return; 11748 } 11749 if (val.__ob__) { 11750 var depId = val.__ob__.dep.id; 11751 if (seen.has(depId)) { 11752 return; 11753 } 11754 seen.add(depId); 11755 } 11756 if (isA) { 11757 i = val.length; 11758 while (i--) 11759 _traverse(val[i], seen); 11760 } 11761 else if (isRef(val)) { 11762 _traverse(val.value, seen); 11763 } 11764 else { 11765 keys = Object.keys(val); 11766 i = keys.length; 11767 while (i--) 11768 _traverse(val[keys[i]], seen); 11769 } 11770} 11771 11772var uid$1 = 0; 11773/** 11774 * A watcher parses an expression, collects dependencies, 11775 * and fires callback when the expression value changes. 11776 * This is used for both the $watch() api and directives. 11777 * @internal 11778 */ 11779var Watcher = /** @class */ (function () { 11780 function Watcher(vm, expOrFn, cb, options, isRenderWatcher) { 11781 recordEffectScope(this, 11782 // if the active effect scope is manually created (not a component scope), 11783 // prioritize it 11784 activeEffectScope && !activeEffectScope._vm 11785 ? activeEffectScope 11786 : vm 11787 ? vm._scope 11788 : undefined); 11789 if ((this.vm = vm) && isRenderWatcher) { 11790 vm._watcher = this; 11791 } 11792 // options 11793 if (options) { 11794 this.deep = !!options.deep; 11795 this.user = !!options.user; 11796 this.lazy = !!options.lazy; 11797 this.sync = !!options.sync; 11798 this.before = options.before; 11799 if (true) { 11800 this.onTrack = options.onTrack; 11801 this.onTrigger = options.onTrigger; 11802 } 11803 } 11804 else { 11805 this.deep = this.user = this.lazy = this.sync = false; 11806 } 11807 this.cb = cb; 11808 this.id = ++uid$1; // uid for batching 11809 this.active = true; 11810 this.post = false; 11811 this.dirty = this.lazy; // for lazy watchers 11812 this.deps = []; 11813 this.newDeps = []; 11814 this.depIds = new _Set(); 11815 this.newDepIds = new _Set(); 11816 this.expression = true ? expOrFn.toString() : 0; 11817 // parse expression for getter 11818 if (isFunction(expOrFn)) { 11819 this.getter = expOrFn; 11820 } 11821 else { 11822 this.getter = parsePath(expOrFn); 11823 if (!this.getter) { 11824 this.getter = noop; 11825 true && 11826 warn$2("Failed watching path: \"".concat(expOrFn, "\" ") + 11827 'Watcher only accepts simple dot-delimited paths. ' + 11828 'For full control, use a function instead.', vm); 11829 } 11830 } 11831 this.value = this.lazy ? undefined : this.get(); 11832 } 11833 /** 11834 * Evaluate the getter, and re-collect dependencies. 11835 */ 11836 Watcher.prototype.get = function () { 11837 pushTarget(this); 11838 var value; 11839 var vm = this.vm; 11840 try { 11841 value = this.getter.call(vm, vm); 11842 } 11843 catch (e) { 11844 if (this.user) { 11845 handleError(e, vm, "getter for watcher \"".concat(this.expression, "\"")); 11846 } 11847 else { 11848 throw e; 11849 } 11850 } 11851 finally { 11852 // "touch" every property so they are all tracked as 11853 // dependencies for deep watching 11854 if (this.deep) { 11855 traverse(value); 11856 } 11857 popTarget(); 11858 this.cleanupDeps(); 11859 } 11860 return value; 11861 }; 11862 /** 11863 * Add a dependency to this directive. 11864 */ 11865 Watcher.prototype.addDep = function (dep) { 11866 var id = dep.id; 11867 if (!this.newDepIds.has(id)) { 11868 this.newDepIds.add(id); 11869 this.newDeps.push(dep); 11870 if (!this.depIds.has(id)) { 11871 dep.addSub(this); 11872 } 11873 } 11874 }; 11875 /** 11876 * Clean up for dependency collection. 11877 */ 11878 Watcher.prototype.cleanupDeps = function () { 11879 var i = this.deps.length; 11880 while (i--) { 11881 var dep = this.deps[i]; 11882 if (!this.newDepIds.has(dep.id)) { 11883 dep.removeSub(this); 11884 } 11885 } 11886 var tmp = this.depIds; 11887 this.depIds = this.newDepIds; 11888 this.newDepIds = tmp; 11889 this.newDepIds.clear(); 11890 tmp = this.deps; 11891 this.deps = this.newDeps; 11892 this.newDeps = tmp; 11893 this.newDeps.length = 0; 11894 }; 11895 /** 11896 * Subscriber interface. 11897 * Will be called when a dependency changes. 11898 */ 11899 Watcher.prototype.update = function () { 11900 /* istanbul ignore else */ 11901 if (this.lazy) { 11902 this.dirty = true; 11903 } 11904 else if (this.sync) { 11905 this.run(); 11906 } 11907 else { 11908 queueWatcher(this); 11909 } 11910 }; 11911 /** 11912 * Scheduler job interface. 11913 * Will be called by the scheduler. 11914 */ 11915 Watcher.prototype.run = function () { 11916 if (this.active) { 11917 var value = this.get(); 11918 if (value !== this.value || 11919 // Deep watchers and watchers on Object/Arrays should fire even 11920 // when the value is the same, because the value may 11921 // have mutated. 11922 isObject(value) || 11923 this.deep) { 11924 // set new value 11925 var oldValue = this.value; 11926 this.value = value; 11927 if (this.user) { 11928 var info = "callback for watcher \"".concat(this.expression, "\""); 11929 invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info); 11930 } 11931 else { 11932 this.cb.call(this.vm, value, oldValue); 11933 } 11934 } 11935 } 11936 }; 11937 /** 11938 * Evaluate the value of the watcher. 11939 * This only gets called for lazy watchers. 11940 */ 11941 Watcher.prototype.evaluate = function () { 11942 this.value = this.get(); 11943 this.dirty = false; 11944 }; 11945 /** 11946 * Depend on all deps collected by this watcher. 11947 */ 11948 Watcher.prototype.depend = function () { 11949 var i = this.deps.length; 11950 while (i--) { 11951 this.deps[i].depend(); 11952 } 11953 }; 11954 /** 11955 * Remove self from all dependencies' subscriber list. 11956 */ 11957 Watcher.prototype.teardown = function () { 11958 if (this.vm && !this.vm._isBeingDestroyed) { 11959 remove$2(this.vm._scope.effects, this); 11960 } 11961 if (this.active) { 11962 var i = this.deps.length; 11963 while (i--) { 11964 this.deps[i].removeSub(this); 11965 } 11966 this.active = false; 11967 if (this.onStop) { 11968 this.onStop(); 11969 } 11970 } 11971 }; 11972 return Watcher; 11973}()); 11974 11975var sharedPropertyDefinition = { 11976 enumerable: true, 11977 configurable: true, 11978 get: noop, 11979 set: noop 11980}; 11981function proxy(target, sourceKey, key) { 11982 sharedPropertyDefinition.get = function proxyGetter() { 11983 return this[sourceKey][key]; 11984 }; 11985 sharedPropertyDefinition.set = function proxySetter(val) { 11986 this[sourceKey][key] = val; 11987 }; 11988 Object.defineProperty(target, key, sharedPropertyDefinition); 11989} 11990function initState(vm) { 11991 var opts = vm.$options; 11992 if (opts.props) 11993 initProps$1(vm, opts.props); 11994 // Composition API 11995 initSetup(vm); 11996 if (opts.methods) 11997 initMethods(vm, opts.methods); 11998 if (opts.data) { 11999 initData(vm); 12000 } 12001 else { 12002 var ob = observe((vm._data = {})); 12003 ob && ob.vmCount++; 12004 } 12005 if (opts.computed) 12006 initComputed$1(vm, opts.computed); 12007 if (opts.watch && opts.watch !== nativeWatch) { 12008 initWatch(vm, opts.watch); 12009 } 12010} 12011function initProps$1(vm, propsOptions) { 12012 var propsData = vm.$options.propsData || {}; 12013 var props = (vm._props = shallowReactive({})); 12014 // cache prop keys so that future props updates can iterate using Array 12015 // instead of dynamic object key enumeration. 12016 var keys = (vm.$options._propKeys = []); 12017 var isRoot = !vm.$parent; 12018 // root instance props should be converted 12019 if (!isRoot) { 12020 toggleObserving(false); 12021 } 12022 var _loop_1 = function (key) { 12023 keys.push(key); 12024 var value = validateProp(key, propsOptions, propsData, vm); 12025 /* istanbul ignore else */ 12026 if (true) { 12027 var hyphenatedKey = hyphenate(key); 12028 if (isReservedAttribute(hyphenatedKey) || 12029 config.isReservedAttr(hyphenatedKey)) { 12030 warn$2("\"".concat(hyphenatedKey, "\" is a reserved attribute and cannot be used as component prop."), vm); 12031 } 12032 defineReactive(props, key, value, function () { 12033 if (!isRoot && !isUpdatingChildComponent) { 12034 warn$2("Avoid mutating a prop directly since the value will be " + 12035 "overwritten whenever the parent component re-renders. " + 12036 "Instead, use a data or computed property based on the prop's " + 12037 "value. Prop being mutated: \"".concat(key, "\""), vm); 12038 } 12039 }); 12040 } 12041 else {} 12042 // static props are already proxied on the component's prototype 12043 // during Vue.extend(). We only need to proxy props defined at 12044 // instantiation here. 12045 if (!(key in vm)) { 12046 proxy(vm, "_props", key); 12047 } 12048 }; 12049 for (var key in propsOptions) { 12050 _loop_1(key); 12051 } 12052 toggleObserving(true); 12053} 12054function initData(vm) { 12055 var data = vm.$options.data; 12056 data = vm._data = isFunction(data) ? getData(data, vm) : data || {}; 12057 if (!isPlainObject(data)) { 12058 data = {}; 12059 true && 12060 warn$2('data functions should return an object:\n' + 12061 'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm); 12062 } 12063 // proxy data on instance 12064 var keys = Object.keys(data); 12065 var props = vm.$options.props; 12066 var methods = vm.$options.methods; 12067 var i = keys.length; 12068 while (i--) { 12069 var key = keys[i]; 12070 if (true) { 12071 if (methods && hasOwn(methods, key)) { 12072 warn$2("Method \"".concat(key, "\" has already been defined as a data property."), vm); 12073 } 12074 } 12075 if (props && hasOwn(props, key)) { 12076 true && 12077 warn$2("The data property \"".concat(key, "\" is already declared as a prop. ") + 12078 "Use prop default value instead.", vm); 12079 } 12080 else if (!isReserved(key)) { 12081 proxy(vm, "_data", key); 12082 } 12083 } 12084 // observe data 12085 var ob = observe(data); 12086 ob && ob.vmCount++; 12087} 12088function getData(data, vm) { 12089 // #7573 disable dep collection when invoking data getters 12090 pushTarget(); 12091 try { 12092 return data.call(vm, vm); 12093 } 12094 catch (e) { 12095 handleError(e, vm, "data()"); 12096 return {}; 12097 } 12098 finally { 12099 popTarget(); 12100 } 12101} 12102var computedWatcherOptions = { lazy: true }; 12103function initComputed$1(vm, computed) { 12104 // $flow-disable-line 12105 var watchers = (vm._computedWatchers = Object.create(null)); 12106 // computed properties are just getters during SSR 12107 var isSSR = isServerRendering(); 12108 for (var key in computed) { 12109 var userDef = computed[key]; 12110 var getter = isFunction(userDef) ? userDef : userDef.get; 12111 if ( true && getter == null) { 12112 warn$2("Getter is missing for computed property \"".concat(key, "\"."), vm); 12113 } 12114 if (!isSSR) { 12115 // create internal watcher for the computed property. 12116 watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions); 12117 } 12118 // component-defined computed properties are already defined on the 12119 // component prototype. We only need to define computed properties defined 12120 // at instantiation here. 12121 if (!(key in vm)) { 12122 defineComputed(vm, key, userDef); 12123 } 12124 else if (true) { 12125 if (key in vm.$data) { 12126 warn$2("The computed property \"".concat(key, "\" is already defined in data."), vm); 12127 } 12128 else if (vm.$options.props && key in vm.$options.props) { 12129 warn$2("The computed property \"".concat(key, "\" is already defined as a prop."), vm); 12130 } 12131 else if (vm.$options.methods && key in vm.$options.methods) { 12132 warn$2("The computed property \"".concat(key, "\" is already defined as a method."), vm); 12133 } 12134 } 12135 } 12136} 12137function defineComputed(target, key, userDef) { 12138 var shouldCache = !isServerRendering(); 12139 if (isFunction(userDef)) { 12140 sharedPropertyDefinition.get = shouldCache 12141 ? createComputedGetter(key) 12142 : createGetterInvoker(userDef); 12143 sharedPropertyDefinition.set = noop; 12144 } 12145 else { 12146 sharedPropertyDefinition.get = userDef.get 12147 ? shouldCache && userDef.cache !== false 12148 ? createComputedGetter(key) 12149 : createGetterInvoker(userDef.get) 12150 : noop; 12151 sharedPropertyDefinition.set = userDef.set || noop; 12152 } 12153 if ( true && sharedPropertyDefinition.set === noop) { 12154 sharedPropertyDefinition.set = function () { 12155 warn$2("Computed property \"".concat(key, "\" was assigned to but it has no setter."), this); 12156 }; 12157 } 12158 Object.defineProperty(target, key, sharedPropertyDefinition); 12159} 12160function createComputedGetter(key) { 12161 return function computedGetter() { 12162 var watcher = this._computedWatchers && this._computedWatchers[key]; 12163 if (watcher) { 12164 if (watcher.dirty) { 12165 watcher.evaluate(); 12166 } 12167 if (Dep.target) { 12168 if ( true && Dep.target.onTrack) { 12169 Dep.target.onTrack({ 12170 effect: Dep.target, 12171 target: this, 12172 type: "get" /* TrackOpTypes.GET */, 12173 key: key 12174 }); 12175 } 12176 watcher.depend(); 12177 } 12178 return watcher.value; 12179 } 12180 }; 12181} 12182function createGetterInvoker(fn) { 12183 return function computedGetter() { 12184 return fn.call(this, this); 12185 }; 12186} 12187function initMethods(vm, methods) { 12188 var props = vm.$options.props; 12189 for (var key in methods) { 12190 if (true) { 12191 if (typeof methods[key] !== 'function') { 12192 warn$2("Method \"".concat(key, "\" has type \"").concat(typeof methods[key], "\" in the component definition. ") + 12193 "Did you reference the function correctly?", vm); 12194 } 12195 if (props && hasOwn(props, key)) { 12196 warn$2("Method \"".concat(key, "\" has already been defined as a prop."), vm); 12197 } 12198 if (key in vm && isReserved(key)) { 12199 warn$2("Method \"".concat(key, "\" conflicts with an existing Vue instance method. ") + 12200 "Avoid defining component methods that start with _ or $."); 12201 } 12202 } 12203 vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm); 12204 } 12205} 12206function initWatch(vm, watch) { 12207 for (var key in watch) { 12208 var handler = watch[key]; 12209 if (isArray(handler)) { 12210 for (var i = 0; i < handler.length; i++) { 12211 createWatcher(vm, key, handler[i]); 12212 } 12213 } 12214 else { 12215 createWatcher(vm, key, handler); 12216 } 12217 } 12218} 12219function createWatcher(vm, expOrFn, handler, options) { 12220 if (isPlainObject(handler)) { 12221 options = handler; 12222 handler = handler.handler; 12223 } 12224 if (typeof handler === 'string') { 12225 handler = vm[handler]; 12226 } 12227 return vm.$watch(expOrFn, handler, options); 12228} 12229function stateMixin(Vue) { 12230 // flow somehow has problems with directly declared definition object 12231 // when using Object.defineProperty, so we have to procedurally build up 12232 // the object here. 12233 var dataDef = {}; 12234 dataDef.get = function () { 12235 return this._data; 12236 }; 12237 var propsDef = {}; 12238 propsDef.get = function () { 12239 return this._props; 12240 }; 12241 if (true) { 12242 dataDef.set = function () { 12243 warn$2('Avoid replacing instance root $data. ' + 12244 'Use nested data properties instead.', this); 12245 }; 12246 propsDef.set = function () { 12247 warn$2("$props is readonly.", this); 12248 }; 12249 } 12250 Object.defineProperty(Vue.prototype, '$data', dataDef); 12251 Object.defineProperty(Vue.prototype, '$props', propsDef); 12252 Vue.prototype.$set = set; 12253 Vue.prototype.$delete = del; 12254 Vue.prototype.$watch = function (expOrFn, cb, options) { 12255 var vm = this; 12256 if (isPlainObject(cb)) { 12257 return createWatcher(vm, expOrFn, cb, options); 12258 } 12259 options = options || {}; 12260 options.user = true; 12261 var watcher = new Watcher(vm, expOrFn, cb, options); 12262 if (options.immediate) { 12263 var info = "callback for immediate watcher \"".concat(watcher.expression, "\""); 12264 pushTarget(); 12265 invokeWithErrorHandling(cb, vm, [watcher.value], vm, info); 12266 popTarget(); 12267 } 12268 return function unwatchFn() { 12269 watcher.teardown(); 12270 }; 12271 }; 12272} 12273 12274function initProvide(vm) { 12275 var provideOption = vm.$options.provide; 12276 if (provideOption) { 12277 var provided = isFunction(provideOption) 12278 ? provideOption.call(vm) 12279 : provideOption; 12280 if (!isObject(provided)) { 12281 return; 12282 } 12283 var source = resolveProvided(vm); 12284 // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to 12285 // iterate the keys ourselves. 12286 var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided); 12287 for (var i = 0; i < keys.length; i++) { 12288 var key = keys[i]; 12289 Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key)); 12290 } 12291 } 12292} 12293function initInjections(vm) { 12294 var result = resolveInject(vm.$options.inject, vm); 12295 if (result) { 12296 toggleObserving(false); 12297 Object.keys(result).forEach(function (key) { 12298 /* istanbul ignore else */ 12299 if (true) { 12300 defineReactive(vm, key, result[key], function () { 12301 warn$2("Avoid mutating an injected value directly since the changes will be " + 12302 "overwritten whenever the provided component re-renders. " + 12303 "injection being mutated: \"".concat(key, "\""), vm); 12304 }); 12305 } 12306 else {} 12307 }); 12308 toggleObserving(true); 12309 } 12310} 12311function resolveInject(inject, vm) { 12312 if (inject) { 12313 // inject is :any because flow is not smart enough to figure out cached 12314 var result = Object.create(null); 12315 var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject); 12316 for (var i = 0; i < keys.length; i++) { 12317 var key = keys[i]; 12318 // #6574 in case the inject object is observed... 12319 if (key === '__ob__') 12320 continue; 12321 var provideKey = inject[key].from; 12322 if (provideKey in vm._provided) { 12323 result[key] = vm._provided[provideKey]; 12324 } 12325 else if ('default' in inject[key]) { 12326 var provideDefault = inject[key].default; 12327 result[key] = isFunction(provideDefault) 12328 ? provideDefault.call(vm) 12329 : provideDefault; 12330 } 12331 else if (true) { 12332 warn$2("Injection \"".concat(key, "\" not found"), vm); 12333 } 12334 } 12335 return result; 12336 } 12337} 12338 12339var uid = 0; 12340function initMixin$1(Vue) { 12341 Vue.prototype._init = function (options) { 12342 var vm = this; 12343 // a uid 12344 vm._uid = uid++; 12345 var startTag, endTag; 12346 /* istanbul ignore if */ 12347 if ( true && config.performance && mark) { 12348 startTag = "vue-perf-start:".concat(vm._uid); 12349 endTag = "vue-perf-end:".concat(vm._uid); 12350 mark(startTag); 12351 } 12352 // a flag to mark this as a Vue instance without having to do instanceof 12353 // check 12354 vm._isVue = true; 12355 // avoid instances from being observed 12356 vm.__v_skip = true; 12357 // effect scope 12358 vm._scope = new EffectScope(true /* detached */); 12359 vm._scope._vm = true; 12360 // merge options 12361 if (options && options._isComponent) { 12362 // optimize internal component instantiation 12363 // since dynamic options merging is pretty slow, and none of the 12364 // internal component options needs special treatment. 12365 initInternalComponent(vm, options); 12366 } 12367 else { 12368 vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm); 12369 } 12370 /* istanbul ignore else */ 12371 if (true) { 12372 initProxy(vm); 12373 } 12374 else {} 12375 // expose real self 12376 vm._self = vm; 12377 initLifecycle(vm); 12378 initEvents(vm); 12379 initRender(vm); 12380 callHook$1(vm, 'beforeCreate', undefined, false /* setContext */); 12381 initInjections(vm); // resolve injections before data/props 12382 initState(vm); 12383 initProvide(vm); // resolve provide after data/props 12384 callHook$1(vm, 'created'); 12385 /* istanbul ignore if */ 12386 if ( true && config.performance && mark) { 12387 vm._name = formatComponentName(vm, false); 12388 mark(endTag); 12389 measure("vue ".concat(vm._name, " init"), startTag, endTag); 12390 } 12391 if (vm.$options.el) { 12392 vm.$mount(vm.$options.el); 12393 } 12394 }; 12395} 12396function initInternalComponent(vm, options) { 12397 var opts = (vm.$options = Object.create(vm.constructor.options)); 12398 // doing this because it's faster than dynamic enumeration. 12399 var parentVnode = options._parentVnode; 12400 opts.parent = options.parent; 12401 opts._parentVnode = parentVnode; 12402 var vnodeComponentOptions = parentVnode.componentOptions; 12403 opts.propsData = vnodeComponentOptions.propsData; 12404 opts._parentListeners = vnodeComponentOptions.listeners; 12405 opts._renderChildren = vnodeComponentOptions.children; 12406 opts._componentTag = vnodeComponentOptions.tag; 12407 if (options.render) { 12408 opts.render = options.render; 12409 opts.staticRenderFns = options.staticRenderFns; 12410 } 12411} 12412function resolveConstructorOptions(Ctor) { 12413 var options = Ctor.options; 12414 if (Ctor.super) { 12415 var superOptions = resolveConstructorOptions(Ctor.super); 12416 var cachedSuperOptions = Ctor.superOptions; 12417 if (superOptions !== cachedSuperOptions) { 12418 // super option changed, 12419 // need to resolve new options. 12420 Ctor.superOptions = superOptions; 12421 // check if there are any late-modified/attached options (#4976) 12422 var modifiedOptions = resolveModifiedOptions(Ctor); 12423 // update base extend options 12424 if (modifiedOptions) { 12425 extend(Ctor.extendOptions, modifiedOptions); 12426 } 12427 options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions); 12428 if (options.name) { 12429 options.components[options.name] = Ctor; 12430 } 12431 } 12432 } 12433 return options; 12434} 12435function resolveModifiedOptions(Ctor) { 12436 var modified; 12437 var latest = Ctor.options; 12438 var sealed = Ctor.sealedOptions; 12439 for (var key in latest) { 12440 if (latest[key] !== sealed[key]) { 12441 if (!modified) 12442 modified = {}; 12443 modified[key] = latest[key]; 12444 } 12445 } 12446 return modified; 12447} 12448 12449function FunctionalRenderContext(data, props, children, parent, Ctor) { 12450 var _this = this; 12451 var options = Ctor.options; 12452 // ensure the createElement function in functional components 12453 // gets a unique context - this is necessary for correct named slot check 12454 var contextVm; 12455 if (hasOwn(parent, '_uid')) { 12456 contextVm = Object.create(parent); 12457 contextVm._original = parent; 12458 } 12459 else { 12460 // the context vm passed in is a functional context as well. 12461 // in this case we want to make sure we are able to get a hold to the 12462 // real context instance. 12463 contextVm = parent; 12464 // @ts-ignore 12465 parent = parent._original; 12466 } 12467 var isCompiled = isTrue(options._compiled); 12468 var needNormalization = !isCompiled; 12469 this.data = data; 12470 this.props = props; 12471 this.children = children; 12472 this.parent = parent; 12473 this.listeners = data.on || emptyObject; 12474 this.injections = resolveInject(options.inject, parent); 12475 this.slots = function () { 12476 if (!_this.$slots) { 12477 normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent))); 12478 } 12479 return _this.$slots; 12480 }; 12481 Object.defineProperty(this, 'scopedSlots', { 12482 enumerable: true, 12483 get: function () { 12484 return normalizeScopedSlots(parent, data.scopedSlots, this.slots()); 12485 } 12486 }); 12487 // support for compiled functional template 12488 if (isCompiled) { 12489 // exposing $options for renderStatic() 12490 this.$options = options; 12491 // pre-resolve slots for renderSlot() 12492 this.$slots = this.slots(); 12493 this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots); 12494 } 12495 if (options._scopeId) { 12496 this._c = function (a, b, c, d) { 12497 var vnode = createElement$1(contextVm, a, b, c, d, needNormalization); 12498 if (vnode && !isArray(vnode)) { 12499 vnode.fnScopeId = options._scopeId; 12500 vnode.fnContext = parent; 12501 } 12502 return vnode; 12503 }; 12504 } 12505 else { 12506 this._c = function (a, b, c, d) { 12507 return createElement$1(contextVm, a, b, c, d, needNormalization); 12508 }; 12509 } 12510} 12511installRenderHelpers(FunctionalRenderContext.prototype); 12512function createFunctionalComponent(Ctor, propsData, data, contextVm, children) { 12513 var options = Ctor.options; 12514 var props = {}; 12515 var propOptions = options.props; 12516 if (isDef(propOptions)) { 12517 for (var key in propOptions) { 12518 props[key] = validateProp(key, propOptions, propsData || emptyObject); 12519 } 12520 } 12521 else { 12522 if (isDef(data.attrs)) 12523 mergeProps(props, data.attrs); 12524 if (isDef(data.props)) 12525 mergeProps(props, data.props); 12526 } 12527 var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor); 12528 var vnode = options.render.call(null, renderContext._c, renderContext); 12529 if (vnode instanceof VNode) { 12530 return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext); 12531 } 12532 else if (isArray(vnode)) { 12533 var vnodes = normalizeChildren(vnode) || []; 12534 var res = new Array(vnodes.length); 12535 for (var i = 0; i < vnodes.length; i++) { 12536 res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext); 12537 } 12538 return res; 12539 } 12540} 12541function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) { 12542 // #7817 clone node before setting fnContext, otherwise if the node is reused 12543 // (e.g. it was from a cached normal slot) the fnContext causes named slots 12544 // that should not be matched to match. 12545 var clone = cloneVNode(vnode); 12546 clone.fnContext = contextVm; 12547 clone.fnOptions = options; 12548 if (true) { 12549 (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = 12550 renderContext; 12551 } 12552 if (data.slot) { 12553 (clone.data || (clone.data = {})).slot = data.slot; 12554 } 12555 return clone; 12556} 12557function mergeProps(to, from) { 12558 for (var key in from) { 12559 to[camelize(key)] = from[key]; 12560 } 12561} 12562 12563function getComponentName(options) { 12564 return options.name || options.__name || options._componentTag; 12565} 12566// inline hooks to be invoked on component VNodes during patch 12567var componentVNodeHooks = { 12568 init: function (vnode, hydrating) { 12569 if (vnode.componentInstance && 12570 !vnode.componentInstance._isDestroyed && 12571 vnode.data.keepAlive) { 12572 // kept-alive components, treat as a patch 12573 var mountedNode = vnode; // work around flow 12574 componentVNodeHooks.prepatch(mountedNode, mountedNode); 12575 } 12576 else { 12577 var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance)); 12578 child.$mount(hydrating ? vnode.elm : undefined, hydrating); 12579 } 12580 }, 12581 prepatch: function (oldVnode, vnode) { 12582 var options = vnode.componentOptions; 12583 var child = (vnode.componentInstance = oldVnode.componentInstance); 12584 updateChildComponent(child, options.propsData, // updated props 12585 options.listeners, // updated listeners 12586 vnode, // new parent vnode 12587 options.children // new children 12588 ); 12589 }, 12590 insert: function (vnode) { 12591 var context = vnode.context, componentInstance = vnode.componentInstance; 12592 if (!componentInstance._isMounted) { 12593 componentInstance._isMounted = true; 12594 callHook$1(componentInstance, 'mounted'); 12595 } 12596 if (vnode.data.keepAlive) { 12597 if (context._isMounted) { 12598 // vue-router#1212 12599 // During updates, a kept-alive component's child components may 12600 // change, so directly walking the tree here may call activated hooks 12601 // on incorrect children. Instead we push them into a queue which will 12602 // be processed after the whole patch process ended. 12603 queueActivatedComponent(componentInstance); 12604 } 12605 else { 12606 activateChildComponent(componentInstance, true /* direct */); 12607 } 12608 } 12609 }, 12610 destroy: function (vnode) { 12611 var componentInstance = vnode.componentInstance; 12612 if (!componentInstance._isDestroyed) { 12613 if (!vnode.data.keepAlive) { 12614 componentInstance.$destroy(); 12615 } 12616 else { 12617 deactivateChildComponent(componentInstance, true /* direct */); 12618 } 12619 } 12620 } 12621}; 12622var hooksToMerge = Object.keys(componentVNodeHooks); 12623function createComponent(Ctor, data, context, children, tag) { 12624 if (isUndef(Ctor)) { 12625 return; 12626 } 12627 var baseCtor = context.$options._base; 12628 // plain options object: turn it into a constructor 12629 if (isObject(Ctor)) { 12630 Ctor = baseCtor.extend(Ctor); 12631 } 12632 // if at this stage it's not a constructor or an async component factory, 12633 // reject. 12634 if (typeof Ctor !== 'function') { 12635 if (true) { 12636 warn$2("Invalid Component definition: ".concat(String(Ctor)), context); 12637 } 12638 return; 12639 } 12640 // async component 12641 var asyncFactory; 12642 // @ts-expect-error 12643 if (isUndef(Ctor.cid)) { 12644 asyncFactory = Ctor; 12645 Ctor = resolveAsyncComponent(asyncFactory, baseCtor); 12646 if (Ctor === undefined) { 12647 // return a placeholder node for async component, which is rendered 12648 // as a comment node but preserves all the raw information for the node. 12649 // the information will be used for async server-rendering and hydration. 12650 return createAsyncPlaceholder(asyncFactory, data, context, children, tag); 12651 } 12652 } 12653 data = data || {}; 12654 // resolve constructor options in case global mixins are applied after 12655 // component constructor creation 12656 resolveConstructorOptions(Ctor); 12657 // transform component v-model data into props & events 12658 if (isDef(data.model)) { 12659 // @ts-expect-error 12660 transformModel(Ctor.options, data); 12661 } 12662 // extract props 12663 // @ts-expect-error 12664 var propsData = extractPropsFromVNodeData(data, Ctor, tag); 12665 // functional component 12666 // @ts-expect-error 12667 if (isTrue(Ctor.options.functional)) { 12668 return createFunctionalComponent(Ctor, propsData, data, context, children); 12669 } 12670 // extract listeners, since these needs to be treated as 12671 // child component listeners instead of DOM listeners 12672 var listeners = data.on; 12673 // replace with listeners with .native modifier 12674 // so it gets processed during parent component patch. 12675 data.on = data.nativeOn; 12676 // @ts-expect-error 12677 if (isTrue(Ctor.options.abstract)) { 12678 // abstract components do not keep anything 12679 // other than props & listeners & slot 12680 // work around flow 12681 var slot = data.slot; 12682 data = {}; 12683 if (slot) { 12684 data.slot = slot; 12685 } 12686 } 12687 // install component management hooks onto the placeholder node 12688 installComponentHooks(data); 12689 // return a placeholder vnode 12690 // @ts-expect-error 12691 var name = getComponentName(Ctor.options) || tag; 12692 var vnode = new VNode( 12693 // @ts-expect-error 12694 "vue-component-".concat(Ctor.cid).concat(name ? "-".concat(name) : ''), data, undefined, undefined, undefined, context, 12695 // @ts-expect-error 12696 { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory); 12697 return vnode; 12698} 12699function createComponentInstanceForVnode( 12700// we know it's MountedComponentVNode but flow doesn't 12701vnode, 12702// activeInstance in lifecycle state 12703parent) { 12704 var options = { 12705 _isComponent: true, 12706 _parentVnode: vnode, 12707 parent: parent 12708 }; 12709 // check inline-template render functions 12710 var inlineTemplate = vnode.data.inlineTemplate; 12711 if (isDef(inlineTemplate)) { 12712 options.render = inlineTemplate.render; 12713 options.staticRenderFns = inlineTemplate.staticRenderFns; 12714 } 12715 return new vnode.componentOptions.Ctor(options); 12716} 12717function installComponentHooks(data) { 12718 var hooks = data.hook || (data.hook = {}); 12719 for (var i = 0; i < hooksToMerge.length; i++) { 12720 var key = hooksToMerge[i]; 12721 var existing = hooks[key]; 12722 var toMerge = componentVNodeHooks[key]; 12723 // @ts-expect-error 12724 if (existing !== toMerge && !(existing && existing._merged)) { 12725 hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge; 12726 } 12727 } 12728} 12729function mergeHook(f1, f2) { 12730 var merged = function (a, b) { 12731 // flow complains about extra args which is why we use any 12732 f1(a, b); 12733 f2(a, b); 12734 }; 12735 merged._merged = true; 12736 return merged; 12737} 12738// transform component v-model info (value and callback) into 12739// prop and event handler respectively. 12740function transformModel(options, data) { 12741 var prop = (options.model && options.model.prop) || 'value'; 12742 var event = (options.model && options.model.event) || 'input'; 12743 (data.attrs || (data.attrs = {}))[prop] = data.model.value; 12744 var on = data.on || (data.on = {}); 12745 var existing = on[event]; 12746 var callback = data.model.callback; 12747 if (isDef(existing)) { 12748 if (isArray(existing) 12749 ? existing.indexOf(callback) === -1 12750 : existing !== callback) { 12751 on[event] = [callback].concat(existing); 12752 } 12753 } 12754 else { 12755 on[event] = callback; 12756 } 12757} 12758 12759var warn$2 = noop; 12760var tip = noop; 12761var generateComponentTrace; // work around flow check 12762var formatComponentName; 12763if (true) { 12764 var hasConsole_1 = typeof console !== 'undefined'; 12765 var classifyRE_1 = /(?:^|[-_])(\w)/g; 12766 var classify_1 = function (str) { 12767 return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, ''); 12768 }; 12769 warn$2 = function (msg, vm) { 12770 if (vm === void 0) { vm = currentInstance; } 12771 var trace = vm ? generateComponentTrace(vm) : ''; 12772 if (config.warnHandler) { 12773 config.warnHandler.call(null, msg, vm, trace); 12774 } 12775 else if (hasConsole_1 && !config.silent) { 12776 console.error("[Vue warn]: ".concat(msg).concat(trace)); 12777 } 12778 }; 12779 tip = function (msg, vm) { 12780 if (hasConsole_1 && !config.silent) { 12781 console.warn("[Vue tip]: ".concat(msg) + (vm ? generateComponentTrace(vm) : '')); 12782 } 12783 }; 12784 formatComponentName = function (vm, includeFile) { 12785 if (vm.$root === vm) { 12786 return '<Root>'; 12787 } 12788 var options = isFunction(vm) && vm.cid != null 12789 ? vm.options 12790 : vm._isVue 12791 ? vm.$options || vm.constructor.options 12792 : vm; 12793 var name = getComponentName(options); 12794 var file = options.__file; 12795 if (!name && file) { 12796 var match = file.match(/([^/\\]+)\.vue$/); 12797 name = match && match[1]; 12798 } 12799 return ((name ? "<".concat(classify_1(name), ">") : "<Anonymous>") + 12800 (file && includeFile !== false ? " at ".concat(file) : '')); 12801 }; 12802 var repeat_1 = function (str, n) { 12803 var res = ''; 12804 while (n) { 12805 if (n % 2 === 1) 12806 res += str; 12807 if (n > 1) 12808 str += str; 12809 n >>= 1; 12810 } 12811 return res; 12812 }; 12813 generateComponentTrace = function (vm) { 12814 if (vm._isVue && vm.$parent) { 12815 var tree = []; 12816 var currentRecursiveSequence = 0; 12817 while (vm) { 12818 if (tree.length > 0) { 12819 var last = tree[tree.length - 1]; 12820 if (last.constructor === vm.constructor) { 12821 currentRecursiveSequence++; 12822 vm = vm.$parent; 12823 continue; 12824 } 12825 else if (currentRecursiveSequence > 0) { 12826 tree[tree.length - 1] = [last, currentRecursiveSequence]; 12827 currentRecursiveSequence = 0; 12828 } 12829 } 12830 tree.push(vm); 12831 vm = vm.$parent; 12832 } 12833 return ('\n\nfound in\n\n' + 12834 tree 12835 .map(function (vm, i) { 12836 return "".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm) 12837 ? "".concat(formatComponentName(vm[0]), "... (").concat(vm[1], " recursive calls)") 12838 : formatComponentName(vm)); 12839 }) 12840 .join('\n')); 12841 } 12842 else { 12843 return "\n\n(found in ".concat(formatComponentName(vm), ")"); 12844 } 12845 }; 12846} 12847 12848/** 12849 * Option overwriting strategies are functions that handle 12850 * how to merge a parent option value and a child option 12851 * value into the final value. 12852 */ 12853var strats = config.optionMergeStrategies; 12854/** 12855 * Options with restrictions 12856 */ 12857if (true) { 12858 strats.el = strats.propsData = function (parent, child, vm, key) { 12859 if (!vm) { 12860 warn$2("option \"".concat(key, "\" can only be used during instance ") + 12861 'creation with the `new` keyword.'); 12862 } 12863 return defaultStrat(parent, child); 12864 }; 12865} 12866/** 12867 * Helper that recursively merges two data objects together. 12868 */ 12869function mergeData(to, from, recursive) { 12870 if (recursive === void 0) { recursive = true; } 12871 if (!from) 12872 return to; 12873 var key, toVal, fromVal; 12874 var keys = hasSymbol 12875 ? Reflect.ownKeys(from) 12876 : Object.keys(from); 12877 for (var i = 0; i < keys.length; i++) { 12878 key = keys[i]; 12879 // in case the object is already observed... 12880 if (key === '__ob__') 12881 continue; 12882 toVal = to[key]; 12883 fromVal = from[key]; 12884 if (!recursive || !hasOwn(to, key)) { 12885 set(to, key, fromVal); 12886 } 12887 else if (toVal !== fromVal && 12888 isPlainObject(toVal) && 12889 isPlainObject(fromVal)) { 12890 mergeData(toVal, fromVal); 12891 } 12892 } 12893 return to; 12894} 12895/** 12896 * Data 12897 */ 12898function mergeDataOrFn(parentVal, childVal, vm) { 12899 if (!vm) { 12900 // in a Vue.extend merge, both should be functions 12901 if (!childVal) { 12902 return parentVal; 12903 } 12904 if (!parentVal) { 12905 return childVal; 12906 } 12907 // when parentVal & childVal are both present, 12908 // we need to return a function that returns the 12909 // merged result of both functions... no need to 12910 // check if parentVal is a function here because 12911 // it has to be a function to pass previous merges. 12912 return function mergedDataFn() { 12913 return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal); 12914 }; 12915 } 12916 else { 12917 return function mergedInstanceDataFn() { 12918 // instance merge 12919 var instanceData = isFunction(childVal) 12920 ? childVal.call(vm, vm) 12921 : childVal; 12922 var defaultData = isFunction(parentVal) 12923 ? parentVal.call(vm, vm) 12924 : parentVal; 12925 if (instanceData) { 12926 return mergeData(instanceData, defaultData); 12927 } 12928 else { 12929 return defaultData; 12930 } 12931 }; 12932 } 12933} 12934strats.data = function (parentVal, childVal, vm) { 12935 if (!vm) { 12936 if (childVal && typeof childVal !== 'function') { 12937 true && 12938 warn$2('The "data" option should be a function ' + 12939 'that returns a per-instance value in component ' + 12940 'definitions.', vm); 12941 return parentVal; 12942 } 12943 return mergeDataOrFn(parentVal, childVal); 12944 } 12945 return mergeDataOrFn(parentVal, childVal, vm); 12946}; 12947/** 12948 * Hooks and props are merged as arrays. 12949 */ 12950function mergeLifecycleHook(parentVal, childVal) { 12951 var res = childVal 12952 ? parentVal 12953 ? parentVal.concat(childVal) 12954 : isArray(childVal) 12955 ? childVal 12956 : [childVal] 12957 : parentVal; 12958 return res ? dedupeHooks(res) : res; 12959} 12960function dedupeHooks(hooks) { 12961 var res = []; 12962 for (var i = 0; i < hooks.length; i++) { 12963 if (res.indexOf(hooks[i]) === -1) { 12964 res.push(hooks[i]); 12965 } 12966 } 12967 return res; 12968} 12969LIFECYCLE_HOOKS.forEach(function (hook) { 12970 strats[hook] = mergeLifecycleHook; 12971}); 12972/** 12973 * Assets 12974 * 12975 * When a vm is present (instance creation), we need to do 12976 * a three-way merge between constructor options, instance 12977 * options and parent options. 12978 */ 12979function mergeAssets(parentVal, childVal, vm, key) { 12980 var res = Object.create(parentVal || null); 12981 if (childVal) { 12982 true && assertObjectType(key, childVal, vm); 12983 return extend(res, childVal); 12984 } 12985 else { 12986 return res; 12987 } 12988} 12989ASSET_TYPES.forEach(function (type) { 12990 strats[type + 's'] = mergeAssets; 12991}); 12992/** 12993 * Watchers. 12994 * 12995 * Watchers hashes should not overwrite one 12996 * another, so we merge them as arrays. 12997 */ 12998strats.watch = function (parentVal, childVal, vm, key) { 12999 // work around Firefox's Object.prototype.watch... 13000 //@ts-expect-error work around 13001 if (parentVal === nativeWatch) 13002 parentVal = undefined; 13003 //@ts-expect-error work around 13004 if (childVal === nativeWatch) 13005 childVal = undefined; 13006 /* istanbul ignore if */ 13007 if (!childVal) 13008 return Object.create(parentVal || null); 13009 if (true) { 13010 assertObjectType(key, childVal, vm); 13011 } 13012 if (!parentVal) 13013 return childVal; 13014 var ret = {}; 13015 extend(ret, parentVal); 13016 for (var key_1 in childVal) { 13017 var parent_1 = ret[key_1]; 13018 var child = childVal[key_1]; 13019 if (parent_1 && !isArray(parent_1)) { 13020 parent_1 = [parent_1]; 13021 } 13022 ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child]; 13023 } 13024 return ret; 13025}; 13026/** 13027 * Other object hashes. 13028 */ 13029strats.props = 13030 strats.methods = 13031 strats.inject = 13032 strats.computed = 13033 function (parentVal, childVal, vm, key) { 13034 if (childVal && "development" !== 'production') { 13035 assertObjectType(key, childVal, vm); 13036 } 13037 if (!parentVal) 13038 return childVal; 13039 var ret = Object.create(null); 13040 extend(ret, parentVal); 13041 if (childVal) 13042 extend(ret, childVal); 13043 return ret; 13044 }; 13045strats.provide = function (parentVal, childVal) { 13046 if (!parentVal) 13047 return childVal; 13048 return function () { 13049 var ret = Object.create(null); 13050 mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal); 13051 if (childVal) { 13052 mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive 13053 ); 13054 } 13055 return ret; 13056 }; 13057}; 13058/** 13059 * Default strategy. 13060 */ 13061var defaultStrat = function (parentVal, childVal) { 13062 return childVal === undefined ? parentVal : childVal; 13063}; 13064/** 13065 * Validate component names 13066 */ 13067function checkComponents(options) { 13068 for (var key in options.components) { 13069 validateComponentName(key); 13070 } 13071} 13072function validateComponentName(name) { 13073 if (!new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(unicodeRegExp.source, "]*$")).test(name)) { 13074 warn$2('Invalid component name: "' + 13075 name + 13076 '". Component names ' + 13077 'should conform to valid custom element name in html5 specification.'); 13078 } 13079 if (isBuiltInTag(name) || config.isReservedTag(name)) { 13080 warn$2('Do not use built-in or reserved HTML elements as component ' + 13081 'id: ' + 13082 name); 13083 } 13084} 13085/** 13086 * Ensure all props option syntax are normalized into the 13087 * Object-based format. 13088 */ 13089function normalizeProps(options, vm) { 13090 var props = options.props; 13091 if (!props) 13092 return; 13093 var res = {}; 13094 var i, val, name; 13095 if (isArray(props)) { 13096 i = props.length; 13097 while (i--) { 13098 val = props[i]; 13099 if (typeof val === 'string') { 13100 name = camelize(val); 13101 res[name] = { type: null }; 13102 } 13103 else if (true) { 13104 warn$2('props must be strings when using array syntax.'); 13105 } 13106 } 13107 } 13108 else if (isPlainObject(props)) { 13109 for (var key in props) { 13110 val = props[key]; 13111 name = camelize(key); 13112 res[name] = isPlainObject(val) ? val : { type: val }; 13113 } 13114 } 13115 else if (true) { 13116 warn$2("Invalid value for option \"props\": expected an Array or an Object, " + 13117 "but got ".concat(toRawType(props), "."), vm); 13118 } 13119 options.props = res; 13120} 13121/** 13122 * Normalize all injections into Object-based format 13123 */ 13124function normalizeInject(options, vm) { 13125 var inject = options.inject; 13126 if (!inject) 13127 return; 13128 var normalized = (options.inject = {}); 13129 if (isArray(inject)) { 13130 for (var i = 0; i < inject.length; i++) { 13131 normalized[inject[i]] = { from: inject[i] }; 13132 } 13133 } 13134 else if (isPlainObject(inject)) { 13135 for (var key in inject) { 13136 var val = inject[key]; 13137 normalized[key] = isPlainObject(val) 13138 ? extend({ from: key }, val) 13139 : { from: val }; 13140 } 13141 } 13142 else if (true) { 13143 warn$2("Invalid value for option \"inject\": expected an Array or an Object, " + 13144 "but got ".concat(toRawType(inject), "."), vm); 13145 } 13146} 13147/** 13148 * Normalize raw function directives into object format. 13149 */ 13150function normalizeDirectives$1(options) { 13151 var dirs = options.directives; 13152 if (dirs) { 13153 for (var key in dirs) { 13154 var def = dirs[key]; 13155 if (isFunction(def)) { 13156 dirs[key] = { bind: def, update: def }; 13157 } 13158 } 13159 } 13160} 13161function assertObjectType(name, value, vm) { 13162 if (!isPlainObject(value)) { 13163 warn$2("Invalid value for option \"".concat(name, "\": expected an Object, ") + 13164 "but got ".concat(toRawType(value), "."), vm); 13165 } 13166} 13167/** 13168 * Merge two option objects into a new one. 13169 * Core utility used in both instantiation and inheritance. 13170 */ 13171function mergeOptions(parent, child, vm) { 13172 if (true) { 13173 checkComponents(child); 13174 } 13175 if (isFunction(child)) { 13176 // @ts-expect-error 13177 child = child.options; 13178 } 13179 normalizeProps(child, vm); 13180 normalizeInject(child, vm); 13181 normalizeDirectives$1(child); 13182 // Apply extends and mixins on the child options, 13183 // but only if it is a raw options object that isn't 13184 // the result of another mergeOptions call. 13185 // Only merged options has the _base property. 13186 if (!child._base) { 13187 if (child.extends) { 13188 parent = mergeOptions(parent, child.extends, vm); 13189 } 13190 if (child.mixins) { 13191 for (var i = 0, l = child.mixins.length; i < l; i++) { 13192 parent = mergeOptions(parent, child.mixins[i], vm); 13193 } 13194 } 13195 } 13196 var options = {}; 13197 var key; 13198 for (key in parent) { 13199 mergeField(key); 13200 } 13201 for (key in child) { 13202 if (!hasOwn(parent, key)) { 13203 mergeField(key); 13204 } 13205 } 13206 function mergeField(key) { 13207 var strat = strats[key] || defaultStrat; 13208 options[key] = strat(parent[key], child[key], vm, key); 13209 } 13210 return options; 13211} 13212/** 13213 * Resolve an asset. 13214 * This function is used because child instances need access 13215 * to assets defined in its ancestor chain. 13216 */ 13217function resolveAsset(options, type, id, warnMissing) { 13218 /* istanbul ignore if */ 13219 if (typeof id !== 'string') { 13220 return; 13221 } 13222 var assets = options[type]; 13223 // check local registration variations first 13224 if (hasOwn(assets, id)) 13225 return assets[id]; 13226 var camelizedId = camelize(id); 13227 if (hasOwn(assets, camelizedId)) 13228 return assets[camelizedId]; 13229 var PascalCaseId = capitalize(camelizedId); 13230 if (hasOwn(assets, PascalCaseId)) 13231 return assets[PascalCaseId]; 13232 // fallback to prototype chain 13233 var res = assets[id] || assets[camelizedId] || assets[PascalCaseId]; 13234 if ( true && warnMissing && !res) { 13235 warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id); 13236 } 13237 return res; 13238} 13239 13240function validateProp(key, propOptions, propsData, vm) { 13241 var prop = propOptions[key]; 13242 var absent = !hasOwn(propsData, key); 13243 var value = propsData[key]; 13244 // boolean casting 13245 var booleanIndex = getTypeIndex(Boolean, prop.type); 13246 if (booleanIndex > -1) { 13247 if (absent && !hasOwn(prop, 'default')) { 13248 value = false; 13249 } 13250 else if (value === '' || value === hyphenate(key)) { 13251 // only cast empty string / same name to boolean if 13252 // boolean has higher priority 13253 var stringIndex = getTypeIndex(String, prop.type); 13254 if (stringIndex < 0 || booleanIndex < stringIndex) { 13255 value = true; 13256 } 13257 } 13258 } 13259 // check default value 13260 if (value === undefined) { 13261 value = getPropDefaultValue(vm, prop, key); 13262 // since the default value is a fresh copy, 13263 // make sure to observe it. 13264 var prevShouldObserve = shouldObserve; 13265 toggleObserving(true); 13266 observe(value); 13267 toggleObserving(prevShouldObserve); 13268 } 13269 if (true) { 13270 assertProp(prop, key, value, vm, absent); 13271 } 13272 return value; 13273} 13274/** 13275 * Get the default value of a prop. 13276 */ 13277function getPropDefaultValue(vm, prop, key) { 13278 // no default, return undefined 13279 if (!hasOwn(prop, 'default')) { 13280 return undefined; 13281 } 13282 var def = prop.default; 13283 // warn against non-factory defaults for Object & Array 13284 if ( true && isObject(def)) { 13285 warn$2('Invalid default value for prop "' + 13286 key + 13287 '": ' + 13288 'Props with type Object/Array must use a factory function ' + 13289 'to return the default value.', vm); 13290 } 13291 // the raw prop value was also undefined from previous render, 13292 // return previous default value to avoid unnecessary watcher trigger 13293 if (vm && 13294 vm.$options.propsData && 13295 vm.$options.propsData[key] === undefined && 13296 vm._props[key] !== undefined) { 13297 return vm._props[key]; 13298 } 13299 // call factory function for non-Function types 13300 // a value is Function if its prototype is function even across different execution context 13301 return isFunction(def) && getType(prop.type) !== 'Function' 13302 ? def.call(vm) 13303 : def; 13304} 13305/** 13306 * Assert whether a prop is valid. 13307 */ 13308function assertProp(prop, name, value, vm, absent) { 13309 if (prop.required && absent) { 13310 warn$2('Missing required prop: "' + name + '"', vm); 13311 return; 13312 } 13313 if (value == null && !prop.required) { 13314 return; 13315 } 13316 var type = prop.type; 13317 var valid = !type || type === true; 13318 var expectedTypes = []; 13319 if (type) { 13320 if (!isArray(type)) { 13321 type = [type]; 13322 } 13323 for (var i = 0; i < type.length && !valid; i++) { 13324 var assertedType = assertType(value, type[i], vm); 13325 expectedTypes.push(assertedType.expectedType || ''); 13326 valid = assertedType.valid; 13327 } 13328 } 13329 var haveExpectedTypes = expectedTypes.some(function (t) { return t; }); 13330 if (!valid && haveExpectedTypes) { 13331 warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm); 13332 return; 13333 } 13334 var validator = prop.validator; 13335 if (validator) { 13336 if (!validator(value)) { 13337 warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm); 13338 } 13339 } 13340} 13341var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/; 13342function assertType(value, type, vm) { 13343 var valid; 13344 var expectedType = getType(type); 13345 if (simpleCheckRE.test(expectedType)) { 13346 var t = typeof value; 13347 valid = t === expectedType.toLowerCase(); 13348 // for primitive wrapper objects 13349 if (!valid && t === 'object') { 13350 valid = value instanceof type; 13351 } 13352 } 13353 else if (expectedType === 'Object') { 13354 valid = isPlainObject(value); 13355 } 13356 else if (expectedType === 'Array') { 13357 valid = isArray(value); 13358 } 13359 else { 13360 try { 13361 valid = value instanceof type; 13362 } 13363 catch (e) { 13364 warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm); 13365 valid = false; 13366 } 13367 } 13368 return { 13369 valid: valid, 13370 expectedType: expectedType 13371 }; 13372} 13373var functionTypeCheckRE = /^\s*function (\w+)/; 13374/** 13375 * Use function string name to check built-in types, 13376 * because a simple equality check will fail when running 13377 * across different vms / iframes. 13378 */ 13379function getType(fn) { 13380 var match = fn && fn.toString().match(functionTypeCheckRE); 13381 return match ? match[1] : ''; 13382} 13383function isSameType(a, b) { 13384 return getType(a) === getType(b); 13385} 13386function getTypeIndex(type, expectedTypes) { 13387 if (!isArray(expectedTypes)) { 13388 return isSameType(expectedTypes, type) ? 0 : -1; 13389 } 13390 for (var i = 0, len = expectedTypes.length; i < len; i++) { 13391 if (isSameType(expectedTypes[i], type)) { 13392 return i; 13393 } 13394 } 13395 return -1; 13396} 13397function getInvalidTypeMessage(name, value, expectedTypes) { 13398 var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") + 13399 " Expected ".concat(expectedTypes.map(capitalize).join(', ')); 13400 var expectedType = expectedTypes[0]; 13401 var receivedType = toRawType(value); 13402 // check if we need to specify expected value 13403 if (expectedTypes.length === 1 && 13404 isExplicable(expectedType) && 13405 isExplicable(typeof value) && 13406 !isBoolean(expectedType, receivedType)) { 13407 message += " with value ".concat(styleValue(value, expectedType)); 13408 } 13409 message += ", got ".concat(receivedType, " "); 13410 // check if we need to specify received value 13411 if (isExplicable(receivedType)) { 13412 message += "with value ".concat(styleValue(value, receivedType), "."); 13413 } 13414 return message; 13415} 13416function styleValue(value, type) { 13417 if (type === 'String') { 13418 return "\"".concat(value, "\""); 13419 } 13420 else if (type === 'Number') { 13421 return "".concat(Number(value)); 13422 } 13423 else { 13424 return "".concat(value); 13425 } 13426} 13427var EXPLICABLE_TYPES = ['string', 'number', 'boolean']; 13428function isExplicable(value) { 13429 return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; }); 13430} 13431function isBoolean() { 13432 var args = []; 13433 for (var _i = 0; _i < arguments.length; _i++) { 13434 args[_i] = arguments[_i]; 13435 } 13436 return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; }); 13437} 13438 13439function Vue(options) { 13440 if ( true && !(this instanceof Vue)) { 13441 warn$2('Vue is a constructor and should be called with the `new` keyword'); 13442 } 13443 this._init(options); 13444} 13445//@ts-expect-error Vue has function type 13446initMixin$1(Vue); 13447//@ts-expect-error Vue has function type 13448stateMixin(Vue); 13449//@ts-expect-error Vue has function type 13450eventsMixin(Vue); 13451//@ts-expect-error Vue has function type 13452lifecycleMixin(Vue); 13453//@ts-expect-error Vue has function type 13454renderMixin(Vue); 13455 13456function initUse(Vue) { 13457 Vue.use = function (plugin) { 13458 var installedPlugins = this._installedPlugins || (this._installedPlugins = []); 13459 if (installedPlugins.indexOf(plugin) > -1) { 13460 return this; 13461 } 13462 // additional parameters 13463 var args = toArray(arguments, 1); 13464 args.unshift(this); 13465 if (isFunction(plugin.install)) { 13466 plugin.install.apply(plugin, args); 13467 } 13468 else if (isFunction(plugin)) { 13469 plugin.apply(null, args); 13470 } 13471 installedPlugins.push(plugin); 13472 return this; 13473 }; 13474} 13475 13476function initMixin(Vue) { 13477 Vue.mixin = function (mixin) { 13478 this.options = mergeOptions(this.options, mixin); 13479 return this; 13480 }; 13481} 13482 13483function initExtend(Vue) { 13484 /** 13485 * Each instance constructor, including Vue, has a unique 13486 * cid. This enables us to create wrapped "child 13487 * constructors" for prototypal inheritance and cache them. 13488 */ 13489 Vue.cid = 0; 13490 var cid = 1; 13491 /** 13492 * Class inheritance 13493 */ 13494 Vue.extend = function (extendOptions) { 13495 extendOptions = extendOptions || {}; 13496 var Super = this; 13497 var SuperId = Super.cid; 13498 var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {}); 13499 if (cachedCtors[SuperId]) { 13500 return cachedCtors[SuperId]; 13501 } 13502 var name = getComponentName(extendOptions) || getComponentName(Super.options); 13503 if ( true && name) { 13504 validateComponentName(name); 13505 } 13506 var Sub = function VueComponent(options) { 13507 this._init(options); 13508 }; 13509 Sub.prototype = Object.create(Super.prototype); 13510 Sub.prototype.constructor = Sub; 13511 Sub.cid = cid++; 13512 Sub.options = mergeOptions(Super.options, extendOptions); 13513 Sub['super'] = Super; 13514 // For props and computed properties, we define the proxy getters on 13515 // the Vue instances at extension time, on the extended prototype. This 13516 // avoids Object.defineProperty calls for each instance created. 13517 if (Sub.options.props) { 13518 initProps(Sub); 13519 } 13520 if (Sub.options.computed) { 13521 initComputed(Sub); 13522 } 13523 // allow further extension/mixin/plugin usage 13524 Sub.extend = Super.extend; 13525 Sub.mixin = Super.mixin; 13526 Sub.use = Super.use; 13527 // create asset registers, so extended classes 13528 // can have their private assets too. 13529 ASSET_TYPES.forEach(function (type) { 13530 Sub[type] = Super[type]; 13531 }); 13532 // enable recursive self-lookup 13533 if (name) { 13534 Sub.options.components[name] = Sub; 13535 } 13536 // keep a reference to the super options at extension time. 13537 // later at instantiation we can check if Super's options have 13538 // been updated. 13539 Sub.superOptions = Super.options; 13540 Sub.extendOptions = extendOptions; 13541 Sub.sealedOptions = extend({}, Sub.options); 13542 // cache constructor 13543 cachedCtors[SuperId] = Sub; 13544 return Sub; 13545 }; 13546} 13547function initProps(Comp) { 13548 var props = Comp.options.props; 13549 for (var key in props) { 13550 proxy(Comp.prototype, "_props", key); 13551 } 13552} 13553function initComputed(Comp) { 13554 var computed = Comp.options.computed; 13555 for (var key in computed) { 13556 defineComputed(Comp.prototype, key, computed[key]); 13557 } 13558} 13559 13560function initAssetRegisters(Vue) { 13561 /** 13562 * Create asset registration methods. 13563 */ 13564 ASSET_TYPES.forEach(function (type) { 13565 // @ts-expect-error function is not exact same type 13566 Vue[type] = function (id, definition) { 13567 if (!definition) { 13568 return this.options[type + 's'][id]; 13569 } 13570 else { 13571 /* istanbul ignore if */ 13572 if ( true && type === 'component') { 13573 validateComponentName(id); 13574 } 13575 if (type === 'component' && isPlainObject(definition)) { 13576 // @ts-expect-error 13577 definition.name = definition.name || id; 13578 definition = this.options._base.extend(definition); 13579 } 13580 if (type === 'directive' && isFunction(definition)) { 13581 definition = { bind: definition, update: definition }; 13582 } 13583 this.options[type + 's'][id] = definition; 13584 return definition; 13585 } 13586 }; 13587 }); 13588} 13589 13590function _getComponentName(opts) { 13591 return opts && (getComponentName(opts.Ctor.options) || opts.tag); 13592} 13593function matches(pattern, name) { 13594 if (isArray(pattern)) { 13595 return pattern.indexOf(name) > -1; 13596 } 13597 else if (typeof pattern === 'string') { 13598 return pattern.split(',').indexOf(name) > -1; 13599 } 13600 else if (isRegExp(pattern)) { 13601 return pattern.test(name); 13602 } 13603 /* istanbul ignore next */ 13604 return false; 13605} 13606function pruneCache(keepAliveInstance, filter) { 13607 var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode; 13608 for (var key in cache) { 13609 var entry = cache[key]; 13610 if (entry) { 13611 var name_1 = entry.name; 13612 if (name_1 && !filter(name_1)) { 13613 pruneCacheEntry(cache, key, keys, _vnode); 13614 } 13615 } 13616 } 13617} 13618function pruneCacheEntry(cache, key, keys, current) { 13619 var entry = cache[key]; 13620 if (entry && (!current || entry.tag !== current.tag)) { 13621 // @ts-expect-error can be undefined 13622 entry.componentInstance.$destroy(); 13623 } 13624 cache[key] = null; 13625 remove$2(keys, key); 13626} 13627var patternTypes = [String, RegExp, Array]; 13628// TODO defineComponent 13629var KeepAlive = { 13630 name: 'keep-alive', 13631 abstract: true, 13632 props: { 13633 include: patternTypes, 13634 exclude: patternTypes, 13635 max: [String, Number] 13636 }, 13637 methods: { 13638 cacheVNode: function () { 13639 var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache; 13640 if (vnodeToCache) { 13641 var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions; 13642 cache[keyToCache] = { 13643 name: _getComponentName(componentOptions), 13644 tag: tag, 13645 componentInstance: componentInstance 13646 }; 13647 keys.push(keyToCache); 13648 // prune oldest entry 13649 if (this.max && keys.length > parseInt(this.max)) { 13650 pruneCacheEntry(cache, keys[0], keys, this._vnode); 13651 } 13652 this.vnodeToCache = null; 13653 } 13654 } 13655 }, 13656 created: function () { 13657 this.cache = Object.create(null); 13658 this.keys = []; 13659 }, 13660 destroyed: function () { 13661 for (var key in this.cache) { 13662 pruneCacheEntry(this.cache, key, this.keys); 13663 } 13664 }, 13665 mounted: function () { 13666 var _this = this; 13667 this.cacheVNode(); 13668 this.$watch('include', function (val) { 13669 pruneCache(_this, function (name) { return matches(val, name); }); 13670 }); 13671 this.$watch('exclude', function (val) { 13672 pruneCache(_this, function (name) { return !matches(val, name); }); 13673 }); 13674 }, 13675 updated: function () { 13676 this.cacheVNode(); 13677 }, 13678 render: function () { 13679 var slot = this.$slots.default; 13680 var vnode = getFirstComponentChild(slot); 13681 var componentOptions = vnode && vnode.componentOptions; 13682 if (componentOptions) { 13683 // check pattern 13684 var name_2 = _getComponentName(componentOptions); 13685 var _a = this, include = _a.include, exclude = _a.exclude; 13686 if ( 13687 // not included 13688 (include && (!name_2 || !matches(include, name_2))) || 13689 // excluded 13690 (exclude && name_2 && matches(exclude, name_2))) { 13691 return vnode; 13692 } 13693 var _b = this, cache = _b.cache, keys = _b.keys; 13694 var key = vnode.key == null 13695 ? // same constructor may get registered as different local components 13696 // so cid alone is not enough (#3269) 13697 componentOptions.Ctor.cid + 13698 (componentOptions.tag ? "::".concat(componentOptions.tag) : '') 13699 : vnode.key; 13700 if (cache[key]) { 13701 vnode.componentInstance = cache[key].componentInstance; 13702 // make current key freshest 13703 remove$2(keys, key); 13704 keys.push(key); 13705 } 13706 else { 13707 // delay setting the cache until update 13708 this.vnodeToCache = vnode; 13709 this.keyToCache = key; 13710 } 13711 // @ts-expect-error can vnode.data can be undefined 13712 vnode.data.keepAlive = true; 13713 } 13714 return vnode || (slot && slot[0]); 13715 } 13716}; 13717 13718var builtInComponents = { 13719 KeepAlive: KeepAlive 13720}; 13721 13722function initGlobalAPI(Vue) { 13723 // config 13724 var configDef = {}; 13725 configDef.get = function () { return config; }; 13726 if (true) { 13727 configDef.set = function () { 13728 warn$2('Do not replace the Vue.config object, set individual fields instead.'); 13729 }; 13730 } 13731 Object.defineProperty(Vue, 'config', configDef); 13732 // exposed util methods. 13733 // NOTE: these are not considered part of the public API - avoid relying on 13734 // them unless you are aware of the risk. 13735 Vue.util = { 13736 warn: warn$2, 13737 extend: extend, 13738 mergeOptions: mergeOptions, 13739 defineReactive: defineReactive 13740 }; 13741 Vue.set = set; 13742 Vue.delete = del; 13743 Vue.nextTick = nextTick; 13744 // 2.6 explicit observable API 13745 Vue.observable = function (obj) { 13746 observe(obj); 13747 return obj; 13748 }; 13749 Vue.options = Object.create(null); 13750 ASSET_TYPES.forEach(function (type) { 13751 Vue.options[type + 's'] = Object.create(null); 13752 }); 13753 // this is used to identify the "base" constructor to extend all plain-object 13754 // components with in Weex's multi-instance scenarios. 13755 Vue.options._base = Vue; 13756 extend(Vue.options.components, builtInComponents); 13757 initUse(Vue); 13758 initMixin(Vue); 13759 initExtend(Vue); 13760 initAssetRegisters(Vue); 13761} 13762 13763initGlobalAPI(Vue); 13764Object.defineProperty(Vue.prototype, '$isServer', { 13765 get: isServerRendering 13766}); 13767Object.defineProperty(Vue.prototype, '$ssrContext', { 13768 get: function () { 13769 /* istanbul ignore next */ 13770 return this.$vnode && this.$vnode.ssrContext; 13771 } 13772}); 13773// expose FunctionalRenderContext for ssr runtime helper installation 13774Object.defineProperty(Vue, 'FunctionalRenderContext', { 13775 value: FunctionalRenderContext 13776}); 13777Vue.version = version; 13778 13779// these are reserved for web because they are directly compiled away 13780// during template compilation 13781var isReservedAttr = makeMap('style,class'); 13782// attributes that should be using props for binding 13783var acceptValue = makeMap('input,textarea,option,select,progress'); 13784var mustUseProp = function (tag, type, attr) { 13785 return ((attr === 'value' && acceptValue(tag) && type !== 'button') || 13786 (attr === 'selected' && tag === 'option') || 13787 (attr === 'checked' && tag === 'input') || 13788 (attr === 'muted' && tag === 'video')); 13789}; 13790var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck'); 13791var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only'); 13792var convertEnumeratedValue = function (key, value) { 13793 return isFalsyAttrValue(value) || value === 'false' 13794 ? 'false' 13795 : // allow arbitrary string value for contenteditable 13796 key === 'contenteditable' && isValidContentEditableValue(value) 13797 ? value 13798 : 'true'; 13799}; 13800var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' + 13801 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' + 13802 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' + 13803 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' + 13804 'required,reversed,scoped,seamless,selected,sortable,' + 13805 'truespeed,typemustmatch,visible'); 13806var xlinkNS = 'http://www.w3.org/1999/xlink'; 13807var isXlink = function (name) { 13808 return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'; 13809}; 13810var getXlinkProp = function (name) { 13811 return isXlink(name) ? name.slice(6, name.length) : ''; 13812}; 13813var isFalsyAttrValue = function (val) { 13814 return val == null || val === false; 13815}; 13816 13817function genClassForVnode(vnode) { 13818 var data = vnode.data; 13819 var parentNode = vnode; 13820 var childNode = vnode; 13821 while (isDef(childNode.componentInstance)) { 13822 childNode = childNode.componentInstance._vnode; 13823 if (childNode && childNode.data) { 13824 data = mergeClassData(childNode.data, data); 13825 } 13826 } 13827 // @ts-expect-error parentNode.parent not VNodeWithData 13828 while (isDef((parentNode = parentNode.parent))) { 13829 if (parentNode && parentNode.data) { 13830 data = mergeClassData(data, parentNode.data); 13831 } 13832 } 13833 return renderClass(data.staticClass, data.class); 13834} 13835function mergeClassData(child, parent) { 13836 return { 13837 staticClass: concat(child.staticClass, parent.staticClass), 13838 class: isDef(child.class) ? [child.class, parent.class] : parent.class 13839 }; 13840} 13841function renderClass(staticClass, dynamicClass) { 13842 if (isDef(staticClass) || isDef(dynamicClass)) { 13843 return concat(staticClass, stringifyClass(dynamicClass)); 13844 } 13845 /* istanbul ignore next */ 13846 return ''; 13847} 13848function concat(a, b) { 13849 return a ? (b ? a + ' ' + b : a) : b || ''; 13850} 13851function stringifyClass(value) { 13852 if (Array.isArray(value)) { 13853 return stringifyArray(value); 13854 } 13855 if (isObject(value)) { 13856 return stringifyObject(value); 13857 } 13858 if (typeof value === 'string') { 13859 return value; 13860 } 13861 /* istanbul ignore next */ 13862 return ''; 13863} 13864function stringifyArray(value) { 13865 var res = ''; 13866 var stringified; 13867 for (var i = 0, l = value.length; i < l; i++) { 13868 if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') { 13869 if (res) 13870 res += ' '; 13871 res += stringified; 13872 } 13873 } 13874 return res; 13875} 13876function stringifyObject(value) { 13877 var res = ''; 13878 for (var key in value) { 13879 if (value[key]) { 13880 if (res) 13881 res += ' '; 13882 res += key; 13883 } 13884 } 13885 return res; 13886} 13887 13888var namespaceMap = { 13889 svg: 'http://www.w3.org/2000/svg', 13890 math: 'http://www.w3.org/1998/Math/MathML' 13891}; 13892var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' + 13893 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' + 13894 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' + 13895 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' + 13896 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' + 13897 'embed,object,param,source,canvas,script,noscript,del,ins,' + 13898 'caption,col,colgroup,table,thead,tbody,td,th,tr,' + 13899 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' + 13900 'output,progress,select,textarea,' + 13901 'details,dialog,menu,menuitem,summary,' + 13902 'content,element,shadow,template,blockquote,iframe,tfoot'); 13903// this map is intentionally selective, only covering SVG elements that may 13904// contain child elements. 13905var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' + 13906 'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' + 13907 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true); 13908var isPreTag = function (tag) { return tag === 'pre'; }; 13909var isReservedTag = function (tag) { 13910 return isHTMLTag(tag) || isSVG(tag); 13911}; 13912function getTagNamespace(tag) { 13913 if (isSVG(tag)) { 13914 return 'svg'; 13915 } 13916 // basic support for MathML 13917 // note it doesn't support other MathML elements being component roots 13918 if (tag === 'math') { 13919 return 'math'; 13920 } 13921} 13922var unknownElementCache = Object.create(null); 13923function isUnknownElement(tag) { 13924 /* istanbul ignore if */ 13925 if (!inBrowser) { 13926 return true; 13927 } 13928 if (isReservedTag(tag)) { 13929 return false; 13930 } 13931 tag = tag.toLowerCase(); 13932 /* istanbul ignore if */ 13933 if (unknownElementCache[tag] != null) { 13934 return unknownElementCache[tag]; 13935 } 13936 var el = document.createElement(tag); 13937 if (tag.indexOf('-') > -1) { 13938 // http://stackoverflow.com/a/28210364/1070244 13939 return (unknownElementCache[tag] = 13940 el.constructor === window.HTMLUnknownElement || 13941 el.constructor === window.HTMLElement); 13942 } 13943 else { 13944 return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString())); 13945 } 13946} 13947var isTextInputType = makeMap('text,number,password,search,email,tel,url'); 13948 13949/** 13950 * Query an element selector if it's not an element already. 13951 */ 13952function query(el) { 13953 if (typeof el === 'string') { 13954 var selected = document.querySelector(el); 13955 if (!selected) { 13956 true && warn$2('Cannot find element: ' + el); 13957 return document.createElement('div'); 13958 } 13959 return selected; 13960 } 13961 else { 13962 return el; 13963 } 13964} 13965 13966function createElement(tagName, vnode) { 13967 var elm = document.createElement(tagName); 13968 if (tagName !== 'select') { 13969 return elm; 13970 } 13971 // false or null will remove the attribute but undefined will not 13972 if (vnode.data && 13973 vnode.data.attrs && 13974 vnode.data.attrs.multiple !== undefined) { 13975 elm.setAttribute('multiple', 'multiple'); 13976 } 13977 return elm; 13978} 13979function createElementNS(namespace, tagName) { 13980 return document.createElementNS(namespaceMap[namespace], tagName); 13981} 13982function createTextNode(text) { 13983 return document.createTextNode(text); 13984} 13985function createComment(text) { 13986 return document.createComment(text); 13987} 13988function insertBefore(parentNode, newNode, referenceNode) { 13989 parentNode.insertBefore(newNode, referenceNode); 13990} 13991function removeChild(node, child) { 13992 node.removeChild(child); 13993} 13994function appendChild(node, child) { 13995 node.appendChild(child); 13996} 13997function parentNode(node) { 13998 return node.parentNode; 13999} 14000function nextSibling(node) { 14001 return node.nextSibling; 14002} 14003function tagName(node) { 14004 return node.tagName; 14005} 14006function setTextContent(node, text) { 14007 node.textContent = text; 14008} 14009function setStyleScope(node, scopeId) { 14010 node.setAttribute(scopeId, ''); 14011} 14012 14013var nodeOps = /*#__PURE__*/Object.freeze({ 14014 __proto__: null, 14015 createElement: createElement, 14016 createElementNS: createElementNS, 14017 createTextNode: createTextNode, 14018 createComment: createComment, 14019 insertBefore: insertBefore, 14020 removeChild: removeChild, 14021 appendChild: appendChild, 14022 parentNode: parentNode, 14023 nextSibling: nextSibling, 14024 tagName: tagName, 14025 setTextContent: setTextContent, 14026 setStyleScope: setStyleScope 14027}); 14028 14029var ref = { 14030 create: function (_, vnode) { 14031 registerRef(vnode); 14032 }, 14033 update: function (oldVnode, vnode) { 14034 if (oldVnode.data.ref !== vnode.data.ref) { 14035 registerRef(oldVnode, true); 14036 registerRef(vnode); 14037 } 14038 }, 14039 destroy: function (vnode) { 14040 registerRef(vnode, true); 14041 } 14042}; 14043function registerRef(vnode, isRemoval) { 14044 var ref = vnode.data.ref; 14045 if (!isDef(ref)) 14046 return; 14047 var vm = vnode.context; 14048 var refValue = vnode.componentInstance || vnode.elm; 14049 var value = isRemoval ? null : refValue; 14050 var $refsValue = isRemoval ? undefined : refValue; 14051 if (isFunction(ref)) { 14052 invokeWithErrorHandling(ref, vm, [value], vm, "template ref function"); 14053 return; 14054 } 14055 var isFor = vnode.data.refInFor; 14056 var _isString = typeof ref === 'string' || typeof ref === 'number'; 14057 var _isRef = isRef(ref); 14058 var refs = vm.$refs; 14059 if (_isString || _isRef) { 14060 if (isFor) { 14061 var existing = _isString ? refs[ref] : ref.value; 14062 if (isRemoval) { 14063 isArray(existing) && remove$2(existing, refValue); 14064 } 14065 else { 14066 if (!isArray(existing)) { 14067 if (_isString) { 14068 refs[ref] = [refValue]; 14069 setSetupRef(vm, ref, refs[ref]); 14070 } 14071 else { 14072 ref.value = [refValue]; 14073 } 14074 } 14075 else if (!existing.includes(refValue)) { 14076 existing.push(refValue); 14077 } 14078 } 14079 } 14080 else if (_isString) { 14081 if (isRemoval && refs[ref] !== refValue) { 14082 return; 14083 } 14084 refs[ref] = $refsValue; 14085 setSetupRef(vm, ref, value); 14086 } 14087 else if (_isRef) { 14088 if (isRemoval && ref.value !== refValue) { 14089 return; 14090 } 14091 ref.value = value; 14092 } 14093 else if (true) { 14094 warn$2("Invalid template ref type: ".concat(typeof ref)); 14095 } 14096 } 14097} 14098function setSetupRef(_a, key, val) { 14099 var _setupState = _a._setupState; 14100 if (_setupState && hasOwn(_setupState, key)) { 14101 if (isRef(_setupState[key])) { 14102 _setupState[key].value = val; 14103 } 14104 else { 14105 _setupState[key] = val; 14106 } 14107 } 14108} 14109 14110/** 14111 * Virtual DOM patching algorithm based on Snabbdom by 14112 * Simon Friis Vindum (@paldepind) 14113 * Licensed under the MIT License 14114 * https://github.com/paldepind/snabbdom/blob/master/LICENSE 14115 * 14116 * modified by Evan You (@yyx990803) 14117 * 14118 * Not type-checking this because this file is perf-critical and the cost 14119 * of making flow understand it is not worth it. 14120 */ 14121var emptyNode = new VNode('', {}, []); 14122var hooks = ['create', 'activate', 'update', 'remove', 'destroy']; 14123function sameVnode(a, b) { 14124 return (a.key === b.key && 14125 a.asyncFactory === b.asyncFactory && 14126 ((a.tag === b.tag && 14127 a.isComment === b.isComment && 14128 isDef(a.data) === isDef(b.data) && 14129 sameInputType(a, b)) || 14130 (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error)))); 14131} 14132function sameInputType(a, b) { 14133 if (a.tag !== 'input') 14134 return true; 14135 var i; 14136 var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type; 14137 var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type; 14138 return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB)); 14139} 14140function createKeyToOldIdx(children, beginIdx, endIdx) { 14141 var i, key; 14142 var map = {}; 14143 for (i = beginIdx; i <= endIdx; ++i) { 14144 key = children[i].key; 14145 if (isDef(key)) 14146 map[key] = i; 14147 } 14148 return map; 14149} 14150function createPatchFunction(backend) { 14151 var i, j; 14152 var cbs = {}; 14153 var modules = backend.modules, nodeOps = backend.nodeOps; 14154 for (i = 0; i < hooks.length; ++i) { 14155 cbs[hooks[i]] = []; 14156 for (j = 0; j < modules.length; ++j) { 14157 if (isDef(modules[j][hooks[i]])) { 14158 cbs[hooks[i]].push(modules[j][hooks[i]]); 14159 } 14160 } 14161 } 14162 function emptyNodeAt(elm) { 14163 return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm); 14164 } 14165 function createRmCb(childElm, listeners) { 14166 function remove() { 14167 if (--remove.listeners === 0) { 14168 removeNode(childElm); 14169 } 14170 } 14171 remove.listeners = listeners; 14172 return remove; 14173 } 14174 function removeNode(el) { 14175 var parent = nodeOps.parentNode(el); 14176 // element may have already been removed due to v-html / v-text 14177 if (isDef(parent)) { 14178 nodeOps.removeChild(parent, el); 14179 } 14180 } 14181 function isUnknownElement(vnode, inVPre) { 14182 return (!inVPre && 14183 !vnode.ns && 14184 !(config.ignoredElements.length && 14185 config.ignoredElements.some(function (ignore) { 14186 return isRegExp(ignore) 14187 ? ignore.test(vnode.tag) 14188 : ignore === vnode.tag; 14189 })) && 14190 config.isUnknownElement(vnode.tag)); 14191 } 14192 var creatingElmInVPre = 0; 14193 function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) { 14194 if (isDef(vnode.elm) && isDef(ownerArray)) { 14195 // This vnode was used in a previous render! 14196 // now it's used as a new node, overwriting its elm would cause 14197 // potential patch errors down the road when it's used as an insertion 14198 // reference node. Instead, we clone the node on-demand before creating 14199 // associated DOM element for it. 14200 vnode = ownerArray[index] = cloneVNode(vnode); 14201 } 14202 vnode.isRootInsert = !nested; // for transition enter check 14203 if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) { 14204 return; 14205 } 14206 var data = vnode.data; 14207 var children = vnode.children; 14208 var tag = vnode.tag; 14209 if (isDef(tag)) { 14210 if (true) { 14211 if (data && data.pre) { 14212 creatingElmInVPre++; 14213 } 14214 if (isUnknownElement(vnode, creatingElmInVPre)) { 14215 warn$2('Unknown custom element: <' + 14216 tag + 14217 '> - did you ' + 14218 'register the component correctly? For recursive components, ' + 14219 'make sure to provide the "name" option.', vnode.context); 14220 } 14221 } 14222 vnode.elm = vnode.ns 14223 ? nodeOps.createElementNS(vnode.ns, tag) 14224 : nodeOps.createElement(tag, vnode); 14225 setScope(vnode); 14226 createChildren(vnode, children, insertedVnodeQueue); 14227 if (isDef(data)) { 14228 invokeCreateHooks(vnode, insertedVnodeQueue); 14229 } 14230 insert(parentElm, vnode.elm, refElm); 14231 if ( true && data && data.pre) { 14232 creatingElmInVPre--; 14233 } 14234 } 14235 else if (isTrue(vnode.isComment)) { 14236 vnode.elm = nodeOps.createComment(vnode.text); 14237 insert(parentElm, vnode.elm, refElm); 14238 } 14239 else { 14240 vnode.elm = nodeOps.createTextNode(vnode.text); 14241 insert(parentElm, vnode.elm, refElm); 14242 } 14243 } 14244 function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) { 14245 var i = vnode.data; 14246 if (isDef(i)) { 14247 var isReactivated = isDef(vnode.componentInstance) && i.keepAlive; 14248 if (isDef((i = i.hook)) && isDef((i = i.init))) { 14249 i(vnode, false /* hydrating */); 14250 } 14251 // after calling the init hook, if the vnode is a child component 14252 // it should've created a child instance and mounted it. the child 14253 // component also has set the placeholder vnode's elm. 14254 // in that case we can just return the element and be done. 14255 if (isDef(vnode.componentInstance)) { 14256 initComponent(vnode, insertedVnodeQueue); 14257 insert(parentElm, vnode.elm, refElm); 14258 if (isTrue(isReactivated)) { 14259 reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm); 14260 } 14261 return true; 14262 } 14263 } 14264 } 14265 function initComponent(vnode, insertedVnodeQueue) { 14266 if (isDef(vnode.data.pendingInsert)) { 14267 insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert); 14268 vnode.data.pendingInsert = null; 14269 } 14270 vnode.elm = vnode.componentInstance.$el; 14271 if (isPatchable(vnode)) { 14272 invokeCreateHooks(vnode, insertedVnodeQueue); 14273 setScope(vnode); 14274 } 14275 else { 14276 // empty component root. 14277 // skip all element-related modules except for ref (#3455) 14278 registerRef(vnode); 14279 // make sure to invoke the insert hook 14280 insertedVnodeQueue.push(vnode); 14281 } 14282 } 14283 function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) { 14284 var i; 14285 // hack for #4339: a reactivated component with inner transition 14286 // does not trigger because the inner node's created hooks are not called 14287 // again. It's not ideal to involve module-specific logic in here but 14288 // there doesn't seem to be a better way to do it. 14289 var innerNode = vnode; 14290 while (innerNode.componentInstance) { 14291 innerNode = innerNode.componentInstance._vnode; 14292 if (isDef((i = innerNode.data)) && isDef((i = i.transition))) { 14293 for (i = 0; i < cbs.activate.length; ++i) { 14294 cbs.activate[i](emptyNode, innerNode); 14295 } 14296 insertedVnodeQueue.push(innerNode); 14297 break; 14298 } 14299 } 14300 // unlike a newly created component, 14301 // a reactivated keep-alive component doesn't insert itself 14302 insert(parentElm, vnode.elm, refElm); 14303 } 14304 function insert(parent, elm, ref) { 14305 if (isDef(parent)) { 14306 if (isDef(ref)) { 14307 if (nodeOps.parentNode(ref) === parent) { 14308 nodeOps.insertBefore(parent, elm, ref); 14309 } 14310 } 14311 else { 14312 nodeOps.appendChild(parent, elm); 14313 } 14314 } 14315 } 14316 function createChildren(vnode, children, insertedVnodeQueue) { 14317 if (isArray(children)) { 14318 if (true) { 14319 checkDuplicateKeys(children); 14320 } 14321 for (var i_1 = 0; i_1 < children.length; ++i_1) { 14322 createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1); 14323 } 14324 } 14325 else if (isPrimitive(vnode.text)) { 14326 nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text))); 14327 } 14328 } 14329 function isPatchable(vnode) { 14330 while (vnode.componentInstance) { 14331 vnode = vnode.componentInstance._vnode; 14332 } 14333 return isDef(vnode.tag); 14334 } 14335 function invokeCreateHooks(vnode, insertedVnodeQueue) { 14336 for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) { 14337 cbs.create[i_2](emptyNode, vnode); 14338 } 14339 i = vnode.data.hook; // Reuse variable 14340 if (isDef(i)) { 14341 if (isDef(i.create)) 14342 i.create(emptyNode, vnode); 14343 if (isDef(i.insert)) 14344 insertedVnodeQueue.push(vnode); 14345 } 14346 } 14347 // set scope id attribute for scoped CSS. 14348 // this is implemented as a special case to avoid the overhead 14349 // of going through the normal attribute patching process. 14350 function setScope(vnode) { 14351 var i; 14352 if (isDef((i = vnode.fnScopeId))) { 14353 nodeOps.setStyleScope(vnode.elm, i); 14354 } 14355 else { 14356 var ancestor = vnode; 14357 while (ancestor) { 14358 if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) { 14359 nodeOps.setStyleScope(vnode.elm, i); 14360 } 14361 ancestor = ancestor.parent; 14362 } 14363 } 14364 // for slot content they should also get the scopeId from the host instance. 14365 if (isDef((i = activeInstance)) && 14366 i !== vnode.context && 14367 i !== vnode.fnContext && 14368 isDef((i = i.$options._scopeId))) { 14369 nodeOps.setStyleScope(vnode.elm, i); 14370 } 14371 } 14372 function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) { 14373 for (; startIdx <= endIdx; ++startIdx) { 14374 createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx); 14375 } 14376 } 14377 function invokeDestroyHook(vnode) { 14378 var i, j; 14379 var data = vnode.data; 14380 if (isDef(data)) { 14381 if (isDef((i = data.hook)) && isDef((i = i.destroy))) 14382 i(vnode); 14383 for (i = 0; i < cbs.destroy.length; ++i) 14384 cbs.destroy[i](vnode); 14385 } 14386 if (isDef((i = vnode.children))) { 14387 for (j = 0; j < vnode.children.length; ++j) { 14388 invokeDestroyHook(vnode.children[j]); 14389 } 14390 } 14391 } 14392 function removeVnodes(vnodes, startIdx, endIdx) { 14393 for (; startIdx <= endIdx; ++startIdx) { 14394 var ch = vnodes[startIdx]; 14395 if (isDef(ch)) { 14396 if (isDef(ch.tag)) { 14397 removeAndInvokeRemoveHook(ch); 14398 invokeDestroyHook(ch); 14399 } 14400 else { 14401 // Text node 14402 removeNode(ch.elm); 14403 } 14404 } 14405 } 14406 } 14407 function removeAndInvokeRemoveHook(vnode, rm) { 14408 if (isDef(rm) || isDef(vnode.data)) { 14409 var i_3; 14410 var listeners = cbs.remove.length + 1; 14411 if (isDef(rm)) { 14412 // we have a recursively passed down rm callback 14413 // increase the listeners count 14414 rm.listeners += listeners; 14415 } 14416 else { 14417 // directly removing 14418 rm = createRmCb(vnode.elm, listeners); 14419 } 14420 // recursively invoke hooks on child component root node 14421 if (isDef((i_3 = vnode.componentInstance)) && 14422 isDef((i_3 = i_3._vnode)) && 14423 isDef(i_3.data)) { 14424 removeAndInvokeRemoveHook(i_3, rm); 14425 } 14426 for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) { 14427 cbs.remove[i_3](vnode, rm); 14428 } 14429 if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) { 14430 i_3(vnode, rm); 14431 } 14432 else { 14433 rm(); 14434 } 14435 } 14436 else { 14437 removeNode(vnode.elm); 14438 } 14439 } 14440 function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) { 14441 var oldStartIdx = 0; 14442 var newStartIdx = 0; 14443 var oldEndIdx = oldCh.length - 1; 14444 var oldStartVnode = oldCh[0]; 14445 var oldEndVnode = oldCh[oldEndIdx]; 14446 var newEndIdx = newCh.length - 1; 14447 var newStartVnode = newCh[0]; 14448 var newEndVnode = newCh[newEndIdx]; 14449 var oldKeyToIdx, idxInOld, vnodeToMove, refElm; 14450 // removeOnly is a special flag used only by <transition-group> 14451 // to ensure removed elements stay in correct relative positions 14452 // during leaving transitions 14453 var canMove = !removeOnly; 14454 if (true) { 14455 checkDuplicateKeys(newCh); 14456 } 14457 while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) { 14458 if (isUndef(oldStartVnode)) { 14459 oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left 14460 } 14461 else if (isUndef(oldEndVnode)) { 14462 oldEndVnode = oldCh[--oldEndIdx]; 14463 } 14464 else if (sameVnode(oldStartVnode, newStartVnode)) { 14465 patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 14466 oldStartVnode = oldCh[++oldStartIdx]; 14467 newStartVnode = newCh[++newStartIdx]; 14468 } 14469 else if (sameVnode(oldEndVnode, newEndVnode)) { 14470 patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx); 14471 oldEndVnode = oldCh[--oldEndIdx]; 14472 newEndVnode = newCh[--newEndIdx]; 14473 } 14474 else if (sameVnode(oldStartVnode, newEndVnode)) { 14475 // Vnode moved right 14476 patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx); 14477 canMove && 14478 nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm)); 14479 oldStartVnode = oldCh[++oldStartIdx]; 14480 newEndVnode = newCh[--newEndIdx]; 14481 } 14482 else if (sameVnode(oldEndVnode, newStartVnode)) { 14483 // Vnode moved left 14484 patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 14485 canMove && 14486 nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm); 14487 oldEndVnode = oldCh[--oldEndIdx]; 14488 newStartVnode = newCh[++newStartIdx]; 14489 } 14490 else { 14491 if (isUndef(oldKeyToIdx)) 14492 oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); 14493 idxInOld = isDef(newStartVnode.key) 14494 ? oldKeyToIdx[newStartVnode.key] 14495 : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx); 14496 if (isUndef(idxInOld)) { 14497 // New element 14498 createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx); 14499 } 14500 else { 14501 vnodeToMove = oldCh[idxInOld]; 14502 if (sameVnode(vnodeToMove, newStartVnode)) { 14503 patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 14504 oldCh[idxInOld] = undefined; 14505 canMove && 14506 nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm); 14507 } 14508 else { 14509 // same key but different element. treat as new element 14510 createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx); 14511 } 14512 } 14513 newStartVnode = newCh[++newStartIdx]; 14514 } 14515 } 14516 if (oldStartIdx > oldEndIdx) { 14517 refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm; 14518 addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue); 14519 } 14520 else if (newStartIdx > newEndIdx) { 14521 removeVnodes(oldCh, oldStartIdx, oldEndIdx); 14522 } 14523 } 14524 function checkDuplicateKeys(children) { 14525 var seenKeys = {}; 14526 for (var i_4 = 0; i_4 < children.length; i_4++) { 14527 var vnode = children[i_4]; 14528 var key = vnode.key; 14529 if (isDef(key)) { 14530 if (seenKeys[key]) { 14531 warn$2("Duplicate keys detected: '".concat(key, "'. This may cause an update error."), vnode.context); 14532 } 14533 else { 14534 seenKeys[key] = true; 14535 } 14536 } 14537 } 14538 } 14539 function findIdxInOld(node, oldCh, start, end) { 14540 for (var i_5 = start; i_5 < end; i_5++) { 14541 var c = oldCh[i_5]; 14542 if (isDef(c) && sameVnode(node, c)) 14543 return i_5; 14544 } 14545 } 14546 function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) { 14547 if (oldVnode === vnode) { 14548 return; 14549 } 14550 if (isDef(vnode.elm) && isDef(ownerArray)) { 14551 // clone reused vnode 14552 vnode = ownerArray[index] = cloneVNode(vnode); 14553 } 14554 var elm = (vnode.elm = oldVnode.elm); 14555 if (isTrue(oldVnode.isAsyncPlaceholder)) { 14556 if (isDef(vnode.asyncFactory.resolved)) { 14557 hydrate(oldVnode.elm, vnode, insertedVnodeQueue); 14558 } 14559 else { 14560 vnode.isAsyncPlaceholder = true; 14561 } 14562 return; 14563 } 14564 // reuse element for static trees. 14565 // note we only do this if the vnode is cloned - 14566 // if the new node is not cloned it means the render functions have been 14567 // reset by the hot-reload-api and we need to do a proper re-render. 14568 if (isTrue(vnode.isStatic) && 14569 isTrue(oldVnode.isStatic) && 14570 vnode.key === oldVnode.key && 14571 (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) { 14572 vnode.componentInstance = oldVnode.componentInstance; 14573 return; 14574 } 14575 var i; 14576 var data = vnode.data; 14577 if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) { 14578 i(oldVnode, vnode); 14579 } 14580 var oldCh = oldVnode.children; 14581 var ch = vnode.children; 14582 if (isDef(data) && isPatchable(vnode)) { 14583 for (i = 0; i < cbs.update.length; ++i) 14584 cbs.update[i](oldVnode, vnode); 14585 if (isDef((i = data.hook)) && isDef((i = i.update))) 14586 i(oldVnode, vnode); 14587 } 14588 if (isUndef(vnode.text)) { 14589 if (isDef(oldCh) && isDef(ch)) { 14590 if (oldCh !== ch) 14591 updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); 14592 } 14593 else if (isDef(ch)) { 14594 if (true) { 14595 checkDuplicateKeys(ch); 14596 } 14597 if (isDef(oldVnode.text)) 14598 nodeOps.setTextContent(elm, ''); 14599 addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue); 14600 } 14601 else if (isDef(oldCh)) { 14602 removeVnodes(oldCh, 0, oldCh.length - 1); 14603 } 14604 else if (isDef(oldVnode.text)) { 14605 nodeOps.setTextContent(elm, ''); 14606 } 14607 } 14608 else if (oldVnode.text !== vnode.text) { 14609 nodeOps.setTextContent(elm, vnode.text); 14610 } 14611 if (isDef(data)) { 14612 if (isDef((i = data.hook)) && isDef((i = i.postpatch))) 14613 i(oldVnode, vnode); 14614 } 14615 } 14616 function invokeInsertHook(vnode, queue, initial) { 14617 // delay insert hooks for component root nodes, invoke them after the 14618 // element is really inserted 14619 if (isTrue(initial) && isDef(vnode.parent)) { 14620 vnode.parent.data.pendingInsert = queue; 14621 } 14622 else { 14623 for (var i_6 = 0; i_6 < queue.length; ++i_6) { 14624 queue[i_6].data.hook.insert(queue[i_6]); 14625 } 14626 } 14627 } 14628 var hydrationBailed = false; 14629 // list of modules that can skip create hook during hydration because they 14630 // are already rendered on the client or has no need for initialization 14631 // Note: style is excluded because it relies on initial clone for future 14632 // deep updates (#7063). 14633 var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key'); 14634 // Note: this is a browser-only function so we can assume elms are DOM nodes. 14635 function hydrate(elm, vnode, insertedVnodeQueue, inVPre) { 14636 var i; 14637 var tag = vnode.tag, data = vnode.data, children = vnode.children; 14638 inVPre = inVPre || (data && data.pre); 14639 vnode.elm = elm; 14640 if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) { 14641 vnode.isAsyncPlaceholder = true; 14642 return true; 14643 } 14644 // assert node match 14645 if (true) { 14646 if (!assertNodeMatch(elm, vnode, inVPre)) { 14647 return false; 14648 } 14649 } 14650 if (isDef(data)) { 14651 if (isDef((i = data.hook)) && isDef((i = i.init))) 14652 i(vnode, true /* hydrating */); 14653 if (isDef((i = vnode.componentInstance))) { 14654 // child component. it should have hydrated its own tree. 14655 initComponent(vnode, insertedVnodeQueue); 14656 return true; 14657 } 14658 } 14659 if (isDef(tag)) { 14660 if (isDef(children)) { 14661 // empty element, allow client to pick up and populate children 14662 if (!elm.hasChildNodes()) { 14663 createChildren(vnode, children, insertedVnodeQueue); 14664 } 14665 else { 14666 // v-html and domProps: innerHTML 14667 if (isDef((i = data)) && 14668 isDef((i = i.domProps)) && 14669 isDef((i = i.innerHTML))) { 14670 if (i !== elm.innerHTML) { 14671 /* istanbul ignore if */ 14672 if ( true && 14673 typeof console !== 'undefined' && 14674 !hydrationBailed) { 14675 hydrationBailed = true; 14676 console.warn('Parent: ', elm); 14677 console.warn('server innerHTML: ', i); 14678 console.warn('client innerHTML: ', elm.innerHTML); 14679 } 14680 return false; 14681 } 14682 } 14683 else { 14684 // iterate and compare children lists 14685 var childrenMatch = true; 14686 var childNode = elm.firstChild; 14687 for (var i_7 = 0; i_7 < children.length; i_7++) { 14688 if (!childNode || 14689 !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) { 14690 childrenMatch = false; 14691 break; 14692 } 14693 childNode = childNode.nextSibling; 14694 } 14695 // if childNode is not null, it means the actual childNodes list is 14696 // longer than the virtual children list. 14697 if (!childrenMatch || childNode) { 14698 /* istanbul ignore if */ 14699 if ( true && 14700 typeof console !== 'undefined' && 14701 !hydrationBailed) { 14702 hydrationBailed = true; 14703 console.warn('Parent: ', elm); 14704 console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children); 14705 } 14706 return false; 14707 } 14708 } 14709 } 14710 } 14711 if (isDef(data)) { 14712 var fullInvoke = false; 14713 for (var key in data) { 14714 if (!isRenderedModule(key)) { 14715 fullInvoke = true; 14716 invokeCreateHooks(vnode, insertedVnodeQueue); 14717 break; 14718 } 14719 } 14720 if (!fullInvoke && data['class']) { 14721 // ensure collecting deps for deep class bindings for future updates 14722 traverse(data['class']); 14723 } 14724 } 14725 } 14726 else if (elm.data !== vnode.text) { 14727 elm.data = vnode.text; 14728 } 14729 return true; 14730 } 14731 function assertNodeMatch(node, vnode, inVPre) { 14732 if (isDef(vnode.tag)) { 14733 return (vnode.tag.indexOf('vue-component') === 0 || 14734 (!isUnknownElement(vnode, inVPre) && 14735 vnode.tag.toLowerCase() === 14736 (node.tagName && node.tagName.toLowerCase()))); 14737 } 14738 else { 14739 return node.nodeType === (vnode.isComment ? 8 : 3); 14740 } 14741 } 14742 return function patch(oldVnode, vnode, hydrating, removeOnly) { 14743 if (isUndef(vnode)) { 14744 if (isDef(oldVnode)) 14745 invokeDestroyHook(oldVnode); 14746 return; 14747 } 14748 var isInitialPatch = false; 14749 var insertedVnodeQueue = []; 14750 if (isUndef(oldVnode)) { 14751 // empty mount (likely as component), create new root element 14752 isInitialPatch = true; 14753 createElm(vnode, insertedVnodeQueue); 14754 } 14755 else { 14756 var isRealElement = isDef(oldVnode.nodeType); 14757 if (!isRealElement && sameVnode(oldVnode, vnode)) { 14758 // patch existing root node 14759 patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly); 14760 } 14761 else { 14762 if (isRealElement) { 14763 // mounting to a real element 14764 // check if this is server-rendered content and if we can perform 14765 // a successful hydration. 14766 if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) { 14767 oldVnode.removeAttribute(SSR_ATTR); 14768 hydrating = true; 14769 } 14770 if (isTrue(hydrating)) { 14771 if (hydrate(oldVnode, vnode, insertedVnodeQueue)) { 14772 invokeInsertHook(vnode, insertedVnodeQueue, true); 14773 return oldVnode; 14774 } 14775 else if (true) { 14776 warn$2('The client-side rendered virtual DOM tree is not matching ' + 14777 'server-rendered content. This is likely caused by incorrect ' + 14778 'HTML markup, for example nesting block-level elements inside ' + 14779 '<p>, or missing <tbody>. Bailing hydration and performing ' + 14780 'full client-side render.'); 14781 } 14782 } 14783 // either not server-rendered, or hydration failed. 14784 // create an empty node and replace it 14785 oldVnode = emptyNodeAt(oldVnode); 14786 } 14787 // replacing existing element 14788 var oldElm = oldVnode.elm; 14789 var parentElm = nodeOps.parentNode(oldElm); 14790 // create new node 14791 createElm(vnode, insertedVnodeQueue, 14792 // extremely rare edge case: do not insert if old element is in a 14793 // leaving transition. Only happens when combining transition + 14794 // keep-alive + HOCs. (#4590) 14795 oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm)); 14796 // update parent placeholder node element, recursively 14797 if (isDef(vnode.parent)) { 14798 var ancestor = vnode.parent; 14799 var patchable = isPatchable(vnode); 14800 while (ancestor) { 14801 for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) { 14802 cbs.destroy[i_8](ancestor); 14803 } 14804 ancestor.elm = vnode.elm; 14805 if (patchable) { 14806 for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) { 14807 cbs.create[i_9](emptyNode, ancestor); 14808 } 14809 // #6513 14810 // invoke insert hooks that may have been merged by create hooks. 14811 // e.g. for directives that uses the "inserted" hook. 14812 var insert_1 = ancestor.data.hook.insert; 14813 if (insert_1.merged) { 14814 // start at index 1 to avoid re-invoking component mounted hook 14815 for (var i_10 = 1; i_10 < insert_1.fns.length; i_10++) { 14816 insert_1.fns[i_10](); 14817 } 14818 } 14819 } 14820 else { 14821 registerRef(ancestor); 14822 } 14823 ancestor = ancestor.parent; 14824 } 14825 } 14826 // destroy old node 14827 if (isDef(parentElm)) { 14828 removeVnodes([oldVnode], 0, 0); 14829 } 14830 else if (isDef(oldVnode.tag)) { 14831 invokeDestroyHook(oldVnode); 14832 } 14833 } 14834 } 14835 invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch); 14836 return vnode.elm; 14837 }; 14838} 14839 14840var directives$1 = { 14841 create: updateDirectives, 14842 update: updateDirectives, 14843 destroy: function unbindDirectives(vnode) { 14844 // @ts-expect-error emptyNode is not VNodeWithData 14845 updateDirectives(vnode, emptyNode); 14846 } 14847}; 14848function updateDirectives(oldVnode, vnode) { 14849 if (oldVnode.data.directives || vnode.data.directives) { 14850 _update(oldVnode, vnode); 14851 } 14852} 14853function _update(oldVnode, vnode) { 14854 var isCreate = oldVnode === emptyNode; 14855 var isDestroy = vnode === emptyNode; 14856 var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context); 14857 var newDirs = normalizeDirectives(vnode.data.directives, vnode.context); 14858 var dirsWithInsert = []; 14859 var dirsWithPostpatch = []; 14860 var key, oldDir, dir; 14861 for (key in newDirs) { 14862 oldDir = oldDirs[key]; 14863 dir = newDirs[key]; 14864 if (!oldDir) { 14865 // new directive, bind 14866 callHook(dir, 'bind', vnode, oldVnode); 14867 if (dir.def && dir.def.inserted) { 14868 dirsWithInsert.push(dir); 14869 } 14870 } 14871 else { 14872 // existing directive, update 14873 dir.oldValue = oldDir.value; 14874 dir.oldArg = oldDir.arg; 14875 callHook(dir, 'update', vnode, oldVnode); 14876 if (dir.def && dir.def.componentUpdated) { 14877 dirsWithPostpatch.push(dir); 14878 } 14879 } 14880 } 14881 if (dirsWithInsert.length) { 14882 var callInsert = function () { 14883 for (var i = 0; i < dirsWithInsert.length; i++) { 14884 callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode); 14885 } 14886 }; 14887 if (isCreate) { 14888 mergeVNodeHook(vnode, 'insert', callInsert); 14889 } 14890 else { 14891 callInsert(); 14892 } 14893 } 14894 if (dirsWithPostpatch.length) { 14895 mergeVNodeHook(vnode, 'postpatch', function () { 14896 for (var i = 0; i < dirsWithPostpatch.length; i++) { 14897 callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode); 14898 } 14899 }); 14900 } 14901 if (!isCreate) { 14902 for (key in oldDirs) { 14903 if (!newDirs[key]) { 14904 // no longer present, unbind 14905 callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy); 14906 } 14907 } 14908 } 14909} 14910var emptyModifiers = Object.create(null); 14911function normalizeDirectives(dirs, vm) { 14912 var res = Object.create(null); 14913 if (!dirs) { 14914 // $flow-disable-line 14915 return res; 14916 } 14917 var i, dir; 14918 for (i = 0; i < dirs.length; i++) { 14919 dir = dirs[i]; 14920 if (!dir.modifiers) { 14921 // $flow-disable-line 14922 dir.modifiers = emptyModifiers; 14923 } 14924 res[getRawDirName(dir)] = dir; 14925 if (vm._setupState && vm._setupState.__sfc) { 14926 var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name); 14927 if (typeof setupDef === 'function') { 14928 dir.def = { 14929 bind: setupDef, 14930 update: setupDef, 14931 }; 14932 } 14933 else { 14934 dir.def = setupDef; 14935 } 14936 } 14937 dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true); 14938 } 14939 // $flow-disable-line 14940 return res; 14941} 14942function getRawDirName(dir) { 14943 return (dir.rawName || "".concat(dir.name, ".").concat(Object.keys(dir.modifiers || {}).join('.'))); 14944} 14945function callHook(dir, hook, vnode, oldVnode, isDestroy) { 14946 var fn = dir.def && dir.def[hook]; 14947 if (fn) { 14948 try { 14949 fn(vnode.elm, dir, vnode, oldVnode, isDestroy); 14950 } 14951 catch (e) { 14952 handleError(e, vnode.context, "directive ".concat(dir.name, " ").concat(hook, " hook")); 14953 } 14954 } 14955} 14956 14957var baseModules = [ref, directives$1]; 14958 14959function updateAttrs(oldVnode, vnode) { 14960 var opts = vnode.componentOptions; 14961 if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) { 14962 return; 14963 } 14964 if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) { 14965 return; 14966 } 14967 var key, cur, old; 14968 var elm = vnode.elm; 14969 var oldAttrs = oldVnode.data.attrs || {}; 14970 var attrs = vnode.data.attrs || {}; 14971 // clone observed objects, as the user probably wants to mutate it 14972 if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) { 14973 attrs = vnode.data.attrs = extend({}, attrs); 14974 } 14975 for (key in attrs) { 14976 cur = attrs[key]; 14977 old = oldAttrs[key]; 14978 if (old !== cur) { 14979 setAttr(elm, key, cur, vnode.data.pre); 14980 } 14981 } 14982 // #4391: in IE9, setting type can reset value for input[type=radio] 14983 // #6666: IE/Edge forces progress value down to 1 before setting a max 14984 /* istanbul ignore if */ 14985 if ((isIE || isEdge) && attrs.value !== oldAttrs.value) { 14986 setAttr(elm, 'value', attrs.value); 14987 } 14988 for (key in oldAttrs) { 14989 if (isUndef(attrs[key])) { 14990 if (isXlink(key)) { 14991 elm.removeAttributeNS(xlinkNS, getXlinkProp(key)); 14992 } 14993 else if (!isEnumeratedAttr(key)) { 14994 elm.removeAttribute(key); 14995 } 14996 } 14997 } 14998} 14999function setAttr(el, key, value, isInPre) { 15000 if (isInPre || el.tagName.indexOf('-') > -1) { 15001 baseSetAttr(el, key, value); 15002 } 15003 else if (isBooleanAttr(key)) { 15004 // set attribute for blank value 15005 // e.g. <option disabled>Select one</option> 15006 if (isFalsyAttrValue(value)) { 15007 el.removeAttribute(key); 15008 } 15009 else { 15010 // technically allowfullscreen is a boolean attribute for <iframe>, 15011 // but Flash expects a value of "true" when used on <embed> tag 15012 value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key; 15013 el.setAttribute(key, value); 15014 } 15015 } 15016 else if (isEnumeratedAttr(key)) { 15017 el.setAttribute(key, convertEnumeratedValue(key, value)); 15018 } 15019 else if (isXlink(key)) { 15020 if (isFalsyAttrValue(value)) { 15021 el.removeAttributeNS(xlinkNS, getXlinkProp(key)); 15022 } 15023 else { 15024 el.setAttributeNS(xlinkNS, key, value); 15025 } 15026 } 15027 else { 15028 baseSetAttr(el, key, value); 15029 } 15030} 15031function baseSetAttr(el, key, value) { 15032 if (isFalsyAttrValue(value)) { 15033 el.removeAttribute(key); 15034 } 15035 else { 15036 // #7138: IE10 & 11 fires input event when setting placeholder on 15037 // <textarea>... block the first input event and remove the blocker 15038 // immediately. 15039 /* istanbul ignore if */ 15040 if (isIE && 15041 !isIE9 && 15042 el.tagName === 'TEXTAREA' && 15043 key === 'placeholder' && 15044 value !== '' && 15045 !el.__ieph) { 15046 var blocker_1 = function (e) { 15047 e.stopImmediatePropagation(); 15048 el.removeEventListener('input', blocker_1); 15049 }; 15050 el.addEventListener('input', blocker_1); 15051 // $flow-disable-line 15052 el.__ieph = true; /* IE placeholder patched */ 15053 } 15054 el.setAttribute(key, value); 15055 } 15056} 15057var attrs = { 15058 create: updateAttrs, 15059 update: updateAttrs 15060}; 15061 15062function updateClass(oldVnode, vnode) { 15063 var el = vnode.elm; 15064 var data = vnode.data; 15065 var oldData = oldVnode.data; 15066 if (isUndef(data.staticClass) && 15067 isUndef(data.class) && 15068 (isUndef(oldData) || 15069 (isUndef(oldData.staticClass) && isUndef(oldData.class)))) { 15070 return; 15071 } 15072 var cls = genClassForVnode(vnode); 15073 // handle transition classes 15074 var transitionClass = el._transitionClasses; 15075 if (isDef(transitionClass)) { 15076 cls = concat(cls, stringifyClass(transitionClass)); 15077 } 15078 // set the class 15079 if (cls !== el._prevClass) { 15080 el.setAttribute('class', cls); 15081 el._prevClass = cls; 15082 } 15083} 15084var klass$1 = { 15085 create: updateClass, 15086 update: updateClass 15087}; 15088 15089var validDivisionCharRE = /[\w).+\-_$\]]/; 15090function parseFilters(exp) { 15091 var inSingle = false; 15092 var inDouble = false; 15093 var inTemplateString = false; 15094 var inRegex = false; 15095 var curly = 0; 15096 var square = 0; 15097 var paren = 0; 15098 var lastFilterIndex = 0; 15099 var c, prev, i, expression, filters; 15100 for (i = 0; i < exp.length; i++) { 15101 prev = c; 15102 c = exp.charCodeAt(i); 15103 if (inSingle) { 15104 if (c === 0x27 && prev !== 0x5c) 15105 inSingle = false; 15106 } 15107 else if (inDouble) { 15108 if (c === 0x22 && prev !== 0x5c) 15109 inDouble = false; 15110 } 15111 else if (inTemplateString) { 15112 if (c === 0x60 && prev !== 0x5c) 15113 inTemplateString = false; 15114 } 15115 else if (inRegex) { 15116 if (c === 0x2f && prev !== 0x5c) 15117 inRegex = false; 15118 } 15119 else if (c === 0x7c && // pipe 15120 exp.charCodeAt(i + 1) !== 0x7c && 15121 exp.charCodeAt(i - 1) !== 0x7c && 15122 !curly && 15123 !square && 15124 !paren) { 15125 if (expression === undefined) { 15126 // first filter, end of expression 15127 lastFilterIndex = i + 1; 15128 expression = exp.slice(0, i).trim(); 15129 } 15130 else { 15131 pushFilter(); 15132 } 15133 } 15134 else { 15135 switch (c) { 15136 case 0x22: 15137 inDouble = true; 15138 break; // " 15139 case 0x27: 15140 inSingle = true; 15141 break; // ' 15142 case 0x60: 15143 inTemplateString = true; 15144 break; // ` 15145 case 0x28: 15146 paren++; 15147 break; // ( 15148 case 0x29: 15149 paren--; 15150 break; // ) 15151 case 0x5b: 15152 square++; 15153 break; // [ 15154 case 0x5d: 15155 square--; 15156 break; // ] 15157 case 0x7b: 15158 curly++; 15159 break; // { 15160 case 0x7d: 15161 curly--; 15162 break; // } 15163 } 15164 if (c === 0x2f) { 15165 // / 15166 var j = i - 1; 15167 var p 15168 // find first non-whitespace prev char 15169 = void 0; 15170 // find first non-whitespace prev char 15171 for (; j >= 0; j--) { 15172 p = exp.charAt(j); 15173 if (p !== ' ') 15174 break; 15175 } 15176 if (!p || !validDivisionCharRE.test(p)) { 15177 inRegex = true; 15178 } 15179 } 15180 } 15181 } 15182 if (expression === undefined) { 15183 expression = exp.slice(0, i).trim(); 15184 } 15185 else if (lastFilterIndex !== 0) { 15186 pushFilter(); 15187 } 15188 function pushFilter() { 15189 (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim()); 15190 lastFilterIndex = i + 1; 15191 } 15192 if (filters) { 15193 for (i = 0; i < filters.length; i++) { 15194 expression = wrapFilter(expression, filters[i]); 15195 } 15196 } 15197 return expression; 15198} 15199function wrapFilter(exp, filter) { 15200 var i = filter.indexOf('('); 15201 if (i < 0) { 15202 // _f: resolveFilter 15203 return "_f(\"".concat(filter, "\")(").concat(exp, ")"); 15204 } 15205 else { 15206 var name_1 = filter.slice(0, i); 15207 var args = filter.slice(i + 1); 15208 return "_f(\"".concat(name_1, "\")(").concat(exp).concat(args !== ')' ? ',' + args : args); 15209 } 15210} 15211 15212/* eslint-disable no-unused-vars */ 15213function baseWarn(msg, range) { 15214 console.error("[Vue compiler]: ".concat(msg)); 15215} 15216/* eslint-enable no-unused-vars */ 15217function pluckModuleFunction(modules, key) { 15218 return modules ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) : []; 15219} 15220function addProp(el, name, value, range, dynamic) { 15221 (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)); 15222 el.plain = false; 15223} 15224function addAttr(el, name, value, range, dynamic) { 15225 var attrs = dynamic 15226 ? el.dynamicAttrs || (el.dynamicAttrs = []) 15227 : el.attrs || (el.attrs = []); 15228 attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)); 15229 el.plain = false; 15230} 15231// add a raw attr (use this in preTransforms) 15232function addRawAttr(el, name, value, range) { 15233 el.attrsMap[name] = value; 15234 el.attrsList.push(rangeSetItem({ name: name, value: value }, range)); 15235} 15236function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) { 15237 (el.directives || (el.directives = [])).push(rangeSetItem({ 15238 name: name, 15239 rawName: rawName, 15240 value: value, 15241 arg: arg, 15242 isDynamicArg: isDynamicArg, 15243 modifiers: modifiers 15244 }, range)); 15245 el.plain = false; 15246} 15247function prependModifierMarker(symbol, name, dynamic) { 15248 return dynamic ? "_p(".concat(name, ",\"").concat(symbol, "\")") : symbol + name; // mark the event as captured 15249} 15250function addHandler(el, name, value, modifiers, important, warn, range, dynamic) { 15251 modifiers = modifiers || emptyObject; 15252 // warn prevent and passive modifier 15253 /* istanbul ignore if */ 15254 if ( true && warn && modifiers.prevent && modifiers.passive) { 15255 warn("passive and prevent can't be used together. " + 15256 "Passive handler can't prevent default event.", range); 15257 } 15258 // normalize click.right and click.middle since they don't actually fire 15259 // this is technically browser-specific, but at least for now browsers are 15260 // the only target envs that have right/middle clicks. 15261 if (modifiers.right) { 15262 if (dynamic) { 15263 name = "(".concat(name, ")==='click'?'contextmenu':(").concat(name, ")"); 15264 } 15265 else if (name === 'click') { 15266 name = 'contextmenu'; 15267 delete modifiers.right; 15268 } 15269 } 15270 else if (modifiers.middle) { 15271 if (dynamic) { 15272 name = "(".concat(name, ")==='click'?'mouseup':(").concat(name, ")"); 15273 } 15274 else if (name === 'click') { 15275 name = 'mouseup'; 15276 } 15277 } 15278 // check capture modifier 15279 if (modifiers.capture) { 15280 delete modifiers.capture; 15281 name = prependModifierMarker('!', name, dynamic); 15282 } 15283 if (modifiers.once) { 15284 delete modifiers.once; 15285 name = prependModifierMarker('~', name, dynamic); 15286 } 15287 /* istanbul ignore if */ 15288 if (modifiers.passive) { 15289 delete modifiers.passive; 15290 name = prependModifierMarker('&', name, dynamic); 15291 } 15292 var events; 15293 if (modifiers.native) { 15294 delete modifiers.native; 15295 events = el.nativeEvents || (el.nativeEvents = {}); 15296 } 15297 else { 15298 events = el.events || (el.events = {}); 15299 } 15300 var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range); 15301 if (modifiers !== emptyObject) { 15302 newHandler.modifiers = modifiers; 15303 } 15304 var handlers = events[name]; 15305 /* istanbul ignore if */ 15306 if (Array.isArray(handlers)) { 15307 important ? handlers.unshift(newHandler) : handlers.push(newHandler); 15308 } 15309 else if (handlers) { 15310 events[name] = important ? [newHandler, handlers] : [handlers, newHandler]; 15311 } 15312 else { 15313 events[name] = newHandler; 15314 } 15315 el.plain = false; 15316} 15317function getRawBindingAttr(el, name) { 15318 return (el.rawAttrsMap[':' + name] || 15319 el.rawAttrsMap['v-bind:' + name] || 15320 el.rawAttrsMap[name]); 15321} 15322function getBindingAttr(el, name, getStatic) { 15323 var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name); 15324 if (dynamicValue != null) { 15325 return parseFilters(dynamicValue); 15326 } 15327 else if (getStatic !== false) { 15328 var staticValue = getAndRemoveAttr(el, name); 15329 if (staticValue != null) { 15330 return JSON.stringify(staticValue); 15331 } 15332 } 15333} 15334// note: this only removes the attr from the Array (attrsList) so that it 15335// doesn't get processed by processAttrs. 15336// By default it does NOT remove it from the map (attrsMap) because the map is 15337// needed during codegen. 15338function getAndRemoveAttr(el, name, removeFromMap) { 15339 var val; 15340 if ((val = el.attrsMap[name]) != null) { 15341 var list = el.attrsList; 15342 for (var i = 0, l = list.length; i < l; i++) { 15343 if (list[i].name === name) { 15344 list.splice(i, 1); 15345 break; 15346 } 15347 } 15348 } 15349 if (removeFromMap) { 15350 delete el.attrsMap[name]; 15351 } 15352 return val; 15353} 15354function getAndRemoveAttrByRegex(el, name) { 15355 var list = el.attrsList; 15356 for (var i = 0, l = list.length; i < l; i++) { 15357 var attr = list[i]; 15358 if (name.test(attr.name)) { 15359 list.splice(i, 1); 15360 return attr; 15361 } 15362 } 15363} 15364function rangeSetItem(item, range) { 15365 if (range) { 15366 if (range.start != null) { 15367 item.start = range.start; 15368 } 15369 if (range.end != null) { 15370 item.end = range.end; 15371 } 15372 } 15373 return item; 15374} 15375 15376/** 15377 * Cross-platform code generation for component v-model 15378 */ 15379function genComponentModel(el, value, modifiers) { 15380 var _a = modifiers || {}, number = _a.number, trim = _a.trim; 15381 var baseValueExpression = '$$v'; 15382 var valueExpression = baseValueExpression; 15383 if (trim) { 15384 valueExpression = 15385 "(typeof ".concat(baseValueExpression, " === 'string'") + 15386 "? ".concat(baseValueExpression, ".trim()") + 15387 ": ".concat(baseValueExpression, ")"); 15388 } 15389 if (number) { 15390 valueExpression = "_n(".concat(valueExpression, ")"); 15391 } 15392 var assignment = genAssignmentCode(value, valueExpression); 15393 el.model = { 15394 value: "(".concat(value, ")"), 15395 expression: JSON.stringify(value), 15396 callback: "function (".concat(baseValueExpression, ") {").concat(assignment, "}") 15397 }; 15398} 15399/** 15400 * Cross-platform codegen helper for generating v-model value assignment code. 15401 */ 15402function genAssignmentCode(value, assignment) { 15403 var res = parseModel(value); 15404 if (res.key === null) { 15405 return "".concat(value, "=").concat(assignment); 15406 } 15407 else { 15408 return "$set(".concat(res.exp, ", ").concat(res.key, ", ").concat(assignment, ")"); 15409 } 15410} 15411/** 15412 * Parse a v-model expression into a base path and a final key segment. 15413 * Handles both dot-path and possible square brackets. 15414 * 15415 * Possible cases: 15416 * 15417 * - test 15418 * - test[key] 15419 * - test[test1[key]] 15420 * - test["a"][key] 15421 * - xxx.test[a[a].test1[key]] 15422 * - test.xxx.a["asa"][test1[key]] 15423 * 15424 */ 15425var len, str, chr, index, expressionPos, expressionEndPos; 15426function parseModel(val) { 15427 // Fix https://github.com/vuejs/vue/pull/7730 15428 // allow v-model="obj.val " (trailing whitespace) 15429 val = val.trim(); 15430 len = val.length; 15431 if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) { 15432 index = val.lastIndexOf('.'); 15433 if (index > -1) { 15434 return { 15435 exp: val.slice(0, index), 15436 key: '"' + val.slice(index + 1) + '"' 15437 }; 15438 } 15439 else { 15440 return { 15441 exp: val, 15442 key: null 15443 }; 15444 } 15445 } 15446 str = val; 15447 index = expressionPos = expressionEndPos = 0; 15448 while (!eof()) { 15449 chr = next(); 15450 /* istanbul ignore if */ 15451 if (isStringStart(chr)) { 15452 parseString(chr); 15453 } 15454 else if (chr === 0x5b) { 15455 parseBracket(chr); 15456 } 15457 } 15458 return { 15459 exp: val.slice(0, expressionPos), 15460 key: val.slice(expressionPos + 1, expressionEndPos) 15461 }; 15462} 15463function next() { 15464 return str.charCodeAt(++index); 15465} 15466function eof() { 15467 return index >= len; 15468} 15469function isStringStart(chr) { 15470 return chr === 0x22 || chr === 0x27; 15471} 15472function parseBracket(chr) { 15473 var inBracket = 1; 15474 expressionPos = index; 15475 while (!eof()) { 15476 chr = next(); 15477 if (isStringStart(chr)) { 15478 parseString(chr); 15479 continue; 15480 } 15481 if (chr === 0x5b) 15482 inBracket++; 15483 if (chr === 0x5d) 15484 inBracket--; 15485 if (inBracket === 0) { 15486 expressionEndPos = index; 15487 break; 15488 } 15489 } 15490} 15491function parseString(chr) { 15492 var stringQuote = chr; 15493 while (!eof()) { 15494 chr = next(); 15495 if (chr === stringQuote) { 15496 break; 15497 } 15498 } 15499} 15500 15501var warn$1; 15502// in some cases, the event used has to be determined at runtime 15503// so we used some reserved tokens during compile. 15504var RANGE_TOKEN = '__r'; 15505var CHECKBOX_RADIO_TOKEN = '__c'; 15506function model$1(el, dir, _warn) { 15507 warn$1 = _warn; 15508 var value = dir.value; 15509 var modifiers = dir.modifiers; 15510 var tag = el.tag; 15511 var type = el.attrsMap.type; 15512 if (true) { 15513 // inputs with type="file" are read only and setting the input's 15514 // value will throw an error. 15515 if (tag === 'input' && type === 'file') { 15516 warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\" type=\"file\">:\n") + 15517 "File inputs are read only. Use a v-on:change listener instead.", el.rawAttrsMap['v-model']); 15518 } 15519 } 15520 if (el.component) { 15521 genComponentModel(el, value, modifiers); 15522 // component v-model doesn't need extra runtime 15523 return false; 15524 } 15525 else if (tag === 'select') { 15526 genSelect(el, value, modifiers); 15527 } 15528 else if (tag === 'input' && type === 'checkbox') { 15529 genCheckboxModel(el, value, modifiers); 15530 } 15531 else if (tag === 'input' && type === 'radio') { 15532 genRadioModel(el, value, modifiers); 15533 } 15534 else if (tag === 'input' || tag === 'textarea') { 15535 genDefaultModel(el, value, modifiers); 15536 } 15537 else if (!config.isReservedTag(tag)) { 15538 genComponentModel(el, value, modifiers); 15539 // component v-model doesn't need extra runtime 15540 return false; 15541 } 15542 else if (true) { 15543 warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") + 15544 "v-model is not supported on this element type. " + 15545 "If you are working with contenteditable, it's recommended to " + 15546 'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']); 15547 } 15548 // ensure runtime directive metadata 15549 return true; 15550} 15551function genCheckboxModel(el, value, modifiers) { 15552 var number = modifiers && modifiers.number; 15553 var valueBinding = getBindingAttr(el, 'value') || 'null'; 15554 var trueValueBinding = getBindingAttr(el, 'true-value') || 'true'; 15555 var falseValueBinding = getBindingAttr(el, 'false-value') || 'false'; 15556 addProp(el, 'checked', "Array.isArray(".concat(value, ")") + 15557 "?_i(".concat(value, ",").concat(valueBinding, ")>-1") + 15558 (trueValueBinding === 'true' 15559 ? ":(".concat(value, ")") 15560 : ":_q(".concat(value, ",").concat(trueValueBinding, ")"))); 15561 addHandler(el, 'change', "var $$a=".concat(value, ",") + 15562 '$$el=$event.target,' + 15563 "$$c=$$el.checked?(".concat(trueValueBinding, "):(").concat(falseValueBinding, ");") + 15564 'if(Array.isArray($$a)){' + 15565 "var $$v=".concat(number ? '_n(' + valueBinding + ')' : valueBinding, ",") + 15566 '$$i=_i($$a,$$v);' + 15567 "if($$el.checked){$$i<0&&(".concat(genAssignmentCode(value, '$$a.concat([$$v])'), ")}") + 15568 "else{$$i>-1&&(".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), ")}") + 15569 "}else{".concat(genAssignmentCode(value, '$$c'), "}"), null, true); 15570} 15571function genRadioModel(el, value, modifiers) { 15572 var number = modifiers && modifiers.number; 15573 var valueBinding = getBindingAttr(el, 'value') || 'null'; 15574 valueBinding = number ? "_n(".concat(valueBinding, ")") : valueBinding; 15575 addProp(el, 'checked', "_q(".concat(value, ",").concat(valueBinding, ")")); 15576 addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true); 15577} 15578function genSelect(el, value, modifiers) { 15579 var number = modifiers && modifiers.number; 15580 var selectedVal = "Array.prototype.filter" + 15581 ".call($event.target.options,function(o){return o.selected})" + 15582 ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" + 15583 "return ".concat(number ? '_n(val)' : 'val', "})"); 15584 var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]'; 15585 var code = "var $$selectedVal = ".concat(selectedVal, ";"); 15586 code = "".concat(code, " ").concat(genAssignmentCode(value, assignment)); 15587 addHandler(el, 'change', code, null, true); 15588} 15589function genDefaultModel(el, value, modifiers) { 15590 var type = el.attrsMap.type; 15591 // warn if v-bind:value conflicts with v-model 15592 // except for inputs with v-bind:type 15593 if (true) { 15594 var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value']; 15595 var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type']; 15596 if (value_1 && !typeBinding) { 15597 var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value'; 15598 warn$1("".concat(binding, "=\"").concat(value_1, "\" conflicts with v-model on the same element ") + 15599 'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]); 15600 } 15601 } 15602 var _a = modifiers || {}, lazy = _a.lazy, number = _a.number, trim = _a.trim; 15603 var needCompositionGuard = !lazy && type !== 'range'; 15604 var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input'; 15605 var valueExpression = '$event.target.value'; 15606 if (trim) { 15607 valueExpression = "$event.target.value.trim()"; 15608 } 15609 if (number) { 15610 valueExpression = "_n(".concat(valueExpression, ")"); 15611 } 15612 var code = genAssignmentCode(value, valueExpression); 15613 if (needCompositionGuard) { 15614 code = "if($event.target.composing)return;".concat(code); 15615 } 15616 addProp(el, 'value', "(".concat(value, ")")); 15617 addHandler(el, event, code, null, true); 15618 if (trim || number) { 15619 addHandler(el, 'blur', '$forceUpdate()'); 15620 } 15621} 15622 15623// normalize v-model event tokens that can only be determined at runtime. 15624// it's important to place the event as the first in the array because 15625// the whole point is ensuring the v-model callback gets called before 15626// user-attached handlers. 15627function normalizeEvents(on) { 15628 /* istanbul ignore if */ 15629 if (isDef(on[RANGE_TOKEN])) { 15630 // IE input[type=range] only supports `change` event 15631 var event_1 = isIE ? 'change' : 'input'; 15632 on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []); 15633 delete on[RANGE_TOKEN]; 15634 } 15635 // This was originally intended to fix #4521 but no longer necessary 15636 // after 2.5. Keeping it for backwards compat with generated code from < 2.4 15637 /* istanbul ignore if */ 15638 if (isDef(on[CHECKBOX_RADIO_TOKEN])) { 15639 on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []); 15640 delete on[CHECKBOX_RADIO_TOKEN]; 15641 } 15642} 15643var target; 15644function createOnceHandler(event, handler, capture) { 15645 var _target = target; // save current target element in closure 15646 return function onceHandler() { 15647 var res = handler.apply(null, arguments); 15648 if (res !== null) { 15649 remove(event, onceHandler, capture, _target); 15650 } 15651 }; 15652} 15653// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp 15654// implementation and does not fire microtasks in between event propagation, so 15655// safe to exclude. 15656var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53); 15657function add(name, handler, capture, passive) { 15658 // async edge case #6566: inner click event triggers patch, event handler 15659 // attached to outer element during patch, and triggered again. This 15660 // happens because browsers fire microtask ticks between event propagation. 15661 // the solution is simple: we save the timestamp when a handler is attached, 15662 // and the handler would only fire if the event passed to it was fired 15663 // AFTER it was attached. 15664 if (useMicrotaskFix) { 15665 var attachedTimestamp_1 = currentFlushTimestamp; 15666 var original_1 = handler; 15667 //@ts-expect-error 15668 handler = original_1._wrapper = function (e) { 15669 if ( 15670 // no bubbling, should always fire. 15671 // this is just a safety net in case event.timeStamp is unreliable in 15672 // certain weird environments... 15673 e.target === e.currentTarget || 15674 // event is fired after handler attachment 15675 e.timeStamp >= attachedTimestamp_1 || 15676 // bail for environments that have buggy event.timeStamp implementations 15677 // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState 15678 // #9681 QtWebEngine event.timeStamp is negative value 15679 e.timeStamp <= 0 || 15680 // #9448 bail if event is fired in another document in a multi-page 15681 // electron/nw.js app, since event.timeStamp will be using a different 15682 // starting reference 15683 e.target.ownerDocument !== document) { 15684 return original_1.apply(this, arguments); 15685 } 15686 }; 15687 } 15688 target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture); 15689} 15690function remove(name, handler, capture, _target) { 15691 (_target || target).removeEventListener(name, 15692 //@ts-expect-error 15693 handler._wrapper || handler, capture); 15694} 15695function updateDOMListeners(oldVnode, vnode) { 15696 if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) { 15697 return; 15698 } 15699 var on = vnode.data.on || {}; 15700 var oldOn = oldVnode.data.on || {}; 15701 // vnode is empty when removing all listeners, 15702 // and use old vnode dom element 15703 target = vnode.elm || oldVnode.elm; 15704 normalizeEvents(on); 15705 updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context); 15706 target = undefined; 15707} 15708var events = { 15709 create: updateDOMListeners, 15710 update: updateDOMListeners, 15711 // @ts-expect-error emptyNode has actually data 15712 destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); } 15713}; 15714 15715var svgContainer; 15716function updateDOMProps(oldVnode, vnode) { 15717 if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) { 15718 return; 15719 } 15720 var key, cur; 15721 var elm = vnode.elm; 15722 var oldProps = oldVnode.data.domProps || {}; 15723 var props = vnode.data.domProps || {}; 15724 // clone observed objects, as the user probably wants to mutate it 15725 if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) { 15726 props = vnode.data.domProps = extend({}, props); 15727 } 15728 for (key in oldProps) { 15729 if (!(key in props)) { 15730 elm[key] = ''; 15731 } 15732 } 15733 for (key in props) { 15734 cur = props[key]; 15735 // ignore children if the node has textContent or innerHTML, 15736 // as these will throw away existing DOM nodes and cause removal errors 15737 // on subsequent patches (#3360) 15738 if (key === 'textContent' || key === 'innerHTML') { 15739 if (vnode.children) 15740 vnode.children.length = 0; 15741 if (cur === oldProps[key]) 15742 continue; 15743 // #6601 work around Chrome version <= 55 bug where single textNode 15744 // replaced by innerHTML/textContent retains its parentNode property 15745 if (elm.childNodes.length === 1) { 15746 elm.removeChild(elm.childNodes[0]); 15747 } 15748 } 15749 if (key === 'value' && elm.tagName !== 'PROGRESS') { 15750 // store value as _value as well since 15751 // non-string values will be stringified 15752 elm._value = cur; 15753 // avoid resetting cursor position when value is the same 15754 var strCur = isUndef(cur) ? '' : String(cur); 15755 if (shouldUpdateValue(elm, strCur)) { 15756 elm.value = strCur; 15757 } 15758 } 15759 else if (key === 'innerHTML' && 15760 isSVG(elm.tagName) && 15761 isUndef(elm.innerHTML)) { 15762 // IE doesn't support innerHTML for SVG elements 15763 svgContainer = svgContainer || document.createElement('div'); 15764 svgContainer.innerHTML = "<svg>".concat(cur, "</svg>"); 15765 var svg = svgContainer.firstChild; 15766 while (elm.firstChild) { 15767 elm.removeChild(elm.firstChild); 15768 } 15769 while (svg.firstChild) { 15770 elm.appendChild(svg.firstChild); 15771 } 15772 } 15773 else if ( 15774 // skip the update if old and new VDOM state is the same. 15775 // `value` is handled separately because the DOM value may be temporarily 15776 // out of sync with VDOM state due to focus, composition and modifiers. 15777 // This #4521 by skipping the unnecessary `checked` update. 15778 cur !== oldProps[key]) { 15779 // some property updates can throw 15780 // e.g. `value` on <progress> w/ non-finite value 15781 try { 15782 elm[key] = cur; 15783 } 15784 catch (e) { } 15785 } 15786 } 15787} 15788function shouldUpdateValue(elm, checkVal) { 15789 return ( 15790 //@ts-expect-error 15791 !elm.composing && 15792 (elm.tagName === 'OPTION' || 15793 isNotInFocusAndDirty(elm, checkVal) || 15794 isDirtyWithModifiers(elm, checkVal))); 15795} 15796function isNotInFocusAndDirty(elm, checkVal) { 15797 // return true when textbox (.number and .trim) loses focus and its value is 15798 // not equal to the updated value 15799 var notInFocus = true; 15800 // #6157 15801 // work around IE bug when accessing document.activeElement in an iframe 15802 try { 15803 notInFocus = document.activeElement !== elm; 15804 } 15805 catch (e) { } 15806 return notInFocus && elm.value !== checkVal; 15807} 15808function isDirtyWithModifiers(elm, newVal) { 15809 var value = elm.value; 15810 var modifiers = elm._vModifiers; // injected by v-model runtime 15811 if (isDef(modifiers)) { 15812 if (modifiers.number) { 15813 return toNumber(value) !== toNumber(newVal); 15814 } 15815 if (modifiers.trim) { 15816 return value.trim() !== newVal.trim(); 15817 } 15818 } 15819 return value !== newVal; 15820} 15821var domProps = { 15822 create: updateDOMProps, 15823 update: updateDOMProps 15824}; 15825 15826var parseStyleText = cached(function (cssText) { 15827 var res = {}; 15828 var listDelimiter = /;(?![^(]*\))/g; 15829 var propertyDelimiter = /:(.+)/; 15830 cssText.split(listDelimiter).forEach(function (item) { 15831 if (item) { 15832 var tmp = item.split(propertyDelimiter); 15833 tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); 15834 } 15835 }); 15836 return res; 15837}); 15838// merge static and dynamic style data on the same vnode 15839function normalizeStyleData(data) { 15840 var style = normalizeStyleBinding(data.style); 15841 // static style is pre-processed into an object during compilation 15842 // and is always a fresh object, so it's safe to merge into it 15843 return data.staticStyle ? extend(data.staticStyle, style) : style; 15844} 15845// normalize possible array / string values into Object 15846function normalizeStyleBinding(bindingStyle) { 15847 if (Array.isArray(bindingStyle)) { 15848 return toObject(bindingStyle); 15849 } 15850 if (typeof bindingStyle === 'string') { 15851 return parseStyleText(bindingStyle); 15852 } 15853 return bindingStyle; 15854} 15855/** 15856 * parent component style should be after child's 15857 * so that parent component's style could override it 15858 */ 15859function getStyle(vnode, checkChild) { 15860 var res = {}; 15861 var styleData; 15862 if (checkChild) { 15863 var childNode = vnode; 15864 while (childNode.componentInstance) { 15865 childNode = childNode.componentInstance._vnode; 15866 if (childNode && 15867 childNode.data && 15868 (styleData = normalizeStyleData(childNode.data))) { 15869 extend(res, styleData); 15870 } 15871 } 15872 } 15873 if ((styleData = normalizeStyleData(vnode.data))) { 15874 extend(res, styleData); 15875 } 15876 var parentNode = vnode; 15877 // @ts-expect-error parentNode.parent not VNodeWithData 15878 while ((parentNode = parentNode.parent)) { 15879 if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) { 15880 extend(res, styleData); 15881 } 15882 } 15883 return res; 15884} 15885 15886var cssVarRE = /^--/; 15887var importantRE = /\s*!important$/; 15888var setProp = function (el, name, val) { 15889 /* istanbul ignore if */ 15890 if (cssVarRE.test(name)) { 15891 el.style.setProperty(name, val); 15892 } 15893 else if (importantRE.test(val)) { 15894 el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important'); 15895 } 15896 else { 15897 var normalizedName = normalize(name); 15898 if (Array.isArray(val)) { 15899 // Support values array created by autoprefixer, e.g. 15900 // {display: ["-webkit-box", "-ms-flexbox", "flex"]} 15901 // Set them one by one, and the browser will only set those it can recognize 15902 for (var i = 0, len = val.length; i < len; i++) { 15903 el.style[normalizedName] = val[i]; 15904 } 15905 } 15906 else { 15907 el.style[normalizedName] = val; 15908 } 15909 } 15910}; 15911var vendorNames = ['Webkit', 'Moz', 'ms']; 15912var emptyStyle; 15913var normalize = cached(function (prop) { 15914 emptyStyle = emptyStyle || document.createElement('div').style; 15915 prop = camelize(prop); 15916 if (prop !== 'filter' && prop in emptyStyle) { 15917 return prop; 15918 } 15919 var capName = prop.charAt(0).toUpperCase() + prop.slice(1); 15920 for (var i = 0; i < vendorNames.length; i++) { 15921 var name_1 = vendorNames[i] + capName; 15922 if (name_1 in emptyStyle) { 15923 return name_1; 15924 } 15925 } 15926}); 15927function updateStyle(oldVnode, vnode) { 15928 var data = vnode.data; 15929 var oldData = oldVnode.data; 15930 if (isUndef(data.staticStyle) && 15931 isUndef(data.style) && 15932 isUndef(oldData.staticStyle) && 15933 isUndef(oldData.style)) { 15934 return; 15935 } 15936 var cur, name; 15937 var el = vnode.elm; 15938 var oldStaticStyle = oldData.staticStyle; 15939 var oldStyleBinding = oldData.normalizedStyle || oldData.style || {}; 15940 // if static style exists, stylebinding already merged into it when doing normalizeStyleData 15941 var oldStyle = oldStaticStyle || oldStyleBinding; 15942 var style = normalizeStyleBinding(vnode.data.style) || {}; 15943 // store normalized style under a different key for next diff 15944 // make sure to clone it if it's reactive, since the user likely wants 15945 // to mutate it. 15946 vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style; 15947 var newStyle = getStyle(vnode, true); 15948 for (name in oldStyle) { 15949 if (isUndef(newStyle[name])) { 15950 setProp(el, name, ''); 15951 } 15952 } 15953 for (name in newStyle) { 15954 cur = newStyle[name]; 15955 if (cur !== oldStyle[name]) { 15956 // ie9 setting to null has no effect, must use empty string 15957 setProp(el, name, cur == null ? '' : cur); 15958 } 15959 } 15960} 15961var style$1 = { 15962 create: updateStyle, 15963 update: updateStyle 15964}; 15965 15966var whitespaceRE$1 = /\s+/; 15967/** 15968 * Add class with compatibility for SVG since classList is not supported on 15969 * SVG elements in IE 15970 */ 15971function addClass(el, cls) { 15972 /* istanbul ignore if */ 15973 if (!cls || !(cls = cls.trim())) { 15974 return; 15975 } 15976 /* istanbul ignore else */ 15977 if (el.classList) { 15978 if (cls.indexOf(' ') > -1) { 15979 cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.add(c); }); 15980 } 15981 else { 15982 el.classList.add(cls); 15983 } 15984 } 15985 else { 15986 var cur = " ".concat(el.getAttribute('class') || '', " "); 15987 if (cur.indexOf(' ' + cls + ' ') < 0) { 15988 el.setAttribute('class', (cur + cls).trim()); 15989 } 15990 } 15991} 15992/** 15993 * Remove class with compatibility for SVG since classList is not supported on 15994 * SVG elements in IE 15995 */ 15996function removeClass(el, cls) { 15997 /* istanbul ignore if */ 15998 if (!cls || !(cls = cls.trim())) { 15999 return; 16000 } 16001 /* istanbul ignore else */ 16002 if (el.classList) { 16003 if (cls.indexOf(' ') > -1) { 16004 cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.remove(c); }); 16005 } 16006 else { 16007 el.classList.remove(cls); 16008 } 16009 if (!el.classList.length) { 16010 el.removeAttribute('class'); 16011 } 16012 } 16013 else { 16014 var cur = " ".concat(el.getAttribute('class') || '', " "); 16015 var tar = ' ' + cls + ' '; 16016 while (cur.indexOf(tar) >= 0) { 16017 cur = cur.replace(tar, ' '); 16018 } 16019 cur = cur.trim(); 16020 if (cur) { 16021 el.setAttribute('class', cur); 16022 } 16023 else { 16024 el.removeAttribute('class'); 16025 } 16026 } 16027} 16028 16029function resolveTransition(def) { 16030 if (!def) { 16031 return; 16032 } 16033 /* istanbul ignore else */ 16034 if (typeof def === 'object') { 16035 var res = {}; 16036 if (def.css !== false) { 16037 extend(res, autoCssTransition(def.name || 'v')); 16038 } 16039 extend(res, def); 16040 return res; 16041 } 16042 else if (typeof def === 'string') { 16043 return autoCssTransition(def); 16044 } 16045} 16046var autoCssTransition = cached(function (name) { 16047 return { 16048 enterClass: "".concat(name, "-enter"), 16049 enterToClass: "".concat(name, "-enter-to"), 16050 enterActiveClass: "".concat(name, "-enter-active"), 16051 leaveClass: "".concat(name, "-leave"), 16052 leaveToClass: "".concat(name, "-leave-to"), 16053 leaveActiveClass: "".concat(name, "-leave-active") 16054 }; 16055}); 16056var hasTransition = inBrowser && !isIE9; 16057var TRANSITION = 'transition'; 16058var ANIMATION = 'animation'; 16059// Transition property/event sniffing 16060var transitionProp = 'transition'; 16061var transitionEndEvent = 'transitionend'; 16062var animationProp = 'animation'; 16063var animationEndEvent = 'animationend'; 16064if (hasTransition) { 16065 /* istanbul ignore if */ 16066 if (window.ontransitionend === undefined && 16067 window.onwebkittransitionend !== undefined) { 16068 transitionProp = 'WebkitTransition'; 16069 transitionEndEvent = 'webkitTransitionEnd'; 16070 } 16071 if (window.onanimationend === undefined && 16072 window.onwebkitanimationend !== undefined) { 16073 animationProp = 'WebkitAnimation'; 16074 animationEndEvent = 'webkitAnimationEnd'; 16075 } 16076} 16077// binding to window is necessary to make hot reload work in IE in strict mode 16078var raf = inBrowser 16079 ? window.requestAnimationFrame 16080 ? window.requestAnimationFrame.bind(window) 16081 : setTimeout 16082 : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); }; 16083function nextFrame(fn) { 16084 raf(function () { 16085 // @ts-expect-error 16086 raf(fn); 16087 }); 16088} 16089function addTransitionClass(el, cls) { 16090 var transitionClasses = el._transitionClasses || (el._transitionClasses = []); 16091 if (transitionClasses.indexOf(cls) < 0) { 16092 transitionClasses.push(cls); 16093 addClass(el, cls); 16094 } 16095} 16096function removeTransitionClass(el, cls) { 16097 if (el._transitionClasses) { 16098 remove$2(el._transitionClasses, cls); 16099 } 16100 removeClass(el, cls); 16101} 16102function whenTransitionEnds(el, expectedType, cb) { 16103 var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount; 16104 if (!type) 16105 return cb(); 16106 var event = type === TRANSITION ? transitionEndEvent : animationEndEvent; 16107 var ended = 0; 16108 var end = function () { 16109 el.removeEventListener(event, onEnd); 16110 cb(); 16111 }; 16112 var onEnd = function (e) { 16113 if (e.target === el) { 16114 if (++ended >= propCount) { 16115 end(); 16116 } 16117 } 16118 }; 16119 setTimeout(function () { 16120 if (ended < propCount) { 16121 end(); 16122 } 16123 }, timeout + 1); 16124 el.addEventListener(event, onEnd); 16125} 16126var transformRE = /\b(transform|all)(,|$)/; 16127function getTransitionInfo(el, expectedType) { 16128 var styles = window.getComputedStyle(el); 16129 // JSDOM may return undefined for transition properties 16130 var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', '); 16131 var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', '); 16132 var transitionTimeout = getTimeout(transitionDelays, transitionDurations); 16133 var animationDelays = (styles[animationProp + 'Delay'] || '').split(', '); 16134 var animationDurations = (styles[animationProp + 'Duration'] || '').split(', '); 16135 var animationTimeout = getTimeout(animationDelays, animationDurations); 16136 var type; 16137 var timeout = 0; 16138 var propCount = 0; 16139 /* istanbul ignore if */ 16140 if (expectedType === TRANSITION) { 16141 if (transitionTimeout > 0) { 16142 type = TRANSITION; 16143 timeout = transitionTimeout; 16144 propCount = transitionDurations.length; 16145 } 16146 } 16147 else if (expectedType === ANIMATION) { 16148 if (animationTimeout > 0) { 16149 type = ANIMATION; 16150 timeout = animationTimeout; 16151 propCount = animationDurations.length; 16152 } 16153 } 16154 else { 16155 timeout = Math.max(transitionTimeout, animationTimeout); 16156 type = 16157 timeout > 0 16158 ? transitionTimeout > animationTimeout 16159 ? TRANSITION 16160 : ANIMATION 16161 : null; 16162 propCount = type 16163 ? type === TRANSITION 16164 ? transitionDurations.length 16165 : animationDurations.length 16166 : 0; 16167 } 16168 var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']); 16169 return { 16170 type: type, 16171 timeout: timeout, 16172 propCount: propCount, 16173 hasTransform: hasTransform 16174 }; 16175} 16176function getTimeout(delays, durations) { 16177 /* istanbul ignore next */ 16178 while (delays.length < durations.length) { 16179 delays = delays.concat(delays); 16180 } 16181 return Math.max.apply(null, durations.map(function (d, i) { 16182 return toMs(d) + toMs(delays[i]); 16183 })); 16184} 16185// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers 16186// in a locale-dependent way, using a comma instead of a dot. 16187// If comma is not replaced with a dot, the input will be rounded down (i.e. acting 16188// as a floor function) causing unexpected behaviors 16189function toMs(s) { 16190 return Number(s.slice(0, -1).replace(',', '.')) * 1000; 16191} 16192 16193function enter(vnode, toggleDisplay) { 16194 var el = vnode.elm; 16195 // call leave callback now 16196 if (isDef(el._leaveCb)) { 16197 el._leaveCb.cancelled = true; 16198 el._leaveCb(); 16199 } 16200 var data = resolveTransition(vnode.data.transition); 16201 if (isUndef(data)) { 16202 return; 16203 } 16204 /* istanbul ignore if */ 16205 if (isDef(el._enterCb) || el.nodeType !== 1) { 16206 return; 16207 } 16208 var css = data.css, type = data.type, enterClass = data.enterClass, enterToClass = data.enterToClass, enterActiveClass = data.enterActiveClass, appearClass = data.appearClass, appearToClass = data.appearToClass, appearActiveClass = data.appearActiveClass, beforeEnter = data.beforeEnter, enter = data.enter, afterEnter = data.afterEnter, enterCancelled = data.enterCancelled, beforeAppear = data.beforeAppear, appear = data.appear, afterAppear = data.afterAppear, appearCancelled = data.appearCancelled, duration = data.duration; 16209 // activeInstance will always be the <transition> component managing this 16210 // transition. One edge case to check is when the <transition> is placed 16211 // as the root node of a child component. In that case we need to check 16212 // <transition>'s parent for appear check. 16213 var context = activeInstance; 16214 var transitionNode = activeInstance.$vnode; 16215 while (transitionNode && transitionNode.parent) { 16216 context = transitionNode.context; 16217 transitionNode = transitionNode.parent; 16218 } 16219 var isAppear = !context._isMounted || !vnode.isRootInsert; 16220 if (isAppear && !appear && appear !== '') { 16221 return; 16222 } 16223 var startClass = isAppear && appearClass ? appearClass : enterClass; 16224 var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass; 16225 var toClass = isAppear && appearToClass ? appearToClass : enterToClass; 16226 var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter; 16227 var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter; 16228 var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter; 16229 var enterCancelledHook = isAppear 16230 ? appearCancelled || enterCancelled 16231 : enterCancelled; 16232 var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration); 16233 if ( true && explicitEnterDuration != null) { 16234 checkDuration(explicitEnterDuration, 'enter', vnode); 16235 } 16236 var expectsCSS = css !== false && !isIE9; 16237 var userWantsControl = getHookArgumentsLength(enterHook); 16238 var cb = (el._enterCb = once(function () { 16239 if (expectsCSS) { 16240 removeTransitionClass(el, toClass); 16241 removeTransitionClass(el, activeClass); 16242 } 16243 // @ts-expect-error 16244 if (cb.cancelled) { 16245 if (expectsCSS) { 16246 removeTransitionClass(el, startClass); 16247 } 16248 enterCancelledHook && enterCancelledHook(el); 16249 } 16250 else { 16251 afterEnterHook && afterEnterHook(el); 16252 } 16253 el._enterCb = null; 16254 })); 16255 if (!vnode.data.show) { 16256 // remove pending leave element on enter by injecting an insert hook 16257 mergeVNodeHook(vnode, 'insert', function () { 16258 var parent = el.parentNode; 16259 var pendingNode = parent && parent._pending && parent._pending[vnode.key]; 16260 if (pendingNode && 16261 pendingNode.tag === vnode.tag && 16262 pendingNode.elm._leaveCb) { 16263 pendingNode.elm._leaveCb(); 16264 } 16265 enterHook && enterHook(el, cb); 16266 }); 16267 } 16268 // start enter transition 16269 beforeEnterHook && beforeEnterHook(el); 16270 if (expectsCSS) { 16271 addTransitionClass(el, startClass); 16272 addTransitionClass(el, activeClass); 16273 nextFrame(function () { 16274 removeTransitionClass(el, startClass); 16275 // @ts-expect-error 16276 if (!cb.cancelled) { 16277 addTransitionClass(el, toClass); 16278 if (!userWantsControl) { 16279 if (isValidDuration(explicitEnterDuration)) { 16280 setTimeout(cb, explicitEnterDuration); 16281 } 16282 else { 16283 whenTransitionEnds(el, type, cb); 16284 } 16285 } 16286 } 16287 }); 16288 } 16289 if (vnode.data.show) { 16290 toggleDisplay && toggleDisplay(); 16291 enterHook && enterHook(el, cb); 16292 } 16293 if (!expectsCSS && !userWantsControl) { 16294 cb(); 16295 } 16296} 16297function leave(vnode, rm) { 16298 var el = vnode.elm; 16299 // call enter callback now 16300 if (isDef(el._enterCb)) { 16301 el._enterCb.cancelled = true; 16302 el._enterCb(); 16303 } 16304 var data = resolveTransition(vnode.data.transition); 16305 if (isUndef(data) || el.nodeType !== 1) { 16306 return rm(); 16307 } 16308 /* istanbul ignore if */ 16309 if (isDef(el._leaveCb)) { 16310 return; 16311 } 16312 var css = data.css, type = data.type, leaveClass = data.leaveClass, leaveToClass = data.leaveToClass, leaveActiveClass = data.leaveActiveClass, beforeLeave = data.beforeLeave, leave = data.leave, afterLeave = data.afterLeave, leaveCancelled = data.leaveCancelled, delayLeave = data.delayLeave, duration = data.duration; 16313 var expectsCSS = css !== false && !isIE9; 16314 var userWantsControl = getHookArgumentsLength(leave); 16315 var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration); 16316 if ( true && isDef(explicitLeaveDuration)) { 16317 checkDuration(explicitLeaveDuration, 'leave', vnode); 16318 } 16319 var cb = (el._leaveCb = once(function () { 16320 if (el.parentNode && el.parentNode._pending) { 16321 el.parentNode._pending[vnode.key] = null; 16322 } 16323 if (expectsCSS) { 16324 removeTransitionClass(el, leaveToClass); 16325 removeTransitionClass(el, leaveActiveClass); 16326 } 16327 // @ts-expect-error 16328 if (cb.cancelled) { 16329 if (expectsCSS) { 16330 removeTransitionClass(el, leaveClass); 16331 } 16332 leaveCancelled && leaveCancelled(el); 16333 } 16334 else { 16335 rm(); 16336 afterLeave && afterLeave(el); 16337 } 16338 el._leaveCb = null; 16339 })); 16340 if (delayLeave) { 16341 delayLeave(performLeave); 16342 } 16343 else { 16344 performLeave(); 16345 } 16346 function performLeave() { 16347 // the delayed leave may have already been cancelled 16348 // @ts-expect-error 16349 if (cb.cancelled) { 16350 return; 16351 } 16352 // record leaving element 16353 if (!vnode.data.show && el.parentNode) { 16354 (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] = 16355 vnode; 16356 } 16357 beforeLeave && beforeLeave(el); 16358 if (expectsCSS) { 16359 addTransitionClass(el, leaveClass); 16360 addTransitionClass(el, leaveActiveClass); 16361 nextFrame(function () { 16362 removeTransitionClass(el, leaveClass); 16363 // @ts-expect-error 16364 if (!cb.cancelled) { 16365 addTransitionClass(el, leaveToClass); 16366 if (!userWantsControl) { 16367 if (isValidDuration(explicitLeaveDuration)) { 16368 setTimeout(cb, explicitLeaveDuration); 16369 } 16370 else { 16371 whenTransitionEnds(el, type, cb); 16372 } 16373 } 16374 } 16375 }); 16376 } 16377 leave && leave(el, cb); 16378 if (!expectsCSS && !userWantsControl) { 16379 cb(); 16380 } 16381 } 16382} 16383// only used in dev mode 16384function checkDuration(val, name, vnode) { 16385 if (typeof val !== 'number') { 16386 warn$2("<transition> explicit ".concat(name, " duration is not a valid number - ") + 16387 "got ".concat(JSON.stringify(val), "."), vnode.context); 16388 } 16389 else if (isNaN(val)) { 16390 warn$2("<transition> explicit ".concat(name, " duration is NaN - ") + 16391 'the duration expression might be incorrect.', vnode.context); 16392 } 16393} 16394function isValidDuration(val) { 16395 return typeof val === 'number' && !isNaN(val); 16396} 16397/** 16398 * Normalize a transition hook's argument length. The hook may be: 16399 * - a merged hook (invoker) with the original in .fns 16400 * - a wrapped component method (check ._length) 16401 * - a plain function (.length) 16402 */ 16403function getHookArgumentsLength(fn) { 16404 if (isUndef(fn)) { 16405 return false; 16406 } 16407 // @ts-expect-error 16408 var invokerFns = fn.fns; 16409 if (isDef(invokerFns)) { 16410 // invoker 16411 return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns); 16412 } 16413 else { 16414 // @ts-expect-error 16415 return (fn._length || fn.length) > 1; 16416 } 16417} 16418function _enter(_, vnode) { 16419 if (vnode.data.show !== true) { 16420 enter(vnode); 16421 } 16422} 16423var transition = inBrowser 16424 ? { 16425 create: _enter, 16426 activate: _enter, 16427 remove: function (vnode, rm) { 16428 /* istanbul ignore else */ 16429 if (vnode.data.show !== true) { 16430 // @ts-expect-error 16431 leave(vnode, rm); 16432 } 16433 else { 16434 rm(); 16435 } 16436 } 16437 } 16438 : {}; 16439 16440var platformModules = [attrs, klass$1, events, domProps, style$1, transition]; 16441 16442// the directive module should be applied last, after all 16443// built-in modules have been applied. 16444var modules$1 = platformModules.concat(baseModules); 16445var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules$1 }); 16446 16447/** 16448 * Not type checking this file because flow doesn't like attaching 16449 * properties to Elements. 16450 */ 16451/* istanbul ignore if */ 16452if (isIE9) { 16453 // http://www.matts411.com/post/internet-explorer-9-oninput/ 16454 document.addEventListener('selectionchange', function () { 16455 var el = document.activeElement; 16456 // @ts-expect-error 16457 if (el && el.vmodel) { 16458 trigger(el, 'input'); 16459 } 16460 }); 16461} 16462var directive = { 16463 inserted: function (el, binding, vnode, oldVnode) { 16464 if (vnode.tag === 'select') { 16465 // #6903 16466 if (oldVnode.elm && !oldVnode.elm._vOptions) { 16467 mergeVNodeHook(vnode, 'postpatch', function () { 16468 directive.componentUpdated(el, binding, vnode); 16469 }); 16470 } 16471 else { 16472 setSelected(el, binding, vnode.context); 16473 } 16474 el._vOptions = [].map.call(el.options, getValue); 16475 } 16476 else if (vnode.tag === 'textarea' || isTextInputType(el.type)) { 16477 el._vModifiers = binding.modifiers; 16478 if (!binding.modifiers.lazy) { 16479 el.addEventListener('compositionstart', onCompositionStart); 16480 el.addEventListener('compositionend', onCompositionEnd); 16481 // Safari < 10.2 & UIWebView doesn't fire compositionend when 16482 // switching focus before confirming composition choice 16483 // this also fixes the issue where some browsers e.g. iOS Chrome 16484 // fires "change" instead of "input" on autocomplete. 16485 el.addEventListener('change', onCompositionEnd); 16486 /* istanbul ignore if */ 16487 if (isIE9) { 16488 el.vmodel = true; 16489 } 16490 } 16491 } 16492 }, 16493 componentUpdated: function (el, binding, vnode) { 16494 if (vnode.tag === 'select') { 16495 setSelected(el, binding, vnode.context); 16496 // in case the options rendered by v-for have changed, 16497 // it's possible that the value is out-of-sync with the rendered options. 16498 // detect such cases and filter out values that no longer has a matching 16499 // option in the DOM. 16500 var prevOptions_1 = el._vOptions; 16501 var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue)); 16502 if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) { 16503 // trigger change event if 16504 // no matching option found for at least one value 16505 var needReset = el.multiple 16506 ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); }) 16507 : binding.value !== binding.oldValue && 16508 hasNoMatchingOption(binding.value, curOptions_1); 16509 if (needReset) { 16510 trigger(el, 'change'); 16511 } 16512 } 16513 } 16514 } 16515}; 16516function setSelected(el, binding, vm) { 16517 actuallySetSelected(el, binding, vm); 16518 /* istanbul ignore if */ 16519 if (isIE || isEdge) { 16520 setTimeout(function () { 16521 actuallySetSelected(el, binding, vm); 16522 }, 0); 16523 } 16524} 16525function actuallySetSelected(el, binding, vm) { 16526 var value = binding.value; 16527 var isMultiple = el.multiple; 16528 if (isMultiple && !Array.isArray(value)) { 16529 true && 16530 warn$2("<select multiple v-model=\"".concat(binding.expression, "\"> ") + 16531 "expects an Array value for its binding, but got ".concat(Object.prototype.toString 16532 .call(value) 16533 .slice(8, -1)), vm); 16534 return; 16535 } 16536 var selected, option; 16537 for (var i = 0, l = el.options.length; i < l; i++) { 16538 option = el.options[i]; 16539 if (isMultiple) { 16540 selected = looseIndexOf(value, getValue(option)) > -1; 16541 if (option.selected !== selected) { 16542 option.selected = selected; 16543 } 16544 } 16545 else { 16546 if (looseEqual(getValue(option), value)) { 16547 if (el.selectedIndex !== i) { 16548 el.selectedIndex = i; 16549 } 16550 return; 16551 } 16552 } 16553 } 16554 if (!isMultiple) { 16555 el.selectedIndex = -1; 16556 } 16557} 16558function hasNoMatchingOption(value, options) { 16559 return options.every(function (o) { return !looseEqual(o, value); }); 16560} 16561function getValue(option) { 16562 return '_value' in option ? option._value : option.value; 16563} 16564function onCompositionStart(e) { 16565 e.target.composing = true; 16566} 16567function onCompositionEnd(e) { 16568 // prevent triggering an input event for no reason 16569 if (!e.target.composing) 16570 return; 16571 e.target.composing = false; 16572 trigger(e.target, 'input'); 16573} 16574function trigger(el, type) { 16575 var e = document.createEvent('HTMLEvents'); 16576 e.initEvent(type, true, true); 16577 el.dispatchEvent(e); 16578} 16579 16580// recursively search for possible transition defined inside the component root 16581function locateNode(vnode) { 16582 // @ts-expect-error 16583 return vnode.componentInstance && (!vnode.data || !vnode.data.transition) 16584 ? locateNode(vnode.componentInstance._vnode) 16585 : vnode; 16586} 16587var show = { 16588 bind: function (el, _a, vnode) { 16589 var value = _a.value; 16590 vnode = locateNode(vnode); 16591 var transition = vnode.data && vnode.data.transition; 16592 var originalDisplay = (el.__vOriginalDisplay = 16593 el.style.display === 'none' ? '' : el.style.display); 16594 if (value && transition) { 16595 vnode.data.show = true; 16596 enter(vnode, function () { 16597 el.style.display = originalDisplay; 16598 }); 16599 } 16600 else { 16601 el.style.display = value ? originalDisplay : 'none'; 16602 } 16603 }, 16604 update: function (el, _a, vnode) { 16605 var value = _a.value, oldValue = _a.oldValue; 16606 /* istanbul ignore if */ 16607 if (!value === !oldValue) 16608 return; 16609 vnode = locateNode(vnode); 16610 var transition = vnode.data && vnode.data.transition; 16611 if (transition) { 16612 vnode.data.show = true; 16613 if (value) { 16614 enter(vnode, function () { 16615 el.style.display = el.__vOriginalDisplay; 16616 }); 16617 } 16618 else { 16619 leave(vnode, function () { 16620 el.style.display = 'none'; 16621 }); 16622 } 16623 } 16624 else { 16625 el.style.display = value ? el.__vOriginalDisplay : 'none'; 16626 } 16627 }, 16628 unbind: function (el, binding, vnode, oldVnode, isDestroy) { 16629 if (!isDestroy) { 16630 el.style.display = el.__vOriginalDisplay; 16631 } 16632 } 16633}; 16634 16635var platformDirectives = { 16636 model: directive, 16637 show: show 16638}; 16639 16640// Provides transition support for a single element/component. 16641var transitionProps = { 16642 name: String, 16643 appear: Boolean, 16644 css: Boolean, 16645 mode: String, 16646 type: String, 16647 enterClass: String, 16648 leaveClass: String, 16649 enterToClass: String, 16650 leaveToClass: String, 16651 enterActiveClass: String, 16652 leaveActiveClass: String, 16653 appearClass: String, 16654 appearActiveClass: String, 16655 appearToClass: String, 16656 duration: [Number, String, Object] 16657}; 16658// in case the child is also an abstract component, e.g. <keep-alive> 16659// we want to recursively retrieve the real component to be rendered 16660function getRealChild(vnode) { 16661 var compOptions = vnode && vnode.componentOptions; 16662 if (compOptions && compOptions.Ctor.options.abstract) { 16663 return getRealChild(getFirstComponentChild(compOptions.children)); 16664 } 16665 else { 16666 return vnode; 16667 } 16668} 16669function extractTransitionData(comp) { 16670 var data = {}; 16671 var options = comp.$options; 16672 // props 16673 for (var key in options.propsData) { 16674 data[key] = comp[key]; 16675 } 16676 // events. 16677 // extract listeners and pass them directly to the transition methods 16678 var listeners = options._parentListeners; 16679 for (var key in listeners) { 16680 data[camelize(key)] = listeners[key]; 16681 } 16682 return data; 16683} 16684function placeholder(h, rawChild) { 16685 // @ts-expect-error 16686 if (/\d-keep-alive$/.test(rawChild.tag)) { 16687 return h('keep-alive', { 16688 props: rawChild.componentOptions.propsData 16689 }); 16690 } 16691} 16692function hasParentTransition(vnode) { 16693 while ((vnode = vnode.parent)) { 16694 if (vnode.data.transition) { 16695 return true; 16696 } 16697 } 16698} 16699function isSameChild(child, oldChild) { 16700 return oldChild.key === child.key && oldChild.tag === child.tag; 16701} 16702var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); }; 16703var isVShowDirective = function (d) { return d.name === 'show'; }; 16704var Transition = { 16705 name: 'transition', 16706 props: transitionProps, 16707 abstract: true, 16708 render: function (h) { 16709 var _this = this; 16710 var children = this.$slots.default; 16711 if (!children) { 16712 return; 16713 } 16714 // filter out text nodes (possible whitespaces) 16715 children = children.filter(isNotTextNode); 16716 /* istanbul ignore if */ 16717 if (!children.length) { 16718 return; 16719 } 16720 // warn multiple elements 16721 if ( true && children.length > 1) { 16722 warn$2('<transition> can only be used on a single element. Use ' + 16723 '<transition-group> for lists.', this.$parent); 16724 } 16725 var mode = this.mode; 16726 // warn invalid mode 16727 if ( true && mode && mode !== 'in-out' && mode !== 'out-in') { 16728 warn$2('invalid <transition> mode: ' + mode, this.$parent); 16729 } 16730 var rawChild = children[0]; 16731 // if this is a component root node and the component's 16732 // parent container node also has transition, skip. 16733 if (hasParentTransition(this.$vnode)) { 16734 return rawChild; 16735 } 16736 // apply transition data to child 16737 // use getRealChild() to ignore abstract components e.g. keep-alive 16738 var child = getRealChild(rawChild); 16739 /* istanbul ignore if */ 16740 if (!child) { 16741 return rawChild; 16742 } 16743 if (this._leaving) { 16744 return placeholder(h, rawChild); 16745 } 16746 // ensure a key that is unique to the vnode type and to this transition 16747 // component instance. This key will be used to remove pending leaving nodes 16748 // during entering. 16749 var id = "__transition-".concat(this._uid, "-"); 16750 child.key = 16751 child.key == null 16752 ? child.isComment 16753 ? id + 'comment' 16754 : id + child.tag 16755 : isPrimitive(child.key) 16756 ? String(child.key).indexOf(id) === 0 16757 ? child.key 16758 : id + child.key 16759 : child.key; 16760 var data = ((child.data || (child.data = {})).transition = 16761 extractTransitionData(this)); 16762 var oldRawChild = this._vnode; 16763 var oldChild = getRealChild(oldRawChild); 16764 // mark v-show 16765 // so that the transition module can hand over the control to the directive 16766 if (child.data.directives && child.data.directives.some(isVShowDirective)) { 16767 child.data.show = true; 16768 } 16769 if (oldChild && 16770 oldChild.data && 16771 !isSameChild(child, oldChild) && 16772 !isAsyncPlaceholder(oldChild) && 16773 // #6687 component root is a comment node 16774 !(oldChild.componentInstance && 16775 oldChild.componentInstance._vnode.isComment)) { 16776 // replace old child transition data with fresh one 16777 // important for dynamic transitions! 16778 var oldData = (oldChild.data.transition = extend({}, data)); 16779 // handle transition mode 16780 if (mode === 'out-in') { 16781 // return placeholder node and queue update when leave finishes 16782 this._leaving = true; 16783 mergeVNodeHook(oldData, 'afterLeave', function () { 16784 _this._leaving = false; 16785 _this.$forceUpdate(); 16786 }); 16787 return placeholder(h, rawChild); 16788 } 16789 else if (mode === 'in-out') { 16790 if (isAsyncPlaceholder(child)) { 16791 return oldRawChild; 16792 } 16793 var delayedLeave_1; 16794 var performLeave = function () { 16795 delayedLeave_1(); 16796 }; 16797 mergeVNodeHook(data, 'afterEnter', performLeave); 16798 mergeVNodeHook(data, 'enterCancelled', performLeave); 16799 mergeVNodeHook(oldData, 'delayLeave', function (leave) { 16800 delayedLeave_1 = leave; 16801 }); 16802 } 16803 } 16804 return rawChild; 16805 } 16806}; 16807 16808// Provides transition support for list items. 16809var props = extend({ 16810 tag: String, 16811 moveClass: String 16812}, transitionProps); 16813delete props.mode; 16814var TransitionGroup = { 16815 props: props, 16816 beforeMount: function () { 16817 var _this = this; 16818 var update = this._update; 16819 this._update = function (vnode, hydrating) { 16820 var restoreActiveInstance = setActiveInstance(_this); 16821 // force removing pass 16822 _this.__patch__(_this._vnode, _this.kept, false, // hydrating 16823 true // removeOnly (!important, avoids unnecessary moves) 16824 ); 16825 _this._vnode = _this.kept; 16826 restoreActiveInstance(); 16827 update.call(_this, vnode, hydrating); 16828 }; 16829 }, 16830 render: function (h) { 16831 var tag = this.tag || this.$vnode.data.tag || 'span'; 16832 var map = Object.create(null); 16833 var prevChildren = (this.prevChildren = this.children); 16834 var rawChildren = this.$slots.default || []; 16835 var children = (this.children = []); 16836 var transitionData = extractTransitionData(this); 16837 for (var i = 0; i < rawChildren.length; i++) { 16838 var c = rawChildren[i]; 16839 if (c.tag) { 16840 if (c.key != null && String(c.key).indexOf('__vlist') !== 0) { 16841 children.push(c); 16842 map[c.key] = c; 16843 (c.data || (c.data = {})).transition = transitionData; 16844 } 16845 else if (true) { 16846 var opts = c.componentOptions; 16847 var name_1 = opts 16848 ? getComponentName(opts.Ctor.options) || opts.tag || '' 16849 : c.tag; 16850 warn$2("<transition-group> children must be keyed: <".concat(name_1, ">")); 16851 } 16852 } 16853 } 16854 if (prevChildren) { 16855 var kept = []; 16856 var removed = []; 16857 for (var i = 0; i < prevChildren.length; i++) { 16858 var c = prevChildren[i]; 16859 c.data.transition = transitionData; 16860 // @ts-expect-error .getBoundingClientRect is not typed in Node 16861 c.data.pos = c.elm.getBoundingClientRect(); 16862 if (map[c.key]) { 16863 kept.push(c); 16864 } 16865 else { 16866 removed.push(c); 16867 } 16868 } 16869 this.kept = h(tag, null, kept); 16870 this.removed = removed; 16871 } 16872 return h(tag, null, children); 16873 }, 16874 updated: function () { 16875 var children = this.prevChildren; 16876 var moveClass = this.moveClass || (this.name || 'v') + '-move'; 16877 if (!children.length || !this.hasMove(children[0].elm, moveClass)) { 16878 return; 16879 } 16880 // we divide the work into three loops to avoid mixing DOM reads and writes 16881 // in each iteration - which helps prevent layout thrashing. 16882 children.forEach(callPendingCbs); 16883 children.forEach(recordPosition); 16884 children.forEach(applyTranslation); 16885 // force reflow to put everything in position 16886 // assign to this to avoid being removed in tree-shaking 16887 // $flow-disable-line 16888 this._reflow = document.body.offsetHeight; 16889 children.forEach(function (c) { 16890 if (c.data.moved) { 16891 var el_1 = c.elm; 16892 var s = el_1.style; 16893 addTransitionClass(el_1, moveClass); 16894 s.transform = s.WebkitTransform = s.transitionDuration = ''; 16895 el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) { 16896 if (e && e.target !== el_1) { 16897 return; 16898 } 16899 if (!e || /transform$/.test(e.propertyName)) { 16900 el_1.removeEventListener(transitionEndEvent, cb); 16901 el_1._moveCb = null; 16902 removeTransitionClass(el_1, moveClass); 16903 } 16904 })); 16905 } 16906 }); 16907 }, 16908 methods: { 16909 hasMove: function (el, moveClass) { 16910 /* istanbul ignore if */ 16911 if (!hasTransition) { 16912 return false; 16913 } 16914 /* istanbul ignore if */ 16915 if (this._hasMove) { 16916 return this._hasMove; 16917 } 16918 // Detect whether an element with the move class applied has 16919 // CSS transitions. Since the element may be inside an entering 16920 // transition at this very moment, we make a clone of it and remove 16921 // all other transition classes applied to ensure only the move class 16922 // is applied. 16923 var clone = el.cloneNode(); 16924 if (el._transitionClasses) { 16925 el._transitionClasses.forEach(function (cls) { 16926 removeClass(clone, cls); 16927 }); 16928 } 16929 addClass(clone, moveClass); 16930 clone.style.display = 'none'; 16931 this.$el.appendChild(clone); 16932 var info = getTransitionInfo(clone); 16933 this.$el.removeChild(clone); 16934 return (this._hasMove = info.hasTransform); 16935 } 16936 } 16937}; 16938function callPendingCbs(c) { 16939 /* istanbul ignore if */ 16940 if (c.elm._moveCb) { 16941 c.elm._moveCb(); 16942 } 16943 /* istanbul ignore if */ 16944 if (c.elm._enterCb) { 16945 c.elm._enterCb(); 16946 } 16947} 16948function recordPosition(c) { 16949 c.data.newPos = c.elm.getBoundingClientRect(); 16950} 16951function applyTranslation(c) { 16952 var oldPos = c.data.pos; 16953 var newPos = c.data.newPos; 16954 var dx = oldPos.left - newPos.left; 16955 var dy = oldPos.top - newPos.top; 16956 if (dx || dy) { 16957 c.data.moved = true; 16958 var s = c.elm.style; 16959 s.transform = s.WebkitTransform = "translate(".concat(dx, "px,").concat(dy, "px)"); 16960 s.transitionDuration = '0s'; 16961 } 16962} 16963 16964var platformComponents = { 16965 Transition: Transition, 16966 TransitionGroup: TransitionGroup 16967}; 16968 16969// install platform specific utils 16970Vue.config.mustUseProp = mustUseProp; 16971Vue.config.isReservedTag = isReservedTag; 16972Vue.config.isReservedAttr = isReservedAttr; 16973Vue.config.getTagNamespace = getTagNamespace; 16974Vue.config.isUnknownElement = isUnknownElement; 16975// install platform runtime directives & components 16976extend(Vue.options.directives, platformDirectives); 16977extend(Vue.options.components, platformComponents); 16978// install platform patch function 16979Vue.prototype.__patch__ = inBrowser ? patch : noop; 16980// public mount method 16981Vue.prototype.$mount = function (el, hydrating) { 16982 el = el && inBrowser ? query(el) : undefined; 16983 return mountComponent(this, el, hydrating); 16984}; 16985// devtools global hook 16986/* istanbul ignore next */ 16987if (inBrowser) { 16988 setTimeout(function () { 16989 if (config.devtools) { 16990 if (devtools) { 16991 devtools.emit('init', Vue); 16992 } 16993 else if (true) { 16994 // @ts-expect-error 16995 console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' + 16996 'https://github.com/vuejs/vue-devtools'); 16997 } 16998 } 16999 if ( true && 17000 config.productionTip !== false && 17001 typeof console !== 'undefined') { 17002 // @ts-expect-error 17003 console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" + 17004 "Make sure to turn on production mode when deploying for production.\n" + 17005 "See more tips at https://vuejs.org/guide/deployment.html"); 17006 } 17007 }, 0); 17008} 17009 17010var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g; 17011var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g; 17012var buildRegex = cached(function (delimiters) { 17013 var open = delimiters[0].replace(regexEscapeRE, '\\$&'); 17014 var close = delimiters[1].replace(regexEscapeRE, '\\$&'); 17015 return new RegExp(open + '((?:.|\\n)+?)' + close, 'g'); 17016}); 17017function parseText(text, delimiters) { 17018 //@ts-expect-error 17019 var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE; 17020 if (!tagRE.test(text)) { 17021 return; 17022 } 17023 var tokens = []; 17024 var rawTokens = []; 17025 var lastIndex = (tagRE.lastIndex = 0); 17026 var match, index, tokenValue; 17027 while ((match = tagRE.exec(text))) { 17028 index = match.index; 17029 // push text token 17030 if (index > lastIndex) { 17031 rawTokens.push((tokenValue = text.slice(lastIndex, index))); 17032 tokens.push(JSON.stringify(tokenValue)); 17033 } 17034 // tag token 17035 var exp = parseFilters(match[1].trim()); 17036 tokens.push("_s(".concat(exp, ")")); 17037 rawTokens.push({ '@binding': exp }); 17038 lastIndex = index + match[0].length; 17039 } 17040 if (lastIndex < text.length) { 17041 rawTokens.push((tokenValue = text.slice(lastIndex))); 17042 tokens.push(JSON.stringify(tokenValue)); 17043 } 17044 return { 17045 expression: tokens.join('+'), 17046 tokens: rawTokens 17047 }; 17048} 17049 17050function transformNode$1(el, options) { 17051 var warn = options.warn || baseWarn; 17052 var staticClass = getAndRemoveAttr(el, 'class'); 17053 if ( true && staticClass) { 17054 var res = parseText(staticClass, options.delimiters); 17055 if (res) { 17056 warn("class=\"".concat(staticClass, "\": ") + 17057 'Interpolation inside attributes has been removed. ' + 17058 'Use v-bind or the colon shorthand instead. For example, ' + 17059 'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']); 17060 } 17061 } 17062 if (staticClass) { 17063 el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim()); 17064 } 17065 var classBinding = getBindingAttr(el, 'class', false /* getStatic */); 17066 if (classBinding) { 17067 el.classBinding = classBinding; 17068 } 17069} 17070function genData$2(el) { 17071 var data = ''; 17072 if (el.staticClass) { 17073 data += "staticClass:".concat(el.staticClass, ","); 17074 } 17075 if (el.classBinding) { 17076 data += "class:".concat(el.classBinding, ","); 17077 } 17078 return data; 17079} 17080var klass = { 17081 staticKeys: ['staticClass'], 17082 transformNode: transformNode$1, 17083 genData: genData$2 17084}; 17085 17086function transformNode(el, options) { 17087 var warn = options.warn || baseWarn; 17088 var staticStyle = getAndRemoveAttr(el, 'style'); 17089 if (staticStyle) { 17090 /* istanbul ignore if */ 17091 if (true) { 17092 var res = parseText(staticStyle, options.delimiters); 17093 if (res) { 17094 warn("style=\"".concat(staticStyle, "\": ") + 17095 'Interpolation inside attributes has been removed. ' + 17096 'Use v-bind or the colon shorthand instead. For example, ' + 17097 'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']); 17098 } 17099 } 17100 el.staticStyle = JSON.stringify(parseStyleText(staticStyle)); 17101 } 17102 var styleBinding = getBindingAttr(el, 'style', false /* getStatic */); 17103 if (styleBinding) { 17104 el.styleBinding = styleBinding; 17105 } 17106} 17107function genData$1(el) { 17108 var data = ''; 17109 if (el.staticStyle) { 17110 data += "staticStyle:".concat(el.staticStyle, ","); 17111 } 17112 if (el.styleBinding) { 17113 data += "style:(".concat(el.styleBinding, "),"); 17114 } 17115 return data; 17116} 17117var style = { 17118 staticKeys: ['staticStyle'], 17119 transformNode: transformNode, 17120 genData: genData$1 17121}; 17122 17123var decoder; 17124var he = { 17125 decode: function (html) { 17126 decoder = decoder || document.createElement('div'); 17127 decoder.innerHTML = html; 17128 return decoder.textContent; 17129 } 17130}; 17131 17132var isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' + 17133 'link,meta,param,source,track,wbr'); 17134// Elements that you can, intentionally, leave open 17135// (and which close themselves) 17136var canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'); 17137// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3 17138// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content 17139var isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' + 17140 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' + 17141 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' + 17142 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' + 17143 'title,tr,track'); 17144 17145/** 17146 * Not type-checking this file because it's mostly vendor code. 17147 */ 17148// Regular Expressions for parsing tags and attributes 17149var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; 17150var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; 17151var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(unicodeRegExp.source, "]*"); 17152var qnameCapture = "((?:".concat(ncname, "\\:)?").concat(ncname, ")"); 17153var startTagOpen = new RegExp("^<".concat(qnameCapture)); 17154var startTagClose = /^\s*(\/?)>/; 17155var endTag = new RegExp("^<\\/".concat(qnameCapture, "[^>]*>")); 17156var doctype = /^<!DOCTYPE [^>]+>/i; 17157// #7298: escape - to avoid being passed as HTML comment when inlined in page 17158var comment = /^<!\--/; 17159var conditionalComment = /^<!\[/; 17160// Special Elements (can contain anything) 17161var isPlainTextElement = makeMap('script,style,textarea', true); 17162var reCache = {}; 17163var decodingMap = { 17164 '<': '<', 17165 '>': '>', 17166 '"': '"', 17167 '&': '&', 17168 ' ': '\n', 17169 '	': '\t', 17170 ''': "'" 17171}; 17172var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g; 17173var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g; 17174// #5992 17175var isIgnoreNewlineTag = makeMap('pre,textarea', true); 17176var shouldIgnoreFirstNewline = function (tag, html) { 17177 return tag && isIgnoreNewlineTag(tag) && html[0] === '\n'; 17178}; 17179function decodeAttr(value, shouldDecodeNewlines) { 17180 var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr; 17181 return value.replace(re, function (match) { return decodingMap[match]; }); 17182} 17183function parseHTML(html, options) { 17184 var stack = []; 17185 var expectHTML = options.expectHTML; 17186 var isUnaryTag = options.isUnaryTag || no; 17187 var canBeLeftOpenTag = options.canBeLeftOpenTag || no; 17188 var index = 0; 17189 var last, lastTag; 17190 var _loop_1 = function () { 17191 last = html; 17192 // Make sure we're not in a plaintext content element like script/style 17193 if (!lastTag || !isPlainTextElement(lastTag)) { 17194 var textEnd = html.indexOf('<'); 17195 if (textEnd === 0) { 17196 // Comment: 17197 if (comment.test(html)) { 17198 var commentEnd = html.indexOf('-->'); 17199 if (commentEnd >= 0) { 17200 if (options.shouldKeepComment && options.comment) { 17201 options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3); 17202 } 17203 advance(commentEnd + 3); 17204 return "continue"; 17205 } 17206 } 17207 // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment 17208 if (conditionalComment.test(html)) { 17209 var conditionalEnd = html.indexOf(']>'); 17210 if (conditionalEnd >= 0) { 17211 advance(conditionalEnd + 2); 17212 return "continue"; 17213 } 17214 } 17215 // Doctype: 17216 var doctypeMatch = html.match(doctype); 17217 if (doctypeMatch) { 17218 advance(doctypeMatch[0].length); 17219 return "continue"; 17220 } 17221 // End tag: 17222 var endTagMatch = html.match(endTag); 17223 if (endTagMatch) { 17224 var curIndex = index; 17225 advance(endTagMatch[0].length); 17226 parseEndTag(endTagMatch[1], curIndex, index); 17227 return "continue"; 17228 } 17229 // Start tag: 17230 var startTagMatch = parseStartTag(); 17231 if (startTagMatch) { 17232 handleStartTag(startTagMatch); 17233 if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) { 17234 advance(1); 17235 } 17236 return "continue"; 17237 } 17238 } 17239 var text = void 0, rest = void 0, next = void 0; 17240 if (textEnd >= 0) { 17241 rest = html.slice(textEnd); 17242 while (!endTag.test(rest) && 17243 !startTagOpen.test(rest) && 17244 !comment.test(rest) && 17245 !conditionalComment.test(rest)) { 17246 // < in plain text, be forgiving and treat it as text 17247 next = rest.indexOf('<', 1); 17248 if (next < 0) 17249 break; 17250 textEnd += next; 17251 rest = html.slice(textEnd); 17252 } 17253 text = html.substring(0, textEnd); 17254 } 17255 if (textEnd < 0) { 17256 text = html; 17257 } 17258 if (text) { 17259 advance(text.length); 17260 } 17261 if (options.chars && text) { 17262 options.chars(text, index - text.length, index); 17263 } 17264 } 17265 else { 17266 var endTagLength_1 = 0; 17267 var stackedTag_1 = lastTag.toLowerCase(); 17268 var reStackedTag = reCache[stackedTag_1] || 17269 (reCache[stackedTag_1] = new RegExp('([\\s\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i')); 17270 var rest = html.replace(reStackedTag, function (all, text, endTag) { 17271 endTagLength_1 = endTag.length; 17272 if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') { 17273 text = text 17274 .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298 17275 .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1'); 17276 } 17277 if (shouldIgnoreFirstNewline(stackedTag_1, text)) { 17278 text = text.slice(1); 17279 } 17280 if (options.chars) { 17281 options.chars(text); 17282 } 17283 return ''; 17284 }); 17285 index += html.length - rest.length; 17286 html = rest; 17287 parseEndTag(stackedTag_1, index - endTagLength_1, index); 17288 } 17289 if (html === last) { 17290 options.chars && options.chars(html); 17291 if ( true && !stack.length && options.warn) { 17292 options.warn("Mal-formatted tag at end of template: \"".concat(html, "\""), { 17293 start: index + html.length 17294 }); 17295 } 17296 return "break"; 17297 } 17298 }; 17299 while (html) { 17300 var state_1 = _loop_1(); 17301 if (state_1 === "break") 17302 break; 17303 } 17304 // Clean up any remaining tags 17305 parseEndTag(); 17306 function advance(n) { 17307 index += n; 17308 html = html.substring(n); 17309 } 17310 function parseStartTag() { 17311 var start = html.match(startTagOpen); 17312 if (start) { 17313 var match = { 17314 tagName: start[1], 17315 attrs: [], 17316 start: index 17317 }; 17318 advance(start[0].length); 17319 var end = void 0, attr = void 0; 17320 while (!(end = html.match(startTagClose)) && 17321 (attr = html.match(dynamicArgAttribute) || html.match(attribute))) { 17322 attr.start = index; 17323 advance(attr[0].length); 17324 attr.end = index; 17325 match.attrs.push(attr); 17326 } 17327 if (end) { 17328 match.unarySlash = end[1]; 17329 advance(end[0].length); 17330 match.end = index; 17331 return match; 17332 } 17333 } 17334 } 17335 function handleStartTag(match) { 17336 var tagName = match.tagName; 17337 var unarySlash = match.unarySlash; 17338 if (expectHTML) { 17339 if (lastTag === 'p' && isNonPhrasingTag(tagName)) { 17340 parseEndTag(lastTag); 17341 } 17342 if (canBeLeftOpenTag(tagName) && lastTag === tagName) { 17343 parseEndTag(tagName); 17344 } 17345 } 17346 var unary = isUnaryTag(tagName) || !!unarySlash; 17347 var l = match.attrs.length; 17348 var attrs = new Array(l); 17349 for (var i = 0; i < l; i++) { 17350 var args = match.attrs[i]; 17351 var value = args[3] || args[4] || args[5] || ''; 17352 var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href' 17353 ? options.shouldDecodeNewlinesForHref 17354 : options.shouldDecodeNewlines; 17355 attrs[i] = { 17356 name: args[1], 17357 value: decodeAttr(value, shouldDecodeNewlines) 17358 }; 17359 if ( true && options.outputSourceRange) { 17360 attrs[i].start = args.start + args[0].match(/^\s*/).length; 17361 attrs[i].end = args.end; 17362 } 17363 } 17364 if (!unary) { 17365 stack.push({ 17366 tag: tagName, 17367 lowerCasedTag: tagName.toLowerCase(), 17368 attrs: attrs, 17369 start: match.start, 17370 end: match.end 17371 }); 17372 lastTag = tagName; 17373 } 17374 if (options.start) { 17375 options.start(tagName, attrs, unary, match.start, match.end); 17376 } 17377 } 17378 function parseEndTag(tagName, start, end) { 17379 var pos, lowerCasedTagName; 17380 if (start == null) 17381 start = index; 17382 if (end == null) 17383 end = index; 17384 // Find the closest opened tag of the same type 17385 if (tagName) { 17386 lowerCasedTagName = tagName.toLowerCase(); 17387 for (pos = stack.length - 1; pos >= 0; pos--) { 17388 if (stack[pos].lowerCasedTag === lowerCasedTagName) { 17389 break; 17390 } 17391 } 17392 } 17393 else { 17394 // If no tag name is provided, clean shop 17395 pos = 0; 17396 } 17397 if (pos >= 0) { 17398 // Close all the open elements, up the stack 17399 for (var i = stack.length - 1; i >= pos; i--) { 17400 if ( true && (i > pos || !tagName) && options.warn) { 17401 options.warn("tag <".concat(stack[i].tag, "> has no matching end tag."), { 17402 start: stack[i].start, 17403 end: stack[i].end 17404 }); 17405 } 17406 if (options.end) { 17407 options.end(stack[i].tag, start, end); 17408 } 17409 } 17410 // Remove the open elements from the stack 17411 stack.length = pos; 17412 lastTag = pos && stack[pos - 1].tag; 17413 } 17414 else if (lowerCasedTagName === 'br') { 17415 if (options.start) { 17416 options.start(tagName, [], true, start, end); 17417 } 17418 } 17419 else if (lowerCasedTagName === 'p') { 17420 if (options.start) { 17421 options.start(tagName, [], false, start, end); 17422 } 17423 if (options.end) { 17424 options.end(tagName, start, end); 17425 } 17426 } 17427 } 17428} 17429 17430var onRE = /^@|^v-on:/; 17431var dirRE = /^v-|^@|^:|^#/; 17432var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/; 17433var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/; 17434var stripParensRE = /^\(|\)$/g; 17435var dynamicArgRE = /^\[.*\]$/; 17436var argRE = /:(.*)$/; 17437var bindRE = /^:|^\.|^v-bind:/; 17438var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g; 17439var slotRE = /^v-slot(:|$)|^#/; 17440var lineBreakRE = /[\r\n]/; 17441var whitespaceRE = /[ \f\t\r\n]+/g; 17442var invalidAttributeRE = /[\s"'<>\/=]/; 17443var decodeHTMLCached = cached(he.decode); 17444var emptySlotScopeToken = "_empty_"; 17445// configurable state 17446var warn; 17447var delimiters; 17448var transforms; 17449var preTransforms; 17450var postTransforms; 17451var platformIsPreTag; 17452var platformMustUseProp; 17453var platformGetTagNamespace; 17454var maybeComponent; 17455function createASTElement(tag, attrs, parent) { 17456 return { 17457 type: 1, 17458 tag: tag, 17459 attrsList: attrs, 17460 attrsMap: makeAttrsMap(attrs), 17461 rawAttrsMap: {}, 17462 parent: parent, 17463 children: [] 17464 }; 17465} 17466/** 17467 * Convert HTML string to AST. 17468 */ 17469function parse(template, options) { 17470 warn = options.warn || baseWarn; 17471 platformIsPreTag = options.isPreTag || no; 17472 platformMustUseProp = options.mustUseProp || no; 17473 platformGetTagNamespace = options.getTagNamespace || no; 17474 var isReservedTag = options.isReservedTag || no; 17475 maybeComponent = function (el) { 17476 return !!(el.component || 17477 el.attrsMap[':is'] || 17478 el.attrsMap['v-bind:is'] || 17479 !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag))); 17480 }; 17481 transforms = pluckModuleFunction(options.modules, 'transformNode'); 17482 preTransforms = pluckModuleFunction(options.modules, 'preTransformNode'); 17483 postTransforms = pluckModuleFunction(options.modules, 'postTransformNode'); 17484 delimiters = options.delimiters; 17485 var stack = []; 17486 var preserveWhitespace = options.preserveWhitespace !== false; 17487 var whitespaceOption = options.whitespace; 17488 var root; 17489 var currentParent; 17490 var inVPre = false; 17491 var inPre = false; 17492 var warned = false; 17493 function warnOnce(msg, range) { 17494 if (!warned) { 17495 warned = true; 17496 warn(msg, range); 17497 } 17498 } 17499 function closeElement(element) { 17500 trimEndingWhitespace(element); 17501 if (!inVPre && !element.processed) { 17502 element = processElement(element, options); 17503 } 17504 // tree management 17505 if (!stack.length && element !== root) { 17506 // allow root elements with v-if, v-else-if and v-else 17507 if (root.if && (element.elseif || element.else)) { 17508 if (true) { 17509 checkRootConstraints(element); 17510 } 17511 addIfCondition(root, { 17512 exp: element.elseif, 17513 block: element 17514 }); 17515 } 17516 else if (true) { 17517 warnOnce("Component template should contain exactly one root element. " + 17518 "If you are using v-if on multiple elements, " + 17519 "use v-else-if to chain them instead.", { start: element.start }); 17520 } 17521 } 17522 if (currentParent && !element.forbidden) { 17523 if (element.elseif || element.else) { 17524 processIfConditions(element, currentParent); 17525 } 17526 else { 17527 if (element.slotScope) { 17528 // scoped slot 17529 // keep it in the children list so that v-else(-if) conditions can 17530 // find it as the prev node. 17531 var name_1 = element.slotTarget || '"default"'; 17532 (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element; 17533 } 17534 currentParent.children.push(element); 17535 element.parent = currentParent; 17536 } 17537 } 17538 // final children cleanup 17539 // filter out scoped slots 17540 element.children = element.children.filter(function (c) { return !c.slotScope; }); 17541 // remove trailing whitespace node again 17542 trimEndingWhitespace(element); 17543 // check pre state 17544 if (element.pre) { 17545 inVPre = false; 17546 } 17547 if (platformIsPreTag(element.tag)) { 17548 inPre = false; 17549 } 17550 // apply post-transforms 17551 for (var i = 0; i < postTransforms.length; i++) { 17552 postTransforms[i](element, options); 17553 } 17554 } 17555 function trimEndingWhitespace(el) { 17556 // remove trailing whitespace node 17557 if (!inPre) { 17558 var lastNode = void 0; 17559 while ((lastNode = el.children[el.children.length - 1]) && 17560 lastNode.type === 3 && 17561 lastNode.text === ' ') { 17562 el.children.pop(); 17563 } 17564 } 17565 } 17566 function checkRootConstraints(el) { 17567 if (el.tag === 'slot' || el.tag === 'template') { 17568 warnOnce("Cannot use <".concat(el.tag, "> as component root element because it may ") + 17569 'contain multiple nodes.', { start: el.start }); 17570 } 17571 if (el.attrsMap.hasOwnProperty('v-for')) { 17572 warnOnce('Cannot use v-for on stateful component root element because ' + 17573 'it renders multiple elements.', el.rawAttrsMap['v-for']); 17574 } 17575 } 17576 parseHTML(template, { 17577 warn: warn, 17578 expectHTML: options.expectHTML, 17579 isUnaryTag: options.isUnaryTag, 17580 canBeLeftOpenTag: options.canBeLeftOpenTag, 17581 shouldDecodeNewlines: options.shouldDecodeNewlines, 17582 shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref, 17583 shouldKeepComment: options.comments, 17584 outputSourceRange: options.outputSourceRange, 17585 start: function (tag, attrs, unary, start, end) { 17586 // check namespace. 17587 // inherit parent ns if there is one 17588 var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag); 17589 // handle IE svg bug 17590 /* istanbul ignore if */ 17591 if (isIE && ns === 'svg') { 17592 attrs = guardIESVGBug(attrs); 17593 } 17594 var element = createASTElement(tag, attrs, currentParent); 17595 if (ns) { 17596 element.ns = ns; 17597 } 17598 if (true) { 17599 if (options.outputSourceRange) { 17600 element.start = start; 17601 element.end = end; 17602 element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) { 17603 cumulated[attr.name] = attr; 17604 return cumulated; 17605 }, {}); 17606 } 17607 attrs.forEach(function (attr) { 17608 if (invalidAttributeRE.test(attr.name)) { 17609 warn("Invalid dynamic argument expression: attribute names cannot contain " + 17610 "spaces, quotes, <, >, / or =.", options.outputSourceRange 17611 ? { 17612 start: attr.start + attr.name.indexOf("["), 17613 end: attr.start + attr.name.length 17614 } 17615 : undefined); 17616 } 17617 }); 17618 } 17619 if (isForbiddenTag(element) && !isServerRendering()) { 17620 element.forbidden = true; 17621 true && 17622 warn('Templates should only be responsible for mapping the state to the ' + 17623 'UI. Avoid placing tags with side-effects in your templates, such as ' + 17624 "<".concat(tag, ">") + 17625 ', as they will not be parsed.', { start: element.start }); 17626 } 17627 // apply pre-transforms 17628 for (var i = 0; i < preTransforms.length; i++) { 17629 element = preTransforms[i](element, options) || element; 17630 } 17631 if (!inVPre) { 17632 processPre(element); 17633 if (element.pre) { 17634 inVPre = true; 17635 } 17636 } 17637 if (platformIsPreTag(element.tag)) { 17638 inPre = true; 17639 } 17640 if (inVPre) { 17641 processRawAttrs(element); 17642 } 17643 else if (!element.processed) { 17644 // structural directives 17645 processFor(element); 17646 processIf(element); 17647 processOnce(element); 17648 } 17649 if (!root) { 17650 root = element; 17651 if (true) { 17652 checkRootConstraints(root); 17653 } 17654 } 17655 if (!unary) { 17656 currentParent = element; 17657 stack.push(element); 17658 } 17659 else { 17660 closeElement(element); 17661 } 17662 }, 17663 end: function (tag, start, end) { 17664 var element = stack[stack.length - 1]; 17665 // pop stack 17666 stack.length -= 1; 17667 currentParent = stack[stack.length - 1]; 17668 if ( true && options.outputSourceRange) { 17669 element.end = end; 17670 } 17671 closeElement(element); 17672 }, 17673 chars: function (text, start, end) { 17674 if (!currentParent) { 17675 if (true) { 17676 if (text === template) { 17677 warnOnce('Component template requires a root element, rather than just text.', { start: start }); 17678 } 17679 else if ((text = text.trim())) { 17680 warnOnce("text \"".concat(text, "\" outside root element will be ignored."), { 17681 start: start 17682 }); 17683 } 17684 } 17685 return; 17686 } 17687 // IE textarea placeholder bug 17688 /* istanbul ignore if */ 17689 if (isIE && 17690 currentParent.tag === 'textarea' && 17691 currentParent.attrsMap.placeholder === text) { 17692 return; 17693 } 17694 var children = currentParent.children; 17695 if (inPre || text.trim()) { 17696 text = isTextTag(currentParent) 17697 ? text 17698 : decodeHTMLCached(text); 17699 } 17700 else if (!children.length) { 17701 // remove the whitespace-only node right after an opening tag 17702 text = ''; 17703 } 17704 else if (whitespaceOption) { 17705 if (whitespaceOption === 'condense') { 17706 // in condense mode, remove the whitespace node if it contains 17707 // line break, otherwise condense to a single space 17708 text = lineBreakRE.test(text) ? '' : ' '; 17709 } 17710 else { 17711 text = ' '; 17712 } 17713 } 17714 else { 17715 text = preserveWhitespace ? ' ' : ''; 17716 } 17717 if (text) { 17718 if (!inPre && whitespaceOption === 'condense') { 17719 // condense consecutive whitespaces into single space 17720 text = text.replace(whitespaceRE, ' '); 17721 } 17722 var res = void 0; 17723 var child = void 0; 17724 if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) { 17725 child = { 17726 type: 2, 17727 expression: res.expression, 17728 tokens: res.tokens, 17729 text: text 17730 }; 17731 } 17732 else if (text !== ' ' || 17733 !children.length || 17734 children[children.length - 1].text !== ' ') { 17735 child = { 17736 type: 3, 17737 text: text 17738 }; 17739 } 17740 if (child) { 17741 if ( true && options.outputSourceRange) { 17742 child.start = start; 17743 child.end = end; 17744 } 17745 children.push(child); 17746 } 17747 } 17748 }, 17749 comment: function (text, start, end) { 17750 // adding anything as a sibling to the root node is forbidden 17751 // comments should still be allowed, but ignored 17752 if (currentParent) { 17753 var child = { 17754 type: 3, 17755 text: text, 17756 isComment: true 17757 }; 17758 if ( true && options.outputSourceRange) { 17759 child.start = start; 17760 child.end = end; 17761 } 17762 currentParent.children.push(child); 17763 } 17764 } 17765 }); 17766 return root; 17767} 17768function processPre(el) { 17769 if (getAndRemoveAttr(el, 'v-pre') != null) { 17770 el.pre = true; 17771 } 17772} 17773function processRawAttrs(el) { 17774 var list = el.attrsList; 17775 var len = list.length; 17776 if (len) { 17777 var attrs = (el.attrs = new Array(len)); 17778 for (var i = 0; i < len; i++) { 17779 attrs[i] = { 17780 name: list[i].name, 17781 value: JSON.stringify(list[i].value) 17782 }; 17783 if (list[i].start != null) { 17784 attrs[i].start = list[i].start; 17785 attrs[i].end = list[i].end; 17786 } 17787 } 17788 } 17789 else if (!el.pre) { 17790 // non root node in pre blocks with no attributes 17791 el.plain = true; 17792 } 17793} 17794function processElement(element, options) { 17795 processKey(element); 17796 // determine whether this is a plain element after 17797 // removing structural attributes 17798 element.plain = 17799 !element.key && !element.scopedSlots && !element.attrsList.length; 17800 processRef(element); 17801 processSlotContent(element); 17802 processSlotOutlet(element); 17803 processComponent(element); 17804 for (var i = 0; i < transforms.length; i++) { 17805 element = transforms[i](element, options) || element; 17806 } 17807 processAttrs(element); 17808 return element; 17809} 17810function processKey(el) { 17811 var exp = getBindingAttr(el, 'key'); 17812 if (exp) { 17813 if (true) { 17814 if (el.tag === 'template') { 17815 warn("<template> cannot be keyed. Place the key on real elements instead.", getRawBindingAttr(el, 'key')); 17816 } 17817 if (el.for) { 17818 var iterator = el.iterator2 || el.iterator1; 17819 var parent_1 = el.parent; 17820 if (iterator && 17821 iterator === exp && 17822 parent_1 && 17823 parent_1.tag === 'transition-group') { 17824 warn("Do not use v-for index as key on <transition-group> children, " + 17825 "this is the same as not using keys.", getRawBindingAttr(el, 'key'), true /* tip */); 17826 } 17827 } 17828 } 17829 el.key = exp; 17830 } 17831} 17832function processRef(el) { 17833 var ref = getBindingAttr(el, 'ref'); 17834 if (ref) { 17835 el.ref = ref; 17836 el.refInFor = checkInFor(el); 17837 } 17838} 17839function processFor(el) { 17840 var exp; 17841 if ((exp = getAndRemoveAttr(el, 'v-for'))) { 17842 var res = parseFor(exp); 17843 if (res) { 17844 extend(el, res); 17845 } 17846 else if (true) { 17847 warn("Invalid v-for expression: ".concat(exp), el.rawAttrsMap['v-for']); 17848 } 17849 } 17850} 17851function parseFor(exp) { 17852 var inMatch = exp.match(forAliasRE); 17853 if (!inMatch) 17854 return; 17855 var res = {}; 17856 res.for = inMatch[2].trim(); 17857 var alias = inMatch[1].trim().replace(stripParensRE, ''); 17858 var iteratorMatch = alias.match(forIteratorRE); 17859 if (iteratorMatch) { 17860 res.alias = alias.replace(forIteratorRE, '').trim(); 17861 res.iterator1 = iteratorMatch[1].trim(); 17862 if (iteratorMatch[2]) { 17863 res.iterator2 = iteratorMatch[2].trim(); 17864 } 17865 } 17866 else { 17867 res.alias = alias; 17868 } 17869 return res; 17870} 17871function processIf(el) { 17872 var exp = getAndRemoveAttr(el, 'v-if'); 17873 if (exp) { 17874 el.if = exp; 17875 addIfCondition(el, { 17876 exp: exp, 17877 block: el 17878 }); 17879 } 17880 else { 17881 if (getAndRemoveAttr(el, 'v-else') != null) { 17882 el.else = true; 17883 } 17884 var elseif = getAndRemoveAttr(el, 'v-else-if'); 17885 if (elseif) { 17886 el.elseif = elseif; 17887 } 17888 } 17889} 17890function processIfConditions(el, parent) { 17891 var prev = findPrevElement(parent.children); 17892 if (prev && prev.if) { 17893 addIfCondition(prev, { 17894 exp: el.elseif, 17895 block: el 17896 }); 17897 } 17898 else if (true) { 17899 warn("v-".concat(el.elseif ? 'else-if="' + el.elseif + '"' : 'else', " ") + 17900 "used on element <".concat(el.tag, "> without corresponding v-if."), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']); 17901 } 17902} 17903function findPrevElement(children) { 17904 var i = children.length; 17905 while (i--) { 17906 if (children[i].type === 1) { 17907 return children[i]; 17908 } 17909 else { 17910 if ( true && children[i].text !== ' ') { 17911 warn("text \"".concat(children[i].text.trim(), "\" between v-if and v-else(-if) ") + 17912 "will be ignored.", children[i]); 17913 } 17914 children.pop(); 17915 } 17916 } 17917} 17918function addIfCondition(el, condition) { 17919 if (!el.ifConditions) { 17920 el.ifConditions = []; 17921 } 17922 el.ifConditions.push(condition); 17923} 17924function processOnce(el) { 17925 var once = getAndRemoveAttr(el, 'v-once'); 17926 if (once != null) { 17927 el.once = true; 17928 } 17929} 17930// handle content being passed to a component as slot, 17931// e.g. <template slot="xxx">, <div slot-scope="xxx"> 17932function processSlotContent(el) { 17933 var slotScope; 17934 if (el.tag === 'template') { 17935 slotScope = getAndRemoveAttr(el, 'scope'); 17936 /* istanbul ignore if */ 17937 if ( true && slotScope) { 17938 warn("the \"scope\" attribute for scoped slots have been deprecated and " + 17939 "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " + 17940 "can also be used on plain elements in addition to <template> to " + 17941 "denote scoped slots.", el.rawAttrsMap['scope'], true); 17942 } 17943 el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope'); 17944 } 17945 else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) { 17946 /* istanbul ignore if */ 17947 if ( true && el.attrsMap['v-for']) { 17948 warn("Ambiguous combined usage of slot-scope and v-for on <".concat(el.tag, "> ") + 17949 "(v-for takes higher priority). Use a wrapper <template> for the " + 17950 "scoped slot to make it clearer.", el.rawAttrsMap['slot-scope'], true); 17951 } 17952 el.slotScope = slotScope; 17953 } 17954 // slot="xxx" 17955 var slotTarget = getBindingAttr(el, 'slot'); 17956 if (slotTarget) { 17957 el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget; 17958 el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']); 17959 // preserve slot as an attribute for native shadow DOM compat 17960 // only for non-scoped slots. 17961 if (el.tag !== 'template' && !el.slotScope) { 17962 addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot')); 17963 } 17964 } 17965 // 2.6 v-slot syntax 17966 { 17967 if (el.tag === 'template') { 17968 // v-slot on <template> 17969 var slotBinding = getAndRemoveAttrByRegex(el, slotRE); 17970 if (slotBinding) { 17971 if (true) { 17972 if (el.slotTarget || el.slotScope) { 17973 warn("Unexpected mixed usage of different slot syntaxes.", el); 17974 } 17975 if (el.parent && !maybeComponent(el.parent)) { 17976 warn("<template v-slot> can only appear at the root level inside " + 17977 "the receiving component", el); 17978 } 17979 } 17980 var _a = getSlotName(slotBinding), name_2 = _a.name, dynamic = _a.dynamic; 17981 el.slotTarget = name_2; 17982 el.slotTargetDynamic = dynamic; 17983 el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf 17984 } 17985 } 17986 else { 17987 // v-slot on component, denotes default slot 17988 var slotBinding = getAndRemoveAttrByRegex(el, slotRE); 17989 if (slotBinding) { 17990 if (true) { 17991 if (!maybeComponent(el)) { 17992 warn("v-slot can only be used on components or <template>.", slotBinding); 17993 } 17994 if (el.slotScope || el.slotTarget) { 17995 warn("Unexpected mixed usage of different slot syntaxes.", el); 17996 } 17997 if (el.scopedSlots) { 17998 warn("To avoid scope ambiguity, the default slot should also use " + 17999 "<template> syntax when there are other named slots.", slotBinding); 18000 } 18001 } 18002 // add the component's children to its default slot 18003 var slots = el.scopedSlots || (el.scopedSlots = {}); 18004 var _b = getSlotName(slotBinding), name_3 = _b.name, dynamic = _b.dynamic; 18005 var slotContainer_1 = (slots[name_3] = createASTElement('template', [], el)); 18006 slotContainer_1.slotTarget = name_3; 18007 slotContainer_1.slotTargetDynamic = dynamic; 18008 slotContainer_1.children = el.children.filter(function (c) { 18009 if (!c.slotScope) { 18010 c.parent = slotContainer_1; 18011 return true; 18012 } 18013 }); 18014 slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken; 18015 // remove children as they are returned from scopedSlots now 18016 el.children = []; 18017 // mark el non-plain so data gets generated 18018 el.plain = false; 18019 } 18020 } 18021 } 18022} 18023function getSlotName(binding) { 18024 var name = binding.name.replace(slotRE, ''); 18025 if (!name) { 18026 if (binding.name[0] !== '#') { 18027 name = 'default'; 18028 } 18029 else if (true) { 18030 warn("v-slot shorthand syntax requires a slot name.", binding); 18031 } 18032 } 18033 return dynamicArgRE.test(name) 18034 ? // dynamic [name] 18035 { name: name.slice(1, -1), dynamic: true } 18036 : // static name 18037 { name: "\"".concat(name, "\""), dynamic: false }; 18038} 18039// handle <slot/> outlets 18040function processSlotOutlet(el) { 18041 if (el.tag === 'slot') { 18042 el.slotName = getBindingAttr(el, 'name'); 18043 if ( true && el.key) { 18044 warn("`key` does not work on <slot> because slots are abstract outlets " + 18045 "and can possibly expand into multiple elements. " + 18046 "Use the key on a wrapping element instead.", getRawBindingAttr(el, 'key')); 18047 } 18048 } 18049} 18050function processComponent(el) { 18051 var binding; 18052 if ((binding = getBindingAttr(el, 'is'))) { 18053 el.component = binding; 18054 } 18055 if (getAndRemoveAttr(el, 'inline-template') != null) { 18056 el.inlineTemplate = true; 18057 } 18058} 18059function processAttrs(el) { 18060 var list = el.attrsList; 18061 var i, l, name, rawName, value, modifiers, syncGen, isDynamic; 18062 for (i = 0, l = list.length; i < l; i++) { 18063 name = rawName = list[i].name; 18064 value = list[i].value; 18065 if (dirRE.test(name)) { 18066 // mark element as dynamic 18067 el.hasBindings = true; 18068 // modifiers 18069 modifiers = parseModifiers(name.replace(dirRE, '')); 18070 // support .foo shorthand syntax for the .prop modifier 18071 if (modifiers) { 18072 name = name.replace(modifierRE, ''); 18073 } 18074 if (bindRE.test(name)) { 18075 // v-bind 18076 name = name.replace(bindRE, ''); 18077 value = parseFilters(value); 18078 isDynamic = dynamicArgRE.test(name); 18079 if (isDynamic) { 18080 name = name.slice(1, -1); 18081 } 18082 if ( true && value.trim().length === 0) { 18083 warn("The value for a v-bind expression cannot be empty. Found in \"v-bind:".concat(name, "\"")); 18084 } 18085 if (modifiers) { 18086 if (modifiers.prop && !isDynamic) { 18087 name = camelize(name); 18088 if (name === 'innerHtml') 18089 name = 'innerHTML'; 18090 } 18091 if (modifiers.camel && !isDynamic) { 18092 name = camelize(name); 18093 } 18094 if (modifiers.sync) { 18095 syncGen = genAssignmentCode(value, "$event"); 18096 if (!isDynamic) { 18097 addHandler(el, "update:".concat(camelize(name)), syncGen, null, false, warn, list[i]); 18098 if (hyphenate(name) !== camelize(name)) { 18099 addHandler(el, "update:".concat(hyphenate(name)), syncGen, null, false, warn, list[i]); 18100 } 18101 } 18102 else { 18103 // handler w/ dynamic event name 18104 addHandler(el, "\"update:\"+(".concat(name, ")"), syncGen, null, false, warn, list[i], true // dynamic 18105 ); 18106 } 18107 } 18108 } 18109 if ((modifiers && modifiers.prop) || 18110 (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) { 18111 addProp(el, name, value, list[i], isDynamic); 18112 } 18113 else { 18114 addAttr(el, name, value, list[i], isDynamic); 18115 } 18116 } 18117 else if (onRE.test(name)) { 18118 // v-on 18119 name = name.replace(onRE, ''); 18120 isDynamic = dynamicArgRE.test(name); 18121 if (isDynamic) { 18122 name = name.slice(1, -1); 18123 } 18124 addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic); 18125 } 18126 else { 18127 // normal directives 18128 name = name.replace(dirRE, ''); 18129 // parse arg 18130 var argMatch = name.match(argRE); 18131 var arg = argMatch && argMatch[1]; 18132 isDynamic = false; 18133 if (arg) { 18134 name = name.slice(0, -(arg.length + 1)); 18135 if (dynamicArgRE.test(arg)) { 18136 arg = arg.slice(1, -1); 18137 isDynamic = true; 18138 } 18139 } 18140 addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]); 18141 if ( true && name === 'model') { 18142 checkForAliasModel(el, value); 18143 } 18144 } 18145 } 18146 else { 18147 // literal attribute 18148 if (true) { 18149 var res = parseText(value, delimiters); 18150 if (res) { 18151 warn("".concat(name, "=\"").concat(value, "\": ") + 18152 'Interpolation inside attributes has been removed. ' + 18153 'Use v-bind or the colon shorthand instead. For example, ' + 18154 'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]); 18155 } 18156 } 18157 addAttr(el, name, JSON.stringify(value), list[i]); 18158 // #6887 firefox doesn't update muted state if set via attribute 18159 // even immediately after element creation 18160 if (!el.component && 18161 name === 'muted' && 18162 platformMustUseProp(el.tag, el.attrsMap.type, name)) { 18163 addProp(el, name, 'true', list[i]); 18164 } 18165 } 18166 } 18167} 18168function checkInFor(el) { 18169 var parent = el; 18170 while (parent) { 18171 if (parent.for !== undefined) { 18172 return true; 18173 } 18174 parent = parent.parent; 18175 } 18176 return false; 18177} 18178function parseModifiers(name) { 18179 var match = name.match(modifierRE); 18180 if (match) { 18181 var ret_1 = {}; 18182 match.forEach(function (m) { 18183 ret_1[m.slice(1)] = true; 18184 }); 18185 return ret_1; 18186 } 18187} 18188function makeAttrsMap(attrs) { 18189 var map = {}; 18190 for (var i = 0, l = attrs.length; i < l; i++) { 18191 if ( true && map[attrs[i].name] && !isIE && !isEdge) { 18192 warn('duplicate attribute: ' + attrs[i].name, attrs[i]); 18193 } 18194 map[attrs[i].name] = attrs[i].value; 18195 } 18196 return map; 18197} 18198// for script (e.g. type="x/template") or style, do not decode content 18199function isTextTag(el) { 18200 return el.tag === 'script' || el.tag === 'style'; 18201} 18202function isForbiddenTag(el) { 18203 return (el.tag === 'style' || 18204 (el.tag === 'script' && 18205 (!el.attrsMap.type || el.attrsMap.type === 'text/javascript'))); 18206} 18207var ieNSBug = /^xmlns:NS\d+/; 18208var ieNSPrefix = /^NS\d+:/; 18209/* istanbul ignore next */ 18210function guardIESVGBug(attrs) { 18211 var res = []; 18212 for (var i = 0; i < attrs.length; i++) { 18213 var attr = attrs[i]; 18214 if (!ieNSBug.test(attr.name)) { 18215 attr.name = attr.name.replace(ieNSPrefix, ''); 18216 res.push(attr); 18217 } 18218 } 18219 return res; 18220} 18221function checkForAliasModel(el, value) { 18222 var _el = el; 18223 while (_el) { 18224 if (_el.for && _el.alias === value) { 18225 warn("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") + 18226 "You are binding v-model directly to a v-for iteration alias. " + 18227 "This will not be able to modify the v-for source array because " + 18228 "writing to the alias is like modifying a function local variable. " + 18229 "Consider using an array of objects and use v-model on an object property instead.", el.rawAttrsMap['v-model']); 18230 } 18231 _el = _el.parent; 18232 } 18233} 18234 18235/** 18236 * Expand input[v-model] with dynamic type bindings into v-if-else chains 18237 * Turn this: 18238 * <input v-model="data[type]" :type="type"> 18239 * into this: 18240 * <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]"> 18241 * <input v-else-if="type === 'radio'" type="radio" v-model="data[type]"> 18242 * <input v-else :type="type" v-model="data[type]"> 18243 */ 18244function preTransformNode(el, options) { 18245 if (el.tag === 'input') { 18246 var map = el.attrsMap; 18247 if (!map['v-model']) { 18248 return; 18249 } 18250 var typeBinding = void 0; 18251 if (map[':type'] || map['v-bind:type']) { 18252 typeBinding = getBindingAttr(el, 'type'); 18253 } 18254 if (!map.type && !typeBinding && map['v-bind']) { 18255 typeBinding = "(".concat(map['v-bind'], ").type"); 18256 } 18257 if (typeBinding) { 18258 var ifCondition = getAndRemoveAttr(el, 'v-if', true); 18259 var ifConditionExtra = ifCondition ? "&&(".concat(ifCondition, ")") : ""; 18260 var hasElse = getAndRemoveAttr(el, 'v-else', true) != null; 18261 var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true); 18262 // 1. checkbox 18263 var branch0 = cloneASTElement(el); 18264 // process for on the main node 18265 processFor(branch0); 18266 addRawAttr(branch0, 'type', 'checkbox'); 18267 processElement(branch0, options); 18268 branch0.processed = true; // prevent it from double-processed 18269 branch0.if = "(".concat(typeBinding, ")==='checkbox'") + ifConditionExtra; 18270 addIfCondition(branch0, { 18271 exp: branch0.if, 18272 block: branch0 18273 }); 18274 // 2. add radio else-if condition 18275 var branch1 = cloneASTElement(el); 18276 getAndRemoveAttr(branch1, 'v-for', true); 18277 addRawAttr(branch1, 'type', 'radio'); 18278 processElement(branch1, options); 18279 addIfCondition(branch0, { 18280 exp: "(".concat(typeBinding, ")==='radio'") + ifConditionExtra, 18281 block: branch1 18282 }); 18283 // 3. other 18284 var branch2 = cloneASTElement(el); 18285 getAndRemoveAttr(branch2, 'v-for', true); 18286 addRawAttr(branch2, ':type', typeBinding); 18287 processElement(branch2, options); 18288 addIfCondition(branch0, { 18289 exp: ifCondition, 18290 block: branch2 18291 }); 18292 if (hasElse) { 18293 branch0.else = true; 18294 } 18295 else if (elseIfCondition) { 18296 branch0.elseif = elseIfCondition; 18297 } 18298 return branch0; 18299 } 18300 } 18301} 18302function cloneASTElement(el) { 18303 return createASTElement(el.tag, el.attrsList.slice(), el.parent); 18304} 18305var model = { 18306 preTransformNode: preTransformNode 18307}; 18308 18309var modules = [klass, style, model]; 18310 18311function text(el, dir) { 18312 if (dir.value) { 18313 addProp(el, 'textContent', "_s(".concat(dir.value, ")"), dir); 18314 } 18315} 18316 18317function html(el, dir) { 18318 if (dir.value) { 18319 addProp(el, 'innerHTML', "_s(".concat(dir.value, ")"), dir); 18320 } 18321} 18322 18323var directives = { 18324 model: model$1, 18325 text: text, 18326 html: html 18327}; 18328 18329var baseOptions = { 18330 expectHTML: true, 18331 modules: modules, 18332 directives: directives, 18333 isPreTag: isPreTag, 18334 isUnaryTag: isUnaryTag, 18335 mustUseProp: mustUseProp, 18336 canBeLeftOpenTag: canBeLeftOpenTag, 18337 isReservedTag: isReservedTag, 18338 getTagNamespace: getTagNamespace, 18339 staticKeys: genStaticKeys$1(modules) 18340}; 18341 18342var isStaticKey; 18343var isPlatformReservedTag; 18344var genStaticKeysCached = cached(genStaticKeys); 18345/** 18346 * Goal of the optimizer: walk the generated template AST tree 18347 * and detect sub-trees that are purely static, i.e. parts of 18348 * the DOM that never needs to change. 18349 * 18350 * Once we detect these sub-trees, we can: 18351 * 18352 * 1. Hoist them into constants, so that we no longer need to 18353 * create fresh nodes for them on each re-render; 18354 * 2. Completely skip them in the patching process. 18355 */ 18356function optimize(root, options) { 18357 if (!root) 18358 return; 18359 isStaticKey = genStaticKeysCached(options.staticKeys || ''); 18360 isPlatformReservedTag = options.isReservedTag || no; 18361 // first pass: mark all non-static nodes. 18362 markStatic(root); 18363 // second pass: mark static roots. 18364 markStaticRoots(root, false); 18365} 18366function genStaticKeys(keys) { 18367 return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' + 18368 (keys ? ',' + keys : '')); 18369} 18370function markStatic(node) { 18371 node.static = isStatic(node); 18372 if (node.type === 1) { 18373 // do not make component slot content static. this avoids 18374 // 1. components not able to mutate slot nodes 18375 // 2. static slot content fails for hot-reloading 18376 if (!isPlatformReservedTag(node.tag) && 18377 node.tag !== 'slot' && 18378 node.attrsMap['inline-template'] == null) { 18379 return; 18380 } 18381 for (var i = 0, l = node.children.length; i < l; i++) { 18382 var child = node.children[i]; 18383 markStatic(child); 18384 if (!child.static) { 18385 node.static = false; 18386 } 18387 } 18388 if (node.ifConditions) { 18389 for (var i = 1, l = node.ifConditions.length; i < l; i++) { 18390 var block = node.ifConditions[i].block; 18391 markStatic(block); 18392 if (!block.static) { 18393 node.static = false; 18394 } 18395 } 18396 } 18397 } 18398} 18399function markStaticRoots(node, isInFor) { 18400 if (node.type === 1) { 18401 if (node.static || node.once) { 18402 node.staticInFor = isInFor; 18403 } 18404 // For a node to qualify as a static root, it should have children that 18405 // are not just static text. Otherwise the cost of hoisting out will 18406 // outweigh the benefits and it's better off to just always render it fresh. 18407 if (node.static && 18408 node.children.length && 18409 !(node.children.length === 1 && node.children[0].type === 3)) { 18410 node.staticRoot = true; 18411 return; 18412 } 18413 else { 18414 node.staticRoot = false; 18415 } 18416 if (node.children) { 18417 for (var i = 0, l = node.children.length; i < l; i++) { 18418 markStaticRoots(node.children[i], isInFor || !!node.for); 18419 } 18420 } 18421 if (node.ifConditions) { 18422 for (var i = 1, l = node.ifConditions.length; i < l; i++) { 18423 markStaticRoots(node.ifConditions[i].block, isInFor); 18424 } 18425 } 18426 } 18427} 18428function isStatic(node) { 18429 if (node.type === 2) { 18430 // expression 18431 return false; 18432 } 18433 if (node.type === 3) { 18434 // text 18435 return true; 18436 } 18437 return !!(node.pre || 18438 (!node.hasBindings && // no dynamic bindings 18439 !node.if && 18440 !node.for && // not v-if or v-for or v-else 18441 !isBuiltInTag(node.tag) && // not a built-in 18442 isPlatformReservedTag(node.tag) && // not a component 18443 !isDirectChildOfTemplateFor(node) && 18444 Object.keys(node).every(isStaticKey))); 18445} 18446function isDirectChildOfTemplateFor(node) { 18447 while (node.parent) { 18448 node = node.parent; 18449 if (node.tag !== 'template') { 18450 return false; 18451 } 18452 if (node.for) { 18453 return true; 18454 } 18455 } 18456 return false; 18457} 18458 18459var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/; 18460var fnInvokeRE = /\([^)]*?\);*$/; 18461var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/; 18462// KeyboardEvent.keyCode aliases 18463var keyCodes = { 18464 esc: 27, 18465 tab: 9, 18466 enter: 13, 18467 space: 32, 18468 up: 38, 18469 left: 37, 18470 right: 39, 18471 down: 40, 18472 delete: [8, 46] 18473}; 18474// KeyboardEvent.key aliases 18475var keyNames = { 18476 // #7880: IE11 and Edge use `Esc` for Escape key name. 18477 esc: ['Esc', 'Escape'], 18478 tab: 'Tab', 18479 enter: 'Enter', 18480 // #9112: IE11 uses `Spacebar` for Space key name. 18481 space: [' ', 'Spacebar'], 18482 // #7806: IE11 uses key names without `Arrow` prefix for arrow keys. 18483 up: ['Up', 'ArrowUp'], 18484 left: ['Left', 'ArrowLeft'], 18485 right: ['Right', 'ArrowRight'], 18486 down: ['Down', 'ArrowDown'], 18487 // #9112: IE11 uses `Del` for Delete key name. 18488 delete: ['Backspace', 'Delete', 'Del'] 18489}; 18490// #4868: modifiers that prevent the execution of the listener 18491// need to explicitly return null so that we can determine whether to remove 18492// the listener for .once 18493var genGuard = function (condition) { return "if(".concat(condition, ")return null;"); }; 18494var modifierCode = { 18495 stop: '$event.stopPropagation();', 18496 prevent: '$event.preventDefault();', 18497 self: genGuard("$event.target !== $event.currentTarget"), 18498 ctrl: genGuard("!$event.ctrlKey"), 18499 shift: genGuard("!$event.shiftKey"), 18500 alt: genGuard("!$event.altKey"), 18501 meta: genGuard("!$event.metaKey"), 18502 left: genGuard("'button' in $event && $event.button !== 0"), 18503 middle: genGuard("'button' in $event && $event.button !== 1"), 18504 right: genGuard("'button' in $event && $event.button !== 2") 18505}; 18506function genHandlers(events, isNative) { 18507 var prefix = isNative ? 'nativeOn:' : 'on:'; 18508 var staticHandlers = ""; 18509 var dynamicHandlers = ""; 18510 for (var name_1 in events) { 18511 var handlerCode = genHandler(events[name_1]); 18512 //@ts-expect-error 18513 if (events[name_1] && events[name_1].dynamic) { 18514 dynamicHandlers += "".concat(name_1, ",").concat(handlerCode, ","); 18515 } 18516 else { 18517 staticHandlers += "\"".concat(name_1, "\":").concat(handlerCode, ","); 18518 } 18519 } 18520 staticHandlers = "{".concat(staticHandlers.slice(0, -1), "}"); 18521 if (dynamicHandlers) { 18522 return prefix + "_d(".concat(staticHandlers, ",[").concat(dynamicHandlers.slice(0, -1), "])"); 18523 } 18524 else { 18525 return prefix + staticHandlers; 18526 } 18527} 18528function genHandler(handler) { 18529 if (!handler) { 18530 return 'function(){}'; 18531 } 18532 if (Array.isArray(handler)) { 18533 return "[".concat(handler.map(function (handler) { return genHandler(handler); }).join(','), "]"); 18534 } 18535 var isMethodPath = simplePathRE.test(handler.value); 18536 var isFunctionExpression = fnExpRE.test(handler.value); 18537 var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, '')); 18538 if (!handler.modifiers) { 18539 if (isMethodPath || isFunctionExpression) { 18540 return handler.value; 18541 } 18542 return "function($event){".concat(isFunctionInvocation ? "return ".concat(handler.value) : handler.value, "}"); // inline statement 18543 } 18544 else { 18545 var code = ''; 18546 var genModifierCode = ''; 18547 var keys = []; 18548 var _loop_1 = function (key) { 18549 if (modifierCode[key]) { 18550 genModifierCode += modifierCode[key]; 18551 // left/right 18552 if (keyCodes[key]) { 18553 keys.push(key); 18554 } 18555 } 18556 else if (key === 'exact') { 18557 var modifiers_1 = handler.modifiers; 18558 genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta'] 18559 .filter(function (keyModifier) { return !modifiers_1[keyModifier]; }) 18560 .map(function (keyModifier) { return "$event.".concat(keyModifier, "Key"); }) 18561 .join('||')); 18562 } 18563 else { 18564 keys.push(key); 18565 } 18566 }; 18567 for (var key in handler.modifiers) { 18568 _loop_1(key); 18569 } 18570 if (keys.length) { 18571 code += genKeyFilter(keys); 18572 } 18573 // Make sure modifiers like prevent and stop get executed after key filtering 18574 if (genModifierCode) { 18575 code += genModifierCode; 18576 } 18577 var handlerCode = isMethodPath 18578 ? "return ".concat(handler.value, ".apply(null, arguments)") 18579 : isFunctionExpression 18580 ? "return (".concat(handler.value, ").apply(null, arguments)") 18581 : isFunctionInvocation 18582 ? "return ".concat(handler.value) 18583 : handler.value; 18584 return "function($event){".concat(code).concat(handlerCode, "}"); 18585 } 18586} 18587function genKeyFilter(keys) { 18588 return ( 18589 // make sure the key filters only apply to KeyboardEvents 18590 // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake 18591 // key events that do not have keyCode property... 18592 "if(!$event.type.indexOf('key')&&" + 18593 "".concat(keys.map(genFilterCode).join('&&'), ")return null;")); 18594} 18595function genFilterCode(key) { 18596 var keyVal = parseInt(key, 10); 18597 if (keyVal) { 18598 return "$event.keyCode!==".concat(keyVal); 18599 } 18600 var keyCode = keyCodes[key]; 18601 var keyName = keyNames[key]; 18602 return ("_k($event.keyCode," + 18603 "".concat(JSON.stringify(key), ",") + 18604 "".concat(JSON.stringify(keyCode), ",") + 18605 "$event.key," + 18606 "".concat(JSON.stringify(keyName)) + 18607 ")"); 18608} 18609 18610function on(el, dir) { 18611 if ( true && dir.modifiers) { 18612 warn$2("v-on without argument does not support modifiers."); 18613 } 18614 el.wrapListeners = function (code) { return "_g(".concat(code, ",").concat(dir.value, ")"); }; 18615} 18616 18617function bind(el, dir) { 18618 el.wrapData = function (code) { 18619 return "_b(".concat(code, ",'").concat(el.tag, "',").concat(dir.value, ",").concat(dir.modifiers && dir.modifiers.prop ? 'true' : 'false').concat(dir.modifiers && dir.modifiers.sync ? ',true' : '', ")"); 18620 }; 18621} 18622 18623var baseDirectives = { 18624 on: on, 18625 bind: bind, 18626 cloak: noop 18627}; 18628 18629var CodegenState = /** @class */ (function () { 18630 function CodegenState(options) { 18631 this.options = options; 18632 this.warn = options.warn || baseWarn; 18633 this.transforms = pluckModuleFunction(options.modules, 'transformCode'); 18634 this.dataGenFns = pluckModuleFunction(options.modules, 'genData'); 18635 this.directives = extend(extend({}, baseDirectives), options.directives); 18636 var isReservedTag = options.isReservedTag || no; 18637 this.maybeComponent = function (el) { 18638 return !!el.component || !isReservedTag(el.tag); 18639 }; 18640 this.onceId = 0; 18641 this.staticRenderFns = []; 18642 this.pre = false; 18643 } 18644 return CodegenState; 18645}()); 18646function generate(ast, options) { 18647 var state = new CodegenState(options); 18648 // fix #11483, Root level <script> tags should not be rendered. 18649 var code = ast 18650 ? ast.tag === 'script' 18651 ? 'null' 18652 : genElement(ast, state) 18653 : '_c("div")'; 18654 return { 18655 render: "with(this){return ".concat(code, "}"), 18656 staticRenderFns: state.staticRenderFns 18657 }; 18658} 18659function genElement(el, state) { 18660 if (el.parent) { 18661 el.pre = el.pre || el.parent.pre; 18662 } 18663 if (el.staticRoot && !el.staticProcessed) { 18664 return genStatic(el, state); 18665 } 18666 else if (el.once && !el.onceProcessed) { 18667 return genOnce(el, state); 18668 } 18669 else if (el.for && !el.forProcessed) { 18670 return genFor(el, state); 18671 } 18672 else if (el.if && !el.ifProcessed) { 18673 return genIf(el, state); 18674 } 18675 else if (el.tag === 'template' && !el.slotTarget && !state.pre) { 18676 return genChildren(el, state) || 'void 0'; 18677 } 18678 else if (el.tag === 'slot') { 18679 return genSlot(el, state); 18680 } 18681 else { 18682 // component or element 18683 var code = void 0; 18684 if (el.component) { 18685 code = genComponent(el.component, el, state); 18686 } 18687 else { 18688 var data = void 0; 18689 var maybeComponent = state.maybeComponent(el); 18690 if (!el.plain || (el.pre && maybeComponent)) { 18691 data = genData(el, state); 18692 } 18693 var tag 18694 // check if this is a component in <script setup> 18695 = void 0; 18696 // check if this is a component in <script setup> 18697 var bindings = state.options.bindings; 18698 if (maybeComponent && bindings && bindings.__isScriptSetup !== false) { 18699 tag = checkBindingType(bindings, el.tag); 18700 } 18701 if (!tag) 18702 tag = "'".concat(el.tag, "'"); 18703 var children = el.inlineTemplate ? null : genChildren(el, state, true); 18704 code = "_c(".concat(tag).concat(data ? ",".concat(data) : '' // data 18705 ).concat(children ? ",".concat(children) : '' // children 18706 , ")"); 18707 } 18708 // module transforms 18709 for (var i = 0; i < state.transforms.length; i++) { 18710 code = state.transforms[i](el, code); 18711 } 18712 return code; 18713 } 18714} 18715function checkBindingType(bindings, key) { 18716 var camelName = camelize(key); 18717 var PascalName = capitalize(camelName); 18718 var checkType = function (type) { 18719 if (bindings[key] === type) { 18720 return key; 18721 } 18722 if (bindings[camelName] === type) { 18723 return camelName; 18724 } 18725 if (bindings[PascalName] === type) { 18726 return PascalName; 18727 } 18728 }; 18729 var fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) || 18730 checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */); 18731 if (fromConst) { 18732 return fromConst; 18733 } 18734 var fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) || 18735 checkType("setup-ref" /* BindingTypes.SETUP_REF */) || 18736 checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */); 18737 if (fromMaybeRef) { 18738 return fromMaybeRef; 18739 } 18740} 18741// hoist static sub-trees out 18742function genStatic(el, state) { 18743 el.staticProcessed = true; 18744 // Some elements (templates) need to behave differently inside of a v-pre 18745 // node. All pre nodes are static roots, so we can use this as a location to 18746 // wrap a state change and reset it upon exiting the pre node. 18747 var originalPreState = state.pre; 18748 if (el.pre) { 18749 state.pre = el.pre; 18750 } 18751 state.staticRenderFns.push("with(this){return ".concat(genElement(el, state), "}")); 18752 state.pre = originalPreState; 18753 return "_m(".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', ")"); 18754} 18755// v-once 18756function genOnce(el, state) { 18757 el.onceProcessed = true; 18758 if (el.if && !el.ifProcessed) { 18759 return genIf(el, state); 18760 } 18761 else if (el.staticInFor) { 18762 var key = ''; 18763 var parent_1 = el.parent; 18764 while (parent_1) { 18765 if (parent_1.for) { 18766 key = parent_1.key; 18767 break; 18768 } 18769 parent_1 = parent_1.parent; 18770 } 18771 if (!key) { 18772 true && 18773 state.warn("v-once can only be used inside v-for that is keyed. ", el.rawAttrsMap['v-once']); 18774 return genElement(el, state); 18775 } 18776 return "_o(".concat(genElement(el, state), ",").concat(state.onceId++, ",").concat(key, ")"); 18777 } 18778 else { 18779 return genStatic(el, state); 18780 } 18781} 18782function genIf(el, state, altGen, altEmpty) { 18783 el.ifProcessed = true; // avoid recursion 18784 return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty); 18785} 18786function genIfConditions(conditions, state, altGen, altEmpty) { 18787 if (!conditions.length) { 18788 return altEmpty || '_e()'; 18789 } 18790 var condition = conditions.shift(); 18791 if (condition.exp) { 18792 return "(".concat(condition.exp, ")?").concat(genTernaryExp(condition.block), ":").concat(genIfConditions(conditions, state, altGen, altEmpty)); 18793 } 18794 else { 18795 return "".concat(genTernaryExp(condition.block)); 18796 } 18797 // v-if with v-once should generate code like (a)?_m(0):_m(1) 18798 function genTernaryExp(el) { 18799 return altGen 18800 ? altGen(el, state) 18801 : el.once 18802 ? genOnce(el, state) 18803 : genElement(el, state); 18804 } 18805} 18806function genFor(el, state, altGen, altHelper) { 18807 var exp = el.for; 18808 var alias = el.alias; 18809 var iterator1 = el.iterator1 ? ",".concat(el.iterator1) : ''; 18810 var iterator2 = el.iterator2 ? ",".concat(el.iterator2) : ''; 18811 if ( true && 18812 state.maybeComponent(el) && 18813 el.tag !== 'slot' && 18814 el.tag !== 'template' && 18815 !el.key) { 18816 state.warn("<".concat(el.tag, " v-for=\"").concat(alias, " in ").concat(exp, "\">: component lists rendered with ") + 18817 "v-for should have explicit keys. " + 18818 "See https://v2.vuejs.org/v2/guide/list.html#key for more info.", el.rawAttrsMap['v-for'], true /* tip */); 18819 } 18820 el.forProcessed = true; // avoid recursion 18821 return ("".concat(altHelper || '_l', "((").concat(exp, "),") + 18822 "function(".concat(alias).concat(iterator1).concat(iterator2, "){") + 18823 "return ".concat((altGen || genElement)(el, state)) + 18824 '})'); 18825} 18826function genData(el, state) { 18827 var data = '{'; 18828 // directives first. 18829 // directives may mutate the el's other properties before they are generated. 18830 var dirs = genDirectives(el, state); 18831 if (dirs) 18832 data += dirs + ','; 18833 // key 18834 if (el.key) { 18835 data += "key:".concat(el.key, ","); 18836 } 18837 // ref 18838 if (el.ref) { 18839 data += "ref:".concat(el.ref, ","); 18840 } 18841 if (el.refInFor) { 18842 data += "refInFor:true,"; 18843 } 18844 // pre 18845 if (el.pre) { 18846 data += "pre:true,"; 18847 } 18848 // record original tag name for components using "is" attribute 18849 if (el.component) { 18850 data += "tag:\"".concat(el.tag, "\","); 18851 } 18852 // module data generation functions 18853 for (var i = 0; i < state.dataGenFns.length; i++) { 18854 data += state.dataGenFns[i](el); 18855 } 18856 // attributes 18857 if (el.attrs) { 18858 data += "attrs:".concat(genProps(el.attrs), ","); 18859 } 18860 // DOM props 18861 if (el.props) { 18862 data += "domProps:".concat(genProps(el.props), ","); 18863 } 18864 // event handlers 18865 if (el.events) { 18866 data += "".concat(genHandlers(el.events, false), ","); 18867 } 18868 if (el.nativeEvents) { 18869 data += "".concat(genHandlers(el.nativeEvents, true), ","); 18870 } 18871 // slot target 18872 // only for non-scoped slots 18873 if (el.slotTarget && !el.slotScope) { 18874 data += "slot:".concat(el.slotTarget, ","); 18875 } 18876 // scoped slots 18877 if (el.scopedSlots) { 18878 data += "".concat(genScopedSlots(el, el.scopedSlots, state), ","); 18879 } 18880 // component v-model 18881 if (el.model) { 18882 data += "model:{value:".concat(el.model.value, ",callback:").concat(el.model.callback, ",expression:").concat(el.model.expression, "},"); 18883 } 18884 // inline-template 18885 if (el.inlineTemplate) { 18886 var inlineTemplate = genInlineTemplate(el, state); 18887 if (inlineTemplate) { 18888 data += "".concat(inlineTemplate, ","); 18889 } 18890 } 18891 data = data.replace(/,$/, '') + '}'; 18892 // v-bind dynamic argument wrap 18893 // v-bind with dynamic arguments must be applied using the same v-bind object 18894 // merge helper so that class/style/mustUseProp attrs are handled correctly. 18895 if (el.dynamicAttrs) { 18896 data = "_b(".concat(data, ",\"").concat(el.tag, "\",").concat(genProps(el.dynamicAttrs), ")"); 18897 } 18898 // v-bind data wrap 18899 if (el.wrapData) { 18900 data = el.wrapData(data); 18901 } 18902 // v-on data wrap 18903 if (el.wrapListeners) { 18904 data = el.wrapListeners(data); 18905 } 18906 return data; 18907} 18908function genDirectives(el, state) { 18909 var dirs = el.directives; 18910 if (!dirs) 18911 return; 18912 var res = 'directives:['; 18913 var hasRuntime = false; 18914 var i, l, dir, needRuntime; 18915 for (i = 0, l = dirs.length; i < l; i++) { 18916 dir = dirs[i]; 18917 needRuntime = true; 18918 var gen = state.directives[dir.name]; 18919 if (gen) { 18920 // compile-time directive that manipulates AST. 18921 // returns true if it also needs a runtime counterpart. 18922 needRuntime = !!gen(el, dir, state.warn); 18923 } 18924 if (needRuntime) { 18925 hasRuntime = true; 18926 res += "{name:\"".concat(dir.name, "\",rawName:\"").concat(dir.rawName, "\"").concat(dir.value 18927 ? ",value:(".concat(dir.value, "),expression:").concat(JSON.stringify(dir.value)) 18928 : '').concat(dir.arg ? ",arg:".concat(dir.isDynamicArg ? dir.arg : "\"".concat(dir.arg, "\"")) : '').concat(dir.modifiers ? ",modifiers:".concat(JSON.stringify(dir.modifiers)) : '', "},"); 18929 } 18930 } 18931 if (hasRuntime) { 18932 return res.slice(0, -1) + ']'; 18933 } 18934} 18935function genInlineTemplate(el, state) { 18936 var ast = el.children[0]; 18937 if ( true && (el.children.length !== 1 || ast.type !== 1)) { 18938 state.warn('Inline-template components must have exactly one child element.', { start: el.start }); 18939 } 18940 if (ast && ast.type === 1) { 18941 var inlineRenderFns = generate(ast, state.options); 18942 return "inlineTemplate:{render:function(){".concat(inlineRenderFns.render, "},staticRenderFns:[").concat(inlineRenderFns.staticRenderFns 18943 .map(function (code) { return "function(){".concat(code, "}"); }) 18944 .join(','), "]}"); 18945 } 18946} 18947function genScopedSlots(el, slots, state) { 18948 // by default scoped slots are considered "stable", this allows child 18949 // components with only scoped slots to skip forced updates from parent. 18950 // but in some cases we have to bail-out of this optimization 18951 // for example if the slot contains dynamic names, has v-if or v-for on them... 18952 var needsForceUpdate = el.for || 18953 Object.keys(slots).some(function (key) { 18954 var slot = slots[key]; 18955 return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic 18956 ); 18957 }); 18958 // #9534: if a component with scoped slots is inside a conditional branch, 18959 // it's possible for the same component to be reused but with different 18960 // compiled slot content. To avoid that, we generate a unique key based on 18961 // the generated code of all the slot contents. 18962 var needsKey = !!el.if; 18963 // OR when it is inside another scoped slot or v-for (the reactivity may be 18964 // disconnected due to the intermediate scope variable) 18965 // #9438, #9506 18966 // TODO: this can be further optimized by properly analyzing in-scope bindings 18967 // and skip force updating ones that do not actually use scope variables. 18968 if (!needsForceUpdate) { 18969 var parent_2 = el.parent; 18970 while (parent_2) { 18971 if ((parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) || 18972 parent_2.for) { 18973 needsForceUpdate = true; 18974 break; 18975 } 18976 if (parent_2.if) { 18977 needsKey = true; 18978 } 18979 parent_2 = parent_2.parent; 18980 } 18981 } 18982 var generatedSlots = Object.keys(slots) 18983 .map(function (key) { return genScopedSlot(slots[key], state); }) 18984 .join(','); 18985 return "scopedSlots:_u([".concat(generatedSlots, "]").concat(needsForceUpdate ? ",null,true" : "").concat(!needsForceUpdate && needsKey ? ",null,false,".concat(hash(generatedSlots)) : "", ")"); 18986} 18987function hash(str) { 18988 var hash = 5381; 18989 var i = str.length; 18990 while (i) { 18991 hash = (hash * 33) ^ str.charCodeAt(--i); 18992 } 18993 return hash >>> 0; 18994} 18995function containsSlotChild(el) { 18996 if (el.type === 1) { 18997 if (el.tag === 'slot') { 18998 return true; 18999 } 19000 return el.children.some(containsSlotChild); 19001 } 19002 return false; 19003} 19004function genScopedSlot(el, state) { 19005 var isLegacySyntax = el.attrsMap['slot-scope']; 19006 if (el.if && !el.ifProcessed && !isLegacySyntax) { 19007 return genIf(el, state, genScopedSlot, "null"); 19008 } 19009 if (el.for && !el.forProcessed) { 19010 return genFor(el, state, genScopedSlot); 19011 } 19012 var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope); 19013 var fn = "function(".concat(slotScope, "){") + 19014 "return ".concat(el.tag === 'template' 19015 ? el.if && isLegacySyntax 19016 ? "(".concat(el.if, ")?").concat(genChildren(el, state) || 'undefined', ":undefined") 19017 : genChildren(el, state) || 'undefined' 19018 : genElement(el, state), "}"); 19019 // reverse proxy v-slot without scope on this.$slots 19020 var reverseProxy = slotScope ? "" : ",proxy:true"; 19021 return "{key:".concat(el.slotTarget || "\"default\"", ",fn:").concat(fn).concat(reverseProxy, "}"); 19022} 19023function genChildren(el, state, checkSkip, altGenElement, altGenNode) { 19024 var children = el.children; 19025 if (children.length) { 19026 var el_1 = children[0]; 19027 // optimize single v-for 19028 if (children.length === 1 && 19029 el_1.for && 19030 el_1.tag !== 'template' && 19031 el_1.tag !== 'slot') { 19032 var normalizationType_1 = checkSkip 19033 ? state.maybeComponent(el_1) 19034 ? ",1" 19035 : ",0" 19036 : ""; 19037 return "".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1); 19038 } 19039 var normalizationType = checkSkip 19040 ? getNormalizationType(children, state.maybeComponent) 19041 : 0; 19042 var gen_1 = altGenNode || genNode; 19043 return "[".concat(children.map(function (c) { return gen_1(c, state); }).join(','), "]").concat(normalizationType ? ",".concat(normalizationType) : ''); 19044 } 19045} 19046// determine the normalization needed for the children array. 19047// 0: no normalization needed 19048// 1: simple normalization needed (possible 1-level deep nested array) 19049// 2: full normalization needed 19050function getNormalizationType(children, maybeComponent) { 19051 var res = 0; 19052 for (var i = 0; i < children.length; i++) { 19053 var el = children[i]; 19054 if (el.type !== 1) { 19055 continue; 19056 } 19057 if (needsNormalization(el) || 19058 (el.ifConditions && 19059 el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) { 19060 res = 2; 19061 break; 19062 } 19063 if (maybeComponent(el) || 19064 (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) { 19065 res = 1; 19066 } 19067 } 19068 return res; 19069} 19070function needsNormalization(el) { 19071 return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'; 19072} 19073function genNode(node, state) { 19074 if (node.type === 1) { 19075 return genElement(node, state); 19076 } 19077 else if (node.type === 3 && node.isComment) { 19078 return genComment(node); 19079 } 19080 else { 19081 return genText(node); 19082 } 19083} 19084function genText(text) { 19085 return "_v(".concat(text.type === 2 19086 ? text.expression // no need for () because already wrapped in _s() 19087 : transformSpecialNewlines(JSON.stringify(text.text)), ")"); 19088} 19089function genComment(comment) { 19090 return "_e(".concat(JSON.stringify(comment.text), ")"); 19091} 19092function genSlot(el, state) { 19093 var slotName = el.slotName || '"default"'; 19094 var children = genChildren(el, state); 19095 var res = "_t(".concat(slotName).concat(children ? ",function(){return ".concat(children, "}") : ''); 19096 var attrs = el.attrs || el.dynamicAttrs 19097 ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({ 19098 // slot props are camelized 19099 name: camelize(attr.name), 19100 value: attr.value, 19101 dynamic: attr.dynamic 19102 }); })) 19103 : null; 19104 var bind = el.attrsMap['v-bind']; 19105 if ((attrs || bind) && !children) { 19106 res += ",null"; 19107 } 19108 if (attrs) { 19109 res += ",".concat(attrs); 19110 } 19111 if (bind) { 19112 res += "".concat(attrs ? '' : ',null', ",").concat(bind); 19113 } 19114 return res + ')'; 19115} 19116// componentName is el.component, take it as argument to shun flow's pessimistic refinement 19117function genComponent(componentName, el, state) { 19118 var children = el.inlineTemplate ? null : genChildren(el, state, true); 19119 return "_c(".concat(componentName, ",").concat(genData(el, state)).concat(children ? ",".concat(children) : '', ")"); 19120} 19121function genProps(props) { 19122 var staticProps = ""; 19123 var dynamicProps = ""; 19124 for (var i = 0; i < props.length; i++) { 19125 var prop = props[i]; 19126 var value = transformSpecialNewlines(prop.value); 19127 if (prop.dynamic) { 19128 dynamicProps += "".concat(prop.name, ",").concat(value, ","); 19129 } 19130 else { 19131 staticProps += "\"".concat(prop.name, "\":").concat(value, ","); 19132 } 19133 } 19134 staticProps = "{".concat(staticProps.slice(0, -1), "}"); 19135 if (dynamicProps) { 19136 return "_d(".concat(staticProps, ",[").concat(dynamicProps.slice(0, -1), "])"); 19137 } 19138 else { 19139 return staticProps; 19140 } 19141} 19142// #3895, #4268 19143function transformSpecialNewlines(text) { 19144 return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029'); 19145} 19146 19147// these keywords should not appear inside expressions, but operators like 19148// typeof, instanceof and in are allowed 19149var prohibitedKeywordRE = new RegExp('\\b' + 19150 ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' + 19151 'super,throw,while,yield,delete,export,import,return,switch,default,' + 19152 'extends,finally,continue,debugger,function,arguments') 19153 .split(',') 19154 .join('\\b|\\b') + 19155 '\\b'); 19156// these unary operators should not be used as property/method names 19157var unaryOperatorsRE = new RegExp('\\b' + 19158 'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') + 19159 '\\s*\\([^\\)]*\\)'); 19160// strip strings in expressions 19161var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g; 19162// detect problematic expressions in a template 19163function detectErrors(ast, warn) { 19164 if (ast) { 19165 checkNode(ast, warn); 19166 } 19167} 19168function checkNode(node, warn) { 19169 if (node.type === 1) { 19170 for (var name_1 in node.attrsMap) { 19171 if (dirRE.test(name_1)) { 19172 var value = node.attrsMap[name_1]; 19173 if (value) { 19174 var range = node.rawAttrsMap[name_1]; 19175 if (name_1 === 'v-for') { 19176 checkFor(node, "v-for=\"".concat(value, "\""), warn, range); 19177 } 19178 else if (name_1 === 'v-slot' || name_1[0] === '#') { 19179 checkFunctionParameterExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); 19180 } 19181 else if (onRE.test(name_1)) { 19182 checkEvent(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); 19183 } 19184 else { 19185 checkExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); 19186 } 19187 } 19188 } 19189 } 19190 if (node.children) { 19191 for (var i = 0; i < node.children.length; i++) { 19192 checkNode(node.children[i], warn); 19193 } 19194 } 19195 } 19196 else if (node.type === 2) { 19197 checkExpression(node.expression, node.text, warn, node); 19198 } 19199} 19200function checkEvent(exp, text, warn, range) { 19201 var stripped = exp.replace(stripStringRE, ''); 19202 var keywordMatch = stripped.match(unaryOperatorsRE); 19203 if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') { 19204 warn("avoid using JavaScript unary operator as property name: " + 19205 "\"".concat(keywordMatch[0], "\" in expression ").concat(text.trim()), range); 19206 } 19207 checkExpression(exp, text, warn, range); 19208} 19209function checkFor(node, text, warn, range) { 19210 checkExpression(node.for || '', text, warn, range); 19211 checkIdentifier(node.alias, 'v-for alias', text, warn, range); 19212 checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range); 19213 checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range); 19214} 19215function checkIdentifier(ident, type, text, warn, range) { 19216 if (typeof ident === 'string') { 19217 try { 19218 new Function("var ".concat(ident, "=_")); 19219 } 19220 catch (e) { 19221 warn("invalid ".concat(type, " \"").concat(ident, "\" in expression: ").concat(text.trim()), range); 19222 } 19223 } 19224} 19225function checkExpression(exp, text, warn, range) { 19226 try { 19227 new Function("return ".concat(exp)); 19228 } 19229 catch (e) { 19230 var keywordMatch = exp 19231 .replace(stripStringRE, '') 19232 .match(prohibitedKeywordRE); 19233 if (keywordMatch) { 19234 warn("avoid using JavaScript keyword as property name: " + 19235 "\"".concat(keywordMatch[0], "\"\n Raw expression: ").concat(text.trim()), range); 19236 } 19237 else { 19238 warn("invalid expression: ".concat(e.message, " in\n\n") + 19239 " ".concat(exp, "\n\n") + 19240 " Raw expression: ".concat(text.trim(), "\n"), range); 19241 } 19242 } 19243} 19244function checkFunctionParameterExpression(exp, text, warn, range) { 19245 try { 19246 new Function(exp, ''); 19247 } 19248 catch (e) { 19249 warn("invalid function parameter expression: ".concat(e.message, " in\n\n") + 19250 " ".concat(exp, "\n\n") + 19251 " Raw expression: ".concat(text.trim(), "\n"), range); 19252 } 19253} 19254 19255var range = 2; 19256function generateCodeFrame(source, start, end) { 19257 if (start === void 0) { start = 0; } 19258 if (end === void 0) { end = source.length; } 19259 var lines = source.split(/\r?\n/); 19260 var count = 0; 19261 var res = []; 19262 for (var i = 0; i < lines.length; i++) { 19263 count += lines[i].length + 1; 19264 if (count >= start) { 19265 for (var j = i - range; j <= i + range || end > count; j++) { 19266 if (j < 0 || j >= lines.length) 19267 continue; 19268 res.push("".concat(j + 1).concat(repeat(" ", 3 - String(j + 1).length), "| ").concat(lines[j])); 19269 var lineLength = lines[j].length; 19270 if (j === i) { 19271 // push underline 19272 var pad = start - (count - lineLength) + 1; 19273 var length_1 = end > count ? lineLength - pad : end - start; 19274 res.push(" | " + repeat(" ", pad) + repeat("^", length_1)); 19275 } 19276 else if (j > i) { 19277 if (end > count) { 19278 var length_2 = Math.min(end - count, lineLength); 19279 res.push(" | " + repeat("^", length_2)); 19280 } 19281 count += lineLength + 1; 19282 } 19283 } 19284 break; 19285 } 19286 } 19287 return res.join('\n'); 19288} 19289function repeat(str, n) { 19290 var result = ''; 19291 if (n > 0) { 19292 // eslint-disable-next-line no-constant-condition 19293 while (true) { 19294 // eslint-disable-line 19295 if (n & 1) 19296 result += str; 19297 n >>>= 1; 19298 if (n <= 0) 19299 break; 19300 str += str; 19301 } 19302 } 19303 return result; 19304} 19305 19306function createFunction(code, errors) { 19307 try { 19308 return new Function(code); 19309 } 19310 catch (err) { 19311 errors.push({ err: err, code: code }); 19312 return noop; 19313 } 19314} 19315function createCompileToFunctionFn(compile) { 19316 var cache = Object.create(null); 19317 return function compileToFunctions(template, options, vm) { 19318 options = extend({}, options); 19319 var warn = options.warn || warn$2; 19320 delete options.warn; 19321 /* istanbul ignore if */ 19322 if (true) { 19323 // detect possible CSP restriction 19324 try { 19325 new Function('return 1'); 19326 } 19327 catch (e) { 19328 if (e.toString().match(/unsafe-eval|CSP/)) { 19329 warn('It seems you are using the standalone build of Vue.js in an ' + 19330 'environment with Content Security Policy that prohibits unsafe-eval. ' + 19331 'The template compiler cannot work in this environment. Consider ' + 19332 'relaxing the policy to allow unsafe-eval or pre-compiling your ' + 19333 'templates into render functions.'); 19334 } 19335 } 19336 } 19337 // check cache 19338 var key = options.delimiters 19339 ? String(options.delimiters) + template 19340 : template; 19341 if (cache[key]) { 19342 return cache[key]; 19343 } 19344 // compile 19345 var compiled = compile(template, options); 19346 // check compilation errors/tips 19347 if (true) { 19348 if (compiled.errors && compiled.errors.length) { 19349 if (options.outputSourceRange) { 19350 compiled.errors.forEach(function (e) { 19351 warn("Error compiling template:\n\n".concat(e.msg, "\n\n") + 19352 generateCodeFrame(template, e.start, e.end), vm); 19353 }); 19354 } 19355 else { 19356 warn("Error compiling template:\n\n".concat(template, "\n\n") + 19357 compiled.errors.map(function (e) { return "- ".concat(e); }).join('\n') + 19358 '\n', vm); 19359 } 19360 } 19361 if (compiled.tips && compiled.tips.length) { 19362 if (options.outputSourceRange) { 19363 compiled.tips.forEach(function (e) { return tip(e.msg, vm); }); 19364 } 19365 else { 19366 compiled.tips.forEach(function (msg) { return tip(msg, vm); }); 19367 } 19368 } 19369 } 19370 // turn code into functions 19371 var res = {}; 19372 var fnGenErrors = []; 19373 res.render = createFunction(compiled.render, fnGenErrors); 19374 res.staticRenderFns = compiled.staticRenderFns.map(function (code) { 19375 return createFunction(code, fnGenErrors); 19376 }); 19377 // check function generation errors. 19378 // this should only happen if there is a bug in the compiler itself. 19379 // mostly for codegen development use 19380 /* istanbul ignore if */ 19381 if (true) { 19382 if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) { 19383 warn("Failed to generate render function:\n\n" + 19384 fnGenErrors 19385 .map(function (_a) { 19386 var err = _a.err, code = _a.code; 19387 return "".concat(err.toString(), " in\n\n").concat(code, "\n"); 19388 }) 19389 .join('\n'), vm); 19390 } 19391 } 19392 return (cache[key] = res); 19393 }; 19394} 19395 19396function createCompilerCreator(baseCompile) { 19397 return function createCompiler(baseOptions) { 19398 function compile(template, options) { 19399 var finalOptions = Object.create(baseOptions); 19400 var errors = []; 19401 var tips = []; 19402 var warn = function (msg, range, tip) { 19403 (tip ? tips : errors).push(msg); 19404 }; 19405 if (options) { 19406 if ( true && options.outputSourceRange) { 19407 // $flow-disable-line 19408 var leadingSpaceLength_1 = template.match(/^\s*/)[0].length; 19409 warn = function (msg, range, tip) { 19410 var data = typeof msg === 'string' ? { msg: msg } : msg; 19411 if (range) { 19412 if (range.start != null) { 19413 data.start = range.start + leadingSpaceLength_1; 19414 } 19415 if (range.end != null) { 19416 data.end = range.end + leadingSpaceLength_1; 19417 } 19418 } 19419 (tip ? tips : errors).push(data); 19420 }; 19421 } 19422 // merge custom modules 19423 if (options.modules) { 19424 finalOptions.modules = (baseOptions.modules || []).concat(options.modules); 19425 } 19426 // merge custom directives 19427 if (options.directives) { 19428 finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives); 19429 } 19430 // copy other options 19431 for (var key in options) { 19432 if (key !== 'modules' && key !== 'directives') { 19433 finalOptions[key] = options[key]; 19434 } 19435 } 19436 } 19437 finalOptions.warn = warn; 19438 var compiled = baseCompile(template.trim(), finalOptions); 19439 if (true) { 19440 detectErrors(compiled.ast, warn); 19441 } 19442 compiled.errors = errors; 19443 compiled.tips = tips; 19444 return compiled; 19445 } 19446 return { 19447 compile: compile, 19448 compileToFunctions: createCompileToFunctionFn(compile) 19449 }; 19450 }; 19451} 19452 19453// `createCompilerCreator` allows creating compilers that use alternative 19454// parser/optimizer/codegen, e.g the SSR optimizing compiler. 19455// Here we just export a default compiler using the default parts. 19456var createCompiler = createCompilerCreator(function baseCompile(template, options) { 19457 var ast = parse(template.trim(), options); 19458 if (options.optimize !== false) { 19459 optimize(ast, options); 19460 } 19461 var code = generate(ast, options); 19462 return { 19463 ast: ast, 19464 render: code.render, 19465 staticRenderFns: code.staticRenderFns 19466 }; 19467}); 19468 19469var _a = createCompiler(baseOptions), compileToFunctions = _a.compileToFunctions; 19470 19471// check whether current browser encodes a char inside attribute values 19472var div; 19473function getShouldDecode(href) { 19474 div = div || document.createElement('div'); 19475 div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>"; 19476 return div.innerHTML.indexOf(' ') > 0; 19477} 19478// #3663: IE encodes newlines inside attribute values while other browsers don't 19479var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false; 19480// #6828: chrome encodes content in a[href] 19481var shouldDecodeNewlinesForHref = inBrowser 19482 ? getShouldDecode(true) 19483 : false; 19484 19485var idToTemplate = cached(function (id) { 19486 var el = query(id); 19487 return el && el.innerHTML; 19488}); 19489var mount = Vue.prototype.$mount; 19490Vue.prototype.$mount = function (el, hydrating) { 19491 el = el && query(el); 19492 /* istanbul ignore if */ 19493 if (el === document.body || el === document.documentElement) { 19494 true && 19495 warn$2("Do not mount Vue to <html> or <body> - mount to normal elements instead."); 19496 return this; 19497 } 19498 var options = this.$options; 19499 // resolve template/el and convert to render function 19500 if (!options.render) { 19501 var template = options.template; 19502 if (template) { 19503 if (typeof template === 'string') { 19504 if (template.charAt(0) === '#') { 19505 template = idToTemplate(template); 19506 /* istanbul ignore if */ 19507 if ( true && !template) { 19508 warn$2("Template element not found or is empty: ".concat(options.template), this); 19509 } 19510 } 19511 } 19512 else if (template.nodeType) { 19513 template = template.innerHTML; 19514 } 19515 else { 19516 if (true) { 19517 warn$2('invalid template option:' + template, this); 19518 } 19519 return this; 19520 } 19521 } 19522 else if (el) { 19523 // @ts-expect-error 19524 template = getOuterHTML(el); 19525 } 19526 if (template) { 19527 /* istanbul ignore if */ 19528 if ( true && config.performance && mark) { 19529 mark('compile'); 19530 } 19531 var _a = compileToFunctions(template, { 19532 outputSourceRange: "development" !== 'production', 19533 shouldDecodeNewlines: shouldDecodeNewlines, 19534 shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref, 19535 delimiters: options.delimiters, 19536 comments: options.comments 19537 }, this), render = _a.render, staticRenderFns = _a.staticRenderFns; 19538 options.render = render; 19539 options.staticRenderFns = staticRenderFns; 19540 /* istanbul ignore if */ 19541 if ( true && config.performance && mark) { 19542 mark('compile end'); 19543 measure("vue ".concat(this._name, " compile"), 'compile', 'compile end'); 19544 } 19545 } 19546 } 19547 return mount.call(this, el, hydrating); 19548}; 19549/** 19550 * Get outerHTML of elements, taking care 19551 * of SVG elements in IE as well. 19552 */ 19553function getOuterHTML(el) { 19554 if (el.outerHTML) { 19555 return el.outerHTML; 19556 } 19557 else { 19558 var container = document.createElement('div'); 19559 container.appendChild(el.cloneNode(true)); 19560 return container.innerHTML; 19561 } 19562} 19563Vue.compile = compileToFunctions; 19564 19565 19566 19567 19568/***/ })
vendor: 8,893 bytes, lines 19568-19798
19568, 19569 19570/***/ "./resources/assets/scripts/components sync recursive \\.vue$/": 19571/*!***********************************************************!*\ 19572 !*** ./resources/assets/scripts/components/ sync \.vue$/ ***! 19573 \***********************************************************/ 19574/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19575 19576var map = { 19577 "./backgroundSlider.vue": "./resources/assets/scripts/components/backgroundSlider.vue" 19578}; 19579 19580 19581function webpackContext(req) { 19582 var id = webpackContextResolve(req); 19583 return __webpack_require__(id); 19584} 19585function webpackContextResolve(req) { 19586 if(!__webpack_require__.o(map, req)) { 19587 var e = new Error("Cannot find module '" + req + "'"); 19588 e.code = 'MODULE_NOT_FOUND'; 19589 throw e; 19590 } 19591 return map[req]; 19592} 19593webpackContext.keys = function webpackContextKeys() { 19594 return Object.keys(map); 19595}; 19596webpackContext.resolve = webpackContextResolve; 19597module.exports = webpackContext; 19598webpackContext.id = "./resources/assets/scripts/components sync recursive \\.vue$/"; 19599 19600/***/ }), 19601 19602/***/ "jquery": 19603/*!*************************!*\ 19604 !*** external "jQuery" ***! 19605 \*************************/ 19606/***/ ((module) => { 19607 19608"use strict"; 19609module.exports = jQuery; 19610 19611/***/ }) 19612 19613/******/ }); 19614/************************************************************************/ 19615/******/ // The module cache 19616/******/ var __webpack_module_cache__ = {}; 19617/******/ 19618/******/ // The require function 19619/******/ function __webpack_require__(moduleId) { 19620/******/ // Check if module is in cache 19621/******/ var cachedModule = __webpack_module_cache__[moduleId]; 19622/******/ if (cachedModule !== undefined) { 19623/******/ return cachedModule.exports; 19624/******/ } 19625/******/ // Create a new module (and put it into the cache) 19626/******/ var module = __webpack_module_cache__[moduleId] = { 19627/******/ id: moduleId, 19628/******/ // no module.loaded needed 19629/******/ exports: {} 19630/******/ }; 19631/******/ 19632/******/ // Execute the module function 19633/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); 19634/******/ 19635/******/ // Return the exports of the module 19636/******/ return module.exports; 19637/******/ } 19638/******/ 19639/******/ // expose the modules object (__webpack_modules__) 19640/******/ __webpack_require__.m = __webpack_modules__; 19641/******/ 19642/************************************************************************/ 19643/******/ /* webpack/runtime/chunk loaded */ 19644/******/ (() => { 19645/******/ var deferred = []; 19646/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { 19647/******/ if(chunkIds) { 19648/******/ priority = priority || 0; 19649/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; 19650/******/ deferred[i] = [chunkIds, fn, priority]; 19651/******/ return; 19652/******/ } 19653/******/ var notFulfilled = Infinity; 19654/******/ for (var i = 0; i < deferred.length; i++) { 19655/******/ var [chunkIds, fn, priority] = deferred[i]; 19656/******/ var fulfilled = true; 19657/******/ for (var j = 0; j < chunkIds.length; j++) { 19658/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { 19659/******/ chunkIds.splice(j--, 1); 19660/******/ } else { 19661/******/ fulfilled = false; 19662/******/ if(priority < notFulfilled) notFulfilled = priority; 19663/******/ } 19664/******/ } 19665/******/ if(fulfilled) { 19666/******/ deferred.splice(i--, 1) 19667/******/ var r = fn(); 19668/******/ if (r !== undefined) result = r; 19669/******/ } 19670/******/ } 19671/******/ return result; 19672/******/ }; 19673/******/ })(); 19674/******/ 19675/******/ /* webpack/runtime/compat get default export */ 19676/******/ (() => { 19677/******/ // getDefaultExport function for compatibility with non-harmony modules 19678/******/ __webpack_require__.n = (module) => { 19679/******/ var getter = module && module.__esModule ? 19680/******/ () => (module['default']) : 19681/******/ () => (module); 19682/******/ __webpack_require__.d(getter, { a: getter }); 19683/******/ return getter; 19684/******/ }; 19685/******/ })(); 19686/******/ 19687/******/ /* webpack/runtime/define property getters */ 19688/******/ (() => { 19689/******/ // define getter functions for harmony exports 19690/******/ __webpack_require__.d = (exports, definition) => { 19691/******/ for(var key in definition) { 19692/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 19693/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 19694/******/ } 19695/******/ } 19696/******/ }; 19697/******/ })(); 19698/******/ 19699/******/ /* webpack/runtime/global */ 19700/******/ (() => { 19701/******/ __webpack_require__.g = (function() { 19702/******/ if (typeof globalThis === 'object') return globalThis; 19703/******/ try { 19704/******/ return this || new Function('return this')(); 19705/******/ } catch (e) { 19706/******/ if (typeof window === 'object') return window; 19707/******/ } 19708/******/ })(); 19709/******/ })(); 19710/******/ 19711/******/ /* webpack/runtime/hasOwnProperty shorthand */ 19712/******/ (() => { 19713/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 19714/******/ })(); 19715/******/ 19716/******/ /* webpack/runtime/make namespace object */ 19717/******/ (() => { 19718/******/ // define __esModule on exports 19719/******/ __webpack_require__.r = (exports) => { 19720/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 19721/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 19722/******/ } 19723/******/ Object.defineProperty(exports, '__esModule', { value: true }); 19724/******/ }; 19725/******/ })(); 19726/******/ 19727/******/ /* webpack/runtime/jsonp chunk loading */ 19728/******/ (() => { 19729/******/ // no baseURI 19730/******/ 19731/******/ // object to store loaded and loading chunks 19732/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched 19733/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded 19734/******/ var installedChunks = { 19735/******/ "/scripts/app": 0, 19736/******/ "styles/app": 0, 19737/******/ "styles/editor-styles": 0 19738/******/ }; 19739/******/ 19740/******/ // no chunk on demand loading 19741/******/ 19742/******/ // no prefetching 19743/******/ 19744/******/ // no preloaded 19745/******/ 19746/******/ // no HMR 19747/******/ 19748/******/ // no HMR manifest 19749/******/ 19750/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); 19751/******/ 19752/******/ // install a JSONP callback for chunk loading 19753/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { 19754/******/ var [chunkIds, moreModules, runtime] = data; 19755/******/ // add "moreModules" to the modules object, 19756/******/ // then flag all "chunkIds" as loaded and fire callback 19757/******/ var moduleId, chunkId, i = 0; 19758/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { 19759/******/ for(moduleId in moreModules) { 19760/******/ if(__webpack_require__.o(moreModules, moduleId)) { 19761/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; 19762/******/ } 19763/******/ } 19764/******/ if(runtime) var result = runtime(__webpack_require__); 19765/******/ } 19766/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); 19767/******/ for(;i < chunkIds.length; i++) { 19768/******/ chunkId = chunkIds[i]; 19769/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { 19770/******/ installedChunks[chunkId][0](); 19771/******/ } 19772/******/ installedChunks[chunkId] = 0; 19773/******/ } 19774/******/ return __webpack_require__.O(result); 19775/******/ } 19776/******/ 19777/******/ var chunkLoadingGlobal = self["webpackChunkos_theme"] = self["webpackChunkos_theme"] || []; 19778/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); 19779/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); 19780/******/ })(); 19781/******/ 19782/******/ /* webpack/runtime/nonce */ 19783/******/ (() => { 19784/******/ __webpack_require__.nc = undefined; 19785/******/ })(); 19786/******/ 19787/************************************************************************/ 19788/******/ 19789/******/ // startup 19790/******/ // Load entry module and return exports 19791/******/ // This entry module depends on other loaded chunks and execution need to be delayed 19792/******/ __webpack_require__.O(undefined, ["styles/app","styles/editor-styles"], () => (__webpack_require__("./resources/assets/scripts/app.js"))) 19793/******/ __webpack_require__.O(undefined, ["styles/app","styles/editor-styles"], () => (__webpack_require__("./resources/assets/styles/app.scss"))) 19794/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["styles/app","styles/editor-styles"], () => (__webpack_require__("./resources/assets/styles/editor-styles.scss"))) 19795/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); 19796/******/ 19797/******/ })() 19798;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.