// ==UserScript== // @name 💰 省钱小能手!自动获取优惠券+活动提醒,淘宝京东唯品会购物好帮手!🎯 // @name:zh 💰 省钱小能手!自动获取优惠券+活动提醒,淘宝京东唯品会购物好帮手!🎯 // @name:zh-TW 💰 省錢小能手!自動獲取優惠券+活動提醒,淘寶京東唯品會購物好幫手!🎯 // @namespace jack-voucher // @version 1.0.1 // @author Jack // @description 💰 省钱小能手!智能获取淘宝、京东、唯品会隐藏优惠券,实时推送双11、618等大型促销活动。精准倒计时提醒,让你不错过任何优惠机会。自动识别商品信息,一键直达优惠现场,界面简洁操作方便,让购物更划算!🎯 // @description:zh 💰 省钱小能手!智能获取淘宝、京东、唯品会隐藏优惠券,实时推送双11、618等大型促销活动。精准倒计时提醒,让你不错过任何优惠机会。自动识别商品信息,一键直达优惠现场,界面简洁操作方便,让购物更划算!🎯 // @description:zh-TW 💰 省錢小能手!智能獲取淘寶、京東、唯品會隱藏優惠券,實時推送雙11、618等大型促銷活動。精準倒計時提醒,讓你不錯過任何優惠機會。自動識別商品信息,一鍵直達優惠現場,界面簡潔操作方便,讓購物更划算!🎯 // @license None // @icon data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBhcmlhLWhpZGRlbj0idHJ1ZSIgcm9sZT0iaW1nIiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiIHZpZXdCb3g9IjAgMCAzMiAzMiI+CiAgPGRlZnM+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9InZvdWNoZXJHcmFkaWVudCIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMTAwJSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCUiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRjZCNkI7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3R5bGU9InN0b3AtY29sb3I6I0ZGOEU1MztzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8ZmlsdGVyIGlkPSJzaGFkb3ciIHg9Ii01MCUiIHk9Ii01MCUiIHdpZHRoPSIyMDAlIiBoZWlnaHQ9IjIwMCUiPgogICAgICA8ZmVEcm9wU2hhZG93IGR4PSIwIiBkeT0iMiIgc3RkRGV2aWF0aW9uPSIyIiBmbG9vZC1vcGFjaXR5PSIwLjIiLz4KICAgIDwvZmlsdGVyPgogIDwvZGVmcz4KICAKICA8IS0tIOS8mOaDoOWIuOS4u+S9kyAtLT4KICA8cmVjdCB4PSIyIiB5PSI4IiB3aWR0aD0iMjgiIGhlaWdodD0iMTYiIHJ4PSIyIiBmaWxsPSJ1cmwoI3ZvdWNoZXJHcmFkaWVudCkiIGZpbHRlcj0idXJsKCNzaGFkb3cpIi8+CiAgCiAgPCEtLSDlt6bkvqfomZrnur/liIblibLnur8gLS0+CiAgPGxpbmUgeDE9IjEwIiB5MT0iOCIgeDI9IjEwIiB5Mj0iMjQiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSIyLDIiIG9wYWNpdHk9IjAuNyIvPgogIAogIDwhLS0g5Y+z5L6n5ZyG5b2i57y65Y+jIC0tPgogIDxjaXJjbGUgY3g9IjI2IiBjeT0iMTYiIHI9IjMiIGZpbGw9IndoaXRlIi8+CiAgCiAgPCEtLSDkvJjmg6DliLjph5Hpop3ljLrln58gLS0+CiAgPHRleHQgeD0iNiIgeT0iMTUiIGZvbnQtZmFtaWx5PSJBcmlhbCwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSI4IiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0id2hpdGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiPsKlPC90ZXh0PgogIDx0ZXh0IHg9IjYiIHk9IjIxIiBmb250LWZhbWlseT0iQXJpYWwsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iNiIgZm9udC13ZWlnaHQ9ImJvbGQiIGZpbGw9IndoaXRlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5PRkY8L3RleHQ+CiAgCiAgPCEtLSDkvJjmg6DliLjmloflrZcgLS0+CiAgPHRleHQgeD0iMTgiIHk9IjE0IiBmb250LWZhbWlseT0iQXJpYWwsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iNCIgZmlsbD0id2hpdGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuS8mOaDoOWIuDwvdGV4dD4KICA8dGV4dCB4PSIxOCIgeT0iMTkiIGZvbnQtZmFtaWx5PSJBcmlhbCwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIzIiBmaWxsPSJ3aGl0ZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgb3BhY2l0eT0iMC45Ij5DT1VQT048L3RleHQ+CiAgCiAgPCEtLSDoo4XppbDmgKflhYPntKAgLS0+CiAgPGNpcmNsZSBjeD0iMTQiIGN5PSIxMiIgcj0iMSIgZmlsbD0id2hpdGUiIG9wYWNpdHk9IjAuNiIvPgogIDxjaXJjbGUgY3g9IjE0IiBjeT0iMjAiIHI9IjEiIGZpbGw9IndoaXRlIiBvcGFjaXR5PSIwLjYiLz4KPC9zdmc+DQo= // @match *://*.taobao.com/* // @match *://*.tmall.com/* // @match *://*.tmall.hk/* // @match *://*.detail.tmall.com/* // @match *://*.liangxinyao.com/* // @match *://*.jd.com/* // @match *://*.jd.hk/* // @match *://*.yiyaojd.com/* // @match *://*.jingdonghealth.cn/* // @match *://*.jkcsjd.com/* // @match *://*.vip.com/* // @match *://*.vipglobal.hk/* // @exclude *://login.taobao.com/* // @exclude *://uland.taobao.com/* // @exclude *://login.tmall.com/* // @exclude *://pages.tmall.com/* // @exclude *://wq.jd.com/* // @exclude *://trade.jd.com/* // @exclude *://union.jd.com/* // @require https://cdn.jsdelivr.net/npm/crypto-js@4.2.0/crypto-js.min.js // @grant GM.info // @grant GM_addStyle // @grant GM_getValue // @grant GM_info // @grant GM_openInTab // @grant GM_setValue // @grant unsafeWindow // @grant window.close // @run-at document-start // @antifeature referral-link // @noframes // ==/UserScript== (function (CryptoJS) { 'use strict'; function _interopNamespaceDefault(e) { const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } }); if (e) { for (const k in e) { if (k !== 'default') { const d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: () => e[k] }); } } } n.default = e; return Object.freeze(n); } const CryptoJS__namespace = _interopNamespaceDefault(CryptoJS); const d=new Set;const e = async e=>{d.has(e)||(d.add(e),(t=>{typeof GM_addStyle=="function"?GM_addStyle(t):document.head.appendChild(document.createElement("style")).append(t);})(e));}; e(' .voucher-widget.svelte-pvdktj{background:linear-gradient(135deg,#ff6b35,#f7931e);border-radius:8px;box-shadow:0 4px 16px #ff6b354d;color:#fff;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;z-index:10000;padding:16px;margin:16px}.coupon-info.svelte-pvdktj{margin-bottom:12px;text-align:center}.coupon-amount.svelte-pvdktj{font-size:24px;font-weight:700;margin-bottom:4px}.coupon-desc.svelte-pvdktj{font-size:14px;opacity:.9}.action-buttons.svelte-pvdktj{display:flex;gap:8px}.coupon-btn.svelte-pvdktj{flex:1;padding:8px 12px;border:none;border-radius:6px;font-weight:600;cursor:pointer;font-size:14px;transition:all .2s}.coupon-btn.svelte-pvdktj{background:#fff3;color:#fff}.coupon-btn.svelte-pvdktj:hover{background:#ffffff4d}.no-coupon-widget.svelte-earzmt{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:8px;box-shadow:0 4px 16px #667eea4d;color:#fff;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;z-index:10000;padding:16px;margin:16px;text-align:center}.message.svelte-earzmt{font-size:16px;font-weight:600}.loading-widget.svelte-w46va9{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:12px;box-shadow:0 8px 32px #667eea4d;color:#fff;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;z-index:10000;opacity:0;margin:16px;transform:translateY(-20px);transition:all .3s cubic-bezier(.4,0,.2,1);border:2px solid rgba(255,255,255,.2);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.loading-widget.visible.svelte-w46va9{opacity:1;transform:translateY(0)}.loading-content.svelte-w46va9{padding:24px 20px;text-align:center}.loading-spinner.svelte-w46va9{display:flex;justify-content:center;align-items:center;margin-bottom:16px;height:40px}.spinner-circle.svelte-w46va9{width:8px;height:8px;border-radius:50%;background:#fff;margin:0 4px;animation:svelte-w46va9-bounce 1.4s infinite ease-in-out both}.spinner-circle.svelte-w46va9:nth-child(1){animation-delay:-.32s}.spinner-circle.svelte-w46va9:nth-child(2){animation-delay:-.16s}.loading-text.svelte-w46va9{position:relative;line-height:1.4}.message.svelte-w46va9{font-size:16px;font-weight:600;margin:0 0 8px}.sub-message.svelte-w46va9{font-size:14px;opacity:.9;margin:0}@keyframes svelte-w46va9-bounce{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}@keyframes svelte-w46va9-slideIn{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.loading-widget.svelte-w46va9{animation:svelte-w46va9-slideIn .3s ease-out}@media(max-width:480px){.loading-widget.svelte-w46va9{width:260px;right:10px!important;left:auto!important}.loading-content.svelte-w46va9{padding:20px 16px}.message.svelte-w46va9{font-size:15px}.sub-message.svelte-w46va9{font-size:13px}}@keyframes svelte-w46va9-pulse{0%{box-shadow:0 8px 32px #667eea4d}50%{box-shadow:0 8px 40px #667eea80}to{box-shadow:0 8px 32px #667eea4d}}.loading-widget.svelte-w46va9{animation:svelte-w46va9-slideIn .3s ease-out,svelte-w46va9-pulse 2s infinite}.countdown-container.svelte-k7u13r{display:flex;gap:8px;justify-content:center;align-items:center;margin:8px 0}.time-unit.svelte-k7u13r{display:flex;flex-direction:column;align-items:center;min-width:32px}.time-value.svelte-k7u13r{background:#0000004d;color:#fff;font-size:14px;font-weight:700;padding:4px 6px;border-radius:4px;min-width:28px;text-align:center;box-shadow:0 2px 4px #0003;animation:svelte-k7u13r-pulse 1s infinite}.time-label.svelte-k7u13r{color:#fffc;font-size:10px;margin-top:2px;font-weight:500}@keyframes svelte-k7u13r-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.activity-card-container.svelte-a3tf1q{position:relative;border-radius:12px;box-shadow:0 8px 32px #0003;margin:8px 0;overflow:hidden;cursor:pointer;transform:translateY(20px);opacity:0;animation:svelte-a3tf1q-slideInUp .6s ease-out forwards;transition:all .3s ease;border:2px solid rgba(255,255,255,.2)}.activity-card-container.hovered.svelte-a3tf1q{transform:translateY(-2px) scale(1.02);box-shadow:0 12px 40px #0000004d}@keyframes svelte-a3tf1q-slideInUp{to{transform:translateY(0);opacity:1}}.shine-effect.svelte-a3tf1q{position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:linear-gradient(45deg,transparent 30%,rgba(255,255,255,.1) 50%,transparent 70%);animation:svelte-a3tf1q-shine 3s infinite;pointer-events:none}@keyframes svelte-a3tf1q-shine{0%{transform:translate(-100%) translateY(-100%) rotate(45deg)}to{transform:translate(100%) translateY(100%) rotate(45deg)}}.close-btn.svelte-a3tf1q{position:absolute;top:8px;right:8px;width:24px;height:24px;border:none;background:#0000004d;color:#fff;border-radius:50%;font-size:16px;font-weight:700;cursor:pointer;z-index:10;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.close-btn.svelte-a3tf1q:hover{background:#0009;transform:scale(1.1)}.activity-content.svelte-a3tf1q{position:relative;z-index:2;padding:16px}.activity-image.svelte-a3tf1q{position:relative;width:100%;height:160px;border-radius:8px;overflow:hidden;margin-bottom:12px;background:#ffffff1a;display:flex;align-items:center;justify-content:center}.activity-image.svelte-a3tf1q img:where(.svelte-a3tf1q){width:100%;height:100%;object-fit:contain;transition:transform .3s ease}.activity-card-container.svelte-a3tf1q:hover .activity-image:where(.svelte-a3tf1q) img:where(.svelte-a3tf1q){transform:scale(1.05)}.image-placeholder.svelte-a3tf1q{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#ffffff1a}.loading-spinner.svelte-a3tf1q{width:24px;height:24px;border:2px solid rgba(255,255,255,.3);border-top:2px solid white;border-radius:50%;animation:svelte-a3tf1q-spin 1s linear infinite}@keyframes svelte-a3tf1q-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.hot-badge.svelte-a3tf1q{position:absolute;top:8px;left:8px;background:linear-gradient(135deg,#ff4757,#ff6348);padding:4px 8px;border-radius:4px;box-shadow:0 2px 8px #ff475766;animation:svelte-a3tf1q-pulse 2s infinite}@keyframes svelte-a3tf1q-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.hot-text.svelte-a3tf1q{color:#fff;font-size:10px;font-weight:700;letter-spacing:1px}.activity-info.svelte-a3tf1q{color:#fff}.text-content.svelte-a3tf1q{height:100px;display:flex;flex-direction:column;justify-content:flex-start}.activity-title.svelte-a3tf1q{font-size:16px;font-weight:700;margin:0 0 8px;line-height:1.3;text-shadow:0 1px 2px rgba(0,0,0,.3)}.activity-desc.svelte-a3tf1q{font-size:13px;margin:0 0 8px;line-height:1.4;opacity:.95;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;flex:1}.activity-date.svelte-a3tf1q{font-size:11px;opacity:.8;margin-bottom:12px}.countdown-section.svelte-a3tf1q{margin:12px 0;text-align:center}.countdown-label.svelte-a3tf1q{color:#ffffffe6;font-size:12px;margin-bottom:6px;font-weight:500}.action-section.svelte-a3tf1q{display:flex;justify-content:center}.action-btn.svelte-a3tf1q{background:#ffffff26;color:#fff;border:1px solid rgba(255,255,255,.3);padding:12px 24px;border-radius:8px;font-weight:500;font-size:14px;cursor:pointer;display:flex;align-items:center;gap:6px;transition:all .2s ease;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);position:relative;overflow:hidden}.action-btn.svelte-a3tf1q:after{content:"";position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;background:#ffffff4d;transform:translate(-50%,-50%);transition:width .6s ease,height .6s ease}.action-btn.svelte-a3tf1q:hover{background:#ffffff40;border-color:#ffffff80;transform:translateY(-1px)}.action-btn.svelte-a3tf1q:hover:after{width:300px;height:300px}.action-btn.svelte-a3tf1q:active{transform:translateY(0);background:#fff3}.btn-arrow.svelte-a3tf1q{transition:transform .3s ease;font-size:16px;font-weight:700}.action-btn.svelte-a3tf1q:hover .btn-arrow:where(.svelte-a3tf1q){transform:translate(6px)}.hidden.svelte-a3tf1q{display:none}@media(max-width:768px){.activity-image.svelte-a3tf1q{height:140px}.activity-title.svelte-a3tf1q{font-size:14px}.activity-desc.svelte-a3tf1q{font-size:12px}.action-btn.svelte-a3tf1q{padding:8px 16px;font-size:13px}}.activity-carousel-container.svelte-qkk2pk{position:relative;margin:16px;transform:translateY(20px);opacity:0;animation:svelte-qkk2pk-slideInUp .6s ease-out forwards;transition:all .3s ease}.activity-carousel-container.visible.svelte-qkk2pk{transform:translateY(0);opacity:1}@keyframes svelte-qkk2pk-slideInUp{to{transform:translateY(0);opacity:1}}.close-btn.svelte-qkk2pk{position:absolute;top:8px;right:8px;width:24px;height:24px;border:none;background:#0000004d;color:#fff;border-radius:50%;font-size:16px;font-weight:700;cursor:pointer;z-index:10;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.close-btn.svelte-qkk2pk:hover{background:#0009;transform:scale(1.1)}.carousel-wrapper.svelte-qkk2pk{position:relative;overflow:hidden;border-radius:12px}.carousel-slides-container.svelte-qkk2pk{position:relative;width:100%;height:460px}.carousel-slide.svelte-qkk2pk{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;transform:translate(100%);transition:all .5s cubic-bezier(.4,0,.2,1);z-index:1}.carousel-slide.active.svelte-qkk2pk,.carousel-slide.svelte-qkk2pk:first-child{opacity:1;transform:translate(0);z-index:2}.carousel-slide.slide-next.active.svelte-qkk2pk{animation:svelte-qkk2pk-slideInFromRight .5s cubic-bezier(.4,0,.2,1)}.carousel-slide.slide-prev.active.svelte-qkk2pk{animation:svelte-qkk2pk-slideInFromLeft .5s cubic-bezier(.4,0,.2,1)}.carousel-slide.slide-out-next.svelte-qkk2pk{animation:svelte-qkk2pk-slideOutToRight .5s cubic-bezier(.4,0,.2,1)}.carousel-slide.slide-out-prev.svelte-qkk2pk{animation:svelte-qkk2pk-slideOutToLeft .5s cubic-bezier(.4,0,.2,1)}@keyframes svelte-qkk2pk-slideInFromRight{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@keyframes svelte-qkk2pk-slideInFromLeft{0%{opacity:0;transform:translate(-100%)}to{opacity:1;transform:translate(0)}}@keyframes svelte-qkk2pk-slideOutToRight{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-100%)}}@keyframes svelte-qkk2pk-slideOutToLeft{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}.carousel-btn.svelte-qkk2pk{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;border:none;background:#00000080;color:#fff;border-radius:50%;font-size:18px;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .3s ease;z-index:5}.carousel-btn.svelte-qkk2pk:hover{background:#000c;transform:translateY(-50%) scale(1.1)}.carousel-btn.prev.svelte-qkk2pk{left:8px}.carousel-btn.next.svelte-qkk2pk{right:8px}.carousel-indicators.svelte-qkk2pk{display:flex;justify-content:center;gap:8px;margin-top:12px}.indicator.svelte-qkk2pk{width:8px;height:8px;border:none;background:#ffffff4d;border-radius:50%;cursor:pointer;transition:all .3s ease;padding:0}.indicator.active.svelte-qkk2pk{background:#fff;transform:scale(1.2)}.indicator.svelte-qkk2pk:hover{background:#fff9}@media(max-width:768px){.carousel-btn.svelte-qkk2pk{width:32px;height:32px;font-size:14px}.carousel-btn.prev.svelte-qkk2pk{left:4px}.carousel-btn.next.svelte-qkk2pk{right:4px}.indicator.svelte-qkk2pk{width:6px;height:6px}} '); const PUBLIC_VERSION = "5"; if (typeof window !== "undefined") { ((window.__svelte ??= {}).v ??= new Set()).add(PUBLIC_VERSION); } let legacy_mode_flag = false; let tracing_mode_flag = false; function enable_legacy_mode_flag() { legacy_mode_flag = true; } enable_legacy_mode_flag(); const EACH_ITEM_REACTIVE = 1; const EACH_INDEX_REACTIVE = 1 << 1; const EACH_ITEM_IMMUTABLE = 1 << 4; const PROPS_IS_IMMUTABLE = 1; const PROPS_IS_RUNES = 1 << 1; const PROPS_IS_UPDATED = 1 << 2; const PROPS_IS_BINDABLE = 1 << 3; const PROPS_IS_LAZY_INITIAL = 1 << 4; const TEMPLATE_FRAGMENT = 1; const TEMPLATE_USE_IMPORT_NODE = 1 << 1; const UNINITIALIZED = Symbol(); const NAMESPACE_HTML = "http://www.w3.org/1999/xhtml"; const DEV = false; var is_array = Array.isArray; var index_of = Array.prototype.indexOf; var array_from = Array.from; var define_property = Object.defineProperty; var get_descriptor = Object.getOwnPropertyDescriptor; var get_descriptors = Object.getOwnPropertyDescriptors; var object_prototype = Object.prototype; var array_prototype = Array.prototype; var get_prototype_of = Object.getPrototypeOf; var is_extensible = Object.isExtensible; function run(fn) { return fn(); } function run_all(arr) { for (var i = 0; i < arr.length; i++) { arr[i](); } } function deferred() { var resolve; var reject; var promise = new Promise((res, rej) => { resolve = res; reject = rej; }); return { promise, resolve, reject }; } const DERIVED = 1 << 1; const EFFECT = 1 << 2; const RENDER_EFFECT = 1 << 3; const BLOCK_EFFECT = 1 << 4; const BRANCH_EFFECT = 1 << 5; const ROOT_EFFECT = 1 << 6; const BOUNDARY_EFFECT = 1 << 7; const CONNECTED = 1 << 9; const CLEAN = 1 << 10; const DIRTY = 1 << 11; const MAYBE_DIRTY = 1 << 12; const INERT = 1 << 13; const DESTROYED = 1 << 14; const EFFECT_RAN = 1 << 15; const EFFECT_TRANSPARENT = 1 << 16; const EAGER_EFFECT = 1 << 17; const HEAD_EFFECT = 1 << 18; const EFFECT_PRESERVED = 1 << 19; const USER_EFFECT = 1 << 20; const WAS_MARKED = 1 << 15; const REACTION_IS_UPDATING = 1 << 21; const ASYNC = 1 << 22; const ERROR_VALUE = 1 << 23; const STATE_SYMBOL = Symbol("$state"); const LEGACY_PROPS = Symbol("legacy props"); const LOADING_ATTR_SYMBOL = Symbol(""); const STALE_REACTION = new class StaleReactionError extends Error { name = "StaleReactionError"; message = "The reaction that called `getAbortSignal()` was re-run or destroyed"; }(); function lifecycle_outside_component(name) { { throw new Error(`https://svelte.dev/e/lifecycle_outside_component`); } } function async_derived_orphan() { { throw new Error(`https://svelte.dev/e/async_derived_orphan`); } } function effect_in_teardown(rune) { { throw new Error(`https://svelte.dev/e/effect_in_teardown`); } } function effect_in_unowned_derived() { { throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`); } } function effect_orphan(rune) { { throw new Error(`https://svelte.dev/e/effect_orphan`); } } function effect_update_depth_exceeded() { { throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`); } } function props_invalid_value(key) { { throw new Error(`https://svelte.dev/e/props_invalid_value`); } } function state_descriptors_fixed() { { throw new Error(`https://svelte.dev/e/state_descriptors_fixed`); } } function state_prototype_fixed() { { throw new Error(`https://svelte.dev/e/state_prototype_fixed`); } } function state_unsafe_mutation() { { throw new Error(`https://svelte.dev/e/state_unsafe_mutation`); } } function svelte_boundary_reset_onerror() { { throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`); } } function svelte_boundary_reset_noop() { { console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`); } } let hydrating = false; function equals(value) { return value === this.v; } function safe_not_equal(a, b) { return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; } function safe_equals(value) { return !safe_not_equal(value, this.v); } let component_context = null; function set_component_context(context) { component_context = context; } function push(props, runes = false, fn) { component_context = { p: component_context, i: false, c: null, e: null, s: props, x: null, l: legacy_mode_flag && !runes ? { s: null, u: null, $: [] } : null }; } function pop(component) { var context = ( component_context ); var effects = context.e; if (effects !== null) { context.e = null; for (var fn of effects) { create_user_effect(fn); } } context.i = true; component_context = context.p; return ( {} ); } function is_runes() { return !legacy_mode_flag || component_context !== null && component_context.l === null; } let micro_tasks = []; function run_micro_tasks() { var tasks = micro_tasks; micro_tasks = []; run_all(tasks); } function queue_micro_task(fn) { if (micro_tasks.length === 0 && true) { var tasks = micro_tasks; queueMicrotask(() => { if (tasks === micro_tasks) run_micro_tasks(); }); } micro_tasks.push(fn); } function handle_error(error) { var effect = active_effect; if (effect === null) { active_reaction.f |= ERROR_VALUE; return error; } if ((effect.f & EFFECT_RAN) === 0) { if ((effect.f & BOUNDARY_EFFECT) === 0) { throw error; } effect.b.error(error); } else { invoke_error_boundary(error, effect); } } function invoke_error_boundary(error, effect) { while (effect !== null) { if ((effect.f & BOUNDARY_EFFECT) !== 0) { try { effect.b.error(error); return; } catch (e) { error = e; } } effect = effect.parent; } throw error; } const batches = new Set(); let current_batch = null; let batch_values = null; let queued_root_effects = []; let last_scheduled_effect = null; let is_flushing = false; class Batch { committed = false; current = new Map(); previous = new Map(); #commit_callbacks = new Set(); #discard_callbacks = new Set(); #pending = 0; #blocking_pending = 0; #deferred = null; #dirty_effects = []; #maybe_dirty_effects = []; skipped_effects = new Set(); is_fork = false; process(root_effects) { queued_root_effects = []; this.apply(); var target = { parent: null, effect: null, effects: [], render_effects: [], block_effects: [] }; for (const root2 of root_effects) { this.#traverse_effect_tree(root2, target); } if (!this.is_fork) { this.#resolve(); } if (this.#blocking_pending > 0 || this.is_fork) { this.#defer_effects(target.effects); this.#defer_effects(target.render_effects); this.#defer_effects(target.block_effects); } else { current_batch = null; flush_queued_effects(target.render_effects); flush_queued_effects(target.effects); this.#deferred?.resolve(); } batch_values = null; } #traverse_effect_tree(root2, target) { root2.f ^= CLEAN; var effect = root2.first; while (effect !== null) { var flags2 = effect.f; var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0; var is_skippable_branch = is_branch && (flags2 & CLEAN) !== 0; var skip = is_skippable_branch || (flags2 & INERT) !== 0 || this.skipped_effects.has(effect); if ((effect.f & BOUNDARY_EFFECT) !== 0 && effect.b?.is_pending()) { target = { parent: target, effect, effects: [], render_effects: [], block_effects: [] }; } if (!skip && effect.fn !== null) { if (is_branch) { effect.f ^= CLEAN; } else if ((flags2 & EFFECT) !== 0) { target.effects.push(effect); } else if (is_dirty(effect)) { if ((effect.f & BLOCK_EFFECT) !== 0) target.block_effects.push(effect); update_effect(effect); } var child2 = effect.first; if (child2 !== null) { effect = child2; continue; } } var parent = effect.parent; effect = effect.next; while (effect === null && parent !== null) { if (parent === target.effect) { this.#defer_effects(target.effects); this.#defer_effects(target.render_effects); this.#defer_effects(target.block_effects); target = target.parent; } effect = parent.next; parent = parent.parent; } } } #defer_effects(effects) { for (const e of effects) { const target = (e.f & DIRTY) !== 0 ? this.#dirty_effects : this.#maybe_dirty_effects; target.push(e); set_signal_status(e, CLEAN); } } capture(source2, value) { if (!this.previous.has(source2)) { this.previous.set(source2, value); } if ((source2.f & ERROR_VALUE) === 0) { this.current.set(source2, source2.v); batch_values?.set(source2, source2.v); } } activate() { current_batch = this; this.apply(); } deactivate() { current_batch = null; batch_values = null; } flush() { this.activate(); if (queued_root_effects.length > 0) { flush_effects(); if (current_batch !== null && current_batch !== this) { return; } } else if (this.#pending === 0) { this.process([]); } this.deactivate(); } discard() { for (const fn of this.#discard_callbacks) fn(this); this.#discard_callbacks.clear(); } #resolve() { if (this.#blocking_pending === 0) { for (const fn of this.#commit_callbacks) fn(); this.#commit_callbacks.clear(); } if (this.#pending === 0) { this.#commit(); } } #commit() { if (batches.size > 1) { this.previous.clear(); var previous_batch_values = batch_values; var is_earlier = true; var dummy_target = { parent: null, effect: null, effects: [], render_effects: [], block_effects: [] }; for (const batch of batches) { if (batch === this) { is_earlier = false; continue; } const sources = []; for (const [source2, value] of this.current) { if (batch.current.has(source2)) { if (is_earlier && value !== batch.current.get(source2)) { batch.current.set(source2, value); } else { continue; } } sources.push(source2); } if (sources.length === 0) { continue; } const others = [...batch.current.keys()].filter((s) => !this.current.has(s)); if (others.length > 0) { const marked = new Set(); const checked = new Map(); for (const source2 of sources) { mark_effects(source2, others, marked, checked); } if (queued_root_effects.length > 0) { current_batch = batch; batch.apply(); for (const root2 of queued_root_effects) { batch.#traverse_effect_tree(root2, dummy_target); } queued_root_effects = []; batch.deactivate(); } } } current_batch = null; batch_values = previous_batch_values; } this.committed = true; batches.delete(this); } increment(blocking) { this.#pending += 1; if (blocking) this.#blocking_pending += 1; } decrement(blocking) { this.#pending -= 1; if (blocking) this.#blocking_pending -= 1; this.revive(); } revive() { for (const e of this.#dirty_effects) { set_signal_status(e, DIRTY); schedule_effect(e); } for (const e of this.#maybe_dirty_effects) { set_signal_status(e, MAYBE_DIRTY); schedule_effect(e); } this.#dirty_effects = []; this.#maybe_dirty_effects = []; this.flush(); } oncommit(fn) { this.#commit_callbacks.add(fn); } ondiscard(fn) { this.#discard_callbacks.add(fn); } settled() { return (this.#deferred ??= deferred()).promise; } static ensure() { if (current_batch === null) { const batch = current_batch = new Batch(); batches.add(current_batch); { Batch.enqueue(() => { if (current_batch !== batch) { return; } batch.flush(); }); } } return current_batch; } static enqueue(task) { queue_micro_task(task); } apply() { return; } } function flush_effects() { var was_updating_effect = is_updating_effect; is_flushing = true; try { var flush_count = 0; set_is_updating_effect(true); while (queued_root_effects.length > 0) { var batch = Batch.ensure(); if (flush_count++ > 1e3) { var updates, entry; if (DEV) ; infinite_loop_guard(); } batch.process(queued_root_effects); old_values.clear(); } } finally { is_flushing = false; set_is_updating_effect(was_updating_effect); last_scheduled_effect = null; } } function infinite_loop_guard() { try { effect_update_depth_exceeded(); } catch (error) { invoke_error_boundary(error, last_scheduled_effect); } } let eager_block_effects = null; function flush_queued_effects(effects) { var length = effects.length; if (length === 0) return; var i = 0; while (i < length) { var effect = effects[i++]; if ((effect.f & (DESTROYED | INERT)) === 0 && is_dirty(effect)) { eager_block_effects = new Set(); update_effect(effect); if (effect.deps === null && effect.first === null && effect.nodes_start === null) { if (effect.teardown === null && effect.ac === null) { unlink_effect(effect); } else { effect.fn = null; } } if (eager_block_effects?.size > 0) { old_values.clear(); for (const e of eager_block_effects) { if ((e.f & (DESTROYED | INERT)) !== 0) continue; const ordered_effects = [e]; let ancestor = e.parent; while (ancestor !== null) { if (eager_block_effects.has(ancestor)) { eager_block_effects.delete(ancestor); ordered_effects.push(ancestor); } ancestor = ancestor.parent; } for (let j = ordered_effects.length - 1; j >= 0; j--) { const e2 = ordered_effects[j]; if ((e2.f & (DESTROYED | INERT)) !== 0) continue; update_effect(e2); } } eager_block_effects.clear(); } } } eager_block_effects = null; } function mark_effects(value, sources, marked, checked) { if (marked.has(value)) return; marked.add(value); if (value.reactions !== null) { for (const reaction of value.reactions) { const flags2 = reaction.f; if ((flags2 & DERIVED) !== 0) { mark_effects( reaction, sources, marked, checked ); } else if ((flags2 & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags2 & DIRTY) === 0 && depends_on(reaction, sources, checked)) { set_signal_status(reaction, DIRTY); schedule_effect( reaction ); } } } } function depends_on(reaction, sources, checked) { const depends = checked.get(reaction); if (depends !== void 0) return depends; if (reaction.deps !== null) { for (const dep of reaction.deps) { if (sources.includes(dep)) { return true; } if ((dep.f & DERIVED) !== 0 && depends_on( dep, sources, checked )) { checked.set( dep, true ); return true; } } } checked.set(reaction, false); return false; } function schedule_effect(signal) { var effect = last_scheduled_effect = signal; while (effect.parent !== null) { effect = effect.parent; var flags2 = effect.f; if (is_flushing && effect === active_effect && (flags2 & BLOCK_EFFECT) !== 0 && (flags2 & HEAD_EFFECT) === 0) { return; } if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) { if ((flags2 & CLEAN) === 0) return; effect.f ^= CLEAN; } } queued_root_effects.push(effect); } function createSubscriber(start) { let subscribers = 0; let version = source(0); let stop; return () => { if (effect_tracking()) { get(version); render_effect(() => { if (subscribers === 0) { stop = untrack(() => start(() => increment(version))); } subscribers += 1; return () => { queue_micro_task(() => { subscribers -= 1; if (subscribers === 0) { stop?.(); stop = void 0; increment(version); } }); }; }); } }; } var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED | BOUNDARY_EFFECT; function boundary(node, props, children) { new Boundary(node, props, children); } class Boundary { parent; #pending = false; #anchor; #hydrate_open = null; #props; #children; #effect; #main_effect = null; #pending_effect = null; #failed_effect = null; #offscreen_fragment = null; #pending_anchor = null; #local_pending_count = 0; #pending_count = 0; #is_creating_fallback = false; #effect_pending = null; #effect_pending_subscriber = createSubscriber(() => { this.#effect_pending = source(this.#local_pending_count); return () => { this.#effect_pending = null; }; }); constructor(node, props, children) { this.#anchor = node; this.#props = props; this.#children = children; this.parent = active_effect.b; this.#pending = !!this.#props.pending; this.#effect = block(() => { active_effect.b = this; { var anchor = this.#get_anchor(); try { this.#main_effect = branch(() => children(anchor)); } catch (error) { this.error(error); } if (this.#pending_count > 0) { this.#show_pending_snippet(); } else { this.#pending = false; } } return () => { this.#pending_anchor?.remove(); }; }, flags); } #hydrate_resolved_content() { try { this.#main_effect = branch(() => this.#children(this.#anchor)); } catch (error) { this.error(error); } this.#pending = false; } #hydrate_pending_content() { const pending = this.#props.pending; if (!pending) { return; } this.#pending_effect = branch(() => pending(this.#anchor)); Batch.enqueue(() => { var anchor = this.#get_anchor(); this.#main_effect = this.#run(() => { Batch.ensure(); return branch(() => this.#children(anchor)); }); if (this.#pending_count > 0) { this.#show_pending_snippet(); } else { pause_effect( this.#pending_effect, () => { this.#pending_effect = null; } ); this.#pending = false; } }); } #get_anchor() { var anchor = this.#anchor; if (this.#pending) { this.#pending_anchor = create_text(); this.#anchor.before(this.#pending_anchor); anchor = this.#pending_anchor; } return anchor; } is_pending() { return this.#pending || !!this.parent && this.parent.is_pending(); } has_pending_snippet() { return !!this.#props.pending; } #run(fn) { var previous_effect = active_effect; var previous_reaction = active_reaction; var previous_ctx = component_context; set_active_effect(this.#effect); set_active_reaction(this.#effect); set_component_context(this.#effect.ctx); try { return fn(); } catch (e) { handle_error(e); return null; } finally { set_active_effect(previous_effect); set_active_reaction(previous_reaction); set_component_context(previous_ctx); } } #show_pending_snippet() { const pending = ( this.#props.pending ); if (this.#main_effect !== null) { this.#offscreen_fragment = document.createDocumentFragment(); this.#offscreen_fragment.append( this.#pending_anchor ); move_effect(this.#main_effect, this.#offscreen_fragment); } if (this.#pending_effect === null) { this.#pending_effect = branch(() => pending(this.#anchor)); } } #update_pending_count(d) { if (!this.has_pending_snippet()) { if (this.parent) { this.parent.#update_pending_count(d); } return; } this.#pending_count += d; if (this.#pending_count === 0) { this.#pending = false; if (this.#pending_effect) { pause_effect(this.#pending_effect, () => { this.#pending_effect = null; }); } if (this.#offscreen_fragment) { this.#anchor.before(this.#offscreen_fragment); this.#offscreen_fragment = null; } } } update_pending_count(d) { this.#update_pending_count(d); this.#local_pending_count += d; if (this.#effect_pending) { internal_set(this.#effect_pending, this.#local_pending_count); } } get_effect_pending() { this.#effect_pending_subscriber(); return get( this.#effect_pending ); } error(error) { var onerror = this.#props.onerror; let failed = this.#props.failed; if (this.#is_creating_fallback || !onerror && !failed) { throw error; } if (this.#main_effect) { destroy_effect(this.#main_effect); this.#main_effect = null; } if (this.#pending_effect) { destroy_effect(this.#pending_effect); this.#pending_effect = null; } if (this.#failed_effect) { destroy_effect(this.#failed_effect); this.#failed_effect = null; } var did_reset = false; var calling_on_error = false; const reset = () => { if (did_reset) { svelte_boundary_reset_noop(); return; } did_reset = true; if (calling_on_error) { svelte_boundary_reset_onerror(); } Batch.ensure(); this.#local_pending_count = 0; if (this.#failed_effect !== null) { pause_effect(this.#failed_effect, () => { this.#failed_effect = null; }); } this.#pending = this.has_pending_snippet(); this.#main_effect = this.#run(() => { this.#is_creating_fallback = false; return branch(() => this.#children(this.#anchor)); }); if (this.#pending_count > 0) { this.#show_pending_snippet(); } else { this.#pending = false; } }; var previous_reaction = active_reaction; try { set_active_reaction(null); calling_on_error = true; onerror?.(error, reset); calling_on_error = false; } catch (error2) { invoke_error_boundary(error2, this.#effect && this.#effect.parent); } finally { set_active_reaction(previous_reaction); } if (failed) { queue_micro_task(() => { this.#failed_effect = this.#run(() => { Batch.ensure(); this.#is_creating_fallback = true; try { return branch(() => { failed( this.#anchor, () => error, () => reset ); }); } catch (error2) { invoke_error_boundary( error2, this.#effect.parent ); return null; } finally { this.#is_creating_fallback = false; } }); }); } } } function flatten(blockers, sync, async, fn) { const d = is_runes() ? derived : derived_safe_equal; if (async.length === 0 && blockers.length === 0) { fn(sync.map(d)); return; } var batch = current_batch; var parent = ( active_effect ); var restore = capture(); function run2() { Promise.all(async.map((expression) => async_derived(expression))).then((result) => { restore(); try { fn([...sync.map(d), ...result]); } catch (error) { if ((parent.f & DESTROYED) === 0) { invoke_error_boundary(error, parent); } } batch?.deactivate(); unset_context(); }).catch((error) => { invoke_error_boundary(error, parent); }); } if (blockers.length > 0) { Promise.all(blockers).then(() => { restore(); try { return run2(); } finally { batch?.deactivate(); unset_context(); } }); } else { run2(); } } function capture() { var previous_effect = active_effect; var previous_reaction = active_reaction; var previous_component_context = component_context; var previous_batch = current_batch; return function restore(activate_batch = true) { set_active_effect(previous_effect); set_active_reaction(previous_reaction); set_component_context(previous_component_context); if (activate_batch) previous_batch?.activate(); }; } function unset_context() { set_active_effect(null); set_active_reaction(null); set_component_context(null); } function derived(fn) { var flags2 = DERIVED | DIRTY; var parent_derived = active_reaction !== null && (active_reaction.f & DERIVED) !== 0 ? ( active_reaction ) : null; if (active_effect !== null) { active_effect.f |= EFFECT_PRESERVED; } const signal = { ctx: component_context, deps: null, effects: null, equals, f: flags2, fn, reactions: null, rv: 0, v: ( UNINITIALIZED ), wv: 0, parent: parent_derived ?? active_effect, ac: null }; return signal; } function async_derived(fn, location) { let parent = ( active_effect ); if (parent === null) { async_derived_orphan(); } var boundary2 = ( parent.b ); var promise = ( void 0 ); var signal = source( UNINITIALIZED ); var should_suspend = !active_reaction; var deferreds = new Map(); async_effect(() => { var d = deferred(); promise = d.promise; try { Promise.resolve(fn()).then(d.resolve, d.reject).then(() => { if (batch === current_batch && batch.committed) { batch.deactivate(); } unset_context(); }); } catch (error) { d.reject(error); unset_context(); } var batch = ( current_batch ); if (should_suspend) { var blocking = !boundary2.is_pending(); boundary2.update_pending_count(1); batch.increment(blocking); deferreds.get(batch)?.reject(STALE_REACTION); deferreds.delete(batch); deferreds.set(batch, d); } const handler = (value, error = void 0) => { batch.activate(); if (error) { if (error !== STALE_REACTION) { signal.f |= ERROR_VALUE; internal_set(signal, error); } } else { if ((signal.f & ERROR_VALUE) !== 0) { signal.f ^= ERROR_VALUE; } internal_set(signal, value); for (const [b, d2] of deferreds) { deferreds.delete(b); if (b === batch) break; d2.reject(STALE_REACTION); } } if (should_suspend) { boundary2.update_pending_count(-1); batch.decrement(blocking); } }; d.promise.then(handler, (e) => handler(null, e || "unknown")); }); teardown(() => { for (const d of deferreds.values()) { d.reject(STALE_REACTION); } }); return new Promise((fulfil) => { function next(p) { function go() { if (p === promise) { fulfil(signal); } else { next(promise); } } p.then(go, go); } next(promise); }); } function derived_safe_equal(fn) { const signal = derived(fn); signal.equals = safe_equals; return signal; } function destroy_derived_effects(derived2) { var effects = derived2.effects; if (effects !== null) { derived2.effects = null; for (var i = 0; i < effects.length; i += 1) { destroy_effect( effects[i] ); } } } function get_derived_parent_effect(derived2) { var parent = derived2.parent; while (parent !== null) { if ((parent.f & DERIVED) === 0) { return ( parent ); } parent = parent.parent; } return null; } function execute_derived(derived2) { var value; var prev_active_effect = active_effect; set_active_effect(get_derived_parent_effect(derived2)); { try { derived2.f &= ~WAS_MARKED; destroy_derived_effects(derived2); value = update_reaction(derived2); } finally { set_active_effect(prev_active_effect); } } return value; } function update_derived(derived2) { var value = execute_derived(derived2); if (!derived2.equals(value)) { derived2.v = value; derived2.wv = increment_write_version(); } if (is_destroying_effect) { return; } if (batch_values !== null) { if (effect_tracking()) { batch_values.set(derived2, derived2.v); } } else { var status = (derived2.f & CONNECTED) === 0 ? MAYBE_DIRTY : CLEAN; set_signal_status(derived2, status); } } let eager_effects = new Set(); const old_values = new Map(); let eager_effects_deferred = false; function source(v, stack) { var signal = { f: 0, v, reactions: null, equals, rv: 0, wv: 0 }; return signal; } function state(v, stack) { const s = source(v); push_reaction_value(s); return s; } function mutable_source(initial_value, immutable = false, trackable = true) { const s = source(initial_value); if (!immutable) { s.equals = safe_equals; } if (legacy_mode_flag && trackable && component_context !== null && component_context.l !== null) { (component_context.l.s ??= []).push(s); } return s; } function set(source2, value, should_proxy = false) { if (active_reaction !== null && (!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && !current_sources?.includes(source2)) { state_unsafe_mutation(); } let new_value = should_proxy ? proxy(value) : value; return internal_set(source2, new_value); } function internal_set(source2, value) { if (!source2.equals(value)) { var old_value = source2.v; if (is_destroying_effect) { old_values.set(source2, value); } else { old_values.set(source2, old_value); } source2.v = value; var batch = Batch.ensure(); batch.capture(source2, old_value); if ((source2.f & DERIVED) !== 0) { if ((source2.f & DIRTY) !== 0) { execute_derived( source2 ); } set_signal_status(source2, (source2.f & CONNECTED) !== 0 ? CLEAN : MAYBE_DIRTY); } source2.wv = increment_write_version(); mark_reactions(source2, DIRTY); if (is_runes() && active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) { if (untracked_writes === null) { set_untracked_writes([source2]); } else { untracked_writes.push(source2); } } if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) { flush_eager_effects(); } } return value; } function flush_eager_effects() { eager_effects_deferred = false; const inspects = Array.from(eager_effects); for (const effect of inspects) { if ((effect.f & CLEAN) !== 0) { set_signal_status(effect, MAYBE_DIRTY); } if (is_dirty(effect)) { update_effect(effect); } } eager_effects.clear(); } function update(source2, d = 1) { var value = get(source2); var result = d === 1 ? value++ : value--; set(source2, value); return result; } function increment(source2) { set(source2, source2.v + 1); } function mark_reactions(signal, status) { var reactions = signal.reactions; if (reactions === null) return; var runes = is_runes(); var length = reactions.length; for (var i = 0; i < length; i++) { var reaction = reactions[i]; var flags2 = reaction.f; if (!runes && reaction === active_effect) continue; var not_dirty = (flags2 & DIRTY) === 0; if (not_dirty) { set_signal_status(reaction, status); } if ((flags2 & DERIVED) !== 0) { var derived2 = ( reaction ); batch_values?.delete(derived2); if ((flags2 & WAS_MARKED) === 0) { if (flags2 & CONNECTED) { reaction.f |= WAS_MARKED; } mark_reactions(derived2, MAYBE_DIRTY); } } else if (not_dirty) { if ((flags2 & BLOCK_EFFECT) !== 0) { if (eager_block_effects !== null) { eager_block_effects.add( reaction ); } } schedule_effect( reaction ); } } } function proxy(value) { if (typeof value !== "object" || value === null || STATE_SYMBOL in value) { return value; } const prototype = get_prototype_of(value); if (prototype !== object_prototype && prototype !== array_prototype) { return value; } var sources = new Map(); var is_proxied_array = is_array(value); var version = state(0); var parent_version = update_version; var with_parent = (fn) => { if (update_version === parent_version) { return fn(); } var reaction = active_reaction; var version2 = update_version; set_active_reaction(null); set_update_version(parent_version); var result = fn(); set_active_reaction(reaction); set_update_version(version2); return result; }; if (is_proxied_array) { sources.set("length", state( value.length )); } return new Proxy( value, { defineProperty(_, prop2, descriptor) { if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) { state_descriptors_fixed(); } var s = sources.get(prop2); if (s === void 0) { s = with_parent(() => { var s2 = state(descriptor.value); sources.set(prop2, s2); return s2; }); } else { set(s, descriptor.value, true); } return true; }, deleteProperty(target, prop2) { var s = sources.get(prop2); if (s === void 0) { if (prop2 in target) { const s2 = with_parent(() => state(UNINITIALIZED)); sources.set(prop2, s2); increment(version); } } else { set(s, UNINITIALIZED); increment(version); } return true; }, get(target, prop2, receiver) { if (prop2 === STATE_SYMBOL) { return value; } var s = sources.get(prop2); var exists = prop2 in target; if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) { s = with_parent(() => { var p = proxy(exists ? target[prop2] : UNINITIALIZED); var s2 = state(p); return s2; }); sources.set(prop2, s); } if (s !== void 0) { var v = get(s); return v === UNINITIALIZED ? void 0 : v; } return Reflect.get(target, prop2, receiver); }, getOwnPropertyDescriptor(target, prop2) { var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2); if (descriptor && "value" in descriptor) { var s = sources.get(prop2); if (s) descriptor.value = get(s); } else if (descriptor === void 0) { var source2 = sources.get(prop2); var value2 = source2?.v; if (source2 !== void 0 && value2 !== UNINITIALIZED) { return { enumerable: true, configurable: true, value: value2, writable: true }; } } return descriptor; }, has(target, prop2) { if (prop2 === STATE_SYMBOL) { return true; } var s = sources.get(prop2); var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2); if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) { if (s === void 0) { s = with_parent(() => { var p = has ? proxy(target[prop2]) : UNINITIALIZED; var s2 = state(p); return s2; }); sources.set(prop2, s); } var value2 = get(s); if (value2 === UNINITIALIZED) { return false; } } return has; }, set(target, prop2, value2, receiver) { var s = sources.get(prop2); var has = prop2 in target; if (is_proxied_array && prop2 === "length") { for (var i = value2; i < s.v; i += 1) { var other_s = sources.get(i + ""); if (other_s !== void 0) { set(other_s, UNINITIALIZED); } else if (i in target) { other_s = with_parent(() => state(UNINITIALIZED)); sources.set(i + "", other_s); } } } if (s === void 0) { if (!has || get_descriptor(target, prop2)?.writable) { s = with_parent(() => state(void 0)); set(s, proxy(value2)); sources.set(prop2, s); } } else { has = s.v !== UNINITIALIZED; var p = with_parent(() => proxy(value2)); set(s, p); } var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2); if (descriptor?.set) { descriptor.set.call(receiver, value2); } if (!has) { if (is_proxied_array && typeof prop2 === "string") { var ls = ( sources.get("length") ); var n = Number(prop2); if (Number.isInteger(n) && n >= ls.v) { set(ls, n + 1); } } increment(version); } return true; }, ownKeys(target) { get(version); var own_keys = Reflect.ownKeys(target).filter((key2) => { var source3 = sources.get(key2); return source3 === void 0 || source3.v !== UNINITIALIZED; }); for (var [key, source2] of sources) { if (source2.v !== UNINITIALIZED && !(key in target)) { own_keys.push(key); } } return own_keys; }, setPrototypeOf() { state_prototype_fixed(); } } ); } var $window; var is_firefox; var first_child_getter; var next_sibling_getter; function init_operations() { if ($window !== void 0) { return; } $window = window; is_firefox = /Firefox/.test(navigator.userAgent); var element_prototype = Element.prototype; var node_prototype = Node.prototype; var text_prototype = Text.prototype; first_child_getter = get_descriptor(node_prototype, "firstChild").get; next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get; if (is_extensible(element_prototype)) { element_prototype.__click = void 0; element_prototype.__className = void 0; element_prototype.__attributes = null; element_prototype.__style = void 0; element_prototype.__e = void 0; } if (is_extensible(text_prototype)) { text_prototype.__t = void 0; } } function create_text(value = "") { return document.createTextNode(value); } function get_first_child(node) { return first_child_getter.call(node); } function get_next_sibling(node) { return next_sibling_getter.call(node); } function child(node, is_text) { { return get_first_child(node); } } function first_child(fragment, is_text = false) { { var first = ( get_first_child( fragment ) ); if (first instanceof Comment && first.data === "") return get_next_sibling(first); return first; } } function sibling(node, count = 1, is_text = false) { let next_sibling = node; while (count--) { next_sibling = get_next_sibling(next_sibling); } { return next_sibling; } } function clear_text_content(node) { node.textContent = ""; } function without_reactive_context(fn) { var previous_reaction = active_reaction; var previous_effect = active_effect; set_active_reaction(null); set_active_effect(null); try { return fn(); } finally { set_active_reaction(previous_reaction); set_active_effect(previous_effect); } } function validate_effect(rune) { if (active_effect === null) { if (active_reaction === null) { effect_orphan(); } effect_in_unowned_derived(); } if (is_destroying_effect) { effect_in_teardown(); } } function push_effect(effect, parent_effect) { var parent_last = parent_effect.last; if (parent_last === null) { parent_effect.last = parent_effect.first = effect; } else { parent_last.next = effect; effect.prev = parent_last; parent_effect.last = effect; } } function create_effect(type, fn, sync, push2 = true) { var parent = active_effect; if (parent !== null && (parent.f & INERT) !== 0) { type |= INERT; } var effect = { ctx: component_context, deps: null, nodes_start: null, nodes_end: null, f: type | DIRTY | CONNECTED, first: null, fn, last: null, next: null, parent, b: parent && parent.b, prev: null, teardown: null, transitions: null, wv: 0, ac: null }; if (sync) { try { update_effect(effect); effect.f |= EFFECT_RAN; } catch (e2) { destroy_effect(effect); throw e2; } } else if (fn !== null) { schedule_effect(effect); } if (push2) { var e = effect; if (sync && e.deps === null && e.teardown === null && e.nodes_start === null && e.first === e.last && (e.f & EFFECT_PRESERVED) === 0) { e = e.first; if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) { e.f |= EFFECT_TRANSPARENT; } } if (e !== null) { e.parent = parent; if (parent !== null) { push_effect(e, parent); } if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) { var derived2 = ( active_reaction ); (derived2.effects ??= []).push(e); } } } return effect; } function effect_tracking() { return active_reaction !== null && !untracking; } function teardown(fn) { const effect = create_effect(RENDER_EFFECT, null, false); set_signal_status(effect, CLEAN); effect.teardown = fn; return effect; } function user_effect(fn) { validate_effect(); var flags2 = ( active_effect.f ); var defer = !active_reaction && (flags2 & BRANCH_EFFECT) !== 0 && (flags2 & EFFECT_RAN) === 0; if (defer) { var context = ( component_context ); (context.e ??= []).push(fn); } else { return create_user_effect(fn); } } function create_user_effect(fn) { return create_effect(EFFECT | USER_EFFECT, fn, false); } function user_pre_effect(fn) { validate_effect(); return create_effect(RENDER_EFFECT | USER_EFFECT, fn, true); } function component_root(fn) { Batch.ensure(); const effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn, true); return (options = {}) => { return new Promise((fulfil) => { if (options.outro) { pause_effect(effect, () => { destroy_effect(effect); fulfil(void 0); }); } else { destroy_effect(effect); fulfil(void 0); } }); }; } function legacy_pre_effect(deps, fn) { var context = ( component_context ); var token = { effect: null, ran: false, deps }; context.l.$.push(token); token.effect = render_effect(() => { deps(); if (token.ran) return; token.ran = true; untrack(fn); }); } function legacy_pre_effect_reset() { var context = ( component_context ); render_effect(() => { for (var token of context.l.$) { token.deps(); var effect = token.effect; if ((effect.f & CLEAN) !== 0) { set_signal_status(effect, MAYBE_DIRTY); } if (is_dirty(effect)) { update_effect(effect); } token.ran = false; } }); } function async_effect(fn) { return create_effect(ASYNC | EFFECT_PRESERVED, fn, true); } function render_effect(fn, flags2 = 0) { return create_effect(RENDER_EFFECT | flags2, fn, true); } function template_effect(fn, sync = [], async = [], blockers = [], defer = false) { flatten(blockers, sync, async, (values) => { create_effect(defer ? EFFECT : RENDER_EFFECT, () => fn(...values.map(get)), true); }); } function block(fn, flags2 = 0) { var effect = create_effect(BLOCK_EFFECT | flags2, fn, true); return effect; } function branch(fn, push2 = true) { return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn, true, push2); } function execute_effect_teardown(effect) { var teardown2 = effect.teardown; if (teardown2 !== null) { const previously_destroying_effect = is_destroying_effect; const previous_reaction = active_reaction; set_is_destroying_effect(true); set_active_reaction(null); try { teardown2.call(null); } finally { set_is_destroying_effect(previously_destroying_effect); set_active_reaction(previous_reaction); } } } function destroy_effect_children(signal, remove_dom = false) { var effect = signal.first; signal.first = signal.last = null; while (effect !== null) { const controller = effect.ac; if (controller !== null) { without_reactive_context(() => { controller.abort(STALE_REACTION); }); } var next = effect.next; if ((effect.f & ROOT_EFFECT) !== 0) { effect.parent = null; } else { destroy_effect(effect, remove_dom); } effect = next; } } function destroy_block_effect_children(signal) { var effect = signal.first; while (effect !== null) { var next = effect.next; if ((effect.f & BRANCH_EFFECT) === 0) { destroy_effect(effect); } effect = next; } } function destroy_effect(effect, remove_dom = true) { var removed = false; if ((remove_dom || (effect.f & HEAD_EFFECT) !== 0) && effect.nodes_start !== null && effect.nodes_end !== null) { remove_effect_dom( effect.nodes_start, effect.nodes_end ); removed = true; } destroy_effect_children(effect, remove_dom && !removed); remove_reactions(effect, 0); set_signal_status(effect, DESTROYED); var transitions = effect.transitions; if (transitions !== null) { for (const transition of transitions) { transition.stop(); } } execute_effect_teardown(effect); var parent = effect.parent; if (parent !== null && parent.first !== null) { unlink_effect(effect); } effect.next = effect.prev = effect.teardown = effect.ctx = effect.deps = effect.fn = effect.nodes_start = effect.nodes_end = effect.ac = null; } function remove_effect_dom(node, end) { while (node !== null) { var next = node === end ? null : ( get_next_sibling(node) ); node.remove(); node = next; } } function unlink_effect(effect) { var parent = effect.parent; var prev = effect.prev; var next = effect.next; if (prev !== null) prev.next = next; if (next !== null) next.prev = prev; if (parent !== null) { if (parent.first === effect) parent.first = next; if (parent.last === effect) parent.last = prev; } } function pause_effect(effect, callback, destroy = true) { var transitions = []; pause_children(effect, transitions, true); run_out_transitions(transitions, () => { if (destroy) destroy_effect(effect); if (callback) callback(); }); } function run_out_transitions(transitions, fn) { var remaining = transitions.length; if (remaining > 0) { var check = () => --remaining || fn(); for (var transition of transitions) { transition.out(check); } } else { fn(); } } function pause_children(effect, transitions, local) { if ((effect.f & INERT) !== 0) return; effect.f ^= INERT; if (effect.transitions !== null) { for (const transition of effect.transitions) { if (transition.is_global || local) { transitions.push(transition); } } } var child2 = effect.first; while (child2 !== null) { var sibling2 = child2.next; var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0 && (effect.f & BLOCK_EFFECT) !== 0; pause_children(child2, transitions, transparent ? local : false); child2 = sibling2; } } function resume_effect(effect) { resume_children(effect, true); } function resume_children(effect, local) { if ((effect.f & INERT) === 0) return; effect.f ^= INERT; if ((effect.f & CLEAN) === 0) { set_signal_status(effect, DIRTY); schedule_effect(effect); } var child2 = effect.first; while (child2 !== null) { var sibling2 = child2.next; var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0; resume_children(child2, transparent ? local : false); child2 = sibling2; } if (effect.transitions !== null) { for (const transition of effect.transitions) { if (transition.is_global || local) { transition.in(); } } } } function move_effect(effect, fragment) { var node = effect.nodes_start; var end = effect.nodes_end; while (node !== null) { var next = node === end ? null : ( get_next_sibling(node) ); fragment.append(node); node = next; } } let is_updating_effect = false; function set_is_updating_effect(value) { is_updating_effect = value; } let is_destroying_effect = false; function set_is_destroying_effect(value) { is_destroying_effect = value; } let active_reaction = null; let untracking = false; function set_active_reaction(reaction) { active_reaction = reaction; } let active_effect = null; function set_active_effect(effect) { active_effect = effect; } let current_sources = null; function push_reaction_value(value) { if (active_reaction !== null && true) { if (current_sources === null) { current_sources = [value]; } else { current_sources.push(value); } } } let new_deps = null; let skipped_deps = 0; let untracked_writes = null; function set_untracked_writes(value) { untracked_writes = value; } let write_version = 1; let read_version = 0; let update_version = read_version; function set_update_version(value) { update_version = value; } function increment_write_version() { return ++write_version; } function is_dirty(reaction) { var flags2 = reaction.f; if ((flags2 & DIRTY) !== 0) { return true; } if (flags2 & DERIVED) { reaction.f &= ~WAS_MARKED; } if ((flags2 & MAYBE_DIRTY) !== 0) { var dependencies = reaction.deps; if (dependencies !== null) { var length = dependencies.length; for (var i = 0; i < length; i++) { var dependency = dependencies[i]; if (is_dirty( dependency )) { update_derived( dependency ); } if (dependency.wv > reaction.wv) { return true; } } } if ((flags2 & CONNECTED) !== 0 && batch_values === null) { set_signal_status(reaction, CLEAN); } } return false; } function schedule_possible_effect_self_invalidation(signal, effect, root2 = true) { var reactions = signal.reactions; if (reactions === null) return; if (current_sources?.includes(signal)) { return; } for (var i = 0; i < reactions.length; i++) { var reaction = reactions[i]; if ((reaction.f & DERIVED) !== 0) { schedule_possible_effect_self_invalidation( reaction, effect, false ); } else if (effect === reaction) { if (root2) { set_signal_status(reaction, DIRTY); } else if ((reaction.f & CLEAN) !== 0) { set_signal_status(reaction, MAYBE_DIRTY); } schedule_effect( reaction ); } } } function update_reaction(reaction) { var previous_deps = new_deps; var previous_skipped_deps = skipped_deps; var previous_untracked_writes = untracked_writes; var previous_reaction = active_reaction; var previous_sources = current_sources; var previous_component_context = component_context; var previous_untracking = untracking; var previous_update_version = update_version; var flags2 = reaction.f; new_deps = null; skipped_deps = 0; untracked_writes = null; active_reaction = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null; current_sources = null; set_component_context(reaction.ctx); untracking = false; update_version = ++read_version; if (reaction.ac !== null) { without_reactive_context(() => { reaction.ac.abort(STALE_REACTION); }); reaction.ac = null; } try { reaction.f |= REACTION_IS_UPDATING; var fn = ( reaction.fn ); var result = fn(); var deps = reaction.deps; if (new_deps !== null) { var i; remove_reactions(reaction, skipped_deps); if (deps !== null && skipped_deps > 0) { deps.length = skipped_deps + new_deps.length; for (i = 0; i < new_deps.length; i++) { deps[skipped_deps + i] = new_deps[i]; } } else { reaction.deps = deps = new_deps; } if (is_updating_effect && effect_tracking() && (reaction.f & CONNECTED) !== 0) { for (i = skipped_deps; i < deps.length; i++) { (deps[i].reactions ??= []).push(reaction); } } } else if (deps !== null && skipped_deps < deps.length) { remove_reactions(reaction, skipped_deps); deps.length = skipped_deps; } if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) { for (i = 0; i < untracked_writes.length; i++) { schedule_possible_effect_self_invalidation( untracked_writes[i], reaction ); } } if (previous_reaction !== null && previous_reaction !== reaction) { read_version++; if (untracked_writes !== null) { if (previous_untracked_writes === null) { previous_untracked_writes = untracked_writes; } else { previous_untracked_writes.push(... untracked_writes); } } } if ((reaction.f & ERROR_VALUE) !== 0) { reaction.f ^= ERROR_VALUE; } return result; } catch (error) { return handle_error(error); } finally { reaction.f ^= REACTION_IS_UPDATING; new_deps = previous_deps; skipped_deps = previous_skipped_deps; untracked_writes = previous_untracked_writes; active_reaction = previous_reaction; current_sources = previous_sources; set_component_context(previous_component_context); untracking = previous_untracking; update_version = previous_update_version; } } function remove_reaction(signal, dependency) { let reactions = dependency.reactions; if (reactions !== null) { var index = index_of.call(reactions, signal); if (index !== -1) { var new_length = reactions.length - 1; if (new_length === 0) { reactions = dependency.reactions = null; } else { reactions[index] = reactions[new_length]; reactions.pop(); } } } if (reactions === null && (dependency.f & DERIVED) !== 0 && (new_deps === null || !new_deps.includes(dependency))) { set_signal_status(dependency, MAYBE_DIRTY); if ((dependency.f & CONNECTED) !== 0) { dependency.f ^= CONNECTED; dependency.f &= ~WAS_MARKED; } destroy_derived_effects( dependency ); remove_reactions( dependency, 0 ); } } function remove_reactions(signal, start_index) { var dependencies = signal.deps; if (dependencies === null) return; for (var i = start_index; i < dependencies.length; i++) { remove_reaction(signal, dependencies[i]); } } function update_effect(effect) { var flags2 = effect.f; if ((flags2 & DESTROYED) !== 0) { return; } set_signal_status(effect, CLEAN); var previous_effect = active_effect; var was_updating_effect = is_updating_effect; active_effect = effect; is_updating_effect = true; try { if ((flags2 & BLOCK_EFFECT) !== 0) { destroy_block_effect_children(effect); } else { destroy_effect_children(effect); } execute_effect_teardown(effect); var teardown2 = update_reaction(effect); effect.teardown = typeof teardown2 === "function" ? teardown2 : null; effect.wv = write_version; var dep; if (DEV && tracing_mode_flag && (effect.f & DIRTY) !== 0 && effect.deps !== null) ; } finally { is_updating_effect = was_updating_effect; active_effect = previous_effect; } } function get(signal) { var flags2 = signal.f; var is_derived = (flags2 & DERIVED) !== 0; if (active_reaction !== null && !untracking) { var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0; if (!destroyed && !current_sources?.includes(signal)) { var deps = active_reaction.deps; if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) { if (signal.rv < read_version) { signal.rv = read_version; if (new_deps === null && deps !== null && deps[skipped_deps] === signal) { skipped_deps++; } else if (new_deps === null) { new_deps = [signal]; } else if (!new_deps.includes(signal)) { new_deps.push(signal); } } } else { (active_reaction.deps ??= []).push(signal); var reactions = signal.reactions; if (reactions === null) { signal.reactions = [active_reaction]; } else if (!reactions.includes(active_reaction)) { reactions.push(active_reaction); } } } } if (is_destroying_effect) { if (old_values.has(signal)) { return old_values.get(signal); } if (is_derived) { var derived2 = ( signal ); var value = derived2.v; if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) { value = execute_derived(derived2); } old_values.set(derived2, value); return value; } } else if (is_derived) { derived2 = signal; if (batch_values?.has(derived2)) { return batch_values.get(derived2); } if (is_dirty(derived2)) { update_derived(derived2); } if (is_updating_effect && effect_tracking() && (derived2.f & CONNECTED) === 0) { reconnect(derived2); } } else if (batch_values?.has(signal)) { return batch_values.get(signal); } if ((signal.f & ERROR_VALUE) !== 0) { throw signal.v; } return signal.v; } function reconnect(derived2) { if (derived2.deps === null) return; derived2.f ^= CONNECTED; for (const dep of derived2.deps) { (dep.reactions ??= []).push(derived2); if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) { reconnect( dep ); } } } function depends_on_old_values(derived2) { if (derived2.v === UNINITIALIZED) return true; if (derived2.deps === null) return false; for (const dep of derived2.deps) { if (old_values.has(dep)) { return true; } if ((dep.f & DERIVED) !== 0 && depends_on_old_values( dep )) { return true; } } return false; } function untrack(fn) { var previous_untracking = untracking; try { untracking = true; return fn(); } finally { untracking = previous_untracking; } } const STATUS_MASK = -7169; function set_signal_status(signal, status) { signal.f = signal.f & STATUS_MASK | status; } function deep_read_state(value) { if (typeof value !== "object" || !value || value instanceof EventTarget) { return; } if (STATE_SYMBOL in value) { deep_read(value); } else if (!Array.isArray(value)) { for (let key in value) { const prop2 = value[key]; if (typeof prop2 === "object" && prop2 && STATE_SYMBOL in prop2) { deep_read(prop2); } } } } function deep_read(value, visited = new Set()) { if (typeof value === "object" && value !== null && !(value instanceof EventTarget) && !visited.has(value)) { visited.add(value); if (value instanceof Date) { value.getTime(); } for (let key in value) { try { deep_read(value[key], visited); } catch (e) { } } const proto = get_prototype_of(value); if (proto !== Object.prototype && proto !== Array.prototype && proto !== Map.prototype && proto !== Set.prototype && proto !== Date.prototype) { const descriptors = get_descriptors(proto); for (let key in descriptors) { const get2 = descriptors[key].get; if (get2) { try { get2.call(value); } catch (e) { } } } } } } const all_registered_events = new Set(); const root_event_handles = new Set(); function create_event(event_name, dom, handler, options = {}) { function target_handler(event2) { if (!options.capture) { handle_event_propagation.call(dom, event2); } if (!event2.cancelBubble) { return without_reactive_context(() => { return handler?.call(this, event2); }); } } if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") { queue_micro_task(() => { dom.addEventListener(event_name, target_handler, options); }); } else { dom.addEventListener(event_name, target_handler, options); } return target_handler; } function event(event_name, dom, handler, capture2, passive) { var options = { capture: capture2, passive }; var target_handler = create_event(event_name, dom, handler, options); if (dom === document.body || dom === window || dom === document || dom instanceof HTMLMediaElement) { teardown(() => { dom.removeEventListener(event_name, target_handler, options); }); } } let last_propagated_event = null; function handle_event_propagation(event2) { var handler_element = this; var owner_document = ( handler_element.ownerDocument ); var event_name = event2.type; var path = event2.composedPath?.() || []; var current_target = ( path[0] || event2.target ); last_propagated_event = event2; var path_idx = 0; var handled_at = last_propagated_event === event2 && event2.__root; if (handled_at) { var at_idx = path.indexOf(handled_at); if (at_idx !== -1 && (handler_element === document || handler_element === window)) { event2.__root = handler_element; return; } var handler_idx = path.indexOf(handler_element); if (handler_idx === -1) { return; } if (at_idx <= handler_idx) { path_idx = at_idx; } } current_target = path[path_idx] || event2.target; if (current_target === handler_element) return; define_property(event2, "currentTarget", { configurable: true, get() { return current_target || owner_document; } }); var previous_reaction = active_reaction; var previous_effect = active_effect; set_active_reaction(null); set_active_effect(null); try { var throw_error; var other_errors = []; while (current_target !== null) { var parent_element = current_target.assignedSlot || current_target.parentNode || current_target.host || null; try { var delegated = current_target["__" + event_name]; if (delegated != null && (! current_target.disabled || event2.target === current_target)) { delegated.call(current_target, event2); } } catch (error) { if (throw_error) { other_errors.push(error); } else { throw_error = error; } } if (event2.cancelBubble || parent_element === handler_element || parent_element === null) { break; } current_target = parent_element; } if (throw_error) { for (let error of other_errors) { queueMicrotask(() => { throw error; }); } throw throw_error; } } finally { event2.__root = handler_element; delete event2.currentTarget; set_active_reaction(previous_reaction); set_active_effect(previous_effect); } } function create_fragment_from_html(html) { var elem = document.createElement("template"); elem.innerHTML = html.replaceAll("", ""); return elem.content; } function assign_nodes(start, end) { var effect = ( active_effect ); if (effect.nodes_start === null) { effect.nodes_start = start; effect.nodes_end = end; } } function from_html(content, flags2) { var is_fragment = (flags2 & TEMPLATE_FRAGMENT) !== 0; var use_import_node = (flags2 & TEMPLATE_USE_IMPORT_NODE) !== 0; var node; var has_start = !content.startsWith(""); return () => { if (node === void 0) { node = create_fragment_from_html(has_start ? content : "" + content); if (!is_fragment) node = get_first_child(node); } var clone = ( use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true) ); if (is_fragment) { var start = ( get_first_child(clone) ); var end = ( clone.lastChild ); assign_nodes(start, end); } else { assign_nodes(clone, clone); } return clone; }; } function comment() { var frag = document.createDocumentFragment(); var start = document.createComment(""); var anchor = create_text(); frag.append(start, anchor); assign_nodes(start, anchor); return frag; } function append(anchor, dom) { if (anchor === null) { return; } anchor.before( dom ); } const PASSIVE_EVENTS = ["touchstart", "touchmove"]; function is_passive_event(name) { return PASSIVE_EVENTS.includes(name); } function set_text(text, value) { var str = value == null ? "" : typeof value === "object" ? value + "" : value; if (str !== (text.__t ??= text.nodeValue)) { text.__t = str; text.nodeValue = str + ""; } } function mount(component, options) { return _mount(component, options); } const document_listeners = new Map(); function _mount(Component, { target, anchor, props = {}, events, context, intro = true }) { init_operations(); var registered_events = new Set(); var event_handle = (events2) => { for (var i = 0; i < events2.length; i++) { var event_name = events2[i]; if (registered_events.has(event_name)) continue; registered_events.add(event_name); var passive = is_passive_event(event_name); target.addEventListener(event_name, handle_event_propagation, { passive }); var n = document_listeners.get(event_name); if (n === void 0) { document.addEventListener(event_name, handle_event_propagation, { passive }); document_listeners.set(event_name, 1); } else { document_listeners.set(event_name, n + 1); } } }; event_handle(array_from(all_registered_events)); root_event_handles.add(event_handle); var component = void 0; var unmount = component_root(() => { var anchor_node = anchor ?? target.appendChild(create_text()); boundary( anchor_node, { pending: () => { } }, (anchor_node2) => { if (context) { push({}); var ctx = ( component_context ); ctx.c = context; } if (events) { props.$$events = events; } component = Component(anchor_node2, props) || {}; if (context) { pop(); } } ); return () => { for (var event_name of registered_events) { target.removeEventListener(event_name, handle_event_propagation); var n = ( document_listeners.get(event_name) ); if (--n === 0) { document.removeEventListener(event_name, handle_event_propagation); document_listeners.delete(event_name); } else { document_listeners.set(event_name, n); } } root_event_handles.delete(event_handle); if (anchor_node !== anchor) { anchor_node.parentNode?.removeChild(anchor_node); } }; }); mounted_components.set(component, unmount); return component; } let mounted_components = new WeakMap(); class BranchManager { anchor; #batches = new Map(); #onscreen = new Map(); #offscreen = new Map(); #transition = true; constructor(anchor, transition = true) { this.anchor = anchor; this.#transition = transition; } #commit = () => { var batch = ( current_batch ); if (!this.#batches.has(batch)) return; var key = ( this.#batches.get(batch) ); var onscreen = this.#onscreen.get(key); if (onscreen) { resume_effect(onscreen); } else { var offscreen = this.#offscreen.get(key); if (offscreen) { this.#onscreen.set(key, offscreen.effect); this.#offscreen.delete(key); offscreen.fragment.lastChild.remove(); this.anchor.before(offscreen.fragment); onscreen = offscreen.effect; } } for (const [b, k] of this.#batches) { this.#batches.delete(b); if (b === batch) { break; } const offscreen2 = this.#offscreen.get(k); if (offscreen2) { destroy_effect(offscreen2.effect); this.#offscreen.delete(k); } } for (const [k, effect] of this.#onscreen) { if (k === key) continue; const on_destroy = () => { const keys = Array.from(this.#batches.values()); if (keys.includes(k)) { var fragment = document.createDocumentFragment(); move_effect(effect, fragment); fragment.append(create_text()); this.#offscreen.set(k, { effect, fragment }); } else { destroy_effect(effect); } this.#onscreen.delete(k); }; if (this.#transition || !onscreen) { pause_effect(effect, on_destroy, false); } else { on_destroy(); } } }; #discard = (batch) => { this.#batches.delete(batch); const keys = Array.from(this.#batches.values()); for (const [k, branch2] of this.#offscreen) { if (!keys.includes(k)) { destroy_effect(branch2.effect); this.#offscreen.delete(k); } } }; ensure(key, fn) { var batch = ( current_batch ); if (fn && !this.#onscreen.has(key) && !this.#offscreen.has(key)) { { this.#onscreen.set( key, branch(() => fn(this.anchor)) ); } } this.#batches.set(batch, key); { this.#commit(); } } } function onMount(fn) { if (component_context === null) { lifecycle_outside_component(); } if (legacy_mode_flag && component_context.l !== null) { init_update_callbacks(component_context).m.push(fn); } else { user_effect(() => { const cleanup = untrack(fn); if (typeof cleanup === "function") return ( cleanup ); }); } } function onDestroy(fn) { if (component_context === null) { lifecycle_outside_component(); } onMount(() => () => untrack(fn)); } function init_update_callbacks(context) { var l = ( context.l ); return l.u ??= { a: [], b: [], m: [] }; } function if_block(node, fn, elseif = false) { var branches = new BranchManager(node); var flags2 = elseif ? EFFECT_TRANSPARENT : 0; function update_branch(condition, fn2) { branches.ensure(condition, fn2); } block(() => { var has_branch = false; fn((fn2, flag = true) => { has_branch = true; update_branch(flag, fn2); }); if (!has_branch) { update_branch(false, null); } }, flags2); } function pause_effects(state2, items, controlled_anchor) { var items_map = state2.items; var transitions = []; var length = items.length; for (var i = 0; i < length; i++) { pause_children(items[i].e, transitions, true); } var is_controlled = length > 0 && transitions.length === 0 && controlled_anchor !== null; if (is_controlled) { var parent_node = ( controlled_anchor.parentNode ); clear_text_content(parent_node); parent_node.append( controlled_anchor ); items_map.clear(); link(state2, items[0].prev, items[length - 1].next); } run_out_transitions(transitions, () => { for (var i2 = 0; i2 < length; i2++) { var item = items[i2]; if (!is_controlled) { items_map.delete(item.k); link(state2, item.prev, item.next); } destroy_effect(item.e, !is_controlled); } }); } function each(node, flags2, get_collection, get_key, render_fn, fallback_fn = null) { var anchor = node; var state2 = { flags: flags2, items: new Map(), first: null }; { var parent_node = ( node ); anchor = parent_node.appendChild(create_text()); } var fallback = null; var was_empty = false; var offscreen_items = new Map(); var each_array = derived_safe_equal(() => { var collection = get_collection(); return is_array(collection) ? collection : collection == null ? [] : array_from(collection); }); var array; var each_effect; function commit() { reconcile( each_effect, array, state2, offscreen_items, anchor, render_fn, flags2, get_key, get_collection ); if (fallback_fn !== null) { if (array.length === 0) { if (fallback) { resume_effect(fallback); } else { fallback = branch(() => fallback_fn(anchor)); } } else if (fallback !== null) { pause_effect(fallback, () => { fallback = null; }); } } } block(() => { each_effect ??= active_effect; array = get(each_array); var length = array.length; if (was_empty && length === 0) { return; } was_empty = length === 0; { { commit(); } } get(each_array); }); } function reconcile(each_effect, array, state2, offscreen_items, anchor, render_fn, flags2, get_key, get_collection) { var length = array.length; var items = state2.items; var first = state2.first; var current = first; var seen; var prev = null; var matched = []; var stashed = []; var value; var key; var item; var i; for (i = 0; i < length; i += 1) { value = array[i]; key = get_key(value, i); item = items.get(key); if (item === void 0) { var pending = offscreen_items.get(key); if (pending !== void 0) { offscreen_items.delete(key); items.set(key, pending); var next = prev ? prev.next : current; link(state2, prev, pending); link(state2, pending, next); move(pending, next, anchor); prev = pending; } else { var child_anchor = current ? ( current.e.nodes_start ) : anchor; prev = create_item( child_anchor, state2, prev, prev === null ? state2.first : prev.next, value, key, i, render_fn, flags2, get_collection ); } items.set(key, prev); matched = []; stashed = []; current = prev.next; continue; } { update_item(item, value, i); } if ((item.e.f & INERT) !== 0) { resume_effect(item.e); } if (item !== current) { if (seen !== void 0 && seen.has(item)) { if (matched.length < stashed.length) { var start = stashed[0]; var j; prev = start.prev; var a = matched[0]; var b = matched[matched.length - 1]; for (j = 0; j < matched.length; j += 1) { move(matched[j], start, anchor); } for (j = 0; j < stashed.length; j += 1) { seen.delete(stashed[j]); } link(state2, a.prev, b.next); link(state2, prev, a); link(state2, b, start); current = start; prev = b; i -= 1; matched = []; stashed = []; } else { seen.delete(item); move(item, current, anchor); link(state2, item.prev, item.next); link(state2, item, prev === null ? state2.first : prev.next); link(state2, prev, item); prev = item; } continue; } matched = []; stashed = []; while (current !== null && current.k !== key) { if ((current.e.f & INERT) === 0) { (seen ??= new Set()).add(current); } stashed.push(current); current = current.next; } if (current === null) { continue; } item = current; } matched.push(item); prev = item; current = item.next; } if (current !== null || seen !== void 0) { var to_destroy = seen === void 0 ? [] : array_from(seen); while (current !== null) { if ((current.e.f & INERT) === 0) { to_destroy.push(current); } current = current.next; } var destroy_length = to_destroy.length; if (destroy_length > 0) { var controlled_anchor = length === 0 ? anchor : null; pause_effects(state2, to_destroy, controlled_anchor); } } each_effect.first = state2.first && state2.first.e; each_effect.last = prev && prev.e; for (var unused of offscreen_items.values()) { destroy_effect(unused.e); } offscreen_items.clear(); } function update_item(item, value, index, type) { { internal_set(item.v, value); } { internal_set( item.i, index ); } } function create_item(anchor, state2, prev, next, value, key, index, render_fn, flags2, get_collection, deferred2) { var reactive = (flags2 & EACH_ITEM_REACTIVE) !== 0; var mutable = (flags2 & EACH_ITEM_IMMUTABLE) === 0; var v = reactive ? mutable ? mutable_source(value, false, false) : source(value) : value; var i = (flags2 & EACH_INDEX_REACTIVE) === 0 ? index : source(index); var item = { i, v, k: key, a: null, e: null, prev, next }; try { if (anchor === null) { var fragment = document.createDocumentFragment(); fragment.append(anchor = create_text()); } item.e = branch(() => render_fn( anchor, v, i, get_collection ), hydrating); item.e.prev = prev && prev.e; item.e.next = next && next.e; if (prev === null) { if (!deferred2) { state2.first = item; } } else { prev.next = item; prev.e.next = item.e; } if (next !== null) { next.prev = item; next.e.prev = item.e; } return item; } finally { } } function move(item, next, anchor) { var end = item.next ? ( item.next.e.nodes_start ) : anchor; var dest = next ? ( next.e.nodes_start ) : anchor; var node = ( item.e.nodes_start ); while (node !== null && node !== end) { var next_node = ( get_next_sibling(node) ); dest.before(node); node = next_node; } } function link(state2, prev, next) { if (prev === null) { state2.first = next; } else { prev.next = next; prev.e.next = next && next.e; } if (next !== null) { next.prev = prev; next.e.prev = prev && prev.e; } } const whitespace = [..." \n\r\f \v\uFEFF"]; function to_class(value, hash, directives) { var classname = value == null ? "" : "" + value; if (directives) { for (var key in directives) { if (directives[key]) { classname = classname ? classname + " " + key : key; } else if (classname.length) { var len = key.length; var a = 0; while ((a = classname.indexOf(key, a)) >= 0) { var b = a + len; if ((a === 0 || whitespace.includes(classname[a - 1])) && (b === classname.length || whitespace.includes(classname[b]))) { classname = (a === 0 ? "" : classname.substring(0, a)) + classname.substring(b + 1); } else { a = b; } } } } } return classname === "" ? null : classname; } function to_style(value, styles) { return value == null ? null : String(value); } function set_class(dom, is_html, value, hash, prev_classes, next_classes) { var prev = dom.__className; if (prev !== value || prev === void 0) { var next_class_name = to_class(value, hash, next_classes); { if (next_class_name == null) { dom.removeAttribute("class"); } else { dom.className = next_class_name; } } dom.__className = value; } else if (next_classes && prev_classes !== next_classes) { for (var key in next_classes) { var is_present = !!next_classes[key]; if (prev_classes == null || is_present !== !!prev_classes[key]) { dom.classList.toggle(key, is_present); } } } return next_classes; } function set_style(dom, value, prev_styles, next_styles) { var prev = dom.__style; if (prev !== value) { var next_style_attr = to_style(value); { if (next_style_attr == null) { dom.removeAttribute("style"); } else { dom.style.cssText = next_style_attr; } } dom.__style = value; } return next_styles; } const IS_CUSTOM_ELEMENT = Symbol("is custom element"); const IS_HTML = Symbol("is html"); function set_attribute(element, attribute, value, skip_warning) { var attributes = get_attributes(element); if (attributes[attribute] === (attributes[attribute] = value)) return; if (attribute === "loading") { element[LOADING_ATTR_SYMBOL] = value; } if (value == null) { element.removeAttribute(attribute); } else if (typeof value !== "string" && get_setters(element).includes(attribute)) { element[attribute] = value; } else { element.setAttribute(attribute, value); } } function get_attributes(element) { return ( element.__attributes ??= { [IS_CUSTOM_ELEMENT]: element.nodeName.includes("-"), [IS_HTML]: element.namespaceURI === NAMESPACE_HTML } ); } var setters_cache = new Map(); function get_setters(element) { var cache_key = element.getAttribute("is") || element.nodeName; var setters = setters_cache.get(cache_key); if (setters) return setters; setters_cache.set(cache_key, setters = []); var descriptors; var proto = element; var element_proto = Element.prototype; while (element_proto !== proto) { descriptors = get_descriptors(proto); for (var key in descriptors) { if (descriptors[key].set) { setters.push(key); } } proto = get_prototype_of(proto); } return setters; } function stopPropagation(fn) { return function(...args) { var event2 = ( args[0] ); event2.stopPropagation(); return fn?.apply(this, args); }; } function init(immutable = false) { const context = ( component_context ); const callbacks = context.l.u; if (!callbacks) return; let props = () => deep_read_state(context.s); if (immutable) { let version = 0; let prev = ( {} ); const d = derived(() => { let changed = false; const props2 = context.s; for (const key in props2) { if (props2[key] !== prev[key]) { prev[key] = props2[key]; changed = true; } } if (changed) version++; return version; }); props = () => get(d); } if (callbacks.b.length) { user_pre_effect(() => { observe_all(context, props); run_all(callbacks.b); }); } user_effect(() => { const fns = untrack(() => callbacks.m.map(run)); return () => { for (const fn of fns) { if (typeof fn === "function") { fn(); } } }; }); if (callbacks.a.length) { user_effect(() => { observe_all(context, props); run_all(callbacks.a); }); } } function observe_all(context, props) { if (context.l.s) { for (const signal of context.l.s) get(signal); } props(); } let is_store_binding = false; function capture_store_binding(fn) { var previous_is_store_binding = is_store_binding; try { is_store_binding = false; return [fn(), is_store_binding]; } finally { is_store_binding = previous_is_store_binding; } } function prop(props, key, flags2, fallback) { var runes = !legacy_mode_flag || (flags2 & PROPS_IS_RUNES) !== 0; var bindable = (flags2 & PROPS_IS_BINDABLE) !== 0; var lazy = (flags2 & PROPS_IS_LAZY_INITIAL) !== 0; var fallback_value = ( fallback ); var fallback_dirty = true; var get_fallback = () => { if (fallback_dirty) { fallback_dirty = false; fallback_value = lazy ? untrack( fallback ) : ( fallback ); } return fallback_value; }; var setter; if (bindable) { var is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props; setter = get_descriptor(props, key)?.set ?? (is_entry_props && key in props ? (v) => props[key] = v : void 0); } var initial_value; var is_store_sub = false; if (bindable) { [initial_value, is_store_sub] = capture_store_binding(() => ( props[key] )); } else { initial_value = props[key]; } if (initial_value === void 0 && fallback !== void 0) { initial_value = get_fallback(); if (setter) { if (runes) props_invalid_value(); setter(initial_value); } } var getter; if (runes) { getter = () => { var value = ( props[key] ); if (value === void 0) return get_fallback(); fallback_dirty = true; return value; }; } else { getter = () => { var value = ( props[key] ); if (value !== void 0) { fallback_value = void 0; } return value === void 0 ? fallback_value : value; }; } if (runes && (flags2 & PROPS_IS_UPDATED) === 0) { return getter; } if (setter) { var legacy_parent = props.$$legacy; return ( (function(value, mutation) { if (arguments.length > 0) { if (!runes || !mutation || legacy_parent || is_store_sub) { setter(mutation ? getter() : value); } return value; } return getter(); }) ); } var overridden = false; var d = ((flags2 & PROPS_IS_IMMUTABLE) !== 0 ? derived : derived_safe_equal)(() => { overridden = false; return getter(); }); if (bindable) get(d); var parent_effect = ( active_effect ); return ( (function(value, mutation) { if (arguments.length > 0) { const new_value = mutation ? get(d) : runes && bindable ? proxy(value) : value; set(d, new_value); overridden = true; if (fallback_value !== void 0) { fallback_value = new_value; } return value; } if (is_destroying_effect && overridden || (parent_effect.f & DESTROYED) !== 0) { return d.v; } return get(d); }) ); } var _GM = (() => typeof GM != "undefined" ? GM : void 0)(); var _GM_getValue = (() => typeof GM_getValue != "undefined" ? GM_getValue : void 0)(); var _GM_info = (() => typeof GM_info != "undefined" ? GM_info : void 0)(); var _GM_openInTab = (() => typeof GM_openInTab != "undefined" ? GM_openInTab : void 0)(); var _GM_setValue = (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)(); const PID = { jd: ["2015895618"], taobao: [ "mm_117425171_2324550020_111391250310", "mm_117425171_21428696_71990812", "mm_117425171_33696257_277458675" ], tmall: [ "mm_117425171_2324550020_111391250310", "mm_117425171_21428696_71990812", "mm_117425171_33696257_277458675" ], vip: [ "a1bea5af456e316c7745ed3ca2a379e6", "f938d6787b301f8cd8d258aa477437a3", "41c6df95c56c4de075bf27fffb06af9f" ] }; const INFO_KEY = "h9485sexhrx74hs2gxn4553vxgntjkw"; const PLUGIN = "voucher"; function getScriptVersion() { if (typeof _GM_info !== "undefined" && _GM_info.script.version) { return _GM_info.script.version; } else if (typeof _GM !== "undefined" && _GM.info && _GM.info.script.version) { return _GM.info.script.version; } return "Unknown"; } function getEncryptInfo() { const user = getUser(); if (!user || !user.uuid) return null; const info = getInfo(); const data = `${user.uuid},${PLUGIN},${getScriptVersion()},${info.name || user.name || ""},${info.phone || user.phone || ""}`; const key = getInfoKey(); const encrypted = CryptoJS__namespace.AES.encrypt(data, key).toString(); return encrypted; } function signRequest(data, secret, timestamp, nonce) { const signData = { data, timestamp, nonce }; return CryptoJS__namespace.HmacSHA256(JSON.stringify(signData), secret).toString(); } function getInfo() { if (!window.location.hostname.includes("jd.com")) { return {}; } try { const cookies = document.cookie; const cookieArray = cookies.split(";"); let name = ""; let phone = ""; for (const cookie of cookieArray) { const [key, value] = cookie.trim().split("="); if (key === "unick") { name = decodeURIComponent(value); } else if (key === "mp") { phone = decodeURIComponent(value); } } return { name: name || void 0, phone: phone || void 0 }; } catch (error) { return {}; } } function generateUUID() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) { const r = Math.random() * 16 | 0; const v = c === "x" ? r : r & 3 | 8; return v.toString(16); }); } function getStore() { const defaultStore = { version: getScriptVersion(), user: { uuid: generateUUID() }, info_key: INFO_KEY, selectors: {}, transformLinks: {}, currentJumpedGoodsId: void 0, isFirstInstall: true, defaultLoading: true, metadata: { lastUpdated: Date.now(), checksum: "" } }; try { const stored = _GM_getValue("voucherStore", null); if (!stored) { const newStore = { ...defaultStore, isFirstInstall: true }; _GM_setValue("voucherStore", newStore); return newStore; } return stored; } catch (error) { return defaultStore; } } function setStore(store) { try { const currentStore = getStore(); const updatedStore = { ...currentStore, ...store, metadata: { ...currentStore.metadata, lastUpdated: Date.now() } }; _GM_setValue("voucherStore", updatedStore); } catch (error) { } } function initStore() { getStore(); } function getUser() { const store = getStore(); return store.user; } function getDefaultLoading() { const store = getStore(); return store.defaultLoading; } function setDefaultLoading(loading) { setStore({ defaultLoading: loading }); } function getInfoKey() { const store = getStore(); return store.info_key; } function getSelectors$1() { const store = getStore(); return store.selectors; } function setSelectors(selectors) { setStore({ selectors }); } function getTransformLink$1(goodsId) { const store = getStore(); const link2 = store.transformLinks[goodsId]; if (!link2) return null; const isExpired = isTransformLinkExpired$1(link2); return isExpired ? null : link2; } function setTransformLink(goodsId, link2, platform) { const store = getStore(); const now = Date.now(); const cachedLink = { ...link2, cachedAt: now, platform, expiresAt: now + 1 * 24 * 60 * 60 * 1e3 }; setStore({ transformLinks: { ...store.transformLinks, [goodsId]: cachedLink } }); } function getCurrentJumpedGoodsId() { const store = getStore(); return store.currentJumpedGoodsId; } function setCurrentJumpedGoodsId(goodsId) { setStore({ currentJumpedGoodsId: goodsId }); } function isTransformLinkExpired$1(cachedLink) { const now = Date.now(); return now > cachedLink.expiresAt; } async function openNewTab(url, active = true) { if (_GM_openInTab) { _GM_openInTab(url, { active }); } else { const a = document.createElement("a"); a.href = url; a.target = "_blank"; a.rel = "noreferrer"; document.body.appendChild(a); a.click(); document.body.removeChild(a); } } async function openWindow(url) { await openNewTab(url); } async function redirect(platform, url) { const href = window.location.href; const pids = PID[platform]; let flag = false; for (const pid of pids) { if (href.includes(pid)) { flag = true; break; } } if (!flag) { setDefaultLoading(false); await openWindow(url); window.close(); } else { setDefaultLoading(true); } } var root_1$3 = from_html(``); var root$3 = from_html(`
`); function Voucher_widget($$anchor, $$props) { push($$props, false); let transformLink = prop($$props, "transformLink", 8); function handleCouponClick() { if (transformLink().couponUrl) { openWindow(transformLink().couponUrl); } } init(); var div = root$3(); var div_1 = child(div); var div_2 = child(div_1); var text = child(div_2); var div_3 = sibling(div_2, 2); var text_1 = child(div_3); var div_4 = sibling(div_1, 2); var node = child(div_4); { var consequent = ($$anchor2) => { var button = root_1$3(); event("click", button, handleCouponClick); append($$anchor2, button); }; if_block(node, ($$render) => { if (deep_read_state(transformLink()), untrack(() => transformLink().couponUrl)) $$render(consequent); }); } template_effect(() => { set_text(text, `¥${(deep_read_state(transformLink()), untrack(() => transformLink().couponAmount || 0)) ?? ""}`); set_text(text_1, (deep_read_state(transformLink()), untrack(() => transformLink().couponInfo || "暂无优惠券"))); }); append($$anchor, div); pop(); } var root$2 = from_html(``); function No_coupon_widget($$anchor) { var div = root$2(); append($$anchor, div); } var root$1 = from_html(``); var root_1$1 = from_html(`