pulls.review 0.2.1 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +5 -0
  2. package/dist/client/assets/ActionButton-V4dY2wPS.js +1 -0
  3. package/dist/client/assets/ActionIconButton-4b5xelMn.js +1 -0
  4. package/dist/client/assets/ChatMessage-Ccffh_8Z.js +80 -0
  5. package/dist/client/assets/ChatWidget-BFjNWi3R.js +1 -0
  6. package/dist/client/assets/DisplayFileIcon-DWj5Zxib.js +151 -0
  7. package/dist/client/assets/GithubAvatar-DGJrpCsX.js +1 -0
  8. package/dist/client/assets/LandingHero-DWdx6_8g.js +1 -0
  9. package/dist/client/assets/LocalAgentSettings-COjAszEL.js +1 -0
  10. package/dist/client/assets/ModelPicker-CDTiUMZ3.js +3 -0
  11. package/dist/client/assets/SelectViewport-DF4P4Akh.js +1 -0
  12. package/dist/client/assets/_repo_-D3lApLQL.js +22 -0
  13. package/dist/client/assets/analyze-BgWIIbl3.js +1 -0
  14. package/dist/client/assets/anthropic-messages-Btz8sjqp.js +41 -0
  15. package/dist/client/assets/browser-agent-rpc-BXhoSh1z-DrvKG05N.js +1 -0
  16. package/dist/client/assets/core-messages-ClW97ZVa.js +1 -0
  17. package/dist/client/assets/de-BoIOg_UW.js +1 -0
  18. package/dist/client/assets/diagnostics-wATZy2jc.js +1 -0
  19. package/dist/client/assets/diff-CNRGXNmw.js +1 -0
  20. package/dist/client/assets/{diff-BKQFn0my.js → diff-Cx43r-a6.js} +3 -3
  21. package/dist/client/assets/diffs-store-D3BzIMVi.js +1431 -0
  22. package/dist/client/assets/en-CbWYrCM5.js +1 -0
  23. package/dist/client/assets/es-CqEudTln.js +1 -0
  24. package/dist/client/assets/floating-ui.dom-CfpSQvPs.js +1 -0
  25. package/dist/client/assets/fr-qiQQ-4AO.js +1 -0
  26. package/dist/client/assets/i18n-Cx8anq4V.js +2 -0
  27. package/dist/client/assets/{id-NIGs9Xhn.js → id-BkDzu8gq.js} +1 -1
  28. package/dist/client/assets/index-De-UtOit.css +1 -0
  29. package/dist/client/assets/index-KDAJXf4E.js +2 -0
  30. package/dist/client/assets/install-D-S32JY7.js +4 -0
  31. package/dist/client/assets/it-tZZZbUKN.js +1 -0
  32. package/dist/client/assets/{ja-BAKkDsQ5.js → ja-kGPK4Fmt.js} +1 -1
  33. package/dist/client/assets/ko-CULiae40.js +1 -0
  34. package/dist/client/assets/llm-Le5CPsNn.js +88 -0
  35. package/dist/client/assets/llm-store-CzMnTJNa.js +1 -0
  36. package/dist/client/assets/local-agents-BQLn-Ppw.js +1 -0
  37. package/dist/client/assets/models-D651LTTp.js +8 -0
  38. package/dist/client/assets/nanoid-Cya-tyvy.js +1 -0
  39. package/dist/client/assets/node.browser-C0q8i5sA.js +1 -0
  40. package/dist/client/assets/{openai-completions-CSvY9IVo.js → openai-completions-DvmbMyzl.js} +5 -5
  41. package/dist/client/assets/pages-ByEfDjFa.js +1 -0
  42. package/dist/client/assets/pages-local-CVPpEWZ_.js +1 -0
  43. package/dist/client/assets/pages-web-BLxMupU5.js +21 -0
  44. package/dist/client/assets/portalTarget-DQg8GgWm.js +1 -0
  45. package/dist/client/assets/pt-BR-BcwoZLSs.js +1 -0
  46. package/dist/client/assets/rpc-backends-DYtuJyeF.js +1 -0
  47. package/dist/client/assets/ru-DOordgLF.js +1 -0
  48. package/dist/client/assets/runtime-dom.esm-bundler-Du_ZCcVN.js +2 -0
  49. package/dist/client/assets/{source-hSji-yvG.js → source-CvnvCX42.js} +1 -1
  50. package/dist/client/assets/sync-interval-oKvsW-lT.js +1 -0
  51. package/dist/client/assets/{transform-messages-C8U1xonk.js → transform-messages-Cg_2u7I2.js} +1 -1
  52. package/dist/client/assets/upload-DRO7bkBV.js +1 -0
  53. package/dist/client/assets/useDocumentTitle-BQJCa6Lm.js +92 -0
  54. package/dist/client/assets/useNonce-CwUrgryd.js +1 -0
  55. package/dist/client/assets/{vue-i18n-DVI_S4Q5.js → vue-i18n-CGHHpbTP.js} +3 -3
  56. package/dist/client/assets/zh-CN-CmTqGY9s.js +1 -0
  57. package/dist/client/assets/zh-TW-DKGtbJQy.js +1 -0
  58. package/dist/client/index.html +9 -8
  59. package/dist/devframe-DH2vpasJ.mjs +1124 -0
  60. package/dist/devframe.mjs +1 -1
  61. package/dist/index.mjs +28 -8
  62. package/package.json +7 -3
  63. package/dist/client/assets/ChatWidget-BsnoQ6oS.js +0 -1
  64. package/dist/client/assets/DisplayFileIcon-DzBo3Ez5.js +0 -151
  65. package/dist/client/assets/GithubAvatar-CSsUV5vf.js +0 -1
  66. package/dist/client/assets/LandingHero-BkTBSu71.js +0 -1
  67. package/dist/client/assets/_repo_-Dcgj3PGg.js +0 -22
  68. package/dist/client/assets/analyze-509KQQBC.js +0 -1
  69. package/dist/client/assets/anthropic-messages-Cd2DkgOC.js +0 -41
  70. package/dist/client/assets/browser-agent-rpc-BXhoSh1z-DrxWeI3_.js +0 -1
  71. package/dist/client/assets/de-Bq9RfdAn.js +0 -1
  72. package/dist/client/assets/diff-Bx6SazPw.js +0 -1
  73. package/dist/client/assets/diffs-store-ncE62OUU.js +0 -1510
  74. package/dist/client/assets/dist-Dh0a8u-Y.js +0 -1
  75. package/dist/client/assets/en-8hQdak1X.js +0 -1
  76. package/dist/client/assets/es-QcvEBShr.js +0 -1
  77. package/dist/client/assets/fr-DAWKVvDP.js +0 -1
  78. package/dist/client/assets/i18n-CGV_MDS8.js +0 -2
  79. package/dist/client/assets/index-BCCy9wJJ.js +0 -2
  80. package/dist/client/assets/index-BDPZiDIt.css +0 -1
  81. package/dist/client/assets/install-B-q5w2uE.js +0 -4
  82. package/dist/client/assets/it-DjRuurmk.js +0 -1
  83. package/dist/client/assets/ko-DHculY2W.js +0 -1
  84. package/dist/client/assets/llm-DYDmh8Ki.js +0 -2
  85. package/dist/client/assets/llm-store-CVM33nlB.js +0 -2
  86. package/dist/client/assets/node.browser-BX-QLlU2.js +0 -1
  87. package/dist/client/assets/pages-B5mEqsbn.js +0 -1
  88. package/dist/client/assets/pages-local-x_ACBinc.js +0 -1
  89. package/dist/client/assets/pages-web-DitAPN6U.js +0 -21
  90. package/dist/client/assets/portalTarget-C60SzJiK.js +0 -1
  91. package/dist/client/assets/pt-BR-LLtJ99P6.js +0 -1
  92. package/dist/client/assets/ru-DvkrOLxc.js +0 -1
  93. package/dist/client/assets/runtime-dom.esm-bundler-CqL7__VR.js +0 -2
  94. package/dist/client/assets/upload-GnI9kmJu.js +0 -1
  95. package/dist/client/assets/useDocumentTitle-nuqxXiNo.js +0 -185
  96. package/dist/client/assets/zh-CN-BIibd6kG.js +0 -1
  97. package/dist/client/assets/zh-TW-3FtUHjoZ.js +0 -1
  98. package/dist/devframe-CX5butdC.mjs +0 -493
@@ -1 +0,0 @@
1
- import{G as e,Kt as t,Sr as n,Tr as r,U as i,V as a,W as o,Yt as s,et as c,vn as l,zt as u}from"./vue-i18n-DVI_S4Q5.js";var d=c({__name:`FeedbackSpinner`,props:{size:{default:`1em`}},setup(t){let n=t,i=a(()=>typeof n.size==`number`?`${n.size}px`:n.size);return(t,n)=>(u(),e(`span`,{class:`border-2 border-current border-t-transparent rounded-full inline-block animate-spin`,style:r({width:i.value,height:i.value}),role:`status`,"aria-label":`Loading`},null,4))}}),f=c({__name:`ActionButton`,props:{as:{},to:{},href:{},icon:{},variant:{default:`action`},size:{default:`md`},loading:{type:Boolean},disabled:{type:Boolean}},setup(r){let c=r,f=a(()=>c.as?c.as:c.href!=null||c.to!=null?`a`:`button`),p=a(()=>f.value===`a`),m=a(()=>f.value===`button`),h=a(()=>c.size===`sm`),g=a(()=>c.variant===`primary`?h.value?`btn-primary text-sm`:`btn-primary`:c.variant===`text`?h.value?`btn-text text-sm`:`btn-text`:h.value?`btn-action-sm`:`btn-action`),_=a(()=>c.disabled||c.loading);return(a,c)=>(u(),i(s(f.value),{class:n([g.value,{"pointer-events-none op-mute":_.value&&!m.value}]),href:p.value?r.href??r.to:void 0,to:r.as&&r.to!=null?r.to:void 0,disabled:m.value?_.value:void 0,"aria-disabled":_.value||void 0,"aria-busy":r.loading||void 0},{default:l(()=>[r.loading?(u(),i(d,{key:0,size:`1em`})):r.icon?(u(),e(`span`,{key:1,class:n(r.icon),"aria-hidden":`true`},null,2)):o(``,!0),t(a.$slots,`default`)]),_:3},8,[`class`,`href`,`to`,`disabled`,`aria-disabled`,`aria-busy`]))}});function p(e,...t){return typeof e==`function`?e(...t):e}var m=Error.captureStackTrace,h=class e extends Error{name;code;docs;fix;sources;data;get why(){return this.message}constructor(t,n=e){super(t.why,{cause:t.cause}),this.code=this.name=t.code,this.fix=t.fix,this.docs=t.docs,this.sources=t.sources,this.data=t.data,m?.(this,n)}toJSON(){return{name:this.name,why:this.why,fix:this.fix,docs:this.docs,sources:this.sources,cause:this.cause,data:this.data,stack:this.stack}}};function g(e,t){return typeof e==`string`?`${e}/${t.toLowerCase()}`:e?.(t)}function _(e){let t=e.reporters??[],n={},{docsBase:r}=e;for(let i of Object.keys(e.codes)){let a=e.codes[i],o=a.docs===!1?void 0:a.docs||g(r,i),s=(e={},n={})=>{let r=new h({code:i,why:p(a.why,e),fix:p(a.fix,e),docs:o,cause:e.cause,sources:e.sources,data:p(a.data,e)},s);for(let e of t)e(r,n);return r};n[i]=s}return n}export{d as i,_ as n,f as r,h as t};
@@ -1 +0,0 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";var t=e({analyze:()=>l,category:()=>g,chat:()=>v,common:()=>n,default:()=>C,embed:()=>s,errors:()=>x,file:()=>f,fileStatus:()=>m,group:()=>d,guide:()=>i,landing:()=>r,load:()=>a,local:()=>S,pr:()=>o,prState:()=>h,pulls:()=>c,review:()=>_,reviewProgress:()=>p,rules:()=>b,settings:()=>y,share:()=>u}),n={cancel:`Cancel`,save:`Save`,remove:`Remove`,retry:`Retry`,close:`Close`,dismiss:`Dismiss`,refresh:`Refresh`,settings:`Settings`,you:`you`,loading:`Loading…`,send:`Send`,stop:`Stop`,clear:`Clear`,reply:`Reply`,submit:`Submit`,abort:`Abort`,rerun:`Rerun`,files:`{n} file | {n} files`,subgroups:`{n} subgroup | {n} subgroups`,githubRepository:`GitHub repository`,avatar:`{login}'s avatar`},r={dropHint:`Drop to load your diff / .patch file`,tagline:`Groups changed files, summarizes what matters, review them one scope at a time. Everything works locally in your browser.`,documentTitle:`Pull reviews made clear and organized`,open:`Open`,pasteHint:`Paste any GitHub pull request URL, or pick a demo below.`,recentlyViewed:`// recently viewed`,recentRepositories:`// recently viewed repositories`,tryDemos:`// try some demos`,demoBefore:`// before`,demoAfter:`// after`,moreFiles:`... {n} more files`,demoTitle:`feat: share an AI analysis as a PR comment and load shared results`,demoSummary:`One reviewer with an API key posts their analysis to the PR; everyone else loads it without a token.`,demoGroups:{store:`Shared analysis store & comment contract`,ui:`Share result UI`,refactor:`Store refactor: result to root`,tests:`Tests`,docs:`Docs & deps`},uploadTitle:`Review a diff without a PR`,uploadDescription:`Upload or paste a unified diff, or drop a {diff} / {patch} file anywhere on this page.`,uploadButton:`Upload a diff`,embedTitle:`Use it embedded on github.com`,embedDescription:`With {tampermonkey} or {violentmonkey} installed, a pulls.review drawer appears on every pull request page.`,installUserscript:`Install userscript`,bookmarkletTitle:`Jump between github.com and pulls.review`,bookmarkletDescription:`Can't install extensions? Drag this bookmarklet to your bookmarks bar to open the current pull request on pulls.review, and back.`,bookmarkletDrag:`Drag me to your bookmarks bar`,actionsTitle:`Set up auto analyze with GitHub Actions`,actionsDescription:`Analyze every pull request once in CI and post the result as a PR comment, so reviewers don't each need a model key.`,cliTitle:`Run on local git changes with the CLI`,cliDescription:`Review your working tree, a commit or a branch before you push, grouped and summarized like a PR.`,viewGuide:`View guide`},i={userscript:{title:`Use pulls.review embedded on github.com`,intro:`The userscript adds a pulls.review drawer directly to pull request pages on github.com, with grouped files and summaries, so you don't have to switch tabs.`,manager:`Install a userscript manager: {tampermonkey} or {violentmonkey}.`,install:`Install the pulls.review userscript. Your manager asks you to confirm.`,open:`Open any pull request on github.com and click the {tab} tab next to "Files changed".`,ai:`github.com blocks the requests AI analysis needs, so the drawer shows analyses shared as PR comments. Open the PR on pulls.review to run a new one.`},bookmarklet:{title:`Jump between github.com and pulls.review`,intro:`A bookmarklet is a bookmark that runs a small script. It works in any browser, with no extension to install, and opens the page you are on in the other site.`,bar:`Show your bookmarks bar, for example with {shortcut}.`,drag:`Drag this button onto the bookmarks bar:`,use:`On a pull request, commit or compare page on github.com, click the bookmark to open it on pulls.review. Click it again to go back.`},actions:{title:`Auto analyze with GitHub Actions`,intro:`Let CI analyze each pull request once, as soon as it's opened or updated. Everyone who opens the PR, here or in the github.com drawer, sees the same grouped summary right away. Nobody needs their own model key, and pull requests from forks get it too.`,secret:`Add your model key as a repository secret, for example {name}.`,workflow:`Add this workflow to the repository:`,result:`Open or update a pull request to try it. The analysis arrives as a comment, and re-runs on an unchanged PR skip the model call.`,options:`The {provider} is inferred from the key. Set {provider}, {model} or {locale} to override it. See the {readme} for every option.`},cli:{title:`Review local git changes with the CLI`,intro:`Review your own change before anyone else does. The CLI opens your branch, a commit or your uncommitted work in pulls.review, so you can see how the change reads, grouped and summarized, before you push or open a PR.`,branch:`In a git repository, run this to review your current branch against the default branch:`,target:`Or choose what to review:`,browser:`It opens {url} in your browser to visualize your local changes. Confirm the tab with the one-time code printed in your terminal. From there, you can also pick other branches or commits to compare.`}},a={title:`Load a diff`,description:`Paste or drop a unified diff / .patch file to review it.`,pasteLabel:`Paste a unified diff / .patch`,chooseFile:`Or choose a .diff/.patch file`,loadButton:`Load diff`,parsing:`Parsing diff…`,parseFailed:`Couldn't parse this diff`,noDiff:`No diff loaded`,noDiffHint:`Go to the home page and use the upload button to paste or drop a diff.`,goHome:`Go home`},o={loading:`Loading pull request…`,loadFailed:`Couldn't load this pull request`,somethingWrong:`Something went wrong`,newCommits:`This pull request has new commits since it was cached.`,autoRefreshNextTime:`Auto refresh next time`,endOfDiff:`You have reached the end of the diff.`,analyzeBy:`Analyze by`,rules:`Rules`,ai:`AI`,by:`by`,sharedBy:`Viewing AI analysis shared by`,sharedAnalysis:`Viewing Shared Analysis`,reviewedOf:`/ {total} reviewed`,openInSite:`Open in pulls.review`},s={reviewChanges:`Review Changes`,updateUserscript:`Update userscript`},c={loading:`Loading pull requests…`,loadFailed:`Couldn't load pull requests`,open:`{n} open`,search:`Filter pull requests`,empty:`There aren't any open pull requests`,noMatches:`No pull requests match your search`,searchingAll:`Searching all {n} open pull requests…`,loadingMore:`Loading more…`,openedBy:`opened {time} by {author}`,milestone:`Milestone`,comments:`{n} comment | {n} comments`,linkedIssues:`{n} linked issue | {n} linked issues`,assignedTo:`Assigned to {login}`,groups:`{n} group | {n} groups`,viewedHint:`Viewed in this browser`,aiAvailable:`AI analysis available`,sort:{label:`Sort`,"recently-updated":`Recently updated`,"least-recently-updated":`Least recently updated`,newest:`Newest`,oldest:`Oldest`,"most-commented":`Most commented`,"least-commented":`Least commented`},review:{approved:`Approved`,changes_requested:`Changes requested`,review_required:`Review required`},checks:{success:`All checks have passed`,failure:`Some checks were not successful`,pending:`Some checks haven't completed yet`}},l={setupKeys:`Setup API Keys`,analyzing:`Analyzing…`,failed:`Analysis failed`,failedTitle:`AI analysis failed: {message}`,reanalyze:`Re-analyze`,withAi:`Analyze with AI`,statusTitle:`AI analysis`,starting:`Starting…`,thinking:`Thinking… (step {step})`,reading:`Reading {n} file: {first} | Reading {n} files: {first}`,organizing:`Organizing groups…`,notConfigured:`AI analysis is not configured: add a gateway token or a vendor API key in Settings`,chatFailed:`Chat request failed`},u={button:`Share result`,updateButton:`Update shared comment`,sharing:`Sharing…`,tooltip:`Post this analysis as a comment on the pull request so others can load it`,needsToken:`A GitHub token with write access is required to share`,failed:`Sharing failed: {message}`,titleUpdate:`Update your shared analysis`,titleShare:`Share this analysis on GitHub`,willUpdate:`Your existing {comment} on this pull request will be updated as {user} with your GitHub token.`,willPost:`A public comment will be posted on this pull request as {user} with your GitHub token.`,commentLink:`comment`,contains:`The comment contains:`,containsLink:`a link to open this review on {site}`,containsJson:`the grouping and summaries of this AI analysis as JSON inside a collapsed block`,excludes:`Your chat messages, API keys, or anything else from your settings will not be included.`,anyoneCanLoad:`Anyone viewing the pull request can load the shared analysis.`,englishRecommended:`If you are working on a public project, we recommend sharing the result in English to make it helpful to the community.`,share:`Share`,update:`Update`,shareAnyway:`Share anyway`,updateAnyway:`Update anyway`,loadReplaces:`Load a shared AI analysis? It replaces yours:`,available:`Shared AI analyses of this pull request available:`,staleTitle:`Analyzed before the latest commits`,outdated:`(outdated)`,inLanguage:`Analyzed in {language}`,notShared:`{login} has not shared an analysis of this pull request.`},d={toggle:`Toggle group`,filesReviewed:`{reviewed} / {total} files reviewed`,subgroupsOf:`subgroups of`,hideSubgroups:`Hide subgroups`,showSubgroups:`Show subgroups`,navTabs:`Show groups as tabs`,navSidebar:`Show groups as sidebar`,uncategorized:`Uncategorized`,uncategorizedSummary:`Files not covered by the current analysis.`},f={markReviewed:`Mark as reviewed`,markFolderReviewed:`Mark all files in {name} as reviewed`,changedSinceReviewed:`This file was previously reviewed but changed in later commits`,resolved:`{n} resolved`,binary:`Binary file`,binaryNotShown:`Binary file not shown.`,tooLarge:`Diff too large to show.`,loadFailed:`Failed to load`,loadFull:`Load full file content`,expand:`Expand file`,collapse:`Collapse file`,noLongerInDiff:`No longer in this diff`,removed:`removed`},p={title:`Review progress`,markAll:`Mark all as reviewed`,reset:`Reset review state`,invert:`Invert review state`,status:{reviewed:`Reviewed`,changed:`Changed since review`,unreviewed:`Not reviewed`}},m={added:`added`,removed:`removed`,modified:`modified`,renamed:`renamed`,copied:`copied`},h={open:`open`,draft:`draft`,closed:`closed`,merged:`merged`},g={ui:`UI`,api:`API`,core:`core`,data:`data`,cli:`CLI`,security:`security`,tests:`tests`,docs:`docs`,examples:`examples`,deps:`dependencies`,build:`build`,scripts:`scripts`,config:`config`,i18n:`i18n`,assets:`assets`,other:`other`},_={addReview:`Add Review`,hideComments:`Hide review comments`,showComments:`Show review comments`,reviews:`Reviews`,approved:`approved`,changesRequested:`requested changes`,commented:`commented`,dismissed:`review dismissed`,reviewChanges:`Review changes`,includesPending:`Submitting includes your {n} pending comment. | Submitting includes your {n} pending comments.`,summaryPlaceholder:`Leave a summary (optional for Approve)`,comment:`Comment`,approve:`Approve`,requestChanges:`Request changes`,discard:`Discard review`,leaveComment:`Leave a comment`,addSingle:`Add single comment`,addToReview:`Add review comment`,startReview:`Start a review`,pending:`Pending`,editComment:`Edit comment`,deleteComment:`Delete comment`,replyPlaceholder:`Reply…`,resolve:`Resolve`},v={title:`Ask about this PR`,collapse:`Collapse`,reanalyzeToEnable:`Re-analyze to enable chat`,thinking:`Thinking…`,placeholder:`Ask about this PR…`,updatedGrouping:`Updated grouping: {n} groups`,readFiles:`Read {n} file | Read {n} files`,updatingGrouping:`Updating grouping…`,submittingGrouping:`Submitting grouping…`,requestFailed:`Request failed`,stopped:`stopped`},y={layout:`Diff layout`,unified:`Unified`,split:`Split`,syntaxTheme:{label:`Syntax theme`,light:`Light mode`,dark:`Dark mode`},cached:`Cached pull requests`,autoRefresh:`Auto refresh when new commits are found`,language:`Language`,token:{label:`GitHub Personal Access Token`,optional:`Optional for public repos; required for private repos, or leaving reviews.`,scopes:`Reviews need the {repo} scope (classic token) or {fineGrained} (fine-grained token)`,storedLocally:`Stored only in this browser.`,generate:`Generate one on GitHub →`,fineGrained:`Fine-grained token (no classic scopes)`,updated:`Updated`,expires:`Expires`,neverExpires:`Never expires`,change:`Change token`,checking:`Checking token…`,couldNotVerify:`Could not verify this token.`},llm:{title:`AI Analysis`,description:`Configure a model provider to enable AI-generated summaries. Stored only in this browser and sent only to the provider you select.`,provider:`Provider`,baseUrl:`Base URL`,baseUrlDescription:`Any OpenAI-compatible chat completions endpoint (OpenAI itself, a local server, etc.).`,apiKey:`API key`,gatewayHint:`A {link} token, reaching any of its supported vendors with a single token.`,anthropicHint:`An {link}, called directly from this browser (no gateway).`,anthropicLink:`Anthropic API key`,openaiHint:`The API key for the endpoint above.`,createKey:`Create one on {provider} →`,configured:`Configured`,changeKey:`Change key`,model:`Model`,modelListFailed:`Could not load the model list ({error}). Enter a model id manually.`,embedUnavailable:`AI features aren't available in embedded mode`,embedReason:`github.com's strict Content Security Policy blocks the requests AI features need here. {link} to use them.`,goToWebsite:`Go to the website`},models:{placeholder:`model id`,loading:`Loading models…`,search:`Search models…`,noMatch:`No matching model`,useCustom:`Use “{id}”`,free:`Free`,priceTitle:`Input {input}/M · Output {output}/M tokens`}},b={allFiles:`All files`,code:{label:`Code`,summary:`Source changes.`},other:{label:`Other`,summary:`Other changes that don't fit an existing category.`},docs:{label:`Docs`,summary:`Documentation updates.`},tests:{label:`Tests`,summary:`Test coverage for the change.`},config:{label:`Config`,summary:`Configuration changes.`},deps:{label:`Dependencies`,summary:`Dependency version changes.`},generated:{label:`Generated`,summary:`Generated or build output changes.`}},x={tokenRequired:`A GitHub token is required to write to this pull request.`,diffNotLoaded:`The diff has not finished loading yet.`,noViewer:`Could not determine the GitHub user of this token.`,tokenRejected:`GitHub rejected this token (401). Check that it was pasted completely and has not been revoked.`,tooLarge:`The analysis is too large to share as a comment ({n} characters).`},S={loading:`Loading local changes…`,loadFailed:`Couldn't load these changes`,auth:{title:`Enter the code from your terminal`,hint:`pulls.review printed a 6-digit code in the terminal it runs in.`,invalid:`That code didn't work. Check the terminal and try again.`,submit:`Continue`},picker:{tagline:`Review your local branches, ranges and uncommitted changes like a pull request: grouped, summarized, one scope at a time.`,title:`Review local changes`,base:`Base`,head:`Head`,compare:`Compare`,shortcuts:`Shortcuts`,worktree:`Uncommitted changes`,recentCommits:`Recent commits`,branches:`Branches`,against:`against {base}`,current:`Checked out`}},C={common:n,landing:r,guide:i,load:a,pr:o,embed:s,pulls:c,analyze:l,share:u,group:d,file:f,reviewProgress:p,fileStatus:m,prState:h,category:g,review:_,chat:v,settings:y,rules:b,errors:x,local:S};export{t as n,C as t};
@@ -1 +0,0 @@
1
- var e={cancel:`Cancelar`,save:`Guardar`,remove:`Quitar`,retry:`Reintentar`,close:`Cerrar`,dismiss:`Descartar`,refresh:`Actualizar`,settings:`Ajustes`,you:`tú`,loading:`Cargando…`,send:`Enviar`,stop:`Detener`,clear:`Limpiar`,reply:`Responder`,submit:`Enviar`,abort:`Abortar`,rerun:`Volver a ejecutar`,files:`{n} archivo | {n} archivos`,subgroups:`{n} subgrupo | {n} subgrupos`,githubRepository:`Repositorio de GitHub`,avatar:`Avatar de {login}`},t={dropHint:`Suelta para cargar tu archivo diff / .patch`,tagline:`Agrupa los archivos cambiados, resume lo importante y revísalos ámbito por ámbito. Todo funciona localmente en tu navegador.`,documentTitle:`Revisiones de pull requests claras y organizadas`,open:`Abrir`,pasteHint:`Pega la URL de cualquier pull request de GitHub o elige una demo abajo.`,recentlyViewed:`// vistos recientemente`,recentRepositories:`// repositorios vistos recientemente`,tryDemos:`// prueba algunas demos`,demoBefore:`// antes`,demoAfter:`// después`,moreFiles:`... {n} archivos más`,demoTitle:`feat: compartir un análisis de IA como comentario del PR y cargar resultados compartidos`,demoSummary:`Un revisor con API key publica su análisis en el PR; el resto lo carga sin token.`,demoGroups:{store:`Store de análisis compartidos y contrato del comentario`,ui:`UI para compartir resultados`,refactor:`Refactor del store: resultado a la raíz`,tests:`Pruebas`,docs:`Docs y dependencias`},uploadTitle:`Revisa un diff sin PR`,uploadDescription:`Sube o pega un unified diff, o suelta un archivo {diff} / {patch} en cualquier parte de esta página.`,uploadButton:`Subir un diff`,embedTitle:`Úsalo integrado en github.com`,embedDescription:`Con {tampermonkey} o {violentmonkey} instalado, aparece un panel de pulls.review en cada página de pull request.`,installUserscript:`Instalar userscript`,bookmarkletTitle:`Salta entre github.com y pulls.review`,bookmarkletDescription:`¿No puedes instalar extensiones? Arrastra este bookmarklet a tu barra de marcadores para abrir la pull request actual en pulls.review, y volver.`,bookmarkletDrag:`Arrástrame a tu barra de marcadores`,actionsTitle:`Configura el análisis automático con GitHub Actions`,actionsDescription:`Analiza cada pull request una vez en CI y publica el resultado como comentario, para que cada revisor no necesite su propia clave de modelo.`,cliTitle:`Ejecútalo sobre cambios locales de git con la CLI`,cliDescription:`Revisa tu árbol de trabajo, un commit o una rama antes de hacer push, agrupado y resumido como un PR.`,viewGuide:`Ver guía`},n={userscript:{title:`Usa pulls.review integrado en github.com`,intro:`El userscript añade un panel de pulls.review directamente en las páginas de pull requests de github.com, con archivos agrupados y resúmenes, para que no tengas que cambiar de pestaña.`,manager:`Instala un gestor de userscripts: {tampermonkey} o {violentmonkey}.`,install:`Instala el userscript de pulls.review. Tu gestor te pedirá confirmación.`,open:`Abre cualquier pull request en github.com y haz clic en la pestaña {tab} junto a "Files changed".`,ai:`github.com bloquea las solicitudes que necesita el análisis con IA, así que el panel muestra los análisis compartidos como comentarios del PR. Abre el PR en pulls.review para ejecutar uno nuevo.`},bookmarklet:{title:`Salta entre github.com y pulls.review`,intro:`Un bookmarklet es un marcador que ejecuta un pequeño script. Funciona en cualquier navegador, sin instalar ninguna extensión, y abre la página actual en el otro sitio.`,bar:`Muestra tu barra de marcadores, por ejemplo con {shortcut}.`,drag:`Arrastra este botón a la barra de marcadores:`,use:`En una página de pull request, commit o comparación de github.com, haz clic en el marcador para abrirla en pulls.review. Haz clic otra vez para volver.`},actions:{title:`Análisis automático con GitHub Actions`,intro:`Deja que la CI analice cada pull request una vez, en cuanto se abre o se actualiza. Todos los que abren el PR, aquí o en el panel de github.com, ven al instante el mismo resumen agrupado. Nadie necesita su propia clave de modelo, y los pull requests desde forks también lo reciben.`,secret:`Añade tu clave de modelo como secreto del repositorio, por ejemplo {name}.`,workflow:`Añade este workflow al repositorio:`,result:`Abre o actualiza un pull request para probarlo. El análisis llega como comentario, y las nuevas ejecuciones sobre un PR sin cambios omiten la llamada al modelo.`,options:`El {provider} se deduce de la clave. Define {provider}, {model} o {locale} para cambiarlo. Consulta el {readme} para ver todas las opciones.`},cli:{title:`Revisa cambios locales de git con la CLI`,intro:`Revisa tu propio cambio antes que nadie. La CLI abre tu rama, un commit o tu trabajo sin commit en pulls.review, para que veas cómo se lee el cambio, agrupado y resumido, antes de hacer push o abrir un PR.`,branch:`En un repositorio git, ejecuta esto para revisar tu rama actual contra la rama por defecto:`,target:`O elige qué revisar:`,browser:`Abre {url} en tu navegador para visualizar tus cambios locales. Confirma la pestaña con el código de un solo uso que aparece en tu terminal. Desde ahí también puedes elegir otras ramas o commits para comparar.`}},r={title:`Cargar un diff`,description:`Pega o suelta un archivo unified diff / .patch para revisarlo.`,pasteLabel:`Pega un unified diff / .patch`,chooseFile:`O elige un archivo .diff/.patch`,loadButton:`Cargar diff`,parsing:`Analizando el diff…`,parseFailed:`No se pudo analizar este diff`,noDiff:`Ningún diff cargado`,noDiffHint:`Ve a la página de inicio y usa el botón de subir para pegar o soltar un diff.`,goHome:`Ir al inicio`},i={loading:`Cargando pull request…`,loadFailed:`No se pudo cargar este pull request`,somethingWrong:`Algo salió mal`,newCommits:`Este pull request tiene commits nuevos desde que se guardó en caché.`,autoRefreshNextTime:`Actualizar automáticamente la próxima vez`,endOfDiff:`Has llegado al final del diff.`,analyzeBy:`Analizar con`,rules:`Reglas`,ai:`IA`,by:`por`,sharedBy:`Viendo el análisis de IA compartido por`,sharedAnalysis:`Viendo el análisis compartido`,reviewedOf:`/ {total} revisados`,openInSite:`Abrir en pulls.review`},a={reviewChanges:`Revisar cambios`,updateUserscript:`Actualizar userscript`},o={loading:`Cargando pull requests…`,loadFailed:`No se pudieron cargar los pull requests`,open:`{n} abiertos`,search:`Filtrar pull requests`,empty:`No hay pull requests abiertos`,noMatches:`Ningún pull request coincide con tu búsqueda`,searchingAll:`Buscando en los {n} pull requests abiertos…`,loadingMore:`Cargando más…`,openedBy:`abierto {time} por {author}`,milestone:`Hito`,comments:`{n} comentario | {n} comentarios`,linkedIssues:`{n} issue vinculado | {n} issues vinculados`,assignedTo:`Asignado a {login}`,groups:`{n} grupo | {n} grupos`,viewedHint:`Visto en este navegador`,aiAvailable:`Análisis de IA disponible`,sort:{label:`Ordenar`,"recently-updated":`Actualizados recientemente`,"least-recently-updated":`Actualizados hace más tiempo`,newest:`Más recientes`,oldest:`Más antiguos`,"most-commented":`Más comentados`,"least-commented":`Menos comentados`},review:{approved:`Aprobado`,changes_requested:`Cambios solicitados`,review_required:`Revisión requerida`},checks:{success:`Todas las comprobaciones pasaron`,failure:`Algunas comprobaciones fallaron`,pending:`Algunas comprobaciones aún no han terminado`}},s={setupKeys:`Configurar claves API`,analyzing:`Analizando…`,failed:`El análisis falló`,failedTitle:`El análisis de IA falló: {message}`,reanalyze:`Volver a analizar`,withAi:`Analizar con IA`,statusTitle:`Análisis de IA`,starting:`Iniciando…`,thinking:`Pensando… (paso {step})`,reading:`Leyendo {n} archivo: {first} | Leyendo {n} archivos: {first}`,organizing:`Organizando grupos…`,notConfigured:`El análisis de IA no está configurado: añade un token de gateway o una API key de proveedor en Ajustes`,chatFailed:`La solicitud del chat falló`},c={button:`Compartir resultado`,updateButton:`Actualizar comentario compartido`,sharing:`Compartiendo…`,tooltip:`Publica este análisis como comentario en el pull request para que otros puedan cargarlo`,needsToken:`Para compartir se necesita un token de GitHub con permiso de escritura`,failed:`Error al compartir: {message}`,titleUpdate:`Actualizar tu análisis compartido`,titleShare:`Compartir este análisis en GitHub`,willUpdate:`Tu {comment} existente en este pull request se actualizará como {user} con tu token de GitHub.`,willPost:`Se publicará un comentario público en este pull request como {user} con tu token de GitHub.`,commentLink:`comentario`,contains:`El comentario contiene:`,containsLink:`un enlace para abrir esta revisión en {site}`,containsJson:`la agrupación y los resúmenes de este análisis de IA como JSON dentro de un bloque plegado`,excludes:`Tus mensajes de chat, claves API o cualquier otro dato de tus ajustes no se incluirán.`,anyoneCanLoad:`Cualquiera que vea el pull request puede cargar el análisis compartido.`,englishRecommended:`Si trabajas en un proyecto público, te recomendamos compartir el resultado en inglés para que sea útil a la comunidad.`,share:`Compartir`,update:`Actualizar`,shareAnyway:`Compartir de todos modos`,updateAnyway:`Actualizar de todos modos`,loadReplaces:`¿Cargar un análisis de IA compartido? Reemplazará el tuyo:`,available:`Hay análisis de IA compartidos de este pull request:`,staleTitle:`Analizado antes de los últimos commits`,outdated:`(desactualizado)`,inLanguage:`Analizado en {language}`,notShared:`{login} no ha compartido un análisis de este pull request.`},l={toggle:`Plegar o desplegar grupo`,filesReviewed:`{reviewed} / {total} archivos revisados`,subgroupsOf:`subgrupos de`,hideSubgroups:`Ocultar subgrupos`,showSubgroups:`Mostrar subgrupos`,navTabs:`Mostrar grupos como pestañas`,navSidebar:`Mostrar grupos como barra lateral`,uncategorized:`Sin categoría`,uncategorizedSummary:`Archivos no cubiertos por el análisis actual.`},u={markReviewed:`Marcar como revisado`,markFolderReviewed:`Marcar todos los archivos de {name} como revisados`,changedSinceReviewed:`Este archivo ya fue revisado, pero cambió en commits posteriores`,resolved:`{n} resueltos`,binary:`Archivo binario`,binaryNotShown:`El archivo binario no se muestra.`,tooLarge:`El diff es demasiado grande para mostrarse.`,loadFailed:`Error al cargar`,loadFull:`Cargar el contenido completo del archivo`,expand:`Desplegar archivo`,collapse:`Plegar archivo`,noLongerInDiff:`Ya no está en este diff`,removed:`eliminado`},d={title:`Progreso de la revisión`,markAll:`Marcar todos como revisados`,reset:`Restablecer el estado de revisión`,invert:`Invertir el estado de revisión`,status:{reviewed:`Revisado`,changed:`Cambió desde la revisión`,unreviewed:`Sin revisar`}},f={added:`añadido`,removed:`eliminado`,modified:`modificado`,renamed:`renombrado`,copied:`copiado`},p={open:`abierto`,draft:`borrador`,closed:`cerrado`,merged:`fusionado`},m={ui:`UI`,api:`API`,core:`núcleo`,data:`datos`,cli:`CLI`,security:`seguridad`,tests:`pruebas`,docs:`documentación`,examples:`ejemplos`,deps:`dependencias`,build:`build`,scripts:`scripts`,config:`configuración`,i18n:`i18n`,assets:`recursos`,other:`otros`},h={addReview:`Añadir revisión`,hideComments:`Ocultar comentarios de revisión`,showComments:`Mostrar comentarios de revisión`,reviews:`Revisiones`,approved:`aprobó`,changesRequested:`solicitó cambios`,commented:`comentó`,dismissed:`revisión descartada`,reviewChanges:`Revisar cambios`,includesPending:`Al enviar se incluirá tu {n} comentario pendiente. | Al enviar se incluirán tus {n} comentarios pendientes.`,summaryPlaceholder:`Deja un resumen (opcional al aprobar)`,comment:`Comentar`,approve:`Aprobar`,requestChanges:`Solicitar cambios`,discard:`Descartar revisión`,leaveComment:`Deja un comentario`,addSingle:`Añadir comentario único`,addToReview:`Añadir comentario de revisión`,startReview:`Iniciar una revisión`,pending:`Pendiente`,editComment:`Editar comentario`,deleteComment:`Eliminar comentario`,replyPlaceholder:`Responder…`,resolve:`Resolver`},g={title:`Preguntar sobre este PR`,collapse:`Contraer`,reanalyzeToEnable:`Vuelve a analizar para habilitar el chat`,thinking:`Pensando…`,placeholder:`Pregunta sobre este PR…`,updatedGrouping:`Agrupación actualizada: {n} grupos`,readFiles:`Leyó {n} archivo | Leyó {n} archivos`,updatingGrouping:`Actualizando agrupación…`,submittingGrouping:`Enviando agrupación…`,requestFailed:`La solicitud falló`,stopped:`detenido`},_={layout:`Disposición del diff`,unified:`Unificada`,split:`Dividida`,syntaxTheme:{label:`Tema de sintaxis`,light:`Modo claro`,dark:`Modo oscuro`},cached:`Pull requests en caché`,autoRefresh:`Actualizar automáticamente al encontrar commits nuevos`,language:`Idioma`,token:{label:`Token de acceso personal de GitHub`,optional:`Opcional para repositorios públicos; necesario para repositorios privados o para dejar revisiones.`,scopes:`Las revisiones necesitan el ámbito {repo} (token clásico) o {fineGrained} (token granular)`,storedLocally:`Se guarda solo en este navegador.`,generate:`Generar uno en GitHub →`,fineGrained:`Token granular (sin ámbitos clásicos)`,updated:`Actualizado`,expires:`Expira`,neverExpires:`No expira`,change:`Cambiar token`,checking:`Comprobando token…`,couldNotVerify:`No se pudo verificar este token.`},llm:{title:`Análisis de IA`,description:`Configura un proveedor de modelos para habilitar resúmenes generados por IA. Se guarda solo en este navegador y se envía únicamente al proveedor que elijas.`,provider:`Proveedor`,baseUrl:`URL base`,baseUrlDescription:`Cualquier endpoint de chat completions compatible con OpenAI (OpenAI, un servidor local, etc.).`,apiKey:`API key`,gatewayHint:`Un token de {link}, que llega a cualquiera de sus proveedores compatibles con un solo token.`,anthropicHint:`Una {link}, llamada directamente desde este navegador (sin gateway).`,anthropicLink:`API key de Anthropic`,openaiHint:`La API key del endpoint anterior.`,createKey:`Crear una en {provider} →`,configured:`Configurada`,changeKey:`Cambiar clave`,model:`Modelo`,modelListFailed:`No se pudo cargar la lista de modelos ({error}). Introduce un id de modelo manualmente.`,embedUnavailable:`Las funciones de IA no están disponibles en modo integrado`,embedReason:`La estricta CSP de github.com bloquea las solicitudes que necesitan las funciones de IA. {link} para usarlas.`,goToWebsite:`Ve al sitio web`},models:{placeholder:`id del modelo`,loading:`Cargando modelos…`,search:`Buscar modelos…`,noMatch:`Ningún modelo coincide`,useCustom:`Usar «{id}»`,free:`Gratis`,priceTitle:`Entrada {input}/M · Salida {output}/M tokens`}},v={allFiles:`Todos los archivos`,code:{label:`Código`,summary:`Cambios en el código fuente.`},other:{label:`Otros`,summary:`Otros cambios que no encajan en una categoría existente.`},docs:{label:`Documentación`,summary:`Actualizaciones de documentación.`},tests:{label:`Pruebas`,summary:`Cobertura de pruebas del cambio.`},config:{label:`Configuración`,summary:`Cambios de configuración.`},deps:{label:`Dependencias`,summary:`Cambios de versión de dependencias.`},generated:{label:`Generados`,summary:`Cambios en archivos generados o de build.`}},y={tokenRequired:`Se necesita un token de GitHub para escribir en este pull request.`,diffNotLoaded:`El diff aún no ha terminado de cargarse.`,noViewer:`No se pudo determinar el usuario de GitHub de este token.`,tokenRejected:`GitHub rechazó este token (401). Comprueba que se pegó completo y que no ha sido revocado.`,tooLarge:`El análisis es demasiado grande para compartirlo como comentario ({n} caracteres).`},b={loading:`Cargando cambios locales…`,loadFailed:`No se pudieron cargar estos cambios`,auth:{title:`Introduce el código de tu terminal`,hint:`pulls.review mostró un código de 6 dígitos en la terminal donde se ejecuta.`,invalid:`Ese código no funcionó. Revisa la terminal e inténtalo de nuevo.`,submit:`Continuar`},picker:{tagline:`Revisa tus ramas locales, rangos y cambios sin confirmar como un pull request: agrupados, resumidos, un ámbito a la vez.`,title:`Revisar cambios locales`,base:`Base`,head:`Head`,compare:`Comparar`,shortcuts:`Accesos rápidos`,worktree:`Cambios sin confirmar`,recentCommits:`Commits recientes`,branches:`Ramas`,against:`frente a {base}`,current:`Rama actual`}},x={common:e,landing:t,guide:n,load:r,pr:i,embed:a,pulls:o,analyze:s,share:c,group:l,file:u,reviewProgress:d,fileStatus:f,prState:p,category:m,review:h,chat:g,settings:_,rules:v,errors:y,local:b};export{s as analyze,m as category,g as chat,e as common,x as default,a as embed,y as errors,u as file,f as fileStatus,l as group,n as guide,t as landing,r as load,b as local,i as pr,p as prState,o as pulls,h as review,d as reviewProgress,v as rules,_ as settings,c as share};
@@ -1 +0,0 @@
1
- var e={cancel:`Annuler`,save:`Enregistrer`,remove:`Supprimer`,retry:`Réessayer`,close:`Fermer`,dismiss:`Ignorer`,refresh:`Actualiser`,settings:`Paramètres`,you:`vous`,loading:`Chargement…`,send:`Envoyer`,stop:`Arrêter`,clear:`Effacer`,reply:`Répondre`,submit:`Envoyer`,abort:`Interrompre`,rerun:`Relancer`,files:`{n} fichier | {n} fichiers`,subgroups:`{n} sous-groupe | {n} sous-groupes`,githubRepository:`Dépôt GitHub`,avatar:`Avatar de {login}`},t={dropHint:`Déposez pour charger votre fichier diff / .patch`,tagline:`Regroupe les fichiers modifiés, résume l'essentiel, et vous les fait relire un périmètre à la fois. Tout fonctionne localement dans votre navigateur.`,documentTitle:`Des revues de pull requests claires et organisées`,open:`Ouvrir`,pasteHint:`Collez l'URL d'une pull request GitHub, ou choisissez une démo ci-dessous.`,recentlyViewed:`// vus récemment`,recentRepositories:`// dépôts consultés récemment`,tryDemos:`// essayez des démos`,demoBefore:`// avant`,demoAfter:`// après`,moreFiles:`... {n} fichiers de plus`,demoTitle:`feat: partager une analyse IA en commentaire de PR et charger les résultats partagés`,demoSummary:`Un relecteur avec une API key publie son analyse sur la PR ; tous les autres la chargent sans token.`,demoGroups:{store:`Store d'analyses partagées et contrat du commentaire`,ui:`UI de partage du résultat`,refactor:`Refactor du store : résultat à la racine`,tests:`Tests`,docs:`Docs et dépendances`},uploadTitle:`Relire un diff sans PR`,uploadDescription:`Importez ou collez un unified diff, ou déposez un fichier {diff} / {patch} n'importe où sur cette page.`,uploadButton:`Importer un diff`,embedTitle:`Utilisez-le intégré à github.com`,embedDescription:`Avec {tampermonkey} ou {violentmonkey} installé, un panneau pulls.review apparaît sur chaque page de pull request.`,installUserscript:`Installer le userscript`,bookmarkletTitle:`Passer de github.com à pulls.review`,bookmarkletDescription:`Impossible d'installer des extensions ? Glissez ce bookmarklet dans votre barre de favoris pour ouvrir la pull request actuelle sur pulls.review, et revenir.`,bookmarkletDrag:`Glissez-moi dans votre barre de favoris`,actionsTitle:`Configurer l'analyse automatique avec GitHub Actions`,actionsDescription:`Analysez chaque pull request une fois en CI et publiez le résultat en commentaire, pour que chaque relecteur n'ait pas besoin de sa propre clé de modèle.`,cliTitle:`Lancez-le sur vos modifications git locales avec la CLI`,cliDescription:`Relisez votre arbre de travail, un commit ou une branche avant de pousser, groupés et résumés comme une PR.`,viewGuide:`Voir le guide`},n={userscript:{title:`Utiliser pulls.review intégré à github.com`,intro:`Le userscript ajoute un panneau pulls.review directement aux pages de pull request sur github.com, avec fichiers groupés et résumés, pour que vous n'ayez pas à changer d'onglet.`,manager:`Installez un gestionnaire de userscripts : {tampermonkey} ou {violentmonkey}.`,install:`Installez le userscript pulls.review. Votre gestionnaire vous demande de confirmer.`,open:`Ouvrez n'importe quelle pull request sur github.com et cliquez sur l'onglet {tab} à côté de "Files changed".`,ai:`github.com bloque les requêtes nécessaires à l'analyse IA : le panneau affiche donc les analyses partagées en commentaire. Ouvrez la PR sur pulls.review pour en lancer une nouvelle.`},bookmarklet:{title:`Passer de github.com à pulls.review`,intro:`Un bookmarklet est un favori qui exécute un petit script. Il fonctionne dans tous les navigateurs, sans extension à installer, et ouvre la page actuelle sur l'autre site.`,bar:`Affichez votre barre de favoris, par exemple avec {shortcut}.`,drag:`Glissez ce bouton dans la barre de favoris :`,use:`Sur une page de pull request, de commit ou de comparaison sur github.com, cliquez sur le favori pour l'ouvrir sur pulls.review. Cliquez à nouveau pour revenir.`},actions:{title:`Analyse automatique avec GitHub Actions`,intro:`Laissez la CI analyser chaque pull request une fois, dès qu'elle est ouverte ou mise à jour. Toute personne qui ouvre la PR, ici ou dans le panneau sur github.com, voit aussitôt le même résumé groupé. Personne n'a besoin de sa propre clé de modèle, et les pull requests venant de forks en profitent aussi.`,secret:`Ajoutez votre clé de modèle comme secret du dépôt, par exemple {name}.`,workflow:`Ajoutez ce workflow au dépôt :`,result:`Ouvrez ou mettez à jour une pull request pour essayer. L'analyse arrive en commentaire, et les relances sur une PR inchangée sautent l'appel au modèle.`,options:`Le {provider} est déduit de la clé. Définissez {provider}, {model} ou {locale} pour le remplacer. Toutes les options sont dans le {readme}.`},cli:{title:`Relire des modifications git locales avec la CLI`,intro:`Relisez votre propre modification avant les autres. La CLI ouvre votre branche, un commit ou votre travail non commité dans pulls.review, pour voir comment la modification se lit, groupée et résumée, avant de pousser ou d'ouvrir une PR.`,branch:`Dans un dépôt git, lancez ceci pour relire votre branche actuelle par rapport à la branche par défaut :`,target:`Ou choisissez quoi relire :`,browser:`Elle ouvre {url} dans votre navigateur pour visualiser vos modifications locales. Confirmez l'onglet avec le code à usage unique affiché dans votre terminal. Vous pouvez aussi y choisir d'autres branches ou commits à comparer.`}},r={title:`Charger un diff`,description:`Collez ou déposez un fichier unified diff / .patch pour le relire.`,pasteLabel:`Collez un unified diff / .patch`,chooseFile:`Ou choisissez un fichier .diff/.patch`,loadButton:`Charger le diff`,parsing:`Analyse du diff…`,parseFailed:`Impossible d'analyser ce diff`,noDiff:`Aucun diff chargé`,noDiffHint:`Retournez à l'accueil et utilisez le bouton d'import pour coller ou déposer un diff.`,goHome:`Accueil`},i={loading:`Chargement de la pull request…`,loadFailed:`Impossible de charger cette pull request`,somethingWrong:`Une erreur est survenue`,newCommits:`Cette pull request a de nouveaux commits depuis sa mise en cache.`,autoRefreshNextTime:`Actualiser automatiquement la prochaine fois`,endOfDiff:`Vous avez atteint la fin du diff.`,analyzeBy:`Analyser par`,rules:`Règles`,ai:`IA`,by:`par`,sharedBy:`Analyse IA partagée par`,sharedAnalysis:`Analyse partagée`,reviewedOf:`/ {total} relus`,openInSite:`Ouvrir dans pulls.review`},a={reviewChanges:`Relire les modifications`,updateUserscript:`Mettre à jour le userscript`},o={loading:`Chargement des pull requests…`,loadFailed:`Impossible de charger les pull requests`,open:`{n} ouvertes`,search:`Filtrer les pull requests`,empty:`Aucune pull request ouverte`,noMatches:`Aucune pull request ne correspond à votre recherche`,searchingAll:`Recherche parmi les {n} pull requests ouvertes…`,loadingMore:`Chargement…`,openedBy:`ouverte {time} par {author}`,milestone:`Jalon`,comments:`{n} commentaire | {n} commentaires`,linkedIssues:`{n} issue liée | {n} issues liées`,assignedTo:`Assignée à {login}`,groups:`{n} groupe | {n} groupes`,viewedHint:`Consultée dans ce navigateur`,aiAvailable:`Analyse IA disponible`,sort:{label:`Trier`,"recently-updated":`Mises à jour récemment`,"least-recently-updated":`Mises à jour le moins récemment`,newest:`Plus récentes`,oldest:`Plus anciennes`,"most-commented":`Plus commentées`,"least-commented":`Moins commentées`},review:{approved:`Approuvée`,changes_requested:`Modifications demandées`,review_required:`Revue requise`},checks:{success:`Toutes les vérifications ont réussi`,failure:`Certaines vérifications ont échoué`,pending:`Certaines vérifications ne sont pas terminées`}},s={setupKeys:`Configurer les clés API`,analyzing:`Analyse…`,failed:`Échec de l'analyse`,failedTitle:`Échec de l'analyse IA : {message}`,reanalyze:`Réanalyser`,withAi:`Analyser avec l'IA`,statusTitle:`Analyse IA`,starting:`Démarrage…`,thinking:`Réflexion… (étape {step})`,reading:`Lecture de {n} fichier : {first} | Lecture de {n} fichiers : {first}`,organizing:`Organisation des groupes…`,notConfigured:`L'analyse IA n'est pas configurée : ajoutez un token gateway ou une API key de fournisseur dans les Paramètres`,chatFailed:`La requête du chat a échoué`},c={button:`Partager le résultat`,updateButton:`Mettre à jour le commentaire partagé`,sharing:`Partage…`,tooltip:`Publie cette analyse en commentaire de la pull request pour que d'autres puissent la charger`,needsToken:`Un token GitHub avec accès en écriture est requis pour partager`,failed:`Échec du partage : {message}`,titleUpdate:`Mettre à jour votre analyse partagée`,titleShare:`Partager cette analyse sur GitHub`,willUpdate:`Votre {comment} existant sur cette pull request sera mis à jour en tant que {user} avec votre token GitHub.`,willPost:`Un commentaire public sera publié sur cette pull request en tant que {user} avec votre token GitHub.`,commentLink:`commentaire`,contains:`Le commentaire contient :`,containsLink:`un lien pour ouvrir cette revue sur {site}`,containsJson:`le regroupement et les résumés de cette analyse IA en JSON dans un bloc replié`,excludes:`Vos messages de chat, clés API ou toute autre donnée de vos paramètres ne seront pas inclus.`,anyoneCanLoad:`Toute personne consultant la pull request peut charger l'analyse partagée.`,englishRecommended:`Si vous travaillez sur un projet public, nous recommandons de partager le résultat en anglais pour qu'il soit utile à la communauté.`,share:`Partager`,update:`Mettre à jour`,shareAnyway:`Partager quand même`,updateAnyway:`Mettre à jour quand même`,loadReplaces:`Charger une analyse IA partagée ? Elle remplacera la vôtre :`,available:`Analyses IA partagées disponibles pour cette pull request :`,staleTitle:`Analysée avant les derniers commits`,outdated:`(obsolète)`,inLanguage:`Analysée en {language}`,notShared:`{login} n'a pas partagé d'analyse de cette pull request.`},l={toggle:`Replier ou déplier le groupe`,filesReviewed:`{reviewed} / {total} fichiers relus`,subgroupsOf:`sous-groupes de`,hideSubgroups:`Masquer les sous-groupes`,showSubgroups:`Afficher les sous-groupes`,navTabs:`Afficher les groupes en onglets`,navSidebar:`Afficher les groupes en barre latérale`,uncategorized:`Non classés`,uncategorizedSummary:`Fichiers non couverts par l'analyse actuelle.`},u={markReviewed:`Marquer comme relu`,markFolderReviewed:`Marquer tous les fichiers de {name} comme relus`,changedSinceReviewed:`Ce fichier avait été relu, mais a changé dans des commits ultérieurs`,resolved:`{n} résolus`,binary:`Fichier binaire`,binaryNotShown:`Fichier binaire non affiché.`,tooLarge:`Diff trop volumineux pour être affiché.`,loadFailed:`Échec du chargement`,loadFull:`Charger le contenu complet du fichier`,expand:`Déplier le fichier`,collapse:`Replier le fichier`,noLongerInDiff:`N'est plus dans ce diff`,removed:`supprimé`},d={title:`Avancement de la relecture`,markAll:`Tout marquer comme relu`,reset:`Réinitialiser l'état de relecture`,invert:`Inverser l'état de relecture`,status:{reviewed:`Relu`,changed:`Modifié depuis la relecture`,unreviewed:`Non relu`}},f={added:`ajouté`,removed:`supprimé`,modified:`modifié`,renamed:`renommé`,copied:`copié`},p={open:`ouverte`,draft:`brouillon`,closed:`fermée`,merged:`fusionnée`},m={ui:`UI`,api:`API`,core:`cœur`,data:`données`,cli:`CLI`,security:`sécurité`,tests:`tests`,docs:`documentation`,examples:`exemples`,deps:`dépendances`,build:`build`,scripts:`scripts`,config:`configuration`,i18n:`i18n`,assets:`ressources`,other:`autre`},h={addReview:`Ajouter une revue`,hideComments:`Masquer les commentaires de revue`,showComments:`Afficher les commentaires de revue`,reviews:`Revues`,approved:`a approuvé`,changesRequested:`a demandé des modifications`,commented:`a commenté`,dismissed:`revue rejetée`,reviewChanges:`Relire les modifications`,includesPending:`L'envoi inclut votre {n} commentaire en attente. | L'envoi inclut vos {n} commentaires en attente.`,summaryPlaceholder:`Laissez un résumé (facultatif pour approuver)`,comment:`Commenter`,approve:`Approuver`,requestChanges:`Demander des modifications`,discard:`Abandonner la revue`,leaveComment:`Laissez un commentaire`,addSingle:`Ajouter un commentaire seul`,addToReview:`Ajouter un commentaire de revue`,startReview:`Commencer une revue`,pending:`En attente`,editComment:`Modifier le commentaire`,deleteComment:`Supprimer le commentaire`,replyPlaceholder:`Répondre…`,resolve:`Résoudre`},g={title:`Poser une question sur cette PR`,collapse:`Réduire`,reanalyzeToEnable:`Réanalysez pour activer le chat`,thinking:`Réflexion…`,placeholder:`Posez une question sur cette PR…`,updatedGrouping:`Regroupement mis à jour : {n} groupes`,readFiles:`{n} fichier lu | {n} fichiers lus`,updatingGrouping:`Mise à jour du regroupement…`,submittingGrouping:`Envoi du regroupement…`,requestFailed:`La requête a échoué`,stopped:`arrêté`},_={layout:`Disposition du diff`,unified:`Unifiée`,split:`Côte à côte`,syntaxTheme:{label:`Thème de syntaxe`,light:`Mode clair`,dark:`Mode sombre`},cached:`Pull requests en cache`,autoRefresh:`Actualiser automatiquement quand de nouveaux commits sont trouvés`,language:`Langue`,token:{label:`Personal Access Token GitHub`,optional:`Facultatif pour les dépôts publics ; requis pour les dépôts privés ou pour laisser des revues.`,scopes:`Les revues nécessitent le scope {repo} (classic token) ou {fineGrained} (fine-grained token)`,storedLocally:`Stocké uniquement dans ce navigateur.`,generate:`En générer un sur GitHub →`,fineGrained:`Fine-grained token (sans scopes classiques)`,updated:`Mis à jour`,expires:`Expire`,neverExpires:`N'expire jamais`,change:`Changer le token`,checking:`Vérification du token…`,couldNotVerify:`Impossible de vérifier ce token.`},llm:{title:`Analyse IA`,description:`Configurez un fournisseur de modèles pour activer les résumés générés par l'IA. Stocké uniquement dans ce navigateur et envoyé seulement au fournisseur que vous choisissez.`,provider:`Fournisseur`,baseUrl:`URL de base`,baseUrlDescription:`N'importe quel endpoint de chat completions compatible OpenAI (OpenAI, un serveur local, etc.).`,apiKey:`API key`,gatewayHint:`Un token {link}, donnant accès à tous ses fournisseurs pris en charge avec un seul token.`,anthropicHint:`Une {link}, appelée directement depuis ce navigateur (sans gateway).`,anthropicLink:`API key Anthropic`,openaiHint:`L'API key de l'endpoint ci-dessus.`,createKey:`En créer une sur {provider} →`,configured:`Configurée`,changeKey:`Changer la clé`,model:`Modèle`,modelListFailed:`Impossible de charger la liste des modèles ({error}). Saisissez un id de modèle manuellement.`,embedUnavailable:`Les fonctions IA ne sont pas disponibles en mode intégré`,embedReason:`La CSP stricte de github.com bloque les requêtes nécessaires aux fonctions IA. {link} pour les utiliser.`,goToWebsite:`Rendez-vous sur le site`},models:{placeholder:`id du modèle`,loading:`Chargement des modèles…`,search:`Rechercher des modèles…`,noMatch:`Aucun modèle correspondant`,useCustom:`Utiliser « {id} »`,free:`Gratuit`,priceTitle:`Entrée {input}/M · Sortie {output}/M tokens`}},v={allFiles:`Tous les fichiers`,code:{label:`Code`,summary:`Modifications du code source.`},other:{label:`Autre`,summary:`Autres modifications ne correspondant à aucune catégorie existante.`},docs:{label:`Docs`,summary:`Mises à jour de la documentation.`},tests:{label:`Tests`,summary:`Couverture de tests de la modification.`},config:{label:`Config`,summary:`Modifications de configuration.`},deps:{label:`Dépendances`,summary:`Changements de version des dépendances.`},generated:{label:`Générés`,summary:`Modifications de fichiers générés ou de build.`}},y={tokenRequired:`Un token GitHub est requis pour écrire sur cette pull request.`,diffNotLoaded:`Le diff n'a pas fini de se charger.`,noViewer:`Impossible de déterminer l'utilisateur GitHub de ce token.`,tokenRejected:`GitHub a refusé ce token (401). Vérifiez qu'il a été collé en entier et qu'il n'a pas été révoqué.`,tooLarge:`L'analyse est trop volumineuse pour être partagée en commentaire ({n} caractères).`},b={loading:`Chargement des modifications locales…`,loadFailed:`Impossible de charger ces modifications`,auth:{title:`Saisissez le code affiché dans votre terminal`,hint:`pulls.review a affiché un code à 6 chiffres dans le terminal où il s'exécute.`,invalid:`Ce code n'a pas fonctionné. Vérifiez le terminal et réessayez.`,submit:`Continuer`},picker:{tagline:`Relisez vos branches locales, plages et modifications non commitées comme une pull request : regroupées, résumées, un périmètre à la fois.`,title:`Relire les modifications locales`,base:`Base`,head:`Head`,compare:`Comparer`,shortcuts:`Raccourcis`,worktree:`Modifications non commitées`,recentCommits:`Commits récents`,branches:`Branches`,against:`par rapport à {base}`,current:`Branche actuelle`}},x={common:e,landing:t,guide:n,load:r,pr:i,embed:a,pulls:o,analyze:s,share:c,group:l,file:u,reviewProgress:d,fileStatus:f,prState:p,category:m,review:h,chat:g,settings:_,rules:v,errors:y,local:b};export{s as analyze,m as category,g as chat,e as common,x as default,a as embed,y as errors,u as file,f as fileStatus,l as group,n as guide,t as landing,r as load,b as local,i as pr,p as prState,o as pulls,h as review,d as reviewProgress,v as rules,_ as settings,c as share};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./en-8hQdak1X.js","./rolldown-runtime-Dd_uD5pT.js"])))=>i.map(i=>d[i]);
2
- import{d as e,pn as t,t as n}from"./vue-i18n-DVI_S4Q5.js";import{n as r,r as i}from"./locales-SpkpwNqX.js";import{t as a}from"./en-8hQdak1X.js";import{t as o}from"./preload-helper-BaNbYf_w.js";var s={provider:`gateway`,gatewayToken:``,gatewayModel:`anthropic/claude-sonnet-5`,anthropicApiKey:``,anthropicModel:`claude-sonnet-5`,openaiApiKey:``,openaiBaseUrl:`https://api.openai.com/v1`,openaiModel:`gpt-5.1`};function c(e){return e.gatewayToken?`gateway`:e.anthropicApiKey?`anthropic`:e.openaiApiKey?`openai-compatible`:`gateway`}var l={githubToken:``,llm:s,locale:r()},u=e(`diffs:settings`,l,{mergeDefaults:(e,t)=>{let n={...t.llm,...e?.llm};e?.llm?.provider||(n.provider=c(n));let r=i(e?.locale)?e.locale:t.locale;return{...t,...e,llm:n,locale:r}}});function d(e,t){if(e===0)return 0;let n=e>10&&e<20,r=e%10==1;return t<4?!n&&r?1:2:!n&&r?1:!n&&e%10>=2&&e%10<=4?2:3}var f=n({legacy:!1,locale:`en`,fallbackLocale:`en`,messages:{en:a},pluralizationRules:{ru:d}}),p=Object.assign({"./locales/de.json":()=>o(()=>import(`./de-Bq9RfdAn.js`),[],import.meta.url),"./locales/en.json":()=>o(()=>import(`./en-8hQdak1X.js`).then(e=>e.n),__vite__mapDeps([0,1]),import.meta.url),"./locales/es.json":()=>o(()=>import(`./es-QcvEBShr.js`),[],import.meta.url),"./locales/fr.json":()=>o(()=>import(`./fr-DAWKVvDP.js`),[],import.meta.url),"./locales/id.json":()=>o(()=>import(`./id-NIGs9Xhn.js`),[],import.meta.url),"./locales/it.json":()=>o(()=>import(`./it-DjRuurmk.js`),[],import.meta.url),"./locales/ja.json":()=>o(()=>import(`./ja-BAKkDsQ5.js`),[],import.meta.url),"./locales/ko.json":()=>o(()=>import(`./ko-DHculY2W.js`),[],import.meta.url),"./locales/pt-BR.json":()=>o(()=>import(`./pt-BR-LLtJ99P6.js`),[],import.meta.url),"./locales/ru.json":()=>o(()=>import(`./ru-DvkrOLxc.js`),[],import.meta.url),"./locales/zh-CN.json":()=>o(()=>import(`./zh-CN-BIibd6kG.js`),[],import.meta.url),"./locales/zh-TW.json":()=>o(()=>import(`./zh-TW-3FtUHjoZ.js`),[],import.meta.url)});async function m(e){if(!f.global.availableLocales.includes(e)){let t=await p[`./locales/${e}.json`]();f.global.setLocaleMessage(e,t.default)}f.global.locale.value=e,document.documentElement.lang=e}t(()=>u.value.locale,e=>void m(e),{immediate:!0});var h=f.global.t;export{h as n,u as r,f as t};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./pages-web-DitAPN6U.js","./vue-i18n-DVI_S4Q5.js","./runtime-dom.esm-bundler-CqL7__VR.js","./useDocumentTitle-nuqxXiNo.js","./rolldown-runtime-Dd_uD5pT.js","./source-hSji-yvG.js","./i18n-CGV_MDS8.js","./locales-SpkpwNqX.js","./en-8hQdak1X.js","./preload-helper-BaNbYf_w.js","./dist-Dh0a8u-Y.js","./DisplayFileIcon-DzBo3Ez5.js","./GithubAvatar-CSsUV5vf.js","./LandingHero-BkTBSu71.js","./time-ago-Bdao9Hh1.js","./uploadSession-BUj4FNau.js","./upload-GnI9kmJu.js","./analyze-509KQQBC.js","./llm-DYDmh8Ki.js","./diffs-store-ncE62OUU.js","./patch-parser-k3Vbbmi0.js","./_repo_-Dcgj3PGg.js","./portalTarget-C60SzJiK.js","./diff-BKQFn0my.js","./install-B-q5w2uE.js","./pages-B5mEqsbn.js"])))=>i.map(i=>d[i]);
2
- import{$n as e,Et as t,Kn as n,U as r,Un as i,V as a,Vn as o,Vt as s,Wn as c,Yt as l,dt as u,et as d,pn as f,qt as p,vn as m,yt as h,zt as ee}from"./vue-i18n-DVI_S4Q5.js";import{i as te}from"./runtime-dom.esm-bundler-CqL7__VR.js";import{b as g,c as _,d as ne,f as v,g as y,h as b,i as x,l as S,m as C,t as w,v as T,x as E}from"./source-hSji-yvG.js";import{r as re,t as ie}from"./i18n-CGV_MDS8.js";import{t as D}from"./preload-helper-BaNbYf_w.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var O=T([`additions`,`deletions`]),k=b({login:E(),avatarUrl:y(E())}),ae=b({id:C(),author:y(k),body:E(),createdAt:E(),url:y(E()),pending:S()}),oe=b({rootId:C(),path:E(),side:O,line:y(C()),startLine:y(C()),startSide:y(O),outdated:S(),resolved:y(S()),threadId:y(E()),pending:S(),comments:_(ae)}),A=T([`approved`,`changes_requested`,`commented`,`dismissed`]),se=b({id:C(),author:y(k),state:A,body:E(),submittedAt:y(E()),url:y(E())}),ce=b({id:C(),nodeId:E(),body:E()}),le=b({threads:_(oe),summaries:_(se),pendingReview:y(ce)}),ue=T([`added`,`removed`,`modified`,`renamed`,`copied`]),de=b({header:E(),oldStart:C(),oldLines:C(),newStart:C(),newLines:C(),patch:E()}),fe=b({path:E(),previousPath:y(E()),status:ue,additions:C(),deletions:C(),isBinary:S(),sha:E(),hunks:_(de),truncated:y(ne(!0))}),j=T([`open`,`closed`,`merged`,`draft`]),M=b({state:y(j)}),N=b({sha:E(),message:E()}),pe=b({sha:E(),ref:E()}),me=b({ref:w,title:E(),label:y(E()),author:y(b({name:E(),avatarUrl:y(E())})),description:y(E()),url:y(E()),base:y(pe),head:y(pe),createdAt:y(E()),updatedAt:y(E()),pullRequest:y(M),commits:y(_(N)),files:_(fe)}),he=b({name:E(),color:E(),description:y(E())}),ge=T([`approved`,`changes_requested`,`review_required`]),_e=T([`success`,`failure`,`pending`]),ve=b({number:C(),title:E(),url:E(),state:T([`open`,`draft`]),author:y(k),labels:_(he),assignees:_(k),milestone:y(E()),createdAt:E(),updatedAt:E(),comments:C(),reviewDecision:y(ge),checks:y(_e),linkedIssues:y(C()),additions:y(C()),deletions:y(C()),changedFiles:y(C())}),ye=b({totalCount:C(),items:_(ve),next:y(E())}),be=b({llm:y(x),"web-llm":y(x)}),xe=b({messages:_(v({role:E()})),chatStartIndex:C()}),Se=b({key:E(),ref:w,headSha:E(),title:E(),label:y(E()),url:y(E()),pullRequestState:y(j),additions:C(),deletions:C(),fileShas:_(E()),lastViewedAt:C(),sizeBytes:C(),sharedComment:y(b({id:C(),url:E()})),changedSinceReviewed:y(_(E()))}),Ce=b({diff:me,analyzedBy:be,reviews:y(le),llmSession:y(xe)}),we=b({sha:E(),reviewedAt:C()}),Te=b({owner:E(),repo:E(),page:ye,lastViewedAt:C()}),P=`pr-meta:`,Ee=`pr-body:`,De=`pr:`;function Oe(e,t,n){return new TextEncoder().encode(JSON.stringify({diff:e,analyzedBy:t,llmSession:n})).length}function ke(e){let{diff:t,analyzedBy:n,reviews:r,llmSession:i,...a}=e;return{meta:{...a,ref:t.ref,title:t.title,label:t.label,url:t.url,pullRequestState:t.pullRequest?.state,additions:t.files.reduce((e,t)=>e+t.additions,0),deletions:t.files.reduce((e,t)=>e+t.deletions,0),fileShas:t.files.map(e=>e.sha)},body:{diff:t,analyzedBy:n,reviews:r,llmSession:i}}}function Ae(e,t){let{key:n,headSha:r,lastViewedAt:i,sizeBytes:a,sharedComment:o,changedSinceReviewed:s}=e;return{key:n,headSha:r,lastViewedAt:i,sizeBytes:a,sharedComment:o,changedSinceReviewed:s,...t}}function je(e,t,n={}){let r=n.maxBytes??52428800,i=n.maxEntries??50,a=new Map;function o(e,t){let n=(a.get(e)??Promise.resolve()).then(t,t),r=n.catch(()=>{});return a.set(e,r),r.then(()=>{a.get(e)===r&&a.delete(e)}),n}async function s(t){let n=g(Se,await e.getItem(`${P}${t}`));return n.success?n.output:void 0}async function c(t){let n=g(Ce,await e.getItem(`${Ee}${t}`));return n.success?n.output:void 0}async function l(e){let[t,n]=await Promise.all([s(e),c(e)]);return t&&n?Ae(t,n):void 0}async function u(t){let{meta:n,body:r}=ke(t);await Promise.all([e.setItem(`${P}${t.key}`,n),e.setItem(`${Ee}${t.key}`,r)])}function d(t,n){return o(t,async()=>{let r=await s(t);r&&await e.setItem(`${P}${t}`,n(r))})}function f(t,n){return o(t,async()=>{let r=await c(t);r&&await e.setItem(`${Ee}${t}`,n(r))})}async function p(){let t=await e.getKeys(P),n=[];for(let{value:r}of await e.getItems(t)){let e=g(Se,r);e.success&&n.push(e.output)}return n}async function m(){let n=await e.getKeys(De);await Promise.all(n.map(t=>e.removeItem(t)));let a=(await p()).sort((e,t)=>t.lastViewedAt-e.lastViewedAt),o=0,s=[],c=[];for(let[e,t]of a.entries())o+=t.sizeBytes,e<i&&o<=r?s.push(t):c.push(t);c.length!==0&&(await Promise.all(c.flatMap(t=>[e.removeItem(`${P}${t.key}`),e.removeItem(`${Ee}${t.key}`)])),await t.prune(new Set(s.flatMap(e=>e.fileShas))))}async function h(e,n){let r=new Map(e.diff.files.map(e=>[e.path,e.sha])),i=await t.get([...r.values()]),a=new Set(e.changedSinceReviewed);return n.files.filter(e=>{let t=r.get(e.path);return a.has(e.path)||t!==void 0&&t!==e.sha&&i.has(t)}).map(e=>e.path)}return{get:l,async put(e){await o(e.key,()=>u(e)),await m()},async putDiff(e,t,n){let r=await o(e,async()=>{let r=await l(e),i=r?.analyzedBy??{},a={...r,key:e,diff:t,headSha:n,analyzedBy:i,lastViewedAt:Date.now(),sizeBytes:Oe(t,i,r?.llmSession),changedSinceReviewed:r?await h(r,t):[]};return await u(a),a});return await m(),r},touch:e=>d(e,e=>({...e,lastViewedAt:Date.now()})),setChangedSinceReviewed:(e,t)=>d(e,e=>({...e,changedSinceReviewed:t})),setSharedComment:(e,t)=>d(e,e=>({...e,sharedComment:t})),setAnalyzedResult:(e,t,n)=>f(e,e=>({...e,analyzedBy:{...e.analyzedBy,[t]:n}})),setReviewData:(e,t)=>f(e,e=>({...e,reviews:t})),async setLlmSession(e,t){await o(e,async()=>{let n=await l(e);if(!n)return;let r=t;await u({...n,llmSession:r,sizeBytes:Oe(n.diff,n.analyzedBy,r)})}),await m()},async listRecent(e){return(await p()).sort((e,t)=>t.lastViewedAt-e.lastViewedAt).slice(0,e)},async listMatching(e){let t=(await p()).filter(e);return(await Promise.all(t.map(async e=>{let t=await c(e.key);return t&&Ae(e,t)}))).filter(e=>e!==void 0)}}}var Me=`file-content:`;function Ne(e,t,n){return`${Me}${e}:${t}:${n}`}function Pe(e){return{async get(t,n,r){let i=await e.getItem(Ne(t,n,r));return typeof i==`string`?i:void 0},async set(t,n,r,i){await e.setItem(Ne(t,n,r),i)}}}var Fe=`pulls:`;function Ie(e,t){return`${Fe}${e}/${t}`}function Le(e,t=30){async function n(t,n){let r=await e.getItem(Ie(t,n));if(r==null)return;let i=g(Te,r);return i.success?i.output:void 0}async function r(t=1/0){let n=await e.getKeys(Fe),r=[];for(let{value:t}of await e.getItems(n)){let e=g(Te,t);e.success&&r.push(e.output)}return r.sort((e,t)=>t.lastViewedAt-e.lastViewedAt).slice(0,t)}return{get:n,listRecent:r,async set(n,i,a){await e.setItem(Ie(n,i),{owner:n,repo:i,page:a,lastViewedAt:Date.now()});let o=(await r()).slice(t);await Promise.all(o.map(t=>e.removeItem(Ie(t.owner,t.repo))))},async touch(t,r){let i=await n(t,r);i&&await e.setItem(Ie(t,r),{...i,lastViewedAt:Date.now()})}}}var Re=`review:`;function ze(e){return`${Re}${e}`}function Be(e){return{async get(t){if(t.length===0)return new Set;let n=new Set;for(let{value:r}of await e.getItems(t.map(ze))){let e=g(we,r);e.success&&n.add(e.output.sha)}return n},async set(t,n){let r=Date.now();await Promise.all(t.map(t=>n?e.setItem(ze(t),{sha:t,reviewedAt:r}):e.removeItem(ze(t))))},async prune(t){let n=(await e.getKeys(Re)).filter(e=>!t.has(e.slice(7)));await Promise.all(n.map(t=>e.removeItem(t)))}}}function Ve(e,t){let n=Be(e);return{diffs:je(e,n,t),reviewMarks:n,fileContents:Pe(e),pullRequestLists:Le(e)}}var He=/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,Ue=/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,We=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;function Ge(e,t){if(e===`__proto__`||e===`constructor`&&t&&typeof t==`object`&&`prototype`in t){Ke(e);return}return t}function Ke(e){console.warn(`[destr] Dropping "${e}" key to prevent prototype pollution.`)}function qe(e,t={}){if(typeof e!=`string`)return e;if(e[0]===`"`&&e[e.length-1]===`"`&&e.indexOf(`\\`)===-1)return e.slice(1,-1);let n=e.trim();if(n.length<=9)switch(n.toLowerCase()){case`true`:return!0;case`false`:return!1;case`undefined`:return;case`null`:return null;case`nan`:return NaN;case`infinity`:return 1/0;case`-infinity`:return-1/0}if(!We.test(e)){if(t.strict)throw SyntaxError(`[destr] Invalid JSON`);return e}try{if(He.test(e)||Ue.test(e)){if(t.strict)throw Error(`[destr] Possible prototype pollution`);return JSON.parse(e,Ge)}return JSON.parse(e)}catch(n){if(t.strict)throw n;return e}}function Je(e){return!e||typeof e.then!=`function`?Promise.resolve(e):e}function F(e,...t){try{return Je(e(...t))}catch(e){return Promise.reject(e)}}function Ye(e){let t=typeof e;return e===null||t!==`object`&&t!==`function`}function Xe(e){let t=Object.getPrototypeOf(e);return!t||t.isPrototypeOf(Object)}function Ze(e){if(Ye(e))return String(e);if(Xe(e)||Array.isArray(e))return JSON.stringify(e);if(typeof e.toJSON==`function`)return Ze(e.toJSON());throw Error(`[unstorage] Cannot stringify value!`)}var Qe=`base64:`;function $e(e){return typeof e==`string`?e:Qe+nt(e)}function et(e){return typeof e!=`string`||!e.startsWith(Qe)?e:tt(e.slice(7))}function tt(e){return globalThis.Buffer?Buffer.from(e,`base64`):Uint8Array.from(globalThis.atob(e),e=>e.codePointAt(0))}function nt(e){return globalThis.Buffer?Buffer.from(e).toString(`base64`):globalThis.btoa(String.fromCodePoint(...e))}function I(e){return e&&e.split(`?`)[0]?.replace(/[/\\]/g,`:`).replace(/:+/g,`:`).replace(/^:|:$/g,``)||``}function rt(...e){return I(e.join(`:`))}function it(e){return e=I(e),e?e+`:`:``}function at(e,t){if(t===void 0)return!0;let n=0,r=e.indexOf(`:`);for(;r>-1;)n++,r=e.indexOf(`:`,r+1);return n<=t}function ot(e,t){return t?e.startsWith(t)&&e[e.length-1]!==`$`:e[e.length-1]!==`$`}function st(e){return e}var ct=`memory`,lt=st(()=>{let e=new Map;return{name:ct,getInstance:()=>e,hasItem(t){return e.has(t)},getItem(t){return e.get(t)??null},getItemRaw(t){return e.get(t)??null},setItem(t,n){e.set(t,n)},setItemRaw(t,n){e.set(t,n)},removeItem(t){e.delete(t)},getKeys(){return[...e.keys()]},clear(){e.clear()},dispose(){e.clear()}}});function ut(e={}){let t={mounts:{"":e.driver||lt()},mountpoints:[``],watching:!1,watchListeners:[],unwatch:{}},n=e=>{for(let n of t.mountpoints)if(e.startsWith(n))return{base:n,relativeKey:e.slice(n.length),driver:t.mounts[n]};return{base:``,relativeKey:e,driver:t.mounts[``]}},r=(e,n)=>t.mountpoints.filter(t=>t.startsWith(e)||n&&e.startsWith(t)).map(n=>({relativeBase:e.length>n.length?e.slice(n.length):void 0,mountpoint:n,driver:t.mounts[n]})),i=(e,n)=>{if(t.watching){n=I(n);for(let r of t.watchListeners)r(e,n)}},a=async()=>{if(!t.watching){t.watching=!0;for(let e in t.mounts)t.unwatch[e]=await dt(t.mounts[e],i,e)}},o=async()=>{if(t.watching){for(let e in t.unwatch)await t.unwatch[e]();t.unwatch={},t.watching=!1}},s=(e,t,r)=>{let i=new Map,a=e=>{let t=i.get(e.base);return t||(t={driver:e.driver,base:e.base,items:[]},i.set(e.base,t)),t};for(let r of e){let e=typeof r==`string`,i=I(e?r:r.key),o=e?void 0:r.value,s=e||!r.options?t:{...t,...r.options},c=n(i);a(c).items.push({key:i,value:o,relativeKey:c.relativeKey,options:s})}return Promise.all([...i.values()].map(e=>r(e))).then(e=>e.flat())},c={hasItem(e,t={}){e=I(e);let{relativeKey:r,driver:i}=n(e);return F(i.hasItem,r,t)},getItem(e,t={}){e=I(e);let{relativeKey:r,driver:i}=n(e);return F(i.getItem,r,t).then(e=>qe(e))},getItems(e,t={}){return s(e,t,e=>e.driver.getItems?F(e.driver.getItems,e.items.map(e=>({key:e.relativeKey,options:e.options})),t).then(t=>t.map(t=>({key:rt(e.base,t.key),value:qe(t.value)}))):Promise.all(e.items.map(t=>F(e.driver.getItem,t.relativeKey,t.options).then(e=>({key:t.key,value:qe(e)})))))},getItemRaw(e,t={}){e=I(e);let{relativeKey:r,driver:i}=n(e);return i.getItemRaw?F(i.getItemRaw,r,t):F(i.getItem,r,t).then(e=>et(e))},async setItem(e,t,r={}){if(t===void 0)return c.removeItem(e);e=I(e);let{relativeKey:a,driver:o}=n(e);o.setItem&&(await F(o.setItem,a,Ze(t),r),o.watch||i(`update`,e))},async setItems(e,t){await s(e,t,async e=>{if(e.driver.setItems)return F(e.driver.setItems,e.items.map(e=>({key:e.relativeKey,value:Ze(e.value),options:e.options})),t);e.driver.setItem&&await Promise.all(e.items.map(t=>F(e.driver.setItem,t.relativeKey,Ze(t.value),t.options)))})},async setItemRaw(e,t,r={}){if(t===void 0)return c.removeItem(e,r);e=I(e);let{relativeKey:a,driver:o}=n(e);if(o.setItemRaw)await F(o.setItemRaw,a,t,r);else if(o.setItem)await F(o.setItem,a,$e(t),r);else return;o.watch||i(`update`,e)},async removeItem(e,t={}){typeof t==`boolean`&&(t={removeMeta:t}),e=I(e);let{relativeKey:r,driver:a}=n(e);a.removeItem&&(await F(a.removeItem,r,t),(t.removeMeta||t.removeMata)&&await F(a.removeItem,r+`$`,t),a.watch||i(`remove`,e))},async getMeta(e,t={}){typeof t==`boolean`&&(t={nativeOnly:t}),e=I(e);let{relativeKey:r,driver:i}=n(e),a=Object.create(null);if(i.getMeta&&Object.assign(a,await F(i.getMeta,r,t)),!t.nativeOnly){let e=await F(i.getItem,r+`$`,t).then(e=>qe(e));e&&typeof e==`object`&&(typeof e.atime==`string`&&(e.atime=new Date(e.atime)),typeof e.mtime==`string`&&(e.mtime=new Date(e.mtime)),Object.assign(a,e))}return a},setMeta(e,t,n={}){return this.setItem(e+`$`,t,n)},removeMeta(e,t={}){return this.removeItem(e+`$`,t)},async getKeys(e,t={}){e=it(e);let n=r(e,!0),i=[],a=[],o=!0;for(let e of n){e.driver.flags?.maxDepth||(o=!1);let n=await F(e.driver.getKeys,e.relativeBase,t);for(let t of n){let n=e.mountpoint+I(t);i.some(e=>n.startsWith(e))||a.push(n)}i=[e.mountpoint,...i.filter(t=>!t.startsWith(e.mountpoint))]}let s=t.maxDepth!==void 0&&!o;return a.filter(n=>(!s||at(n,t.maxDepth))&&ot(n,e))},async clear(e,t={}){e=it(e),await Promise.all(r(e,!1).map(async e=>{if(e.driver.clear)return F(e.driver.clear,e.relativeBase,t);if(e.driver.removeItem){let n=await e.driver.getKeys(e.relativeBase||``,t);return Promise.all(n.map(n=>e.driver.removeItem(n,t)))}}))},async dispose(){await Promise.all(Object.values(t.mounts).map(e=>ft(e)))},async watch(e){return await a(),t.watchListeners.push(e),async()=>{t.watchListeners=t.watchListeners.filter(t=>t!==e),t.watchListeners.length===0&&await o()}},async unwatch(){t.watchListeners=[],await o()},mount(e,n){if(e=it(e),e&&t.mounts[e])throw Error(`already mounted at ${e}`);return e&&(t.mountpoints.push(e),t.mountpoints.sort((e,t)=>t.length-e.length)),t.mounts[e]=n,t.watching&&Promise.resolve(dt(n,i,e)).then(n=>{t.unwatch[e]=n}).catch(console.error),c},async unmount(e,n=!0){e=it(e),e&&t.mounts[e]&&(t.watching&&e in t.unwatch&&(t.unwatch[e]?.(),delete t.unwatch[e]),n&&await ft(t.mounts[e]),t.mountpoints=t.mountpoints.filter(t=>t!==e),delete t.mounts[e])},getMount(e=``){e=I(e)+`:`;let t=n(e);return{driver:t.driver,base:t.base}},getMounts(e=``,t={}){return e=I(e),r(e,t.parents).map(e=>({driver:e.driver,base:e.mountpoint}))},keys:(e,t={})=>c.getKeys(e,t),get:(e,t={})=>c.getItem(e,t),set:(e,t,n={})=>c.setItem(e,t,n),has:(e,t={})=>c.hasItem(e,t),del:(e,t={})=>c.removeItem(e,t),remove:(e,t={})=>c.removeItem(e,t)};return c}function dt(e,t,n){return e.watch?e.watch((e,r)=>t(e,n+r)):()=>{}}async function ft(e){typeof e.dispose==`function`&&await F(e.dispose)}function pt(e){return e}function L(e){return new Promise((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)})}function mt(e,t){let n,r=()=>{if(n)return n;let r=indexedDB.open(e);return r.onupgradeneeded=()=>r.result.createObjectStore(t),n=L(r),n.then(e=>{e.onclose=()=>n=void 0},()=>{n=void 0}),n};return(e,n)=>r().then(r=>n(r.transaction(t,e).objectStore(t)))}var ht;function R(){return ht||=mt(`keyval-store`,`keyval`),ht}function gt(e,t=R()){return t(`readonly`,t=>L(t.get(e)))}function _t(e,t,n=R()){return n(`readwrite`,n=>(n.put(t,e),L(n.transaction)))}function vt(e,t=R()){return t(`readwrite`,t=>(t.delete(e),L(t.transaction)))}function yt(e=R()){return e(`readwrite`,e=>(e.clear(),L(e.transaction)))}function bt(e,t){return e.openCursor().onsuccess=function(){this.result&&(t(this.result),this.result.continue())},L(e.transaction)}function xt(e=R()){return e(`readonly`,e=>{if(e.getAllKeys)return L(e.getAllKeys());let t=[];return bt(e,e=>t.push(e.key)).then(()=>t)})}var St=`idb-keyval`,Ct=pt((e={})=>{let t=e.base&&e.base.length>0?`${e.base}:`:``,n=e=>t+e,r;return e.dbName&&e.storeName&&(r=mt(e.dbName,e.storeName)),{name:St,options:e,async hasItem(e){return await gt(n(e),r)!==void 0},async getItem(e){return await gt(n(e),r)??null},async getItemRaw(e){return await gt(n(e),r)??null},setItem(e,t){return _t(n(e),t,r)},setItemRaw(e,t){return _t(n(e),t,r)},removeItem(e){return vt(n(e),r)},getKeys(){return xt(r)},clear(){return yt(r)}}});function wt(){return Ve(ut({driver:Ct({dbName:`diffs-cache`,storeName:`cache`})}))}var Tt=Symbol(`app-context`),Et={githubToken:async()=>re.value.githubToken||void 0};function Dt(e,t={cache:wt(),credentials:Et}){e.provide(Tt,t)}function Ot(){let e=h(Tt);if(!e)throw Error(`useAppContext() called outside an app with installAppContext()`);return e}var kt=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},At={};function jt(e,t){let n=p(`RouterView`);return ee(),r(n,null,{default:m(({Component:e,route:t})=>[(ee(),r(l(e),{key:t.path}))]),_:1})}var Mt=kt(At,[[`render`,jt]]),z=typeof document<`u`;function Nt(e){return typeof e==`object`||`displayName`in e||`props`in e||`__vccOpts`in e}function Pt(e){return e.__esModule||e[Symbol.toStringTag]===`Module`||e.default&&Nt(e.default)}var B=Object.assign;function Ft(e,t){let n={};for(let r in t){let i=t[r];n[r]=H(i)?i.map(e):e(i)}return n}var V=()=>{},H=Array.isArray;function It(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var Lt=/#/g,Rt=/&/g,zt=/\//g,Bt=/=/g,Vt=/\?/g,Ht=/\+/g,Ut=/%5B/g,Wt=/%5D/g,Gt=/%5E/g,Kt=/%60/g,qt=/%7B/g,Jt=/%7C/g,Yt=/%7D/g,Xt=/%20/g;function Zt(e){return e==null?``:encodeURI(``+e).replace(Jt,`|`).replace(Ut,`[`).replace(Wt,`]`)}function Qt(e){return Zt(e).replace(qt,`{`).replace(Yt,`}`).replace(Gt,`^`)}function $t(e){return Zt(e).replace(Ht,`%2B`).replace(Xt,`+`).replace(Lt,`%23`).replace(Rt,`%26`).replace(Kt,"`").replace(qt,`{`).replace(Yt,`}`).replace(Gt,`^`)}function en(e){return $t(e).replace(Bt,`%3D`)}function tn(e){return Zt(e).replace(Lt,`%23`).replace(Vt,`%3F`)}function nn(e){return tn(e).replace(zt,`%2F`)}function U(e){if(e==null)return null;try{return decodeURIComponent(``+e)}catch{}return``+e}var rn=/\/$/,an=e=>e.replace(rn,``);function on(e,t,n=`/`){let r,i={},a=``,o=``,s=t.indexOf(`#`),c=t.indexOf(`?`);return c=s>=0&&c>s?-1:c,c>=0&&(r=t.slice(0,c),a=t.slice(c,s>0?s:t.length),i=e(a.slice(1))),s>=0&&(r||=t.slice(0,s),o=t.slice(s,t.length)),r=pn(r??t,n),{fullPath:r+a+o,path:r,query:i,hash:U(o)}}function sn(e,t){let n=t.query?e(t.query):``;return t.path+(n&&`?`)+n+(t.hash||``)}function cn(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||`/`}function ln(e,t,n){let r=t.matched.length-1,i=n.matched.length-1;return r>-1&&r===i&&W(t.matched[r],n.matched[i])&&un(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function W(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function un(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!dn(e[n],t[n]))return!1;return!0}function dn(e,t){return H(e)?fn(e,t):H(t)?fn(t,e):e?.valueOf()===t?.valueOf()}function fn(e,t){return H(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e.length===1&&e[0]===t}function pn(e,t){if(e.startsWith(`/`))return e;if(!e)return t;let n=t.split(`/`),r=e.split(`/`),i=r[r.length-1];(i===`..`||i===`.`)&&r.push(``);let a=n.length-1,o,s;for(o=0;o<r.length;o++)if(s=r[o],s!==`.`){if(s===`..`)a>1&&a--;else break}return n.slice(0,a).join(`/`)+`/`+r.slice(o).join(`/`)}var G={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0},mn=function(e){return e.pop=`pop`,e.push=`push`,e}({}),hn=function(e){return e.back=`back`,e.forward=`forward`,e.unknown=``,e}({});function gn(e){if(!e){if(z){let t=document.querySelector(`base`);e=t&&t.getAttribute(`href`)||`/`,e=e.replace(/^\w+:\/\/[^\/]+/,``)}else e=`/`}return e[0]!==`/`&&e[0]!==`#`&&(e=`/`+e),an(e)}var _n=/^[^#]+#/;function vn(e,t){return e.replace(_n,`#`)+t}function yn(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var bn=()=>({left:window.scrollX,top:window.scrollY});function xn(e){let t;if(`el`in e){let n=e.el,r=typeof n==`string`&&n.startsWith(`#`),i=typeof n==`string`?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=yn(i,e)}else t=e;`scrollBehavior`in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left==null?window.scrollX:t.left,t.top==null?window.scrollY:t.top)}function Sn(e,t){return(history.state?history.state.position-t:-1)+e}var Cn=new Map;function wn(e,t){Cn.set(e,t)}function Tn(e){let t=Cn.get(e);return Cn.delete(e),t}function En(e){return typeof e==`string`||e&&typeof e==`object`}function Dn(e){return typeof e==`string`||typeof e==`symbol`}var K=function(e){return e[e.MATCHER_NOT_FOUND=1]=`MATCHER_NOT_FOUND`,e[e.NAVIGATION_GUARD_REDIRECT=2]=`NAVIGATION_GUARD_REDIRECT`,e[e.NAVIGATION_ABORTED=4]=`NAVIGATION_ABORTED`,e[e.NAVIGATION_CANCELLED=8]=`NAVIGATION_CANCELLED`,e[e.NAVIGATION_DUPLICATED=16]=`NAVIGATION_DUPLICATED`,e}({}),On=Symbol(``);K.MATCHER_NOT_FOUND,K.NAVIGATION_GUARD_REDIRECT,K.NAVIGATION_ABORTED,K.NAVIGATION_CANCELLED,K.NAVIGATION_DUPLICATED;function q(e,t){return B(Error(),{type:e,[On]:!0},t)}function J(e,t){return e instanceof Error&&On in e&&(t==null||!!(e.type&t))}function kn(e){let t={};if(e===``||e===`?`)return t;let n=(e[0]===`?`?e.slice(1):e).split(`&`);for(let e=0;e<n.length;++e){let r=n[e].replace(Ht,` `),i=r.indexOf(`=`),a=U(i<0?r:r.slice(0,i)),o=i<0?null:U(r.slice(i+1));if(a in t){let e=t[a];H(e)||(e=t[a]=[e]),e.push(o)}else t[a]=o}return t}function An(e){let t=``;for(let n in e){let r=e[n];if(n=en(n),r==null){r!==void 0&&(t+=(t.length?`&`:``)+n);continue}(H(r)?r.map(e=>e&&$t(e)):[r&&$t(r)]).forEach(e=>{e!==void 0&&(t+=(t.length?`&`:``)+n,e!=null&&(t+=`=`+e))})}return t}function jn(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=H(r)?r.map(e=>e==null?null:``+e):r==null?r:``+r)}return t}var Mn=Symbol(``),Nn=Symbol(``),Pn=Symbol(``),Fn=Symbol(``),In=Symbol(``);function Y(){let e=[];function t(t){return e.push(t),()=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function X(e,t,n,r,i,a=e=>e()){let o=r&&(r.enterCallbacks[i]=r.enterCallbacks[i]||[]);return()=>new Promise((s,c)=>{let l=e=>{e===!1?c(q(K.NAVIGATION_ABORTED,{from:n,to:t})):e instanceof Error?c(e):En(e)?c(q(K.NAVIGATION_GUARD_REDIRECT,{from:t,to:e})):(o&&r.enterCallbacks[i]===o&&typeof e==`function`&&o.push(e),s())},u=a(()=>e.call(r&&r.instances[i],t,n,l)),d=Promise.resolve(u);e.length<3&&(d=d.then(l)),d.catch(e=>c(e))})}function Ln(e,t,n,r,i=e=>e()){let a=[];for(let o of e)for(let e in o.components){let s=o.components[e];if(t===`beforeRouteEnter`||o.instances[e]){if(Nt(s)){let c=(s.__vccOpts||s)[t];c&&a.push(X(c,n,r,o,e,i))}else{let c=s();a.push(()=>c.then(a=>{if(!a)throw Error(`Couldn't resolve component "${e}" at "${o.path}"`);let s=Pt(a)?a.default:a;o.mods[e]=a,o.components[e]=s;let c=(s.__vccOpts||s)[t];return c&&X(c,n,r,o,e,i)()}))}}}return a}function Rn(e,t){let n=[],r=[],i=[],a=Math.max(t.matched.length,e.matched.length);for(let o=0;o<a;o++){let a=t.matched[o];a&&(e.matched.find(e=>W(e,a))?r.push(a):n.push(a));let s=e.matched[o];s&&(t.matched.find(e=>W(e,s))||i.push(s))}return[n,r,i]}var zn=()=>location.protocol+`//`+location.host;function Bn(e,t){let{pathname:n,search:r,hash:i}=t,a=e.indexOf(`#`);if(a>-1){let t=i.includes(e.slice(a))?e.slice(a).length:1,n=i.slice(t);return n[0]!==`/`&&(n=`/`+n),cn(n,``)}return cn(n,e)+r+i}function Vn(e,t,n,r){let i=[],a=[],o=null,s=({state:a})=>{let s=Bn(e,location),c=n.value,l=t.value,u=0;if(a){if(n.value=s,t.value=a,o&&o===c){o=null;return}u=l?a.position-l.position:0}else r(s);i.forEach(e=>{e(n.value,c,{delta:u,type:mn.pop,direction:u?u>0?hn.forward:hn.back:hn.unknown})})};function c(){o=n.value}function l(e){i.push(e);let t=()=>{let t=i.indexOf(e);t>-1&&i.splice(t,1)};return a.push(t),t}function u(){if(document.visibilityState===`hidden`){let{history:e}=window;if(!e.state)return;e.replaceState(B({},e.state,{scroll:bn()}),``)}}function d(){for(let e of a)e();a=[],window.removeEventListener(`popstate`,s),window.removeEventListener(`pagehide`,u),document.removeEventListener(`visibilitychange`,u)}return window.addEventListener(`popstate`,s),window.addEventListener(`pagehide`,u),document.addEventListener(`visibilitychange`,u),{pauseListeners:c,listen:l,destroy:d}}function Hn(e,t,n,r=!1,i=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:i?bn():null}}function Un(e){let{history:t,location:n}=window,r={value:Bn(e,n)},i={value:t.state};i.value||a(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(r,a,o){let s=e.indexOf(`#`),c=s>-1?(n.host&&document.querySelector(`base`)?e:e.slice(s))+r:zn()+e+r;try{t[o?`replaceState`:`pushState`](a,``,c),i.value=a}catch(e){console.error(e),n[o?`replace`:`assign`](c)}}function o(e,n){a(e,B({},t.state,Hn(i.value.back,e,i.value.forward,!0),n,{position:i.value.position}),!0),r.value=e}function s(e,n){let o=B({},i.value,t.state,{forward:e,scroll:bn()});a(o.current,o,!0),a(e,B({},Hn(r.value,e,null),{position:o.position+1},n),!1),r.value=e}return{location:r,state:i,push:s,replace:o}}function Wn(e){e=gn(e);let t=Un(e),n=Vn(e,t.state,t.location,t.replace);function r(e,t=!0){t||n.pauseListeners(),history.go(e)}let i=B({location:``,base:e,go:r,createHref:vn.bind(null,e)},t,n);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}var Z=function(e){return e[e.Static=0]=`Static`,e[e.Param=1]=`Param`,e[e.Group=2]=`Group`,e}({}),Q=function(e){return e[e.Static=0]=`Static`,e[e.Param=1]=`Param`,e[e.ParamRegExp=2]=`ParamRegExp`,e[e.ParamRegExpEnd=3]=`ParamRegExpEnd`,e[e.EscapeNext=4]=`EscapeNext`,e}(Q||{}),Gn={type:Z.Static,value:``},Kn=/[a-zA-Z0-9_]/;function qn(e){if(!e)return[[]];if(e===`/`)return[[Gn]];if(!e.startsWith(`/`))throw Error(`Invalid path "${e}"`);function t(e){throw Error(`ERR (${n})/"${l}": ${e}`)}let n=Q.Static,r=n,i=[],a;function o(){a&&i.push(a),a=[]}let s=0,c,l=``,u=``;function d(){l&&=(n===Q.Static?a.push({type:Z.Static,value:l}):n===Q.Param||n===Q.ParamRegExp||n===Q.ParamRegExpEnd?(a.length>1&&(c===`*`||c===`+`)&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:Z.Param,value:l,regexp:u,repeatable:c===`*`||c===`+`,optional:c===`*`||c===`?`})):t(`Invalid state to consume buffer`),``)}function f(){l+=c}for(;s<e.length;){if(c=e[s++],c===`\\`&&n!==Q.ParamRegExp){r=n,n=Q.EscapeNext;continue}switch(n){case Q.Static:c===`/`?(l&&d(),o()):c===`:`?(d(),n=Q.Param):f();break;case Q.EscapeNext:f(),n=r;break;case Q.Param:c===`(`?n=Q.ParamRegExp:Kn.test(c)?f():(d(),n=Q.Static,c!==`*`&&c!==`?`&&c!==`+`&&s--);break;case Q.ParamRegExp:c===`)`?u[u.length-1]==`\\`?u=u.slice(0,-1)+c:n=Q.ParamRegExpEnd:u+=c;break;case Q.ParamRegExpEnd:d(),n=Q.Static,c!==`*`&&c!==`?`&&c!==`+`&&s--,u=``;break;default:t(`Unknown state`)}}return n===Q.ParamRegExp&&t(`Unfinished custom RegExp for param "${l}"`),d(),o(),i}var Jn=`[^/]+?`,Yn={sensitive:!1,strict:!1,start:!0,end:!0},$=function(e){return e[e._multiplier=10]=`_multiplier`,e[e.Root=90]=`Root`,e[e.Segment=40]=`Segment`,e[e.SubSegment=30]=`SubSegment`,e[e.Static=40]=`Static`,e[e.Dynamic=20]=`Dynamic`,e[e.BonusCustomRegExp=10]=`BonusCustomRegExp`,e[e.BonusWildcard=-50]=`BonusWildcard`,e[e.BonusRepeatable=-20]=`BonusRepeatable`,e[e.BonusOptional=-8]=`BonusOptional`,e[e.BonusStrict=.7000000000000001]=`BonusStrict`,e[e.BonusCaseSensitive=.25]=`BonusCaseSensitive`,e}($||{}),Xn=/[.+*?^${}()[\]/\\]/g;function Zn(e,t){let n=B({},Yn,t),r=[],i=n.start?`^`:``,a=[];for(let t of e){let e=t.length?[]:[$.Root];n.strict&&!t.length&&(i+=`/`);for(let r=0;r<t.length;r++){let o=t[r],s=$.Segment+(n.sensitive?$.BonusCaseSensitive:0);if(o.type===Z.Static)r||(i+=`/`),i+=o.value.replace(Xn,`\\$&`),s+=$.Static;else if(o.type===Z.Param){let{value:e,repeatable:n,optional:c,regexp:l}=o;a.push({name:e,repeatable:n,optional:c});let u=l||Jn;if(u!==Jn){s+=$.BonusCustomRegExp;try{`${u}`}catch(t){throw Error(`Invalid custom RegExp for param "${e}" (${u}): `+t.message)}}let d=n?`((?:${u})(?:/(?:${u}))*)`:`(${u})`;r||(d=c&&t.length<2?`(?:/${d})`:`/`+d),c&&(d+=`?`),i+=d,s+=$.Dynamic,c&&(s+=$.BonusOptional),n&&(s+=$.BonusRepeatable),u===`.*`&&(s+=$.BonusWildcard)}e.push(s)}r.push(e)}if(n.strict&&n.end){let e=r.length-1;r[e][r[e].length-1]+=$.BonusStrict}n.strict||(i+=`/?`),n.end?i+=`$`:n.strict&&!i.endsWith(`/`)&&(i+=`(?:/|$)`);let o=new RegExp(i,n.sensitive?``:`i`);function s(e){let t=e.match(o),n={};if(!t)return null;for(let e=1;e<t.length;e++){let r=t[e]||``,i=a[e-1];n[i.name]=r&&i.repeatable?r.split(`/`):r}return n}function c(t){let n=``,r=!1;for(let i of e){(!r||!n.endsWith(`/`))&&(n+=`/`),r=!1;for(let e of i)if(e.type===Z.Static)n+=e.value;else if(e.type===Z.Param){let{value:a,repeatable:o,optional:s}=e,c=a in t?t[a]:``;if(H(c)&&!o)throw Error(`Provided param "${a}" is an array but it is not repeatable (* or + modifiers)`);let l=H(c)?c.join(`/`):c;if(!l){if(s)i.length<2&&(n.endsWith(`/`)?n=n.slice(0,-1):r=!0);else throw Error(`Missing required param "${a}"`)}n+=l}}return n||`/`}return{re:o,score:r,keys:a,parse:s,stringify:c}}function Qn(e,t){let n=0;for(;n<e.length&&n<t.length;){let r=t[n]-e[n];if(r)return r;n++}return e.length<t.length?e.length===1&&e[0]===$.Static+$.Segment?-1:1:e.length>t.length?t.length===1&&t[0]===$.Static+$.Segment?1:-1:0}function $n(e,t){let n=0,r=e.score,i=t.score;for(;n<r.length&&n<i.length;){let e=Qn(r[n],i[n]);if(e)return e;n++}if(Math.abs(i.length-r.length)===1){if(er(r))return 1;if(er(i))return-1}return i.length-r.length}function er(e){let t=e[e.length-1];return e.length>0&&t[t.length-1]<0}var tr={strict:!1,end:!0,sensitive:!1};function nr(e,t,n){let r=B(Zn(qn(e.path),n),{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function rr(e,t){let n=[],r=new Map;t=It(tr,t);function i(e){return r.get(e)}function a(e,n,r){let i=!r,s=ar(e);s.aliasOf=r&&r.record;let l=It(t,e),u=[s];if(`alias`in e){let t=typeof e.alias==`string`?[e.alias]:e.alias;for(let e of t)u.push(ar(B({},s,{components:r?r.record.components:s.components,path:e,aliasOf:r?r.record:s})))}let d,f;for(let t of u){let{path:u}=t;if(n&&u[0]!==`/`){let e=n.record.path,r=e[e.length-1]===`/`?``:`/`;t.path=n.record.path+(u&&r+u)}if(d=nr(t,n,l),r?r.alias.push(d):(f||=d,f!==d&&f.alias.push(d),i&&e.name&&!sr(d)&&o(e.name)),dr(d)&&c(d),s.children){let e=s.children;for(let t=0;t<e.length;t++)a(e[t],d,r&&r.children[t])}r||=d}return f?()=>{o(f)}:V}function o(e){if(Dn(e)){let t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(o),t.alias.forEach(o))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(o),e.alias.forEach(o))}}function s(){return n}function c(e){let t=lr(e,n);n.splice(t,0,e),e.record.name&&!sr(e)&&r.set(e.record.name,e)}function l(e,t){let i,a={},o,s;if(`name`in e&&e.name){if(i=r.get(e.name),!i)throw q(K.MATCHER_NOT_FOUND,{location:e});s=i.record.name,a=B(ir(t.params,i.keys.filter(e=>!e.optional).concat(i.parent?i.parent.keys.filter(e=>e.optional):[]).map(e=>e.name)),e.params&&ir(e.params,i.keys.map(e=>e.name))),o=i.stringify(a)}else if(e.path!=null)o=e.path,i=n.find(e=>e.re.test(o)),i&&(a=i.parse(o),s=i.record.name);else{if(i=t.name?r.get(t.name):n.find(e=>e.re.test(t.path)),!i)throw q(K.MATCHER_NOT_FOUND,{location:e,currentLocation:t});s=i.record.name,a=B({},t.params,e.params),o=i.stringify(a)}let c=[],l=i;for(;l;)c.unshift(l.record),l=l.parent;return{name:s,path:o,params:a,matched:c,meta:cr(c)}}e.forEach(e=>a(e));function u(){n.length=0,r.clear()}return{addRoute:a,resolve:l,removeRoute:o,clearRoutes:u,getRoutes:s,getRecordMatcher:i}}function ir(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function ar(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:or(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function or(e){let t={},n=e.props||!1;if(`component`in e)t.default=n;else for(let r in e.components)t[r]=typeof n==`object`?n[r]:n;return t}function sr(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function cr(e){return e.reduce((e,t)=>B(e,t.meta),{})}function lr(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;$n(e,t[i])<0?r=i:n=i+1}let i=ur(e);return i&&(r=t.lastIndexOf(i,r-1)),r}function ur(e){let t=e;for(;t=t.parent;)if(dr(t)&&$n(e,t)===0)return t}function dr({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function fr(t){let n=h(Pn),r=h(Fn),i=a(()=>{let r=e(t.to);return n.resolve(r)}),o=a(()=>{let{matched:e}=i.value,{length:t}=e,n=e[t-1],a=r.matched;if(!n||!a.length)return-1;let o=a.findIndex(W.bind(null,n));if(o>-1)return o;let s=_r(e[t-2]);return t>1&&_r(n)===s&&a[a.length-1].path!==s?a.findIndex(W.bind(null,e[t-2])):o}),s=a(()=>o.value>-1&&gr(r.params,i.value.params)),c=a(()=>o.value>-1&&o.value===r.matched.length-1&&un(r.params,i.value.params));function l(r={}){if(hr(r)){let r=n[e(t.replace)?`replace`:`push`](e(t.to)).catch(V);return t.viewTransition&&typeof document<`u`&&`startViewTransition`in document&&document.startViewTransition(()=>r),r}return Promise.resolve()}return{route:i,href:a(()=>i.value.href),isActive:s,isExactActive:c,navigate:l}}function pr(e){return e.length===1?e[0]:e}var mr=d({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink:fr,setup(e,{slots:t}){let n=o(fr(e)),{options:r}=h(Pn),i=a(()=>({[vr(e.activeClass,r.linkActiveClass,`router-link-active`)]:n.isActive,[vr(e.exactActiveClass,r.linkExactActiveClass,`router-link-exact-active`)]:n.isExactActive}));return()=>{let r=t.default&&pr(t.default(n));return e.custom?r:u(`a`,{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},r)}}});function hr(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(e.button===void 0||e.button===0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function gr(e,t){for(let n in t){let r=t[n],i=e[n];if(typeof r==`string`){if(r!==i)return!1}else if(!H(i)||i.length!==r.length||r.some((e,t)=>e.valueOf()!==i[t].valueOf()))return!1}return!0}function _r(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}var vr=(e,t,n)=>e??t??n,yr=d({name:`RouterView`,inheritAttrs:!1,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(t,{attrs:n,slots:r}){let o=h(In),c=a(()=>t.route||o.value),l=h(Nn,0),d=a(()=>{let t=e(l),{matched:n}=c.value,r;for(;(r=n[t])&&!r.components;)t++;return t}),p=a(()=>c.value.matched[d.value]);s(Nn,a(()=>d.value+1)),s(Mn,p),s(In,c);let m=i();return f(()=>[m.value,p.value,t.name],([e,t,n],[r,i,a])=>{t&&(t.instances[n]=e,i&&i!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=i.leaveGuards),t.updateGuards.size||(t.updateGuards=i.updateGuards))),e&&t&&(!i||!W(t,i)||!r)&&(t.enterCallbacks[n]||[]).forEach(t=>t(e))},{flush:`post`}),()=>{let e=c.value,i=t.name,a=p.value,o=a&&a.components[i];if(!o)return br(r.default,{Component:o,route:e});let s=a.props[i],l=s?s===!0?e.params:typeof s==`function`?s(e):s:null,d=u(o,B({},l,n,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(a.instances[i]=null)},ref:m}));return br(r.default,{Component:d,route:e})||d}}});function br(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var xr=yr;function Sr(r){let i=rr(r.routes,r),a=r.parseQuery||kn,o=r.stringifyQuery||An,s=r.history,l=Y(),u=Y(),d=Y(),f=n(G),p=G;z&&r.scrollBehavior&&`scrollRestoration`in history&&(history.scrollRestoration=`manual`);let m=Ft.bind(null,e=>``+e),h=Ft.bind(null,nn),ee=Ft.bind(null,U);function te(e,t){let n,r;return Dn(e)?(n=i.getRecordMatcher(e),r=t):r=e,i.addRoute(r,n)}function g(e){let t=i.getRecordMatcher(e);t&&i.removeRoute(t)}function _(){return i.getRoutes().map(e=>e.record)}function ne(e){return!!i.getRecordMatcher(e)}function v(e,t){if(t=B({},t||f.value),typeof e==`string`){let n=on(a,e,t.path),r=i.resolve({path:n.path},t),o=s.createHref(n.fullPath);return B(n,r,{params:ee(r.params),hash:U(n.hash),redirectedFrom:void 0,href:o})}let n;if(e.path!=null)n=B({},e,{path:on(a,e.path,t.path).path});else{let r=B({},e.params);for(let e in r)r[e]??delete r[e];n=B({},e,{params:h(r)}),t.params=h(t.params)}let r=i.resolve(n,t),c=e.hash||``;r.params=m(ee(r.params));let l=sn(o,B({},e,{hash:Qt(c),path:r.path})),u=s.createHref(l);return B({fullPath:l,hash:c,query:o===An?jn(e.query):e.query||{}},r,{redirectedFrom:void 0,href:u})}function y(e){return typeof e==`string`?on(a,e,f.value.path):B({},e)}function b(e,t){if(p!==e)return q(K.NAVIGATION_CANCELLED,{from:t,to:e})}function x(e){return w(e)}function S(e){return x(B(y(e),{replace:!0}))}function C(e,t){let n=e.matched[e.matched.length-1];if(n&&n.redirect){let{redirect:r}=n,i=typeof r==`function`?r(e,t):r;return typeof i==`string`&&(i=i.includes(`?`)||i.includes(`#`)?i=y(i):{path:i},i.params={}),B({query:e.query,hash:e.hash,params:i.path==null?e.params:{}},i)}}function w(e,t){let n=p=v(e),r=f.value,i=e.state,a=e.force,s=e.replace===!0,c=C(n,r);if(c)return w(B(y(c),{state:typeof c==`object`?B({},i,c.state):i,force:a,replace:s}),t||n);let l=n;l.redirectedFrom=t;let u;return!a&&ln(o,r,n)&&(u=q(K.NAVIGATION_DUPLICATED,{to:l,from:r}),ue(r,r,!0,!1)),(u?Promise.resolve(u):re(l,r)).catch(e=>J(e)?J(e,K.NAVIGATION_GUARD_REDIRECT)?e:le(e):se(e,l,r)).then(e=>{if(e){if(J(e,K.NAVIGATION_GUARD_REDIRECT))return w(B({replace:s},y(e.to),{state:typeof e.to==`object`?B({},i,e.to.state):i,force:a}),t||l)}else e=D(l,r,!0,s,i);return ie(l,r,e),e})}function T(e,t){let n=b(e,t);return n?Promise.reject(n):Promise.resolve()}function E(e){let t=j.values().next().value;return t&&typeof t.runWithContext==`function`?t.runWithContext(e):e()}function re(e,t){let n,[r,i,a]=Rn(e,t);n=Ln(r.reverse(),`beforeRouteLeave`,e,t);for(let i of r)i.leaveGuards.forEach(r=>{n.push(X(r,e,t))});let o=T.bind(null,e,t);return n.push(o),N(n).then(()=>{n=[];for(let r of l.list())n.push(X(r,e,t));return n.push(o),N(n)}).then(()=>{n=Ln(i,`beforeRouteUpdate`,e,t);for(let r of i)r.updateGuards.forEach(r=>{n.push(X(r,e,t))});return n.push(o),N(n)}).then(()=>{n=[];for(let r of a)if(r.beforeEnter){if(H(r.beforeEnter))for(let i of r.beforeEnter)n.push(X(i,e,t));else n.push(X(r.beforeEnter,e,t))}return n.push(o),N(n)}).then(()=>(e.matched.forEach(e=>e.enterCallbacks={}),n=Ln(a,`beforeRouteEnter`,e,t,E),n.push(o),N(n))).then(()=>{n=[];for(let r of u.list())n.push(X(r,e,t));return n.push(o),N(n)}).catch(e=>J(e,K.NAVIGATION_CANCELLED)?e:Promise.reject(e))}function ie(e,t,n){d.list().forEach(r=>E(()=>r(e,t,n)))}function D(e,t,n,r,i){let a=b(e,t);if(a)return a;let o=t===G,c=z?history.state:{};n&&(r||o?s.replace(e.fullPath,B({scroll:o&&c&&c.scroll},i)):s.push(e.fullPath,i)),f.value=e,ue(e,t,n,o),le()}let O;function k(){O||=s.listen((e,t,n)=>{if(!M.listening)return;let r=v(e),i=C(r,M.currentRoute.value);if(i){w(B(i,{replace:!0,force:!0}),r).catch(V);return}p=r;let a=f.value;z&&wn(Sn(a.fullPath,n.delta),bn()),re(r,a).catch(e=>J(e,K.NAVIGATION_ABORTED|K.NAVIGATION_CANCELLED)?e:J(e,K.NAVIGATION_GUARD_REDIRECT)?(w(B(y(e.to),{force:!0}),r).then(e=>{J(e,K.NAVIGATION_ABORTED|K.NAVIGATION_DUPLICATED)&&!n.delta&&n.type===mn.pop&&s.go(-1,!1)}).catch(V),Promise.reject()):(n.delta&&s.go(-n.delta,!1),se(e,r,a))).then(e=>{e||=D(r,a,!1),e&&(n.delta&&!J(e,K.NAVIGATION_CANCELLED)?s.go(-n.delta,!1):n.type===mn.pop&&J(e,K.NAVIGATION_ABORTED|K.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),ie(r,a,e)}).catch(V)})}let ae=Y(),oe=Y(),A;function se(e,t,n){le(e);let r=oe.list();return r.length?r.forEach(r=>r(e,t,n)):console.error(e),Promise.reject(e)}function ce(){return A&&f.value!==G?Promise.resolve():new Promise((e,t)=>{ae.add([e,t])})}function le(e){return A||(A=!e,k(),ae.list().forEach(([t,n])=>e?n(e):t()),ae.reset()),e}function ue(e,n,i,a){let{scrollBehavior:o}=r;if(!z||!o)return Promise.resolve();let s=!i&&Tn(Sn(e.fullPath,0))||(a||!i)&&history.state&&history.state.scroll||null;return t().then(()=>o(e,n,s)).then(e=>e&&xn(e)).catch(t=>se(t,e,n))}let de=e=>s.go(e),fe,j=new Set,M={currentRoute:f,listening:!0,addRoute:te,removeRoute:g,clearRoutes:i.clearRoutes,hasRoute:ne,getRoutes:_,resolve:v,options:r,push:x,replace:S,go:de,back:()=>de(-1),forward:()=>de(1),beforeEach:l.add,beforeResolve:u.add,afterEach:d.add,onError:oe.add,isReady:ce,install(t){t.component(`RouterLink`,mr),t.component(`RouterView`,xr),t.config.globalProperties.$router=M,Object.defineProperty(t.config.globalProperties,"$route",{enumerable:!0,get:()=>e(f)}),z&&!fe&&f.value===G&&(fe=!0,x(s.location).catch(e=>{}));let n={};for(let e in G)Object.defineProperty(n,e,{get:()=>f.value[e],enumerable:!0});t.provide(Pn,M),t.provide(Fn,c(n)),t.provide(In,f);let r=t.unmount;j.add(t),t.unmount=function(){j.delete(t),j.size<1&&(p=G,O&&O(),O=null,f.value=G,fe=!1,A=!1),r()}}};function N(e){return e.reduce((e,t)=>e.then(()=>E(t)),Promise.resolve())}return M}function Cr(){return h(Pn)}function wr(e){return h(Fn)}function Tr(e){let t=e=>({sourceRef:Or(e)});return[{name:`github-pr`,path:`/gh/:owner/:repo/:number(\\d+)`,component:e,props:t},{name:`github-compare`,path:`/gh/:owner/:repo/compare/:range(.+\\.\\.\\..+)`,component:e,props:t},{name:`github-commit`,path:`/gh/:owner/:repo/commit/:sha`,component:e,props:t}]}function Er(e){switch(e.kind){case`github-pr`:return`/gh/${e.owner}/${e.repo}/${e.number}`;case`github-compare`:return`/gh/${e.owner}/${e.repo}/compare/${e.base}...${e.head}`;case`github-commit`:return`/gh/${e.owner}/${e.repo}/commit/${e.sha}`;case`paste`:return;case`local`:return}}function Dr(e){let t=e.indexOf(`...`);return t>0&&t+3<e.length?{base:e.slice(0,t),head:e.slice(t+3)}:void 0}function Or(e){let t=t=>String(e.params[t]),n=t(`owner`),r=t(`repo`);switch(e.name){case`github-pr`:return{kind:`github-pr`,owner:n,repo:r,number:t(`number`)};case`github-compare`:{let e=Dr(t(`range`));return e&&{kind:`github-compare`,owner:n,repo:r,...e}}case`github-commit`:return{kind:`github-commit`,owner:n,repo:r,sha:t(`sha`)}}}function kr(e,t){return`/gh/${e}/${t}`}function Ar(e){return e.kind===`paste`||e.kind===`local`?void 0:{route:kr(e.owner,e.repo),label:`${e.owner}/${e.repo}`}}function jr(e){let t=e.trim().match(/github\.com\/([^/\s]+)\/([^/\s#?]+)(?:\/(pull|commit|compare)\/([^\s#?]+)|\/pulls\/?)?(?:[/?#]|$)/);if(!t)return;let[,n=``,r=``,i,a=``]=t;if(i===`pull`){let e=a.match(/^\d+/)?.[0];return e?Er({kind:`github-pr`,owner:n,repo:r,number:e}):void 0}if(i===`commit`)return Er({kind:`github-commit`,owner:n,repo:r,sha:a.replace(/\/.*$/,``)});if(i===`compare`){let e=Dr(a);return e&&Er({kind:`github-compare`,owner:n,repo:r,...e})}return kr(n,r)}var Mr=Sr({history:Wn(new URL(document.baseURI).pathname),routes:[{name:`home`,path:`/`,component:()=>D(()=>import(`./pages-web-DitAPN6U.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),import.meta.url)},{path:`/upload`,component:()=>D(()=>import(`./upload-GnI9kmJu.js`),__vite__mapDeps([16,1,3,4,2,5,6,7,8,9,10,17,18,19,11,12,20,15]),import.meta.url)},{path:`/gh/:owner/:repo`,component:()=>D(()=>import(`./_repo_-Dcgj3PGg.js`),__vite__mapDeps([21,4,1,2,3,5,6,7,8,9,10,17,18,22,12,14]),import.meta.url)},...Tr(()=>D(()=>import(`./diff-BKQFn0my.js`),__vite__mapDeps([23,1,3,4,2,5,6,7,8,9,10,17,18,19,11,12,20]),import.meta.url))]});async function Nr(){let e=te(Mt).use(ie);await D(async()=>{let{installLocal:e}=await import(`./install-B-q5w2uE.js`);return{installLocal:e}},__vite__mapDeps([24,1,2,5,6,7,8,4,9,10,25]),import.meta.url).then(({installLocal:t})=>t(e,Mr)),e.use(Mr).mount(`#app`)}Nr();export{mr as a,kt as c,Ot as d,ut as f,jr as i,Dt as l,me as m,kr as n,wr as o,Ve as p,Er as r,Cr as s,Ar as t,Et as u};