diff options
Diffstat (limited to 'frontend/coverage')
24 files changed, 0 insertions, 7995 deletions
diff --git a/frontend/coverage/base.css b/frontend/coverage/base.css deleted file mode 100644 index f418035..0000000 --- a/frontend/coverage/base.css +++ /dev/null @@ -1,224 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* yellow */ -.cbranch-no { background: yellow !important; color: #111; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -.highlighted, -.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ - background: #C21F39 !important; -} -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } -/* dark yellow (gold) */ -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -.medium .chart { border:1px solid #f9cd0b; } -/* light yellow */ -.medium { background: #fff4c2; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -span.cline-neutral { background: #eaeaea; } - -.coverage-summary td.empty { - opacity: .5; - padding-top: 4px; - padding-bottom: 4px; - line-height: 1; - color: #888; -} - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/frontend/coverage/block-navigation.js b/frontend/coverage/block-navigation.js deleted file mode 100644 index 530d1ed..0000000 --- a/frontend/coverage/block-navigation.js +++ /dev/null @@ -1,87 +0,0 @@ -/* eslint-disable */ -var jumpToCode = (function init() { - // Classes of code we would like to highlight in the file view - var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; - - // Elements to highlight in the file listing view - var fileListingElements = ['td.pct.low']; - - // We don't want to select elements that are direct descendants of another match - var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` - - // Selector that finds elements on the page to which we can jump - var selector = - fileListingElements.join(', ') + - ', ' + - notSelector + - missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` - - // The NodeList of matching elements - var missingCoverageElements = document.querySelectorAll(selector); - - var currentIndex; - - function toggleClass(index) { - missingCoverageElements - .item(currentIndex) - .classList.remove('highlighted'); - missingCoverageElements.item(index).classList.add('highlighted'); - } - - function makeCurrent(index) { - toggleClass(index); - currentIndex = index; - missingCoverageElements.item(index).scrollIntoView({ - behavior: 'smooth', - block: 'center', - inline: 'center' - }); - } - - function goToPrevious() { - var nextIndex = 0; - if (typeof currentIndex !== 'number' || currentIndex === 0) { - nextIndex = missingCoverageElements.length - 1; - } else if (missingCoverageElements.length > 1) { - nextIndex = currentIndex - 1; - } - - makeCurrent(nextIndex); - } - - function goToNext() { - var nextIndex = 0; - - if ( - typeof currentIndex === 'number' && - currentIndex < missingCoverageElements.length - 1 - ) { - nextIndex = currentIndex + 1; - } - - makeCurrent(nextIndex); - } - - return function jump(event) { - if ( - document.getElementById('fileSearch') === document.activeElement && - document.activeElement != null - ) { - // if we're currently focused on the search input, we don't want to navigate - return; - } - - switch (event.which) { - case 78: // n - case 74: // j - goToNext(); - break; - case 66: // b - case 75: // k - case 80: // p - goToPrevious(); - break; - } - }; -})(); -window.addEventListener('keydown', jumpToCode); diff --git a/frontend/coverage/clover.xml b/frontend/coverage/clover.xml deleted file mode 100644 index 8eba461..0000000 --- a/frontend/coverage/clover.xml +++ /dev/null @@ -1,385 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<coverage generated="1771133450877" clover="3.2.0"> - <project timestamp="1771133450877" name="All files"> - <metrics statements="331" coveredstatements="286" conditionals="228" coveredconditionals="167" methods="108" coveredmethods="88" elements="667" coveredelements="541" complexity="0" loc="331" ncloc="331" packages="2" files="14" classes="14"/> - <package name="src"> - <metrics statements="45" coveredstatements="32" conditionals="35" coveredconditionals="23" methods="15" coveredmethods="9"/> - <file name="App.css" path="/Users/adam/workspace/vibecode/neko/frontend/src/App.css"> - <metrics statements="0" coveredstatements="0" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/> - </file> - <file name="App.tsx" path="/Users/adam/workspace/vibecode/neko/frontend/src/App.tsx"> - <metrics statements="34" coveredstatements="22" conditionals="25" coveredconditionals="15" methods="13" coveredmethods="7"/> - <line num="9" count="2" type="stmt"/> - <line num="10" count="2" type="stmt"/> - <line num="12" count="2" type="stmt"/> - <line num="13" count="1" type="stmt"/> - <line num="15" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="16" count="1" type="stmt"/> - <line num="18" count="0" type="stmt"/> - <line num="21" count="0" type="stmt"/> - <line num="24" count="2" type="cond" truecount="2" falsecount="0"/> - <line num="25" count="1" type="stmt"/> - <line num="28" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="29" count="0" type="stmt"/> - <line num="32" count="1" type="stmt"/> - <line num="47" count="1" type="stmt"/> - <line num="49" count="1" type="stmt"/> - <line num="50" count="1" type="stmt"/> - <line num="51" count="0" type="cond" truecount="0" falsecount="2"/> - <line num="52" count="0" type="stmt"/> - <line num="54" count="0" type="stmt"/> - <line num="57" count="1" type="stmt"/> - <line num="58" count="1" type="stmt"/> - <line num="61" count="1" type="stmt"/> - <line num="69" count="0" type="stmt"/> - <line num="78" count="0" type="stmt"/> - <line num="103" count="2" type="cond" truecount="2" falsecount="0"/> - <line num="104" count="2" type="cond" truecount="2" falsecount="0"/> - <line num="106" count="2" type="stmt"/> - <line num="107" count="0" type="stmt"/> - <line num="108" count="0" type="stmt"/> - <line num="111" count="2" type="stmt"/> - <line num="112" count="0" type="stmt"/> - <line num="113" count="0" type="stmt"/> - <line num="116" count="2" type="cond" truecount="1" falsecount="1"/> - <line num="118" count="2" type="stmt"/> - </file> - <file name="utils.ts" path="/Users/adam/workspace/vibecode/neko/frontend/src/utils.ts"> - <metrics statements="11" coveredstatements="10" conditionals="10" coveredconditionals="8" methods="2" coveredmethods="2"/> - <line num="2" count="14" type="stmt"/> - <line num="3" count="14" type="stmt"/> - <line num="4" count="14" type="cond" truecount="1" falsecount="1"/> - <line num="12" count="54" type="cond" truecount="2" falsecount="0"/> - <line num="13" count="54" type="stmt"/> - <line num="15" count="54" type="cond" truecount="2" falsecount="0"/> - <line num="17" count="54" type="cond" truecount="2" falsecount="0"/> - <line num="18" count="14" type="stmt"/> - <line num="19" count="14" type="cond" truecount="1" falsecount="1"/> - <line num="20" count="0" type="stmt"/> - <line num="27" count="54" type="stmt"/> - </file> - </package> - <package name="src.components"> - <metrics statements="286" coveredstatements="254" conditionals="193" coveredconditionals="144" methods="93" coveredmethods="79"/> - <file name="FeedItem.css" path="/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedItem.css"> - <metrics statements="0" coveredstatements="0" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/> - </file> - <file name="FeedItem.tsx" path="/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedItem.tsx"> - <metrics statements="31" coveredstatements="25" conditionals="23" coveredconditionals="20" methods="12" coveredmethods="10"/> - <line num="12" count="56" type="stmt"/> - <line num="13" count="56" type="stmt"/> - <line num="15" count="56" type="stmt"/> - <line num="16" count="22" type="stmt"/> - <line num="19" count="56" type="stmt"/> - <line num="20" count="1" type="stmt"/> - <line num="23" count="56" type="stmt"/> - <line num="24" count="1" type="stmt"/> - <line num="26" count="1" type="stmt"/> - <line num="27" count="1" type="stmt"/> - <line num="29" count="1" type="stmt"/> - <line num="41" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="42" count="0" type="stmt"/> - <line num="44" count="1" type="stmt"/> - <line num="49" count="1" type="stmt"/> - <line num="52" count="0" type="stmt"/> - <line num="54" count="0" type="stmt"/> - <line num="55" count="0" type="stmt"/> - <line num="59" count="56" type="stmt"/> - <line num="60" count="1" type="stmt"/> - <line num="61" count="1" type="stmt"/> - <line num="62" count="1" type="stmt"/> - <line num="64" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="65" count="1" type="stmt"/> - <line num="68" count="1" type="stmt"/> - <line num="69" count="1" type="stmt"/> - <line num="72" count="0" type="stmt"/> - <line num="73" count="0" type="stmt"/> - <line num="77" count="56" type="stmt"/> - <line num="85" count="1" type="stmt"/> - <line num="86" count="1" type="stmt"/> - </file> - <file name="FeedItems.css" path="/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedItems.css"> - <metrics statements="0" coveredstatements="0" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/> - </file> - <file name="FeedItems.tsx" path="/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedItems.tsx"> - <metrics statements="119" coveredstatements="106" conditionals="84" coveredconditionals="64" methods="31" coveredmethods="27"/> - <line num="9" count="36" type="stmt"/> - <line num="10" count="36" type="stmt"/> - <line num="11" count="36" type="cond" truecount="2" falsecount="0"/> - <line num="13" count="36" type="stmt"/> - <line num="14" count="36" type="stmt"/> - <line num="15" count="36" type="stmt"/> - <line num="16" count="36" type="stmt"/> - <line num="17" count="36" type="stmt"/> - <line num="18" count="36" type="stmt"/> - <line num="20" count="36" type="stmt"/> - <line num="21" count="11" type="cond" truecount="2" falsecount="0"/> - <line num="22" count="3" type="stmt"/> - <line num="24" count="8" type="stmt"/> - <line num="25" count="8" type="stmt"/> - <line num="27" count="11" type="stmt"/> - <line num="29" count="11" type="stmt"/> - <line num="30" count="11" type="stmt"/> - <line num="32" count="11" type="cond" truecount="2" falsecount="0"/> - <line num="33" count="2" type="stmt"/> - <line num="34" count="9" type="cond" truecount="2" falsecount="0"/> - <line num="35" count="1" type="stmt"/> - <line num="38" count="11" type="cond" truecount="2" falsecount="0"/> - <line num="39" count="3" type="stmt"/> - <line num="43" count="11" type="stmt"/> - <line num="44" count="11" type="cond" truecount="1" falsecount="1"/> - <line num="45" count="0" type="stmt"/> - <line num="48" count="11" type="cond" truecount="1" falsecount="1"/> - <line num="49" count="0" type="stmt"/> - <line num="50" count="11" type="cond" truecount="1" falsecount="1"/> - <line num="51" count="0" type="stmt"/> - <line num="52" count="0" type="stmt"/> - <line num="55" count="11" type="cond" truecount="1" falsecount="1"/> - <line num="56" count="11" type="stmt"/> - <line num="60" count="11" type="stmt"/> - <line num="61" count="11" type="cond" truecount="1" falsecount="1"/> - <line num="62" count="11" type="stmt"/> - <line num="65" count="11" type="stmt"/> - <line num="67" count="10" type="cond" truecount="1" falsecount="1"/> - <line num="68" count="0" type="stmt"/> - <line num="70" count="10" type="stmt"/> - <line num="73" count="9" type="cond" truecount="2" falsecount="0"/> - <line num="74" count="3" type="stmt"/> - <line num="76" count="6" type="stmt"/> - <line num="78" count="9" type="stmt"/> - <line num="79" count="9" type="stmt"/> - <line num="80" count="9" type="stmt"/> - <line num="83" count="1" type="stmt"/> - <line num="84" count="1" type="stmt"/> - <line num="85" count="1" type="stmt"/> - <line num="89" count="36" type="stmt"/> - <line num="90" count="8" type="stmt"/> - <line num="91" count="8" type="stmt"/> - <line num="96" count="36" type="stmt"/> - <line num="97" count="5" type="stmt"/> - <line num="98" count="5" type="cond" truecount="1" falsecount="1"/> - <line num="99" count="5" type="stmt"/> - <line num="103" count="36" type="stmt"/> - <line num="104" count="2" type="stmt"/> - <line num="106" count="3" type="cond" truecount="2" falsecount="0"/> - <line num="108" count="2" type="stmt"/> - <line num="112" count="0" type="stmt"/> - <line num="115" count="36" type="stmt"/> - <line num="116" count="1" type="stmt"/> - <line num="118" count="2" type="cond" truecount="2" falsecount="0"/> - <line num="120" count="1" type="stmt"/> - <line num="124" count="0" type="stmt"/> - <line num="127" count="36" type="stmt"/> - <line num="128" count="31" type="stmt"/> - <line num="129" count="6" type="cond" truecount="1" falsecount="1"/> - <line num="131" count="6" type="cond" truecount="2" falsecount="0"/> - <line num="132" count="5" type="stmt"/> - <line num="133" count="5" type="stmt"/> - <line num="134" count="5" type="cond" truecount="1" falsecount="1"/> - <line num="135" count="5" type="stmt"/> - <line num="136" count="5" type="cond" truecount="2" falsecount="0"/> - <line num="137" count="1" type="stmt"/> - <line num="139" count="5" type="stmt"/> - <line num="144" count="5" type="cond" truecount="5" falsecount="0"/> - <line num="145" count="2" type="stmt"/> - <line num="148" count="5" type="stmt"/> - <line num="150" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="151" count="0" type="stmt"/> - <line num="152" count="0" type="stmt"/> - <line num="153" count="0" type="cond" truecount="0" falsecount="2"/> - <line num="154" count="0" type="stmt"/> - <line num="156" count="0" type="stmt"/> - <line num="158" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="159" count="1" type="stmt"/> - <line num="160" count="1" type="cond" truecount="3" falsecount="1"/> - <line num="161" count="1" type="stmt"/> - <line num="163" count="1" type="stmt"/> - <line num="168" count="31" type="stmt"/> - <line num="169" count="31" type="stmt"/> - <line num="175" count="36" type="stmt"/> - <line num="177" count="31" type="stmt"/> - <line num="179" count="1" type="stmt"/> - <line num="181" count="1" type="cond" truecount="3" falsecount="1"/> - <line num="182" count="1" type="stmt"/> - <line num="183" count="1" type="cond" truecount="4" falsecount="1"/> - <line num="184" count="1" type="stmt"/> - <line num="185" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="186" count="1" type="stmt"/> - <line num="196" count="31" type="stmt"/> - <line num="198" count="1" type="stmt"/> - <line num="199" count="1" type="cond" truecount="5" falsecount="1"/> - <line num="200" count="1" type="stmt"/> - <line num="207" count="31" type="stmt"/> - <line num="208" count="31" type="stmt"/> - <line num="209" count="31" type="cond" truecount="1" falsecount="1"/> - <line num="212" count="31" type="stmt"/> - <line num="213" count="31" type="cond" truecount="2" falsecount="0"/> - <line num="215" count="31" type="stmt"/> - <line num="216" count="31" type="stmt"/> - <line num="217" count="31" type="stmt"/> - <line num="222" count="36" type="cond" truecount="2" falsecount="0"/> - <line num="223" count="21" type="cond" truecount="2" falsecount="0"/> - <line num="225" count="20" type="stmt"/> - <line num="232" count="44" type="stmt"/> - <line num="237" count="0" type="stmt"/> - </file> - <file name="FeedList.css" path="/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedList.css"> - <metrics statements="0" coveredstatements="0" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/> - </file> - <file name="FeedList.tsx" path="/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedList.tsx"> - <metrics statements="50" coveredstatements="45" conditionals="50" coveredconditionals="35" methods="19" coveredmethods="15"/> - <line num="19" count="22" type="stmt"/> - <line num="20" count="22" type="stmt"/> - <line num="21" count="22" type="stmt"/> - <line num="22" count="22" type="stmt"/> - <line num="23" count="22" type="stmt"/> - <line num="24" count="22" type="stmt"/> - <line num="25" count="22" type="stmt"/> - <line num="26" count="22" type="stmt"/> - <line num="27" count="22" type="stmt"/> - <line num="28" count="22" type="stmt"/> - <line num="29" count="22" type="stmt"/> - <line num="31" count="22" type="cond" truecount="3" falsecount="0"/> - <line num="33" count="22" type="stmt"/> - <line num="34" count="11" type="stmt"/> - <line num="35" count="11" type="cond" truecount="1" falsecount="1"/> - <line num="36" count="0" type="stmt"/> - <line num="41" count="22" type="cond" truecount="2" falsecount="0"/> - <line num="44" count="22" type="stmt"/> - <line num="45" count="1" type="stmt"/> - <line num="46" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="47" count="1" type="stmt"/> - <line num="51" count="22" type="stmt"/> - <line num="52" count="2" type="stmt"/> - <line num="55" count="22" type="stmt"/> - <line num="56" count="0" type="stmt"/> - <line num="59" count="22" type="stmt"/> - <line num="60" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="61" count="1" type="stmt"/> - <line num="65" count="22" type="stmt"/> - <line num="66" count="9" type="stmt"/> - <line num="68" count="7" type="cond" truecount="1" falsecount="1"/> - <line num="69" count="7" type="stmt"/> - <line num="72" count="7" type="cond" truecount="1" falsecount="1"/> - <line num="73" count="7" type="stmt"/> - <line num="77" count="7" type="stmt"/> - <line num="78" count="7" type="stmt"/> - <line num="79" count="7" type="stmt"/> - <line num="82" count="1" type="stmt"/> - <line num="83" count="1" type="stmt"/> - <line num="87" count="22" type="cond" truecount="2" falsecount="0"/> - <line num="88" count="13" type="cond" truecount="2" falsecount="0"/> - <line num="90" count="12" type="stmt"/> - <line num="91" count="2" type="stmt"/> - <line num="94" count="12" type="stmt"/> - <line num="96" count="0" type="stmt"/> - <line num="106" count="1" type="stmt"/> - <line num="139" count="4" type="stmt"/> - <line num="163" count="2" type="stmt"/> - <line num="195" count="0" type="stmt"/> - <line num="202" count="0" type="stmt"/> - </file> - <file name="FeedListVariants.css" path="/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedListVariants.css"> - <metrics statements="0" coveredstatements="0" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/> - </file> - <file name="Login.css" path="/Users/adam/workspace/vibecode/neko/frontend/src/components/Login.css"> - <metrics statements="0" coveredstatements="0" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/> - </file> - <file name="Login.tsx" path="/Users/adam/workspace/vibecode/neko/frontend/src/components/Login.tsx"> - <metrics statements="20" coveredstatements="20" conditionals="6" coveredconditionals="5" methods="4" coveredmethods="4"/> - <line num="8" count="17" type="stmt"/> - <line num="9" count="17" type="stmt"/> - <line num="10" count="17" type="stmt"/> - <line num="11" count="17" type="stmt"/> - <line num="13" count="17" type="stmt"/> - <line num="14" count="3" type="stmt"/> - <line num="15" count="3" type="stmt"/> - <line num="17" count="3" type="stmt"/> - <line num="19" count="3" type="stmt"/> - <line num="20" count="3" type="stmt"/> - <line num="21" count="3" type="stmt"/> - <line num="23" count="3" type="stmt"/> - <line num="28" count="2" type="cond" truecount="2" falsecount="0"/> - <line num="29" count="1" type="stmt"/> - <line num="31" count="1" type="stmt"/> - <line num="32" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="35" count="1" type="stmt"/> - <line num="39" count="17" type="stmt"/> - <line num="49" count="3" type="stmt"/> - <line num="58" count="3" type="stmt"/> - </file> - <file name="Settings.css" path="/Users/adam/workspace/vibecode/neko/frontend/src/components/Settings.css"> - <metrics statements="0" coveredstatements="0" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/> - </file> - <file name="Settings.tsx" path="/Users/adam/workspace/vibecode/neko/frontend/src/components/Settings.tsx"> - <metrics statements="66" coveredstatements="58" conditionals="30" coveredconditionals="20" methods="27" coveredmethods="23"/> - <line num="12" count="34" type="stmt"/> - <line num="14" count="34" type="stmt"/> - <line num="15" count="34" type="stmt"/> - <line num="16" count="34" type="stmt"/> - <line num="18" count="34" type="stmt"/> - <line num="21" count="34" type="stmt"/> - <line num="22" count="9" type="stmt"/> - <line num="23" count="9" type="stmt"/> - <line num="25" count="9" type="cond" truecount="1" falsecount="1"/> - <line num="26" count="9" type="stmt"/> - <line num="29" count="9" type="stmt"/> - <line num="30" count="9" type="stmt"/> - <line num="33" count="0" type="stmt"/> - <line num="34" count="0" type="stmt"/> - <line num="38" count="34" type="stmt"/> - <line num="40" count="7" type="stmt"/> - <line num="44" count="34" type="stmt"/> - <line num="45" count="2" type="stmt"/> - <line num="46" count="2" type="cond" truecount="1" falsecount="1"/> - <line num="48" count="2" type="stmt"/> - <line num="49" count="2" type="stmt"/> - <line num="55" count="2" type="cond" truecount="2" falsecount="0"/> - <line num="56" count="1" type="stmt"/> - <line num="59" count="1" type="stmt"/> - <line num="60" count="1" type="stmt"/> - <line num="63" count="1" type="stmt"/> - <line num="64" count="1" type="stmt"/> - <line num="68" count="34" type="stmt"/> - <line num="69" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="71" count="1" type="stmt"/> - <line num="72" count="1" type="stmt"/> - <line num="76" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="77" count="1" type="stmt"/> - <line num="78" count="1" type="stmt"/> - <line num="81" count="0" type="stmt"/> - <line num="82" count="0" type="stmt"/> - <line num="86" count="34" type="stmt"/> - <line num="87" count="1" type="stmt"/> - <line num="88" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="90" count="1" type="stmt"/> - <line num="91" count="1" type="stmt"/> - <line num="92" count="1" type="stmt"/> - <line num="93" count="1" type="stmt"/> - <line num="95" count="1" type="stmt"/> - <line num="100" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="101" count="1" type="stmt"/> - <line num="104" count="1" type="stmt"/> - <line num="105" count="1" type="stmt"/> - <line num="106" count="1" type="stmt"/> - <line num="109" count="0" type="stmt"/> - <line num="110" count="0" type="stmt"/> - <line num="114" count="34" type="stmt"/> - <line num="115" count="1" type="stmt"/> - <line num="116" count="1" type="stmt"/> - <line num="120" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="121" count="1" type="stmt"/> - <line num="124" count="1" type="stmt"/> - <line num="125" count="1" type="stmt"/> - <line num="128" count="0" type="stmt"/> - <line num="129" count="0" type="stmt"/> - <line num="133" count="34" type="stmt"/> - <line num="145" count="1" type="stmt"/> - <line num="163" count="2" type="stmt"/> - <line num="183" count="1" type="cond" truecount="1" falsecount="1"/> - <line num="217" count="6" type="stmt"/> - <line num="223" count="1" type="stmt"/> - </file> - </package> - </project> -</coverage> diff --git a/frontend/coverage/coverage-final.json b/frontend/coverage/coverage-final.json deleted file mode 100644 index b8f97aa..0000000 --- a/frontend/coverage/coverage-final.json +++ /dev/null @@ -1,15 +0,0 @@ -{"/Users/adam/workspace/vibecode/neko/frontend/src/App.css": {"path":"/Users/adam/workspace/vibecode/neko/frontend/src/App.css","statementMap":{},"fnMap":{},"branchMap":{},"s":{},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":0,"seen":{}}} -,"/Users/adam/workspace/vibecode/neko/frontend/src/App.tsx": {"path":"/Users/adam/workspace/vibecode/neko/frontend/src/App.tsx","statementMap":{"0":{"start":{"line":9,"column":22},"end":{"line":9,"column":null}},"1":{"start":{"line":10,"column":8},"end":{"line":10,"column":null}},"2":{"start":{"line":12,"column":2},"end":{"line":22,"column":null}},"3":{"start":{"line":13,"column":4},"end":{"line":21,"column":null}},"4":{"start":{"line":15,"column":8},"end":{"line":19,"column":null}},"5":{"start":{"line":16,"column":10},"end":{"line":16,"column":null}},"6":{"start":{"line":18,"column":10},"end":{"line":18,"column":null}},"7":{"start":{"line":21,"column":19},"end":{"line":21,"column":33}},"8":{"start":{"line":24,"column":2},"end":{"line":26,"column":null}},"9":{"start":{"line":25,"column":4},"end":{"line":25,"column":null}},"10":{"start":{"line":28,"column":2},"end":{"line":30,"column":null}},"11":{"start":{"line":29,"column":4},"end":{"line":29,"column":null}},"12":{"start":{"line":32,"column":2},"end":{"line":32,"column":null}},"13":{"start":{"line":47,"column":42},"end":{"line":47,"column":null}},"14":{"start":{"line":49,"column":2},"end":{"line":59,"column":null}},"15":{"start":{"line":50,"column":25},"end":{"line":56,"column":null}},"16":{"start":{"line":51,"column":6},"end":{"line":55,"column":null}},"17":{"start":{"line":52,"column":8},"end":{"line":52,"column":null}},"18":{"start":{"line":54,"column":8},"end":{"line":54,"column":null}},"19":{"start":{"line":57,"column":4},"end":{"line":57,"column":null}},"20":{"start":{"line":58,"column":4},"end":{"line":58,"column":null}},"21":{"start":{"line":58,"column":17},"end":{"line":58,"column":null}},"22":{"start":{"line":61,"column":2},"end":{"line":98,"column":null}},"23":{"start":{"line":69,"column":27},"end":{"line":69,"column":null}},"24":{"start":{"line":78,"column":27},"end":{"line":78,"column":null}},"25":{"start":{"line":103,"column":24},"end":{"line":103,"column":null}},"26":{"start":{"line":104,"column":32},"end":{"line":104,"column":null}},"27":{"start":{"line":106,"column":25},"end":{"line":109,"column":null}},"28":{"start":{"line":107,"column":4},"end":{"line":107,"column":null}},"29":{"start":{"line":108,"column":4},"end":{"line":108,"column":null}},"30":{"start":{"line":111,"column":29},"end":{"line":114,"column":null}},"31":{"start":{"line":112,"column":4},"end":{"line":112,"column":null}},"32":{"start":{"line":113,"column":4},"end":{"line":113,"column":null}},"33":{"start":{"line":116,"column":19},"end":{"line":116,"column":null}},"34":{"start":{"line":118,"column":2},"end":{"line":136,"column":null}}},"fnMap":{"0":{"name":"RequireAuth","decl":{"start":{"line":8,"column":9},"end":{"line":8,"column":21}},"loc":{"start":{"line":8,"column":69},"end":{"line":33,"column":null}},"line":8},"1":{"name":"(anonymous_1)","decl":{"start":{"line":12,"column":12},"end":{"line":12,"column":18}},"loc":{"start":{"line":12,"column":18},"end":{"line":22,"column":5}},"line":12},"2":{"name":"(anonymous_2)","decl":{"start":{"line":14,"column":12},"end":{"line":14,"column":13}},"loc":{"start":{"line":14,"column":21},"end":{"line":20,"column":7}},"line":14},"3":{"name":"(anonymous_3)","decl":{"start":{"line":21,"column":13},"end":{"line":21,"column":19}},"loc":{"start":{"line":21,"column":19},"end":{"line":21,"column":33}},"line":21},"4":{"name":"Dashboard","decl":{"start":{"line":46,"column":9},"end":{"line":46,"column":19}},"loc":{"start":{"line":46,"column":81},"end":{"line":100,"column":null}},"line":46},"5":{"name":"(anonymous_5)","decl":{"start":{"line":49,"column":12},"end":{"line":49,"column":18}},"loc":{"start":{"line":49,"column":18},"end":{"line":59,"column":5}},"line":49},"6":{"name":"(anonymous_6)","decl":{"start":{"line":50,"column":25},"end":{"line":50,"column":31}},"loc":{"start":{"line":50,"column":31},"end":{"line":56,"column":null}},"line":50},"7":{"name":"(anonymous_7)","decl":{"start":{"line":58,"column":11},"end":{"line":58,"column":17}},"loc":{"start":{"line":58,"column":17},"end":{"line":58,"column":null}},"line":58},"8":{"name":"(anonymous_8)","decl":{"start":{"line":69,"column":21},"end":{"line":69,"column":27}},"loc":{"start":{"line":69,"column":27},"end":{"line":69,"column":null}},"line":69},"9":{"name":"(anonymous_9)","decl":{"start":{"line":78,"column":21},"end":{"line":78,"column":27}},"loc":{"start":{"line":78,"column":27},"end":{"line":78,"column":null}},"line":78},"10":{"name":"App","decl":{"start":{"line":102,"column":9},"end":{"line":102,"column":15}},"loc":{"start":{"line":102,"column":15},"end":{"line":138,"column":null}},"line":102},"11":{"name":"(anonymous_11)","decl":{"start":{"line":106,"column":25},"end":{"line":106,"column":26}},"loc":{"start":{"line":106,"column":47},"end":{"line":109,"column":null}},"line":106},"12":{"name":"(anonymous_12)","decl":{"start":{"line":111,"column":29},"end":{"line":111,"column":30}},"loc":{"start":{"line":111,"column":55},"end":{"line":114,"column":null}},"line":111}},"branchMap":{"0":{"loc":{"start":{"line":15,"column":8},"end":{"line":19,"column":null}},"type":"if","locations":[{"start":{"line":15,"column":8},"end":{"line":19,"column":null}},{"start":{"line":17,"column":15},"end":{"line":19,"column":null}}],"line":15},"1":{"loc":{"start":{"line":24,"column":2},"end":{"line":26,"column":null}},"type":"if","locations":[{"start":{"line":24,"column":2},"end":{"line":26,"column":null}},{"start":{},"end":{}}],"line":24},"2":{"loc":{"start":{"line":28,"column":2},"end":{"line":30,"column":null}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":30,"column":null}},{"start":{},"end":{}}],"line":28},"3":{"loc":{"start":{"line":51,"column":6},"end":{"line":55,"column":null}},"type":"if","locations":[{"start":{"line":51,"column":6},"end":{"line":55,"column":null}},{"start":{"line":53,"column":13},"end":{"line":55,"column":null}}],"line":51},"4":{"loc":{"start":{"line":63,"column":30},"end":{"line":63,"column":83}},"type":"cond-expr","locations":[{"start":{"line":63,"column":47},"end":{"line":63,"column":67}},{"start":{"line":63,"column":67},"end":{"line":63,"column":83}}],"line":63},"5":{"loc":{"start":{"line":66,"column":10},"end":{"line":73,"column":null}},"type":"binary-expr","locations":[{"start":{"line":66,"column":10},"end":{"line":66,"column":29}},{"start":{"line":66,"column":29},"end":{"line":66,"column":null}},{"start":{"line":67,"column":10},"end":{"line":73,"column":null}}],"line":66},"6":{"loc":{"start":{"line":70,"column":19},"end":{"line":70,"column":null}},"type":"cond-expr","locations":[{"start":{"line":70,"column":36},"end":{"line":70,"column":53}},{"start":{"line":70,"column":53},"end":{"line":70,"column":null}}],"line":70},"7":{"loc":{"start":{"line":75,"column":9},"end":{"line":79,"column":null}},"type":"binary-expr","locations":[{"start":{"line":75,"column":9},"end":{"line":75,"column":null}},{"start":{"line":76,"column":10},"end":{"line":79,"column":null}}],"line":75},"8":{"loc":{"start":{"line":81,"column":47},"end":{"line":81,"column":77}},"type":"cond-expr","locations":[{"start":{"line":81,"column":64},"end":{"line":81,"column":69}},{"start":{"line":81,"column":69},"end":{"line":81,"column":77}}],"line":81},"9":{"loc":{"start":{"line":103,"column":37},"end":{"line":103,"column":82}},"type":"binary-expr","locations":[{"start":{"line":103,"column":37},"end":{"line":103,"column":75}},{"start":{"line":103,"column":75},"end":{"line":103,"column":82}}],"line":103},"10":{"loc":{"start":{"line":104,"column":45},"end":{"line":104,"column":97}},"type":"binary-expr","locations":[{"start":{"line":104,"column":45},"end":{"line":104,"column":88}},{"start":{"line":104,"column":88},"end":{"line":104,"column":97}}],"line":104},"11":{"loc":{"start":{"line":116,"column":19},"end":{"line":116,"column":null}},"type":"cond-expr","locations":[{"start":{"line":116,"column":64},"end":{"line":116,"column":72}},{"start":{"line":116,"column":72},"end":{"line":116,"column":null}}],"line":116}},"s":{"0":2,"1":2,"2":2,"3":1,"4":1,"5":1,"6":0,"7":0,"8":2,"9":1,"10":1,"11":0,"12":1,"13":1,"14":1,"15":1,"16":0,"17":0,"18":0,"19":1,"20":1,"21":1,"22":1,"23":0,"24":0,"25":2,"26":2,"27":2,"28":0,"29":0,"30":2,"31":0,"32":0,"33":2,"34":2},"f":{"0":2,"1":1,"2":1,"3":0,"4":1,"5":1,"6":0,"7":1,"8":0,"9":0,"10":2,"11":0,"12":0},"b":{"0":[1,0],"1":[1,1],"2":[0,1],"3":[0,0],"4":[1,0],"5":[1,1,0],"6":[0,0],"7":[1,1],"8":[1,0],"9":[2,2],"10":[2,2],"11":[2,0]},"meta":{"lastBranch":12,"lastFunction":13,"lastStatement":35,"seen":{"f:8:9:8:21":0,"s:9:22:9:Infinity":0,"s:10:8:10:Infinity":1,"s:12:2:22:Infinity":2,"f:12:12:12:18":1,"s:13:4:21:Infinity":3,"f:14:12:14:13":2,"b:15:8:19:Infinity:17:15:19:Infinity":0,"s:15:8:19:Infinity":4,"s:16:10:16:Infinity":5,"s:18:10:18:Infinity":6,"f:21:13:21:19":3,"s:21:19:21:33":7,"b:24:2:26:Infinity:undefined:undefined:undefined:undefined":1,"s:24:2:26:Infinity":8,"s:25:4:25:Infinity":9,"b:28:2:30:Infinity:undefined:undefined:undefined:undefined":2,"s:28:2:30:Infinity":10,"s:29:4:29:Infinity":11,"s:32:2:32:Infinity":12,"f:46:9:46:19":4,"s:47:42:47:Infinity":13,"s:49:2:59:Infinity":14,"f:49:12:49:18":5,"s:50:25:56:Infinity":15,"f:50:25:50:31":6,"b:51:6:55:Infinity:53:13:55:Infinity":3,"s:51:6:55:Infinity":16,"s:52:8:52:Infinity":17,"s:54:8:54:Infinity":18,"s:57:4:57:Infinity":19,"s:58:4:58:Infinity":20,"f:58:11:58:17":7,"s:58:17:58:Infinity":21,"s:61:2:98:Infinity":22,"b:63:47:63:67:63:67:63:83":4,"b:66:10:66:29:66:29:66:Infinity:67:10:73:Infinity":5,"f:69:21:69:27":8,"s:69:27:69:Infinity":23,"b:70:36:70:53:70:53:70:Infinity":6,"b:75:9:75:Infinity:76:10:79:Infinity":7,"f:78:21:78:27":9,"s:78:27:78:Infinity":24,"b:81:64:81:69:81:69:81:77":8,"f:102:9:102:15":10,"s:103:24:103:Infinity":25,"b:103:37:103:75:103:75:103:82":9,"s:104:32:104:Infinity":26,"b:104:45:104:88:104:88:104:97":10,"s:106:25:109:Infinity":27,"f:106:25:106:26":11,"s:107:4:107:Infinity":28,"s:108:4:108:Infinity":29,"s:111:29:114:Infinity":30,"f:111:29:111:30":12,"s:112:4:112:Infinity":31,"s:113:4:113:Infinity":32,"s:116:19:116:Infinity":33,"b:116:64:116:72:116:72:116:Infinity":11,"s:118:2:136:Infinity":34}}} -,"/Users/adam/workspace/vibecode/neko/frontend/src/utils.ts": {"path":"/Users/adam/workspace/vibecode/neko/frontend/src/utils.ts","statementMap":{"0":{"start":{"line":2,"column":18},"end":{"line":2,"column":null}},"1":{"start":{"line":3,"column":18},"end":{"line":3,"column":null}},"2":{"start":{"line":4,"column":4},"end":{"line":4,"column":null}},"3":{"start":{"line":4,"column":28},"end":{"line":4,"column":null}},"4":{"start":{"line":12,"column":19},"end":{"line":12,"column":null}},"5":{"start":{"line":13,"column":28},"end":{"line":13,"column":null}},"6":{"start":{"line":15,"column":20},"end":{"line":15,"column":null}},"7":{"start":{"line":17,"column":4},"end":{"line":22,"column":null}},"8":{"start":{"line":18,"column":22},"end":{"line":18,"column":null}},"9":{"start":{"line":19,"column":8},"end":{"line":21,"column":null}},"10":{"start":{"line":20,"column":12},"end":{"line":20,"column":null}},"11":{"start":{"line":27,"column":4},"end":{"line":31,"column":null}}},"fnMap":{"0":{"name":"getCookie","decl":{"start":{"line":1,"column":16},"end":{"line":1,"column":26}},"loc":{"start":{"line":1,"column":60},"end":{"line":5,"column":null}},"line":1},"1":{"name":"apiFetch","decl":{"start":{"line":11,"column":22},"end":{"line":11,"column":31}},"loc":{"start":{"line":11,"column":96},"end":{"line":32,"column":null}},"line":11}},"branchMap":{"0":{"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":null}},"type":"if","locations":[{"start":{"line":4,"column":4},"end":{"line":4,"column":null}},{"start":{},"end":{}}],"line":4},"1":{"loc":{"start":{"line":12,"column":19},"end":{"line":12,"column":null}},"type":"binary-expr","locations":[{"start":{"line":12,"column":19},"end":{"line":12,"column":50}},{"start":{"line":12,"column":50},"end":{"line":12,"column":null}}],"line":12},"2":{"loc":{"start":{"line":15,"column":32},"end":{"line":15,"column":51}},"type":"binary-expr","locations":[{"start":{"line":15,"column":32},"end":{"line":15,"column":49}},{"start":{"line":15,"column":49},"end":{"line":15,"column":51}}],"line":15},"3":{"loc":{"start":{"line":17,"column":4},"end":{"line":22,"column":null}},"type":"if","locations":[{"start":{"line":17,"column":4},"end":{"line":22,"column":null}},{"start":{},"end":{}}],"line":17},"4":{"loc":{"start":{"line":19,"column":8},"end":{"line":21,"column":null}},"type":"if","locations":[{"start":{"line":19,"column":8},"end":{"line":21,"column":null}},{"start":{},"end":{}}],"line":19}},"s":{"0":14,"1":14,"2":14,"3":0,"4":54,"5":54,"6":54,"7":54,"8":14,"9":14,"10":0,"11":54},"f":{"0":14,"1":54},"b":{"0":[0,14],"1":[54,40],"2":[54,48],"3":[14,40],"4":[0,14]},"meta":{"lastBranch":5,"lastFunction":2,"lastStatement":12,"seen":{"f:1:16:1:26":0,"s:2:18:2:Infinity":0,"s:3:18:3:Infinity":1,"b:4:4:4:Infinity:undefined:undefined:undefined:undefined":0,"s:4:4:4:Infinity":2,"s:4:28:4:Infinity":3,"f:11:22:11:31":1,"s:12:19:12:Infinity":4,"b:12:19:12:50:12:50:12:Infinity":1,"s:13:28:13:Infinity":5,"s:15:20:15:Infinity":6,"b:15:32:15:49:15:49:15:51":2,"b:17:4:22:Infinity:undefined:undefined:undefined:undefined":3,"s:17:4:22:Infinity":7,"s:18:22:18:Infinity":8,"b:19:8:21:Infinity:undefined:undefined:undefined:undefined":4,"s:19:8:21:Infinity":9,"s:20:12:20:Infinity":10,"s:27:4:31:Infinity":11}}} -,"/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedItem.css": {"path":"/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedItem.css","statementMap":{},"fnMap":{},"branchMap":{},"s":{},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":0,"seen":{}}} -,"/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedItem.tsx": {"path":"/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedItem.tsx","statementMap":{"0":{"start":{"line":12,"column":22},"end":{"line":12,"column":null}},"1":{"start":{"line":13,"column":28},"end":{"line":13,"column":null}},"2":{"start":{"line":15,"column":2},"end":{"line":17,"column":null}},"3":{"start":{"line":16,"column":4},"end":{"line":16,"column":null}},"4":{"start":{"line":19,"column":21},"end":{"line":21,"column":null}},"5":{"start":{"line":20,"column":4},"end":{"line":20,"column":null}},"6":{"start":{"line":23,"column":21},"end":{"line":57,"column":null}},"7":{"start":{"line":24,"column":4},"end":{"line":24,"column":null}},"8":{"start":{"line":26,"column":25},"end":{"line":26,"column":null}},"9":{"start":{"line":27,"column":4},"end":{"line":27,"column":null}},"10":{"start":{"line":29,"column":4},"end":{"line":56,"column":null}},"11":{"start":{"line":41,"column":8},"end":{"line":43,"column":null}},"12":{"start":{"line":42,"column":10},"end":{"line":42,"column":null}},"13":{"start":{"line":44,"column":8},"end":{"line":44,"column":null}},"14":{"start":{"line":49,"column":8},"end":{"line":49,"column":null}},"15":{"start":{"line":52,"column":8},"end":{"line":52,"column":null}},"16":{"start":{"line":54,"column":8},"end":{"line":54,"column":null}},"17":{"start":{"line":55,"column":8},"end":{"line":55,"column":null}},"18":{"start":{"line":59,"column":26},"end":{"line":75,"column":null}},"19":{"start":{"line":60,"column":4},"end":{"line":60,"column":null}},"20":{"start":{"line":61,"column":4},"end":{"line":61,"column":null}},"21":{"start":{"line":62,"column":4},"end":{"line":74,"column":null}},"22":{"start":{"line":64,"column":8},"end":{"line":64,"column":null}},"23":{"start":{"line":64,"column":21},"end":{"line":64,"column":null}},"24":{"start":{"line":65,"column":8},"end":{"line":65,"column":null}},"25":{"start":{"line":68,"column":8},"end":{"line":68,"column":null}},"26":{"start":{"line":69,"column":8},"end":{"line":69,"column":null}},"27":{"start":{"line":72,"column":8},"end":{"line":72,"column":null}},"28":{"start":{"line":73,"column":8},"end":{"line":73,"column":null}},"29":{"start":{"line":77,"column":2},"end":{"line":113,"column":null}},"30":{"start":{"line":85,"column":12},"end":{"line":85,"column":null}},"31":{"start":{"line":86,"column":12},"end":{"line":86,"column":null}}},"fnMap":{"0":{"name":"FeedItem","decl":{"start":{"line":11,"column":24},"end":{"line":11,"column":33}},"loc":{"start":{"line":11,"column":71},"end":{"line":115,"column":null}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":15,"column":12},"end":{"line":15,"column":18}},"loc":{"start":{"line":15,"column":18},"end":{"line":17,"column":5}},"line":15},"2":{"name":"(anonymous_2)","decl":{"start":{"line":19,"column":21},"end":{"line":19,"column":27}},"loc":{"start":{"line":19,"column":27},"end":{"line":21,"column":null}},"line":19},"3":{"name":"(anonymous_3)","decl":{"start":{"line":23,"column":21},"end":{"line":23,"column":22}},"loc":{"start":{"line":23,"column":40},"end":{"line":57,"column":null}},"line":23},"4":{"name":"(anonymous_4)","decl":{"start":{"line":40,"column":12},"end":{"line":40,"column":13}},"loc":{"start":{"line":40,"column":21},"end":{"line":45,"column":7}},"line":40},"5":{"name":"(anonymous_5)","decl":{"start":{"line":46,"column":12},"end":{"line":46,"column":18}},"loc":{"start":{"line":46,"column":18},"end":{"line":50,"column":7}},"line":46},"6":{"name":"(anonymous_6)","decl":{"start":{"line":51,"column":13},"end":{"line":51,"column":14}},"loc":{"start":{"line":51,"column":22},"end":{"line":56,"column":7}},"line":51},"7":{"name":"(anonymous_7)","decl":{"start":{"line":59,"column":26},"end":{"line":59,"column":27}},"loc":{"start":{"line":59,"column":51},"end":{"line":75,"column":null}},"line":59},"8":{"name":"(anonymous_8)","decl":{"start":{"line":63,"column":12},"end":{"line":63,"column":13}},"loc":{"start":{"line":63,"column":21},"end":{"line":66,"column":7}},"line":63},"9":{"name":"(anonymous_9)","decl":{"start":{"line":67,"column":12},"end":{"line":67,"column":13}},"loc":{"start":{"line":67,"column":22},"end":{"line":70,"column":7}},"line":67},"10":{"name":"(anonymous_10)","decl":{"start":{"line":71,"column":13},"end":{"line":71,"column":14}},"loc":{"start":{"line":71,"column":22},"end":{"line":74,"column":7}},"line":71},"11":{"name":"(anonymous_11)","decl":{"start":{"line":84,"column":19},"end":{"line":84,"column":20}},"loc":{"start":{"line":84,"column":26},"end":{"line":87,"column":null}},"line":84}},"branchMap":{"0":{"loc":{"start":{"line":41,"column":8},"end":{"line":43,"column":null}},"type":"if","locations":[{"start":{"line":41,"column":8},"end":{"line":43,"column":null}},{"start":{},"end":{}}],"line":41},"1":{"loc":{"start":{"line":64,"column":8},"end":{"line":64,"column":null}},"type":"if","locations":[{"start":{"line":64,"column":8},"end":{"line":64,"column":null}},{"start":{},"end":{}}],"line":64},"2":{"loc":{"start":{"line":78,"column":32},"end":{"line":78,"column":61}},"type":"cond-expr","locations":[{"start":{"line":78,"column":44},"end":{"line":78,"column":53}},{"start":{"line":78,"column":53},"end":{"line":78,"column":61}}],"line":78},"3":{"loc":{"start":{"line":78,"column":65},"end":{"line":78,"column":89}},"type":"cond-expr","locations":[{"start":{"line":78,"column":75},"end":{"line":78,"column":87}},{"start":{"line":78,"column":87},"end":{"line":78,"column":89}}],"line":78},"4":{"loc":{"start":{"line":81,"column":11},"end":{"line":81,"column":null}},"type":"binary-expr","locations":[{"start":{"line":81,"column":11},"end":{"line":81,"column":25}},{"start":{"line":81,"column":25},"end":{"line":81,"column":null}}],"line":81},"5":{"loc":{"start":{"line":88,"column":33},"end":{"line":88,"column":77}},"type":"cond-expr","locations":[{"start":{"line":88,"column":48},"end":{"line":88,"column":63}},{"start":{"line":88,"column":63},"end":{"line":88,"column":77}}],"line":88},"6":{"loc":{"start":{"line":89,"column":17},"end":{"line":89,"column":null}},"type":"cond-expr","locations":[{"start":{"line":89,"column":32},"end":{"line":89,"column":43}},{"start":{"line":89,"column":43},"end":{"line":89,"column":null}}],"line":89},"7":{"loc":{"start":{"line":97,"column":11},"end":{"line":97,"column":null}},"type":"binary-expr","locations":[{"start":{"line":97,"column":11},"end":{"line":97,"column":30}},{"start":{"line":97,"column":30},"end":{"line":97,"column":null}}],"line":97},"8":{"loc":{"start":{"line":100,"column":11},"end":{"line":103,"column":null}},"type":"binary-expr","locations":[{"start":{"line":100,"column":11},"end":{"line":100,"column":null}},{"start":{"line":101,"column":12},"end":{"line":103,"column":null}}],"line":100},"9":{"loc":{"start":{"line":106,"column":6},"end":{"line":111,"column":null}},"type":"binary-expr","locations":[{"start":{"line":107,"column":8},"end":{"line":107,"column":29}},{"start":{"line":107,"column":29},"end":{"line":107,"column":null}},{"start":{"line":108,"column":8},"end":{"line":111,"column":null}}],"line":106},"10":{"loc":{"start":{"line":110,"column":45},"end":{"line":110,"column":83}},"type":"binary-expr","locations":[{"start":{"line":110,"column":45},"end":{"line":110,"column":66}},{"start":{"line":110,"column":66},"end":{"line":110,"column":83}}],"line":110}},"s":{"0":56,"1":56,"2":56,"3":22,"4":56,"5":1,"6":56,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":1,"14":1,"15":0,"16":0,"17":0,"18":56,"19":1,"20":1,"21":1,"22":1,"23":0,"24":1,"25":1,"26":1,"27":0,"28":0,"29":56,"30":1,"31":1},"f":{"0":56,"1":22,"2":1,"3":1,"4":1,"5":1,"6":0,"7":1,"8":1,"9":1,"10":0,"11":1},"b":{"0":[0,1],"1":[0,1],"2":[38,18],"3":[4,52],"4":[56,0],"5":[5,51],"6":[5,51],"7":[56,13],"8":[56,55],"9":[56,55,12],"10":[12,11]},"meta":{"lastBranch":11,"lastFunction":12,"lastStatement":32,"seen":{"f:11:24:11:33":0,"s:12:22:12:Infinity":0,"s:13:28:13:Infinity":1,"s:15:2:17:Infinity":2,"f:15:12:15:18":1,"s:16:4:16:Infinity":3,"s:19:21:21:Infinity":4,"f:19:21:19:27":2,"s:20:4:20:Infinity":5,"s:23:21:57:Infinity":6,"f:23:21:23:22":3,"s:24:4:24:Infinity":7,"s:26:25:26:Infinity":8,"s:27:4:27:Infinity":9,"s:29:4:56:Infinity":10,"f:40:12:40:13":4,"b:41:8:43:Infinity:undefined:undefined:undefined:undefined":0,"s:41:8:43:Infinity":11,"s:42:10:42:Infinity":12,"s:44:8:44:Infinity":13,"f:46:12:46:18":5,"s:49:8:49:Infinity":14,"f:51:13:51:14":6,"s:52:8:52:Infinity":15,"s:54:8:54:Infinity":16,"s:55:8:55:Infinity":17,"s:59:26:75:Infinity":18,"f:59:26:59:27":7,"s:60:4:60:Infinity":19,"s:61:4:61:Infinity":20,"s:62:4:74:Infinity":21,"f:63:12:63:13":8,"b:64:8:64:Infinity:undefined:undefined:undefined:undefined":1,"s:64:8:64:Infinity":22,"s:64:21:64:Infinity":23,"s:65:8:65:Infinity":24,"f:67:12:67:13":9,"s:68:8:68:Infinity":25,"s:69:8:69:Infinity":26,"f:71:13:71:14":10,"s:72:8:72:Infinity":27,"s:73:8:73:Infinity":28,"s:77:2:113:Infinity":29,"b:78:44:78:53:78:53:78:61":2,"b:78:75:78:87:78:87:78:89":3,"b:81:11:81:25:81:25:81:Infinity":4,"f:84:19:84:20":11,"s:85:12:85:Infinity":30,"s:86:12:86:Infinity":31,"b:88:48:88:63:88:63:88:77":5,"b:89:32:89:43:89:43:89:Infinity":6,"b:97:11:97:30:97:30:97:Infinity":7,"b:100:11:100:Infinity:101:12:103:Infinity":8,"b:107:8:107:29:107:29:107:Infinity:108:8:111:Infinity":9,"b:110:45:110:66:110:66:110:83":10}}} -,"/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedItems.css": {"path":"/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedItems.css","statementMap":{},"fnMap":{},"branchMap":{},"s":{},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":0,"seen":{}}} -,"/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedItems.tsx": {"path":"/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedItems.tsx","statementMap":{"0":{"start":{"line":9,"column":26},"end":{"line":9,"column":null}},"1":{"start":{"line":10,"column":21},"end":{"line":10,"column":null}},"2":{"start":{"line":11,"column":19},"end":{"line":11,"column":null}},"3":{"start":{"line":13,"column":24},"end":{"line":13,"column":null}},"4":{"start":{"line":14,"column":28},"end":{"line":14,"column":null}},"5":{"start":{"line":15,"column":36},"end":{"line":15,"column":null}},"6":{"start":{"line":16,"column":28},"end":{"line":16,"column":null}},"7":{"start":{"line":17,"column":24},"end":{"line":17,"column":null}},"8":{"start":{"line":18,"column":40},"end":{"line":18,"column":null}},"9":{"start":{"line":20,"column":21},"end":{"line":87,"column":null}},"10":{"start":{"line":21,"column":4},"end":{"line":26,"column":null}},"11":{"start":{"line":22,"column":6},"end":{"line":22,"column":null}},"12":{"start":{"line":24,"column":6},"end":{"line":24,"column":null}},"13":{"start":{"line":25,"column":6},"end":{"line":25,"column":null}},"14":{"start":{"line":27,"column":4},"end":{"line":27,"column":null}},"15":{"start":{"line":29,"column":14},"end":{"line":29,"column":null}},"16":{"start":{"line":30,"column":19},"end":{"line":30,"column":null}},"17":{"start":{"line":32,"column":4},"end":{"line":36,"column":null}},"18":{"start":{"line":33,"column":6},"end":{"line":33,"column":null}},"19":{"start":{"line":34,"column":4},"end":{"line":36,"column":null}},"20":{"start":{"line":35,"column":6},"end":{"line":35,"column":null}},"21":{"start":{"line":38,"column":4},"end":{"line":40,"column":null}},"22":{"start":{"line":39,"column":6},"end":{"line":39,"column":null}},"23":{"start":{"line":43,"column":24},"end":{"line":43,"column":null}},"24":{"start":{"line":44,"column":4},"end":{"line":46,"column":null}},"25":{"start":{"line":45,"column":6},"end":{"line":45,"column":null}},"26":{"start":{"line":48,"column":4},"end":{"line":58,"column":null}},"27":{"start":{"line":49,"column":6},"end":{"line":49,"column":null}},"28":{"start":{"line":50,"column":4},"end":{"line":58,"column":null}},"29":{"start":{"line":51,"column":6},"end":{"line":51,"column":null}},"30":{"start":{"line":52,"column":6},"end":{"line":52,"column":null}},"31":{"start":{"line":55,"column":6},"end":{"line":57,"column":null}},"32":{"start":{"line":56,"column":8},"end":{"line":56,"column":null}},"33":{"start":{"line":60,"column":24},"end":{"line":60,"column":null}},"34":{"start":{"line":61,"column":4},"end":{"line":63,"column":null}},"35":{"start":{"line":62,"column":6},"end":{"line":62,"column":null}},"36":{"start":{"line":65,"column":4},"end":{"line":86,"column":null}},"37":{"start":{"line":67,"column":8},"end":{"line":69,"column":null}},"38":{"start":{"line":68,"column":10},"end":{"line":68,"column":null}},"39":{"start":{"line":70,"column":8},"end":{"line":70,"column":null}},"40":{"start":{"line":73,"column":8},"end":{"line":77,"column":null}},"41":{"start":{"line":74,"column":10},"end":{"line":74,"column":null}},"42":{"start":{"line":74,"column":29},"end":{"line":74,"column":47}},"43":{"start":{"line":76,"column":10},"end":{"line":76,"column":null}},"44":{"start":{"line":78,"column":8},"end":{"line":78,"column":null}},"45":{"start":{"line":79,"column":8},"end":{"line":79,"column":null}},"46":{"start":{"line":80,"column":8},"end":{"line":80,"column":null}},"47":{"start":{"line":83,"column":8},"end":{"line":83,"column":null}},"48":{"start":{"line":84,"column":8},"end":{"line":84,"column":null}},"49":{"start":{"line":85,"column":8},"end":{"line":85,"column":null}},"50":{"start":{"line":89,"column":2},"end":{"line":93,"column":null}},"51":{"start":{"line":90,"column":4},"end":{"line":90,"column":null}},"52":{"start":{"line":91,"column":4},"end":{"line":91,"column":null}},"53":{"start":{"line":96,"column":23},"end":{"line":101,"column":null}},"54":{"start":{"line":97,"column":20},"end":{"line":97,"column":null}},"55":{"start":{"line":98,"column":4},"end":{"line":100,"column":null}},"56":{"start":{"line":99,"column":6},"end":{"line":99,"column":null}},"57":{"start":{"line":103,"column":21},"end":{"line":113,"column":null}},"58":{"start":{"line":104,"column":24},"end":{"line":104,"column":null}},"59":{"start":{"line":106,"column":4},"end":{"line":106,"column":null}},"60":{"start":{"line":106,"column":28},"end":{"line":106,"column":88}},"61":{"start":{"line":106,"column":50},"end":{"line":106,"column":87}},"62":{"start":{"line":108,"column":4},"end":{"line":112,"column":null}},"63":{"start":{"line":112,"column":22},"end":{"line":112,"column":63}},"64":{"start":{"line":115,"column":21},"end":{"line":125,"column":null}},"65":{"start":{"line":116,"column":24},"end":{"line":116,"column":null}},"66":{"start":{"line":118,"column":4},"end":{"line":118,"column":null}},"67":{"start":{"line":118,"column":28},"end":{"line":118,"column":88}},"68":{"start":{"line":118,"column":50},"end":{"line":118,"column":87}},"69":{"start":{"line":120,"column":4},"end":{"line":124,"column":null}},"70":{"start":{"line":124,"column":22},"end":{"line":124,"column":65}},"71":{"start":{"line":127,"column":2},"end":{"line":171,"column":null}},"72":{"start":{"line":128,"column":26},"end":{"line":166,"column":null}},"73":{"start":{"line":129,"column":6},"end":{"line":129,"column":null}},"74":{"start":{"line":129,"column":30},"end":{"line":129,"column":null}},"75":{"start":{"line":131,"column":6},"end":{"line":165,"column":null}},"76":{"start":{"line":132,"column":8},"end":{"line":149,"column":null}},"77":{"start":{"line":133,"column":28},"end":{"line":133,"column":null}},"78":{"start":{"line":134,"column":10},"end":{"line":140,"column":null}},"79":{"start":{"line":135,"column":25},"end":{"line":135,"column":null}},"80":{"start":{"line":136,"column":12},"end":{"line":138,"column":null}},"81":{"start":{"line":137,"column":14},"end":{"line":137,"column":null}},"82":{"start":{"line":139,"column":12},"end":{"line":139,"column":null}},"83":{"start":{"line":144,"column":10},"end":{"line":146,"column":null}},"84":{"start":{"line":145,"column":12},"end":{"line":145,"column":null}},"85":{"start":{"line":148,"column":10},"end":{"line":148,"column":null}},"86":{"start":{"line":150,"column":6},"end":{"line":165,"column":null}},"87":{"start":{"line":151,"column":8},"end":{"line":157,"column":null}},"88":{"start":{"line":152,"column":28},"end":{"line":152,"column":null}},"89":{"start":{"line":153,"column":10},"end":{"line":155,"column":null}},"90":{"start":{"line":154,"column":12},"end":{"line":154,"column":null}},"91":{"start":{"line":156,"column":10},"end":{"line":156,"column":null}},"92":{"start":{"line":158,"column":6},"end":{"line":165,"column":null}},"93":{"start":{"line":159,"column":8},"end":{"line":164,"column":null}},"94":{"start":{"line":160,"column":10},"end":{"line":162,"column":null}},"95":{"start":{"line":161,"column":12},"end":{"line":161,"column":null}},"96":{"start":{"line":163,"column":10},"end":{"line":163,"column":null}},"97":{"start":{"line":168,"column":4},"end":{"line":168,"column":null}},"98":{"start":{"line":169,"column":4},"end":{"line":169,"column":null}},"99":{"start":{"line":169,"column":17},"end":{"line":169,"column":null}},"100":{"start":{"line":175,"column":2},"end":{"line":220,"column":null}},"101":{"start":{"line":177,"column":25},"end":{"line":193,"column":null}},"102":{"start":{"line":179,"column":8},"end":{"line":190,"column":null}},"103":{"start":{"line":181,"column":10},"end":{"line":189,"column":null}},"104":{"start":{"line":182,"column":26},"end":{"line":182,"column":null}},"105":{"start":{"line":183,"column":12},"end":{"line":188,"column":null}},"106":{"start":{"line":184,"column":27},"end":{"line":184,"column":null}},"107":{"start":{"line":185,"column":14},"end":{"line":187,"column":null}},"108":{"start":{"line":186,"column":16},"end":{"line":186,"column":null}},"109":{"start":{"line":196,"column":29},"end":{"line":205,"column":null}},"110":{"start":{"line":198,"column":8},"end":{"line":202,"column":null}},"111":{"start":{"line":199,"column":10},"end":{"line":201,"column":null}},"112":{"start":{"line":200,"column":12},"end":{"line":200,"column":null}},"113":{"start":{"line":207,"column":4},"end":{"line":210,"column":null}},"114":{"start":{"line":208,"column":17},"end":{"line":208,"column":null}},"115":{"start":{"line":209,"column":6},"end":{"line":209,"column":null}},"116":{"start":{"line":209,"column":14},"end":{"line":209,"column":null}},"117":{"start":{"line":212,"column":21},"end":{"line":212,"column":null}},"118":{"start":{"line":213,"column":4},"end":{"line":213,"column":null}},"119":{"start":{"line":213,"column":18},"end":{"line":213,"column":null}},"120":{"start":{"line":215,"column":4},"end":{"line":218,"column":null}},"121":{"start":{"line":216,"column":6},"end":{"line":216,"column":null}},"122":{"start":{"line":217,"column":6},"end":{"line":217,"column":null}},"123":{"start":{"line":222,"column":2},"end":{"line":222,"column":null}},"124":{"start":{"line":222,"column":15},"end":{"line":222,"column":null}},"125":{"start":{"line":223,"column":2},"end":{"line":223,"column":null}},"126":{"start":{"line":223,"column":13},"end":{"line":223,"column":null}},"127":{"start":{"line":225,"column":2},"end":{"line":249,"column":null}},"128":{"start":{"line":232,"column":12},"end":{"line":240,"column":null}},"129":{"start":{"line":237,"column":29},"end":{"line":237,"column":null}}},"fnMap":{"0":{"name":"FeedItems","decl":{"start":{"line":8,"column":24},"end":{"line":8,"column":36}},"loc":{"start":{"line":8,"column":36},"end":{"line":251,"column":null}},"line":8},"1":{"name":"(anonymous_1)","decl":{"start":{"line":20,"column":21},"end":{"line":20,"column":22}},"loc":{"start":{"line":20,"column":41},"end":{"line":87,"column":null}},"line":20},"2":{"name":"(anonymous_2)","decl":{"start":{"line":66,"column":12},"end":{"line":66,"column":13}},"loc":{"start":{"line":66,"column":21},"end":{"line":71,"column":7}},"line":66},"3":{"name":"(anonymous_3)","decl":{"start":{"line":72,"column":12},"end":{"line":72,"column":13}},"loc":{"start":{"line":72,"column":22},"end":{"line":81,"column":7}},"line":72},"4":{"name":"(anonymous_4)","decl":{"start":{"line":74,"column":19},"end":{"line":74,"column":20}},"loc":{"start":{"line":74,"column":29},"end":{"line":74,"column":47}},"line":74},"5":{"name":"(anonymous_5)","decl":{"start":{"line":82,"column":13},"end":{"line":82,"column":14}},"loc":{"start":{"line":82,"column":22},"end":{"line":86,"column":7}},"line":82},"6":{"name":"(anonymous_6)","decl":{"start":{"line":89,"column":12},"end":{"line":89,"column":18}},"loc":{"start":{"line":89,"column":18},"end":{"line":93,"column":5}},"line":89},"7":{"name":"(anonymous_7)","decl":{"start":{"line":96,"column":23},"end":{"line":96,"column":24}},"loc":{"start":{"line":96,"column":42},"end":{"line":101,"column":null}},"line":96},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":21},"end":{"line":103,"column":22}},"loc":{"start":{"line":103,"column":37},"end":{"line":113,"column":null}},"line":103},"9":{"name":"(anonymous_9)","decl":{"start":{"line":106,"column":13},"end":{"line":106,"column":14}},"loc":{"start":{"line":106,"column":28},"end":{"line":106,"column":88}},"line":106},"10":{"name":"(anonymous_10)","decl":{"start":{"line":106,"column":42},"end":{"line":106,"column":43}},"loc":{"start":{"line":106,"column":50},"end":{"line":106,"column":87}},"line":106},"11":{"name":"(anonymous_11)","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":14}},"loc":{"start":{"line":112,"column":22},"end":{"line":112,"column":63}},"line":112},"12":{"name":"(anonymous_12)","decl":{"start":{"line":115,"column":21},"end":{"line":115,"column":22}},"loc":{"start":{"line":115,"column":37},"end":{"line":125,"column":null}},"line":115},"13":{"name":"(anonymous_13)","decl":{"start":{"line":118,"column":13},"end":{"line":118,"column":14}},"loc":{"start":{"line":118,"column":28},"end":{"line":118,"column":88}},"line":118},"14":{"name":"(anonymous_14)","decl":{"start":{"line":118,"column":42},"end":{"line":118,"column":43}},"loc":{"start":{"line":118,"column":50},"end":{"line":118,"column":87}},"line":118},"15":{"name":"(anonymous_15)","decl":{"start":{"line":124,"column":13},"end":{"line":124,"column":14}},"loc":{"start":{"line":124,"column":22},"end":{"line":124,"column":65}},"line":124},"16":{"name":"(anonymous_16)","decl":{"start":{"line":127,"column":12},"end":{"line":127,"column":18}},"loc":{"start":{"line":127,"column":18},"end":{"line":171,"column":5}},"line":127},"17":{"name":"(anonymous_17)","decl":{"start":{"line":128,"column":26},"end":{"line":128,"column":27}},"loc":{"start":{"line":128,"column":48},"end":{"line":166,"column":null}},"line":128},"18":{"name":"(anonymous_18)","decl":{"start":{"line":132,"column":25},"end":{"line":132,"column":26}},"loc":{"start":{"line":132,"column":35},"end":{"line":149,"column":9}},"line":132},"19":{"name":"(anonymous_19)","decl":{"start":{"line":151,"column":25},"end":{"line":151,"column":26}},"loc":{"start":{"line":151,"column":35},"end":{"line":157,"column":9}},"line":151},"20":{"name":"(anonymous_20)","decl":{"start":{"line":159,"column":25},"end":{"line":159,"column":26}},"loc":{"start":{"line":159,"column":43},"end":{"line":164,"column":9}},"line":159},"21":{"name":"(anonymous_21)","decl":{"start":{"line":169,"column":11},"end":{"line":169,"column":17}},"loc":{"start":{"line":169,"column":17},"end":{"line":169,"column":null}},"line":169},"22":{"name":"(anonymous_22)","decl":{"start":{"line":175,"column":12},"end":{"line":175,"column":18}},"loc":{"start":{"line":175,"column":18},"end":{"line":220,"column":5}},"line":175},"23":{"name":"(anonymous_23)","decl":{"start":{"line":178,"column":6},"end":{"line":178,"column":7}},"loc":{"start":{"line":178,"column":19},"end":{"line":191,"column":null}},"line":178},"24":{"name":"(anonymous_24)","decl":{"start":{"line":179,"column":24},"end":{"line":179,"column":25}},"loc":{"start":{"line":179,"column":35},"end":{"line":190,"column":9}},"line":179},"25":{"name":"(anonymous_25)","decl":{"start":{"line":197,"column":6},"end":{"line":197,"column":7}},"loc":{"start":{"line":197,"column":19},"end":{"line":203,"column":null}},"line":197},"26":{"name":"(anonymous_26)","decl":{"start":{"line":198,"column":24},"end":{"line":198,"column":25}},"loc":{"start":{"line":198,"column":35},"end":{"line":202,"column":9}},"line":198},"27":{"name":"(anonymous_27)","decl":{"start":{"line":207,"column":18},"end":{"line":207,"column":19}},"loc":{"start":{"line":207,"column":32},"end":{"line":210,"column":5}},"line":207},"28":{"name":"(anonymous_28)","decl":{"start":{"line":215,"column":11},"end":{"line":215,"column":17}},"loc":{"start":{"line":215,"column":17},"end":{"line":218,"column":null}},"line":215},"29":{"name":"(anonymous_29)","decl":{"start":{"line":231,"column":21},"end":{"line":231,"column":22}},"loc":{"start":{"line":232,"column":12},"end":{"line":240,"column":null}},"line":232},"30":{"name":"(anonymous_30)","decl":{"start":{"line":237,"column":23},"end":{"line":237,"column":29}},"loc":{"start":{"line":237,"column":29},"end":{"line":237,"column":null}},"line":237}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":19},"end":{"line":11,"column":null}},"type":"binary-expr","locations":[{"start":{"line":11,"column":19},"end":{"line":11,"column":49}},{"start":{"line":11,"column":49},"end":{"line":11,"column":null}}],"line":11},"1":{"loc":{"start":{"line":21,"column":4},"end":{"line":26,"column":null}},"type":"if","locations":[{"start":{"line":21,"column":4},"end":{"line":26,"column":null}},{"start":{"line":23,"column":11},"end":{"line":26,"column":null}}],"line":21},"2":{"loc":{"start":{"line":32,"column":4},"end":{"line":36,"column":null}},"type":"if","locations":[{"start":{"line":32,"column":4},"end":{"line":36,"column":null}},{"start":{"line":34,"column":4},"end":{"line":36,"column":null}}],"line":32},"3":{"loc":{"start":{"line":34,"column":4},"end":{"line":36,"column":null}},"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":36,"column":null}},{"start":{},"end":{}}],"line":34},"4":{"loc":{"start":{"line":38,"column":4},"end":{"line":40,"column":null}},"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":40,"column":null}},{"start":{},"end":{}}],"line":38},"5":{"loc":{"start":{"line":44,"column":4},"end":{"line":46,"column":null}},"type":"if","locations":[{"start":{"line":44,"column":4},"end":{"line":46,"column":null}},{"start":{},"end":{}}],"line":44},"6":{"loc":{"start":{"line":48,"column":4},"end":{"line":58,"column":null}},"type":"if","locations":[{"start":{"line":48,"column":4},"end":{"line":58,"column":null}},{"start":{"line":50,"column":4},"end":{"line":58,"column":null}}],"line":48},"7":{"loc":{"start":{"line":50,"column":4},"end":{"line":58,"column":null}},"type":"if","locations":[{"start":{"line":50,"column":4},"end":{"line":58,"column":null}},{"start":{"line":53,"column":11},"end":{"line":58,"column":null}}],"line":50},"8":{"loc":{"start":{"line":55,"column":6},"end":{"line":57,"column":null}},"type":"if","locations":[{"start":{"line":55,"column":6},"end":{"line":57,"column":null}},{"start":{},"end":{}}],"line":55},"9":{"loc":{"start":{"line":61,"column":4},"end":{"line":63,"column":null}},"type":"if","locations":[{"start":{"line":61,"column":4},"end":{"line":63,"column":null}},{"start":{},"end":{}}],"line":61},"10":{"loc":{"start":{"line":67,"column":8},"end":{"line":69,"column":null}},"type":"if","locations":[{"start":{"line":67,"column":8},"end":{"line":69,"column":null}},{"start":{},"end":{}}],"line":67},"11":{"loc":{"start":{"line":73,"column":8},"end":{"line":77,"column":null}},"type":"if","locations":[{"start":{"line":73,"column":8},"end":{"line":77,"column":null}},{"start":{"line":75,"column":15},"end":{"line":77,"column":null}}],"line":73},"12":{"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":null}},"type":"if","locations":[{"start":{"line":98,"column":4},"end":{"line":100,"column":null}},{"start":{},"end":{}}],"line":98},"13":{"loc":{"start":{"line":106,"column":50},"end":{"line":106,"column":87}},"type":"cond-expr","locations":[{"start":{"line":106,"column":71},"end":{"line":106,"column":85}},{"start":{"line":106,"column":85},"end":{"line":106,"column":87}}],"line":106},"14":{"loc":{"start":{"line":118,"column":50},"end":{"line":118,"column":87}},"type":"cond-expr","locations":[{"start":{"line":118,"column":71},"end":{"line":118,"column":85}},{"start":{"line":118,"column":85},"end":{"line":118,"column":87}}],"line":118},"15":{"loc":{"start":{"line":129,"column":6},"end":{"line":129,"column":null}},"type":"if","locations":[{"start":{"line":129,"column":6},"end":{"line":129,"column":null}},{"start":{},"end":{}}],"line":129},"16":{"loc":{"start":{"line":131,"column":6},"end":{"line":165,"column":null}},"type":"if","locations":[{"start":{"line":131,"column":6},"end":{"line":165,"column":null}},{"start":{"line":150,"column":6},"end":{"line":165,"column":null}}],"line":131},"17":{"loc":{"start":{"line":134,"column":10},"end":{"line":140,"column":null}},"type":"if","locations":[{"start":{"line":134,"column":10},"end":{"line":140,"column":null}},{"start":{},"end":{}}],"line":134},"18":{"loc":{"start":{"line":136,"column":12},"end":{"line":138,"column":null}},"type":"if","locations":[{"start":{"line":136,"column":12},"end":{"line":138,"column":null}},{"start":{},"end":{}}],"line":136},"19":{"loc":{"start":{"line":144,"column":10},"end":{"line":146,"column":null}},"type":"if","locations":[{"start":{"line":144,"column":10},"end":{"line":146,"column":null}},{"start":{},"end":{}}],"line":144},"20":{"loc":{"start":{"line":144,"column":14},"end":{"line":144,"column":73}},"type":"binary-expr","locations":[{"start":{"line":144,"column":14},"end":{"line":144,"column":48}},{"start":{"line":144,"column":48},"end":{"line":144,"column":59}},{"start":{"line":144,"column":59},"end":{"line":144,"column":73}}],"line":144},"21":{"loc":{"start":{"line":150,"column":6},"end":{"line":165,"column":null}},"type":"if","locations":[{"start":{"line":150,"column":6},"end":{"line":165,"column":null}},{"start":{"line":158,"column":6},"end":{"line":165,"column":null}}],"line":150},"22":{"loc":{"start":{"line":153,"column":10},"end":{"line":155,"column":null}},"type":"if","locations":[{"start":{"line":153,"column":10},"end":{"line":155,"column":null}},{"start":{},"end":{}}],"line":153},"23":{"loc":{"start":{"line":158,"column":6},"end":{"line":165,"column":null}},"type":"if","locations":[{"start":{"line":158,"column":6},"end":{"line":165,"column":null}},{"start":{},"end":{}}],"line":158},"24":{"loc":{"start":{"line":160,"column":10},"end":{"line":162,"column":null}},"type":"if","locations":[{"start":{"line":160,"column":10},"end":{"line":162,"column":null}},{"start":{},"end":{}}],"line":160},"25":{"loc":{"start":{"line":160,"column":14},"end":{"line":160,"column":64}},"type":"binary-expr","locations":[{"start":{"line":160,"column":14},"end":{"line":160,"column":35}},{"start":{"line":160,"column":35},"end":{"line":160,"column":64}}],"line":160},"26":{"loc":{"start":{"line":181,"column":10},"end":{"line":189,"column":null}},"type":"if","locations":[{"start":{"line":181,"column":10},"end":{"line":189,"column":null}},{"start":{},"end":{}}],"line":181},"27":{"loc":{"start":{"line":181,"column":14},"end":{"line":181,"column":73}},"type":"binary-expr","locations":[{"start":{"line":181,"column":14},"end":{"line":181,"column":39}},{"start":{"line":181,"column":39},"end":{"line":181,"column":73}}],"line":181},"28":{"loc":{"start":{"line":183,"column":12},"end":{"line":188,"column":null}},"type":"if","locations":[{"start":{"line":183,"column":12},"end":{"line":188,"column":null}},{"start":{},"end":{}}],"line":183},"29":{"loc":{"start":{"line":183,"column":16},"end":{"line":183,"column":69}},"type":"binary-expr","locations":[{"start":{"line":183,"column":16},"end":{"line":183,"column":33}},{"start":{"line":183,"column":33},"end":{"line":183,"column":47}},{"start":{"line":183,"column":47},"end":{"line":183,"column":69}}],"line":183},"30":{"loc":{"start":{"line":185,"column":14},"end":{"line":187,"column":null}},"type":"if","locations":[{"start":{"line":185,"column":14},"end":{"line":187,"column":null}},{"start":{},"end":{}}],"line":185},"31":{"loc":{"start":{"line":199,"column":10},"end":{"line":201,"column":null}},"type":"if","locations":[{"start":{"line":199,"column":10},"end":{"line":201,"column":null}},{"start":{},"end":{}}],"line":199},"32":{"loc":{"start":{"line":199,"column":14},"end":{"line":199,"column":83}},"type":"binary-expr","locations":[{"start":{"line":199,"column":14},"end":{"line":199,"column":38}},{"start":{"line":199,"column":38},"end":{"line":199,"column":54}},{"start":{"line":199,"column":54},"end":{"line":199,"column":65}},{"start":{"line":199,"column":65},"end":{"line":199,"column":83}}],"line":199},"33":{"loc":{"start":{"line":209,"column":6},"end":{"line":209,"column":null}},"type":"if","locations":[{"start":{"line":209,"column":6},"end":{"line":209,"column":null}},{"start":{},"end":{}}],"line":209},"34":{"loc":{"start":{"line":213,"column":4},"end":{"line":213,"column":null}},"type":"if","locations":[{"start":{"line":213,"column":4},"end":{"line":213,"column":null}},{"start":{},"end":{}}],"line":213},"35":{"loc":{"start":{"line":222,"column":2},"end":{"line":222,"column":null}},"type":"if","locations":[{"start":{"line":222,"column":2},"end":{"line":222,"column":null}},{"start":{},"end":{}}],"line":222},"36":{"loc":{"start":{"line":223,"column":2},"end":{"line":223,"column":null}},"type":"if","locations":[{"start":{"line":223,"column":2},"end":{"line":223,"column":null}},{"start":{},"end":{}}],"line":223},"37":{"loc":{"start":{"line":227,"column":7},"end":{"line":247,"column":null}},"type":"cond-expr","locations":[{"start":{"line":228,"column":8},"end":{"line":228,"column":null}},{"start":{"line":230,"column":8},"end":{"line":247,"column":null}}],"line":227},"38":{"loc":{"start":{"line":242,"column":11},"end":{"line":245,"column":null}},"type":"binary-expr","locations":[{"start":{"line":242,"column":11},"end":{"line":242,"column":null}},{"start":{"line":243,"column":12},"end":{"line":245,"column":null}}],"line":242},"39":{"loc":{"start":{"line":244,"column":15},"end":{"line":244,"column":null}},"type":"cond-expr","locations":[{"start":{"line":244,"column":29},"end":{"line":244,"column":49}},{"start":{"line":244,"column":49},"end":{"line":244,"column":null}}],"line":244}},"s":{"0":36,"1":36,"2":36,"3":36,"4":36,"5":36,"6":36,"7":36,"8":36,"9":36,"10":11,"11":3,"12":8,"13":8,"14":11,"15":11,"16":11,"17":11,"18":2,"19":9,"20":1,"21":11,"22":3,"23":11,"24":11,"25":0,"26":11,"27":0,"28":11,"29":0,"30":0,"31":11,"32":11,"33":11,"34":11,"35":11,"36":11,"37":10,"38":0,"39":10,"40":9,"41":3,"42":3,"43":6,"44":9,"45":9,"46":9,"47":1,"48":1,"49":1,"50":36,"51":8,"52":8,"53":36,"54":5,"55":5,"56":5,"57":36,"58":2,"59":2,"60":2,"61":3,"62":2,"63":0,"64":36,"65":1,"66":1,"67":1,"68":2,"69":1,"70":0,"71":36,"72":31,"73":6,"74":0,"75":6,"76":5,"77":5,"78":5,"79":5,"80":5,"81":1,"82":5,"83":5,"84":2,"85":5,"86":1,"87":0,"88":0,"89":0,"90":0,"91":0,"92":1,"93":1,"94":1,"95":1,"96":1,"97":31,"98":31,"99":31,"100":36,"101":31,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":31,"110":1,"111":1,"112":1,"113":31,"114":31,"115":31,"116":31,"117":31,"118":31,"119":15,"120":31,"121":31,"122":31,"123":36,"124":15,"125":21,"126":21,"127":20,"128":44,"129":0},"f":{"0":36,"1":11,"2":10,"3":9,"4":3,"5":1,"6":8,"7":5,"8":2,"9":2,"10":3,"11":0,"12":1,"13":1,"14":2,"15":0,"16":31,"17":6,"18":5,"19":0,"20":1,"21":31,"22":31,"23":1,"24":1,"25":1,"26":1,"27":31,"28":31,"29":44,"30":0},"b":{"0":[36,36],"1":[3,8],"2":[2,9],"3":[1,8],"4":[3,8],"5":[0,11],"6":[0,11],"7":[0,11],"8":[11,0],"9":[11,0],"10":[0,10],"11":[3,6],"12":[5,0],"13":[2,1],"14":[1,1],"15":[0,6],"16":[5,1],"17":[5,0],"18":[1,4],"19":[2,3],"20":[5,2,2],"21":[0,1],"22":[0,0],"23":[1,0],"24":[1,0],"25":[1,1],"26":[1,0],"27":[1,1],"28":[1,0],"29":[1,1,1],"30":[1,0],"31":[1,0],"32":[1,1,1,1],"33":[31,0],"34":[15,16],"35":[15,21],"36":[1,20],"37":[0,20],"38":[20,20],"39":[5,15]},"meta":{"lastBranch":40,"lastFunction":31,"lastStatement":130,"seen":{"f:8:24:8:36":0,"s:9:26:9:Infinity":0,"s:10:21:10:Infinity":1,"s:11:19:11:Infinity":2,"b:11:19:11:49:11:49:11:Infinity":0,"s:13:24:13:Infinity":3,"s:14:28:14:Infinity":4,"s:15:36:15:Infinity":5,"s:16:28:16:Infinity":6,"s:17:24:17:Infinity":7,"s:18:40:18:Infinity":8,"s:20:21:87:Infinity":9,"f:20:21:20:22":1,"b:21:4:26:Infinity:23:11:26:Infinity":1,"s:21:4:26:Infinity":10,"s:22:6:22:Infinity":11,"s:24:6:24:Infinity":12,"s:25:6:25:Infinity":13,"s:27:4:27:Infinity":14,"s:29:14:29:Infinity":15,"s:30:19:30:Infinity":16,"b:32:4:36:Infinity:34:4:36:Infinity":2,"s:32:4:36:Infinity":17,"s:33:6:33:Infinity":18,"b:34:4:36:Infinity:undefined:undefined:undefined:undefined":3,"s:34:4:36:Infinity":19,"s:35:6:35:Infinity":20,"b:38:4:40:Infinity:undefined:undefined:undefined:undefined":4,"s:38:4:40:Infinity":21,"s:39:6:39:Infinity":22,"s:43:24:43:Infinity":23,"b:44:4:46:Infinity:undefined:undefined:undefined:undefined":5,"s:44:4:46:Infinity":24,"s:45:6:45:Infinity":25,"b:48:4:58:Infinity:50:4:58:Infinity":6,"s:48:4:58:Infinity":26,"s:49:6:49:Infinity":27,"b:50:4:58:Infinity:53:11:58:Infinity":7,"s:50:4:58:Infinity":28,"s:51:6:51:Infinity":29,"s:52:6:52:Infinity":30,"b:55:6:57:Infinity:undefined:undefined:undefined:undefined":8,"s:55:6:57:Infinity":31,"s:56:8:56:Infinity":32,"s:60:24:60:Infinity":33,"b:61:4:63:Infinity:undefined:undefined:undefined:undefined":9,"s:61:4:63:Infinity":34,"s:62:6:62:Infinity":35,"s:65:4:86:Infinity":36,"f:66:12:66:13":2,"b:67:8:69:Infinity:undefined:undefined:undefined:undefined":10,"s:67:8:69:Infinity":37,"s:68:10:68:Infinity":38,"s:70:8:70:Infinity":39,"f:72:12:72:13":3,"b:73:8:77:Infinity:75:15:77:Infinity":11,"s:73:8:77:Infinity":40,"s:74:10:74:Infinity":41,"f:74:19:74:20":4,"s:74:29:74:47":42,"s:76:10:76:Infinity":43,"s:78:8:78:Infinity":44,"s:79:8:79:Infinity":45,"s:80:8:80:Infinity":46,"f:82:13:82:14":5,"s:83:8:83:Infinity":47,"s:84:8:84:Infinity":48,"s:85:8:85:Infinity":49,"s:89:2:93:Infinity":50,"f:89:12:89:18":6,"s:90:4:90:Infinity":51,"s:91:4:91:Infinity":52,"s:96:23:101:Infinity":53,"f:96:23:96:24":7,"s:97:20:97:Infinity":54,"b:98:4:100:Infinity:undefined:undefined:undefined:undefined":12,"s:98:4:100:Infinity":55,"s:99:6:99:Infinity":56,"s:103:21:113:Infinity":57,"f:103:21:103:22":8,"s:104:24:104:Infinity":58,"s:106:4:106:Infinity":59,"f:106:13:106:14":9,"s:106:28:106:88":60,"f:106:42:106:43":10,"s:106:50:106:87":61,"b:106:71:106:85:106:85:106:87":13,"s:108:4:112:Infinity":62,"f:112:13:112:14":11,"s:112:22:112:63":63,"s:115:21:125:Infinity":64,"f:115:21:115:22":12,"s:116:24:116:Infinity":65,"s:118:4:118:Infinity":66,"f:118:13:118:14":13,"s:118:28:118:88":67,"f:118:42:118:43":14,"s:118:50:118:87":68,"b:118:71:118:85:118:85:118:87":14,"s:120:4:124:Infinity":69,"f:124:13:124:14":15,"s:124:22:124:65":70,"s:127:2:171:Infinity":71,"f:127:12:127:18":16,"s:128:26:166:Infinity":72,"f:128:26:128:27":17,"b:129:6:129:Infinity:undefined:undefined:undefined:undefined":15,"s:129:6:129:Infinity":73,"s:129:30:129:Infinity":74,"b:131:6:165:Infinity:150:6:165:Infinity":16,"s:131:6:165:Infinity":75,"s:132:8:149:Infinity":76,"f:132:25:132:26":18,"s:133:28:133:Infinity":77,"b:134:10:140:Infinity:undefined:undefined:undefined:undefined":17,"s:134:10:140:Infinity":78,"s:135:25:135:Infinity":79,"b:136:12:138:Infinity:undefined:undefined:undefined:undefined":18,"s:136:12:138:Infinity":80,"s:137:14:137:Infinity":81,"s:139:12:139:Infinity":82,"b:144:10:146:Infinity:undefined:undefined:undefined:undefined":19,"s:144:10:146:Infinity":83,"b:144:14:144:48:144:48:144:59:144:59:144:73":20,"s:145:12:145:Infinity":84,"s:148:10:148:Infinity":85,"b:150:6:165:Infinity:158:6:165:Infinity":21,"s:150:6:165:Infinity":86,"s:151:8:157:Infinity":87,"f:151:25:151:26":19,"s:152:28:152:Infinity":88,"b:153:10:155:Infinity:undefined:undefined:undefined:undefined":22,"s:153:10:155:Infinity":89,"s:154:12:154:Infinity":90,"s:156:10:156:Infinity":91,"b:158:6:165:Infinity:undefined:undefined:undefined:undefined":23,"s:158:6:165:Infinity":92,"s:159:8:164:Infinity":93,"f:159:25:159:26":20,"b:160:10:162:Infinity:undefined:undefined:undefined:undefined":24,"s:160:10:162:Infinity":94,"b:160:14:160:35:160:35:160:64":25,"s:161:12:161:Infinity":95,"s:163:10:163:Infinity":96,"s:168:4:168:Infinity":97,"s:169:4:169:Infinity":98,"f:169:11:169:17":21,"s:169:17:169:Infinity":99,"s:175:2:220:Infinity":100,"f:175:12:175:18":22,"s:177:25:193:Infinity":101,"f:178:6:178:7":23,"s:179:8:190:Infinity":102,"f:179:24:179:25":24,"b:181:10:189:Infinity:undefined:undefined:undefined:undefined":26,"s:181:10:189:Infinity":103,"b:181:14:181:39:181:39:181:73":27,"s:182:26:182:Infinity":104,"b:183:12:188:Infinity:undefined:undefined:undefined:undefined":28,"s:183:12:188:Infinity":105,"b:183:16:183:33:183:33:183:47:183:47:183:69":29,"s:184:27:184:Infinity":106,"b:185:14:187:Infinity:undefined:undefined:undefined:undefined":30,"s:185:14:187:Infinity":107,"s:186:16:186:Infinity":108,"s:196:29:205:Infinity":109,"f:197:6:197:7":25,"s:198:8:202:Infinity":110,"f:198:24:198:25":26,"b:199:10:201:Infinity:undefined:undefined:undefined:undefined":31,"s:199:10:201:Infinity":111,"b:199:14:199:38:199:38:199:54:199:54:199:65:199:65:199:83":32,"s:200:12:200:Infinity":112,"s:207:4:210:Infinity":113,"f:207:18:207:19":27,"s:208:17:208:Infinity":114,"b:209:6:209:Infinity:undefined:undefined:undefined:undefined":33,"s:209:6:209:Infinity":115,"s:209:14:209:Infinity":116,"s:212:21:212:Infinity":117,"b:213:4:213:Infinity:undefined:undefined:undefined:undefined":34,"s:213:4:213:Infinity":118,"s:213:18:213:Infinity":119,"s:215:4:218:Infinity":120,"f:215:11:215:17":28,"s:216:6:216:Infinity":121,"s:217:6:217:Infinity":122,"b:222:2:222:Infinity:undefined:undefined:undefined:undefined":35,"s:222:2:222:Infinity":123,"s:222:15:222:Infinity":124,"b:223:2:223:Infinity:undefined:undefined:undefined:undefined":36,"s:223:2:223:Infinity":125,"s:223:13:223:Infinity":126,"s:225:2:249:Infinity":127,"b:228:8:228:Infinity:230:8:247:Infinity":37,"f:231:21:231:22":29,"s:232:12:240:Infinity":128,"f:237:23:237:29":30,"s:237:29:237:Infinity":129,"b:242:11:242:Infinity:243:12:245:Infinity":38,"b:244:29:244:49:244:49:244:Infinity":39}}} -,"/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedList.css": {"path":"/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedList.css","statementMap":{},"fnMap":{},"branchMap":{},"s":{},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":0,"seen":{}}} -,"/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedList.tsx": {"path":"/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedList.tsx","statementMap":{"0":{"start":{"line":19,"column":24},"end":{"line":19,"column":null}},"1":{"start":{"line":20,"column":22},"end":{"line":20,"column":null}},"2":{"start":{"line":21,"column":28},"end":{"line":21,"column":null}},"3":{"start":{"line":22,"column":24},"end":{"line":22,"column":null}},"4":{"start":{"line":23,"column":40},"end":{"line":23,"column":null}},"5":{"start":{"line":24,"column":38},"end":{"line":24,"column":null}},"6":{"start":{"line":25,"column":36},"end":{"line":25,"column":null}},"7":{"start":{"line":26,"column":8},"end":{"line":26,"column":null}},"8":{"start":{"line":27,"column":21},"end":{"line":27,"column":null}},"9":{"start":{"line":28,"column":8},"end":{"line":28,"column":null}},"10":{"start":{"line":29,"column":26},"end":{"line":29,"column":null}},"11":{"start":{"line":31,"column":25},"end":{"line":31,"column":null}},"12":{"start":{"line":33,"column":2},"end":{"line":38,"column":null}},"13":{"start":{"line":34,"column":20},"end":{"line":34,"column":null}},"14":{"start":{"line":35,"column":4},"end":{"line":37,"column":null}},"15":{"start":{"line":36,"column":6},"end":{"line":36,"column":null}},"16":{"start":{"line":41,"column":4},"end":{"line":42,"column":null}},"17":{"start":{"line":44,"column":23},"end":{"line":49,"column":null}},"18":{"start":{"line":45,"column":4},"end":{"line":45,"column":null}},"19":{"start":{"line":46,"column":4},"end":{"line":48,"column":null}},"20":{"start":{"line":47,"column":6},"end":{"line":47,"column":null}},"21":{"start":{"line":51,"column":22},"end":{"line":53,"column":null}},"22":{"start":{"line":52,"column":4},"end":{"line":52,"column":null}},"23":{"start":{"line":55,"column":21},"end":{"line":57,"column":null}},"24":{"start":{"line":56,"column":4},"end":{"line":56,"column":null}},"25":{"start":{"line":59,"column":26},"end":{"line":63,"column":null}},"26":{"start":{"line":60,"column":4},"end":{"line":62,"column":null}},"27":{"start":{"line":61,"column":6},"end":{"line":61,"column":null}},"28":{"start":{"line":65,"column":2},"end":{"line":85,"column":null}},"29":{"start":{"line":66,"column":4},"end":{"line":84,"column":null}},"30":{"start":{"line":68,"column":8},"end":{"line":68,"column":null}},"31":{"start":{"line":68,"column":21},"end":{"line":68,"column":null}},"32":{"start":{"line":69,"column":8},"end":{"line":69,"column":null}},"33":{"start":{"line":72,"column":8},"end":{"line":72,"column":null}},"34":{"start":{"line":72,"column":21},"end":{"line":72,"column":null}},"35":{"start":{"line":73,"column":8},"end":{"line":73,"column":null}},"36":{"start":{"line":77,"column":8},"end":{"line":77,"column":null}},"37":{"start":{"line":78,"column":8},"end":{"line":78,"column":null}},"38":{"start":{"line":79,"column":8},"end":{"line":79,"column":null}},"39":{"start":{"line":82,"column":8},"end":{"line":82,"column":null}},"40":{"start":{"line":83,"column":8},"end":{"line":83,"column":null}},"41":{"start":{"line":87,"column":2},"end":{"line":87,"column":null}},"42":{"start":{"line":87,"column":15},"end":{"line":87,"column":null}},"43":{"start":{"line":88,"column":2},"end":{"line":88,"column":null}},"44":{"start":{"line":88,"column":13},"end":{"line":88,"column":null}},"45":{"start":{"line":90,"column":23},"end":{"line":92,"column":null}},"46":{"start":{"line":91,"column":4},"end":{"line":91,"column":null}},"47":{"start":{"line":91,"column":60},"end":{"line":91,"column":95}},"48":{"start":{"line":94,"column":2},"end":{"line":210,"column":null}},"49":{"start":{"line":96,"column":42},"end":{"line":96,"column":68}},"50":{"start":{"line":106,"column":29},"end":{"line":106,"column":null}},"51":{"start":{"line":139,"column":14},"end":{"line":147,"column":null}},"52":{"start":{"line":163,"column":16},"end":{"line":171,"column":null}},"53":{"start":{"line":195,"column":27},"end":{"line":195,"column":null}},"54":{"start":{"line":202,"column":27},"end":{"line":202,"column":null}}},"fnMap":{"0":{"name":"FeedList","decl":{"start":{"line":8,"column":24},"end":{"line":8,"column":33}},"loc":{"start":{"line":18,"column":3},"end":{"line":212,"column":null}},"line":18},"1":{"name":"(anonymous_1)","decl":{"start":{"line":33,"column":12},"end":{"line":33,"column":18}},"loc":{"start":{"line":33,"column":18},"end":{"line":38,"column":5}},"line":33},"2":{"name":"(anonymous_2)","decl":{"start":{"line":44,"column":23},"end":{"line":44,"column":24}},"loc":{"start":{"line":44,"column":47},"end":{"line":49,"column":null}},"line":44},"3":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":22},"end":{"line":51,"column":28}},"loc":{"start":{"line":51,"column":28},"end":{"line":53,"column":null}},"line":51},"4":{"name":"(anonymous_4)","decl":{"start":{"line":55,"column":21},"end":{"line":55,"column":27}},"loc":{"start":{"line":55,"column":27},"end":{"line":57,"column":null}},"line":55},"5":{"name":"(anonymous_5)","decl":{"start":{"line":59,"column":26},"end":{"line":59,"column":32}},"loc":{"start":{"line":59,"column":32},"end":{"line":63,"column":null}},"line":59},"6":{"name":"(anonymous_6)","decl":{"start":{"line":65,"column":12},"end":{"line":65,"column":18}},"loc":{"start":{"line":65,"column":18},"end":{"line":85,"column":5}},"line":65},"7":{"name":"(anonymous_7)","decl":{"start":{"line":67,"column":34},"end":{"line":67,"column":35}},"loc":{"start":{"line":67,"column":43},"end":{"line":70,"column":7}},"line":67},"8":{"name":"(anonymous_8)","decl":{"start":{"line":71,"column":32},"end":{"line":71,"column":33}},"loc":{"start":{"line":71,"column":41},"end":{"line":74,"column":7}},"line":71},"9":{"name":"(anonymous_9)","decl":{"start":{"line":76,"column":12},"end":{"line":76,"column":13}},"loc":{"start":{"line":76,"column":39},"end":{"line":80,"column":7}},"line":76},"10":{"name":"(anonymous_10)","decl":{"start":{"line":81,"column":13},"end":{"line":81,"column":14}},"loc":{"start":{"line":81,"column":22},"end":{"line":84,"column":7}},"line":81},"11":{"name":"(anonymous_11)","decl":{"start":{"line":90,"column":23},"end":{"line":90,"column":29}},"loc":{"start":{"line":90,"column":29},"end":{"line":92,"column":null}},"line":90},"12":{"name":"(anonymous_12)","decl":{"start":{"line":91,"column":53},"end":{"line":91,"column":60}},"loc":{"start":{"line":91,"column":60},"end":{"line":91,"column":95}},"line":91},"13":{"name":"(anonymous_13)","decl":{"start":{"line":96,"column":36},"end":{"line":96,"column":42}},"loc":{"start":{"line":96,"column":42},"end":{"line":96,"column":68}},"line":96},"14":{"name":"(anonymous_14)","decl":{"start":{"line":106,"column":22},"end":{"line":106,"column":23}},"loc":{"start":{"line":106,"column":29},"end":{"line":106,"column":null}},"line":106},"15":{"name":"(anonymous_15)","decl":{"start":{"line":138,"column":22},"end":{"line":138,"column":23}},"loc":{"start":{"line":139,"column":14},"end":{"line":147,"column":null}},"line":139},"16":{"name":"(anonymous_16)","decl":{"start":{"line":162,"column":25},"end":{"line":162,"column":26}},"loc":{"start":{"line":163,"column":16},"end":{"line":171,"column":null}},"line":163},"17":{"name":"(anonymous_17)","decl":{"start":{"line":195,"column":21},"end":{"line":195,"column":27}},"loc":{"start":{"line":195,"column":27},"end":{"line":195,"column":null}},"line":195},"18":{"name":"(anonymous_18)","decl":{"start":{"line":202,"column":21},"end":{"line":202,"column":27}},"loc":{"start":{"line":202,"column":27},"end":{"line":202,"column":null}},"line":202}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":25},"end":{"line":31,"column":null}},"type":"binary-expr","locations":[{"start":{"line":31,"column":25},"end":{"line":31,"column":56}},{"start":{"line":31,"column":56},"end":{"line":31,"column":104}},{"start":{"line":31,"column":104},"end":{"line":31,"column":null}}],"line":31},"1":{"loc":{"start":{"line":35,"column":4},"end":{"line":37,"column":null}},"type":"if","locations":[{"start":{"line":35,"column":4},"end":{"line":37,"column":null}},{"start":{},"end":{}}],"line":35},"2":{"loc":{"start":{"line":41,"column":4},"end":{"line":42,"column":null}},"type":"binary-expr","locations":[{"start":{"line":41,"column":4},"end":{"line":41,"column":null}},{"start":{"line":42,"column":5},"end":{"line":42,"column":null}}],"line":41},"3":{"loc":{"start":{"line":42,"column":5},"end":{"line":42,"column":null}},"type":"cond-expr","locations":[{"start":{"line":42,"column":56},"end":{"line":42,"column":67}},{"start":{"line":42,"column":67},"end":{"line":42,"column":null}}],"line":42},"4":{"loc":{"start":{"line":42,"column":5},"end":{"line":42,"column":56}},"type":"binary-expr","locations":[{"start":{"line":42,"column":5},"end":{"line":42,"column":34}},{"start":{"line":42,"column":34},"end":{"line":42,"column":45}},{"start":{"line":42,"column":45},"end":{"line":42,"column":56}}],"line":42},"5":{"loc":{"start":{"line":46,"column":4},"end":{"line":48,"column":null}},"type":"if","locations":[{"start":{"line":46,"column":4},"end":{"line":48,"column":null}},{"start":{},"end":{}}],"line":46},"6":{"loc":{"start":{"line":60,"column":4},"end":{"line":62,"column":null}},"type":"if","locations":[{"start":{"line":60,"column":4},"end":{"line":62,"column":null}},{"start":{},"end":{}}],"line":60},"7":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":null}},"type":"if","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":null}},{"start":{},"end":{}}],"line":68},"8":{"loc":{"start":{"line":72,"column":8},"end":{"line":72,"column":null}},"type":"if","locations":[{"start":{"line":72,"column":8},"end":{"line":72,"column":null}},{"start":{},"end":{}}],"line":72},"9":{"loc":{"start":{"line":87,"column":2},"end":{"line":87,"column":null}},"type":"if","locations":[{"start":{"line":87,"column":2},"end":{"line":87,"column":null}},{"start":{},"end":{}}],"line":87},"10":{"loc":{"start":{"line":88,"column":2},"end":{"line":88,"column":null}},"type":"if","locations":[{"start":{"line":88,"column":2},"end":{"line":88,"column":null}},{"start":{},"end":{}}],"line":88},"11":{"loc":{"start":{"line":115,"column":50},"end":{"line":115,"column":94}},"type":"cond-expr","locations":[{"start":{"line":115,"column":79},"end":{"line":115,"column":90}},{"start":{"line":115,"column":90},"end":{"line":115,"column":94}}],"line":115},"12":{"loc":{"start":{"line":120,"column":47},"end":{"line":120,"column":88}},"type":"cond-expr","locations":[{"start":{"line":120,"column":73},"end":{"line":120,"column":84}},{"start":{"line":120,"column":84},"end":{"line":120,"column":88}}],"line":120},"13":{"loc":{"start":{"line":125,"column":51},"end":{"line":125,"column":96}},"type":"cond-expr","locations":[{"start":{"line":125,"column":81},"end":{"line":125,"column":92}},{"start":{"line":125,"column":92},"end":{"line":125,"column":96}}],"line":125},"14":{"loc":{"start":{"line":134,"column":36},"end":{"line":134,"column":66}},"type":"cond-expr","locations":[{"start":{"line":134,"column":51},"end":{"line":134,"column":64}},{"start":{"line":134,"column":64},"end":{"line":134,"column":66}}],"line":134},"15":{"loc":{"start":{"line":136,"column":9},"end":{"line":149,"column":null}},"type":"binary-expr","locations":[{"start":{"line":136,"column":9},"end":{"line":136,"column":null}},{"start":{"line":137,"column":10},"end":{"line":149,"column":null}}],"line":136},"16":{"loc":{"start":{"line":142,"column":41},"end":{"line":142,"column":78}},"type":"cond-expr","locations":[{"start":{"line":142,"column":65},"end":{"line":142,"column":76}},{"start":{"line":142,"column":76},"end":{"line":142,"column":78}}],"line":142},"17":{"loc":{"start":{"line":155,"column":36},"end":{"line":155,"column":67}},"type":"cond-expr","locations":[{"start":{"line":155,"column":52},"end":{"line":155,"column":65}},{"start":{"line":155,"column":65},"end":{"line":155,"column":67}}],"line":155},"18":{"loc":{"start":{"line":157,"column":9},"end":{"line":173,"column":null}},"type":"binary-expr","locations":[{"start":{"line":157,"column":9},"end":{"line":157,"column":null}},{"start":{"line":158,"column":11},"end":{"line":173,"column":null}}],"line":157},"19":{"loc":{"start":{"line":158,"column":11},"end":{"line":173,"column":null}},"type":"cond-expr","locations":[{"start":{"line":159,"column":12},"end":{"line":159,"column":null}},{"start":{"line":161,"column":12},"end":{"line":173,"column":null}}],"line":158},"20":{"loc":{"start":{"line":166,"column":45},"end":{"line":166,"column":88}},"type":"cond-expr","locations":[{"start":{"line":166,"column":75},"end":{"line":166,"column":86}},{"start":{"line":166,"column":86},"end":{"line":166,"column":88}}],"line":166},"21":{"loc":{"start":{"line":169,"column":21},"end":{"line":169,"column":null}},"type":"binary-expr","locations":[{"start":{"line":169,"column":21},"end":{"line":169,"column":35}},{"start":{"line":169,"column":35},"end":{"line":169,"column":null}}],"line":169},"22":{"loc":{"start":{"line":196,"column":23},"end":{"line":196,"column":null}},"type":"cond-expr","locations":[{"start":{"line":196,"column":43},"end":{"line":196,"column":54}},{"start":{"line":196,"column":54},"end":{"line":196,"column":null}}],"line":196},"23":{"loc":{"start":{"line":203,"column":23},"end":{"line":203,"column":null}},"type":"cond-expr","locations":[{"start":{"line":203,"column":42},"end":{"line":203,"column":53}},{"start":{"line":203,"column":53},"end":{"line":203,"column":null}}],"line":203}},"s":{"0":22,"1":22,"2":22,"3":22,"4":22,"5":22,"6":22,"7":22,"8":22,"9":22,"10":22,"11":22,"12":22,"13":11,"14":11,"15":0,"16":22,"17":22,"18":1,"19":1,"20":1,"21":22,"22":2,"23":22,"24":0,"25":22,"26":1,"27":1,"28":22,"29":9,"30":7,"31":0,"32":7,"33":7,"34":0,"35":7,"36":7,"37":7,"38":7,"39":1,"40":1,"41":22,"42":9,"43":13,"44":13,"45":12,"46":2,"47":2,"48":12,"49":0,"50":1,"51":4,"52":2,"53":0,"54":0},"f":{"0":22,"1":11,"2":1,"3":2,"4":0,"5":1,"6":9,"7":7,"8":7,"9":7,"10":1,"11":2,"12":2,"13":0,"14":1,"15":4,"16":2,"17":0,"18":0},"b":{"0":[22,22,22],"1":[0,11],"2":[22,21],"3":[21,0],"4":[21,21,21],"5":[1,0],"6":[1,0],"7":[0,7],"8":[0,7],"9":[9,13],"10":[1,12],"11":[12,0],"12":[0,12],"13":[0,12],"14":[12,0],"15":[22,12],"16":[0,4],"17":[2,10],"18":[22,2],"19":[1,1],"20":[0,2],"21":[2,0],"22":[12,0],"23":[0,12]},"meta":{"lastBranch":24,"lastFunction":19,"lastStatement":55,"seen":{"f:8:24:8:33":0,"s:19:24:19:Infinity":0,"s:20:22:20:Infinity":1,"s:21:28:21:Infinity":2,"s:22:24:22:Infinity":3,"s:23:40:23:Infinity":4,"s:24:38:24:Infinity":5,"s:25:36:25:Infinity":6,"s:26:8:26:Infinity":7,"s:27:21:27:Infinity":8,"s:28:8:28:Infinity":9,"s:29:26:29:Infinity":10,"s:31:25:31:Infinity":11,"b:31:25:31:56:31:56:31:104:31:104:31:Infinity":0,"s:33:2:38:Infinity":12,"f:33:12:33:18":1,"s:34:20:34:Infinity":13,"b:35:4:37:Infinity:undefined:undefined:undefined:undefined":1,"s:35:4:37:Infinity":14,"s:36:6:36:Infinity":15,"s:41:4:42:Infinity":16,"b:41:4:41:Infinity:42:5:42:Infinity":2,"b:42:56:42:67:42:67:42:Infinity":3,"b:42:5:42:34:42:34:42:45:42:45:42:56":4,"s:44:23:49:Infinity":17,"f:44:23:44:24":2,"s:45:4:45:Infinity":18,"b:46:4:48:Infinity:undefined:undefined:undefined:undefined":5,"s:46:4:48:Infinity":19,"s:47:6:47:Infinity":20,"s:51:22:53:Infinity":21,"f:51:22:51:28":3,"s:52:4:52:Infinity":22,"s:55:21:57:Infinity":23,"f:55:21:55:27":4,"s:56:4:56:Infinity":24,"s:59:26:63:Infinity":25,"f:59:26:59:32":5,"b:60:4:62:Infinity:undefined:undefined:undefined:undefined":6,"s:60:4:62:Infinity":26,"s:61:6:61:Infinity":27,"s:65:2:85:Infinity":28,"f:65:12:65:18":6,"s:66:4:84:Infinity":29,"f:67:34:67:35":7,"b:68:8:68:Infinity:undefined:undefined:undefined:undefined":7,"s:68:8:68:Infinity":30,"s:68:21:68:Infinity":31,"s:69:8:69:Infinity":32,"f:71:32:71:33":8,"b:72:8:72:Infinity:undefined:undefined:undefined:undefined":8,"s:72:8:72:Infinity":33,"s:72:21:72:Infinity":34,"s:73:8:73:Infinity":35,"f:76:12:76:13":9,"s:77:8:77:Infinity":36,"s:78:8:78:Infinity":37,"s:79:8:79:Infinity":38,"f:81:13:81:14":10,"s:82:8:82:Infinity":39,"s:83:8:83:Infinity":40,"b:87:2:87:Infinity:undefined:undefined:undefined:undefined":9,"s:87:2:87:Infinity":41,"s:87:15:87:Infinity":42,"b:88:2:88:Infinity:undefined:undefined:undefined:undefined":10,"s:88:2:88:Infinity":43,"s:88:13:88:Infinity":44,"s:90:23:92:Infinity":45,"f:90:23:90:29":11,"s:91:4:91:Infinity":46,"f:91:53:91:60":12,"s:91:60:91:95":47,"s:94:2:210:Infinity":48,"f:96:36:96:42":13,"s:96:42:96:68":49,"f:106:22:106:23":14,"s:106:29:106:Infinity":50,"b:115:79:115:90:115:90:115:94":11,"b:120:73:120:84:120:84:120:88":12,"b:125:81:125:92:125:92:125:96":13,"b:134:51:134:64:134:64:134:66":14,"b:136:9:136:Infinity:137:10:149:Infinity":15,"f:138:22:138:23":15,"s:139:14:147:Infinity":51,"b:142:65:142:76:142:76:142:78":16,"b:155:52:155:65:155:65:155:67":17,"b:157:9:157:Infinity:158:11:173:Infinity":18,"b:159:12:159:Infinity:161:12:173:Infinity":19,"f:162:25:162:26":16,"s:163:16:171:Infinity":52,"b:166:75:166:86:166:86:166:88":20,"b:169:21:169:35:169:35:169:Infinity":21,"f:195:21:195:27":17,"s:195:27:195:Infinity":53,"b:196:43:196:54:196:54:196:Infinity":22,"f:202:21:202:27":18,"s:202:27:202:Infinity":54,"b:203:42:203:53:203:53:203:Infinity":23}}} -,"/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedListVariants.css": {"path":"/Users/adam/workspace/vibecode/neko/frontend/src/components/FeedListVariants.css","statementMap":{},"fnMap":{},"branchMap":{},"s":{},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":0,"seen":{}}} -,"/Users/adam/workspace/vibecode/neko/frontend/src/components/Login.css": {"path":"/Users/adam/workspace/vibecode/neko/frontend/src/components/Login.css","statementMap":{},"fnMap":{},"branchMap":{},"s":{},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":0,"seen":{}}} -,"/Users/adam/workspace/vibecode/neko/frontend/src/components/Login.tsx": {"path":"/Users/adam/workspace/vibecode/neko/frontend/src/components/Login.tsx","statementMap":{"0":{"start":{"line":8,"column":30},"end":{"line":8,"column":null}},"1":{"start":{"line":9,"column":30},"end":{"line":9,"column":null}},"2":{"start":{"line":10,"column":24},"end":{"line":10,"column":null}},"3":{"start":{"line":11,"column":8},"end":{"line":11,"column":null}},"4":{"start":{"line":13,"column":23},"end":{"line":37,"column":null}},"5":{"start":{"line":14,"column":4},"end":{"line":14,"column":null}},"6":{"start":{"line":15,"column":4},"end":{"line":15,"column":null}},"7":{"start":{"line":17,"column":4},"end":{"line":36,"column":null}},"8":{"start":{"line":19,"column":21},"end":{"line":19,"column":null}},"9":{"start":{"line":20,"column":6},"end":{"line":20,"column":null}},"10":{"start":{"line":21,"column":6},"end":{"line":21,"column":null}},"11":{"start":{"line":23,"column":18},"end":{"line":26,"column":null}},"12":{"start":{"line":28,"column":6},"end":{"line":33,"column":null}},"13":{"start":{"line":29,"column":8},"end":{"line":29,"column":null}},"14":{"start":{"line":31,"column":21},"end":{"line":31,"column":null}},"15":{"start":{"line":32,"column":8},"end":{"line":32,"column":null}},"16":{"start":{"line":35,"column":6},"end":{"line":35,"column":null}},"17":{"start":{"line":39,"column":2},"end":{"line":65,"column":null}},"18":{"start":{"line":49,"column":29},"end":{"line":49,"column":null}},"19":{"start":{"line":58,"column":29},"end":{"line":58,"column":null}}},"fnMap":{"0":{"name":"Login","decl":{"start":{"line":7,"column":24},"end":{"line":7,"column":32}},"loc":{"start":{"line":7,"column":32},"end":{"line":67,"column":null}},"line":7},"1":{"name":"(anonymous_1)","decl":{"start":{"line":13,"column":23},"end":{"line":13,"column":30}},"loc":{"start":{"line":13,"column":47},"end":{"line":37,"column":null}},"line":13},"2":{"name":"(anonymous_2)","decl":{"start":{"line":49,"column":22},"end":{"line":49,"column":23}},"loc":{"start":{"line":49,"column":29},"end":{"line":49,"column":null}},"line":49},"3":{"name":"(anonymous_3)","decl":{"start":{"line":58,"column":22},"end":{"line":58,"column":23}},"loc":{"start":{"line":58,"column":29},"end":{"line":58,"column":null}},"line":58}},"branchMap":{"0":{"loc":{"start":{"line":28,"column":6},"end":{"line":33,"column":null}},"type":"if","locations":[{"start":{"line":28,"column":6},"end":{"line":33,"column":null}},{"start":{"line":30,"column":13},"end":{"line":33,"column":null}}],"line":28},"1":{"loc":{"start":{"line":32,"column":17},"end":{"line":32,"column":47}},"type":"binary-expr","locations":[{"start":{"line":32,"column":17},"end":{"line":32,"column":33}},{"start":{"line":32,"column":33},"end":{"line":32,"column":47}}],"line":32},"2":{"loc":{"start":{"line":62,"column":9},"end":{"line":62,"column":null}},"type":"binary-expr","locations":[{"start":{"line":62,"column":9},"end":{"line":62,"column":18}},{"start":{"line":62,"column":18},"end":{"line":62,"column":null}}],"line":62}},"s":{"0":17,"1":17,"2":17,"3":17,"4":17,"5":3,"6":3,"7":3,"8":3,"9":3,"10":3,"11":3,"12":2,"13":1,"14":1,"15":1,"16":1,"17":17,"18":3,"19":3},"f":{"0":17,"1":3,"2":3,"3":3},"b":{"0":[1,1],"1":[1,0],"2":[17,2]},"meta":{"lastBranch":3,"lastFunction":4,"lastStatement":20,"seen":{"f:7:24:7:32":0,"s:8:30:8:Infinity":0,"s:9:30:9:Infinity":1,"s:10:24:10:Infinity":2,"s:11:8:11:Infinity":3,"s:13:23:37:Infinity":4,"f:13:23:13:30":1,"s:14:4:14:Infinity":5,"s:15:4:15:Infinity":6,"s:17:4:36:Infinity":7,"s:19:21:19:Infinity":8,"s:20:6:20:Infinity":9,"s:21:6:21:Infinity":10,"s:23:18:26:Infinity":11,"b:28:6:33:Infinity:30:13:33:Infinity":0,"s:28:6:33:Infinity":12,"s:29:8:29:Infinity":13,"s:31:21:31:Infinity":14,"s:32:8:32:Infinity":15,"b:32:17:32:33:32:33:32:47":1,"s:35:6:35:Infinity":16,"s:39:2:65:Infinity":17,"f:49:22:49:23":2,"s:49:29:49:Infinity":18,"f:58:22:58:23":3,"s:58:29:58:Infinity":19,"b:62:9:62:18:62:18:62:Infinity":2}}} -,"/Users/adam/workspace/vibecode/neko/frontend/src/components/Settings.css": {"path":"/Users/adam/workspace/vibecode/neko/frontend/src/components/Settings.css","statementMap":{},"fnMap":{},"branchMap":{},"s":{},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":0,"seen":{}}} -,"/Users/adam/workspace/vibecode/neko/frontend/src/components/Settings.tsx": {"path":"/Users/adam/workspace/vibecode/neko/frontend/src/components/Settings.tsx","statementMap":{"0":{"start":{"line":12,"column":24},"end":{"line":12,"column":null}},"1":{"start":{"line":14,"column":34},"end":{"line":14,"column":null}},"2":{"start":{"line":15,"column":28},"end":{"line":15,"column":null}},"3":{"start":{"line":16,"column":24},"end":{"line":16,"column":null}},"4":{"start":{"line":18,"column":34},"end":{"line":18,"column":null}},"5":{"start":{"line":21,"column":21},"end":{"line":36,"column":null}},"6":{"start":{"line":22,"column":4},"end":{"line":22,"column":null}},"7":{"start":{"line":23,"column":4},"end":{"line":35,"column":null}},"8":{"start":{"line":25,"column":8},"end":{"line":25,"column":null}},"9":{"start":{"line":25,"column":21},"end":{"line":25,"column":null}},"10":{"start":{"line":26,"column":8},"end":{"line":26,"column":null}},"11":{"start":{"line":29,"column":8},"end":{"line":29,"column":null}},"12":{"start":{"line":30,"column":8},"end":{"line":30,"column":null}},"13":{"start":{"line":33,"column":8},"end":{"line":33,"column":null}},"14":{"start":{"line":34,"column":8},"end":{"line":34,"column":null}},"15":{"start":{"line":38,"column":2},"end":{"line":41,"column":null}},"16":{"start":{"line":40,"column":4},"end":{"line":40,"column":null}},"17":{"start":{"line":44,"column":24},"end":{"line":66,"column":null}},"18":{"start":{"line":45,"column":4},"end":{"line":45,"column":null}},"19":{"start":{"line":46,"column":4},"end":{"line":46,"column":null}},"20":{"start":{"line":46,"column":21},"end":{"line":46,"column":null}},"21":{"start":{"line":48,"column":4},"end":{"line":48,"column":null}},"22":{"start":{"line":49,"column":4},"end":{"line":65,"column":null}},"23":{"start":{"line":55,"column":8},"end":{"line":55,"column":null}},"24":{"start":{"line":55,"column":21},"end":{"line":55,"column":null}},"25":{"start":{"line":56,"column":8},"end":{"line":56,"column":null}},"26":{"start":{"line":59,"column":8},"end":{"line":59,"column":null}},"27":{"start":{"line":60,"column":8},"end":{"line":60,"column":null}},"28":{"start":{"line":63,"column":8},"end":{"line":63,"column":null}},"29":{"start":{"line":64,"column":8},"end":{"line":64,"column":null}},"30":{"start":{"line":68,"column":27},"end":{"line":84,"column":null}},"31":{"start":{"line":69,"column":4},"end":{"line":69,"column":null}},"32":{"start":{"line":69,"column":75},"end":{"line":69,"column":null}},"33":{"start":{"line":71,"column":4},"end":{"line":71,"column":null}},"34":{"start":{"line":72,"column":4},"end":{"line":83,"column":null}},"35":{"start":{"line":76,"column":8},"end":{"line":76,"column":null}},"36":{"start":{"line":76,"column":21},"end":{"line":76,"column":null}},"37":{"start":{"line":77,"column":8},"end":{"line":77,"column":null}},"38":{"start":{"line":77,"column":37},"end":{"line":77,"column":49}},"39":{"start":{"line":78,"column":8},"end":{"line":78,"column":null}},"40":{"start":{"line":81,"column":8},"end":{"line":81,"column":null}},"41":{"start":{"line":82,"column":8},"end":{"line":82,"column":null}},"42":{"start":{"line":86,"column":23},"end":{"line":112,"column":null}},"43":{"start":{"line":87,"column":4},"end":{"line":87,"column":null}},"44":{"start":{"line":88,"column":4},"end":{"line":88,"column":null}},"45":{"start":{"line":88,"column":21},"end":{"line":88,"column":null}},"46":{"start":{"line":90,"column":4},"end":{"line":90,"column":null}},"47":{"start":{"line":91,"column":21},"end":{"line":91,"column":null}},"48":{"start":{"line":92,"column":4},"end":{"line":92,"column":null}},"49":{"start":{"line":93,"column":4},"end":{"line":93,"column":null}},"50":{"start":{"line":95,"column":4},"end":{"line":111,"column":null}},"51":{"start":{"line":100,"column":8},"end":{"line":100,"column":null}},"52":{"start":{"line":100,"column":21},"end":{"line":100,"column":null}},"53":{"start":{"line":101,"column":8},"end":{"line":101,"column":null}},"54":{"start":{"line":104,"column":8},"end":{"line":104,"column":null}},"55":{"start":{"line":105,"column":8},"end":{"line":105,"column":null}},"56":{"start":{"line":106,"column":8},"end":{"line":106,"column":null}},"57":{"start":{"line":109,"column":8},"end":{"line":109,"column":null}},"58":{"start":{"line":110,"column":8},"end":{"line":110,"column":null}},"59":{"start":{"line":114,"column":22},"end":{"line":131,"column":null}},"60":{"start":{"line":115,"column":4},"end":{"line":115,"column":null}},"61":{"start":{"line":116,"column":4},"end":{"line":130,"column":null}},"62":{"start":{"line":120,"column":8},"end":{"line":120,"column":null}},"63":{"start":{"line":120,"column":21},"end":{"line":120,"column":null}},"64":{"start":{"line":121,"column":8},"end":{"line":121,"column":null}},"65":{"start":{"line":124,"column":8},"end":{"line":124,"column":null}},"66":{"start":{"line":125,"column":8},"end":{"line":125,"column":null}},"67":{"start":{"line":128,"column":8},"end":{"line":128,"column":null}},"68":{"start":{"line":129,"column":8},"end":{"line":129,"column":null}},"69":{"start":{"line":133,"column":2},"end":{"line":234,"column":null}},"70":{"start":{"line":145,"column":31},"end":{"line":145,"column":null}},"71":{"start":{"line":163,"column":29},"end":{"line":163,"column":null}},"72":{"start":{"line":183,"column":31},"end":{"line":183,"column":null}},"73":{"start":{"line":217,"column":12},"end":{"line":230,"column":null}},"74":{"start":{"line":223,"column":31},"end":{"line":223,"column":null}}},"fnMap":{"0":{"name":"Settings","decl":{"start":{"line":11,"column":24},"end":{"line":11,"column":33}},"loc":{"start":{"line":11,"column":77},"end":{"line":236,"column":null}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":21,"column":39},"end":{"line":21,"column":45}},"loc":{"start":{"line":21,"column":45},"end":{"line":36,"column":5}},"line":21},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":12},"end":{"line":24,"column":13}},"loc":{"start":{"line":24,"column":21},"end":{"line":27,"column":7}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":28,"column":12},"end":{"line":28,"column":13}},"loc":{"start":{"line":28,"column":22},"end":{"line":31,"column":7}},"line":28},"4":{"name":"(anonymous_4)","decl":{"start":{"line":32,"column":13},"end":{"line":32,"column":14}},"loc":{"start":{"line":32,"column":22},"end":{"line":35,"column":7}},"line":32},"5":{"name":"(anonymous_5)","decl":{"start":{"line":38,"column":12},"end":{"line":38,"column":18}},"loc":{"start":{"line":38,"column":18},"end":{"line":41,"column":5}},"line":38},"6":{"name":"(anonymous_6)","decl":{"start":{"line":44,"column":24},"end":{"line":44,"column":25}},"loc":{"start":{"line":44,"column":48},"end":{"line":66,"column":null}},"line":44},"7":{"name":"(anonymous_7)","decl":{"start":{"line":54,"column":12},"end":{"line":54,"column":13}},"loc":{"start":{"line":54,"column":21},"end":{"line":57,"column":7}},"line":54},"8":{"name":"(anonymous_8)","decl":{"start":{"line":58,"column":12},"end":{"line":58,"column":18}},"loc":{"start":{"line":58,"column":18},"end":{"line":61,"column":7}},"line":58},"9":{"name":"(anonymous_9)","decl":{"start":{"line":62,"column":13},"end":{"line":62,"column":14}},"loc":{"start":{"line":62,"column":22},"end":{"line":65,"column":7}},"line":62},"10":{"name":"(anonymous_10)","decl":{"start":{"line":68,"column":27},"end":{"line":68,"column":28}},"loc":{"start":{"line":68,"column":43},"end":{"line":84,"column":null}},"line":68},"11":{"name":"(anonymous_11)","decl":{"start":{"line":75,"column":12},"end":{"line":75,"column":13}},"loc":{"start":{"line":75,"column":21},"end":{"line":79,"column":7}},"line":75},"12":{"name":"(anonymous_12)","decl":{"start":{"line":77,"column":30},"end":{"line":77,"column":31}},"loc":{"start":{"line":77,"column":37},"end":{"line":77,"column":49}},"line":77},"13":{"name":"(anonymous_13)","decl":{"start":{"line":80,"column":13},"end":{"line":80,"column":14}},"loc":{"start":{"line":80,"column":22},"end":{"line":83,"column":7}},"line":80},"14":{"name":"(anonymous_14)","decl":{"start":{"line":86,"column":23},"end":{"line":86,"column":24}},"loc":{"start":{"line":86,"column":47},"end":{"line":112,"column":null}},"line":86},"15":{"name":"(anonymous_15)","decl":{"start":{"line":99,"column":12},"end":{"line":99,"column":13}},"loc":{"start":{"line":99,"column":21},"end":{"line":102,"column":7}},"line":99},"16":{"name":"(anonymous_16)","decl":{"start":{"line":103,"column":12},"end":{"line":103,"column":18}},"loc":{"start":{"line":103,"column":18},"end":{"line":107,"column":7}},"line":103},"17":{"name":"(anonymous_17)","decl":{"start":{"line":108,"column":13},"end":{"line":108,"column":14}},"loc":{"start":{"line":108,"column":22},"end":{"line":111,"column":7}},"line":108},"18":{"name":"(anonymous_18)","decl":{"start":{"line":114,"column":22},"end":{"line":114,"column":28}},"loc":{"start":{"line":114,"column":28},"end":{"line":131,"column":null}},"line":114},"19":{"name":"(anonymous_19)","decl":{"start":{"line":119,"column":12},"end":{"line":119,"column":13}},"loc":{"start":{"line":119,"column":21},"end":{"line":122,"column":7}},"line":119},"20":{"name":"(anonymous_20)","decl":{"start":{"line":123,"column":12},"end":{"line":123,"column":18}},"loc":{"start":{"line":123,"column":18},"end":{"line":126,"column":7}},"line":123},"21":{"name":"(anonymous_21)","decl":{"start":{"line":127,"column":13},"end":{"line":127,"column":14}},"loc":{"start":{"line":127,"column":22},"end":{"line":130,"column":7}},"line":127},"22":{"name":"(anonymous_22)","decl":{"start":{"line":145,"column":24},"end":{"line":145,"column":25}},"loc":{"start":{"line":145,"column":31},"end":{"line":145,"column":null}},"line":145},"23":{"name":"(anonymous_23)","decl":{"start":{"line":163,"column":22},"end":{"line":163,"column":23}},"loc":{"start":{"line":163,"column":29},"end":{"line":163,"column":null}},"line":163},"24":{"name":"(anonymous_24)","decl":{"start":{"line":183,"column":24},"end":{"line":183,"column":25}},"loc":{"start":{"line":183,"column":31},"end":{"line":183,"column":null}},"line":183},"25":{"name":"(anonymous_25)","decl":{"start":{"line":216,"column":21},"end":{"line":216,"column":22}},"loc":{"start":{"line":217,"column":12},"end":{"line":230,"column":null}},"line":217},"26":{"name":"(anonymous_26)","decl":{"start":{"line":223,"column":25},"end":{"line":223,"column":31}},"loc":{"start":{"line":223,"column":31},"end":{"line":223,"column":null}},"line":223}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":8},"end":{"line":25,"column":null}},"type":"if","locations":[{"start":{"line":25,"column":8},"end":{"line":25,"column":null}},{"start":{},"end":{}}],"line":25},"1":{"loc":{"start":{"line":46,"column":4},"end":{"line":46,"column":null}},"type":"if","locations":[{"start":{"line":46,"column":4},"end":{"line":46,"column":null}},{"start":{},"end":{}}],"line":46},"2":{"loc":{"start":{"line":55,"column":8},"end":{"line":55,"column":null}},"type":"if","locations":[{"start":{"line":55,"column":8},"end":{"line":55,"column":null}},{"start":{},"end":{}}],"line":55},"3":{"loc":{"start":{"line":69,"column":4},"end":{"line":69,"column":null}},"type":"if","locations":[{"start":{"line":69,"column":4},"end":{"line":69,"column":null}},{"start":{},"end":{}}],"line":69},"4":{"loc":{"start":{"line":76,"column":8},"end":{"line":76,"column":null}},"type":"if","locations":[{"start":{"line":76,"column":8},"end":{"line":76,"column":null}},{"start":{},"end":{}}],"line":76},"5":{"loc":{"start":{"line":88,"column":4},"end":{"line":88,"column":null}},"type":"if","locations":[{"start":{"line":88,"column":4},"end":{"line":88,"column":null}},{"start":{},"end":{}}],"line":88},"6":{"loc":{"start":{"line":100,"column":8},"end":{"line":100,"column":null}},"type":"if","locations":[{"start":{"line":100,"column":8},"end":{"line":100,"column":null}},{"start":{},"end":{}}],"line":100},"7":{"loc":{"start":{"line":120,"column":8},"end":{"line":120,"column":null}},"type":"if","locations":[{"start":{"line":120,"column":8},"end":{"line":120,"column":null}},{"start":{},"end":{}}],"line":120},"8":{"loc":{"start":{"line":137,"column":7},"end":{"line":154,"column":null}},"type":"binary-expr","locations":[{"start":{"line":137,"column":7},"end":{"line":137,"column":null}},{"start":{"line":138,"column":8},"end":{"line":154,"column":null}}],"line":137},"9":{"loc":{"start":{"line":144,"column":21},"end":{"line":144,"column":null}},"type":"binary-expr","locations":[{"start":{"line":144,"column":21},"end":{"line":144,"column":34}},{"start":{"line":144,"column":34},"end":{"line":144,"column":null}}],"line":144},"10":{"loc":{"start":{"line":183,"column":45},"end":{"line":183,"column":72}},"type":"binary-expr","locations":[{"start":{"line":183,"column":45},"end":{"line":183,"column":68}},{"start":{"line":183,"column":68},"end":{"line":183,"column":72}}],"line":183},"11":{"loc":{"start":{"line":187,"column":44},"end":{"line":187,"column":68}},"type":"binary-expr","locations":[{"start":{"line":187,"column":44},"end":{"line":187,"column":59}},{"start":{"line":187,"column":59},"end":{"line":187,"column":68}}],"line":187},"12":{"loc":{"start":{"line":210,"column":7},"end":{"line":210,"column":null}},"type":"binary-expr","locations":[{"start":{"line":210,"column":7},"end":{"line":210,"column":16}},{"start":{"line":210,"column":16},"end":{"line":210,"column":null}}],"line":210},"13":{"loc":{"start":{"line":214,"column":9},"end":{"line":214,"column":null}},"type":"binary-expr","locations":[{"start":{"line":214,"column":9},"end":{"line":214,"column":20}},{"start":{"line":214,"column":20},"end":{"line":214,"column":null}}],"line":214},"14":{"loc":{"start":{"line":219,"column":46},"end":{"line":219,"column":73}},"type":"binary-expr","locations":[{"start":{"line":219,"column":46},"end":{"line":219,"column":60}},{"start":{"line":219,"column":60},"end":{"line":219,"column":73}}],"line":219}},"s":{"0":34,"1":34,"2":34,"3":34,"4":34,"5":34,"6":9,"7":9,"8":9,"9":0,"10":9,"11":9,"12":9,"13":0,"14":0,"15":34,"16":7,"17":34,"18":2,"19":2,"20":0,"21":2,"22":2,"23":2,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":34,"31":1,"32":0,"33":1,"34":1,"35":1,"36":0,"37":1,"38":1,"39":1,"40":0,"41":0,"42":34,"43":1,"44":1,"45":0,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":0,"53":1,"54":1,"55":1,"56":1,"57":0,"58":0,"59":34,"60":1,"61":1,"62":1,"63":0,"64":1,"65":1,"66":1,"67":0,"68":0,"69":34,"70":1,"71":2,"72":1,"73":6,"74":1},"f":{"0":34,"1":9,"2":9,"3":9,"4":0,"5":7,"6":2,"7":2,"8":1,"9":1,"10":1,"11":1,"12":1,"13":0,"14":1,"15":1,"16":1,"17":0,"18":1,"19":1,"20":1,"21":0,"22":1,"23":2,"24":1,"25":6,"26":1},"b":{"0":[0,9],"1":[0,2],"2":[1,1],"3":[0,1],"4":[0,1],"5":[0,1],"6":[0,1],"7":[0,1],"8":[34,3],"9":[3,0],"10":[1,0],"11":[34,3],"12":[34,1],"13":[34,13],"14":[6,0]},"meta":{"lastBranch":15,"lastFunction":27,"lastStatement":75,"seen":{"f:11:24:11:33":0,"s:12:24:12:Infinity":0,"s:14:34:14:Infinity":1,"s:15:28:15:Infinity":2,"s:16:24:16:Infinity":3,"s:18:34:18:Infinity":4,"s:21:21:36:Infinity":5,"f:21:39:21:45":1,"s:22:4:22:Infinity":6,"s:23:4:35:Infinity":7,"f:24:12:24:13":2,"b:25:8:25:Infinity:undefined:undefined:undefined:undefined":0,"s:25:8:25:Infinity":8,"s:25:21:25:Infinity":9,"s:26:8:26:Infinity":10,"f:28:12:28:13":3,"s:29:8:29:Infinity":11,"s:30:8:30:Infinity":12,"f:32:13:32:14":4,"s:33:8:33:Infinity":13,"s:34:8:34:Infinity":14,"s:38:2:41:Infinity":15,"f:38:12:38:18":5,"s:40:4:40:Infinity":16,"s:44:24:66:Infinity":17,"f:44:24:44:25":6,"s:45:4:45:Infinity":18,"b:46:4:46:Infinity:undefined:undefined:undefined:undefined":1,"s:46:4:46:Infinity":19,"s:46:21:46:Infinity":20,"s:48:4:48:Infinity":21,"s:49:4:65:Infinity":22,"f:54:12:54:13":7,"b:55:8:55:Infinity:undefined:undefined:undefined:undefined":2,"s:55:8:55:Infinity":23,"s:55:21:55:Infinity":24,"s:56:8:56:Infinity":25,"f:58:12:58:18":8,"s:59:8:59:Infinity":26,"s:60:8:60:Infinity":27,"f:62:13:62:14":9,"s:63:8:63:Infinity":28,"s:64:8:64:Infinity":29,"s:68:27:84:Infinity":30,"f:68:27:68:28":10,"b:69:4:69:Infinity:undefined:undefined:undefined:undefined":3,"s:69:4:69:Infinity":31,"s:69:75:69:Infinity":32,"s:71:4:71:Infinity":33,"s:72:4:83:Infinity":34,"f:75:12:75:13":11,"b:76:8:76:Infinity:undefined:undefined:undefined:undefined":4,"s:76:8:76:Infinity":35,"s:76:21:76:Infinity":36,"s:77:8:77:Infinity":37,"f:77:30:77:31":12,"s:77:37:77:49":38,"s:78:8:78:Infinity":39,"f:80:13:80:14":13,"s:81:8:81:Infinity":40,"s:82:8:82:Infinity":41,"s:86:23:112:Infinity":42,"f:86:23:86:24":14,"s:87:4:87:Infinity":43,"b:88:4:88:Infinity:undefined:undefined:undefined:undefined":5,"s:88:4:88:Infinity":44,"s:88:21:88:Infinity":45,"s:90:4:90:Infinity":46,"s:91:21:91:Infinity":47,"s:92:4:92:Infinity":48,"s:93:4:93:Infinity":49,"s:95:4:111:Infinity":50,"f:99:12:99:13":15,"b:100:8:100:Infinity:undefined:undefined:undefined:undefined":6,"s:100:8:100:Infinity":51,"s:100:21:100:Infinity":52,"s:101:8:101:Infinity":53,"f:103:12:103:18":16,"s:104:8:104:Infinity":54,"s:105:8:105:Infinity":55,"s:106:8:106:Infinity":56,"f:108:13:108:14":17,"s:109:8:109:Infinity":57,"s:110:8:110:Infinity":58,"s:114:22:131:Infinity":59,"f:114:22:114:28":18,"s:115:4:115:Infinity":60,"s:116:4:130:Infinity":61,"f:119:12:119:13":19,"b:120:8:120:Infinity:undefined:undefined:undefined:undefined":7,"s:120:8:120:Infinity":62,"s:120:21:120:Infinity":63,"s:121:8:121:Infinity":64,"f:123:12:123:18":20,"s:124:8:124:Infinity":65,"s:125:8:125:Infinity":66,"f:127:13:127:14":21,"s:128:8:128:Infinity":67,"s:129:8:129:Infinity":68,"s:133:2:234:Infinity":69,"b:137:7:137:Infinity:138:8:154:Infinity":8,"b:144:21:144:34:144:34:144:Infinity":9,"f:145:24:145:25":22,"s:145:31:145:Infinity":70,"f:163:22:163:23":23,"s:163:29:163:Infinity":71,"f:183:24:183:25":24,"s:183:31:183:Infinity":72,"b:183:45:183:68:183:68:183:72":10,"b:187:44:187:59:187:59:187:68":11,"b:210:7:210:16:210:16:210:Infinity":12,"b:214:9:214:20:214:20:214:Infinity":13,"f:216:21:216:22":25,"s:217:12:230:Infinity":73,"b:219:46:219:60:219:60:219:73":14,"f:223:25:223:31":26,"s:223:31:223:Infinity":74}}} -} diff --git a/frontend/coverage/favicon.png b/frontend/coverage/favicon.png Binary files differdeleted file mode 100644 index c1525b8..0000000 --- a/frontend/coverage/favicon.png +++ /dev/null diff --git a/frontend/coverage/index.html b/frontend/coverage/index.html deleted file mode 100644 index 3c8ce1b..0000000 --- a/frontend/coverage/index.html +++ /dev/null @@ -1,131 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for All files</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="prettify.css" /> - <link rel="stylesheet" href="base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1>All files</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">84.12% </span> - <span class="quiet">Statements</span> - <span class='fraction'>302/359</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">73.24% </span> - <span class="quiet">Branches</span> - <span class='fraction'>167/228</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">81.48% </span> - <span class="quiet">Functions</span> - <span class='fraction'>88/108</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">86.4% </span> - <span class="quiet">Lines</span> - <span class='fraction'>286/331</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line high'></div> - <div class="pad1"> -<table class="coverage-summary"> -<thead> -<tr> - <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> - <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> - <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> - <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> - <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> - <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> - <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> - <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> - <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> - <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> -</tr> -</thead> -<tbody><tr> - <td class="file medium" data-value="src"><a href="src/index.html">src</a></td> - <td data-value="70.21" class="pic medium"> - <div class="chart"><div class="cover-fill" style="width: 70%"></div><div class="cover-empty" style="width: 30%"></div></div> - </td> - <td data-value="70.21" class="pct medium">70.21%</td> - <td data-value="47" class="abs medium">33/47</td> - <td data-value="65.71" class="pct medium">65.71%</td> - <td data-value="35" class="abs medium">23/35</td> - <td data-value="60" class="pct medium">60%</td> - <td data-value="15" class="abs medium">9/15</td> - <td data-value="71.11" class="pct medium">71.11%</td> - <td data-value="45" class="abs medium">32/45</td> - </tr> - -<tr> - <td class="file high" data-value="src/components"><a href="src/components/index.html">src/components</a></td> - <td data-value="86.21" class="pic high"> - <div class="chart"><div class="cover-fill" style="width: 86%"></div><div class="cover-empty" style="width: 14%"></div></div> - </td> - <td data-value="86.21" class="pct high">86.21%</td> - <td data-value="312" class="abs high">269/312</td> - <td data-value="74.61" class="pct medium">74.61%</td> - <td data-value="193" class="abs medium">144/193</td> - <td data-value="84.94" class="pct high">84.94%</td> - <td data-value="93" class="abs high">79/93</td> - <td data-value="88.81" class="pct high">88.81%</td> - <td data-value="286" class="abs high">254/286</td> - </tr> - -</tbody> -</table> -</div> - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="sorter.js"></script> - <script src="block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file diff --git a/frontend/coverage/prettify.css b/frontend/coverage/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/frontend/coverage/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/frontend/coverage/prettify.js b/frontend/coverage/prettify.js deleted file mode 100644 index b322523..0000000 --- a/frontend/coverage/prettify.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-disable */ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/frontend/coverage/sort-arrow-sprite.png b/frontend/coverage/sort-arrow-sprite.png Binary files differdeleted file mode 100644 index 6ed6831..0000000 --- a/frontend/coverage/sort-arrow-sprite.png +++ /dev/null diff --git a/frontend/coverage/sorter.js b/frontend/coverage/sorter.js deleted file mode 100644 index 4ed70ae..0000000 --- a/frontend/coverage/sorter.js +++ /dev/null @@ -1,210 +0,0 @@ -/* eslint-disable */ -var addSorting = (function() { - 'use strict'; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { - return document.querySelector('.coverage-summary'); - } - // returns the thead element of the summary table - function getTableHeader() { - return getTable().querySelector('thead tr'); - } - // returns the tbody element of the summary table - function getTableBody() { - return getTable().querySelector('tbody'); - } - // returns the th element for nth column - function getNthColumn(n) { - return getTableHeader().querySelectorAll('th')[n]; - } - - function onFilterInput() { - const searchValue = document.getElementById('fileSearch').value; - const rows = document.getElementsByTagName('tbody')[0].children; - - // Try to create a RegExp from the searchValue. If it fails (invalid regex), - // it will be treated as a plain text search - let searchRegex; - try { - searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive - } catch (error) { - searchRegex = null; - } - - for (let i = 0; i < rows.length; i++) { - const row = rows[i]; - let isMatch = false; - - if (searchRegex) { - // If a valid regex was created, use it for matching - isMatch = searchRegex.test(row.textContent); - } else { - // Otherwise, fall back to the original plain text search - isMatch = row.textContent - .toLowerCase() - .includes(searchValue.toLowerCase()); - } - - row.style.display = isMatch ? '' : 'none'; - } - } - - // loads the search box - function addSearchBox() { - var template = document.getElementById('filterTemplate'); - var templateClone = template.content.cloneNode(true); - templateClone.getElementById('fileSearch').oninput = onFilterInput; - template.parentElement.appendChild(templateClone); - } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = - colNode.innerHTML + '<span class="sorter"></span>'; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function(a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function(a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc - ? ' sorted-desc' - : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function() { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i = 0; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function() { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(); - addSearchBox(); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/frontend/coverage/src/App.css.html b/frontend/coverage/src/App.css.html deleted file mode 100644 index d23e87b..0000000 --- a/frontend/coverage/src/App.css.html +++ /dev/null @@ -1,478 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for src/App.css</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="../prettify.css" /> - <link rel="stylesheet" href="../base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(../sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> App.css</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Statements</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Branches</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Functions</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Lines</span> - <span class='fraction'>0/0</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line low'></div> - <pre><table class="coverage"> -<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> -<a name='L2'></a><a href='#L2'>2</a> -<a name='L3'></a><a href='#L3'>3</a> -<a name='L4'></a><a href='#L4'>4</a> -<a name='L5'></a><a href='#L5'>5</a> -<a name='L6'></a><a href='#L6'>6</a> -<a name='L7'></a><a href='#L7'>7</a> -<a name='L8'></a><a href='#L8'>8</a> -<a name='L9'></a><a href='#L9'>9</a> -<a name='L10'></a><a href='#L10'>10</a> -<a name='L11'></a><a href='#L11'>11</a> -<a name='L12'></a><a href='#L12'>12</a> -<a name='L13'></a><a href='#L13'>13</a> -<a name='L14'></a><a href='#L14'>14</a> -<a name='L15'></a><a href='#L15'>15</a> -<a name='L16'></a><a href='#L16'>16</a> -<a name='L17'></a><a href='#L17'>17</a> -<a name='L18'></a><a href='#L18'>18</a> -<a name='L19'></a><a href='#L19'>19</a> -<a name='L20'></a><a href='#L20'>20</a> -<a name='L21'></a><a href='#L21'>21</a> -<a name='L22'></a><a href='#L22'>22</a> -<a name='L23'></a><a href='#L23'>23</a> -<a name='L24'></a><a href='#L24'>24</a> -<a name='L25'></a><a href='#L25'>25</a> -<a name='L26'></a><a href='#L26'>26</a> -<a name='L27'></a><a href='#L27'>27</a> -<a name='L28'></a><a href='#L28'>28</a> -<a name='L29'></a><a href='#L29'>29</a> -<a name='L30'></a><a href='#L30'>30</a> -<a name='L31'></a><a href='#L31'>31</a> -<a name='L32'></a><a href='#L32'>32</a> -<a name='L33'></a><a href='#L33'>33</a> -<a name='L34'></a><a href='#L34'>34</a> -<a name='L35'></a><a href='#L35'>35</a> -<a name='L36'></a><a href='#L36'>36</a> -<a name='L37'></a><a href='#L37'>37</a> -<a name='L38'></a><a href='#L38'>38</a> -<a name='L39'></a><a href='#L39'>39</a> -<a name='L40'></a><a href='#L40'>40</a> -<a name='L41'></a><a href='#L41'>41</a> -<a name='L42'></a><a href='#L42'>42</a> -<a name='L43'></a><a href='#L43'>43</a> -<a name='L44'></a><a href='#L44'>44</a> -<a name='L45'></a><a href='#L45'>45</a> -<a name='L46'></a><a href='#L46'>46</a> -<a name='L47'></a><a href='#L47'>47</a> -<a name='L48'></a><a href='#L48'>48</a> -<a name='L49'></a><a href='#L49'>49</a> -<a name='L50'></a><a href='#L50'>50</a> -<a name='L51'></a><a href='#L51'>51</a> -<a name='L52'></a><a href='#L52'>52</a> -<a name='L53'></a><a href='#L53'>53</a> -<a name='L54'></a><a href='#L54'>54</a> -<a name='L55'></a><a href='#L55'>55</a> -<a name='L56'></a><a href='#L56'>56</a> -<a name='L57'></a><a href='#L57'>57</a> -<a name='L58'></a><a href='#L58'>58</a> -<a name='L59'></a><a href='#L59'>59</a> -<a name='L60'></a><a href='#L60'>60</a> -<a name='L61'></a><a href='#L61'>61</a> -<a name='L62'></a><a href='#L62'>62</a> -<a name='L63'></a><a href='#L63'>63</a> -<a name='L64'></a><a href='#L64'>64</a> -<a name='L65'></a><a href='#L65'>65</a> -<a name='L66'></a><a href='#L66'>66</a> -<a name='L67'></a><a href='#L67'>67</a> -<a name='L68'></a><a href='#L68'>68</a> -<a name='L69'></a><a href='#L69'>69</a> -<a name='L70'></a><a href='#L70'>70</a> -<a name='L71'></a><a href='#L71'>71</a> -<a name='L72'></a><a href='#L72'>72</a> -<a name='L73'></a><a href='#L73'>73</a> -<a name='L74'></a><a href='#L74'>74</a> -<a name='L75'></a><a href='#L75'>75</a> -<a name='L76'></a><a href='#L76'>76</a> -<a name='L77'></a><a href='#L77'>77</a> -<a name='L78'></a><a href='#L78'>78</a> -<a name='L79'></a><a href='#L79'>79</a> -<a name='L80'></a><a href='#L80'>80</a> -<a name='L81'></a><a href='#L81'>81</a> -<a name='L82'></a><a href='#L82'>82</a> -<a name='L83'></a><a href='#L83'>83</a> -<a name='L84'></a><a href='#L84'>84</a> -<a name='L85'></a><a href='#L85'>85</a> -<a name='L86'></a><a href='#L86'>86</a> -<a name='L87'></a><a href='#L87'>87</a> -<a name='L88'></a><a href='#L88'>88</a> -<a name='L89'></a><a href='#L89'>89</a> -<a name='L90'></a><a href='#L90'>90</a> -<a name='L91'></a><a href='#L91'>91</a> -<a name='L92'></a><a href='#L92'>92</a> -<a name='L93'></a><a href='#L93'>93</a> -<a name='L94'></a><a href='#L94'>94</a> -<a name='L95'></a><a href='#L95'>95</a> -<a name='L96'></a><a href='#L96'>96</a> -<a name='L97'></a><a href='#L97'>97</a> -<a name='L98'></a><a href='#L98'>98</a> -<a name='L99'></a><a href='#L99'>99</a> -<a name='L100'></a><a href='#L100'>100</a> -<a name='L101'></a><a href='#L101'>101</a> -<a name='L102'></a><a href='#L102'>102</a> -<a name='L103'></a><a href='#L103'>103</a> -<a name='L104'></a><a href='#L104'>104</a> -<a name='L105'></a><a href='#L105'>105</a> -<a name='L106'></a><a href='#L106'>106</a> -<a name='L107'></a><a href='#L107'>107</a> -<a name='L108'></a><a href='#L108'>108</a> -<a name='L109'></a><a href='#L109'>109</a> -<a name='L110'></a><a href='#L110'>110</a> -<a name='L111'></a><a href='#L111'>111</a> -<a name='L112'></a><a href='#L112'>112</a> -<a name='L113'></a><a href='#L113'>113</a> -<a name='L114'></a><a href='#L114'>114</a> -<a name='L115'></a><a href='#L115'>115</a> -<a name='L116'></a><a href='#L116'>116</a> -<a name='L117'></a><a href='#L117'>117</a> -<a name='L118'></a><a href='#L118'>118</a> -<a name='L119'></a><a href='#L119'>119</a> -<a name='L120'></a><a href='#L120'>120</a> -<a name='L121'></a><a href='#L121'>121</a> -<a name='L122'></a><a href='#L122'>122</a> -<a name='L123'></a><a href='#L123'>123</a> -<a name='L124'></a><a href='#L124'>124</a> -<a name='L125'></a><a href='#L125'>125</a> -<a name='L126'></a><a href='#L126'>126</a> -<a name='L127'></a><a href='#L127'>127</a> -<a name='L128'></a><a href='#L128'>128</a> -<a name='L129'></a><a href='#L129'>129</a> -<a name='L130'></a><a href='#L130'>130</a> -<a name='L131'></a><a href='#L131'>131</a> -<a name='L132'></a><a href='#L132'>132</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/* Resets and Base Styles */ -* { - box-sizing: border-box; -} - -body { - margin: 0; -} - -/* Dashboard Layout */ -.dashboard { - display: flex; - flex-direction: column; - height: 100vh; - overflow: hidden; - /* Prevent body scroll */ -} - -/* Header styles removed as we moved to sidebar navigation */ - -.dashboard-content { - display: flex; - flex: 1; - overflow: hidden; - position: relative; -} - -.dashboard-sidebar { - width: 11rem; - background: transparent; - border-right: 1px solid var(--border-color); - display: flex; - flex-direction: column; - overflow-y: auto; - transition: margin-left 0.4s ease; - /* No padding here, handled in FeedList */ -} - -.dashboard-sidebar.hidden { - margin-left: -11rem; -} - -.dashboard-main { - flex: 1; - padding: 2rem; - overflow-y: auto; - background: var(--bg-color); - margin-left: 0; -} - -.dashboard-main>* { - max-width: 35em; - margin: 0 auto; -} - -.fixed-toggle { - position: absolute; - top: 1rem; - left: 1rem; - z-index: 1000; - background: var(--bg-color); - /* Added bg to be visible over content if needed */ - border: none; - font-size: 2rem; - line-height: 1; - cursor: pointer; - padding: 0.2rem; - color: var(--text-color); - border-radius: 50%; - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); - display: flex; - align-items: center; - justify-content: center; -} - -.fixed-toggle:hover { - transform: scale(1.1); -} - -/* Mobile Responsiveness */ -@media (max-width: 768px) { - .dashboard-sidebar { - position: fixed; - top: 0; - left: 0; - bottom: 0; - z-index: 1100; - box-shadow: 2px 0 10px rgba(0, 0, 0, 0.2); - width: 14rem; - /* Slightly wider on mobile for better target area */ - } - - .dashboard-sidebar.hidden { - margin-left: -14rem; - } - - .dashboard-main { - padding: 1rem; - padding-top: 4rem; - /* Space for the toggle button */ - } - - .dashboard-main>* { - max-width: 100%; - } - - /* When sidebar is visible on mobile, we show a backdrop */ - .sidebar-backdrop { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(0, 0, 0, 0.4); - z-index: 1050; - animation: fadeIn 0.3s ease; - } - - .dashboard.sidebar-visible::after { - display: none; - } -} - -@keyframes fadeIn { - from { - opacity: 0; - } - - to { - opacity: 1; - } -}</pre></td></tr></table></pre> - - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="../prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="../sorter.js"></script> - <script src="../block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file diff --git a/frontend/coverage/src/App.tsx.html b/frontend/coverage/src/App.tsx.html deleted file mode 100644 index 6ec66af..0000000 --- a/frontend/coverage/src/App.tsx.html +++ /dev/null @@ -1,505 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for src/App.tsx</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="../prettify.css" /> - <link rel="stylesheet" href="../base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(../sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> App.tsx</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">65.71% </span> - <span class="quiet">Statements</span> - <span class='fraction'>23/35</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">60% </span> - <span class="quiet">Branches</span> - <span class='fraction'>15/25</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">53.84% </span> - <span class="quiet">Functions</span> - <span class='fraction'>7/13</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">64.7% </span> - <span class="quiet">Lines</span> - <span class='fraction'>22/34</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line medium'></div> - <pre><table class="coverage"> -<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> -<a name='L2'></a><a href='#L2'>2</a> -<a name='L3'></a><a href='#L3'>3</a> -<a name='L4'></a><a href='#L4'>4</a> -<a name='L5'></a><a href='#L5'>5</a> -<a name='L6'></a><a href='#L6'>6</a> -<a name='L7'></a><a href='#L7'>7</a> -<a name='L8'></a><a href='#L8'>8</a> -<a name='L9'></a><a href='#L9'>9</a> -<a name='L10'></a><a href='#L10'>10</a> -<a name='L11'></a><a href='#L11'>11</a> -<a name='L12'></a><a href='#L12'>12</a> -<a name='L13'></a><a href='#L13'>13</a> -<a name='L14'></a><a href='#L14'>14</a> -<a name='L15'></a><a href='#L15'>15</a> -<a name='L16'></a><a href='#L16'>16</a> -<a name='L17'></a><a href='#L17'>17</a> -<a name='L18'></a><a href='#L18'>18</a> -<a name='L19'></a><a href='#L19'>19</a> -<a name='L20'></a><a href='#L20'>20</a> -<a name='L21'></a><a href='#L21'>21</a> -<a name='L22'></a><a href='#L22'>22</a> -<a name='L23'></a><a href='#L23'>23</a> -<a name='L24'></a><a href='#L24'>24</a> -<a name='L25'></a><a href='#L25'>25</a> -<a name='L26'></a><a href='#L26'>26</a> -<a name='L27'></a><a href='#L27'>27</a> -<a name='L28'></a><a href='#L28'>28</a> -<a name='L29'></a><a href='#L29'>29</a> -<a name='L30'></a><a href='#L30'>30</a> -<a name='L31'></a><a href='#L31'>31</a> -<a name='L32'></a><a href='#L32'>32</a> -<a name='L33'></a><a href='#L33'>33</a> -<a name='L34'></a><a href='#L34'>34</a> -<a name='L35'></a><a href='#L35'>35</a> -<a name='L36'></a><a href='#L36'>36</a> -<a name='L37'></a><a href='#L37'>37</a> -<a name='L38'></a><a href='#L38'>38</a> -<a name='L39'></a><a href='#L39'>39</a> -<a name='L40'></a><a href='#L40'>40</a> -<a name='L41'></a><a href='#L41'>41</a> -<a name='L42'></a><a href='#L42'>42</a> -<a name='L43'></a><a href='#L43'>43</a> -<a name='L44'></a><a href='#L44'>44</a> -<a name='L45'></a><a href='#L45'>45</a> -<a name='L46'></a><a href='#L46'>46</a> -<a name='L47'></a><a href='#L47'>47</a> -<a name='L48'></a><a href='#L48'>48</a> -<a name='L49'></a><a href='#L49'>49</a> -<a name='L50'></a><a href='#L50'>50</a> -<a name='L51'></a><a href='#L51'>51</a> -<a name='L52'></a><a href='#L52'>52</a> -<a name='L53'></a><a href='#L53'>53</a> -<a name='L54'></a><a href='#L54'>54</a> -<a name='L55'></a><a href='#L55'>55</a> -<a name='L56'></a><a href='#L56'>56</a> -<a name='L57'></a><a href='#L57'>57</a> -<a name='L58'></a><a href='#L58'>58</a> -<a name='L59'></a><a href='#L59'>59</a> -<a name='L60'></a><a href='#L60'>60</a> -<a name='L61'></a><a href='#L61'>61</a> -<a name='L62'></a><a href='#L62'>62</a> -<a name='L63'></a><a href='#L63'>63</a> -<a name='L64'></a><a href='#L64'>64</a> -<a name='L65'></a><a href='#L65'>65</a> -<a name='L66'></a><a href='#L66'>66</a> -<a name='L67'></a><a href='#L67'>67</a> -<a name='L68'></a><a href='#L68'>68</a> -<a name='L69'></a><a href='#L69'>69</a> -<a name='L70'></a><a href='#L70'>70</a> -<a name='L71'></a><a href='#L71'>71</a> -<a name='L72'></a><a href='#L72'>72</a> -<a name='L73'></a><a href='#L73'>73</a> -<a name='L74'></a><a href='#L74'>74</a> -<a name='L75'></a><a href='#L75'>75</a> -<a name='L76'></a><a href='#L76'>76</a> -<a name='L77'></a><a href='#L77'>77</a> -<a name='L78'></a><a href='#L78'>78</a> -<a name='L79'></a><a href='#L79'>79</a> -<a name='L80'></a><a href='#L80'>80</a> -<a name='L81'></a><a href='#L81'>81</a> -<a name='L82'></a><a href='#L82'>82</a> -<a name='L83'></a><a href='#L83'>83</a> -<a name='L84'></a><a href='#L84'>84</a> -<a name='L85'></a><a href='#L85'>85</a> -<a name='L86'></a><a href='#L86'>86</a> -<a name='L87'></a><a href='#L87'>87</a> -<a name='L88'></a><a href='#L88'>88</a> -<a name='L89'></a><a href='#L89'>89</a> -<a name='L90'></a><a href='#L90'>90</a> -<a name='L91'></a><a href='#L91'>91</a> -<a name='L92'></a><a href='#L92'>92</a> -<a name='L93'></a><a href='#L93'>93</a> -<a name='L94'></a><a href='#L94'>94</a> -<a name='L95'></a><a href='#L95'>95</a> -<a name='L96'></a><a href='#L96'>96</a> -<a name='L97'></a><a href='#L97'>97</a> -<a name='L98'></a><a href='#L98'>98</a> -<a name='L99'></a><a href='#L99'>99</a> -<a name='L100'></a><a href='#L100'>100</a> -<a name='L101'></a><a href='#L101'>101</a> -<a name='L102'></a><a href='#L102'>102</a> -<a name='L103'></a><a href='#L103'>103</a> -<a name='L104'></a><a href='#L104'>104</a> -<a name='L105'></a><a href='#L105'>105</a> -<a name='L106'></a><a href='#L106'>106</a> -<a name='L107'></a><a href='#L107'>107</a> -<a name='L108'></a><a href='#L108'>108</a> -<a name='L109'></a><a href='#L109'>109</a> -<a name='L110'></a><a href='#L110'>110</a> -<a name='L111'></a><a href='#L111'>111</a> -<a name='L112'></a><a href='#L112'>112</a> -<a name='L113'></a><a href='#L113'>113</a> -<a name='L114'></a><a href='#L114'>114</a> -<a name='L115'></a><a href='#L115'>115</a> -<a name='L116'></a><a href='#L116'>116</a> -<a name='L117'></a><a href='#L117'>117</a> -<a name='L118'></a><a href='#L118'>118</a> -<a name='L119'></a><a href='#L119'>119</a> -<a name='L120'></a><a href='#L120'>120</a> -<a name='L121'></a><a href='#L121'>121</a> -<a name='L122'></a><a href='#L122'>122</a> -<a name='L123'></a><a href='#L123'>123</a> -<a name='L124'></a><a href='#L124'>124</a> -<a name='L125'></a><a href='#L125'>125</a> -<a name='L126'></a><a href='#L126'>126</a> -<a name='L127'></a><a href='#L127'>127</a> -<a name='L128'></a><a href='#L128'>128</a> -<a name='L129'></a><a href='#L129'>129</a> -<a name='L130'></a><a href='#L130'>130</a> -<a name='L131'></a><a href='#L131'>131</a> -<a name='L132'></a><a href='#L132'>132</a> -<a name='L133'></a><a href='#L133'>133</a> -<a name='L134'></a><a href='#L134'>134</a> -<a name='L135'></a><a href='#L135'>135</a> -<a name='L136'></a><a href='#L136'>136</a> -<a name='L137'></a><a href='#L137'>137</a> -<a name='L138'></a><a href='#L138'>138</a> -<a name='L139'></a><a href='#L139'>139</a> -<a name='L140'></a><a href='#L140'>140</a> -<a name='L141'></a><a href='#L141'>141</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import React, { useEffect, useState } from 'react'; -import { BrowserRouter, Routes, Route, Navigate, useLocation } from 'react-router-dom'; -import Login from './components/Login'; -import './App.css'; -import { apiFetch } from './utils'; - -// Protected Route wrapper -function RequireAuth({ children }: { children: React.ReactElement }) { - const [auth, setAuth] = useState<boolean | null>(null); - const location = useLocation(); - - useEffect(() => { - apiFetch('/api/auth') - .then((res) => { - if (res.ok) { - setAuth(true); - } else <span class="missing-if-branch" title="else path not taken" >E</span>{ -<span class="cstat-no" title="statement not covered" > setAuth(false);</span> - } - }) - .catch(<span class="fstat-no" title="function not covered" >() => <span class="cstat-no" title="statement not covered" >s</span>etAuth(false))</span>; - }, []); - - if (auth === null) { - return <div>Loading...</div>; - } - - <span class="missing-if-branch" title="if path not taken" >I</span>if (!auth) { -<span class="cstat-no" title="statement not covered" > return <Navigate to="/login" state={{ from: location }} replace />;</span> - } - - return children; -} - -import FeedList from './components/FeedList'; -import FeedItems from './components/FeedItems'; -import Settings from './components/Settings'; - -interface DashboardProps { - theme: string; - setTheme: (t: string) => void; - fontTheme: string; - setFontTheme: (t: string) => void; -} - -function Dashboard({ theme, setTheme, fontTheme, setFontTheme }: DashboardProps) { - const [sidebarVisible, setSidebarVisible] = useState(window.innerWidth > 768); - - useEffect(() => { - const handleResize = <span class="fstat-no" title="function not covered" >() => {</span> -<span class="cstat-no" title="statement not covered" > if (window.innerWidth > 768) {</span> -<span class="cstat-no" title="statement not covered" > setSidebarVisible(true);</span> - } else { -<span class="cstat-no" title="statement not covered" > setSidebarVisible(false);</span> - } - }; - window.addEventListener('resize', handleResize); - return () => window.removeEventListener('resize', handleResize); - }, []); - - return ( - <div - className={`dashboard ${sidebarVisible ? 'sidebar-visible' : <span class="branch-1 cbranch-no" title="branch not covered" >'sidebar-hidden'}</span> theme-${theme} font-${fontTheme}`} - > - <div className="dashboard-content"> - {(!sidebarVisible || window.innerWidth <= 768) && ( -<span class="branch-2 cbranch-no" title="branch not covered" > <button</span> - className="sidebar-toggle fixed-toggle" - onClick={<span class="fstat-no" title="function not covered" >() => <span class="cstat-no" title="statement not covered" >s</span>etSidebarVisible(!sidebarVisible)}</span> - title={sidebarVisible ? "Hide Sidebar" : "Show Sidebar"} - > - 🐱 - </button> - )} - {sidebarVisible && ( - <div - className="sidebar-backdrop" - onClick={<span class="fstat-no" title="function not covered" >() => <span class="cstat-no" title="statement not covered" >s</span>etSidebarVisible(false)}</span> - /> - )} - <aside className={`dashboard-sidebar ${sidebarVisible ? '' : <span class="branch-1 cbranch-no" title="branch not covered" >'hidden'}</span>`}> - <FeedList - theme={theme} - setTheme={setTheme} - setSidebarVisible={setSidebarVisible} - isMobile={window.innerWidth <= 768} - /> - </aside> - <main className="dashboard-main"> - <Routes> - <Route path="/feed/:feedId" element={<FeedItems />} /> - <Route path="/tag/:tagName" element={<FeedItems />} /> - <Route path="/settings" element={<Settings fontTheme={fontTheme} setFontTheme={setFontTheme} />} /> - <Route path="/" element={<FeedItems />} /> - </Routes> - </main> - </div> - </div> - ); -} - -function App() { - const [theme, setTheme] = useState(localStorage.getItem('neko-theme') || 'light'); - const [fontTheme, setFontTheme] = useState(localStorage.getItem('neko-font-theme') || 'default'); - - const handleSetTheme = <span class="fstat-no" title="function not covered" >(n</span>ewTheme: string) => { -<span class="cstat-no" title="statement not covered" > setTheme(newTheme);</span> -<span class="cstat-no" title="statement not covered" > localStorage.setItem('neko-theme', newTheme);</span> - }; - - const handleSetFontTheme = <span class="fstat-no" title="function not covered" >(n</span>ewFontTheme: string) => { -<span class="cstat-no" title="statement not covered" > setFontTheme(newFontTheme);</span> -<span class="cstat-no" title="statement not covered" > localStorage.setItem('neko-font-theme', newFontTheme);</span> - }; - - const basename = window.location.pathname.startsWith('/v2') ? '/v2' : <span class="branch-1 cbranch-no" title="branch not covered" >'/';</span> - - return ( - <BrowserRouter basename={basename}> - <Routes> - <Route path="/login" element={<Login />} /> - <Route - path="/*" - element={ - <RequireAuth> - <Dashboard - theme={theme} - setTheme={handleSetTheme} - fontTheme={fontTheme} - setFontTheme={handleSetFontTheme} - /> - </RequireAuth> - } - /> - </Routes> - </BrowserRouter> - ); -} - -export default App; - </pre></td></tr></table></pre> - - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="../prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="../sorter.js"></script> - <script src="../block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file diff --git a/frontend/coverage/src/components/FeedItem.css.html b/frontend/coverage/src/components/FeedItem.css.html deleted file mode 100644 index 192959f..0000000 --- a/frontend/coverage/src/components/FeedItem.css.html +++ /dev/null @@ -1,526 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for src/components/FeedItem.css</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="../../prettify.css" /> - <link rel="stylesheet" href="../../base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(../../sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1><a href="../../index.html">All files</a> / <a href="index.html">src/components</a> FeedItem.css</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Statements</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Branches</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Functions</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Lines</span> - <span class='fraction'>0/0</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line low'></div> - <pre><table class="coverage"> -<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> -<a name='L2'></a><a href='#L2'>2</a> -<a name='L3'></a><a href='#L3'>3</a> -<a name='L4'></a><a href='#L4'>4</a> -<a name='L5'></a><a href='#L5'>5</a> -<a name='L6'></a><a href='#L6'>6</a> -<a name='L7'></a><a href='#L7'>7</a> -<a name='L8'></a><a href='#L8'>8</a> -<a name='L9'></a><a href='#L9'>9</a> -<a name='L10'></a><a href='#L10'>10</a> -<a name='L11'></a><a href='#L11'>11</a> -<a name='L12'></a><a href='#L12'>12</a> -<a name='L13'></a><a href='#L13'>13</a> -<a name='L14'></a><a href='#L14'>14</a> -<a name='L15'></a><a href='#L15'>15</a> -<a name='L16'></a><a href='#L16'>16</a> -<a name='L17'></a><a href='#L17'>17</a> -<a name='L18'></a><a href='#L18'>18</a> -<a name='L19'></a><a href='#L19'>19</a> -<a name='L20'></a><a href='#L20'>20</a> -<a name='L21'></a><a href='#L21'>21</a> -<a name='L22'></a><a href='#L22'>22</a> -<a name='L23'></a><a href='#L23'>23</a> -<a name='L24'></a><a href='#L24'>24</a> -<a name='L25'></a><a href='#L25'>25</a> -<a name='L26'></a><a href='#L26'>26</a> -<a name='L27'></a><a href='#L27'>27</a> -<a name='L28'></a><a href='#L28'>28</a> -<a name='L29'></a><a href='#L29'>29</a> -<a name='L30'></a><a href='#L30'>30</a> -<a name='L31'></a><a href='#L31'>31</a> -<a name='L32'></a><a href='#L32'>32</a> -<a name='L33'></a><a href='#L33'>33</a> -<a name='L34'></a><a href='#L34'>34</a> -<a name='L35'></a><a href='#L35'>35</a> -<a name='L36'></a><a href='#L36'>36</a> -<a name='L37'></a><a href='#L37'>37</a> -<a name='L38'></a><a href='#L38'>38</a> -<a name='L39'></a><a href='#L39'>39</a> -<a name='L40'></a><a href='#L40'>40</a> -<a name='L41'></a><a href='#L41'>41</a> -<a name='L42'></a><a href='#L42'>42</a> -<a name='L43'></a><a href='#L43'>43</a> -<a name='L44'></a><a href='#L44'>44</a> -<a name='L45'></a><a href='#L45'>45</a> -<a name='L46'></a><a href='#L46'>46</a> -<a name='L47'></a><a href='#L47'>47</a> -<a name='L48'></a><a href='#L48'>48</a> -<a name='L49'></a><a href='#L49'>49</a> -<a name='L50'></a><a href='#L50'>50</a> -<a name='L51'></a><a href='#L51'>51</a> -<a name='L52'></a><a href='#L52'>52</a> -<a name='L53'></a><a href='#L53'>53</a> -<a name='L54'></a><a href='#L54'>54</a> -<a name='L55'></a><a href='#L55'>55</a> -<a name='L56'></a><a href='#L56'>56</a> -<a name='L57'></a><a href='#L57'>57</a> -<a name='L58'></a><a href='#L58'>58</a> -<a name='L59'></a><a href='#L59'>59</a> -<a name='L60'></a><a href='#L60'>60</a> -<a name='L61'></a><a href='#L61'>61</a> -<a name='L62'></a><a href='#L62'>62</a> -<a name='L63'></a><a href='#L63'>63</a> -<a name='L64'></a><a href='#L64'>64</a> -<a name='L65'></a><a href='#L65'>65</a> -<a name='L66'></a><a href='#L66'>66</a> -<a name='L67'></a><a href='#L67'>67</a> -<a name='L68'></a><a href='#L68'>68</a> -<a name='L69'></a><a href='#L69'>69</a> -<a name='L70'></a><a href='#L70'>70</a> -<a name='L71'></a><a href='#L71'>71</a> -<a name='L72'></a><a href='#L72'>72</a> -<a name='L73'></a><a href='#L73'>73</a> -<a name='L74'></a><a href='#L74'>74</a> -<a name='L75'></a><a href='#L75'>75</a> -<a name='L76'></a><a href='#L76'>76</a> -<a name='L77'></a><a href='#L77'>77</a> -<a name='L78'></a><a href='#L78'>78</a> -<a name='L79'></a><a href='#L79'>79</a> -<a name='L80'></a><a href='#L80'>80</a> -<a name='L81'></a><a href='#L81'>81</a> -<a name='L82'></a><a href='#L82'>82</a> -<a name='L83'></a><a href='#L83'>83</a> -<a name='L84'></a><a href='#L84'>84</a> -<a name='L85'></a><a href='#L85'>85</a> -<a name='L86'></a><a href='#L86'>86</a> -<a name='L87'></a><a href='#L87'>87</a> -<a name='L88'></a><a href='#L88'>88</a> -<a name='L89'></a><a href='#L89'>89</a> -<a name='L90'></a><a href='#L90'>90</a> -<a name='L91'></a><a href='#L91'>91</a> -<a name='L92'></a><a href='#L92'>92</a> -<a name='L93'></a><a href='#L93'>93</a> -<a name='L94'></a><a href='#L94'>94</a> -<a name='L95'></a><a href='#L95'>95</a> -<a name='L96'></a><a href='#L96'>96</a> -<a name='L97'></a><a href='#L97'>97</a> -<a name='L98'></a><a href='#L98'>98</a> -<a name='L99'></a><a href='#L99'>99</a> -<a name='L100'></a><a href='#L100'>100</a> -<a name='L101'></a><a href='#L101'>101</a> -<a name='L102'></a><a href='#L102'>102</a> -<a name='L103'></a><a href='#L103'>103</a> -<a name='L104'></a><a href='#L104'>104</a> -<a name='L105'></a><a href='#L105'>105</a> -<a name='L106'></a><a href='#L106'>106</a> -<a name='L107'></a><a href='#L107'>107</a> -<a name='L108'></a><a href='#L108'>108</a> -<a name='L109'></a><a href='#L109'>109</a> -<a name='L110'></a><a href='#L110'>110</a> -<a name='L111'></a><a href='#L111'>111</a> -<a name='L112'></a><a href='#L112'>112</a> -<a name='L113'></a><a href='#L113'>113</a> -<a name='L114'></a><a href='#L114'>114</a> -<a name='L115'></a><a href='#L115'>115</a> -<a name='L116'></a><a href='#L116'>116</a> -<a name='L117'></a><a href='#L117'>117</a> -<a name='L118'></a><a href='#L118'>118</a> -<a name='L119'></a><a href='#L119'>119</a> -<a name='L120'></a><a href='#L120'>120</a> -<a name='L121'></a><a href='#L121'>121</a> -<a name='L122'></a><a href='#L122'>122</a> -<a name='L123'></a><a href='#L123'>123</a> -<a name='L124'></a><a href='#L124'>124</a> -<a name='L125'></a><a href='#L125'>125</a> -<a name='L126'></a><a href='#L126'>126</a> -<a name='L127'></a><a href='#L127'>127</a> -<a name='L128'></a><a href='#L128'>128</a> -<a name='L129'></a><a href='#L129'>129</a> -<a name='L130'></a><a href='#L130'>130</a> -<a name='L131'></a><a href='#L131'>131</a> -<a name='L132'></a><a href='#L132'>132</a> -<a name='L133'></a><a href='#L133'>133</a> -<a name='L134'></a><a href='#L134'>134</a> -<a name='L135'></a><a href='#L135'>135</a> -<a name='L136'></a><a href='#L136'>136</a> -<a name='L137'></a><a href='#L137'>137</a> -<a name='L138'></a><a href='#L138'>138</a> -<a name='L139'></a><a href='#L139'>139</a> -<a name='L140'></a><a href='#L140'>140</a> -<a name='L141'></a><a href='#L141'>141</a> -<a name='L142'></a><a href='#L142'>142</a> -<a name='L143'></a><a href='#L143'>143</a> -<a name='L144'></a><a href='#L144'>144</a> -<a name='L145'></a><a href='#L145'>145</a> -<a name='L146'></a><a href='#L146'>146</a> -<a name='L147'></a><a href='#L147'>147</a> -<a name='L148'></a><a href='#L148'>148</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">.feed-item { - padding: 1rem; - margin-top: 5rem; - list-style: none; - border-bottom: none; -} - -/* removed read/unread specific font-weight to keep it always bold as requested */ - -.item-header { - display: flex; - justify-content: space-between; - align-items: flex-start; - margin-bottom: 0.5rem; -} - -.item-title { - font-family: var(--font-heading); - font-size: 1.8rem; - font-weight: bold; - text-decoration: none; - color: var(--link-color); - display: block; - flex: 1; -} - -.item-title:hover { - text-decoration: none; - color: var(--link-color); -} - -.item-actions { - display: flex; - gap: 0.5rem; - margin-left: 1rem; -} - -/* Legacy controls were simple text/links, but buttons are fine if minimal */ -.star-btn { - background: none; - border: none; - cursor: pointer; - font-size: 1.25rem; - padding: 0 0 0 0.5rem; - vertical-align: middle; - transition: color 0.2s; - line-height: 1; -} - -.star-btn.is-starred { - color: blue; -} - -.star-btn.is-unstarred { - color: var(--text-color); - opacity: 0.3; -} - -.star-btn:hover { - color: blue; -} - -.action-btn { - background: var(--sidebar-bg); - border: 1px solid var(--border-color, #ccc); - cursor: pointer; - padding: 2px 6px; - font-size: 1rem; - color: blue; - font-weight: bold; -} - -.action-btn:hover { - background-color: #eee; -} - -.dateline { - margin-top: 0; - font-weight: normal; - font-size: 0.75em; - color: #ccc; - margin-bottom: 1rem; -} - -.dateline a { - color: #ccc; - text-decoration: none; -} - -.item-description { - color: var(--text-color); - line-height: 1.5; - font-size: 1rem; - margin-top: 1rem; -} - -.item-description img { - max-width: 100%; - height: auto; - display: block; - margin: 1rem 0; -} - -.item-description blockquote { - padding: 1rem 1rem 0 1rem; - border-left: 4px solid var(--sidebar-bg); - color: var(--text-color); - opacity: 0.8; - margin-left: 0; -} - -.scrape-btn { - background: var(--bg-color); - border: 1px solid var(--border-color, #ccc); - color: blue; - cursor: pointer; - font-family: var(--font-heading); - font-weight: bold; - font-size: 0.8rem; - padding: 2px 6px; - margin-left: 0.5rem; -} - -.scrape-btn:hover { - background: var(--sidebar-bg); -} - -@media (max-width: 768px) { - .feed-item { - margin-top: 2rem; - padding: 0.5rem; - } - - .item-title { - font-size: 1.4rem; - word-break: break-word; - } - - .item-header { - flex-direction: column; - gap: 0.5rem; - } - - .item-actions { - margin-left: 0; - margin-bottom: 0.5rem; - } -}</pre></td></tr></table></pre> - - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="../../prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="../../sorter.js"></script> - <script src="../../block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file diff --git a/frontend/coverage/src/components/FeedItem.tsx.html b/frontend/coverage/src/components/FeedItem.tsx.html deleted file mode 100644 index 6df1fec..0000000 --- a/frontend/coverage/src/components/FeedItem.tsx.html +++ /dev/null @@ -1,430 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for src/components/FeedItem.tsx</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="../../prettify.css" /> - <link rel="stylesheet" href="../../base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(../../sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1><a href="../../index.html">All files</a> / <a href="index.html">src/components</a> FeedItem.tsx</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">78.12% </span> - <span class="quiet">Statements</span> - <span class='fraction'>25/32</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">86.95% </span> - <span class="quiet">Branches</span> - <span class='fraction'>20/23</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">83.33% </span> - <span class="quiet">Functions</span> - <span class='fraction'>10/12</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">80.64% </span> - <span class="quiet">Lines</span> - <span class='fraction'>25/31</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line medium'></div> - <pre><table class="coverage"> -<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> -<a name='L2'></a><a href='#L2'>2</a> -<a name='L3'></a><a href='#L3'>3</a> -<a name='L4'></a><a href='#L4'>4</a> -<a name='L5'></a><a href='#L5'>5</a> -<a name='L6'></a><a href='#L6'>6</a> -<a name='L7'></a><a href='#L7'>7</a> -<a name='L8'></a><a href='#L8'>8</a> -<a name='L9'></a><a href='#L9'>9</a> -<a name='L10'></a><a href='#L10'>10</a> -<a name='L11'></a><a href='#L11'>11</a> -<a name='L12'></a><a href='#L12'>12</a> -<a name='L13'></a><a href='#L13'>13</a> -<a name='L14'></a><a href='#L14'>14</a> -<a name='L15'></a><a href='#L15'>15</a> -<a name='L16'></a><a href='#L16'>16</a> -<a name='L17'></a><a href='#L17'>17</a> -<a name='L18'></a><a href='#L18'>18</a> -<a name='L19'></a><a href='#L19'>19</a> -<a name='L20'></a><a href='#L20'>20</a> -<a name='L21'></a><a href='#L21'>21</a> -<a name='L22'></a><a href='#L22'>22</a> -<a name='L23'></a><a href='#L23'>23</a> -<a name='L24'></a><a href='#L24'>24</a> -<a name='L25'></a><a href='#L25'>25</a> -<a name='L26'></a><a href='#L26'>26</a> -<a name='L27'></a><a href='#L27'>27</a> -<a name='L28'></a><a href='#L28'>28</a> -<a name='L29'></a><a href='#L29'>29</a> -<a name='L30'></a><a href='#L30'>30</a> -<a name='L31'></a><a href='#L31'>31</a> -<a name='L32'></a><a href='#L32'>32</a> -<a name='L33'></a><a href='#L33'>33</a> -<a name='L34'></a><a href='#L34'>34</a> -<a name='L35'></a><a href='#L35'>35</a> -<a name='L36'></a><a href='#L36'>36</a> -<a name='L37'></a><a href='#L37'>37</a> -<a name='L38'></a><a href='#L38'>38</a> -<a name='L39'></a><a href='#L39'>39</a> -<a name='L40'></a><a href='#L40'>40</a> -<a name='L41'></a><a href='#L41'>41</a> -<a name='L42'></a><a href='#L42'>42</a> -<a name='L43'></a><a href='#L43'>43</a> -<a name='L44'></a><a href='#L44'>44</a> -<a name='L45'></a><a href='#L45'>45</a> -<a name='L46'></a><a href='#L46'>46</a> -<a name='L47'></a><a href='#L47'>47</a> -<a name='L48'></a><a href='#L48'>48</a> -<a name='L49'></a><a href='#L49'>49</a> -<a name='L50'></a><a href='#L50'>50</a> -<a name='L51'></a><a href='#L51'>51</a> -<a name='L52'></a><a href='#L52'>52</a> -<a name='L53'></a><a href='#L53'>53</a> -<a name='L54'></a><a href='#L54'>54</a> -<a name='L55'></a><a href='#L55'>55</a> -<a name='L56'></a><a href='#L56'>56</a> -<a name='L57'></a><a href='#L57'>57</a> -<a name='L58'></a><a href='#L58'>58</a> -<a name='L59'></a><a href='#L59'>59</a> -<a name='L60'></a><a href='#L60'>60</a> -<a name='L61'></a><a href='#L61'>61</a> -<a name='L62'></a><a href='#L62'>62</a> -<a name='L63'></a><a href='#L63'>63</a> -<a name='L64'></a><a href='#L64'>64</a> -<a name='L65'></a><a href='#L65'>65</a> -<a name='L66'></a><a href='#L66'>66</a> -<a name='L67'></a><a href='#L67'>67</a> -<a name='L68'></a><a href='#L68'>68</a> -<a name='L69'></a><a href='#L69'>69</a> -<a name='L70'></a><a href='#L70'>70</a> -<a name='L71'></a><a href='#L71'>71</a> -<a name='L72'></a><a href='#L72'>72</a> -<a name='L73'></a><a href='#L73'>73</a> -<a name='L74'></a><a href='#L74'>74</a> -<a name='L75'></a><a href='#L75'>75</a> -<a name='L76'></a><a href='#L76'>76</a> -<a name='L77'></a><a href='#L77'>77</a> -<a name='L78'></a><a href='#L78'>78</a> -<a name='L79'></a><a href='#L79'>79</a> -<a name='L80'></a><a href='#L80'>80</a> -<a name='L81'></a><a href='#L81'>81</a> -<a name='L82'></a><a href='#L82'>82</a> -<a name='L83'></a><a href='#L83'>83</a> -<a name='L84'></a><a href='#L84'>84</a> -<a name='L85'></a><a href='#L85'>85</a> -<a name='L86'></a><a href='#L86'>86</a> -<a name='L87'></a><a href='#L87'>87</a> -<a name='L88'></a><a href='#L88'>88</a> -<a name='L89'></a><a href='#L89'>89</a> -<a name='L90'></a><a href='#L90'>90</a> -<a name='L91'></a><a href='#L91'>91</a> -<a name='L92'></a><a href='#L92'>92</a> -<a name='L93'></a><a href='#L93'>93</a> -<a name='L94'></a><a href='#L94'>94</a> -<a name='L95'></a><a href='#L95'>95</a> -<a name='L96'></a><a href='#L96'>96</a> -<a name='L97'></a><a href='#L97'>97</a> -<a name='L98'></a><a href='#L98'>98</a> -<a name='L99'></a><a href='#L99'>99</a> -<a name='L100'></a><a href='#L100'>100</a> -<a name='L101'></a><a href='#L101'>101</a> -<a name='L102'></a><a href='#L102'>102</a> -<a name='L103'></a><a href='#L103'>103</a> -<a name='L104'></a><a href='#L104'>104</a> -<a name='L105'></a><a href='#L105'>105</a> -<a name='L106'></a><a href='#L106'>106</a> -<a name='L107'></a><a href='#L107'>107</a> -<a name='L108'></a><a href='#L108'>108</a> -<a name='L109'></a><a href='#L109'>109</a> -<a name='L110'></a><a href='#L110'>110</a> -<a name='L111'></a><a href='#L111'>111</a> -<a name='L112'></a><a href='#L112'>112</a> -<a name='L113'></a><a href='#L113'>113</a> -<a name='L114'></a><a href='#L114'>114</a> -<a name='L115'></a><a href='#L115'>115</a> -<a name='L116'></a><a href='#L116'>116</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">56x</span> -<span class="cline-any cline-yes">56x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">56x</span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">56x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">56x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">56x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">56x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { useState, useEffect } from 'react'; -import type { Item } from '../types'; -import './FeedItem.css'; - -import { apiFetch } from '../utils'; - -interface FeedItemProps { - item: Item; -} - -export default function FeedItem({ item: initialItem }: FeedItemProps) { - const [item, setItem] = useState(initialItem); - const [loading, setLoading] = useState(false); - - useEffect(() => { - setItem(initialItem); - }, [initialItem]); - - const toggleStar = () => { - updateItem({ ...item, starred: !item.starred }); - }; - - const updateItem = (newItem: Item) => { - setLoading(true); - // Optimistic update - const previousItem = item; - setItem(newItem); - - apiFetch(`/api/item/${newItem._id}`, { - method: 'PUT', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - _id: newItem._id, - read: newItem.read, - starred: newItem.starred, - }), - }) - .then((res) => { - <span class="missing-if-branch" title="if path not taken" >I</span>if (!res.ok) { -<span class="cstat-no" title="statement not covered" > throw new Error('Failed to update item');</span> - } - return res.json(); - }) - .then(() => { - // Confirm with server response if needed, but for now we trust the optimistic update - // or we could setItem(updated) if the server returns the full object - setLoading(false); - }) - .catch(<span class="fstat-no" title="function not covered" >(e</span>rr) => { -<span class="cstat-no" title="statement not covered" > console.error('Error updating item:', err);</span> - // Revert on error -<span class="cstat-no" title="statement not covered" > setItem(previousItem);</span> -<span class="cstat-no" title="statement not covered" > setLoading(false);</span> - }); - }; - - const loadFullContent = (e: React.MouseEvent) => { - e.stopPropagation(); - setLoading(true); - apiFetch(`/api/item/${item._id}`) - .then((res) => { - <span class="missing-if-branch" title="if path not taken" >I</span>if (!res.ok) <span class="cstat-no" title="statement not covered" >throw new Error('Failed to fetch full content');</span> - return res.json(); - }) - .then((data) => { - setItem({ ...item, ...data }); - setLoading(false); - }) - .catch(<span class="fstat-no" title="function not covered" >(e</span>rr) => { -<span class="cstat-no" title="statement not covered" > console.error('Error fetching full content:', err);</span> -<span class="cstat-no" title="statement not covered" > setLoading(false);</span> - }); - }; - - return ( - <li className={`feed-item ${item.read ? 'read' : 'unread'} ${loading ? 'loading' : ''}`}> - <div className="item-header"> - <a href={item.url} target="_blank" rel="noopener noreferrer" className="item-title"> - {item.title || <span class="branch-1 cbranch-no" title="branch not covered" >'(No Title)'}</span> - </a> - <button - onClick={(e) => { - e.stopPropagation(); - toggleStar(); - }} - className={`star-btn ${item.starred ? 'is-starred' : 'is-unstarred'}`} - title={item.starred ? 'Unstar' : 'Star'} - > - ★ - </button> - </div> - <div className="dateline"> - <a href={item.url} target="_blank" rel="noopener noreferrer"> - {new Date(item.publish_date).toLocaleDateString()} - {item.feed_title && ` - ${item.feed_title}`} - </a> - <div className="item-actions" style={{ display: 'inline-block', float: 'right' }}> - {!item.full_content && ( - <button onClick={loadFullContent} className="scrape-btn" title="Load Full Content"> - text - </button> - )} - </div> - </div> - {(item.full_content || item.description) && ( - <div - className="item-description" - dangerouslySetInnerHTML={{ __html: item.full_content || item.description }} - /> - )} - </li> - ); -} - </pre></td></tr></table></pre> - - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="../../prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="../../sorter.js"></script> - <script src="../../block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file diff --git a/frontend/coverage/src/components/FeedItems.css.html b/frontend/coverage/src/components/FeedItems.css.html deleted file mode 100644 index 66a3307..0000000 --- a/frontend/coverage/src/components/FeedItems.css.html +++ /dev/null @@ -1,151 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for src/components/FeedItems.css</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="../../prettify.css" /> - <link rel="stylesheet" href="../../base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(../../sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1><a href="../../index.html">All files</a> / <a href="index.html">src/components</a> FeedItems.css</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Statements</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Branches</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Functions</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Lines</span> - <span class='fraction'>0/0</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line low'></div> - <pre><table class="coverage"> -<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> -<a name='L2'></a><a href='#L2'>2</a> -<a name='L3'></a><a href='#L3'>3</a> -<a name='L4'></a><a href='#L4'>4</a> -<a name='L5'></a><a href='#L5'>5</a> -<a name='L6'></a><a href='#L6'>6</a> -<a name='L7'></a><a href='#L7'>7</a> -<a name='L8'></a><a href='#L8'>8</a> -<a name='L9'></a><a href='#L9'>9</a> -<a name='L10'></a><a href='#L10'>10</a> -<a name='L11'></a><a href='#L11'>11</a> -<a name='L12'></a><a href='#L12'>12</a> -<a name='L13'></a><a href='#L13'>13</a> -<a name='L14'></a><a href='#L14'>14</a> -<a name='L15'></a><a href='#L15'>15</a> -<a name='L16'></a><a href='#L16'>16</a> -<a name='L17'></a><a href='#L17'>17</a> -<a name='L18'></a><a href='#L18'>18</a> -<a name='L19'></a><a href='#L19'>19</a> -<a name='L20'></a><a href='#L20'>20</a> -<a name='L21'></a><a href='#L21'>21</a> -<a name='L22'></a><a href='#L22'>22</a> -<a name='L23'></a><a href='#L23'>23</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">.feed-items { - padding: 1rem 0; - /* Removing horizontal padding to avoid double-padding with FeedItem */ -} - -.feed-items h2 { - margin-top: 0; - border-bottom: 2px solid var(--border-color); - padding-bottom: 0.5rem; -} - -.item-list { - list-style: none; - padding: 0; -} - -.loading-more { - padding: 2rem; - text-align: center; - color: #888; - font-size: 0.9rem; - min-height: 50px; -}</pre></td></tr></table></pre> - - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="../../prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="../../sorter.js"></script> - <script src="../../block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file diff --git a/frontend/coverage/src/components/FeedItems.tsx.html b/frontend/coverage/src/components/FeedItems.tsx.html deleted file mode 100644 index 9811743..0000000 --- a/frontend/coverage/src/components/FeedItems.tsx.html +++ /dev/null @@ -1,838 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for src/components/FeedItems.tsx</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="../../prettify.css" /> - <link rel="stylesheet" href="../../base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(../../sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1><a href="../../index.html">All files</a> / <a href="index.html">src/components</a> FeedItems.tsx</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">89.23% </span> - <span class="quiet">Statements</span> - <span class='fraction'>116/130</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">76.19% </span> - <span class="quiet">Branches</span> - <span class='fraction'>64/84</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">87.09% </span> - <span class="quiet">Functions</span> - <span class='fraction'>27/31</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">89.07% </span> - <span class="quiet">Lines</span> - <span class='fraction'>106/119</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line high'></div> - <pre><table class="coverage"> -<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> -<a name='L2'></a><a href='#L2'>2</a> -<a name='L3'></a><a href='#L3'>3</a> -<a name='L4'></a><a href='#L4'>4</a> -<a name='L5'></a><a href='#L5'>5</a> -<a name='L6'></a><a href='#L6'>6</a> -<a name='L7'></a><a href='#L7'>7</a> -<a name='L8'></a><a href='#L8'>8</a> -<a name='L9'></a><a href='#L9'>9</a> -<a name='L10'></a><a href='#L10'>10</a> -<a name='L11'></a><a href='#L11'>11</a> -<a name='L12'></a><a href='#L12'>12</a> -<a name='L13'></a><a href='#L13'>13</a> -<a name='L14'></a><a href='#L14'>14</a> -<a name='L15'></a><a href='#L15'>15</a> -<a name='L16'></a><a href='#L16'>16</a> -<a name='L17'></a><a href='#L17'>17</a> -<a name='L18'></a><a href='#L18'>18</a> -<a name='L19'></a><a href='#L19'>19</a> -<a name='L20'></a><a href='#L20'>20</a> -<a name='L21'></a><a href='#L21'>21</a> -<a name='L22'></a><a href='#L22'>22</a> -<a name='L23'></a><a href='#L23'>23</a> -<a name='L24'></a><a href='#L24'>24</a> -<a name='L25'></a><a href='#L25'>25</a> -<a name='L26'></a><a href='#L26'>26</a> -<a name='L27'></a><a href='#L27'>27</a> -<a name='L28'></a><a href='#L28'>28</a> -<a name='L29'></a><a href='#L29'>29</a> -<a name='L30'></a><a href='#L30'>30</a> -<a name='L31'></a><a href='#L31'>31</a> -<a name='L32'></a><a href='#L32'>32</a> -<a name='L33'></a><a href='#L33'>33</a> -<a name='L34'></a><a href='#L34'>34</a> -<a name='L35'></a><a href='#L35'>35</a> -<a name='L36'></a><a href='#L36'>36</a> -<a name='L37'></a><a href='#L37'>37</a> -<a name='L38'></a><a href='#L38'>38</a> -<a name='L39'></a><a href='#L39'>39</a> -<a name='L40'></a><a href='#L40'>40</a> -<a name='L41'></a><a href='#L41'>41</a> -<a name='L42'></a><a href='#L42'>42</a> -<a name='L43'></a><a href='#L43'>43</a> -<a name='L44'></a><a href='#L44'>44</a> -<a name='L45'></a><a href='#L45'>45</a> -<a name='L46'></a><a href='#L46'>46</a> -<a name='L47'></a><a href='#L47'>47</a> -<a name='L48'></a><a href='#L48'>48</a> -<a name='L49'></a><a href='#L49'>49</a> -<a name='L50'></a><a href='#L50'>50</a> -<a name='L51'></a><a href='#L51'>51</a> -<a name='L52'></a><a href='#L52'>52</a> -<a name='L53'></a><a href='#L53'>53</a> -<a name='L54'></a><a href='#L54'>54</a> -<a name='L55'></a><a href='#L55'>55</a> -<a name='L56'></a><a href='#L56'>56</a> -<a name='L57'></a><a href='#L57'>57</a> -<a name='L58'></a><a href='#L58'>58</a> -<a name='L59'></a><a href='#L59'>59</a> -<a name='L60'></a><a href='#L60'>60</a> -<a name='L61'></a><a href='#L61'>61</a> -<a name='L62'></a><a href='#L62'>62</a> -<a name='L63'></a><a href='#L63'>63</a> -<a name='L64'></a><a href='#L64'>64</a> -<a name='L65'></a><a href='#L65'>65</a> -<a name='L66'></a><a href='#L66'>66</a> -<a name='L67'></a><a href='#L67'>67</a> -<a name='L68'></a><a href='#L68'>68</a> -<a name='L69'></a><a href='#L69'>69</a> -<a name='L70'></a><a href='#L70'>70</a> -<a name='L71'></a><a href='#L71'>71</a> -<a name='L72'></a><a href='#L72'>72</a> -<a name='L73'></a><a href='#L73'>73</a> -<a name='L74'></a><a href='#L74'>74</a> -<a name='L75'></a><a href='#L75'>75</a> -<a name='L76'></a><a href='#L76'>76</a> -<a name='L77'></a><a href='#L77'>77</a> -<a name='L78'></a><a href='#L78'>78</a> -<a name='L79'></a><a href='#L79'>79</a> -<a name='L80'></a><a href='#L80'>80</a> -<a name='L81'></a><a href='#L81'>81</a> -<a name='L82'></a><a href='#L82'>82</a> -<a name='L83'></a><a href='#L83'>83</a> -<a name='L84'></a><a href='#L84'>84</a> -<a name='L85'></a><a href='#L85'>85</a> -<a name='L86'></a><a href='#L86'>86</a> -<a name='L87'></a><a href='#L87'>87</a> -<a name='L88'></a><a href='#L88'>88</a> -<a name='L89'></a><a href='#L89'>89</a> -<a name='L90'></a><a href='#L90'>90</a> -<a name='L91'></a><a href='#L91'>91</a> -<a name='L92'></a><a href='#L92'>92</a> -<a name='L93'></a><a href='#L93'>93</a> -<a name='L94'></a><a href='#L94'>94</a> -<a name='L95'></a><a href='#L95'>95</a> -<a name='L96'></a><a href='#L96'>96</a> -<a name='L97'></a><a href='#L97'>97</a> -<a name='L98'></a><a href='#L98'>98</a> -<a name='L99'></a><a href='#L99'>99</a> -<a name='L100'></a><a href='#L100'>100</a> -<a name='L101'></a><a href='#L101'>101</a> -<a name='L102'></a><a href='#L102'>102</a> -<a name='L103'></a><a href='#L103'>103</a> -<a name='L104'></a><a href='#L104'>104</a> -<a name='L105'></a><a href='#L105'>105</a> -<a name='L106'></a><a href='#L106'>106</a> -<a name='L107'></a><a href='#L107'>107</a> -<a name='L108'></a><a href='#L108'>108</a> -<a name='L109'></a><a href='#L109'>109</a> -<a name='L110'></a><a href='#L110'>110</a> -<a name='L111'></a><a href='#L111'>111</a> -<a name='L112'></a><a href='#L112'>112</a> -<a name='L113'></a><a href='#L113'>113</a> -<a name='L114'></a><a href='#L114'>114</a> -<a name='L115'></a><a href='#L115'>115</a> -<a name='L116'></a><a href='#L116'>116</a> -<a name='L117'></a><a href='#L117'>117</a> -<a name='L118'></a><a href='#L118'>118</a> -<a name='L119'></a><a href='#L119'>119</a> -<a name='L120'></a><a href='#L120'>120</a> -<a name='L121'></a><a href='#L121'>121</a> -<a name='L122'></a><a href='#L122'>122</a> -<a name='L123'></a><a href='#L123'>123</a> -<a name='L124'></a><a href='#L124'>124</a> -<a name='L125'></a><a href='#L125'>125</a> -<a name='L126'></a><a href='#L126'>126</a> -<a name='L127'></a><a href='#L127'>127</a> -<a name='L128'></a><a href='#L128'>128</a> -<a name='L129'></a><a href='#L129'>129</a> -<a name='L130'></a><a href='#L130'>130</a> -<a name='L131'></a><a href='#L131'>131</a> -<a name='L132'></a><a href='#L132'>132</a> -<a name='L133'></a><a href='#L133'>133</a> -<a name='L134'></a><a href='#L134'>134</a> -<a name='L135'></a><a href='#L135'>135</a> -<a name='L136'></a><a href='#L136'>136</a> -<a name='L137'></a><a href='#L137'>137</a> -<a name='L138'></a><a href='#L138'>138</a> -<a name='L139'></a><a href='#L139'>139</a> -<a name='L140'></a><a href='#L140'>140</a> -<a name='L141'></a><a href='#L141'>141</a> -<a name='L142'></a><a href='#L142'>142</a> -<a name='L143'></a><a href='#L143'>143</a> -<a name='L144'></a><a href='#L144'>144</a> -<a name='L145'></a><a href='#L145'>145</a> -<a name='L146'></a><a href='#L146'>146</a> -<a name='L147'></a><a href='#L147'>147</a> -<a name='L148'></a><a href='#L148'>148</a> -<a name='L149'></a><a href='#L149'>149</a> -<a name='L150'></a><a href='#L150'>150</a> -<a name='L151'></a><a href='#L151'>151</a> -<a name='L152'></a><a href='#L152'>152</a> -<a name='L153'></a><a href='#L153'>153</a> -<a name='L154'></a><a href='#L154'>154</a> -<a name='L155'></a><a href='#L155'>155</a> -<a name='L156'></a><a href='#L156'>156</a> -<a name='L157'></a><a href='#L157'>157</a> -<a name='L158'></a><a href='#L158'>158</a> -<a name='L159'></a><a href='#L159'>159</a> -<a name='L160'></a><a href='#L160'>160</a> -<a name='L161'></a><a href='#L161'>161</a> -<a name='L162'></a><a href='#L162'>162</a> -<a name='L163'></a><a href='#L163'>163</a> -<a name='L164'></a><a href='#L164'>164</a> -<a name='L165'></a><a href='#L165'>165</a> -<a name='L166'></a><a href='#L166'>166</a> -<a name='L167'></a><a href='#L167'>167</a> -<a name='L168'></a><a href='#L168'>168</a> -<a name='L169'></a><a href='#L169'>169</a> -<a name='L170'></a><a href='#L170'>170</a> -<a name='L171'></a><a href='#L171'>171</a> -<a name='L172'></a><a href='#L172'>172</a> -<a name='L173'></a><a href='#L173'>173</a> -<a name='L174'></a><a href='#L174'>174</a> -<a name='L175'></a><a href='#L175'>175</a> -<a name='L176'></a><a href='#L176'>176</a> -<a name='L177'></a><a href='#L177'>177</a> -<a name='L178'></a><a href='#L178'>178</a> -<a name='L179'></a><a href='#L179'>179</a> -<a name='L180'></a><a href='#L180'>180</a> -<a name='L181'></a><a href='#L181'>181</a> -<a name='L182'></a><a href='#L182'>182</a> -<a name='L183'></a><a href='#L183'>183</a> -<a name='L184'></a><a href='#L184'>184</a> -<a name='L185'></a><a href='#L185'>185</a> -<a name='L186'></a><a href='#L186'>186</a> -<a name='L187'></a><a href='#L187'>187</a> -<a name='L188'></a><a href='#L188'>188</a> -<a name='L189'></a><a href='#L189'>189</a> -<a name='L190'></a><a href='#L190'>190</a> -<a name='L191'></a><a href='#L191'>191</a> -<a name='L192'></a><a href='#L192'>192</a> -<a name='L193'></a><a href='#L193'>193</a> -<a name='L194'></a><a href='#L194'>194</a> -<a name='L195'></a><a href='#L195'>195</a> -<a name='L196'></a><a href='#L196'>196</a> -<a name='L197'></a><a href='#L197'>197</a> -<a name='L198'></a><a href='#L198'>198</a> -<a name='L199'></a><a href='#L199'>199</a> -<a name='L200'></a><a href='#L200'>200</a> -<a name='L201'></a><a href='#L201'>201</a> -<a name='L202'></a><a href='#L202'>202</a> -<a name='L203'></a><a href='#L203'>203</a> -<a name='L204'></a><a href='#L204'>204</a> -<a name='L205'></a><a href='#L205'>205</a> -<a name='L206'></a><a href='#L206'>206</a> -<a name='L207'></a><a href='#L207'>207</a> -<a name='L208'></a><a href='#L208'>208</a> -<a name='L209'></a><a href='#L209'>209</a> -<a name='L210'></a><a href='#L210'>210</a> -<a name='L211'></a><a href='#L211'>211</a> -<a name='L212'></a><a href='#L212'>212</a> -<a name='L213'></a><a href='#L213'>213</a> -<a name='L214'></a><a href='#L214'>214</a> -<a name='L215'></a><a href='#L215'>215</a> -<a name='L216'></a><a href='#L216'>216</a> -<a name='L217'></a><a href='#L217'>217</a> -<a name='L218'></a><a href='#L218'>218</a> -<a name='L219'></a><a href='#L219'>219</a> -<a name='L220'></a><a href='#L220'>220</a> -<a name='L221'></a><a href='#L221'>221</a> -<a name='L222'></a><a href='#L222'>222</a> -<a name='L223'></a><a href='#L223'>223</a> -<a name='L224'></a><a href='#L224'>224</a> -<a name='L225'></a><a href='#L225'>225</a> -<a name='L226'></a><a href='#L226'>226</a> -<a name='L227'></a><a href='#L227'>227</a> -<a name='L228'></a><a href='#L228'>228</a> -<a name='L229'></a><a href='#L229'>229</a> -<a name='L230'></a><a href='#L230'>230</a> -<a name='L231'></a><a href='#L231'>231</a> -<a name='L232'></a><a href='#L232'>232</a> -<a name='L233'></a><a href='#L233'>233</a> -<a name='L234'></a><a href='#L234'>234</a> -<a name='L235'></a><a href='#L235'>235</a> -<a name='L236'></a><a href='#L236'>236</a> -<a name='L237'></a><a href='#L237'>237</a> -<a name='L238'></a><a href='#L238'>238</a> -<a name='L239'></a><a href='#L239'>239</a> -<a name='L240'></a><a href='#L240'>240</a> -<a name='L241'></a><a href='#L241'>241</a> -<a name='L242'></a><a href='#L242'>242</a> -<a name='L243'></a><a href='#L243'>243</a> -<a name='L244'></a><a href='#L244'>244</a> -<a name='L245'></a><a href='#L245'>245</a> -<a name='L246'></a><a href='#L246'>246</a> -<a name='L247'></a><a href='#L247'>247</a> -<a name='L248'></a><a href='#L248'>248</a> -<a name='L249'></a><a href='#L249'>249</a> -<a name='L250'></a><a href='#L250'>250</a> -<a name='L251'></a><a href='#L251'>251</a> -<a name='L252'></a><a href='#L252'>252</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-yes">3x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">8x</span> -<span class="cline-any cline-yes">8x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">9x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-yes">3x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">10x</span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">10x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">9x</span> -<span class="cline-any cline-yes">3x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">6x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">9x</span> -<span class="cline-any cline-yes">9x</span> -<span class="cline-any cline-yes">9x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-yes">8x</span> -<span class="cline-any cline-yes">8x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-yes">5x</span> -<span class="cline-any cline-yes">5x</span> -<span class="cline-any cline-yes">5x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">3x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-yes">31x</span> -<span class="cline-any cline-yes">6x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">6x</span> -<span class="cline-any cline-yes">5x</span> -<span class="cline-any cline-yes">5x</span> -<span class="cline-any cline-yes">5x</span> -<span class="cline-any cline-yes">5x</span> -<span class="cline-any cline-yes">5x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">5x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">5x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">5x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">31x</span> -<span class="cline-any cline-yes">31x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">31x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">31x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">31x</span> -<span class="cline-any cline-yes">31x</span> -<span class="cline-any cline-yes">31x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">31x</span> -<span class="cline-any cline-yes">31x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">31x</span> -<span class="cline-any cline-yes">31x</span> -<span class="cline-any cline-yes">31x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">36x</span> -<span class="cline-any cline-yes">21x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">20x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">44x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { useEffect, useState } from 'react'; -import { useParams, useSearchParams } from 'react-router-dom'; -import type { Item } from '../types'; -import FeedItem from './FeedItem'; -import './FeedItems.css'; -import { apiFetch } from '../utils'; - -export default function FeedItems() { - const { feedId, tagName } = useParams<{ feedId: string; tagName: string }>(); - const [searchParams] = useSearchParams(); - const filterFn = searchParams.get('filter') || 'unread'; - - const [items, setItems] = useState<Item[]>([]); - const [loading, setLoading] = useState(true); - const [loadingMore, setLoadingMore] = useState(false); - const [hasMore, setHasMore] = useState(true); - const [error, setError] = useState(''); - const [selectedIndex, setSelectedIndex] = useState(-1); - - const fetchItems = (maxId?: string) => { - if (maxId) { - setLoadingMore(true); - } else { - setLoading(true); - setItems([]); - } - setError(''); - - let url = '/api/stream'; - const params = new URLSearchParams(); - - if (feedId) { - params.append('feed_id', feedId); - } else if (tagName) { - params.append('tag', tagName); - } - - if (maxId) { - params.append('max_id', maxId); - } - - // Apply filters - const searchQuery = searchParams.get('q'); - <span class="missing-if-branch" title="if path not taken" >I</span>if (searchQuery) { -<span class="cstat-no" title="statement not covered" > params.append('q', searchQuery);</span> - } - - <span class="missing-if-branch" title="if path not taken" >I</span>if (filterFn === 'all') { -<span class="cstat-no" title="statement not covered" > params.append('read_filter', 'all');</span> - <span class="missing-if-branch" title="if path not taken" >I</span>} else if (filterFn === 'starred') { -<span class="cstat-no" title="statement not covered" > params.append('starred', 'true');</span> -<span class="cstat-no" title="statement not covered" > params.append('read_filter', 'all');</span> - } else { - // default to unread - <span class="missing-if-branch" title="else path not taken" >E</span>if (!searchQuery) { - params.append('read_filter', 'unread'); - } - } - - const queryString = params.toString(); - <span class="missing-if-branch" title="else path not taken" >E</span>if (queryString) { - url += `?${queryString}`; - } - - apiFetch(url) - .then((res) => { - <span class="missing-if-branch" title="if path not taken" >I</span>if (!res.ok) { -<span class="cstat-no" title="statement not covered" > throw new Error('Failed to fetch items');</span> - } - return res.json(); - }) - .then((data) => { - if (maxId) { - setItems((prev) => [...prev, ...data]); - } else { - setItems(data); - } - setHasMore(data.length > 0); - setLoading(false); - setLoadingMore(false); - }) - .catch((err) => { - setError(err.message); - setLoading(false); - setLoadingMore(false); - }); - }; - - useEffect(() => { - fetchItems(); - setSelectedIndex(-1); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [feedId, tagName, filterFn, searchParams]); - - - const scrollToItem = (index: number) => { - const element = document.getElementById(`item-${index}`); - <span class="missing-if-branch" title="else path not taken" >E</span>if (element) { - element.scrollIntoView({ behavior: 'auto', block: 'start' }); - } - }; - - const markAsRead = (item: Item) => { - const updatedItem = { ...item, read: true }; - // Optimistic update - setItems((prevItems) => prevItems.map((i) => (i._id === item._id ? updatedItem : i))); - - apiFetch(`/api/item/${item._id}`, { - method: 'PUT', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ read: true, starred: item.starred }), - }).catch(<span class="fstat-no" title="function not covered" >(e</span>rr) => <span class="cstat-no" title="statement not covered" >console.error('Failed to mark read', err))</span>; - }; - - const toggleStar = (item: Item) => { - const updatedItem = { ...item, starred: !item.starred }; - // Optimistic update - setItems((prevItems) => prevItems.map((i) => (i._id === item._id ? updatedItem : i))); - - apiFetch(`/api/item/${item._id}`, { - method: 'PUT', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ read: item.read, starred: !item.starred }), - }).catch(<span class="fstat-no" title="function not covered" >(e</span>rr) => <span class="cstat-no" title="statement not covered" >console.error('Failed to toggle star', err))</span>; - }; - - useEffect(() => { - const handleKeyDown = (e: KeyboardEvent) => { - <span class="missing-if-branch" title="if path not taken" >I</span>if (items.length === 0) <span class="cstat-no" title="statement not covered" >return;</span> - - if (e.key === 'j') { - setSelectedIndex((prev) => { - const nextIndex = Math.min(prev + 1, items.length - 1); - <span class="missing-if-branch" title="else path not taken" >E</span>if (nextIndex !== prev) { - const item = items[nextIndex]; - if (!item.read) { - markAsRead(item); - } - scrollToItem(nextIndex); - } - - // If we're now on the last item and there are more items to load, - // trigger loading them so the next 'j' press will work - if (nextIndex === items.length - 1 && hasMore && !loadingMore) { - fetchItems(String(items[items.length - 1]._id)); - } - - return nextIndex; - }); - <span class="missing-if-branch" title="if path not taken" >I</span>} else if (e.key === 'k') { -<span class="cstat-no" title="statement not covered" > setSelectedIndex(<span class="fstat-no" title="function not covered" >(p</span>rev) => {</span> - const nextIndex = <span class="cstat-no" title="statement not covered" >Math.max(prev - 1, 0);</span> -<span class="cstat-no" title="statement not covered" > if (nextIndex !== prev) {</span> -<span class="cstat-no" title="statement not covered" > scrollToItem(nextIndex);</span> - } -<span class="cstat-no" title="statement not covered" > return nextIndex;</span> - }); - <span class="missing-if-branch" title="else path not taken" >E</span>} else if (e.key === 's') { - setSelectedIndex((currentIndex) => { - <span class="missing-if-branch" title="else path not taken" >E</span>if (currentIndex >= 0 && currentIndex < items.length) { - toggleStar(items[currentIndex]); - } - return currentIndex; - }); - } - }; - - window.addEventListener('keydown', handleKeyDown); - return () => window.removeEventListener('keydown', handleKeyDown); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [items, hasMore, loadingMore]); - - - - useEffect(() => { - // Observer for marking items as read - const itemObserver = new IntersectionObserver( - (entries) => { - entries.forEach((entry) => { - // If item is not intersecting and is above the viewport, it's been scrolled past - <span class="missing-if-branch" title="else path not taken" >E</span>if (!entry.isIntersecting && entry.boundingClientRect.top < 0) { - const index = Number(entry.target.getAttribute('data-index')); - <span class="missing-if-branch" title="else path not taken" >E</span>if (!isNaN(index) && index >= 0 && index < items.length) { - const item = items[index]; - <span class="missing-if-branch" title="else path not taken" >E</span>if (!item.read) { - markAsRead(item); - } - } - } - }); - }, - { root: null, threshold: 0 } - ); - - // Observer for infinite scroll (less aggressive, must be fully visible) - const sentinelObserver = new IntersectionObserver( - (entries) => { - entries.forEach((entry) => { - <span class="missing-if-branch" title="else path not taken" >E</span>if (entry.isIntersecting && !loadingMore && hasMore && items.length > 0) { - fetchItems(String(items[items.length - 1]._id)); - } - }); - }, - { root: null, threshold: 1.0 } - ); - - items.forEach((_, index) => { - const el = document.getElementById(`item-${index}`); - <span class="missing-if-branch" title="else path not taken" >E</span>if (el) itemObserver.observe(el); - }); - - const sentinel = document.getElementById('load-more-sentinel'); - if (sentinel) sentinelObserver.observe(sentinel); - - return () => { - itemObserver.disconnect(); - sentinelObserver.disconnect(); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [items, loadingMore, hasMore]); - - if (loading) return <div className="feed-items-loading">Loading items...</div>; - if (error) return <div className="feed-items-error">Error: {error}</div>; - - return ( - <div className="feed-items"> - {items.length === 0 ? ( -<span class="branch-0 cbranch-no" title="branch not covered" > <p>No items found.</p></span> - ) : ( - <ul className="item-list"> - {items.map((item, index) => ( - <div - id={`item-${index}`} - key={item._id} - data-index={index} - data-selected={index === selectedIndex} - onClick={<span class="fstat-no" title="function not covered" >() => <span class="cstat-no" title="statement not covered" >s</span>etSelectedIndex(index)}</span> - > - <FeedItem item={item} /> - </div> - ))} - {hasMore && ( - <div id="load-more-sentinel" className="loading-more"> - {loadingMore ? 'Loading more...' : ''} - </div> - )} - </ul> - )} - </div> - ); -} - </pre></td></tr></table></pre> - - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="../../prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="../../sorter.js"></script> - <script src="../../block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file diff --git a/frontend/coverage/src/components/FeedList.css.html b/frontend/coverage/src/components/FeedList.css.html deleted file mode 100644 index d892e77..0000000 --- a/frontend/coverage/src/components/FeedList.css.html +++ /dev/null @@ -1,724 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for src/components/FeedList.css</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="../../prettify.css" /> - <link rel="stylesheet" href="../../base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(../../sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1><a href="../../index.html">All files</a> / <a href="index.html">src/components</a> FeedList.css</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Statements</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Branches</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Functions</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Lines</span> - <span class='fraction'>0/0</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line low'></div> - <pre><table class="coverage"> -<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> -<a name='L2'></a><a href='#L2'>2</a> -<a name='L3'></a><a href='#L3'>3</a> -<a name='L4'></a><a href='#L4'>4</a> -<a name='L5'></a><a href='#L5'>5</a> -<a name='L6'></a><a href='#L6'>6</a> -<a name='L7'></a><a href='#L7'>7</a> -<a name='L8'></a><a href='#L8'>8</a> -<a name='L9'></a><a href='#L9'>9</a> -<a name='L10'></a><a href='#L10'>10</a> -<a name='L11'></a><a href='#L11'>11</a> -<a name='L12'></a><a href='#L12'>12</a> -<a name='L13'></a><a href='#L13'>13</a> -<a name='L14'></a><a href='#L14'>14</a> -<a name='L15'></a><a href='#L15'>15</a> -<a name='L16'></a><a href='#L16'>16</a> -<a name='L17'></a><a href='#L17'>17</a> -<a name='L18'></a><a href='#L18'>18</a> -<a name='L19'></a><a href='#L19'>19</a> -<a name='L20'></a><a href='#L20'>20</a> -<a name='L21'></a><a href='#L21'>21</a> -<a name='L22'></a><a href='#L22'>22</a> -<a name='L23'></a><a href='#L23'>23</a> -<a name='L24'></a><a href='#L24'>24</a> -<a name='L25'></a><a href='#L25'>25</a> -<a name='L26'></a><a href='#L26'>26</a> -<a name='L27'></a><a href='#L27'>27</a> -<a name='L28'></a><a href='#L28'>28</a> -<a name='L29'></a><a href='#L29'>29</a> -<a name='L30'></a><a href='#L30'>30</a> -<a name='L31'></a><a href='#L31'>31</a> -<a name='L32'></a><a href='#L32'>32</a> -<a name='L33'></a><a href='#L33'>33</a> -<a name='L34'></a><a href='#L34'>34</a> -<a name='L35'></a><a href='#L35'>35</a> -<a name='L36'></a><a href='#L36'>36</a> -<a name='L37'></a><a href='#L37'>37</a> -<a name='L38'></a><a href='#L38'>38</a> -<a name='L39'></a><a href='#L39'>39</a> -<a name='L40'></a><a href='#L40'>40</a> -<a name='L41'></a><a href='#L41'>41</a> -<a name='L42'></a><a href='#L42'>42</a> -<a name='L43'></a><a href='#L43'>43</a> -<a name='L44'></a><a href='#L44'>44</a> -<a name='L45'></a><a href='#L45'>45</a> -<a name='L46'></a><a href='#L46'>46</a> -<a name='L47'></a><a href='#L47'>47</a> -<a name='L48'></a><a href='#L48'>48</a> -<a name='L49'></a><a href='#L49'>49</a> -<a name='L50'></a><a href='#L50'>50</a> -<a name='L51'></a><a href='#L51'>51</a> -<a name='L52'></a><a href='#L52'>52</a> -<a name='L53'></a><a href='#L53'>53</a> -<a name='L54'></a><a href='#L54'>54</a> -<a name='L55'></a><a href='#L55'>55</a> -<a name='L56'></a><a href='#L56'>56</a> -<a name='L57'></a><a href='#L57'>57</a> -<a name='L58'></a><a href='#L58'>58</a> -<a name='L59'></a><a href='#L59'>59</a> -<a name='L60'></a><a href='#L60'>60</a> -<a name='L61'></a><a href='#L61'>61</a> -<a name='L62'></a><a href='#L62'>62</a> -<a name='L63'></a><a href='#L63'>63</a> -<a name='L64'></a><a href='#L64'>64</a> -<a name='L65'></a><a href='#L65'>65</a> -<a name='L66'></a><a href='#L66'>66</a> -<a name='L67'></a><a href='#L67'>67</a> -<a name='L68'></a><a href='#L68'>68</a> -<a name='L69'></a><a href='#L69'>69</a> -<a name='L70'></a><a href='#L70'>70</a> -<a name='L71'></a><a href='#L71'>71</a> -<a name='L72'></a><a href='#L72'>72</a> -<a name='L73'></a><a href='#L73'>73</a> -<a name='L74'></a><a href='#L74'>74</a> -<a name='L75'></a><a href='#L75'>75</a> -<a name='L76'></a><a href='#L76'>76</a> -<a name='L77'></a><a href='#L77'>77</a> -<a name='L78'></a><a href='#L78'>78</a> -<a name='L79'></a><a href='#L79'>79</a> -<a name='L80'></a><a href='#L80'>80</a> -<a name='L81'></a><a href='#L81'>81</a> -<a name='L82'></a><a href='#L82'>82</a> -<a name='L83'></a><a href='#L83'>83</a> -<a name='L84'></a><a href='#L84'>84</a> -<a name='L85'></a><a href='#L85'>85</a> -<a name='L86'></a><a href='#L86'>86</a> -<a name='L87'></a><a href='#L87'>87</a> -<a name='L88'></a><a href='#L88'>88</a> -<a name='L89'></a><a href='#L89'>89</a> -<a name='L90'></a><a href='#L90'>90</a> -<a name='L91'></a><a href='#L91'>91</a> -<a name='L92'></a><a href='#L92'>92</a> -<a name='L93'></a><a href='#L93'>93</a> -<a name='L94'></a><a href='#L94'>94</a> -<a name='L95'></a><a href='#L95'>95</a> -<a name='L96'></a><a href='#L96'>96</a> -<a name='L97'></a><a href='#L97'>97</a> -<a name='L98'></a><a href='#L98'>98</a> -<a name='L99'></a><a href='#L99'>99</a> -<a name='L100'></a><a href='#L100'>100</a> -<a name='L101'></a><a href='#L101'>101</a> -<a name='L102'></a><a href='#L102'>102</a> -<a name='L103'></a><a href='#L103'>103</a> -<a name='L104'></a><a href='#L104'>104</a> -<a name='L105'></a><a href='#L105'>105</a> -<a name='L106'></a><a href='#L106'>106</a> -<a name='L107'></a><a href='#L107'>107</a> -<a name='L108'></a><a href='#L108'>108</a> -<a name='L109'></a><a href='#L109'>109</a> -<a name='L110'></a><a href='#L110'>110</a> -<a name='L111'></a><a href='#L111'>111</a> -<a name='L112'></a><a href='#L112'>112</a> -<a name='L113'></a><a href='#L113'>113</a> -<a name='L114'></a><a href='#L114'>114</a> -<a name='L115'></a><a href='#L115'>115</a> -<a name='L116'></a><a href='#L116'>116</a> -<a name='L117'></a><a href='#L117'>117</a> -<a name='L118'></a><a href='#L118'>118</a> -<a name='L119'></a><a href='#L119'>119</a> -<a name='L120'></a><a href='#L120'>120</a> -<a name='L121'></a><a href='#L121'>121</a> -<a name='L122'></a><a href='#L122'>122</a> -<a name='L123'></a><a href='#L123'>123</a> -<a name='L124'></a><a href='#L124'>124</a> -<a name='L125'></a><a href='#L125'>125</a> -<a name='L126'></a><a href='#L126'>126</a> -<a name='L127'></a><a href='#L127'>127</a> -<a name='L128'></a><a href='#L128'>128</a> -<a name='L129'></a><a href='#L129'>129</a> -<a name='L130'></a><a href='#L130'>130</a> -<a name='L131'></a><a href='#L131'>131</a> -<a name='L132'></a><a href='#L132'>132</a> -<a name='L133'></a><a href='#L133'>133</a> -<a name='L134'></a><a href='#L134'>134</a> -<a name='L135'></a><a href='#L135'>135</a> -<a name='L136'></a><a href='#L136'>136</a> -<a name='L137'></a><a href='#L137'>137</a> -<a name='L138'></a><a href='#L138'>138</a> -<a name='L139'></a><a href='#L139'>139</a> -<a name='L140'></a><a href='#L140'>140</a> -<a name='L141'></a><a href='#L141'>141</a> -<a name='L142'></a><a href='#L142'>142</a> -<a name='L143'></a><a href='#L143'>143</a> -<a name='L144'></a><a href='#L144'>144</a> -<a name='L145'></a><a href='#L145'>145</a> -<a name='L146'></a><a href='#L146'>146</a> -<a name='L147'></a><a href='#L147'>147</a> -<a name='L148'></a><a href='#L148'>148</a> -<a name='L149'></a><a href='#L149'>149</a> -<a name='L150'></a><a href='#L150'>150</a> -<a name='L151'></a><a href='#L151'>151</a> -<a name='L152'></a><a href='#L152'>152</a> -<a name='L153'></a><a href='#L153'>153</a> -<a name='L154'></a><a href='#L154'>154</a> -<a name='L155'></a><a href='#L155'>155</a> -<a name='L156'></a><a href='#L156'>156</a> -<a name='L157'></a><a href='#L157'>157</a> -<a name='L158'></a><a href='#L158'>158</a> -<a name='L159'></a><a href='#L159'>159</a> -<a name='L160'></a><a href='#L160'>160</a> -<a name='L161'></a><a href='#L161'>161</a> -<a name='L162'></a><a href='#L162'>162</a> -<a name='L163'></a><a href='#L163'>163</a> -<a name='L164'></a><a href='#L164'>164</a> -<a name='L165'></a><a href='#L165'>165</a> -<a name='L166'></a><a href='#L166'>166</a> -<a name='L167'></a><a href='#L167'>167</a> -<a name='L168'></a><a href='#L168'>168</a> -<a name='L169'></a><a href='#L169'>169</a> -<a name='L170'></a><a href='#L170'>170</a> -<a name='L171'></a><a href='#L171'>171</a> -<a name='L172'></a><a href='#L172'>172</a> -<a name='L173'></a><a href='#L173'>173</a> -<a name='L174'></a><a href='#L174'>174</a> -<a name='L175'></a><a href='#L175'>175</a> -<a name='L176'></a><a href='#L176'>176</a> -<a name='L177'></a><a href='#L177'>177</a> -<a name='L178'></a><a href='#L178'>178</a> -<a name='L179'></a><a href='#L179'>179</a> -<a name='L180'></a><a href='#L180'>180</a> -<a name='L181'></a><a href='#L181'>181</a> -<a name='L182'></a><a href='#L182'>182</a> -<a name='L183'></a><a href='#L183'>183</a> -<a name='L184'></a><a href='#L184'>184</a> -<a name='L185'></a><a href='#L185'>185</a> -<a name='L186'></a><a href='#L186'>186</a> -<a name='L187'></a><a href='#L187'>187</a> -<a name='L188'></a><a href='#L188'>188</a> -<a name='L189'></a><a href='#L189'>189</a> -<a name='L190'></a><a href='#L190'>190</a> -<a name='L191'></a><a href='#L191'>191</a> -<a name='L192'></a><a href='#L192'>192</a> -<a name='L193'></a><a href='#L193'>193</a> -<a name='L194'></a><a href='#L194'>194</a> -<a name='L195'></a><a href='#L195'>195</a> -<a name='L196'></a><a href='#L196'>196</a> -<a name='L197'></a><a href='#L197'>197</a> -<a name='L198'></a><a href='#L198'>198</a> -<a name='L199'></a><a href='#L199'>199</a> -<a name='L200'></a><a href='#L200'>200</a> -<a name='L201'></a><a href='#L201'>201</a> -<a name='L202'></a><a href='#L202'>202</a> -<a name='L203'></a><a href='#L203'>203</a> -<a name='L204'></a><a href='#L204'>204</a> -<a name='L205'></a><a href='#L205'>205</a> -<a name='L206'></a><a href='#L206'>206</a> -<a name='L207'></a><a href='#L207'>207</a> -<a name='L208'></a><a href='#L208'>208</a> -<a name='L209'></a><a href='#L209'>209</a> -<a name='L210'></a><a href='#L210'>210</a> -<a name='L211'></a><a href='#L211'>211</a> -<a name='L212'></a><a href='#L212'>212</a> -<a name='L213'></a><a href='#L213'>213</a> -<a name='L214'></a><a href='#L214'>214</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">.feed-list { - padding: 1rem; - font-family: var(--font-heading); - color: #777; - /* specific v1 color */ - font-size: 0.8rem; - background: var(--sidebar-bg); - min-height: 100%; - flex: 1; -} - -.feed-list h1.logo { - font-size: 2rem; - /* match v1 */ - margin: 0 0 1rem 0; - line-height: 1; - cursor: pointer; - position: sticky; - top: 0; - background: var(--sidebar-bg); - z-index: 10; - padding-bottom: 0.5rem; - color: var(--text-color); -} - -/* Override logo color if necessary for themes */ -.theme-light .feed-list h1.logo { - color: #333; -} - -.theme-dark .feed-list h1.logo { - color: #eee; -} - -.search-section { - margin-bottom: 1rem; -} - -.search-input { - width: 100%; - padding: 0.25rem; - border: 1px solid var(--border-color, #999); - background: var(--bg-color); - color: var(--text-color); - font-size: 0.8rem; - font-family: inherit; - border-radius: 0; - /* v1 didn't have rounded inputs usually */ -} - -.section-header { - font-size: 1rem; - /* v1 h4 size? */ - font-weight: bold; - margin: 1rem 0 0.25rem 0; - cursor: pointer; - user-select: none; - font-family: var(--font-heading); - color: #333; - /* Darker than list items */ - text-transform: lowercase; - font-variant: small-caps; - display: flex; - align-items: center; - gap: 0.5rem; -} - -.caret { - display: inline-block; - font-size: 0.6rem; - transition: transform 0.2s ease; - color: #777; -} - -.caret.expanded { - transform: rotate(90deg); -} - -.filter-list, -.tag-list-items, -.feed-list-items, -.nav-list { - list-style: none; - padding: 0; - margin: 0; -} - -.filter-list li, -.nav-list li { - margin-bottom: 0.1rem; -} - -.filter-list a, -.nav-list a, -.tag-link, -.feed-title, -.logout-link { - text-decoration: none; - color: var(--link-color, blue); - font-size: 0.8rem; - /* Matches v1 .75em approx */ - display: block; - cursor: pointer; - background: none; - border: none; - padding: 0; - font-family: inherit; - font-variant: small-caps; - text-transform: lowercase; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.filter-list a:hover, -.nav-list a:hover, -.tag-link:hover, -.feed-title:hover, -.logout-link:hover { - text-decoration: underline; - color: var(--link-color, blue); -} - -.filter-list a.active, -.tag-link.active, -.feed-title.active { - font-weight: bold; - color: #000; - /* Active state black */ -} - -.tag-item, -.sidebar-feed-item { - margin-bottom: 0; -} - -.feed-category { - display: none; -} - -.nav-section { - margin-top: 2rem; - border-top: 1px solid var(--border-color, #eee); - padding-top: 1rem; -} - -.logout-link { - text-align: left; - width: 100%; - color: #777; - display: block; -} - -.nav-link, -.logout-link { - padding: 0.25rem 0; -} - -.logout-link:hover { - color: var(--link-color, blue); - text-decoration: underline; -} - -.theme-section { - margin-top: 1rem; -} - -.theme-selector { - display: flex; - gap: 0.5rem; - margin-top: 0.5rem; -} - -.theme-selector button { - background: rgba(0, 0, 0, 0.05); - border: none; - cursor: pointer; - padding: 0.4rem; - font-size: 1rem; - border-radius: 8px; - line-height: 1; - transition: all 0.2s ease; - display: flex; - align-items: center; - justify-content: center; -} - -.theme-selector button:hover { - background: rgba(0, 0, 0, 0.1); - transform: translateY(-2px); -} - -.theme-selector button.active { - background: var(--border-color, #999); - color: white; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); -} - -.theme-dark .theme-selector button { - background: rgba(255, 255, 255, 0.1); -} - -.theme-dark .theme-selector button:hover { - background: rgba(255, 255, 255, 0.2); -} - -/* Scrollbar styling for webkit */ -.dashboard-sidebar::-webkit-scrollbar { - width: 4px; -} - -.dashboard-sidebar::-webkit-scrollbar-thumb { - background-color: var(--border-color, #999); -}</pre></td></tr></table></pre> - - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="../../prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="../../sorter.js"></script> - <script src="../../block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file diff --git a/frontend/coverage/src/components/FeedList.tsx.html b/frontend/coverage/src/components/FeedList.tsx.html deleted file mode 100644 index 4061422..0000000 --- a/frontend/coverage/src/components/FeedList.tsx.html +++ /dev/null @@ -1,721 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for src/components/FeedList.tsx</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="../../prettify.css" /> - <link rel="stylesheet" href="../../base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(../../sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1><a href="../../index.html">All files</a> / <a href="index.html">src/components</a> FeedList.tsx</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">87.27% </span> - <span class="quiet">Statements</span> - <span class='fraction'>48/55</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">70% </span> - <span class="quiet">Branches</span> - <span class='fraction'>35/50</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">78.94% </span> - <span class="quiet">Functions</span> - <span class='fraction'>15/19</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">90% </span> - <span class="quiet">Lines</span> - <span class='fraction'>45/50</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line high'></div> - <pre><table class="coverage"> -<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> -<a name='L2'></a><a href='#L2'>2</a> -<a name='L3'></a><a href='#L3'>3</a> -<a name='L4'></a><a href='#L4'>4</a> -<a name='L5'></a><a href='#L5'>5</a> -<a name='L6'></a><a href='#L6'>6</a> -<a name='L7'></a><a href='#L7'>7</a> -<a name='L8'></a><a href='#L8'>8</a> -<a name='L9'></a><a href='#L9'>9</a> -<a name='L10'></a><a href='#L10'>10</a> -<a name='L11'></a><a href='#L11'>11</a> -<a name='L12'></a><a href='#L12'>12</a> -<a name='L13'></a><a href='#L13'>13</a> -<a name='L14'></a><a href='#L14'>14</a> -<a name='L15'></a><a href='#L15'>15</a> -<a name='L16'></a><a href='#L16'>16</a> -<a name='L17'></a><a href='#L17'>17</a> -<a name='L18'></a><a href='#L18'>18</a> -<a name='L19'></a><a href='#L19'>19</a> -<a name='L20'></a><a href='#L20'>20</a> -<a name='L21'></a><a href='#L21'>21</a> -<a name='L22'></a><a href='#L22'>22</a> -<a name='L23'></a><a href='#L23'>23</a> -<a name='L24'></a><a href='#L24'>24</a> -<a name='L25'></a><a href='#L25'>25</a> -<a name='L26'></a><a href='#L26'>26</a> -<a name='L27'></a><a href='#L27'>27</a> -<a name='L28'></a><a href='#L28'>28</a> -<a name='L29'></a><a href='#L29'>29</a> -<a name='L30'></a><a href='#L30'>30</a> -<a name='L31'></a><a href='#L31'>31</a> -<a name='L32'></a><a href='#L32'>32</a> -<a name='L33'></a><a href='#L33'>33</a> -<a name='L34'></a><a href='#L34'>34</a> -<a name='L35'></a><a href='#L35'>35</a> -<a name='L36'></a><a href='#L36'>36</a> -<a name='L37'></a><a href='#L37'>37</a> -<a name='L38'></a><a href='#L38'>38</a> -<a name='L39'></a><a href='#L39'>39</a> -<a name='L40'></a><a href='#L40'>40</a> -<a name='L41'></a><a href='#L41'>41</a> -<a name='L42'></a><a href='#L42'>42</a> -<a name='L43'></a><a href='#L43'>43</a> -<a name='L44'></a><a href='#L44'>44</a> -<a name='L45'></a><a href='#L45'>45</a> -<a name='L46'></a><a href='#L46'>46</a> -<a name='L47'></a><a href='#L47'>47</a> -<a name='L48'></a><a href='#L48'>48</a> -<a name='L49'></a><a href='#L49'>49</a> -<a name='L50'></a><a href='#L50'>50</a> -<a name='L51'></a><a href='#L51'>51</a> -<a name='L52'></a><a href='#L52'>52</a> -<a name='L53'></a><a href='#L53'>53</a> -<a name='L54'></a><a href='#L54'>54</a> -<a name='L55'></a><a href='#L55'>55</a> -<a name='L56'></a><a href='#L56'>56</a> -<a name='L57'></a><a href='#L57'>57</a> -<a name='L58'></a><a href='#L58'>58</a> -<a name='L59'></a><a href='#L59'>59</a> -<a name='L60'></a><a href='#L60'>60</a> -<a name='L61'></a><a href='#L61'>61</a> -<a name='L62'></a><a href='#L62'>62</a> -<a name='L63'></a><a href='#L63'>63</a> -<a name='L64'></a><a href='#L64'>64</a> -<a name='L65'></a><a href='#L65'>65</a> -<a name='L66'></a><a href='#L66'>66</a> -<a name='L67'></a><a href='#L67'>67</a> -<a name='L68'></a><a href='#L68'>68</a> -<a name='L69'></a><a href='#L69'>69</a> -<a name='L70'></a><a href='#L70'>70</a> -<a name='L71'></a><a href='#L71'>71</a> -<a name='L72'></a><a href='#L72'>72</a> -<a name='L73'></a><a href='#L73'>73</a> -<a name='L74'></a><a href='#L74'>74</a> -<a name='L75'></a><a href='#L75'>75</a> -<a name='L76'></a><a href='#L76'>76</a> -<a name='L77'></a><a href='#L77'>77</a> -<a name='L78'></a><a href='#L78'>78</a> -<a name='L79'></a><a href='#L79'>79</a> -<a name='L80'></a><a href='#L80'>80</a> -<a name='L81'></a><a href='#L81'>81</a> -<a name='L82'></a><a href='#L82'>82</a> -<a name='L83'></a><a href='#L83'>83</a> -<a name='L84'></a><a href='#L84'>84</a> -<a name='L85'></a><a href='#L85'>85</a> -<a name='L86'></a><a href='#L86'>86</a> -<a name='L87'></a><a href='#L87'>87</a> -<a name='L88'></a><a href='#L88'>88</a> -<a name='L89'></a><a href='#L89'>89</a> -<a name='L90'></a><a href='#L90'>90</a> -<a name='L91'></a><a href='#L91'>91</a> -<a name='L92'></a><a href='#L92'>92</a> -<a name='L93'></a><a href='#L93'>93</a> -<a name='L94'></a><a href='#L94'>94</a> -<a name='L95'></a><a href='#L95'>95</a> -<a name='L96'></a><a href='#L96'>96</a> -<a name='L97'></a><a href='#L97'>97</a> -<a name='L98'></a><a href='#L98'>98</a> -<a name='L99'></a><a href='#L99'>99</a> -<a name='L100'></a><a href='#L100'>100</a> -<a name='L101'></a><a href='#L101'>101</a> -<a name='L102'></a><a href='#L102'>102</a> -<a name='L103'></a><a href='#L103'>103</a> -<a name='L104'></a><a href='#L104'>104</a> -<a name='L105'></a><a href='#L105'>105</a> -<a name='L106'></a><a href='#L106'>106</a> -<a name='L107'></a><a href='#L107'>107</a> -<a name='L108'></a><a href='#L108'>108</a> -<a name='L109'></a><a href='#L109'>109</a> -<a name='L110'></a><a href='#L110'>110</a> -<a name='L111'></a><a href='#L111'>111</a> -<a name='L112'></a><a href='#L112'>112</a> -<a name='L113'></a><a href='#L113'>113</a> -<a name='L114'></a><a href='#L114'>114</a> -<a name='L115'></a><a href='#L115'>115</a> -<a name='L116'></a><a href='#L116'>116</a> -<a name='L117'></a><a href='#L117'>117</a> -<a name='L118'></a><a href='#L118'>118</a> -<a name='L119'></a><a href='#L119'>119</a> -<a name='L120'></a><a href='#L120'>120</a> -<a name='L121'></a><a href='#L121'>121</a> -<a name='L122'></a><a href='#L122'>122</a> -<a name='L123'></a><a href='#L123'>123</a> -<a name='L124'></a><a href='#L124'>124</a> -<a name='L125'></a><a href='#L125'>125</a> -<a name='L126'></a><a href='#L126'>126</a> -<a name='L127'></a><a href='#L127'>127</a> -<a name='L128'></a><a href='#L128'>128</a> -<a name='L129'></a><a href='#L129'>129</a> -<a name='L130'></a><a href='#L130'>130</a> -<a name='L131'></a><a href='#L131'>131</a> -<a name='L132'></a><a href='#L132'>132</a> -<a name='L133'></a><a href='#L133'>133</a> -<a name='L134'></a><a href='#L134'>134</a> -<a name='L135'></a><a href='#L135'>135</a> -<a name='L136'></a><a href='#L136'>136</a> -<a name='L137'></a><a href='#L137'>137</a> -<a name='L138'></a><a href='#L138'>138</a> -<a name='L139'></a><a href='#L139'>139</a> -<a name='L140'></a><a href='#L140'>140</a> -<a name='L141'></a><a href='#L141'>141</a> -<a name='L142'></a><a href='#L142'>142</a> -<a name='L143'></a><a href='#L143'>143</a> -<a name='L144'></a><a href='#L144'>144</a> -<a name='L145'></a><a href='#L145'>145</a> -<a name='L146'></a><a href='#L146'>146</a> -<a name='L147'></a><a href='#L147'>147</a> -<a name='L148'></a><a href='#L148'>148</a> -<a name='L149'></a><a href='#L149'>149</a> -<a name='L150'></a><a href='#L150'>150</a> -<a name='L151'></a><a href='#L151'>151</a> -<a name='L152'></a><a href='#L152'>152</a> -<a name='L153'></a><a href='#L153'>153</a> -<a name='L154'></a><a href='#L154'>154</a> -<a name='L155'></a><a href='#L155'>155</a> -<a name='L156'></a><a href='#L156'>156</a> -<a name='L157'></a><a href='#L157'>157</a> -<a name='L158'></a><a href='#L158'>158</a> -<a name='L159'></a><a href='#L159'>159</a> -<a name='L160'></a><a href='#L160'>160</a> -<a name='L161'></a><a href='#L161'>161</a> -<a name='L162'></a><a href='#L162'>162</a> -<a name='L163'></a><a href='#L163'>163</a> -<a name='L164'></a><a href='#L164'>164</a> -<a name='L165'></a><a href='#L165'>165</a> -<a name='L166'></a><a href='#L166'>166</a> -<a name='L167'></a><a href='#L167'>167</a> -<a name='L168'></a><a href='#L168'>168</a> -<a name='L169'></a><a href='#L169'>169</a> -<a name='L170'></a><a href='#L170'>170</a> -<a name='L171'></a><a href='#L171'>171</a> -<a name='L172'></a><a href='#L172'>172</a> -<a name='L173'></a><a href='#L173'>173</a> -<a name='L174'></a><a href='#L174'>174</a> -<a name='L175'></a><a href='#L175'>175</a> -<a name='L176'></a><a href='#L176'>176</a> -<a name='L177'></a><a href='#L177'>177</a> -<a name='L178'></a><a href='#L178'>178</a> -<a name='L179'></a><a href='#L179'>179</a> -<a name='L180'></a><a href='#L180'>180</a> -<a name='L181'></a><a href='#L181'>181</a> -<a name='L182'></a><a href='#L182'>182</a> -<a name='L183'></a><a href='#L183'>183</a> -<a name='L184'></a><a href='#L184'>184</a> -<a name='L185'></a><a href='#L185'>185</a> -<a name='L186'></a><a href='#L186'>186</a> -<a name='L187'></a><a href='#L187'>187</a> -<a name='L188'></a><a href='#L188'>188</a> -<a name='L189'></a><a href='#L189'>189</a> -<a name='L190'></a><a href='#L190'>190</a> -<a name='L191'></a><a href='#L191'>191</a> -<a name='L192'></a><a href='#L192'>192</a> -<a name='L193'></a><a href='#L193'>193</a> -<a name='L194'></a><a href='#L194'>194</a> -<a name='L195'></a><a href='#L195'>195</a> -<a name='L196'></a><a href='#L196'>196</a> -<a name='L197'></a><a href='#L197'>197</a> -<a name='L198'></a><a href='#L198'>198</a> -<a name='L199'></a><a href='#L199'>199</a> -<a name='L200'></a><a href='#L200'>200</a> -<a name='L201'></a><a href='#L201'>201</a> -<a name='L202'></a><a href='#L202'>202</a> -<a name='L203'></a><a href='#L203'>203</a> -<a name='L204'></a><a href='#L204'>204</a> -<a name='L205'></a><a href='#L205'>205</a> -<a name='L206'></a><a href='#L206'>206</a> -<a name='L207'></a><a href='#L207'>207</a> -<a name='L208'></a><a href='#L208'>208</a> -<a name='L209'></a><a href='#L209'>209</a> -<a name='L210'></a><a href='#L210'>210</a> -<a name='L211'></a><a href='#L211'>211</a> -<a name='L212'></a><a href='#L212'>212</a> -<a name='L213'></a><a href='#L213'>213</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-yes">11x</span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">9x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">7x</span> -<span class="cline-any cline-yes">7x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">7x</span> -<span class="cline-any cline-yes">7x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">7x</span> -<span class="cline-any cline-yes">7x</span> -<span class="cline-any cline-yes">7x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">22x</span> -<span class="cline-any cline-yes">13x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">12x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">12x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">4x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { useEffect, useState } from 'react'; -import { Link, useNavigate, useSearchParams, useLocation, useParams } from 'react-router-dom'; -import type { Feed, Category } from '../types'; -import './FeedList.css'; -import './FeedListVariants.css'; -import { apiFetch } from '../utils'; - -export default function FeedList({ - theme, - setTheme, - setSidebarVisible, - isMobile, -}: { - theme: string; - setTheme: (t: string) => void; - setSidebarVisible: (visible: boolean) => void; - isMobile: boolean; -}) { - const [feeds, setFeeds] = useState<Feed[]>([]); - const [tags, setTags] = useState<Category[]>([]); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(''); - const [feedsExpanded, setFeedsExpanded] = useState(false); - const [tagsExpanded, setTagsExpanded] = useState(true); - const [searchQuery, setSearchQuery] = useState(''); - const navigate = useNavigate(); - const [searchParams] = useSearchParams(); - const location = useLocation(); - const { feedId, tagName } = useParams(); - - const sidebarVariant = searchParams.get('sidebar') || localStorage.getItem('neko-sidebar-variant') || 'glass'; - - useEffect(() => { - const variant = searchParams.get('sidebar'); - <span class="missing-if-branch" title="if path not taken" >I</span>if (variant) { -<span class="cstat-no" title="statement not covered" > localStorage.setItem('neko-sidebar-variant', variant);</span> - } - }, [searchParams]); - - const currentFilter = - searchParams.get('filter') || - (location.pathname === '/' && !feedId && !tagName ? 'unread' : <span class="branch-1 cbranch-no" title="branch not covered" >'');</span> - - const handleSearch = (e: React.FormEvent) => { - e.preventDefault(); - <span class="missing-if-branch" title="else path not taken" >E</span>if (searchQuery.trim()) { - navigate(`/?q=${encodeURIComponent(searchQuery.trim())}`); - } - }; - - const toggleFeeds = () => { - setFeedsExpanded(!feedsExpanded); - }; - - const toggleTags = <span class="fstat-no" title="function not covered" >() => {</span> -<span class="cstat-no" title="statement not covered" > setTagsExpanded(!tagsExpanded);</span> - }; - - const handleLinkClick = () => { - <span class="missing-if-branch" title="else path not taken" >E</span>if (isMobile) { - setSidebarVisible(false); - } - }; - - useEffect(() => { - Promise.all([ - apiFetch('/api/feed/').then((res) => { - <span class="missing-if-branch" title="if path not taken" >I</span>if (!res.ok) <span class="cstat-no" title="statement not covered" >throw new Error('Failed to fetch feeds');</span> - return res.json() as Promise<Feed[]>; - }), - apiFetch('/api/tag').then((res) => { - <span class="missing-if-branch" title="if path not taken" >I</span>if (!res.ok) <span class="cstat-no" title="statement not covered" >throw new Error('Failed to fetch tags');</span> - return res.json() as Promise<Category[]>; - }), - ]) - .then(([feedsData, tagsData]) => { - setFeeds(feedsData); - setTags(tagsData); - setLoading(false); - }) - .catch((err) => { - setError(err.message); - setLoading(false); - }); - }, []); - - if (loading) return <div className="feed-list-loading">Loading feeds...</div>; - if (error) return <div className="feed-list-error">Error: {error}</div>; - - const handleLogout = () => { - apiFetch('/api/logout', { method: 'POST' }).then(() => (window.location.href = '/v2/login')); - }; - - return ( - <div className={`feed-list variant-${sidebarVariant}`}> - <h1 className="logo" onClick={<span class="fstat-no" title="function not covered" >() => <span class="cstat-no" title="statement not covered" >s</span>etSidebarVisible(false)}></span> - 🐱 - </h1> - - <div className="search-section"> - <form onSubmit={handleSearch} className="search-form"> - <input - type="search" - placeholder="search..." - value={searchQuery} - onChange={(e) => setSearchQuery(e.target.value)} - className="search-input" - /> - </form> - </div> - - <div className="filter-section"> - <ul className="filter-list"> - <li className="unread_filter"> - <Link to="/?filter=unread" className={currentFilter === 'unread' ? 'active' : <span class="branch-1 cbranch-no" title="branch not covered" >''} o</span>nClick={handleLinkClick}> - unread - </Link> - </li> - <li className="all_filter"> - <Link to="/?filter=all" className={currentFilter === 'all' ? <span class="branch-0 cbranch-no" title="branch not covered" >'active' : '</span>'} onClick={handleLinkClick}> - all - </Link> - </li> - <li className="starred_filter"> - <Link to="/?filter=starred" className={currentFilter === 'starred' ? <span class="branch-0 cbranch-no" title="branch not covered" >'active' : '</span>'} onClick={handleLinkClick}> - starred - </Link> - </li> - </ul> - </div> - - <div className="tag-section"> - <h4 onClick={toggleTags} className="section-header"> - <span className={`caret ${tagsExpanded ? 'expanded' : <span class="branch-1 cbranch-no" title="branch not covered" >''}</span>`}>▶</span> Tags - </h4> - {tagsExpanded && ( - <ul className="tag-list-items"> - {tags.map((tag) => ( - <li key={tag.title} className="tag-item"> - <Link - to={`/tag/${encodeURIComponent(tag.title)}`} - className={`tag-link ${tagName === tag.title ? <span class="branch-0 cbranch-no" title="branch not covered" >'active' : '</span>'}`} - onClick={handleLinkClick} - > - {tag.title} - </Link> - </li> - ))} - </ul> - )} - </div> - - <div className="feed-section"> - <h4 onClick={toggleFeeds} className="section-header"> - <span className={`caret ${feedsExpanded ? 'expanded' : ''}`}>▶</span> Feeds - </h4> - {feedsExpanded && - (feeds.length === 0 ? ( - <p>No feeds found.</p> - ) : ( - <ul className="feed-list-items"> - {feeds.map((feed) => ( - <li key={feed._id} className="sidebar-feed-item"> - <Link - to={`/feed/${feed._id}`} - className={`feed-title ${feedId === String(feed._id) ? <span class="branch-0 cbranch-no" title="branch not covered" >'active' : '</span>'}`} - onClick={handleLinkClick} - > - {feed.title || <span class="branch-1 cbranch-no" title="branch not covered" >feed.url}</span> - </Link> - </li> - ))} - </ul> - ))} - </div> - - <div className="nav-section"> - <ul className="nav-list"> - <li> - <Link to="/settings" className="nav-link" onClick={handleLinkClick}> - settings - </Link> - </li> - <li> - <button onClick={handleLogout} className="logout-link"> - logout - </button> - </li> - </ul> - </div> - - <div className="theme-section"> - <div className="theme-selector"> - <button - onClick={<span class="fstat-no" title="function not covered" >() => <span class="cstat-no" title="statement not covered" >s</span>etTheme('light')}</span> - className={theme === 'light' ? 'active' : <span class="branch-1 cbranch-no" title="branch not covered" >''}</span> - title="Light Theme" - > - ☀️ - </button> - <button - onClick={<span class="fstat-no" title="function not covered" >() => <span class="cstat-no" title="statement not covered" >s</span>etTheme('dark')}</span> - className={theme === 'dark' ? <span class="branch-0 cbranch-no" title="branch not covered" >'active' : '</span>'} - title="Dark Theme" - > - 🌙 - </button> - </div> - </div> - </div> - ); -} - </pre></td></tr></table></pre> - - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="../../prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="../../sorter.js"></script> - <script src="../../block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file diff --git a/frontend/coverage/src/components/Login.css.html b/frontend/coverage/src/components/Login.css.html deleted file mode 100644 index 140a86b..0000000 --- a/frontend/coverage/src/components/Login.css.html +++ /dev/null @@ -1,274 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for src/components/Login.css</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="../../prettify.css" /> - <link rel="stylesheet" href="../../base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(../../sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1><a href="../../index.html">All files</a> / <a href="index.html">src/components</a> Login.css</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Statements</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Branches</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Functions</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Lines</span> - <span class='fraction'>0/0</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line low'></div> - <pre><table class="coverage"> -<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> -<a name='L2'></a><a href='#L2'>2</a> -<a name='L3'></a><a href='#L3'>3</a> -<a name='L4'></a><a href='#L4'>4</a> -<a name='L5'></a><a href='#L5'>5</a> -<a name='L6'></a><a href='#L6'>6</a> -<a name='L7'></a><a href='#L7'>7</a> -<a name='L8'></a><a href='#L8'>8</a> -<a name='L9'></a><a href='#L9'>9</a> -<a name='L10'></a><a href='#L10'>10</a> -<a name='L11'></a><a href='#L11'>11</a> -<a name='L12'></a><a href='#L12'>12</a> -<a name='L13'></a><a href='#L13'>13</a> -<a name='L14'></a><a href='#L14'>14</a> -<a name='L15'></a><a href='#L15'>15</a> -<a name='L16'></a><a href='#L16'>16</a> -<a name='L17'></a><a href='#L17'>17</a> -<a name='L18'></a><a href='#L18'>18</a> -<a name='L19'></a><a href='#L19'>19</a> -<a name='L20'></a><a href='#L20'>20</a> -<a name='L21'></a><a href='#L21'>21</a> -<a name='L22'></a><a href='#L22'>22</a> -<a name='L23'></a><a href='#L23'>23</a> -<a name='L24'></a><a href='#L24'>24</a> -<a name='L25'></a><a href='#L25'>25</a> -<a name='L26'></a><a href='#L26'>26</a> -<a name='L27'></a><a href='#L27'>27</a> -<a name='L28'></a><a href='#L28'>28</a> -<a name='L29'></a><a href='#L29'>29</a> -<a name='L30'></a><a href='#L30'>30</a> -<a name='L31'></a><a href='#L31'>31</a> -<a name='L32'></a><a href='#L32'>32</a> -<a name='L33'></a><a href='#L33'>33</a> -<a name='L34'></a><a href='#L34'>34</a> -<a name='L35'></a><a href='#L35'>35</a> -<a name='L36'></a><a href='#L36'>36</a> -<a name='L37'></a><a href='#L37'>37</a> -<a name='L38'></a><a href='#L38'>38</a> -<a name='L39'></a><a href='#L39'>39</a> -<a name='L40'></a><a href='#L40'>40</a> -<a name='L41'></a><a href='#L41'>41</a> -<a name='L42'></a><a href='#L42'>42</a> -<a name='L43'></a><a href='#L43'>43</a> -<a name='L44'></a><a href='#L44'>44</a> -<a name='L45'></a><a href='#L45'>45</a> -<a name='L46'></a><a href='#L46'>46</a> -<a name='L47'></a><a href='#L47'>47</a> -<a name='L48'></a><a href='#L48'>48</a> -<a name='L49'></a><a href='#L49'>49</a> -<a name='L50'></a><a href='#L50'>50</a> -<a name='L51'></a><a href='#L51'>51</a> -<a name='L52'></a><a href='#L52'>52</a> -<a name='L53'></a><a href='#L53'>53</a> -<a name='L54'></a><a href='#L54'>54</a> -<a name='L55'></a><a href='#L55'>55</a> -<a name='L56'></a><a href='#L56'>56</a> -<a name='L57'></a><a href='#L57'>57</a> -<a name='L58'></a><a href='#L58'>58</a> -<a name='L59'></a><a href='#L59'>59</a> -<a name='L60'></a><a href='#L60'>60</a> -<a name='L61'></a><a href='#L61'>61</a> -<a name='L62'></a><a href='#L62'>62</a> -<a name='L63'></a><a href='#L63'>63</a> -<a name='L64'></a><a href='#L64'>64</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">.login-container { - display: flex; - justify-content: center; - align-items: center; - height: 100vh; - background-color: #f5f5f5; -} - -.login-form { - background: white; - padding: 2rem; - border-radius: 8px; - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); - width: 100%; - max-width: 400px; -} - -.login-form h1 { - margin-bottom: 2rem; - text-align: center; - color: #333; -} - -.form-group { - margin-bottom: 1.5rem; -} - -.form-group label { - display: block; - margin-bottom: 0.5rem; - font-weight: bold; - color: #555; -} - -.form-group input { - width: 100%; - padding: 0.75rem; - border: 1px solid #ddd; - border-radius: 4px; - font-size: 1rem; -} - -.error-message { - color: #dc3545; - margin-bottom: 1rem; - text-align: center; -} - -button[type='submit'] { - width: 100%; - padding: 0.75rem; - background-color: #007bff; - color: white; - border: none; - border-radius: 4px; - font-size: 1rem; - cursor: pointer; - transition: background-color 0.2s; -} - -button[type='submit']:hover { - background-color: #0056b3; -} - </pre></td></tr></table></pre> - - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="../../prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="../../sorter.js"></script> - <script src="../../block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file diff --git a/frontend/coverage/src/components/Login.tsx.html b/frontend/coverage/src/components/Login.tsx.html deleted file mode 100644 index 111dcba..0000000 --- a/frontend/coverage/src/components/Login.tsx.html +++ /dev/null @@ -1,286 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for src/components/Login.tsx</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="../../prettify.css" /> - <link rel="stylesheet" href="../../base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(../../sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1><a href="../../index.html">All files</a> / <a href="index.html">src/components</a> Login.tsx</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">100% </span> - <span class="quiet">Statements</span> - <span class='fraction'>20/20</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">83.33% </span> - <span class="quiet">Branches</span> - <span class='fraction'>5/6</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">100% </span> - <span class="quiet">Functions</span> - <span class='fraction'>4/4</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">100% </span> - <span class="quiet">Lines</span> - <span class='fraction'>20/20</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line high'></div> - <pre><table class="coverage"> -<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> -<a name='L2'></a><a href='#L2'>2</a> -<a name='L3'></a><a href='#L3'>3</a> -<a name='L4'></a><a href='#L4'>4</a> -<a name='L5'></a><a href='#L5'>5</a> -<a name='L6'></a><a href='#L6'>6</a> -<a name='L7'></a><a href='#L7'>7</a> -<a name='L8'></a><a href='#L8'>8</a> -<a name='L9'></a><a href='#L9'>9</a> -<a name='L10'></a><a href='#L10'>10</a> -<a name='L11'></a><a href='#L11'>11</a> -<a name='L12'></a><a href='#L12'>12</a> -<a name='L13'></a><a href='#L13'>13</a> -<a name='L14'></a><a href='#L14'>14</a> -<a name='L15'></a><a href='#L15'>15</a> -<a name='L16'></a><a href='#L16'>16</a> -<a name='L17'></a><a href='#L17'>17</a> -<a name='L18'></a><a href='#L18'>18</a> -<a name='L19'></a><a href='#L19'>19</a> -<a name='L20'></a><a href='#L20'>20</a> -<a name='L21'></a><a href='#L21'>21</a> -<a name='L22'></a><a href='#L22'>22</a> -<a name='L23'></a><a href='#L23'>23</a> -<a name='L24'></a><a href='#L24'>24</a> -<a name='L25'></a><a href='#L25'>25</a> -<a name='L26'></a><a href='#L26'>26</a> -<a name='L27'></a><a href='#L27'>27</a> -<a name='L28'></a><a href='#L28'>28</a> -<a name='L29'></a><a href='#L29'>29</a> -<a name='L30'></a><a href='#L30'>30</a> -<a name='L31'></a><a href='#L31'>31</a> -<a name='L32'></a><a href='#L32'>32</a> -<a name='L33'></a><a href='#L33'>33</a> -<a name='L34'></a><a href='#L34'>34</a> -<a name='L35'></a><a href='#L35'>35</a> -<a name='L36'></a><a href='#L36'>36</a> -<a name='L37'></a><a href='#L37'>37</a> -<a name='L38'></a><a href='#L38'>38</a> -<a name='L39'></a><a href='#L39'>39</a> -<a name='L40'></a><a href='#L40'>40</a> -<a name='L41'></a><a href='#L41'>41</a> -<a name='L42'></a><a href='#L42'>42</a> -<a name='L43'></a><a href='#L43'>43</a> -<a name='L44'></a><a href='#L44'>44</a> -<a name='L45'></a><a href='#L45'>45</a> -<a name='L46'></a><a href='#L46'>46</a> -<a name='L47'></a><a href='#L47'>47</a> -<a name='L48'></a><a href='#L48'>48</a> -<a name='L49'></a><a href='#L49'>49</a> -<a name='L50'></a><a href='#L50'>50</a> -<a name='L51'></a><a href='#L51'>51</a> -<a name='L52'></a><a href='#L52'>52</a> -<a name='L53'></a><a href='#L53'>53</a> -<a name='L54'></a><a href='#L54'>54</a> -<a name='L55'></a><a href='#L55'>55</a> -<a name='L56'></a><a href='#L56'>56</a> -<a name='L57'></a><a href='#L57'>57</a> -<a name='L58'></a><a href='#L58'>58</a> -<a name='L59'></a><a href='#L59'>59</a> -<a name='L60'></a><a href='#L60'>60</a> -<a name='L61'></a><a href='#L61'>61</a> -<a name='L62'></a><a href='#L62'>62</a> -<a name='L63'></a><a href='#L63'>63</a> -<a name='L64'></a><a href='#L64'>64</a> -<a name='L65'></a><a href='#L65'>65</a> -<a name='L66'></a><a href='#L66'>66</a> -<a name='L67'></a><a href='#L67'>67</a> -<a name='L68'></a><a href='#L68'>68</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">17x</span> -<span class="cline-any cline-yes">17x</span> -<span class="cline-any cline-yes">17x</span> -<span class="cline-any cline-yes">17x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">17x</span> -<span class="cline-any cline-yes">3x</span> -<span class="cline-any cline-yes">3x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">3x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">3x</span> -<span class="cline-any cline-yes">3x</span> -<span class="cline-any cline-yes">3x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">3x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">17x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">3x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">3x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { useState, type FormEvent } from 'react'; -import { useNavigate } from 'react-router-dom'; -import './Login.css'; - -import { apiFetch } from '../utils'; - -export default function Login() { - const [username, setUsername] = useState('neko'); - const [password, setPassword] = useState(''); - const [error, setError] = useState(''); - const navigate = useNavigate(); - - const handleSubmit = async (e: FormEvent) => { - e.preventDefault(); - setError(''); - - try { - // Use URLSearchParams to send as form-urlencoded, matching backend expectation - const params = new URLSearchParams(); - params.append('username', username); - params.append('password', password); - - const res = await apiFetch('/api/login', { - method: 'POST', - body: params, - }); - - if (res.ok) { - navigate('/'); - } else { - const data = await res.json(); - setError(data.message || <span class="branch-1 cbranch-no" title="branch not covered" >'Login failed')</span>; - } - } catch (_err) { - setError('Network error'); - } - }; - - return ( - <div className="login-container"> - <form onSubmit={handleSubmit} className="login-form"> - <h1>neko rss mode</h1> - <div className="form-group"> - <label htmlFor="username">username</label> - <input - id="username" - type="text" - value={username} - onChange={(e) => setUsername(e.target.value)} - /> - </div> - <div className="form-group"> - <label htmlFor="password">password</label> - <input - id="password" - type="password" - value={password} - onChange={(e) => setPassword(e.target.value)} - autoFocus - /> - </div> - {error && <div className="error-message">{error}</div>} - <button type="submit">login</button> - </form> - </div> - ); -} - </pre></td></tr></table></pre> - - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="../../prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="../../sorter.js"></script> - <script src="../../block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file diff --git a/frontend/coverage/src/components/Settings.css.html b/frontend/coverage/src/components/Settings.css.html deleted file mode 100644 index 4109bba..0000000 --- a/frontend/coverage/src/components/Settings.css.html +++ /dev/null @@ -1,802 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for src/components/Settings.css</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="../../prettify.css" /> - <link rel="stylesheet" href="../../base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(../../sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1><a href="../../index.html">All files</a> / <a href="index.html">src/components</a> Settings.css</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Statements</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Branches</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Functions</span> - <span class='fraction'>0/0</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">0% </span> - <span class="quiet">Lines</span> - <span class='fraction'>0/0</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line low'></div> - <pre><table class="coverage"> -<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> -<a name='L2'></a><a href='#L2'>2</a> -<a name='L3'></a><a href='#L3'>3</a> -<a name='L4'></a><a href='#L4'>4</a> -<a name='L5'></a><a href='#L5'>5</a> -<a name='L6'></a><a href='#L6'>6</a> -<a name='L7'></a><a href='#L7'>7</a> -<a name='L8'></a><a href='#L8'>8</a> -<a name='L9'></a><a href='#L9'>9</a> -<a name='L10'></a><a href='#L10'>10</a> -<a name='L11'></a><a href='#L11'>11</a> -<a name='L12'></a><a href='#L12'>12</a> -<a name='L13'></a><a href='#L13'>13</a> -<a name='L14'></a><a href='#L14'>14</a> -<a name='L15'></a><a href='#L15'>15</a> -<a name='L16'></a><a href='#L16'>16</a> -<a name='L17'></a><a href='#L17'>17</a> -<a name='L18'></a><a href='#L18'>18</a> -<a name='L19'></a><a href='#L19'>19</a> -<a name='L20'></a><a href='#L20'>20</a> -<a name='L21'></a><a href='#L21'>21</a> -<a name='L22'></a><a href='#L22'>22</a> -<a name='L23'></a><a href='#L23'>23</a> -<a name='L24'></a><a href='#L24'>24</a> -<a name='L25'></a><a href='#L25'>25</a> -<a name='L26'></a><a href='#L26'>26</a> -<a name='L27'></a><a href='#L27'>27</a> -<a name='L28'></a><a href='#L28'>28</a> -<a name='L29'></a><a href='#L29'>29</a> -<a name='L30'></a><a href='#L30'>30</a> -<a name='L31'></a><a href='#L31'>31</a> -<a name='L32'></a><a href='#L32'>32</a> -<a name='L33'></a><a href='#L33'>33</a> -<a name='L34'></a><a href='#L34'>34</a> -<a name='L35'></a><a href='#L35'>35</a> -<a name='L36'></a><a href='#L36'>36</a> -<a name='L37'></a><a href='#L37'>37</a> -<a name='L38'></a><a href='#L38'>38</a> -<a name='L39'></a><a href='#L39'>39</a> -<a name='L40'></a><a href='#L40'>40</a> -<a name='L41'></a><a href='#L41'>41</a> -<a name='L42'></a><a href='#L42'>42</a> -<a name='L43'></a><a href='#L43'>43</a> -<a name='L44'></a><a href='#L44'>44</a> -<a name='L45'></a><a href='#L45'>45</a> -<a name='L46'></a><a href='#L46'>46</a> -<a name='L47'></a><a href='#L47'>47</a> -<a name='L48'></a><a href='#L48'>48</a> -<a name='L49'></a><a href='#L49'>49</a> -<a name='L50'></a><a href='#L50'>50</a> -<a name='L51'></a><a href='#L51'>51</a> -<a name='L52'></a><a href='#L52'>52</a> -<a name='L53'></a><a href='#L53'>53</a> -<a name='L54'></a><a href='#L54'>54</a> -<a name='L55'></a><a href='#L55'>55</a> -<a name='L56'></a><a href='#L56'>56</a> -<a name='L57'></a><a href='#L57'>57</a> -<a name='L58'></a><a href='#L58'>58</a> -<a name='L59'></a><a href='#L59'>59</a> -<a name='L60'></a><a href='#L60'>60</a> -<a name='L61'></a><a href='#L61'>61</a> -<a name='L62'></a><a href='#L62'>62</a> -<a name='L63'></a><a href='#L63'>63</a> -<a name='L64'></a><a href='#L64'>64</a> -<a name='L65'></a><a href='#L65'>65</a> -<a name='L66'></a><a href='#L66'>66</a> -<a name='L67'></a><a href='#L67'>67</a> -<a name='L68'></a><a href='#L68'>68</a> -<a name='L69'></a><a href='#L69'>69</a> -<a name='L70'></a><a href='#L70'>70</a> -<a name='L71'></a><a href='#L71'>71</a> -<a name='L72'></a><a href='#L72'>72</a> -<a name='L73'></a><a href='#L73'>73</a> -<a name='L74'></a><a href='#L74'>74</a> -<a name='L75'></a><a href='#L75'>75</a> -<a name='L76'></a><a href='#L76'>76</a> -<a name='L77'></a><a href='#L77'>77</a> -<a name='L78'></a><a href='#L78'>78</a> -<a name='L79'></a><a href='#L79'>79</a> -<a name='L80'></a><a href='#L80'>80</a> -<a name='L81'></a><a href='#L81'>81</a> -<a name='L82'></a><a href='#L82'>82</a> -<a name='L83'></a><a href='#L83'>83</a> -<a name='L84'></a><a href='#L84'>84</a> -<a name='L85'></a><a href='#L85'>85</a> -<a name='L86'></a><a href='#L86'>86</a> -<a name='L87'></a><a href='#L87'>87</a> -<a name='L88'></a><a href='#L88'>88</a> -<a name='L89'></a><a href='#L89'>89</a> -<a name='L90'></a><a href='#L90'>90</a> -<a name='L91'></a><a href='#L91'>91</a> -<a name='L92'></a><a href='#L92'>92</a> -<a name='L93'></a><a href='#L93'>93</a> -<a name='L94'></a><a href='#L94'>94</a> -<a name='L95'></a><a href='#L95'>95</a> -<a name='L96'></a><a href='#L96'>96</a> -<a name='L97'></a><a href='#L97'>97</a> -<a name='L98'></a><a href='#L98'>98</a> -<a name='L99'></a><a href='#L99'>99</a> -<a name='L100'></a><a href='#L100'>100</a> -<a name='L101'></a><a href='#L101'>101</a> -<a name='L102'></a><a href='#L102'>102</a> -<a name='L103'></a><a href='#L103'>103</a> -<a name='L104'></a><a href='#L104'>104</a> -<a name='L105'></a><a href='#L105'>105</a> -<a name='L106'></a><a href='#L106'>106</a> -<a name='L107'></a><a href='#L107'>107</a> -<a name='L108'></a><a href='#L108'>108</a> -<a name='L109'></a><a href='#L109'>109</a> -<a name='L110'></a><a href='#L110'>110</a> -<a name='L111'></a><a href='#L111'>111</a> -<a name='L112'></a><a href='#L112'>112</a> -<a name='L113'></a><a href='#L113'>113</a> -<a name='L114'></a><a href='#L114'>114</a> -<a name='L115'></a><a href='#L115'>115</a> -<a name='L116'></a><a href='#L116'>116</a> -<a name='L117'></a><a href='#L117'>117</a> -<a name='L118'></a><a href='#L118'>118</a> -<a name='L119'></a><a href='#L119'>119</a> -<a name='L120'></a><a href='#L120'>120</a> -<a name='L121'></a><a href='#L121'>121</a> -<a name='L122'></a><a href='#L122'>122</a> -<a name='L123'></a><a href='#L123'>123</a> -<a name='L124'></a><a href='#L124'>124</a> -<a name='L125'></a><a href='#L125'>125</a> -<a name='L126'></a><a href='#L126'>126</a> -<a name='L127'></a><a href='#L127'>127</a> -<a name='L128'></a><a href='#L128'>128</a> -<a name='L129'></a><a href='#L129'>129</a> -<a name='L130'></a><a href='#L130'>130</a> -<a name='L131'></a><a href='#L131'>131</a> -<a name='L132'></a><a href='#L132'>132</a> -<a name='L133'></a><a href='#L133'>133</a> -<a name='L134'></a><a href='#L134'>134</a> -<a name='L135'></a><a href='#L135'>135</a> -<a name='L136'></a><a href='#L136'>136</a> -<a name='L137'></a><a href='#L137'>137</a> -<a name='L138'></a><a href='#L138'>138</a> -<a name='L139'></a><a href='#L139'>139</a> -<a name='L140'></a><a href='#L140'>140</a> -<a name='L141'></a><a href='#L141'>141</a> -<a name='L142'></a><a href='#L142'>142</a> -<a name='L143'></a><a href='#L143'>143</a> -<a name='L144'></a><a href='#L144'>144</a> -<a name='L145'></a><a href='#L145'>145</a> -<a name='L146'></a><a href='#L146'>146</a> -<a name='L147'></a><a href='#L147'>147</a> -<a name='L148'></a><a href='#L148'>148</a> -<a name='L149'></a><a href='#L149'>149</a> -<a name='L150'></a><a href='#L150'>150</a> -<a name='L151'></a><a href='#L151'>151</a> -<a name='L152'></a><a href='#L152'>152</a> -<a name='L153'></a><a href='#L153'>153</a> -<a name='L154'></a><a href='#L154'>154</a> -<a name='L155'></a><a href='#L155'>155</a> -<a name='L156'></a><a href='#L156'>156</a> -<a name='L157'></a><a href='#L157'>157</a> -<a name='L158'></a><a href='#L158'>158</a> -<a name='L159'></a><a href='#L159'>159</a> -<a name='L160'></a><a href='#L160'>160</a> -<a name='L161'></a><a href='#L161'>161</a> -<a name='L162'></a><a href='#L162'>162</a> -<a name='L163'></a><a href='#L163'>163</a> -<a name='L164'></a><a href='#L164'>164</a> -<a name='L165'></a><a href='#L165'>165</a> -<a name='L166'></a><a href='#L166'>166</a> -<a name='L167'></a><a href='#L167'>167</a> -<a name='L168'></a><a href='#L168'>168</a> -<a name='L169'></a><a href='#L169'>169</a> -<a name='L170'></a><a href='#L170'>170</a> -<a name='L171'></a><a href='#L171'>171</a> -<a name='L172'></a><a href='#L172'>172</a> -<a name='L173'></a><a href='#L173'>173</a> -<a name='L174'></a><a href='#L174'>174</a> -<a name='L175'></a><a href='#L175'>175</a> -<a name='L176'></a><a href='#L176'>176</a> -<a name='L177'></a><a href='#L177'>177</a> -<a name='L178'></a><a href='#L178'>178</a> -<a name='L179'></a><a href='#L179'>179</a> -<a name='L180'></a><a href='#L180'>180</a> -<a name='L181'></a><a href='#L181'>181</a> -<a name='L182'></a><a href='#L182'>182</a> -<a name='L183'></a><a href='#L183'>183</a> -<a name='L184'></a><a href='#L184'>184</a> -<a name='L185'></a><a href='#L185'>185</a> -<a name='L186'></a><a href='#L186'>186</a> -<a name='L187'></a><a href='#L187'>187</a> -<a name='L188'></a><a href='#L188'>188</a> -<a name='L189'></a><a href='#L189'>189</a> -<a name='L190'></a><a href='#L190'>190</a> -<a name='L191'></a><a href='#L191'>191</a> -<a name='L192'></a><a href='#L192'>192</a> -<a name='L193'></a><a href='#L193'>193</a> -<a name='L194'></a><a href='#L194'>194</a> -<a name='L195'></a><a href='#L195'>195</a> -<a name='L196'></a><a href='#L196'>196</a> -<a name='L197'></a><a href='#L197'>197</a> -<a name='L198'></a><a href='#L198'>198</a> -<a name='L199'></a><a href='#L199'>199</a> -<a name='L200'></a><a href='#L200'>200</a> -<a name='L201'></a><a href='#L201'>201</a> -<a name='L202'></a><a href='#L202'>202</a> -<a name='L203'></a><a href='#L203'>203</a> -<a name='L204'></a><a href='#L204'>204</a> -<a name='L205'></a><a href='#L205'>205</a> -<a name='L206'></a><a href='#L206'>206</a> -<a name='L207'></a><a href='#L207'>207</a> -<a name='L208'></a><a href='#L208'>208</a> -<a name='L209'></a><a href='#L209'>209</a> -<a name='L210'></a><a href='#L210'>210</a> -<a name='L211'></a><a href='#L211'>211</a> -<a name='L212'></a><a href='#L212'>212</a> -<a name='L213'></a><a href='#L213'>213</a> -<a name='L214'></a><a href='#L214'>214</a> -<a name='L215'></a><a href='#L215'>215</a> -<a name='L216'></a><a href='#L216'>216</a> -<a name='L217'></a><a href='#L217'>217</a> -<a name='L218'></a><a href='#L218'>218</a> -<a name='L219'></a><a href='#L219'>219</a> -<a name='L220'></a><a href='#L220'>220</a> -<a name='L221'></a><a href='#L221'>221</a> -<a name='L222'></a><a href='#L222'>222</a> -<a name='L223'></a><a href='#L223'>223</a> -<a name='L224'></a><a href='#L224'>224</a> -<a name='L225'></a><a href='#L225'>225</a> -<a name='L226'></a><a href='#L226'>226</a> -<a name='L227'></a><a href='#L227'>227</a> -<a name='L228'></a><a href='#L228'>228</a> -<a name='L229'></a><a href='#L229'>229</a> -<a name='L230'></a><a href='#L230'>230</a> -<a name='L231'></a><a href='#L231'>231</a> -<a name='L232'></a><a href='#L232'>232</a> -<a name='L233'></a><a href='#L233'>233</a> -<a name='L234'></a><a href='#L234'>234</a> -<a name='L235'></a><a href='#L235'>235</a> -<a name='L236'></a><a href='#L236'>236</a> -<a name='L237'></a><a href='#L237'>237</a> -<a name='L238'></a><a href='#L238'>238</a> -<a name='L239'></a><a href='#L239'>239</a> -<a name='L240'></a><a href='#L240'>240</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">.settings-page.variant-glass { - padding: 2.5rem; - max-width: 800px; - margin: 0 auto; - background: rgba(255, 255, 255, 0.05); - backdrop-filter: blur(12px); - -webkit-backdrop-filter: blur(12px); - border-radius: 24px; - border: 1px solid rgba(255, 255, 255, 0.1); - font-family: system-ui, -apple-system, sans-serif; - color: var(--text-color); - margin-top: 2rem; - margin-bottom: 2rem; -} - -.settings-page.variant-glass h2, -.settings-page.variant-glass h3 { - font-weight: 700; - letter-spacing: -0.02em; - color: var(--text-color); - opacity: 0.9; -} - -.add-feed-section, -.appearance-section, -.import-section, -.export-section, -.feed-list-section { - background: rgba(255, 255, 255, 0.03); - padding: 1.5rem; - border-radius: 16px; - margin-bottom: 2rem; - border: 1px solid rgba(255, 255, 255, 0.05); - transition: all 0.3s ease; -} - -.add-feed-section:hover, -.appearance-section:hover, -.import-section:hover, -.export-section:hover, -.feed-list-section:hover { - background: rgba(255, 255, 255, 0.06); - border-color: rgba(255, 255, 255, 0.1); -} - -.font-selector { - display: flex; - align-items: center; - gap: 1rem; -} - -.font-select { - padding: 0.6rem 1rem; - border: 1px solid rgba(255, 255, 255, 0.1); - background: rgba(0, 0, 0, 0.1); - color: var(--text-color); - border-radius: 20px; - font-size: 1rem; - min-width: 200px; - cursor: pointer; - outline: none; - transition: border-color 0.2s; -} - -.font-select:focus { - border-color: rgba(255, 255, 255, 0.3); -} - -.add-feed-form { - display: flex; - gap: 1rem; -} - -.feed-input { - flex: 1; - padding: 0.6rem 1.2rem; - border: 1px solid rgba(255, 255, 255, 0.1); - background: rgba(0, 0, 0, 0.1); - color: var(--text-color); - border-radius: 20px; - font-size: 1rem; - outline: none; - transition: border-color 0.2s; -} - -.feed-input:focus { - border-color: rgba(255, 255, 255, 0.3); -} - -.error-message { - color: #ff5252; - margin-top: 1rem; - font-weight: 600; -} - -.settings-feed-list { - list-style: none; - padding: 0; - border: 1px solid rgba(255, 255, 255, 0.05); - border-radius: 12px; - overflow: hidden; -} - -.settings-feed-item { - display: flex; - justify-content: space-between; - align-items: center; - padding: 1.2rem; - border-bottom: 1px solid rgba(255, 255, 255, 0.05); - transition: background 0.2s; -} - -.settings-feed-item:hover { - background: rgba(255, 255, 255, 0.02); -} - -.settings-feed-item:last-child { - border-bottom: none; -} - -.feed-info { - display: flex; - flex-direction: column; - gap: 0.2rem; -} - -.feed-title { - font-weight: 600; - font-size: 1.05rem; - opacity: 0.9; -} - -.feed-url { - color: var(--text-color); - opacity: 0.5; - font-size: 0.85rem; -} - -.delete-btn { - background: rgba(255, 82, 82, 0.15); - color: #ff8a80; - border: 1px solid rgba(255, 82, 82, 0.2); - padding: 0.5rem 1rem; - border-radius: 12px; - cursor: pointer; - font-weight: 600; - transition: all 0.2s; -} - -.delete-btn:hover:not(:disabled) { - background: rgba(255, 82, 82, 0.3); - color: #fff; - border-color: rgba(255, 82, 82, 0.4); - transform: scale(1.05); -} - -.import-export-section { - display: flex; - gap: 2rem; -} - -@media (max-width: 600px) { - .settings-page.variant-glass { - padding: 1.5rem; - margin-top: 1rem; - } - - .add-feed-form { - flex-direction: column; - } - - .import-export-section { - flex-direction: column; - gap: 1rem; - } - - .settings-feed-item { - flex-direction: column; - align-items: flex-start; - gap: 1rem; - } -} - -.import-form { - display: flex; - flex-direction: column; - gap: 1.2rem; -} - -.file-input { - font-size: 0.9rem; - max-width: 100%; - color: var(--text-color); - opacity: 0.8; -} - -.export-buttons { - display: flex; - gap: 0.8rem; - flex-wrap: wrap; -} - -.export-btn { - display: inline-block; - padding: 0.6rem 1.2rem; - background: rgba(255, 255, 255, 0.05); - color: var(--text-color); - text-decoration: none; - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 12px; - font-weight: 600; - transition: all 0.2s; -} - -.export-btn:hover { - background: rgba(255, 255, 255, 0.1); - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); -} - -button:not(.delete-btn) { - cursor: pointer; - padding: 0.6rem 1.2rem; - border-radius: 12px; - border: 1px solid rgba(255, 255, 255, 0.1); - background: rgba(255, 255, 255, 0.1); - color: var(--text-color); - font-weight: 600; - transition: all 0.2s; -} - -button:not(.delete-btn):hover:not(:disabled) { - background: rgba(255, 255, 255, 0.2); - transform: scale(1.02); -} - -button:disabled { - opacity: 0.4; - cursor: not-allowed; -}</pre></td></tr></table></pre> - - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="../../prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="../../sorter.js"></script> - <script src="../../block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file diff --git a/frontend/coverage/src/components/Settings.tsx.html b/frontend/coverage/src/components/Settings.tsx.html deleted file mode 100644 index 892218e..0000000 --- a/frontend/coverage/src/components/Settings.tsx.html +++ /dev/null @@ -1,793 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for src/components/Settings.tsx</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="../../prettify.css" /> - <link rel="stylesheet" href="../../base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(../../sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1><a href="../../index.html">All files</a> / <a href="index.html">src/components</a> Settings.tsx</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">80% </span> - <span class="quiet">Statements</span> - <span class='fraction'>60/75</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">66.66% </span> - <span class="quiet">Branches</span> - <span class='fraction'>20/30</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">85.18% </span> - <span class="quiet">Functions</span> - <span class='fraction'>23/27</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">87.87% </span> - <span class="quiet">Lines</span> - <span class='fraction'>58/66</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line high'></div> - <pre><table class="coverage"> -<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> -<a name='L2'></a><a href='#L2'>2</a> -<a name='L3'></a><a href='#L3'>3</a> -<a name='L4'></a><a href='#L4'>4</a> -<a name='L5'></a><a href='#L5'>5</a> -<a name='L6'></a><a href='#L6'>6</a> -<a name='L7'></a><a href='#L7'>7</a> -<a name='L8'></a><a href='#L8'>8</a> -<a name='L9'></a><a href='#L9'>9</a> -<a name='L10'></a><a href='#L10'>10</a> -<a name='L11'></a><a href='#L11'>11</a> -<a name='L12'></a><a href='#L12'>12</a> -<a name='L13'></a><a href='#L13'>13</a> -<a name='L14'></a><a href='#L14'>14</a> -<a name='L15'></a><a href='#L15'>15</a> -<a name='L16'></a><a href='#L16'>16</a> -<a name='L17'></a><a href='#L17'>17</a> -<a name='L18'></a><a href='#L18'>18</a> -<a name='L19'></a><a href='#L19'>19</a> -<a name='L20'></a><a href='#L20'>20</a> -<a name='L21'></a><a href='#L21'>21</a> -<a name='L22'></a><a href='#L22'>22</a> -<a name='L23'></a><a href='#L23'>23</a> -<a name='L24'></a><a href='#L24'>24</a> -<a name='L25'></a><a href='#L25'>25</a> -<a name='L26'></a><a href='#L26'>26</a> -<a name='L27'></a><a href='#L27'>27</a> -<a name='L28'></a><a href='#L28'>28</a> -<a name='L29'></a><a href='#L29'>29</a> -<a name='L30'></a><a href='#L30'>30</a> -<a name='L31'></a><a href='#L31'>31</a> -<a name='L32'></a><a href='#L32'>32</a> -<a name='L33'></a><a href='#L33'>33</a> -<a name='L34'></a><a href='#L34'>34</a> -<a name='L35'></a><a href='#L35'>35</a> -<a name='L36'></a><a href='#L36'>36</a> -<a name='L37'></a><a href='#L37'>37</a> -<a name='L38'></a><a href='#L38'>38</a> -<a name='L39'></a><a href='#L39'>39</a> -<a name='L40'></a><a href='#L40'>40</a> -<a name='L41'></a><a href='#L41'>41</a> -<a name='L42'></a><a href='#L42'>42</a> -<a name='L43'></a><a href='#L43'>43</a> -<a name='L44'></a><a href='#L44'>44</a> -<a name='L45'></a><a href='#L45'>45</a> -<a name='L46'></a><a href='#L46'>46</a> -<a name='L47'></a><a href='#L47'>47</a> -<a name='L48'></a><a href='#L48'>48</a> -<a name='L49'></a><a href='#L49'>49</a> -<a name='L50'></a><a href='#L50'>50</a> -<a name='L51'></a><a href='#L51'>51</a> -<a name='L52'></a><a href='#L52'>52</a> -<a name='L53'></a><a href='#L53'>53</a> -<a name='L54'></a><a href='#L54'>54</a> -<a name='L55'></a><a href='#L55'>55</a> -<a name='L56'></a><a href='#L56'>56</a> -<a name='L57'></a><a href='#L57'>57</a> -<a name='L58'></a><a href='#L58'>58</a> -<a name='L59'></a><a href='#L59'>59</a> -<a name='L60'></a><a href='#L60'>60</a> -<a name='L61'></a><a href='#L61'>61</a> -<a name='L62'></a><a href='#L62'>62</a> -<a name='L63'></a><a href='#L63'>63</a> -<a name='L64'></a><a href='#L64'>64</a> -<a name='L65'></a><a href='#L65'>65</a> -<a name='L66'></a><a href='#L66'>66</a> -<a name='L67'></a><a href='#L67'>67</a> -<a name='L68'></a><a href='#L68'>68</a> -<a name='L69'></a><a href='#L69'>69</a> -<a name='L70'></a><a href='#L70'>70</a> -<a name='L71'></a><a href='#L71'>71</a> -<a name='L72'></a><a href='#L72'>72</a> -<a name='L73'></a><a href='#L73'>73</a> -<a name='L74'></a><a href='#L74'>74</a> -<a name='L75'></a><a href='#L75'>75</a> -<a name='L76'></a><a href='#L76'>76</a> -<a name='L77'></a><a href='#L77'>77</a> -<a name='L78'></a><a href='#L78'>78</a> -<a name='L79'></a><a href='#L79'>79</a> -<a name='L80'></a><a href='#L80'>80</a> -<a name='L81'></a><a href='#L81'>81</a> -<a name='L82'></a><a href='#L82'>82</a> -<a name='L83'></a><a href='#L83'>83</a> -<a name='L84'></a><a href='#L84'>84</a> -<a name='L85'></a><a href='#L85'>85</a> -<a name='L86'></a><a href='#L86'>86</a> -<a name='L87'></a><a href='#L87'>87</a> -<a name='L88'></a><a href='#L88'>88</a> -<a name='L89'></a><a href='#L89'>89</a> -<a name='L90'></a><a href='#L90'>90</a> -<a name='L91'></a><a href='#L91'>91</a> -<a name='L92'></a><a href='#L92'>92</a> -<a name='L93'></a><a href='#L93'>93</a> -<a name='L94'></a><a href='#L94'>94</a> -<a name='L95'></a><a href='#L95'>95</a> -<a name='L96'></a><a href='#L96'>96</a> -<a name='L97'></a><a href='#L97'>97</a> -<a name='L98'></a><a href='#L98'>98</a> -<a name='L99'></a><a href='#L99'>99</a> -<a name='L100'></a><a href='#L100'>100</a> -<a name='L101'></a><a href='#L101'>101</a> -<a name='L102'></a><a href='#L102'>102</a> -<a name='L103'></a><a href='#L103'>103</a> -<a name='L104'></a><a href='#L104'>104</a> -<a name='L105'></a><a href='#L105'>105</a> -<a name='L106'></a><a href='#L106'>106</a> -<a name='L107'></a><a href='#L107'>107</a> -<a name='L108'></a><a href='#L108'>108</a> -<a name='L109'></a><a href='#L109'>109</a> -<a name='L110'></a><a href='#L110'>110</a> -<a name='L111'></a><a href='#L111'>111</a> -<a name='L112'></a><a href='#L112'>112</a> -<a name='L113'></a><a href='#L113'>113</a> -<a name='L114'></a><a href='#L114'>114</a> -<a name='L115'></a><a href='#L115'>115</a> -<a name='L116'></a><a href='#L116'>116</a> -<a name='L117'></a><a href='#L117'>117</a> -<a name='L118'></a><a href='#L118'>118</a> -<a name='L119'></a><a href='#L119'>119</a> -<a name='L120'></a><a href='#L120'>120</a> -<a name='L121'></a><a href='#L121'>121</a> -<a name='L122'></a><a href='#L122'>122</a> -<a name='L123'></a><a href='#L123'>123</a> -<a name='L124'></a><a href='#L124'>124</a> -<a name='L125'></a><a href='#L125'>125</a> -<a name='L126'></a><a href='#L126'>126</a> -<a name='L127'></a><a href='#L127'>127</a> -<a name='L128'></a><a href='#L128'>128</a> -<a name='L129'></a><a href='#L129'>129</a> -<a name='L130'></a><a href='#L130'>130</a> -<a name='L131'></a><a href='#L131'>131</a> -<a name='L132'></a><a href='#L132'>132</a> -<a name='L133'></a><a href='#L133'>133</a> -<a name='L134'></a><a href='#L134'>134</a> -<a name='L135'></a><a href='#L135'>135</a> -<a name='L136'></a><a href='#L136'>136</a> -<a name='L137'></a><a href='#L137'>137</a> -<a name='L138'></a><a href='#L138'>138</a> -<a name='L139'></a><a href='#L139'>139</a> -<a name='L140'></a><a href='#L140'>140</a> -<a name='L141'></a><a href='#L141'>141</a> -<a name='L142'></a><a href='#L142'>142</a> -<a name='L143'></a><a href='#L143'>143</a> -<a name='L144'></a><a href='#L144'>144</a> -<a name='L145'></a><a href='#L145'>145</a> -<a name='L146'></a><a href='#L146'>146</a> -<a name='L147'></a><a href='#L147'>147</a> -<a name='L148'></a><a href='#L148'>148</a> -<a name='L149'></a><a href='#L149'>149</a> -<a name='L150'></a><a href='#L150'>150</a> -<a name='L151'></a><a href='#L151'>151</a> -<a name='L152'></a><a href='#L152'>152</a> -<a name='L153'></a><a href='#L153'>153</a> -<a name='L154'></a><a href='#L154'>154</a> -<a name='L155'></a><a href='#L155'>155</a> -<a name='L156'></a><a href='#L156'>156</a> -<a name='L157'></a><a href='#L157'>157</a> -<a name='L158'></a><a href='#L158'>158</a> -<a name='L159'></a><a href='#L159'>159</a> -<a name='L160'></a><a href='#L160'>160</a> -<a name='L161'></a><a href='#L161'>161</a> -<a name='L162'></a><a href='#L162'>162</a> -<a name='L163'></a><a href='#L163'>163</a> -<a name='L164'></a><a href='#L164'>164</a> -<a name='L165'></a><a href='#L165'>165</a> -<a name='L166'></a><a href='#L166'>166</a> -<a name='L167'></a><a href='#L167'>167</a> -<a name='L168'></a><a href='#L168'>168</a> -<a name='L169'></a><a href='#L169'>169</a> -<a name='L170'></a><a href='#L170'>170</a> -<a name='L171'></a><a href='#L171'>171</a> -<a name='L172'></a><a href='#L172'>172</a> -<a name='L173'></a><a href='#L173'>173</a> -<a name='L174'></a><a href='#L174'>174</a> -<a name='L175'></a><a href='#L175'>175</a> -<a name='L176'></a><a href='#L176'>176</a> -<a name='L177'></a><a href='#L177'>177</a> -<a name='L178'></a><a href='#L178'>178</a> -<a name='L179'></a><a href='#L179'>179</a> -<a name='L180'></a><a href='#L180'>180</a> -<a name='L181'></a><a href='#L181'>181</a> -<a name='L182'></a><a href='#L182'>182</a> -<a name='L183'></a><a href='#L183'>183</a> -<a name='L184'></a><a href='#L184'>184</a> -<a name='L185'></a><a href='#L185'>185</a> -<a name='L186'></a><a href='#L186'>186</a> -<a name='L187'></a><a href='#L187'>187</a> -<a name='L188'></a><a href='#L188'>188</a> -<a name='L189'></a><a href='#L189'>189</a> -<a name='L190'></a><a href='#L190'>190</a> -<a name='L191'></a><a href='#L191'>191</a> -<a name='L192'></a><a href='#L192'>192</a> -<a name='L193'></a><a href='#L193'>193</a> -<a name='L194'></a><a href='#L194'>194</a> -<a name='L195'></a><a href='#L195'>195</a> -<a name='L196'></a><a href='#L196'>196</a> -<a name='L197'></a><a href='#L197'>197</a> -<a name='L198'></a><a href='#L198'>198</a> -<a name='L199'></a><a href='#L199'>199</a> -<a name='L200'></a><a href='#L200'>200</a> -<a name='L201'></a><a href='#L201'>201</a> -<a name='L202'></a><a href='#L202'>202</a> -<a name='L203'></a><a href='#L203'>203</a> -<a name='L204'></a><a href='#L204'>204</a> -<a name='L205'></a><a href='#L205'>205</a> -<a name='L206'></a><a href='#L206'>206</a> -<a name='L207'></a><a href='#L207'>207</a> -<a name='L208'></a><a href='#L208'>208</a> -<a name='L209'></a><a href='#L209'>209</a> -<a name='L210'></a><a href='#L210'>210</a> -<a name='L211'></a><a href='#L211'>211</a> -<a name='L212'></a><a href='#L212'>212</a> -<a name='L213'></a><a href='#L213'>213</a> -<a name='L214'></a><a href='#L214'>214</a> -<a name='L215'></a><a href='#L215'>215</a> -<a name='L216'></a><a href='#L216'>216</a> -<a name='L217'></a><a href='#L217'>217</a> -<a name='L218'></a><a href='#L218'>218</a> -<a name='L219'></a><a href='#L219'>219</a> -<a name='L220'></a><a href='#L220'>220</a> -<a name='L221'></a><a href='#L221'>221</a> -<a name='L222'></a><a href='#L222'>222</a> -<a name='L223'></a><a href='#L223'>223</a> -<a name='L224'></a><a href='#L224'>224</a> -<a name='L225'></a><a href='#L225'>225</a> -<a name='L226'></a><a href='#L226'>226</a> -<a name='L227'></a><a href='#L227'>227</a> -<a name='L228'></a><a href='#L228'>228</a> -<a name='L229'></a><a href='#L229'>229</a> -<a name='L230'></a><a href='#L230'>230</a> -<a name='L231'></a><a href='#L231'>231</a> -<a name='L232'></a><a href='#L232'>232</a> -<a name='L233'></a><a href='#L233'>233</a> -<a name='L234'></a><a href='#L234'>234</a> -<a name='L235'></a><a href='#L235'>235</a> -<a name='L236'></a><a href='#L236'>236</a> -<a name='L237'></a><a href='#L237'>237</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">34x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">34x</span> -<span class="cline-any cline-yes">34x</span> -<span class="cline-any cline-yes">34x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">34x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">34x</span> -<span class="cline-any cline-yes">9x</span> -<span class="cline-any cline-yes">9x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">9x</span> -<span class="cline-any cline-yes">9x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">9x</span> -<span class="cline-any cline-yes">9x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">34x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">7x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">34x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">34x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">34x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">34x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-no"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">34x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">6x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import React, { useEffect, useState } from 'react'; -import type { Feed } from '../types'; -import './Settings.css'; -import { apiFetch } from '../utils'; - -interface SettingsProps { - fontTheme?: string; - setFontTheme?: (t: string) => void; -} - -export default function Settings({ fontTheme, setFontTheme }: SettingsProps) { - const [feeds, setFeeds] = useState<Feed[]>([]); - /* ... existing state ... */ - const [newFeedUrl, setNewFeedUrl] = useState(''); - const [loading, setLoading] = useState(false); - const [error, setError] = useState<string | null>(null); - - const [importFile, setImportFile] = useState<File | null>(null); - - /* ... existing fetchFeeds ... */ - const fetchFeeds = React.useCallback(() => { - setLoading(true); - apiFetch('/api/feed/') - .then((res) => { - <span class="missing-if-branch" title="if path not taken" >I</span>if (!res.ok) <span class="cstat-no" title="statement not covered" >throw new Error('Failed to fetch feeds');</span> - return res.json(); - }) - .then((data) => { - setFeeds(data); - setLoading(false); - }) - .catch(<span class="fstat-no" title="function not covered" >(e</span>rr) => { -<span class="cstat-no" title="statement not covered" > setError(err.message);</span> -<span class="cstat-no" title="statement not covered" > setLoading(false);</span> - }); - }, []); - - useEffect(() => { - // eslint-disable-next-line - fetchFeeds(); - }, [fetchFeeds]); - - /* ... existing handlers ... */ - const handleAddFeed = (e: React.FormEvent) => { - e.preventDefault(); - <span class="missing-if-branch" title="if path not taken" >I</span>if (!newFeedUrl) <span class="cstat-no" title="statement not covered" >return;</span> - - setLoading(true); - apiFetch('/api/feed/', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ url: newFeedUrl }), - }) - .then((res) => { - if (!res.ok) throw new Error('Failed to add feed'); - return res.json(); - }) - .then(() => { - setNewFeedUrl(''); - fetchFeeds(); - }) - .catch((err) => { - setError(err.message); - setLoading(false); - }); - }; - - const handleDeleteFeed = (id: number) => { - <span class="missing-if-branch" title="if path not taken" >I</span>if (!globalThis.confirm('Are you sure you want to delete this feed?')) <span class="cstat-no" title="statement not covered" >return;</span> - - setLoading(true); - apiFetch(`/api/feed/${id}`, { - method: 'DELETE', - }) - .then((res) => { - <span class="missing-if-branch" title="if path not taken" >I</span>if (!res.ok) <span class="cstat-no" title="statement not covered" >throw new Error('Failed to delete feed');</span> - setFeeds(feeds.filter((f) => f._id !== id)); - setLoading(false); - }) - .catch(<span class="fstat-no" title="function not covered" >(e</span>rr) => { -<span class="cstat-no" title="statement not covered" > setError(err.message);</span> -<span class="cstat-no" title="statement not covered" > setLoading(false);</span> - }); - }; - - const handleImport = (e: React.FormEvent) => { - e.preventDefault(); - <span class="missing-if-branch" title="if path not taken" >I</span>if (!importFile) <span class="cstat-no" title="statement not covered" >return;</span> - - setLoading(true); - const formData = new FormData(); - formData.append('file', importFile); - formData.append('format', 'opml'); - - apiFetch('/api/import', { - method: 'POST', - body: formData, - }) - .then((res) => { - <span class="missing-if-branch" title="if path not taken" >I</span>if (!res.ok) <span class="cstat-no" title="statement not covered" >throw new Error('Failed to import feeds');</span> - return res.json(); - }) - .then(() => { - setImportFile(null); - fetchFeeds(); - alert('Import successful!'); - }) - .catch(<span class="fstat-no" title="function not covered" >(e</span>rr) => { -<span class="cstat-no" title="statement not covered" > setError(err.message);</span> -<span class="cstat-no" title="statement not covered" > setLoading(false);</span> - }); - }; - - const handleCrawl = () => { - setLoading(true); - apiFetch('/api/crawl', { - method: 'POST', - }) - .then((res) => { - <span class="missing-if-branch" title="if path not taken" >I</span>if (!res.ok) <span class="cstat-no" title="statement not covered" >throw new Error('Failed to start crawl');</span> - return res.json(); - }) - .then(() => { - setLoading(false); - alert('Crawl started!'); - }) - .catch(<span class="fstat-no" title="function not covered" >(e</span>rr) => { -<span class="cstat-no" title="statement not covered" > setError(err.message);</span> -<span class="cstat-no" title="statement not covered" > setLoading(false);</span> - }); - }; - - return ( - <div className="settings-page variant-glass"> - <h2>Settings</h2> - - {setFontTheme && ( - <div className="appearance-section"> - <h3>Appearance</h3> - <div className="font-selector"> - <label htmlFor="font-theme-select">Font Theme:</label> - <select - id="font-theme-select" - value={fontTheme || <span class="branch-1 cbranch-no" title="branch not covered" >'default'}</span> - onChange={(e) => setFontTheme(e.target.value)} - className="font-select" - > - <option value="default">Default</option> - <option value="serif">Serif</option> - <option value="sans">Sans-Serif</option> - <option value="mono">Monospace</option> - </select> - </div> - </div> - )} - - <div className="add-feed-section"> - <h3>Add New Feed</h3> - <form onSubmit={handleAddFeed} className="add-feed-form"> - <input - type="url" - value={newFeedUrl} - onChange={(e) => setNewFeedUrl(e.target.value)} - placeholder="https://example.com/feed.xml" - required - className="feed-input" - disabled={loading} - /> - <button type="submit" disabled={loading}> - Add Feed - </button> - </form> - </div> - - <div className="import-export-section"> - <div className="import-section"> - <h3>Import Feeds (OPML)</h3> - <form onSubmit={handleImport} className="import-form"> - <input - type="file" - accept=".opml,.xml,.txt" - aria-label="Import Feeds" - onChange={(e) => setImportFile(e.target.files?.[0] || <span class="branch-1 cbranch-no" title="branch not covered" >null)</span>} - className="file-input" - disabled={loading} - /> - <button type="submit" disabled={!importFile || loading}> - Import - </button> - </form> - </div> - - <div className="export-section"> - <h3>Export Feeds</h3> - <div className="export-buttons"> - <a href="/api/export/opml" className="export-btn">OPML</a> - <a href="/api/export/text" className="export-btn">Text</a> - <a href="/api/export/json" className="export-btn">JSON</a> - </div> - </div> - - <div className="crawl-section"> - <h3>Actions</h3> - <button onClick={handleCrawl} disabled={loading} className="crawl-btn"> - Crawl All Feeds Now - </button> - </div> - </div> - - {error && <p className="error-message">{error}</p>} - - <div className="feed-list-section"> - <h3>Manage Feeds</h3> - {loading && <p>Loading...</p>} - <ul className="settings-feed-list"> - {feeds.map((feed) => ( - <li key={feed._id} className="settings-feed-item"> - <div className="feed-info"> - <span className="feed-title">{feed.title || <span class="branch-1 cbranch-no" title="branch not covered" >'(No Title)'}<</span>/span> - <span className="feed-url">{feed.url}</span> - </div> - <button - onClick={() => handleDeleteFeed(feed._id)} - className="delete-btn" - disabled={loading} - title="Delete Feed" - > - Delete - </button> - </li> - ))} - </ul> - </div> - </div> - ); -} - </pre></td></tr></table></pre> - - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="../../prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="../../sorter.js"></script> - <script src="../../block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file diff --git a/frontend/coverage/src/components/index.html b/frontend/coverage/src/components/index.html deleted file mode 100644 index fc333bb..0000000 --- a/frontend/coverage/src/components/index.html +++ /dev/null @@ -1,266 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for src/components</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="../../prettify.css" /> - <link rel="stylesheet" href="../../base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(../../sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1><a href="../../index.html">All files</a> src/components</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">86.21% </span> - <span class="quiet">Statements</span> - <span class='fraction'>269/312</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">74.61% </span> - <span class="quiet">Branches</span> - <span class='fraction'>144/193</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">84.94% </span> - <span class="quiet">Functions</span> - <span class='fraction'>79/93</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">88.81% </span> - <span class="quiet">Lines</span> - <span class='fraction'>254/286</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line high'></div> - <div class="pad1"> -<table class="coverage-summary"> -<thead> -<tr> - <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> - <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> - <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> - <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> - <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> - <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> - <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> - <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> - <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> - <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> -</tr> -</thead> -<tbody><tr> - <td class="file empty" data-value="FeedItem.css"><a href="FeedItem.css.html">FeedItem.css</a></td> - <td data-value="0" class="pic empty"> - <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div> - </td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - </tr> - -<tr> - <td class="file medium" data-value="FeedItem.tsx"><a href="FeedItem.tsx.html">FeedItem.tsx</a></td> - <td data-value="78.12" class="pic medium"> - <div class="chart"><div class="cover-fill" style="width: 78%"></div><div class="cover-empty" style="width: 22%"></div></div> - </td> - <td data-value="78.12" class="pct medium">78.12%</td> - <td data-value="32" class="abs medium">25/32</td> - <td data-value="86.95" class="pct high">86.95%</td> - <td data-value="23" class="abs high">20/23</td> - <td data-value="83.33" class="pct high">83.33%</td> - <td data-value="12" class="abs high">10/12</td> - <td data-value="80.64" class="pct high">80.64%</td> - <td data-value="31" class="abs high">25/31</td> - </tr> - -<tr> - <td class="file empty" data-value="FeedItems.css"><a href="FeedItems.css.html">FeedItems.css</a></td> - <td data-value="0" class="pic empty"> - <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div> - </td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - </tr> - -<tr> - <td class="file high" data-value="FeedItems.tsx"><a href="FeedItems.tsx.html">FeedItems.tsx</a></td> - <td data-value="89.23" class="pic high"> - <div class="chart"><div class="cover-fill" style="width: 89%"></div><div class="cover-empty" style="width: 11%"></div></div> - </td> - <td data-value="89.23" class="pct high">89.23%</td> - <td data-value="130" class="abs high">116/130</td> - <td data-value="76.19" class="pct medium">76.19%</td> - <td data-value="84" class="abs medium">64/84</td> - <td data-value="87.09" class="pct high">87.09%</td> - <td data-value="31" class="abs high">27/31</td> - <td data-value="89.07" class="pct high">89.07%</td> - <td data-value="119" class="abs high">106/119</td> - </tr> - -<tr> - <td class="file empty" data-value="FeedList.css"><a href="FeedList.css.html">FeedList.css</a></td> - <td data-value="0" class="pic empty"> - <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div> - </td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - </tr> - -<tr> - <td class="file high" data-value="FeedList.tsx"><a href="FeedList.tsx.html">FeedList.tsx</a></td> - <td data-value="87.27" class="pic high"> - <div class="chart"><div class="cover-fill" style="width: 87%"></div><div class="cover-empty" style="width: 13%"></div></div> - </td> - <td data-value="87.27" class="pct high">87.27%</td> - <td data-value="55" class="abs high">48/55</td> - <td data-value="70" class="pct medium">70%</td> - <td data-value="50" class="abs medium">35/50</td> - <td data-value="78.94" class="pct medium">78.94%</td> - <td data-value="19" class="abs medium">15/19</td> - <td data-value="90" class="pct high">90%</td> - <td data-value="50" class="abs high">45/50</td> - </tr> - -<tr> - <td class="file empty" data-value="FeedListVariants.css"><a href="FeedListVariants.css.html">FeedListVariants.css</a></td> - <td data-value="0" class="pic empty"> - <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div> - </td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - </tr> - -<tr> - <td class="file empty" data-value="Login.css"><a href="Login.css.html">Login.css</a></td> - <td data-value="0" class="pic empty"> - <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div> - </td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - </tr> - -<tr> - <td class="file high" data-value="Login.tsx"><a href="Login.tsx.html">Login.tsx</a></td> - <td data-value="100" class="pic high"> - <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div> - </td> - <td data-value="100" class="pct high">100%</td> - <td data-value="20" class="abs high">20/20</td> - <td data-value="83.33" class="pct high">83.33%</td> - <td data-value="6" class="abs high">5/6</td> - <td data-value="100" class="pct high">100%</td> - <td data-value="4" class="abs high">4/4</td> - <td data-value="100" class="pct high">100%</td> - <td data-value="20" class="abs high">20/20</td> - </tr> - -<tr> - <td class="file empty" data-value="Settings.css"><a href="Settings.css.html">Settings.css</a></td> - <td data-value="0" class="pic empty"> - <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div> - </td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - </tr> - -<tr> - <td class="file high" data-value="Settings.tsx"><a href="Settings.tsx.html">Settings.tsx</a></td> - <td data-value="80" class="pic high"> - <div class="chart"><div class="cover-fill" style="width: 80%"></div><div class="cover-empty" style="width: 20%"></div></div> - </td> - <td data-value="80" class="pct high">80%</td> - <td data-value="75" class="abs high">60/75</td> - <td data-value="66.66" class="pct medium">66.66%</td> - <td data-value="30" class="abs medium">20/30</td> - <td data-value="85.18" class="pct high">85.18%</td> - <td data-value="27" class="abs high">23/27</td> - <td data-value="87.87" class="pct high">87.87%</td> - <td data-value="66" class="abs high">58/66</td> - </tr> - -</tbody> -</table> -</div> - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="../../prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="../../sorter.js"></script> - <script src="../../block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file diff --git a/frontend/coverage/src/index.html b/frontend/coverage/src/index.html deleted file mode 100644 index 091ffa0..0000000 --- a/frontend/coverage/src/index.html +++ /dev/null @@ -1,146 +0,0 @@ - -<!doctype html> -<html lang="en"> - -<head> - <title>Code coverage report for src</title> - <meta charset="utf-8" /> - <link rel="stylesheet" href="../prettify.css" /> - <link rel="stylesheet" href="../base.css" /> - <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <style type='text/css'> - .coverage-summary .sorter { - background-image: url(../sort-arrow-sprite.png); - } - </style> -</head> - -<body> -<div class='wrapper'> - <div class='pad1'> - <h1><a href="../index.html">All files</a> src</h1> - <div class='clearfix'> - - <div class='fl pad1y space-right2'> - <span class="strong">70.21% </span> - <span class="quiet">Statements</span> - <span class='fraction'>33/47</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">65.71% </span> - <span class="quiet">Branches</span> - <span class='fraction'>23/35</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">60% </span> - <span class="quiet">Functions</span> - <span class='fraction'>9/15</span> - </div> - - - <div class='fl pad1y space-right2'> - <span class="strong">71.11% </span> - <span class="quiet">Lines</span> - <span class='fraction'>32/45</span> - </div> - - - </div> - <p class="quiet"> - Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block. - </p> - <template id="filterTemplate"> - <div class="quiet"> - Filter: - <input type="search" id="fileSearch"> - </div> - </template> - </div> - <div class='status-line medium'></div> - <div class="pad1"> -<table class="coverage-summary"> -<thead> -<tr> - <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> - <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> - <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> - <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> - <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> - <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> - <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> - <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> - <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> - <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> -</tr> -</thead> -<tbody><tr> - <td class="file empty" data-value="App.css"><a href="App.css.html">App.css</a></td> - <td data-value="0" class="pic empty"> - <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div> - </td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - <td data-value="0" class="pct empty">0%</td> - <td data-value="0" class="abs empty">0/0</td> - </tr> - -<tr> - <td class="file medium" data-value="App.tsx"><a href="App.tsx.html">App.tsx</a></td> - <td data-value="65.71" class="pic medium"> - <div class="chart"><div class="cover-fill" style="width: 65%"></div><div class="cover-empty" style="width: 35%"></div></div> - </td> - <td data-value="65.71" class="pct medium">65.71%</td> - <td data-value="35" class="abs medium">23/35</td> - <td data-value="60" class="pct medium">60%</td> - <td data-value="25" class="abs medium">15/25</td> - <td data-value="53.84" class="pct medium">53.84%</td> - <td data-value="13" class="abs medium">7/13</td> - <td data-value="64.7" class="pct medium">64.7%</td> - <td data-value="34" class="abs medium">22/34</td> - </tr> - -<tr> - <td class="file high" data-value="utils.ts"><a href="utils.ts.html">utils.ts</a></td> - <td data-value="83.33" class="pic high"> - <div class="chart"><div class="cover-fill" style="width: 83%"></div><div class="cover-empty" style="width: 17%"></div></div> - </td> - <td data-value="83.33" class="pct high">83.33%</td> - <td data-value="12" class="abs high">10/12</td> - <td data-value="80" class="pct high">80%</td> - <td data-value="10" class="abs high">8/10</td> - <td data-value="100" class="pct high">100%</td> - <td data-value="2" class="abs high">2/2</td> - <td data-value="90.9" class="pct high">90.9%</td> - <td data-value="11" class="abs high">10/11</td> - </tr> - -</tbody> -</table> -</div> - <div class='push'></div><!-- for sticky footer --> - </div><!-- /wrapper --> - <div class='footer quiet pad2 space-top1 center small'> - Code coverage generated by - <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-15T05:30:50.842Z - </div> - <script src="../prettify.js"></script> - <script> - window.onload = function () { - prettyPrint(); - }; - </script> - <script src="../sorter.js"></script> - <script src="../block-navigation.js"></script> - </body> -</html> -
\ No newline at end of file |
