diff --git a/suites-experimental/suites.mjs b/suites-experimental/suites.mjs index 3de20b4dc..dfe20b913 100644 --- a/suites-experimental/suites.mjs +++ b/suites-experimental/suites.mjs @@ -271,4 +271,87 @@ export const ExperimentalSuites = freezeSuites([ }), ], }, + { + name: "Timeline-Mithril", + url: "suites-experimental/timeline/dist/index.html", + tags: ["experimental", "timeline", "mithril"], + async prepare(page) { + await page.waitForElement("#app-container"); + }, + tests: [ + new BenchmarkTestStep("Start", (page) => { + const btn = page.querySelector("#btn-explore"); + if (btn) { + btn.click(); + page.layout(); + } + }), + new BenchmarkTestStep("SearchTimeline", (page) => { + const btn = page.querySelector("#btn-explore"); + if (btn) { + btn.click(); + page.layout(); + } + const searchInput = page.querySelector("input.search-input"); + if (!searchInput) return; + const queries = [ + "C", "Co", "Com", "Comp", "Compu", "Comput", "Compute", "Computer", "", + "I", "In", "Int", "Inte", "Intel", "", + "A", "Ap", "App", "Appl", "Apple", "", + ]; + for (let round = 0; round < 4; round++) { + for (const q of queries) { + searchInput.setValue(q); + searchInput.dispatchEvent("input"); + page.layout(); + } + } + }), + new BenchmarkTestStep("FilterByCategory", (page) => { + const btn = page.querySelector("#btn-explore"); + if (btn) { + btn.click(); + page.layout(); + } + const filterPills = page.querySelectorAll(".filter-pill"); + if (!filterPills || filterPills.length === 0) return; + const count = Math.min(filterPills.length, 10); + for (let round = 0; round < 18; round++) { + for (let i = 0; i < count; i++) { + filterPills[i].click(); + page.layout(); + } + } + }), + new BenchmarkTestStep("SwitchLanguage", (page) => { + const btn = page.querySelector("#btn-explore"); + if (btn) { + btn.click(); + page.layout(); + } + const langButtons = page.querySelectorAll(".lang-selector button.lang-btn"); + if (langButtons && langButtons.length > 2) { + for (let round = 0; round < 18; round++) { + langButtons[1].click(); + page.layout(); + langButtons[2].click(); + page.layout(); + langButtons[0].click(); + page.layout(); + } + } + }), + new BenchmarkTestStep("ScrollTimeline", (page) => { + const btn = page.querySelector("#btn-explore"); + if (btn) { + btn.click(); + page.layout(); + } + for (let i = 0; i < 2; i++) { + page.call("stepScrollTimeline"); + page.layout(); + } + }), + ], + }, ]); diff --git a/suites-experimental/timeline/.gitignore b/suites-experimental/timeline/.gitignore new file mode 100644 index 000000000..f9efed21e --- /dev/null +++ b/suites-experimental/timeline/.gitignore @@ -0,0 +1,2 @@ +# Compiled TypeScript and generated output files +src/**/*.js \ No newline at end of file diff --git a/suites-experimental/timeline/data-generator.js b/suites-experimental/timeline/data-generator.js new file mode 100644 index 000000000..654236b22 --- /dev/null +++ b/suites-experimental/timeline/data-generator.js @@ -0,0 +1,81 @@ +export function generateTimelineData(numEvents = 1000) { + const data = []; + const categories = ["travel", "schools", "medical", "federal", "public-health"]; + const severities = ["low", "medium", "high"]; + + let currentDate = new Date(2020, 0, 1); // Jan 1, 2020 + + for (let i = 0; i < numEvents; i++) { + const id = `event-${i}`; + + if (i % 2 === 0) + currentDate.setDate(currentDate.getDate() + 1); + + const dateString = currentDate.toISOString().split("T")[0]; + + if (i % 50 === 0) { + data.push({ + id, + type: "header", + date: dateString, + title: currentDate.toLocaleDateString("en-US", { month: "long", year: "numeric" }), + text: `Phase ${Math.floor(i / 50) + 1} of the pandemic response.`, + }); + continue; + } + + if (i % 20 === 0) { + data.push({ + id, + type: "milestone", + date: dateString, + category: "medical", + title: `Major Milestone: Phase ${Math.floor(i / 20)}`, + text: "Significant progress reported in vaccine development or distribution. National case counts reach new thresholds.", + severity: "high", + }); + continue; + } + + const category = categories[Math.floor(Math.random() * categories.length)]; + const severity = severities[Math.floor(Math.random() * severities.length)]; + + let title = ""; + let text = ""; + + switch (category) { + case "travel": + title = "Travel Restriction Imposed"; + text = "United States imposes travel restrictions on passengers arriving from regions with high infection rates. Screening protocols enhanced at major airports."; + break; + case "schools": + title = "School District Transition"; + text = "Major school districts announce transition to remote learning models. Educators and parents adapt to online platforms amidst local case spikes."; + break; + case "medical": + title = "Clinical Trial Update"; + text = "Researchers publish preliminary data on therapeutics. Hospitals report on ICU capacity and PPE supply chains."; + break; + case "federal": + title = "Federal Policy Announcement"; + text = "Federal agencies issue new guidelines on workplace safety, economic relief packages, or emergency declarations."; + break; + case "public-health": + title = "Public Health Advisory"; + text = "CDC updates recommendations on mask-wearing, social distancing, and testing availability. Local officials issue stay-at-home warnings."; + break; + } + + data.push({ + id, + type: "event", + date: dateString, + category, + title: `${title} (${i})`, + text: `${text} Cumulative impact is assessed by local health departments.`, + severity, + }); + } + + return data; +} diff --git a/suites-experimental/timeline/dist/assets/index.css b/suites-experimental/timeline/dist/assets/index.css new file mode 100644 index 000000000..d40de66f8 --- /dev/null +++ b/suites-experimental/timeline/dist/assets/index.css @@ -0,0 +1 @@ +:root{--bg-color: #050505;--text-color: #f1f5f9;--sidebar-bg: rgba(10, 10, 10, .7);--border-color: rgba(255, 255, 255, .08);--primary-color: #38bdf8;--primary-hover: #7dd3fc;--header-bg: rgba(5, 5, 5, .75);--card-bg: rgba(15, 15, 20, .6);--shadow: 0 10px 30px -5px rgba(0, 0, 0, .5), 0 8px 10px -6px rgba(0, 0, 0, .5);--card-shadow: 0 15px 35px rgba(0, 0, 0, .6), 0 5px 15px rgba(0, 0, 0, .4);--timeline-line-color: rgba(255, 255, 255, .15);--glass-border: 1px solid rgba(255, 255, 255, .1);--glass-glow: 0 0 20px rgba(56, 189, 248, .15);--tag-hardware-bg: rgba(56, 189, 248, .1);--tag-hardware-color: #38bdf8;--tag-software-bg: rgba(52, 211, 153, .1);--tag-software-color: #34d399;--tag-consumer-bg: rgba(192, 132, 252, .1);--tag-consumer-color: #c084fc;--tag-networking-bg: rgba(251, 191, 36, .1);--tag-networking-color: #fbbf24;--tag-milestone-bg: rgba(248, 113, 113, .1);--tag-milestone-color: #f87171;--tag-gaming-bg: rgba(236, 72, 153, .1);--tag-gaming-color: #ec4899;--tag-art-bg: rgba(249, 115, 22, .1);--tag-art-color: #f97316;--tag-military-bg: rgba(100, 116, 139, .1);--tag-military-color: #64748b}body{margin:0;font-family:Plus Jakarta Sans,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,sans-serif;background:radial-gradient(circle at 10% 20%,#111827,#000000 70%);background-attachment:fixed;color:var(--text-color);display:flex;flex-direction:column;height:100vh;overflow:hidden}#app{height:100%;display:flex;flex-direction:column}#app-container{display:flex;flex-direction:column;height:100%}#app-header{background-color:var(--header-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-bottom:var(--glass-border);padding:12px 20px;display:flex;flex-direction:column;align-items:flex-start;gap:8px;z-index:10;box-shadow:var(--shadow)}.header-title-section{display:flex;flex-direction:column;gap:4px}#app-header h1{margin:0;font-size:1.4rem;font-weight:800;letter-spacing:-.02em;background:linear-gradient(135deg,#38bdf8,#c084fc,#f472b6);-webkit-background-clip:text;-webkit-text-fill-color:transparent;text-shadow:0 0 30px rgba(192,132,252,.3);line-height:1.1}.header-title-section .subtitle{font-size:.8rem;font-weight:600;color:#94a3b8;letter-spacing:.1em;text-transform:uppercase}.header-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;width:100%;justify-content:space-between}.action-group{display:flex;align-items:center;gap:12px;padding:0 16px;height:38px;box-sizing:border-box;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.05);border-radius:16px;box-shadow:inset 0 2px 10px #0000001a}.action-group:focus-within{border-color:var(--primary-color);background:rgba(255,255,255,.04);box-shadow:0 0 15px #38bdf826,inset 0 2px 10px #0000001a}.group-label{font-size:.75rem;font-weight:700;color:#64748b;text-transform:uppercase;letter-spacing:.05em}#filter-panel{display:flex;flex-wrap:wrap;gap:12px;align-items:center}span.filter-pill{cursor:pointer;-webkit-user-select:none;user-select:none}.tag.inactive{opacity:.4;filter:grayscale(.8);background-color:transparent!important;border-color:#ffffff1a!important;color:#ffffff80!important;box-shadow:none!important}.tag.inactive:hover{opacity:.8;background-color:#ffffff0d!important}.search-replace-panel{display:flex;gap:8px;align-items:center}.search-replace-panel input[type=text]{background:rgba(0,0,0,.2);border:1px solid rgba(255,255,255,.1);color:#fff;border-radius:8px;padding:6px 12px;font-family:inherit;font-size:.8rem;outline:none;width:140px}.search-replace-panel input[type=text]:focus{border-color:var(--primary-color);background:rgba(0,0,0,.4);box-shadow:0 0 15px #38bdf833}#controls{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.divider{width:1px;height:24px;background:rgba(255,255,255,.1);margin:0 4px}button{background:rgba(56,189,248,.1);color:var(--primary-color);border:1px solid rgba(56,189,248,.4);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:6px 12px;border-radius:8px;cursor:pointer;font-weight:700;font-size:.75rem;letter-spacing:.02em;display:flex;align-items:center;gap:6px;white-space:nowrap}button:hover{background:rgba(56,189,248,.25);border-color:#38bdf8cc;transform:translateY(-1px);box-shadow:0 0 15px #38bdf866;transition:background .2s ease,border-color .2s ease,transform .2s ease,box-shadow .2s ease;color:#fff}button:active{transform:translateY(0)}button.btn-primary{background:linear-gradient(135deg,var(--primary-color),var(--primary-hover));color:#fff;border:none;padding:7px 14px;box-shadow:0 4px 15px #38bdf84d}button.btn-primary:hover{background:linear-gradient(135deg,var(--primary-hover),#38bdf8);box-shadow:0 6px 20px #38bdf880;transform:translateY(-1px);border-color:transparent}button.btn-secondary{background:rgba(255,255,255,.05);color:#e2e8f0;border:1px solid rgba(255,255,255,.1)}button.btn-secondary:hover{background:rgba(255,255,255,.1);border-color:#fff3;box-shadow:0 4px 12px #ffffff0d;color:#fff}button.btn-nav{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:2px;padding:4px 10px;text-align:left}button.btn-nav .year{font-size:.75rem;font-weight:800}button.btn-nav .desc{font-size:.6rem;font-weight:500;color:#94a3b8;text-transform:uppercase;letter-spacing:.05em}button.btn-nav:hover .desc{color:#e2e8f0;transition:color .3s}#main-content{display:flex;flex:1;overflow:hidden;position:relative;background:transparent}#toc-sidebar{width:220px;background-color:var(--sidebar-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-right:var(--glass-border);padding:24px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.15) transparent;z-index:5}#toc-sidebar.hidden{transform:translate(-100%);width:0;padding:24px 0;overflow:hidden;opacity:0}#toc-sidebar h2{font-size:.8rem;margin-top:0;margin-bottom:16px;text-transform:uppercase;letter-spacing:.15em;font-weight:800;color:#64748b}#toc-list{list-style:none;padding:0;margin:0}#toc-list li{margin-bottom:6px}#toc-list a{color:#cbd5e1;text-decoration:none;font-size:.85rem;font-weight:600;display:block;padding:8px 12px;border-radius:8px;border:1px solid transparent}#toc-list a:hover{background-color:#38bdf81a;color:var(--primary-color);border-color:#38bdf833;padding-left:16px;box-shadow:inset 3px 0 0 var(--primary-color);transition:all .3s}#document-container{flex:1;overflow-x:auto;overflow-y:hidden;padding:0;scroll-behavior:smooth;display:flex;align-items:center;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.2) rgba(0,0,0,.2)}#document-container::-webkit-scrollbar{height:8px}#document-container::-webkit-scrollbar-track{background:rgba(0,0,0,.2);border-radius:4px}#document-container::-webkit-scrollbar-thumb{background:rgba(255,255,255,.2);border-radius:4px}#document-container::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.4)}#document-content{display:flex;flex-direction:row;gap:90px;position:relative;height:90%;padding-left:100px;padding-right:100px;align-items:center}#document-content:before{content:"";position:absolute;top:50%;left:0;right:0;height:2px;background:linear-gradient(90deg,rgba(56,189,248,.5),rgba(192,132,252,.5));box-shadow:0 0 15px #38bdf899;transform:translateY(-50%);z-index:1}.timeline-card{background-color:var(--card-bg);backdrop-filter:blur(25px);-webkit-backdrop-filter:blur(25px);border:1px solid rgba(255,255,255,.1);border-top:1px solid rgba(255,255,255,.2);border-left:1px solid rgba(255,255,255,.15);border-radius:24px;padding:16px 20px;box-shadow:var(--card-shadow),inset 0 0 20px #ffffff05;display:flex;flex-direction:column;position:relative;z-index:2;height:85%;max-height:520px;min-height:320px;width:320px;box-sizing:border-box;flex-shrink:0;justify-content:flex-start}.virtual-layout .timeline-card{left:var(--x-pos);transform:translateY(-50%)}.browser-layout .timeline-card{transform:none}.timeline-card-inner{display:flex;flex-direction:column;flex:1;overflow:hidden;height:100%}.timeline-card:hover{box-shadow:0 30px 60px -15px #000c,0 0 30px #38bdf826,inset 0 0 20px #ffffff0d;border-color:#38bdf866;transition:box-shadow .3s ease,border-color .3s ease,background-color .3s ease,transform .3s ease}.virtual-layout .timeline-card:hover{transform:translateY(-50%) scale(1.02)}.browser-layout .timeline-card:hover{transform:scale(1.02)}.timeline-card:before{content:"";position:absolute;top:50%;left:-33px;width:16px;height:16px;border-radius:50%;background-color:#0f172a;border:3px solid var(--primary-color);transform:translateY(-50%);box-shadow:0 0 15px #38bdf880,0 0 0 4px #0f172acc;z-index:3}.timeline-card:hover:before{transform:translate(3.2px) translateY(-50%);background-color:var(--primary-color);box-shadow:0 0 45px var(--primary-color),0 0 0 4px #0f172acc;transition:background-color .3s ease,box-shadow .3s ease,transform .3s ease}.timeline-card.tag-hardware:before{border-color:#38bdf8;box-shadow:0 0 15px #38bdf880,0 0 0 4px #0f172acc}.timeline-card.tag-hardware:hover:before{background-color:#38bdf8;box-shadow:0 0 45px #38bdf8,0 0 0 4px #0f172acc}.timeline-card.tag-software:before{border-color:#34d399;box-shadow:0 0 15px #34d39980,0 0 0 4px #0f172acc}.timeline-card.tag-software:hover:before{background-color:#34d399;box-shadow:0 0 45px #34d399,0 0 0 4px #0f172acc}.timeline-card.tag-consumer:before{border-color:#c084fc;box-shadow:0 0 15px #c084fc80,0 0 0 4px #0f172acc}.timeline-card.tag-consumer:hover:before{background-color:#c084fc;box-shadow:0 0 45px #c084fc,0 0 0 4px #0f172acc}.timeline-card.tag-networking:before{border-color:#fbbf24;box-shadow:0 0 15px #fbbf2480,0 0 0 4px #0f172acc}.timeline-card.tag-networking:hover:before{background-color:#fbbf24;box-shadow:0 0 45px #fbbf24,0 0 0 4px #0f172acc}.timeline-card.tag-milestone:before{border-color:#f87171;box-shadow:0 0 15px #f8717180,0 0 0 4px #0f172acc}.timeline-card.tag-milestone:hover:before{background-color:#f87171;box-shadow:0 0 45px #f87171,0 0 0 4px #0f172acc}.timeline-card.tag-gaming:before{border-color:#ec4899;box-shadow:0 0 15px #ec489980,0 0 0 4px #0f172acc}.timeline-card.tag-gaming:hover:before{background-color:#ec4899;box-shadow:0 0 45px #ec4899,0 0 0 4px #0f172acc}.timeline-card.tag-art:before{border-color:#f97316;box-shadow:0 0 15px #f9731680,0 0 0 4px #0f172acc}.timeline-card.tag-art:hover:before{background-color:#f97316;box-shadow:0 0 45px #f97316,0 0 0 4px #0f172acc}.timeline-card.tag-military:before{border-color:#64748b;box-shadow:0 0 15px #64748b80,0 0 0 4px #0f172acc}.timeline-card.tag-military:hover:before{background-color:#64748b;box-shadow:0 0 45px #64748b,0 0 0 4px #0f172acc}.timeline-card.card-header{background:linear-gradient(135deg,rgba(56,189,248,.1) 0%,rgba(192,132,252,.05) 100%);border-color:#38bdf84d;width:300px;justify-content:center;align-items:center;text-align:center;box-shadow:0 20px 40px #0006,inset 0 0 30px #38bdf80d}.timeline-card.card-header .card-date{display:none}.timeline-card.card-header .card-title{font-size:2rem;font-weight:800;margin:0;background:linear-gradient(to right,#38bdf8,#c084fc);-webkit-background-clip:text;-webkit-text-fill-color:transparent;text-shadow:0 0 20px rgba(56,189,248,.2)}.timeline-card.card-header .card-desc{font-size:.9rem;color:#94a3b8;margin-top:12px}.card-header{margin-bottom:12px}.card-date{font-size:.8rem;font-weight:800;color:var(--primary-color);text-transform:uppercase;letter-spacing:.1em;opacity:.9}.card-title{margin:8px 0 0;font-size:1.15rem;font-weight:800;line-height:1.4;color:#f8fafc}.card-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.tag{font-size:.65rem;padding:4px 10px;border-radius:20px;font-weight:800;text-transform:uppercase;letter-spacing:.1em;border:1px solid transparent}.tag:hover{filter:brightness(1.2);box-shadow:0 0 10px currentColor;transition:filter .3s ease,box-shadow .3s ease}.tag-hardware{background-color:var(--tag-hardware-bg);color:var(--tag-hardware-color);border-color:#38bdf84d}.tag-software{background-color:var(--tag-software-bg);color:var(--tag-software-color);border-color:#34d3994d}.tag-consumer{background-color:var(--tag-consumer-bg);color:var(--tag-consumer-color);border-color:#c084fc4d}.tag-networking{background-color:var(--tag-networking-bg);color:var(--tag-networking-color);border-color:#fbbf244d}.tag-milestone{background-color:var(--tag-milestone-bg);color:var(--tag-milestone-color);border-color:#f871714d}.tag-gaming{background-color:var(--tag-gaming-bg);color:var(--tag-gaming-color);border-color:#ec48994d}.tag-art{background-color:var(--tag-art-bg);color:var(--tag-art-color);border-color:#f973164d}.tag-military{background-color:var(--tag-military-bg);color:var(--tag-military-color);border-color:#64748b4d}.card-desc{font-size:.85rem;line-height:1.6;margin:0 0 16px;color:#cbd5e1;overflow-y:auto;flex-grow:1;padding-right:8px;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.15) transparent}.card-desc::-webkit-scrollbar{width:4px}.card-desc::-webkit-scrollbar-track{background:transparent}.card-desc::-webkit-scrollbar-thumb{background:rgba(255,255,255,.15);border-radius:4px}.card-stats-summary{background:rgba(0,0,0,.2);padding:12px;border-radius:12px;font-size:.75rem;margin-bottom:12px;display:flex;flex-direction:column;gap:4px;border:1px solid rgba(255,255,255,.05);box-shadow:inset 0 2px 10px #0000004d}.card-stats-summary div{display:flex;justify-content:space-between;color:#94a3b8}.card-stats-summary div span:last-child{font-weight:700;color:#e2e8f0}.timeline-card.card-table{min-height:480px}.stats-table{width:100%;border-collapse:separate;border-spacing:0;font-size:.75rem;margin-top:12px;border-radius:12px;overflow:hidden;border:1px solid rgba(255,255,255,.1);background:rgba(0,0,0,.2)}.stats-table th,.stats-table td{padding:8px 12px;text-align:left}.stats-table th{background-color:#38bdf826;font-weight:800;color:#38bdf8;border-bottom:1px solid rgba(255,255,255,.1)}.stats-table tr:nth-child(2n){background-color:#ffffff05}.stats-table td{border-bottom:1px solid rgba(255,255,255,.05);color:#cbd5e1}.stats-table tr:last-child td{border-bottom:none}.timeline-card canvas{background-color:#0000004d;border-radius:12px;margin-top:auto;border:1px solid rgba(255,255,255,.08);max-height:140px;box-shadow:inset 0 2px 10px #00000080;padding:8px}.highlight{background:rgba(251,191,36,.25);color:#fcd34d;padding:2px 4px;border-radius:4px;border-bottom:2px solid #fbbf24;text-shadow:0 0 8px rgba(251,191,36,.5)}#mini-overview-container{height:250px;flex-shrink:0;border-top:2px solid rgba(56,189,248,.5);background:linear-gradient(180deg,rgba(15,23,42,.85) 0%,rgba(5,5,5,.98) 100%);backdrop-filter:blur(40px);-webkit-backdrop-filter:blur(40px);display:flex;flex-direction:column;position:relative;box-sizing:border-box;-webkit-user-select:none;user-select:none;padding:15px 80px;box-shadow:0 -20px 60px #000c,inset 0 2px 20px #38bdf826;z-index:50;overflow:visible}@media (prefers-color-scheme: dark){#mini-overview-container{background:linear-gradient(180deg,rgba(10,15,30,.9) 0%,rgba(0,0,0,.98) 100%);border-top:2px solid rgba(56,189,248,.3)}}.date-slider-row{height:40px;position:relative;display:flex;align-items:center;cursor:pointer;margin-bottom:8px;flex-shrink:0}.date-slider-track{position:absolute;top:50%;left:0;right:0;height:6px;background:rgba(255,255,255,.05);border-radius:3px;transform:translateY(-50%);box-shadow:inset 0 2px 5px #000c,0 0 15px #38bdf81a;border:1px solid rgba(255,255,255,.1)}@media (prefers-color-scheme: dark){.date-slider-track{background:rgba(0,0,0,.4);box-shadow:inset 0 2px 5px #000c,0 0 10px #38bdf826}}.tick-label{position:absolute;transform:translate(-50%);top:28px;font-size:11px;opacity:.8;font-weight:800;color:#94a3b8;letter-spacing:.1em;text-shadow:0 0 8px rgba(0,0,0,.8)}.tick-label:hover{color:#fff;opacity:1;text-shadow:0 0 15px #38bdf8,0 0 30px #c084fc;transform:translate(-50%) scale(1.1);transition:all .3s cubic-bezier(.2,.8,.2,1)}.active-slider-pill{position:absolute;top:50%;transform:translate(-50%,-50%);padding:4px 16px;background:linear-gradient(135deg,#38bdf8,#818cf8,#c084fc);color:#fff;font-size:12px;font-weight:900;border-radius:16px;box-shadow:0 0 25px #8b5cf6cc,inset 0 2px 4px #ffffff80;pointer-events:none;z-index:5;border:1px solid rgba(255,255,255,.4);text-shadow:0 1px 3px rgba(0,0,0,.6)}.computation-graph-row{flex:1;position:relative;min-height:0}.data-marker-row{height:60px;position:relative;flex-shrink:0}.graph-svg{width:100%;height:100%;overflow:visible}.cpu-line{fill:none;stroke:#00f0ff;stroke-width:2.5px;vector-effect:non-scaling-stroke;opacity:.9;filter:url(#glow) drop-shadow(0 0 8px rgba(0,240,255,.8))}.gpu-line{fill:none;stroke:#39ff14;stroke-width:2.5px;vector-effect:non-scaling-stroke;opacity:.9;filter:url(#glow) drop-shadow(0 0 8px rgba(57,255,20,.8))}.tpu-line{fill:none;stroke:#f0f;stroke-width:2.5px;vector-effect:non-scaling-stroke;opacity:.9;filter:url(#glow) drop-shadow(0 0 8px rgba(255,0,255,.8))}.decade-line{stroke:#ffffff26;stroke-width:1px;vector-effect:non-scaling-stroke;stroke-dasharray:2 4}.century-line{stroke:#fff6;stroke-width:2px;vector-effect:non-scaling-stroke;stroke-dasharray:4 4}.data-marker{position:absolute;width:4px;height:4px;border-radius:50%;transform:translate(-50%);z-index:10;cursor:pointer;border:1px solid rgba(255,255,255,.3)}.data-marker:hover,.data-marker.marker-hovered{transform:translate(-50%) translateY(-15px) scale(2.5);z-index:25;transition:all .3s cubic-bezier(.34,1.56,.64,1)}.marker-hardware{background:#38bdf8;box-shadow:0 0 12px #38bdf8}.marker-software{background:#34d399;box-shadow:0 0 12px #34d399}.marker-consumer{background:#c084fc;box-shadow:0 0 12px #c084fc}.marker-networking{background:#fbbf24;box-shadow:0 0 12px #fbbf24}.marker-milestone{background:#f87171;box-shadow:0 0 12px #f87171}.marker-art{background:#fb7185;box-shadow:0 0 12px #fb7185}.marker-military{background:#a3e635;box-shadow:0 0 12px #a3e635}.marker-gaming{background:#e879f9;box-shadow:0 0 12px #e879f9}.marker-politics{background:#60a5fa;box-shadow:0 0 12px #60a5fa}.marker-business{background:#2dd4bf;box-shadow:0 0 12px #2dd4bf}.marker-science{background:#818cf8;box-shadow:0 0 12px #818cf8}.marker-default{background:#f8fafc;box-shadow:0 0 12px #f8fafc}.marker-hardware:hover,.marker-hardware.marker-hovered{box-shadow:0 0 20px #38bdf8,0 0 40px #38bdf8,0 0 60px #38bdf8;background:#fff;border-color:#38bdf8;border-width:2px}.marker-software:hover,.marker-software.marker-hovered{box-shadow:0 0 20px #34d399,0 0 40px #34d399,0 0 60px #34d399;background:#fff;border-color:#34d399;border-width:2px}.marker-consumer:hover,.marker-consumer.marker-hovered{box-shadow:0 0 20px #c084fc,0 0 40px #c084fc,0 0 60px #c084fc;background:#fff;border-color:#c084fc;border-width:2px}.marker-networking:hover,.marker-networking.marker-hovered{box-shadow:0 0 20px #fbbf24,0 0 40px #fbbf24,0 0 60px #fbbf24;background:#fff;border-color:#fbbf24;border-width:2px}.marker-milestone:hover,.marker-milestone.marker-hovered{box-shadow:0 0 20px #f87171,0 0 40px #f87171,0 0 60px #f87171;background:#fff;border-color:#f87171;border-width:2px}.marker-art:hover,.marker-art.marker-hovered{box-shadow:0 0 20px #fb7185,0 0 40px #fb7185,0 0 60px #fb7185;background:#fff;border-color:#fb7185;border-width:2px}.marker-military:hover,.marker-military.marker-hovered{box-shadow:0 0 20px #a3e635,0 0 40px #a3e635,0 0 60px #a3e635;background:#fff;border-color:#a3e635;border-width:2px}.marker-gaming:hover,.marker-gaming.marker-hovered{box-shadow:0 0 20px #e879f9,0 0 40px #e879f9,0 0 60px #e879f9;background:#fff;border-color:#e879f9;border-width:2px}.marker-politics:hover,.marker-politics.marker-hovered{box-shadow:0 0 20px #60a5fa,0 0 40px #60a5fa,0 0 60px #60a5fa;background:#fff;border-color:#60a5fa;border-width:2px}.marker-business:hover,.marker-business.marker-hovered{box-shadow:0 0 20px #2dd4bf,0 0 40px #2dd4bf,0 0 60px #2dd4bf;background:#fff;border-color:#2dd4bf;border-width:2px}.marker-science:hover,.marker-science.marker-hovered{box-shadow:0 0 20px #818cf8,0 0 40px #818cf8,0 0 60px #818cf8;background:#fff;border-color:#818cf8;border-width:2px}.marker-default:hover,.marker-default.marker-hovered{box-shadow:0 0 20px #f8fafc,0 0 40px #f8fafc,0 0 60px #f8fafc;background:#fff;border-color:#f8fafc;border-width:2px}.graph-point{vector-effect:non-scaling-stroke;opacity:.7}.cpu-graph-point{fill:#00f0ff}.gpu-graph-point{fill:#39ff14}.tpu-graph-point{fill:#f0f}.hover-guide{stroke:var(--text-color);stroke-width:1px;vector-effect:non-scaling-stroke;opacity:.2;stroke-dasharray:4 2}.flops-data-dot{position:absolute;width:6px;height:6px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:15}.hover-point{position:absolute;width:10px;height:10px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:20;border:2px solid #ffffff}@media (prefers-color-scheme: dark){.hover-point{border-color:#0f172a}}.cpu-point{background-color:#00f0ff;box-shadow:0 0 8px #00f0ff}.gpu-point{background-color:#39ff14;box-shadow:0 0 8px #39ff14}.tpu-point{background-color:#f0f;box-shadow:0 0 8px #f0f}.tooltip-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:2px}.cpu-dot{background:#00f0ff;box-shadow:0 0 6px #00f0ffcc}.gpu-dot{background:#39ff14;box-shadow:0 0 6px #39ff14cc}.tpu-dot{background:#ff00ff;box-shadow:0 0 6px #f0fc}.tooltip-row{display:flex;align-items:center;gap:6px;font-size:11px}.tooltip-label{font-weight:700;color:#94a3b8}.tooltip-val{font-weight:800;color:#f1f5f9}.data-hover-tooltip{position:absolute;bottom:50px;color:var(--text-color);padding:10px 14px;border-radius:12px;font-size:11px;z-index:1000;pointer-events:none;display:flex;flex-direction:column;gap:6px;white-space:nowrap;background:rgba(15,23,42,.85);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid rgba(255,255,255,.15);box-shadow:0 15px 30px #00000080,0 0 0 1px #ffffff0d,inset 0 0 20px #38bdf80d}.data-hover-tooltip:after{content:"";position:absolute;bottom:-6px;left:50%;transform:translate(-50%);border-width:6px 6px 0;border-style:solid;border-color:rgba(255,255,255,.15) transparent transparent transparent}.data-hover-tooltip .tooltip-header{font-weight:800;font-size:10px;color:var(--primary-color);text-transform:uppercase;letter-spacing:.1em}.data-hover-tooltip .tooltip-title{font-weight:700;font-size:12px;color:#f1f5f9}.glass-panel{background:rgba(255,255,255,.85);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.5);box-shadow:0 10px 25px #0000001a,0 0 0 1px #0000000d}@media (prefers-color-scheme: dark){.glass-panel{background:rgba(15,23,42,.85);border:1px solid rgba(255,255,255,.1);box-shadow:0 10px 25px #0000004d,0 0 0 1px #ffffff0d}}.flops-hover-tooltip{position:absolute;bottom:100%;margin-bottom:8px;top:auto;color:var(--text-color);padding:8px 12px;border-radius:10px;font-size:11px;z-index:999;pointer-events:none;display:flex;flex-direction:column;gap:4px;white-space:nowrap;background:rgba(15,23,42,.85);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid rgba(56,189,248,.3);box-shadow:0 10px 25px #00000080,inset 0 0 15px #38bdf80d}.flops-hover-tooltip .tooltip-header{font-weight:800;font-size:11px;border-bottom:1px solid rgba(255,255,255,.15);padding-bottom:4px;margin-bottom:4px;letter-spacing:.05em;color:#f1f5f9}.flops-hover-tooltip .tooltip-line-cpu{color:#38bdf8;font-weight:700;text-shadow:0 0 8px rgba(56,189,248,.6)}.flops-hover-tooltip .tooltip-line-gpu{color:#34d399;font-weight:700;text-shadow:0 0 8px rgba(52,211,153,.6)}.flops-hover-tooltip .tooltip-line-tpu{color:#c084fc;font-weight:700;text-shadow:0 0 8px rgba(192,132,252,.6)}.lang-btn{background:transparent;border:1px solid rgba(255,255,255,.15);color:#64748b;padding:2px 8px;font-family:inherit;font-size:.75rem;font-weight:700;cursor:pointer;border-radius:6px;height:24px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center}.lang-btn:hover{color:#fff;background:rgba(255,255,255,.05);border-color:#ffffff4d;transition:all .3s}.lang-btn.active{color:#000;background:var(--primary-color);border-color:var(--primary-color);box-shadow:0 0 10px #38bdf866}.search-input{background:transparent;border:none;color:#fff;font-family:inherit;font-size:.8rem;outline:none;width:180px;height:100%;padding:0}.card-desc a{color:var(--primary-color);text-decoration:none;font-weight:600;border-bottom:1px dashed rgba(56,189,248,.4);padding:0 2px;border-radius:2px}.card-desc a:hover{color:#fff;background:rgba(56,189,248,.15);border-bottom:1px solid var(--primary-color);text-shadow:0 0 8px rgba(56,189,248,.4);transition:all .25s cubic-bezier(.2,.8,.2,1)}#document-content.browser-layout .timeline-card{left:auto;transform:none;top:auto;position:relative}#document-content.browser-layout .timeline-card:hover{transform:translateY(-16px) scale(1.02)}.hover-window-band{fill:#38bdf81f;stroke:#38bdf84d;stroke-width:1px;vector-effect:non-scaling-stroke}.density-area-overall{pointer-events:none}.density-line-overall{pointer-events:none;vector-effect:non-scaling-stroke}.search-density-area{pointer-events:none}.search-density-line{pointer-events:none;vector-effect:non-scaling-stroke}.hover-density-area{pointer-events:none}.hover-density-line{pointer-events:none;vector-effect:non-scaling-stroke}.density-tooltip-row{margin-top:2px;padding-top:2px;border-top:1px solid rgba(255,255,255,.08)}.density-dot{background:#38bdf8;box-shadow:0 0 6px #38bdf8cc}.search-density-dot{background:#fbbf24;box-shadow:0 0 6px #fbbf24cc}.category-density-dot{border-radius:50%}.flops-dots-container,.data-markers-container,.density-graph-svg{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.density-graph-svg{z-index:8;overflow:visible}.tooltip-connector{pointer-events:none;vector-effect:non-scaling-stroke}@media (max-height: 680px),(max-width: 900px){#app-header{padding:6px 12px;gap:6px}#app-header h1{font-size:1.1rem}.header-title-section .subtitle{display:none}.header-actions{gap:6px}.action-group{height:30px;padding:0 10px;gap:6px}.group-label{font-size:.65rem}#filter-panel{gap:4px}span.filter-pill,.tag{padding:2px 8px;font-size:.6rem;margin-bottom:2px}.card-tags{margin-bottom:6px}#mini-overview-container{height:110px;padding:6px 30px}.date-slider-row{height:24px;margin-bottom:2px}.tick-label{top:14px;font-size:9px}.active-slider-pill{padding:2px 10px;font-size:10px}.data-marker-row{height:28px}.timeline-card{min-height:240px;padding:12px 16px}.card-title{font-size:1rem;margin:4px 0 0}.card-desc{font-size:.8rem;margin-top:8px}} diff --git a/suites-experimental/timeline/dist/assets/index.js b/suites-experimental/timeline/dist/assets/index.js new file mode 100644 index 000000000..fbd64ae67 --- /dev/null +++ b/suites-experimental/timeline/dist/assets/index.js @@ -0,0 +1,26 @@ +(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const p of document.querySelectorAll('link[rel="modulepreload"]'))u(p);new MutationObserver(p=>{for(const c of p)if(c.type==="childList")for(const n of c.addedNodes)n.tagName==="LINK"&&n.rel==="modulepreload"&&u(n)}).observe(document,{childList:!0,subtree:!0});function d(p){const c={};return p.integrity&&(c.integrity=p.integrity),p.referrerPolicy&&(c.referrerPolicy=p.referrerPolicy),p.crossOrigin==="use-credentials"?c.credentials="include":p.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function u(p){if(p.ep)return;p.ep=!0;const c=d(p);fetch(p.href,c)}})();if(typeof window<"u"){let a=1;const r=new Map;window.requestAnimationFrame=d=>{const u=a++,p=setTimeout(()=>{r.delete(u),d(performance.now())},0);return r.set(u,p),u},window.cancelAnimationFrame=d=>{const u=r.get(d);u!==void 0&&(clearTimeout(u),r.delete(d))}}typeof globalThis<"u"&&typeof window<"u"&&(globalThis.requestAnimationFrame=window.requestAnimationFrame,globalThis.cancelAnimationFrame=window.cancelAnimationFrame);function _i(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}var We,ti;function ze(){if(ti)return We;ti=1;function a(r,d,u,p,c,n){return{tag:r,key:d,attrs:u,children:p,text:c,dom:n,is:void 0,domSize:void 0,state:void 0,events:void 0,instance:void 0}}return a.normalize=function(r){return Array.isArray(r)?a("[",void 0,void 0,a.normalizeChildren(r),void 0,void 0):r==null||typeof r=="boolean"?null:typeof r=="object"?r:a("#",void 0,void 0,String(r),void 0,void 0)},a.normalizeChildren=function(r){for(var d=new Array(r.length),u=0,p=0;p0&&(p.className=u.join(" ")),Wi(p)?p=zi:Li.set(p,c),Si[a]={tag:d,attrs:p,is:p.is}}function Oi(a,r){r.tag=a.tag;var d=r.attrs;if(d==null)return r.attrs=a.attrs,r.is=a.is,r;if(Xe.call(d,"class")&&(d.class!=null&&(d.className=d.class),d.class=null),a.attrs!==zi){var u=d.className;d=Object.assign({},a.attrs,d),a.attrs.className!=null&&(d.className=u!=null?String(a.attrs.className)+" "+String(u):a.attrs.className)}return a.tag==="input"&&Xe.call(d,"type")&&(d=Object.assign({type:d.type},d)),r.is=d.is,r.attrs=d,r}function Ui(a,r,...d){if(a==null||typeof a!="string"&&typeof a!="function"&&typeof a.view!="function")throw Error("The selector must be either a string or a component.");var u=qi(r,d);return typeof a=="string"&&(u.children=Bi.normalizeChildren(u.children),a!=="[")?Oi(Si[a]||ji(a),u):(u.attrs==null&&(u.attrs={}),u.tag=a,u)}var Ii=Ui,Hi=ze(),Ki=function(a){return a==null&&(a=""),Hi("<",void 0,void 0,a,void 0,void 0)},Vi=ze(),Ji=wi,Zi=function(a,...r){var d=Ji(a,r);return d.attrs==null&&(d.attrs={}),d.tag="[",d.children=Vi.normalizeChildren(d.children),d},Ye=Ii;Ye.trust=Ki;Ye.fragment=Zi;var Xi=Ye,Di=new WeakMap,Ne,ai;function yi(){if(ai)return Ne;ai=1;var a=Di;function*r(d){var u=d.dom,p=d.domSize,c=a.get(u);if(u!=null)do{var n=u.nextSibling;a.get(u)===c&&(yield u,p--),u=n}while(p)}return Ne=r,Ne}var je=ze(),Qi=Di,Oe=yi(),ri=bi,Yi=function(){var a={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},r,d;function u(i){return i.ownerDocument}function p(i){return i.attrs&&i.attrs.xmlns||a[i.tag]}function c(i,e){if(i.state!==e)throw new Error("'vnode.state' must not be modified.")}function n(i){var e=i.state;try{return this.apply(e,arguments)}finally{c(i,e)}}function k(i){try{return u(i).activeElement}catch{return null}}function h(i,e,t,s,m,I,N){for(var q=t;q'+e.children+"",I=I.firstChild):I.innerHTML=e.children,e.dom=I.firstChild,e.domSize=I.childNodes.length;for(var N=u(i).createDocumentFragment(),q;q=I.firstChild;)N.appendChild(q);ne(i,N,s)}function f(i,e,t,s,m){var I=u(i).createDocumentFragment();if(e.children!=null){var N=e.children;h(I,N,0,N.length,t,null,s)}e.dom=I.firstChild,e.domSize=I.childNodes.length,ne(i,I,m)}function v(i,e,t,s,m){var I=e.tag,N=e.attrs,q=e.is;s=p(e)||s;var _=s?q?u(i).createElementNS(s,I,{is:q}):u(i).createElementNS(s,I):q?u(i).createElement(I,{is:q}):u(i).createElement(I);if(e.dom=_,N!=null&&Ge(e,N,s),ne(i,_,m),!Ae(e)&&e.children!=null){var j=e.children;h(_,j,0,j.length,t,null,s),e.tag==="select"&&N!=null&&Fe(e,N)}}function z(i,e){var t;if(typeof i.tag.view=="function"){if(i.state=Object.create(i.tag),t=i.state.view,t.$$reentrantLock$$!=null)return;t.$$reentrantLock$$=!0}else{if(i.state=void 0,t=i.tag,t.$$reentrantLock$$!=null)return;t.$$reentrantLock$$=!0,i.state=i.tag.prototype!=null&&typeof i.tag.prototype.view=="function"?new i.tag(i):i.tag(i)}if(le(i.state,i,e),i.attrs!=null&&le(i.attrs,i,e),i.instance=je.normalize(n.call(i.state.view,i)),i.instance===i)throw Error("A view cannot return the vnode it received as argument");t.$$reentrantLock$$=null}function T(i,e,t,s,m){z(e,t),e.instance!=null?(S(i,e.instance,t,s,m),e.dom=e.instance.dom,e.domSize=e.instance.domSize):e.domSize=0}function g(i,e,t,s,m,I){if(!(e===t||e==null&&t==null))if(e==null||e.length===0)h(i,t,0,t.length,s,m,I);else if(t==null||t.length===0)Se(i,e,0,e.length);else{var N=e[0]!=null&&e[0].key!=null,q=t[0]!=null&&t[0].key!=null,_=0,j=0;if(!N)for(;j=j&&Q>=_&&(ee=e[ae],V=t[Q],ee.key===V.key);)ee!==V&&b(i,ee,V,s,m,I),V.dom!=null&&(m=V.dom),ae--,Q--;for(;ae>=j&&Q>=_&&(re=e[j],J=t[_],re.key===J.key);)j++,_++,re!==J&&b(i,re,J,s,de(e,j,m),I);for(;ae>=j&&Q>=_&&!(_===Q||re.key!==V.key||ee.key!==J.key);)w=de(e,j,m),se(i,ee,w),ee!==J&&b(i,ee,J,s,w,I),++_<=--Q&&se(i,re,m),re!==V&&b(i,re,V,s,m,I),V.dom!=null&&(m=V.dom),j++,ae--,ee=e[ae],V=t[Q],re=e[j],J=t[_];for(;ae>=j&&Q>=_&&ee.key===V.key;)ee!==V&&b(i,ee,V,s,m,I),V.dom!=null&&(m=V.dom),ae--,Q--,ee=e[ae],V=t[Q];if(_>Q)Se(i,e,j,ae+1);else if(j>ae)h(i,t,_,Q+1,s,m,I);else{var L=m,Y=Q-_+1,Z=new Array(Y),ie=0,G=0,te=2147483647,ue=0,fe,ge;for(G=0;G=_;G--){fe==null&&(fe=y(e,j,ae+1)),V=t[G];var ke=fe[V.key];ke!=null&&(te=ke=_;G--)J=t[G],Z[G-_]===-1?S(i,J,s,I,m):ge[ie]===G-_?ie--:se(i,J,m),J.dom!=null&&(m=t[G].dom);else for(G=Q;G>=_;G--)J=t[G],Z[G-_]===-1&&S(i,J,s,I,m),J.dom!=null&&(m=t[G].dom)}}else{var Ie=e.lengthIe&&Se(i,e,_,e.length),t.length>Ie&&h(i,t,_,t.length,s,m,I)}}}function b(i,e,t,s,m,I){var N=e.tag,q=t.tag;if(N===q&&e.is===t.is){if(t.state=e.state,t.events=e.events,K(t,e))return;if(typeof N=="string")switch(t.attrs!=null&&me(t.attrs,t,s),N){case"#":o(e,t);break;case"<":D(i,e,t,I,m);break;case"[":C(i,e,t,s,m,I);break;default:E(e,t,s,I)}else R(i,e,t,s,m,I)}else we(i,e),S(i,t,s,I,m)}function o(i,e){i.children.toString()!==e.children.toString()&&(i.dom.nodeValue=e.children),e.dom=i.dom}function D(i,e,t,s,m){e.children!==t.children?(Re(i,e),B(i,t,s,m)):(t.dom=e.dom,t.domSize=e.domSize)}function C(i,e,t,s,m,I){g(i,e.children,t.children,s,m,I);var N=0,q=t.children;if(t.dom=null,q!=null)for(var _=0;_>>1)+(s>>>1)+(t&s&1);i[e[q]]0&&(x[m]=e[t-1]),e[t]=m)}for(t=e.length,s=e[t-1];t-- >0;)e[t]=s,s=x[s];return x.length=0,e}function de(i,e,t){for(;e-1||i.is||e!=="href"&&e!=="list"&&e!=="form"&&e!=="width"&&e!=="height")&&e in i.dom}function X(i,e,t){if(e!==t)if(t==null)i.style="";else if(typeof t!="object")i.style=t;else if(e==null||typeof e!="object"){i.style="";for(var s in t){var m=t[s];m!=null&&(s.includes("-")?i.style.setProperty(s,String(m)):i.style[s]=String(m))}}else{for(var s in e)e[s]!=null&&t[s]==null&&(s.includes("-")?i.style.removeProperty(s):i.style[s]="");for(var s in t){var m=t[s];m!=null&&(m=String(m))!==String(e[s])&&(s.includes("-")?i.style.setProperty(s,m):i.style[s]=m)}}}function O(){this._=r}O.prototype=Object.create(null),O.prototype.handleEvent=function(i){var e=this["on"+i.type],t;typeof e=="function"?t=e.call(i.currentTarget,i):typeof e.handleEvent=="function"&&e.handleEvent(i);var s=this;s._!=null&&(i.redraw!==!1&&(0,s._)(),t!=null&&typeof t.then=="function"&&Promise.resolve(t).then(function(){s._!=null&&i.redraw!==!1&&(0,s._)()})),t===!1&&(i.preventDefault(),i.stopPropagation())};function $(i,e,t){if(i.events!=null){if(i.events._=r,i.events[e]===t)return;t!=null&&(typeof t=="function"||typeof t=="object")?(i.events[e]==null&&i.dom.addEventListener(e.slice(2),i.events,!1),i.events[e]=t):(i.events[e]!=null&&i.dom.removeEventListener(e.slice(2),i.events,!1),i.events[e]=void 0)}else t!=null&&(typeof t=="function"||typeof t=="object")&&(i.events=new O,i.dom.addEventListener(e.slice(2),i.events,!1),i.events[e]=t)}function le(i,e,t){typeof i.oninit=="function"&&n.call(i.oninit,e),typeof i.oncreate=="function"&&t.push(n.bind(i.oncreate,e))}function me(i,e,t){typeof i.onupdate=="function"&&t.push(n.bind(i.onupdate,e))}function K(i,e){do{if(i.attrs!=null&&typeof i.attrs.onbeforeupdate=="function"){var t=n.call(i.attrs.onbeforeupdate,i,e);if(t!==void 0&&!t)break}if(typeof i.tag!="string"&&typeof i.state.onbeforeupdate=="function"){var t=n.call(i.state.onbeforeupdate,i,e);if(t!==void 0&&!t)break}return!1}while(!1);return i.dom=e.dom,i.domSize=e.domSize,i.instance=e.instance,i.attrs=e.attrs,i.children=e.children,i.text=e.text,!0}var pe;return function(i,e,t){if(!i)throw new TypeError("DOM element being rendered to does not exist.");if(pe!=null&&i.contains(pe))throw new TypeError("Node is currently being rendered to and thus is locked.");var s=r,m=pe,I=[],N=k(i),q=i.namespaceURI;pe=i,r=typeof t=="function"?t:void 0,d={};try{i.vnodes==null&&(i.textContent=""),e=je.normalizeChildren(Array.isArray(e)?e:[e]),g(i,i.vnodes,e,I,null,q==="http://www.w3.org/1999/xhtml"?void 0:q),i.vnodes=e,N!=null&&k(i)!==N&&typeof N.focus=="function"&&N.focus();for(var _=0;_=0&&(u.splice(A,2),A<=c&&(c-=2),a(S,[])),M!=null&&(u.push(S,M),a(S,ni(M),k))}return{mount:h,redraw:k}},et=Ai,$e=$i(et,typeof requestAnimationFrame<"u"?requestAnimationFrame:null,typeof console<"u"?console:null),Ue,oi;function Ti(){return oi||(oi=1,Ue=function(a){if(Object.prototype.toString.call(a)!=="[object Object]")return"";var r=[];for(var d in a)u(d,a[d]);return r.join("&");function u(p,c){if(Array.isArray(c))for(var n=0;n=0&&(v+=r.slice(u,c)),M>=0&&(v+=(u<0?"?":"&")+S.slice(M,B));var z=a(h);return z&&(v+=(u<0&&M<0?"?":"&")+z),p>=0&&(v+=r.slice(p)),A>=0&&(v+=(p<0?"":"&")+S.slice(A)),v},He}var it=ei(),li=Qe,tt=function(a,r){function d(c){return new Promise(c)}function u(c,n){return new Promise(function(k,h){c=it(c,n.params);var S=n.method!=null?n.method.toUpperCase():"GET",M=n.body,A=(n.serialize==null||n.serialize===JSON.serialize)&&!(M instanceof a.FormData||M instanceof a.URLSearchParams),B=n.responseType||(typeof n.extract=="function"?"":"json"),f=new a.XMLHttpRequest,v=!1,z=!1,T=f,g,b=f.abort;f.abort=function(){v=!0,b.call(this)},f.open(S,c,n.async!==!1,typeof n.user=="string"?n.user:void 0,typeof n.password=="string"?n.password:void 0),A&&M!=null&&!p(n,"content-type")&&f.setRequestHeader("Content-Type","application/json; charset=utf-8"),typeof n.deserialize!="function"&&!p(n,"accept")&&f.setRequestHeader("Accept","application/json, text/*"),n.withCredentials&&(f.withCredentials=n.withCredentials),n.timeout&&(f.timeout=n.timeout),f.responseType=B;for(var o in n.headers)li.call(n.headers,o)&&f.setRequestHeader(o,n.headers[o]);f.onreadystatechange=function(D){if(!v&&D.target.readyState===4)try{var C=D.target.status>=200&&D.target.status<300||D.target.status===304||/^file:\/\//i.test(c),E=D.target.response,R;if(B==="json"){if(!D.target.responseType&&typeof n.extract!="function")try{E=JSON.parse(D.target.responseText)}catch{E=null}}else(!B||B==="text")&&E==null&&(E=D.target.responseText);if(typeof n.extract=="function"?(E=n.extract(D.target,n),C=!0):typeof n.deserialize=="function"&&(E=n.deserialize(E)),C){if(typeof n.type=="function")if(Array.isArray(E))for(var y=0;y-1&&S.pop();for(var A=0;A` und `