1<!DOCTYPE html> 2<html lang="en-US" itemscope itemtype="http://schema.org/WebPage"> 3 4<head> 5 <meta name="generator" content="Hugo 0.165.0"> 6 7 <meta charset="utf-8"> 8 9<title> 10 11 MagicPods â hub of your Bluetooth headphones for Windows 12 13</title> 14 15 16<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5"> 17 18<meta name="theme-name" content="bigspring-hugo" /> 19 20 21 22 23 24 25 26 27<link rel="shortcut icon" href="https://magicpods.app/images/favicon.png" type="image/x-icon"> 28<link rel="icon" href="https://magicpods.app/images/favicon.png" type="image/x-icon"> 29<link rel="icon" type="image/png" sizes="48x48" href="https://magicpods.app/images/favicon.png"> 30<link rel="icon" type="image/png" sizes="96x96" href="https://magicpods.app/images/favicon.png"> 31<link rel="apple-touch-icon" sizes="144x144" href="https://magicpods.app/images/favicon.png"> 32 33 34 35 36 37 38<link rel="manifest" href="/manifest.webmanifest" /> 39<meta 40 name="msapplication-TileColor" 41 content="#0360DD" /> 42<meta 43 name="theme-color" 44 content="#fff" /> 45 46 47 48 49 50 51 52 53 <base href="https://magicpods.app/" /> 54 55 56 57 58 59 60 61 62 63 64<title>MagicPods â hub of your Bluetooth headphones for Windows</title> 65 66 67 68 69 70 71 72 73 74 75 76 77 78<link rel="canonical" href="https://magicpods.app/" itemprop="url" /> 79 80 81 82 83 84 <link rel="alternate" hreflang="en" href="https://magicpods.app/" /> 85 86 <link rel="alternate" hreflang="ru" href="https://magicpods.app/ru/" /> 87 88 <link rel="alternate" hreflang="x-default" href="https://magicpods.app/" /> 89 90 91 92 93 94 <meta 95 name="keywords" 96 content="Bluetooth, Battery, AirPods, Beats, Sony, Airoha, Galaxy Buds, noise cancellation, Windows, Steam Deck" /> 97 98 99 100 101<meta 102 name="description" 103 content="Check AirPods battery on Windows with popup animation, noise control, hotkeys & more. Works offline, private, no ads." /> 104 105 106 107 <meta name="author" content="Aleksandr Maslov" /> 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 <meta name="twitter:card" content="summary_large_image" /> 129 <meta name="twitter:image" content="https://magicpods.app/images/og-image.png" /> 130 <meta property="og:image" content="https://magicpods.app/images/og-image.png" /> 131 132 133 134 135 136<meta property="og:title" content="MagicPods â hub of your Bluetooth headphones for Windows" /> 137<meta property="og:description" content="Check AirPods battery on Windows with popup animation, noise control, hotkeys & more. Works offline, private, no ads." /> 138<meta property="og:type" content="website" /> 139<meta property="og:url" content="https://magicpods.app/" /> 140 141 142<meta name="twitter:title" content="MagicPods â hub of your Bluetooth headphones for Windows" /> 143<meta name="twitter:description" content="Check AirPods battery on Windows with popup animation, noise control, hotkeys & more. Works offline, private, no ads." /> 144 145 146 <meta name="twitter:site" content="@steam3d" /> 147 148 149 <meta name="twitter:creator" content="@steam3d" /> 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177<meta http-equiv="x-dns-prefetch-control" content="on" /> 178<link rel="preconnect" href="//ajax.googleapis.com" /> 179<link 180 rel="preconnect" 181 href="https://fonts.gstatic.com" 182 crossorigin="anonymous" /> 183<link rel="preconnect" href="https://use.fontawesome.com" crossorigin /> 184<link rel="preconnect" href="//cdnjs.cloudflare.com" /> 185<link rel="preconnect" href="//www.googletagmanager.com" /> 186<link rel="preconnect" href="//www.google-analytics.com" /> 187<link rel="dns-prefetch" href="https://fonts.gstatic.com" /> 188<link rel="dns-prefetch" href="https://use.fontawesome.com" /> 189<link rel="dns-prefetch" href="//ajax.googleapis.com" /> 190<link rel="dns-prefetch" href="//cdnjs.cloudflare.com" /> 191<link rel="dns-prefetch" href="//www.googletagmanager.com" /> 192<link rel="dns-prefetch" href="//www.google-analytics.com" /> 193<link rel="dns-prefetch" href="//fonts.googleapis.com" /> 194<link rel="dns-prefetch" href="//connect.facebook.net" /> 195<link rel="dns-prefetch" href="//platform.linkedin.com" /> 196<link rel="dns-prefetch" href="//platform.twitter.com" /> 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229<link rel="stylesheet" href="/css/style.css" /> 230 231 232 233</head> 234 235<body> 236 237 238 239 240 241 242 243 244 245 246 247<header class="navigation"> 248 <div class="container"> 249 250 <nav class="navbar navbar-expand-lg navbar-light"> 251 252 <a class="navbar-brand" href="/"> 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 <img 281 fetchpriority="high" 282 decoding="async" 283 src="https://magicpods.app/images/logo.png" 284 alt="MagicPods" 285 class="img img-light" 286 height="auto" 287 width="156" /> 288 <img 289 fetchpriority="high" 290 decoding="async" 291 src="https://magicpods.app/images/logo-w.png" 292 alt="MagicPods" 293 class="img img-dark" 294 height="auto" 295 width="156" /> 296 297 298 299 300 </a> 301 302 <div class="d-flex align-items-center"> 303 304 305 <select class="me-3 border-0 d-inline-block d-lg-none" onchange="location = this.value;"> 306 307 308 309 310 311 312 313 314 <option id="en" value="/" selected>EN 315 </option> 316 317 318 319 320 321 322 323 324 325 326 327 328 329 <option id="ru" value="/ru/">RU</option> 330 331 332 333 334 </select> 335 336 337 <button aria-label="navbar toggler" class="navbar-toggler border-0 h4 mb-0" type="button" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#navigation"> 338 <i class="fas fa-bars"></i> 339 <i class="fa-solid fa-xmark"></i> 340 </button> 341 342 343 </div> 344 345 <div class="collapse navbar-collapse text-center" id="navigation"> 346 <ul class="navbar-nav mx-auto"> 347 348 349 350 351 352 353 354 <li class="nav-item "> 355 <a class="nav-link" 356 href="/buy">Purchase</a> 357 </li> 358 359 360 361 362 363 364 <li class="nav-item "> 365 <a class="nav-link" target="_blank" rel="noopener" 366 href="https://help.magicpods.app">Help</a> 367 </li> 368 369 370 371 372 373 374 <li class="nav-item dropdown "> 375 <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 376 More 377 </a> 378 <ul class="dropdown-menu"> 379 380 381 382 <li> 383 <a class="dropdown-item " target="_blank" rel="noopener" 384 href="https://weblate.magicpods.app/engage/magicpods-windows/">Translate</a> 385 </li> 386 387 388 389 <li> 390 <a class="dropdown-item " 391 href="/magicaap">MagicAAP driver</a> 392 </li> 393 394 395 396 <li> 397 <a class="dropdown-item " 398 href="/headphones">Supported headphones</a> 399 </li> 400 401 402 403 <li> 404 <a class="dropdown-item " 405 href="/add-headphones">Help add headphones</a> 406 </li> 407 408 409 410 <li> 411 <a class="dropdown-item " 412 href="/faq">FAQ</a> 413 </li> 414 415 416 417 <li> 418 <a class="dropdown-item " 419 href="/blog">Blog and news</a> 420 </li> 421 422 </ul> 423 </li> 424 425 426 427 428 429 430 <li class="nav-item dropdown dropdown-lg "> 431 <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 432 Apps 433 </a> 434 <ul class="dropdown-menu"> 435 436 437 438 <li> 439 <a class="dropdown-item " 440 href="/steamdeck"><img class='dropdown-icon' style='width:24px;height:24px;top:9px' src='/images/apps/magicpods.png'>MagicPods<small class='dropdown-subtitle'>Plugin for Steam Deck</small></a> 441 </li> 442 443 444 445 <li> 446 <a class="dropdown-item " target="_blank" rel="noopener" 447 href="https://github.com/steam3d/magicblackDecky"><img class='dropdown-icon' style='width:24px;height:24px;top:9px' src='/images/apps/magicblack.png'>MagicBlack<small class='dropdown-subtitle'>Simple plugin to turn off Steam Deck screen</small></a> 448 </li> 449 450 451 452 <li> 453 <a class="dropdown-item " target="_blank" rel="noopener" 454 href="https://apps.microsoft.com/store/detail/9N78GWBTW7L5"><img class='dropdown-icon' style='width:24px;height:24px;top:9px' src='/images/apps/magicselect.png'>MagicSelect<small class='dropdown-subtitle'>Select and copy text from any images</small></a> 455 </li> 456 457 458 459 <li> 460 <a class="dropdown-item " target="_blank" rel="noopener" 461 href="https://apps.microsoft.com/store/detail/9NGB2P0TSMBF"><img class='dropdown-icon' style='width:24px;height:24px;top:9px' src='/images/apps/magictranslate.png'>MagicTranslate<small class='dropdown-subtitle'>Translate text with one hotkey</small></a> 462 </li> 463 464 465 466 <li> 467 <a class="dropdown-item " target="_blank" rel="noopener" 468 href="https://play.google.com/store/apps/details?id=yet.another.dino"><img class='dropdown-icon' style='width:24px;height:24px;top:9px' src='/images/apps/yad.png'>Yet Another dino<small class='dropdown-subtitle'>Run, jump, and dodge in a dangerous adventure</small></a> 469 </li> 470 471 472 473 <li> 474 <a class="dropdown-item " target="_blank" rel="noopener" 475 href="https://play.google.com/store/apps/details?id=com.watchfacestudio.twistwatchface"><img class='dropdown-icon' style='width:24px;height:24px;top:9px' src='/images/apps/watchface.png'>Twist<small class='dropdown-subtitle'>Watchface for Android Wear</small></a> 476 </li> 477 478 479 480 <li> 481 <a class="dropdown-item " target="_blank" rel="noopener" 482 href="https://play.google.com/store/apps/details?id=com.watchfacestudio.smartminimalismwatchface"><img class='dropdown-icon' style='width:24px;height:24px;top:9px' src='/images/apps/watchface.png'>Smart minimalism<small class='dropdown-subtitle'>Watchface for Android Wear</small></a> 483 </li> 484 485 </ul> 486 </li> 487 488 489 490 491 492 493 <li class="nav-item "> 494 <a class="nav-link" target="_blank" rel="noopener" 495 href="https://discord.com/invite/UyY4PY768V">Discord</a> 496 </li> 497 498 499 500 501 502 503 <li class="nav-item "> 504 <a class="nav-link" 505 href="/contact">Contact</a> 506 </li> 507 508 509 </ul> 510 511 512 513 <select class="me-1 border-0 d-none d-lg-inline-block" id="select-language" onchange="location = this.value;"> 514 515 516 517 518 519 520 521 522 <option id="en" value="/" selected>EN 523 </option> 524 525 526 527 528 529 530 531 532 533 534 535 536 537 <option id="ru" value="/ru/">RU</option> 538 539 540 541 542 </select> 543 544 545 546 547 548 </div> 549 </nav> 550 </div> 551</header> 552 553 554 555 556 557 558 <main> 559 560<link rel="stylesheet" href="https://magicpods.app/css/magic-button.css"> 561<link rel="stylesheet" href="https://magicpods.app/css/feature-icon.css"> 562 563 564 565<section class=""> 566 <div class="container"> 567 <div class="row"> 568 <div class="col-lg-10 mx-auto text-center"> 569 <div class="os-tabs mx-auto mb-5" role="tablist" aria-label="Platform switch"> 570 <a 571 class="os-tab is-active" 572 href="/" 573 role="tab" 574 aria-selected="true" 575 >Windows</a 576 > 577 <a 578 class="os-tab" 579 href="/linux/" 580 role="tab" 581 aria-selected="false" 582 >Linux</a 583 > 584 </div> 585 <h1 class="mb-4 pb-2 mx-auto text-center" style="max-width: 992px;">Add a little magic to your AirPodsâ¨</h1> 586 <p class="mb-4">Manage all your Bluetooth headphones on Windows from one place</p> 587 <div class="mb-5"> 588 589 590 591 592
593<a class="radient-border js-hover-sparkles" data-sparkles-color="hsl(50deg, 100%, 50%)" href="https://apps.microsoft.com/store/detail/9P6SKKFKSHKM" target="_blank" rel="noopener noreferrer"> 594 <svg width="146" height="32" viewBox="0 0 146 32" fill="none" xmlns="http://www.w3.org/2000/svg"> 595<path d="M145.113 22.2779H139.319C139.341 23.0632 139.582 23.6689 140.041 24.0947C140.506 24.5206 141.142 24.7335 141.95 24.7335C142.858 24.7335 143.691 24.4625 144.449 23.9205V25.4719C143.674 25.9586 142.65 26.2019 141.377 26.2019C140.127 26.2019 139.145 25.8175 138.431 25.0488C137.722 24.2745 137.368 23.1877 137.368 21.7884C137.368 20.4666 137.758 19.3908 138.539 18.5612C139.324 17.7261 140.298 17.3085 141.46 17.3085C142.623 17.3085 143.522 17.6819 144.158 18.4285C144.795 19.1752 145.113 20.2122 145.113 21.5395V22.2779ZM143.253 20.9173C143.248 20.226 143.085 19.6895 142.764 19.3079C142.443 18.9207 142 18.7272 141.436 18.7272C140.882 18.7272 140.412 18.929 140.024 19.3328C139.643 19.7365 139.407 20.2647 139.319 20.9173H143.253Z" fill="black"/> 596<path d="M137.214 19.3411C136.981 19.1586 136.647 19.0673 136.209 19.0673C135.639 19.0673 135.164 19.3245 134.782 19.8389C134.4 20.3532 134.209 21.0529 134.209 21.9378V26.0028H132.283V17.5077H134.209V19.2581H134.242C134.43 18.6608 134.718 18.1962 135.105 17.8644C135.498 17.527 135.936 17.3583 136.417 17.3583C136.766 17.3583 137.031 17.4109 137.214 17.516V19.3411Z" fill="black"/> 597<path d="M126.402 26.2019C125.091 26.2019 124.042 25.8065 123.256 25.0156C122.476 24.2192 122.086 23.1656 122.086 21.8548C122.086 20.4279 122.493 19.3134 123.306 18.5115C124.125 17.7095 125.226 17.3085 126.61 17.3085C127.938 17.3085 128.973 17.6984 129.714 18.4783C130.456 19.2581 130.827 20.3394 130.827 21.722C130.827 23.0771 130.425 24.1639 129.623 24.9824C128.826 25.7954 127.753 26.2019 126.402 26.2019ZM126.494 18.8433C125.741 18.8433 125.146 19.106 124.709 19.6314C124.272 20.1569 124.053 20.8814 124.053 21.805C124.053 22.6955 124.275 23.3979 124.717 23.9122C125.16 24.421 125.752 24.6754 126.494 24.6754C127.252 24.6754 127.833 24.4238 128.237 23.9205C128.646 23.4172 128.851 22.701 128.851 21.7718C128.851 20.8371 128.646 20.1154 128.237 19.6065C127.833 19.0977 127.252 18.8433 126.494 18.8433Z" fill="black"/> 598<path d="M121.583 25.9115C121.207 26.0996 120.711 26.1936 120.097 26.1936C118.448 26.1936 117.624 25.4027 117.624 23.8209V19.0175H116.204V17.5076H117.624V15.5414L119.549 14.9939V17.5076H121.583V19.0175H119.549V23.2651C119.549 23.7684 119.641 24.1279 119.823 24.3436C120.006 24.5593 120.31 24.6671 120.736 24.6671C121.063 24.6671 121.345 24.5731 121.583 24.3851V25.9115Z" fill="black"/> 599<path d="M108.513 25.53V23.4974C108.696 23.6634 108.912 23.8127 109.161 23.9454C109.415 24.0782 109.684 24.1915 109.966 24.2856C110.248 24.374 110.53 24.4432 110.812 24.493C111.095 24.5427 111.355 24.5676 111.593 24.5676C112.423 24.5676 113.04 24.4294 113.444 24.1528C113.853 23.8763 114.058 23.4753 114.058 22.9499C114.058 22.6678 113.989 22.4245 113.851 22.2198C113.718 22.0097 113.53 21.8189 113.286 21.6474C113.043 21.476 112.755 21.3128 112.423 21.1579C112.096 20.9975 111.745 20.8316 111.369 20.6602C110.965 20.4445 110.588 20.226 110.24 20.0048C109.891 19.7836 109.587 19.5402 109.327 19.2747C109.072 19.0037 108.87 18.6995 108.721 18.3622C108.577 18.0248 108.505 17.6293 108.505 17.1758C108.505 16.6172 108.629 16.1333 108.878 15.724C109.133 15.3092 109.465 14.9691 109.875 14.7036C110.29 14.4326 110.76 14.2335 111.286 14.1063C111.811 13.9735 112.348 13.9072 112.896 13.9072C114.141 13.9072 115.049 14.0482 115.619 14.3303V16.2798C114.944 15.7931 114.075 15.5498 113.012 15.5498C112.719 15.5498 112.426 15.5774 112.132 15.6327C111.845 15.6881 111.584 15.7793 111.352 15.9065C111.125 16.0337 110.94 16.1969 110.796 16.396C110.652 16.5951 110.58 16.8357 110.58 17.1177C110.58 17.3832 110.635 17.6127 110.746 17.8063C110.857 17.9999 111.017 18.1769 111.228 18.3373C111.443 18.4977 111.703 18.6553 112.008 18.8101C112.318 18.9595 112.675 19.1226 113.079 19.2996C113.494 19.5153 113.884 19.7421 114.249 19.9799C114.62 20.2177 114.944 20.4804 115.22 20.768C115.502 21.0556 115.724 21.3764 115.884 21.7304C116.05 22.0788 116.133 22.477 116.133 22.925C116.133 23.5278 116.012 24.0367 115.768 24.4515C115.525 24.8663 115.195 25.2037 114.78 25.4636C114.371 25.7235 113.898 25.9116 113.361 26.0277C112.824 26.1439 112.257 26.202 111.659 26.202C111.46 26.202 111.214 26.1854 110.92 26.1522C110.633 26.1245 110.337 26.0803 110.032 26.0194C109.728 25.9641 109.44 25.895 109.169 25.812C108.898 25.7291 108.679 25.6351 108.513 25.53Z" fill="black"/> 600<path d="M103.523 25.9115C103.147 26.0996 102.652 26.1936 102.038 26.1936C100.389 26.1936 99.564 25.4027 99.564 23.8209V19.0175H98.1445V17.5076H99.564V15.5414L101.49 14.9939V17.5076H103.523V19.0175H101.49V23.2651C101.49 23.7684 101.581 24.1279 101.764 24.3436C101.946 24.5593 102.251 24.6671 102.677 24.6671C103.003 24.6671 103.285 24.5731 103.523 24.3851V25.9115Z" fill="black"/> 601<path d="M98.1807 14.9939C97.9206 14.8446 97.6245 14.7699 97.2925 14.7699C96.3573 14.7699 95.8896 15.2981 95.8896 16.3545V17.5076H97.8652V19.0175H95.8979V26.0028H93.9722V19.0175H92.5195V17.5076H93.9722V16.1305C93.9722 15.2345 94.2655 14.5294 94.8521 14.015C95.4386 13.4951 96.1719
60113.2352 97.0518 13.2352C97.5277 13.2352 97.904 13.2877 98.1807 13.3928V14.9939Z" fill="black"/> 602<path d="M87.7754 26.2019C86.4639 26.2019 85.4152 25.8065 84.6294 25.0156C83.8491 24.2192 83.459 23.1656 83.459 21.8548C83.459 20.4279 83.8657 19.3134 84.6792 18.5115C85.4982 17.7095 86.5994 17.3085 87.9829 17.3085C89.311 17.3085 90.3459 17.6984 91.0874 18.4783C91.8289 19.2581 92.1997 20.3394 92.1997 21.722C92.1997 23.0771 91.7985 24.1639 90.9961 24.9824C90.1992 25.7954 89.1257 26.2019 87.7754 26.2019ZM87.8667 18.8433C87.1141 18.8433 86.5192 19.106 86.082 19.6314C85.6449 20.1569 85.4263 20.8814 85.4263 21.805C85.4263 22.6955 85.6476 23.3979 86.0903 23.9122C86.533 24.421 87.1252 24.6754 87.8667 24.6754C88.6248 24.6754 89.2059 24.4238 89.6099 23.9205C90.0194 23.4172 90.2241 22.701 90.2241 21.7718C90.2241 20.8371 90.0194 20.1154 89.6099 19.6065C89.2059 19.0977 88.6248 18.8433 87.8667 18.8433Z" fill="black"/> 603<path d="M76.6475 25.7373V23.9537C77.3669 24.5012 78.161 24.775 79.0298 24.775C80.1919 24.775 80.7729 24.4321 80.7729 23.7463C80.7729 23.5527 80.7231 23.3896 80.6235 23.2568C80.5239 23.1186 80.3883 22.9969 80.2168 22.8918C80.0508 22.7867 79.8516 22.6927 79.6191 22.6097C79.3923 22.5268 79.1377 22.4327 78.8555 22.3277C78.5068 22.1894 78.1914 22.0428 77.9092 21.888C77.6325 21.7331 77.4001 21.5589 77.2119 21.3653C77.0293 21.1662 76.891 20.9422 76.7969 20.6933C76.7028 20.4444 76.6558 20.1541 76.6558 19.8222C76.6558 19.413 76.7526 19.0535 76.9463 18.7438C77.14 18.4285 77.4001 18.1658 77.7266 17.9556C78.0531 17.7399 78.4238 17.5795 78.8389 17.4745C79.2539 17.3638 79.6828 17.3085 80.1255 17.3085C80.9113 17.3085 81.6141 17.4274 82.2339 17.6653V19.3494C81.6362 18.9401 80.95 18.7355 80.1753 18.7355C79.9318 18.7355 79.7104 18.7603 79.5112 18.8101C79.3175 18.8599 79.1515 18.929 79.0132 19.0175C78.8748 19.106 78.7669 19.2139 78.6895 19.3411C78.612 19.4627 78.5732 19.5982 78.5732 19.7476C78.5732 19.9301 78.612 20.085 78.6895 20.2122C78.7669 20.3394 78.8804 20.4527 79.0298 20.5523C79.1847 20.6463 79.3674 20.7348 79.5776 20.8178C79.7935 20.8952 80.0397 20.9809 80.3164 21.075C80.6816 21.2243 81.0081 21.3764 81.2959 21.5312C81.5892 21.6861 81.8382 21.8631 82.043 22.0622C82.2477 22.2558 82.4054 22.4825 82.5161 22.7425C82.6268 22.9969 82.6821 23.3011 82.6821 23.655C82.6821 24.0864 82.5825 24.4625 82.3833 24.7833C82.1841 25.1041 81.9185 25.3696 81.5864 25.5797C81.2544 25.7899 80.8698 25.9447 80.4326 26.0443C80.001 26.1494 79.5444 26.2019 79.063 26.2019C78.1333 26.2019 77.3281 26.0471 76.6475 25.7373Z" fill="black"/> 604<path d="M71.2979 26.2019C69.9863 26.2019 68.9377 25.8065 68.1519 25.0156C67.3716 24.2192 66.9814 23.1656 66.9814 21.8548C66.9814 20.4279 67.3882 19.3134 68.2017 18.5115C69.0207 17.7095 70.1219 17.3085 71.5054 17.3085C72.8335 17.3085 73.8683 17.6984 74.6099 18.4783C75.3514 19.2581 7
6045.7222 20.3394 75.7222 21.722C75.7222 23.0771 75.321 24.1639 74.5186 24.9824C73.7217 25.7954 72.6481 26.2019 71.2979 26.2019ZM71.3892 18.8433C70.6366 18.8433 70.0417 19.106 69.6045 19.6314C69.1673 20.1569 68.9487 20.8814 68.9487 21.805C68.9487 22.6955 69.1701 23.3979 69.6128 23.9122C70.0555 24.421 70.6476 24.6754 71.3892 24.6754C72.1473 24.6754 72.7284 24.4238 73.1323 23.9205C73.5418 23.4172 73.7466 22.701 73.7466 21.7718C73.7466 20.8371 73.5418 20.1154 73.1323 19.6065C72.7284 19.0977 72.1473 18.8433 71.3892 18.8433Z" fill="black"/> 605<path d="M66.8272 19.3411C66.5947 19.1586 66.2599 19.0673 65.8228 19.0673C65.2528 19.0673 64.7769 19.3245 64.395 19.8389C64.0132 20.3532 63.8223 21.0529 63.8223 21.9378V26.0028H61.8965V17.5077H63.8223V19.2581H63.8555C64.0436 18.6608 64.3314 18.1962 64.7188 17.8644C65.1117 17.527 65.5488 17.3583 66.0303 17.3583C66.3789 17.3583 66.6445 17.4109 66.8272 17.516V19.3411Z" fill="black"/> 606<path d="M60.4888 25.6129C59.8081 26.0056 59.0029 26.2019 58.0732 26.2019C56.8115 26.2019 55.7933 25.8092 55.0186 25.0239C54.2438 24.233 53.8564 23.2098 53.8564 21.9543C53.8564 20.5551 54.2715 19.4323 55.1016 18.5861C55.9372 17.7344 57.0522 17.3085 58.4468 17.3085C59.2215 17.3085 59.9049 17.444 60.4971 17.715V19.507C59.9049 19.0645 59.2741 18.8433 58.6045 18.8433C57.791 18.8433 57.1242 19.1198 56.604 19.6729C56.0838 20.2205 55.8237 20.9394 55.8237 21.8299C55.8237 22.7093 56.0672 23.4034 56.5542 23.9122C57.0467 24.421 57.7052 24.6754 58.5298 24.6754C59.2215 24.6754 59.8745 24.4293 60.4888 23.9371V25.6129Z" fill="black"/> 607<path d="M51.4365 15.724C51.1211 15.724 50.8499 15.6217 50.623 15.417C50.4017 15.2124 50.291 14.9524 50.291 14.6372C50.291 14.3219 50.4017 14.0592 50.623 13.8491C50.8499 13.6389 51.1211 13.5338 51.4365 13.5338C51.763 13.5338 52.0397 13.6389 52.2666 13.8491C52.4935 14.0592 52.6069 14.3219 52.6069 14.6372C52.6069 14.9359 52.4935 15.193 52.2666 15.4087C52.0397 15.6189 51.763 15.724 51.4365 15.724ZM52.3911 26.0028H50.4653V17.5076H52.3911V26.0028Z" fill="black"/> 608<path d="M48.252 26.0028H46.293V18.3041C46.293 17.6736 46.3317 16.902 46.4092 15.9895H46.376C46.2542 16.5094 46.1463 16.8827 46.0522 17.1094L42.4995 26.0028H41.1382L37.5771 17.1758C37.4775 16.9159 37.3724 16.5204 37.2617 15.9895H37.2285C37.2728 16.4651 37.2949 17.2422 37.2949 18.3207V26.0028H35.4688V14.1063H38.2495L41.3789 22.029C41.6169 22.6374 41.7718 23.0909 41.8438 23.3896H41.8853C42.09 22.7646 42.256 22.3 42.3833 21.9958L45.5708 14.1063H48.252V26.0028Z" fill="black"/> 609<path d="M128.871 8.82512V7.56607C129.379 7.95257 129.939 8.14582 130.553 8.14582C131.373 8.14582 131.783 7.90376 131.783 7.41966C131.783 7.28302 131.748 7.16785 131.678 7.07416C131.607 6.97656 131.512 6.89067 131.391 6.81649C131.273 6.74231 131.133 6.67595 130.969 6.61738C130.809 6.55882 130.629 6.49246 130.43 6.41828C130.184 6.32068 129.961 6.21722 129.762 6.10791C129.566 5.9986 129.402 5.87562 129.27 5.73898C129.141 5.59843 129.043 5.44032 128.977 5.26464C128.91 5.08895 128.877 4.88399 128.877 4.64975C128.877 4.36085 128.945 4.10709 129.082 3.88846C129.219 3.66593 129.402 3.48049 129.633 3.33214C129.863 3.17988 130.125 3.06666 130.418 2.99249C130.711 2.91441 131.014 2.87537 131.326 2.87537C131.881 2.87537 132.377 2.9593 132.814 3.12718V4.31596C132.393 4.02706 131.908 3.88261 131.361 3.88261C131.189 3.88261 131.033 3.90018 130.893 3.93531C130.756 3.97045 130.639 4.01925 130.541 4.08171C130.443 4.14418 130.367 4.22031 130.312 4.3101C130.258 4.39599 130.23 4.49164 130.23 4.59705C130.23 4.72588 130.258 4.83519 130.312 4.92499C130.367 5.01478 130.447 5.09481 130.553 5.16508C130.662 5.23145 130.791 5.29392 130.939 5.35248C131.092 5.40713 131.266 5.46765 131.461 5.53401C131.719 5.63942 131.949 5.74678 132.152 5.8561C132.359 5.96541 132.535 6.09034 132.68 6.23089C132.824 6.36753 132.936 6.52759 133.014 6.71108C133.092 6.89067 133.131 7.10539 133.131 7.35525C133.131 7.65976 133.061 7.92524 132.92 8.15167C132.779 8.37811 132.592 8.5655 132.357 8.71385C132.123 8.86221 131.852 8.97152 131.543 9.04179C131.238 9.11597 130.916 9.15306 130.576 9.15306C129.92 9.15306 129.352 9.04374 128.871 8.82512Z" fill="black"/> 610<path d="M128.473 3.01587L126.703 9.01247H125.279L124.189 4.94837C124.146 4.79221 124.119 4.61652 124.107 4.42132H124.084C124.076 4.55406 124.041 4.72584 123.979 4.93665L122.795 9.01247H121.4L119.637 3.01587H121.043L122.133 7.33764C122.168 7.46647 122.191 7.63825 122.203 7.85297H122.244C122.256 7.689 122.287 7.51332 122.338 7.32593L123.551 3.01587H124.828L125.9
61006 7.35521C125.941 7.49185 125.967 7.66362 125.982 7.87054H126.023C126.031 7.72609 126.061 7.55431 126.111 7.35521L127.178 3.01587H128.473Z" fill="black"/> 611<path d="M116.133 9.15306C115.207 9.15306 114.467 8.87392 113.912 8.31564C113.361 7.75346 113.086 7.00974 113.086 6.08448C113.086 5.07724 113.373 4.29058 113.947 3.72449C114.525 3.15841 115.303 2.87537 116.279 2.87537C117.217 2.87537 117.947 3.1506 118.471 3.70107C118.994 4.25154 119.256 5.01478 119.256 5.99079C119.256 6.94728 118.973 7.71442 118.406 8.29222C117.844 8.86611 117.086 9.15306 116.133 9.15306ZM116.197 3.95874C115.666 3.95874 115.246 4.14418 114.938 4.51506C114.629 4.88594 114.475 5.39737 114.475 6.04935C114.475 6.6779 114.631 7.17371 114.943 7.53679C115.256 7.89596 115.674 8.07554 116.197 8.07554C116.732 8.07554 117.143 7.89791 117.428 7.54264C117.717 7.18737 117.861 6.6818 117.861 6.02592C117.861 5.36614 117.717 4.85666 117.428 4.49749C117.143 4.13832 116.732 3.95874 116.197 3.95874Z" fill="black"/> 612<path d="M111.937 9.01242H110.577V7.99347H110.554C110.116 8.76647 109.442 9.15297 108.532 9.15297C107.794 9.15297 107.202 8.88554 106.757 8.35069C106.315 7.81193 106.095 7.07992 106.095 6.15467C106.095 5.16304 106.339 4.36857 106.827 3.77125C107.319 3.17394 107.974 2.87528 108.79 2.87528C109.599 2.87528 110.187 3.19931 110.554 3.84738H110.577V0.134644H111.937V9.01242ZM110.595 6.27179V5.48708C110.595 5.06154 110.456 4.70041 110.179 4.40371C109.901 4.107 109.548 3.95865 109.118 3.95865C108.61 3.95865 108.21 4.14799 107.917 4.52668C107.628 4.90538 107.483 5.43047 107.483 6.10196C107.483 6.71099 107.622 7.19314 107.899 7.54841C108.181 7.89977 108.558 8.07545 109.03 8.07545C109.495 8.07545 109.872 7.90563 110.161 7.56598C110.45 7.22242 110.595 6.79103 110.595 6.27179Z" fill="black"/> 613<path d="M105.058 9.01251H103.698V5.63357C103.698 4.51311 103.302 3.95288 102.509 3.95288C102.095 3.95288 101.753 4.10904 101.483 4.42136C101.214 4.72978 101.079 5.12019 101.079 5.59258V9.01251H99.7139V3.01591H101.079V4.01144H101.103C101.552 3.25406 102.2 2.87537 103.048 2.87537C103.7 2.87537 104.198 3.08814 104.542 3.51368C104.886 3.93531 105.058 4.54629 105.058 5.34662V9.01251Z" fill="black"/> 614<path d="M97.499 1.75681C97.2764 1.75681 97.085 1.68459 96.9248 1.54014C96.7686 1.39569 96.6904 1.2122 96.6904 0.989671C96.6904 0.767141 96.7686 0.581699 96.9248 0.433346C97.085 0.284992 97.2764 0.210815 97.499 0.210815C97.7295 0.210815 97.9248 0.284992 98.085 0.433346C98.2451 0.581699 98.3252 0.767141 98.3252 0.989671C98.3252 1.20049 98.2451 1.38203 98.085 1.53428C97.9248 1.68264 97.7295 1.75681 97.499 1.75681ZM98.1729 9.01247H96.8135V3.01587H98.1729V9.01247Z" fill="black"/> 615<path d="M96.04 0.614868L93.7373 9.01245H92.1611L90.5615 3.13883C90.4951 2.88897 90.4541 2.61569 90.4385 2.31898H90.415C90.3955 2.59617 90.3486 2.86555 90.2744 3.12712L88.6689 9.01245H87.0576L84.708 0.614868H86.2373L87.7607 6.76373C87.8232 7.02139 87.8623 7.29077 87.8779 7.57186H87.9072C87.9229 7.37275 87.9775 7.10338 88.0713 6.76373L89.7939 0.614868H91.2295L92.8232 6.81057C92.8779 7.02139 92.9189 7.27125 92.9463 7.56015H92.9697C92.9814 7.36495 93.0264 7.10728 93.1045 6.78715L94.5986 0.614868H96.04Z" fill="black"/> 616<path d="M81.6777 4.31006C81.5137 4.18123 81.2773 4.11681 80.9688 4.11681C80.5664 4.11681 80.2305 4.29835 79.9609 4.66142C79.6914 5.0245 79.5566 5.51836 79.5566 6.143V9.01247H78.1973V3.01587H79.5566V4.2515H79.5801C79.7129 3.82986 79.916 3.50192 80.1895 3.26768C80.4668 3.02953 80.7754 2.91046 81.1152 2.91046C81.3613 2.91046 81.5488 2.94755 81.6777 3.02173V4.31006Z" fill="black"/> 617<path d="M73.9258 9.15306C73 9.15306 72.2598 8.87392 71.7051 8.31564C71.1543 7.75346 70.8789 7.00974 70.8789 6.08448C70.8789 5.07724 71.166 4.29058 71.7402 3.72449C72.3184 3.15841 73.0957 2.87537 74.0723 2.87537C75.0098 2.87537 75.7402 3.1506 76.2637 3.70107C76.7871 4.25154 77.0488 5.01478 77.0488 5.99079C77.0488 6.94728 76.7656 7.71442 76.1992 8.29222C75.6367 8.86611 74.8789 9.15306 73.9258 9.15306ZM73.9902 3.95874C73.459 3.95874 73.0391 4.14418 72.7305 4.51506C72.4219 4.88594 72.2676 5.39737 72.2676 6.04935C72.2676 6.6779 72.4238 7.17371 72.7363 7.53679C73.0488 7.89596 73.4668 8.07554 73.9902 8.07554C74.5254 8.07554 74.9355 7.89791 75.2207 7.54264C75.5098 7.18737 75.6543 6.6818 75.6543 6.02592C75.6543 5.36614 75.5098 4.85666 75.2207 4.49749C74.9355 4.13832 74.5254 3.95874 73.9902 3.95874Z" fill="black"/> 618<path d="M70.7617 1.24148C70.5781 1.13607 70.3691 1.08337 70.1348 1.08337C69.4746 1.08337 69.1445 1.45621 69.1445 2.20188V3.01587H70.5391V4.08167H69.1504V9.01247H67.791V4.08167H66.7656V3.01587H67.791V2.04376C67.791 1.41131 67.998 0.913544 68.4121 0.550469C68.8262 0.18349 69.3438 0 69.9648 0C70.3008 0 70.5664 0.0370883 70.7617 0.111265V1.24148Z" fill="black"/> 619<path d="M63.3721 8.94802C63.1064 9.08076 62.7568 9.14713 62.3232 9.14713C61.1592 9.14713 60.5771 8.58885 60.5771 7.4723V4.08164H59.5752V3.01584H60.5771V1.62795L61.9365 1.24146V3.01584H63.3721V4.08164H61.9365V7.07994C61.9365 7.43521 62.001 7.68897 62.1299 7.84123C62.2588 7.99349 62.4736 8.06961 62.7744 8.06961C63.0049 8.06961 63.2041 8.00325 63.3721 7.87051V8.94802Z" fill="black"/> 620<path d="M57.9932 1.75681C57.7705 1.75681 57.5791 1.68459 57.4189 1.54014C57.2627 1.39569 57.1846 1.2122 57.1846 0.989671C57.1846 0.767141 57.2627 0.581699 57.4189 0.433346C57.5791 0.284992 57.7
620705 0.210815 57.9932 0.210815C58.2236 0.210815 58.4189 0.284992 58.5791 0.433346C58.7393 0.581699 58.8193 0.767141 58.8193 0.989671C58.8193 1.20049 58.7393 1.38203 58.5791 1.53428C58.4189 1.68264 58.2236 1.75681 57.9932 1.75681ZM58.667 9.01247H57.3076V3.01587H58.667V9.01247Z" fill="black"/> 621<path d="M53.3105 8.94802C53.0449 9.08076 52.6953 9.14713 52.2617 9.14713C51.0977 9.14713 50.5156 8.58885 50.5156 7.4723V4.08164H49.5137V3.01584H50.5156V1.62795L51.875 1.24146V3.01584H53.3105V4.08164H51.875V7.07994C51.875 7.43521 51.9395 7.68897 52.0684 7.84123C52.1973 7.99349 52.4121 8.06961 52.7129 8.06961C52.9434 8.06961 53.1426 8.00325 53.3105 7.87051V8.94802Z" fill="black"/> 622<path d="M49.0918 6.38314H45.002C45.0176 6.93752 45.1875 7.36501 45.5117 7.66562C45.8398 7.96623 46.2891 8.11653 46.8594 8.11653C47.5 8.11653 48.0879 7.92524 48.623 7.54264V8.63772C48.0762 8.98128 47.3535 9.15306 46.4551 9.15306C45.5723 9.15306 44.8789 8.88173 44.375 8.33906C43.875 7.7925 43.625 7.02536 43.625 6.03764C43.625 5.10457 43.9004 4.34524 44.4512 3.75963C45.0059 3.17012 45.6934 2.87537 46.5137 2.87537C47.334 2.87537 47.9688 3.13889 48.418 3.66593C48.8672 4.19298 49.0918 4.92499 49.0918 5.86195V6.38314ZM47.7793 5.42275C47.7754 4.93475 47.6602 4.55605 47.4336 4.28668C47.207 4.01339 46.8945 3.87675 46.4961 3.87675C46.1055 3.87675 45.7734 4.01925 45.5 4.30424C45.2305 4.58924 45.0645 4.96207 45.002 5.42275H47.7793Z" fill="black"/> 623<path d="M42.5938 8.4386C41.7188 8.91489 40.7441 9.15304 39.6699 9.15304C38.4277 9.15304 37.4219 8.76654 36.6523 7.99354C35.8828 7.22054 35.498 6.19768 35.498 4.92497C35.498 3.62492 35.918 2.55912 36.7578 1.72756C37.6016 0.892097 38.6719 0.474365 39.9688 0.474365C40.9023 0.474365 41.6875 0.611007 42.3242 0.884289V2.31902C41.6797 1.88958 40.9121 1.67486 40.0215 1.67486C39.127 1.67486 38.3926 1.96961 37.8184 2.55912C37.248 3.14863 36.9629 3.91187 36.9629 4.84884C36.9629 5.81313 37.209 6.57247 37.7012 7.12684C38.1934 7.67731 38.8613 7.95255 39.7051 7.95255C40.2832 7.95255 40.7832 7.84128 41.2051 7.61875V5.62184H39.4355V4.45063H42.5938V8.4386Z" fill="black"/> 624<path d="M12.8698 0.613403H0V13.4146H12.8698V0.613403Z" fill="#F25022"/> 625<path d="M27.0759 0.613281H14.2061V13.4145H27.0759V0.613281Z" fill="#7FBA00"/> 626<path d="M12.8698 14.7283H0V27.5295H12.8698V14.7283Z" fill="#00A4EF"/> 627<path d="M27.0759 14.7283H14.2061V27.5295H27.0759V14.7283Z" fill="#FFB900"/> 628</svg> 629 630</a> 631 632 633 634 635 636<a class="radient-border js-hover-sparkles" data-sparkles-color="hsl(50deg, 100%, 50%)" href="/installer/MagicPods.appinstaller" rel="noopener noreferrer"> 637 <svg width="137" height="32" viewBox="0 0 137 32" fill="none" xmlns="http://www.w3.org/2000/svg"> 638<path d="M94.2881 19.3411C94.0557 19.1586 93.7209 19.0673 93.2837 19.0673C92.7137 19.0673 92.2378 19.3245 91.856 19.8389C91.4741 20.3532 91.2832 21.0529 91.2832 21.9378V26.0028H89.3574V17.5077H91.2832V19.2581H91.3164C91.5046 18.6608 91.7923 18.1962 92.1797 17.8644C92.5726 17.527 93.0098 17.3583 93.4912 17.3583C93.8398 17.3583 94.1055 17.4109 94.2881 17.516V19.3411Z" fill="black"/> 639<path d="M88.0327 22.2779H82.2388C82.2609 23.0632 82.5016 23.6689 82.9609 24.0947C83.4258 24.5206 84.0622 24.7335 84.8701 24.7335C85.7777 24.7335 86.6105 24.4625 87.3687 23.9205V25.4719C86.5939 25.9586 85.5701 26.2019 84.2974 26.2019C83.0467 26.2019 82.0645 25.8175 81.3506 25.0488C80.6423 24.2745 80.2881 23.1877 80.2881 21.7884C80.2881 20.4666 80.6782 19.3908 81.4585 18.5612C82.2443 17.7261 83.2183 17.3085 84.3804 17.3085C85.5425 17.3085 86.4417 17.6819 87.0781 18.4285C87.7145 19.1752 88.0327 20.2122 88.0327 21.5395V22.2779ZM86.1733 20.9173C86.1678 20.226 86.0046 19.6895 85.6836 19.3079C85.3626 18.9207 84.9199 18.7272 84.3555 18.7272C83.8021 18.7272 83.3317 18.929 82.9443 19.3328C82.5625 19.7365 82.3273 20.2647 82.2388 20.9173H86.1733Z" fill="black"/> 640<path d="M78.8306 26.0029H76.8965V13.426H78.8306V26.0029Z" fill="black"/> 641<path d="M74.8911 26.0029H72.957V13.426H74.8911V26.0029Z" fill="black"/> 642<path d="M71.1104 26.0028H69.2427V24.6754H69.2095C68.6229 25.6931 67.7624 26.2019 66.6279 26.2019C65.7923 26.2019 65.1366 25.9752 64.6606 25.5216C64.1903 25.0681 63.9551 24.468 63.9551 23.7214C63.9551 22.1175 64.8792 21.1828 66.7275 20.9173L69.251 20.5606C69.251 19.3494 68.6755 18.7438 67.5244 18.7438C66.5117 18.7438 65.5986 19.0922 64.7852 19.7891V18.105C65.6816 17.574 66.7165 17.3085 67.8896 17.3085C70.0368 17.3085 71.1104 18.3649 71.1104 20.4776V26.0028ZM69.251 21.8299L67.4663 22.0788C66.9129 22.1507 66.4951 22.2862 66.2129 22.4853C65.9362 22.6789 65.7979 23.0218 65.7979 23.514C65.7979 23.8735 65.9251 24.1694 66.1797 24.4017C66.4398 24.6284 66.7856 24.7418 67.2173 24.7418C67.8039 24.7418 68.2881 24.5372 68.6699 24.1279C69.0573 23.7131 69.251 23.1932 69.251 22.5682V21.8299Z" fill="black"/> 643<path d="M63.4355 25.9115C63.0592 26.0996 62.564 26.1936 61.9497 26.1936C60.3006 26.1936 59.4761 25.4027 59.4761 23.8209V19.0175H58.0566V17.5076H59.4761V15.5414L61.4019 14.9939V17.5076H63.4355V19.0175H61.4019V23.2651C61.4019 23.7684 61.4932 24.1279 61.6758 24.3436C61.8584 24.5593 62.1628 24.6671 62.5889 24.6671C62.9154 24.6671 63.1976 24.5731 63.4355 24.3851V25.9115Z" fill="black"/> 644<path d="M51.5938 25.7373V23.9537C52.3132 24.5012 53.1073 24.775 53.9761 24.775C55.1382 24.775 55.7192 24.4321 55.7192 23.7463C55.7192 23.5527 55.6694 23.3896 55.5698 23.2568C55.4702 23.1186 55.3346 22.9969 55.1631 22.8918C54.9971 22.7867 54.7979 22.6927 54.5654 22.6097C54.3385 22.5268 54.084 22.4327 53.8018 22.3277C53.4531 22.1894 53.1377 22.0428 52.8555 21.888C52.5788 21.7331 52.3464 21.5589 52.1582 21.3653C51.9756 21.1662 51.8372 20.9422 51.7432 20.6933C51.6491 20.4444 51.6021 20.1541 51.6021 19.8222C51.6021 19.413 51.6989 19.0535 51.8926 18.7438C52.0863 18.4285 52.3464 18.1658 52.6729 17.9556C52.9993 17.7399 53.3701 17.5795 53.7852 17.4745C54.2002 17.3638 54.6291 17.3085 55.0718 17.3085C55.8576 17.3085 56.5604 17.4274 57.1802 17.6653V19.3494C56.5825 18.9401 55.8963 18.7355 55.1216 18.7355C54.8781 18.7355 54.6567 18.7603 54.4575 18.8101C54.2638 18.8599 54.0978 18.929 53.9595 19.0175C53.8211 19.106 53.7132 19.2139 53.6357 19.3411C53.5583 19.4627 53.5195 19.5982 53.5195 19.7476C53.5195 19.9301 53.5583 20.085 53.6357 20.2122C53.7132 20.3394 53.8267 20.4527 53.9761 20.5523C54.131 20.6463 54.3136 20.7348 54.5239 20.8178C54.7397 20.8952 54.986 20.9809 55.2627 21.075C55.6279 21.2243 55.9544 21.3764 56.2422 21.5312C56.5355 21.6861 56.7845 21.8631 56.9893 22.0622C57.194 22.2558 57.3517 22.4825 57.4624 22.7425C57.5731 22.9969 57.6284 23.3011 57.6284 23.655C57.6284 24.0864 57.5288 24.4625 57.3296 24.7833C57.1304 25.1041 56.8647 25.3696 56.5327 25.5797C
64456.2007 25.7899 55.8161 25.9447 55.3789 26.0443C54.9473 26.1494 54.4907 26.2019 54.0093 26.2019C53.0796 26.2019 52.2744 26.0471 51.5938 25.7373Z" fill="black"/> 645<path d="M50.2773 26.0028H48.3516V21.216C48.3516 19.6287 47.7899 18.835 46.6665 18.835C46.0799 18.835 45.5957 19.0562 45.2139 19.4987C44.832 19.9356 44.6411 20.4887 44.6411 21.1579V26.0028H42.707V17.5076H44.6411V18.918H44.6743C45.3107 17.845 46.2293 17.3085 47.4302 17.3085C48.3543 17.3085 49.0599 17.61 49.5469 18.2128C50.0339 18.8101 50.2773 19.6757 50.2773 20.8095V26.0028Z" fill="black"/> 646<path d="M40.4946 26.0028H38.4609V14.1063H40.4946V26.0028Z" fill="black"/> 647<path d="M131.871 8.82512V7.56607C132.379 7.95257 132.939 8.14582 133.553 8.14582C134.373 8.14582 134.783 7.90376 134.783 7.41966C134.783 7.28302 134.748 7.16785 134.678 7.07416C134.607 6.97656 134.512 6.89067 134.391 6.81649C134.273 6.74231 134.133 6.67595 133.969 6.61738C133.809 6.55882 133.629 6.49246 133.43 6.41828C133.184 6.32068 132.961 6.21722 132.762 6.10791C132.566 5.9986 132.402 5.87562 132.27 5.73898C132.141 5.59843 132.043 5.44032 131.977 5.26464C131.91 5.08895 131.877 4.88399 131.877 4.64975C131.877 4.36085 131.945 4.10709 132.082 3.88846C132.219 3.66593 132.402 3.48049 132.633 3.33214C132.863 3.17988 133.125 3.06666 133.418 2.99249C133.711 2.91441 134.014 2.87537 134.326 2.87537C134.881 2.87537 135.377 2.9593 135.814 3.12718V4.31596C135.393 4.02706 134.908 3.88261 134.361 3.88261C134.189 3.88261 134.033 3.90018 133.893 3.93531C133.756 3.97045 133.639 4.01925 133.541 4.08171C133.443 4.14418 133.367 4.22031 133.312 4.3101C133.258 4.39599 133.23 4.49164 133.23 4.59705C133.23 4.72588 133.258 4.83519 133.312 4.92499C133.367 5.01478 133.447 5.09481 133.553 5.16508C133.662 5.23145 133.791 5.29392 133.939 5.35248C134.092 5.40713 134.266 5.46765 134.461 5.53401C134.719 5.63942 134.949 5.74678 135.152 5.8561C135.359 5.96541 135.535 6.09034 135.68 6.23089C135.824 6.36753 135.936 6.52759 136.014 6.71108C136.092 6.89067 136.131 7.10539 136.131 7.35525C136.131 7.65976 136.061 7.92524 135.92 8.15167C135.779 8.37811 135.592 8.5655 135.357 8.71385C135.123 8.86221 134.852 8.97152 134.543 9.04179C134.238 9.11597 133.916 9.15306 133.576 9.15306C132.92 9.15306 132.352 9.04374 131.871 8.82512Z" fill="black"/> 648<path d="M131.473 3.01587L129.703 9.01247H128.279L127.189 4.94837C127.146 4.79221 127.119 4.61652 127.107 4.42132H127.084C127.076 4.55406 127.041 4.72584 126.979 4.93665L125.795 9.01247H124.4L122.637 3.01587H124.043L125.133 7.33764C125.168 7.46647 125.191 7.63825 125.203 7.85297H125.244C125.256 7.689 125.287 7.51332 125.338 7.32593L126.551 3.01587H127.828L128.906 7.35521C128.941 7.49185 128.967 7.66362 128.982 7.87054H129.023C129.031 7.72609 129.061 7.55431 129.111 7.35521L130.178 3.01587H131.473Z" fill="black"/> 649<path d="M119.133 9.15306C118.207 9.15306 117.467 8.87392 116.912 8.31564C116.361 7.75346 116.086 7.00974 116.086 6.08448C116.086 5.07724 116.373 4.29058 116.947 3.72449C117.525 3.15841 118.303 2.87537 119.279 2.87537C120.217 2.87537 120.947 3.1506 121.471 3.70107C121.994 4.25154 122.256 5.01478 122.256 5.99079C122.256 6.94728 121.973 7.71442 121.406 8.29222C120.844 8.86611 120.086 9.15306 119.133 9.15306ZM119.197 3.95874C118.666 3.95874 118.246 4.14418 117.938 4.51506C117.629 4.88594 117.475 5.39737 117.475 6.04935C117.475 6.6779 117.631 7.17371 117.943 7.53679C118.256 7.89596 118.674 8.07554 119.197 8.07554C119.732 8.07554 120.143 7.89791 120.428 7.54264C120.717 7.18737 120.861 6.6818 120.861 6.02592C120.861 5.36614 120.717 4.85666 120.428 4.49749C120.143 4.13832 119.732 3.95874 119.197 3.95874Z" fill="black"/> 650<path d="M114.937 9.01242H113.577V7.99347H113.554C113.116 8.76647 112.442 9.15297 111.532 9.15297C110.794 9.15297 110.202 8.88554 109.757 8.35069C109.315 7.81193 109.095 7.07992 109.095 6.15467C109.095 5.16304 109.339 4.36857 109.827 3.77125C110.319 3.17394 110.974 2.87528 111.79 2.87528C112.599 2.87528 113.187 3.19931 113.554 3.84738H113.577V0.134644H114.937V9.01242ZM113.595 6.27179V5.48708C113.595 5.06154 113.456 4.70041 113.179 4.40371C112.901 4.107 112.548 3.95865 112.118 3.95865C111.61 3.95865 111.21 4.14799 110.917 4.52668C110.628 4.90538 110.483 5.43047 110.483 6.10196C110.483 6.71099 110.622 7.19314 110.899 7.54841C111.181 7.89977 111.558 8.07545 112.03 8.07545C112.495 8.07545 112.872 7.90563 113.161 7.56598C113.45 7.22242 113.595 6.79103 113.595 6.27179Z" fill="black"/> 651<path d="M108.058 9.01251H106.698V5.63357C106.698 4.51311 106.302 3.95288 105.509 3.95288C105.095 3.95288 104.753 4.10904 104.483 4.42136C104.214 4.72978 104.079 5.12019 104.079 5.59258V9.01251H102.714V3.01591H104.079V4.01144H104.103C104.552 3.25406 105.2 2.87537 106.048 2.87537C106.7 2.87537 107.198 3.08814 107.542 3.51368C107.886 3.93531 108.058 4.54629 108.058 5.34662V9.01251Z" fill="black"/> 652<path d="M100.499 1.75681C100.276 1.75681 100.085 1.68459 99.9248 1.54014C99.7686 1.39569 99.6904 1.2122 99.6904 0.989671C99.6904 0.767141 99.7686 0.581699 99.9248 0.433346C100.085 0.284992 100.276 0.210815 100.499 0.210815C100.729 0.210815 100.925 0.284992 101.085 0.433346C101.245 0.581699 101.325 0.767141 101.325 0.989671C101.325 1.20049 101.245 1.38203 101.085 1.53428C100.925 1.68264 100.729 1.75681 100.499 1.75681ZM101.173 9.01247H99.8135V3.01587H101.173V9.01247Z" fill="black"/> 653<path d="M99.04 0.614868L96.7373 9.01245H95.1611L93.5615 3.13883C93.4951 2.88897 93.4541 2.61569 93.4385 2.31898H93.415C93.3955 2.59617 93.3486 2.86555 93.2744 3.12712L91.6689 9.01245H90.0576L87.708 0.614868H89.2373L90.7607 6.76373C90.8232 7.02139 90.8623 7.29077 90.8779 7.57186H90.9072C90.9229 7.37275 90.9775 7.10338 91.0713 6.76373L92.7939 0.614868H94.2295L95.8232 6.81057C95.8779 7.02139 95.9189 7.27125 95.9463 7.56015H95.9697C95.9814 7.36495 96.0264 7.10728 96.1045 6.78715L97.5986 0.614868H99.04Z" fill="black"/> 654<path d="M84.6777 4.31006C84.5137 4.18123 84.2773 4.11681 83.9688 4.11681C83.5664 4.11681 83.2305 4.29835 82.9609 4.66142C82.6914 5.0245 82.5566 5.51836 82.5566 6.143V9.01247H81.1973V3.01587H82.5566V4.2515H82.5801C82.7129 3.82986 82.916 3.50192 83.1895 3.26768C83.4668 3.02953 83.7754 2.91046 84.1152 2.91046C84.3613 2.91046 84.5488 2.94755 84.6777 3.02173V4.31006Z" fill="black"/> 655<path d="M76.9258 9.15306C76 9.15306 75.2598 8.87392 74.7051 8.31564C74.1543 7.75346 73.8789 7.
65500974 73.8789 6.08448C73.8789 5.07724 74.166 4.29058 74.7402 3.72449C75.3184 3.15841 76.0957 2.87537 77.0723 2.87537C78.0098 2.87537 78.7402 3.1506 79.2637 3.70107C79.7871 4.25154 80.0488 5.01478 80.0488 5.99079C80.0488 6.94728 79.7656 7.71442 79.1992 8.29222C78.6367 8.86611 77.8789 9.15306 76.9258 9.15306ZM76.9902 3.95874C76.459 3.95874 76.0391 4.14418 75.7305 4.51506C75.4219 4.88594 75.2676 5.39737 75.2676 6.04935C75.2676 6.6779 75.4238 7.17371 75.7363 7.53679C76.0488 7.89596 76.4668 8.07554 76.9902 8.07554C77.5254 8.07554 77.9355 7.89791 78.2207 7.54264C78.5098 7.18737 78.6543 6.6818 78.6543 6.02592C78.6543 5.36614 78.5098 4.85666 78.2207 4.49749C77.9355 4.13832 77.5254 3.95874 76.9902 3.95874Z" fill="black"/> 656<path d="M73.7617 1.24148C73.5781 1.13607 73.3691 1.08337 73.1348 1.08337C72.4746 1.08337 72.1445 1.45621 72.1445 2.20188V3.01587H73.5391V4.08167H72.1504V9.01247H70.791V4.08167H69.7656V3.01587H70.791V2.04376C70.791 1.41131 70.998 0.913544 71.4121 0.550469C71.8262 0.18349 72.3438 0 72.9648 0C73.3008 0 73.5664 0.0370883 73.7617 0.111265V1.24148Z" fill="black"/> 657<path d="M66.3721 8.94802C66.1064 9.08076 65.7568 9.14713 65.3232 9.14713C64.1592 9.14713 63.5771 8.58885 63.5771 7.4723V4.08164H62.5752V3.01584H63.5771V1.62795L64.9365 1.24146V3.01584H66.3721V4.08164H64.9365V7.07994C64.9365 7.43521 65.001 7.68897 65.1299 7.84123C65.2588 7.99349 65.4736 8.06961 65.7744 8.06961C66.0049 8.06961 66.2041 8.00325 66.3721 7.87051V8.94802Z" fill="black"/> 658<path d="M60.9932 1.75681C60.7705 1.75681 60.5791 1.68459 60.4189 1.54014C60.2627 1.39569 60.1846 1.2122 60.1846 0.989671C60.1846 0.767141 60.2627 0.581699 60.4189 0.433346C60.5791 0.284992 60.7705 0.210815 60.9932 0.210815C61.2236 0.210815 61.4189 0.284992 61.5791 0.433346C61.7393 0.581699 61.8193 0.767141 61.8193 0.989671C61.8193 1.20049 61.7393 1.38203 61.5791 1.53428C61.4189 1.68264 61.2236 1.75681 60.9932 1.75681ZM61.667 9.01247H60.3076V3.01587H61.667V9.01247Z" fill="black"/> 659<path d="M56.3105 8.94802C56.0449 9.08076 55.6953 9.14713 55.2617 9.14713C54.0977 9.14713 53.5156 8.58885 53.5156 7.4723V4.08164H52.5137V3.01584H53.5156V1.62795L54.875 1.24146V3.01584H56.3105V4.08164H54.875V7.07994C54.875 7.43521 54.9395 7.68897 55.0684 7.84123C55.1973 7.99349 55.4121 8.06961 55.7129 8.06961C55.9434 8.06961 56.1426 8.00325 56.3105 7.87051V8.94802Z" fill="black"/> 660<path d="M52.0918 6.38314H48.002C48.0176 6.93752 48.1875 7.36501 48.5117 7.66562C48.8398 7.96623 49.2891 8.11653 49.8594 8.11653C50.5 8.11653 51.0879 7.92524 51.623 7.54264V8.63772C51.0762 8.98128 50.3535 9.15306 49.4551 9.15306C48.5723 9.15306 47.8789 8.88173 47.375 8.33906C46.875 7.7925 46.625 7.02536 46.625 6.03764C46.625 5.10457 46.9004 4.34524 47.4512 3.75963C48.0059 3.17012 48.6934 2.87537 49.5137 2.87537C50.334 2.87537 50.9688 3.13889 51.418 3.66593C51.8672 4.19298 52.0918 4.92499 52.0918 5.86195V6.38314ZM50.7793 5.42275C50.7754 4.93475 50.6602 4.55605 50.4336 4.28668C50.207 4.01339 49.8945 3.87675 49.4961 3.87675C49.1055 3.87675 48.7734 4.01925 48.5 4.30424C48.2305 4.58924 48.0645 4.96207 48.002 5.42275H50.7793Z" fill="black"/> 661<path d="M45.5938 8.4386C44.7188 8.91489 43.7441 9.15304 42.6699 9.15304C41.4277 9.15304 40.4219 8.76654 39.6523 7.99354C38.8828 7.22054 38.498 6.19768 38.498 4.92497C38.498 3.62492 38.918 2.55912 39.7578 1.72756C40.6016 0.892097 41.6719 0.474365 42.9688 0.474365C43.9023 0.474365 44.6875 0.611007 45.3242 0.884289V2.31902C44.6797 1.88958 43.9121 1.67486 43.0215 1.67486C42.127 1.67486 41.3926 1.96961 40.8184 2.55912C40.248 3.14863 39.9629 3.91187 39.9629 4.84884C39.9629 5.81313 40.209 6.57247 40.7012 7.12684C41.1934 7.67731 41.8613 7.95255 42.7051 7.95255C43.2832 7.95255 43.7832 7.84128 44.2051 7.61875V5.62184H42.4355V4.45063H45.5938V8.4386Z" fill="black"/> 662<path fill-rule="evenodd" clip-rule="evenodd" d="M0 25.3051L21.4452 28.0773L29.6284 22.7759L29.7415 2.59423L10.8357 0.0175781L0 4.93137V25.3051Z" fill="#E19747"/> 663<path fill-rule="evenodd" clip-rule="evenodd" d="M29.7415 2.59423L21.3702 7.83362L0 4.93137L10.8357 0.0175781L29.7415 2.59423Z" fill="#F3C07B"/> 664<path fill-rule="evenodd" clip-rule="evenodd" d="M21.4486 28.0773L21.3701 7.83363L29.7414 2.59424L29.9998 22.8549L21.4486 28.0773Z" fill="#FFCE7C"/> 665<path fill-rule="evenodd" clip-rule="evenodd" d="M14.6343 0.535217L20.8271 1.37907L11.9625 6.67292L11.9572 15.8358L8.80311 13.689L5.64844 15.471L6.04219 5.85015L14.6343 0.535217Z" fill="#A56953"/> 666</svg> 667 668</a> 669 670 </div> 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 <img 705 loading="" 706 decoding="async" 707 src="https://magicpods.app/images/banner.webp" 708 alt="banner image" 709 class=" img" 710 height="" 711 width="1100" /> 712 713 714 </div> 715 </div> 716 </div> 717</section> 718 719 720 721 722 723 724<section class="banner"> 725 <div class="container"> 726 <div class="row justify-content-center"> 727 <div class="col-lg-10"> 728 <div class="row gx-md-5 gy-5"> 729 730 <div class="col-lg-4 col-md-6"> 731 <div class="rounded-1 d-block d-sm-flex"> 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 <img 766 loading="" 767 decoding="async" 768 src="https://magicpods.app/images/ear_3d_default.png" 769 alt="Ear detection" 770 class="feature-icon img" 771 height="" 772 width="" /> 773 774 775 <div class="block"> 776 <h2 class="mb-1 h6">Ear detection</h4> 777 <p class="mb-0">Control playback when taking off and putting on AirPods</p> 778 </div> 779 </div> 780 </div> 781 782 <div class="col-lg-4 col-md-6"> 783 <div class="rounded-1 d-block d-sm-flex"> 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 <img 818 loading="" 819 decoding="async" 820 src="https://magicpods.app/images/battery_3d.png" 821 alt="Battery level" 822 class="feature-icon img" 823 height="" 824 width="" /> 825 826 827 <div class="block"> 828 <h2 class="mb-1 h6">Battery level</h4> 829 <p class="mb-0">
829Track charging of AirPods and other headphones in app, live tiles, widgets, or tray icon</p> 830 </div> 831 </div> 832 </div> 833 834 <div class="col-lg-4 col-md-6"> 835 <div class="rounded-1 d-block d-sm-flex"> 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 <img 870 loading="" 871 decoding="async" 872 src="https://magicpods.app/images/film_frames_3d.png" 873 alt="Pop-up animation" 874 class="feature-icon img" 875 height="" 876 width="" /> 877 878 879 <div class="block"> 880 <h2 class="mb-1 h6">Pop-up animation</h4> 881 <p class="mb-0">Same animation as on iPhone when you open AirPods or Beats case</p> 882 </div> 883 </div> 884 </div> 885 886 <div class="col-lg-4 col-md-6"> 887 <div class="rounded-1 d-block d-sm-flex"> 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 <img 922 loading="" 923 decoding="async" 924 src="https://magicpods.app/images/level_slider_3d.png" 925 alt="Easy connection" 926 class="feature-icon img" 927 height="" 928 width="" /> 929 930 931 <div class="block"> 932 <h2 class="mb-1 h6">Easy connection</h4> 933 <p class="mb-0">Connect headphones by hotkey, in app, tray icon or pop-up animation</p> 934 </div> 935 </div> 936 </div> 937 938 <div class="col-lg-4 col-md-6"> 939 <div class="rounded-1 d-block d-sm-flex"> 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 <img 974 loading="" 975 decoding="async" 976 src="https://magicpods.app/images/microphone_3d.png" 977 alt="VoiceOver" 978 class="feature-icon img" 979 height="" 980 width="" /> 981 982 983 <div class="block"> 984 <h2 class="mb-1 h6">VoiceOver</h4> 985 <p class="mb-0">Offline read aloud apps notifications with headphones connected</p> 986 </div> 987 </div> 988 </div> 989 990 <div class="col-lg-4 col-md-6"> 991 <div class="rounded-1 d-block d-sm-flex"> 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 <img 1026 loading="" 1027 decoding="async" 1028 src="https://magicpods.app/images/musical_notes_3d.png" 1029 alt="Audio streaming" 1030 class="feature-icon img" 1031 height="" 1032 width="" /> 1033 1034 1035 <div class="block"> 1036 <h2 class="mb-1 h6">Audio streaming</h4> 1037 <p class="mb-0">Play sound from other Bluetooth devices using your computer as a Bluetooth speaker</p> 1038 </div> 1039 </div> 1040 </div> 1041 1042 </div> 1043 </div> 1044 </div> 1045 </div> 1046</section> 1047 1048 1049 1050 1051 1052 1053 1054<section class="banner"> 1055 1056 1057<div class="container mb-5"> 1058 <div class="row align-items-center gy-4 col-lg-10 mx-auto" > 1059 <div class="col-lg-6 order-lg-0 order-1"> 1060 <div class="pe-0 pe-lgy-5 text-center text-lg-start"> 1061 <h2 class="section-title h4">Advanced AirPods features with MagicAAP driver</h2> 1062 <p class="mb-3">Control noise cancellation, monitor accurate battery level, enjoy improved ear detection, and customize button.</p> 1063 1064 1065 <a href="/magicaap/" target="_blank" title="Learn more" class="btn" style="margin-left: 0em;">Learn more</a> 1066 1067 1068 </div> 1069 </div> 1070 <div class="col-lg-6 order-lg-1 order-0"> 1071 1072 1073 1074 1075 1076 <div class="swiper-slide"> 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 <img 1111 loading="" 1112 decoding="async" 1113 src="https://magicpods.app/images/banner-2.webp" 1114 alt="Advanced AirPods features with MagicAAP driver" 1115 class=" img" 1116 height="" 1117 width="" /> 1118 1119 1120 </div> 1121 1122 1123 1124 1125 </div> 1126 </div> 1127 </div> 1128 1129<div class="container mb-5"> 1130 <div class="row align-items-center gy-4 col-lg-10 mx-auto" > 1131 <div class="col-lg-6 order-lg-1 order-1"> 1132 <div class="pe-0 pe-lgy-5 text-center text-lg-start"> 1133 <h2 class="section-title h4">Control the app without opening it</h2> 1134 <p class="mb-3">All key functions in one click. The tray icon provides quick access to essential information.</p> 1135 1136 </div> 1137 </div> 1138 <div class="col-lg-6 order-lg-0 order-0"> 1139 1140 1141 1142 1143 1144 <div class="swiper-slide"> 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 <img 1179 loading="" 1180 decoding="async" 1181 src="https://magicpods.app/images/banner-3.webp" 1182 alt="Control the app without opening it" 1183 class=" img" 1184 height="" 1185 width="" /> 1186 1187 1188 </div> 1189 1190 1191 1192 1193 </div> 1194 </div> 1195 </div> 1196 1197<div class="container mb-5"> 1198 <div class="row align-items-center gy-4 col-lg-10 mx-auto" > 1199 <div class="col-lg-6 order-lg-0 order-1"> 1200 <div class="pe-0 pe-lgy-5 text-center text-lg-start"> 1201 <h2 class="section-title h4">Flexible hotkeys</h2> 1202 <p class="mb-3">Customize keyboard shortcuts to control noise cancellation, Bluetooth, audio outputs, and connected devices.</p> 1203 1204 </div> 1205 </div> 1206 <div class="col-lg-6 order-lg-1 order-0"> 1207 1208 1209 1210 1211 1212 <div class="swiper-slide"> 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 <img 1247 loading="" 1248 decoding="async" 1249 src="https://magicpods.app/images/banner-4.webp" 1250 alt="Flexible hotkeys" 1251 class=" img" 1252 height="" 1253 width="" /> 1254 1255 1256 </div> 1257 1258 1259 1260 1261 </div> 1262 </div> 1263 </div> 1264 1265<div class="container "> 1266 <div class="row align-items-center gy-4 col-lg-10 mx-auto" > 1267 <div class="col-lg-6 order-lg-1 order-1"> 1268 <div class="pe-0 pe-lgy-5 text-center text-lg-start"> 1269 <h2 class="section-title h4">Not just for AirPods</h2> 1270 <p class="mb-3">The app supports AirPods, Beats, Fake AirPods with Airoha chips, some Sony models, and other headphones.</p> 1271 1272 1273 <a href="/headphones/" target="_blank" title="Supported headphones" class="btn" style="margin-left: 0em;">Supported headphones</a> 1274 1275 1276 </div> 1277 </div> 1278 <div class="col-lg-6 order-lg-0 order-0"> 1279 1280 1281 1282 1283 1284 <div class="swiper-slide"> 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 <img 1319 loading="" 1320 decoding="async" 1321 src="https://magicpods.app/images/banner-5.webp" 1322 alt="Not just for AirPods" 1323 class=" img" 1324 height="" 1325 width="" /> 1326 1327 1328 </div> 1329 1330 1331 1332 1333 </div> 1334 </div> 1335 </div> 1336 1337</section> 1338 1339 1340 1341 1342 1343 1344<section class="banner"> 1345 <div class="container"> 1346 <div class="row"> 1347 <div class="col-lg-6 mx-auto"> 1348 <div class="text-center"> 1349 <h2 class="section-title h4">Privacy above all</h2> 1350 <p>No data collection, no ads, no subscriptions, no paid content. Just a convenient tool that works offline. And yesâno AI.</p> 1351 </div> 1352 </div> 1353 </div> 1354 </section> 1355 1356 1357 1358 1359 1360<section class="section"> 1361 <link href="/css/lightbox.css" rel="stylesheet">
1362<script src="/js/lightbox.js"></script>
1362 1363 1364 1365 1366<div class="container"> 1367 <div class="row image-gallery col-lg-10 mx-auto"> 1368 1369 1370 <div class="col-12 col-sm-6 col-md-4 mb-4"> 1371 <a href="https://magicpods.app/images/screenshots/en/01-screenshot.webp" title="/images/screenshots/en/01-screenshot" class="lightbox-image d-block text-center"> 1372 <img src="https://magicpods.app/images/screenshots/en/01-screenshot_hu_1cbfab95c943a835.webp" class="img-fluid rounded" alt="/images/screenshots/en/01-screenshot" title="/images/screenshots/en/01-screenshot"> 1373 </a> 1374 </div> 1375 <div class="col-12 col-sm-6 col-md-4 mb-4"> 1376 <a href="https://magicpods.app/images/screenshots/en/02-screenshot.webp" title="/images/screenshots/en/02-screenshot" class="lightbox-image d-block text-center"> 1377 <img src="https://magicpods.app/images/screenshots/en/02-screenshot_hu_6dcb241d5f83d3e9.webp" class="img-fluid rounded" alt="/images/screenshots/en/02-screenshot" title="/images/screenshots/en/02-screenshot"> 1378 </a> 1379 </div> 1380 <div class="col-12 col-sm-6 col-md-4 mb-4"> 1381 <a href="https://magicpods.app/images/screenshots/en/03-screenshot.webp" title="/images/screenshots/en/03-screenshot" class="lightbox-image d-block text-center"> 1382 <img src="https://magicpods.app/images/screenshots/en/03-screenshot_hu_a8ca6ec0932f2dde.webp" class="img-fluid rounded" alt="/images/screenshots/en/03-screenshot" title="/images/screenshots/en/03-screenshot"> 1383 </a> 1384 </div> 1385 <div class="col-12 col-sm-6 col-md-4 mb-4"> 1386 <a href="https://magicpods.app/images/screenshots/en/04-screenshot.webp" title="/images/screenshots/en/04-screenshot" class="lightbox-image d-block text-center"> 1387 <img src="https://magicpods.app/images/screenshots/en/04-screenshot_hu_7a12207de3b5e118.webp" class="img-fluid rounded" alt="/images/screenshots/en/04-screenshot" title="/images/screenshots/en/04-screenshot"> 1388 </a> 1389 </div> 1390 <div class="col-12 col-sm-6 col-md-4 mb-4"> 1391 <a href="https://magicpods.app/images/screenshots/en/05-screenshot.webp" title="/images/screenshots/en/05-screenshot" class="lightbox-image d-block text-center"> 1392 <img src="https://magicpods.app/images/screenshots/en/05-screenshot_hu_2fbb0a66154c53d2.webp" class="img-fluid rounded" alt="/images/screenshots/en/05-screenshot" title="/images/screenshots/en/05-screenshot"> 1393 </a> 1394 </div> 1395 <div class="col-12 col-sm-6 col-md-4 mb-4"> 1396 <a href="https://magicpods.app/images/screenshots/en/06-screenshot.webp" title="/images/screenshots/en/06-screenshot" class="lightbox-image d-block text-center"> 1397 <img src="https://magicpods.app/images/screenshots/en/06-screenshot_hu_9cde067f5a921346.webp" class="img-fluid rounded" alt="/images/screenshots/en/06-screenshot" title="/images/screenshots/en/06-screenshot"> 1398 </a> 1399 </div> 1400 <div class="col-12 col-sm-6 col-md-4 mb-4"> 1401 <a href="https://magicpods.app/images/screenshots/en/07-screenshot.webp" title="/images/screenshots/en/07-screenshot" class="lightbox-image d-block text-center"> 1402 <img src="https://magicpods.app/images/screenshots/en/07-screenshot_hu_a6343eaf013e4cab.webp" class="img-fluid rounded" alt="/images/screenshots/en/07-screenshot" title="/images/screenshots/en/07-screenshot"> 1403 </a> 1404 </div> 1405 <div class="col-12 col-sm-6 col-md-4 mb-4"> 1406 <a href="https://magicpods.app/images/screenshots/en/08-screenshot.webp" title="/images/screenshots/en/08-screenshot" class="lightbox-image d-block text-center"> 1407 <img src="https://magicpods.app/images/screenshots/en/08-screenshot_hu_ab04cc3d0456899.webp" class="img-fluid rounded" alt="/images/screenshots/en/08-screenshot" title="/images/screenshots/en/08-screenshot"> 1408 </a> 1409 </div> 1410 <div class="col-12 col-sm-6 col-md-4 mb-4"> 1411 <a href="https://magicpods.app/images/screenshots/en/09-screenshot.webp" title="/images/screenshots/en/09-screenshot" class="lightbox-image d-block text-center"> 1412 <img src="https://magicpods.app/images/screenshots/en/09-screenshot_hu_b8769c50434e0f4c.webp" class="img-fluid rounded" alt="/images/screenshots/en/09-screenshot" title="/images/screenshots/en/09-screenshot"> 1413 </a> 1414 </div> 1415 <div class="col-12 col-sm-6 col-md-4 mb-4"> 1416 <a href="https://magicpods.app/images/screenshots/en/10-screenshot.webp" title="/images/screenshots/en/10-screenshot" class="lightbox-image d-block text-center"> 1417 <img src="https://magicpods.app/images/screenshots/en/10-screenshot_hu_3a
14175d7696f180fb2e.webp" class="img-fluid rounded" alt="/images/screenshots/en/10-screenshot" title="/images/screenshots/en/10-screenshot"> 1418 </a> 1419 </div> 1420 <div class="col-12 col-sm-6 col-md-4 mb-4"> 1421 <a href="https://magicpods.app/images/screenshots/en/11-screenshot.webp" title="/images/screenshots/en/11-screenshot" class="lightbox-image d-block text-center"> 1422 <img src="https://magicpods.app/images/screenshots/en/11-screenshot_hu_d3450d3211f3a177.webp" class="img-fluid rounded" alt="/images/screenshots/en/11-screenshot" title="/images/screenshots/en/11-screenshot"> 1423 </a> 1424 </div> 1425 <div class="col-12 col-sm-6 col-md-4 mb-4"> 1426 <a href="https://magicpods.app/images/screenshots/en/12-screenshot.webp" title="/images/screenshots/en/12-screenshot" class="lightbox-image d-block text-center"> 1427 <img src="https://magicpods.app/images/screenshots/en/12-screenshot_hu_6c9fc83c720fa7e4.webp" class="img-fluid rounded" alt="/images/screenshots/en/12-screenshot" title="/images/screenshots/en/12-screenshot"> 1428 </a> 1429 </div> 1430 1431 1432 1433 </div> 1434</div> 1435</section> 1436 1437 1438 1439 1440 </main> 1441 1442 1443 1444 <footer class="bg-light section pb-0"> 1445 <div class="container"> 1446 <div class="row justify-content-center"> 1447 <div class="col-xl-11"> 1448 <div class="section pt-0"> 1449 <div class="row gy-4"> 1450 <div class="col-lg-3 col-sm-6"> 1451 1452 <div class="h5 mb-4">Project</div> 1453 <ul class="list-unstyled footer-list"> 1454 1455 <li><a href="/faq" title="FAQ">FAQ</a></li> 1456 1457 <li><a href="/privacy" title="Privacy policy">Privacy policy</a></li> 1458 1459 <li><a href="https://help.magicpods.app/changelog/" title="Changelog">Changelog</a></li> 1460 1461 </ul> 1462 1463 </div> 1464 <div class="col-lg-3 col-sm-6"> 1465 1466 <div class="h5 mb-4">Support</div> 1467 <ul class="list-unstyled footer-list"> 1468 1469 <li><a href="/buy" title="Purchase">Purchase</a></li> 1470 1471 <li><a href="https://help.magicpods.app/" title="Help">Help</a></li> 1472 1473 <li><a href="https://weblate.magicpods.app/engage/magicpods-windows/" title="Translate">Translate</a></li> 1474 1475 <li><a href="https://help.magicpods.app/report-issue/" title="Report issue">Report issue</a></li> 1476 1477 <li><a href="/donate" title="Donate">Donate</a></li> 1478 1479 <li><a href="/contact" title="Contact">Contact</a></li> 1480 1481 </ul> 1482 1483 </div> 1484 <div class="col-lg-3 col-sm-6"> 1485 1486 <div class="h5 mb-4">Apps</div> 1487 <ul class="list-unstyled footer-list"> 1488 1489 <li><a href="https://play.google.com/store/apps/details?id=com.watchfacestudio.twistwatchface" title="Twist">Twist</a></li> 1490 1491 <li><a href="https://www.microsoft.com/store/apps/9N78GWBTW7L5" title="MagicSelect">MagicSelect</a></li> 1492 1493 <li><a href="https://www.microsoft.com/store/apps/9NGB2P0TSMBF" title="MagicTranslate">MagicTranslate</a></li> 1494 1495 <li><a href="https://play.google.com/store/apps/details?id=yet.another.dino" title="Yet Another Dino">Yet Another Dino</a></li> 1496 1497 <li><a href="https://play.google.com/store/apps/details?id=com.watchfacestudio.smartminimalismwatchface" title="Smart minimalism">Smart minimalism</a></li> 1498 1499 <li><a href="/steamdeck" title="MagicPods for Steam Deck">MagicPods for Steam Deck</a></li> 1500 1501 <li><a href="https://github.com/steam3d/magicblackDecky" title="MagicBlack for Steam Deck">MagicBlack for Steam Deck</a></li> 1502 1503 </ul> 1504 1505 </div> 1506 <div class="col-lg-3 col-sm-6"> 1507 <a class="d-block h5 mb-3" href="https://magicpods.app/"> 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 <img 1536 fetchpriority="high" 1537 decoding="async" 1538 src="https://magicpods.app/images/logo.png" 1539 alt="MagicPods" 1540 class="img img-light" 1541 height="auto" 1542 width="156" /> 1543 <img 1544 fetchpriority="high" 1545 decoding="async" 1546 src="https://magicpods.app/images/logo-w.png" 1547 alt="MagicPods" 1548 class="img img-dark" 1549 height="auto" 1550 width="156" /> 1551 1552 1553 1554 1555 </a> 1556 <p class="mb-4">
1556Contacts and social media</p> 1557 1558 <ul class="list-inline social-icons"> 1559 1560 <li class="list-inline-item"><a href="mailto:[email protected]" title="Mail"><i 1561 class="fa-solid fa-envelope"></i></a></li> 1562 1563 <li class="list-inline-item"><a href="https://discord.com/invite/UyY4PY768V" title="Discord"><i 1564 class="fab fa-discord"></i></a></li> 1565 1566 <li class="list-inline-item"><a href="https://github.com/steam3d/" title="GitHub"><i 1567 class="fab fa-github"></i></a></li> 1568 1569 <li class="list-inline-item"><a href="https://www.linkedin.com/in/steam3d/" title="Linkedin"><i 1570 class="fab fa-linkedin"></i></a></li> 1571 1572 <li class="list-inline-item"><a href="https://t.me/magicpods" title="Telegram"><i 1573 class="fab fa-telegram"></i></a></li> 1574 1575 <li class="list-inline-item"><a href="https://www.reddit.com/r/magicpods/" title="Reddit"><i 1576 class="fab fa-reddit"></i></a></li> 1577 1578 <li class="list-inline-item"><a href="https://www.behance.net/steam3d" title="Behance"><i 1579 class="fab fa-behance"></i></a></li> 1580 1581 </ul> 1582 1583 </div> 1584 </div> 1585 </div> 1586 1587 1588 </div> 1589 </div> 1590 </div> 1591</footer> 1592 1593 1594 1595 1596 1597 1598 1599 1600
1601<script crossorigin="anonymous" defer integrity="sha512-ax0wAJuPg6CSws9vJ4lswjWvk2zwkcJ8pNDt0Qr0cEeqTy1iX13iYLr1e4gUgACd9hW1fqH1uZJBFOzVdXhUsw==" type="application/javascript">(() => { 1602 var __create = Object.create; 1603 var __defProp = Object.defineProperty; 1604 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 1605 var __getOwnPropNames = Object.getOwnPropertyNames; 1606 var __getProtoOf = Object.getPrototypeOf; 1607 var __hasOwnProp = Object.prototype.hasOwnProperty; 1608 var __commonJS = (cb, mod) => function __require() { 1609 try { 1610 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; 1611 } catch (e) { 1612 throw mod = 0, e; 1613 } 1614 }; 1615 var __copyProps = (to, from, except, desc) => { 1616 if (from && typeof from === "object" || typeof from === "function") { 1617 for (let key of __getOwnPropNames(from)) 1618 if (!__hasOwnProp.call(to, key) && key !== except) 1619 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 1620 } 1621 return to; 1622 }; 1623 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( 1624 // If the importer is in node compatibility mode or this is not an ESM 1625 // file that has been converted to a CommonJS file using a Babel- 1626 // compatible transform (i.e. "__esModule" has not been set), then set 1627 // "default" to the CommonJS "module.exports" for node compatibility. 1628 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, 1629 mod 1630 )); 1631 1632 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/[email protected]/package/dist/cjs/popper.js 1633 var require_popper = __commonJS({ 1634 "ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/[email protected]/package/dist/cjs/popper.js"(exports) { 1635 "use strict"; 1636 Object.defineProperty(exports, "__esModule", { value: true }); 1637 function getWindow(node) { 1638 if (node == null) { 1639 return window; 1640 } 1641 if (node.toString() !== "[object Window]") { 1642 var ownerDocument = node.ownerDocument; 1643 return ownerDocument ? ownerDocument.defaultView || window : window; 1644 } 1645 return node; 1646 } 1647 function isElement2(node) { 1648 var OwnElement = getWindow(node).Element; 1649 return node instanceof OwnElement || node instanceof Element; 1650 } 1651 function isHTMLElement(node) { 1652 var OwnElement = getWindow(node).HTMLElement; 1653 return node instanceof OwnElement || node instanceof HTMLElement; 1654 } 1655 function isShadowRoot(node) { 1656 if (typeof ShadowRoot === "undefined") { 1657 return false; 1658 } 1659 var OwnElement = getWindow(node).ShadowRoot; 1660 return node instanceof OwnElement || node instanceof ShadowRoot; 1661 } 1662 var max = Math.max; 1663 var min = Math.min; 1664 var round = Math.round; 1665 function getBoundingClientRect(element, includeScale) { 1666 if (includeScale === void 0) { 1667 includeScale = false; 1668 } 1669 var rect = element.getBoundingClientRect(); 1670 var scaleX = 1; 1671 var scaleY = 1; 1672 if (isHTMLElement(element) && includeScale) { 1673 var offsetHeight = element.offsetHeight; 1674 var offsetWidth = element.offsetWidth; 1675 if (offsetWidth > 0) { 1676 scaleX = round(rect.width) / offsetWidth || 1; 1677 } 1678 if (offsetHeight > 0) { 1679 scaleY = round(rect.height) / offsetHeight || 1; 1680 } 1681 } 1682 return { 1683 width: rect.width / scaleX, 1684 height: rect.height / scaleY, 1685 top: rect.top / scaleY, 1686 right: rect.right / scaleX, 1687 bottom: rect.bottom / scaleY, 1688 left: rect.left / scaleX, 1689 x: rect.left / scaleX, 1690 y: rect.top / scaleY 1691 }; 1692 } 1693 function getWindowScroll(node) { 1694 var win = getWindow(node); 1695 var scrollLeft = win.pageXOffset; 1696 var scrollTop = win.pageYOffset; 1697 return { 1698 scrollLeft, 1699 scrollTop 1700 }; 1701 } 1702 function getHTMLElementScroll(element) { 1703 return { 1704 scrollLeft: element.scrollLeft, 1705 scrollTop: element.scrollTop 1706 }; 1707 } 1708 function getNodeScroll(node) {
vendor: 4,754 bytes, lines 1709-1824
1709 if (node === getWindow(node) || !isHTMLElement(node)) { 1710 return getWindowScroll(node); 1711 } else { 1712 return getHTMLElementScroll(node); 1713 } 1714 } 1715 function getNodeName(element) { 1716 return element ? (element.nodeName || "").toLowerCase() : null; 1717 } 1718 function getDocumentElement(element) { 1719 return ((isElement2(element) ? element.ownerDocument : ( 1720 // $FlowFixMe[prop-missing] 1721 element.document 1722 )) || window.document).documentElement; 1723 } 1724 function getWindowScrollBarX(element) { 1725 return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; 1726 } 1727 function getComputedStyle2(element) { 1728 return getWindow(element).getComputedStyle(element); 1729 } 1730 function isScrollParent(element) { 1731 var _getComputedStyle = getComputedStyle2(element), overflow = _getComputedStyle.overflow, overflowX = _getComputedStyle.overflowX, overflowY = _getComputedStyle.overflowY; 1732 return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); 1733 } 1734 function isElementScaled(element) { 1735 var rect = element.getBoundingClientRect(); 1736 var scaleX = round(rect.width) / element.offsetWidth || 1; 1737 var scaleY = round(rect.height) / element.offsetHeight || 1; 1738 return scaleX !== 1 || scaleY !== 1; 1739 } 1740 function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { 1741 if (isFixed === void 0) { 1742 isFixed = false; 1743 } 1744 var isOffsetParentAnElement = isHTMLElement(offsetParent); 1745 var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent); 1746 var documentElement = getDocumentElement(offsetParent); 1747 var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled); 1748 var scroll = { 1749 scrollLeft: 0, 1750 scrollTop: 0 1751 }; 1752 var offsets = { 1753 x: 0, 1754 y: 0 1755 }; 1756 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { 1757 if (getNodeName(offsetParent) !== "body" || // https://github.com/popperjs/popper-core/issues/1078 1758 isScrollParent(documentElement)) { 1759 scroll = getNodeScroll(offsetParent); 1760 } 1761 if (isHTMLElement(offsetParent)) { 1762 offsets = getBoundingClientRect(offsetParent, true); 1763 offsets.x += offsetParent.clientLeft; 1764 offsets.y += offsetParent.clientTop; 1765 } else if (documentElement) { 1766 offsets.x = getWindowScrollBarX(documentElement); 1767 } 1768 } 1769 return { 1770 x: rect.left + scroll.scrollLeft - offsets.x, 1771 y: rect.top + scroll.scrollTop - offsets.y, 1772 width: rect.width, 1773 height: rect.height 1774 }; 1775 } 1776 function getLayoutRect(element) { 1777 var clientRect = getBoundingClientRect(element); 1778 var width = element.offsetWidth; 1779 var height = element.offsetHeight; 1780 if (Math.abs(clientRect.width - width) <= 1) { 1781 width = clientRect.width; 1782 } 1783 if (Math.abs(clientRect.height - height) <= 1) { 1784 height = clientRect.height; 1785 } 1786 return { 1787 x: element.offsetLeft, 1788 y: element.offsetTop, 1789 width, 1790 height 1791 }; 1792 } 1793 function getParentNode(element) { 1794 if (getNodeName(element) === "html") { 1795 return element; 1796 } 1797 return ( 1798 // this is a quicker (but less type safe) way to save quite some bytes from the bundle 1799 // $FlowFixMe[incompatible-return] 1800 // $FlowFixMe[prop-missing] 1801 element.assignedSlot || // step into the shadow DOM of the parent of a slotted node 1802 element.parentNode || // DOM Element detected 1803 (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected 1804 // $FlowFixMe[incompatible-call]: HTMLElement is a Node 1805 getDocumentElement(element) 1806 ); 1807 } 1808 function getScrollParent(node) { 1809 if (["html", "body", "#document"].indexOf(getNodeName(node)) >= 0) { 1810 return node.ownerDocument.body; 1811 } 1812 if (isHTMLElement(node) && isScrollParent(node)) { 1813 return node; 1814 } 1815 return getScrollParent(getParentNode(node)); 1816 } 1817 function listScrollParents(element, list) { 1818 var _element$ownerDocumen; 1819 if (list === void 0) { 1820 list = []; 1821 } 1822 var scrollParent = getScrollParent(element); 1823 var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); 1824 var win = getWindow(scrollParent);
vendor: 4,320 bytes, lines 1825-1920
1825 var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; 1826 var updatedList = list.concat(target); 1827 return isBody ? updatedList : ( 1828 // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here 1829 updatedList.concat(listScrollParents(getParentNode(target))) 1830 ); 1831 } 1832 function isTableElement(element) { 1833 return ["table", "td", "th"].indexOf(getNodeName(element)) >= 0; 1834 } 1835 function getTrueOffsetParent(element) { 1836 if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837 1837 getComputedStyle2(element).position === "fixed") { 1838 return null; 1839 } 1840 return element.offsetParent; 1841 } 1842 function getContainingBlock(element) { 1843 var isFirefox = navigator.userAgent.toLowerCase().indexOf("firefox") !== -1; 1844 var isIE = navigator.userAgent.indexOf("Trident") !== -1; 1845 if (isIE && isHTMLElement(element)) { 1846 var elementCss = getComputedStyle2(element); 1847 if (elementCss.position === "fixed") { 1848 return null; 1849 } 1850 } 1851 var currentNode = getParentNode(element); 1852 while (isHTMLElement(currentNode) && ["html", "body"].indexOf(getNodeName(currentNode)) < 0) { 1853 var css = getComputedStyle2(currentNode); 1854 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") { 1855 return currentNode; 1856 } else { 1857 currentNode = currentNode.parentNode; 1858 } 1859 } 1860 return null; 1861 } 1862 function getOffsetParent(element) { 1863 var window2 = getWindow(element); 1864 var offsetParent = getTrueOffsetParent(element); 1865 while (offsetParent && isTableElement(offsetParent) && getComputedStyle2(offsetParent).position === "static") { 1866 offsetParent = getTrueOffsetParent(offsetParent); 1867 } 1868 if (offsetParent && (getNodeName(offsetParent) === "html" || getNodeName(offsetParent) === "body" && getComputedStyle2(offsetParent).position === "static")) { 1869 return window2; 1870 } 1871 return offsetParent || getContainingBlock(element) || window2; 1872 } 1873 var top = "top"; 1874 var bottom = "bottom"; 1875 var right = "right"; 1876 var left = "left"; 1877 var auto = "auto"; 1878 var basePlacements = [top, bottom, right, left]; 1879 var start = "start"; 1880 var end = "end"; 1881 var clippingParents = "clippingParents"; 1882 var viewport = "viewport"; 1883 var popper = "popper"; 1884 var reference = "reference"; 1885 var variationPlacements = /* @__PURE__ */ basePlacements.reduce(function(acc, placement) { 1886 return acc.concat([placement + "-" + start, placement + "-" + end]); 1887 }, []); 1888 var placements = /* @__PURE__ */ [].concat(basePlacements, [auto]).reduce(function(acc, placement) { 1889 return acc.concat([placement, placement + "-" + start, placement + "-" + end]); 1890 }, []); 1891 var beforeRead = "beforeRead"; 1892 var read = "read"; 1893 var afterRead = "afterRead"; 1894 var beforeMain = "beforeMain"; 1895 var main = "main"; 1896 var afterMain = "afterMain"; 1897 var beforeWrite = "beforeWrite"; 1898 var write = "write"; 1899 var afterWrite = "afterWrite"; 1900 var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; 1901 function order(modifiers) { 1902 var map = /* @__PURE__ */ new Map(); 1903 var visited = /* @__PURE__ */ new Set(); 1904 var result = []; 1905 modifiers.forEach(function(modifier) { 1906 map.set(modifier.name, modifier); 1907 }); 1908 function sort(modifier) { 1909 visited.add(modifier.name); 1910 var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); 1911 requires.forEach(function(dep) { 1912 if (!visited.has(dep)) { 1913 var depModifier = map.get(dep); 1914 if (depModifier) { 1915 sort(depModifier); 1916 } 1917 } 1918 }); 1919 result.push(modifier); 1920 }
vendor: 5,852 bytes, lines 1921-2053
1921 modifiers.forEach(function(modifier) { 1922 if (!visited.has(modifier.name)) { 1923 sort(modifier); 1924 } 1925 }); 1926 return result; 1927 } 1928 function orderModifiers(modifiers) { 1929 var orderedModifiers = order(modifiers); 1930 return modifierPhases.reduce(function(acc, phase) { 1931 return acc.concat(orderedModifiers.filter(function(modifier) { 1932 return modifier.phase === phase; 1933 })); 1934 }, []); 1935 } 1936 function debounce(fn) { 1937 var pending; 1938 return function() { 1939 if (!pending) { 1940 pending = new Promise(function(resolve) { 1941 Promise.resolve().then(function() { 1942 pending = void 0; 1943 resolve(fn()); 1944 }); 1945 }); 1946 } 1947 return pending; 1948 }; 1949 } 1950 function format(str) { 1951 for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { 1952 args[_key - 1] = arguments[_key]; 1953 } 1954 return [].concat(args).reduce(function(p, c) { 1955 return p.replace(/%s/, c); 1956 }, str); 1957 } 1958 var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s'; 1959 var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available'; 1960 var VALID_PROPERTIES = ["name", "enabled", "phase", "fn", "effect", "requires", "options"]; 1961 function validateModifiers(modifiers) { 1962 modifiers.forEach(function(modifier) { 1963 [].concat(Object.keys(modifier), VALID_PROPERTIES).filter(function(value, index, self) { 1964 return self.indexOf(value) === index; 1965 }).forEach(function(key) { 1966 switch (key) { 1967 case "name": 1968 if (typeof modifier.name !== "string") { 1969 console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', '"' + String(modifier.name) + '"')); 1970 } 1971 break; 1972 case "enabled": 1973 if (typeof modifier.enabled !== "boolean") { 1974 console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', '"' + String(modifier.enabled) + '"')); 1975 } 1976 break; 1977 case "phase": 1978 if (modifierPhases.indexOf(modifier.phase) < 0) { 1979 console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(", "), '"' + String(modifier.phase) + '"')); 1980 } 1981 break; 1982 case "fn": 1983 if (typeof modifier.fn !== "function") { 1984 console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', '"' + String(modifier.fn) + '"')); 1985 } 1986 break; 1987 case "effect": 1988 if (modifier.effect != null && typeof modifier.effect !== "function") { 1989 console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', '"' + String(modifier.fn) + '"')); 1990 } 1991 break; 1992 case "requires": 1993 if (modifier.requires != null && !Array.isArray(modifier.requires)) { 1994 console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', '"' + String(modifier.requires) + '"')); 1995 } 1996 break; 1997 case "requiresIfExists": 1998 if (!Array.isArray(modifier.requiresIfExists)) { 1999 console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', '"' + String(modifier.requiresIfExists) + '"')); 2000 } 2001 break; 2002 case "options": 2003 case "data": 2004 break; 2005 default: 2006 console.error('PopperJS: an invalid property has been provided to the "' + modifier.name + '" modifier, valid properties are ' + VALID_PROPERTIES.map(function(s) { 2007 return '"' + s + '"'; 2008 }).join(", ") + '; but "' + key + '" was provided.'); 2009 } 2010 modifier.requires && modifier.requires.forEach(function(requirement) { 2011 if (modifiers.find(function(mod) { 2012 return mod.name === requirement; 2013 }) == null) { 2014 console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement)); 2015 } 2016 }); 2017 }); 2018 }); 2019 } 2020 function uniqueBy(arr, fn) { 2021 var identifiers = /* @__PURE__ */ new Set(); 2022 return arr.filter(function(item) { 2023 var identifier = fn(item); 2024 if (!identifiers.has(identifier)) { 2025 identifiers.add(identifier); 2026 return true; 2027 } 2028 }); 2029 } 2030 function getBasePlacement(placement) { 2031 return placement.split("-")[0]; 2032 } 2033 function mergeByName(modifiers) { 2034 var merged = modifiers.reduce(function(merged2, current) { 2035 var existing = merged2[current.name]; 2036 merged2[current.name] = existing ? Object.assign({}, existing, current, { 2037 options: Object.assign({}, existing.options, current.options), 2038 data: Object.assign({}, existing.data, current.data) 2039 }) : current; 2040 return merged2; 2041 }, {}); 2042 return Object.keys(merged).map(function(key) { 2043 return merged[key]; 2044 }); 2045 } 2046 function getViewportRect(element) { 2047 var win = getWindow(element); 2048 var html = getDocumentElement(element); 2049 var visualViewport = win.visualViewport; 2050 var width = html.clientWidth; 2051 var height = html.clientHeight; 2052 var x = 0; 2053 var y = 0;
vendor: 11,597 bytes, lines 2054-2303
2054 if (visualViewport) { 2055 width = visualViewport.width; 2056 height = visualViewport.height; 2057 if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) { 2058 x = visualViewport.offsetLeft; 2059 y = visualViewport.offsetTop; 2060 } 2061 } 2062 return { 2063 width, 2064 height, 2065 x: x + getWindowScrollBarX(element), 2066 y 2067 }; 2068 } 2069 function getDocumentRect(element) { 2070 var _element$ownerDocumen; 2071 var html = getDocumentElement(element); 2072 var winScroll = getWindowScroll(element); 2073 var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; 2074 var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); 2075 var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); 2076 var x = -winScroll.scrollLeft + getWindowScrollBarX(element); 2077 var y = -winScroll.scrollTop; 2078 if (getComputedStyle2(body || html).direction === "rtl") { 2079 x += max(html.clientWidth, body ? body.clientWidth : 0) - width; 2080 } 2081 return { 2082 width, 2083 height, 2084 x, 2085 y 2086 }; 2087 } 2088 function contains(parent, child) { 2089 var rootNode = child.getRootNode && child.getRootNode(); 2090 if (parent.contains(child)) { 2091 return true; 2092 } else if (rootNode && isShadowRoot(rootNode)) { 2093 var next = child; 2094 do { 2095 if (next && parent.isSameNode(next)) { 2096 return true; 2097 } 2098 next = next.parentNode || next.host; 2099 } while (next); 2100 } 2101 return false; 2102 } 2103 function rectToClientRect(rect) { 2104 return Object.assign({}, rect, { 2105 left: rect.x, 2106 top: rect.y, 2107 right: rect.x + rect.width, 2108 bottom: rect.y + rect.height 2109 }); 2110 } 2111 function getInnerBoundingClientRect(element) { 2112 var rect = getBoundingClientRect(element); 2113 rect.top = rect.top + element.clientTop; 2114 rect.left = rect.left + element.clientLeft; 2115 rect.bottom = rect.top + element.clientHeight; 2116 rect.right = rect.left + element.clientWidth; 2117 rect.width = element.clientWidth; 2118 rect.height = element.clientHeight; 2119 rect.x = rect.left; 2120 rect.y = rect.top; 2121 return rect; 2122 } 2123 function getClientRectFromMixedType(element, clippingParent) { 2124 return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement2(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element))); 2125 } 2126 function getClippingParents(element) { 2127 var clippingParents2 = listScrollParents(getParentNode(element)); 2128 var canEscapeClipping = ["absolute", "fixed"].indexOf(getComputedStyle2(element).position) >= 0; 2129 var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; 2130 if (!isElement2(clipperElement)) { 2131 return []; 2132 } 2133 return clippingParents2.filter(function(clippingParent) { 2134 return isElement2(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== "body" && (canEscapeClipping ? getComputedStyle2(clippingParent).position !== "static" : true); 2135 }); 2136 } 2137 function getClippingRect(element, boundary, rootBoundary) { 2138 var mainClippingParents = boundary === "clippingParents" ? getClippingParents(element) : [].concat(boundary); 2139 var clippingParents2 = [].concat(mainClippingParents, [rootBoundary]); 2140 var firstClippingParent = clippingParents2[0]; 2141 var clippingRect = clippingParents2.reduce(function(accRect, clippingParent) { 2142 var rect = getClientRectFromMixedType(element, clippingParent); 2143 accRect.top = max(rect.top, accRect.top); 2144 accRect.right = min(rect.right, accRect.right); 2145 accRect.bottom = min(rect.bottom, accRect.bottom); 2146 accRect.left = max(rect.left, accRect.left); 2147 return accRect; 2148 }, getClientRectFromMixedType(element, firstClippingParent)); 2149 clippingRect.width = clippingRect.right - clippingRect.left; 2150 clippingRect.height = clippingRect.bottom - clippingRect.top; 2151 clippingRect.x = clippingRect.left; 2152 clippingRect.y = clippingRect.top; 2153 return clippingRect; 2154 } 2155 function getVariation(placement) { 2156 return placement.split("-")[1]; 2157 } 2158 function getMainAxisFromPlacement(placement) { 2159 return ["top", "bottom"].indexOf(placement) >= 0 ? "x" : "y"; 2160 } 2161 function computeOffsets(_ref) { 2162 var reference2 = _ref.reference, element = _ref.element, placement = _ref.placement; 2163 var basePlacement = placement ? getBasePlacement(placement) : null; 2164 var variation = placement ? getVariation(placement) : null; 2165 var commonX = reference2.x + reference2.width / 2 - element.width / 2; 2166 var commonY = reference2.y + reference2.height / 2 - element.height / 2; 2167 var offsets; 2168 switch (basePlacement) { 2169 case top: 2170 offsets = { 2171 x: commonX, 2172 y: reference2.y - element.height 2173 }; 2174 break; 2175 case bottom: 2176 offsets = { 2177 x: commonX, 2178 y: reference2.y + reference2.height 2179 }; 2180 break; 2181 case right: 2182 offsets = { 2183 x: reference2.x + reference2.width, 2184 y: commonY 2185 }; 2186 break; 2187 case left: 2188 offsets = { 2189 x: reference2.x - element.width, 2190 y: commonY 2191 }; 2192 break; 2193 default: 2194 offsets = { 2195 x: reference2.x, 2196 y: reference2.y 2197 }; 2198 } 2199 var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; 2200 if (mainAxis != null) { 2201 var len = mainAxis === "y" ? "height" : "width"; 2202 switch (variation) { 2203 case start: 2204 offsets[mainAxis] = offsets[mainAxis] - (reference2[len] / 2 - element[len] / 2); 2205 break; 2206 case end: 2207 offsets[mainAxis] = offsets[mainAxis] + (reference2[len] / 2 - element[len] / 2); 2208 break; 2209 } 2210 } 2211 return offsets; 2212 } 2213 function getFreshSideObject() { 2214 return { 2215 top: 0, 2216 right: 0, 2217 bottom: 0, 2218 left: 0 2219 }; 2220 } 2221 function mergePaddingObject(paddingObject) { 2222 return Object.assign({}, getFreshSideObject(), paddingObject); 2223 } 2224 function expandToHashMap(value, keys) { 2225 return keys.reduce(function(hashMap, key) { 2226 hashMap[key] = value; 2227 return hashMap; 2228 }, {}); 2229 } 2230 function detectOverflow(state, options) { 2231 if (options === void 0) { 2232 options = {}; 2233 } 2234 var _options = options, _options$placement = _options.placement, placement = _options$placement === void 0 ? state.placement : _options$placement, _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; 2235 var paddingObject = mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements)); 2236 var altContext = elementContext === popper ? reference : popper; 2237 var popperRect = state.rects.popper; 2238 var element = state.elements[altBoundary ? altContext : elementContext]; 2239 var clippingClientRect = getClippingRect(isElement2(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary); 2240 var referenceClientRect = getBoundingClientRect(state.elements.reference); 2241 var popperOffsets2 = computeOffsets({ 2242 reference: referenceClientRect, 2243 element: popperRect, 2244 strategy: "absolute", 2245 placement 2246 }); 2247 var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets2)); 2248 var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; 2249 var overflowOffsets = { 2250 top: clippingClientRect.top - elementClientRect.top + paddingObject.top, 2251 bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, 2252 left: clippingClientRect.left - elementClientRect.left + paddingObject.left, 2253 right: elementClientRect.right - clippingClientRect.right + paddingObject.right 2254 }; 2255 var offsetData = state.modifiersData.offset; 2256 if (elementContext === popper && offsetData) { 2257 var offset2 = offsetData[placement]; 2258 Object.keys(overflowOffsets).forEach(function(key) { 2259 var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; 2260 var axis = [top, bottom].indexOf(key) >= 0 ? "y" : "x"; 2261 overflowOffsets[key] += offset2[axis] * multiply; 2262 }); 2263 } 2264 return overflowOffsets; 2265 } 2266 var INVALID_ELEMENT_ERROR = "Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element."; 2267 var INFINITE_LOOP_ERROR = "Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash."; 2268 var DEFAULT_OPTIONS = { 2269 placement: "bottom", 2270 modifiers: [], 2271 strategy: "absolute" 2272 }; 2273 function areValidElements() { 2274 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 2275 args[_key] = arguments[_key]; 2276 } 2277 return !args.some(function(element) { 2278 return !(element && typeof element.getBoundingClientRect === "function"); 2279 }); 2280 } 2281 function popperGenerator(generatorOptions) { 2282 if (generatorOptions === void 0) { 2283 generatorOptions = {}; 2284 } 2285 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; 2286 return function createPopper3(reference2, popper2, options) { 2287 if (options === void 0) { 2288 options = defaultOptions; 2289 } 2290 var state = { 2291 placement: "bottom", 2292 orderedModifiers: [], 2293 options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), 2294 modifiersData: {}, 2295 elements: { 2296 reference: reference2, 2297 popper: popper2 2298 }, 2299 attributes: {}, 2300 styles: {} 2301 }; 2302 var effectCleanupFns = []; 2303 var isDestroyed = false;
vendor: 4,183 bytes, lines 2304-2378
2304 var instance = { 2305 state, 2306 setOptions: function setOptions(setOptionsAction) { 2307 var options2 = typeof setOptionsAction === "function" ? setOptionsAction(state.options) : setOptionsAction; 2308 cleanupModifierEffects(); 2309 state.options = Object.assign({}, defaultOptions, state.options, options2); 2310 state.scrollParents = { 2311 reference: isElement2(reference2) ? listScrollParents(reference2) : reference2.contextElement ? listScrollParents(reference2.contextElement) : [], 2312 popper: listScrollParents(popper2) 2313 }; 2314 var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers2, state.options.modifiers))); 2315 state.orderedModifiers = orderedModifiers.filter(function(m) { 2316 return m.enabled; 2317 }); 2318 if (true) { 2319 var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function(_ref) { 2320 var name = _ref.name; 2321 return name; 2322 }); 2323 validateModifiers(modifiers); 2324 if (getBasePlacement(state.options.placement) === auto) { 2325 var flipModifier = state.orderedModifiers.find(function(_ref2) { 2326 var name = _ref2.name; 2327 return name === "flip"; 2328 }); 2329 if (!flipModifier) { 2330 console.error(['Popper: "auto" placements require the "flip" modifier be', "present and enabled to work."].join(" ")); 2331 } 2332 } 2333 var _getComputedStyle = getComputedStyle2(popper2), marginTop = _getComputedStyle.marginTop, marginRight = _getComputedStyle.marginRight, marginBottom = _getComputedStyle.marginBottom, marginLeft = _getComputedStyle.marginLeft; 2334 if ([marginTop, marginRight, marginBottom, marginLeft].some(function(margin) { 2335 return parseFloat(margin); 2336 })) { 2337 console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', "between the popper and its reference element or boundary.", "To replicate margin, use the `offset` modifier, as well as", "the `padding` option in the `preventOverflow` and `flip`", "modifiers."].join(" ")); 2338 } 2339 } 2340 runModifierEffects(); 2341 return instance.update(); 2342 }, 2343 // Sync update â it will always be executed, even if not necessary. This 2344 // is useful for low frequency updates where sync behavior simplifies the 2345 // logic. 2346 // For high frequency updates (e.g. `resize` and `scroll` events), always 2347 // prefer the async Popper#update method 2348 forceUpdate: function forceUpdate() { 2349 if (isDestroyed) { 2350 return; 2351 } 2352 var _state$elements = state.elements, reference3 = _state$elements.reference, popper3 = _state$elements.popper; 2353 if (!areValidElements(reference3, popper3)) { 2354 if (true) { 2355 console.error(INVALID_ELEMENT_ERROR); 2356 } 2357 return; 2358 } 2359 state.rects = { 2360 reference: getCompositeRect(reference3, getOffsetParent(popper3), state.options.strategy === "fixed"), 2361 popper: getLayoutRect(popper3) 2362 }; 2363 state.reset = false; 2364 state.placement = state.options.placement; 2365 state.orderedModifiers.forEach(function(modifier) { 2366 return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); 2367 }); 2368 var __debug_loops__ = 0; 2369 for (var index = 0; index < state.orderedModifiers.length; index++) { 2370 if (true) { 2371 __debug_loops__ += 1; 2372 if (__debug_loops__ > 100) { 2373 console.error(INFINITE_LOOP_ERROR); 2374 break; 2375 } 2376 } 2377 if (state.reset === true) { 2378 state.reset = false;
vendor: 5,583 bytes, lines 2379-2521
2379 index = -1; 2380 continue; 2381 } 2382 var _state$orderedModifie = state.orderedModifiers[index], fn = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name; 2383 if (typeof fn === "function") { 2384 state = fn({ 2385 state, 2386 options: _options, 2387 name, 2388 instance 2389 }) || state; 2390 } 2391 } 2392 }, 2393 // Async and optimistically optimized update â it will not be executed if 2394 // not necessary (debounced to run at most once-per-tick) 2395 update: debounce(function() { 2396 return new Promise(function(resolve) { 2397 instance.forceUpdate(); 2398 resolve(state); 2399 }); 2400 }), 2401 destroy: function destroy() { 2402 cleanupModifierEffects(); 2403 isDestroyed = true; 2404 } 2405 }; 2406 if (!areValidElements(reference2, popper2)) { 2407 if (true) { 2408 console.error(INVALID_ELEMENT_ERROR); 2409 } 2410 return instance; 2411 } 2412 instance.setOptions(options).then(function(state2) { 2413 if (!isDestroyed && options.onFirstUpdate) { 2414 options.onFirstUpdate(state2); 2415 } 2416 }); 2417 function runModifierEffects() { 2418 state.orderedModifiers.forEach(function(_ref3) { 2419 var name = _ref3.name, _ref3$options = _ref3.options, options2 = _ref3$options === void 0 ? {} : _ref3$options, effect2 = _ref3.effect; 2420 if (typeof effect2 === "function") { 2421 var cleanupFn = effect2({ 2422 state, 2423 name, 2424 instance, 2425 options: options2 2426 }); 2427 var noopFn = function noopFn2() { 2428 }; 2429 effectCleanupFns.push(cleanupFn || noopFn); 2430 } 2431 }); 2432 } 2433 function cleanupModifierEffects() { 2434 effectCleanupFns.forEach(function(fn) { 2435 return fn(); 2436 }); 2437 effectCleanupFns = []; 2438 } 2439 return instance; 2440 }; 2441 } 2442 var passive = { 2443 passive: true 2444 }; 2445 function effect$2(_ref) { 2446 var state = _ref.state, instance = _ref.instance, options = _ref.options; 2447 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; 2448 var window2 = getWindow(state.elements.popper); 2449 var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); 2450 if (scroll) { 2451 scrollParents.forEach(function(scrollParent) { 2452 scrollParent.addEventListener("scroll", instance.update, passive); 2453 }); 2454 } 2455 if (resize) { 2456 window2.addEventListener("resize", instance.update, passive); 2457 } 2458 return function() { 2459 if (scroll) { 2460 scrollParents.forEach(function(scrollParent) { 2461 scrollParent.removeEventListener("scroll", instance.update, passive); 2462 }); 2463 } 2464 if (resize) { 2465 window2.removeEventListener("resize", instance.update, passive); 2466 } 2467 }; 2468 } 2469 var eventListeners = { 2470 name: "eventListeners", 2471 enabled: true, 2472 phase: "write", 2473 fn: function fn() { 2474 }, 2475 effect: effect$2, 2476 data: {} 2477 }; 2478 function popperOffsets(_ref) { 2479 var state = _ref.state, name = _ref.name; 2480 state.modifiersData[name] = computeOffsets({ 2481 reference: state.rects.reference, 2482 element: state.rects.popper, 2483 strategy: "absolute", 2484 placement: state.placement 2485 }); 2486 } 2487 var popperOffsets$1 = { 2488 name: "popperOffsets", 2489 enabled: true, 2490 phase: "read", 2491 fn: popperOffsets, 2492 data: {} 2493 }; 2494 var unsetSides = { 2495 top: "auto", 2496 right: "auto", 2497 bottom: "auto", 2498 left: "auto" 2499 }; 2500 function roundOffsetsByDPR(_ref) { 2501 var x = _ref.x, y = _ref.y; 2502 var win = window; 2503 var dpr = win.devicePixelRatio || 1; 2504 return { 2505 x: round(x * dpr) / dpr || 0, 2506 y: round(y * dpr) / dpr || 0 2507 }; 2508 } 2509 function mapToStyles(_ref2) { 2510 var _Object$assign2; 2511 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; 2512 var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === "function" ? roundOffsets(offsets) : offsets, _ref3$x = _ref3.x, x = _ref3$x === void 0 ? 0 : _ref3$x, _ref3$y = _ref3.y, y = _ref3$y === void 0 ? 0 : _ref3$y; 2513 var hasX = offsets.hasOwnProperty("x"); 2514 var hasY = offsets.hasOwnProperty("y"); 2515 var sideX = left; 2516 var sideY = top; 2517 var win = window; 2518 if (adaptive) { 2519 var offsetParent = getOffsetParent(popper2); 2520 var heightProp = "clientHeight"; 2521 var widthProp = "clientWidth";
2522 if (offsetParent === getWindow(popper2)) { 2523 offsetParent = getDocumentElement(popper2); 2524 if (getComputedStyle2(offsetParent).position !== "static" && position === "absolute") { 2525 heightProp = "scrollHeight"; 2526 widthProp = "scrollWidth"; 2527 } 2528 } 2529 offsetParent = offsetParent; 2530 if (placement === top || (placement === left || placement === right) && variation === end) { 2531 sideY = bottom; 2532 var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : ( 2533 // $FlowFixMe[prop-missing] 2534 offsetParent[heightProp] 2535 ); 2536 y -= offsetY - popperRect.height; 2537 y *= gpuAcceleration ? 1 : -1; 2538 } 2539 if (placement === left || (placement === top || placement === bottom) && variation === end) { 2540 sideX = right; 2541 var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : ( 2542 // $FlowFixMe[prop-missing] 2543 offsetParent[widthProp] 2544 ); 2545 x -= offsetX - popperRect.width; 2546 x *= gpuAcceleration ? 1 : -1; 2547 } 2548 } 2549 var commonStyles = Object.assign({ 2550 position 2551 }, adaptive && unsetSides); 2552 if (gpuAcceleration) { 2553 var _Object$assign; 2554 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)); 2555 } 2556 return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : "", _Object$assign2[sideX] = hasX ? x + "px" : "", _Object$assign2.transform = "", _Object$assign2)); 2557 } 2558 function computeStyles(_ref4) { 2559 var state = _ref4.state, options = _ref4.options; 2560 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; 2561 if (true) { 2562 var transitionProperty = getComputedStyle2(state.elements.popper).transitionProperty || ""; 2563 if (adaptive && ["transform", "top", "right", "bottom", "left"].some(function(property) { 2564 return transitionProperty.indexOf(property) >= 0; 2565 })) { 2566 console.warn(["Popper: Detected CSS transitions on at least one of the following", 'CSS properties: "transform", "top", "right", "bottom", "left".', "\n\n", 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', "for smooth transitions, or remove these properties from the CSS", "transition declaration on the popper element if only transitioning", "opacity or background-color for example.", "\n\n", "We recommend using the popper element as a wrapper around an inner", "element that can have any CSS property transitioned for animations."].join(" ")); 2567 } 2568 } 2569 var commonStyles = { 2570 placement: getBasePlacement(state.placement), 2571 variation: getVariation(state.placement), 2572 popper: state.elements.popper, 2573 popperRect: state.rects.popper, 2574 gpuAcceleration, 2575 isFixed: state.options.strategy === "fixed" 2576 }; 2577 if (state.modifiersData.popperOffsets != null) { 2578 state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { 2579 offsets: state.modifiersData.popperOffsets, 2580 position: state.options.strategy, 2581 adaptive, 2582 roundOffsets 2583 }))); 2584 } 2585 if (state.modifiersData.arrow != null) { 2586 state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { 2587 offsets: state.modifiersData.arrow, 2588 position: "absolute", 2589 adaptive: false, 2590 roundOffsets 2591 }))); 2592 } 2593 state.attributes.popper = Object.assign({}, state.attributes.popper, { 2594 "data-popper-placement": state.placement 2595 }); 2596 } 2597 var computeStyles$1 = { 2598 name: "computeStyles", 2599 enabled: true, 2600 phase: "beforeWrite", 2601 fn: computeStyles, 2602 data: {} 2603 }; 2604 function applyStyles(_ref) { 2605 var state = _ref.state;
vendor: 9,568 bytes, lines 2606-2819
2606 Object.keys(state.elements).forEach(function(name) { 2607 var style = state.styles[name] || {}; 2608 var attributes = state.attributes[name] || {}; 2609 var element = state.elements[name]; 2610 if (!isHTMLElement(element) || !getNodeName(element)) { 2611 return; 2612 } 2613 Object.assign(element.style, style); 2614 Object.keys(attributes).forEach(function(name2) { 2615 var value = attributes[name2]; 2616 if (value === false) { 2617 element.removeAttribute(name2); 2618 } else { 2619 element.setAttribute(name2, value === true ? "" : value); 2620 } 2621 }); 2622 }); 2623 } 2624 function effect$1(_ref2) { 2625 var state = _ref2.state; 2626 var initialStyles = { 2627 popper: { 2628 position: state.options.strategy, 2629 left: "0", 2630 top: "0", 2631 margin: "0" 2632 }, 2633 arrow: { 2634 position: "absolute" 2635 }, 2636 reference: {} 2637 }; 2638 Object.assign(state.elements.popper.style, initialStyles.popper); 2639 state.styles = initialStyles; 2640 if (state.elements.arrow) { 2641 Object.assign(state.elements.arrow.style, initialStyles.arrow); 2642 } 2643 return function() { 2644 Object.keys(state.elements).forEach(function(name) { 2645 var element = state.elements[name]; 2646 var attributes = state.attributes[name] || {}; 2647 var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); 2648 var style = styleProperties.reduce(function(style2, property) { 2649 style2[property] = ""; 2650 return style2; 2651 }, {}); 2652 if (!isHTMLElement(element) || !getNodeName(element)) { 2653 return; 2654 } 2655 Object.assign(element.style, style); 2656 Object.keys(attributes).forEach(function(attribute) { 2657 element.removeAttribute(attribute); 2658 }); 2659 }); 2660 }; 2661 } 2662 var applyStyles$1 = { 2663 name: "applyStyles", 2664 enabled: true, 2665 phase: "write", 2666 fn: applyStyles, 2667 effect: effect$1, 2668 requires: ["computeStyles"] 2669 }; 2670 function distanceAndSkiddingToXY(placement, rects, offset2) { 2671 var basePlacement = getBasePlacement(placement); 2672 var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; 2673 var _ref = typeof offset2 === "function" ? offset2(Object.assign({}, rects, { 2674 placement 2675 })) : offset2, skidding = _ref[0], distance = _ref[1]; 2676 skidding = skidding || 0; 2677 distance = (distance || 0) * invertDistance; 2678 return [left, right].indexOf(basePlacement) >= 0 ? { 2679 x: distance, 2680 y: skidding 2681 } : { 2682 x: skidding, 2683 y: distance 2684 }; 2685 } 2686 function offset(_ref2) { 2687 var state = _ref2.state, options = _ref2.options, name = _ref2.name; 2688 var _options$offset = options.offset, offset2 = _options$offset === void 0 ? [0, 0] : _options$offset; 2689 var data = placements.reduce(function(acc, placement) { 2690 acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset2); 2691 return acc; 2692 }, {}); 2693 var _data$state$placement = data[state.placement], x = _data$state$placement.x, y = _data$state$placement.y; 2694 if (state.modifiersData.popperOffsets != null) { 2695 state.modifiersData.popperOffsets.x += x; 2696 state.modifiersData.popperOffsets.y += y; 2697 } 2698 state.modifiersData[name] = data; 2699 } 2700 var offset$1 = { 2701 name: "offset", 2702 enabled: true, 2703 phase: "main", 2704 requires: ["popperOffsets"], 2705 fn: offset 2706 }; 2707 var hash$1 = { 2708 left: "right", 2709 right: "left", 2710 bottom: "top", 2711 top: "bottom" 2712 }; 2713 function getOppositePlacement(placement) { 2714 return placement.replace(/left|right|bottom|top/g, function(matched) { 2715 return hash$1[matched]; 2716 }); 2717 } 2718 var hash = { 2719 start: "end", 2720 end: "start" 2721 }; 2722 function getOppositeVariationPlacement(placement) { 2723 return placement.replace(/start|end/g, function(matched) { 2724 return hash[matched]; 2725 }); 2726 } 2727 function computeAutoPlacement(state, options) { 2728 if (options === void 0) { 2729 options = {}; 2730 } 2731 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; 2732 var variation = getVariation(placement); 2733 var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function(placement2) { 2734 return getVariation(placement2) === variation; 2735 }) : basePlacements; 2736 var allowedPlacements = placements$1.filter(function(placement2) { 2737 return allowedAutoPlacements.indexOf(placement2) >= 0; 2738 }); 2739 if (allowedPlacements.length === 0) { 2740 allowedPlacements = placements$1; 2741 if (true) { 2742 console.error(["Popper: The `allowedAutoPlacements` option did not allow any", "placements. Ensure the `placement` option matches the variation", "of the allowed placements.", 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(" ")); 2743 } 2744 } 2745 var overflows = allowedPlacements.reduce(function(acc, placement2) { 2746 acc[placement2] = detectOverflow(state, { 2747 placement: placement2, 2748 boundary, 2749 rootBoundary, 2750 padding 2751 })[getBasePlacement(placement2)]; 2752 return acc; 2753 }, {}); 2754 return Object.keys(overflows).sort(function(a, b) { 2755 return overflows[a] - overflows[b]; 2756 }); 2757 } 2758 function getExpandedFallbackPlacements(placement) { 2759 if (getBasePlacement(placement) === auto) { 2760 return []; 2761 } 2762 var oppositePlacement = getOppositePlacement(placement); 2763 return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; 2764 } 2765 function flip(_ref) { 2766 var state = _ref.state, options = _ref.options, name = _ref.name; 2767 if (state.modifiersData[name]._skip) { 2768 return; 2769 } 2770 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; 2771 var preferredPlacement = state.options.placement; 2772 var basePlacement = getBasePlacement(preferredPlacement); 2773 var isBasePlacement = basePlacement === preferredPlacement; 2774 var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); 2775 var placements2 = [preferredPlacement].concat(fallbackPlacements).reduce(function(acc, placement2) { 2776 return acc.concat(getBasePlacement(placement2) === auto ? computeAutoPlacement(state, { 2777 placement: placement2, 2778 boundary, 2779 rootBoundary, 2780 padding, 2781 flipVariations, 2782 allowedAutoPlacements 2783 }) : placement2); 2784 }, []); 2785 var referenceRect = state.rects.reference; 2786 var popperRect = state.rects.popper; 2787 var checksMap = /* @__PURE__ */ new Map(); 2788 var makeFallbackChecks = true; 2789 var firstFittingPlacement = placements2[0]; 2790 for (var i = 0; i < placements2.length; i++) { 2791 var placement = placements2[i]; 2792 var _basePlacement = getBasePlacement(placement); 2793 var isStartVariation = getVariation(placement) === start; 2794 var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; 2795 var len = isVertical ? "width" : "height"; 2796 var overflow = detectOverflow(state, { 2797 placement, 2798 boundary, 2799 rootBoundary, 2800 altBoundary, 2801 padding 2802 }); 2803 var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; 2804 if (referenceRect[len] > popperRect[len]) { 2805 mainVariationSide = getOppositePlacement(mainVariationSide); 2806 } 2807 var altVariationSide = getOppositePlacement(mainVariationSide); 2808 var checks = []; 2809 if (checkMainAxis) { 2810 checks.push(overflow[_basePlacement] <= 0); 2811 } 2812 if (checkAltAxis) { 2813 checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); 2814 } 2815 if (checks.every(function(check) { 2816 return check; 2817 })) { 2818 firstFittingPlacement = placement; 2819 makeFallbackChecks = false;
vendor: 9,128 bytes, lines 2820-2990
2820 break; 2821 } 2822 checksMap.set(placement, checks); 2823 } 2824 if (makeFallbackChecks) { 2825 var numberOfChecks = flipVariations ? 3 : 1; 2826 var _loop = function _loop2(_i2) { 2827 var fittingPlacement = placements2.find(function(placement2) { 2828 var checks2 = checksMap.get(placement2); 2829 if (checks2) { 2830 return checks2.slice(0, _i2).every(function(check) { 2831 return check; 2832 }); 2833 } 2834 }); 2835 if (fittingPlacement) { 2836 firstFittingPlacement = fittingPlacement; 2837 return "break"; 2838 } 2839 }; 2840 for (var _i = numberOfChecks; _i > 0; _i--) { 2841 var _ret = _loop(_i); 2842 if (_ret === "break") break; 2843 } 2844 } 2845 if (state.placement !== firstFittingPlacement) { 2846 state.modifiersData[name]._skip = true; 2847 state.placement = firstFittingPlacement; 2848 state.reset = true; 2849 } 2850 } 2851 var flip$1 = { 2852 name: "flip", 2853 enabled: true, 2854 phase: "main", 2855 fn: flip, 2856 requiresIfExists: ["offset"], 2857 data: { 2858 _skip: false 2859 } 2860 }; 2861 function getAltAxis(axis) { 2862 return axis === "x" ? "y" : "x"; 2863 } 2864 function within(min$1, value, max$1) { 2865 return max(min$1, min(value, max$1)); 2866 } 2867 function withinMaxClamp(min2, value, max2) { 2868 var v = within(min2, value, max2); 2869 return v > max2 ? max2 : v; 2870 } 2871 function preventOverflow(_ref) { 2872 var state = _ref.state, options = _ref.options, name = _ref.name; 2873 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; 2874 var overflow = detectOverflow(state, { 2875 boundary, 2876 rootBoundary, 2877 padding, 2878 altBoundary 2879 }); 2880 var basePlacement = getBasePlacement(state.placement); 2881 var variation = getVariation(state.placement); 2882 var isBasePlacement = !variation; 2883 var mainAxis = getMainAxisFromPlacement(basePlacement); 2884 var altAxis = getAltAxis(mainAxis); 2885 var popperOffsets2 = state.modifiersData.popperOffsets; 2886 var referenceRect = state.rects.reference; 2887 var popperRect = state.rects.popper; 2888 var tetherOffsetValue = typeof tetherOffset === "function" ? tetherOffset(Object.assign({}, state.rects, { 2889 placement: state.placement 2890 })) : tetherOffset; 2891 var normalizedTetherOffsetValue = typeof tetherOffsetValue === "number" ? { 2892 mainAxis: tetherOffsetValue, 2893 altAxis: tetherOffsetValue 2894 } : Object.assign({ 2895 mainAxis: 0, 2896 altAxis: 0 2897 }, tetherOffsetValue); 2898 var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; 2899 var data = { 2900 x: 0, 2901 y: 0 2902 }; 2903 if (!popperOffsets2) { 2904 return; 2905 } 2906 if (checkMainAxis) { 2907 var _offsetModifierState$; 2908 var mainSide = mainAxis === "y" ? top : left; 2909 var altSide = mainAxis === "y" ? bottom : right; 2910 var len = mainAxis === "y" ? "height" : "width"; 2911 var offset2 = popperOffsets2[mainAxis]; 2912 var min$1 = offset2 + overflow[mainSide]; 2913 var max$1 = offset2 - overflow[altSide]; 2914 var additive = tether ? -popperRect[len] / 2 : 0; 2915 var minLen = variation === start ? referenceRect[len] : popperRect[len]; 2916 var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; 2917 var arrowElement = state.elements.arrow; 2918 var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { 2919 width: 0, 2920 height: 0 2921 }; 2922 var arrowPaddingObject = state.modifiersData["arrow#persistent"] ? state.modifiersData["arrow#persistent"].padding : getFreshSideObject(); 2923 var arrowPaddingMin = arrowPaddingObject[mainSide]; 2924 var arrowPaddingMax = arrowPaddingObject[altSide]; 2925 var arrowLen = within(0, referenceRect[len], arrowRect[len]); 2926 var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; 2927 var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; 2928 var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); 2929 var clientOffset = arrowOffsetParent ? mainAxis === "y" ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; 2930 var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; 2931 var tetherMin = offset2 + minOffset - offsetModifierValue - clientOffset; 2932 var tetherMax = offset2 + maxOffset - offsetModifierValue; 2933 var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset2, tether ? max(max$1, tetherMax) : max$1); 2934 popperOffsets2[mainAxis] = preventedOffset; 2935 data[mainAxis] = preventedOffset - offset2; 2936 } 2937 if (checkAltAxis) { 2938 var _offsetModifierState$2; 2939 var _mainSide = mainAxis === "x" ? top : left; 2940 var _altSide = mainAxis === "x" ? bottom : right; 2941 var _offset = popperOffsets2[altAxis]; 2942 var _len = altAxis === "y" ? "height" : "width"; 2943 var _min = _offset + overflow[_mainSide]; 2944 var _max = _offset - overflow[_altSide]; 2945 var isOriginSide = [top, left].indexOf(basePlacement) !== -1; 2946 var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; 2947 var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; 2948 var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; 2949 var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); 2950 popperOffsets2[altAxis] = _preventedOffset; 2951 data[altAxis] = _preventedOffset - _offset; 2952 } 2953 state.modifiersData[name] = data; 2954 } 2955 var preventOverflow$1 = { 2956 name: "preventOverflow", 2957 enabled: true, 2958 phase: "main", 2959 fn: preventOverflow, 2960 requiresIfExists: ["offset"] 2961 }; 2962 var toPaddingObject = function toPaddingObject2(padding, state) { 2963 padding = typeof padding === "function" ? padding(Object.assign({}, state.rects, { 2964 placement: state.placement 2965 })) : padding; 2966 return mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements)); 2967 }; 2968 function arrow(_ref) { 2969 var _state$modifiersData$; 2970 var state = _ref.state, name = _ref.name, options = _ref.options; 2971 var arrowElement = state.elements.arrow; 2972 var popperOffsets2 = state.modifiersData.popperOffsets; 2973 var basePlacement = getBasePlacement(state.placement); 2974 var axis = getMainAxisFromPlacement(basePlacement); 2975 var isVertical = [left, right].indexOf(basePlacement) >= 0; 2976 var len = isVertical ? "height" : "width"; 2977 if (!arrowElement || !popperOffsets2) { 2978 return; 2979 } 2980 var paddingObject = toPaddingObject(options.padding, state); 2981 var arrowRect = getLayoutRect(arrowElement); 2982 var minProp = axis === "y" ? top : left; 2983 var maxProp = axis === "y" ? bottom : right; 2984 var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets2[axis] - state.rects.popper[len]; 2985 var startDiff = popperOffsets2[axis] - state.rects.reference[axis]; 2986 var arrowOffsetParent = getOffsetParent(arrowElement); 2987 var clientSize = arrowOffsetParent ? axis === "y" ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; 2988 var centerToReference = endDiff / 2 - startDiff / 2; 2989 var min2 = paddingObject[minProp]; 2990 var max2 = clientSize - arrowRect[len] - paddingObject[maxPro
vendor: 5,000 bytes, lines 2990-3111
2990p]; 2991 var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; 2992 var offset2 = within(min2, center, max2); 2993 var axisProp = axis; 2994 state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset2, _state$modifiersData$.centerOffset = offset2 - center, _state$modifiersData$); 2995 } 2996 function effect(_ref2) { 2997 var state = _ref2.state, options = _ref2.options; 2998 var _options$element = options.element, arrowElement = _options$element === void 0 ? "[data-popper-arrow]" : _options$element; 2999 if (arrowElement == null) { 3000 return; 3001 } 3002 if (typeof arrowElement === "string") { 3003 arrowElement = state.elements.popper.querySelector(arrowElement); 3004 if (!arrowElement) { 3005 return; 3006 } 3007 } 3008 if (true) { 3009 if (!isHTMLElement(arrowElement)) { 3010 console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', "To use an SVG arrow, wrap it in an HTMLElement that will be used as", "the arrow."].join(" ")); 3011 } 3012 } 3013 if (!contains(state.elements.popper, arrowElement)) { 3014 if (true) { 3015 console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', "element."].join(" ")); 3016 } 3017 return; 3018 } 3019 state.elements.arrow = arrowElement; 3020 } 3021 var arrow$1 = { 3022 name: "arrow", 3023 enabled: true, 3024 phase: "main", 3025 fn: arrow, 3026 effect, 3027 requires: ["popperOffsets"], 3028 requiresIfExists: ["preventOverflow"] 3029 }; 3030 function getSideOffsets(overflow, rect, preventedOffsets) { 3031 if (preventedOffsets === void 0) { 3032 preventedOffsets = { 3033 x: 0, 3034 y: 0 3035 }; 3036 } 3037 return { 3038 top: overflow.top - rect.height - preventedOffsets.y, 3039 right: overflow.right - rect.width + preventedOffsets.x, 3040 bottom: overflow.bottom - rect.height + preventedOffsets.y, 3041 left: overflow.left - rect.width - preventedOffsets.x 3042 }; 3043 } 3044 function isAnySideFullyClipped(overflow) { 3045 return [top, right, bottom, left].some(function(side) { 3046 return overflow[side] >= 0; 3047 }); 3048 } 3049 function hide(_ref) { 3050 var state = _ref.state, name = _ref.name; 3051 var referenceRect = state.rects.reference; 3052 var popperRect = state.rects.popper; 3053 var preventedOffsets = state.modifiersData.preventOverflow; 3054 var referenceOverflow = detectOverflow(state, { 3055 elementContext: "reference" 3056 }); 3057 var popperAltOverflow = detectOverflow(state, { 3058 altBoundary: true 3059 }); 3060 var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); 3061 var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); 3062 var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); 3063 var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); 3064 state.modifiersData[name] = { 3065 referenceClippingOffsets, 3066 popperEscapeOffsets, 3067 isReferenceHidden, 3068 hasPopperEscaped 3069 }; 3070 state.attributes.popper = Object.assign({}, state.attributes.popper, { 3071 "data-popper-reference-hidden": isReferenceHidden, 3072 "data-popper-escaped": hasPopperEscaped 3073 }); 3074 } 3075 var hide$1 = { 3076 name: "hide", 3077 enabled: true, 3078 phase: "main", 3079 requiresIfExists: ["preventOverflow"], 3080 fn: hide 3081 }; 3082 var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1]; 3083 var createPopper$1 = /* @__PURE__ */ popperGenerator({ 3084 defaultModifiers: defaultModifiers$1 3085 }); 3086 var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1]; 3087 var createPopper2 = /* @__PURE__ */ popperGenerator({ 3088 defaultModifiers 3089 }); 3090 exports.applyStyles = applyStyles$1; 3091 exports.arrow = arrow$1; 3092 exports.computeStyles = computeStyles$1; 3093 exports.createPopper = createPopper2; 3094 exports.createPopperLite = createPopper$1; 3095 exports.defaultModifiers = defaultModifiers; 3096 exports.detectOverflow = detectOverflow; 3097 exports.eventListeners = eventListeners; 3098 exports.flip = flip$1; 3099 exports.hide = hide$1; 3100 exports.offset = offset$1; 3101 exports.popperGenerator = popperGenerator; 3102 exports.popperOffsets = popperOffsets$1; 3103 exports.preventOverflow = preventOverflow$1; 3104 } 3105 }); 3106 3107 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/dom/data.js 3108 var elementMap = /* @__PURE__ */ new Map(); 3109 var data_default = { 3110 set(element, key, instance) { 3111 if (!elementMap.has(element)) {
3112 elementMap.set(element, /* @__PURE__ */ new Map()); 3113 } 3114 const instanceMap = elementMap.get(element); 3115 if (!instanceMap.has(key) && instanceMap.size !== 0) { 3116 console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); 3117 return; 3118 } 3119 instanceMap.set(key, instance); 3120 }, 3121 get(element, key) { 3122 if (elementMap.has(element)) { 3123 return elementMap.get(element).get(key) || null; 3124 } 3125 return null; 3126 }, 3127 remove(element, key) { 3128 if (!elementMap.has(element)) { 3129 return; 3130 } 3131 const instanceMap = elementMap.get(element); 3132 instanceMap.delete(key); 3133 if (instanceMap.size === 0) { 3134 elementMap.delete(element); 3135 } 3136 } 3137 }; 3138 3139 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/util/index.js 3140 var MILLISECONDS_MULTIPLIER = 1e3; 3141 var TRANSITION_END = "transitionend"; 3142 var parseSelector = (selector) => { 3143 if (selector && window.CSS && window.CSS.escape) { 3144 selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`); 3145 } 3146 return selector; 3147 }; 3148 var toType = (object) => { 3149 if (object === null || object === void 0) { 3150 return `${object}`; 3151 } 3152 return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase(); 3153 }; 3154 var getTransitionDurationFromElement = (element) => { 3155 if (!element) { 3156 return 0; 3157 } 3158 let { transitionDuration, transitionDelay } = window.getComputedStyle(element); 3159 const floatTransitionDuration = Number.parseFloat(transitionDuration); 3160 const floatTransitionDelay = Number.parseFloat(transitionDelay); 3161 if (!floatTransitionDuration && !floatTransitionDelay) { 3162 return 0; 3163 } 3164 transitionDuration = transitionDuration.split(",")[0]; 3165 transitionDelay = transitionDelay.split(",")[0]; 3166 return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 3167 }; 3168 var triggerTransitionEnd = (element) => { 3169 element.dispatchEvent(new Event(TRANSITION_END)); 3170 }; 3171 var isElement = (object) => { 3172 if (!object || typeof object !== "object") { 3173 return false; 3174 } 3175 if (typeof object.jquery !== "undefined") { 3176 object = object[0]; 3177 } 3178 return typeof object.nodeType !== "undefined"; 3179 }; 3180 var getElement = (object) => { 3181 if (isElement(object)) { 3182 return object.jquery ? object[0] : object; 3183 } 3184 if (typeof object === "string" && object.length > 0) { 3185 return document.querySelector(parseSelector(object)); 3186 } 3187 return null; 3188 }; 3189 var isVisible = (element) => { 3190 if (!isElement(element) || element.getClientRects().length === 0) { 3191 return false; 3192 } 3193 const elementIsVisible = getComputedStyle(element).getPropertyValue("visibility") === "visible"; 3194 const closedDetails = element.closest("details:not([open])"); 3195 if (!closedDetails) { 3196 return elementIsVisible; 3197 } 3198 if (closedDetails !== element) { 3199 const summary = element.closest("summary"); 3200 if (summary && summary.parentNode !== closedDetails) { 3201 return false; 3202 } 3203 if (summary === null) { 3204 return false; 3205 } 3206 } 3207 return elementIsVisible; 3208 }; 3209 var isDisabled = (element) => { 3210 if (!element || element.nodeType !== Node.ELEMENT_NODE) { 3211 return true; 3212 } 3213 if (element.classList.contains("disabled")) { 3214 return true; 3215 } 3216 if (typeof element.disabled !== "undefined") { 3217 return element.disabled; 3218 } 3219 return element.hasAttribute("disabled") && element.getAttribute("disabled") !== "false"; 3220 }; 3221 var noop = () => { 3222 }; 3223 var reflow = (element) => { 3224 element.offsetHeight; 3225 }; 3226 var getjQuery = () => { 3227 if (window.jQuery && !document.body.hasAttribute("data-bs-no-jquery")) { 3228 return window.jQuery; 3229 } 3230 return null; 3231 }; 3232 var DOMContentLoadedCallbacks = []; 3233 var onDOMContentLoaded = (callback) => { 3234 if (document.readyState === "loading") { 3235 if (!DOMContentLoadedCallbacks.length) { 3236 document.addEventListener("DOMContentLoaded", () => { 3237 for (const callback2 of DOMContentLoadedCallbacks) { 3238 callback2(); 3239 } 3240 }); 3241 } 3242 DOMContentLoadedCallbacks.push(callback); 3243 } else { 3244 callback(); 3245 } 3246 }; 3247 var isRTL = () => document.documentElement.dir === "rtl"; 3248 var defineJQueryPlugin = (plugin) => { 3249 onDOMContentLoaded(() => { 3250 const $ = getjQuery(); 3251 if ($) { 3252 const name = plugin.NAME; 3253 const JQUERY_NO_CONFLICT = $.fn[name]; 3254 $.fn[name] = plugin.jQueryInterface; 3255 $.fn[name].Constructor = plugin; 3256 $.fn[name].noConflict = () => { 3257 $.fn[name] = JQUERY_NO_CONFLICT; 3258 return plugin.jQueryInterface; 3259 }; 3260 } 3261 }); 3262 }; 3263 var execute = (possibleCallback, args = [], defaultValue = possibleCallback) => { 3264 return typeof possibleCallback === "function" ? possibleCallback(...args) : defaultValue; 3265 }; 3266 var executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { 3267 if (!waitForTransition) { 3268 execute(callback); 3269 return; 3270 } 3271 const durationPadding = 5; 3272 const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
vendor: 13,102 bytes, lines 3273-3653
3273 let called = false; 3274 const handler = ({ target }) => { 3275 if (target !== transitionElement) { 3276 return; 3277 } 3278 called = true; 3279 transitionElement.removeEventListener(TRANSITION_END, handler); 3280 execute(callback); 3281 }; 3282 transitionElement.addEventListener(TRANSITION_END, handler); 3283 setTimeout(() => { 3284 if (!called) { 3285 triggerTransitionEnd(transitionElement); 3286 } 3287 }, emulatedDuration); 3288 }; 3289 var getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { 3290 const listLength = list.length; 3291 let index = list.indexOf(activeElement); 3292 if (index === -1) { 3293 return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]; 3294 } 3295 index += shouldGetNext ? 1 : -1; 3296 if (isCycleAllowed) { 3297 index = (index + listLength) % listLength; 3298 } 3299 return list[Math.max(0, Math.min(index, listLength - 1))]; 3300 }; 3301 3302 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/dom/event-handler.js 3303 var namespaceRegex = /[^.]*(?=\..*)\.|.*/; 3304 var stripNameRegex = /\..*/; 3305 var stripUidRegex = /::\d+$/; 3306 var eventRegistry = {}; 3307 var uidEvent = 1; 3308 var customEvents = { 3309 mouseenter: "mouseover", 3310 mouseleave: "mouseout" 3311 }; 3312 var nativeEvents = /* @__PURE__ */ new Set([ 3313 "click", 3314 "dblclick", 3315 "mouseup", 3316 "mousedown", 3317 "contextmenu", 3318 "mousewheel", 3319 "DOMMouseScroll", 3320 "mouseover", 3321 "mouseout", 3322 "mousemove", 3323 "selectstart", 3324 "selectend", 3325 "keydown", 3326 "keypress", 3327 "keyup", 3328 "orientationchange", 3329 "touchstart", 3330 "touchmove", 3331 "touchend", 3332 "touchcancel", 3333 "pointerdown", 3334 "pointermove", 3335 "pointerup", 3336 "pointerleave", 3337 "pointercancel", 3338 "gesturestart", 3339 "gesturechange", 3340 "gestureend", 3341 "focus", 3342 "blur", 3343 "change", 3344 "reset", 3345 "select", 3346 "submit", 3347 "focusin", 3348 "focusout", 3349 "load", 3350 "unload", 3351 "beforeunload", 3352 "resize", 3353 "move", 3354 "DOMContentLoaded", 3355 "readystatechange", 3356 "error", 3357 "abort", 3358 "scroll" 3359 ]); 3360 function makeEventUid(element, uid) { 3361 return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; 3362 } 3363 function getElementEvents(element) { 3364 const uid = makeEventUid(element); 3365 element.uidEvent = uid; 3366 eventRegistry[uid] = eventRegistry[uid] || {}; 3367 return eventRegistry[uid]; 3368 } 3369 function bootstrapHandler(element, fn) { 3370 return function handler(event) { 3371 hydrateObj(event, { delegateTarget: element }); 3372 if (handler.oneOff) { 3373 EventHandler.off(element, event.type, fn); 3374 } 3375 return fn.apply(element, [event]); 3376 }; 3377 } 3378 function bootstrapDelegationHandler(element, selector, fn) { 3379 return function handler(event) { 3380 const domElements = element.querySelectorAll(selector); 3381 for (let { target } = event; target && target !== this; target = target.parentNode) { 3382 for (const domElement of domElements) { 3383 if (domElement !== target) { 3384 continue; 3385 } 3386 hydrateObj(event, { delegateTarget: target }); 3387 if (handler.oneOff) { 3388 EventHandler.off(element, event.type, selector, fn); 3389 } 3390 return fn.apply(target, [event]); 3391 } 3392 } 3393 }; 3394 } 3395 function findHandler(events, callable, delegationSelector = null) { 3396 return Object.values(events).find((event) => event.callable === callable && event.delegationSelector === delegationSelector); 3397 } 3398 function normalizeParameters(originalTypeEvent, handler, delegationFunction) { 3399 const isDelegated = typeof handler === "string"; 3400 const callable = isDelegated ? delegationFunction : handler || delegationFunction; 3401 let typeEvent = getTypeEvent(originalTypeEvent); 3402 if (!nativeEvents.has(typeEvent)) { 3403 typeEvent = originalTypeEvent; 3404 } 3405 return [isDelegated, callable, typeEvent]; 3406 } 3407 function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) { 3408 if (typeof originalTypeEvent !== "string" || !element) { 3409 return; 3410 } 3411 let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); 3412 if (originalTypeEvent in customEvents) { 3413 const wrapFunction = (fn2) => { 3414 return function(event) { 3415 if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) { 3416 return fn2.call(this, event); 3417 } 3418 }; 3419 }; 3420 callable = wrapFunction(callable); 3421 } 3422 const events = getElementEvents(element); 3423 const handlers = events[typeEvent] || (events[typeEvent] = {}); 3424 const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null); 3425 if (previousFunction) { 3426 previousFunction.oneOff = previousFunction.oneOff && oneOff; 3427 return; 3428 } 3429 const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, "")); 3430 const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable); 3431 fn.delegationSelector = isDelegated ? handler : null; 3432 fn.callable = callable; 3433 fn.oneOff = oneOff; 3434 fn.uidEvent = uid; 3435 handlers[uid] = fn; 3436 element.addEventListener(typeEvent, fn, isDelegated); 3437 } 3438 function removeHandler(element, events, typeEvent, handler, delegationSelector) { 3439 const fn = findHandler(events[typeEvent], handler, delegationSelector); 3440 if (!fn) { 3441 return; 3442 } 3443 element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)); 3444 delete events[typeEvent][fn.uidEvent]; 3445 } 3446 function removeNamespacedHandlers(element, events, typeEvent, namespace) { 3447 const storeElementEvent = events[typeEvent] || {}; 3448 for (const [handlerKey, event] of Object.entries(storeElementEvent)) { 3449 if (handlerKey.includes(namespace)) { 3450 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 3451 } 3452 } 3453 } 3454 function getTypeEvent(event) { 3455 event = event.replace(stripNameRegex, ""); 3456 return customEvents[event] || event; 3457 } 3458 var EventHandler = { 3459 on(element, event, handler, delegationFunction) { 3460 addHandler(element, event, handler, delegationFunction, false); 3461 }, 3462 one(element, event, handler, delegationFunction) { 3463 addHandler(element, event, handler, delegationFunction, true); 3464 }, 3465 off(element, originalTypeEvent, handler, delegationFunction) { 3466 if (typeof originalTypeEvent !== "string" || !element) { 3467 return; 3468 } 3469 const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); 3470 const inNamespace = typeEvent !== originalTypeEvent; 3471 const events = getElementEvents(element); 3472 const storeElementEvent = events[typeEvent] || {}; 3473 const isNamespace = originalTypeEvent.startsWith("."); 3474 if (typeof callable !== "undefined") { 3475 if (!Object.keys(storeElementEvent).length) { 3476 return; 3477 } 3478 removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null); 3479 return; 3480 } 3481 if (isNamespace) { 3482 for (const elementEvent of Object.keys(events)) { 3483 removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); 3484 } 3485 } 3486 for (const [keyHandlers, event] of Object.entries(storeElementEvent)) { 3487 const handlerKey = keyHandlers.replace(stripUidRegex, ""); 3488 if (!inNamespace || originalTypeEvent.includes(handlerKey)) { 3489 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 3490 } 3491 } 3492 }, 3493 trigger(element, event, args) { 3494 if (typeof event !== "string" || !element) { 3495 return null; 3496 } 3497 const $ = getjQuery(); 3498 const typeEvent = getTypeEvent(event); 3499 const inNamespace = event !== typeEvent; 3500 let jQueryEvent = null; 3501 let bubbles = true; 3502 let nativeDispatch = true; 3503 let defaultPrevented = false; 3504 if (inNamespace && $) { 3505 jQueryEvent = $.Event(event, args); 3506 $(element).trigger(jQueryEvent); 3507 bubbles = !jQueryEvent.isPropagationStopped(); 3508 nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); 3509 defaultPrevented = jQueryEvent.isDefaultPrevented(); 3510 } 3511 const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args); 3512 if (defaultPrevented) { 3513 evt.preventDefault(); 3514 } 3515 if (nativeDispatch) { 3516 element.dispatchEvent(evt); 3517 } 3518 if (evt.defaultPrevented && jQueryEvent) { 3519 jQueryEvent.preventDefault(); 3520 } 3521 return evt; 3522 } 3523 }; 3524 function hydrateObj(obj, meta = {}) { 3525 for (const [key, value] of Object.entries(meta)) { 3526 try { 3527 obj[key] = value; 3528 } catch (e) { 3529 Object.defineProperty(obj, key, { 3530 configurable: true, 3531 get() { 3532 return value; 3533 } 3534 }); 3535 } 3536 } 3537 return obj; 3538 } 3539 var event_handler_default = EventHandler; 3540 3541 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/dom/manipulator.js 3542 function normalizeData(value) { 3543 if (value === "true") { 3544 return true; 3545 } 3546 if (value === "false") { 3547 return false; 3548 } 3549 if (value === Number(value).toString()) { 3550 return Number(value); 3551 } 3552 if (value === "" || value === "null") { 3553 return null; 3554 } 3555 if (typeof value !== "string") { 3556 return value; 3557 } 3558 try { 3559 return JSON.parse(decodeURIComponent(value)); 3560 } catch (e) { 3561 return value; 3562 } 3563 } 3564 function normalizeDataKey(key) { 3565 return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`); 3566 } 3567 var Manipulator = { 3568 setDataAttribute(element, key, value) { 3569 element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); 3570 }, 3571 removeDataAttribute(element, key) { 3572 element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); 3573 }, 3574 getDataAttributes(element) { 3575 if (!element) { 3576 return {}; 3577 } 3578 const attributes = {}; 3579 const bsKeys = Object.keys(element.dataset).filter((key) => key.startsWith("bs") && !key.startsWith("bsConfig")); 3580 for (const key of bsKeys) { 3581 let pureKey = key.replace(/^bs/, ""); 3582 pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); 3583 attributes[pureKey] = normalizeData(element.dataset[key]); 3584 } 3585 return attributes; 3586 }, 3587 getDataAttribute(element, key) { 3588 return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); 3589 } 3590 }; 3591 var manipulator_default = Manipulator; 3592 3593 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/util/config.js 3594 var Config = class { 3595 // Getters 3596 static get Default() { 3597 return {}; 3598 } 3599 static get DefaultType() { 3600 return {}; 3601 } 3602 static get NAME() { 3603 throw new Error('You have to implement the static method "NAME", for each component!'); 3604 } 3605 _getConfig(config) { 3606 config = this._mergeConfigObj(config); 3607 config = this._configAfterMerge(config); 3608 this._typeCheckConfig(config); 3609 return config; 3610 } 3611 _configAfterMerge(config) { 3612 return config; 3613 } 3614 _mergeConfigObj(config, element) { 3615 const jsonConfig = isElement(element) ? manipulator_default.getDataAttribute(element, "config") : {}; 3616 return { 3617 ...this.constructor.Default, 3618 ...typeof jsonConfig === "object" ? jsonConfig : {}, 3619 ...isElement(element) ? manipulator_default.getDataAttributes(element) : {}, 3620 ...typeof config === "object" ? config : {} 3621 }; 3622 } 3623 _typeCheckConfig(config, configTypes = this.constructor.DefaultType) { 3624 for (const [property, expectedTypes] of Object.entries(configTypes)) { 3625 const value = config[property]; 3626 const valueType = isElement(value) ? "element" : toType(value); 3627 if (!new RegExp(expectedTypes).test(valueType)) { 3628 throw new TypeError( 3629 `${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".` 3630 ); 3631 } 3632 } 3633 } 3634 }; 3635 var config_default = Config; 3636 3637 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/base-component.js 3638 var VERSION = "5.3.2"; 3639 var BaseComponent = class extends config_default { 3640 constructor(element, config) { 3641 super(); 3642 element = getElement(element); 3643 if (!element) { 3644 return; 3645 } 3646 this._element = element; 3647 this._config = this._getConfig(config); 3648 data_default.set(this._element, this.constructor.DATA_KEY, this); 3649 } 3650 // Public 3651 dispose() { 3652 data_default.remove(this._element, this.constructor.DATA_KEY); 3653 event_handler_default.off(this._element, this.constructor.EVENT_KEY);
3654 for (const propertyName of Object.getOwnPropertyNames(this)) { 3655 this[propertyName] = null; 3656 } 3657 } 3658 _queueCallback(callback, element, isAnimated = true) { 3659 executeAfterTransition(callback, element, isAnimated); 3660 } 3661 _getConfig(config) { 3662 config = this._mergeConfigObj(config, this._element); 3663 config = this._configAfterMerge(config); 3664 this._typeCheckConfig(config); 3665 return config; 3666 } 3667 // Static 3668 static getInstance(element) { 3669 return data_default.get(getElement(element), this.DATA_KEY); 3670 } 3671 static getOrCreateInstance(element, config = {}) { 3672 return this.getInstance(element) || new this(element, typeof config === "object" ? config : null); 3673 } 3674 static get VERSION() { 3675 return VERSION; 3676 } 3677 static get DATA_KEY() { 3678 return `bs.${this.NAME}`; 3679 } 3680 static get EVENT_KEY() { 3681 return `.${this.DATA_KEY}`; 3682 } 3683 static eventName(name) { 3684 return `${name}${this.EVENT_KEY}`; 3685 } 3686 }; 3687 var base_component_default = BaseComponent; 3688 3689 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/dom/selector-engine.js 3690 var getSelector = (element) => { 3691 let selector = element.getAttribute("data-bs-target"); 3692 if (!selector || selector === "#") { 3693 let hrefAttribute = element.getAttribute("href"); 3694 if (!hrefAttribute || !hrefAttribute.includes("#") && !hrefAttribute.startsWith(".")) { 3695 return null; 3696 } 3697 if (hrefAttribute.includes("#") && !hrefAttribute.startsWith("#")) { 3698 hrefAttribute = `#${hrefAttribute.split("#")[1]}`; 3699 } 3700 selector = hrefAttribute && hrefAttribute !== "#" ? parseSelector(hrefAttribute.trim()) : null; 3701 } 3702 return selector; 3703 }; 3704 var SelectorEngine = { 3705 find(selector, element = document.documentElement) { 3706 return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); 3707 }, 3708 findOne(selector, element = document.documentElement) { 3709 return Element.prototype.querySelector.call(element, selector); 3710 }, 3711 children(element, selector) { 3712 return [].concat(...element.children).filter((child) => child.matches(selector)); 3713 }, 3714 parents(element, selector) { 3715 const parents = []; 3716 let ancestor = element.parentNode.closest(selector); 3717 while (ancestor) { 3718 parents.push(ancestor); 3719 ancestor = ancestor.parentNode.closest(selector); 3720 } 3721 return parents; 3722 }, 3723 prev(element, selector) { 3724 let previous = element.previousElementSibling; 3725 while (previous) { 3726 if (previous.matches(selector)) { 3727 return [previous]; 3728 } 3729 previous = previous.previousElementSibling; 3730 } 3731 return []; 3732 }, 3733 // TODO: this is now unused; remove later along with prev() 3734 next(element, selector) { 3735 let next = element.nextElementSibling; 3736 while (next) { 3737 if (next.matches(selector)) { 3738 return [next]; 3739 } 3740 next = next.nextElementSibling; 3741 } 3742 return []; 3743 }, 3744 focusableChildren(element) { 3745 const focusables = [ 3746 "a", 3747 "button", 3748 "input", 3749 "textarea", 3750 "select", 3751 "details", 3752 "[tabindex]", 3753 '[contenteditable="true"]' 3754 ].map((selector) => `${selector}:not([tabindex^="-"])`).join(","); 3755 return this.find(focusables, element).filter((el) => !isDisabled(el) && isVisible(el)); 3756 }, 3757 getSelectorFromElement(element) { 3758 const selector = getSelector(element); 3759 if (selector) { 3760 return SelectorEngine.findOne(selector) ? selector : null; 3761 } 3762 return null; 3763 }, 3764 getElementFromSelector(element) { 3765 const selector = getSelector(element); 3766 return selector ? SelectorEngine.findOne(selector) : null; 3767 }, 3768 getMultipleElementsFromSelector(element) { 3769 const selector = getSelector(element); 3770 return selector ? SelectorEngine.find(selector) : []; 3771 } 3772 }; 3773 var selector_engine_default = SelectorEngine; 3774 3775 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/collapse.js 3776 var NAME = "collapse"; 3777 var DATA_KEY = "bs.collapse"; 3778 var EVENT_KEY = `.${DATA_KEY}`; 3779 var DATA_API_KEY = ".data-api"; 3780 var EVENT_SHOW = `show${EVENT_KEY}`; 3781 var EVENT_SHOWN = `shown${EVENT_KEY}`; 3782 var EVENT_HIDE = `hide${EVENT_KEY}`; 3783 var EVENT_HIDDEN = `hidden${EVENT_KEY}`; 3784 var EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`; 3785 var CLASS_NAME_SHOW = "show"; 3786 var CLASS_NAME_COLLAPSE = "collapse"; 3787 var CLASS_NAME_COLLAPSING = "collapsing"; 3788 var CLASS_NAME_COLLAPSED = "collapsed"; 3789 var CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`; 3790 var CLASS_NAME_HORIZONTAL = "collapse-horizontal"; 3791 var WIDTH = "width"; 3792 var HEIGHT = "height"; 3793 var SELECTOR_ACTIVES = ".collapse.show, .collapse.collapsing"; 3794 var SELECTOR_DATA_TOGGLE = '[data-bs-toggle="collapse"]'; 3795 var Default = { 3796 parent: null, 3797 toggle: true 3798 }; 3799 var DefaultType = { 3800 parent: "(null|element)", 3801 toggle: "boolean" 3802 }; 3803 var Collapse = class _Collapse extends base_component_default { 3804 constructor(element, config) { 3805 super(element, config); 3806 this._isTransitioning = false;
vendor: 5,359 bytes, lines 3807-3948
3807 this._triggerArray = []; 3808 const toggleList = selector_engine_default.find(SELECTOR_DATA_TOGGLE); 3809 for (const elem of toggleList) { 3810 const selector = selector_engine_default.getSelectorFromElement(elem); 3811 const filterElement = selector_engine_default.find(selector).filter((foundElement) => foundElement === this._element); 3812 if (selector !== null && filterElement.length) { 3813 this._triggerArray.push(elem); 3814 } 3815 } 3816 this._initializeChildren(); 3817 if (!this._config.parent) { 3818 this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); 3819 } 3820 if (this._config.toggle) { 3821 this.toggle(); 3822 } 3823 } 3824 // Getters 3825 static get Default() { 3826 return Default; 3827 } 3828 static get DefaultType() { 3829 return DefaultType; 3830 } 3831 static get NAME() { 3832 return NAME; 3833 } 3834 // Public 3835 toggle() { 3836 if (this._isShown()) { 3837 this.hide(); 3838 } else { 3839 this.show(); 3840 } 3841 } 3842 show() { 3843 if (this._isTransitioning || this._isShown()) { 3844 return; 3845 } 3846 let activeChildren = []; 3847 if (this._config.parent) { 3848 activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter((element) => element !== this._element).map((element) => _Collapse.getOrCreateInstance(element, { toggle: false })); 3849 } 3850 if (activeChildren.length && activeChildren[0]._isTransitioning) { 3851 return; 3852 } 3853 const startEvent = event_handler_default.trigger(this._element, EVENT_SHOW); 3854 if (startEvent.defaultPrevented) { 3855 return; 3856 } 3857 for (const activeInstance of activeChildren) { 3858 activeInstance.hide(); 3859 } 3860 const dimension = this._getDimension(); 3861 this._element.classList.remove(CLASS_NAME_COLLAPSE); 3862 this._element.classList.add(CLASS_NAME_COLLAPSING); 3863 this._element.style[dimension] = 0; 3864 this._addAriaAndCollapsedClass(this._triggerArray, true); 3865 this._isTransitioning = true; 3866 const complete = () => { 3867 this._isTransitioning = false; 3868 this._element.classList.remove(CLASS_NAME_COLLAPSING); 3869 this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW); 3870 this._element.style[dimension] = ""; 3871 event_handler_default.trigger(this._element, EVENT_SHOWN); 3872 }; 3873 const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 3874 const scrollSize = `scroll${capitalizedDimension}`; 3875 this._queueCallback(complete, this._element, true); 3876 this._element.style[dimension] = `${this._element[scrollSize]}px`; 3877 } 3878 hide() { 3879 if (this._isTransitioning || !this._isShown()) { 3880 return; 3881 } 3882 const startEvent = event_handler_default.trigger(this._element, EVENT_HIDE); 3883 if (startEvent.defaultPrevented) { 3884 return; 3885 } 3886 const dimension = this._getDimension(); 3887 this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; 3888 reflow(this._element); 3889 this._element.classList.add(CLASS_NAME_COLLAPSING); 3890 this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW); 3891 for (const trigger of this._triggerArray) { 3892 const element = selector_engine_default.getElementFromSelector(trigger); 3893 if (element && !this._isShown(element)) { 3894 this._addAriaAndCollapsedClass([trigger], false); 3895 } 3896 } 3897 this._isTransitioning = true; 3898 const complete = () => { 3899 this._isTransitioning = false; 3900 this._element.classList.remove(CLASS_NAME_COLLAPSING); 3901 this._element.classList.add(CLASS_NAME_COLLAPSE); 3902 event_handler_default.trigger(this._element, EVENT_HIDDEN); 3903 }; 3904 this._element.style[dimension] = ""; 3905 this._queueCallback(complete, this._element, true); 3906 } 3907 _isShown(element = this._element) { 3908 return element.classList.contains(CLASS_NAME_SHOW); 3909 } 3910 // Private 3911 _configAfterMerge(config) { 3912 config.toggle = Boolean(config.toggle); 3913 config.parent = getElement(config.parent); 3914 return config; 3915 } 3916 _getDimension() { 3917 return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; 3918 } 3919 _initializeChildren() { 3920 if (!this._config.parent) { 3921 return; 3922 } 3923 const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE); 3924 for (const element of children) { 3925 const selected = selector_engine_default.getElementFromSelector(element); 3926 if (selected) { 3927 this._addAriaAndCollapsedClass([element], this._isShown(selected)); 3928 } 3929 } 3930 } 3931 _getFirstLevelChildren(selector) { 3932 const children = selector_engine_default.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); 3933 return selector_engine_default.find(selector, this._config.parent).filter((element) => !children.includes(element)); 3934 } 3935 _addAriaAndCollapsedClass(triggerArray, isOpen) { 3936 if (!triggerArray.length) { 3937 return; 3938 } 3939 for (const element of triggerArray) { 3940 element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen); 3941 element.setAttribute("aria-expanded", isOpen); 3942 } 3943 } 3944 // Static 3945 static jQueryInterface(config) { 3946 const _config = {}; 3947 if (typeof config === "string" && /show|hide/.test(config)) { 3948 _config.toggle = false;
3949 } 3950 return this.each(function() { 3951 const data = _Collapse.getOrCreateInstance(this, _config); 3952 if (typeof config === "string") { 3953 if (typeof data[config] === "undefined") { 3954 throw new TypeError(`No method named "${config}"`); 3955 } 3956 data[config](); 3957 } 3958 }); 3959 } 3960 }; 3961 event_handler_default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function(event) { 3962 if (event.target.tagName === "A" || event.delegateTarget && event.delegateTarget.tagName === "A") { 3963 event.preventDefault(); 3964 } 3965 for (const element of selector_engine_default.getMultipleElementsFromSelector(this)) { 3966 Collapse.getOrCreateInstance(element, { toggle: false }).toggle(); 3967 } 3968 }); 3969 defineJQueryPlugin(Collapse); 3970 3971 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/dropdown.js 3972 var Popper = __toESM(require_popper()); 3973 var NAME2 = "dropdown"; 3974 var DATA_KEY2 = "bs.dropdown"; 3975 var EVENT_KEY2 = `.${DATA_KEY2}`; 3976 var DATA_API_KEY2 = ".data-api"; 3977 var ESCAPE_KEY = "Escape"; 3978 var TAB_KEY = "Tab"; 3979 var ARROW_UP_KEY = "ArrowUp"; 3980 var ARROW_DOWN_KEY = "ArrowDown"; 3981 var RIGHT_MOUSE_BUTTON = 2; 3982 var EVENT_HIDE2 = `hide${EVENT_KEY2}`; 3983 var EVENT_HIDDEN2 = `hidden${EVENT_KEY2}`; 3984 var EVENT_SHOW2 = `show${EVENT_KEY2}`; 3985 var EVENT_SHOWN2 = `shown${EVENT_KEY2}`; 3986 var EVENT_CLICK_DATA_API2 = `click${EVENT_KEY2}${DATA_API_KEY2}`; 3987 var EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY2}${DATA_API_KEY2}`; 3988 var EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY2}${DATA_API_KEY2}`; 3989 var CLASS_NAME_SHOW2 = "show"; 3990 var CLASS_NAME_DROPUP = "dropup"; 3991 var CLASS_NAME_DROPEND = "dropend"; 3992 var CLASS_NAME_DROPSTART = "dropstart"; 3993 var CLASS_NAME_DROPUP_CENTER = "dropup-center"; 3994 var CLASS_NAME_DROPDOWN_CENTER = "dropdown-center"; 3995 var SELECTOR_DATA_TOGGLE2 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)'; 3996 var SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE2}.${CLASS_NAME_SHOW2}`; 3997 var SELECTOR_MENU = ".dropdown-menu"; 3998 var SELECTOR_NAVBAR = ".navbar"; 3999 var SELECTOR_NAVBAR_NAV = ".navbar-nav"; 4000 var SELECTOR_VISIBLE_ITEMS = ".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)"; 4001 var PLACEMENT_TOP = isRTL() ? "top-end" : "top-start"; 4002 var PLACEMENT_TOPEND = isRTL() ? "top-start" : "top-end"; 4003 var PLACEMENT_BOTTOM = isRTL() ? "bottom-end" : "bottom-start"; 4004 var PLACEMENT_BOTTOMEND = isRTL() ? "bottom-start" : "bottom-end"; 4005 var PLACEMENT_RIGHT = isRTL() ? "left-start" : "right-start"; 4006 var PLACEMENT_LEFT = isRTL() ? "right-start" : "left-start"; 4007 var PLACEMENT_TOPCENTER = "top"; 4008 var PLACEMENT_BOTTOMCENTER = "bottom"; 4009 var Default2 = { 4010 autoClose: true, 4011 boundary: "clippingParents", 4012 display: "dynamic", 4013 offset: [0, 2], 4014 popperConfig: null, 4015 reference: "toggle" 4016 }; 4017 var DefaultType2 = { 4018 autoClose: "(boolean|string)", 4019 boundary: "(string|element)", 4020 display: "string", 4021 offset: "(array|string|function)", 4022 popperConfig: "(null|object|function)", 4023 reference: "(string|element|object)" 4024 }; 4025 var Dropdown = class _Dropdown extends base_component_default { 4026 constructor(element, config) { 4027 super(element, config); 4028 this._popper = null; 4029 this._parent = this._element.parentNode; 4030 this._menu = selector_engine_default.next(this._element, SELECTOR_MENU)[0] || selector_engine_default.prev(this._element, SELECTOR_MENU)[0] || selector_engine_default.findOne(SELECTOR_MENU, this._parent); 4031 this._inNavbar = this._detectNavbar(); 4032 } 4033 // Getters 4034 static get Default() { 4035 return Default2; 4036 } 4037 static get DefaultType() { 4038 return DefaultType2; 4039 } 4040 static get NAME() { 4041 return NAME2; 4042 } 4043 // Public 4044 toggle() { 4045 return this._isShown() ? this.hide() : this.show(); 4046 } 4047 show() { 4048 if (isDisabled(this._element) || this._isShown()) { 4049 return; 4050 } 4051 const relatedTarget = { 4052 relatedTarget: this._element 4053 }; 4054 const showEvent = event_handler_default.trigger(this._element, EVENT_SHOW2, relatedTarget); 4055 if (showEvent.defaultPrevented) { 4056 return; 4057 } 4058 this._createPopper(); 4059 if ("ontouchstart" in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) { 4060 for (const element of [].concat(...document.body.children)) {
vendor: 4,227 bytes, lines 4061-4175
4061 event_handler_default.on(element, "mouseover", noop); 4062 } 4063 } 4064 this._element.focus(); 4065 this._element.setAttribute("aria-expanded", true); 4066 this._menu.classList.add(CLASS_NAME_SHOW2); 4067 this._element.classList.add(CLASS_NAME_SHOW2); 4068 event_handler_default.trigger(this._element, EVENT_SHOWN2, relatedTarget); 4069 } 4070 hide() { 4071 if (isDisabled(this._element) || !this._isShown()) { 4072 return; 4073 } 4074 const relatedTarget = { 4075 relatedTarget: this._element 4076 }; 4077 this._completeHide(relatedTarget); 4078 } 4079 dispose() { 4080 if (this._popper) { 4081 this._popper.destroy(); 4082 } 4083 super.dispose(); 4084 } 4085 update() { 4086 this._inNavbar = this._detectNavbar(); 4087 if (this._popper) { 4088 this._popper.update(); 4089 } 4090 } 4091 // Private 4092 _completeHide(relatedTarget) { 4093 const hideEvent = event_handler_default.trigger(this._element, EVENT_HIDE2, relatedTarget); 4094 if (hideEvent.defaultPrevented) { 4095 return; 4096 } 4097 if ("ontouchstart" in document.documentElement) { 4098 for (const element of [].concat(...document.body.children)) { 4099 event_handler_default.off(element, "mouseover", noop); 4100 } 4101 } 4102 if (this._popper) { 4103 this._popper.destroy(); 4104 } 4105 this._menu.classList.remove(CLASS_NAME_SHOW2); 4106 this._element.classList.remove(CLASS_NAME_SHOW2); 4107 this._element.setAttribute("aria-expanded", "false"); 4108 manipulator_default.removeDataAttribute(this._menu, "popper"); 4109 event_handler_default.trigger(this._element, EVENT_HIDDEN2, relatedTarget); 4110 } 4111 _getConfig(config) { 4112 config = super._getConfig(config); 4113 if (typeof config.reference === "object" && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== "function") { 4114 throw new TypeError(`${NAME2.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); 4115 } 4116 return config; 4117 } 4118 _createPopper() { 4119 if (typeof Popper === "undefined") { 4120 throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)"); 4121 } 4122 let referenceElement = this._element; 4123 if (this._config.reference === "parent") { 4124 referenceElement = this._parent; 4125 } else if (isElement(this._config.reference)) { 4126 referenceElement = getElement(this._config.reference); 4127 } else if (typeof this._config.reference === "object") { 4128 referenceElement = this._config.reference; 4129 } 4130 const popperConfig = this._getPopperConfig(); 4131 this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig); 4132 } 4133 _isShown() { 4134 return this._menu.classList.contains(CLASS_NAME_SHOW2); 4135 } 4136 _getPlacement() { 4137 const parentDropdown = this._parent; 4138 if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { 4139 return PLACEMENT_RIGHT; 4140 } 4141 if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { 4142 return PLACEMENT_LEFT; 4143 } 4144 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) { 4145 return PLACEMENT_TOPCENTER; 4146 } 4147 if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) { 4148 return PLACEMENT_BOTTOMCENTER; 4149 } 4150 const isEnd = getComputedStyle(this._menu).getPropertyValue("--bs-position").trim() === "end"; 4151 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { 4152 return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP; 4153 } 4154 return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM; 4155 } 4156 _detectNavbar() { 4157 return this._element.closest(SELECTOR_NAVBAR) !== null; 4158 } 4159 _getOffset() { 4160 const { offset } = this._config; 4161 if (typeof offset === "string") { 4162 return offset.split(",").map((value) => Number.parseInt(value, 10)); 4163 } 4164 if (typeof offset === "function") { 4165 return (popperData) => offset(popperData, this._element); 4166 } 4167 return offset; 4168 } 4169 _getPopperConfig() { 4170 const defaultBsPopperConfig = { 4171 placement: this._getPlacement(), 4172 modifiers: [ 4173 { 4174 name: "preventOverflow", 4175 options: {
vendor: 2,541 bytes, lines 4176-4244
4176 boundary: this._config.boundary 4177 } 4178 }, 4179 { 4180 name: "offset", 4181 options: { 4182 offset: this._getOffset() 4183 } 4184 } 4185 ] 4186 }; 4187 if (this._inNavbar || this._config.display === "static") { 4188 manipulator_default.setDataAttribute(this._menu, "popper", "static"); 4189 defaultBsPopperConfig.modifiers = [{ 4190 name: "applyStyles", 4191 enabled: false 4192 }]; 4193 } 4194 return { 4195 ...defaultBsPopperConfig, 4196 ...execute(this._config.popperConfig, [defaultBsPopperConfig]) 4197 }; 4198 } 4199 _selectMenuItem({ key, target }) { 4200 const items = selector_engine_default.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter((element) => isVisible(element)); 4201 if (!items.length) { 4202 return; 4203 } 4204 getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus(); 4205 } 4206 // Static 4207 static jQueryInterface(config) { 4208 return this.each(function() { 4209 const data = _Dropdown.getOrCreateInstance(this, config); 4210 if (typeof config !== "string") { 4211 return; 4212 } 4213 if (typeof data[config] === "undefined") { 4214 throw new TypeError(`No method named "${config}"`); 4215 } 4216 data[config](); 4217 }); 4218 } 4219 static clearMenus(event) { 4220 if (event.button === RIGHT_MOUSE_BUTTON || event.type === "keyup" && event.key !== TAB_KEY) { 4221 return; 4222 } 4223 const openToggles = selector_engine_default.find(SELECTOR_DATA_TOGGLE_SHOWN); 4224 for (const toggle of openToggles) { 4225 const context = _Dropdown.getInstance(toggle); 4226 if (!context || context._config.autoClose === false) { 4227 continue; 4228 } 4229 const composedPath = event.composedPath(); 4230 const isMenuTarget = composedPath.includes(context._menu); 4231 if (composedPath.includes(context._element) || context._config.autoClose === "inside" && !isMenuTarget || context._config.autoClose === "outside" && isMenuTarget) { 4232 continue; 4233 } 4234 if (context._menu.contains(event.target) && (event.type === "keyup" && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) { 4235 continue; 4236 } 4237 const relatedTarget = { relatedTarget: context._element }; 4238 if (event.type === "click") { 4239 relatedTarget.clickEvent = event; 4240 } 4241 context._completeHide(relatedTarget); 4242 } 4243 } 4244 static dataApiKeydownHandler(event) {
vendor: 6,173 bytes, lines 4245-4425
4245 const isInput = /input|textarea/i.test(event.target.tagName); 4246 const isEscapeEvent = event.key === ESCAPE_KEY; 4247 const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key); 4248 if (!isUpOrDownEvent && !isEscapeEvent) { 4249 return; 4250 } 4251 if (isInput && !isEscapeEvent) { 4252 return; 4253 } 4254 event.preventDefault(); 4255 const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE2) ? this : selector_engine_default.prev(this, SELECTOR_DATA_TOGGLE2)[0] || selector_engine_default.next(this, SELECTOR_DATA_TOGGLE2)[0] || selector_engine_default.findOne(SELECTOR_DATA_TOGGLE2, event.delegateTarget.parentNode); 4256 const instance = _Dropdown.getOrCreateInstance(getToggleButton); 4257 if (isUpOrDownEvent) { 4258 event.stopPropagation(); 4259 instance.show(); 4260 instance._selectMenuItem(event); 4261 return; 4262 } 4263 if (instance._isShown()) { 4264 event.stopPropagation(); 4265 instance.hide(); 4266 getToggleButton.focus(); 4267 } 4268 } 4269 }; 4270 event_handler_default.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE2, Dropdown.dataApiKeydownHandler); 4271 event_handler_default.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler); 4272 event_handler_default.on(document, EVENT_CLICK_DATA_API2, Dropdown.clearMenus); 4273 event_handler_default.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); 4274 event_handler_default.on(document, EVENT_CLICK_DATA_API2, SELECTOR_DATA_TOGGLE2, function(event) { 4275 event.preventDefault(); 4276 Dropdown.getOrCreateInstance(this).toggle(); 4277 }); 4278 defineJQueryPlugin(Dropdown); 4279 4280 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/util/backdrop.js 4281 var NAME3 = "backdrop"; 4282 var CLASS_NAME_FADE = "fade"; 4283 var CLASS_NAME_SHOW3 = "show"; 4284 var EVENT_MOUSEDOWN = `mousedown.bs.${NAME3}`; 4285 var Default3 = { 4286 className: "modal-backdrop", 4287 clickCallback: null, 4288 isAnimated: false, 4289 isVisible: true, 4290 // if false, we use the backdrop helper without adding any element to the dom 4291 rootElement: "body" 4292 // give the choice to place backdrop under different elements 4293 }; 4294 var DefaultType3 = { 4295 className: "string", 4296 clickCallback: "(function|null)", 4297 isAnimated: "boolean", 4298 isVisible: "boolean", 4299 rootElement: "(element|string)" 4300 }; 4301 var Backdrop = class extends config_default { 4302 constructor(config) { 4303 super(); 4304 this._config = this._getConfig(config); 4305 this._isAppended = false; 4306 this._element = null; 4307 } 4308 // Getters 4309 static get Default() { 4310 return Default3; 4311 } 4312 static get DefaultType() { 4313 return DefaultType3; 4314 } 4315 static get NAME() { 4316 return NAME3; 4317 } 4318 // Public 4319 show(callback) { 4320 if (!this._config.isVisible) { 4321 execute(callback); 4322 return; 4323 } 4324 this._append(); 4325 const element = this._getElement(); 4326 if (this._config.isAnimated) { 4327 reflow(element); 4328 } 4329 element.classList.add(CLASS_NAME_SHOW3); 4330 this._emulateAnimation(() => { 4331 execute(callback); 4332 }); 4333 } 4334 hide(callback) { 4335 if (!this._config.isVisible) { 4336 execute(callback); 4337 return; 4338 } 4339 this._getElement().classList.remove(CLASS_NAME_SHOW3); 4340 this._emulateAnimation(() => { 4341 this.dispose(); 4342 execute(callback); 4343 }); 4344 } 4345 dispose() { 4346 if (!this._isAppended) { 4347 return; 4348 } 4349 event_handler_default.off(this._element, EVENT_MOUSEDOWN); 4350 this._element.remove(); 4351 this._isAppended = false; 4352 } 4353 // Private 4354 _getElement() { 4355 if (!this._element) { 4356 const backdrop = document.createElement("div"); 4357 backdrop.className = this._config.className; 4358 if (this._config.isAnimated) { 4359 backdrop.classList.add(CLASS_NAME_FADE); 4360 } 4361 this._element = backdrop; 4362 } 4363 return this._element; 4364 } 4365 _configAfterMerge(config) { 4366 config.rootElement = getElement(config.rootElement); 4367 return config; 4368 } 4369 _append() { 4370 if (this._isAppended) { 4371 return; 4372 } 4373 const element = this._getElement(); 4374 this._config.rootElement.append(element); 4375 event_handler_default.on(element, EVENT_MOUSEDOWN, () => { 4376 execute(this._config.clickCallback); 4377 }); 4378 this._isAppended = true; 4379 } 4380 _emulateAnimation(callback) { 4381 executeAfterTransition(callback, this._getElement(), this._config.isAnimated); 4382 } 4383 }; 4384 var backdrop_default = Backdrop; 4385 4386 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/util/component-functions.js 4387 var enableDismissTrigger = (component, method = "hide") => { 4388 const clickEvent = `click.dismiss${component.EVENT_KEY}`; 4389 const name = component.NAME; 4390 event_handler_default.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function(event) { 4391 if (["A", "AREA"].includes(this.tagName)) { 4392 event.preventDefault(); 4393 } 4394 if (isDisabled(this)) { 4395 return; 4396 } 4397 const target = selector_engine_default.getElementFromSelector(this) || this.closest(`.${name}`); 4398 const instance = component.getOrCreateInstance(target); 4399 instance[method](); 4400 }); 4401 }; 4402 4403 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/util/focustrap.js 4404 var NAME4 = "focustrap"; 4405 var DATA_KEY3 = "bs.focustrap"; 4406 var EVENT_KEY3 = `.${DATA_KEY3}`; 4407 var EVENT_FOCUSIN = `focusin${EVENT_KEY3}`; 4408 var EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY3}`; 4409 var TAB_KEY2 = "Tab"; 4410 var TAB_NAV_FORWARD = "forward"; 4411 var TAB_NAV_BACKWARD = "backward"; 4412 var Default4 = { 4413 autofocus: true, 4414 trapElement: null 4415 // The element to trap focus inside of 4416 }; 4417 var DefaultType4 = { 4418 autofocus: "boolean", 4419 trapElement: "element" 4420 }; 4421 var FocusTrap = class extends config_default { 4422 constructor(config) { 4423 super(); 4424 this._config = this._getConfig(config); 4425 this._isActive = false;
4426 this._lastTabNavDirection = null; 4427 } 4428 // Getters 4429 static get Default() { 4430 return Default4; 4431 } 4432 static get DefaultType() { 4433 return DefaultType4; 4434 } 4435 static get NAME() { 4436 return NAME4; 4437 } 4438 // Public 4439 activate() { 4440 if (this._isActive) { 4441 return; 4442 } 4443 if (this._config.autofocus) { 4444 this._config.trapElement.focus(); 4445 } 4446 event_handler_default.off(document, EVENT_KEY3); 4447 event_handler_default.on(document, EVENT_FOCUSIN, (event) => this._handleFocusin(event)); 4448 event_handler_default.on(document, EVENT_KEYDOWN_TAB, (event) => this._handleKeydown(event)); 4449 this._isActive = true; 4450 } 4451 deactivate() { 4452 if (!this._isActive) { 4453 return; 4454 } 4455 this._isActive = false; 4456 event_handler_default.off(document, EVENT_KEY3); 4457 } 4458 // Private 4459 _handleFocusin(event) { 4460 const { trapElement } = this._config; 4461 if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) { 4462 return; 4463 } 4464 const elements = selector_engine_default.focusableChildren(trapElement); 4465 if (elements.length === 0) { 4466 trapElement.focus(); 4467 } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) { 4468 elements[elements.length - 1].focus(); 4469 } else { 4470 elements[0].focus(); 4471 } 4472 } 4473 _handleKeydown(event) { 4474 if (event.key !== TAB_KEY2) { 4475 return; 4476 } 4477 this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD; 4478 } 4479 }; 4480 var focustrap_default = FocusTrap; 4481 4482 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/util/scrollbar.js 4483 var SELECTOR_FIXED_CONTENT = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"; 4484 var SELECTOR_STICKY_CONTENT = ".sticky-top"; 4485 var PROPERTY_PADDING = "padding-right"; 4486 var PROPERTY_MARGIN = "margin-right"; 4487 var ScrollBarHelper = class { 4488 constructor() { 4489 this._element = document.body; 4490 } 4491 // Public 4492 getWidth() { 4493 const documentWidth = document.documentElement.clientWidth; 4494 return Math.abs(window.innerWidth - documentWidth); 4495 } 4496 hide() { 4497 const width = this.getWidth(); 4498 this._disableOverFlow(); 4499 this._setElementAttributes(this._element, PROPERTY_PADDING, (calculatedValue) => calculatedValue + width); 4500 this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, (calculatedValue) => calculatedValue + width); 4501 this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, (calculatedValue) => calculatedValue - width); 4502 } 4503 reset() { 4504 this._resetElementAttributes(this._element, "overflow"); 4505 this._resetElementAttributes(this._element, PROPERTY_PADDING); 4506 this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING); 4507 this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN); 4508 } 4509 isOverflowing() { 4510 return this.getWidth() > 0; 4511 } 4512 // Private 4513 _disableOverFlow() { 4514 this._saveInitialAttribute(this._element, "overflow"); 4515 this._element.style.overflow = "hidden"; 4516 } 4517 _setElementAttributes(selector, styleProperty, callback) { 4518 const scrollbarWidth = this.getWidth(); 4519 const manipulationCallBack = (element) => { 4520 if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { 4521 return; 4522 } 4523 this._saveInitialAttribute(element, styleProperty); 4524 const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty); 4525 element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`); 4526 }; 4527 this._applyManipulationCallback(selector, manipulationCallBack); 4528 } 4529 _saveInitialAttribute(element, styleProperty) { 4530 const actualValue = element.style.getPropertyValue(styleProperty); 4531 if (actualValue) { 4532 manipulator_default.setDataAttribute(element, styleProperty, actualValue); 4533 } 4534 } 4535 _resetElementAttributes(selector, styleProperty) { 4536 const manipulationCallBack = (element) => { 4537 const value = manipulator_default.getDataAttribute(element, styleProperty); 4538 if (value === null) { 4539 element.style.removeProperty(styleProperty); 4540 return; 4541 } 4542 manipulator_default.removeDataAttribute(element, styleProperty); 4543 element.style.setProperty(styleProperty, value); 4544 }; 4545 this._applyManipulationCallback(selector, manipulationCallBack); 4546 } 4547 _applyManipulationCallback(selector, callBack) { 4548 if (isElement(selector)) { 4549 callBack(selector); 4550 return; 4551 } 4552 for (const sel of selector_engine_default.find(selector, this._element)) { 4553 callBack(sel); 4554 } 4555 } 4556 }; 4557 var scrollbar_default = ScrollBarHelper; 4558 4559 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/modal.js 4560 var NAME5 = "modal"; 4561 var DATA_KEY4 = "bs.modal"; 4562 var EVENT_KEY4 = `.${DATA_KEY4}`; 4563 var DATA_API_KEY3 = ".data-api"; 4564 var ESCAPE_KEY2 = "Escape"; 4565 var EVENT_HIDE3 = `hide${EVENT_KEY4}`; 4566 var EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY4}`; 4567 var EVENT_HIDDEN3 = `hidden${EVENT_KEY4}`; 4568 var EVENT_SHOW3 = `show${EVENT_KEY4}`; 4569 var EVENT_SHOWN3 = `shown${EVENT_KEY4}`; 4570 var EVENT_RESIZE = `resize${EVENT_KEY4}`; 4571 var EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY4}`; 4572 var EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY4}`; 4573 var EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY4}`; 4574 var EVENT_CLICK_DATA_API3 = `click${EVENT_KEY4}${DATA_API_KEY3}`;
vendor: 14,925 bytes, lines 4575-4979
4575 var CLASS_NAME_OPEN = "modal-open"; 4576 var CLASS_NAME_FADE2 = "fade"; 4577 var CLASS_NAME_SHOW4 = "show"; 4578 var CLASS_NAME_STATIC = "modal-static"; 4579 var OPEN_SELECTOR = ".modal.show"; 4580 var SELECTOR_DIALOG = ".modal-dialog"; 4581 var SELECTOR_MODAL_BODY = ".modal-body"; 4582 var SELECTOR_DATA_TOGGLE3 = '[data-bs-toggle="modal"]'; 4583 var Default5 = { 4584 backdrop: true, 4585 focus: true, 4586 keyboard: true 4587 }; 4588 var DefaultType5 = { 4589 backdrop: "(boolean|string)", 4590 focus: "boolean", 4591 keyboard: "boolean" 4592 }; 4593 var Modal = class _Modal extends base_component_default { 4594 constructor(element, config) { 4595 super(element, config); 4596 this._dialog = selector_engine_default.findOne(SELECTOR_DIALOG, this._element); 4597 this._backdrop = this._initializeBackDrop(); 4598 this._focustrap = this._initializeFocusTrap(); 4599 this._isShown = false; 4600 this._isTransitioning = false; 4601 this._scrollBar = new scrollbar_default(); 4602 this._addEventListeners(); 4603 } 4604 // Getters 4605 static get Default() { 4606 return Default5; 4607 } 4608 static get DefaultType() { 4609 return DefaultType5; 4610 } 4611 static get NAME() { 4612 return NAME5; 4613 } 4614 // Public 4615 toggle(relatedTarget) { 4616 return this._isShown ? this.hide() : this.show(relatedTarget); 4617 } 4618 show(relatedTarget) { 4619 if (this._isShown || this._isTransitioning) { 4620 return; 4621 } 4622 const showEvent = event_handler_default.trigger(this._element, EVENT_SHOW3, { 4623 relatedTarget 4624 }); 4625 if (showEvent.defaultPrevented) { 4626 return; 4627 } 4628 this._isShown = true; 4629 this._isTransitioning = true; 4630 this._scrollBar.hide(); 4631 document.body.classList.add(CLASS_NAME_OPEN); 4632 this._adjustDialog(); 4633 this._backdrop.show(() => this._showElement(relatedTarget)); 4634 } 4635 hide() { 4636 if (!this._isShown || this._isTransitioning) { 4637 return; 4638 } 4639 const hideEvent = event_handler_default.trigger(this._element, EVENT_HIDE3); 4640 if (hideEvent.defaultPrevented) { 4641 return; 4642 } 4643 this._isShown = false; 4644 this._isTransitioning = true; 4645 this._focustrap.deactivate(); 4646 this._element.classList.remove(CLASS_NAME_SHOW4); 4647 this._queueCallback(() => this._hideModal(), this._element, this._isAnimated()); 4648 } 4649 dispose() { 4650 event_handler_default.off(window, EVENT_KEY4); 4651 event_handler_default.off(this._dialog, EVENT_KEY4); 4652 this._backdrop.dispose(); 4653 this._focustrap.deactivate(); 4654 super.dispose(); 4655 } 4656 handleUpdate() { 4657 this._adjustDialog(); 4658 } 4659 // Private 4660 _initializeBackDrop() { 4661 return new backdrop_default({ 4662 isVisible: Boolean(this._config.backdrop), 4663 // 'static' option will be translated to true, and booleans will keep their value, 4664 isAnimated: this._isAnimated() 4665 }); 4666 } 4667 _initializeFocusTrap() { 4668 return new focustrap_default({ 4669 trapElement: this._element 4670 }); 4671 } 4672 _showElement(relatedTarget) { 4673 if (!document.body.contains(this._element)) { 4674 document.body.append(this._element); 4675 } 4676 this._element.style.display = "block"; 4677 this._element.removeAttribute("aria-hidden"); 4678 this._element.setAttribute("aria-modal", true); 4679 this._element.setAttribute("role", "dialog"); 4680 this._element.scrollTop = 0; 4681 const modalBody = selector_engine_default.findOne(SELECTOR_MODAL_BODY, this._dialog); 4682 if (modalBody) { 4683 modalBody.scrollTop = 0; 4684 } 4685 reflow(this._element); 4686 this._element.classList.add(CLASS_NAME_SHOW4); 4687 const transitionComplete = () => { 4688 if (this._config.focus) { 4689 this._focustrap.activate(); 4690 } 4691 this._isTransitioning = false; 4692 event_handler_default.trigger(this._element, EVENT_SHOWN3, { 4693 relatedTarget 4694 }); 4695 }; 4696 this._queueCallback(transitionComplete, this._dialog, this._isAnimated()); 4697 } 4698 _addEventListeners() { 4699 event_handler_default.on(this._element, EVENT_KEYDOWN_DISMISS, (event) => { 4700 if (event.key !== ESCAPE_KEY2) { 4701 return; 4702 } 4703 if (this._config.keyboard) { 4704 this.hide(); 4705 return; 4706 } 4707 this._triggerBackdropTransition(); 4708 }); 4709 event_handler_default.on(window, EVENT_RESIZE, () => { 4710 if (this._isShown && !this._isTransitioning) { 4711 this._adjustDialog(); 4712 } 4713 }); 4714 event_handler_default.on(this._element, EVENT_MOUSEDOWN_DISMISS, (event) => { 4715 event_handler_default.one(this._element, EVENT_CLICK_DISMISS, (event2) => { 4716 if (this._element !== event.target || this._element !== event2.target) { 4717 return; 4718 } 4719 if (this._config.backdrop === "static") { 4720 this._triggerBackdropTransition(); 4721 return; 4722 } 4723 if (this._config.backdrop) { 4724 this.hide(); 4725 } 4726 }); 4727 }); 4728 } 4729 _hideModal() { 4730 this._element.style.display = "none"; 4731 this._element.setAttribute("aria-hidden", true); 4732 this._element.removeAttribute("aria-modal"); 4733 this._element.removeAttribute("role"); 4734 this._isTransitioning = false; 4735 this._backdrop.hide(() => { 4736 document.body.classList.remove(CLASS_NAME_OPEN); 4737 this._resetAdjustments(); 4738 this._scrollBar.reset(); 4739 event_handler_default.trigger(this._element, EVENT_HIDDEN3); 4740 }); 4741 } 4742 _isAnimated() { 4743 return this._element.classList.contains(CLASS_NAME_FADE2); 4744 } 4745 _triggerBackdropTransition() { 4746 const hideEvent = event_handler_default.trigger(this._element, EVENT_HIDE_PREVENTED); 4747 if (hideEvent.defaultPrevented) { 4748 return; 4749 } 4750 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 4751 const initialOverflowY = this._element.style.overflowY; 4752 if (initialOverflowY === "hidden" || this._element.classList.contains(CLASS_NAME_STATIC)) { 4753 return; 4754 } 4755 if (!isModalOverflowing) { 4756 this._element.style.overflowY = "hidden"; 4757 } 4758 this._element.classList.add(CLASS_NAME_STATIC); 4759 this._queueCallback(() => { 4760 this._element.classList.remove(CLASS_NAME_STATIC); 4761 this._queueCallback(() => { 4762 this._element.style.overflowY = initialOverflowY; 4763 }, this._dialog); 4764 }, this._dialog); 4765 this._element.focus(); 4766 } 4767 /** 4768 * The following methods are used to handle overflowing modals 4769 */ 4770 _adjustDialog() { 4771 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 4772 const scrollbarWidth = this._scrollBar.getWidth(); 4773 const isBodyOverflowing = scrollbarWidth > 0; 4774 if (isBodyOverflowing && !isModalOverflowing) { 4775 const property = isRTL() ? "paddingLeft" : "paddingRight"; 4776 this._element.style[property] = `${scrollbarWidth}px`; 4777 } 4778 if (!isBodyOverflowing && isModalOverflowing) { 4779 const property = isRTL() ? "paddingRight" : "paddingLeft"; 4780 this._element.style[property] = `${scrollbarWidth}px`; 4781 } 4782 } 4783 _resetAdjustments() { 4784 this._element.style.paddingLeft = ""; 4785 this._element.style.paddingRight = ""; 4786 } 4787 // Static 4788 static jQueryInterface(config, relatedTarget) { 4789 return this.each(function() { 4790 const data = _Modal.getOrCreateInstance(this, config); 4791 if (typeof config !== "string") { 4792 return; 4793 } 4794 if (typeof data[config] === "undefined") { 4795 throw new TypeError(`No method named "${config}"`); 4796 } 4797 data[config](relatedTarget); 4798 }); 4799 } 4800 }; 4801 event_handler_default.on(document, EVENT_CLICK_DATA_API3, SELECTOR_DATA_TOGGLE3, function(event) { 4802 const target = selector_engine_default.getElementFromSelector(this); 4803 if (["A", "AREA"].includes(this.tagName)) { 4804 event.preventDefault(); 4805 } 4806 event_handler_default.one(target, EVENT_SHOW3, (showEvent) => { 4807 if (showEvent.defaultPrevented) { 4808 return; 4809 } 4810 event_handler_default.one(target, EVENT_HIDDEN3, () => { 4811 if (isVisible(this)) { 4812 this.focus(); 4813 } 4814 }); 4815 }); 4816 const alreadyOpen = selector_engine_default.findOne(OPEN_SELECTOR); 4817 if (alreadyOpen) { 4818 Modal.getInstance(alreadyOpen).hide(); 4819 } 4820 const data = Modal.getOrCreateInstance(target); 4821 data.toggle(this); 4822 }); 4823 enableDismissTrigger(Modal); 4824 defineJQueryPlugin(Modal); 4825 4826 // ns-hugo-imp:/home/ubuntu/.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/[email protected]+incompatible/js/src/tab.js 4827 var NAME6 = "tab"; 4828 var DATA_KEY5 = "bs.tab"; 4829 var EVENT_KEY5 = `.${DATA_KEY5}`; 4830 var EVENT_HIDE4 = `hide${EVENT_KEY5}`; 4831 var EVENT_HIDDEN4 = `hidden${EVENT_KEY5}`; 4832 var EVENT_SHOW4 = `show${EVENT_KEY5}`; 4833 var EVENT_SHOWN4 = `shown${EVENT_KEY5}`; 4834 var EVENT_CLICK_DATA_API4 = `click${EVENT_KEY5}`; 4835 var EVENT_KEYDOWN = `keydown${EVENT_KEY5}`; 4836 var EVENT_LOAD_DATA_API = `load${EVENT_KEY5}`; 4837 var ARROW_LEFT_KEY = "ArrowLeft"; 4838 var ARROW_RIGHT_KEY = "ArrowRight"; 4839 var ARROW_UP_KEY2 = "ArrowUp"; 4840 var ARROW_DOWN_KEY2 = "ArrowDown"; 4841 var HOME_KEY = "Home"; 4842 var END_KEY = "End"; 4843 var CLASS_NAME_ACTIVE = "active"; 4844 var CLASS_NAME_FADE3 = "fade"; 4845 var CLASS_NAME_SHOW5 = "show"; 4846 var CLASS_DROPDOWN = "dropdown"; 4847 var SELECTOR_DROPDOWN_TOGGLE = ".dropdown-toggle"; 4848 var SELECTOR_DROPDOWN_MENU = ".dropdown-menu"; 4849 var NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`; 4850 var SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]'; 4851 var SELECTOR_OUTER = ".nav-item, .list-group-item"; 4852 var SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`; 4853 var SELECTOR_DATA_TOGGLE4 = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; 4854 var SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE4}`; 4855 var 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"]`; 4856 var Tab = class _Tab extends base_component_default { 4857 constructor(element) { 4858 super(element); 4859 this._parent = this._element.closest(SELECTOR_TAB_PANEL); 4860 if (!this._parent) { 4861 return; 4862 } 4863 this._setInitialAttributes(this._parent, this._getChildren()); 4864 event_handler_default.on(this._element, EVENT_KEYDOWN, (event) => this._keydown(event)); 4865 } 4866 // Getters 4867 static get NAME() { 4868 return NAME6; 4869 } 4870 // Public 4871 show() { 4872 const innerElem = this._element; 4873 if (this._elemIsActive(innerElem)) { 4874 return; 4875 } 4876 const active = this._getActiveElem(); 4877 const hideEvent = active ? event_handler_default.trigger(active, EVENT_HIDE4, { relatedTarget: innerElem }) : null; 4878 const showEvent = event_handler_default.trigger(innerElem, EVENT_SHOW4, { relatedTarget: active }); 4879 if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) { 4880 return; 4881 } 4882 this._deactivate(active, innerElem); 4883 this._activate(innerElem, active); 4884 } 4885 // Private 4886 _activate(element, relatedElem) { 4887 if (!element) { 4888 return; 4889 } 4890 element.classList.add(CLASS_NAME_ACTIVE); 4891 this._activate(selector_engine_default.getElementFromSelector(element)); 4892 const complete = () => { 4893 if (element.getAttribute("role") !== "tab") { 4894 element.classList.add(CLASS_NAME_SHOW5); 4895 return; 4896 } 4897 element.removeAttribute("tabindex"); 4898 element.setAttribute("aria-selected", true); 4899 this._toggleDropDown(element, true); 4900 event_handler_default.trigger(element, EVENT_SHOWN4, { 4901 relatedTarget: relatedElem 4902 }); 4903 }; 4904 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE3)); 4905 } 4906 _deactivate(element, relatedElem) { 4907 if (!element) { 4908 return; 4909 } 4910 element.classList.remove(CLASS_NAME_ACTIVE); 4911 element.blur(); 4912 this._deactivate(selector_engine_default.getElementFromSelector(element)); 4913 const complete = () => { 4914 if (element.getAttribute("role") !== "tab") { 4915 element.classList.remove(CLASS_NAME_SHOW5); 4916 return; 4917 } 4918 element.setAttribute("aria-selected", false); 4919 element.setAttribute("tabindex", "-1"); 4920 this._toggleDropDown(element, false); 4921 event_handler_default.trigger(element, EVENT_HIDDEN4, { relatedTarget: relatedElem }); 4922 }; 4923 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE3)); 4924 } 4925 _keydown(event) { 4926 if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY2, ARROW_DOWN_KEY2, HOME_KEY, END_KEY].includes(event.key)) { 4927 return; 4928 } 4929 event.stopPropagation(); 4930 event.preventDefault(); 4931 const children = this._getChildren().filter((element) => !isDisabled(element)); 4932 let nextActiveElement; 4933 if ([HOME_KEY, END_KEY].includes(event.key)) { 4934 nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1]; 4935 } else { 4936 const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY2].includes(event.key); 4937 nextActiveElement = getNextActiveElement(children, event.target, isNext, true); 4938 } 4939 if (nextActiveElement) { 4940 nextActiveElement.focus({ preventScroll: true }); 4941 _Tab.getOrCreateInstance(nextActiveElement).show(); 4942 } 4943 } 4944 _getChildren() { 4945 return selector_engine_default.find(SELECTOR_INNER_ELEM, this._parent); 4946 } 4947 _getActiveElem() { 4948 return this._getChildren().find((child) => this._elemIsActive(child)) || null; 4949 } 4950 _setInitialAttributes(parent, children) { 4951 this._setAttributeIfNotExists(parent, "role", "tablist"); 4952 for (const child of children) { 4953 this._setInitialAttributesOnChild(child); 4954 } 4955 } 4956 _setInitialAttributesOnChild(child) { 4957 child = this._getInnerElement(child); 4958 const isActive = this._elemIsActive(child); 4959 const outerElem = this._getOuterElement(child); 4960 child.setAttribute("aria-selected", isActive); 4961 if (outerElem !== child) { 4962 this._setAttributeIfNotExists(outerElem, "role", "presentation"); 4963 } 4964 if (!isActive) { 4965 child.setAttribute("tabindex", "-1"); 4966 } 4967 this._setAttributeIfNotExists(child, "role", "tab"); 4968 this._setInitialAttributesOnTargetPanel(child); 4969 } 4970 _setInitialAttributesOnTargetPanel(child) { 4971 const target = selector_engine_default.getElementFromSelector(child); 4972 if (!target) { 4973 return; 4974 } 4975 this._setAttributeIfNotExists(target, "role", "tabpanel"); 4976 if (child.id) { 4977 this._setAttributeIfNotExists(target, "aria-labelledby", `${child.id}`); 4978 } 4979 }
vendor: 2,132 bytes, lines 4980-5041
4980 _toggleDropDown(element, open) { 4981 const outerElem = this._getOuterElement(element); 4982 if (!outerElem.classList.contains(CLASS_DROPDOWN)) { 4983 return; 4984 } 4985 const toggle = (selector, className) => { 4986 const element2 = selector_engine_default.findOne(selector, outerElem); 4987 if (element2) { 4988 element2.classList.toggle(className, open); 4989 } 4990 }; 4991 toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE); 4992 toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW5); 4993 outerElem.setAttribute("aria-expanded", open); 4994 } 4995 _setAttributeIfNotExists(element, attribute, value) { 4996 if (!element.hasAttribute(attribute)) { 4997 element.setAttribute(attribute, value); 4998 } 4999 } 5000 _elemIsActive(elem) { 5001 return elem.classList.contains(CLASS_NAME_ACTIVE); 5002 } 5003 // Try to get the inner element (usually the .nav-link) 5004 _getInnerElement(elem) { 5005 return elem.matches(SELECTOR_INNER_ELEM) ? elem : selector_engine_default.findOne(SELECTOR_INNER_ELEM, elem); 5006 } 5007 // Try to get the outer element (usually the .nav-item) 5008 _getOuterElement(elem) { 5009 return elem.closest(SELECTOR_OUTER) || elem; 5010 } 5011 // Static 5012 static jQueryInterface(config) { 5013 return this.each(function() { 5014 const data = _Tab.getOrCreateInstance(this); 5015 if (typeof config !== "string") { 5016 return; 5017 } 5018 if (data[config] === void 0 || config.startsWith("_") || config === "constructor") { 5019 throw new TypeError(`No method named "${config}"`); 5020 } 5021 data[config](); 5022 }); 5023 } 5024 }; 5025 event_handler_default.on(document, EVENT_CLICK_DATA_API4, SELECTOR_DATA_TOGGLE4, function(event) { 5026 if (["A", "AREA"].includes(this.tagName)) { 5027 event.preventDefault(); 5028 } 5029 if (isDisabled(this)) { 5030 return; 5031 } 5032 Tab.getOrCreateInstance(this).show(); 5033 }); 5034 event_handler_default.on(window, EVENT_LOAD_DATA_API, () => { 5035 for (const element of selector_engine_default.find(SELECTOR_DATA_TOGGLE_ACTIVE)) { 5036 Tab.getOrCreateInstance(element); 5037 } 5038 }); 5039 defineJQueryPlugin(Tab); 5040})(); 5041</script>
5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070
5071<script 5072 crossorigin="anonymous" 5073 integrity="sha256-GPgIz79V/BDNsBSKZLOApH4OjmK6zL33KrXLfOba2po=" 5074 src="/js/scripts.min.18f808cfbf55fc10cdb0148a64b380a47e0e8e62baccbdf72ab5cb7ce6dada9a.js"></script>
5074 5075 5076 5077 5078 5079
5080<script type="application/javascript"> 5081 WebFont.load({ 5082 google: { 5083 api: 'https://fonts.googleapis.com/css2', 5084 families: ['Rubik:ital,wght@0,300..900;1,300..900','Rubik:ital,wght@0,300..900;1,300..900&display=swap'], 5085 version: 2 5086 }, 5087 active: () => {sessionStorage.fontsLoaded = true} 5088 }); 5089</script>
5089 5090 5091 5092
5093<script> 5094 if ('serviceWorker' in navigator){navigator.serviceWorker.register("/service-worker.js");} 5095</script>
5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105</body> 5106 5107</html>
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.