vendor: 4,280 bytes, lines 1-128
1const style$1 = ""; 2var top = "top"; 3var bottom = "bottom"; 4var right = "right"; 5var left = "left"; 6var auto = "auto"; 7var basePlacements = [top, bottom, right, left]; 8var start = "start"; 9var end = "end"; 10var clippingParents = "clippingParents"; 11var viewport = "viewport"; 12var popper = "popper"; 13var reference = "reference"; 14var variationPlacements = /* @__PURE__ */ basePlacements.reduce(function(acc, placement) { 15 return acc.concat([placement + "-" + start, placement + "-" + end]); 16}, []); 17var placements = /* @__PURE__ */ [].concat(basePlacements, [auto]).reduce(function(acc, placement) { 18 return acc.concat([placement, placement + "-" + start, placement + "-" + end]); 19}, []); 20var beforeRead = "beforeRead"; 21var read = "read"; 22var afterRead = "afterRead"; 23var beforeMain = "beforeMain"; 24var main = "main"; 25var afterMain = "afterMain"; 26var beforeWrite = "beforeWrite"; 27var write = "write"; 28var afterWrite = "afterWrite"; 29var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; 30function getNodeName(element) { 31 return element ? (element.nodeName || "").toLowerCase() : null; 32} 33function getWindow(node) { 34 if (node == null) { 35 return window; 36 } 37 if (node.toString() !== "[object Window]") { 38 var ownerDocument = node.ownerDocument; 39 return ownerDocument ? ownerDocument.defaultView || window : window; 40 } 41 return node; 42} 43function isElement$1(node) { 44 var OwnElement = getWindow(node).Element; 45 return node instanceof OwnElement || node instanceof Element; 46} 47function isHTMLElement$1(node) { 48 var OwnElement = getWindow(node).HTMLElement; 49 return node instanceof OwnElement || node instanceof HTMLElement; 50} 51function isShadowRoot(node) { 52 if (typeof ShadowRoot === "undefined") { 53 return false; 54 } 55 var OwnElement = getWindow(node).ShadowRoot; 56 return node instanceof OwnElement || node instanceof ShadowRoot; 57} 58function applyStyles(_ref) { 59 var state = _ref.state; 60 Object.keys(state.elements).forEach(function(name) { 61 var style2 = state.styles[name] || {}; 62 var attributes = state.attributes[name] || {}; 63 var element = state.elements[name]; 64 if (!isHTMLElement$1(element) || !getNodeName(element)) { 65 return; 66 } 67 Object.assign(element.style, style2); 68 Object.keys(attributes).forEach(function(name2) { 69 var value = attributes[name2]; 70 if (value === false) { 71 element.removeAttribute(name2); 72 } else { 73 element.setAttribute(name2, value === true ? "" : value); 74 } 75 }); 76 }); 77} 78function effect$2(_ref2) { 79 var state = _ref2.state; 80 var initialStyles = { 81 popper: { 82 position: state.options.strategy, 83 left: "0", 84 top: "0", 85 margin: "0" 86 }, 87 arrow: { 88 position: "absolute" 89 }, 90 reference: {} 91 }; 92 Object.assign(state.elements.popper.style, initialStyles.popper); 93 state.styles = initialStyles; 94 if (state.elements.arrow) { 95 Object.assign(state.elements.arrow.style, initialStyles.arrow); 96 } 97 return function() { 98 Object.keys(state.elements).forEach(function(name) { 99 var element = state.elements[name]; 100 var attributes = state.attributes[name] || {}; 101 var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); 102 var style2 = styleProperties.reduce(function(style3, property) { 103 style3[property] = ""; 104 return style3; 105 }, {}); 106 if (!isHTMLElement$1(element) || !getNodeName(element)) { 107 return; 108 } 109 Object.assign(element.style, style2); 110 Object.keys(attributes).forEach(function(attribute) { 111 element.removeAttribute(attribute); 112 }); 113 }); 114 }; 115} 116const applyStyles$1 = { 117 name: "applyStyles", 118 enabled: true, 119 phase: "write", 120 fn: applyStyles, 121 effect: effect$2, 122 requires: ["computeStyles"] 123}; 124function getBasePlacement(placement) { 125 return placement.split("-")[0]; 126} 127var max$1 = Math.max; 128var min$1 = Math.min;
vendor: 14,391 bytes, lines 129-491
129var round = Math.round; 130function getUAString() { 131 var uaData = navigator.userAgentData; 132 if (uaData != null && uaData.brands) { 133 return uaData.brands.map(function(item) { 134 return item.brand + "/" + item.version; 135 }).join(" "); 136 } 137 return navigator.userAgent; 138} 139function isLayoutViewport() { 140 return !/^((?!chrome|android).)*safari/i.test(getUAString()); 141} 142function getBoundingClientRect(element, includeScale, isFixedStrategy) { 143 if (includeScale === void 0) { 144 includeScale = false; 145 } 146 if (isFixedStrategy === void 0) { 147 isFixedStrategy = false; 148 } 149 var clientRect = element.getBoundingClientRect(); 150 var scaleX = 1; 151 var scaleY = 1; 152 if (includeScale && isHTMLElement$1(element)) { 153 scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1; 154 scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1; 155 } 156 var _ref = isElement$1(element) ? getWindow(element) : window, visualViewport = _ref.visualViewport; 157 var addVisualOffsets = !isLayoutViewport() && isFixedStrategy; 158 var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX; 159 var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY; 160 var width = clientRect.width / scaleX; 161 var height = clientRect.height / scaleY; 162 return { 163 width, 164 height, 165 top: y, 166 right: x + width, 167 bottom: y + height, 168 left: x, 169 x, 170 y 171 }; 172} 173function getLayoutRect(element) { 174 var clientRect = getBoundingClientRect(element); 175 var width = element.offsetWidth; 176 var height = element.offsetHeight; 177 if (Math.abs(clientRect.width - width) <= 1) { 178 width = clientRect.width; 179 } 180 if (Math.abs(clientRect.height - height) <= 1) { 181 height = clientRect.height; 182 } 183 return { 184 x: element.offsetLeft, 185 y: element.offsetTop, 186 width, 187 height 188 }; 189} 190function contains(parent, child2) { 191 var rootNode = child2.getRootNode && child2.getRootNode(); 192 if (parent.contains(child2)) { 193 return true; 194 } else if (rootNode && isShadowRoot(rootNode)) { 195 var next = child2; 196 do { 197 if (next && parent.isSameNode(next)) { 198 return true; 199 } 200 next = next.parentNode || next.host; 201 } while (next); 202 } 203 return false; 204} 205function getComputedStyle$1(element) { 206 return getWindow(element).getComputedStyle(element); 207} 208function isTableElement(element) { 209 return ["table", "td", "th"].indexOf(getNodeName(element)) >= 0; 210} 211function getDocumentElement(element) { 212 return ((isElement$1(element) ? element.ownerDocument : ( 213 // $FlowFixMe[prop-missing] 214 element.document 215 )) || window.document).documentElement; 216} 217function getParentNode(element) { 218 if (getNodeName(element) === "html") { 219 return element; 220 } 221 return ( 222 // this is a quicker (but less type safe) way to save quite some bytes from the bundle 223 // $FlowFixMe[incompatible-return] 224 // $FlowFixMe[prop-missing] 225 element.assignedSlot || // step into the shadow DOM of the parent of a slotted node 226 element.parentNode || // DOM Element detected 227 (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected 228 // $FlowFixMe[incompatible-call]: HTMLElement is a Node 229 getDocumentElement(element) 230 ); 231} 232function getTrueOffsetParent(element) { 233 if (!isHTMLElement$1(element) || // https://github.com/popperjs/popper-core/issues/837 234 getComputedStyle$1(element).position === "fixed") { 235 return null; 236 } 237 return element.offsetParent; 238} 239function getContainingBlock(element) { 240 var isFirefox = /firefox/i.test(getUAString()); 241 var isIE = /Trident/i.test(getUAString()); 242 if (isIE && isHTMLElement$1(element)) { 243 var elementCss = getComputedStyle$1(element); 244 if (elementCss.position === "fixed") { 245 return null; 246 } 247 } 248 var currentNode = getParentNode(element); 249 if (isShadowRoot(currentNode)) { 250 currentNode = currentNode.host; 251 } 252 while (isHTMLElement$1(currentNode) && ["html", "body"].indexOf(getNodeName(currentNode)) < 0) { 253 var css = getComputedStyle$1(currentNode); 254 if (css.transform !== "none" || css.perspective !== "none" || css.contain === "paint" || ["transform", "perspective"].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === "filter" || isFirefox && css.filter && css.filter !== "none") { 255 return currentNode; 256 } else { 257 currentNode = currentNode.parentNode; 258 } 259 } 260 return null; 261} 262function getOffsetParent(element) { 263 var window2 = getWindow(element); 264 var offsetParent = getTrueOffsetParent(element); 265 while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === "static") { 266 offsetParent = getTrueOffsetParent(offsetParent); 267 } 268 if (offsetParent && (getNodeName(offsetParent) === "html" || getNodeName(offsetParent) === "body" && getComputedStyle$1(offsetParent).position === "static")) { 269 return window2; 270 } 271 return offsetParent || getContainingBlock(element) || window2; 272} 273function getMainAxisFromPlacement(placement) { 274 return ["top", "bottom"].indexOf(placement) >= 0 ? "x" : "y"; 275} 276function within(min2, value, max2) { 277 return max$1(min2, min$1(value, max2)); 278} 279function withinMaxClamp(min2, value, max2) { 280 var v = within(min2, value, max2); 281 return v > max2 ? max2 : v; 282} 283function getFreshSideObject() { 284 return { 285 top: 0, 286 right: 0, 287 bottom: 0, 288 left: 0 289 }; 290} 291function mergePaddingObject(paddingObject) { 292 return Object.assign({}, getFreshSideObject(), paddingObject); 293} 294function expandToHashMap(value, keys) { 295 return keys.reduce(function(hashMap, key) { 296 hashMap[key] = value; 297 return hashMap; 298 }, {}); 299} 300var toPaddingObject = function toPaddingObject2(padding, state) { 301 padding = typeof padding === "function" ? padding(Object.assign({}, state.rects, { 302 placement: state.placement 303 })) : padding; 304 return mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements)); 305}; 306function arrow(_ref) { 307 var _state$modifiersData$; 308 var state = _ref.state, name = _ref.name, options = _ref.options; 309 var arrowElement = state.elements.arrow; 310 var popperOffsets2 = state.modifiersData.popperOffsets; 311 var basePlacement = getBasePlacement(state.placement); 312 var axis = getMainAxisFromPlacement(basePlacement); 313 var isVertical = [left, right].indexOf(basePlacement) >= 0; 314 var len = isVertical ? "height" : "width"; 315 if (!arrowElement || !popperOffsets2) { 316 return; 317 } 318 var paddingObject = toPaddingObject(options.padding, state); 319 var arrowRect = getLayoutRect(arrowElement); 320 var minProp = axis === "y" ? top : left; 321 var maxProp = axis === "y" ? bottom : right; 322 var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets2[axis] - state.rects.popper[len]; 323 var startDiff = popperOffsets2[axis] - state.rects.reference[axis]; 324 var arrowOffsetParent = getOffsetParent(arrowElement); 325 var clientSize = arrowOffsetParent ? axis === "y" ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; 326 var centerToReference = endDiff / 2 - startDiff / 2; 327 var min2 = paddingObject[minProp]; 328 var max2 = clientSize - arrowRect[len] - paddingObject[maxProp]; 329 var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; 330 var offset2 = within(min2, center, max2); 331 var axisProp = axis; 332 state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset2, _state$modifiersData$.centerOffset = offset2 - center, _state$modifiersData$); 333} 334function effect$1(_ref2) { 335 var state = _ref2.state, options = _ref2.options; 336 var _options$element = options.element, arrowElement = _options$element === void 0 ? "[data-popper-arrow]" : _options$element; 337 if (arrowElement == null) { 338 return; 339 } 340 if (typeof arrowElement === "string") { 341 arrowElement = state.elements.popper.querySelector(arrowElement); 342 if (!arrowElement) { 343 return; 344 } 345 } 346 if (!contains(state.elements.popper, arrowElement)) { 347 return; 348 } 349 state.elements.arrow = arrowElement; 350} 351const arrow$1 = { 352 name: "arrow", 353 enabled: true, 354 phase: "main", 355 fn: arrow, 356 effect: effect$1, 357 requires: ["popperOffsets"], 358 requiresIfExists: ["preventOverflow"] 359}; 360function getVariation(placement) { 361 return placement.split("-")[1]; 362} 363var unsetSides = { 364 top: "auto", 365 right: "auto", 366 bottom: "auto", 367 left: "auto" 368}; 369function roundOffsetsByDPR(_ref) { 370 var x = _ref.x, y = _ref.y; 371 var win = window; 372 var dpr = win.devicePixelRatio || 1; 373 return { 374 x: round(x * dpr) / dpr || 0, 375 y: round(y * dpr) / dpr || 0 376 }; 377} 378function mapToStyles(_ref2) { 379 var _Object$assign2; 380 var popper2 = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, adaptive = _ref2.adaptive, roundOffsets = _ref2.roundOffsets, isFixed = _ref2.isFixed; 381 var _offsets$x = offsets.x, x = _offsets$x === void 0 ? 0 : _offsets$x, _offsets$y = offsets.y, y = _offsets$y === void 0 ? 0 : _offsets$y; 382 var _ref3 = typeof roundOffsets === "function" ? roundOffsets({ 383 x, 384 y 385 }) : { 386 x, 387 y 388 }; 389 x = _ref3.x; 390 y = _ref3.y; 391 var hasX = offsets.hasOwnProperty("x"); 392 var hasY = offsets.hasOwnProperty("y"); 393 var sideX = left; 394 var sideY = top; 395 var win = window; 396 if (adaptive) { 397 var offsetParent = getOffsetParent(popper2); 398 var heightProp = "clientHeight"; 399 var widthProp = "clientWidth"; 400 if (offsetParent === getWindow(popper2)) { 401 offsetParent = getDocumentElement(popper2); 402 if (getComputedStyle$1(offsetParent).position !== "static" && position === "absolute") { 403 heightProp = "scrollHeight"; 404 widthProp = "scrollWidth"; 405 } 406 } 407 offsetParent = offsetParent; 408 if (placement === top || (placement === left || placement === right) && variation === end) { 409 sideY = bottom; 410 var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : ( 411 // $FlowFixMe[prop-missing] 412 offsetParent[heightProp] 413 ); 414 y -= offsetY - popperRect.height; 415 y *= gpuAcceleration ? 1 : -1; 416 } 417 if (placement === left || (placement === top || placement === bottom) && variation === end) { 418 sideX = right; 419 var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : ( 420 // $FlowFixMe[prop-missing] 421 offsetParent[widthProp] 422 ); 423 x -= offsetX - popperRect.width; 424 x *= gpuAcceleration ? 1 : -1; 425 } 426 } 427 var commonStyles = Object.assign({ 428 position 429 }, adaptive && unsetSides); 430 var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ 431 x, 432 y 433 }) : { 434 x, 435 y 436 }; 437 x = _ref4.x; 438 y = _ref4.y; 439 if (gpuAcceleration) { 440 var _Object$assign; 441 return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? "0" : "", _Object$assign[sideX] = hasX ? "0" : "", _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); 442 } 443 return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : "", _Object$assign2[sideX] = hasX ? x + "px" : "", _Object$assign2.transform = "", _Object$assign2)); 444} 445function computeStyles(_ref5) { 446 var state = _ref5.state, options = _ref5.options; 447 var _options$gpuAccelerat = options.gpuAcceleration, gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, _options$adaptive = options.adaptive, adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; 448 var commonStyles = { 449 placement: getBasePlacement(state.placement), 450 variation: getVariation(state.placement), 451 popper: state.elements.popper, 452 popperRect: state.rects.popper, 453 gpuAcceleration, 454 isFixed: state.options.strategy === "fixed" 455 }; 456 if (state.modifiersData.popperOffsets != null) { 457 state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { 458 offsets: state.modifiersData.popperOffsets, 459 position: state.options.strategy, 460 adaptive, 461 roundOffsets 462 }))); 463 } 464 if (state.modifiersData.arrow != null) { 465 state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { 466 offsets: state.modifiersData.arrow, 467 position: "absolute", 468 adaptive: false, 469 roundOffsets 470 }))); 471 } 472 state.attributes.popper = Object.assign({}, state.attributes.popper, { 473 "data-popper-placement": state.placement 474 }); 475} 476const computeStyles$1 = { 477 name: "computeStyles", 478 enabled: true, 479 phase: "beforeWrite", 480 fn: computeStyles, 481 data: {} 482}; 483var passive = { 484 passive: true 485}; 486function effect(_ref) { 487 var state = _ref.state, instance = _ref.instance, options = _ref.options; 488 var _options$scroll = options.scroll, scroll = _options$scroll === void 0 ? true : _options$scroll, _options$resize = options.resize, resize = _options$resize === void 0 ? true : _options$resize; 489 var window2 = getWindow(state.elements.popper); 490 var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); 491 if (scroll) {
vendor: 1,871 bytes, lines 492-560
492 scrollParents.forEach(function(scrollParent) { 493 scrollParent.addEventListener("scroll", instance.update, passive); 494 }); 495 } 496 if (resize) { 497 window2.addEventListener("resize", instance.update, passive); 498 } 499 return function() { 500 if (scroll) { 501 scrollParents.forEach(function(scrollParent) { 502 scrollParent.removeEventListener("scroll", instance.update, passive); 503 }); 504 } 505 if (resize) { 506 window2.removeEventListener("resize", instance.update, passive); 507 } 508 }; 509} 510const eventListeners = { 511 name: "eventListeners", 512 enabled: true, 513 phase: "write", 514 fn: function fn() { 515 }, 516 effect, 517 data: {} 518}; 519var hash$1 = { 520 left: "right", 521 right: "left", 522 bottom: "top", 523 top: "bottom" 524}; 525function getOppositePlacement(placement) { 526 return placement.replace(/left|right|bottom|top/g, function(matched) { 527 return hash$1[matched]; 528 }); 529} 530var hash = { 531 start: "end", 532 end: "start" 533}; 534function getOppositeVariationPlacement(placement) { 535 return placement.replace(/start|end/g, function(matched) { 536 return hash[matched]; 537 }); 538} 539function getWindowScroll(node) { 540 var win = getWindow(node); 541 var scrollLeft = win.pageXOffset; 542 var scrollTop = win.pageYOffset; 543 return { 544 scrollLeft, 545 scrollTop 546 }; 547} 548function getWindowScrollBarX(element) { 549 return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; 550} 551function getViewportRect(element, strategy) { 552 var win = getWindow(element); 553 var html = getDocumentElement(element); 554 var visualViewport = win.visualViewport; 555 var width = html.clientWidth; 556 var height = html.clientHeight; 557 var x = 0; 558 var y = 0; 559 if (visualViewport) { 560 width = visualViewport.width;
vendor: 1,041 bytes, lines 561-584
561 height = visualViewport.height; 562 var layoutViewport = isLayoutViewport(); 563 if (layoutViewport || !layoutViewport && strategy === "fixed") { 564 x = visualViewport.offsetLeft; 565 y = visualViewport.offsetTop; 566 } 567 } 568 return { 569 width, 570 height, 571 x: x + getWindowScrollBarX(element), 572 y 573 }; 574} 575function getDocumentRect(element) { 576 var _element$ownerDocumen; 577 var html = getDocumentElement(element); 578 var winScroll = getWindowScroll(element); 579 var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; 580 var width = max$1(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); 581 var height = max$1(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); 582 var x = -winScroll.scrollLeft + getWindowScrollBarX(element); 583 var y = -winScroll.scrollTop; 584 if (getComputedStyle$1(body || html).direction === "rtl") {
vendor: 20,735 bytes, lines 585-1052
585 x += max$1(html.clientWidth, body ? body.clientWidth : 0) - width; 586 } 587 return { 588 width, 589 height, 590 x, 591 y 592 }; 593} 594function isScrollParent(element) { 595 var _getComputedStyle = getComputedStyle$1(element), overflow = _getComputedStyle.overflow, overflowX = _getComputedStyle.overflowX, overflowY = _getComputedStyle.overflowY; 596 return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); 597} 598function getScrollParent(node) { 599 if (["html", "body", "#document"].indexOf(getNodeName(node)) >= 0) { 600 return node.ownerDocument.body; 601 } 602 if (isHTMLElement$1(node) && isScrollParent(node)) { 603 return node; 604 } 605 return getScrollParent(getParentNode(node)); 606} 607function listScrollParents(element, list) { 608 var _element$ownerDocumen; 609 if (list === void 0) { 610 list = []; 611 } 612 var scrollParent = getScrollParent(element); 613 var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); 614 var win = getWindow(scrollParent); 615 var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; 616 var updatedList = list.concat(target); 617 return isBody ? updatedList : ( 618 // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here 619 updatedList.concat(listScrollParents(getParentNode(target))) 620 ); 621} 622function rectToClientRect(rect2) { 623 return Object.assign({}, rect2, { 624 left: rect2.x, 625 top: rect2.y, 626 right: rect2.x + rect2.width, 627 bottom: rect2.y + rect2.height 628 }); 629} 630function getInnerBoundingClientRect(element, strategy) { 631 var rect2 = getBoundingClientRect(element, false, strategy === "fixed"); 632 rect2.top = rect2.top + element.clientTop; 633 rect2.left = rect2.left + element.clientLeft; 634 rect2.bottom = rect2.top + element.clientHeight; 635 rect2.right = rect2.left + element.clientWidth; 636 rect2.width = element.clientWidth; 637 rect2.height = element.clientHeight; 638 rect2.x = rect2.left; 639 rect2.y = rect2.top; 640 return rect2; 641} 642function getClientRectFromMixedType(element, clippingParent, strategy) { 643 return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement$1(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element))); 644} 645function getClippingParents(element) { 646 var clippingParents2 = listScrollParents(getParentNode(element)); 647 var canEscapeClipping = ["absolute", "fixed"].indexOf(getComputedStyle$1(element).position) >= 0; 648 var clipperElement = canEscapeClipping && isHTMLElement$1(element) ? getOffsetParent(element) : element; 649 if (!isElement$1(clipperElement)) { 650 return []; 651 } 652 return clippingParents2.filter(function(clippingParent) { 653 return isElement$1(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== "body"; 654 }); 655} 656function getClippingRect(element, boundary, rootBoundary, strategy) { 657 var mainClippingParents = boundary === "clippingParents" ? getClippingParents(element) : [].concat(boundary); 658 var clippingParents2 = [].concat(mainClippingParents, [rootBoundary]); 659 var firstClippingParent = clippingParents2[0]; 660 var clippingRect = clippingParents2.reduce(function(accRect, clippingParent) { 661 var rect2 = getClientRectFromMixedType(element, clippingParent, strategy); 662 accRect.top = max$1(rect2.top, accRect.top); 663 accRect.right = min$1(rect2.right, accRect.right); 664 accRect.bottom = min$1(rect2.bottom, accRect.bottom); 665 accRect.left = max$1(rect2.left, accRect.left); 666 return accRect; 667 }, getClientRectFromMixedType(element, firstClippingParent, strategy)); 668 clippingRect.width = clippingRect.right - clippingRect.left; 669 clippingRect.height = clippingRect.bottom - clippingRect.top; 670 clippingRect.x = clippingRect.left; 671 clippingRect.y = clippingRect.top; 672 return clippingRect; 673} 674function computeOffsets(_ref) { 675 var reference2 = _ref.reference, element = _ref.element, placement = _ref.placement; 676 var basePlacement = placement ? getBasePlacement(placement) : null; 677 var variation = placement ? getVariation(placement) : null; 678 var commonX = reference2.x + reference2.width / 2 - element.width / 2; 679 var commonY = reference2.y + reference2.height / 2 - element.height / 2; 680 var offsets; 681 switch (basePlacement) { 682 case top: 683 offsets = { 684 x: commonX, 685 y: reference2.y - element.height 686 }; 687 break; 688 case bottom: 689 offsets = { 690 x: commonX, 691 y: reference2.y + reference2.height 692 }; 693 break; 694 case right: 695 offsets = { 696 x: reference2.x + reference2.width, 697 y: commonY 698 }; 699 break; 700 case left: 701 offsets = { 702 x: reference2.x - element.width, 703 y: commonY 704 }; 705 break; 706 default: 707 offsets = { 708 x: reference2.x, 709 y: reference2.y 710 }; 711 } 712 var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; 713 if (mainAxis != null) { 714 var len = mainAxis === "y" ? "height" : "width"; 715 switch (variation) { 716 case start: 717 offsets[mainAxis] = offsets[mainAxis] - (reference2[len] / 2 - element[len] / 2); 718 break; 719 case end: 720 offsets[mainAxis] = offsets[mainAxis] + (reference2[len] / 2 - element[len] / 2); 721 break; 722 } 723 } 724 return offsets; 725} 726function detectOverflow(state, options) { 727 if (options === void 0) { 728 options = {}; 729 } 730 var _options = options, _options$placement = _options.placement, placement = _options$placement === void 0 ? state.placement : _options$placement, _options$strategy = _options.strategy, strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, _options$boundary = _options.boundary, boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, _options$rootBoundary = _options.rootBoundary, rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, _options$elementConte = _options.elementContext, elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, _options$altBoundary = _options.altBoundary, altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, _options$padding = _options.padding, padding = _options$padding === void 0 ? 0 : _options$padding; 731 var paddingObject = mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements)); 732 var altContext = elementContext === popper ? reference : popper; 733 var popperRect = state.rects.popper; 734 var element = state.elements[altBoundary ? altContext : elementContext]; 735 var clippingClientRect = getClippingRect(isElement$1(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy); 736 var referenceClientRect = getBoundingClientRect(state.elements.reference); 737 var popperOffsets2 = computeOffsets({ 738 reference: referenceClientRect, 739 element: popperRect, 740 strategy: "absolute", 741 placement 742 }); 743 var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets2)); 744 var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; 745 var overflowOffsets = { 746 top: clippingClientRect.top - elementClientRect.top + paddingObject.top, 747 bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, 748 left: clippingClientRect.left - elementClientRect.left + paddingObject.left, 749 right: elementClientRect.right - clippingClientRect.right + paddingObject.right 750 }; 751 var offsetData = state.modifiersData.offset; 752 if (elementContext === popper && offsetData) { 753 var offset2 = offsetData[placement]; 754 Object.keys(overflowOffsets).forEach(function(key) { 755 var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; 756 var axis = [top, bottom].indexOf(key) >= 0 ? "y" : "x"; 757 overflowOffsets[key] += offset2[axis] * multiply; 758 }); 759 } 760 return overflowOffsets; 761} 762function computeAutoPlacement(state, options) { 763 if (options === void 0) { 764 options = {}; 765 } 766 var _options = options, placement = _options.placement, boundary = _options.boundary, rootBoundary = _options.rootBoundary, padding = _options.padding, flipVariations = _options.flipVariations, _options$allowedAutoP = _options.allowedAutoPlacements, allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; 767 var variation = getVariation(placement); 768 var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function(placement2) { 769 return getVariation(placement2) === variation; 770 }) : basePlacements; 771 var allowedPlacements = placements$1.filter(function(placement2) { 772 return allowedAutoPlacements.indexOf(placement2) >= 0; 773 }); 774 if (allowedPlacements.length === 0) { 775 allowedPlacements = placements$1; 776 } 777 var overflows = allowedPlacements.reduce(function(acc, placement2) { 778 acc[placement2] = detectOverflow(state, { 779 placement: placement2, 780 boundary, 781 rootBoundary, 782 padding 783 })[getBasePlacement(placement2)]; 784 return acc; 785 }, {}); 786 return Object.keys(overflows).sort(function(a, b) { 787 return overflows[a] - overflows[b]; 788 }); 789} 790function getExpandedFallbackPlacements(placement) { 791 if (getBasePlacement(placement) === auto) { 792 return []; 793 } 794 var oppositePlacement = getOppositePlacement(placement); 795 return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; 796} 797function flip(_ref) { 798 var state = _ref.state, options = _ref.options, name = _ref.name; 799 if (state.modifiersData[name]._skip) { 800 return; 801 } 802 var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, specifiedFallbackPlacements = options.fallbackPlacements, padding = options.padding, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, _options$flipVariatio = options.flipVariations, flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, allowedAutoPlacements = options.allowedAutoPlacements; 803 var preferredPlacement = state.options.placement; 804 var basePlacement = getBasePlacement(preferredPlacement); 805 var isBasePlacement = basePlacement === preferredPlacement; 806 var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); 807 var placements2 = [preferredPlacement].concat(fallbackPlacements).reduce(function(acc, placement2) { 808 return acc.concat(getBasePlacement(placement2) === auto ? computeAutoPlacement(state, { 809 placement: placement2, 810 boundary, 811 rootBoundary, 812 padding, 813 flipVariations, 814 allowedAutoPlacements 815 }) : placement2); 816 }, []); 817 var referenceRect = state.rects.reference; 818 var popperRect = state.rects.popper; 819 var checksMap = /* @__PURE__ */ new Map(); 820 var makeFallbackChecks = true; 821 var firstFittingPlacement = placements2[0]; 822 for (var i = 0; i < placements2.length; i++) { 823 var placement = placements2[i]; 824 var _basePlacement = getBasePlacement(placement); 825 var isStartVariation = getVariation(placement) === start; 826 var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; 827 var len = isVertical ? "width" : "height"; 828 var overflow = detectOverflow(state, { 829 placement, 830 boundary, 831 rootBoundary, 832 altBoundary, 833 padding 834 }); 835 var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; 836 if (referenceRect[len] > popperRect[len]) { 837 mainVariationSide = getOppositePlacement(mainVariationSide); 838 } 839 var altVariationSide = getOppositePlacement(mainVariationSide); 840 var checks = []; 841 if (checkMainAxis) { 842 checks.push(overflow[_basePlacement] <= 0); 843 } 844 if (checkAltAxis) { 845 checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); 846 } 847 if (checks.every(function(check) { 848 return check; 849 })) { 850 firstFittingPlacement = placement; 851 makeFallbackChecks = false; 852 break; 853 } 854 checksMap.set(placement, checks); 855 } 856 if (makeFallbackChecks) { 857 var numberOfChecks = flipVariations ? 3 : 1; 858 var _loop = function _loop2(_i2) { 859 var fittingPlacement = placements2.find(function(placement2) { 860 var checks2 = checksMap.get(placement2); 861 if (checks2) { 862 return checks2.slice(0, _i2).every(function(check) { 863 return check; 864 }); 865 } 866 }); 867 if (fittingPlacement) { 868 firstFittingPlacement = fittingPlacement; 869 return "break"; 870 } 871 }; 872 for (var _i = numberOfChecks; _i > 0; _i--) { 873 var _ret = _loop(_i); 874 if (_ret === "break") 875 break; 876 } 877 } 878 if (state.placement !== firstFittingPlacement) { 879 state.modifiersData[name]._skip = true; 880 state.placement = firstFittingPlacement; 881 state.reset = true; 882 } 883} 884const flip$1 = { 885 name: "flip", 886 enabled: true, 887 phase: "main", 888 fn: flip, 889 requiresIfExists: ["offset"], 890 data: { 891 _skip: false 892 } 893}; 894function getSideOffsets(overflow, rect2, preventedOffsets) { 895 if (preventedOffsets === void 0) { 896 preventedOffsets = { 897 x: 0, 898 y: 0 899 }; 900 } 901 return { 902 top: overflow.top - rect2.height - preventedOffsets.y, 903 right: overflow.right - rect2.width + preventedOffsets.x, 904 bottom: overflow.bottom - rect2.height + preventedOffsets.y, 905 left: overflow.left - rect2.width - preventedOffsets.x 906 }; 907} 908function isAnySideFullyClipped(overflow) { 909 return [top, right, bottom, left].some(function(side) { 910 return overflow[side] >= 0; 911 }); 912} 913function hide(_ref) { 914 var state = _ref.state, name = _ref.name; 915 var referenceRect = state.rects.reference; 916 var popperRect = state.rects.popper; 917 var preventedOffsets = state.modifiersData.preventOverflow; 918 var referenceOverflow = detectOverflow(state, { 919 elementContext: "reference" 920 }); 921 var popperAltOverflow = detectOverflow(state, { 922 altBoundary: true 923 }); 924 var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); 925 var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); 926 var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); 927 var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); 928 state.modifiersData[name] = { 929 referenceClippingOffsets, 930 popperEscapeOffsets, 931 isReferenceHidden, 932 hasPopperEscaped 933 }; 934 state.attributes.popper = Object.assign({}, state.attributes.popper, { 935 "data-popper-reference-hidden": isReferenceHidden, 936 "data-popper-escaped": hasPopperEscaped 937 }); 938} 939const hide$1 = { 940 name: "hide", 941 enabled: true, 942 phase: "main", 943 requiresIfExists: ["preventOverflow"], 944 fn: hide 945}; 946function distanceAndSkiddingToXY(placement, rects, offset2) { 947 var basePlacement = getBasePlacement(placement); 948 var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; 949 var _ref = typeof offset2 === "function" ? offset2(Object.assign({}, rects, { 950 placement 951 })) : offset2, skidding = _ref[0], distance = _ref[1]; 952 skidding = skidding || 0; 953 distance = (distance || 0) * invertDistance; 954 return [left, right].indexOf(basePlacement) >= 0 ? { 955 x: distance, 956 y: skidding 957 } : { 958 x: skidding, 959 y: distance 960 }; 961} 962function offset(_ref2) { 963 var state = _ref2.state, options = _ref2.options, name = _ref2.name; 964 var _options$offset = options.offset, offset2 = _options$offset === void 0 ? [0, 0] : _options$offset; 965 var data = placements.reduce(function(acc, placement) { 966 acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset2); 967 return acc; 968 }, {}); 969 var _data$state$placement = data[state.placement], x = _data$state$placement.x, y = _data$state$placement.y; 970 if (state.modifiersData.popperOffsets != null) { 971 state.modifiersData.popperOffsets.x += x; 972 state.modifiersData.popperOffsets.y += y; 973 } 974 state.modifiersData[name] = data; 975} 976const offset$1 = { 977 name: "offset", 978 enabled: true, 979 phase: "main", 980 requires: ["popperOffsets"], 981 fn: offset 982}; 983function popperOffsets(_ref) { 984 var state = _ref.state, name = _ref.name; 985 state.modifiersData[name] = computeOffsets({ 986 reference: state.rects.reference, 987 element: state.rects.popper, 988 strategy: "absolute", 989 placement: state.placement 990 }); 991} 992const popperOffsets$1 = { 993 name: "popperOffsets", 994 enabled: true, 995 phase: "read", 996 fn: popperOffsets, 997 data: {} 998}; 999function getAltAxis(axis) { 1000 return axis === "x" ? "y" : "x"; 1001} 1002function preventOverflow(_ref) { 1003 var state = _ref.state, options = _ref.options, name = _ref.name; 1004 var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, padding = options.padding, _options$tether = options.tether, tether = _options$tether === void 0 ? true : _options$tether, _options$tetherOffset = options.tetherOffset, tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; 1005 var overflow = detectOverflow(state, { 1006 boundary, 1007 rootBoundary, 1008 padding, 1009 altBoundary 1010 }); 1011 var basePlacement = getBasePlacement(state.placement); 1012 var variation = getVariation(state.placement); 1013 var isBasePlacement = !variation; 1014 var mainAxis = getMainAxisFromPlacement(basePlacement); 1015 var altAxis = getAltAxis(mainAxis); 1016 var popperOffsets2 = state.modifiersData.popperOffsets; 1017 var referenceRect = state.rects.reference; 1018 var popperRect = state.rects.popper; 1019 var tetherOffsetValue = typeof tetherOffset === "function" ? tetherOffset(Object.assign({}, state.rects, { 1020 placement: state.placement 1021 })) : tetherOffset; 1022 var normalizedTetherOffsetValue = typeof tetherOffsetValue === "number" ? { 1023 mainAxis: tetherOffsetValue, 1024 altAxis: tetherOffsetValue 1025 } : Object.assign({ 1026 mainAxis: 0, 1027 altAxis: 0 1028 }, tetherOffsetValue); 1029 var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; 1030 var data = { 1031 x: 0, 1032 y: 0 1033 }; 1034 if (!popperOffsets2) { 1035 return; 1036 } 1037 if (checkMainAxis) { 1038 var _offsetModifierState$; 1039 var mainSide = mainAxis === "y" ? top : left; 1040 var altSide = mainAxis === "y" ? bottom : right; 1041 var len = mainAxis === "y" ? "height" : "width"; 1042 var offset2 = popperOffsets2[mainAxis]; 1043 var min2 = offset2 + overflow[mainSide]; 1044 var max2 = offset2 - overflow[altSide]; 1045 var additive = tether ? -popperRect[len] / 2 : 0; 1046 var minLen = variation === start ? referenceRect[len] : popperRect[len]; 1047 var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; 1048 var arrowElement = state.elements.arrow; 1049 var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { 1050 width: 0, 1051 height: 0 1052 };
vendor: 5,088 bytes, lines 1053-1151
1053 var arrowPaddingObject = state.modifiersData["arrow#persistent"] ? state.modifiersData["arrow#persistent"].padding : getFreshSideObject(); 1054 var arrowPaddingMin = arrowPaddingObject[mainSide]; 1055 var arrowPaddingMax = arrowPaddingObject[altSide]; 1056 var arrowLen = within(0, referenceRect[len], arrowRect[len]); 1057 var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; 1058 var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; 1059 var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); 1060 var clientOffset = arrowOffsetParent ? mainAxis === "y" ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; 1061 var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; 1062 var tetherMin = offset2 + minOffset - offsetModifierValue - clientOffset; 1063 var tetherMax = offset2 + maxOffset - offsetModifierValue; 1064 var preventedOffset = within(tether ? min$1(min2, tetherMin) : min2, offset2, tether ? max$1(max2, tetherMax) : max2); 1065 popperOffsets2[mainAxis] = preventedOffset; 1066 data[mainAxis] = preventedOffset - offset2; 1067 } 1068 if (checkAltAxis) { 1069 var _offsetModifierState$2; 1070 var _mainSide = mainAxis === "x" ? top : left; 1071 var _altSide = mainAxis === "x" ? bottom : right; 1072 var _offset = popperOffsets2[altAxis]; 1073 var _len = altAxis === "y" ? "height" : "width"; 1074 var _min = _offset + overflow[_mainSide]; 1075 var _max = _offset - overflow[_altSide]; 1076 var isOriginSide = [top, left].indexOf(basePlacement) !== -1; 1077 var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; 1078 var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; 1079 var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; 1080 var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); 1081 popperOffsets2[altAxis] = _preventedOffset; 1082 data[altAxis] = _preventedOffset - _offset; 1083 } 1084 state.modifiersData[name] = data; 1085} 1086const preventOverflow$1 = { 1087 name: "preventOverflow", 1088 enabled: true, 1089 phase: "main", 1090 fn: preventOverflow, 1091 requiresIfExists: ["offset"] 1092}; 1093function getHTMLElementScroll(element) { 1094 return { 1095 scrollLeft: element.scrollLeft, 1096 scrollTop: element.scrollTop 1097 }; 1098} 1099function getNodeScroll(node) { 1100 if (node === getWindow(node) || !isHTMLElement$1(node)) { 1101 return getWindowScroll(node); 1102 } else { 1103 return getHTMLElementScroll(node); 1104 } 1105} 1106function isElementScaled(element) { 1107 var rect2 = element.getBoundingClientRect(); 1108 var scaleX = round(rect2.width) / element.offsetWidth || 1; 1109 var scaleY = round(rect2.height) / element.offsetHeight || 1; 1110 return scaleX !== 1 || scaleY !== 1; 1111} 1112function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { 1113 if (isFixed === void 0) { 1114 isFixed = false; 1115 } 1116 var isOffsetParentAnElement = isHTMLElement$1(offsetParent); 1117 var offsetParentIsScaled = isHTMLElement$1(offsetParent) && isElementScaled(offsetParent); 1118 var documentElement = getDocumentElement(offsetParent); 1119 var rect2 = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed); 1120 var scroll = { 1121 scrollLeft: 0, 1122 scrollTop: 0 1123 }; 1124 var offsets = { 1125 x: 0, 1126 y: 0 1127 }; 1128 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { 1129 if (getNodeName(offsetParent) !== "body" || // https://github.com/popperjs/popper-core/issues/1078 1130 isScrollParent(documentElement)) { 1131 scroll = getNodeScroll(offsetParent); 1132 } 1133 if (isHTMLElement$1(offsetParent)) { 1134 offsets = getBoundingClientRect(offsetParent, true); 1135 offsets.x += offsetParent.clientLeft; 1136 offsets.y += offsetParent.clientTop; 1137 } else if (documentElement) { 1138 offsets.x = getWindowScrollBarX(documentElement); 1139 } 1140 } 1141 return { 1142 x: rect2.left + scroll.scrollLeft - offsets.x, 1143 y: rect2.top + scroll.scrollTop - offsets.y, 1144 width: rect2.width, 1145 height: rect2.height 1146 }; 1147} 1148function order(modifiers) { 1149 var map = /* @__PURE__ */ new Map(); 1150 var visited = /* @__PURE__ */ new Set(); 1151 var result = [];
vendor: 4,217 bytes, lines 1152-1260
1152 modifiers.forEach(function(modifier) { 1153 map.set(modifier.name, modifier); 1154 }); 1155 function sort(modifier) { 1156 visited.add(modifier.name); 1157 var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); 1158 requires.forEach(function(dep) { 1159 if (!visited.has(dep)) { 1160 var depModifier = map.get(dep); 1161 if (depModifier) { 1162 sort(depModifier); 1163 } 1164 } 1165 }); 1166 result.push(modifier); 1167 } 1168 modifiers.forEach(function(modifier) { 1169 if (!visited.has(modifier.name)) { 1170 sort(modifier); 1171 } 1172 }); 1173 return result; 1174} 1175function orderModifiers(modifiers) { 1176 var orderedModifiers = order(modifiers); 1177 return modifierPhases.reduce(function(acc, phase) { 1178 return acc.concat(orderedModifiers.filter(function(modifier) { 1179 return modifier.phase === phase; 1180 })); 1181 }, []); 1182} 1183function debounce(fn2) { 1184 var pending; 1185 return function() { 1186 if (!pending) { 1187 pending = new Promise(function(resolve) { 1188 Promise.resolve().then(function() { 1189 pending = void 0; 1190 resolve(fn2()); 1191 }); 1192 }); 1193 } 1194 return pending; 1195 }; 1196} 1197function mergeByName(modifiers) { 1198 var merged = modifiers.reduce(function(merged2, current) { 1199 var existing = merged2[current.name]; 1200 merged2[current.name] = existing ? Object.assign({}, existing, current, { 1201 options: Object.assign({}, existing.options, current.options), 1202 data: Object.assign({}, existing.data, current.data) 1203 }) : current; 1204 return merged2; 1205 }, {}); 1206 return Object.keys(merged).map(function(key) { 1207 return merged[key]; 1208 }); 1209} 1210var DEFAULT_OPTIONS = { 1211 placement: "bottom", 1212 modifiers: [], 1213 strategy: "absolute" 1214}; 1215function areValidElements() { 1216 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 1217 args[_key] = arguments[_key]; 1218 } 1219 return !args.some(function(element) { 1220 return !(element && typeof element.getBoundingClientRect === "function"); 1221 }); 1222} 1223function popperGenerator(generatorOptions) { 1224 if (generatorOptions === void 0) { 1225 generatorOptions = {}; 1226 } 1227 var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers2 = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; 1228 return function createPopper2(reference2, popper2, options) { 1229 if (options === void 0) { 1230 options = defaultOptions; 1231 } 1232 var state = { 1233 placement: "bottom", 1234 orderedModifiers: [], 1235 options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), 1236 modifiersData: {}, 1237 elements: { 1238 reference: reference2, 1239 popper: popper2 1240 }, 1241 attributes: {}, 1242 styles: {} 1243 }; 1244 var effectCleanupFns = []; 1245 var isDestroyed = false; 1246 var instance = { 1247 state, 1248 setOptions: function setOptions(setOptionsAction) { 1249 var options2 = typeof setOptionsAction === "function" ? setOptionsAction(state.options) : setOptionsAction; 1250 cleanupModifierEffects(); 1251 state.options = Object.assign({}, defaultOptions, state.options, options2); 1252 state.scrollParents = { 1253 reference: isElement$1(reference2) ? listScrollParents(reference2) : reference2.contextElement ? listScrollParents(reference2.contextElement) : [], 1254 popper: listScrollParents(popper2) 1255 }; 1256 var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers2, state.options.modifiers))); 1257 state.orderedModifiers = orderedModifiers.filter(function(m) { 1258 return m.enabled; 1259 }); 1260 runModifierEffects();
vendor: 7,726 bytes, lines 1261-1465
1261 return instance.update(); 1262 }, 1263 // Sync update â it will always be executed, even if not necessary. This 1264 // is useful for low frequency updates where sync behavior simplifies the 1265 // logic. 1266 // For high frequency updates (e.g. `resize` and `scroll` events), always 1267 // prefer the async Popper#update method 1268 forceUpdate: function forceUpdate() { 1269 if (isDestroyed) { 1270 return; 1271 } 1272 var _state$elements = state.elements, reference3 = _state$elements.reference, popper3 = _state$elements.popper; 1273 if (!areValidElements(reference3, popper3)) { 1274 return; 1275 } 1276 state.rects = { 1277 reference: getCompositeRect(reference3, getOffsetParent(popper3), state.options.strategy === "fixed"), 1278 popper: getLayoutRect(popper3) 1279 }; 1280 state.reset = false; 1281 state.placement = state.options.placement; 1282 state.orderedModifiers.forEach(function(modifier) { 1283 return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); 1284 }); 1285 for (var index = 0; index < state.orderedModifiers.length; index++) { 1286 if (state.reset === true) { 1287 state.reset = false; 1288 index = -1; 1289 continue; 1290 } 1291 var _state$orderedModifie = state.orderedModifiers[index], fn2 = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name; 1292 if (typeof fn2 === "function") { 1293 state = fn2({ 1294 state, 1295 options: _options, 1296 name, 1297 instance 1298 }) || state; 1299 } 1300 } 1301 }, 1302 // Async and optimistically optimized update â it will not be executed if 1303 // not necessary (debounced to run at most once-per-tick) 1304 update: debounce(function() { 1305 return new Promise(function(resolve) { 1306 instance.forceUpdate(); 1307 resolve(state); 1308 }); 1309 }), 1310 destroy: function destroy() { 1311 cleanupModifierEffects(); 1312 isDestroyed = true; 1313 } 1314 }; 1315 if (!areValidElements(reference2, popper2)) { 1316 return instance; 1317 } 1318 instance.setOptions(options).then(function(state2) { 1319 if (!isDestroyed && options.onFirstUpdate) { 1320 options.onFirstUpdate(state2); 1321 } 1322 }); 1323 function runModifierEffects() { 1324 state.orderedModifiers.forEach(function(_ref3) { 1325 var name = _ref3.name, _ref3$options = _ref3.options, options2 = _ref3$options === void 0 ? {} : _ref3$options, effect2 = _ref3.effect; 1326 if (typeof effect2 === "function") { 1327 var cleanupFn = effect2({ 1328 state, 1329 name, 1330 instance, 1331 options: options2 1332 }); 1333 var noopFn = function noopFn2() { 1334 }; 1335 effectCleanupFns.push(cleanupFn || noopFn); 1336 } 1337 }); 1338 } 1339 function cleanupModifierEffects() { 1340 effectCleanupFns.forEach(function(fn2) { 1341 return fn2(); 1342 }); 1343 effectCleanupFns = []; 1344 } 1345 return instance; 1346 }; 1347} 1348var createPopper$2 = /* @__PURE__ */ popperGenerator(); 1349var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1]; 1350var createPopper$1 = /* @__PURE__ */ popperGenerator({ 1351 defaultModifiers: defaultModifiers$1 1352}); 1353var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1]; 1354var createPopper = /* @__PURE__ */ popperGenerator({ 1355 defaultModifiers 1356}); 1357const Popper = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ 1358 __proto__: null, 1359 afterMain, 1360 afterRead, 1361 afterWrite, 1362 applyStyles: applyStyles$1, 1363 arrow: arrow$1, 1364 auto, 1365 basePlacements, 1366 beforeMain, 1367 beforeRead, 1368 beforeWrite, 1369 bottom, 1370 clippingParents, 1371 computeStyles: computeStyles$1, 1372 createPopper, 1373 createPopperBase: createPopper$2, 1374 createPopperLite: createPopper$1, 1375 detectOverflow, 1376 end, 1377 eventListeners, 1378 flip: flip$1, 1379 hide: hide$1, 1380 left, 1381 main, 1382 modifierPhases, 1383 offset: offset$1, 1384 placements, 1385 popper, 1386 popperGenerator, 1387 popperOffsets: popperOffsets$1, 1388 preventOverflow: preventOverflow$1, 1389 read, 1390 reference, 1391 right, 1392 start, 1393 top, 1394 variationPlacements, 1395 viewport, 1396 write 1397}, Symbol.toStringTag, { value: "Module" })); 1398/*! 1399 * Bootstrap v5.2.3 (https://getbootstrap.com/) 1400 * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 1401 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1402 */ 1403const MAX_UID = 1e6; 1404const MILLISECONDS_MULTIPLIER = 1e3; 1405const TRANSITION_END = "transitionend"; 1406const toType = (object) => { 1407 if (object === null || object === void 0) { 1408 return `${object}`; 1409 } 1410 return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase(); 1411}; 1412const getUID = (prefix) => { 1413 do { 1414 prefix += Math.floor(Math.random() * MAX_UID); 1415 } while (document.getElementById(prefix)); 1416 return prefix; 1417}; 1418const getSelector = (element) => { 1419 let selector = element.getAttribute("data-bs-target"); 1420 if (!selector || selector === "#") { 1421 let hrefAttribute = element.getAttribute("href"); 1422 if (!hrefAttribute || !hrefAttribute.includes("#") && !hrefAttribute.startsWith(".")) { 1423 return null; 1424 } 1425 if (hrefAttribute.includes("#") && !hrefAttribute.startsWith("#")) { 1426 hrefAttribute = `#${hrefAttribute.split("#")[1]}`; 1427 } 1428 selector = hrefAttribute && hrefAttribute !== "#" ? hrefAttribute.trim() : null; 1429 } 1430 return selector; 1431}; 1432const getSelectorFromElement = (element) => { 1433 const selector = getSelector(element); 1434 if (selector) { 1435 return document.querySelector(selector) ? selector : null; 1436 } 1437 return null; 1438}; 1439const getElementFromSelector = (element) => { 1440 const selector = getSelector(element); 1441 return selector ? document.querySelector(selector) : null; 1442}; 1443const getTransitionDurationFromElement = (element) => { 1444 if (!element) { 1445 return 0; 1446 } 1447 let { 1448 transitionDuration, 1449 transitionDelay 1450 } = window.getComputedStyle(element); 1451 const floatTransitionDuration = Number.parseFloat(transitionDuration); 1452 const floatTransitionDelay = Number.parseFloat(transitionDelay); 1453 if (!floatTransitionDuration && !floatTransitionDelay) { 1454 return 0; 1455 } 1456 transitionDuration = transitionDuration.split(",")[0]; 1457 transitionDelay = transitionDelay.split(",")[0]; 1458 return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 1459}; 1460const triggerTransitionEnd = (element) => { 1461 element.dispatchEvent(new Event(TRANSITION_END)); 1462}; 1463const isElement = (object) => { 1464 if (!object || typeof object !== "object") { 1465 return false;
vendor: 5,268 bytes, lines 1466-1622
1466 } 1467 if (typeof object.jquery !== "undefined") { 1468 object = object[0]; 1469 } 1470 return typeof object.nodeType !== "undefined"; 1471}; 1472const getElement = (object) => { 1473 if (isElement(object)) { 1474 return object.jquery ? object[0] : object; 1475 } 1476 if (typeof object === "string" && object.length > 0) { 1477 return document.querySelector(object); 1478 } 1479 return null; 1480}; 1481const isVisible = (element) => { 1482 if (!isElement(element) || element.getClientRects().length === 0) { 1483 return false; 1484 } 1485 const elementIsVisible = getComputedStyle(element).getPropertyValue("visibility") === "visible"; 1486 const closedDetails = element.closest("details:not([open])"); 1487 if (!closedDetails) { 1488 return elementIsVisible; 1489 } 1490 if (closedDetails !== element) { 1491 const summary = element.closest("summary"); 1492 if (summary && summary.parentNode !== closedDetails) { 1493 return false; 1494 } 1495 if (summary === null) { 1496 return false; 1497 } 1498 } 1499 return elementIsVisible; 1500}; 1501const isDisabled = (element) => { 1502 if (!element || element.nodeType !== Node.ELEMENT_NODE) { 1503 return true; 1504 } 1505 if (element.classList.contains("disabled")) { 1506 return true; 1507 } 1508 if (typeof element.disabled !== "undefined") { 1509 return element.disabled; 1510 } 1511 return element.hasAttribute("disabled") && element.getAttribute("disabled") !== "false"; 1512}; 1513const findShadowRoot = (element) => { 1514 if (!document.documentElement.attachShadow) { 1515 return null; 1516 } 1517 if (typeof element.getRootNode === "function") { 1518 const root = element.getRootNode(); 1519 return root instanceof ShadowRoot ? root : null; 1520 } 1521 if (element instanceof ShadowRoot) { 1522 return element; 1523 } 1524 if (!element.parentNode) { 1525 return null; 1526 } 1527 return findShadowRoot(element.parentNode); 1528}; 1529const noop$1 = () => { 1530}; 1531const reflow = (element) => { 1532 element.offsetHeight; 1533}; 1534const getjQuery = () => { 1535 if (window.jQuery && !document.body.hasAttribute("data-bs-no-jquery")) { 1536 return window.jQuery; 1537 } 1538 return null; 1539}; 1540const DOMContentLoadedCallbacks = []; 1541const onDOMContentLoaded = (callback) => { 1542 if (document.readyState === "loading") { 1543 if (!DOMContentLoadedCallbacks.length) { 1544 document.addEventListener("DOMContentLoaded", () => { 1545 for (const callback2 of DOMContentLoadedCallbacks) { 1546 callback2(); 1547 } 1548 }); 1549 } 1550 DOMContentLoadedCallbacks.push(callback); 1551 } else { 1552 callback(); 1553 } 1554}; 1555const isRTL = () => document.documentElement.dir === "rtl"; 1556const defineJQueryPlugin = (plugin) => { 1557 onDOMContentLoaded(() => { 1558 const $ = getjQuery(); 1559 if ($) { 1560 const name = plugin.NAME; 1561 const JQUERY_NO_CONFLICT = $.fn[name]; 1562 $.fn[name] = plugin.jQueryInterface; 1563 $.fn[name].Constructor = plugin; 1564 $.fn[name].noConflict = () => { 1565 $.fn[name] = JQUERY_NO_CONFLICT; 1566 return plugin.jQueryInterface; 1567 }; 1568 } 1569 }); 1570}; 1571const execute = (callback) => { 1572 if (typeof callback === "function") { 1573 callback(); 1574 } 1575}; 1576const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { 1577 if (!waitForTransition) { 1578 execute(callback); 1579 return; 1580 } 1581 const durationPadding = 5; 1582 const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding; 1583 let called = false; 1584 const handler = ({ 1585 target 1586 }) => { 1587 if (target !== transitionElement) { 1588 return; 1589 } 1590 called = true; 1591 transitionElement.removeEventListener(TRANSITION_END, handler); 1592 execute(callback); 1593 }; 1594 transitionElement.addEventListener(TRANSITION_END, handler); 1595 setTimeout(() => { 1596 if (!called) { 1597 triggerTransitionEnd(transitionElement); 1598 } 1599 }, emulatedDuration); 1600}; 1601const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { 1602 const listLength = list.length; 1603 let index = list.indexOf(activeElement); 1604 if (index === -1) { 1605 return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]; 1606 } 1607 index += shouldGetNext ? 1 : -1; 1608 if (isCycleAllowed) { 1609 index = (index + listLength) % listLength; 1610 } 1611 return list[Math.max(0, Math.min(index, listLength - 1))]; 1612}; 1613const namespaceRegex = /[^.]*(?=\..*)\.|.*/; 1614const stripNameRegex = /\..*/; 1615const stripUidRegex = /::\d+$/; 1616const eventRegistry = {}; 1617let uidEvent = 1; 1618const customEvents = { 1619 mouseenter: "mouseover", 1620 mouseleave: "mouseout" 1621}; 1622const nativeEvents = /* @__PURE__ */ new Set(["click", "dblclick", "mouseup", "mousedown", "contextmenu", "mousewheel", "DOMMouseScroll", "mouseover", "mouseout", "mousemove", "selectstart", "selectend", "keydown", "keypress", "keyup", "orientationchange", "touchstart", "touchmove", "touchend", "touchcancel", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointercancel", "gesturestart", "gesturechange", "gestureend", "focus", "blur", "change", "reset", "select", "submit", "focu
vendor: 5,497 bytes, lines 1622-1751
1622sin", "focusout", "load", "unload", "beforeunload", "resize", "move", "DOMContentLoaded", "readystatechange", "error", "abort", "scroll"]); 1623function makeEventUid(element, uid) { 1624 return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; 1625} 1626function getElementEvents(element) { 1627 const uid = makeEventUid(element); 1628 element.uidEvent = uid; 1629 eventRegistry[uid] = eventRegistry[uid] || {}; 1630 return eventRegistry[uid]; 1631} 1632function bootstrapHandler(element, fn2) { 1633 return function handler(event) { 1634 hydrateObj(event, { 1635 delegateTarget: element 1636 }); 1637 if (handler.oneOff) { 1638 EventHandler.off(element, event.type, fn2); 1639 } 1640 return fn2.apply(element, [event]); 1641 }; 1642} 1643function bootstrapDelegationHandler(element, selector, fn2) { 1644 return function handler(event) { 1645 const domElements = element.querySelectorAll(selector); 1646 for (let { 1647 target 1648 } = event; target && target !== this; target = target.parentNode) { 1649 for (const domElement of domElements) { 1650 if (domElement !== target) { 1651 continue; 1652 } 1653 hydrateObj(event, { 1654 delegateTarget: target 1655 }); 1656 if (handler.oneOff) { 1657 EventHandler.off(element, event.type, selector, fn2); 1658 } 1659 return fn2.apply(target, [event]); 1660 } 1661 } 1662 }; 1663} 1664function findHandler(events, callable, delegationSelector = null) { 1665 return Object.values(events).find((event) => event.callable === callable && event.delegationSelector === delegationSelector); 1666} 1667function normalizeParameters(originalTypeEvent, handler, delegationFunction) { 1668 const isDelegated = typeof handler === "string"; 1669 const callable = isDelegated ? delegationFunction : handler || delegationFunction; 1670 let typeEvent = getTypeEvent(originalTypeEvent); 1671 if (!nativeEvents.has(typeEvent)) { 1672 typeEvent = originalTypeEvent; 1673 } 1674 return [isDelegated, callable, typeEvent]; 1675} 1676function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) { 1677 if (typeof originalTypeEvent !== "string" || !element) { 1678 return; 1679 } 1680 let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); 1681 if (originalTypeEvent in customEvents) { 1682 const wrapFunction = (fn3) => { 1683 return function(event) { 1684 if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) { 1685 return fn3.call(this, event); 1686 } 1687 }; 1688 }; 1689 callable = wrapFunction(callable); 1690 } 1691 const events = getElementEvents(element); 1692 const handlers = events[typeEvent] || (events[typeEvent] = {}); 1693 const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null); 1694 if (previousFunction) { 1695 previousFunction.oneOff = previousFunction.oneOff && oneOff; 1696 return; 1697 } 1698 const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, "")); 1699 const fn2 = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable); 1700 fn2.delegationSelector = isDelegated ? handler : null; 1701 fn2.callable = callable; 1702 fn2.oneOff = oneOff; 1703 fn2.uidEvent = uid; 1704 handlers[uid] = fn2; 1705 element.addEventListener(typeEvent, fn2, isDelegated); 1706} 1707function removeHandler(element, events, typeEvent, handler, delegationSelector) { 1708 const fn2 = findHandler(events[typeEvent], handler, delegationSelector); 1709 if (!fn2) { 1710 return; 1711 } 1712 element.removeEventListener(typeEvent, fn2, Boolean(delegationSelector)); 1713 delete events[typeEvent][fn2.uidEvent]; 1714} 1715function removeNamespacedHandlers(element, events, typeEvent, namespace) { 1716 const storeElementEvent = events[typeEvent] || {}; 1717 for (const handlerKey of Object.keys(storeElementEvent)) { 1718 if (handlerKey.includes(namespace)) { 1719 const event = storeElementEvent[handlerKey]; 1720 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 1721 } 1722 } 1723} 1724function getTypeEvent(event) { 1725 event = event.replace(stripNameRegex, ""); 1726 return customEvents[event] || event; 1727} 1728const EventHandler = { 1729 on(element, event, handler, delegationFunction) { 1730 addHandler(element, event, handler, delegationFunction, false); 1731 }, 1732 one(element, event, handler, delegationFunction) { 1733 addHandler(element, event, handler, delegationFunction, true); 1734 }, 1735 off(element, originalTypeEvent, handler, delegationFunction) { 1736 if (typeof originalTypeEvent !== "string" || !element) { 1737 return; 1738 } 1739 const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); 1740 const inNamespace = typeEvent !== originalTypeEvent; 1741 const events = getElementEvents(element); 1742 const storeElementEvent = events[typeEvent] || {}; 1743 const isNamespace = originalTypeEvent.startsWith("."); 1744 if (typeof callable !== "undefined") { 1745 if (!Object.keys(storeElementEvent).length) { 1746 return; 1747 } 1748 removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null); 1749 return; 1750 } 1751 if (isNamespace) {
1752 for (const elementEvent of Object.keys(events)) { 1753 removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); 1754 } 1755 } 1756 for (const keyHandlers of Object.keys(storeElementEvent)) { 1757 const handlerKey = keyHandlers.replace(stripUidRegex, ""); 1758 if (!inNamespace || originalTypeEvent.includes(handlerKey)) { 1759 const event = storeElementEvent[keyHandlers]; 1760 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 1761 } 1762 } 1763 }, 1764 trigger(element, event, args) { 1765 if (typeof event !== "string" || !element) { 1766 return null; 1767 } 1768 const $ = getjQuery(); 1769 const typeEvent = getTypeEvent(event); 1770 const inNamespace = event !== typeEvent; 1771 let jQueryEvent = null; 1772 let bubbles = true; 1773 let nativeDispatch = true; 1774 let defaultPrevented = false; 1775 if (inNamespace && $) { 1776 jQueryEvent = $.Event(event, args); 1777 $(element).trigger(jQueryEvent); 1778 bubbles = !jQueryEvent.isPropagationStopped(); 1779 nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); 1780 defaultPrevented = jQueryEvent.isDefaultPrevented(); 1781 } 1782 let evt = new Event(event, { 1783 bubbles, 1784 cancelable: true 1785 }); 1786 evt = hydrateObj(evt, args); 1787 if (defaultPrevented) { 1788 evt.preventDefault(); 1789 } 1790 if (nativeDispatch) { 1791 element.dispatchEvent(evt); 1792 } 1793 if (evt.defaultPrevented && jQueryEvent) { 1794 jQueryEvent.preventDefault(); 1795 } 1796 return evt; 1797 } 1798}; 1799function hydrateObj(obj, meta) { 1800 for (const [key, value] of Object.entries(meta || {})) { 1801 try { 1802 obj[key] = value; 1803 } catch (_unused) { 1804 Object.defineProperty(obj, key, { 1805 configurable: true, 1806 get() { 1807 return value; 1808 } 1809 }); 1810 } 1811 } 1812 return obj; 1813} 1814const elementMap = /* @__PURE__ */ new Map(); 1815const Data = { 1816 set(element, key, instance) { 1817 if (!elementMap.has(element)) { 1818 elementMap.set(element, /* @__PURE__ */ new Map()); 1819 } 1820 const instanceMap = elementMap.get(element); 1821 if (!instanceMap.has(key) && instanceMap.size !== 0) { 1822 console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); 1823 return; 1824 } 1825 instanceMap.set(key, instance); 1826 }, 1827 get(element, key) { 1828 if (elementMap.has(element)) { 1829 return elementMap.get(element).get(key) || null; 1830 } 1831 return null; 1832 }, 1833 remove(element, key) { 1834 if (!elementMap.has(element)) { 1835 return; 1836 } 1837 const instanceMap = elementMap.get(element); 1838 instanceMap.delete(key); 1839 if (instanceMap.size === 0) { 1840 elementMap.delete(element); 1841 } 1842 } 1843}; 1844function normalizeData(value) { 1845 if (value === "true") { 1846 return true; 1847 } 1848 if (value === "false") { 1849 return false; 1850 } 1851 if (value === Number(value).toString()) { 1852 return Number(value); 1853 } 1854 if (value === "" || value === "null") { 1855 return null; 1856 } 1857 if (typeof value !== "string") { 1858 return value; 1859 } 1860 try { 1861 return JSON.parse(decodeURIComponent(value)); 1862 } catch (_unused) { 1863 return value; 1864 } 1865} 1866function normalizeDataKey(key) { 1867 return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`); 1868} 1869const Manipulator = { 1870 setDataAttribute(element, key, value) { 1871 element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); 1872 }, 1873 removeDataAttribute(element, key) { 1874 element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); 1875 }, 1876 getDataAttributes(element) { 1877 if (!element) { 1878 return {}; 1879 } 1880 const attributes = {}; 1881 const bsKeys = Object.keys(element.dataset).filter((key) => key.startsWith("bs") && !key.startsWith("bsConfig")); 1882 for (const key of bsKeys) { 1883 let pureKey = key.replace(/^bs/, ""); 1884 pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); 1885 attributes[pureKey] = normalizeData(element.dataset[key]); 1886 } 1887 return attributes; 1888 }, 1889 getDataAttribute(element, key) { 1890 return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); 1891 } 1892}; 1893class Config { 1894 // Getters 1895 static get Default() { 1896 return {}; 1897 } 1898 static get DefaultType() { 1899 return {}; 1900 } 1901 static get NAME() { 1902 throw new Error('You have to implement the static method "NAME", for each component!'); 1903 } 1904 _getConfig(config) { 1905 config = this._mergeConfigObj(config); 1906 config = this._configAfterMerge(config); 1907 this._typeCheckConfig(config); 1908 return config; 1909 } 1910 _configAfterMerge(config) { 1911 return config; 1912 } 1913 _mergeConfigObj(config, element) { 1914 const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, "config") : {}; 1915 return { 1916 ...this.constructor.Default, 1917 ...typeof jsonConfig === "object" ? jsonConfig : {}, 1918 ...isElement(element) ? Manipulator.getDataAttributes(element) : {}, 1919 ...typeof config === "object" ? config : {} 1920 }; 1921 } 1922 _typeCheckConfig(config, configTypes = this.constructor.DefaultType) { 1923 for (const property of Object.keys(configTypes)) { 1924 const expectedTypes = configTypes[property]; 1925 const value = config[property]; 1926 const valueType = isElement(value) ? "element" : toType(value); 1927 if (!new RegExp(expectedTypes).test(valueType)) { 1928 throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`); 1929 } 1930 } 1931 } 1932} 1933const VERSION = "5.2.3"; 1934class BaseComponent extends Config { 1935 constructor(element, config) { 1936 super(); 1937 element = getElement(element); 1938 if (!element) { 1939 return; 1940 } 1941 this._element = element; 1942 this._config = this._getConfig(config); 1943 Data.set(this._element, this.constructor.DATA_KEY, this); 1944 } 1945 // Public 1946 dispose() { 1947 Data.remove(this._element, this.constructor.DATA_KEY); 1948 EventHandler.off(this._element, this.constructor.EVENT_KEY);
vendor: 48,227 bytes, lines 1949-3281
1949 for (const propertyName of Object.getOwnPropertyNames(this)) { 1950 this[propertyName] = null; 1951 } 1952 } 1953 _queueCallback(callback, element, isAnimated = true) { 1954 executeAfterTransition(callback, element, isAnimated); 1955 } 1956 _getConfig(config) { 1957 config = this._mergeConfigObj(config, this._element); 1958 config = this._configAfterMerge(config); 1959 this._typeCheckConfig(config); 1960 return config; 1961 } 1962 // Static 1963 static getInstance(element) { 1964 return Data.get(getElement(element), this.DATA_KEY); 1965 } 1966 static getOrCreateInstance(element, config = {}) { 1967 return this.getInstance(element) || new this(element, typeof config === "object" ? config : null); 1968 } 1969 static get VERSION() { 1970 return VERSION; 1971 } 1972 static get DATA_KEY() { 1973 return `bs.${this.NAME}`; 1974 } 1975 static get EVENT_KEY() { 1976 return `.${this.DATA_KEY}`; 1977 } 1978 static eventName(name) { 1979 return `${name}${this.EVENT_KEY}`; 1980 } 1981} 1982const enableDismissTrigger = (component, method = "hide") => { 1983 const clickEvent = `click.dismiss${component.EVENT_KEY}`; 1984 const name = component.NAME; 1985 EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function(event) { 1986 if (["A", "AREA"].includes(this.tagName)) { 1987 event.preventDefault(); 1988 } 1989 if (isDisabled(this)) { 1990 return; 1991 } 1992 const target = getElementFromSelector(this) || this.closest(`.${name}`); 1993 const instance = component.getOrCreateInstance(target); 1994 instance[method](); 1995 }); 1996}; 1997const NAME$f = "alert"; 1998const DATA_KEY$a = "bs.alert"; 1999const EVENT_KEY$b = `.${DATA_KEY$a}`; 2000const EVENT_CLOSE = `close${EVENT_KEY$b}`; 2001const EVENT_CLOSED = `closed${EVENT_KEY$b}`; 2002const CLASS_NAME_FADE$5 = "fade"; 2003const CLASS_NAME_SHOW$8 = "show"; 2004class Alert extends BaseComponent { 2005 // Getters 2006 static get NAME() { 2007 return NAME$f; 2008 } 2009 // Public 2010 close() { 2011 const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE); 2012 if (closeEvent.defaultPrevented) { 2013 return; 2014 } 2015 this._element.classList.remove(CLASS_NAME_SHOW$8); 2016 const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5); 2017 this._queueCallback(() => this._destroyElement(), this._element, isAnimated); 2018 } 2019 // Private 2020 _destroyElement() { 2021 this._element.remove(); 2022 EventHandler.trigger(this._element, EVENT_CLOSED); 2023 this.dispose(); 2024 } 2025 // Static 2026 static jQueryInterface(config) { 2027 return this.each(function() { 2028 const data = Alert.getOrCreateInstance(this); 2029 if (typeof config !== "string") { 2030 return; 2031 } 2032 if (data[config] === void 0 || config.startsWith("_") || config === "constructor") { 2033 throw new TypeError(`No method named "${config}"`); 2034 } 2035 data[config](this); 2036 }); 2037 } 2038} 2039enableDismissTrigger(Alert, "close"); 2040defineJQueryPlugin(Alert); 2041const NAME$e = "button"; 2042const DATA_KEY$9 = "bs.button"; 2043const EVENT_KEY$a = `.${DATA_KEY$9}`; 2044const DATA_API_KEY$6 = ".data-api"; 2045const CLASS_NAME_ACTIVE$3 = "active"; 2046const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]'; 2047const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`; 2048class Button extends BaseComponent { 2049 // Getters 2050 static get NAME() { 2051 return NAME$e; 2052 } 2053 // Public 2054 toggle() { 2055 this._element.setAttribute("aria-pressed", this._element.classList.toggle(CLASS_NAME_ACTIVE$3)); 2056 } 2057 // Static 2058 static jQueryInterface(config) { 2059 return this.each(function() { 2060 const data = Button.getOrCreateInstance(this); 2061 if (config === "toggle") { 2062 data[config](); 2063 } 2064 }); 2065 } 2066} 2067EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, (event) => { 2068 event.preventDefault(); 2069 const button = event.target.closest(SELECTOR_DATA_TOGGLE$5); 2070 const data = Button.getOrCreateInstance(button); 2071 data.toggle(); 2072}); 2073defineJQueryPlugin(Button); 2074const SelectorEngine = { 2075 find(selector, element = document.documentElement) { 2076 return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); 2077 }, 2078 findOne(selector, element = document.documentElement) { 2079 return Element.prototype.querySelector.call(element, selector); 2080 }, 2081 children(element, selector) { 2082 return [].concat(...element.children).filter((child2) => child2.matches(selector)); 2083 }, 2084 parents(element, selector) { 2085 const parents = []; 2086 let ancestor = element.parentNode.closest(selector); 2087 while (ancestor) { 2088 parents.push(ancestor); 2089 ancestor = ancestor.parentNode.closest(selector); 2090 } 2091 return parents; 2092 }, 2093 prev(element, selector) { 2094 let previous = element.previousElementSibling; 2095 while (previous) { 2096 if (previous.matches(selector)) { 2097 return [previous]; 2098 } 2099 previous = previous.previousElementSibling; 2100 } 2101 return []; 2102 }, 2103 // TODO: this is now unused; remove later along with prev() 2104 next(element, selector) { 2105 let next = element.nextElementSibling; 2106 while (next) { 2107 if (next.matches(selector)) { 2108 return [next]; 2109 } 2110 next = next.nextElementSibling; 2111 } 2112 return []; 2113 }, 2114 focusableChildren(element) { 2115 const focusables = ["a", "button", "input", "textarea", "select", "details", "[tabindex]", '[contenteditable="true"]'].map((selector) => `${selector}:not([tabindex^="-"])`).join(","); 2116 return this.find(focusables, element).filter((el) => !isDisabled(el) && isVisible(el)); 2117 } 2118}; 2119const NAME$d = "swipe"; 2120const EVENT_KEY$9 = ".bs.swipe"; 2121const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`; 2122const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`; 2123const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`; 2124const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`; 2125const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`; 2126const POINTER_TYPE_TOUCH = "touch"; 2127const POINTER_TYPE_PEN = "pen"; 2128const CLASS_NAME_POINTER_EVENT = "pointer-event"; 2129const SWIPE_THRESHOLD = 40; 2130const Default$c = { 2131 endCallback: null, 2132 leftCallback: null, 2133 rightCallback: null 2134}; 2135const DefaultType$c = { 2136 endCallback: "(function|null)", 2137 leftCallback: "(function|null)", 2138 rightCallback: "(function|null)" 2139}; 2140class Swipe extends Config { 2141 constructor(element, config) { 2142 super(); 2143 this._element = element; 2144 if (!element || !Swipe.isSupported()) { 2145 return; 2146 } 2147 this._config = this._getConfig(config); 2148 this._deltaX = 0; 2149 this._supportPointerEvents = Boolean(window.PointerEvent); 2150 this._initEvents(); 2151 } 2152 // Getters 2153 static get Default() { 2154 return Default$c; 2155 } 2156 static get DefaultType() { 2157 return DefaultType$c; 2158 } 2159 static get NAME() { 2160 return NAME$d; 2161 } 2162 // Public 2163 dispose() { 2164 EventHandler.off(this._element, EVENT_KEY$9); 2165 } 2166 // Private 2167 _start(event) { 2168 if (!this._supportPointerEvents) { 2169 this._deltaX = event.touches[0].clientX; 2170 return; 2171 } 2172 if (this._eventIsPointerPenTouch(event)) { 2173 this._deltaX = event.clientX; 2174 } 2175 } 2176 _end(event) { 2177 if (this._eventIsPointerPenTouch(event)) { 2178 this._deltaX = event.clientX - this._deltaX; 2179 } 2180 this._handleSwipe(); 2181 execute(this._config.endCallback); 2182 } 2183 _move(event) { 2184 this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX; 2185 } 2186 _handleSwipe() { 2187 const absDeltaX = Math.abs(this._deltaX); 2188 if (absDeltaX <= SWIPE_THRESHOLD) { 2189 return; 2190 } 2191 const direction = absDeltaX / this._deltaX; 2192 this._deltaX = 0; 2193 if (!direction) { 2194 return; 2195 } 2196 execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback); 2197 } 2198 _initEvents() { 2199 if (this._supportPointerEvents) { 2200 EventHandler.on(this._element, EVENT_POINTERDOWN, (event) => this._start(event)); 2201 EventHandler.on(this._element, EVENT_POINTERUP, (event) => this._end(event)); 2202 this._element.classList.add(CLASS_NAME_POINTER_EVENT); 2203 } else { 2204 EventHandler.on(this._element, EVENT_TOUCHSTART, (event) => this._start(event)); 2205 EventHandler.on(this._element, EVENT_TOUCHMOVE, (event) => this._move(event)); 2206 EventHandler.on(this._element, EVENT_TOUCHEND, (event) => this._end(event)); 2207 } 2208 } 2209 _eventIsPointerPenTouch(event) { 2210 return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH); 2211 } 2212 // Static 2213 static isSupported() { 2214 return "ontouchstart" in document.documentElement || navigator.maxTouchPoints > 0; 2215 } 2216} 2217const NAME$c = "carousel"; 2218const DATA_KEY$8 = "bs.carousel"; 2219const EVENT_KEY$8 = `.${DATA_KEY$8}`; 2220const DATA_API_KEY$5 = ".data-api"; 2221const ARROW_LEFT_KEY$1 = "ArrowLeft"; 2222const ARROW_RIGHT_KEY$1 = "ArrowRight"; 2223const TOUCHEVENT_COMPAT_WAIT = 500; 2224const ORDER_NEXT = "next"; 2225const ORDER_PREV = "prev"; 2226const DIRECTION_LEFT = "left"; 2227const DIRECTION_RIGHT = "right"; 2228const EVENT_SLIDE = `slide${EVENT_KEY$8}`; 2229const EVENT_SLID = `slid${EVENT_KEY$8}`; 2230const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`; 2231const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`; 2232const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`; 2233const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`; 2234const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`; 2235const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`; 2236const CLASS_NAME_CAROUSEL = "carousel"; 2237const CLASS_NAME_ACTIVE$2 = "active"; 2238const CLASS_NAME_SLIDE = "slide"; 2239const CLASS_NAME_END = "carousel-item-end"; 2240const CLASS_NAME_START = "carousel-item-start"; 2241const CLASS_NAME_NEXT = "carousel-item-next"; 2242const CLASS_NAME_PREV = "carousel-item-prev"; 2243const SELECTOR_ACTIVE = ".active"; 2244const SELECTOR_ITEM = ".carousel-item"; 2245const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM; 2246const SELECTOR_ITEM_IMG = ".carousel-item img"; 2247const SELECTOR_INDICATORS = ".carousel-indicators"; 2248const SELECTOR_DATA_SLIDE = "[data-bs-slide], [data-bs-slide-to]"; 2249const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]'; 2250const KEY_TO_DIRECTION = { 2251 [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT, 2252 [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT 2253}; 2254const Default$b = { 2255 interval: 5e3, 2256 keyboard: true, 2257 pause: "hover", 2258 ride: false, 2259 touch: true, 2260 wrap: true 2261}; 2262const DefaultType$b = { 2263 interval: "(number|boolean)", 2264 // TODO:v6 remove boolean support 2265 keyboard: "boolean", 2266 pause: "(string|boolean)", 2267 ride: "(boolean|string)", 2268 touch: "boolean", 2269 wrap: "boolean" 2270}; 2271let Carousel$1 = class Carousel extends BaseComponent { 2272 constructor(element, config) { 2273 super(element, config); 2274 this._interval = null; 2275 this._activeElement = null; 2276 this._isSliding = false; 2277 this.touchTimeout = null; 2278 this._swipeHelper = null; 2279 this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element); 2280 this._addEventListeners(); 2281 if (this._config.ride === CLASS_NAME_CAROUSEL) { 2282 this.cycle(); 2283 } 2284 } 2285 // Getters 2286 static get Default() { 2287 return Default$b; 2288 } 2289 static get DefaultType() { 2290 return DefaultType$b; 2291 } 2292 static get NAME() { 2293 return NAME$c; 2294 } 2295 // Public 2296 next() { 2297 this._slide(ORDER_NEXT); 2298 } 2299 nextWhenVisible() { 2300 if (!document.hidden && isVisible(this._element)) { 2301 this.next(); 2302 } 2303 } 2304 prev() { 2305 this._slide(ORDER_PREV); 2306 } 2307 pause() { 2308 if (this._isSliding) { 2309 triggerTransitionEnd(this._element); 2310 } 2311 this._clearInterval(); 2312 } 2313 cycle() { 2314 this._clearInterval(); 2315 this._updateInterval(); 2316 this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval); 2317 } 2318 _maybeEnableCycle() { 2319 if (!this._config.ride) { 2320 return; 2321 } 2322 if (this._isSliding) { 2323 EventHandler.one(this._element, EVENT_SLID, () => this.cycle()); 2324 return; 2325 } 2326 this.cycle(); 2327 } 2328 to(index) { 2329 const items = this._getItems(); 2330 if (index > items.length - 1 || index < 0) { 2331 return; 2332 } 2333 if (this._isSliding) { 2334 EventHandler.one(this._element, EVENT_SLID, () => this.to(index)); 2335 return; 2336 } 2337 const activeIndex = this._getItemIndex(this._getActive()); 2338 if (activeIndex === index) { 2339 return; 2340 } 2341 const order2 = index > activeIndex ? ORDER_NEXT : ORDER_PREV; 2342 this._slide(order2, items[index]); 2343 } 2344 dispose() { 2345 if (this._swipeHelper) { 2346 this._swipeHelper.dispose(); 2347 } 2348 super.dispose(); 2349 } 2350 // Private 2351 _configAfterMerge(config) { 2352 config.defaultInterval = config.interval; 2353 return config; 2354 } 2355 _addEventListeners() { 2356 if (this._config.keyboard) { 2357 EventHandler.on(this._element, EVENT_KEYDOWN$1, (event) => this._keydown(event)); 2358 } 2359 if (this._config.pause === "hover") { 2360 EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause()); 2361 EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle()); 2362 } 2363 if (this._config.touch && Swipe.isSupported()) { 2364 this._addTouchEventListeners(); 2365 } 2366 } 2367 _addTouchEventListeners() { 2368 for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) { 2369 EventHandler.on(img, EVENT_DRAG_START, (event) => event.preventDefault()); 2370 } 2371 const endCallBack = () => { 2372 if (this._config.pause !== "hover") { 2373 return; 2374 } 2375 this.pause(); 2376 if (this.touchTimeout) { 2377 clearTimeout(this.touchTimeout); 2378 } 2379 this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval); 2380 }; 2381 const swipeConfig = { 2382 leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)), 2383 rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)), 2384 endCallback: endCallBack 2385 }; 2386 this._swipeHelper = new Swipe(this._element, swipeConfig); 2387 } 2388 _keydown(event) { 2389 if (/input|textarea/i.test(event.target.tagName)) { 2390 return; 2391 } 2392 const direction = KEY_TO_DIRECTION[event.key]; 2393 if (direction) { 2394 event.preventDefault(); 2395 this._slide(this._directionToOrder(direction)); 2396 } 2397 } 2398 _getItemIndex(element) { 2399 return this._getItems().indexOf(element); 2400 } 2401 _setActiveIndicatorElement(index) { 2402 if (!this._indicatorsElement) { 2403 return; 2404 } 2405 const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement); 2406 activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2); 2407 activeIndicator.removeAttribute("aria-current"); 2408 const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement); 2409 if (newActiveIndicator) { 2410 newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2); 2411 newActiveIndicator.setAttribute("aria-current", "true"); 2412 } 2413 } 2414 _updateInterval() { 2415 const element = this._activeElement || this._getActive(); 2416 if (!element) { 2417 return; 2418 } 2419 const elementInterval = Number.parseInt(element.getAttribute("data-bs-interval"), 10); 2420 this._config.interval = elementInterval || this._config.defaultInterval; 2421 } 2422 _slide(order2, element = null) { 2423 if (this._isSliding) { 2424 return; 2425 } 2426 const activeElement = this._getActive(); 2427 const isNext = order2 === ORDER_NEXT; 2428 const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap); 2429 if (nextElement === activeElement) { 2430 return; 2431 } 2432 const nextElementIndex = this._getItemIndex(nextElement); 2433 const triggerEvent = (eventName) => { 2434 return EventHandler.trigger(this._element, eventName, { 2435 relatedTarget: nextElement, 2436 direction: this._orderToDirection(order2), 2437 from: this._getItemIndex(activeElement), 2438 to: nextElementIndex 2439 }); 2440 }; 2441 const slideEvent = triggerEvent(EVENT_SLIDE); 2442 if (slideEvent.defaultPrevented) { 2443 return; 2444 } 2445 if (!activeElement || !nextElement) { 2446 return; 2447 } 2448 const isCycling = Boolean(this._interval); 2449 this.pause(); 2450 this._isSliding = true; 2451 this._setActiveIndicatorElement(nextElementIndex); 2452 this._activeElement = nextElement; 2453 const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END; 2454 const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV; 2455 nextElement.classList.add(orderClassName); 2456 reflow(nextElement); 2457 activeElement.classList.add(directionalClassName); 2458 nextElement.classList.add(directionalClassName); 2459 const completeCallBack = () => { 2460 nextElement.classList.remove(directionalClassName, orderClassName); 2461 nextElement.classList.add(CLASS_NAME_ACTIVE$2); 2462 activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName); 2463 this._isSliding = false; 2464 triggerEvent(EVENT_SLID); 2465 }; 2466 this._queueCallback(completeCallBack, activeElement, this._isAnimated()); 2467 if (isCycling) { 2468 this.cycle(); 2469 } 2470 } 2471 _isAnimated() { 2472 return this._element.classList.contains(CLASS_NAME_SLIDE); 2473 } 2474 _getActive() { 2475 return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 2476 } 2477 _getItems() { 2478 return SelectorEngine.find(SELECTOR_ITEM, this._element); 2479 } 2480 _clearInterval() { 2481 if (this._interval) { 2482 clearInterval(this._interval); 2483 this._interval = null; 2484 } 2485 } 2486 _directionToOrder(direction) { 2487 if (isRTL()) { 2488 return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT; 2489 } 2490 return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV; 2491 } 2492 _orderToDirection(order2) { 2493 if (isRTL()) { 2494 return order2 === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT; 2495 } 2496 return order2 === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT; 2497 } 2498 // Static 2499 static jQueryInterface(config) { 2500 return this.each(function() { 2501 const data = Carousel.getOrCreateInstance(this, config); 2502 if (typeof config === "number") { 2503 data.to(config); 2504 return; 2505 } 2506 if (typeof config === "string") { 2507 if (data[config] === void 0 || config.startsWith("_") || config === "constructor") { 2508 throw new TypeError(`No method named "${config}"`); 2509 } 2510 data[config](); 2511 } 2512 }); 2513 } 2514}; 2515EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function(event) { 2516 const target = getElementFromSelector(this); 2517 if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) { 2518 return; 2519 } 2520 event.preventDefault(); 2521 const carousel = Carousel$1.getOrCreateInstance(target); 2522 const slideIndex = this.getAttribute("data-bs-slide-to"); 2523 if (slideIndex) { 2524 carousel.to(slideIndex); 2525 carousel._maybeEnableCycle(); 2526 return; 2527 } 2528 if (Manipulator.getDataAttribute(this, "slide") === "next") { 2529 carousel.next(); 2530 carousel._maybeEnableCycle(); 2531 return; 2532 } 2533 carousel.prev(); 2534 carousel._maybeEnableCycle(); 2535}); 2536EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => { 2537 const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE); 2538 for (const carousel of carousels) { 2539 Carousel$1.getOrCreateInstance(carousel); 2540 } 2541}); 2542defineJQueryPlugin(Carousel$1); 2543const NAME$b = "collapse"; 2544const DATA_KEY$7 = "bs.collapse"; 2545const EVENT_KEY$7 = `.${DATA_KEY$7}`; 2546const DATA_API_KEY$4 = ".data-api"; 2547const EVENT_SHOW$6 = `show${EVENT_KEY$7}`; 2548const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`; 2549const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`; 2550const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`; 2551const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`; 2552const CLASS_NAME_SHOW$7 = "show"; 2553const CLASS_NAME_COLLAPSE = "collapse"; 2554const CLASS_NAME_COLLAPSING = "collapsing"; 2555const CLASS_NAME_COLLAPSED = "collapsed"; 2556const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`; 2557const CLASS_NAME_HORIZONTAL = "collapse-horizontal"; 2558const WIDTH = "width"; 2559const HEIGHT = "height"; 2560const SELECTOR_ACTIVES = ".collapse.show, .collapse.collapsing"; 2561const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]'; 2562const Default$a = { 2563 parent: null, 2564 toggle: true 2565}; 2566const DefaultType$a = { 2567 parent: "(null|element)", 2568 toggle: "boolean" 2569}; 2570class Collapse extends BaseComponent { 2571 constructor(element, config) { 2572 super(element, config); 2573 this._isTransitioning = false; 2574 this._triggerArray = []; 2575 const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4); 2576 for (const elem of toggleList) { 2577 const selector = getSelectorFromElement(elem); 2578 const filterElement = SelectorEngine.find(selector).filter((foundElement) => foundElement === this._element); 2579 if (selector !== null && filterElement.length) { 2580 this._triggerArray.push(elem); 2581 } 2582 } 2583 this._initializeChildren(); 2584 if (!this._config.parent) { 2585 this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); 2586 } 2587 if (this._config.toggle) { 2588 this.toggle(); 2589 } 2590 } 2591 // Getters 2592 static get Default() { 2593 return Default$a; 2594 } 2595 static get DefaultType() { 2596 return DefaultType$a; 2597 } 2598 static get NAME() { 2599 return NAME$b; 2600 } 2601 // Public 2602 toggle() { 2603 if (this._isShown()) { 2604 this.hide(); 2605 } else { 2606 this.show(); 2607 } 2608 } 2609 show() { 2610 if (this._isTransitioning || this._isShown()) { 2611 return; 2612 } 2613 let activeChildren = []; 2614 if (this._config.parent) { 2615 activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter((element) => element !== this._element).map((element) => Collapse.getOrCreateInstance(element, { 2616 toggle: false 2617 })); 2618 } 2619 if (activeChildren.length && activeChildren[0]._isTransitioning) { 2620 return; 2621 } 2622 const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6); 2623 if (startEvent.defaultPrevented) { 2624 return; 2625 } 2626 for (const activeInstance of activeChildren) { 2627 activeInstance.hide(); 2628 } 2629 const dimension = this._getDimension(); 2630 this._element.classList.remove(CLASS_NAME_COLLAPSE); 2631 this._element.classList.add(CLASS_NAME_COLLAPSING); 2632 this._element.style[dimension] = 0; 2633 this._addAriaAndCollapsedClass(this._triggerArray, true); 2634 this._isTransitioning = true; 2635 const complete = () => { 2636 this._isTransitioning = false; 2637 this._element.classList.remove(CLASS_NAME_COLLAPSING); 2638 this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 2639 this._element.style[dimension] = ""; 2640 EventHandler.trigger(this._element, EVENT_SHOWN$6); 2641 }; 2642 const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 2643 const scrollSize = `scroll${capitalizedDimension}`; 2644 this._queueCallback(complete, this._element, true); 2645 this._element.style[dimension] = `${this._element[scrollSize]}px`; 2646 } 2647 hide() { 2648 if (this._isTransitioning || !this._isShown()) { 2649 return; 2650 } 2651 const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6); 2652 if (startEvent.defaultPrevented) { 2653 return; 2654 } 2655 const dimension = this._getDimension(); 2656 this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; 2657 reflow(this._element); 2658 this._element.classList.add(CLASS_NAME_COLLAPSING); 2659 this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 2660 for (const trigger of this._triggerArray) { 2661 const element = getElementFromSelector(trigger); 2662 if (element && !this._isShown(element)) { 2663 this._addAriaAndCollapsedClass([trigger], false); 2664 } 2665 } 2666 this._isTransitioning = true; 2667 const complete = () => { 2668 this._isTransitioning = false; 2669 this._element.classList.remove(CLASS_NAME_COLLAPSING); 2670 this._element.classList.add(CLASS_NAME_COLLAPSE); 2671 EventHandler.trigger(this._element, EVENT_HIDDEN$6); 2672 }; 2673 this._element.style[dimension] = ""; 2674 this._queueCallback(complete, this._element, true); 2675 } 2676 _isShown(element = this._element) { 2677 return element.classList.contains(CLASS_NAME_SHOW$7); 2678 } 2679 // Private 2680 _configAfterMerge(config) { 2681 config.toggle = Boolean(config.toggle); 2682 config.parent = getElement(config.parent); 2683 return config; 2684 } 2685 _getDimension() { 2686 return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; 2687 } 2688 _initializeChildren() { 2689 if (!this._config.parent) { 2690 return; 2691 } 2692 const children2 = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4); 2693 for (const element of children2) { 2694 const selected = getElementFromSelector(element); 2695 if (selected) { 2696 this._addAriaAndCollapsedClass([element], this._isShown(selected)); 2697 } 2698 } 2699 } 2700 _getFirstLevelChildren(selector) { 2701 const children2 = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); 2702 return SelectorEngine.find(selector, this._config.parent).filter((element) => !children2.includes(element)); 2703 } 2704 _addAriaAndCollapsedClass(triggerArray, isOpen) { 2705 if (!triggerArray.length) { 2706 return; 2707 } 2708 for (const element of triggerArray) { 2709 element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen); 2710 element.setAttribute("aria-expanded", isOpen); 2711 } 2712 } 2713 // Static 2714 static jQueryInterface(config) { 2715 const _config = {}; 2716 if (typeof config === "string" && /show|hide/.test(config)) { 2717 _config.toggle = false; 2718 } 2719 return this.each(function() { 2720 const data = Collapse.getOrCreateInstance(this, _config); 2721 if (typeof config === "string") { 2722 if (typeof data[config] === "undefined") { 2723 throw new TypeError(`No method named "${config}"`); 2724 } 2725 data[config](); 2726 } 2727 }); 2728 } 2729} 2730EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function(event) { 2731 if (event.target.tagName === "A" || event.delegateTarget && event.delegateTarget.tagName === "A") { 2732 event.preventDefault(); 2733 } 2734 const selector = getSelectorFromElement(this); 2735 const selectorElements = SelectorEngine.find(selector); 2736 for (const element of selectorElements) { 2737 Collapse.getOrCreateInstance(element, { 2738 toggle: false 2739 }).toggle(); 2740 } 2741}); 2742defineJQueryPlugin(Collapse); 2743const NAME$a = "dropdown"; 2744const DATA_KEY$6 = "bs.dropdown"; 2745const EVENT_KEY$6 = `.${DATA_KEY$6}`; 2746const DATA_API_KEY$3 = ".data-api"; 2747const ESCAPE_KEY$2 = "Escape"; 2748const TAB_KEY$1 = "Tab"; 2749const ARROW_UP_KEY$1 = "ArrowUp"; 2750const ARROW_DOWN_KEY$1 = "ArrowDown"; 2751const RIGHT_MOUSE_BUTTON = 2; 2752const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`; 2753const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`; 2754const EVENT_SHOW$5 = `show${EVENT_KEY$6}`; 2755const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`; 2756const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`; 2757const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`; 2758const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`; 2759const CLASS_NAME_SHOW$6 = "show"; 2760const CLASS_NAME_DROPUP = "dropup"; 2761const CLASS_NAME_DROPEND = "dropend"; 2762const CLASS_NAME_DROPSTART = "dropstart"; 2763const CLASS_NAME_DROPUP_CENTER = "dropup-center"; 2764const CLASS_NAME_DROPDOWN_CENTER = "dropdown-center"; 2765const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)'; 2766const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`; 2767const SELECTOR_MENU = ".dropdown-menu"; 2768const SELECTOR_NAVBAR = ".navbar"; 2769const SELECTOR_NAVBAR_NAV = ".navbar-nav"; 2770const SELECTOR_VISIBLE_ITEMS = ".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)"; 2771const PLACEMENT_TOP = isRTL() ? "top-end" : "top-start"; 2772const PLACEMENT_TOPEND = isRTL() ? "top-start" : "top-end"; 2773const PLACEMENT_BOTTOM = isRTL() ? "bottom-end" : "bottom-start"; 2774const PLACEMENT_BOTTOMEND = isRTL() ? "bottom-start" : "bottom-end"; 2775const PLACEMENT_RIGHT = isRTL() ? "left-start" : "right-start"; 2776const PLACEMENT_LEFT = isRTL() ? "right-start" : "left-start"; 2777const PLACEMENT_TOPCENTER = "top"; 2778const PLACEMENT_BOTTOMCENTER = "bottom"; 2779const Default$9 = { 2780 autoClose: true, 2781 boundary: "clippingParents", 2782 display: "dynamic", 2783 offset: [0, 2], 2784 popperConfig: null, 2785 reference: "toggle" 2786}; 2787const DefaultType$9 = { 2788 autoClose: "(boolean|string)", 2789 boundary: "(string|element)", 2790 display: "string", 2791 offset: "(array|string|function)", 2792 popperConfig: "(null|object|function)", 2793 reference: "(string|element|object)" 2794}; 2795let Dropdown$1 = class Dropdown extends BaseComponent { 2796 constructor(element, config) { 2797 super(element, config); 2798 this._popper = null; 2799 this._parent = this._element.parentNode; 2800 this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent); 2801 this._inNavbar = this._detectNavbar(); 2802 } 2803 // Getters 2804 static get Default() { 2805 return Default$9; 2806 } 2807 static get DefaultType() { 2808 return DefaultType$9; 2809 } 2810 static get NAME() { 2811 return NAME$a; 2812 } 2813 // Public 2814 toggle() { 2815 return this._isShown() ? this.hide() : this.show(); 2816 } 2817 show() { 2818 if (isDisabled(this._element) || this._isShown()) { 2819 return; 2820 } 2821 const relatedTarget = { 2822 relatedTarget: this._element 2823 }; 2824 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget); 2825 if (showEvent.defaultPrevented) { 2826 return; 2827 } 2828 this._createPopper(); 2829 if ("ontouchstart" in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) { 2830 for (const element of [].concat(...document.body.children)) { 2831 EventHandler.on(element, "mouseover", noop$1); 2832 } 2833 } 2834 this._element.focus(); 2835 this._element.setAttribute("aria-expanded", true); 2836 this._menu.classList.add(CLASS_NAME_SHOW$6); 2837 this._element.classList.add(CLASS_NAME_SHOW$6); 2838 EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget); 2839 } 2840 hide() { 2841 if (isDisabled(this._element) || !this._isShown()) { 2842 return; 2843 } 2844 const relatedTarget = { 2845 relatedTarget: this._element 2846 }; 2847 this._completeHide(relatedTarget); 2848 } 2849 dispose() { 2850 if (this._popper) { 2851 this._popper.destroy(); 2852 } 2853 super.dispose(); 2854 } 2855 update() { 2856 this._inNavbar = this._detectNavbar(); 2857 if (this._popper) { 2858 this._popper.update(); 2859 } 2860 } 2861 // Private 2862 _completeHide(relatedTarget) { 2863 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget); 2864 if (hideEvent.defaultPrevented) { 2865 return; 2866 } 2867 if ("ontouchstart" in document.documentElement) { 2868 for (const element of [].concat(...document.body.children)) { 2869 EventHandler.off(element, "mouseover", noop$1); 2870 } 2871 } 2872 if (this._popper) { 2873 this._popper.destroy(); 2874 } 2875 this._menu.classList.remove(CLASS_NAME_SHOW$6); 2876 this._element.classList.remove(CLASS_NAME_SHOW$6); 2877 this._element.setAttribute("aria-expanded", "false"); 2878 Manipulator.removeDataAttribute(this._menu, "popper"); 2879 EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget); 2880 } 2881 _getConfig(config) { 2882 config = super._getConfig(config); 2883 if (typeof config.reference === "object" && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== "function") { 2884 throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); 2885 } 2886 return config; 2887 } 2888 _createPopper() { 2889 if (typeof Popper === "undefined") { 2890 throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)"); 2891 } 2892 let referenceElement = this._element; 2893 if (this._config.reference === "parent") { 2894 referenceElement = this._parent; 2895 } else if (isElement(this._config.reference)) { 2896 referenceElement = getElement(this._config.reference); 2897 } else if (typeof this._config.reference === "object") { 2898 referenceElement = this._config.reference; 2899 } 2900 const popperConfig = this._getPopperConfig(); 2901 this._popper = createPopper(referenceElement, this._menu, popperConfig); 2902 } 2903 _isShown() { 2904 return this._menu.classList.contains(CLASS_NAME_SHOW$6); 2905 } 2906 _getPlacement() { 2907 const parentDropdown = this._parent; 2908 if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { 2909 return PLACEMENT_RIGHT; 2910 } 2911 if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { 2912 return PLACEMENT_LEFT; 2913 } 2914 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) { 2915 return PLACEMENT_TOPCENTER; 2916 } 2917 if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) { 2918 return PLACEMENT_BOTTOMCENTER; 2919 } 2920 const isEnd = getComputedStyle(this._menu).getPropertyValue("--bs-position").trim() === "end"; 2921 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { 2922 return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP; 2923 } 2924 return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM; 2925 } 2926 _detectNavbar() { 2927 return this._element.closest(SELECTOR_NAVBAR) !== null; 2928 } 2929 _getOffset() { 2930 const { 2931 offset: offset2 2932 } = this._config; 2933 if (typeof offset2 === "string") { 2934 return offset2.split(",").map((value) => Number.parseInt(value, 10)); 2935 } 2936 if (typeof offset2 === "function") { 2937 return (popperData) => offset2(popperData, this._element); 2938 } 2939 return offset2; 2940 } 2941 _getPopperConfig() { 2942 const defaultBsPopperConfig = { 2943 placement: this._getPlacement(), 2944 modifiers: [{ 2945 name: "preventOverflow", 2946 options: { 2947 boundary: this._config.boundary 2948 } 2949 }, { 2950 name: "offset", 2951 options: { 2952 offset: this._getOffset() 2953 } 2954 }] 2955 }; 2956 if (this._inNavbar || this._config.display === "static") { 2957 Manipulator.setDataAttribute(this._menu, "popper", "static"); 2958 defaultBsPopperConfig.modifiers = [{ 2959 name: "applyStyles", 2960 enabled: false 2961 }]; 2962 } 2963 return { 2964 ...defaultBsPopperConfig, 2965 ...typeof this._config.popperConfig === "function" ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig 2966 }; 2967 } 2968 _selectMenuItem({ 2969 key, 2970 target 2971 }) { 2972 const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter((element) => isVisible(element)); 2973 if (!items.length) { 2974 return; 2975 } 2976 getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus(); 2977 } 2978 // Static 2979 static jQueryInterface(config) { 2980 return this.each(function() { 2981 const data = Dropdown.getOrCreateInstance(this, config); 2982 if (typeof config !== "string") { 2983 return; 2984 } 2985 if (typeof data[config] === "undefined") { 2986 throw new TypeError(`No method named "${config}"`); 2987 } 2988 data[config](); 2989 }); 2990 } 2991 static clearMenus(event) { 2992 if (event.button === RIGHT_MOUSE_BUTTON || event.type === "keyup" && event.key !== TAB_KEY$1) { 2993 return; 2994 } 2995 const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN); 2996 for (const toggle of openToggles) { 2997 const context = Dropdown.getInstance(toggle); 2998 if (!context || context._config.autoClose === false) { 2999 continue; 3000 } 3001 const composedPath = event.composedPath(); 3002 const isMenuTarget = composedPath.includes(context._menu); 3003 if (composedPath.includes(context._element) || context._config.autoClose === "inside" && !isMenuTarget || context._config.autoClose === "outside" && isMenuTarget) { 3004 continue; 3005 } 3006 if (context._menu.contains(event.target) && (event.type === "keyup" && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) { 3007 continue; 3008 } 3009 const relatedTarget = { 3010 relatedTarget: context._element 3011 }; 3012 if (event.type === "click") { 3013 relatedTarget.clickEvent = event; 3014 } 3015 context._completeHide(relatedTarget); 3016 } 3017 } 3018 static dataApiKeydownHandler(event) { 3019 const isInput = /input|textarea/i.test(event.target.tagName); 3020 const isEscapeEvent = event.key === ESCAPE_KEY$2; 3021 const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key); 3022 if (!isUpOrDownEvent && !isEscapeEvent) { 3023 return; 3024 } 3025 if (isInput && !isEscapeEvent) { 3026 return; 3027 } 3028 event.preventDefault(); 3029 const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode); 3030 const instance = Dropdown.getOrCreateInstance(getToggleButton); 3031 if (isUpOrDownEvent) { 3032 event.stopPropagation(); 3033 instance.show(); 3034 instance._selectMenuItem(event); 3035 return; 3036 } 3037 if (instance._isShown()) { 3038 event.stopPropagation(); 3039 instance.hide(); 3040 getToggleButton.focus(); 3041 } 3042 } 3043}; 3044EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown$1.dataApiKeydownHandler); 3045EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown$1.dataApiKeydownHandler); 3046EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown$1.clearMenus); 3047EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown$1.clearMenus); 3048EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function(event) { 3049 event.preventDefault(); 3050 Dropdown$1.getOrCreateInstance(this).toggle(); 3051}); 3052defineJQueryPlugin(Dropdown$1); 3053const SELECTOR_FIXED_CONTENT = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"; 3054const SELECTOR_STICKY_CONTENT = ".sticky-top"; 3055const PROPERTY_PADDING = "padding-right"; 3056const PROPERTY_MARGIN = "margin-right"; 3057class ScrollBarHelper { 3058 constructor() { 3059 this._element = document.body; 3060 } 3061 // Public 3062 getWidth() { 3063 const documentWidth = document.documentElement.clientWidth; 3064 return Math.abs(window.innerWidth - documentWidth); 3065 } 3066 hide() { 3067 const width = this.getWidth(); 3068 this._disableOverFlow(); 3069 this._setElementAttributes(this._element, PROPERTY_PADDING, (calculatedValue) => calculatedValue + width); 3070 this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, (calculatedValue) => calculatedValue + width); 3071 this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, (calculatedValue) => calculatedValue - width); 3072 } 3073 reset() { 3074 this._resetElementAttributes(this._element, "overflow"); 3075 this._resetElementAttributes(this._element, PROPERTY_PADDING); 3076 this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING); 3077 this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN); 3078 } 3079 isOverflowing() { 3080 return this.getWidth() > 0; 3081 } 3082 // Private 3083 _disableOverFlow() { 3084 this._saveInitialAttribute(this._element, "overflow"); 3085 this._element.style.overflow = "hidden"; 3086 } 3087 _setElementAttributes(selector, styleProperty, callback) { 3088 const scrollbarWidth = this.getWidth(); 3089 const manipulationCallBack = (element) => { 3090 if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { 3091 return; 3092 } 3093 this._saveInitialAttribute(element, styleProperty); 3094 const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty); 3095 element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`); 3096 }; 3097 this._applyManipulationCallback(selector, manipulationCallBack); 3098 } 3099 _saveInitialAttribute(element, styleProperty) { 3100 const actualValue = element.style.getPropertyValue(styleProperty); 3101 if (actualValue) { 3102 Manipulator.setDataAttribute(element, styleProperty, actualValue); 3103 } 3104 } 3105 _resetElementAttributes(selector, styleProperty) { 3106 const manipulationCallBack = (element) => { 3107 const value = Manipulator.getDataAttribute(element, styleProperty); 3108 if (value === null) { 3109 element.style.removeProperty(styleProperty); 3110 return; 3111 } 3112 Manipulator.removeDataAttribute(element, styleProperty); 3113 element.style.setProperty(styleProperty, value); 3114 }; 3115 this._applyManipulationCallback(selector, manipulationCallBack); 3116 } 3117 _applyManipulationCallback(selector, callBack) { 3118 if (isElement(selector)) { 3119 callBack(selector); 3120 return; 3121 } 3122 for (const sel of SelectorEngine.find(selector, this._element)) { 3123 callBack(sel); 3124 } 3125 } 3126} 3127const NAME$9 = "backdrop"; 3128const CLASS_NAME_FADE$4 = "fade"; 3129const CLASS_NAME_SHOW$5 = "show"; 3130const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`; 3131const Default$8 = { 3132 className: "modal-backdrop", 3133 clickCallback: null, 3134 isAnimated: false, 3135 isVisible: true, 3136 // if false, we use the backdrop helper without adding any element to the dom 3137 rootElement: "body" 3138 // give the choice to place backdrop under different elements 3139}; 3140const DefaultType$8 = { 3141 className: "string", 3142 clickCallback: "(function|null)", 3143 isAnimated: "boolean", 3144 isVisible: "boolean", 3145 rootElement: "(element|string)" 3146}; 3147class Backdrop extends Config { 3148 constructor(config) { 3149 super(); 3150 this._config = this._getConfig(config); 3151 this._isAppended = false; 3152 this._element = null; 3153 } 3154 // Getters 3155 static get Default() { 3156 return Default$8; 3157 } 3158 static get DefaultType() { 3159 return DefaultType$8; 3160 } 3161 static get NAME() { 3162 return NAME$9; 3163 } 3164 // Public 3165 show(callback) { 3166 if (!this._config.isVisible) { 3167 execute(callback); 3168 return; 3169 } 3170 this._append(); 3171 const element = this._getElement(); 3172 if (this._config.isAnimated) { 3173 reflow(element); 3174 } 3175 element.classList.add(CLASS_NAME_SHOW$5); 3176 this._emulateAnimation(() => { 3177 execute(callback); 3178 }); 3179 } 3180 hide(callback) { 3181 if (!this._config.isVisible) { 3182 execute(callback); 3183 return; 3184 } 3185 this._getElement().classList.remove(CLASS_NAME_SHOW$5); 3186 this._emulateAnimation(() => { 3187 this.dispose(); 3188 execute(callback); 3189 }); 3190 } 3191 dispose() { 3192 if (!this._isAppended) { 3193 return; 3194 } 3195 EventHandler.off(this._element, EVENT_MOUSEDOWN); 3196 this._element.remove(); 3197 this._isAppended = false; 3198 } 3199 // Private 3200 _getElement() { 3201 if (!this._element) { 3202 const backdrop = document.createElement("div"); 3203 backdrop.className = this._config.className; 3204 if (this._config.isAnimated) { 3205 backdrop.classList.add(CLASS_NAME_FADE$4); 3206 } 3207 this._element = backdrop; 3208 } 3209 return this._element; 3210 } 3211 _configAfterMerge(config) { 3212 config.rootElement = getElement(config.rootElement); 3213 return config; 3214 } 3215 _append() { 3216 if (this._isAppended) { 3217 return; 3218 } 3219 const element = this._getElement(); 3220 this._config.rootElement.append(element); 3221 EventHandler.on(element, EVENT_MOUSEDOWN, () => { 3222 execute(this._config.clickCallback); 3223 }); 3224 this._isAppended = true; 3225 } 3226 _emulateAnimation(callback) { 3227 executeAfterTransition(callback, this._getElement(), this._config.isAnimated); 3228 } 3229} 3230const NAME$8 = "focustrap"; 3231const DATA_KEY$5 = "bs.focustrap"; 3232const EVENT_KEY$5 = `.${DATA_KEY$5}`; 3233const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`; 3234const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`; 3235const TAB_KEY = "Tab"; 3236const TAB_NAV_FORWARD = "forward"; 3237const TAB_NAV_BACKWARD = "backward"; 3238const Default$7 = { 3239 autofocus: true, 3240 trapElement: null 3241 // The element to trap focus inside of 3242}; 3243const DefaultType$7 = { 3244 autofocus: "boolean", 3245 trapElement: "element" 3246}; 3247class FocusTrap extends Config { 3248 constructor(config) { 3249 super(); 3250 this._config = this._getConfig(config); 3251 this._isActive = false; 3252 this._lastTabNavDirection = null; 3253 } 3254 // Getters 3255 static get Default() { 3256 return Default$7; 3257 } 3258 static get DefaultType() { 3259 return DefaultType$7; 3260 } 3261 static get NAME() { 3262 return NAME$8; 3263 } 3264 // Public 3265 activate() { 3266 if (this._isActive) { 3267 return; 3268 } 3269 if (this._config.autofocus) { 3270 this._config.trapElement.focus(); 3271 } 3272 EventHandler.off(document, EVENT_KEY$5); 3273 EventHandler.on(document, EVENT_FOCUSIN$2, (event) => this._handleFocusin(event)); 3274 EventHandler.on(document, EVENT_KEYDOWN_TAB, (event) => this._handleKeydown(event)); 3275 this._isActive = true; 3276 } 3277 deactivate() { 3278 if (!this._isActive) { 3279 return; 3280 } 3281 this._isActive = false;
vendor: 5,402 bytes, lines 3282-3440
3282 EventHandler.off(document, EVENT_KEY$5); 3283 } 3284 // Private 3285 _handleFocusin(event) { 3286 const { 3287 trapElement 3288 } = this._config; 3289 if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) { 3290 return; 3291 } 3292 const elements = SelectorEngine.focusableChildren(trapElement); 3293 if (elements.length === 0) { 3294 trapElement.focus(); 3295 } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) { 3296 elements[elements.length - 1].focus(); 3297 } else { 3298 elements[0].focus(); 3299 } 3300 } 3301 _handleKeydown(event) { 3302 if (event.key !== TAB_KEY) { 3303 return; 3304 } 3305 this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD; 3306 } 3307} 3308const NAME$7 = "modal"; 3309const DATA_KEY$4 = "bs.modal"; 3310const EVENT_KEY$4 = `.${DATA_KEY$4}`; 3311const DATA_API_KEY$2 = ".data-api"; 3312const ESCAPE_KEY$1 = "Escape"; 3313const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`; 3314const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`; 3315const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`; 3316const EVENT_SHOW$4 = `show${EVENT_KEY$4}`; 3317const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`; 3318const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`; 3319const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`; 3320const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`; 3321const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`; 3322const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`; 3323const CLASS_NAME_OPEN = "modal-open"; 3324const CLASS_NAME_FADE$3 = "fade"; 3325const CLASS_NAME_SHOW$4 = "show"; 3326const CLASS_NAME_STATIC = "modal-static"; 3327const OPEN_SELECTOR$1 = ".modal.show"; 3328const SELECTOR_DIALOG = ".modal-dialog"; 3329const SELECTOR_MODAL_BODY = ".modal-body"; 3330const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]'; 3331const Default$6 = { 3332 backdrop: true, 3333 focus: true, 3334 keyboard: true 3335}; 3336const DefaultType$6 = { 3337 backdrop: "(boolean|string)", 3338 focus: "boolean", 3339 keyboard: "boolean" 3340}; 3341class Modal extends BaseComponent { 3342 constructor(element, config) { 3343 super(element, config); 3344 this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element); 3345 this._backdrop = this._initializeBackDrop(); 3346 this._focustrap = this._initializeFocusTrap(); 3347 this._isShown = false; 3348 this._isTransitioning = false; 3349 this._scrollBar = new ScrollBarHelper(); 3350 this._addEventListeners(); 3351 } 3352 // Getters 3353 static get Default() { 3354 return Default$6; 3355 } 3356 static get DefaultType() { 3357 return DefaultType$6; 3358 } 3359 static get NAME() { 3360 return NAME$7; 3361 } 3362 // Public 3363 toggle(relatedTarget) { 3364 return this._isShown ? this.hide() : this.show(relatedTarget); 3365 } 3366 show(relatedTarget) { 3367 if (this._isShown || this._isTransitioning) { 3368 return; 3369 } 3370 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, { 3371 relatedTarget 3372 }); 3373 if (showEvent.defaultPrevented) { 3374 return; 3375 } 3376 this._isShown = true; 3377 this._isTransitioning = true; 3378 this._scrollBar.hide(); 3379 document.body.classList.add(CLASS_NAME_OPEN); 3380 this._adjustDialog(); 3381 this._backdrop.show(() => this._showElement(relatedTarget)); 3382 } 3383 hide() { 3384 if (!this._isShown || this._isTransitioning) { 3385 return; 3386 } 3387 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4); 3388 if (hideEvent.defaultPrevented) { 3389 return; 3390 } 3391 this._isShown = false; 3392 this._isTransitioning = true; 3393 this._focustrap.deactivate(); 3394 this._element.classList.remove(CLASS_NAME_SHOW$4); 3395 this._queueCallback(() => this._hideModal(), this._element, this._isAnimated()); 3396 } 3397 dispose() { 3398 for (const htmlElement of [window, this._dialog]) { 3399 EventHandler.off(htmlElement, EVENT_KEY$4); 3400 } 3401 this._backdrop.dispose(); 3402 this._focustrap.deactivate(); 3403 super.dispose(); 3404 } 3405 handleUpdate() { 3406 this._adjustDialog(); 3407 } 3408 // Private 3409 _initializeBackDrop() { 3410 return new Backdrop({ 3411 isVisible: Boolean(this._config.backdrop), 3412 // 'static' option will be translated to true, and booleans will keep their value, 3413 isAnimated: this._isAnimated() 3414 }); 3415 } 3416 _initializeFocusTrap() { 3417 return new FocusTrap({ 3418 trapElement: this._element 3419 }); 3420 } 3421 _showElement(relatedTarget) { 3422 if (!document.body.contains(this._element)) { 3423 document.body.append(this._element); 3424 } 3425 this._element.style.display = "block"; 3426 this._element.removeAttribute("aria-hidden"); 3427 this._element.setAttribute("aria-modal", true); 3428 this._element.setAttribute("role", "dialog"); 3429 this._element.scrollTop = 0; 3430 const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog); 3431 if (modalBody) { 3432 modalBody.scrollTop = 0; 3433 } 3434 reflow(this._element); 3435 this._element.classList.add(CLASS_NAME_SHOW$4); 3436 const transitionComplete = () => { 3437 if (this._config.focus) { 3438 this._focustrap.activate(); 3439 } 3440 this._isTransitioning = false;
vendor: 10,266 bytes, lines 3441-3728
3441 EventHandler.trigger(this._element, EVENT_SHOWN$4, { 3442 relatedTarget 3443 }); 3444 }; 3445 this._queueCallback(transitionComplete, this._dialog, this._isAnimated()); 3446 } 3447 _addEventListeners() { 3448 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, (event) => { 3449 if (event.key !== ESCAPE_KEY$1) { 3450 return; 3451 } 3452 if (this._config.keyboard) { 3453 event.preventDefault(); 3454 this.hide(); 3455 return; 3456 } 3457 this._triggerBackdropTransition(); 3458 }); 3459 EventHandler.on(window, EVENT_RESIZE$1, () => { 3460 if (this._isShown && !this._isTransitioning) { 3461 this._adjustDialog(); 3462 } 3463 }); 3464 EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, (event) => { 3465 EventHandler.one(this._element, EVENT_CLICK_DISMISS, (event2) => { 3466 if (this._element !== event.target || this._element !== event2.target) { 3467 return; 3468 } 3469 if (this._config.backdrop === "static") { 3470 this._triggerBackdropTransition(); 3471 return; 3472 } 3473 if (this._config.backdrop) { 3474 this.hide(); 3475 } 3476 }); 3477 }); 3478 } 3479 _hideModal() { 3480 this._element.style.display = "none"; 3481 this._element.setAttribute("aria-hidden", true); 3482 this._element.removeAttribute("aria-modal"); 3483 this._element.removeAttribute("role"); 3484 this._isTransitioning = false; 3485 this._backdrop.hide(() => { 3486 document.body.classList.remove(CLASS_NAME_OPEN); 3487 this._resetAdjustments(); 3488 this._scrollBar.reset(); 3489 EventHandler.trigger(this._element, EVENT_HIDDEN$4); 3490 }); 3491 } 3492 _isAnimated() { 3493 return this._element.classList.contains(CLASS_NAME_FADE$3); 3494 } 3495 _triggerBackdropTransition() { 3496 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1); 3497 if (hideEvent.defaultPrevented) { 3498 return; 3499 } 3500 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 3501 const initialOverflowY = this._element.style.overflowY; 3502 if (initialOverflowY === "hidden" || this._element.classList.contains(CLASS_NAME_STATIC)) { 3503 return; 3504 } 3505 if (!isModalOverflowing) { 3506 this._element.style.overflowY = "hidden"; 3507 } 3508 this._element.classList.add(CLASS_NAME_STATIC); 3509 this._queueCallback(() => { 3510 this._element.classList.remove(CLASS_NAME_STATIC); 3511 this._queueCallback(() => { 3512 this._element.style.overflowY = initialOverflowY; 3513 }, this._dialog); 3514 }, this._dialog); 3515 this._element.focus(); 3516 } 3517 /** 3518 * The following methods are used to handle overflowing modals 3519 */ 3520 _adjustDialog() { 3521 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 3522 const scrollbarWidth = this._scrollBar.getWidth(); 3523 const isBodyOverflowing = scrollbarWidth > 0; 3524 if (isBodyOverflowing && !isModalOverflowing) { 3525 const property = isRTL() ? "paddingLeft" : "paddingRight"; 3526 this._element.style[property] = `${scrollbarWidth}px`; 3527 } 3528 if (!isBodyOverflowing && isModalOverflowing) { 3529 const property = isRTL() ? "paddingRight" : "paddingLeft"; 3530 this._element.style[property] = `${scrollbarWidth}px`; 3531 } 3532 } 3533 _resetAdjustments() { 3534 this._element.style.paddingLeft = ""; 3535 this._element.style.paddingRight = ""; 3536 } 3537 // Static 3538 static jQueryInterface(config, relatedTarget) { 3539 return this.each(function() { 3540 const data = Modal.getOrCreateInstance(this, config); 3541 if (typeof config !== "string") { 3542 return; 3543 } 3544 if (typeof data[config] === "undefined") { 3545 throw new TypeError(`No method named "${config}"`); 3546 } 3547 data[config](relatedTarget); 3548 }); 3549 } 3550} 3551EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function(event) { 3552 const target = getElementFromSelector(this); 3553 if (["A", "AREA"].includes(this.tagName)) { 3554 event.preventDefault(); 3555 } 3556 EventHandler.one(target, EVENT_SHOW$4, (showEvent) => { 3557 if (showEvent.defaultPrevented) { 3558 return; 3559 } 3560 EventHandler.one(target, EVENT_HIDDEN$4, () => { 3561 if (isVisible(this)) { 3562 this.focus(); 3563 } 3564 }); 3565 }); 3566 const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1); 3567 if (alreadyOpen) { 3568 Modal.getInstance(alreadyOpen).hide(); 3569 } 3570 const data = Modal.getOrCreateInstance(target); 3571 data.toggle(this); 3572}); 3573enableDismissTrigger(Modal); 3574defineJQueryPlugin(Modal); 3575const NAME$6 = "offcanvas"; 3576const DATA_KEY$3 = "bs.offcanvas"; 3577const EVENT_KEY$3 = `.${DATA_KEY$3}`; 3578const DATA_API_KEY$1 = ".data-api"; 3579const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`; 3580const ESCAPE_KEY = "Escape"; 3581const CLASS_NAME_SHOW$3 = "show"; 3582const CLASS_NAME_SHOWING$1 = "showing"; 3583const CLASS_NAME_HIDING = "hiding"; 3584const CLASS_NAME_BACKDROP = "offcanvas-backdrop"; 3585const OPEN_SELECTOR = ".offcanvas.show"; 3586const EVENT_SHOW$3 = `show${EVENT_KEY$3}`; 3587const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`; 3588const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`; 3589const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`; 3590const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`; 3591const EVENT_RESIZE$2 = `resize${EVENT_KEY$3}`; 3592const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`; 3593const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`; 3594const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]'; 3595const Default$5 = { 3596 backdrop: true, 3597 keyboard: true, 3598 scroll: false 3599}; 3600const DefaultType$5 = { 3601 backdrop: "(boolean|string)", 3602 keyboard: "boolean", 3603 scroll: "boolean" 3604}; 3605class Offcanvas extends BaseComponent { 3606 constructor(element, config) { 3607 super(element, config); 3608 this._isShown = false; 3609 this._backdrop = this._initializeBackDrop(); 3610 this._focustrap = this._initializeFocusTrap(); 3611 this._addEventListeners(); 3612 } 3613 // Getters 3614 static get Default() { 3615 return Default$5; 3616 } 3617 static get DefaultType() { 3618 return DefaultType$5; 3619 } 3620 static get NAME() { 3621 return NAME$6; 3622 } 3623 // Public 3624 toggle(relatedTarget) { 3625 return this._isShown ? this.hide() : this.show(relatedTarget); 3626 } 3627 show(relatedTarget) { 3628 if (this._isShown) { 3629 return; 3630 } 3631 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, { 3632 relatedTarget 3633 }); 3634 if (showEvent.defaultPrevented) { 3635 return; 3636 } 3637 this._isShown = true; 3638 this._backdrop.show(); 3639 if (!this._config.scroll) { 3640 new ScrollBarHelper().hide(); 3641 } 3642 this._element.setAttribute("aria-modal", true); 3643 this._element.setAttribute("role", "dialog"); 3644 this._element.classList.add(CLASS_NAME_SHOWING$1); 3645 const completeCallBack = () => { 3646 if (!this._config.scroll || this._config.backdrop) { 3647 this._focustrap.activate(); 3648 } 3649 this._element.classList.add(CLASS_NAME_SHOW$3); 3650 this._element.classList.remove(CLASS_NAME_SHOWING$1); 3651 EventHandler.trigger(this._element, EVENT_SHOWN$3, { 3652 relatedTarget 3653 }); 3654 }; 3655 this._queueCallback(completeCallBack, this._element, true); 3656 } 3657 hide() { 3658 if (!this._isShown) { 3659 return; 3660 } 3661 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3); 3662 if (hideEvent.defaultPrevented) { 3663 return; 3664 } 3665 this._focustrap.deactivate(); 3666 this._element.blur(); 3667 this._isShown = false; 3668 this._element.classList.add(CLASS_NAME_HIDING); 3669 this._backdrop.hide(); 3670 const completeCallback = () => { 3671 this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING); 3672 this._element.removeAttribute("aria-modal"); 3673 this._element.removeAttribute("role"); 3674 if (!this._config.scroll) { 3675 new ScrollBarHelper().reset(); 3676 } 3677 EventHandler.trigger(this._element, EVENT_HIDDEN$3); 3678 }; 3679 this._queueCallback(completeCallback, this._element, true); 3680 } 3681 dispose() { 3682 this._backdrop.dispose(); 3683 this._focustrap.deactivate(); 3684 super.dispose(); 3685 } 3686 // Private 3687 _initializeBackDrop() { 3688 const clickCallback = () => { 3689 if (this._config.backdrop === "static") { 3690 EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 3691 return; 3692 } 3693 this.hide(); 3694 }; 3695 const isVisible2 = Boolean(this._config.backdrop); 3696 return new Backdrop({ 3697 className: CLASS_NAME_BACKDROP, 3698 isVisible: isVisible2, 3699 isAnimated: true, 3700 rootElement: this._element.parentNode, 3701 clickCallback: isVisible2 ? clickCallback : null 3702 }); 3703 } 3704 _initializeFocusTrap() { 3705 return new FocusTrap({ 3706 trapElement: this._element 3707 }); 3708 } 3709 _addEventListeners() { 3710 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => { 3711 if (event.key !== ESCAPE_KEY) { 3712 return; 3713 } 3714 if (!this._config.keyboard) { 3715 EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 3716 return; 3717 } 3718 this.hide(); 3719 }); 3720 } 3721 // Static 3722 static jQueryInterface(config) { 3723 return this.each(function() { 3724 const data = Offcanvas.getOrCreateInstance(this, config); 3725 if (typeof config !== "string") { 3726 return; 3727 } 3728 if (data[config] === void 0 || config.startsWith("_") || config === "constructor") {
3729 throw new TypeError(`No method named "${config}"`); 3730 } 3731 data[config](this); 3732 }); 3733 } 3734} 3735EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function(event) { 3736 const target = getElementFromSelector(this); 3737 if (["A", "AREA"].includes(this.tagName)) { 3738 event.preventDefault(); 3739 } 3740 if (isDisabled(this)) { 3741 return; 3742 } 3743 EventHandler.one(target, EVENT_HIDDEN$3, () => { 3744 if (isVisible(this)) { 3745 this.focus(); 3746 } 3747 }); 3748 const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR); 3749 if (alreadyOpen && alreadyOpen !== target) { 3750 Offcanvas.getInstance(alreadyOpen).hide(); 3751 } 3752 const data = Offcanvas.getOrCreateInstance(target); 3753 data.toggle(this); 3754}); 3755EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => { 3756 for (const selector of SelectorEngine.find(OPEN_SELECTOR)) { 3757 Offcanvas.getOrCreateInstance(selector).show(); 3758 } 3759}); 3760EventHandler.on(window, EVENT_RESIZE$2, () => { 3761 for (const element of SelectorEngine.find("[aria-modal][class*=show][class*=offcanvas-]")) { 3762 if (getComputedStyle(element).position !== "fixed") { 3763 Offcanvas.getOrCreateInstance(element).hide(); 3764 } 3765 } 3766}); 3767enableDismissTrigger(Offcanvas); 3768defineJQueryPlugin(Offcanvas); 3769const uriAttributes = /* @__PURE__ */ new Set(["background", "cite", "href", "itemtype", "longdesc", "poster", "src", "xlink:href"]); 3770const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 3771const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i; 3772const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; 3773const allowedAttribute = (attribute, allowedAttributeList) => { 3774 const attributeName = attribute.nodeName.toLowerCase(); 3775 if (allowedAttributeList.includes(attributeName)) { 3776 if (uriAttributes.has(attributeName)) { 3777 return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue)); 3778 } 3779 return true; 3780 } 3781 return allowedAttributeList.filter((attributeRegex) => attributeRegex instanceof RegExp).some((regex) => regex.test(attributeName)); 3782}; 3783const DefaultAllowlist = { 3784 // Global attributes allowed on any supplied element below. 3785 "*": ["class", "dir", "id", "lang", "role", ARIA_ATTRIBUTE_PATTERN], 3786 a: ["target", "href", "title", "rel"], 3787 area: [], 3788 b: [], 3789 br: [], 3790 col: [], 3791 code: [], 3792 div: [], 3793 em: [], 3794 hr: [], 3795 h1: [], 3796 h2: [], 3797 h3: [], 3798 h4: [], 3799 h5: [], 3800 h6: [], 3801 i: [], 3802 img: ["src", "srcset", "alt", "title", "width", "height"], 3803 li: [], 3804 ol: [], 3805 p: [], 3806 pre: [], 3807 s: [], 3808 small: [], 3809 span: [], 3810 sub: [], 3811 sup: [], 3812 strong: [], 3813 u: [], 3814 ul: [] 3815}; 3816function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) { 3817 if (!unsafeHtml.length) { 3818 return unsafeHtml; 3819 } 3820 if (sanitizeFunction && typeof sanitizeFunction === "function") { 3821 return sanitizeFunction(unsafeHtml); 3822 } 3823 const domParser = new window.DOMParser(); 3824 const createdDocument = domParser.parseFromString(unsafeHtml, "text/html"); 3825 const elements = [].concat(...createdDocument.body.querySelectorAll("*")); 3826 for (const element of elements) { 3827 const elementName = element.nodeName.toLowerCase(); 3828 if (!Object.keys(allowList).includes(elementName)) { 3829 element.remove(); 3830 continue; 3831 } 3832 const attributeList = [].concat(...element.attributes); 3833 const allowedAttributes = [].concat(allowList["*"] || [], allowList[elementName] || []); 3834 for (const attribute of attributeList) { 3835 if (!allowedAttribute(attribute, allowedAttributes)) { 3836 element.removeAttribute(attribute.nodeName); 3837 } 3838 } 3839 } 3840 return createdDocument.body.innerHTML; 3841} 3842const NAME$5 = "TemplateFactory"; 3843const Default$4 = { 3844 allowList: DefaultAllowlist, 3845 content: {}, 3846 // { selector : text , selector2 : text2 , } 3847 extraClass: "", 3848 html: false, 3849 sanitize: true, 3850 sanitizeFn: null, 3851 template: "<div></div>" 3852}; 3853const DefaultType$4 = { 3854 allowList: "object", 3855 content: "object", 3856 extraClass: "(string|function)", 3857 html: "boolean", 3858 sanitize: "boolean", 3859 sanitizeFn: "(null|function)", 3860 template: "string" 3861}; 3862const DefaultContentType = { 3863 entry: "(string|element|function|null)", 3864 selector: "(string|element)" 3865}; 3866class TemplateFactory extends Config { 3867 constructor(config) { 3868 super(); 3869 this._config = this._getConfig(config); 3870 } 3871 // Getters 3872 static get Default() { 3873 return Default$4; 3874 } 3875 static get DefaultType() { 3876 return DefaultType$4; 3877 } 3878 static get NAME() { 3879 return NAME$5; 3880 } 3881 // Public 3882 getContent() { 3883 return Object.values(this._config.content).map((config) =>
vendor: 5,493 bytes, lines 3883-4058
3883 this._resolvePossibleFunction(config)).filter(Boolean); 3884 } 3885 hasContent() { 3886 return this.getContent().length > 0; 3887 } 3888 changeContent(content) { 3889 this._checkContent(content); 3890 this._config.content = { 3891 ...this._config.content, 3892 ...content 3893 }; 3894 return this; 3895 } 3896 toHtml() { 3897 const templateWrapper = document.createElement("div"); 3898 templateWrapper.innerHTML = this._maybeSanitize(this._config.template); 3899 for (const [selector, text] of Object.entries(this._config.content)) { 3900 this._setContent(templateWrapper, text, selector); 3901 } 3902 const template = templateWrapper.children[0]; 3903 const extraClass = this._resolvePossibleFunction(this._config.extraClass); 3904 if (extraClass) { 3905 template.classList.add(...extraClass.split(" ")); 3906 } 3907 return template; 3908 } 3909 // Private 3910 _typeCheckConfig(config) { 3911 super._typeCheckConfig(config); 3912 this._checkContent(config.content); 3913 } 3914 _checkContent(arg) { 3915 for (const [selector, content] of Object.entries(arg)) { 3916 super._typeCheckConfig({ 3917 selector, 3918 entry: content 3919 }, DefaultContentType); 3920 } 3921 } 3922 _setContent(template, content, selector) { 3923 const templateElement = SelectorEngine.findOne(selector, template); 3924 if (!templateElement) { 3925 return; 3926 } 3927 content = this._resolvePossibleFunction(content); 3928 if (!content) { 3929 templateElement.remove(); 3930 return; 3931 } 3932 if (isElement(content)) { 3933 this._putElementInTemplate(getElement(content), templateElement); 3934 return; 3935 } 3936 if (this._config.html) { 3937 templateElement.innerHTML = this._maybeSanitize(content); 3938 return; 3939 } 3940 templateElement.textContent = content; 3941 } 3942 _maybeSanitize(arg) { 3943 return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg; 3944 } 3945 _resolvePossibleFunction(arg) { 3946 return typeof arg === "function" ? arg(this) : arg; 3947 } 3948 _putElementInTemplate(element, templateElement) { 3949 if (this._config.html) { 3950 templateElement.innerHTML = ""; 3951 templateElement.append(element); 3952 return; 3953 } 3954 templateElement.textContent = element.textContent; 3955 } 3956} 3957const NAME$4 = "tooltip"; 3958const DISALLOWED_ATTRIBUTES = /* @__PURE__ */ new Set(["sanitize", "allowList", "sanitizeFn"]); 3959const CLASS_NAME_FADE$2 = "fade"; 3960const CLASS_NAME_MODAL = "modal"; 3961const CLASS_NAME_SHOW$2 = "show"; 3962const SELECTOR_TOOLTIP_INNER = ".tooltip-inner"; 3963const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`; 3964const EVENT_MODAL_HIDE = "hide.bs.modal"; 3965const TRIGGER_HOVER = "hover"; 3966const TRIGGER_FOCUS = "focus"; 3967const TRIGGER_CLICK = "click"; 3968const TRIGGER_MANUAL = "manual"; 3969const EVENT_HIDE$2 = "hide"; 3970const EVENT_HIDDEN$2 = "hidden"; 3971const EVENT_SHOW$2 = "show"; 3972const EVENT_SHOWN$2 = "shown"; 3973const EVENT_INSERTED = "inserted"; 3974const EVENT_CLICK$1 = "click"; 3975const EVENT_FOCUSIN$1 = "focusin"; 3976const EVENT_FOCUSOUT$1 = "focusout"; 3977const EVENT_MOUSEENTER = "mouseenter"; 3978const EVENT_MOUSELEAVE = "mouseleave"; 3979const AttachmentMap = { 3980 AUTO: "auto", 3981 TOP: "top", 3982 RIGHT: isRTL() ? "left" : "right", 3983 BOTTOM: "bottom", 3984 LEFT: isRTL() ? "right" : "left" 3985}; 3986const Default$3 = { 3987 allowList: DefaultAllowlist, 3988 animation: true, 3989 boundary: "clippingParents", 3990 container: false, 3991 customClass: "", 3992 delay: 0, 3993 fallbackPlacements: ["top", "right", "bottom", "left"], 3994 html: false, 3995 offset: [0, 0], 3996 placement: "top", 3997 popperConfig: null, 3998 sanitize: true, 3999 sanitizeFn: null, 4000 selector: false, 4001 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', 4002 title: "", 4003 trigger: "hover focus" 4004}; 4005const DefaultType$3 = { 4006 allowList: "object", 4007 animation: "boolean", 4008 boundary: "(string|element)", 4009 container: "(string|element|boolean)", 4010 customClass: "(string|function)", 4011 delay: "(number|object)", 4012 fallbackPlacements: "array", 4013 html: "boolean", 4014 offset: "(array|string|function)", 4015 placement: "(string|function)", 4016 popperConfig: "(null|object|function)", 4017 sanitize: "boolean", 4018 sanitizeFn: "(null|function)", 4019 selector: "(string|boolean)", 4020 template: "string", 4021 title: "(string|element|function)", 4022 trigger: "string" 4023}; 4024class Tooltip extends BaseComponent { 4025 constructor(element, config) { 4026 if (typeof Popper === "undefined") { 4027 throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)"); 4028 } 4029 super(element, config); 4030 this._isEnabled = true; 4031 this._timeout = 0; 4032 this._isHovered = null; 4033 this._activeTrigger = {}; 4034 this._popper = null; 4035 this._templateFactory = null; 4036 this._newContent = null; 4037 this.tip = null; 4038 this._setListeners(); 4039 if (!this._config.selector) { 4040 this._fixTitle(); 4041 } 4042 } 4043 // Getters 4044 static get Default() { 4045 return Default$3; 4046 } 4047 static get DefaultType() { 4048 return DefaultType$3; 4049 } 4050 static get NAME() { 4051 return NAME$4; 4052 } 4053 // Public 4054 enable() { 4055 this._isEnabled = true; 4056 } 4057 disable() { 4058 this._isEnabled = false;
vendor: 10,575 bytes, lines 4059-4335
4059 } 4060 toggleEnabled() { 4061 this._isEnabled = !this._isEnabled; 4062 } 4063 toggle() { 4064 if (!this._isEnabled) { 4065 return; 4066 } 4067 this._activeTrigger.click = !this._activeTrigger.click; 4068 if (this._isShown()) { 4069 this._leave(); 4070 return; 4071 } 4072 this._enter(); 4073 } 4074 dispose() { 4075 clearTimeout(this._timeout); 4076 EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 4077 if (this._element.getAttribute("data-bs-original-title")) { 4078 this._element.setAttribute("title", this._element.getAttribute("data-bs-original-title")); 4079 } 4080 this._disposePopper(); 4081 super.dispose(); 4082 } 4083 show() { 4084 if (this._element.style.display === "none") { 4085 throw new Error("Please use show on visible elements"); 4086 } 4087 if (!(this._isWithContent() && this._isEnabled)) { 4088 return; 4089 } 4090 const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2)); 4091 const shadowRoot = findShadowRoot(this._element); 4092 const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element); 4093 if (showEvent.defaultPrevented || !isInTheDom) { 4094 return; 4095 } 4096 this._disposePopper(); 4097 const tip = this._getTipElement(); 4098 this._element.setAttribute("aria-describedby", tip.getAttribute("id")); 4099 const { 4100 container 4101 } = this._config; 4102 if (!this._element.ownerDocument.documentElement.contains(this.tip)) { 4103 container.append(tip); 4104 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED)); 4105 } 4106 this._popper = this._createPopper(tip); 4107 tip.classList.add(CLASS_NAME_SHOW$2); 4108 if ("ontouchstart" in document.documentElement) { 4109 for (const element of [].concat(...document.body.children)) { 4110 EventHandler.on(element, "mouseover", noop$1); 4111 } 4112 } 4113 const complete = () => { 4114 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2)); 4115 if (this._isHovered === false) { 4116 this._leave(); 4117 } 4118 this._isHovered = false; 4119 }; 4120 this._queueCallback(complete, this.tip, this._isAnimated()); 4121 } 4122 hide() { 4123 if (!this._isShown()) { 4124 return; 4125 } 4126 const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2)); 4127 if (hideEvent.defaultPrevented) { 4128 return; 4129 } 4130 const tip = this._getTipElement(); 4131 tip.classList.remove(CLASS_NAME_SHOW$2); 4132 if ("ontouchstart" in document.documentElement) { 4133 for (const element of [].concat(...document.body.children)) { 4134 EventHandler.off(element, "mouseover", noop$1); 4135 } 4136 } 4137 this._activeTrigger[TRIGGER_CLICK] = false; 4138 this._activeTrigger[TRIGGER_FOCUS] = false; 4139 this._activeTrigger[TRIGGER_HOVER] = false; 4140 this._isHovered = null; 4141 const complete = () => { 4142 if (this._isWithActiveTrigger()) { 4143 return; 4144 } 4145 if (!this._isHovered) { 4146 this._disposePopper(); 4147 } 4148 this._element.removeAttribute("aria-describedby"); 4149 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2)); 4150 }; 4151 this._queueCallback(complete, this.tip, this._isAnimated()); 4152 } 4153 update() { 4154 if (this._popper) { 4155 this._popper.update(); 4156 } 4157 } 4158 // Protected 4159 _isWithContent() { 4160 return Boolean(this._getTitle()); 4161 } 4162 _getTipElement() { 4163 if (!this.tip) { 4164 this.tip = this._createTipElement(this._newContent || this._getContentForTemplate()); 4165 } 4166 return this.tip; 4167 } 4168 _createTipElement(content) { 4169 const tip = this._getTemplateFactory(content).toHtml(); 4170 if (!tip) { 4171 return null; 4172 } 4173 tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); 4174 tip.classList.add(`bs-${this.constructor.NAME}-auto`); 4175 const tipId = getUID(this.constructor.NAME).toString(); 4176 tip.setAttribute("id", tipId); 4177 if (this._isAnimated()) { 4178 tip.classList.add(CLASS_NAME_FADE$2); 4179 } 4180 return tip; 4181 } 4182 setContent(content) { 4183 this._newContent = content; 4184 if (this._isShown()) { 4185 this._disposePopper(); 4186 this.show(); 4187 } 4188 } 4189 _getTemplateFactory(content) { 4190 if (this._templateFactory) { 4191 this._templateFactory.changeContent(content); 4192 } else { 4193 this._templateFactory = new TemplateFactory({ 4194 ...this._config, 4195 // the `content` var has to be after `this._config` 4196 // to override config.content in case of popover 4197 content, 4198 extraClass: this._resolvePossibleFunction(this._config.customClass) 4199 }); 4200 } 4201 return this._templateFactory; 4202 } 4203 _getContentForTemplate() { 4204 return { 4205 [SELECTOR_TOOLTIP_INNER]: this._getTitle() 4206 }; 4207 } 4208 _getTitle() { 4209 return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute("data-bs-original-title"); 4210 } 4211 // Private 4212 _initializeOnDelegatedTarget(event) { 4213 return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig()); 4214 } 4215 _isAnimated() { 4216 return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2); 4217 } 4218 _isShown() { 4219 return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2); 4220 } 4221 _createPopper(tip) { 4222 const placement = typeof this._config.placement === "function" ? this._config.placement.call(this, tip, this._element) : this._config.placement; 4223 const attachment = AttachmentMap[placement.toUpperCase()]; 4224 return createPopper(this._element, tip, this._getPopperConfig(attachment)); 4225 } 4226 _getOffset() { 4227 const { 4228 offset: offset2 4229 } = this._config; 4230 if (typeof offset2 === "string") { 4231 return offset2.split(",").map((value) => Number.parseInt(value, 10)); 4232 } 4233 if (typeof offset2 === "function") { 4234 return (popperData) => offset2(popperData, this._element); 4235 } 4236 return offset2; 4237 } 4238 _resolvePossibleFunction(arg) { 4239 return typeof arg === "function" ? arg.call(this._element) : arg; 4240 } 4241 _getPopperConfig(attachment) { 4242 const defaultBsPopperConfig = { 4243 placement: attachment, 4244 modifiers: [{ 4245 name: "flip", 4246 options: { 4247 fallbackPlacements: this._config.fallbackPlacements 4248 } 4249 }, { 4250 name: "offset", 4251 options: { 4252 offset: this._getOffset() 4253 } 4254 }, { 4255 name: "preventOverflow", 4256 options: { 4257 boundary: this._config.boundary 4258 } 4259 }, { 4260 name: "arrow", 4261 options: { 4262 element: `.${this.constructor.NAME}-arrow` 4263 } 4264 }, { 4265 name: "preSetPlacement", 4266 enabled: true, 4267 phase: "beforeMain", 4268 fn: (data) => { 4269 this._getTipElement().setAttribute("data-popper-placement", data.state.placement); 4270 } 4271 }] 4272 }; 4273 return { 4274 ...defaultBsPopperConfig, 4275 ...typeof this._config.popperConfig === "function" ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig 4276 }; 4277 } 4278 _setListeners() { 4279 const triggers = this._config.trigger.split(" "); 4280 for (const trigger of triggers) { 4281 if (trigger === "click") { 4282 EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, (event) => { 4283 const context = this._initializeOnDelegatedTarget(event); 4284 context.toggle(); 4285 }); 4286 } else if (trigger !== TRIGGER_MANUAL) { 4287 const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1); 4288 const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1); 4289 EventHandler.on(this._element, eventIn, this._config.selector, (event) => { 4290 const context = this._initializeOnDelegatedTarget(event); 4291 context._activeTrigger[event.type === "focusin" ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; 4292 context._enter(); 4293 }); 4294 EventHandler.on(this._element, eventOut, this._config.selector, (event) => { 4295 const context = this._initializeOnDelegatedTarget(event); 4296 context._activeTrigger[event.type === "focusout" ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget); 4297 context._leave(); 4298 }); 4299 } 4300 } 4301 this._hideModalHandler = () => { 4302 if (this._element) { 4303 this.hide(); 4304 } 4305 }; 4306 EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 4307 } 4308 _fixTitle() { 4309 const title = this._element.getAttribute("title"); 4310 if (!title) { 4311 return; 4312 } 4313 if (!this._element.getAttribute("aria-label") && !this._element.textContent.trim()) { 4314 this._element.setAttribute("aria-label", title); 4315 } 4316 this._element.setAttribute("data-bs-original-title", title); 4317 this._element.removeAttribute("title"); 4318 } 4319 _enter() { 4320 if (this._isShown() || this._isHovered) { 4321 this._isHovered = true; 4322 return; 4323 } 4324 this._isHovered = true; 4325 this._setTimeout(() => { 4326 if (this._isHovered) { 4327 this.show(); 4328 } 4329 }, this._config.delay.show); 4330 } 4331 _leave() { 4332 if (this._isWithActiveTrigger()) { 4333 return; 4334 } 4335 this._isHovered = false;
4336 this._setTimeout(() => { 4337 if (!this._isHovered) { 4338 this.hide(); 4339 } 4340 }, this._config.delay.hide); 4341 } 4342 _setTimeout(handler, timeout) { 4343 clearTimeout(this._timeout); 4344 this._timeout = setTimeout(handler, timeout); 4345 } 4346 _isWithActiveTrigger() { 4347 return Object.values(this._activeTrigger).includes(true); 4348 } 4349 _getConfig(config) { 4350 const dataAttributes = Manipulator.getDataAttributes(this._element); 4351 for (const dataAttribute of Object.keys(dataAttributes)) { 4352 if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) { 4353 delete dataAttributes[dataAttribute]; 4354 } 4355 } 4356 config = { 4357 ...dataAttributes, 4358 ...typeof config === "object" && config ? config : {} 4359 }; 4360 config = this._mergeConfigObj(config); 4361 config = this._configAfterMerge(config); 4362 this._typeCheckConfig(config); 4363 return config; 4364 } 4365 _configAfterMerge(config) { 4366 config.container = config.container === false ? document.body : getElement(config.container); 4367 if (typeof config.delay === "number") { 4368 config.delay = { 4369 show: config.delay, 4370 hide: config.delay 4371 }; 4372 } 4373 if (typeof config.title === "number") { 4374 config.title = config.title.toString(); 4375 } 4376 if (typeof config.content === "number") { 4377 config.content = config.content.toString(); 4378 } 4379 return config; 4380 } 4381 _getDelegateConfig() { 4382 const config = {}; 4383 for (const key in this._config) { 4384 if (this.constructor.Default[key] !== this._config[key]) { 4385 config[key] = this._config[key]; 4386 } 4387 } 4388 config.selector = false; 4389 config.trigger = "manual"; 4390 return config; 4391 } 4392 _disposePopper() { 4393 if (this._popper) { 4394 this._popper.destroy(); 4395 this._popper = null; 4396 } 4397 if (this.tip) { 4398 this.tip.remove(); 4399 this.tip = null; 4400 } 4401 } 4402 // Static 4403 static jQueryInterface(config) { 4404 return this.each(function() { 4405 const data = Tooltip.getOrCreateInstance(this, config); 4406 if (typeof config !== "string") { 4407 return; 4408 } 4409 if (typeof data[config] === "undefined") { 4410 throw new TypeError(`No method named "${config}"`); 4411 } 4412 data[config](); 4413 }); 4414 } 4415} 4416defineJQueryPlugin(Tooltip); 4417const NAME$3 = "popover"; 4418const SELECTOR_TITLE = ".popover-header"; 4419const SELECTOR_CONTENT = ".popover-body"; 4420const Default$2 = { 4421 ...Tooltip.Default, 4422 content: "", 4423 offset: [0, 8], 4424 placement: "right", 4425 template: '<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>', 4426 trigger: "click" 4427}; 4428const DefaultType$2 = { 4429 ...Tooltip.DefaultType, 4430 content: "(null|string|element|function)" 4431}; 4432class Popover extends Tooltip { 4433 // Getters 4434 static get Default() { 4435 return Default$2; 4436 } 4437 static get DefaultType() { 4438 return DefaultType$2; 4439 } 4440 static get NAME() { 4441 return NAME$3; 4442 } 4443 // Overrides 4444 _isWithContent() { 4445 return this._getTitle() || this._getContent(); 4446 } 4447 // Private 4448 _getContentForTemplate() { 4449 return { 4450 [SELECTOR_TITLE]: this._getTitle(), 4451 [SELECTOR_CONTENT]: this._getContent() 4452 }; 4453 } 4454 _getContent() { 4455 return this._resolvePossibleFunction(this._config.content); 4456 } 4457 // Static 4458 static jQueryInterface(config) { 4459 return this.each(function() { 4460 const data = Popover.getOrCreateInstance(this, config); 4461 if (typeof config !== "string") { 4462 return; 4463 } 4464 if (typeof data[config] === "undefined") { 4465 throw new TypeError(`No method named "${config}"`); 4466 } 4467 data[config](); 4468 }); 4469 } 4470} 4471defineJQueryPlugin(Popover); 4472const NAME$2 = "scrollspy"; 4473const DATA_KEY$2 = "bs.scrollspy"; 4474const EVENT_KEY$2 = `.${DATA_KEY$2}`; 4475const DATA_API_KEY = ".data-api"; 4476const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`; 4477const EVENT_CLICK$2 = `click${EVENT_KEY$2}`; 4478const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;
vendor: 4,385 bytes, lines 4479-4595
4479const CLASS_NAME_DROPDOWN_ITEM = "dropdown-item"; 4480const CLASS_NAME_ACTIVE$1 = "active"; 4481const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]'; 4482const SELECTOR_TARGET_LINKS = "[href]"; 4483const SELECTOR_NAV_LIST_GROUP = ".nav, .list-group"; 4484const SELECTOR_NAV_LINKS = ".nav-link"; 4485const SELECTOR_NAV_ITEMS = ".nav-item"; 4486const SELECTOR_LIST_ITEMS = ".list-group-item"; 4487const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`; 4488const SELECTOR_DROPDOWN = ".dropdown"; 4489const SELECTOR_DROPDOWN_TOGGLE$1 = ".dropdown-toggle"; 4490const Default$1 = { 4491 offset: null, 4492 // TODO: v6 @deprecated, keep it for backwards compatibility reasons 4493 rootMargin: "0px 0px -25%", 4494 smoothScroll: false, 4495 target: null, 4496 threshold: [0.1, 0.5, 1] 4497}; 4498const DefaultType$1 = { 4499 offset: "(number|null)", 4500 // TODO v6 @deprecated, keep it for backwards compatibility reasons 4501 rootMargin: "string", 4502 smoothScroll: "boolean", 4503 target: "element", 4504 threshold: "array" 4505}; 4506class ScrollSpy extends BaseComponent { 4507 constructor(element, config) { 4508 super(element, config); 4509 this._targetLinks = /* @__PURE__ */ new Map(); 4510 this._observableSections = /* @__PURE__ */ new Map(); 4511 this._rootElement = getComputedStyle(this._element).overflowY === "visible" ? null : this._element; 4512 this._activeTarget = null; 4513 this._observer = null; 4514 this._previousScrollData = { 4515 visibleEntryTop: 0, 4516 parentScrollTop: 0 4517 }; 4518 this.refresh(); 4519 } 4520 // Getters 4521 static get Default() { 4522 return Default$1; 4523 } 4524 static get DefaultType() { 4525 return DefaultType$1; 4526 } 4527 static get NAME() { 4528 return NAME$2; 4529 } 4530 // Public 4531 refresh() { 4532 this._initializeTargetsAndObservables(); 4533 this._maybeEnableSmoothScroll(); 4534 if (this._observer) { 4535 this._observer.disconnect(); 4536 } else { 4537 this._observer = this._getNewObserver(); 4538 } 4539 for (const section of this._observableSections.values()) { 4540 this._observer.observe(section); 4541 } 4542 } 4543 dispose() { 4544 this._observer.disconnect(); 4545 super.dispose(); 4546 } 4547 // Private 4548 _configAfterMerge(config) { 4549 config.target = getElement(config.target) || document.body; 4550 config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin; 4551 if (typeof config.threshold === "string") { 4552 config.threshold = config.threshold.split(",").map((value) => Number.parseFloat(value)); 4553 } 4554 return config; 4555 } 4556 _maybeEnableSmoothScroll() { 4557 if (!this._config.smoothScroll) { 4558 return; 4559 } 4560 EventHandler.off(this._config.target, EVENT_CLICK$2); 4561 EventHandler.on(this._config.target, EVENT_CLICK$2, SELECTOR_TARGET_LINKS, (event) => { 4562 const observableSection = this._observableSections.get(event.target.hash); 4563 if (observableSection) { 4564 event.preventDefault(); 4565 const root = this._rootElement || window; 4566 const height = observableSection.offsetTop - this._element.offsetTop; 4567 if (root.scrollTo) { 4568 root.scrollTo({ 4569 top: height, 4570 behavior: "smooth" 4571 }); 4572 return; 4573 } 4574 root.scrollTop = height; 4575 } 4576 }); 4577 } 4578 _getNewObserver() { 4579 const options = { 4580 root: this._rootElement, 4581 threshold: this._config.threshold, 4582 rootMargin: this._config.rootMargin 4583 }; 4584 return new IntersectionObserver((entries) => this._observerCallback(entries), options); 4585 } 4586 // The logic of selection 4587 _observerCallback(entries) { 4588 const targetElement = (entry) => this._targetLinks.get(`#${entry.target.id}`); 4589 const activate = (entry) => { 4590 this._previousScrollData.visibleEntryTop = entry.target.offsetTop; 4591 this._process(targetElement(entry)); 4592 }; 4593 const parentScrollTop = (this._rootElement || document.documentElement).scrollTop; 4594 const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop; 4595 this._previousScrollData.parentScrollTop = parentScrollTop;
vendor: 5,125 bytes, lines 4596-4715
4596 for (const entry of entries) { 4597 if (!entry.isIntersecting) { 4598 this._activeTarget = null; 4599 this._clearActiveClass(targetElement(entry)); 4600 continue; 4601 } 4602 const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; 4603 if (userScrollsDown && entryIsLowerThanPrevious) { 4604 activate(entry); 4605 if (!parentScrollTop) { 4606 return; 4607 } 4608 continue; 4609 } 4610 if (!userScrollsDown && !entryIsLowerThanPrevious) { 4611 activate(entry); 4612 } 4613 } 4614 } 4615 _initializeTargetsAndObservables() { 4616 this._targetLinks = /* @__PURE__ */ new Map(); 4617 this._observableSections = /* @__PURE__ */ new Map(); 4618 const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target); 4619 for (const anchor of targetLinks) { 4620 if (!anchor.hash || isDisabled(anchor)) { 4621 continue; 4622 } 4623 const observableSection = SelectorEngine.findOne(anchor.hash, this._element); 4624 if (isVisible(observableSection)) { 4625 this._targetLinks.set(anchor.hash, anchor); 4626 this._observableSections.set(anchor.hash, observableSection); 4627 } 4628 } 4629 } 4630 _process(target) { 4631 if (this._activeTarget === target) { 4632 return; 4633 } 4634 this._clearActiveClass(this._config.target); 4635 this._activeTarget = target; 4636 target.classList.add(CLASS_NAME_ACTIVE$1); 4637 this._activateParents(target); 4638 EventHandler.trigger(this._element, EVENT_ACTIVATE, { 4639 relatedTarget: target 4640 }); 4641 } 4642 _activateParents(target) { 4643 if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { 4644 SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1); 4645 return; 4646 } 4647 for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) { 4648 for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) { 4649 item.classList.add(CLASS_NAME_ACTIVE$1); 4650 } 4651 } 4652 } 4653 _clearActiveClass(parent) { 4654 parent.classList.remove(CLASS_NAME_ACTIVE$1); 4655 const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent); 4656 for (const node of activeNodes) { 4657 node.classList.remove(CLASS_NAME_ACTIVE$1); 4658 } 4659 } 4660 // Static 4661 static jQueryInterface(config) { 4662 return this.each(function() { 4663 const data = ScrollSpy.getOrCreateInstance(this, config); 4664 if (typeof config !== "string") { 4665 return; 4666 } 4667 if (data[config] === void 0 || config.startsWith("_") || config === "constructor") { 4668 throw new TypeError(`No method named "${config}"`); 4669 } 4670 data[config](); 4671 }); 4672 } 4673} 4674EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => { 4675 for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) { 4676 ScrollSpy.getOrCreateInstance(spy); 4677 } 4678}); 4679defineJQueryPlugin(ScrollSpy); 4680const NAME$1 = "tab"; 4681const DATA_KEY$1 = "bs.tab"; 4682const EVENT_KEY$1 = `.${DATA_KEY$1}`; 4683const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`; 4684const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`; 4685const EVENT_SHOW$1 = `show${EVENT_KEY$1}`; 4686const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`; 4687const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`; 4688const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`; 4689const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`; 4690const ARROW_LEFT_KEY = "ArrowLeft"; 4691const ARROW_RIGHT_KEY = "ArrowRight"; 4692const ARROW_UP_KEY = "ArrowUp"; 4693const ARROW_DOWN_KEY = "ArrowDown"; 4694const CLASS_NAME_ACTIVE = "active"; 4695const CLASS_NAME_FADE$1 = "fade"; 4696const CLASS_NAME_SHOW$1 = "show"; 4697const CLASS_DROPDOWN = "dropdown"; 4698const SELECTOR_DROPDOWN_TOGGLE = ".dropdown-toggle"; 4699const SELECTOR_DROPDOWN_MENU = ".dropdown-menu"; 4700const NOT_SELECTOR_DROPDOWN_TOGGLE = ":not(.dropdown-toggle)"; 4701const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]'; 4702const SELECTOR_OUTER = ".nav-item, .list-group-item"; 4703const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`; 4704const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; 4705const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`; 4706const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`; 4707class Tab extends BaseComponent { 4708 constructor(element) { 4709 super(element); 4710 this._parent = this._element.closest(SELECTOR_TAB_PANEL); 4711 if (!this._parent) { 4712 return; 4713 } 4714 this._setInitialAttributes(this._parent, this._getChildren()); 4715 EventHandler.on(this._element, EVENT_KEYDOWN, (event) =>
vendor: 4,379 bytes, lines 4715-4832
4715 this._keydown(event)); 4716 } 4717 // Getters 4718 static get NAME() { 4719 return NAME$1; 4720 } 4721 // Public 4722 show() { 4723 const innerElem = this._element; 4724 if (this._elemIsActive(innerElem)) { 4725 return; 4726 } 4727 const active = this._getActiveElem(); 4728 const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, { 4729 relatedTarget: innerElem 4730 }) : null; 4731 const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, { 4732 relatedTarget: active 4733 }); 4734 if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) { 4735 return; 4736 } 4737 this._deactivate(active, innerElem); 4738 this._activate(innerElem, active); 4739 } 4740 // Private 4741 _activate(element, relatedElem) { 4742 if (!element) { 4743 return; 4744 } 4745 element.classList.add(CLASS_NAME_ACTIVE); 4746 this._activate(getElementFromSelector(element)); 4747 const complete = () => { 4748 if (element.getAttribute("role") !== "tab") { 4749 element.classList.add(CLASS_NAME_SHOW$1); 4750 return; 4751 } 4752 element.removeAttribute("tabindex"); 4753 element.setAttribute("aria-selected", true); 4754 this._toggleDropDown(element, true); 4755 EventHandler.trigger(element, EVENT_SHOWN$1, { 4756 relatedTarget: relatedElem 4757 }); 4758 }; 4759 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1)); 4760 } 4761 _deactivate(element, relatedElem) { 4762 if (!element) { 4763 return; 4764 } 4765 element.classList.remove(CLASS_NAME_ACTIVE); 4766 element.blur(); 4767 this._deactivate(getElementFromSelector(element)); 4768 const complete = () => { 4769 if (element.getAttribute("role") !== "tab") { 4770 element.classList.remove(CLASS_NAME_SHOW$1); 4771 return; 4772 } 4773 element.setAttribute("aria-selected", false); 4774 element.setAttribute("tabindex", "-1"); 4775 this._toggleDropDown(element, false); 4776 EventHandler.trigger(element, EVENT_HIDDEN$1, { 4777 relatedTarget: relatedElem 4778 }); 4779 }; 4780 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1)); 4781 } 4782 _keydown(event) { 4783 if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) { 4784 return; 4785 } 4786 event.stopPropagation(); 4787 event.preventDefault(); 4788 const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key); 4789 const nextActiveElement = getNextActiveElement(this._getChildren().filter((element) => !isDisabled(element)), event.target, isNext, true); 4790 if (nextActiveElement) { 4791 nextActiveElement.focus({ 4792 preventScroll: true 4793 }); 4794 Tab.getOrCreateInstance(nextActiveElement).show(); 4795 } 4796 } 4797 _getChildren() { 4798 return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent); 4799 } 4800 _getActiveElem() { 4801 return this._getChildren().find((child2) => this._elemIsActive(child2)) || null; 4802 } 4803 _setInitialAttributes(parent, children2) { 4804 this._setAttributeIfNotExists(parent, "role", "tablist"); 4805 for (const child2 of children2) { 4806 this._setInitialAttributesOnChild(child2); 4807 } 4808 } 4809 _setInitialAttributesOnChild(child2) { 4810 child2 = this._getInnerElement(child2); 4811 const isActive = this._elemIsActive(child2); 4812 const outerElem = this._getOuterElement(child2); 4813 child2.setAttribute("aria-selected", isActive); 4814 if (outerElem !== child2) { 4815 this._setAttributeIfNotExists(outerElem, "role", "presentation"); 4816 } 4817 if (!isActive) { 4818 child2.setAttribute("tabindex", "-1"); 4819 } 4820 this._setAttributeIfNotExists(child2, "role", "tab"); 4821 this._setInitialAttributesOnTargetPanel(child2); 4822 } 4823 _setInitialAttributesOnTargetPanel(child2) { 4824 const target = getElementFromSelector(child2); 4825 if (!target) { 4826 return; 4827 } 4828 this._setAttributeIfNotExists(target, "role", "tabpanel"); 4829 if (child2.id) { 4830 this._setAttributeIfNotExists(target, "aria-labelledby", `#${child2.id}`); 4831 } 4832 }
vendor: 6,789 bytes, lines 4833-5032
4833 _toggleDropDown(element, open) { 4834 const outerElem = this._getOuterElement(element); 4835 if (!outerElem.classList.contains(CLASS_DROPDOWN)) { 4836 return; 4837 } 4838 const toggle = (selector, className) => { 4839 const element2 = SelectorEngine.findOne(selector, outerElem); 4840 if (element2) { 4841 element2.classList.toggle(className, open); 4842 } 4843 }; 4844 toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE); 4845 toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1); 4846 outerElem.setAttribute("aria-expanded", open); 4847 } 4848 _setAttributeIfNotExists(element, attribute, value) { 4849 if (!element.hasAttribute(attribute)) { 4850 element.setAttribute(attribute, value); 4851 } 4852 } 4853 _elemIsActive(elem) { 4854 return elem.classList.contains(CLASS_NAME_ACTIVE); 4855 } 4856 // Try to get the inner element (usually the .nav-link) 4857 _getInnerElement(elem) { 4858 return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem); 4859 } 4860 // Try to get the outer element (usually the .nav-item) 4861 _getOuterElement(elem) { 4862 return elem.closest(SELECTOR_OUTER) || elem; 4863 } 4864 // Static 4865 static jQueryInterface(config) { 4866 return this.each(function() { 4867 const data = Tab.getOrCreateInstance(this); 4868 if (typeof config !== "string") { 4869 return; 4870 } 4871 if (data[config] === void 0 || config.startsWith("_") || config === "constructor") { 4872 throw new TypeError(`No method named "${config}"`); 4873 } 4874 data[config](); 4875 }); 4876 } 4877} 4878EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function(event) { 4879 if (["A", "AREA"].includes(this.tagName)) { 4880 event.preventDefault(); 4881 } 4882 if (isDisabled(this)) { 4883 return; 4884 } 4885 Tab.getOrCreateInstance(this).show(); 4886}); 4887EventHandler.on(window, EVENT_LOAD_DATA_API, () => { 4888 for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) { 4889 Tab.getOrCreateInstance(element); 4890 } 4891}); 4892defineJQueryPlugin(Tab); 4893const NAME = "toast"; 4894const DATA_KEY = "bs.toast"; 4895const EVENT_KEY = `.${DATA_KEY}`; 4896const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`; 4897const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`; 4898const EVENT_FOCUSIN = `focusin${EVENT_KEY}`; 4899const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`; 4900const EVENT_HIDE = `hide${EVENT_KEY}`; 4901const EVENT_HIDDEN$7 = `hidden${EVENT_KEY}`; 4902const EVENT_SHOW = `show${EVENT_KEY}`; 4903const EVENT_SHOWN = `shown${EVENT_KEY}`; 4904const CLASS_NAME_FADE = "fade"; 4905const CLASS_NAME_HIDE = "hide"; 4906const CLASS_NAME_SHOW = "show"; 4907const CLASS_NAME_SHOWING = "showing"; 4908const DefaultType = { 4909 animation: "boolean", 4910 autohide: "boolean", 4911 delay: "number" 4912}; 4913const Default = { 4914 animation: true, 4915 autohide: true, 4916 delay: 5e3 4917}; 4918class Toast extends BaseComponent { 4919 constructor(element, config) { 4920 super(element, config); 4921 this._timeout = null; 4922 this._hasMouseInteraction = false; 4923 this._hasKeyboardInteraction = false; 4924 this._setListeners(); 4925 } 4926 // Getters 4927 static get Default() { 4928 return Default; 4929 } 4930 static get DefaultType() { 4931 return DefaultType; 4932 } 4933 static get NAME() { 4934 return NAME; 4935 } 4936 // Public 4937 show() { 4938 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW); 4939 if (showEvent.defaultPrevented) { 4940 return; 4941 } 4942 this._clearTimeout(); 4943 if (this._config.animation) { 4944 this._element.classList.add(CLASS_NAME_FADE); 4945 } 4946 const complete = () => { 4947 this._element.classList.remove(CLASS_NAME_SHOWING); 4948 EventHandler.trigger(this._element, EVENT_SHOWN); 4949 this._maybeScheduleHide(); 4950 }; 4951 this._element.classList.remove(CLASS_NAME_HIDE); 4952 reflow(this._element); 4953 this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING); 4954 this._queueCallback(complete, this._element, this._config.animation); 4955 } 4956 hide() { 4957 if (!this.isShown()) { 4958 return; 4959 } 4960 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE); 4961 if (hideEvent.defaultPrevented) { 4962 return; 4963 } 4964 const complete = () => { 4965 this._element.classList.add(CLASS_NAME_HIDE); 4966 this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW); 4967 EventHandler.trigger(this._element, EVENT_HIDDEN$7); 4968 }; 4969 this._element.classList.add(CLASS_NAME_SHOWING); 4970 this._queueCallback(complete, this._element, this._config.animation); 4971 } 4972 dispose() { 4973 this._clearTimeout(); 4974 if (this.isShown()) { 4975 this._element.classList.remove(CLASS_NAME_SHOW); 4976 } 4977 super.dispose(); 4978 } 4979 isShown() { 4980 return this._element.classList.contains(CLASS_NAME_SHOW); 4981 } 4982 // Private 4983 _maybeScheduleHide() { 4984 if (!this._config.autohide) { 4985 return; 4986 } 4987 if (this._hasMouseInteraction || this._hasKeyboardInteraction) { 4988 return; 4989 } 4990 this._timeout = setTimeout(() => { 4991 this.hide(); 4992 }, this._config.delay); 4993 } 4994 _onInteraction(event, isInteracting) { 4995 switch (event.type) { 4996 case "mouseover": 4997 case "mouseout": { 4998 this._hasMouseInteraction = isInteracting; 4999 break; 5000 } 5001 case "focusin": 5002 case "focusout": { 5003 this._hasKeyboardInteraction = isInteracting; 5004 break; 5005 } 5006 } 5007 if (isInteracting) { 5008 this._clearTimeout(); 5009 return; 5010 } 5011 const nextElement = event.relatedTarget; 5012 if (this._element === nextElement || this._element.contains(nextElement)) { 5013 return; 5014 } 5015 this._maybeScheduleHide(); 5016 } 5017 _setListeners() { 5018 EventHandler.on(this._element, EVENT_MOUSEOVER, (event) => this._onInteraction(event, true)); 5019 EventHandler.on(this._element, EVENT_MOUSEOUT, (event) => this._onInteraction(event, false)); 5020 EventHandler.on(this._element, EVENT_FOCUSIN, (event) => this._onInteraction(event, true)); 5021 EventHandler.on(this._element, EVENT_FOCUSOUT, (event) => this._onInteraction(event, false)); 5022 } 5023 _clearTimeout() { 5024 clearTimeout(this._timeout); 5025 this._timeout = null; 5026 } 5027 // Static 5028 static jQueryInterface(config) { 5029 return this.each(function() { 5030 const data = Toast.getOrCreateInstance(this, config); 5031 if (typeof config === "string") { 5032 if (typeof data[config] === "undefined") {
vendor: 23,855 bytes, lines 5033-5789
5033 throw new TypeError(`No method named "${config}"`); 5034 } 5035 data[config](this); 5036 } 5037 }); 5038 } 5039} 5040enableDismissTrigger(Toast); 5041defineJQueryPlugin(Toast); 5042function _defineProperties(target, props) { 5043 for (var i = 0; i < props.length; i++) { 5044 var descriptor = props[i]; 5045 descriptor.enumerable = descriptor.enumerable || false; 5046 descriptor.configurable = true; 5047 if ("value" in descriptor) 5048 descriptor.writable = true; 5049 Object.defineProperty(target, descriptor.key, descriptor); 5050 } 5051} 5052function _createClass(Constructor, protoProps, staticProps) { 5053 if (protoProps) 5054 _defineProperties(Constructor.prototype, protoProps); 5055 if (staticProps) 5056 _defineProperties(Constructor, staticProps); 5057 Object.defineProperty(Constructor, "prototype", { writable: false }); 5058 return Constructor; 5059} 5060/*! 5061 * Splide.js 5062 * Version : 4.1.4 5063 * License : MIT 5064 * Copyright: 2022 Naotoshi Fujita 5065 */ 5066var MEDIA_PREFERS_REDUCED_MOTION = "(prefers-reduced-motion: reduce)"; 5067var CREATED = 1; 5068var MOUNTED = 2; 5069var IDLE = 3; 5070var MOVING = 4; 5071var SCROLLING = 5; 5072var DRAGGING = 6; 5073var DESTROYED = 7; 5074var STATES = { 5075 CREATED, 5076 MOUNTED, 5077 IDLE, 5078 MOVING, 5079 SCROLLING, 5080 DRAGGING, 5081 DESTROYED 5082}; 5083function empty(array) { 5084 array.length = 0; 5085} 5086function slice(arrayLike, start2, end2) { 5087 return Array.prototype.slice.call(arrayLike, start2, end2); 5088} 5089function apply(func) { 5090 return func.bind.apply(func, [null].concat(slice(arguments, 1))); 5091} 5092var nextTick = setTimeout; 5093var noop = function noop2() { 5094}; 5095function raf(func) { 5096 return requestAnimationFrame(func); 5097} 5098function typeOf(type, subject) { 5099 return typeof subject === type; 5100} 5101function isObject(subject) { 5102 return !isNull(subject) && typeOf("object", subject); 5103} 5104var isArray = Array.isArray; 5105var isFunction = apply(typeOf, "function"); 5106var isString = apply(typeOf, "string"); 5107var isUndefined = apply(typeOf, "undefined"); 5108function isNull(subject) { 5109 return subject === null; 5110} 5111function isHTMLElement(subject) { 5112 try { 5113 return subject instanceof (subject.ownerDocument.defaultView || window).HTMLElement; 5114 } catch (e) { 5115 return false; 5116 } 5117} 5118function toArray(value) { 5119 return isArray(value) ? value : [value]; 5120} 5121function forEach(values, iteratee) { 5122 toArray(values).forEach(iteratee); 5123} 5124function includes(array, value) { 5125 return array.indexOf(value) > -1; 5126} 5127function push(array, items) { 5128 array.push.apply(array, toArray(items)); 5129 return array; 5130} 5131function toggleClass(elm, classes, add) { 5132 if (elm) { 5133 forEach(classes, function(name) { 5134 if (name) { 5135 elm.classList[add ? "add" : "remove"](name); 5136 } 5137 }); 5138 } 5139} 5140function addClass(elm, classes) { 5141 toggleClass(elm, isString(classes) ? classes.split(" ") : classes, true); 5142} 5143function append(parent, children2) { 5144 forEach(children2, parent.appendChild.bind(parent)); 5145} 5146function before(nodes, ref) { 5147 forEach(nodes, function(node) { 5148 var parent = (ref || node).parentNode; 5149 if (parent) { 5150 parent.insertBefore(node, ref); 5151 } 5152 }); 5153} 5154function matches(elm, selector) { 5155 return isHTMLElement(elm) && (elm["msMatchesSelector"] || elm.matches).call(elm, selector); 5156} 5157function children(parent, selector) { 5158 var children2 = parent ? slice(parent.children) : []; 5159 return selector ? children2.filter(function(child2) { 5160 return matches(child2, selector); 5161 }) : children2; 5162} 5163function child(parent, selector) { 5164 return selector ? children(parent, selector)[0] : parent.firstElementChild; 5165} 5166var ownKeys = Object.keys; 5167function forOwn(object, iteratee, right2) { 5168 if (object) { 5169 (right2 ? ownKeys(object).reverse() : ownKeys(object)).forEach(function(key) { 5170 key !== "__proto__" && iteratee(object[key], key); 5171 }); 5172 } 5173 return object; 5174} 5175function assign(object) { 5176 slice(arguments, 1).forEach(function(source) { 5177 forOwn(source, function(value, key) { 5178 object[key] = source[key]; 5179 }); 5180 }); 5181 return object; 5182} 5183function merge(object) { 5184 slice(arguments, 1).forEach(function(source) { 5185 forOwn(source, function(value, key) { 5186 if (isArray(value)) { 5187 object[key] = value.slice(); 5188 } else if (isObject(value)) { 5189 object[key] = merge({}, isObject(object[key]) ? object[key] : {}, value); 5190 } else { 5191 object[key] = value; 5192 } 5193 }); 5194 }); 5195 return object; 5196} 5197function omit(object, keys) { 5198 forEach(keys || ownKeys(object), function(key) { 5199 delete object[key]; 5200 }); 5201} 5202function removeAttribute(elms, attrs) { 5203 forEach(elms, function(elm) { 5204 forEach(attrs, function(attr) { 5205 elm && elm.removeAttribute(attr); 5206 }); 5207 }); 5208} 5209function setAttribute(elms, attrs, value) { 5210 if (isObject(attrs)) { 5211 forOwn(attrs, function(value2, name) { 5212 setAttribute(elms, name, value2); 5213 }); 5214 } else { 5215 forEach(elms, function(elm) { 5216 isNull(value) || value === "" ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value)); 5217 }); 5218 } 5219} 5220function create(tag, attrs, parent) { 5221 var elm = document.createElement(tag); 5222 if (attrs) { 5223 isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs); 5224 } 5225 parent && append(parent, elm); 5226 return elm; 5227} 5228function style(elm, prop, value) { 5229 if (isUndefined(value)) { 5230 return getComputedStyle(elm)[prop]; 5231 } 5232 if (!isNull(value)) { 5233 elm.style[prop] = "" + value; 5234 } 5235} 5236function display(elm, display2) { 5237 style(elm, "display", display2); 5238} 5239function focus(elm) { 5240 elm["setActive"] && elm["setActive"]() || elm.focus({ 5241 preventScroll: true 5242 }); 5243} 5244function getAttribute(elm, attr) { 5245 return elm.getAttribute(attr); 5246} 5247function hasClass(elm, className) { 5248 return elm && elm.classList.contains(className); 5249} 5250function rect(target) { 5251 return target.getBoundingClientRect(); 5252} 5253function remove(nodes) { 5254 forEach(nodes, function(node) { 5255 if (node && node.parentNode) { 5256 node.parentNode.removeChild(node); 5257 } 5258 }); 5259} 5260function parseHtml(html) { 5261 return child(new DOMParser().parseFromString(html, "text/html").body); 5262} 5263function prevent(e, stopPropagation) { 5264 e.preventDefault(); 5265 if (stopPropagation) { 5266 e.stopPropagation(); 5267 e.stopImmediatePropagation(); 5268 } 5269} 5270function query(parent, selector) { 5271 return parent && parent.querySelector(selector); 5272} 5273function queryAll(parent, selector) { 5274 return selector ? slice(parent.querySelectorAll(selector)) : []; 5275} 5276function removeClass(elm, classes) { 5277 toggleClass(elm, classes, false); 5278} 5279function timeOf(e) { 5280 return e.timeStamp; 5281} 5282function unit(value) { 5283 return isString(value) ? value : value ? value + "px" : ""; 5284} 5285var PROJECT_CODE = "splide"; 5286var DATA_ATTRIBUTE = "data-" + PROJECT_CODE; 5287function assert(condition, message) { 5288 if (!condition) { 5289 throw new Error("[" + PROJECT_CODE + "] " + (message || "")); 5290 } 5291} 5292var min = Math.min, max = Math.max, floor = Math.floor, ceil = Math.ceil, abs = Math.abs; 5293function approximatelyEqual(x, y, epsilon) { 5294 return abs(x - y) < epsilon; 5295} 5296function between(number, x, y, exclusive) { 5297 var minimum = min(x, y); 5298 var maximum = max(x, y); 5299 return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum; 5300} 5301function clamp(number, x, y) { 5302 var minimum = min(x, y); 5303 var maximum = max(x, y); 5304 return min(max(minimum, number), maximum); 5305} 5306function sign(x) { 5307 return +(x > 0) - +(x < 0); 5308} 5309function format(string, replacements) { 5310 forEach(replacements, function(replacement) { 5311 string = string.replace("%s", "" + replacement); 5312 }); 5313 return string; 5314} 5315function pad(number) { 5316 return number < 10 ? "0" + number : "" + number; 5317} 5318var ids = {}; 5319function uniqueId(prefix) { 5320 return "" + prefix + pad(ids[prefix] = (ids[prefix] || 0) + 1); 5321} 5322function EventBinder() { 5323 var listeners = []; 5324 function bind(targets, events, callback, options) { 5325 forEachEvent(targets, events, function(target, event, namespace) { 5326 var isEventTarget = "addEventListener" in target; 5327 var remover = isEventTarget ? target.removeEventListener.bind(target, event, callback, options) : target["removeListener"].bind(target, callback); 5328 isEventTarget ? target.addEventListener(event, callback, options) : target["addListener"](callback); 5329 listeners.push([target, event, namespace, callback, remover]); 5330 }); 5331 } 5332 function unbind(targets, events, callback) { 5333 forEachEvent(targets, events, function(target, event, namespace) { 5334 listeners = listeners.filter(function(listener) { 5335 if (listener[0] === target && listener[1] === event && listener[2] === namespace && (!callback || listener[3] === callback)) { 5336 listener[4](); 5337 return false; 5338 } 5339 return true; 5340 }); 5341 }); 5342 } 5343 function dispatch(target, type, detail) { 5344 var e; 5345 var bubbles = true; 5346 if (typeof CustomEvent === "function") { 5347 e = new CustomEvent(type, { 5348 bubbles, 5349 detail 5350 }); 5351 } else { 5352 e = document.createEvent("CustomEvent"); 5353 e.initCustomEvent(type, bubbles, false, detail); 5354 } 5355 target.dispatchEvent(e); 5356 return e; 5357 } 5358 function forEachEvent(targets, events, iteratee) { 5359 forEach(targets, function(target) { 5360 target && forEach(events, function(events2) { 5361 events2.split(" ").forEach(function(eventNS) { 5362 var fragment = eventNS.split("."); 5363 iteratee(target, fragment[0], fragment[1]); 5364 }); 5365 }); 5366 }); 5367 } 5368 function destroy() { 5369 listeners.forEach(function(data) { 5370 data[4](); 5371 }); 5372 empty(listeners); 5373 } 5374 return { 5375 bind, 5376 unbind, 5377 dispatch, 5378 destroy 5379 }; 5380} 5381var EVENT_MOUNTED = "mounted"; 5382var EVENT_READY = "ready"; 5383var EVENT_MOVE = "move"; 5384var EVENT_MOVED = "moved"; 5385var EVENT_CLICK = "click"; 5386var EVENT_ACTIVE = "active"; 5387var EVENT_INACTIVE = "inactive"; 5388var EVENT_VISIBLE = "visible"; 5389var EVENT_HIDDEN = "hidden"; 5390var EVENT_REFRESH = "refresh"; 5391var EVENT_UPDATED = "updated"; 5392var EVENT_RESIZE = "resize"; 5393var EVENT_RESIZED = "resized"; 5394var EVENT_DRAG = "drag"; 5395var EVENT_DRAGGING = "dragging"; 5396var EVENT_DRAGGED = "dragged"; 5397var EVENT_SCROLL = "scroll"; 5398var EVENT_SCROLLED = "scrolled"; 5399var EVENT_OVERFLOW = "overflow"; 5400var EVENT_DESTROY = "destroy"; 5401var EVENT_ARROWS_MOUNTED = "arrows:mounted"; 5402var EVENT_ARROWS_UPDATED = "arrows:updated"; 5403var EVENT_PAGINATION_MOUNTED = "pagination:mounted"; 5404var EVENT_PAGINATION_UPDATED = "pagination:updated"; 5405var EVENT_NAVIGATION_MOUNTED = "navigation:mounted"; 5406var EVENT_AUTOPLAY_PLAY = "autoplay:play"; 5407var EVENT_AUTOPLAY_PLAYING = "autoplay:playing"; 5408var EVENT_AUTOPLAY_PAUSE = "autoplay:pause"; 5409var EVENT_LAZYLOAD_LOADED = "lazyload:loaded"; 5410var EVENT_SLIDE_KEYDOWN = "sk"; 5411var EVENT_SHIFTED = "sh"; 5412var EVENT_END_INDEX_CHANGED = "ei"; 5413function EventInterface(Splide2) { 5414 var bus = Splide2 ? Splide2.event.bus : document.createDocumentFragment(); 5415 var binder = EventBinder(); 5416 function on(events, callback) { 5417 binder.bind(bus, toArray(events).join(" "), function(e) { 5418 callback.apply(callback, isArray(e.detail) ? e.detail : []); 5419 }); 5420 } 5421 function emit(event) { 5422 binder.dispatch(bus, event, slice(arguments, 1)); 5423 } 5424 if (Splide2) { 5425 Splide2.event.on(EVENT_DESTROY, binder.destroy); 5426 } 5427 return assign(binder, { 5428 bus, 5429 on, 5430 off: apply(binder.unbind, bus), 5431 emit 5432 }); 5433} 5434function RequestInterval(interval, onInterval, onUpdate, limit) { 5435 var now = Date.now; 5436 var startTime; 5437 var rate = 0; 5438 var id; 5439 var paused = true; 5440 var count = 0; 5441 function update() { 5442 if (!paused) { 5443 rate = interval ? min((now() - startTime) / interval, 1) : 1; 5444 onUpdate && onUpdate(rate); 5445 if (rate >= 1) { 5446 onInterval(); 5447 startTime = now(); 5448 if (limit && ++count >= limit) { 5449 return pause(); 5450 } 5451 } 5452 id = raf(update); 5453 } 5454 } 5455 function start2(resume) { 5456 resume || cancel(); 5457 startTime = now() - (resume ? rate * interval : 0); 5458 paused = false; 5459 id = raf(update); 5460 } 5461 function pause() { 5462 paused = true; 5463 } 5464 function rewind() { 5465 startTime = now(); 5466 rate = 0; 5467 if (onUpdate) { 5468 onUpdate(rate); 5469 } 5470 } 5471 function cancel() { 5472 id && cancelAnimationFrame(id); 5473 rate = 0; 5474 id = 0; 5475 paused = true; 5476 } 5477 function set(time) { 5478 interval = time; 5479 } 5480 function isPaused() { 5481 return paused; 5482 } 5483 return { 5484 start: start2, 5485 rewind, 5486 pause, 5487 cancel, 5488 set, 5489 isPaused 5490 }; 5491} 5492function State(initialState) { 5493 var state = initialState; 5494 function set(value) { 5495 state = value; 5496 } 5497 function is(states) { 5498 return includes(toArray(states), state); 5499 } 5500 return { 5501 set, 5502 is 5503 }; 5504} 5505function Throttle(func, duration) { 5506 var interval = RequestInterval(duration || 0, func, null, 1); 5507 return function() { 5508 interval.isPaused() && interval.start(); 5509 }; 5510} 5511function Media(Splide2, Components2, options) { 5512 var state = Splide2.state; 5513 var breakpoints = options.breakpoints || {}; 5514 var reducedMotion = options.reducedMotion || {}; 5515 var binder = EventBinder(); 5516 var queries = []; 5517 function setup() { 5518 var isMin = options.mediaQuery === "min"; 5519 ownKeys(breakpoints).sort(function(n, m) { 5520 return isMin ? +n - +m : +m - +n; 5521 }).forEach(function(key) { 5522 register(breakpoints[key], "(" + (isMin ? "min" : "max") + "-width:" + key + "px)"); 5523 }); 5524 register(reducedMotion, MEDIA_PREFERS_REDUCED_MOTION); 5525 update(); 5526 } 5527 function destroy(completely) { 5528 if (completely) { 5529 binder.destroy(); 5530 } 5531 } 5532 function register(options2, query2) { 5533 var queryList = matchMedia(query2); 5534 binder.bind(queryList, "change", update); 5535 queries.push([options2, queryList]); 5536 } 5537 function update() { 5538 var destroyed = state.is(DESTROYED); 5539 var direction = options.direction; 5540 var merged = queries.reduce(function(merged2, entry) { 5541 return merge(merged2, entry[1].matches ? entry[0] : {}); 5542 }, {}); 5543 omit(options); 5544 set(merged); 5545 if (options.destroy) { 5546 Splide2.destroy(options.destroy === "completely"); 5547 } else if (destroyed) { 5548 destroy(true); 5549 Splide2.mount(); 5550 } else { 5551 direction !== options.direction && Splide2.refresh(); 5552 } 5553 } 5554 function reduce(enable) { 5555 if (matchMedia(MEDIA_PREFERS_REDUCED_MOTION).matches) { 5556 enable ? merge(options, reducedMotion) : omit(options, ownKeys(reducedMotion)); 5557 } 5558 } 5559 function set(opts, base, notify) { 5560 merge(options, opts); 5561 base && merge(Object.getPrototypeOf(options), opts); 5562 if (notify || !state.is(CREATED)) { 5563 Splide2.emit(EVENT_UPDATED, options); 5564 } 5565 } 5566 return { 5567 setup, 5568 destroy, 5569 reduce, 5570 set 5571 }; 5572} 5573var ARROW = "Arrow"; 5574var ARROW_LEFT = ARROW + "Left"; 5575var ARROW_RIGHT = ARROW + "Right"; 5576var ARROW_UP = ARROW + "Up"; 5577var ARROW_DOWN = ARROW + "Down"; 5578var RTL = "rtl"; 5579var TTB = "ttb"; 5580var ORIENTATION_MAP = { 5581 width: ["height"], 5582 left: ["top", "right"], 5583 right: ["bottom", "left"], 5584 x: ["y"], 5585 X: ["Y"], 5586 Y: ["X"], 5587 ArrowLeft: [ARROW_UP, ARROW_RIGHT], 5588 ArrowRight: [ARROW_DOWN, ARROW_LEFT] 5589}; 5590function Direction(Splide2, Components2, options) { 5591 function resolve(prop, axisOnly, direction) { 5592 direction = direction || options.direction; 5593 var index = direction === RTL && !axisOnly ? 1 : direction === TTB ? 0 : -1; 5594 return ORIENTATION_MAP[prop] && ORIENTATION_MAP[prop][index] || prop.replace(/width|left|right/i, function(match, offset2) { 5595 var replacement = ORIENTATION_MAP[match.toLowerCase()][index] || match; 5596 return offset2 > 0 ? replacement.charAt(0).toUpperCase() + replacement.slice(1) : replacement; 5597 }); 5598 } 5599 function orient(value) { 5600 return value * (options.direction === RTL ? 1 : -1); 5601 } 5602 return { 5603 resolve, 5604 orient 5605 }; 5606} 5607var ROLE = "role"; 5608var TAB_INDEX = "tabindex"; 5609var DISABLED = "disabled"; 5610var ARIA_PREFIX = "aria-"; 5611var ARIA_CONTROLS = ARIA_PREFIX + "controls"; 5612var ARIA_CURRENT = ARIA_PREFIX + "current"; 5613var ARIA_SELECTED = ARIA_PREFIX + "selected"; 5614var ARIA_LABEL = ARIA_PREFIX + "label"; 5615var ARIA_LABELLEDBY = ARIA_PREFIX + "labelledby"; 5616var ARIA_HIDDEN = ARIA_PREFIX + "hidden"; 5617var ARIA_ORIENTATION = ARIA_PREFIX + "orientation"; 5618var ARIA_ROLEDESCRIPTION = ARIA_PREFIX + "roledescription"; 5619var ARIA_LIVE = ARIA_PREFIX + "live"; 5620var ARIA_BUSY = ARIA_PREFIX + "busy"; 5621var ARIA_ATOMIC = ARIA_PREFIX + "atomic"; 5622var ALL_ATTRIBUTES = [ROLE, TAB_INDEX, DISABLED, ARIA_CONTROLS, ARIA_CURRENT, ARIA_LABEL, ARIA_LABELLEDBY, ARIA_HIDDEN, ARIA_ORIENTATION, ARIA_ROLEDESCRIPTION]; 5623var CLASS_PREFIX = PROJECT_CODE + "__"; 5624var STATUS_CLASS_PREFIX = "is-"; 5625var CLASS_ROOT = PROJECT_CODE; 5626var CLASS_TRACK = CLASS_PREFIX + "track"; 5627var CLASS_LIST = CLASS_PREFIX + "list"; 5628var CLASS_SLIDE = CLASS_PREFIX + "slide"; 5629var CLASS_CLONE = CLASS_SLIDE + "--clone"; 5630var CLASS_CONTAINER = CLASS_SLIDE + "__container"; 5631var CLASS_ARROWS = CLASS_PREFIX + "arrows"; 5632var CLASS_ARROW = CLASS_PREFIX + "arrow"; 5633var CLASS_ARROW_PREV = CLASS_ARROW + "--prev"; 5634var CLASS_ARROW_NEXT = CLASS_ARROW + "--next"; 5635var CLASS_PAGINATION = CLASS_PREFIX + "pagination"; 5636var CLASS_PAGINATION_PAGE = CLASS_PAGINATION + "__page"; 5637var CLASS_PROGRESS = CLASS_PREFIX + "progress"; 5638var CLASS_PROGRESS_BAR = CLASS_PROGRESS + "__bar"; 5639var CLASS_TOGGLE = CLASS_PREFIX + "toggle"; 5640var CLASS_SPINNER = CLASS_PREFIX + "spinner"; 5641var CLASS_SR = CLASS_PREFIX + "sr"; 5642var CLASS_INITIALIZED = STATUS_CLASS_PREFIX + "initialized"; 5643var CLASS_ACTIVE = STATUS_CLASS_PREFIX + "active"; 5644var CLASS_PREV = STATUS_CLASS_PREFIX + "prev"; 5645var CLASS_NEXT = STATUS_CLASS_PREFIX + "next"; 5646var CLASS_VISIBLE = STATUS_CLASS_PREFIX + "visible"; 5647var CLASS_LOADING = STATUS_CLASS_PREFIX + "loading"; 5648var CLASS_FOCUS_IN = STATUS_CLASS_PREFIX + "focus-in"; 5649var CLASS_OVERFLOW = STATUS_CLASS_PREFIX + "overflow"; 5650var STATUS_CLASSES = [CLASS_ACTIVE, CLASS_VISIBLE, CLASS_PREV, CLASS_NEXT, CLASS_LOADING, CLASS_FOCUS_IN, CLASS_OVERFLOW]; 5651var CLASSES = { 5652 slide: CLASS_SLIDE, 5653 clone: CLASS_CLONE, 5654 arrows: CLASS_ARROWS, 5655 arrow: CLASS_ARROW, 5656 prev: CLASS_ARROW_PREV, 5657 next: CLASS_ARROW_NEXT, 5658 pagination: CLASS_PAGINATION, 5659 page: CLASS_PAGINATION_PAGE, 5660 spinner: CLASS_SPINNER 5661}; 5662function closest(from, selector) { 5663 if (isFunction(from.closest)) { 5664 return from.closest(selector); 5665 } 5666 var elm = from; 5667 while (elm && elm.nodeType === 1) { 5668 if (matches(elm, selector)) { 5669 break; 5670 } 5671 elm = elm.parentElement; 5672 } 5673 return elm; 5674} 5675var FRICTION = 5; 5676var LOG_INTERVAL = 200; 5677var POINTER_DOWN_EVENTS = "touchstart mousedown"; 5678var POINTER_MOVE_EVENTS = "touchmove mousemove"; 5679var POINTER_UP_EVENTS = "touchend touchcancel mouseup click"; 5680function Elements(Splide2, Components2, options) { 5681 var _EventInterface = EventInterface(Splide2), on = _EventInterface.on, bind = _EventInterface.bind; 5682 var root = Splide2.root; 5683 var i18n = options.i18n; 5684 var elements = {}; 5685 var slides = []; 5686 var rootClasses = []; 5687 var trackClasses = []; 5688 var track; 5689 var list; 5690 var isUsingKey; 5691 function setup() { 5692 collect(); 5693 init(); 5694 update(); 5695 } 5696 function mount() { 5697 on(EVENT_REFRESH, destroy); 5698 on(EVENT_REFRESH, setup); 5699 on(EVENT_UPDATED, update); 5700 bind(document, POINTER_DOWN_EVENTS + " keydown", function(e) { 5701 isUsingKey = e.type === "keydown"; 5702 }, { 5703 capture: true 5704 }); 5705 bind(root, "focusin", function() { 5706 toggleClass(root, CLASS_FOCUS_IN, !!isUsingKey); 5707 }); 5708 } 5709 function destroy(completely) { 5710 var attrs = ALL_ATTRIBUTES.concat("style"); 5711 empty(slides); 5712 removeClass(root, rootClasses); 5713 removeClass(track, trackClasses); 5714 removeAttribute([track, list], attrs); 5715 removeAttribute(root, completely ? attrs : ["style", ARIA_ROLEDESCRIPTION]); 5716 } 5717 function update() { 5718 removeClass(root, rootClasses); 5719 removeClass(track, trackClasses); 5720 rootClasses = getClasses(CLASS_ROOT); 5721 trackClasses = getClasses(CLASS_TRACK); 5722 addClass(root, rootClasses); 5723 addClass(track, trackClasses); 5724 setAttribute(root, ARIA_LABEL, options.label); 5725 setAttribute(root, ARIA_LABELLEDBY, options.labelledby); 5726 } 5727 function collect() { 5728 track = find("." + CLASS_TRACK); 5729 list = child(track, "." + CLASS_LIST); 5730 assert(track && list, "A track/list element is missing."); 5731 push(slides, children(list, "." + CLASS_SLIDE + ":not(." + CLASS_CLONE + ")")); 5732 forOwn({ 5733 arrows: CLASS_ARROWS, 5734 pagination: CLASS_PAGINATION, 5735 prev: CLASS_ARROW_PREV, 5736 next: CLASS_ARROW_NEXT, 5737 bar: CLASS_PROGRESS_BAR, 5738 toggle: CLASS_TOGGLE 5739 }, function(className, key) { 5740 elements[key] = find("." + className); 5741 }); 5742 assign(elements, { 5743 root, 5744 track, 5745 list, 5746 slides 5747 }); 5748 } 5749 function init() { 5750 var id = root.id || uniqueId(PROJECT_CODE); 5751 var role = options.role; 5752 root.id = id; 5753 track.id = track.id || id + "-track"; 5754 list.id = list.id || id + "-list"; 5755 if (!getAttribute(root, ROLE) && root.tagName !== "SECTION" && role) { 5756 setAttribute(root, ROLE, role); 5757 } 5758 setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel); 5759 setAttribute(list, ROLE, "presentation"); 5760 } 5761 function find(selector) { 5762 var elm = query(root, selector); 5763 return elm && closest(elm, "." + CLASS_ROOT) === root ? elm : void 0; 5764 } 5765 function getClasses(base) { 5766 return [base + "--" + options.type, base + "--" + options.direction, options.drag && base + "--draggable", options.isNavigation && base + "--nav", base === CLASS_ROOT && CLASS_ACTIVE]; 5767 } 5768 return assign(elements, { 5769 setup, 5770 mount, 5771 destroy 5772 }); 5773} 5774var SLIDE = "slide"; 5775var LOOP = "loop"; 5776var FADE = "fade"; 5777function Slide$1(Splide2, index, slideIndex, slide) { 5778 var event = EventInterface(Splide2); 5779 var on = event.on, emit = event.emit, bind = event.bind; 5780 var Components = Splide2.Components, root = Splide2.root, options = Splide2.options; 5781 var isNavigation = options.isNavigation, updateOnMove = options.updateOnMove, i18n = options.i18n, pagination = options.pagination, slideFocus = options.slideFocus; 5782 var resolve = Components.Direction.resolve; 5783 var styles = getAttribute(slide, "style"); 5784 var label = getAttribute(slide, ARIA_LABEL); 5785 var isClone = slideIndex > -1; 5786 var container = child(slide, "." + CLASS_CONTAINER); 5787 var destroyed; 5788 function mount() { 5789 if (!isClone) {
vendor: 1,212 bytes, lines 5790-5818
5790 slide.id = root.id + "-slide" + pad(index + 1); 5791 setAttribute(slide, ROLE, pagination ? "tabpanel" : "group"); 5792 setAttribute(slide, ARIA_ROLEDESCRIPTION, i18n.slide); 5793 setAttribute(slide, ARIA_LABEL, label || format(i18n.slideLabel, [index + 1, Splide2.length])); 5794 } 5795 listen(); 5796 } 5797 function listen() { 5798 bind(slide, "click", apply(emit, EVENT_CLICK, self)); 5799 bind(slide, "keydown", apply(emit, EVENT_SLIDE_KEYDOWN, self)); 5800 on([EVENT_MOVED, EVENT_SHIFTED, EVENT_SCROLLED], update); 5801 on(EVENT_NAVIGATION_MOUNTED, initNavigation); 5802 if (updateOnMove) { 5803 on(EVENT_MOVE, onMove); 5804 } 5805 } 5806 function destroy() { 5807 destroyed = true; 5808 event.destroy(); 5809 removeClass(slide, STATUS_CLASSES); 5810 removeAttribute(slide, ALL_ATTRIBUTES); 5811 setAttribute(slide, "style", styles); 5812 setAttribute(slide, ARIA_LABEL, label || ""); 5813 } 5814 function initNavigation() { 5815 var controls = Splide2.splides.map(function(target) { 5816 var Slide2 = target.splide.Components.Slides.getAt(index); 5817 return Slide2 ? Slide2.slide.id : ""; 5818 }).join(" ");
vendor: 34,964 bytes, lines 5819-6790
5819 setAttribute(slide, ARIA_LABEL, format(i18n.slideX, (isClone ? slideIndex : index) + 1)); 5820 setAttribute(slide, ARIA_CONTROLS, controls); 5821 setAttribute(slide, ROLE, slideFocus ? "button" : ""); 5822 slideFocus && removeAttribute(slide, ARIA_ROLEDESCRIPTION); 5823 } 5824 function onMove() { 5825 if (!destroyed) { 5826 update(); 5827 } 5828 } 5829 function update() { 5830 if (!destroyed) { 5831 var curr = Splide2.index; 5832 updateActivity(); 5833 updateVisibility(); 5834 toggleClass(slide, CLASS_PREV, index === curr - 1); 5835 toggleClass(slide, CLASS_NEXT, index === curr + 1); 5836 } 5837 } 5838 function updateActivity() { 5839 var active = isActive(); 5840 if (active !== hasClass(slide, CLASS_ACTIVE)) { 5841 toggleClass(slide, CLASS_ACTIVE, active); 5842 setAttribute(slide, ARIA_CURRENT, isNavigation && active || ""); 5843 emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self); 5844 } 5845 } 5846 function updateVisibility() { 5847 var visible = isVisible2(); 5848 var hidden = !visible && (!isActive() || isClone); 5849 if (!Splide2.state.is([MOVING, SCROLLING])) { 5850 setAttribute(slide, ARIA_HIDDEN, hidden || ""); 5851 } 5852 setAttribute(queryAll(slide, options.focusableNodes || ""), TAB_INDEX, hidden ? -1 : ""); 5853 if (slideFocus) { 5854 setAttribute(slide, TAB_INDEX, hidden ? -1 : 0); 5855 } 5856 if (visible !== hasClass(slide, CLASS_VISIBLE)) { 5857 toggleClass(slide, CLASS_VISIBLE, visible); 5858 emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self); 5859 } 5860 if (!visible && document.activeElement === slide) { 5861 var Slide2 = Components.Slides.getAt(Splide2.index); 5862 Slide2 && focus(Slide2.slide); 5863 } 5864 } 5865 function style$12(prop, value, useContainer) { 5866 style(useContainer && container || slide, prop, value); 5867 } 5868 function isActive() { 5869 var curr = Splide2.index; 5870 return curr === index || options.cloneStatus && curr === slideIndex; 5871 } 5872 function isVisible2() { 5873 if (Splide2.is(FADE)) { 5874 return isActive(); 5875 } 5876 var trackRect = rect(Components.Elements.track); 5877 var slideRect = rect(slide); 5878 var left2 = resolve("left", true); 5879 var right2 = resolve("right", true); 5880 return floor(trackRect[left2]) <= ceil(slideRect[left2]) && floor(slideRect[right2]) <= ceil(trackRect[right2]); 5881 } 5882 function isWithin(from, distance) { 5883 var diff = abs(from - index); 5884 if (!isClone && (options.rewind || Splide2.is(LOOP))) { 5885 diff = min(diff, Splide2.length - diff); 5886 } 5887 return diff <= distance; 5888 } 5889 var self = { 5890 index, 5891 slideIndex, 5892 slide, 5893 container, 5894 isClone, 5895 mount, 5896 destroy, 5897 update, 5898 style: style$12, 5899 isWithin 5900 }; 5901 return self; 5902} 5903function Slides(Splide2, Components2, options) { 5904 var _EventInterface2 = EventInterface(Splide2), on = _EventInterface2.on, emit = _EventInterface2.emit, bind = _EventInterface2.bind; 5905 var _Components2$Elements = Components2.Elements, slides = _Components2$Elements.slides, list = _Components2$Elements.list; 5906 var Slides2 = []; 5907 function mount() { 5908 init(); 5909 on(EVENT_REFRESH, destroy); 5910 on(EVENT_REFRESH, init); 5911 } 5912 function init() { 5913 slides.forEach(function(slide, index) { 5914 register(slide, index, -1); 5915 }); 5916 } 5917 function destroy() { 5918 forEach$1(function(Slide2) { 5919 Slide2.destroy(); 5920 }); 5921 empty(Slides2); 5922 } 5923 function update() { 5924 forEach$1(function(Slide2) { 5925 Slide2.update(); 5926 }); 5927 } 5928 function register(slide, index, slideIndex) { 5929 var object = Slide$1(Splide2, index, slideIndex, slide); 5930 object.mount(); 5931 Slides2.push(object); 5932 Slides2.sort(function(Slide1, Slide2) { 5933 return Slide1.index - Slide2.index; 5934 }); 5935 } 5936 function get(excludeClones) { 5937 return excludeClones ? filter(function(Slide2) { 5938 return !Slide2.isClone; 5939 }) : Slides2; 5940 } 5941 function getIn(page) { 5942 var Controller2 = Components2.Controller; 5943 var index = Controller2.toIndex(page); 5944 var max2 = Controller2.hasFocus() ? 1 : options.perPage; 5945 return filter(function(Slide2) { 5946 return between(Slide2.index, index, index + max2 - 1); 5947 }); 5948 } 5949 function getAt(index) { 5950 return filter(index)[0]; 5951 } 5952 function add(items, index) { 5953 forEach(items, function(slide) { 5954 if (isString(slide)) { 5955 slide = parseHtml(slide); 5956 } 5957 if (isHTMLElement(slide)) { 5958 var ref = slides[index]; 5959 ref ? before(slide, ref) : append(list, slide); 5960 addClass(slide, options.classes.slide); 5961 observeImages(slide, apply(emit, EVENT_RESIZE)); 5962 } 5963 }); 5964 emit(EVENT_REFRESH); 5965 } 5966 function remove$1(matcher) { 5967 remove(filter(matcher).map(function(Slide2) { 5968 return Slide2.slide; 5969 })); 5970 emit(EVENT_REFRESH); 5971 } 5972 function forEach$1(iteratee, excludeClones) { 5973 get(excludeClones).forEach(iteratee); 5974 } 5975 function filter(matcher) { 5976 return Slides2.filter(isFunction(matcher) ? matcher : function(Slide2) { 5977 return isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index); 5978 }); 5979 } 5980 function style2(prop, value, useContainer) { 5981 forEach$1(function(Slide2) { 5982 Slide2.style(prop, value, useContainer); 5983 }); 5984 } 5985 function observeImages(elm, callback) { 5986 var images = queryAll(elm, "img"); 5987 var length = images.length; 5988 if (length) { 5989 images.forEach(function(img) { 5990 bind(img, "load error", function() { 5991 if (!--length) { 5992 callback(); 5993 } 5994 }); 5995 }); 5996 } else { 5997 callback(); 5998 } 5999 } 6000 function getLength(excludeClones) { 6001 return excludeClones ? slides.length : Slides2.length; 6002 } 6003 function isEnough() { 6004 return Slides2.length > options.perPage; 6005 } 6006 return { 6007 mount, 6008 destroy, 6009 update, 6010 register, 6011 get, 6012 getIn, 6013 getAt, 6014 add, 6015 remove: remove$1, 6016 forEach: forEach$1, 6017 filter, 6018 style: style2, 6019 getLength, 6020 isEnough 6021 }; 6022} 6023function Layout(Splide2, Components2, options) { 6024 var _EventInterface3 = EventInterface(Splide2), on = _EventInterface3.on, bind = _EventInterface3.bind, emit = _EventInterface3.emit; 6025 var Slides2 = Components2.Slides; 6026 var resolve = Components2.Direction.resolve; 6027 var _Components2$Elements2 = Components2.Elements, root = _Components2$Elements2.root, track = _Components2$Elements2.track, list = _Components2$Elements2.list; 6028 var getAt = Slides2.getAt, styleSlides = Slides2.style; 6029 var vertical; 6030 var rootRect; 6031 var overflow; 6032 function mount() { 6033 init(); 6034 bind(window, "resize load", Throttle(apply(emit, EVENT_RESIZE))); 6035 on([EVENT_UPDATED, EVENT_REFRESH], init); 6036 on(EVENT_RESIZE, resize); 6037 } 6038 function init() { 6039 vertical = options.direction === TTB; 6040 style(root, "maxWidth", unit(options.width)); 6041 style(track, resolve("paddingLeft"), cssPadding(false)); 6042 style(track, resolve("paddingRight"), cssPadding(true)); 6043 resize(true); 6044 } 6045 function resize(force) { 6046 var newRect = rect(root); 6047 if (force || rootRect.width !== newRect.width || rootRect.height !== newRect.height) { 6048 style(track, "height", cssTrackHeight()); 6049 styleSlides(resolve("marginRight"), unit(options.gap)); 6050 styleSlides("width", cssSlideWidth()); 6051 styleSlides("height", cssSlideHeight(), true); 6052 rootRect = newRect; 6053 emit(EVENT_RESIZED); 6054 if (overflow !== (overflow = isOverflow())) { 6055 toggleClass(root, CLASS_OVERFLOW, overflow); 6056 emit(EVENT_OVERFLOW, overflow); 6057 } 6058 } 6059 } 6060 function cssPadding(right2) { 6061 var padding = options.padding; 6062 var prop = resolve(right2 ? "right" : "left"); 6063 return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || "0px"; 6064 } 6065 function cssTrackHeight() { 6066 var height = ""; 6067 if (vertical) { 6068 height = cssHeight(); 6069 assert(height, "height or heightRatio is missing."); 6070 height = "calc(" + height + " - " + cssPadding(false) + " - " + cssPadding(true) + ")"; 6071 } 6072 return height; 6073 } 6074 function cssHeight() { 6075 return unit(options.height || rect(list).width * options.heightRatio); 6076 } 6077 function cssSlideWidth() { 6078 return options.autoWidth ? null : unit(options.fixedWidth) || (vertical ? "" : cssSlideSize()); 6079 } 6080 function cssSlideHeight() { 6081 return unit(options.fixedHeight) || (vertical ? options.autoHeight ? null : cssSlideSize() : cssHeight()); 6082 } 6083 function cssSlideSize() { 6084 var gap = unit(options.gap); 6085 return "calc((100%" + (gap && " + " + gap) + ")/" + (options.perPage || 1) + (gap && " - " + gap) + ")"; 6086 } 6087 function listSize() { 6088 return rect(list)[resolve("width")]; 6089 } 6090 function slideSize(index, withoutGap) { 6091 var Slide2 = getAt(index || 0); 6092 return Slide2 ? rect(Slide2.slide)[resolve("width")] + (withoutGap ? 0 : getGap()) : 0; 6093 } 6094 function totalSize(index, withoutGap) { 6095 var Slide2 = getAt(index); 6096 if (Slide2) { 6097 var right2 = rect(Slide2.slide)[resolve("right")]; 6098 var left2 = rect(list)[resolve("left")]; 6099 return abs(right2 - left2) + (withoutGap ? 0 : getGap()); 6100 } 6101 return 0; 6102 } 6103 function sliderSize(withoutGap) { 6104 return totalSize(Splide2.length - 1) - totalSize(0) + slideSize(0, withoutGap); 6105 } 6106 function getGap() { 6107 var Slide2 = getAt(0); 6108 return Slide2 && parseFloat(style(Slide2.slide, resolve("marginRight"))) || 0; 6109 } 6110 function getPadding(right2) { 6111 return parseFloat(style(track, resolve("padding" + (right2 ? "Right" : "Left")))) || 0; 6112 } 6113 function isOverflow() { 6114 return Splide2.is(FADE) || sliderSize(true) > listSize(); 6115 } 6116 return { 6117 mount, 6118 resize, 6119 listSize, 6120 slideSize, 6121 sliderSize, 6122 totalSize, 6123 getPadding, 6124 isOverflow 6125 }; 6126} 6127var MULTIPLIER = 2; 6128function Clones(Splide2, Components2, options) { 6129 var event = EventInterface(Splide2); 6130 var on = event.on; 6131 var Elements2 = Components2.Elements, Slides2 = Components2.Slides; 6132 var resolve = Components2.Direction.resolve; 6133 var clones = []; 6134 var cloneCount; 6135 function mount() { 6136 on(EVENT_REFRESH, remount); 6137 on([EVENT_UPDATED, EVENT_RESIZE], observe); 6138 if (cloneCount = computeCloneCount()) { 6139 generate(cloneCount); 6140 Components2.Layout.resize(true); 6141 } 6142 } 6143 function remount() { 6144 destroy(); 6145 mount(); 6146 } 6147 function destroy() { 6148 remove(clones); 6149 empty(clones); 6150 event.destroy(); 6151 } 6152 function observe() { 6153 var count = computeCloneCount(); 6154 if (cloneCount !== count) { 6155 if (cloneCount < count || !count) { 6156 event.emit(EVENT_REFRESH); 6157 } 6158 } 6159 } 6160 function generate(count) { 6161 var slides = Slides2.get().slice(); 6162 var length = slides.length; 6163 if (length) { 6164 while (slides.length < count) { 6165 push(slides, slides); 6166 } 6167 push(slides.slice(-count), slides.slice(0, count)).forEach(function(Slide2, index) { 6168 var isHead = index < count; 6169 var clone = cloneDeep(Slide2.slide, index); 6170 isHead ? before(clone, slides[0].slide) : append(Elements2.list, clone); 6171 push(clones, clone); 6172 Slides2.register(clone, index - count + (isHead ? 0 : length), Slide2.index); 6173 }); 6174 } 6175 } 6176 function cloneDeep(elm, index) { 6177 var clone = elm.cloneNode(true); 6178 addClass(clone, options.classes.clone); 6179 clone.id = Splide2.root.id + "-clone" + pad(index + 1); 6180 return clone; 6181 } 6182 function computeCloneCount() { 6183 var clones2 = options.clones; 6184 if (!Splide2.is(LOOP)) { 6185 clones2 = 0; 6186 } else if (isUndefined(clones2)) { 6187 var fixedSize = options[resolve("fixedWidth")] && Components2.Layout.slideSize(0); 6188 var fixedCount = fixedSize && ceil(rect(Elements2.track)[resolve("width")] / fixedSize); 6189 clones2 = fixedCount || options[resolve("autoWidth")] && Splide2.length || options.perPage * MULTIPLIER; 6190 } 6191 return clones2; 6192 } 6193 return { 6194 mount, 6195 destroy 6196 }; 6197} 6198function Move(Splide2, Components2, options) { 6199 var _EventInterface4 = EventInterface(Splide2), on = _EventInterface4.on, emit = _EventInterface4.emit; 6200 var set = Splide2.state.set; 6201 var _Components2$Layout = Components2.Layout, slideSize = _Components2$Layout.slideSize, getPadding = _Components2$Layout.getPadding, totalSize = _Components2$Layout.totalSize, listSize = _Components2$Layout.listSize, sliderSize = _Components2$Layout.sliderSize; 6202 var _Components2$Directio = Components2.Direction, resolve = _Components2$Directio.resolve, orient = _Components2$Directio.orient; 6203 var _Components2$Elements3 = Components2.Elements, list = _Components2$Elements3.list, track = _Components2$Elements3.track; 6204 var Transition; 6205 function mount() { 6206 Transition = Components2.Transition; 6207 on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition); 6208 } 6209 function reposition() { 6210 if (!Components2.Controller.isBusy()) { 6211 Components2.Scroll.cancel(); 6212 jump(Splide2.index); 6213 Components2.Slides.update(); 6214 } 6215 } 6216 function move(dest, index, prev, callback) { 6217 if (dest !== index && canShift(dest > prev)) { 6218 cancel(); 6219 translate(shift(getPosition(), dest > prev), true); 6220 } 6221 set(MOVING); 6222 emit(EVENT_MOVE, index, prev, dest); 6223 Transition.start(index, function() { 6224 set(IDLE); 6225 emit(EVENT_MOVED, index, prev, dest); 6226 callback && callback(); 6227 }); 6228 } 6229 function jump(index) { 6230 translate(toPosition(index, true)); 6231 } 6232 function translate(position, preventLoop) { 6233 if (!Splide2.is(FADE)) { 6234 var destination = preventLoop ? position : loop(position); 6235 style(list, "transform", "translate" + resolve("X") + "(" + destination + "px)"); 6236 position !== destination && emit(EVENT_SHIFTED); 6237 } 6238 } 6239 function loop(position) { 6240 if (Splide2.is(LOOP)) { 6241 var index = toIndex(position); 6242 var exceededMax = index > Components2.Controller.getEnd(); 6243 var exceededMin = index < 0; 6244 if (exceededMin || exceededMax) { 6245 position = shift(position, exceededMax); 6246 } 6247 } 6248 return position; 6249 } 6250 function shift(position, backwards) { 6251 var excess = position - getLimit(backwards); 6252 var size = sliderSize(); 6253 position -= orient(size * (ceil(abs(excess) / size) || 1)) * (backwards ? 1 : -1); 6254 return position; 6255 } 6256 function cancel() { 6257 translate(getPosition(), true); 6258 Transition.cancel(); 6259 } 6260 function toIndex(position) { 6261 var Slides2 = Components2.Slides.get(); 6262 var index = 0; 6263 var minDistance = Infinity; 6264 for (var i = 0; i < Slides2.length; i++) { 6265 var slideIndex = Slides2[i].index; 6266 var distance = abs(toPosition(slideIndex, true) - position); 6267 if (distance <= minDistance) { 6268 minDistance = distance; 6269 index = slideIndex; 6270 } else { 6271 break; 6272 } 6273 } 6274 return index; 6275 } 6276 function toPosition(index, trimming) { 6277 var position = orient(totalSize(index - 1) - offset2(index)); 6278 return trimming ? trim(position) : position; 6279 } 6280 function getPosition() { 6281 var left2 = resolve("left"); 6282 return rect(list)[left2] - rect(track)[left2] + orient(getPadding(false)); 6283 } 6284 function trim(position) { 6285 if (options.trimSpace && Splide2.is(SLIDE)) { 6286 position = clamp(position, 0, orient(sliderSize(true) - listSize())); 6287 } 6288 return position; 6289 } 6290 function offset2(index) { 6291 var focus2 = options.focus; 6292 return focus2 === "center" ? (listSize() - slideSize(index, true)) / 2 : +focus2 * slideSize(index) || 0; 6293 } 6294 function getLimit(max2) { 6295 return toPosition(max2 ? Components2.Controller.getEnd() : 0, !!options.trimSpace); 6296 } 6297 function canShift(backwards) { 6298 var shifted = orient(shift(getPosition(), backwards)); 6299 return backwards ? shifted >= 0 : shifted <= list[resolve("scrollWidth")] - rect(track)[resolve("width")]; 6300 } 6301 function exceededLimit(max2, position) { 6302 position = isUndefined(position) ? getPosition() : position; 6303 var exceededMin = max2 !== true && orient(position) < orient(getLimit(false)); 6304 var exceededMax = max2 !== false && orient(position) > orient(getLimit(true)); 6305 return exceededMin || exceededMax; 6306 } 6307 return { 6308 mount, 6309 move, 6310 jump, 6311 translate, 6312 shift, 6313 cancel, 6314 toIndex, 6315 toPosition, 6316 getPosition, 6317 getLimit, 6318 exceededLimit, 6319 reposition 6320 }; 6321} 6322function Controller(Splide2, Components2, options) { 6323 var _EventInterface5 = EventInterface(Splide2), on = _EventInterface5.on, emit = _EventInterface5.emit; 6324 var Move2 = Components2.Move; 6325 var getPosition = Move2.getPosition, getLimit = Move2.getLimit, toPosition = Move2.toPosition; 6326 var _Components2$Slides = Components2.Slides, isEnough = _Components2$Slides.isEnough, getLength = _Components2$Slides.getLength; 6327 var omitEnd = options.omitEnd; 6328 var isLoop = Splide2.is(LOOP); 6329 var isSlide = Splide2.is(SLIDE); 6330 var getNext = apply(getAdjacent, false); 6331 var getPrev = apply(getAdjacent, true); 6332 var currIndex = options.start || 0; 6333 var endIndex; 6334 var prevIndex = currIndex; 6335 var slideCount; 6336 var perMove; 6337 var perPage; 6338 function mount() { 6339 init(); 6340 on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], init); 6341 on(EVENT_RESIZED, onResized); 6342 } 6343 function init() { 6344 slideCount = getLength(true); 6345 perMove = options.perMove; 6346 perPage = options.perPage; 6347 endIndex = getEnd(); 6348 var index = clamp(currIndex, 0, omitEnd ? endIndex : slideCount - 1); 6349 if (index !== currIndex) { 6350 currIndex = index; 6351 Move2.reposition(); 6352 } 6353 } 6354 function onResized() { 6355 if (endIndex !== getEnd()) { 6356 emit(EVENT_END_INDEX_CHANGED); 6357 } 6358 } 6359 function go(control, allowSameIndex, callback) { 6360 if (!isBusy()) { 6361 var dest = parse(control); 6362 var index = loop(dest); 6363 if (index > -1 && (allowSameIndex || index !== currIndex)) { 6364 setIndex(index); 6365 Move2.move(dest, index, prevIndex, callback); 6366 } 6367 } 6368 } 6369 function scroll(destination, duration, snap, callback) { 6370 Components2.Scroll.scroll(destination, duration, snap, function() { 6371 var index = loop(Move2.toIndex(getPosition())); 6372 setIndex(omitEnd ? min(index, endIndex) : index); 6373 callback && callback(); 6374 }); 6375 } 6376 function parse(control) { 6377 var index = currIndex; 6378 if (isString(control)) { 6379 var _ref = control.match(/([+\-<>])(\d+)?/) || [], indicator = _ref[1], number = _ref[2]; 6380 if (indicator === "+" || indicator === "-") { 6381 index = computeDestIndex(currIndex + +("" + indicator + (+number || 1)), currIndex); 6382 } else if (indicator === ">") { 6383 index = number ? toIndex(+number) : getNext(true); 6384 } else if (indicator === "<") { 6385 index = getPrev(true); 6386 } 6387 } else { 6388 index = isLoop ? control : clamp(control, 0, endIndex); 6389 } 6390 return index; 6391 } 6392 function getAdjacent(prev, destination) { 6393 var number = perMove || (hasFocus() ? 1 : perPage); 6394 var dest = computeDestIndex(currIndex + number * (prev ? -1 : 1), currIndex, !(perMove || hasFocus())); 6395 if (dest === -1 && isSlide) { 6396 if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) { 6397 return prev ? 0 : endIndex; 6398 } 6399 } 6400 return destination ? dest : loop(dest); 6401 } 6402 function computeDestIndex(dest, from, snapPage) { 6403 if (isEnough() || hasFocus()) { 6404 var index = computeMovableDestIndex(dest); 6405 if (index !== dest) { 6406 from = dest; 6407 dest = index; 6408 snapPage = false; 6409 } 6410 if (dest < 0 || dest > endIndex) { 6411 if (!perMove && (between(0, dest, from, true) || between(endIndex, from, dest, true))) { 6412 dest = toIndex(toPage(dest)); 6413 } else { 6414 if (isLoop) { 6415 dest = snapPage ? dest < 0 ? -(slideCount % perPage || perPage) : slideCount : dest; 6416 } else if (options.rewind) { 6417 dest = dest < 0 ? endIndex : 0; 6418 } else { 6419 dest = -1; 6420 } 6421 } 6422 } else { 6423 if (snapPage && dest !== from) { 6424 dest = toIndex(toPage(from) + (dest < from ? -1 : 1)); 6425 } 6426 } 6427 } else { 6428 dest = -1; 6429 } 6430 return dest; 6431 } 6432 function computeMovableDestIndex(dest) { 6433 if (isSlide && options.trimSpace === "move" && dest !== currIndex) { 6434 var position = getPosition(); 6435 while (position === toPosition(dest, true) && between(dest, 0, Splide2.length - 1, !options.rewind)) { 6436 dest < currIndex ? --dest : ++dest; 6437 } 6438 } 6439 return dest; 6440 } 6441 function loop(index) { 6442 return isLoop ? (index + slideCount) % slideCount || 0 : index; 6443 } 6444 function getEnd() { 6445 var end2 = slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage); 6446 while (omitEnd && end2-- > 0) { 6447 if (toPosition(slideCount - 1, true) !== toPosition(end2, true)) { 6448 end2++; 6449 break; 6450 } 6451 } 6452 return clamp(end2, 0, slideCount - 1); 6453 } 6454 function toIndex(page) { 6455 return clamp(hasFocus() ? page : perPage * page, 0, endIndex); 6456 } 6457 function toPage(index) { 6458 return hasFocus() ? min(index, endIndex) : floor((index >= endIndex ? slideCount - 1 : index) / perPage); 6459 } 6460 function toDest(destination) { 6461 var closest2 = Move2.toIndex(destination); 6462 return isSlide ? clamp(closest2, 0, endIndex) : closest2; 6463 } 6464 function setIndex(index) { 6465 if (index !== currIndex) { 6466 prevIndex = currIndex; 6467 currIndex = index; 6468 } 6469 } 6470 function getIndex(prev) { 6471 return prev ? prevIndex : currIndex; 6472 } 6473 function hasFocus() { 6474 return !isUndefined(options.focus) || options.isNavigation; 6475 } 6476 function isBusy() { 6477 return Splide2.state.is([MOVING, SCROLLING]) && !!options.waitForTransition; 6478 } 6479 return { 6480 mount, 6481 go, 6482 scroll, 6483 getNext, 6484 getPrev, 6485 getAdjacent, 6486 getEnd, 6487 setIndex, 6488 getIndex, 6489 toIndex, 6490 toPage, 6491 toDest, 6492 hasFocus, 6493 isBusy 6494 }; 6495} 6496var XML_NAME_SPACE = "http://www.w3.org/2000/svg"; 6497var PATH = "m15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z"; 6498var SIZE = 40; 6499function Arrows(Splide2, Components2, options) { 6500 var event = EventInterface(Splide2); 6501 var on = event.on, bind = event.bind, emit = event.emit; 6502 var classes = options.classes, i18n = options.i18n; 6503 var Elements2 = Components2.Elements, Controller2 = Components2.Controller; 6504 var placeholder = Elements2.arrows, track = Elements2.track; 6505 var wrapper = placeholder; 6506 var prev = Elements2.prev; 6507 var next = Elements2.next; 6508 var created; 6509 var wrapperClasses; 6510 var arrows = {}; 6511 function mount() { 6512 init(); 6513 on(EVENT_UPDATED, remount); 6514 } 6515 function remount() { 6516 destroy(); 6517 mount(); 6518 } 6519 function init() { 6520 var enabled = options.arrows; 6521 if (enabled && !(prev && next)) { 6522 createArrows(); 6523 } 6524 if (prev && next) { 6525 assign(arrows, { 6526 prev, 6527 next 6528 }); 6529 display(wrapper, enabled ? "" : "none"); 6530 addClass(wrapper, wrapperClasses = CLASS_ARROWS + "--" + options.direction); 6531 if (enabled) { 6532 listen(); 6533 update(); 6534 setAttribute([prev, next], ARIA_CONTROLS, track.id); 6535 emit(EVENT_ARROWS_MOUNTED, prev, next); 6536 } 6537 } 6538 } 6539 function destroy() { 6540 event.destroy(); 6541 removeClass(wrapper, wrapperClasses); 6542 if (created) { 6543 remove(placeholder ? [prev, next] : wrapper); 6544 prev = next = null; 6545 } else { 6546 removeAttribute([prev, next], ALL_ATTRIBUTES); 6547 } 6548 } 6549 function listen() { 6550 on([EVENT_MOUNTED, EVENT_MOVED, EVENT_REFRESH, EVENT_SCROLLED, EVENT_END_INDEX_CHANGED], update); 6551 bind(next, "click", apply(go, ">")); 6552 bind(prev, "click", apply(go, "<")); 6553 } 6554 function go(control) { 6555 Controller2.go(control, true); 6556 } 6557 function createArrows() { 6558 wrapper = placeholder || create("div", classes.arrows); 6559 prev = createArrow(true); 6560 next = createArrow(false); 6561 created = true; 6562 append(wrapper, [prev, next]); 6563 !placeholder && before(wrapper, track); 6564 } 6565 function createArrow(prev2) { 6566 var arrow2 = '<button class="' + classes.arrow + " " + (prev2 ? classes.prev : classes.next) + '" type="button"><svg xmlns="' + XML_NAME_SPACE + '" viewBox="0 0 ' + SIZE + " " + SIZE + '" width="' + SIZE + '" height="' + SIZE + '" focusable="false"><path d="' + (options.arrowPath || PATH) + '" />'; 6567 return parseHtml(arrow2); 6568 } 6569 function update() { 6570 if (prev && next) { 6571 var index = Splide2.index; 6572 var prevIndex = Controller2.getPrev(); 6573 var nextIndex = Controller2.getNext(); 6574 var prevLabel = prevIndex > -1 && index < prevIndex ? i18n.last : i18n.prev; 6575 var nextLabel = nextIndex > -1 && index > nextIndex ? i18n.first : i18n.next; 6576 prev.disabled = prevIndex < 0; 6577 next.disabled = nextIndex < 0; 6578 setAttribute(prev, ARIA_LABEL, prevLabel); 6579 setAttribute(next, ARIA_LABEL, nextLabel); 6580 emit(EVENT_ARROWS_UPDATED, prev, next, prevIndex, nextIndex); 6581 } 6582 } 6583 return { 6584 arrows, 6585 mount, 6586 destroy, 6587 update 6588 }; 6589} 6590var INTERVAL_DATA_ATTRIBUTE = DATA_ATTRIBUTE + "-interval"; 6591function Autoplay(Splide2, Components2, options) { 6592 var _EventInterface6 = EventInterface(Splide2), on = _EventInterface6.on, bind = _EventInterface6.bind, emit = _EventInterface6.emit; 6593 var interval = RequestInterval(options.interval, Splide2.go.bind(Splide2, ">"), onAnimationFrame); 6594 var isPaused = interval.isPaused; 6595 var Elements2 = Components2.Elements, _Components2$Elements4 = Components2.Elements, root = _Components2$Elements4.root, toggle = _Components2$Elements4.toggle; 6596 var autoplay = options.autoplay; 6597 var hovered; 6598 var focused; 6599 var stopped = autoplay === "pause"; 6600 function mount() { 6601 if (autoplay) { 6602 listen(); 6603 toggle && setAttribute(toggle, ARIA_CONTROLS, Elements2.track.id); 6604 stopped || play(); 6605 update(); 6606 } 6607 } 6608 function listen() { 6609 if (options.pauseOnHover) { 6610 bind(root, "mouseenter mouseleave", function(e) { 6611 hovered = e.type === "mouseenter"; 6612 autoToggle(); 6613 }); 6614 } 6615 if (options.pauseOnFocus) { 6616 bind(root, "focusin focusout", function(e) { 6617 focused = e.type === "focusin"; 6618 autoToggle(); 6619 }); 6620 } 6621 if (toggle) { 6622 bind(toggle, "click", function() { 6623 stopped ? play() : pause(true); 6624 }); 6625 } 6626 on([EVENT_MOVE, EVENT_SCROLL, EVENT_REFRESH], interval.rewind); 6627 on(EVENT_MOVE, onMove); 6628 } 6629 function play() { 6630 if (isPaused() && Components2.Slides.isEnough()) { 6631 interval.start(!options.resetProgress); 6632 focused = hovered = stopped = false; 6633 update(); 6634 emit(EVENT_AUTOPLAY_PLAY); 6635 } 6636 } 6637 function pause(stop) { 6638 if (stop === void 0) { 6639 stop = true; 6640 } 6641 stopped = !!stop; 6642 update(); 6643 if (!isPaused()) { 6644 interval.pause(); 6645 emit(EVENT_AUTOPLAY_PAUSE); 6646 } 6647 } 6648 function autoToggle() { 6649 if (!stopped) { 6650 hovered || focused ? pause(false) : play(); 6651 } 6652 } 6653 function update() { 6654 if (toggle) { 6655 toggleClass(toggle, CLASS_ACTIVE, !stopped); 6656 setAttribute(toggle, ARIA_LABEL, options.i18n[stopped ? "play" : "pause"]); 6657 } 6658 } 6659 function onAnimationFrame(rate) { 6660 var bar = Elements2.bar; 6661 bar && style(bar, "width", rate * 100 + "%"); 6662 emit(EVENT_AUTOPLAY_PLAYING, rate); 6663 } 6664 function onMove(index) { 6665 var Slide2 = Components2.Slides.getAt(index); 6666 interval.set(Slide2 && +getAttribute(Slide2.slide, INTERVAL_DATA_ATTRIBUTE) || options.interval); 6667 } 6668 return { 6669 mount, 6670 destroy: interval.cancel, 6671 play, 6672 pause, 6673 isPaused 6674 }; 6675} 6676function Cover(Splide2, Components2, options) { 6677 var _EventInterface7 = EventInterface(Splide2), on = _EventInterface7.on; 6678 function mount() { 6679 if (options.cover) { 6680 on(EVENT_LAZYLOAD_LOADED, apply(toggle, true)); 6681 on([EVENT_MOUNTED, EVENT_UPDATED, EVENT_REFRESH], apply(cover, true)); 6682 } 6683 } 6684 function cover(cover2) { 6685 Components2.Slides.forEach(function(Slide2) { 6686 var img = child(Slide2.container || Slide2.slide, "img"); 6687 if (img && img.src) { 6688 toggle(cover2, img, Slide2); 6689 } 6690 }); 6691 } 6692 function toggle(cover2, img, Slide2) { 6693 Slide2.style("background", cover2 ? 'center/cover no-repeat url("' + img.src + '")' : "", true); 6694 display(img, cover2 ? "none" : ""); 6695 } 6696 return { 6697 mount, 6698 destroy: apply(cover, false) 6699 }; 6700} 6701var BOUNCE_DIFF_THRESHOLD = 10; 6702var BOUNCE_DURATION = 600; 6703var FRICTION_FACTOR = 0.6; 6704var BASE_VELOCITY = 1.5; 6705var MIN_DURATION = 800; 6706function Scroll(Splide2, Components2, options) { 6707 var _EventInterface8 = EventInterface(Splide2), on = _EventInterface8.on, emit = _EventInterface8.emit; 6708 var set = Splide2.state.set; 6709 var Move2 = Components2.Move; 6710 var getPosition = Move2.getPosition, getLimit = Move2.getLimit, exceededLimit = Move2.exceededLimit, translate = Move2.translate; 6711 var isSlide = Splide2.is(SLIDE); 6712 var interval; 6713 var callback; 6714 var friction = 1; 6715 function mount() { 6716 on(EVENT_MOVE, clear); 6717 on([EVENT_UPDATED, EVENT_REFRESH], cancel); 6718 } 6719 function scroll(destination, duration, snap, onScrolled, noConstrain) { 6720 var from = getPosition(); 6721 clear(); 6722 if (snap && (!isSlide || !exceededLimit())) { 6723 var size = Components2.Layout.sliderSize(); 6724 var offset2 = sign(destination) * size * floor(abs(destination) / size) || 0; 6725 destination = Move2.toPosition(Components2.Controller.toDest(destination % size)) + offset2; 6726 } 6727 var noDistance = approximatelyEqual(from, destination, 1); 6728 friction = 1; 6729 duration = noDistance ? 0 : duration || max(abs(destination - from) / BASE_VELOCITY, MIN_DURATION); 6730 callback = onScrolled; 6731 interval = RequestInterval(duration, onEnd, apply(update, from, destination, noConstrain), 1); 6732 set(SCROLLING); 6733 emit(EVENT_SCROLL); 6734 interval.start(); 6735 } 6736 function onEnd() { 6737 set(IDLE); 6738 callback && callback(); 6739 emit(EVENT_SCROLLED); 6740 } 6741 function update(from, to, noConstrain, rate) { 6742 var position = getPosition(); 6743 var target = from + (to - from) * easing(rate); 6744 var diff = (target - position) * friction; 6745 translate(position + diff); 6746 if (isSlide && !noConstrain && exceededLimit()) { 6747 friction *= FRICTION_FACTOR; 6748 if (abs(diff) < BOUNCE_DIFF_THRESHOLD) { 6749 scroll(getLimit(exceededLimit(true)), BOUNCE_DURATION, false, callback, true); 6750 } 6751 } 6752 } 6753 function clear() { 6754 if (interval) { 6755 interval.cancel(); 6756 } 6757 } 6758 function cancel() { 6759 if (interval && !interval.isPaused()) { 6760 clear(); 6761 onEnd(); 6762 } 6763 } 6764 function easing(t) { 6765 var easingFunc = options.easingFunc; 6766 return easingFunc ? easingFunc(t) : 1 - Math.pow(1 - t, 4); 6767 } 6768 return { 6769 mount, 6770 destroy: clear, 6771 scroll, 6772 cancel 6773 }; 6774} 6775var SCROLL_LISTENER_OPTIONS = { 6776 passive: false, 6777 capture: true 6778}; 6779function Drag(Splide2, Components2, options) { 6780 var _EventInterface9 = EventInterface(Splide2), on = _EventInterface9.on, emit = _EventInterface9.emit, bind = _EventInterface9.bind, unbind = _EventInterface9.unbind; 6781 var state = Splide2.state; 6782 var Move2 = Components2.Move, Scroll2 = Components2.Scroll, Controller2 = Components2.Controller, track = Components2.Elements.track, reduce = Components2.Media.reduce; 6783 var _Components2$Directio2 = Components2.Direction, resolve = _Components2$Directio2.resolve, orient = _Components2$Directio2.orient; 6784 var getPosition = Move2.getPosition, exceededLimit = Move2.exceededLimit; 6785 var basePosition; 6786 var baseEvent; 6787 var prevBaseEvent; 6788 var isFree; 6789 var dragging; 6790 var exceeded = false;
vendor: 4,376 bytes, lines 6791-6912
6791 var clickPrevented; 6792 var disabled; 6793 var target; 6794 function mount() { 6795 bind(track, POINTER_MOVE_EVENTS, noop, SCROLL_LISTENER_OPTIONS); 6796 bind(track, POINTER_UP_EVENTS, noop, SCROLL_LISTENER_OPTIONS); 6797 bind(track, POINTER_DOWN_EVENTS, onPointerDown, SCROLL_LISTENER_OPTIONS); 6798 bind(track, "click", onClick, { 6799 capture: true 6800 }); 6801 bind(track, "dragstart", prevent); 6802 on([EVENT_MOUNTED, EVENT_UPDATED], init); 6803 } 6804 function init() { 6805 var drag = options.drag; 6806 disable(!drag); 6807 isFree = drag === "free"; 6808 } 6809 function onPointerDown(e) { 6810 clickPrevented = false; 6811 if (!disabled) { 6812 var isTouch = isTouchEvent(e); 6813 if (isDraggable(e.target) && (isTouch || !e.button)) { 6814 if (!Controller2.isBusy()) { 6815 target = isTouch ? track : window; 6816 dragging = state.is([MOVING, SCROLLING]); 6817 prevBaseEvent = null; 6818 bind(target, POINTER_MOVE_EVENTS, onPointerMove, SCROLL_LISTENER_OPTIONS); 6819 bind(target, POINTER_UP_EVENTS, onPointerUp, SCROLL_LISTENER_OPTIONS); 6820 Move2.cancel(); 6821 Scroll2.cancel(); 6822 save(e); 6823 } else { 6824 prevent(e, true); 6825 } 6826 } 6827 } 6828 } 6829 function onPointerMove(e) { 6830 if (!state.is(DRAGGING)) { 6831 state.set(DRAGGING); 6832 emit(EVENT_DRAG); 6833 } 6834 if (e.cancelable) { 6835 if (dragging) { 6836 Move2.translate(basePosition + constrain(diffCoord(e))); 6837 var expired = diffTime(e) > LOG_INTERVAL; 6838 var hasExceeded = exceeded !== (exceeded = exceededLimit()); 6839 if (expired || hasExceeded) { 6840 save(e); 6841 } 6842 clickPrevented = true; 6843 emit(EVENT_DRAGGING); 6844 prevent(e); 6845 } else if (isSliderDirection(e)) { 6846 dragging = shouldStart(e); 6847 prevent(e); 6848 } 6849 } 6850 } 6851 function onPointerUp(e) { 6852 if (state.is(DRAGGING)) { 6853 state.set(IDLE); 6854 emit(EVENT_DRAGGED); 6855 } 6856 if (dragging) { 6857 move(e); 6858 prevent(e); 6859 } 6860 unbind(target, POINTER_MOVE_EVENTS, onPointerMove); 6861 unbind(target, POINTER_UP_EVENTS, onPointerUp); 6862 dragging = false; 6863 } 6864 function onClick(e) { 6865 if (!disabled && clickPrevented) { 6866 prevent(e, true); 6867 } 6868 } 6869 function save(e) { 6870 prevBaseEvent = baseEvent; 6871 baseEvent = e; 6872 basePosition = getPosition(); 6873 } 6874 function move(e) { 6875 var velocity = computeVelocity(e); 6876 var destination = computeDestination(velocity); 6877 var rewind = options.rewind && options.rewindByDrag; 6878 reduce(false); 6879 if (isFree) { 6880 Controller2.scroll(destination, 0, options.snap); 6881 } else if (Splide2.is(FADE)) { 6882 Controller2.go(orient(sign(velocity)) < 0 ? rewind ? "<" : "-" : rewind ? ">" : "+"); 6883 } else if (Splide2.is(SLIDE) && exceeded && rewind) { 6884 Controller2.go(exceededLimit(true) ? ">" : "<"); 6885 } else { 6886 Controller2.go(Controller2.toDest(destination), true); 6887 } 6888 reduce(true); 6889 } 6890 function shouldStart(e) { 6891 var thresholds = options.dragMinThreshold; 6892 var isObj = isObject(thresholds); 6893 var mouse = isObj && thresholds.mouse || 0; 6894 var touch = (isObj ? thresholds.touch : +thresholds) || 10; 6895 return abs(diffCoord(e)) > (isTouchEvent(e) ? touch : mouse); 6896 } 6897 function isSliderDirection(e) { 6898 return abs(diffCoord(e)) > abs(diffCoord(e, true)); 6899 } 6900 function computeVelocity(e) { 6901 if (Splide2.is(LOOP) || !exceeded) { 6902 var time = diffTime(e); 6903 if (time && time < LOG_INTERVAL) { 6904 return diffCoord(e) / time; 6905 } 6906 } 6907 return 0; 6908 } 6909 function computeDestination(velocity) { 6910 return getPosition() + sign(velocity) * min(abs(velocity) * (options.flickPower || 600), isFree ? Infinity : Components2.Layout.listSize() * (options.flickMaxPages || 1)); 6911 } 6912 function diffCoord(e, orthogonal) {
vendor: 19,553 bytes, lines 6913-7517
6913 return coordOf(e, orthogonal) - coordOf(getBaseEvent(e), orthogonal); 6914 } 6915 function diffTime(e) { 6916 return timeOf(e) - timeOf(getBaseEvent(e)); 6917 } 6918 function getBaseEvent(e) { 6919 return baseEvent === e && prevBaseEvent || baseEvent; 6920 } 6921 function coordOf(e, orthogonal) { 6922 return (isTouchEvent(e) ? e.changedTouches[0] : e)["page" + resolve(orthogonal ? "Y" : "X")]; 6923 } 6924 function constrain(diff) { 6925 return diff / (exceeded && Splide2.is(SLIDE) ? FRICTION : 1); 6926 } 6927 function isDraggable(target2) { 6928 var noDrag = options.noDrag; 6929 return !matches(target2, "." + CLASS_PAGINATION_PAGE + ", ." + CLASS_ARROW) && (!noDrag || !matches(target2, noDrag)); 6930 } 6931 function isTouchEvent(e) { 6932 return typeof TouchEvent !== "undefined" && e instanceof TouchEvent; 6933 } 6934 function isDragging() { 6935 return dragging; 6936 } 6937 function disable(value) { 6938 disabled = value; 6939 } 6940 return { 6941 mount, 6942 disable, 6943 isDragging 6944 }; 6945} 6946var NORMALIZATION_MAP = { 6947 Spacebar: " ", 6948 Right: ARROW_RIGHT, 6949 Left: ARROW_LEFT, 6950 Up: ARROW_UP, 6951 Down: ARROW_DOWN 6952}; 6953function normalizeKey(key) { 6954 key = isString(key) ? key : key.key; 6955 return NORMALIZATION_MAP[key] || key; 6956} 6957var KEYBOARD_EVENT = "keydown"; 6958function Keyboard(Splide2, Components2, options) { 6959 var _EventInterface10 = EventInterface(Splide2), on = _EventInterface10.on, bind = _EventInterface10.bind, unbind = _EventInterface10.unbind; 6960 var root = Splide2.root; 6961 var resolve = Components2.Direction.resolve; 6962 var target; 6963 var disabled; 6964 function mount() { 6965 init(); 6966 on(EVENT_UPDATED, destroy); 6967 on(EVENT_UPDATED, init); 6968 on(EVENT_MOVE, onMove); 6969 } 6970 function init() { 6971 var keyboard = options.keyboard; 6972 if (keyboard) { 6973 target = keyboard === "global" ? window : root; 6974 bind(target, KEYBOARD_EVENT, onKeydown); 6975 } 6976 } 6977 function destroy() { 6978 unbind(target, KEYBOARD_EVENT); 6979 } 6980 function disable(value) { 6981 disabled = value; 6982 } 6983 function onMove() { 6984 var _disabled = disabled; 6985 disabled = true; 6986 nextTick(function() { 6987 disabled = _disabled; 6988 }); 6989 } 6990 function onKeydown(e) { 6991 if (!disabled) { 6992 var key = normalizeKey(e); 6993 if (key === resolve(ARROW_LEFT)) { 6994 Splide2.go("<"); 6995 } else if (key === resolve(ARROW_RIGHT)) { 6996 Splide2.go(">"); 6997 } 6998 } 6999 } 7000 return { 7001 mount, 7002 destroy, 7003 disable 7004 }; 7005} 7006var SRC_DATA_ATTRIBUTE = DATA_ATTRIBUTE + "-lazy"; 7007var SRCSET_DATA_ATTRIBUTE = SRC_DATA_ATTRIBUTE + "-srcset"; 7008var IMAGE_SELECTOR = "[" + SRC_DATA_ATTRIBUTE + "], [" + SRCSET_DATA_ATTRIBUTE + "]"; 7009function LazyLoad(Splide2, Components2, options) { 7010 var _EventInterface11 = EventInterface(Splide2), on = _EventInterface11.on, off = _EventInterface11.off, bind = _EventInterface11.bind, emit = _EventInterface11.emit; 7011 var isSequential = options.lazyLoad === "sequential"; 7012 var events = [EVENT_MOVED, EVENT_SCROLLED]; 7013 var entries = []; 7014 function mount() { 7015 if (options.lazyLoad) { 7016 init(); 7017 on(EVENT_REFRESH, init); 7018 } 7019 } 7020 function init() { 7021 empty(entries); 7022 register(); 7023 if (isSequential) { 7024 loadNext(); 7025 } else { 7026 off(events); 7027 on(events, check); 7028 check(); 7029 } 7030 } 7031 function register() { 7032 Components2.Slides.forEach(function(Slide2) { 7033 queryAll(Slide2.slide, IMAGE_SELECTOR).forEach(function(img) { 7034 var src = getAttribute(img, SRC_DATA_ATTRIBUTE); 7035 var srcset = getAttribute(img, SRCSET_DATA_ATTRIBUTE); 7036 if (src !== img.src || srcset !== img.srcset) { 7037 var className = options.classes.spinner; 7038 var parent = img.parentElement; 7039 var spinner = child(parent, "." + className) || create("span", className, parent); 7040 entries.push([img, Slide2, spinner]); 7041 img.src || display(img, "none"); 7042 } 7043 }); 7044 }); 7045 } 7046 function check() { 7047 entries = entries.filter(function(data) { 7048 var distance = options.perPage * ((options.preloadPages || 1) + 1) - 1; 7049 return data[1].isWithin(Splide2.index, distance) ? load(data) : true; 7050 }); 7051 entries.length || off(events); 7052 } 7053 function load(data) { 7054 var img = data[0]; 7055 addClass(data[1].slide, CLASS_LOADING); 7056 bind(img, "load error", apply(onLoad, data)); 7057 setAttribute(img, "src", getAttribute(img, SRC_DATA_ATTRIBUTE)); 7058 setAttribute(img, "srcset", getAttribute(img, SRCSET_DATA_ATTRIBUTE)); 7059 removeAttribute(img, SRC_DATA_ATTRIBUTE); 7060 removeAttribute(img, SRCSET_DATA_ATTRIBUTE); 7061 } 7062 function onLoad(data, e) { 7063 var img = data[0], Slide2 = data[1]; 7064 removeClass(Slide2.slide, CLASS_LOADING); 7065 if (e.type !== "error") { 7066 remove(data[2]); 7067 display(img, ""); 7068 emit(EVENT_LAZYLOAD_LOADED, img, Slide2); 7069 emit(EVENT_RESIZE); 7070 } 7071 isSequential && loadNext(); 7072 } 7073 function loadNext() { 7074 entries.length && load(entries.shift()); 7075 } 7076 return { 7077 mount, 7078 destroy: apply(empty, entries), 7079 check 7080 }; 7081} 7082function Pagination(Splide2, Components2, options) { 7083 var event = EventInterface(Splide2); 7084 var on = event.on, emit = event.emit, bind = event.bind; 7085 var Slides2 = Components2.Slides, Elements2 = Components2.Elements, Controller2 = Components2.Controller; 7086 var hasFocus = Controller2.hasFocus, getIndex = Controller2.getIndex, go = Controller2.go; 7087 var resolve = Components2.Direction.resolve; 7088 var placeholder = Elements2.pagination; 7089 var items = []; 7090 var list; 7091 var paginationClasses; 7092 function mount() { 7093 destroy(); 7094 on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], mount); 7095 var enabled = options.pagination; 7096 placeholder && display(placeholder, enabled ? "" : "none"); 7097 if (enabled) { 7098 on([EVENT_MOVE, EVENT_SCROLL, EVENT_SCROLLED], update); 7099 createPagination(); 7100 update(); 7101 emit(EVENT_PAGINATION_MOUNTED, { 7102 list, 7103 items 7104 }, getAt(Splide2.index)); 7105 } 7106 } 7107 function destroy() { 7108 if (list) { 7109 remove(placeholder ? slice(list.children) : list); 7110 removeClass(list, paginationClasses); 7111 empty(items); 7112 list = null; 7113 } 7114 event.destroy(); 7115 } 7116 function createPagination() { 7117 var length = Splide2.length; 7118 var classes = options.classes, i18n = options.i18n, perPage = options.perPage; 7119 var max2 = hasFocus() ? Controller2.getEnd() + 1 : ceil(length / perPage); 7120 list = placeholder || create("ul", classes.pagination, Elements2.track.parentElement); 7121 addClass(list, paginationClasses = CLASS_PAGINATION + "--" + getDirection()); 7122 setAttribute(list, ROLE, "tablist"); 7123 setAttribute(list, ARIA_LABEL, i18n.select); 7124 setAttribute(list, ARIA_ORIENTATION, getDirection() === TTB ? "vertical" : ""); 7125 for (var i = 0; i < max2; i++) { 7126 var li = create("li", null, list); 7127 var button = create("button", { 7128 class: classes.page, 7129 type: "button" 7130 }, li); 7131 var controls = Slides2.getIn(i).map(function(Slide2) { 7132 return Slide2.slide.id; 7133 }); 7134 var text = !hasFocus() && perPage > 1 ? i18n.pageX : i18n.slideX; 7135 bind(button, "click", apply(onClick, i)); 7136 if (options.paginationKeyboard) { 7137 bind(button, "keydown", apply(onKeydown, i)); 7138 } 7139 setAttribute(li, ROLE, "presentation"); 7140 setAttribute(button, ROLE, "tab"); 7141 setAttribute(button, ARIA_CONTROLS, controls.join(" ")); 7142 setAttribute(button, ARIA_LABEL, format(text, i + 1)); 7143 setAttribute(button, TAB_INDEX, -1); 7144 items.push({ 7145 li, 7146 button, 7147 page: i 7148 }); 7149 } 7150 } 7151 function onClick(page) { 7152 go(">" + page, true); 7153 } 7154 function onKeydown(page, e) { 7155 var length = items.length; 7156 var key = normalizeKey(e); 7157 var dir = getDirection(); 7158 var nextPage = -1; 7159 if (key === resolve(ARROW_RIGHT, false, dir)) { 7160 nextPage = ++page % length; 7161 } else if (key === resolve(ARROW_LEFT, false, dir)) { 7162 nextPage = (--page + length) % length; 7163 } else if (key === "Home") { 7164 nextPage = 0; 7165 } else if (key === "End") { 7166 nextPage = length - 1; 7167 } 7168 var item = items[nextPage]; 7169 if (item) { 7170 focus(item.button); 7171 go(">" + nextPage); 7172 prevent(e, true); 7173 } 7174 } 7175 function getDirection() { 7176 return options.paginationDirection || options.direction; 7177 } 7178 function getAt(index) { 7179 return items[Controller2.toPage(index)]; 7180 } 7181 function update() { 7182 var prev = getAt(getIndex(true)); 7183 var curr = getAt(getIndex()); 7184 if (prev) { 7185 var button = prev.button; 7186 removeClass(button, CLASS_ACTIVE); 7187 removeAttribute(button, ARIA_SELECTED); 7188 setAttribute(button, TAB_INDEX, -1); 7189 } 7190 if (curr) { 7191 var _button = curr.button; 7192 addClass(_button, CLASS_ACTIVE); 7193 setAttribute(_button, ARIA_SELECTED, true); 7194 setAttribute(_button, TAB_INDEX, ""); 7195 } 7196 emit(EVENT_PAGINATION_UPDATED, { 7197 list, 7198 items 7199 }, prev, curr); 7200 } 7201 return { 7202 items, 7203 mount, 7204 destroy, 7205 getAt, 7206 update 7207 }; 7208} 7209var TRIGGER_KEYS = [" ", "Enter"]; 7210function Sync(Splide2, Components2, options) { 7211 var isNavigation = options.isNavigation, slideFocus = options.slideFocus; 7212 var events = []; 7213 function mount() { 7214 Splide2.splides.forEach(function(target) { 7215 if (!target.isParent) { 7216 sync(Splide2, target.splide); 7217 sync(target.splide, Splide2); 7218 } 7219 }); 7220 if (isNavigation) { 7221 navigate(); 7222 } 7223 } 7224 function destroy() { 7225 events.forEach(function(event) { 7226 event.destroy(); 7227 }); 7228 empty(events); 7229 } 7230 function remount() { 7231 destroy(); 7232 mount(); 7233 } 7234 function sync(splide, target) { 7235 var event = EventInterface(splide); 7236 event.on(EVENT_MOVE, function(index, prev, dest) { 7237 target.go(target.is(LOOP) ? dest : index); 7238 }); 7239 events.push(event); 7240 } 7241 function navigate() { 7242 var event = EventInterface(Splide2); 7243 var on = event.on; 7244 on(EVENT_CLICK, onClick); 7245 on(EVENT_SLIDE_KEYDOWN, onKeydown); 7246 on([EVENT_MOUNTED, EVENT_UPDATED], update); 7247 events.push(event); 7248 event.emit(EVENT_NAVIGATION_MOUNTED, Splide2.splides); 7249 } 7250 function update() { 7251 setAttribute(Components2.Elements.list, ARIA_ORIENTATION, options.direction === TTB ? "vertical" : ""); 7252 } 7253 function onClick(Slide2) { 7254 Splide2.go(Slide2.index); 7255 } 7256 function onKeydown(Slide2, e) { 7257 if (includes(TRIGGER_KEYS, normalizeKey(e))) { 7258 onClick(Slide2); 7259 prevent(e); 7260 } 7261 } 7262 return { 7263 setup: apply(Components2.Media.set, { 7264 slideFocus: isUndefined(slideFocus) ? isNavigation : slideFocus 7265 }, true), 7266 mount, 7267 destroy, 7268 remount 7269 }; 7270} 7271function Wheel(Splide2, Components2, options) { 7272 var _EventInterface12 = EventInterface(Splide2), bind = _EventInterface12.bind; 7273 var lastTime = 0; 7274 function mount() { 7275 if (options.wheel) { 7276 bind(Components2.Elements.track, "wheel", onWheel, SCROLL_LISTENER_OPTIONS); 7277 } 7278 } 7279 function onWheel(e) { 7280 if (e.cancelable) { 7281 var deltaY = e.deltaY; 7282 var backwards = deltaY < 0; 7283 var timeStamp = timeOf(e); 7284 var _min = options.wheelMinThreshold || 0; 7285 var sleep = options.wheelSleep || 0; 7286 if (abs(deltaY) > _min && timeStamp - lastTime > sleep) { 7287 Splide2.go(backwards ? "<" : ">"); 7288 lastTime = timeStamp; 7289 } 7290 shouldPrevent(backwards) && prevent(e); 7291 } 7292 } 7293 function shouldPrevent(backwards) { 7294 return !options.releaseWheel || Splide2.state.is(MOVING) || Components2.Controller.getAdjacent(backwards) !== -1; 7295 } 7296 return { 7297 mount 7298 }; 7299} 7300var SR_REMOVAL_DELAY = 90; 7301function Live(Splide2, Components2, options) { 7302 var _EventInterface13 = EventInterface(Splide2), on = _EventInterface13.on; 7303 var track = Components2.Elements.track; 7304 var enabled = options.live && !options.isNavigation; 7305 var sr = create("span", CLASS_SR); 7306 var interval = RequestInterval(SR_REMOVAL_DELAY, apply(toggle, false)); 7307 function mount() { 7308 if (enabled) { 7309 disable(!Components2.Autoplay.isPaused()); 7310 setAttribute(track, ARIA_ATOMIC, true); 7311 sr.textContent = "â¦"; 7312 on(EVENT_AUTOPLAY_PLAY, apply(disable, true)); 7313 on(EVENT_AUTOPLAY_PAUSE, apply(disable, false)); 7314 on([EVENT_MOVED, EVENT_SCROLLED], apply(toggle, true)); 7315 } 7316 } 7317 function toggle(active) { 7318 setAttribute(track, ARIA_BUSY, active); 7319 if (active) { 7320 append(track, sr); 7321 interval.start(); 7322 } else { 7323 remove(sr); 7324 interval.cancel(); 7325 } 7326 } 7327 function destroy() { 7328 removeAttribute(track, [ARIA_LIVE, ARIA_ATOMIC, ARIA_BUSY]); 7329 remove(sr); 7330 } 7331 function disable(disabled) { 7332 if (enabled) { 7333 setAttribute(track, ARIA_LIVE, disabled ? "off" : "polite"); 7334 } 7335 } 7336 return { 7337 mount, 7338 disable, 7339 destroy 7340 }; 7341} 7342var ComponentConstructors = /* @__PURE__ */ Object.freeze({ 7343 __proto__: null, 7344 Media, 7345 Direction, 7346 Elements, 7347 Slides, 7348 Layout, 7349 Clones, 7350 Move, 7351 Controller, 7352 Arrows, 7353 Autoplay, 7354 Cover, 7355 Scroll, 7356 Drag, 7357 Keyboard, 7358 LazyLoad, 7359 Pagination, 7360 Sync, 7361 Wheel, 7362 Live 7363}); 7364var I18N = { 7365 prev: "Previous slide", 7366 next: "Next slide", 7367 first: "Go to first slide", 7368 last: "Go to last slide", 7369 slideX: "Go to slide %s", 7370 pageX: "Go to page %s", 7371 play: "Start autoplay", 7372 pause: "Pause autoplay", 7373 carousel: "carousel", 7374 slide: "slide", 7375 select: "Select a slide to show", 7376 slideLabel: "%s of %s" 7377}; 7378var DEFAULTS = { 7379 type: "slide", 7380 role: "region", 7381 speed: 400, 7382 perPage: 1, 7383 cloneStatus: true, 7384 arrows: true, 7385 pagination: true, 7386 paginationKeyboard: true, 7387 interval: 5e3, 7388 pauseOnHover: true, 7389 pauseOnFocus: true, 7390 resetProgress: true, 7391 easing: "cubic-bezier(0.25, 1, 0.5, 1)", 7392 drag: true, 7393 direction: "ltr", 7394 trimSpace: true, 7395 focusableNodes: "a, button, textarea, input, select, iframe", 7396 live: true, 7397 classes: CLASSES, 7398 i18n: I18N, 7399 reducedMotion: { 7400 speed: 0, 7401 rewindSpeed: 0, 7402 autoplay: "pause" 7403 } 7404}; 7405function Fade(Splide2, Components2, options) { 7406 var Slides2 = Components2.Slides; 7407 function mount() { 7408 EventInterface(Splide2).on([EVENT_MOUNTED, EVENT_REFRESH], init); 7409 } 7410 function init() { 7411 Slides2.forEach(function(Slide2) { 7412 Slide2.style("transform", "translateX(-" + 100 * Slide2.index + "%)"); 7413 }); 7414 } 7415 function start2(index, done) { 7416 Slides2.style("transition", "opacity " + options.speed + "ms " + options.easing); 7417 nextTick(done); 7418 } 7419 return { 7420 mount, 7421 start: start2, 7422 cancel: noop 7423 }; 7424} 7425function Slide(Splide2, Components2, options) { 7426 var Move2 = Components2.Move, Controller2 = Components2.Controller, Scroll2 = Components2.Scroll; 7427 var list = Components2.Elements.list; 7428 var transition = apply(style, list, "transition"); 7429 var endCallback; 7430 function mount() { 7431 EventInterface(Splide2).bind(list, "transitionend", function(e) { 7432 if (e.target === list && endCallback) { 7433 cancel(); 7434 endCallback(); 7435 } 7436 }); 7437 } 7438 function start2(index, done) { 7439 var destination = Move2.toPosition(index, true); 7440 var position = Move2.getPosition(); 7441 var speed = getSpeed(index); 7442 if (abs(destination - position) >= 1 && speed >= 1) { 7443 if (options.useScroll) { 7444 Scroll2.scroll(destination, speed, false, done); 7445 } else { 7446 transition("transform " + speed + "ms " + options.easing); 7447 Move2.translate(destination, true); 7448 endCallback = done; 7449 } 7450 } else { 7451 Move2.jump(index); 7452 done(); 7453 } 7454 } 7455 function cancel() { 7456 transition(""); 7457 Scroll2.cancel(); 7458 } 7459 function getSpeed(index) { 7460 var rewindSpeed = options.rewindSpeed; 7461 if (Splide2.is(SLIDE) && rewindSpeed) { 7462 var prev = Controller2.getIndex(true); 7463 var end2 = Controller2.getEnd(); 7464 if (prev === 0 && index >= end2 || prev >= end2 && index === 0) { 7465 return rewindSpeed; 7466 } 7467 } 7468 return options.speed; 7469 } 7470 return { 7471 mount, 7472 start: start2, 7473 cancel 7474 }; 7475} 7476var _Splide = /* @__PURE__ */ function() { 7477 function _Splide2(target, options) { 7478 this.event = EventInterface(); 7479 this.Components = {}; 7480 this.state = State(CREATED); 7481 this.splides = []; 7482 this._o = {}; 7483 this._E = {}; 7484 var root = isString(target) ? query(document, target) : target; 7485 assert(root, root + " is invalid."); 7486 this.root = root; 7487 options = merge({ 7488 label: getAttribute(root, ARIA_LABEL) || "", 7489 labelledby: getAttribute(root, ARIA_LABELLEDBY) || "" 7490 }, DEFAULTS, _Splide2.defaults, options || {}); 7491 try { 7492 merge(options, JSON.parse(getAttribute(root, DATA_ATTRIBUTE))); 7493 } catch (e) { 7494 assert(false, "Invalid JSON"); 7495 } 7496 this._o = Object.create(merge({}, options)); 7497 } 7498 var _proto = _Splide2.prototype; 7499 _proto.mount = function mount(Extensions, Transition) { 7500 var _this = this; 7501 var state = this.state, Components2 = this.Components; 7502 assert(state.is([CREATED, DESTROYED]), "Already mounted!"); 7503 state.set(CREATED); 7504 this._C = Components2; 7505 this._T = Transition || this._T || (this.is(FADE) ? Fade : Slide); 7506 this._E = Extensions || this._E; 7507 var Constructors = assign({}, ComponentConstructors, this._E, { 7508 Transition: this._T 7509 }); 7510 forOwn(Constructors, function(Component, key) { 7511 var component = Component(_this, Components2, _this._o); 7512 Components2[key] = component; 7513 component.setup && component.setup(); 7514 }); 7515 forOwn(Components2, function(component) { 7516 component.mount && component.mount(); 7517 });
7518 this.emit(EVENT_MOUNTED); 7519 addClass(this.root, CLASS_INITIALIZED); 7520 state.set(IDLE); 7521 this.emit(EVENT_READY); 7522 return this; 7523 }; 7524 _proto.sync = function sync(splide) { 7525 this.splides.push({ 7526 splide 7527 }); 7528 splide.splides.push({ 7529 splide: this, 7530 isParent: true 7531 }); 7532 if (this.state.is(IDLE)) { 7533 this._C.Sync.remount(); 7534 splide.Components.Sync.remount(); 7535 } 7536 return this; 7537 }; 7538 _proto.go = function go(control) { 7539 this._C.Controller.go(control); 7540 return this; 7541 }; 7542 _proto.on = function on(events, callback) { 7543 this.event.on(events, callback); 7544 return this; 7545 }; 7546 _proto.off = function off(events) { 7547 this.event.off(events); 7548 return this; 7549 }; 7550 _proto.emit = function emit(event) { 7551 var _this$event; 7552 (_this$event = this.event).emit.apply(_this$event, [event].concat(slice(arguments, 1))); 7553 return this; 7554 }; 7555 _proto.add = function add(slides, index) { 7556 this._C.Slides.add(slides, index); 7557 return this; 7558 }; 7559 _proto.remove = function remove2(matcher) { 7560 this._C.Slides.remove(matcher); 7561 return this; 7562 }; 7563 _proto.is = function is(type) { 7564 return this._o.type === type; 7565 }; 7566 _proto.refresh = function refresh() { 7567 this.emit(EVENT_REFRESH); 7568 return this; 7569 }; 7570 _proto.destroy = function destroy(completely) { 7571 if (completely === void 0) { 7572 completely = true; 7573 } 7574 var event = this.event, state = this.state; 7575 if (state.is(CREATED)) { 7576 EventInterface(this).on(EVENT_READY, this.destroy.bind(this, completely)); 7577 } else { 7578 forOwn(this._C, function(component) { 7579 component.destroy && component.destroy(completely); 7580 }, true); 7581 event.emit(EVENT_DESTROY); 7582 event.destroy(); 7583 completely && empty(this.splides); 7584 state.set(DESTROYED); 7585 } 7586 return this; 7587 }; 7588 _createClass(_Splide2, [{ 7589 key: "options", 7590 get: function get() { 7591 return this._o; 7592 }, 7593 set: function set(options) { 7594 this._C.Media.set(options, true, true); 7595 } 7596 }, { 7597 key: "length", 7598 get: function get() { 7599 return this._C.Slides.getLength(true); 7600 } 7601 }, { 7602 key: "index", 7603 get: function get() { 7604 return this._C.Controller.getIndex(); 7605 } 7606 }]); 7607 return _Splide2; 7608}(); 7609var Splide = _Splide; 7610Splide.defaults = {}; 7611Splide.STATES = STATES; 7612function Carousel2() { 7613 const elms = document.getElementsByClassName("splide"); 7614 for (let i = 0; i < elms.length; i++) { 7615 new Splide(elms[i]).mount(); 7616 } 7617 if (document.querySelector(".events-carousel")) { 7618 const informations = document.querySelectorAll(".events-carousel .informations"); 7619 informations.forEach((info) => { 7620 const rect2 = info.getBoundingClientRect(); 7621 const width = rect2.width; 7622 if (width > 515) { 7623 info.classList.add("long-content"); 7624 } 7625 }); 7626 } 7627} 7628function MenuMobile() { 7629 const menuTrigger = document.querySelector(".menu--trigger"); 7630 const menuClose = document.querySelector(".menu--close button"); 7631 const menu = document.querySelector(".menu--main nav ul"); 7632 menuTrigger.addEventListener("click", () => { 7633 menu.classList.add("is-open"); 7634 }); 7635 menuClose.addEventListener("click", () => { 7636 menu.classList.remove("is-open"); 7637 }); 7638} 7639function EventModal() { 7640 const elements = document.querySelectorAll(".element-modal"); 7641 elements.forEach((element) => { 7642 const button = element.querySelector("button"); 7643 if (button) { 7644 button.addEventListener("click", () => { 7645 const nameElement = element.querySelector(".informations .name"); 7646 const eventElement = element.querySelector(".informations .event"); 7647 const dateElement = element.querySelector(".informations .date"); 7648 const ticketsElement = element.querySelector(".informations .tickets"); 7649 const coverImageElement = element.querySelector(".informations .cover"); 7650 const name = nameElement ? nameElement.textContent : ""; 7651 const event = eventElement ? eventElement.textContent : ""; 7652 const date = dateElement ? dateElement.textContent : ""; 7653 let ticketsHtml = ticketsElement ? ticketsElement.innerHTML : ""; 7654 const dateParts = date.split("-"); 7655 const coverSrc = coverImageElement ? coverImageElement.src : ""; 7656 const modal = document.getElementById("event-modal"); 7657 modal.querySelector(".modal-body .name").textContent = name; 7658 modal.querySelector(".modal-body .event").textContent = event; 7659 modal.querySelector(".modal-body .date p").textContent = dateParts[0]; 7660 modal.querySelector(".modal-body .date p").textContent = dateParts[0]; 7661 modal.querySelector(".modal-body .hour p").textContent = dateParts[1]; 7662 function showModalElement(className) { 7663 let target = modal.querySelector(".modal-body ." + className); 7664 if (target) { 7665 target.classList.add("d-flex"); 7666 target.classList.remove("d-none"); 7667 } 7668 } 7669 function hideModalElement(className) { 7670 let target = modal.querySelector(".modal-body ." + className); 7671 if (target) { 7672 target.classList.add("d-none"); 7673 target.classList.remove("d-flex"); 7674 } 7675 } 7676 if (dateParts.length > 1) { 7677 dateParts[0].trim() != "" ? showModalElement("date") : hideModalElement("date"); 7678 dateParts[1].trim() != "" ? showModalElement("hour") : hideModalElement("hour"); 7679 dateParts[0].trim() == "" && dateParts[1].trim() == "" ? hideModalElement("dateHourBlock") : showModalElement("dateHourBlock"); 7680 } else { 7681 hideModalElement("dateHourBlock"); 7682 } 7683 modal.querySelector(".modal-body .tickets").innerHTML = ticketsHtml; 7684 modal.querySelector(".modal-header .cover").src = coverSrc; 7685 let buttonsPMR = document.querySelectorAll(".cta-
7685pmr-modal"); 7686 if (buttonsPMR.length > 0) { 7687 buttonsPMR.forEach((buttonPmr) => { 7688 let modalButtonPMR = document.getElementById("pmr-modal-button-" + buttonPmr.dataset.event); 7689 if (buttonPmr) { 7690 buttonPmr.addEventListener("click", function(e) { 7691 e.preventDefault(); 7692 modalButtonPMR.click(); 7693 }); 7694 } 7695 }); 7696 } 7697 let buttonsGroup = document.querySelectorAll(".cta-groupe-modal"); 7698 if (buttonsGroup.length > 0) { 7699 buttonsGroup.forEach((button2) => { 7700 let modalTrigger = document.getElementById( 7701 "groupe-modal-button-" + button2.dataset.event 7702 ); 7703 if (button2) { 7704 button2.addEventListener("click", function(e) { 7705 e.preventDefault(); 7706 modalTrigger.click(); 7707 }); 7708 } 7709 }); 7710 } 7711 }); 7712 } 7713 }); 7714 let buttonsStatut = document.querySelectorAll(".cta-statut-modal"); 7715 if (buttonsStatut.length > 0) { 7716 buttonsStatut.forEach((button) => { 7717 let modalTrigger = document.getElementById( 7718 "statut-modal-button-" + button.dataset.event 7719 ); 7720 if (button) { 7721 button.addEventListener("click", function(e) { 7722 e.preventDefault(); 7723 modalTrigger.click(); 7724 }); 7725 } 7726 }); 7727 } 7728} 7729function DatePickerCustom() { 7730 const dateFieldContainers = document.querySelectorAll(".form-date-container"); 7731 dateFieldContainers.forEach((dateFieldContainer) => { 7732 const select = dateFieldContainer.querySelector("select"); 7733 let wrapper = select.closest(".form-date-container"); 7734 if (!select) 7735 return; 7736 select.addEventListener("mousedown", (e) => { 7737 e.preventDefault(); 7738 if (wrapper.classList.contains("show")) { 7739 wrapper.classList.remove("show"); 7740 } else { 7741 wrapper.classList.add("show"); 7742 } 7743 }); 7744 wrapper.addEventListener("mouseleave", (e) => { 7745 wrapper.classList.remove("show"); 7746 }); 7747 showDeleteSymbol(select); 7748 const values = Array.from(select.options).map((option) => option.value.trim().toUpperCase()).filter((value) => value !== ""); 7749 const calendar = dateFieldContainer.querySelector(".calendar"); 7750 if (!calendar) 7751 return; 7752 const currentYear = (/* @__PURE__ */ new Date()).getFullYear(); 7753 const year = calendar.querySelector(".year .value"); 7754 const prev = calendar.querySelector(".year .prev"); 7755 const next = calendar.querySelector(".year .next"); 7756 if (!year || !prev || !next) 7757 return; 7758 year.textContent = currentYear; 7759 const updateMonths = () => { 7760 getMonths(calendar, year.textContent, values, select); 7761 }; 7762 prev.addEventListener("click", (e) => { 7763 e.preventDefault(); 7764 const yearValue = parseInt(year.textContent); 7765 if (yearValue > currentYear) { 7766 year.textContent = yearValue - 1; 7767 updateMonths(); 7768 } 7769 }); 7770 next.addEventListener("click", (e) => { 7771 e.preventDefault(); 7772 year.textContent = parseInt(year.textContent) + 1; 7773 updateMonths(); 7774 }); 7775 updateMonths(); 7776 }); 7777} 7778function getMonths(calendar, year, values, select) { 7779 const months = calendar.querySelectorAll(".months button"); 7780 months.forEach((button) => { 7781 const value = `${button.getAttribute("data-month")}/${year}`; 7782 const isHighlighted = values.includes(value); 7783 button.classList.toggle("highlighted", isHighlighted); 7784 button.removeEventListener("click", handleMonthClick); 7785 button.addEventListener("click", handleMonthClick); 7786 function handleMonthClick(e) { 7787 e.preventDefault(); 7788 if (isHighlighted) { 7789 select.value = value; 7790 showDeleteSymbol(select); 7791 } 7792 } 7793 }); 7794} 7795function showDeleteSymbol(select) { 7796 if (select.value) { 7797 if (!document.querySelector(".delete-icon")) { 7798 const iconDelete = document.createElement("div"); 7799 iconDelete.style.position = "absolute"; 7800 iconDelete.classList.add("delete-icon"); 7801 iconDelete.style.left = "100px"; 7802 iconDelete.style.top = "50%"; 7803 iconDelete.style.bottom = "50%"; 7804 iconDelete.style.transform = "translate(-50%, -50%)"; 7805 iconDelete.style.width = "10px"; 7806 iconDelete.style.height = "10px"; 7807 iconDelete.style.cursor = "pointer"; 7808 iconDelete.style.backgroundImage = `url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMTAiIHkyPSIxMCIgc3Ryb2tlPSIjRTMwNjEzIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iMCIgeTE9IjEwIiB4Mj0iMTAiIHkyPSIwIiBzdHJva2U9IiNFMzA2MTMiIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4=")`; 7809 iconDelete.style.backgroundRepeat = `no-repeat`; 7810 iconDelete.style.zIndex = "9"; 7811 iconDelete.addEventListener("click", () => { 7812 select.value = ""; 7813 iconDelete.remove(); 7814 }); 7815 select.closest(".form-date-container").appendChild(iconDelete); 7816 } 7817 } 7818} 7819function Dropdown2() { 7820 const triggerDropdown = document.querySelector(".dropdown"); 7821 if (triggerDropdown) { 7822 const contentDropdown = document.querySelector(".dropdownContent"); 7823 triggerDropdown.addEventListener("click", () => { 7824 triggerDropdown.classList.toggle("active"); 7825 contentDropdown.classList.toggle("active"); 7826 const contentDropdownActive = document.querySelector(".dropdownContent.active"); 7827 const innerWidthDropdown = triggerDropdown.offsetWidth; 7828 if (contentDropdownActive) { 7829 contentDropdown.style.width = innerWidthDropdown + "px"; 7830 } 7831 }); 7832 const active = contentDropdown.querySelector("li a.is-active"); 7833 if (active) { 7834 let html = active.textContent; 7835 let buttonPage = triggerDropdown.querySelector("span"); 7836 buttonPage.textContent = html; 7837 } 7838 } 7839} 7840function Map$1() { 7841 let pathsSvg = document.querySelectorAll(".elHover"); 7842 pathsSvg.forEach(function(path) { 7843 path.addEventListener("click", function() { 7844 const link = this.getAttribute("data-link"); 7845 if (link) { 7846 window.open(link, "_blank"); 7847 } else { 7848 console.warn("Aucun lien trouvé pour cet élément."); 7849 } 7850 }); 7851 }); 7852} 7853function adaptativeSize() { 7854 const parentChild = document.querySelector(".bg-main .news--slider"); 7855 if (parentChild) { 7856 const newsSlider = document.querySelector(".news--slider"); 7857 const bgMain = newsSlider.closest(".bg-main"); 7858 bgMain.style.padding = "0"; 7859 } 7860} 7861function InitGallery() { 7862 let gallerySplide = null; 7863 function initializeGallerySplide() { 7864 if (gallerySplide) { 7865 gallerySplide.destroy(); 7866 } 7867 gallerySplide = new Splide(document.querySelector("#gallery-splide"), { 7868 pagination: true 7869 }); 7870 gallerySplide.mount(); 7871 } 7872 let galeries = document.querySelectorAll("a[data-gallery-id]"); 7873 if (galeries.length > 0) {
7874 galeries.forEach((elem) => { 7875 elem.addEventListener("click", function(event) { 7876 event.preventDefault(); 7877 let buttonModaleGalerie = document.querySelector("#modal-galerie-button"); 7878 let modaleGalerie = document.getElementById("ModalGalerie"); 7879 let gallerieId = this.getAttribute("data-gallery-id"); 7880 let listOfPictures = document.getElementById(gallerieId).querySelectorAll("li"); 7881 let html = ""; 7882 Array.from(listOfPictures).forEach((e) => { 7883 e.classList.add("splide__slide"); 7884 html += e.outerHTML; 7885 }); 7886 modaleGalerie.querySelector("ul.splide__list").innerHTML = html; 7887 initializeGallerySplide(); 7888 buttonModaleGalerie.click(); 7889 }); 7890 }); 7891 } 7892} 7893function Init() { 7894 const modalButton = document.querySelector('.alerts--popin button[data-bs-toggle="modal"]'); 7895 if (modalButton) { 7896 modalButton.click(); 7897 } 7898 InitGallery(); 7899 const alertModal = document.getElementById("alert-modal"); 7900 if (alertModal) { 7901 alertModal.addEventListener("shown.bs.modal", function() { 7902 document.body.style.overflow = "hidden"; 7903 }); 7904 alertModal.addEventListener("hidden.bs.modal", function() { 7905 document.body.style.overflow = "auto"; 7906 }); 7907 } 7908} 7909function animArrows() { 7910 let arrowsToAnimate = document.querySelectorAll(".icon-arrow-animated.anim-long-bar"); 7911 const isMobile = window.matchMedia("(max-width: 768px)").matches; 7912 if (arrowsToAnimate.length > 0 && !isMobile) { 7913 arrowsToAnimate.forEach((arrow2) => { 7914 let svg = arrow2; 7915 let path = arrow2.querySelector("path"); 7916 let firstValue = 19; 7917 let secondValue = 39; 7918 let classReference = "hovered"; 7919 let target = null; 7920 if (arrow2.closest(".element")) { 7921 target = arrow2.closest(".element"); 7922 } else { 7923 target = arrow2; 7924 } 7925 target.addEventListener("mouseenter", () => { 7926 if (!arrow2.classList.contains(classReference)) { 7927 changeSVGViewBox(svg, secondValue); 7928 changeSVGWidth(svg, secondValue); 7929 changeSVGPath(path, secondValue); 7930 arrow2.classList.add(classReference); 7931 } 7932 }); 7933 target.addEventListener("mouseleave", () => { 7934 if (arrow2.classList.contains(classReference)) { 7935 changeSVGPath(path, firstValue); 7936 changeSVGViewBox(svg, firstValue); 7937 changeSVGWidth(svg, firstValue); 7938 arrow2.classList.remove(classReference); 7939 } 7940 }); 7941 }); 7942 } 7943} 7944function changeSVGPath(path, newValue) { 7945 let d = path.getAttribute("d").split(" "); 7946 d.splice(0, 1, `M${newValue}`); 7947 path.setAttribute("d", d.join(" ")); 7948} 7949function changeSVGWidth(svg, newValue) { 7950 svg.setAttribute("width", newValue); 7951} 7952function changeSVGViewBox(svg, newValue) { 7953 let viewbox = svg.getAttribute("viewBox").split(" "); 7954 viewbox.splice(2, 1, newValue); 7955 svg.setAttribute("viewBox", viewbox.join(" ")); 7956} 7957function form() { 7958 let form2 = document.querySelector("form"); 7959 let inputs = []; 7960 let textInputs = form2.querySelectorAll("input[type='text']"); 7961 let emailInputs = form2.querySelectorAll("input[type='email']"); 7962 let textareas = form2.querySelectorAll("textarea"); 7963 if (form2) { 7964 inputs = [...textInputs, ...emailInputs, ...textareas]; 7965 const logicLabel = (input) => { 7966 let classInputReference = "written"; 7967 if (input.value.length > 0 && !input.classList.contains(classInputReference)) { 7968 input.classList.add(classInputReference); 7969 } 7970 if (input.value.length == 0) { 7971 input.classList.remove(classInputReference); 7972 } 7973 }; 7974 if (inputs.length > 0) {
7975 inputs.forEach((input) => { 7976 input.addEventListener("keyup", function() { 7977 logicLabel(input); 7978 }); 7979 }); 7980 } 7981 } 7982} 7983function SelectPickerCustom() { 7984 const selectFieldContainers = document.querySelectorAll(".form-select-container"); 7985 selectFieldContainers.forEach((selectFieldContainer) => { 7986 const select = selectFieldContainer.querySelector("select"); 7987 let wrapper = select.closest(".form-select-container"); 7988 if (!select) 7989 return; 7990 select.addEventListener("mousedown", (e) => { 7991 e.preventDefault(); 7992 if (wrapper.classList.contains("show")) { 7993 wrapper.classList.remove("show"); 7994 } else { 7995 wrapper.classList.add("show"); 7996 } 7997 }); 7998 wrapper.addEventListener("mouseleave", (e) => { 7999 wrapper.classList.remove("show"); 8000 }); 8001 Array.from(select.options).map((option) => option.value.trim().toUpperCase()).filter((value) => value !== ""); 8002 const buttons = selectFieldContainer.querySelectorAll(".options button"); 8003 buttons.forEach((button) => { 8004 const value = `${button.getAttribute("data-value")}`; 8005 button.removeEventListener("click", handleMonthClick); 8006 button.addEventListener("click", handleMonthClick); 8007 function handleMonthClick(e) { 8008 e.preventDefault(); 8009 select.value = value; 8010 wrapper.classList.remove("show"); 8011 } 8012 }); 8013 }); 8014} 8015function EventsMenu() { 8016 const header = document.querySelector("header"); 8017 const isMobile = window.matchMedia("(max-width: 768px)").matches; 8018 const menu = header.querySelector("nav > ul"); 8019 const itemsWithSub = menu.querySelectorAll(":scope > li:has(ul)"); 8020 if (!isMobile) { 8021 let closeAllSubmenus2 = function() { 8022 itemsWithSub.forEach((item) => { 8023 const submenu = item.querySelector(".menu--sub"); 8024 if (submenu) 8025 submenu.classList.remove("visible"); 8026 }); 8027 }; 8028 var closeAllSubmenus = closeAllSubmenus2; 8029 let usingKeyboard = false; 8030 document.addEventListener("keydown", (event) => { 8031 if (event.key === "Tab") { 8032 usingKeyboard = true; 8033 } 8034 }); 8035 document.addEventListener("mousedown", () => { 8036 usingKeyboard = false; 8037 }); 8038 itemsWithSub.forEach((item) => { 8039 const submenu = item.querySelector(".menu--sub"); 8040 if (!submenu) 8041 return; 8042 item.addEventListener("mouseover", () => { 8043 closeAllSubmenus2(); 8044 submenu.classList.add("visible"); 8045 }); 8046 item.addEventListener("focusin", () => { 8047 closeAllSubmenus2(); 8048 submenu.classList.add("visible"); 8049 }); 8050 item.addEventListener("mouseout", (event) => { 8051 if (!item.contains(event.relatedTarget)) { 8052 submenu.classList.remove("visible"); 8053 } 8054 }); 8055 item.addEventListener("focusout", (event) => { 8056 if (usingKeyboard && !item.contains(event.relatedTarget)) { 8057 submenu.classList.remove("visible"); 8058 } 8059 }); 8060 }); 8061 } else { 8062 itemsWithSub.forEach((item) => { 8063 const submenu = item.querySelector(".menu--sub"); 8064 if (!submenu) 8065 return; 8066 const trigger = item.querySelector("svg.icon-chevron"); 8067 if (!trigger) 8068 return; 8069 trigger.addEventListener("click", () => { 8070 submenu.classList.toggle("visible"); 8071 item.classList.toggle("is-open"); 8072 }); 8073 }); 8074 } 8075} 8076document.addEventListener("DOMContentLoaded", function() { 8077 Carousel2(); 8078 MenuMobile(); 8079 EventModal(); 8080 DatePickerCustom(); 8081 Dropdown2(); 8082 Map$1(); 8083 adaptativeSize(); 8084 animArrows(); 8085 form(); 8086 Init(); 8087 SelectPickerCustom(); 8088 EventsMenu(); 8089}); 8090window.addEventListener("pageshow", function(event) { 8091 const historyTraversal = event.persisted || typeof window.performance != "undefined" && window.performance.navigation.type === 2; 8092 if (historyTraversal) { 8093 window.location.reload(); 8094 } 8095});
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.