// ==UserScript== // @name BiliScrollReverser - 哔哩哔哩触控板滚动反转 // @namespace http://zhangmaimai.com/ // @version 3.0.3 // @author MaxChang3 // @description 优化 b 站视频音量调节在触控板上的体验。使用此脚本后,在 b 站视频全屏界面中,使用触控板向下滚动将减少音量。(未安装时为增大) // @license MIT // @icon https://www.bilibili.com/favicon.ico // @match https://www.bilibili.com/bangumi/play/* // @match https://www.bilibili.com/video/* // @match https://www.bilibili.com/list/* // @match https://www.bilibili.com/festival/* // @match https://www.bilibili.com/cheese/play/* // @grant GM_addStyle // @grant GM_getValue // @grant GM_info // @grant GM_registerMenuCommand // @grant GM_setValue // @run-at document-start // @downloadURL https://update.greasyfork.icu/scripts/432783/BiliScrollReverser%20-%20%E5%93%94%E5%93%A9%E5%93%94%E5%93%A9%E8%A7%A6%E6%8E%A7%E6%9D%BF%E6%BB%9A%E5%8A%A8%E5%8F%8D%E8%BD%AC.user.js // @updateURL https://update.greasyfork.icu/scripts/432783/BiliScrollReverser%20-%20%E5%93%94%E5%93%A9%E5%93%94%E5%93%A9%E8%A7%A6%E6%8E%A7%E6%9D%BF%E6%BB%9A%E5%8A%A8%E5%8F%8D%E8%BD%AC.meta.js // ==/UserScript== (function () { 'use strict'; const d=new Set;const e = async e=>{d.has(e)||(d.add(e),(t=>{typeof GM_addStyle=="function"?GM_addStyle(t):(document.head||document.documentElement).appendChild(document.createElement("style")).append(t);})(e));}; e(" dialog.svelte-1p4edfu{padding:0;border:none;border-radius:16px;height:auto;max-height:90vh;width:90%;max-width:600px;overflow:auto;position:fixed;-webkit-user-select:none;user-select:none;box-shadow:0 0 10px #0000001a}dialog.svelte-1p4edfu:not([open]){display:none}dialog.svelte-1p4edfu::backdrop{background:#0009}.inner.svelte-1p4edfu{width:100%;height:auto;background:#fff;border-radius:16px}.inner.svelte-1p4edfu:focus{outline:none}@media(max-width:768px){dialog.svelte-1p4edfu{width:95%;height:auto;max-height:95vh;border-radius:12px}.inner.svelte-1p4edfu{border-radius:12px}}main.svelte-xdgvle{--primary: #007bff;--primary-hover: #0056b3;--secondary: #6c757d;--secondary-hover: #545b62;--text: #2c3e50;--text-light: #7f8c8d;--bg-light: #f8f9fa;--border: #dee2e6;--success: #28a745;padding:20px;height:auto;font-family:system-ui,-apple-system,sans-serif;color:var(--text);line-height:1.5}.header.svelte-xdgvle{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;padding-bottom:16px;border-bottom:2px solid #ecf0f1}h1.svelte-xdgvle{margin:0;font-size:1.5rem;font-weight:600}.content.svelte-xdgvle{text-align:center}.option-group.svelte-xdgvle{display:flex;flex-direction:column;gap:16px;margin-bottom:16px}.option-btn.svelte-xdgvle{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:20px;background:#fff;border:2px solid var(--border);border-radius:12px;cursor:pointer;text-align:left}.option-btn.svelte-xdgvle:hover{background:var(--bg-light)}.option-btn.active.svelte-xdgvle{border-color:var(--primary);background:#f0f7ff}.badge.svelte-xdgvle{background:var(--primary);color:#fff;padding:4px 8px;border-radius:4px;font-size:.8rem;font-weight:600;white-space:nowrap}.btn-content.svelte-xdgvle{display:flex;flex-direction:column;gap:4px}.btn-title.svelte-xdgvle{font-weight:600;font-size:1.1rem}.btn-desc.svelte-xdgvle{color:var(--text-light);font-size:.9rem}.note.svelte-xdgvle{background:#fff3cd;color:#856404;padding:12px;border-radius:8px;font-size:.9rem;border:1px solid #ffeaa7}.instruction.svelte-xdgvle{background:#e3f2fd;color:#0c5460;padding:16px;border-radius:8px;margin-bottom:16px}.instruction.svelte-xdgvle p:where(.svelte-xdgvle){margin:0;font-size:1.1rem}.calibrate-wrapper.svelte-xdgvle{display:flex;flex-direction:column;gap:12px}.calibrate-panel.svelte-xdgvle{background:var(--bg-light);padding:16px;border-radius:12px;border:1px solid var(--border);animation:svelte-xdgvle-slideDown .2s ease-out}@keyframes svelte-xdgvle-slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.small-text.svelte-xdgvle{font-size:.85rem;color:var(--text-light);margin-top:8px}.calibrate-area.svelte-xdgvle{background:#e3f2fd;border:2px dashed #90caf9;border-radius:8px;padding:24px;display:flex;flex-direction:column;align-items:center;gap:12px;cursor:ns-resize;transition:all .2s;color:#1976d2;margin-bottom:16px}.calibrate-area.svelte-xdgvle:hover{background:#bbdefb;border-color:#64b5f6}.calibrate-icon.svelte-xdgvle{opacity:.8}.status.svelte-xdgvle{background:#fff;padding:16px;border-radius:8px;margin:16px 0;display:flex;flex-direction:column;gap:12px;border:1px solid var(--border)}.status-item.svelte-xdgvle{display:flex;justify-content:space-between;align-items:center}.label.svelte-xdgvle{font-weight:600;color:#495057}.value.svelte-xdgvle{font-family:monospace;background:#fff;padding:4px 8px;border-radius:4px;border:1px solid var(--border);font-size:1.1rem}.highlight.svelte-xdgvle{background:var(--success);color:#fff;border-color:var(--success)}.action-buttons.svelte-xdgvle{display:flex;justify-content:center;gap:12px}.btn.svelte-xdgvle{padding:12px 24px;border:none;border-radius:8px;cursor:pointer;font-weight:500;color:#fff;font-size:1rem}.btn.primary.svelte-xdgvle{background:var(--primary)}.btn.primary.svelte-xdgvle:hover:not(:disabled){background:var(--primary-hover)}.btn.secondary.svelte-xdgvle{background:var(--secondary)}.btn.secondary.svelte-xdgvle:hover{background:var(--secondary-hover)}.btn.svelte-xdgvle:disabled{opacity:.6;cursor:not-allowed;background:#dee2e6;color:#6c757d}.repo-link.svelte-xdgvle{display:flex;align-items:center;justify-content:center;opacity:.6;transition:opacity .2s}.repo-link.svelte-xdgvle:hover{opacity:1}.repo-link.svelte-xdgvle img:where(.svelte-xdgvle){border-radius:50%} "); 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 MANAGED_EFFECT = 1 << 24; 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 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 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`); } } const UNINITIALIZED = Symbol(); function svelte_boundary_reset_noop() { { console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`); } } 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 legacy_mode_flag = false; let tracing_mode_flag = false; function enable_legacy_mode_flag() { legacy_mode_flag = true; } 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); } } if (component !== void 0) { context.x = component; } context.i = true; component_context = context.p; return component ?? {}; } 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 effect2 = active_effect; if (effect2 === null) { active_reaction.f |= ERROR_VALUE; return error; } if ((effect2.f & EFFECT_RAN) === 0) { if ((effect2.f & BOUNDARY_EFFECT) === 0) { throw error; } effect2.b.error(error); } else { invoke_error_boundary(error, effect2); } } function invoke_error_boundary(error, effect2) { while (effect2 !== null) { if ((effect2.f & BOUNDARY_EFFECT) !== 0) { try { effect2.b.error(error); return; } catch (e) { error = e; } } effect2 = effect2.parent; } throw error; } const STATUS_MASK = -7169; function set_signal_status(signal, status) { signal.f = signal.f & STATUS_MASK | status; } function update_derived_status(derived2) { if ((derived2.f & CONNECTED) !== 0 || derived2.deps === null) { set_signal_status(derived2, CLEAN); } else { set_signal_status(derived2, MAYBE_DIRTY); } } function clear_marked(deps) { if (deps === null) return; for (const dep of deps) { if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) { continue; } dep.f ^= WAS_MARKED; clear_marked( dep.deps ); } } function defer_effect(effect2, dirty_effects, maybe_dirty_effects) { if ((effect2.f & DIRTY) !== 0) { dirty_effects.add(effect2); } else if ((effect2.f & MAYBE_DIRTY) !== 0) { maybe_dirty_effects.add(effect2); } clear_marked(effect2.deps); set_signal_status(effect2, CLEAN); } 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 = new Set(); #maybe_dirty_effects = new Set(); skipped_effects = new Set(); is_fork = false; is_deferred() { return this.is_fork || this.#blocking_pending > 0; } process(root_effects) { queued_root_effects = []; this.apply(); var effects = []; var render_effects = []; for (const root2 of root_effects) { this.#traverse_effect_tree(root2, effects, render_effects); } if (!this.is_fork) { this.#resolve(); } if (this.is_deferred()) { this.#defer_effects(render_effects); this.#defer_effects(effects); } else { current_batch = null; flush_queued_effects(render_effects); flush_queued_effects(effects); this.#deferred?.resolve(); } batch_values = null; } #traverse_effect_tree(root2, effects, render_effects) { root2.f ^= CLEAN; var effect2 = root2.first; var pending_boundary = null; while (effect2 !== null) { var flags2 = effect2.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(effect2); if (!skip && effect2.fn !== null) { if (is_branch) { effect2.f ^= CLEAN; } else if (pending_boundary !== null && (flags2 & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0) { pending_boundary.b.defer_effect(effect2); } else if ((flags2 & EFFECT) !== 0) { effects.push(effect2); } else if (is_dirty(effect2)) { if ((flags2 & BLOCK_EFFECT) !== 0) this.#dirty_effects.add(effect2); update_effect(effect2); } var child2 = effect2.first; if (child2 !== null) { effect2 = child2; continue; } } var parent = effect2.parent; effect2 = effect2.next; while (effect2 === null && parent !== null) { if (parent === pending_boundary) { pending_boundary = null; } effect2 = parent.next; parent = parent.parent; } } } #defer_effects(effects) { for (var i = 0; i < effects.length; i += 1) { defer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects); } } capture(source2, value) { if (value !== UNINITIALIZED && !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() { if (current_batch !== this) return; 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; 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) { var prev_queued_root_effects = queued_root_effects; queued_root_effects = []; 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, [], []); } batch.deactivate(); } queued_root_effects = prev_queued_root_effects; } } 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) { this.#maybe_dirty_effects.delete(e); 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.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(); if (DEV) ; } } 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 effect2 = effects[i++]; if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) { eager_block_effects = new Set(); update_effect(effect2); if (effect2.deps === null && effect2.first === null && effect2.nodes === null) { if (effect2.teardown === null && effect2.ac === null) { unlink_effect(effect2); } else { effect2.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 effect2 = last_scheduled_effect = signal; while (effect2.parent !== null) { effect2 = effect2.parent; var flags2 = effect2.f; if (is_flushing && effect2 === active_effect && (flags2 & BLOCK_EFFECT) !== 0 && (flags2 & HEAD_EFFECT) === 0) { return; } if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) { if ((flags2 & CLEAN) === 0) return; effect2.f ^= CLEAN; } } queued_root_effects.push(effect2); } 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; is_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; #dirty_effects = new Set(); #maybe_dirty_effects = new Set(); #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.is_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.is_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); } } #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.is_pending = false; } }); } #get_anchor() { var anchor = this.#anchor; if (this.is_pending) { this.#pending_anchor = create_text(); this.#anchor.before(this.#pending_anchor); anchor = this.#pending_anchor; } return anchor; } defer_effect(effect2) { defer_effect(effect2, this.#dirty_effects, this.#maybe_dirty_effects); } is_rendered() { return !this.is_pending && (!this.parent || this.parent.is_rendered()); } 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.is_pending = false; 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.clear(); this.#maybe_dirty_effects.clear(); 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.is_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.is_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, label, 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_rendered(); 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.f & DESTROYED) === 0 ? ( parent ) : null; } 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.wv = increment_write_version(); if (!current_batch?.is_fork || derived2.deps === null) { derived2.v = value; if (derived2.deps === null) { set_signal_status(derived2, CLEAN); return; } } } if (is_destroying_effect) { return; } if (batch_values !== null) { if (effect_tracking() || current_batch?.is_fork) { batch_values.set(derived2, value); } } else { update_derived_status(derived2); } } 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) { const derived2 = ( source2 ); if ((source2.f & DIRTY) !== 0) { execute_derived(derived2); } update_derived_status(derived2); } 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; var prev_is_updating_effect = is_updating_effect; set_is_updating_effect(true); const inspects = Array.from(eager_effects); try { for (const effect2 of inspects) { if ((effect2.f & CLEAN) !== 0) { set_signal_status(effect2, MAYBE_DIRTY); } if (is_dirty(effect2)) { update_effect(effect2); } } } finally { set_is_updating_effect(prev_is_updating_effect); } eager_effects.clear(); } 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 && 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(_, prop, descriptor) { if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) { state_descriptors_fixed(); } var s = sources.get(prop); if (s === void 0) { s = with_parent(() => { var s2 = state(descriptor.value); sources.set(prop, s2); return s2; }); } else { set(s, descriptor.value, true); } return true; }, deleteProperty(target, prop) { var s = sources.get(prop); if (s === void 0) { if (prop in target) { const s2 = with_parent(() => state(UNINITIALIZED)); sources.set(prop, s2); increment(version); } } else { set(s, UNINITIALIZED); increment(version); } return true; }, get(target, prop, receiver) { if (prop === STATE_SYMBOL) { return value; } var s = sources.get(prop); var exists = prop in target; if (s === void 0 && (!exists || get_descriptor(target, prop)?.writable)) { s = with_parent(() => { var p = proxy(exists ? target[prop] : UNINITIALIZED); var s2 = state(p); return s2; }); sources.set(prop, s); } if (s !== void 0) { var v = get(s); return v === UNINITIALIZED ? void 0 : v; } return Reflect.get(target, prop, receiver); }, getOwnPropertyDescriptor(target, prop) { var descriptor = Reflect.getOwnPropertyDescriptor(target, prop); if (descriptor && "value" in descriptor) { var s = sources.get(prop); if (s) descriptor.value = get(s); } else if (descriptor === void 0) { var source2 = sources.get(prop); var value2 = source2?.v; if (source2 !== void 0 && value2 !== UNINITIALIZED) { return { enumerable: true, configurable: true, value: value2, writable: true }; } } return descriptor; }, has(target, prop) { if (prop === STATE_SYMBOL) { return true; } var s = sources.get(prop); var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop); if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop)?.writable)) { if (s === void 0) { s = with_parent(() => { var p = has ? proxy(target[prop]) : UNINITIALIZED; var s2 = state(p); return s2; }); sources.set(prop, s); } var value2 = get(s); if (value2 === UNINITIALIZED) { return false; } } return has; }, set(target, prop, value2, receiver) { var s = sources.get(prop); var has = prop in target; if (is_proxied_array && prop === "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, prop)?.writable) { s = with_parent(() => state(void 0)); set(s, proxy(value2)); sources.set(prop, s); } } else { has = s.v !== UNINITIALIZED; var p = with_parent(() => proxy(value2)); set(s, p); } var descriptor = Reflect.getOwnPropertyDescriptor(target, prop); if (descriptor?.set) { descriptor.set.call(receiver, value2); } if (!has) { if (is_proxied_array && typeof prop === "string") { var ls = ( sources.get("length") ); var n = Number(prop); 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 sibling(node, count = 1, is_text = false) { let next_sibling = node; while (count--) { next_sibling = get_next_sibling(next_sibling); } { return next_sibling; } } 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(effect2, parent_effect) { var parent_last = parent_effect.last; if (parent_last === null) { parent_effect.last = parent_effect.first = effect2; } else { parent_last.next = effect2; effect2.prev = parent_last; parent_effect.last = effect2; } } function create_effect(type, fn, sync) { var parent = active_effect; if (parent !== null && (parent.f & INERT) !== 0) { type |= INERT; } var effect2 = { ctx: component_context, deps: null, nodes: null, f: type | DIRTY | CONNECTED, first: null, fn, last: null, next: null, parent, b: parent && parent.b, prev: null, teardown: null, wv: 0, ac: null }; if (sync) { try { update_effect(effect2); effect2.f |= EFFECT_RAN; } catch (e2) { destroy_effect(effect2); throw e2; } } else if (fn !== null) { schedule_effect(effect2); } var e = effect2; if (sync && e.deps === null && e.teardown === null && e.nodes === 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 effect2; } function effect_tracking() { return active_reaction !== null && !untracking; } function teardown(fn) { const effect2 = create_effect(RENDER_EFFECT, null, false); set_signal_status(effect2, CLEAN); effect2.teardown = fn; return effect2; } 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 effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn, true); return (options = {}) => { return new Promise((fulfil) => { if (options.outro) { pause_effect(effect2, () => { destroy_effect(effect2); fulfil(void 0); }); } else { destroy_effect(effect2); fulfil(void 0); } }); }; } function effect(fn) { return create_effect(EFFECT, fn, 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 = []) { flatten(blockers, sync, async, (values) => { create_effect(RENDER_EFFECT, () => fn(...values.map(get)), true); }); } function block(fn, flags2 = 0) { var effect2 = create_effect(BLOCK_EFFECT | flags2, fn, true); return effect2; } function branch(fn) { return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn, true); } function execute_effect_teardown(effect2) { var teardown2 = effect2.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 effect2 = signal.first; signal.first = signal.last = null; while (effect2 !== null) { const controller = effect2.ac; if (controller !== null) { without_reactive_context(() => { controller.abort(STALE_REACTION); }); } var next = effect2.next; if ((effect2.f & ROOT_EFFECT) !== 0) { effect2.parent = null; } else { destroy_effect(effect2, remove_dom); } effect2 = next; } } function destroy_block_effect_children(signal) { var effect2 = signal.first; while (effect2 !== null) { var next = effect2.next; if ((effect2.f & BRANCH_EFFECT) === 0) { destroy_effect(effect2); } effect2 = next; } } function destroy_effect(effect2, remove_dom = true) { var removed = false; if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes !== null && effect2.nodes.end !== null) { remove_effect_dom( effect2.nodes.start, effect2.nodes.end ); removed = true; } destroy_effect_children(effect2, remove_dom && !removed); remove_reactions(effect2, 0); set_signal_status(effect2, DESTROYED); var transitions = effect2.nodes && effect2.nodes.t; if (transitions !== null) { for (const transition of transitions) { transition.stop(); } } execute_effect_teardown(effect2); var parent = effect2.parent; if (parent !== null && parent.first !== null) { unlink_effect(effect2); } effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes = effect2.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(effect2) { var parent = effect2.parent; var prev = effect2.prev; var next = effect2.next; if (prev !== null) prev.next = next; if (next !== null) next.prev = prev; if (parent !== null) { if (parent.first === effect2) parent.first = next; if (parent.last === effect2) parent.last = prev; } } function pause_effect(effect2, callback, destroy = true) { var transitions = []; pause_children(effect2, transitions, true); var fn = () => { if (destroy) destroy_effect(effect2); if (callback) callback(); }; var remaining = transitions.length; if (remaining > 0) { var check = () => --remaining || fn(); for (var transition of transitions) { transition.out(check); } } else { fn(); } } function pause_children(effect2, transitions, local) { if ((effect2.f & INERT) !== 0) return; effect2.f ^= INERT; var t = effect2.nodes && effect2.nodes.t; if (t !== null) { for (const transition of t) { if (transition.is_global || local) { transitions.push(transition); } } } var child2 = effect2.first; while (child2 !== null) { var sibling2 = child2.next; var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0 && (effect2.f & BLOCK_EFFECT) !== 0; pause_children(child2, transitions, transparent ? local : false); child2 = sibling2; } } function resume_effect(effect2) { resume_children(effect2, true); } function resume_children(effect2, local) { if ((effect2.f & INERT) === 0) return; effect2.f ^= INERT; if ((effect2.f & CLEAN) === 0) { set_signal_status(effect2, DIRTY); schedule_effect(effect2); } var child2 = effect2.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; } var t = effect2.nodes && effect2.nodes.t; if (t !== null) { for (const transition of t) { if (transition.is_global || local) { transition.in(); } } } } function move_effect(effect2, fragment) { if (!effect2.nodes) return; var node = effect2.nodes.start; var end = effect2.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(effect2) { active_effect = effect2; } 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 ); 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, effect2, 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, effect2, false ); } else if (effect2 === 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 (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))) { var derived2 = ( dependency ); if ((derived2.f & CONNECTED) !== 0) { derived2.f ^= CONNECTED; derived2.f &= ~WAS_MARKED; } update_derived_status(derived2); destroy_derived_effects(derived2); remove_reactions(derived2, 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(effect2) { var flags2 = effect2.f; if ((flags2 & DESTROYED) !== 0) { return; } set_signal_status(effect2, CLEAN); var previous_effect = active_effect; var was_updating_effect = is_updating_effect; active_effect = effect2; is_updating_effect = true; try { if ((flags2 & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) { destroy_block_effect_children(effect2); } else { destroy_effect_children(effect2); } execute_effect_teardown(effect2); var teardown2 = update_reaction(effect2); effect2.teardown = typeof teardown2 === "function" ? teardown2 : null; effect2.wv = write_version; var dep; if (DEV && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.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 && old_values.has(signal)) { return old_values.get(signal); } if (is_derived) { var derived2 = ( signal ); if (is_destroying_effect) { 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; } var should_connect = (derived2.f & CONNECTED) === 0 && !untracking && active_reaction !== null && (is_updating_effect || (active_reaction.f & CONNECTED) !== 0); var is_new = derived2.deps === null; if (is_dirty(derived2)) { if (should_connect) { derived2.f |= CONNECTED; } update_derived(derived2); } if (should_connect && !is_new) { reconnect(derived2); } } 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; } } 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 prop = value[key]; if (typeof prop === "object" && prop && STATE_SYMBOL in prop) { deep_read(prop); } } } } 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 PASSIVE_EVENTS = ["touchstart", "touchmove"]; function is_passive_event(name) { return PASSIVE_EVENTS.includes(name); } 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 effect2 = ( active_effect ); if (effect2.nodes === null) { effect2.nodes = { start, end, a: null, t: null }; } } function from_html(content, flags2) { var node; var has_start = !content.startsWith(""); return () => { if (node === void 0) { node = create_fragment_from_html(has_start ? content : "" + content); node = get_first_child(node); } var clone = ( is_firefox ? document.importNode(node, true) : node.cloneNode(true) ); { assign_nodes(clone, clone); } return clone; }; } function text(value = "") { { var t = create_text(value + ""); assign_nodes(t, t); return t; } } function append(anchor, dom) { if (anchor === null) { return; } anchor.before( dom ); } function set_text(text2, value) { var str = value == null ? "" : typeof value === "object" ? value + "" : value; if (str !== (text2.__t ??= text2.nodeValue)) { text2.__t = str; text2.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(); #outroing = new Set(); #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); this.#outroing.delete(key); } 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, effect2] of this.#onscreen) { if (k === key || this.#outroing.has(k)) continue; const on_destroy = () => { const keys = Array.from(this.#batches.values()); if (keys.includes(k)) { var fragment = document.createDocumentFragment(); move_effect(effect2, fragment); fragment.append(create_text()); this.#offscreen.set(k, { effect: effect2, fragment }); } else { destroy_effect(effect2); } this.#outroing.delete(k); this.#onscreen.delete(k); }; if (this.#transition || !onscreen) { this.#outroing.add(k); pause_effect(effect2, 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 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 slot(anchor, $$props, name, slot_props, fallback_fn) { var slot_fn = $$props.$$slots?.[name]; var is_interop = false; if (slot_fn === true) { slot_fn = $$props["children"]; is_interop = true; } if (slot_fn === void 0) ; else { slot_fn(anchor, is_interop ? () => slot_props : slot_props); } } function to_class(value, hash, directives) { var classname = value == null ? "" : "" + value; { classname = classname ? classname + " " + hash : hash; } return classname === "" ? null : classname; } 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); { if (next_class_name == null) { dom.removeAttribute("class"); } else { dom.className = next_class_name; } } dom.__className = value; } return next_classes; } function bind_prop(props, prop, value) { var desc = get_descriptor(props, prop); if (desc && desc.set) { props[prop] = value; teardown(() => { props[prop] = null; }); } } function is_bound_this(bound_value, element_or_component) { return bound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component; } function bind_this(element_or_component = {}, update, get_value, get_parts) { effect(() => { var old_parts; var parts; render_effect(() => { old_parts = parts; parts = []; untrack(() => { if (element_or_component !== get_value(...parts)) { update(element_or_component, ...parts); if (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) { update(null, ...old_parts); } } }); }); return () => { queue_micro_task(() => { if (parts && is_bound_this(get_value(...parts), element_or_component)) { update(null, ...parts); } }); }; }); return element_or_component; } 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(); } 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 init_update_callbacks(context) { var l = ( context.l ); return l.u ??= { a: [], b: [], m: [] }; } const PUBLIC_VERSION = "5"; if (typeof window !== "undefined") { ((window.__svelte ??= {}).v ??= new Set()).add(PUBLIC_VERSION); } enable_legacy_mode_flag(); var _GM_getValue = (() => typeof GM_getValue != "undefined" ? GM_getValue : void 0)(); var _GM_info = (() => typeof GM_info != "undefined" ? GM_info : void 0)(); var _GM_registerMenuCommand = (() => typeof GM_registerMenuCommand != "undefined" ? GM_registerMenuCommand : void 0)(); var _GM_setValue = (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)(); const getMouseMinDelta = () => _GM_getValue("MOUSE_MIN", void 0); const setMouseMinDelta = (number) => _GM_setValue("MOUSE_MIN", number); const { name: scriptname, version: scriptversion } = _GM_info.script; const log = (logMethod, tag, ...args) => { const colors = { log: "#2c3e50", error: "#ff4500" }; const fontFamily = "font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;"; console[logMethod]( `%c ${scriptname} %c v${scriptversion} %c ${tag} `, `padding: 2px 6px; border-radius: 3px 0 0 3px; color: #fff; background: #FF6699; font-weight: bold; ${fontFamily}`, `padding: 2px 6px; color: #fff; background: #FF9999; font-weight: bold; ${fontFamily}`, `padding: 2px 6px; border-radius: 0 3px 3px 0; color: #fff; background: ${colors[logMethod]}; font-weight: bold; ${fontFamily}`, ...args ); }; const logger = { log: (...args) => log("log", "日志", ...args), error: (...args) => log("error", "错误", ...args) }; let MOUSE_MIN = getMouseMinDelta() || -1; let container; logger.log(MOUSE_MIN === -1 ? "简单模式" : "校准模式"); logger.log(`阈值: ${MOUSE_MIN}`); const updateMouseMinDelta = (val) => { MOUSE_MIN = val ?? -1; logger.log(`更新阈值: ${MOUSE_MIN}`); }; const isFullScreen = () => { if (!container) container = player.getElements().container; return !!document.fullscreenElement || container.dataset.screen === "web"; }; const isTrackpad = (wheelEvent) => { if (MOUSE_MIN === -1) return Math.abs(wheelEvent.deltaY) < 100; return Math.abs(wheelEvent.deltaY) !== MOUSE_MIN && Number.isInteger(wheelEvent.deltaY * 2); }; var root = from_html(`
`); function Popup($$anchor, $$props) { push($$props, false); let dialog = mutable_source(); const showModal = () => { get(dialog).showModal(); document.body.style.overflow = "hidden"; }; const closeModal = () => { get(dialog).close(); document.body.style.overflow = ""; }; onMount(() => { showModal(); const handleEscape = (e) => { if (e.key === "Escape") { e.preventDefault(); closeModal(); } }; get(dialog).addEventListener("keydown", handleEscape); const handleBackdropClick = (e) => { if (e.target === get(dialog)) { closeModal(); } }; get(dialog).addEventListener("click", handleBackdropClick); return () => { get(dialog)?.removeEventListener("keydown", handleEscape); get(dialog)?.removeEventListener("click", handleBackdropClick); }; }); var $$exports = { showModal, closeModal }; init(); var div = root(); var dialog_1 = child(div); var div_1 = child(dialog_1); var node = child(div_1); slot(node, $$props, "default", {}); bind_this(dialog_1, ($$value) => set(dialog, $$value), () => get(dialog)); append($$anchor, div); bind_prop($$props, "showModal", showModal); bind_prop($$props, "closeModal", closeModal); return pop($$exports); } var root_3 = from_html(`已启用`); var root_2 = from_html(``); var root_7 = from_html(`已启用`); var root_4 = from_html(``); var root_8 = from_html(`请使用最小刻度滚动鼠标滚轮
请不要快速连续滚动,优先选择多数情况下出现的最小整数值。