PageSourceSearch

https://speedmobi.ai/assets/ScoreAllPagesCard-6gGfbApV.js

js speedmobi.ai collected 2026-10-05 16:24:51 UTC 5,565 bytes, 1 lines download raw bytes

1import{v as u,s as f,r as d,j as e,B as g,w as b,c as j,z as N}from"./index-D1idcEUO.js";import{C as y,b as k,c as v,a as w}from"./card-B85ZMML1.js";import{B as C}from"./badge-9daUM6G7.js";import{toast as c}from"./index-DXODiXiN.js";import{L as i}from"./list-checks-wQPXo7NS.js";import{C as S}from"./circle-check-DslY_iNa.js";import{C as A}from"./circle-x-CrlXMsZv.js";import{A as E}from"./award-70YXU8Oy.js";const x=[{key:"visualHierarchy",short:"Hier",full:"Visual hierarchy"},{key:"typography",short:"Type",full:"Typography"},{key:"spacingRhythm",short:"Spac",full:"Spacing rhythm"},{key:"colorDiscipline",short:"Color",full:"Color discipline"},{key:"imageryTreatment",short:"Img",full:"Imagery treatment"},{key:"distinctiveness",short:"Dist",full:"Distinctiveness"},{key:"mobileExperience",short:"Mob",full:"Mobile experience"}];function R(r){return r>=8?"text-emerald-600 dark:text-emerald-400 font-bold":r>=6?"text-foreground":"text-red-600 dark:text-red-400 font-bold"}function z({clientId:r}){const m=u(f.criticActions.evaluateAllClientPages),[l,n]=d.useState(!1),[t,p]=d.useState(null),h=async()=>{n(!0);try{const s=await m({clientId:r});p(s),c.success(`Scored ${s.evaluated} pages: ${s.passed} pass, ${s.failed} blocked`)}catch(s){const a=s instanceof N&&typeof s.data=="object"&&s.data!==null&&"message"in s.data?String(s.data.message):s instanceof Error?s.message:"Score sweep failed";c.error(a)}finally{n(!1)}},o=t&&t.results.length>0?t.results.reduce((s,a)=>s+a.overallScore,0)/t.results.length:null;return e.jsxs(y,{children:[e.jsx(k,{className:"pb-3",children:e.jsxs(v,{className:"text-sm flex items-center gap-2",children:[e.jsx(i,{className:"h-4 w-4"}),"Score all pages"]})}),e.jsxs(w,{className:"space-y-3",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Scores every page as it stands right now under the current gate (mean ≥ 7, no axis below 6). It does not regenerate or rewrite content. A blocked page that now passes is released back to draft so it can be approved and published."}),e.jsx(g,{size:"sm",className:"w-full text-xs gap-1.5 cursor-pointer",onClick:h,disabled:l,children:l?e.jsxs(e.Fragment,{children:[e.jsx(b,{className:"h-3 w-3"})," Scoring every page…"]}):e.jsxs(e.Fragment,{children:[e.jsx(i,{className:"h-3 w-3"})," Score all pages"]})}),l&&e.jsx("p",{className:"text-xs text-muted-foreground",children:"Pages are scored one at a time by the AI critic; a full site can take a few minutes."}),t&&e.jsxs("div",{className:"space-y-3 border-t border-border pt-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs",children:[e.jsxs("span",{className:"text-foreground",children:[e.jsx("span",{className:"font-mono font-bold",children:t.evaluated})," scored"]}),e.jsxs("span",{className:"text-emerald-600 dark:text-emerald-400",children:[e.jsx("span",{className:"font-mono font-bold",children:t.passed})," pass"]}),e.jsxs("span",{className:"text-amber-600 dark:text-amber-400",children:[e.jsx("span",{className:"font-mono font-bold",children:t.failed})," blocked"]}),o!==null&&e.jsxs("span",{className:"text-muted-foreground",children:["site mean ",e.jsx("span",{className:"font-mono font-bold text-foreground",children:o.toFixed(1)})]}),e.jsxs("span",{className:"text-muted-foreground",children:["cost ",e.jsxs("span",{className:"font-mono font-bold text-foreground",children:["$",(t.totalCostCents/100).toFixed(4)]})]})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-xs border-collapse",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"text-muted-foreground border-b border-border",children:[e.jsx("th",{className:"text-left font-medium py-1 pr-2",children:"Page"}),e.jsx("th",{className:"text-center font-medium px-1",children:"Ovr"}),x.map(s=>e.jsx("th",{className:"text-center font-medium px-1",title:s.full,children:s.short},s.key)),e.jsx("th",{className:"text-center font-medium px-1",children:"Verdict"})]})}),e.jsx("tbody",{children:t.results.map(s=>e.jsxs("tr",{className:"border-b border-border/50 align-top",children:[e.jsxs("td",{className:"py-1 pr-2",children:[e.jsx("div",{className:"font-medium text-foreground truncate max-w-[140px]",title:s.title,children:s.title}),e.jsxs("div",{className:"text-muted-foreground",children:[s.pageType,s.slug?` · /${s.slug}`:" · /"]}),!s.passed&&s.blockReason&&e.jsx("div",{className:"text-red-600 dark:text-red-400 mt-0.5 max-w-[180px] leading-snug",children:s.blockReason})]}),e.jsx("td",{className:"text-center px-1 font-mono font-bold",children:s.errored?"—":s.overallScore.toFixed(1)}),x.map(a=>e.jsx("td",{className:j("text-center px-1 font-mono",R(s.scores[a.key])),children:s.errored?"—":s.scores[a.key]},a.key)),e.jsx("td",{className:"text-center px-1",children:s.errored?e.jsx(C,{className:"text-xs px-1 py-0 border-0 bg-red-100 text-red-800 dark:bg-red-900/40 dark:text-red-300",children:"Error"}):s.passed?e.jsxs("span",{className:"inline-flex items-center gap-0.5 text-emerald-600 dark:text-emerald-400",children:[e.jsx(S,{className:"h-3 w-3"})," Pass"]}):e.jsxs("span",{className:"inline-flex items-center gap-0.5 text-amber-600 dar
1k:text-amber-400",children:[e.jsx(A,{className:"h-3 w-3"})," Blocked"]})})]},s.pageId))})]})}),e.jsxs("p",{className:"text-xs text-muted-foreground flex items-center gap-1",children:[e.jsx(E,{className:"h-2.5 w-2.5 text-amber-500"}),"An axis in red is below the floor of 6; green is 8+. The badge (mean ≥ 8, no axis below 7) is aspirational and does not block publishing."]})]})]})]})}export{z as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.