Fancy Text Data Library

Biblioteca de datos para texto decorativo, ASCII mojis y efectos glitch

Version vom 17.08.2025. Aktuellste Version

Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greasyforks.org/scripts/546207/1643787/Fancy%20Text%20Data%20Library.js

// ==UserScript==
// @name         Fancy Text Data Library
// @namespace    fancy-text-library
// @version      1.0
// @description  Biblioteca de datos para texto decorativo, ASCII mojis y efectos glitch
// @author       FancyText-Author
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';
    
    // DATOS CONVERTIDOS
    const DATA = {
        FANCY_TEXT_MAPS: {
            'script': { 'A': '𝒜', 'B': 'ℬ', 'C': '𝒞', 'D': '𝒟', 'E': 'ℰ', 'F': 'ℱ', 'G': '𝒢', 'H': 'ℋ', 'I': 'ℐ', 'J': '𝒥', 'K': '𝒦', 'L': 'ℒ', 'M': 'ℳ', 'N': '𝒩', 'O': '𝒪', 'P': '𝒫', 'Q': '𝒬', 'R': 'ℛ', 'S': '𝒮', 'T': '𝒯', 'U': '𝒰', 'V': '𝒱', 'W': '𝒲', 'X': '𝒳', 'Y': '𝒴', 'Z': '𝒵', 'a': '𝒶', 'b': '𝒷', 'c': '𝒸', 'd': '𝒹', 'e': 'ℯ', 'f': '𝒻', 'g': '𝑔', 'h': '𝒽', 'i': '𝒾', 'j': '𝒿', 'k': '𝓀', 'l': '𝓁', 'm': '𝓂', 'n': '𝓃', 'o': 'ℴ', 'p': '𝓅', 'q': '𝓆', 'r': '𝓇', 's': '𝓈', 't': '𝓉', 'u': '𝓊', 'v': '𝓋', 'w': '𝓌', 'x': '𝓍', 'y': '𝓎', 'z': '𝓏', '0': '𝟢', '1': '𝟣', '2': '𝟤', '3': '𝟥', '4': '𝟦', '5': '𝟧', '6': '𝟨', '7': '𝟩', '8': '𝟪', '9': '𝟫' },
            'fraktur': { 'A': '𝔄', 'B': '𝔅', 'C': 'ℭ', 'D': '𝔇', 'E': '𝔈', 'F': '𝔉', 'G': '𝔊', 'H': 'ℌ', 'I': 'ℑ', 'J': '𝔍', 'K': '𝔎', 'L': '𝔏', 'M': '𝔐', 'N': '𝔑', 'O': '𝔒', 'P': '𝔓', 'Q': '𝔔', 'R': 'ℜ', 'S': '𝔖', 'T': '𝔗', 'U': '𝔘', 'V': '𝔙', 'W': '𝔚', 'X': '𝔛', 'Y': '𝔜', 'Z': 'ℨ', 'a': '𝔞', 'b': '𝔟', 'c': '𝔠', 'd': '𝔡', 'e': '𝔢', 'f': '𝔣', 'g': '𝔤', 'h': '𝔥', 'i': '𝔦', 'j': '𝔧', 'k': '𝔨', 'l': '𝔩', 'm': '𝔪', 'n': '𝔫', 'o': '𝔬', 'p': '𝔭', 'q': '𝔮', 'r': '𝔯', 's': '𝔰', 't': '𝔱', 'u': '𝔲', 'v': '𝔳', 'w': '𝔴', 'x': '𝔵', 'y': '𝔶', 'z': '𝔷', '0': '𝟘', '1': '𝟙', '2': '𝟚', '3': '𝟛', '4': '𝟜', '5': '𝟝', '6': '𝟞', '7': '𝟩', '8': '𝟪', '9': '𝟡' },
            'monospace': { 'A': '𝙰', 'B': '𝙱', 'C': '𝙲', 'D': '𝙳', 'E': '𝙴', 'F': '𝙵', 'G': '𝙶', 'H': '𝙷', 'I': '𝙸', 'J': '𝙹', 'K': '𝙺', 'L': '𝙻', 'M': '𝙼', 'N': '𝙽', 'O': '𝙾', 'P': '𝙿', 'Q': '𝚀', 'R': '𝚁', 'S': '𝚂', 'T': '𝚃', 'U': '𝚄', 'V': '𝚅', 'W': '𝚆', 'X': '𝚇', 'Y': '𝚈', 'Z': '𝚉', 'a': '𝚊', 'b': '𝚋', 'c': '𝚌', 'd': '𝚍', 'e': '𝚎', 'f': '𝚏', 'g': '𝚐', 'h': '𝚑', 'i': '𝚒', 'j': '𝚓', 'k': '𝚔', 'l': '𝚕', 'm': '𝚖', 'n': '𝚗', 'o': '𝚘', 'p': '𝚙', 'q': '𝚚', 'r': '𝚛', 's': '𝚜', 't': '𝚝', 'u': '𝚞', 'v': '𝚟', 'w': '𝚠', 'x': '𝚡', 'y': '𝚢', 'z': '𝚣', '0': '𝟶', '1': '𝟷', '2': '𝟸', '3': '𝟹', '4': '𝟺', '5': '𝟻', '6': '𝟼', '7': '𝟽', '8': '𝟾', '9': '𝟿' },
            'bold': { 'A': '𝗔', 'B': '𝗕', 'C': '𝗖', 'D': '𝗗', 'E': '𝗘', 'F': '𝗙', 'G': '𝗚', 'H': '𝗛', 'I': '𝗜', 'J': '𝗝', 'K': '𝗞', 'L': '𝗟', 'M': '𝗠', 'N': '𝗡', 'O': '𝗢', 'P': '𝗣', 'Q': '𝗤', 'R': '𝗥', 'S': '𝗦', 'T': '𝗧', 'U': '𝗨', 'V': '𝗩', 'W': '𝗪', 'X': '𝗫', 'Y': '𝗬', 'Z': '𝗭', 'a': '𝗮', 'b': '𝗯', 'c': '𝗰', 'd': '𝗱', 'e': '𝗲', 'f': '𝗳', 'g': '𝗴', 'h': '𝗵', 'i': '𝗶', 'j': '𝗷', 'k': '𝗸', 'l': '𝗹', 'm': '𝗺', 'n': '𝗻', 'o': '𝗼', 'p': '𝗽', 'q': '𝗾', 'r': '𝗿', 's': '𝘀', 't': '𝘁', 'u': '𝘂', 'v': '𝘃', 'w': '𝘄', 'x': '𝘅', 'y': '𝘆', 'z': '𝘇', '0': '𝟬', '1': '𝟭', '2': '𝟮', '3': '𝟯', '4': '𝟰', '5': '𝟱', '6': '𝟲', '7': '𝟳', '8': '𝟴', '9': '𝟵' },
            'italic': { 'A': '𝘈', 'B': '𝘉', 'C': '𝘊', 'D': '𝘋', 'E': '𝘌', 'F': '𝘍', 'G': '𝘎', 'H': '𝘏', 'I': '𝘐', 'J': '𝘑', 'K': '𝘒', 'L': '𝘓', 'M': '𝘔', 'N': '𝘕', 'O': '𝘖', 'P': '𝘗', 'Q': '𝘘', 'R': '𝘙', 'S': '𝘚', 'T': '𝘛', 'U': '𝘜', 'V': '𝘝', 'W': '𝘞', 'X': '𝘟', 'Y': '𝘠', 'Z': '𝘡', 'a': '𝘢', 'b': '𝘣', 'c': '𝘤', 'd': '𝘥', 'e': '𝘦', 'f': '𝘧', 'g': '𝘨', 'h': '𝘩', 'i': '𝘪', 'j': '𝘫', 'k': '𝘬', 'l': '𝘭', 'm': '𝘮', 'n': '𝘯', 'o': '𝘰', 'p': '𝘱', 'q': '𝘲', 'r': '𝘳', 's': '𝘴', 't': '𝘵', 'u': '𝘶', 'v': '𝘷', 'w': '𝘸', 'x': '𝘹', 'y': '𝘺', 'z': '𝘻' }
        },
        
        ASCII_MOJIS: {
            'Saludos y Caras': ['(•◡•)/', '(* ^ ω ^)', '(´ ∀ ` *)', '(─‿‿─)', '(⌒‿⌒)', '(*¯︶¯*)', '(o^▽^o)', '٩(◕‿◕。)۶', '\(٥⁀▽⁀ )/', '(*°▽°*)', '╰(▔∀▔)╯', 'ヽ(>∀<☆)ノ', '(✧ω✧)', '(´。• ᵕ •。`)', '( ´ ▽ ` )', '( ̄▽ ̄)', '( ´ ω ` )', '(*´▽`*)', '٩(。•́‿•̀。)۶', '(*¯ ³¯*)', '( ´ ▽ ` )ノ', '( ´ ▽ ` )b', '(^▽^)', '( ̄ω ̄)', '(*•ω•*)', 'σ(≧ε≦σ)'],
            'Shrugs y Duda': ['¯\\\\_(ツ)_/¯', '┐( ´ д ` )┌', 'ヽ(ー_ー)ノ', '┐( ̄ヘ ̄)┌', '┐( ´ , ` )┌', 'ʅ(°_°)ʃ', '┐( ̄~ ̄)┌', 'ლ(ಠ_ಠლ)', '┐(˘_˘)┌', 'ლ(¯ロ¯"ლ)', '┐( ´・_・`)┌', '┐(\'~` )┌'],
            'Amor y Afecto': ['(。♥‿♥。)', '(´ ε ` )♡', '(´• ω •`) ♡', '(ღ˘⌣˘ღ)', '♥( ´ ▽ ` )ノ', '(♡ >ω< ♡)', '(´,,•ω•,,)♡', '(´ ω `♡)', '(´。• ᵕ •。`) ♡', '( ´・ω・)ノ(._.`)', '(づ ̄ ³ ̄)づ', '( T_T)\(^-^ )', '(づ ◕‿◕ )づ', '(づ。◕‿‿◕。)づ', '(づ  ̄ ³ ̄)づ', '(*^3^)/~♡', '(ノ´ з `)ノ', '(´ε` )', '(´,,•ω•,,)'],
            'Tristeza y Llanto': ['( ´•︵•` )', '(。•́︿•̀。)', '(T_T)', '( ; ω ; )', '(个_个)', '(ಥ_ಥ)', '(╥_╥)', '(o; T ω T)o', '。・゚゚*(>д<)*゚゚・。', '( ; _ ; )', '(ノ_<。)', '(´-ω-`)', '( T ... T )', '( ; ´ - ` A``)', '(´ ` )'],
            'Enojo y Frustración': ['(#`Д´)', '( ` ω ´ )', 'ヽ( `д´*)ノ', '( `ε´ )', '(#`д´)', '(・`ω´・)', '( ` ´ )', '( ` A ´ )ノ', '(#`д´)ノ', '(#`皿´)', '(凸`д´)凸', '(╯`□´)╯', '(╯`д´)╯', '(╯°□°)╯︵ ┻━┻', '┬─┬ノ( `Д´ノ)', '(-`д´-)', '(눈_눈)', '( ̄^ ̄)', '( ` , ´ )', '( ̄  ̄)'],
            'Animales': ['( ̄(エ) ̄)', '( ´(oo)` )', '(=`ω´=)', 'ଲ(ⓛ ω ⓛ)ଲ', '(^=◕ᴥᴥ^)', 'ଲ(ⓛ ω ⓛ)ଲ', '(V) (;,;) (V)', '(V) (・ω・) (V)', '<コ:彡', '~>`)~~~', '~<`)))彡', 'くコ:彡', '/(・ × ・)\', '(´・(oo)・`)', '(´(oo)`)', '(^._.^)ノ', '( : ౦ ‸ ౦ : )', '(U・x・U)', '三|*´ω`)ノ', '(´・(oo)・`)', 'ଲ(ⓛ ω ⓛ)ଲ'],
            'Especiales y Otros': ['(⁄ ⁄•⁄ω⁄•⁄ ⁄)', '( O . O )', '(°°)~', '( ☉_☉)', '(⊙_⊙)', '(⊙_⊙)', '( ̄д ̄)', '(ノ°▽°)ノ', '(☞゚∀゚)☞', '☜(゚∀゚☜)', '┗( T_T )┛', '(☞゚ヮ゚)☞', '♪~ ᕕ(ᐛ)ᕗ', 'ᕕ( ᐛ )ᕗ', 'ヾ(⌐■_■)ノ♪', '\(゚ー゚\)', '(/゚ー゚)/', '(~ ̄▽ ̄)~', '(~o ̄3 ̄)~', '( ̄ω ̄)', '~( ´ ` )~', '( ´ー`)', '( ´_ゝ`)', '( ̄。 ̄)', '( ̄~ ̄)', '(* ̄m ̄)', '( ´_ゝ`)', '( ̄~ ̄)', '( ̄。 ̄)', '( ̄(エ) ̄)ノ']
        },

        GLITCH_TEXT_STRINGS: {
            'weird': '𒈙𒈙𒈙𒈙𒈙𒈙𒈙𒈙𒈙𒈙𒈙𒈙𒈙𒈙𒈙',
            'corrupted': '░▒▓██▓▒░░▒▓██▓▒░░▒▓██▓▒░░▒▓██▓▒░░▒▓██▓▒░░▒▓██▓▒░░▒▓██▓▒░░▒▓██▓▒░░▒▓██▓▒░░▒▓█',
            'glitch': '𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫',
            'distorted': 'ஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔஔ',
            'wow': '꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅꧅',
        'nyan': '┈┈╭━━━━━━╮☆\n┈┈┃╳╳╳▕╲▂▂╱▏\n┈┈┃╳╳╳▕    ▏▍▕▍▏   ┊☆\n╰━┫╳╳╳▕▏    ╰┻╯    ┊\n┈┈┃╳╳╳╳╲▂▂╱\n☆┊╰┳┳━━┳┳╯┊┊☆',
        'pika': '  ▼ ̄>―< ̄▼            \n   /  ๑⚈ ․̫ ⚈๑)⚡⚡\n  (   |つ   づ)',
        'tiger': '┈┈▕▔╲┈┈┈╱▔▏┈┈\n┈┈▕┃╲▔▔▔╲┃▏┈┈\n┈┈╱┊┳👁╮╭👁┳▏┈┈\n┈╱┊╲┊▔┊┊▔┊▏┈┈\n╱┊┊▕┊╱◥◤╲┊▏┈┈\n┊┊┊┊╲╲╱╲╱╱┈┈┈\n┊┊┊┊┊▔▔▔▔▏┈┈┈',
        'cool cat': '┈┈┈┈┈┈^  ^ \n┈┈┈┈┈┈(•ㅅ•)☆\n    _ノ ヽ ノ\  __\n /    `/ ⌒Y⌒ Y    ヽ\n(     (三ヽ人     /        |',
        'hi box': '⠀⠀⠀⠀/)_/)☆ Hello~\n⠀⠀/(๑^᎑^๑)っ \\n/| ̄∪ ̄  ̄ |\/\n⠀|_____|/'
        }
    };
    
    // FUNCIONES DE UTILIDAD CORREGIDAS
    window.LIBRERIA_DATOS = {
        // Obtener todos los datos de forma segura
        getData: function() {
            try {
                return JSON.parse(JSON.stringify(DATA));
            } catch (error) {
                console.error('❌ Error al obtener datos:', error);
                return {};
            }
        },
        
        // Filtrar datos con diferentes tipos de filtros
        parseData: function(filter) {
            try {
                if (typeof filter === 'function') {
                    const result = {};
                    for (const [key, value] of Object.entries(DATA)) {
                        if (typeof value === 'object' && value !== null) {
                            result[key] = {};
                            for (const [subKey, subValue] of Object.entries(value)) {
                                if (Array.isArray(subValue)) {
                                    result[key][subKey] = subValue.filter(filter);
                                } else if (typeof subValue === 'object' && subValue !== null) {
                                    result[key][subKey] = {};
                                    for (const [itemKey, itemValue] of Object.entries(subValue)) {
                                        if (filter(itemValue)) {
                                            result[key][subKey][itemKey] = itemValue;
                                        }
                                    }
                                } else if (filter(subValue)) {
                                    result[key][subKey] = subValue;
                                }
                            }
                        } else if (filter(value)) {
                            result[key] = value;
                        }
                    }
                    return result;
                } else if (typeof filter === 'string' || filter instanceof RegExp) {
                    const regex = filter instanceof RegExp ? filter : new RegExp(filter, 'i');
                    return this.parseData(item => regex.test(String(item)));
                }
                return this.getData();
            } catch (error) {
                console.error('❌ Error al filtrar datos:', error);
                return {};
            }
        },
        
        // Obtener elemento aleatorio de toda la biblioteca
        getRandomItem: function() {
            try {
                const allItems = [];
                
                // Recolectar caracteres fancy
                for (const [mapName, charMap] of Object.entries(DATA.FANCY_TEXT_MAPS)) {
                    for (const [char, fancyChar] of Object.entries(charMap)) {
                        allItems.push({ 
                            type: 'fancy_char', 
                            style: mapName, 
                            char: char, 
                            fancyChar: fancyChar 
                        });
                    }
                }
                
                // Recolectar ASCII mojis
                for (const [category, mojis] of Object.entries(DATA.ASCII_MOJIS)) {
                    for (const moji of mojis) {
                        allItems.push({ 
                            type: 'ascii_moji', 
                            category: category, 
                            moji: moji 
                        });
                    }
                }
                
                // Recolectar strings glitch
                for (const [type, text] of Object.entries(DATA.GLITCH_TEXT_STRINGS)) {
                    allItems.push({ 
                        type: 'glitch_text', 
                        glitchType: type, 
                        text: text 
                    });
                }
                
                if (allItems.length === 0) {
                    console.warn('⚠️ No hay elementos disponibles');
                    return null;
                }
                
                const randomIndex = Math.floor(Math.random() * allItems.length);
                return allItems[randomIndex];
            } catch (error) {
                console.error('❌ Error al obtener elemento aleatorio:', error);
                return null;
            }
        },
        
        // Buscar por ID específico
        findById: function(id) {
            try {
                if (typeof id !== 'string' || id.trim() === '') {
                    console.warn('⚠️ ID debe ser una cadena no vacía');
                    return null;
                }
                
                const idLower = id.toLowerCase().trim();
                
                // Buscar en mapas de texto fancy
                if (DATA.FANCY_TEXT_MAPS[idLower]) {
                    return { 
                        type: 'fancy_map', 
                        id: idLower, 
                        data: DATA.FANCY_TEXT_MAPS[idLower] 
                    };
                }
                
                // Buscar en categorías de ASCII mojis (coincidencia exacta)
                if (DATA.ASCII_MOJIS[id]) {
                    return { 
                        type: 'ascii_category', 
                        id: id, 
                        data: DATA.ASCII_MOJIS[id] 
                    };
                }
                
                // Buscar en strings glitch
                if (DATA.GLITCH_TEXT_STRINGS[idLower]) {
                    return { 
                        type: 'glitch_string', 
                        id: idLower, 
                        data: DATA.GLITCH_TEXT_STRINGS[idLower] 
                    };
                }
                
                // Búsqueda por coincidencia parcial en categorías ASCII
                for (const [category, mojis] of Object.entries(DATA.ASCII_MOJIS)) {
                    if (category.toLowerCase().includes(idLower)) {
                        return { 
                            type: 'ascii_category_partial', 
                            id: category, 
                            data: mojis 
                        };
                    }
                }
                
                console.warn(`⚠️ No se encontró elemento con ID: ${id}`);
                return null;
            } catch (error) {
                console.error('❌ Error al buscar por ID:', error);
                return null;
            }
        },
        
        // Convertir texto a estilo fancy
        convertText: function(text, style) {
            try {
                if (!text || typeof text !== 'string') {
                    console.warn('⚠️ Texto debe ser una cadena no vacía');
                    return '';
                }
                
                const targetStyle = style || 'bold';
                
                if (!DATA.FANCY_TEXT_MAPS[targetStyle]) {
                    console.warn(`⚠️ Estilo "${targetStyle}" no disponible. Usando texto original.`);
                    return text;
                }
                
                return text.split('').map(char => 
                    DATA.FANCY_TEXT_MAPS[targetStyle][char] || char
                ).join('');
            } catch (error) {
                console.error('❌ Error al convertir texto:', error);
                return text || '';
            }
        },
        
        // Obtener mojis por categoría específica
        getMojisByCategory: function(category) {
            try {
                if (!category || typeof category !== 'string') {
                    console.warn('⚠️ Categoría debe ser una cadena no vacía');
                    return [];
                }
                
                const result = DATA.ASCII_MOJIS[category];
                if (!result) {
                    console.warn(`⚠️ Categoría "${category}" no encontrada`);
                    return [];
                }
                
                return [...result]; // Copia del array
            } catch (error) {
                console.error('❌ Error al obtener mojis por categoría:', error);
                return [];
            }
        },
        
        // Obtener texto glitch específico
        getGlitchText: function(type) {
            try {
                if (!type || typeof type !== 'string') {
                    console.warn('⚠️ Tipo debe ser una cadena no vacía');
                    return '';
                }
                
                const result = DATA.GLITCH_TEXT_STRINGS[type];
                if (result === undefined) {
                    console.warn(`⚠️ Tipo de glitch "${type}" no encontrado`);
                    return '';
                }
                
                return result;
            } catch (error) {
                console.error('❌ Error al obtener texto glitch:', error);
                return '';
            }
        },
        
        // Obtener lista de estilos disponibles
        getAvailableStyles: function() {
            try {
                return Object.keys(DATA.FANCY_TEXT_MAPS);
            } catch (error) {
                console.error('❌ Error al obtener estilos:', error);
                return [];
            }
        },
        
        // Obtener lista de categorías de mojis
        getMojiCategories: function() {
            try {
                return Object.keys(DATA.ASCII_MOJIS);
            } catch (error) {
                console.error('❌ Error al obtener categorías:', error);
                return [];
            }
        },
        
        // Obtener tipos de glitch disponibles
        getGlitchTypes: function() {
            try {
                return Object.keys(DATA.GLITCH_TEXT_STRINGS);
            } catch (error) {
                console.error('❌ Error al obtener tipos de glitch:', error);
                return [];
            }
        }
    };
    
    // Exponer datos globalmente para compatibilidad
    window.DATA_ARRAY = DATA;
    window.FANCY_TEXT_MAPS = DATA.FANCY_TEXT_MAPS;
    window.ASCII_MOJIS = DATA.ASCII_MOJIS;
    window.GLITCH_TEXT_STRINGS = DATA.GLITCH_TEXT_STRINGS;
    
    // Calcular estadísticas y mostrar información de carga
    try {
        const totalFancyChars = Object.keys(DATA.FANCY_TEXT_MAPS).reduce((sum, style) => 
            sum + Object.keys(DATA.FANCY_TEXT_MAPS[style]).length, 0
        );
        
        const totalMojis = Object.keys(DATA.ASCII_MOJIS).reduce((sum, category) => 
            sum + DATA.ASCII_MOJIS[category].length, 0
        );
        
        const totalGlitchStrings = Object.keys(DATA.GLITCH_TEXT_STRINGS).length;
        const totalElements = totalFancyChars + totalMojis + totalGlitchStrings;
        
        console.log('🎉 ===== FANCY TEXT LIBRARY CARGADA =====');
        console.log(`📚 Total de elementos: ${totalElements}`);
        console.log(`🎨 Caracteres fancy: ${totalFancyChars} (${Object.keys(DATA.FANCY_TEXT_MAPS).length} estilos)`);
        console.log(`😀 ASCII mojis: ${totalMojis} (${Object.keys(DATA.ASCII_MOJIS).length} categorías)`);
        console.log(`✨ Strings glitch: ${totalGlitchStrings} tipos`);
        console.log('🚀 Biblioteca lista para usar: window.LIBRERIA_DATOS');
        console.log('==========================================');
    } catch (error) {
        console.error('❌ Error al calcular estadísticas:', error);
    }

})();
长期地址
遇到问题?请前往 GitHub 提 Issues。