diff --git a/suites-experimental/suites.mjs b/suites-experimental/suites.mjs index 5999b344b2..d6f03984a5 100644 --- a/suites-experimental/suites.mjs +++ b/suites-experimental/suites.mjs @@ -397,4 +397,85 @@ 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 = ["", "I", "Int", "Inte", "Intel", "", "A", "App", "Appl", "Apple", "", "C", "Comp", "Comput", "Computer"]; + for (let round = 0; round < 2; 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, 7); + for (let round = 0; round < 4; 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 < 7; 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 0000000000..f9efed21ed --- /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/README.md b/suites-experimental/timeline/README.md new file mode 100644 index 0000000000..27902a4848 --- /dev/null +++ b/suites-experimental/timeline/README.md @@ -0,0 +1,18 @@ +# Timeline Experimental Workload (`suites-experimental/timeline`) + +Interactive scrollytelling benchmark tracking computing milestones from 1900 to the present across five localized languages: German (`DE`), French (`FR`), Italian (`IT`), Traditional Chinese (`TW`), and Japanese (`JP`). + +## Licensing & Attribution + +This experimental workload separates software code from external factual datasets, governed by distinct open-source licenses: + +### 1. Software Harness & UI Code (BSD 2-Clause) + +All software source code, TypeScript/JavaScript runners, Mithril.js UI components (`src/components/*`, `src/main.ts`, `src/i18n.ts`), test suites (`tests/*`), and build utilities (`generate-index.js`) are licensed under the **BSD 2-Clause License** (see the root [`LICENSE`](../../LICENSE) file). + +### 2. Historical Benchmark Data & Translations (CC BY-SA 4.0) + +The historical event summaries, descriptions, titles, and localized translations contained within `src/data/*.js` (`1900.js` through `2026.js`) are adapted, condensed, and translated by gemini from articles on **[Wikipedia, The Free Encyclopedia](https://www.wikipedia.org/)**, authored by Wikipedia contributors. + +- **License**: All textual content and data structures within `src/data/*.js` are licensed under the **Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA 4.0)** (or compatible earlier CC BY-SA 3.0 / GFDL terms where applicable). Full license text: https://creativecommons.org/licenses/by-sa/4.0/ +- **Modifications & Translations**: Original Wikipedia article text has been condensed into structured JSON/JS data arrays and translated across German (`DE`), French (`FR`), Italian (`IT`), Traditional Chinese (`TW`), and Japanese (`JP`) using gemini. diff --git a/suites-experimental/timeline/data-generator.js b/suites-experimental/timeline/data-generator.js new file mode 100644 index 0000000000..a96d43df5d --- /dev/null +++ b/suites-experimental/timeline/data-generator.js @@ -0,0 +1,86 @@ +// Copyright (C) 2024-2026 Speedometer Contributors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted under the terms of the BSD 2-Clause License (see root LICENSE file). + +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 0000000000..1606cceef1 --- /dev/null +++ b/suites-experimental/timeline/dist/assets/index.css @@ -0,0 +1 @@ +@font-face{font-family:Plus Jakarta Sans;font-style:normal;font-display:swap;font-weight:200 800;src:url(./plus-jakarta-sans-latin-ext-wght-normal.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Plus Jakarta Sans;font-style:normal;font-display:swap;font-weight:200 800;src:url(./plus-jakarta-sans-latin-wght-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Plus Jakarta Sans;font-style:italic;font-display:swap;font-weight:200 800;src:url(./plus-jakarta-sans-latin-ext-wght-italic.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Plus Jakarta Sans;font-style:italic;font-display:swap;font-weight:200 800;src:url(./plus-jakarta-sans-latin-wght-italic.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}: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;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.card-active,.timeline-card:focus{box-shadow:0 0 35px var(--primary-color),inset 0 0 25px #38bdf833!important;border-color:var(--primary-color)!important;transform:scale(1.02);outline:2px solid var(--primary-color);outline-offset:4px}.virtual-layout .timeline-card.card-active,.virtual-layout .timeline-card:focus{transform:translateY(-50%) 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;overflow-wrap:break-word;word-break:break-word;line-break:strict}.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;overflow-wrap:break-word;word-break:break-word;line-break:strict}.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;overflow-wrap:break-word;word-break:break-word;line-break:strict}.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(search-results){background-color:#fbbf2440;color:#fcd34d;text-decoration:underline solid #fbbf24 2px;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 0000000000..fbfc1b6dbf --- /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 u of document.querySelectorAll('link[rel="modulepreload"]'))m(u);new MutationObserver(u=>{for(const l of u)if(l.type==="childList")for(const n of l.addedNodes)n.tagName==="LINK"&&n.rel==="modulepreload"&&m(n)}).observe(document,{childList:!0,subtree:!0});function o(u){const l={};return u.integrity&&(l.integrity=u.integrity),u.referrerPolicy&&(l.referrerPolicy=u.referrerPolicy),u.crossOrigin==="use-credentials"?l.credentials="include":u.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function m(u){if(u.ep)return;u.ep=!0;const l=o(u);fetch(u.href,l)}})();function Li(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Ne,oi;function Se(){if(oi)return Ne;oi=1;function t(r,o,m,u,l,n){return{tag:r,key:o,attrs:m,children:u,text:l,dom:n,is:void 0,domSize:void 0,state:void 0,events:void 0,instance:void 0}}return t.normalize=function(r){return Array.isArray(r)?t("[",void 0,void 0,t.normalizeChildren(r),void 0,void 0):r==null||typeof r=="boolean"?null:typeof r=="object"?r:t("#",void 0,void 0,String(r),void 0,void 0)},t.normalizeChildren=function(r){for(var o=new Array(r.length),m=0,u=0;u0&&(u.className=m.join(" ")),ji(u)?u=Pi:Ji.set(u,l),Ei[t]={tag:o,attrs:u,is:u.is}}function Vi(t,r){r.tag=t.tag;var o=r.attrs;if(o==null)return r.attrs=t.attrs,r.is=t.is,r;if(Qe.call(o,"class")&&(o.class!=null&&(o.className=o.class),o.class=null),t.attrs!==Pi){var m=o.className;o=Object.assign({},t.attrs,o),t.attrs.className!=null&&(o.className=m!=null?String(t.attrs.className)+" "+String(m):t.attrs.className)}return t.tag==="input"&&Qe.call(o,"type")&&(o=Object.assign({type:o.type},o)),r.is=o.is,r.attrs=o,r}function Ki(t,r,...o){if(t==null||typeof t!="string"&&typeof t!="function"&&typeof t.view!="function")throw Error("The selector must be either a string or a component.");var m=Zi(r,o);return typeof t=="string"&&(m.children=Ni.normalizeChildren(m.children),t!=="[")?Vi(Ei[t]||Ui(t),m):(m.attrs==null&&(m.attrs={}),m.tag=t,m)}var Di=Ki,Xi=Se(),Yi=function(t){return t==null&&(t=""),Xi("<",void 0,void 0,t,void 0,void 0)},Qi=Se(),$i=Ai,et=function(t,...r){var o=$i(t,r);return o.attrs==null&&(o.attrs={}),o.tag="[",o.children=Qi.normalizeChildren(o.children),o},ti=Di;ti.trust=Yi;ti.fragment=et;var it=ti,Ci=new WeakMap,Ze,si;function Mi(){if(si)return Ze;si=1;var t=Ci;function*r(o){var m=o.dom,u=o.domSize,l=t.get(m);if(m!=null)do{var n=m.nextSibling;t.get(m)===l&&(yield m,u--),m=n}while(u)}return Ze=r,Ze}var Je=Se(),tt=Ci,qe=Mi(),li=Ii,at=function(){var t={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},r,o;function m(i){return i.ownerDocument}function u(i){return i.attrs&&i.attrs.xmlns||t[i.tag]}function l(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{l(i,e)}}function w(i){try{return m(i).activeElement}catch{return null}}function k(i,e,a,c,h,z,W){for(var G=a;G'+e.children+"",z=z.firstChild):z.innerHTML=e.children,e.dom=z.firstChild,e.domSize=z.childNodes.length;for(var W=m(i).createDocumentFragment(),G;G=z.firstChild;)W.appendChild(G);se(i,W,c)}function C(i,e,a,c,h){var z=m(i).createDocumentFragment();if(e.children!=null){var W=e.children;k(z,W,0,W.length,a,null,c)}e.dom=z.firstChild,e.domSize=z.childNodes.length,se(i,z,h)}function S(i,e,a,c,h){var z=e.tag,W=e.attrs,G=e.is;c=u(e)||c;var B=c?G?m(i).createElementNS(c,z,{is:G}):m(i).createElementNS(c,z):G?m(i).createElement(z,{is:G}):m(i).createElement(z);if(e.dom=B,W!=null&&We(e,W,c),se(i,B,h),!Ee(e)&&e.children!=null){var N=e.children;k(B,N,0,N.length,a,null,c),e.tag==="select"&&W!=null&&Fe(e,W)}}function p(i,e){var a;if(typeof i.tag.view=="function"){if(i.state=Object.create(i.tag),a=i.state.view,a.$$reentrantLock$$!=null)return;a.$$reentrantLock$$=!0}else{if(i.state=void 0,a=i.tag,a.$$reentrantLock$$!=null)return;a.$$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");a.$$reentrantLock$$=null}function A(i,e,a,c,h){p(e,a),e.instance!=null?(v(i,e.instance,a,c,h),e.dom=e.instance.dom,e.domSize=e.instance.domSize):e.domSize=0}function g(i,e,a,c,h,z){if(!(e===a||e==null&&a==null))if(e==null||e.length===0)k(i,a,0,a.length,c,h,z);else if(a==null||a.length===0)Ae(i,e,0,e.length);else{var W=e[0]!=null&&e[0].key!=null,G=a[0]!=null&&a[0].key!=null,B=0,N=0;if(!W)for(;N=N&&Q>=B&&(ie=e[re],V=a[Q],ie.key===V.key);)ie!==V&&P(i,ie,V,c,h,z),V.dom!=null&&(h=V.dom),re--,Q--;for(;re>=N&&Q>=B&&(ne=e[N],K=a[B],ne.key===K.key);)N++,B++,ne!==K&&P(i,ne,K,c,Z(e,N,h),z);for(;re>=N&&Q>=B&&!(B===Q||ne.key!==V.key||ie.key!==K.key);)b=Z(e,N,h),ue(i,ie,b),ie!==K&&P(i,ie,K,c,b,z),++B<=--Q&&ue(i,ne,h),ne!==V&&P(i,ne,V,c,h,z),V.dom!=null&&(h=V.dom),N++,re--,ie=e[re],V=a[Q],ne=e[N],K=a[B];for(;re>=N&&Q>=B&&ie.key===V.key;)ie!==V&&P(i,ie,V,c,h,z),V.dom!=null&&(h=V.dom),re--,Q--,ie=e[re],V=a[Q];if(B>Q)Ae(i,e,N,re+1);else if(N>re)k(i,a,B,Q+1,c,h,z);else{var L=h,$=Q-B+1,X=new Array($),te=0,H=0,ae=2147483647,de=0,ke,ge;for(H=0;H<$;H++)X[H]=-1;for(H=Q;H>=B;H--){ke==null&&(ke=M(e,N,re+1)),V=a[H];var we=ke[V.key];we!=null&&(ae=we=B;H--)K=a[H],X[H-B]===-1?v(i,K,c,z,h):ge[te]===H-B?te--:ue(i,K,h),K.dom!=null&&(h=a[H].dom);else for(H=Q;H>=B;H--)K=a[H],X[H-B]===-1&&v(i,K,c,z,h),K.dom!=null&&(h=a[H].dom)}}else{var ze=e.lengthze&&Ae(i,e,B,e.length),a.length>ze&&k(i,a,B,a.length,c,h,z)}}}function P(i,e,a,c,h,z){var W=e.tag,G=a.tag;if(W===G&&e.is===a.is){if(a.state=e.state,a.events=e.events,U(a,e))return;if(typeof W=="string")switch(a.attrs!=null&&me(a.attrs,a,c),W){case"#":s(e,a);break;case"<":f(i,e,a,z,h);break;case"[":D(i,e,a,c,h,z);break;default:T(e,a,c,z)}else F(i,e,a,c,h,z)}else fe(i,e),v(i,a,c,z,h)}function s(i,e){i.children.toString()!==e.children.toString()&&(i.dom.nodeValue=e.children),e.dom=i.dom}function f(i,e,a,c,h){e.children!==a.children?(Re(i,e),x(i,a,c,h)):(a.dom=e.dom,a.domSize=e.domSize)}function D(i,e,a,c,h,z){g(i,e.children,a.children,c,h,z);var W=0,G=a.children;if(a.dom=null,G!=null)for(var B=0;B>>1)+(c>>>1)+(a&c&1);i[e[G]]0&&(R[h]=e[a-1]),e[a]=h)}for(a=e.length,c=e[a-1];a-- >0;)e[a]=c,c=R[c];return R.length=0,e}function Z(i,e,a){for(;e-1||i.is||e!=="href"&&e!=="list"&&e!=="form"&&e!=="width"&&e!=="height")&&e in i.dom}function Y(i,e,a){if(e!==a)if(a==null)i.style="";else if(typeof a!="object")i.style=a;else if(e==null||typeof e!="object"){i.style="";for(var c in a){var h=a[c];h!=null&&(c.includes("-")?i.style.setProperty(c,String(h)):i.style[c]=String(h))}}else{for(var c in e)e[c]!=null&&a[c]==null&&(c.includes("-")?i.style.removeProperty(c):i.style[c]="");for(var c in a){var h=a[c];h!=null&&(h=String(h))!==String(e[c])&&(c.includes("-")?i.style.setProperty(c,h):i.style[c]=h)}}}function q(){this._=r}q.prototype=Object.create(null),q.prototype.handleEvent=function(i){var e=this["on"+i.type],a;typeof e=="function"?a=e.call(i.currentTarget,i):typeof e.handleEvent=="function"&&e.handleEvent(i);var c=this;c._!=null&&(i.redraw!==!1&&(0,c._)(),a!=null&&typeof a.then=="function"&&Promise.resolve(a).then(function(){c._!=null&&i.redraw!==!1&&(0,c._)()})),a===!1&&(i.preventDefault(),i.stopPropagation())};function ee(i,e,a){if(i.events!=null){if(i.events._=r,i.events[e]===a)return;a!=null&&(typeof a=="function"||typeof a=="object")?(i.events[e]==null&&i.dom.addEventListener(e.slice(2),i.events,!1),i.events[e]=a):(i.events[e]!=null&&i.dom.removeEventListener(e.slice(2),i.events,!1),i.events[e]=void 0)}else a!=null&&(typeof a=="function"||typeof a=="object")&&(i.events=new q,i.dom.addEventListener(e.slice(2),i.events,!1),i.events[e]=a)}function le(i,e,a){typeof i.oninit=="function"&&n.call(i.oninit,e),typeof i.oncreate=="function"&&a.push(n.bind(i.oncreate,e))}function me(i,e,a){typeof i.onupdate=="function"&&a.push(n.bind(i.onupdate,e))}function U(i,e){do{if(i.attrs!=null&&typeof i.attrs.onbeforeupdate=="function"){var a=n.call(i.attrs.onbeforeupdate,i,e);if(a!==void 0&&!a)break}if(typeof i.tag!="string"&&typeof i.state.onbeforeupdate=="function"){var a=n.call(i.state.onbeforeupdate,i,e);if(a!==void 0&&!a)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 ce;return function(i,e,a){if(!i)throw new TypeError("DOM element being rendered to does not exist.");if(ce!=null&&i.contains(ce))throw new TypeError("Node is currently being rendered to and thus is locked.");var c=r,h=ce,z=[],W=w(i),G=i.namespaceURI;ce=i,r=typeof a=="function"?a:void 0,o={};try{i.vnodes==null&&(i.textContent=""),e=Je.normalizeChildren(Array.isArray(e)?e:[e]),g(i,i.vnodes,e,z,null,G==="http://www.w3.org/1999/xhtml"?void 0:G),i.vnodes=e,W!=null&&w(i)!==W&&typeof W.focus=="function"&&W.focus();for(var B=0;B=0&&(m.splice(E,2),E<=l&&(l-=2),t(v,[])),I!=null&&(m.push(v,I),t(v,di(I),w))}return{mount:k,redraw:w}},nt=Ti,ai=rt(nt,typeof requestAnimationFrame<"u"?requestAnimationFrame:null,typeof console<"u"?console:null),je,ui;function yi(){return ui||(ui=1,je=function(t){if(Object.prototype.toString.call(t)!=="[object Object]")return"";var r=[];for(var o in t)m(o,t[o]);return r.join("&");function m(u,l){if(Array.isArray(l))for(var n=0;n=0&&(S+=r.slice(m,l)),I>=0&&(S+=(m<0?"?":"&")+v.slice(I,x));var p=t(k);return p&&(S+=(m<0&&I<0?"?":"&")+p),u>=0&&(S+=r.slice(u)),E>=0&&(S+=(u<0?"":"&")+v.slice(E)),S},Oe}var ot=ri(),ci=ii,st=function(t,r){function o(l){return new Promise(l)}function m(l,n){return new Promise(function(w,k){l=ot(l,n.params);var v=n.method!=null?n.method.toUpperCase():"GET",I=n.body,E=(n.serialize==null||n.serialize===JSON.serialize)&&!(I instanceof t.FormData||I instanceof t.URLSearchParams),x=n.responseType||(typeof n.extract=="function"?"":"json"),C=new t.XMLHttpRequest,S=!1,p=!1,A=C,g,P=C.abort;C.abort=function(){S=!0,P.call(this)},C.open(v,l,n.async!==!1,typeof n.user=="string"?n.user:void 0,typeof n.password=="string"?n.password:void 0),E&&I!=null&&!u(n,"content-type")&&C.setRequestHeader("Content-Type","application/json; charset=utf-8"),typeof n.deserialize!="function"&&!u(n,"accept")&&C.setRequestHeader("Accept","application/json, text/*"),n.withCredentials&&(C.withCredentials=n.withCredentials),n.timeout&&(C.timeout=n.timeout),C.responseType=x;for(var s in n.headers)ci.call(n.headers,s)&&C.setRequestHeader(s,n.headers[s]);C.onreadystatechange=function(f){if(!S&&f.target.readyState===4)try{var D=f.target.status>=200&&f.target.status<300||f.target.status===304||/^file:\/\//i.test(l),T=f.target.response,F;if(x==="json"){if(!f.target.responseType&&typeof n.extract!="function")try{T=JSON.parse(f.target.responseText)}catch{T=null}}else(!x||x==="text")&&T==null&&(T=f.target.responseText);if(typeof n.extract=="function"?(T=n.extract(f.target,n),D=!0):typeof n.deserialize=="function"&&(T=n.deserialize(T)),D){if(typeof n.type=="function")if(Array.isArray(T))for(var M=0;M-1&&v.pop();for(var E=0;E` und `