purecontext-mcp 1.1.8 → 1.2.0
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.
- package/AGENT_INSTRUCTIONS.md +393 -0
- package/AGENT_INSTRUCTIONS_SHORT.md +53 -0
- package/AST-SEARCH.md +274 -0
- package/CHANGELOG.md +62 -0
- package/CODE-INTELLIGENCE.md +369 -0
- package/HEALTH-DASHBOARDS.md +241 -0
- package/README.md +7 -0
- package/REFACTORING-SAFELY.md +279 -0
- package/UNDERSTANDING-RELATIONSHIPS.md +240 -0
- package/USER-GUIDE.md +14 -0
- package/VISUALIZING-CODE.md +199 -0
- package/WORKFLOW-TECH-DEBT.md +286 -0
- package/dist/core/db/dep-store.d.ts +75 -0
- package/dist/core/db/dep-store.d.ts.map +1 -1
- package/dist/core/db/dep-store.js +277 -0
- package/dist/core/db/dep-store.js.map +1 -1
- package/dist/core/db/schema.d.ts.map +1 -1
- package/dist/core/db/schema.js +12 -0
- package/dist/core/db/schema.js.map +1 -1
- package/dist/core/index-manager.js +1 -1
- package/dist/core/index-manager.js.map +1 -1
- package/dist/core/types.d.ts +5 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/graph/diagram-renderer.d.ts +83 -0
- package/dist/graph/diagram-renderer.d.ts.map +1 -0
- package/dist/graph/diagram-renderer.js +294 -0
- package/dist/graph/diagram-renderer.js.map +1 -0
- package/dist/graph/graph-traversal.d.ts +92 -0
- package/dist/graph/graph-traversal.d.ts.map +1 -1
- package/dist/graph/graph-traversal.js +440 -2
- package/dist/graph/graph-traversal.js.map +1 -1
- package/dist/server/mcp-server.d.ts.map +1 -1
- package/dist/server/mcp-server.js +145 -0
- package/dist/server/mcp-server.js.map +1 -1
- package/dist/server/tools/check-delete-safe.d.ts +50 -0
- package/dist/server/tools/check-delete-safe.d.ts.map +1 -0
- package/dist/server/tools/check-delete-safe.js +308 -0
- package/dist/server/tools/check-delete-safe.js.map +1 -0
- package/dist/server/tools/check-move-safe.d.ts +44 -0
- package/dist/server/tools/check-move-safe.d.ts.map +1 -0
- package/dist/server/tools/check-move-safe.js +266 -0
- package/dist/server/tools/check-move-safe.js.map +1 -0
- package/dist/server/tools/check-rename-safe.d.ts +48 -0
- package/dist/server/tools/check-rename-safe.d.ts.map +1 -0
- package/dist/server/tools/check-rename-safe.js +218 -0
- package/dist/server/tools/check-rename-safe.js.map +1 -0
- package/dist/server/tools/diff-health-radar.d.ts +44 -0
- package/dist/server/tools/diff-health-radar.d.ts.map +1 -0
- package/dist/server/tools/diff-health-radar.js +192 -0
- package/dist/server/tools/diff-health-radar.js.map +1 -0
- package/dist/server/tools/find-cycles.d.ts +31 -0
- package/dist/server/tools/find-cycles.d.ts.map +1 -0
- package/dist/server/tools/find-cycles.js +85 -0
- package/dist/server/tools/find-cycles.js.map +1 -0
- package/dist/server/tools/find-implementations.d.ts +47 -0
- package/dist/server/tools/find-implementations.d.ts.map +1 -0
- package/dist/server/tools/find-implementations.js +167 -0
- package/dist/server/tools/find-implementations.js.map +1 -0
- package/dist/server/tools/find-untested-symbols.d.ts +52 -0
- package/dist/server/tools/find-untested-symbols.d.ts.map +1 -0
- package/dist/server/tools/find-untested-symbols.js +308 -0
- package/dist/server/tools/find-untested-symbols.js.map +1 -0
- package/dist/server/tools/get-architecture-snapshot.d.ts +43 -0
- package/dist/server/tools/get-architecture-snapshot.d.ts.map +1 -0
- package/dist/server/tools/get-architecture-snapshot.js +292 -0
- package/dist/server/tools/get-architecture-snapshot.js.map +1 -0
- package/dist/server/tools/get-call-hierarchy.d.ts +43 -0
- package/dist/server/tools/get-call-hierarchy.d.ts.map +1 -0
- package/dist/server/tools/get-call-hierarchy.js +119 -0
- package/dist/server/tools/get-call-hierarchy.js.map +1 -0
- package/dist/server/tools/get-class-hierarchy.d.ts +36 -0
- package/dist/server/tools/get-class-hierarchy.d.ts.map +1 -0
- package/dist/server/tools/get-class-hierarchy.js +125 -0
- package/dist/server/tools/get-class-hierarchy.js.map +1 -0
- package/dist/server/tools/get-complexity-hotspots.d.ts +50 -0
- package/dist/server/tools/get-complexity-hotspots.d.ts.map +1 -0
- package/dist/server/tools/get-complexity-hotspots.js +282 -0
- package/dist/server/tools/get-complexity-hotspots.js.map +1 -0
- package/dist/server/tools/get-coupling-map.d.ts +39 -0
- package/dist/server/tools/get-coupling-map.d.ts.map +1 -0
- package/dist/server/tools/get-coupling-map.js +107 -0
- package/dist/server/tools/get-coupling-map.js.map +1 -0
- package/dist/server/tools/get-debt-report.d.ts +44 -0
- package/dist/server/tools/get-debt-report.d.ts.map +1 -0
- package/dist/server/tools/get-debt-report.js +606 -0
- package/dist/server/tools/get-debt-report.js.map +1 -0
- package/dist/server/tools/get-entry-points.d.ts +79 -0
- package/dist/server/tools/get-entry-points.d.ts.map +1 -0
- package/dist/server/tools/get-entry-points.js +362 -0
- package/dist/server/tools/get-entry-points.js.map +1 -0
- package/dist/server/tools/get-public-api.d.ts +53 -0
- package/dist/server/tools/get-public-api.d.ts.map +1 -0
- package/dist/server/tools/get-public-api.js +218 -0
- package/dist/server/tools/get-public-api.js.map +1 -0
- package/dist/server/tools/get-test-coverage-map.d.ts +66 -0
- package/dist/server/tools/get-test-coverage-map.d.ts.map +1 -0
- package/dist/server/tools/get-test-coverage-map.js +588 -0
- package/dist/server/tools/get-test-coverage-map.js.map +1 -0
- package/dist/server/tools/get-todos.d.ts +51 -0
- package/dist/server/tools/get-todos.d.ts.map +1 -0
- package/dist/server/tools/get-todos.js +180 -0
- package/dist/server/tools/get-todos.js.map +1 -0
- package/dist/server/tools/get-type-graph.d.ts +73 -0
- package/dist/server/tools/get-type-graph.d.ts.map +1 -0
- package/dist/server/tools/get-type-graph.js +437 -0
- package/dist/server/tools/get-type-graph.js.map +1 -0
- package/dist/server/tools/health-radar.d.ts +50 -0
- package/dist/server/tools/health-radar.d.ts.map +1 -0
- package/dist/server/tools/health-radar.js +426 -0
- package/dist/server/tools/health-radar.js.map +1 -0
- package/dist/server/tools/plan-refactoring.d.ts +74 -0
- package/dist/server/tools/plan-refactoring.d.ts.map +1 -0
- package/dist/server/tools/plan-refactoring.js +644 -0
- package/dist/server/tools/plan-refactoring.js.map +1 -0
- package/dist/server/tools/render-call-graph.d.ts +40 -0
- package/dist/server/tools/render-call-graph.d.ts.map +1 -0
- package/dist/server/tools/render-call-graph.js +215 -0
- package/dist/server/tools/render-call-graph.js.map +1 -0
- package/dist/server/tools/render-class-hierarchy.d.ts +42 -0
- package/dist/server/tools/render-class-hierarchy.d.ts.map +1 -0
- package/dist/server/tools/render-class-hierarchy.js +265 -0
- package/dist/server/tools/render-class-hierarchy.js.map +1 -0
- package/dist/server/tools/render-dep-matrix.d.ts +38 -0
- package/dist/server/tools/render-dep-matrix.d.ts.map +1 -0
- package/dist/server/tools/render-dep-matrix.js +186 -0
- package/dist/server/tools/render-dep-matrix.js.map +1 -0
- package/dist/server/tools/render-diagram.d.ts +47 -0
- package/dist/server/tools/render-diagram.d.ts.map +1 -0
- package/dist/server/tools/render-diagram.js +266 -0
- package/dist/server/tools/render-diagram.js.map +1 -0
- package/dist/server/tools/render-import-graph.d.ts +41 -0
- package/dist/server/tools/render-import-graph.d.ts.map +1 -0
- package/dist/server/tools/render-import-graph.js +158 -0
- package/dist/server/tools/render-import-graph.js.map +1 -0
- package/dist/server/tools/search-ast.d.ts +55 -0
- package/dist/server/tools/search-ast.d.ts.map +1 -0
- package/dist/server/tools/search-ast.js +279 -0
- package/dist/server/tools/search-ast.js.map +1 -0
- package/dist/server/tools/search-by-complexity.d.ts +92 -0
- package/dist/server/tools/search-by-complexity.d.ts.map +1 -0
- package/dist/server/tools/search-by-complexity.js +268 -0
- package/dist/server/tools/search-by-complexity.js.map +1 -0
- package/dist/server/tools/search-by-decorator.d.ts +48 -0
- package/dist/server/tools/search-by-decorator.d.ts.map +1 -0
- package/dist/server/tools/search-by-decorator.js +518 -0
- package/dist/server/tools/search-by-decorator.js.map +1 -0
- package/dist/server/tools/search-by-signature.d.ts +56 -0
- package/dist/server/tools/search-by-signature.d.ts.map +1 -0
- package/dist/server/tools/search-by-signature.js +200 -0
- package/dist/server/tools/search-by-signature.js.map +1 -0
- package/dist/ui/assets/BlastRadius-QdgESOL8.js +1 -0
- package/dist/ui/assets/{DependencyGraph-B60SMPbX.js → DependencyGraph-BSMhzwWV.js} +1 -1
- package/dist/ui/assets/{NotFound-Bsg8Wppk.js → NotFound-CipFP_s1.js} +1 -1
- package/dist/ui/assets/{RepoDetail-Cie0D4_s.js → RepoDetail-Dfp5z5Kq.js} +1 -1
- package/dist/ui/assets/{RepoList-CldNt89M.js → RepoList-BKtST3hB.js} +1 -1
- package/dist/ui/assets/{Search-CgvpHMOi.js → Search-DzhGDViy.js} +1 -1
- package/dist/ui/assets/{SymbolView-B9h0LZTz.js → SymbolView-ryVEwAHG.js} +1 -1
- package/dist/ui/assets/{index-DADf5y_L.css → index-Ny8gn9F0.css} +1 -1
- package/dist/ui/assets/{index-eK0wMkUR.js → index-nX2chMqi.js} +2 -2
- package/dist/ui/assets/{useSearch-KAl3Qyi2.js → useSearch-BnBCRKui.js} +1 -1
- package/dist/ui/index.html +2 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/dev/jcodemunch-gap-analysis.md +198 -0
- package/package.json +9 -1
- package/user-manual.md +2466 -0
- package/dist/ui/assets/BlastRadius-RP7vJEyQ.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{color-scheme:dark}body{--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.-left-1\.5{left:-.375rem}.-right-0\.5{right:-.125rem}.-right-1\.5{right:-.375rem}.-top-0\.5{top:-.125rem}.-top-1\.5{top:-.375rem}.bottom-0{bottom:0}.left-0{left:0}.left-3{left:.75rem}.right-0{right:0}.right-3{right:.75rem}.top-1\/2{top:50%}.top-14{top:3.5rem}.top-3{top:.75rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.m-3{margin:.75rem}.m-4{margin:1rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-0\.5{margin-left:.125rem}.ml-10{margin-left:2.5rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-px{margin-top:1px}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-1\.5{height:.375rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-64{max-height:16rem}.max-h-\[680px\]{max-height:680px}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[160px\]{min-width:160px}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-\[260px\]{max-width:260px}.max-w-\[680px\]{max-width:680px}.max-w-lg{max-width:32rem}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-800>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(31 41 55 / var(--tw-divide-opacity, 1))}.divide-gray-800\/50>:not([hidden])~:not([hidden]){border-color:#1f293780}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-blue-500\/30{border-color:#3b82f64d}.border-blue-600\/30{border-color:#2563eb4d}.border-blue-600\/50{border-color:#2563eb80}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.border-gray-700\/50{border-color:#37415180}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-gray-800\/50{border-color:#1f293780}.border-gray-800\/60{border-color:#1f293799}.border-gray-950{--tw-border-opacity: 1;border-color:rgb(3 7 18 / var(--tw-border-opacity, 1))}.border-green-700{--tw-border-opacity: 1;border-color:rgb(21 128 61 / var(--tw-border-opacity, 1))}.border-indigo-800\/40{border-color:#3730a366}.border-orange-500\/30{border-color:#f973164d}.border-red-500\/30{border-color:#ef44444d}.border-red-700{--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity, 1))}.border-red-800{--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.border-red-800\/50{border-color:#991b1b80}.border-transparent{border-color:transparent}.border-yellow-500\/30{border-color:#eab3084d}.border-yellow-800\/50{border-color:#854d0e80}.border-t-transparent{border-top-color:transparent}.bg-amber-900\/70{background-color:#78350fb3}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/20{background-color:#3b82f633}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-blue-600\/10{background-color:#2563eb1a}.bg-blue-600\/20{background-color:#2563eb33}.bg-blue-600\/30{background-color:#2563eb4d}.bg-blue-900\/50{background-color:#1e3a8a80}.bg-blue-900\/70{background-color:#1e3a8ab3}.bg-cyan-900\/70{background-color:#164e63b3}.bg-emerald-900\/70{background-color:#064e3bb3}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.bg-gray-700\/90{background-color:#374151e6}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.bg-gray-800\/50{background-color:#1f293780}.bg-gray-800\/70{background-color:#1f2937b3}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-gray-900\/50{background-color:#11182780}.bg-gray-900\/80{background-color:#111827cc}.bg-gray-950{--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-900\/40{background-color:#14532d66}.bg-green-900\/60{background-color:#14532d99}.bg-indigo-900\/60{background-color:#312e8199}.bg-indigo-900\/70{background-color:#312e81b3}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-orange-500\/20{background-color:#f9731633}.bg-orange-600\/80{background-color:#ea580ccc}.bg-orange-900\/40{background-color:#7c2d1266}.bg-orange-900\/70{background-color:#7c2d12b3}.bg-pink-900\/70{background-color:#831843b3}.bg-purple-900\/70{background-color:#581c87b3}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/20{background-color:#ef444433}.bg-red-900\/40{background-color:#7f1d1d66}.bg-red-900\/60{background-color:#7f1d1d99}.bg-red-950{--tw-bg-opacity: 1;background-color:rgb(69 10 10 / var(--tw-bg-opacity, 1))}.bg-red-950\/60{background-color:#450a0a99}.bg-rose-900\/70{background-color:#881337b3}.bg-teal-900\/70{background-color:#134e4ab3}.bg-violet-900\/70{background-color:#4c1d95b3}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/20{background-color:#eab30833}.bg-yellow-500\/30{background-color:#eab3084d}.bg-yellow-900\/40{background-color:#713f1266}.bg-yellow-900\/70{background-color:#713f12b3}.bg-yellow-950\/60{background-color:#42200699}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[3px\]{padding-top:3px;padding-bottom:3px}.py-px{padding-top:1px;padding-bottom:1px}.pl-0\.5{padding-left:.125rem}.pl-1{padding-left:.25rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-5xl{font-size:3rem;line-height:1}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-6{line-height:1.5rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-blue-200{--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-400\/70{color:#60a5fab3}.text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-indigo-300{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.text-orange-300{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.text-orange-400{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.text-pink-300{--tw-text-opacity: 1;color:rgb(249 168 212 / var(--tw-text-opacity, 1))}.text-purple-300{--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-300\/80{color:#fca5a5cc}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-rose-300{--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.text-teal-300{--tw-text-opacity: 1;color:rgb(94 234 212 / var(--tw-text-opacity, 1))}.text-violet-300{--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-200{--tw-text-opacity: 1;color:rgb(254 240 138 / var(--tw-text-opacity, 1))}.text-yellow-300{--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.text-yellow-300\/80{color:#fde047cc}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-yellow-500\/70{color:#eab308b3}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-600::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(75 85 99 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-600::placeholder{--tw-placeholder-opacity: 1;color:rgb(75 85 99 / var(--tw-placeholder-opacity, 1))}.accent-blue-500{accent-color:#3b82f6}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-blue-500\/20{--tw-shadow-color: rgb(59 130 246 / .2);--tw-shadow: var(--tw-shadow-colored)}.\!outline{outline-style:solid!important}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-inset{--tw-ring-inset: inset}.ring-blue-700\/50{--tw-ring-color: rgb(29 78 216 / .5)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.scrollbar-thin{scrollbar-width:thin;scrollbar-color:#374151 transparent}.\[animation-delay\:150ms\]{animation-delay:.15s}.\[animation-delay\:300ms\]{animation-delay:.3s}.hover\:border-blue-600:hover{--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.hover\:border-gray-500:hover{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.hover\:bg-blue-500:hover{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-600:hover{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-700:hover{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-800:hover{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-800\/30:hover{background-color:#1f29374d}.hover\:bg-gray-800\/50:hover{background-color:#1f293780}.hover\:bg-gray-800\/60:hover{background-color:#1f293799}.hover\:bg-orange-500:hover{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.hover\:text-blue-300:hover{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.hover\:text-blue-400:hover{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.hover\:text-gray-100:hover{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.hover\:text-gray-200:hover{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.hover\:text-gray-300:hover{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.hover\:text-orange-300:hover{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.hover\:text-red-300:hover{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.hover\:text-yellow-300:hover{--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\:cursor-wait:disabled{cursor:wait}.disabled\:bg-gray-800:disabled{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.disabled\:text-gray-600:disabled{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.disabled\:text-gray-700:disabled{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group\/sym:hover .group-hover\/sym\:text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.group\/viewer:hover .group-hover\/viewer\:opacity-100{opacity:1}@media(min-width:640px){.sm\:block{display:block}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}
|
|
1
|
+
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{color-scheme:dark}body{--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.-left-1\.5{left:-.375rem}.-right-0\.5{right:-.125rem}.-right-1\.5{right:-.375rem}.-top-0\.5{top:-.125rem}.-top-1\.5{top:-.375rem}.bottom-0{bottom:0}.left-0{left:0}.left-3{left:.75rem}.right-0{right:0}.right-3{right:.75rem}.top-1\/2{top:50%}.top-14{top:3.5rem}.top-3{top:.75rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.m-3{margin:.75rem}.m-4{margin:1rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-0\.5{margin-left:.125rem}.ml-10{margin-left:2.5rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-px{margin-top:1px}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-1\.5{height:.375rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-64{max-height:16rem}.max-h-\[680px\]{max-height:680px}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[160px\]{min-width:160px}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-\[260px\]{max-width:260px}.max-w-\[680px\]{max-width:680px}.max-w-lg{max-width:32rem}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-800>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(31 41 55 / var(--tw-divide-opacity, 1))}.divide-gray-800\/50>:not([hidden])~:not([hidden]){border-color:#1f293780}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-blue-500\/30{border-color:#3b82f64d}.border-blue-600\/30{border-color:#2563eb4d}.border-blue-600\/50{border-color:#2563eb80}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.border-gray-700\/50{border-color:#37415180}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-gray-800\/50{border-color:#1f293780}.border-gray-800\/60{border-color:#1f293799}.border-gray-950{--tw-border-opacity: 1;border-color:rgb(3 7 18 / var(--tw-border-opacity, 1))}.border-green-700{--tw-border-opacity: 1;border-color:rgb(21 128 61 / var(--tw-border-opacity, 1))}.border-indigo-800\/40{border-color:#3730a366}.border-orange-500\/30{border-color:#f973164d}.border-red-500\/30{border-color:#ef44444d}.border-red-700{--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity, 1))}.border-red-800{--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.border-red-800\/50{border-color:#991b1b80}.border-transparent{border-color:transparent}.border-yellow-500\/30{border-color:#eab3084d}.border-yellow-800\/50{border-color:#854d0e80}.border-t-transparent{border-top-color:transparent}.bg-amber-900\/70{background-color:#78350fb3}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/20{background-color:#3b82f633}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-blue-600\/10{background-color:#2563eb1a}.bg-blue-600\/20{background-color:#2563eb33}.bg-blue-600\/30{background-color:#2563eb4d}.bg-blue-900\/50{background-color:#1e3a8a80}.bg-blue-900\/70{background-color:#1e3a8ab3}.bg-cyan-900\/70{background-color:#164e63b3}.bg-emerald-900\/70{background-color:#064e3bb3}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.bg-gray-700\/90{background-color:#374151e6}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.bg-gray-800\/50{background-color:#1f293780}.bg-gray-800\/70{background-color:#1f2937b3}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-gray-900\/50{background-color:#11182780}.bg-gray-900\/80{background-color:#111827cc}.bg-gray-950{--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-900\/40{background-color:#14532d66}.bg-green-900\/60{background-color:#14532d99}.bg-indigo-900\/60{background-color:#312e8199}.bg-indigo-900\/70{background-color:#312e81b3}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-orange-500\/20{background-color:#f9731633}.bg-orange-600\/80{background-color:#ea580ccc}.bg-orange-900\/40{background-color:#7c2d1266}.bg-orange-900\/70{background-color:#7c2d12b3}.bg-pink-900\/70{background-color:#831843b3}.bg-purple-900\/70{background-color:#581c87b3}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/20{background-color:#ef444433}.bg-red-900\/40{background-color:#7f1d1d66}.bg-red-900\/60{background-color:#7f1d1d99}.bg-red-950{--tw-bg-opacity: 1;background-color:rgb(69 10 10 / var(--tw-bg-opacity, 1))}.bg-red-950\/60{background-color:#450a0a99}.bg-rose-900\/70{background-color:#881337b3}.bg-teal-900\/70{background-color:#134e4ab3}.bg-violet-900\/70{background-color:#4c1d95b3}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/20{background-color:#eab30833}.bg-yellow-500\/30{background-color:#eab3084d}.bg-yellow-900\/40{background-color:#713f1266}.bg-yellow-900\/70{background-color:#713f12b3}.bg-yellow-950\/60{background-color:#42200699}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[3px\]{padding-top:3px;padding-bottom:3px}.py-px{padding-top:1px;padding-bottom:1px}.pl-0\.5{padding-left:.125rem}.pl-1{padding-left:.25rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-5xl{font-size:3rem;line-height:1}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-6{line-height:1.5rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-blue-200{--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-400\/70{color:#60a5fab3}.text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-indigo-300{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.text-orange-300{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.text-orange-400{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.text-pink-300{--tw-text-opacity: 1;color:rgb(249 168 212 / var(--tw-text-opacity, 1))}.text-purple-300{--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-300\/80{color:#fca5a5cc}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-rose-300{--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.text-teal-300{--tw-text-opacity: 1;color:rgb(94 234 212 / var(--tw-text-opacity, 1))}.text-violet-300{--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-200{--tw-text-opacity: 1;color:rgb(254 240 138 / var(--tw-text-opacity, 1))}.text-yellow-300{--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.text-yellow-300\/80{color:#fde047cc}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-yellow-500\/70{color:#eab308b3}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-600::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(75 85 99 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-600::placeholder{--tw-placeholder-opacity: 1;color:rgb(75 85 99 / var(--tw-placeholder-opacity, 1))}.accent-blue-500{accent-color:#3b82f6}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-blue-500\/20{--tw-shadow-color: rgb(59 130 246 / .2);--tw-shadow: var(--tw-shadow-colored)}.\!outline{outline-style:solid!important}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-inset{--tw-ring-inset: inset}.ring-blue-700\/50{--tw-ring-color: rgb(29 78 216 / .5)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.scrollbar-thin{scrollbar-width:thin;scrollbar-color:#374151 transparent}.\[animation-delay\:150ms\]{animation-delay:.15s}.\[animation-delay\:300ms\]{animation-delay:.3s}.hover\:border-blue-600:hover{--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.hover\:border-gray-500:hover{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.hover\:bg-blue-500:hover{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-600:hover{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-700:hover{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-800:hover{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-800\/30:hover{background-color:#1f29374d}.hover\:bg-gray-800\/50:hover{background-color:#1f293780}.hover\:bg-gray-800\/60:hover{background-color:#1f293799}.hover\:bg-orange-500:hover{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.hover\:text-blue-300:hover{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.hover\:text-blue-400:hover{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.hover\:text-gray-100:hover{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.hover\:text-gray-200:hover{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.hover\:text-gray-300:hover{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.hover\:text-orange-300:hover{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.hover\:text-red-300:hover{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.hover\:text-yellow-300:hover{--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\:cursor-wait:disabled{cursor:wait}.disabled\:bg-gray-800:disabled{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.disabled\:text-gray-600:disabled{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.disabled\:text-gray-700:disabled{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group\/sym:hover .group-hover\/sym\:text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.group\/viewer:hover .group-hover\/viewer\:opacity-100{opacity:1}@media(min-width:640px){.sm\:block{display:block}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Search-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Search-DzhGDViy.js","assets/useSearch-BnBCRKui.js","assets/DependencyGraph-BSMhzwWV.js","assets/DependencyGraph-BZV40eAE.css","assets/BlastRadius-QdgESOL8.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))f(d);new MutationObserver(d=>{for(const h of d)if(h.type==="childList")for(const p of h.addedNodes)p.tagName==="LINK"&&p.rel==="modulepreload"&&f(p)}).observe(document,{childList:!0,subtree:!0});function s(d){const h={};return d.integrity&&(h.integrity=d.integrity),d.referrerPolicy&&(h.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?h.credentials="include":d.crossOrigin==="anonymous"?h.credentials="omit":h.credentials="same-origin",h}function f(d){if(d.ep)return;d.ep=!0;const h=s(d);fetch(d.href,h)}})();function Dh(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}var jf={exports:{}},Nn={};/**
|
|
3
3
|
* @license React
|
|
4
4
|
* react-jsx-runtime.production.js
|
|
@@ -58,4 +58,4 @@ Error generating stack: `+a.message+`
|
|
|
58
58
|
* @license MIT
|
|
59
59
|
*/var yh="popstate";function vh(i){return typeof i=="object"&&i!=null&&"pathname"in i&&"search"in i&&"hash"in i&&"state"in i&&"key"in i}function B0(i={}){function r(f,d){var y;let h=(y=d.state)==null?void 0:y.masked,{pathname:p,search:R,hash:b}=h||f.location;return wf("",{pathname:p,search:R,hash:b},d.state&&d.state.usr||null,d.state&&d.state.key||"default",h?{pathname:f.location.pathname,search:f.location.search,hash:f.location.hash}:void 0)}function s(f,d){return typeof d=="string"?d:qn(d)}return Y0(r,s,null,i)}function At(i,r){if(i===!1||i===null||typeof i>"u")throw new Error(r)}function Ue(i,r){if(!i){typeof console<"u"&&console.warn(r);try{throw new Error(r)}catch{}}}function q0(){return Math.random().toString(36).substring(2,10)}function gh(i,r){return{usr:i.state,key:i.key,idx:r,masked:i.unstable_mask?{pathname:i.pathname,search:i.search,hash:i.hash}:void 0}}function wf(i,r,s=null,f,d){return{pathname:typeof i=="string"?i:i.pathname,search:"",hash:"",...typeof r=="string"?Ba(r):r,state:s,key:r&&r.key||f||q0(),unstable_mask:d}}function qn({pathname:i="/",search:r="",hash:s=""}){return r&&r!=="?"&&(i+=r.charAt(0)==="?"?r:"?"+r),s&&s!=="#"&&(i+=s.charAt(0)==="#"?s:"#"+s),i}function Ba(i){let r={};if(i){let s=i.indexOf("#");s>=0&&(r.hash=i.substring(s),i=i.substring(0,s));let f=i.indexOf("?");f>=0&&(r.search=i.substring(f),i=i.substring(0,f)),i&&(r.pathname=i)}return r}function Y0(i,r,s,f={}){let{window:d=document.defaultView,v5Compat:h=!1}=f,p=d.history,R="POP",b=null,y=O();y==null&&(y=0,p.replaceState({...p.state,idx:y},""));function O(){return(p.state||{idx:null}).idx}function T(){R="POP";let X=O(),q=X==null?null:X-y;y=X,b&&b({action:R,location:G.location,delta:q})}function M(X,q){R="PUSH";let I=vh(X)?X:wf(G.location,X,q);y=O()+1;let k=gh(I,y),yt=G.createHref(I.unstable_mask||I);try{p.pushState(k,"",yt)}catch(dt){if(dt instanceof DOMException&&dt.name==="DataCloneError")throw dt;d.location.assign(yt)}h&&b&&b({action:R,location:G.location,delta:1})}function w(X,q){R="REPLACE";let I=vh(X)?X:wf(G.location,X,q);y=O();let k=gh(I,y),yt=G.createHref(I.unstable_mask||I);p.replaceState(k,"",yt),h&&b&&b({action:R,location:G.location,delta:0})}function V(X){return G0(X)}let G={get action(){return R},get location(){return i(d,p)},listen(X){if(b)throw new Error("A history only accepts one active listener");return d.addEventListener(yh,T),b=X,()=>{d.removeEventListener(yh,T),b=null}},createHref(X){return r(d,X)},createURL:V,encodeLocation(X){let q=V(X);return{pathname:q.pathname,search:q.search,hash:q.hash}},push:M,replace:w,go(X){return p.go(X)}};return G}function G0(i,r=!1){let s="http://localhost";typeof window<"u"&&(s=window.location.origin!=="null"?window.location.origin:window.location.href),At(s,"No window.location.(origin|href) available to create URL");let f=typeof i=="string"?i:qn(i);return f=f.replace(/ $/,"%20"),!r&&f.startsWith("//")&&(f=s+f),new URL(f,s)}function Uh(i,r,s="/"){return X0(i,r,s,!1)}function X0(i,r,s,f){let d=typeof r=="string"?Ba(r):r,h=il(d.pathname||"/",s);if(h==null)return null;let p=Nh(i);Q0(p);let R=null;for(let b=0;R==null&&b<p.length;++b){let y=P0(h);R=F0(p[b],y,f)}return R}function Nh(i,r=[],s=[],f="",d=!1){let h=(p,R,b=d,y)=>{let O={relativePath:y===void 0?p.path||"":y,caseSensitive:p.caseSensitive===!0,childrenIndex:R,route:p};if(O.relativePath.startsWith("/")){if(!O.relativePath.startsWith(f)&&b)return;At(O.relativePath.startsWith(f),`Absolute route path "${O.relativePath}" nested under path "${f}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),O.relativePath=O.relativePath.slice(f.length)}let T=De([f,O.relativePath]),M=s.concat(O);p.children&&p.children.length>0&&(At(p.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${T}".`),Nh(p.children,r,M,T,b)),!(p.path==null&&!p.index)&&r.push({path:T,score:$0(T,p.index),routesMeta:M})};return i.forEach((p,R)=>{var b;if(p.path===""||!((b=p.path)!=null&&b.includes("?")))h(p,R);else for(let y of jh(p.path))h(p,R,!0,y)}),r}function jh(i){let r=i.split("/");if(r.length===0)return[];let[s,...f]=r,d=s.endsWith("?"),h=s.replace(/\?$/,"");if(f.length===0)return d?[h,""]:[h];let p=jh(f.join("/")),R=[];return R.push(...p.map(b=>b===""?h:[h,b].join("/"))),d&&R.push(...p),R.map(b=>i.startsWith("/")&&b===""?"/":b)}function Q0(i){i.sort((r,s)=>r.score!==s.score?s.score-r.score:W0(r.routesMeta.map(f=>f.childrenIndex),s.routesMeta.map(f=>f.childrenIndex)))}var Z0=/^:[\w-]+$/,w0=3,V0=2,K0=1,J0=10,k0=-2,ph=i=>i==="*";function $0(i,r){let s=i.split("/"),f=s.length;return s.some(ph)&&(f+=k0),r&&(f+=V0),s.filter(d=>!ph(d)).reduce((d,h)=>d+(Z0.test(h)?w0:h===""?K0:J0),f)}function W0(i,r){return i.length===r.length&&i.slice(0,-1).every((f,d)=>f===r[d])?i[i.length-1]-r[r.length-1]:0}function F0(i,r,s=!1){let{routesMeta:f}=i,d={},h="/",p=[];for(let R=0;R<f.length;++R){let b=f[R],y=R===f.length-1,O=h==="/"?r:r.slice(h.length)||"/",T=oi({path:b.relativePath,caseSensitive:b.caseSensitive,end:y},O),M=b.route;if(!T&&y&&s&&!f[f.length-1].route.index&&(T=oi({path:b.relativePath,caseSensitive:b.caseSensitive,end:!1},O)),!T)return null;Object.assign(d,T.params),p.push({params:d,pathname:De([h,T.pathname]),pathnameBase:av(De([h,T.pathnameBase])),route:M}),T.pathnameBase!=="/"&&(h=De([h,T.pathnameBase]))}return p}function oi(i,r){typeof i=="string"&&(i={path:i,caseSensitive:!1,end:!0});let[s,f]=I0(i.path,i.caseSensitive,i.end),d=r.match(s);if(!d)return null;let h=d[0],p=h.replace(/(.)\/+$/,"$1"),R=d.slice(1);return{params:f.reduce((y,{paramName:O,isOptional:T},M)=>{if(O==="*"){let V=R[M]||"";p=h.slice(0,h.length-V.length).replace(/(.)\/+$/,"$1")}const w=R[M];return T&&!w?y[O]=void 0:y[O]=(w||"").replace(/%2F/g,"/"),y},{}),pathname:h,pathnameBase:p,pattern:i}}function I0(i,r=!1,s=!0){Ue(i==="*"||!i.endsWith("*")||i.endsWith("/*"),`Route path "${i}" will be treated as if it were "${i.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${i.replace(/\*$/,"/*")}".`);let f=[],d="^"+i.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(p,R,b,y,O)=>{if(f.push({paramName:R,isOptional:b!=null}),b){let T=O.charAt(y+p.length);return T&&T!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return i.endsWith("*")?(f.push({paramName:"*"}),d+=i==="*"||i==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):s?d+="\\/*$":i!==""&&i!=="/"&&(d+="(?:(?=\\/|$))"),[new RegExp(d,r?void 0:"i"),f]}function P0(i){try{return i.split("/").map(r=>decodeURIComponent(r).replace(/\//g,"%2F")).join("/")}catch(r){return Ue(!1,`The URL path "${i}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${r}).`),i}}function il(i,r){if(r==="/")return i;if(!i.toLowerCase().startsWith(r.toLowerCase()))return null;let s=r.endsWith("/")?r.length-1:r.length,f=i.charAt(s);return f&&f!=="/"?null:i.slice(s)||"/"}var tv=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function ev(i,r="/"){let{pathname:s,search:f="",hash:d=""}=typeof i=="string"?Ba(i):i,h;return s?(s=Lh(s),s.startsWith("/")?h=Sh(s.substring(1),"/"):h=Sh(s,r)):h=r,{pathname:h,search:nv(f),hash:uv(d)}}function Sh(i,r){let s=si(r).split("/");return i.split("/").forEach(d=>{d===".."?s.length>1&&s.pop():d!=="."&&s.push(d)}),s.length>1?s.join("/"):"/"}function Gf(i,r,s,f){return`Cannot include a '${i}' character in a manually specified \`to.${r}\` field [${JSON.stringify(f)}]. Please separate it out to the \`to.${s}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`}function lv(i){return i.filter((r,s)=>s===0||r.route.path&&r.route.path.length>0)}function Hh(i){let r=lv(i);return r.map((s,f)=>f===r.length-1?s.pathname:s.pathnameBase)}function kf(i,r,s,f=!1){let d;typeof i=="string"?d=Ba(i):(d={...i},At(!d.pathname||!d.pathname.includes("?"),Gf("?","pathname","search",d)),At(!d.pathname||!d.pathname.includes("#"),Gf("#","pathname","hash",d)),At(!d.search||!d.search.includes("#"),Gf("#","search","hash",d)));let h=i===""||d.pathname==="",p=h?"/":d.pathname,R;if(p==null)R=s;else{let T=r.length-1;if(!f&&p.startsWith("..")){let M=p.split("/");for(;M[0]==="..";)M.shift(),T-=1;d.pathname=M.join("/")}R=T>=0?r[T]:"/"}let b=ev(d,R),y=p&&p!=="/"&&p.endsWith("/"),O=(h||p===".")&&s.endsWith("/");return!b.pathname.endsWith("/")&&(y||O)&&(b.pathname+="/"),b}var Lh=i=>i.replace(/\/\/+/g,"/"),De=i=>Lh(i.join("/")),si=i=>i.replace(/\/+$/,""),av=i=>si(i).replace(/^\/*/,"/"),nv=i=>!i||i==="?"?"":i.startsWith("?")?i:"?"+i,uv=i=>!i||i==="#"?"":i.startsWith("#")?i:"#"+i,iv=class{constructor(i,r,s,f=!1){this.status=i,this.statusText=r||"",this.internal=f,s instanceof Error?(this.data=s.toString(),this.error=s):this.data=s}};function cv(i){return i!=null&&typeof i.status=="number"&&typeof i.statusText=="string"&&typeof i.internal=="boolean"&&"data"in i}function fv(i){let r=i.map(s=>s.route.path).filter(Boolean);return De(r)||"/"}var Bh=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function qh(i,r){let s=i;if(typeof s!="string"||!tv.test(s))return{absoluteURL:void 0,isExternal:!1,to:s};let f=s,d=!1;if(Bh)try{let h=new URL(window.location.href),p=s.startsWith("//")?new URL(h.protocol+s):new URL(s),R=il(p.pathname,r);p.origin===h.origin&&R!=null?s=R+p.search+p.hash:d=!0}catch{Ue(!1,`<Link to="${s}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:f,isExternal:d,to:s}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var Yh=["POST","PUT","PATCH","DELETE"];new Set(Yh);var rv=["GET",...Yh];new Set(rv);var qa=_.createContext(null);qa.displayName="DataRouter";var di=_.createContext(null);di.displayName="DataRouterState";var Gh=_.createContext(!1);function ov(){return _.useContext(Gh)}var Xh=_.createContext({isTransitioning:!1});Xh.displayName="ViewTransition";var sv=_.createContext(new Map);sv.displayName="Fetchers";var dv=_.createContext(null);dv.displayName="Await";var _e=_.createContext(null);_e.displayName="Navigation";var Yn=_.createContext(null);Yn.displayName="Location";var Ye=_.createContext({outlet:null,matches:[],isDataRoute:!1});Ye.displayName="Route";var $f=_.createContext(null);$f.displayName="RouteError";var Qh="REACT_ROUTER_ERROR",hv="REDIRECT",mv="ROUTE_ERROR_RESPONSE";function yv(i){if(i.startsWith(`${Qh}:${hv}:{`))try{let r=JSON.parse(i.slice(28));if(typeof r=="object"&&r&&typeof r.status=="number"&&typeof r.statusText=="string"&&typeof r.location=="string"&&typeof r.reloadDocument=="boolean"&&typeof r.replace=="boolean")return r}catch{}}function vv(i){if(i.startsWith(`${Qh}:${mv}:{`))try{let r=JSON.parse(i.slice(40));if(typeof r=="object"&&r&&typeof r.status=="number"&&typeof r.statusText=="string")return new iv(r.status,r.statusText,r.data)}catch{}}function gv(i,{relative:r}={}){At(Gn(),"useHref() may be used only in the context of a <Router> component.");let{basename:s,navigator:f}=_.useContext(_e),{hash:d,pathname:h,search:p}=Xn(i,{relative:r}),R=h;return s!=="/"&&(R=h==="/"?s:De([s,h])),f.createHref({pathname:R,search:p,hash:d})}function Gn(){return _.useContext(Yn)!=null}function Ge(){return At(Gn(),"useLocation() may be used only in the context of a <Router> component."),_.useContext(Yn).location}var Zh="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function wh(i){_.useContext(_e).static||_.useLayoutEffect(i)}function hi(){let{isDataRoute:i}=_.useContext(Ye);return i?Mv():pv()}function pv(){At(Gn(),"useNavigate() may be used only in the context of a <Router> component.");let i=_.useContext(qa),{basename:r,navigator:s}=_.useContext(_e),{matches:f}=_.useContext(Ye),{pathname:d}=Ge(),h=JSON.stringify(Hh(f)),p=_.useRef(!1);return wh(()=>{p.current=!0}),_.useCallback((b,y={})=>{if(Ue(p.current,Zh),!p.current)return;if(typeof b=="number"){s.go(b);return}let O=kf(b,JSON.parse(h),d,y.relative==="path");i==null&&r!=="/"&&(O.pathname=O.pathname==="/"?r:De([r,O.pathname])),(y.replace?s.replace:s.push)(O,y.state,y)},[r,s,h,d,i])}_.createContext(null);function Zg(){let{matches:i}=_.useContext(Ye),r=i[i.length-1];return r?r.params:{}}function Xn(i,{relative:r}={}){let{matches:s}=_.useContext(Ye),{pathname:f}=Ge(),d=JSON.stringify(Hh(s));return _.useMemo(()=>kf(i,JSON.parse(d),f,r==="path"),[i,d,f,r])}function Sv(i,r){return Vh(i,r)}function Vh(i,r,s){var X;At(Gn(),"useRoutes() may be used only in the context of a <Router> component.");let{navigator:f}=_.useContext(_e),{matches:d}=_.useContext(Ye),h=d[d.length-1],p=h?h.params:{},R=h?h.pathname:"/",b=h?h.pathnameBase:"/",y=h&&h.route;{let q=y&&y.path||"";Jh(R,!y||q.endsWith("*")||q.endsWith("*?"),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${R}" (under <Route path="${q}">) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.
|
|
60
60
|
|
|
61
|
-
Please change the parent <Route path="${q}"> to <Route path="${q==="/"?"*":`${q}/*`}">.`)}let O=Ge(),T;if(r){let q=typeof r=="string"?Ba(r):r;At(b==="/"||((X=q.pathname)==null?void 0:X.startsWith(b)),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${b}" but pathname "${q.pathname}" was given in the \`location\` prop.`),T=q}else T=O;let M=T.pathname||"/",w=M;if(b!=="/"){let q=b.replace(/^\//,"").split("/");w="/"+M.replace(/^\//,"").split("/").slice(q.length).join("/")}let V=Uh(i,{pathname:w});Ue(y||V!=null,`No routes matched location "${T.pathname}${T.search}${T.hash}" `),Ue(V==null||V[V.length-1].route.element!==void 0||V[V.length-1].route.Component!==void 0||V[V.length-1].route.lazy!==void 0,`Matched leaf route at location "${T.pathname}${T.search}${T.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let G=Rv(V&&V.map(q=>Object.assign({},q,{params:Object.assign({},p,q.params),pathname:De([b,f.encodeLocation?f.encodeLocation(q.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:q.pathname]),pathnameBase:q.pathnameBase==="/"?b:De([b,f.encodeLocation?f.encodeLocation(q.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:q.pathnameBase])})),d,s);return r&&G?_.createElement(Yn.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",unstable_mask:void 0,...T},navigationType:"POP"}},G):G}function bv(){let i=Cv(),r=cv(i)?`${i.status} ${i.statusText}`:i instanceof Error?i.message:JSON.stringify(i),s=i instanceof Error?i.stack:null,f="rgba(200,200,200, 0.5)",d={padding:"0.5rem",backgroundColor:f},h={padding:"2px 4px",backgroundColor:f},p=null;return console.error("Error handled by React Router default ErrorBoundary:",i),p=_.createElement(_.Fragment,null,_.createElement("p",null,"💿 Hey developer 👋"),_.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",_.createElement("code",{style:h},"ErrorBoundary")," or"," ",_.createElement("code",{style:h},"errorElement")," prop on your route.")),_.createElement(_.Fragment,null,_.createElement("h2",null,"Unexpected Application Error!"),_.createElement("h3",{style:{fontStyle:"italic"}},r),s?_.createElement("pre",{style:d},s):null,p)}var Ev=_.createElement(bv,null),Kh=class extends _.Component{constructor(i){super(i),this.state={location:i.location,revalidation:i.revalidation,error:i.error}}static getDerivedStateFromError(i){return{error:i}}static getDerivedStateFromProps(i,r){return r.location!==i.location||r.revalidation!=="idle"&&i.revalidation==="idle"?{error:i.error,location:i.location,revalidation:i.revalidation}:{error:i.error!==void 0?i.error:r.error,location:r.location,revalidation:i.revalidation||r.revalidation}}componentDidCatch(i,r){this.props.onError?this.props.onError(i,r):console.error("React Router caught the following error during render",i)}render(){let i=this.state.error;if(this.context&&typeof i=="object"&&i&&"digest"in i&&typeof i.digest=="string"){const s=vv(i.digest);s&&(i=s)}let r=i!==void 0?_.createElement(Ye.Provider,{value:this.props.routeContext},_.createElement($f.Provider,{value:i,children:this.props.component})):this.props.children;return this.context?_.createElement(Tv,{error:i},r):r}};Kh.contextType=Gh;var Xf=new WeakMap;function Tv({children:i,error:r}){let{basename:s}=_.useContext(_e);if(typeof r=="object"&&r&&"digest"in r&&typeof r.digest=="string"){let f=yv(r.digest);if(f){let d=Xf.get(r);if(d)throw d;let h=qh(f.location,s);if(Bh&&!Xf.get(r))if(h.isExternal||f.reloadDocument)window.location.href=h.absoluteURL||h.to;else{const p=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(h.to,{replace:f.replace}));throw Xf.set(r,p),p}return _.createElement("meta",{httpEquiv:"refresh",content:`0;url=${h.absoluteURL||h.to}`})}}return i}function xv({routeContext:i,match:r,children:s}){let f=_.useContext(qa);return f&&f.static&&f.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(f.staticContext._deepestRenderedBoundaryId=r.route.id),_.createElement(Ye.Provider,{value:i},s)}function Rv(i,r=[],s){let f=s==null?void 0:s.state;if(i==null){if(!f)return null;if(f.errors)i=f.matches;else if(r.length===0&&!f.initialized&&f.matches.length>0)i=f.matches;else return null}let d=i,h=f==null?void 0:f.errors;if(h!=null){let O=d.findIndex(T=>T.route.id&&(h==null?void 0:h[T.route.id])!==void 0);At(O>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(h).join(",")}`),d=d.slice(0,Math.min(d.length,O+1))}let p=!1,R=-1;if(s&&f){p=f.renderFallback;for(let O=0;O<d.length;O++){let T=d[O];if((T.route.HydrateFallback||T.route.hydrateFallbackElement)&&(R=O),T.route.id){let{loaderData:M,errors:w}=f,V=T.route.loader&&!M.hasOwnProperty(T.route.id)&&(!w||w[T.route.id]===void 0);if(T.route.lazy||V){s.isStatic&&(p=!0),R>=0?d=d.slice(0,R+1):d=[d[0]];break}}}}let b=s==null?void 0:s.onError,y=f&&b?(O,T)=>{var M,w;b(O,{location:f.location,params:((w=(M=f.matches)==null?void 0:M[0])==null?void 0:w.params)??{},unstable_pattern:fv(f.matches),errorInfo:T})}:void 0;return d.reduceRight((O,T,M)=>{let w,V=!1,G=null,X=null;f&&(w=h&&T.route.id?h[T.route.id]:void 0,G=T.route.errorElement||Ev,p&&(R<0&&M===0?(Jh("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),V=!0,X=null):R===M&&(V=!0,X=T.route.hydrateFallbackElement||null)));let q=r.concat(d.slice(0,M+1)),I=()=>{let k;return w?k=G:V?k=X:T.route.Component?k=_.createElement(T.route.Component,null):T.route.element?k=T.route.element:k=O,_.createElement(xv,{match:T,routeContext:{outlet:O,matches:q,isDataRoute:f!=null},children:k})};return f&&(T.route.ErrorBoundary||T.route.errorElement||M===0)?_.createElement(Kh,{location:f.location,revalidation:f.revalidation,component:G,error:w,children:I(),routeContext:{outlet:null,matches:q,isDataRoute:!0},onError:y}):I()},null)}function Wf(i){return`${i} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function zv(i){let r=_.useContext(qa);return At(r,Wf(i)),r}function Av(i){let r=_.useContext(di);return At(r,Wf(i)),r}function _v(i){let r=_.useContext(Ye);return At(r,Wf(i)),r}function Ff(i){let r=_v(i),s=r.matches[r.matches.length-1];return At(s.route.id,`${i} can only be used on routes that contain a unique "id"`),s.route.id}function Ov(){return Ff("useRouteId")}function Cv(){var f;let i=_.useContext($f),r=Av("useRouteError"),s=Ff("useRouteError");return i!==void 0?i:(f=r.errors)==null?void 0:f[s]}function Mv(){let{router:i}=zv("useNavigate"),r=Ff("useNavigate"),s=_.useRef(!1);return wh(()=>{s.current=!0}),_.useCallback(async(d,h={})=>{Ue(s.current,Zh),s.current&&(typeof d=="number"?await i.navigate(d):await i.navigate(d,{fromRouteId:r,...h}))},[i,r])}var bh={};function Jh(i,r,s){!r&&!bh[i]&&(bh[i]=!0,Ue(!1,s))}_.memo(Dv);function Dv({routes:i,future:r,state:s,isStatic:f,onError:d}){return Vh(i,void 0,{state:s,isStatic:f,onError:d})}function ul(i){At(!1,"A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.")}function Uv({basename:i="/",children:r=null,location:s,navigationType:f="POP",navigator:d,static:h=!1,unstable_useTransitions:p}){At(!Gn(),"You cannot render a <Router> inside another <Router>. You should never have more than one in your app.");let R=i.replace(/^\/*/,"/"),b=_.useMemo(()=>({basename:R,navigator:d,static:h,unstable_useTransitions:p,future:{}}),[R,d,h,p]);typeof s=="string"&&(s=Ba(s));let{pathname:y="/",search:O="",hash:T="",state:M=null,key:w="default",unstable_mask:V}=s,G=_.useMemo(()=>{let X=il(y,R);return X==null?null:{location:{pathname:X,search:O,hash:T,state:M,key:w,unstable_mask:V},navigationType:f}},[R,y,O,T,M,w,f,V]);return Ue(G!=null,`<Router basename="${R}"> is not able to match the URL "${y}${O}${T}" because it does not start with the basename, so the <Router> won't render anything.`),G==null?null:_.createElement(_e.Provider,{value:b},_.createElement(Yn.Provider,{children:r,value:G}))}function Nv({children:i,location:r}){return Sv(Vf(i),r)}function Vf(i,r=[]){let s=[];return _.Children.forEach(i,(f,d)=>{if(!_.isValidElement(f))return;let h=[...r,d];if(f.type===_.Fragment){s.push.apply(s,Vf(f.props.children,h));return}At(f.type===ul,`[${typeof f.type=="string"?f.type:f.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`),At(!f.props.index||!f.props.children,"An index route cannot have child routes.");let p={id:f.props.id||h.join("-"),caseSensitive:f.props.caseSensitive,element:f.props.element,Component:f.props.Component,index:f.props.index,path:f.props.path,middleware:f.props.middleware,loader:f.props.loader,action:f.props.action,hydrateFallbackElement:f.props.hydrateFallbackElement,HydrateFallback:f.props.HydrateFallback,errorElement:f.props.errorElement,ErrorBoundary:f.props.ErrorBoundary,hasErrorBoundary:f.props.hasErrorBoundary===!0||f.props.ErrorBoundary!=null||f.props.errorElement!=null,shouldRevalidate:f.props.shouldRevalidate,handle:f.props.handle,lazy:f.props.lazy};f.props.children&&(p.children=Vf(f.props.children,h)),s.push(p)}),s}var fi="get",ri="application/x-www-form-urlencoded";function mi(i){return typeof HTMLElement<"u"&&i instanceof HTMLElement}function jv(i){return mi(i)&&i.tagName.toLowerCase()==="button"}function Hv(i){return mi(i)&&i.tagName.toLowerCase()==="form"}function Lv(i){return mi(i)&&i.tagName.toLowerCase()==="input"}function Bv(i){return!!(i.metaKey||i.altKey||i.ctrlKey||i.shiftKey)}function qv(i,r){return i.button===0&&(!r||r==="_self")&&!Bv(i)}function Kf(i=""){return new URLSearchParams(typeof i=="string"||Array.isArray(i)||i instanceof URLSearchParams?i:Object.keys(i).reduce((r,s)=>{let f=i[s];return r.concat(Array.isArray(f)?f.map(d=>[s,d]):[[s,f]])},[]))}function Yv(i,r){let s=Kf(i);return r&&r.forEach((f,d)=>{s.has(d)||r.getAll(d).forEach(h=>{s.append(d,h)})}),s}var ii=null;function Gv(){if(ii===null)try{new FormData(document.createElement("form"),0),ii=!1}catch{ii=!0}return ii}var Xv=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Qf(i){return i!=null&&!Xv.has(i)?(Ue(!1,`"${i}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${ri}"`),null):i}function Qv(i,r){let s,f,d,h,p;if(Hv(i)){let R=i.getAttribute("action");f=R?il(R,r):null,s=i.getAttribute("method")||fi,d=Qf(i.getAttribute("enctype"))||ri,h=new FormData(i)}else if(jv(i)||Lv(i)&&(i.type==="submit"||i.type==="image")){let R=i.form;if(R==null)throw new Error('Cannot submit a <button> or <input type="submit"> without a <form>');let b=i.getAttribute("formaction")||R.getAttribute("action");if(f=b?il(b,r):null,s=i.getAttribute("formmethod")||R.getAttribute("method")||fi,d=Qf(i.getAttribute("formenctype"))||Qf(R.getAttribute("enctype"))||ri,h=new FormData(R,i),!Gv()){let{name:y,type:O,value:T}=i;if(O==="image"){let M=y?`${y}.`:"";h.append(`${M}x`,"0"),h.append(`${M}y`,"0")}else y&&h.append(y,T)}}else{if(mi(i))throw new Error('Cannot submit element that is not <form>, <button>, or <input type="submit|image">');s=fi,f=null,d=ri,p=i}return h&&d==="text/plain"&&(p=h,h=void 0),{action:f,method:s.toLowerCase(),encType:d,formData:h,body:p}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");function If(i,r){if(i===!1||i===null||typeof i>"u")throw new Error(r)}function kh(i,r,s,f){let d=typeof i=="string"?new URL(i,typeof window>"u"?"server://singlefetch/":window.location.origin):i;return s?d.pathname.endsWith("/")?d.pathname=`${d.pathname}_.${f}`:d.pathname=`${d.pathname}.${f}`:d.pathname==="/"?d.pathname=`_root.${f}`:r&&il(d.pathname,r)==="/"?d.pathname=`${si(r)}/_root.${f}`:d.pathname=`${si(d.pathname)}.${f}`,d}async function Zv(i,r){if(i.id in r)return r[i.id];try{let s=await import(i.module);return r[i.id]=s,s}catch(s){return console.error(`Error loading route module \`${i.module}\`, reloading page...`),console.error(s),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function wv(i){return i==null?!1:i.href==null?i.rel==="preload"&&typeof i.imageSrcSet=="string"&&typeof i.imageSizes=="string":typeof i.rel=="string"&&typeof i.href=="string"}async function Vv(i,r,s){let f=await Promise.all(i.map(async d=>{let h=r.routes[d.route.id];if(h){let p=await Zv(h,s);return p.links?p.links():[]}return[]}));return $v(f.flat(1).filter(wv).filter(d=>d.rel==="stylesheet"||d.rel==="preload").map(d=>d.rel==="stylesheet"?{...d,rel:"prefetch",as:"style"}:{...d,rel:"prefetch"}))}function Eh(i,r,s,f,d,h){let p=(b,y)=>s[y]?b.route.id!==s[y].route.id:!0,R=(b,y)=>{var O;return s[y].pathname!==b.pathname||((O=s[y].route.path)==null?void 0:O.endsWith("*"))&&s[y].params["*"]!==b.params["*"]};return h==="assets"?r.filter((b,y)=>p(b,y)||R(b,y)):h==="data"?r.filter((b,y)=>{var T;let O=f.routes[b.route.id];if(!O||!O.hasLoader)return!1;if(p(b,y)||R(b,y))return!0;if(b.route.shouldRevalidate){let M=b.route.shouldRevalidate({currentUrl:new URL(d.pathname+d.search+d.hash,window.origin),currentParams:((T=s[0])==null?void 0:T.params)||{},nextUrl:new URL(i,window.origin),nextParams:b.params,defaultShouldRevalidate:!0});if(typeof M=="boolean")return M}return!0}):[]}function Kv(i,r,{includeHydrateFallback:s}={}){return Jv(i.map(f=>{let d=r.routes[f.route.id];if(!d)return[];let h=[d.module];return d.clientActionModule&&(h=h.concat(d.clientActionModule)),d.clientLoaderModule&&(h=h.concat(d.clientLoaderModule)),s&&d.hydrateFallbackModule&&(h=h.concat(d.hydrateFallbackModule)),d.imports&&(h=h.concat(d.imports)),h}).flat(1))}function Jv(i){return[...new Set(i)]}function kv(i){let r={},s=Object.keys(i).sort();for(let f of s)r[f]=i[f];return r}function $v(i,r){let s=new Set;return new Set(r),i.reduce((f,d)=>{let h=JSON.stringify(kv(d));return s.has(h)||(s.add(h),f.push({key:h,link:d})),f},[])}function Pf(){let i=_.useContext(qa);return If(i,"You must render this element inside a <DataRouterContext.Provider> element"),i}function Wv(){let i=_.useContext(di);return If(i,"You must render this element inside a <DataRouterStateContext.Provider> element"),i}var tr=_.createContext(void 0);tr.displayName="FrameworkContext";function er(){let i=_.useContext(tr);return If(i,"You must render this element inside a <HydratedRouter> element"),i}function Fv(i,r){let s=_.useContext(tr),[f,d]=_.useState(!1),[h,p]=_.useState(!1),{onFocus:R,onBlur:b,onMouseEnter:y,onMouseLeave:O,onTouchStart:T}=r,M=_.useRef(null);_.useEffect(()=>{if(i==="render"&&p(!0),i==="viewport"){let G=q=>{q.forEach(I=>{p(I.isIntersecting)})},X=new IntersectionObserver(G,{threshold:.5});return M.current&&X.observe(M.current),()=>{X.disconnect()}}},[i]),_.useEffect(()=>{if(f){let G=setTimeout(()=>{p(!0)},100);return()=>{clearTimeout(G)}}},[f]);let w=()=>{d(!0)},V=()=>{d(!1),p(!1)};return s?i!=="intent"?[h,M,{}]:[h,M,{onFocus:Hn(R,w),onBlur:Hn(b,V),onMouseEnter:Hn(y,w),onMouseLeave:Hn(O,V),onTouchStart:Hn(T,w)}]:[!1,M,{}]}function Hn(i,r){return s=>{i&&i(s),s.defaultPrevented||r(s)}}function Iv({page:i,...r}){let s=ov(),{router:f}=Pf(),d=_.useMemo(()=>Uh(f.routes,i,f.basename),[f.routes,i,f.basename]);return d?s?_.createElement(tg,{page:i,matches:d,...r}):_.createElement(eg,{page:i,matches:d,...r}):null}function Pv(i){let{manifest:r,routeModules:s}=er(),[f,d]=_.useState([]);return _.useEffect(()=>{let h=!1;return Vv(i,r,s).then(p=>{h||d(p)}),()=>{h=!0}},[i,r,s]),f}function tg({page:i,matches:r,...s}){let f=Ge(),{future:d}=er(),{basename:h}=Pf(),p=_.useMemo(()=>{if(i===f.pathname+f.search+f.hash)return[];let R=kh(i,h,d.unstable_trailingSlashAwareDataRequests,"rsc"),b=!1,y=[];for(let O of r)typeof O.route.shouldRevalidate=="function"?b=!0:y.push(O.route.id);return b&&y.length>0&&R.searchParams.set("_routes",y.join(",")),[R.pathname+R.search]},[h,d.unstable_trailingSlashAwareDataRequests,i,f,r]);return _.createElement(_.Fragment,null,p.map(R=>_.createElement("link",{key:R,rel:"prefetch",as:"fetch",href:R,...s})))}function eg({page:i,matches:r,...s}){let f=Ge(),{future:d,manifest:h,routeModules:p}=er(),{basename:R}=Pf(),{loaderData:b,matches:y}=Wv(),O=_.useMemo(()=>Eh(i,r,y,h,f,"data"),[i,r,y,h,f]),T=_.useMemo(()=>Eh(i,r,y,h,f,"assets"),[i,r,y,h,f]),M=_.useMemo(()=>{if(i===f.pathname+f.search+f.hash)return[];let G=new Set,X=!1;if(r.forEach(I=>{var yt;let k=h.routes[I.route.id];!k||!k.hasLoader||(!O.some(dt=>dt.route.id===I.route.id)&&I.route.id in b&&((yt=p[I.route.id])!=null&&yt.shouldRevalidate)||k.hasClientLoader?X=!0:G.add(I.route.id))}),G.size===0)return[];let q=kh(i,R,d.unstable_trailingSlashAwareDataRequests,"data");return X&&G.size>0&&q.searchParams.set("_routes",r.filter(I=>G.has(I.route.id)).map(I=>I.route.id).join(",")),[q.pathname+q.search]},[R,d.unstable_trailingSlashAwareDataRequests,b,f,h,O,r,i,p]),w=_.useMemo(()=>Kv(T,h),[T,h]),V=Pv(T);return _.createElement(_.Fragment,null,M.map(G=>_.createElement("link",{key:G,rel:"prefetch",as:"fetch",href:G,...s})),w.map(G=>_.createElement("link",{key:G,rel:"modulepreload",href:G,...s})),V.map(({key:G,link:X})=>_.createElement("link",{key:G,nonce:s.nonce,...X,crossOrigin:X.crossOrigin??s.crossOrigin})))}function lg(...i){return r=>{i.forEach(s=>{typeof s=="function"?s(r):s!=null&&(s.current=r)})}}var ag=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";try{ag&&(window.__reactRouterVersion="7.14.1")}catch{}function ng({basename:i,children:r,unstable_useTransitions:s,window:f}){let d=_.useRef();d.current==null&&(d.current=B0({window:f,v5Compat:!0}));let h=d.current,[p,R]=_.useState({action:h.action,location:h.location}),b=_.useCallback(y=>{s===!1?R(y):_.startTransition(()=>R(y))},[s]);return _.useLayoutEffect(()=>h.listen(b),[h,b]),_.createElement(Uv,{basename:i,children:r,location:p.location,navigationType:p.action,navigator:h,unstable_useTransitions:s})}var $h=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Wh=_.forwardRef(function({onClick:r,discover:s="render",prefetch:f="none",relative:d,reloadDocument:h,replace:p,unstable_mask:R,state:b,target:y,to:O,preventScrollReset:T,viewTransition:M,unstable_defaultShouldRevalidate:w,...V},G){let{basename:X,navigator:q,unstable_useTransitions:I}=_.useContext(_e),k=typeof O=="string"&&$h.test(O),yt=qh(O,X);O=yt.to;let dt=gv(O,{relative:d}),Tt=Ge(),W=null;if(R){let Nt=kf(R,[],Tt.unstable_mask?Tt.unstable_mask.pathname:"/",!0);X!=="/"&&(Nt.pathname=Nt.pathname==="/"?X:De([X,Nt.pathname])),W=q.createHref(Nt)}let[Ct,Jt,Ne]=Fv(f,V),ye=cg(O,{replace:p,unstable_mask:R,state:b,target:y,preventScrollReset:T,relative:d,viewTransition:M,unstable_defaultShouldRevalidate:w,unstable_useTransitions:I});function kt(Nt){r&&r(Nt),Nt.defaultPrevented||ye(Nt)}let je=!(yt.isExternal||h),ve=_.createElement("a",{...V,...Ne,href:(je?W:void 0)||yt.absoluteURL||dt,onClick:je?kt:r,ref:lg(G,Jt),target:y,"data-discover":!k&&s==="render"?"true":void 0});return Ct&&!k?_.createElement(_.Fragment,null,ve,_.createElement(Iv,{page:dt})):ve});Wh.displayName="Link";var Ln=_.forwardRef(function({"aria-current":r="page",caseSensitive:s=!1,className:f="",end:d=!1,style:h,to:p,viewTransition:R,children:b,...y},O){let T=Xn(p,{relative:y.relative}),M=Ge(),w=_.useContext(di),{navigator:V,basename:G}=_.useContext(_e),X=w!=null&&dg(T)&&R===!0,q=V.encodeLocation?V.encodeLocation(T).pathname:T.pathname,I=M.pathname,k=w&&w.navigation&&w.navigation.location?w.navigation.location.pathname:null;s||(I=I.toLowerCase(),k=k?k.toLowerCase():null,q=q.toLowerCase()),k&&G&&(k=il(k,G)||k);const yt=q!=="/"&&q.endsWith("/")?q.length-1:q.length;let dt=I===q||!d&&I.startsWith(q)&&I.charAt(yt)==="/",Tt=k!=null&&(k===q||!d&&k.startsWith(q)&&k.charAt(q.length)==="/"),W={isActive:dt,isPending:Tt,isTransitioning:X},Ct=dt?r:void 0,Jt;typeof f=="function"?Jt=f(W):Jt=[f,dt?"active":null,Tt?"pending":null,X?"transitioning":null].filter(Boolean).join(" ");let Ne=typeof h=="function"?h(W):h;return _.createElement(Wh,{...y,"aria-current":Ct,className:Jt,ref:O,style:Ne,to:p,viewTransition:R},typeof b=="function"?b(W):b)});Ln.displayName="NavLink";var ug=_.forwardRef(({discover:i="render",fetcherKey:r,navigate:s,reloadDocument:f,replace:d,state:h,method:p=fi,action:R,onSubmit:b,relative:y,preventScrollReset:O,viewTransition:T,unstable_defaultShouldRevalidate:M,...w},V)=>{let{unstable_useTransitions:G}=_.useContext(_e),X=og(),q=sg(R,{relative:y}),I=p.toLowerCase()==="get"?"get":"post",k=typeof R=="string"&&$h.test(R),yt=dt=>{if(b&&b(dt),dt.defaultPrevented)return;dt.preventDefault();let Tt=dt.nativeEvent.submitter,W=(Tt==null?void 0:Tt.getAttribute("formmethod"))||p,Ct=()=>X(Tt||dt.currentTarget,{fetcherKey:r,method:W,navigate:s,replace:d,state:h,relative:y,preventScrollReset:O,viewTransition:T,unstable_defaultShouldRevalidate:M});G&&s!==!1?_.startTransition(()=>Ct()):Ct()};return _.createElement("form",{ref:V,method:I,action:q,onSubmit:f?b:yt,...w,"data-discover":!k&&i==="render"?"true":void 0})});ug.displayName="Form";function ig(i){return`${i} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Fh(i){let r=_.useContext(qa);return At(r,ig(i)),r}function cg(i,{target:r,replace:s,unstable_mask:f,state:d,preventScrollReset:h,relative:p,viewTransition:R,unstable_defaultShouldRevalidate:b,unstable_useTransitions:y}={}){let O=hi(),T=Ge(),M=Xn(i,{relative:p});return _.useCallback(w=>{if(qv(w,r)){w.preventDefault();let V=s!==void 0?s:qn(T)===qn(M),G=()=>O(i,{replace:V,unstable_mask:f,state:d,preventScrollReset:h,relative:p,viewTransition:R,unstable_defaultShouldRevalidate:b});y?_.startTransition(()=>G()):G()}},[T,O,M,s,f,d,r,i,h,p,R,b,y])}function wg(i){Ue(typeof URLSearchParams<"u","You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let r=_.useRef(Kf(i)),s=_.useRef(!1),f=Ge(),d=_.useMemo(()=>Yv(f.search,s.current?null:r.current),[f.search]),h=hi(),p=_.useCallback((R,b)=>{const y=Kf(typeof R=="function"?R(new URLSearchParams(d)):R);s.current=!0,h("?"+y,b)},[h,d]);return[d,p]}var fg=0,rg=()=>`__${String(++fg)}__`;function og(){let{router:i}=Fh("useSubmit"),{basename:r}=_.useContext(_e),s=Ov(),f=i.fetch,d=i.navigate;return _.useCallback(async(h,p={})=>{let{action:R,method:b,encType:y,formData:O,body:T}=Qv(h,r);if(p.navigate===!1){let M=p.fetcherKey||rg();await f(M,s,p.action||R,{unstable_defaultShouldRevalidate:p.unstable_defaultShouldRevalidate,preventScrollReset:p.preventScrollReset,formData:O,body:T,formMethod:p.method||b,formEncType:p.encType||y,flushSync:p.flushSync})}else await d(p.action||R,{unstable_defaultShouldRevalidate:p.unstable_defaultShouldRevalidate,preventScrollReset:p.preventScrollReset,formData:O,body:T,formMethod:p.method||b,formEncType:p.encType||y,replace:p.replace,state:p.state,fromRouteId:s,flushSync:p.flushSync,viewTransition:p.viewTransition})},[f,d,r,s])}function sg(i,{relative:r}={}){let{basename:s}=_.useContext(_e),f=_.useContext(Ye);At(f,"useFormAction must be used inside a RouteContext");let[d]=f.matches.slice(-1),h={...Xn(i||".",{relative:r})},p=Ge();if(i==null){h.search=p.search;let R=new URLSearchParams(h.search),b=R.getAll("index");if(b.some(O=>O==="")){R.delete("index"),b.filter(T=>T).forEach(T=>R.append("index",T));let O=R.toString();h.search=O?`?${O}`:""}}return(!i||i===".")&&d.route.index&&(h.search=h.search?h.search.replace(/^\?/,"?index&"):"?index"),s!=="/"&&(h.pathname=h.pathname==="/"?s:De([s,h.pathname])),qn(h)}function dg(i,{relative:r}={}){let s=_.useContext(Xh);At(s!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:f}=Fh("useViewTransitionState"),d=Xn(i,{relative:r});if(!s.isTransitioning)return!1;let h=il(s.currentLocation.pathname,f)||s.currentLocation.pathname,p=il(s.nextLocation.pathname,f)||s.nextLocation.pathname;return oi(d.pathname,p)!=null||oi(d.pathname,h)!=null}const hg="modulepreload",mg=function(i){return"/"+i},Th={},Fl=function(r,s,f){let d=Promise.resolve();if(s&&s.length>0){let p=function(y){return Promise.all(y.map(O=>Promise.resolve(O).then(T=>({status:"fulfilled",value:T}),T=>({status:"rejected",reason:T}))))};document.getElementsByTagName("link");const R=document.querySelector("meta[property=csp-nonce]"),b=(R==null?void 0:R.nonce)||(R==null?void 0:R.getAttribute("nonce"));d=p(s.map(y=>{if(y=mg(y),y in Th)return;Th[y]=!0;const O=y.endsWith(".css"),T=O?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${y}"]${T}`))return;const M=document.createElement("link");if(M.rel=O?"stylesheet":hg,O||(M.as="script"),M.crossOrigin="",M.href=y,b&&M.setAttribute("nonce",b),document.head.appendChild(M),O)return new Promise((w,V)=>{M.addEventListener("load",w),M.addEventListener("error",()=>V(new Error(`Unable to preload CSS for ${y}`)))})}))}function h(p){const R=new Event("vite:preloadError",{cancelable:!0});if(R.payload=p,window.dispatchEvent(R),!R.defaultPrevented)throw p}return d.then(p=>{for(const R of p||[])R.status==="rejected"&&h(R.reason);return r().catch(h)})},xh=i=>{let r;const s=new Set,f=(y,O)=>{const T=typeof y=="function"?y(r):y;if(!Object.is(T,r)){const M=r;r=O??(typeof T!="object"||T===null)?T:Object.assign({},r,T),s.forEach(w=>w(r,M))}},d=()=>r,R={setState:f,getState:d,getInitialState:()=>b,subscribe:y=>(s.add(y),()=>s.delete(y))},b=r=i(f,d,R);return R},yg=(i=>i?xh(i):xh),vg=i=>i;function gg(i,r=vg){const s=La.useSyncExternalStore(i.subscribe,La.useCallback(()=>r(i.getState()),[i,r]),La.useCallback(()=>r(i.getInitialState()),[i,r]));return La.useDebugValue(s),s}const Rh=i=>{const r=yg(i),s=f=>gg(r,f);return Object.assign(s,r),s},lr=(i=>i?Rh(i):Rh),Ih="purecontext-theme";function pg(){try{const i=localStorage.getItem(Ih);if(i==="light"||i==="dark")return i}catch{}return"dark"}function Ph(i){const r=document.documentElement;i==="light"?(r.classList.add("light"),r.classList.remove("dark")):(r.classList.add("dark"),r.classList.remove("light"));try{localStorage.setItem(Ih,i)}catch{}}const tm=pg();Ph(tm);const zh=lr((i,r)=>({theme:tm,toggle:()=>{const s=r().theme==="dark"?"light":"dark";Ph(s),i({theme:s})}})),Zf=lr(i=>({repos:[],reposLoaded:!1,trees:{},outlines:{},selectedRepoId:null,selectedFilePath:null,expandedDirs:{},setRepos(r){i({repos:r,reposLoaded:!0})},setTree(r,s){i(f=>({trees:{...f.trees,[r]:s}}))},setOutline(r,s){i(f=>({outlines:{...f.outlines,[r]:s}}))},selectRepo(r){i({selectedRepoId:r,selectedFilePath:null})},selectFile(r){i({selectedFilePath:r})},toggleDir(r,s){i(f=>{const d=f.expandedDirs[r]??new Set,h=new Set(d);return h.has(s)?h.delete(s):h.add(s),{expandedDirs:{...f.expandedDirs,[r]:h}}})}})),em="purecontext-workspace";function Sg(){try{const i=localStorage.getItem(em);if(!i)return[];const r=JSON.parse(i);return Array.isArray(r)?r:[]}catch{return[]}}function Ah(i){try{localStorage.setItem(em,JSON.stringify(i))}catch{}}const Bn=lr(i=>({pinnedRepos:Sg(),activeRepoId:null,pin(r){i(s=>{if(s.pinnedRepos.includes(r))return{};const f=[...s.pinnedRepos,r];return Ah(f),{pinnedRepos:f}})},unpin(r){i(s=>{const f=s.pinnedRepos.filter(d=>d!==r);return Ah(f),{pinnedRepos:f}})},setActive(r){i({activeRepoId:r})}})),bg="/api",Eg=1e4,_h=2;class Oh extends Error{constructor(r,s){super(s),this.status=r,this.name="ApiClientError"}}async function Kt(i,r,s=0){const f=new URL(bg+i,window.location.origin);if(r)for(const[R,b]of Object.entries(r))b!==void 0&&f.searchParams.set(R,String(b));const d=new AbortController,h=setTimeout(()=>d.abort(),Eg);let p;try{p=await fetch(f.toString(),{signal:d.signal})}catch(R){if(clearTimeout(h),s<_h&&!(R instanceof DOMException&&R.name==="AbortError"))return Kt(i,r,s+1);throw new Oh(0,`Network error: ${R}`)}finally{clearTimeout(h)}if(!p.ok){let R=`HTTP ${p.status}`;try{const b=await p.json();b.error&&(R=b.error)}catch{}if(p.status>=500&&s<_h)return Kt(i,r,s+1);throw new Oh(p.status,R)}return p.json()}const Tg={listRepos(){return Kt("/repos")},getFileTree(i){return Kt(`/repos/${encodeURIComponent(i)}/tree`)},getRepoOutline(i,r){return Kt(`/repos/${encodeURIComponent(i)}/outline`,r!==void 0?{limit:r}:void 0)},searchSymbols(i,r){const{repoIds:s,...f}=r;if(s&&s.length>1)return Kt("/search",{...f,repoIds:s.join(",")});const d=(s&&s.length===1?s[0]:i)??"";return Kt(`/repos/${encodeURIComponent(d)}/search`,f)},getSymbolSource(i,r){return Kt(`/symbols/${encodeURIComponent(i)}`,{repoId:r})},getFileOutline(i,r){return Kt(`/repos/${encodeURIComponent(i)}/file-outline`,{filePath:r})},findImporters(i,r){return Kt(`/repos/${encodeURIComponent(i)}/importers`,{filePath:r})},getGraph(i,r){return Kt(`/repos/${encodeURIComponent(i)}/graph`,r)},getBlastRadius(i,r,s){return Kt(`/repos/${encodeURIComponent(i)}/blast-radius`,{symbolId:r,...s!==void 0?{depth:s}:{}})},getSymbolCoverage(i,r){return Kt(`/repos/${encodeURIComponent(i)}/coverage`,{symbolId:r})},getRepoCoverage(i){return Kt(`/repos/${encodeURIComponent(i)}/coverage`)},getQualityMetrics(i,r){return Kt(`/repos/${encodeURIComponent(i)}/quality`,r!==void 0?{scope:r}:void 0)},getSymbolHistory(i,r,s){return Kt(`/repos/${encodeURIComponent(i)}/symbols/${encodeURIComponent(r)}/history`,s!==void 0?{limit:s}:void 0)},getChurnMetrics(i,r,s){const f={};return r!==void 0&&(f.scope=r),s!==void 0&&(f.days=s),Kt(`/repos/${encodeURIComponent(i)}/churn`,Object.keys(f).length>0?f:void 0)}};function xg({filled:i}){return U.jsx("svg",{width:"13",height:"13",viewBox:"0 0 13 13",fill:"none","aria-hidden":"true",children:i?U.jsx("path",{d:"M6.5 1L8 5H12L8.5 7.5L9.5 12L6.5 9.5L3.5 12L4.5 7.5L1 5H5L6.5 1Z",fill:"currentColor"}):U.jsx("path",{d:"M6.5 1L8 5H12L8.5 7.5L9.5 12L6.5 9.5L3.5 12L4.5 7.5L1 5H5L6.5 1Z",stroke:"currentColor",strokeWidth:"1.3",strokeLinejoin:"round"})})}function Rg(){return U.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none","aria-hidden":"true",children:[U.jsx("line",{x1:"2",y1:"2",x2:"12",y2:"12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),U.jsx("line",{x1:"12",y1:"2",x2:"2",y2:"12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function zg(){return U.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 13 13",fill:"none","aria-hidden":"true",children:[U.jsx("circle",{cx:"5.5",cy:"5.5",r:"4",stroke:"currentColor",strokeWidth:"1.4"}),U.jsx("line",{x1:"8.5",y1:"8.5",x2:"11.5",y2:"11.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"})]})}function Ag(i){try{const r=new Date(i),f=Date.now()-r.getTime(),d=Math.floor(f/6e4);if(d<1)return"just now";if(d<60)return`${d}m ago`;const h=Math.floor(d/60);if(h<24)return`${h}h ago`;const p=Math.floor(h/24);return p<30?`${p}d ago`:r.toLocaleDateString()}catch{return i}}function Ch({repo:i,pinned:r,onPin:s,onUnpin:f}){const d=i.rootPath.split(/[/\\]/).pop()??i.repoId,h=i.symbolCount>0;return U.jsxs("div",{className:`flex items-center gap-2 px-3 py-2 border-b border-gray-800/60 ${h?"":"opacity-50"}`,"data-testid":"repo-row",children:[U.jsx("span",{className:`shrink-0 w-2 h-2 rounded-full ${h?"bg-green-500":"bg-gray-600"}`,title:h?`${i.symbolCount} symbols`:"Not indexed"}),U.jsxs("div",{className:"flex-1 min-w-0",children:[U.jsx("p",{className:"text-xs font-medium text-gray-200 truncate",title:i.rootPath,children:d}),U.jsxs("p",{className:"text-[10px] text-gray-500",children:[i.symbolCount.toLocaleString()," symbols · ",Ag(i.lastIndexed)]})]}),U.jsx("button",{type:"button",onClick:r?f:s,"aria-label":r?`Unpin ${d}`:`Pin ${d}`,"aria-pressed":r,className:`shrink-0 p-1 rounded transition-colors ${r?"text-yellow-400 hover:text-yellow-300":"text-gray-600 hover:text-gray-300"}`,"data-testid":r?"unpin-btn":"pin-btn",children:U.jsx(xg,{filled:r})})]})}function _g({onClose:i}){const r=hi(),s=Zf(M=>M.repos),f=Zf(M=>M.reposLoaded),d=Zf(M=>M.setRepos),h=Bn(M=>M.pinnedRepos),p=Bn(M=>M.pin),R=Bn(M=>M.unpin);_.useEffect(()=>{f||Tg.listRepos().then(M=>d(M.repos)).catch(()=>{})},[f,d]);function b(){if(h.length===0)return;const M=new URLSearchParams;for(const w of h)M.append("repoIds",w);r(`/search?${M.toString()}`),i()}function y(M){r(`/search?repoId=${encodeURIComponent(M)}`),i()}const O=s.filter(M=>h.includes(M.repoId)),T=s.filter(M=>!h.includes(M.repoId));return U.jsxs(U.Fragment,{children:[U.jsx("div",{className:"fixed inset-0 z-40",onClick:i,"aria-hidden":"true","data-testid":"workspace-backdrop"}),U.jsxs("aside",{className:"fixed top-14 right-0 bottom-0 z-50 w-72 bg-gray-900 border-l border-gray-800 flex flex-col shadow-xl",role:"dialog","aria-label":"Workspace panel","data-testid":"workspace-panel",children:[U.jsxs("div",{className:"flex items-center justify-between px-4 py-3 border-b border-gray-800 shrink-0",children:[U.jsxs("div",{children:[U.jsx("span",{className:"text-sm font-semibold text-gray-100",children:"Workspace"}),h.length>0&&U.jsx("span",{className:"ml-2 text-[10px] bg-blue-600 text-white rounded-full px-1.5 py-0.5 font-bold",children:h.length})]}),U.jsxs("div",{className:"flex items-center gap-2",children:[h.length>0&&U.jsxs("button",{type:"button",onClick:b,className:"flex items-center gap-1.5 px-2.5 py-1 bg-blue-600 hover:bg-blue-500 text-white text-xs rounded transition-colors",title:"Search across all pinned repos","data-testid":"search-all-btn",children:[U.jsx(zg,{}),"Search all"]}),U.jsx("button",{type:"button",onClick:i,className:"p-1 text-gray-500 hover:text-gray-200 transition-colors rounded","aria-label":"Close workspace panel",children:U.jsx(Rg,{})})]})]}),U.jsxs("div",{className:"flex-1 overflow-y-auto scrollbar-thin",children:[O.length>0&&U.jsxs("div",{children:[U.jsx("p",{className:"px-3 py-2 text-[10px] font-semibold text-gray-500 uppercase tracking-wide",children:"Pinned"}),O.map(M=>U.jsx("div",{onClick:()=>y(M.repoId),className:"cursor-pointer hover:bg-gray-800/30 transition-colors",children:U.jsx(Ch,{repo:M,pinned:!0,onPin:()=>p(M.repoId),onUnpin:()=>R(M.repoId)})},M.repoId))]}),T.length>0&&U.jsxs("div",{children:[U.jsx("p",{className:"px-3 py-2 text-[10px] font-semibold text-gray-500 uppercase tracking-wide",children:O.length>0?"All repositories":"Repositories"}),T.map(M=>U.jsx("div",{onClick:()=>y(M.repoId),className:"cursor-pointer hover:bg-gray-800/30 transition-colors",children:U.jsx(Ch,{repo:M,pinned:!1,onPin:()=>p(M.repoId),onUnpin:()=>R(M.repoId)})},M.repoId))]}),s.length===0&&f&&U.jsxs("div",{className:"flex flex-col items-center justify-center h-40 text-gray-600 text-sm gap-2",children:[U.jsx("p",{children:"No indexed repositories."}),U.jsxs("p",{className:"text-xs text-center px-4",children:["Run ",U.jsx("code",{className:"font-mono bg-gray-800 px-1 rounded",children:"index-folder"})," to get started."]})]}),s.length===0&&!f&&U.jsx("div",{className:"flex items-center justify-center h-24",children:U.jsx("span",{className:"block w-4 h-4 rounded-full border-2 border-blue-500 border-t-transparent animate-spin"})})]}),h.length===0&&s.length>0&&U.jsx("div",{className:"px-4 py-3 border-t border-gray-800 shrink-0",children:U.jsx("p",{className:"text-[10px] text-gray-600 text-center",children:"Pin repos to enable multi-repo search"})})]})]})}const Og=_.lazy(()=>Fl(()=>import("./RepoList-CldNt89M.js"),[])),Cg=_.lazy(()=>Fl(()=>import("./RepoDetail-Cie0D4_s.js"),[])),Mg=_.lazy(()=>Fl(()=>import("./Search-CgvpHMOi.js"),__vite__mapDeps([0,1]))),Dg=_.lazy(()=>Fl(()=>import("./SymbolView-B9h0LZTz.js"),[])),Mh=_.lazy(()=>Fl(()=>import("./DependencyGraph-B60SMPbX.js"),__vite__mapDeps([2,3]))),Ug=_.lazy(()=>Fl(()=>import("./BlastRadius-RP7vJEyQ.js"),__vite__mapDeps([4,1]))),Ng=_.lazy(()=>Fl(()=>import("./NotFound-Bsg8Wppk.js"),[]));function jg(){return U.jsx("div",{className:"flex items-center justify-center h-64 text-gray-500",children:U.jsxs("div",{className:"flex gap-2 items-center",children:[U.jsx("div",{className:"w-4 h-4 rounded-full bg-blue-500 animate-pulse"}),U.jsx("span",{className:"text-sm",children:"Loading…"})]})})}const ci=({isActive:i})=>`px-3 py-1.5 rounded text-sm font-medium transition-colors ${i?"bg-blue-600 text-white":"text-gray-400 hover:text-gray-100 hover:bg-gray-800"}`;function Hg(){return U.jsxs("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none","aria-hidden":"true",children:[U.jsx("rect",{x:"1",y:"1",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.4"}),U.jsx("rect",{x:"9",y:"1",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.4"}),U.jsx("rect",{x:"1",y:"9",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.4"}),U.jsx("rect",{x:"9",y:"9",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.4"})]})}function Lg({onWorkspaceToggle:i}){const r=hi(),s=Bn(d=>d.pinnedRepos.length),f=Bn(d=>d.activeRepoId);return U.jsxs("header",{className:"h-14 border-b border-gray-800 flex items-center px-6 gap-6 shrink-0 bg-gray-900",children:[U.jsxs("button",{onClick:()=>r("/"),className:"flex items-center gap-2 text-blue-400 font-bold text-lg hover:text-blue-300 transition-colors",children:[U.jsx(Gg,{}),"PureContext"]}),U.jsxs("nav",{className:"flex items-center gap-1 ml-4",children:[U.jsx(Ln,{to:"/",end:!0,className:ci,children:"Repositories"}),U.jsx(Ln,{to:"/search",className:ci,children:"Search"}),U.jsx(Ln,{to:f?`/repos/${encodeURIComponent(f)}/graph`:"/graph",className:ci,children:"Graph"}),U.jsx(Ln,{to:"/blast-radius",className:ci,children:"Blast Radius"})]}),U.jsxs("div",{className:"ml-auto flex items-center gap-2",children:[U.jsxs("button",{type:"button",onClick:i,"aria-label":"Toggle workspace panel",title:"Workspace","data-testid":"workspace-toggle",className:"relative p-1.5 rounded text-gray-400 hover:text-gray-100 hover:bg-gray-800 transition-colors",children:[U.jsx(Hg,{}),s>0&&U.jsx("span",{className:"absolute -top-0.5 -right-0.5 w-3.5 h-3.5 bg-blue-600 text-white text-[8px] font-bold rounded-full flex items-center justify-center",children:s})]}),U.jsx(Bg,{})]})]})}function Bg(){const i=zh(s=>s.theme),r=zh(s=>s.toggle);return U.jsx("button",{type:"button",onClick:r,"aria-label":`Switch to ${i==="dark"?"light":"dark"} mode`,className:"p-1.5 rounded text-gray-400 hover:text-gray-100 hover:bg-gray-800 transition-colors","data-testid":"theme-toggle",children:i==="dark"?U.jsx(qg,{}):U.jsx(Yg,{})})}function qg(){return U.jsxs("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none","aria-hidden":"true",children:[U.jsx("circle",{cx:"7.5",cy:"7.5",r:"2.5",stroke:"currentColor",strokeWidth:"1.4"}),U.jsx("line",{x1:"7.5",y1:"1",x2:"7.5",y2:"3",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}),U.jsx("line",{x1:"7.5",y1:"12",x2:"7.5",y2:"14",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}),U.jsx("line",{x1:"1",y1:"7.5",x2:"3",y2:"7.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}),U.jsx("line",{x1:"12",y1:"7.5",x2:"14",y2:"7.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}),U.jsx("line",{x1:"3.05",y1:"3.05",x2:"4.46",y2:"4.46",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}),U.jsx("line",{x1:"10.54",y1:"10.54",x2:"11.95",y2:"11.95",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}),U.jsx("line",{x1:"11.95",y1:"3.05",x2:"10.54",y2:"4.46",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}),U.jsx("line",{x1:"4.46",y1:"10.54",x2:"3.05",y2:"11.95",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"})]})}function Yg(){return U.jsx("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none","aria-hidden":"true",children:U.jsx("path",{d:"M12.5 8A5 5 0 0 1 7 2.5a5 5 0 0 0 0 10A5 5 0 0 0 12.5 8z",stroke:"currentColor",strokeWidth:"1.4",strokeLinejoin:"round"})})}function Gg(){return U.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[U.jsx("circle",{cx:"10",cy:"10",r:"8",stroke:"currentColor",strokeWidth:"1.5"}),U.jsx("circle",{cx:"10",cy:"10",r:"3",fill:"currentColor"}),U.jsx("line",{x1:"10",y1:"2",x2:"10",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),U.jsx("line",{x1:"10",y1:"15",x2:"10",y2:"18",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),U.jsx("line",{x1:"2",y1:"10",x2:"5",y2:"10",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),U.jsx("line",{x1:"15",y1:"10",x2:"18",y2:"10",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Xg(){const[i,r]=_.useState(!1);return U.jsxs("div",{className:"h-screen flex flex-col overflow-hidden",children:[U.jsx(Lg,{onWorkspaceToggle:()=>r(s=>!s)}),U.jsx("main",{className:"flex-1 overflow-hidden",children:U.jsx(_.Suspense,{fallback:U.jsx(jg,{}),children:U.jsxs(Nv,{children:[U.jsx(ul,{path:"/",element:U.jsx(Og,{})}),U.jsx(ul,{path:"/repos/:id",element:U.jsx(Cg,{})}),U.jsx(ul,{path:"/search",element:U.jsx(Mg,{})}),U.jsx(ul,{path:"/symbols/:symbolId",element:U.jsx(Dg,{})}),U.jsx(ul,{path:"/graph",element:U.jsx(Mh,{})}),U.jsx(ul,{path:"/repos/:id/graph",element:U.jsx(Mh,{})}),U.jsx(ul,{path:"/blast-radius",element:U.jsx(Ug,{})}),U.jsx(ul,{path:"*",element:U.jsx(Ng,{})})]})})}),i&&U.jsx(_g,{onClose:()=>r(!1)})]})}class Qg extends La.Component{constructor(r){super(r),this.state={hasError:!1,error:null}}static getDerivedStateFromError(r){return{hasError:!0,error:r}}render(){var r;return this.state.hasError?U.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gray-950 text-white p-8",children:U.jsxs("div",{className:"max-w-lg text-center space-y-4",children:[U.jsx("h1",{className:"text-2xl font-bold text-red-400",children:"Something went wrong"}),U.jsx("p",{className:"text-gray-400",children:((r=this.state.error)==null?void 0:r.message)??"Unknown error"}),U.jsx("button",{onClick:()=>this.setState({hasError:!1,error:null}),className:"px-4 py-2 bg-blue-600 rounded hover:bg-blue-700 transition-colors",children:"Try again"})]})}):this.props.children}}const lm=document.getElementById("root");if(!lm)throw new Error("Root element not found");L0.createRoot(lm).render(U.jsx(La.StrictMode,{children:U.jsx(Qg,{children:U.jsx(ng,{children:U.jsx(Xg,{})})})}));export{Oh as A,Wh as L,La as R,Tg as a,Zf as b,lr as c,Zg as d,Bn as e,wg as f,zh as g,U0 as h,Jf as i,U as j,Dh as k,_ as r,hi as u};
|
|
61
|
+
Please change the parent <Route path="${q}"> to <Route path="${q==="/"?"*":`${q}/*`}">.`)}let O=Ge(),T;if(r){let q=typeof r=="string"?Ba(r):r;At(b==="/"||((X=q.pathname)==null?void 0:X.startsWith(b)),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${b}" but pathname "${q.pathname}" was given in the \`location\` prop.`),T=q}else T=O;let M=T.pathname||"/",w=M;if(b!=="/"){let q=b.replace(/^\//,"").split("/");w="/"+M.replace(/^\//,"").split("/").slice(q.length).join("/")}let V=Uh(i,{pathname:w});Ue(y||V!=null,`No routes matched location "${T.pathname}${T.search}${T.hash}" `),Ue(V==null||V[V.length-1].route.element!==void 0||V[V.length-1].route.Component!==void 0||V[V.length-1].route.lazy!==void 0,`Matched leaf route at location "${T.pathname}${T.search}${T.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let G=Rv(V&&V.map(q=>Object.assign({},q,{params:Object.assign({},p,q.params),pathname:De([b,f.encodeLocation?f.encodeLocation(q.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:q.pathname]),pathnameBase:q.pathnameBase==="/"?b:De([b,f.encodeLocation?f.encodeLocation(q.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:q.pathnameBase])})),d,s);return r&&G?_.createElement(Yn.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",unstable_mask:void 0,...T},navigationType:"POP"}},G):G}function bv(){let i=Cv(),r=cv(i)?`${i.status} ${i.statusText}`:i instanceof Error?i.message:JSON.stringify(i),s=i instanceof Error?i.stack:null,f="rgba(200,200,200, 0.5)",d={padding:"0.5rem",backgroundColor:f},h={padding:"2px 4px",backgroundColor:f},p=null;return console.error("Error handled by React Router default ErrorBoundary:",i),p=_.createElement(_.Fragment,null,_.createElement("p",null,"💿 Hey developer 👋"),_.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",_.createElement("code",{style:h},"ErrorBoundary")," or"," ",_.createElement("code",{style:h},"errorElement")," prop on your route.")),_.createElement(_.Fragment,null,_.createElement("h2",null,"Unexpected Application Error!"),_.createElement("h3",{style:{fontStyle:"italic"}},r),s?_.createElement("pre",{style:d},s):null,p)}var Ev=_.createElement(bv,null),Kh=class extends _.Component{constructor(i){super(i),this.state={location:i.location,revalidation:i.revalidation,error:i.error}}static getDerivedStateFromError(i){return{error:i}}static getDerivedStateFromProps(i,r){return r.location!==i.location||r.revalidation!=="idle"&&i.revalidation==="idle"?{error:i.error,location:i.location,revalidation:i.revalidation}:{error:i.error!==void 0?i.error:r.error,location:r.location,revalidation:i.revalidation||r.revalidation}}componentDidCatch(i,r){this.props.onError?this.props.onError(i,r):console.error("React Router caught the following error during render",i)}render(){let i=this.state.error;if(this.context&&typeof i=="object"&&i&&"digest"in i&&typeof i.digest=="string"){const s=vv(i.digest);s&&(i=s)}let r=i!==void 0?_.createElement(Ye.Provider,{value:this.props.routeContext},_.createElement($f.Provider,{value:i,children:this.props.component})):this.props.children;return this.context?_.createElement(Tv,{error:i},r):r}};Kh.contextType=Gh;var Xf=new WeakMap;function Tv({children:i,error:r}){let{basename:s}=_.useContext(_e);if(typeof r=="object"&&r&&"digest"in r&&typeof r.digest=="string"){let f=yv(r.digest);if(f){let d=Xf.get(r);if(d)throw d;let h=qh(f.location,s);if(Bh&&!Xf.get(r))if(h.isExternal||f.reloadDocument)window.location.href=h.absoluteURL||h.to;else{const p=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(h.to,{replace:f.replace}));throw Xf.set(r,p),p}return _.createElement("meta",{httpEquiv:"refresh",content:`0;url=${h.absoluteURL||h.to}`})}}return i}function xv({routeContext:i,match:r,children:s}){let f=_.useContext(qa);return f&&f.static&&f.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(f.staticContext._deepestRenderedBoundaryId=r.route.id),_.createElement(Ye.Provider,{value:i},s)}function Rv(i,r=[],s){let f=s==null?void 0:s.state;if(i==null){if(!f)return null;if(f.errors)i=f.matches;else if(r.length===0&&!f.initialized&&f.matches.length>0)i=f.matches;else return null}let d=i,h=f==null?void 0:f.errors;if(h!=null){let O=d.findIndex(T=>T.route.id&&(h==null?void 0:h[T.route.id])!==void 0);At(O>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(h).join(",")}`),d=d.slice(0,Math.min(d.length,O+1))}let p=!1,R=-1;if(s&&f){p=f.renderFallback;for(let O=0;O<d.length;O++){let T=d[O];if((T.route.HydrateFallback||T.route.hydrateFallbackElement)&&(R=O),T.route.id){let{loaderData:M,errors:w}=f,V=T.route.loader&&!M.hasOwnProperty(T.route.id)&&(!w||w[T.route.id]===void 0);if(T.route.lazy||V){s.isStatic&&(p=!0),R>=0?d=d.slice(0,R+1):d=[d[0]];break}}}}let b=s==null?void 0:s.onError,y=f&&b?(O,T)=>{var M,w;b(O,{location:f.location,params:((w=(M=f.matches)==null?void 0:M[0])==null?void 0:w.params)??{},unstable_pattern:fv(f.matches),errorInfo:T})}:void 0;return d.reduceRight((O,T,M)=>{let w,V=!1,G=null,X=null;f&&(w=h&&T.route.id?h[T.route.id]:void 0,G=T.route.errorElement||Ev,p&&(R<0&&M===0?(Jh("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),V=!0,X=null):R===M&&(V=!0,X=T.route.hydrateFallbackElement||null)));let q=r.concat(d.slice(0,M+1)),I=()=>{let k;return w?k=G:V?k=X:T.route.Component?k=_.createElement(T.route.Component,null):T.route.element?k=T.route.element:k=O,_.createElement(xv,{match:T,routeContext:{outlet:O,matches:q,isDataRoute:f!=null},children:k})};return f&&(T.route.ErrorBoundary||T.route.errorElement||M===0)?_.createElement(Kh,{location:f.location,revalidation:f.revalidation,component:G,error:w,children:I(),routeContext:{outlet:null,matches:q,isDataRoute:!0},onError:y}):I()},null)}function Wf(i){return`${i} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function zv(i){let r=_.useContext(qa);return At(r,Wf(i)),r}function Av(i){let r=_.useContext(di);return At(r,Wf(i)),r}function _v(i){let r=_.useContext(Ye);return At(r,Wf(i)),r}function Ff(i){let r=_v(i),s=r.matches[r.matches.length-1];return At(s.route.id,`${i} can only be used on routes that contain a unique "id"`),s.route.id}function Ov(){return Ff("useRouteId")}function Cv(){var f;let i=_.useContext($f),r=Av("useRouteError"),s=Ff("useRouteError");return i!==void 0?i:(f=r.errors)==null?void 0:f[s]}function Mv(){let{router:i}=zv("useNavigate"),r=Ff("useNavigate"),s=_.useRef(!1);return wh(()=>{s.current=!0}),_.useCallback(async(d,h={})=>{Ue(s.current,Zh),s.current&&(typeof d=="number"?await i.navigate(d):await i.navigate(d,{fromRouteId:r,...h}))},[i,r])}var bh={};function Jh(i,r,s){!r&&!bh[i]&&(bh[i]=!0,Ue(!1,s))}_.memo(Dv);function Dv({routes:i,future:r,state:s,isStatic:f,onError:d}){return Vh(i,void 0,{state:s,isStatic:f,onError:d})}function ul(i){At(!1,"A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.")}function Uv({basename:i="/",children:r=null,location:s,navigationType:f="POP",navigator:d,static:h=!1,unstable_useTransitions:p}){At(!Gn(),"You cannot render a <Router> inside another <Router>. You should never have more than one in your app.");let R=i.replace(/^\/*/,"/"),b=_.useMemo(()=>({basename:R,navigator:d,static:h,unstable_useTransitions:p,future:{}}),[R,d,h,p]);typeof s=="string"&&(s=Ba(s));let{pathname:y="/",search:O="",hash:T="",state:M=null,key:w="default",unstable_mask:V}=s,G=_.useMemo(()=>{let X=il(y,R);return X==null?null:{location:{pathname:X,search:O,hash:T,state:M,key:w,unstable_mask:V},navigationType:f}},[R,y,O,T,M,w,f,V]);return Ue(G!=null,`<Router basename="${R}"> is not able to match the URL "${y}${O}${T}" because it does not start with the basename, so the <Router> won't render anything.`),G==null?null:_.createElement(_e.Provider,{value:b},_.createElement(Yn.Provider,{children:r,value:G}))}function Nv({children:i,location:r}){return Sv(Vf(i),r)}function Vf(i,r=[]){let s=[];return _.Children.forEach(i,(f,d)=>{if(!_.isValidElement(f))return;let h=[...r,d];if(f.type===_.Fragment){s.push.apply(s,Vf(f.props.children,h));return}At(f.type===ul,`[${typeof f.type=="string"?f.type:f.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`),At(!f.props.index||!f.props.children,"An index route cannot have child routes.");let p={id:f.props.id||h.join("-"),caseSensitive:f.props.caseSensitive,element:f.props.element,Component:f.props.Component,index:f.props.index,path:f.props.path,middleware:f.props.middleware,loader:f.props.loader,action:f.props.action,hydrateFallbackElement:f.props.hydrateFallbackElement,HydrateFallback:f.props.HydrateFallback,errorElement:f.props.errorElement,ErrorBoundary:f.props.ErrorBoundary,hasErrorBoundary:f.props.hasErrorBoundary===!0||f.props.ErrorBoundary!=null||f.props.errorElement!=null,shouldRevalidate:f.props.shouldRevalidate,handle:f.props.handle,lazy:f.props.lazy};f.props.children&&(p.children=Vf(f.props.children,h)),s.push(p)}),s}var fi="get",ri="application/x-www-form-urlencoded";function mi(i){return typeof HTMLElement<"u"&&i instanceof HTMLElement}function jv(i){return mi(i)&&i.tagName.toLowerCase()==="button"}function Hv(i){return mi(i)&&i.tagName.toLowerCase()==="form"}function Lv(i){return mi(i)&&i.tagName.toLowerCase()==="input"}function Bv(i){return!!(i.metaKey||i.altKey||i.ctrlKey||i.shiftKey)}function qv(i,r){return i.button===0&&(!r||r==="_self")&&!Bv(i)}function Kf(i=""){return new URLSearchParams(typeof i=="string"||Array.isArray(i)||i instanceof URLSearchParams?i:Object.keys(i).reduce((r,s)=>{let f=i[s];return r.concat(Array.isArray(f)?f.map(d=>[s,d]):[[s,f]])},[]))}function Yv(i,r){let s=Kf(i);return r&&r.forEach((f,d)=>{s.has(d)||r.getAll(d).forEach(h=>{s.append(d,h)})}),s}var ii=null;function Gv(){if(ii===null)try{new FormData(document.createElement("form"),0),ii=!1}catch{ii=!0}return ii}var Xv=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Qf(i){return i!=null&&!Xv.has(i)?(Ue(!1,`"${i}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${ri}"`),null):i}function Qv(i,r){let s,f,d,h,p;if(Hv(i)){let R=i.getAttribute("action");f=R?il(R,r):null,s=i.getAttribute("method")||fi,d=Qf(i.getAttribute("enctype"))||ri,h=new FormData(i)}else if(jv(i)||Lv(i)&&(i.type==="submit"||i.type==="image")){let R=i.form;if(R==null)throw new Error('Cannot submit a <button> or <input type="submit"> without a <form>');let b=i.getAttribute("formaction")||R.getAttribute("action");if(f=b?il(b,r):null,s=i.getAttribute("formmethod")||R.getAttribute("method")||fi,d=Qf(i.getAttribute("formenctype"))||Qf(R.getAttribute("enctype"))||ri,h=new FormData(R,i),!Gv()){let{name:y,type:O,value:T}=i;if(O==="image"){let M=y?`${y}.`:"";h.append(`${M}x`,"0"),h.append(`${M}y`,"0")}else y&&h.append(y,T)}}else{if(mi(i))throw new Error('Cannot submit element that is not <form>, <button>, or <input type="submit|image">');s=fi,f=null,d=ri,p=i}return h&&d==="text/plain"&&(p=h,h=void 0),{action:f,method:s.toLowerCase(),encType:d,formData:h,body:p}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");function If(i,r){if(i===!1||i===null||typeof i>"u")throw new Error(r)}function kh(i,r,s,f){let d=typeof i=="string"?new URL(i,typeof window>"u"?"server://singlefetch/":window.location.origin):i;return s?d.pathname.endsWith("/")?d.pathname=`${d.pathname}_.${f}`:d.pathname=`${d.pathname}.${f}`:d.pathname==="/"?d.pathname=`_root.${f}`:r&&il(d.pathname,r)==="/"?d.pathname=`${si(r)}/_root.${f}`:d.pathname=`${si(d.pathname)}.${f}`,d}async function Zv(i,r){if(i.id in r)return r[i.id];try{let s=await import(i.module);return r[i.id]=s,s}catch(s){return console.error(`Error loading route module \`${i.module}\`, reloading page...`),console.error(s),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function wv(i){return i==null?!1:i.href==null?i.rel==="preload"&&typeof i.imageSrcSet=="string"&&typeof i.imageSizes=="string":typeof i.rel=="string"&&typeof i.href=="string"}async function Vv(i,r,s){let f=await Promise.all(i.map(async d=>{let h=r.routes[d.route.id];if(h){let p=await Zv(h,s);return p.links?p.links():[]}return[]}));return $v(f.flat(1).filter(wv).filter(d=>d.rel==="stylesheet"||d.rel==="preload").map(d=>d.rel==="stylesheet"?{...d,rel:"prefetch",as:"style"}:{...d,rel:"prefetch"}))}function Eh(i,r,s,f,d,h){let p=(b,y)=>s[y]?b.route.id!==s[y].route.id:!0,R=(b,y)=>{var O;return s[y].pathname!==b.pathname||((O=s[y].route.path)==null?void 0:O.endsWith("*"))&&s[y].params["*"]!==b.params["*"]};return h==="assets"?r.filter((b,y)=>p(b,y)||R(b,y)):h==="data"?r.filter((b,y)=>{var T;let O=f.routes[b.route.id];if(!O||!O.hasLoader)return!1;if(p(b,y)||R(b,y))return!0;if(b.route.shouldRevalidate){let M=b.route.shouldRevalidate({currentUrl:new URL(d.pathname+d.search+d.hash,window.origin),currentParams:((T=s[0])==null?void 0:T.params)||{},nextUrl:new URL(i,window.origin),nextParams:b.params,defaultShouldRevalidate:!0});if(typeof M=="boolean")return M}return!0}):[]}function Kv(i,r,{includeHydrateFallback:s}={}){return Jv(i.map(f=>{let d=r.routes[f.route.id];if(!d)return[];let h=[d.module];return d.clientActionModule&&(h=h.concat(d.clientActionModule)),d.clientLoaderModule&&(h=h.concat(d.clientLoaderModule)),s&&d.hydrateFallbackModule&&(h=h.concat(d.hydrateFallbackModule)),d.imports&&(h=h.concat(d.imports)),h}).flat(1))}function Jv(i){return[...new Set(i)]}function kv(i){let r={},s=Object.keys(i).sort();for(let f of s)r[f]=i[f];return r}function $v(i,r){let s=new Set;return new Set(r),i.reduce((f,d)=>{let h=JSON.stringify(kv(d));return s.has(h)||(s.add(h),f.push({key:h,link:d})),f},[])}function Pf(){let i=_.useContext(qa);return If(i,"You must render this element inside a <DataRouterContext.Provider> element"),i}function Wv(){let i=_.useContext(di);return If(i,"You must render this element inside a <DataRouterStateContext.Provider> element"),i}var tr=_.createContext(void 0);tr.displayName="FrameworkContext";function er(){let i=_.useContext(tr);return If(i,"You must render this element inside a <HydratedRouter> element"),i}function Fv(i,r){let s=_.useContext(tr),[f,d]=_.useState(!1),[h,p]=_.useState(!1),{onFocus:R,onBlur:b,onMouseEnter:y,onMouseLeave:O,onTouchStart:T}=r,M=_.useRef(null);_.useEffect(()=>{if(i==="render"&&p(!0),i==="viewport"){let G=q=>{q.forEach(I=>{p(I.isIntersecting)})},X=new IntersectionObserver(G,{threshold:.5});return M.current&&X.observe(M.current),()=>{X.disconnect()}}},[i]),_.useEffect(()=>{if(f){let G=setTimeout(()=>{p(!0)},100);return()=>{clearTimeout(G)}}},[f]);let w=()=>{d(!0)},V=()=>{d(!1),p(!1)};return s?i!=="intent"?[h,M,{}]:[h,M,{onFocus:Hn(R,w),onBlur:Hn(b,V),onMouseEnter:Hn(y,w),onMouseLeave:Hn(O,V),onTouchStart:Hn(T,w)}]:[!1,M,{}]}function Hn(i,r){return s=>{i&&i(s),s.defaultPrevented||r(s)}}function Iv({page:i,...r}){let s=ov(),{router:f}=Pf(),d=_.useMemo(()=>Uh(f.routes,i,f.basename),[f.routes,i,f.basename]);return d?s?_.createElement(tg,{page:i,matches:d,...r}):_.createElement(eg,{page:i,matches:d,...r}):null}function Pv(i){let{manifest:r,routeModules:s}=er(),[f,d]=_.useState([]);return _.useEffect(()=>{let h=!1;return Vv(i,r,s).then(p=>{h||d(p)}),()=>{h=!0}},[i,r,s]),f}function tg({page:i,matches:r,...s}){let f=Ge(),{future:d}=er(),{basename:h}=Pf(),p=_.useMemo(()=>{if(i===f.pathname+f.search+f.hash)return[];let R=kh(i,h,d.unstable_trailingSlashAwareDataRequests,"rsc"),b=!1,y=[];for(let O of r)typeof O.route.shouldRevalidate=="function"?b=!0:y.push(O.route.id);return b&&y.length>0&&R.searchParams.set("_routes",y.join(",")),[R.pathname+R.search]},[h,d.unstable_trailingSlashAwareDataRequests,i,f,r]);return _.createElement(_.Fragment,null,p.map(R=>_.createElement("link",{key:R,rel:"prefetch",as:"fetch",href:R,...s})))}function eg({page:i,matches:r,...s}){let f=Ge(),{future:d,manifest:h,routeModules:p}=er(),{basename:R}=Pf(),{loaderData:b,matches:y}=Wv(),O=_.useMemo(()=>Eh(i,r,y,h,f,"data"),[i,r,y,h,f]),T=_.useMemo(()=>Eh(i,r,y,h,f,"assets"),[i,r,y,h,f]),M=_.useMemo(()=>{if(i===f.pathname+f.search+f.hash)return[];let G=new Set,X=!1;if(r.forEach(I=>{var yt;let k=h.routes[I.route.id];!k||!k.hasLoader||(!O.some(dt=>dt.route.id===I.route.id)&&I.route.id in b&&((yt=p[I.route.id])!=null&&yt.shouldRevalidate)||k.hasClientLoader?X=!0:G.add(I.route.id))}),G.size===0)return[];let q=kh(i,R,d.unstable_trailingSlashAwareDataRequests,"data");return X&&G.size>0&&q.searchParams.set("_routes",r.filter(I=>G.has(I.route.id)).map(I=>I.route.id).join(",")),[q.pathname+q.search]},[R,d.unstable_trailingSlashAwareDataRequests,b,f,h,O,r,i,p]),w=_.useMemo(()=>Kv(T,h),[T,h]),V=Pv(T);return _.createElement(_.Fragment,null,M.map(G=>_.createElement("link",{key:G,rel:"prefetch",as:"fetch",href:G,...s})),w.map(G=>_.createElement("link",{key:G,rel:"modulepreload",href:G,...s})),V.map(({key:G,link:X})=>_.createElement("link",{key:G,nonce:s.nonce,...X,crossOrigin:X.crossOrigin??s.crossOrigin})))}function lg(...i){return r=>{i.forEach(s=>{typeof s=="function"?s(r):s!=null&&(s.current=r)})}}var ag=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";try{ag&&(window.__reactRouterVersion="7.14.1")}catch{}function ng({basename:i,children:r,unstable_useTransitions:s,window:f}){let d=_.useRef();d.current==null&&(d.current=B0({window:f,v5Compat:!0}));let h=d.current,[p,R]=_.useState({action:h.action,location:h.location}),b=_.useCallback(y=>{s===!1?R(y):_.startTransition(()=>R(y))},[s]);return _.useLayoutEffect(()=>h.listen(b),[h,b]),_.createElement(Uv,{basename:i,children:r,location:p.location,navigationType:p.action,navigator:h,unstable_useTransitions:s})}var $h=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Wh=_.forwardRef(function({onClick:r,discover:s="render",prefetch:f="none",relative:d,reloadDocument:h,replace:p,unstable_mask:R,state:b,target:y,to:O,preventScrollReset:T,viewTransition:M,unstable_defaultShouldRevalidate:w,...V},G){let{basename:X,navigator:q,unstable_useTransitions:I}=_.useContext(_e),k=typeof O=="string"&&$h.test(O),yt=qh(O,X);O=yt.to;let dt=gv(O,{relative:d}),Tt=Ge(),W=null;if(R){let Nt=kf(R,[],Tt.unstable_mask?Tt.unstable_mask.pathname:"/",!0);X!=="/"&&(Nt.pathname=Nt.pathname==="/"?X:De([X,Nt.pathname])),W=q.createHref(Nt)}let[Ct,Jt,Ne]=Fv(f,V),ye=cg(O,{replace:p,unstable_mask:R,state:b,target:y,preventScrollReset:T,relative:d,viewTransition:M,unstable_defaultShouldRevalidate:w,unstable_useTransitions:I});function kt(Nt){r&&r(Nt),Nt.defaultPrevented||ye(Nt)}let je=!(yt.isExternal||h),ve=_.createElement("a",{...V,...Ne,href:(je?W:void 0)||yt.absoluteURL||dt,onClick:je?kt:r,ref:lg(G,Jt),target:y,"data-discover":!k&&s==="render"?"true":void 0});return Ct&&!k?_.createElement(_.Fragment,null,ve,_.createElement(Iv,{page:dt})):ve});Wh.displayName="Link";var Ln=_.forwardRef(function({"aria-current":r="page",caseSensitive:s=!1,className:f="",end:d=!1,style:h,to:p,viewTransition:R,children:b,...y},O){let T=Xn(p,{relative:y.relative}),M=Ge(),w=_.useContext(di),{navigator:V,basename:G}=_.useContext(_e),X=w!=null&&dg(T)&&R===!0,q=V.encodeLocation?V.encodeLocation(T).pathname:T.pathname,I=M.pathname,k=w&&w.navigation&&w.navigation.location?w.navigation.location.pathname:null;s||(I=I.toLowerCase(),k=k?k.toLowerCase():null,q=q.toLowerCase()),k&&G&&(k=il(k,G)||k);const yt=q!=="/"&&q.endsWith("/")?q.length-1:q.length;let dt=I===q||!d&&I.startsWith(q)&&I.charAt(yt)==="/",Tt=k!=null&&(k===q||!d&&k.startsWith(q)&&k.charAt(q.length)==="/"),W={isActive:dt,isPending:Tt,isTransitioning:X},Ct=dt?r:void 0,Jt;typeof f=="function"?Jt=f(W):Jt=[f,dt?"active":null,Tt?"pending":null,X?"transitioning":null].filter(Boolean).join(" ");let Ne=typeof h=="function"?h(W):h;return _.createElement(Wh,{...y,"aria-current":Ct,className:Jt,ref:O,style:Ne,to:p,viewTransition:R},typeof b=="function"?b(W):b)});Ln.displayName="NavLink";var ug=_.forwardRef(({discover:i="render",fetcherKey:r,navigate:s,reloadDocument:f,replace:d,state:h,method:p=fi,action:R,onSubmit:b,relative:y,preventScrollReset:O,viewTransition:T,unstable_defaultShouldRevalidate:M,...w},V)=>{let{unstable_useTransitions:G}=_.useContext(_e),X=og(),q=sg(R,{relative:y}),I=p.toLowerCase()==="get"?"get":"post",k=typeof R=="string"&&$h.test(R),yt=dt=>{if(b&&b(dt),dt.defaultPrevented)return;dt.preventDefault();let Tt=dt.nativeEvent.submitter,W=(Tt==null?void 0:Tt.getAttribute("formmethod"))||p,Ct=()=>X(Tt||dt.currentTarget,{fetcherKey:r,method:W,navigate:s,replace:d,state:h,relative:y,preventScrollReset:O,viewTransition:T,unstable_defaultShouldRevalidate:M});G&&s!==!1?_.startTransition(()=>Ct()):Ct()};return _.createElement("form",{ref:V,method:I,action:q,onSubmit:f?b:yt,...w,"data-discover":!k&&i==="render"?"true":void 0})});ug.displayName="Form";function ig(i){return`${i} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Fh(i){let r=_.useContext(qa);return At(r,ig(i)),r}function cg(i,{target:r,replace:s,unstable_mask:f,state:d,preventScrollReset:h,relative:p,viewTransition:R,unstable_defaultShouldRevalidate:b,unstable_useTransitions:y}={}){let O=hi(),T=Ge(),M=Xn(i,{relative:p});return _.useCallback(w=>{if(qv(w,r)){w.preventDefault();let V=s!==void 0?s:qn(T)===qn(M),G=()=>O(i,{replace:V,unstable_mask:f,state:d,preventScrollReset:h,relative:p,viewTransition:R,unstable_defaultShouldRevalidate:b});y?_.startTransition(()=>G()):G()}},[T,O,M,s,f,d,r,i,h,p,R,b,y])}function wg(i){Ue(typeof URLSearchParams<"u","You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let r=_.useRef(Kf(i)),s=_.useRef(!1),f=Ge(),d=_.useMemo(()=>Yv(f.search,s.current?null:r.current),[f.search]),h=hi(),p=_.useCallback((R,b)=>{const y=Kf(typeof R=="function"?R(new URLSearchParams(d)):R);s.current=!0,h("?"+y,b)},[h,d]);return[d,p]}var fg=0,rg=()=>`__${String(++fg)}__`;function og(){let{router:i}=Fh("useSubmit"),{basename:r}=_.useContext(_e),s=Ov(),f=i.fetch,d=i.navigate;return _.useCallback(async(h,p={})=>{let{action:R,method:b,encType:y,formData:O,body:T}=Qv(h,r);if(p.navigate===!1){let M=p.fetcherKey||rg();await f(M,s,p.action||R,{unstable_defaultShouldRevalidate:p.unstable_defaultShouldRevalidate,preventScrollReset:p.preventScrollReset,formData:O,body:T,formMethod:p.method||b,formEncType:p.encType||y,flushSync:p.flushSync})}else await d(p.action||R,{unstable_defaultShouldRevalidate:p.unstable_defaultShouldRevalidate,preventScrollReset:p.preventScrollReset,formData:O,body:T,formMethod:p.method||b,formEncType:p.encType||y,replace:p.replace,state:p.state,fromRouteId:s,flushSync:p.flushSync,viewTransition:p.viewTransition})},[f,d,r,s])}function sg(i,{relative:r}={}){let{basename:s}=_.useContext(_e),f=_.useContext(Ye);At(f,"useFormAction must be used inside a RouteContext");let[d]=f.matches.slice(-1),h={...Xn(i||".",{relative:r})},p=Ge();if(i==null){h.search=p.search;let R=new URLSearchParams(h.search),b=R.getAll("index");if(b.some(O=>O==="")){R.delete("index"),b.filter(T=>T).forEach(T=>R.append("index",T));let O=R.toString();h.search=O?`?${O}`:""}}return(!i||i===".")&&d.route.index&&(h.search=h.search?h.search.replace(/^\?/,"?index&"):"?index"),s!=="/"&&(h.pathname=h.pathname==="/"?s:De([s,h.pathname])),qn(h)}function dg(i,{relative:r}={}){let s=_.useContext(Xh);At(s!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:f}=Fh("useViewTransitionState"),d=Xn(i,{relative:r});if(!s.isTransitioning)return!1;let h=il(s.currentLocation.pathname,f)||s.currentLocation.pathname,p=il(s.nextLocation.pathname,f)||s.nextLocation.pathname;return oi(d.pathname,p)!=null||oi(d.pathname,h)!=null}const hg="modulepreload",mg=function(i){return"/"+i},Th={},Fl=function(r,s,f){let d=Promise.resolve();if(s&&s.length>0){let p=function(y){return Promise.all(y.map(O=>Promise.resolve(O).then(T=>({status:"fulfilled",value:T}),T=>({status:"rejected",reason:T}))))};document.getElementsByTagName("link");const R=document.querySelector("meta[property=csp-nonce]"),b=(R==null?void 0:R.nonce)||(R==null?void 0:R.getAttribute("nonce"));d=p(s.map(y=>{if(y=mg(y),y in Th)return;Th[y]=!0;const O=y.endsWith(".css"),T=O?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${y}"]${T}`))return;const M=document.createElement("link");if(M.rel=O?"stylesheet":hg,O||(M.as="script"),M.crossOrigin="",M.href=y,b&&M.setAttribute("nonce",b),document.head.appendChild(M),O)return new Promise((w,V)=>{M.addEventListener("load",w),M.addEventListener("error",()=>V(new Error(`Unable to preload CSS for ${y}`)))})}))}function h(p){const R=new Event("vite:preloadError",{cancelable:!0});if(R.payload=p,window.dispatchEvent(R),!R.defaultPrevented)throw p}return d.then(p=>{for(const R of p||[])R.status==="rejected"&&h(R.reason);return r().catch(h)})},xh=i=>{let r;const s=new Set,f=(y,O)=>{const T=typeof y=="function"?y(r):y;if(!Object.is(T,r)){const M=r;r=O??(typeof T!="object"||T===null)?T:Object.assign({},r,T),s.forEach(w=>w(r,M))}},d=()=>r,R={setState:f,getState:d,getInitialState:()=>b,subscribe:y=>(s.add(y),()=>s.delete(y))},b=r=i(f,d,R);return R},yg=(i=>i?xh(i):xh),vg=i=>i;function gg(i,r=vg){const s=La.useSyncExternalStore(i.subscribe,La.useCallback(()=>r(i.getState()),[i,r]),La.useCallback(()=>r(i.getInitialState()),[i,r]));return La.useDebugValue(s),s}const Rh=i=>{const r=yg(i),s=f=>gg(r,f);return Object.assign(s,r),s},lr=(i=>i?Rh(i):Rh),Ih="purecontext-theme";function pg(){try{const i=localStorage.getItem(Ih);if(i==="light"||i==="dark")return i}catch{}return"dark"}function Ph(i){const r=document.documentElement;i==="light"?(r.classList.add("light"),r.classList.remove("dark")):(r.classList.add("dark"),r.classList.remove("light"));try{localStorage.setItem(Ih,i)}catch{}}const tm=pg();Ph(tm);const zh=lr((i,r)=>({theme:tm,toggle:()=>{const s=r().theme==="dark"?"light":"dark";Ph(s),i({theme:s})}})),Zf=lr(i=>({repos:[],reposLoaded:!1,trees:{},outlines:{},selectedRepoId:null,selectedFilePath:null,expandedDirs:{},setRepos(r){i({repos:r,reposLoaded:!0})},setTree(r,s){i(f=>({trees:{...f.trees,[r]:s}}))},setOutline(r,s){i(f=>({outlines:{...f.outlines,[r]:s}}))},selectRepo(r){i({selectedRepoId:r,selectedFilePath:null})},selectFile(r){i({selectedFilePath:r})},toggleDir(r,s){i(f=>{const d=f.expandedDirs[r]??new Set,h=new Set(d);return h.has(s)?h.delete(s):h.add(s),{expandedDirs:{...f.expandedDirs,[r]:h}}})}})),em="purecontext-workspace";function Sg(){try{const i=localStorage.getItem(em);if(!i)return[];const r=JSON.parse(i);return Array.isArray(r)?r:[]}catch{return[]}}function Ah(i){try{localStorage.setItem(em,JSON.stringify(i))}catch{}}const Bn=lr(i=>({pinnedRepos:Sg(),activeRepoId:null,pin(r){i(s=>{if(s.pinnedRepos.includes(r))return{};const f=[...s.pinnedRepos,r];return Ah(f),{pinnedRepos:f}})},unpin(r){i(s=>{const f=s.pinnedRepos.filter(d=>d!==r);return Ah(f),{pinnedRepos:f}})},setActive(r){i({activeRepoId:r})}})),bg="/api",Eg=1e4,_h=2;class Oh extends Error{constructor(r,s){super(s),this.status=r,this.name="ApiClientError"}}async function Kt(i,r,s=0){const f=new URL(bg+i,window.location.origin);if(r)for(const[R,b]of Object.entries(r))b!==void 0&&f.searchParams.set(R,String(b));const d=new AbortController,h=setTimeout(()=>d.abort(),Eg);let p;try{p=await fetch(f.toString(),{signal:d.signal})}catch(R){if(clearTimeout(h),s<_h&&!(R instanceof DOMException&&R.name==="AbortError"))return Kt(i,r,s+1);throw new Oh(0,`Network error: ${R}`)}finally{clearTimeout(h)}if(!p.ok){let R=`HTTP ${p.status}`;try{const b=await p.json();b.error&&(R=b.error)}catch{}if(p.status>=500&&s<_h)return Kt(i,r,s+1);throw new Oh(p.status,R)}return p.json()}const Tg={listRepos(){return Kt("/repos")},getFileTree(i){return Kt(`/repos/${encodeURIComponent(i)}/tree`)},getRepoOutline(i,r){return Kt(`/repos/${encodeURIComponent(i)}/outline`,r!==void 0?{limit:r}:void 0)},searchSymbols(i,r){const{repoIds:s,...f}=r;if(s&&s.length>1)return Kt("/search",{...f,repoIds:s.join(",")});const d=(s&&s.length===1?s[0]:i)??"";return Kt(`/repos/${encodeURIComponent(d)}/search`,f)},getSymbolSource(i,r){return Kt(`/symbols/${encodeURIComponent(i)}`,{repoId:r})},getFileOutline(i,r){return Kt(`/repos/${encodeURIComponent(i)}/file-outline`,{filePath:r})},findImporters(i,r){return Kt(`/repos/${encodeURIComponent(i)}/importers`,{filePath:r})},getGraph(i,r){return Kt(`/repos/${encodeURIComponent(i)}/graph`,r)},getBlastRadius(i,r,s){return Kt(`/repos/${encodeURIComponent(i)}/blast-radius`,{symbolId:r,...s!==void 0?{depth:s}:{}})},getSymbolCoverage(i,r){return Kt(`/repos/${encodeURIComponent(i)}/coverage`,{symbolId:r})},getRepoCoverage(i){return Kt(`/repos/${encodeURIComponent(i)}/coverage`)},getQualityMetrics(i,r){return Kt(`/repos/${encodeURIComponent(i)}/quality`,r!==void 0?{scope:r}:void 0)},getSymbolHistory(i,r,s){return Kt(`/repos/${encodeURIComponent(i)}/symbols/${encodeURIComponent(r)}/history`,s!==void 0?{limit:s}:void 0)},getChurnMetrics(i,r,s){const f={};return r!==void 0&&(f.scope=r),s!==void 0&&(f.days=s),Kt(`/repos/${encodeURIComponent(i)}/churn`,Object.keys(f).length>0?f:void 0)}};function xg({filled:i}){return U.jsx("svg",{width:"13",height:"13",viewBox:"0 0 13 13",fill:"none","aria-hidden":"true",children:i?U.jsx("path",{d:"M6.5 1L8 5H12L8.5 7.5L9.5 12L6.5 9.5L3.5 12L4.5 7.5L1 5H5L6.5 1Z",fill:"currentColor"}):U.jsx("path",{d:"M6.5 1L8 5H12L8.5 7.5L9.5 12L6.5 9.5L3.5 12L4.5 7.5L1 5H5L6.5 1Z",stroke:"currentColor",strokeWidth:"1.3",strokeLinejoin:"round"})})}function Rg(){return U.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none","aria-hidden":"true",children:[U.jsx("line",{x1:"2",y1:"2",x2:"12",y2:"12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),U.jsx("line",{x1:"12",y1:"2",x2:"2",y2:"12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function zg(){return U.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 13 13",fill:"none","aria-hidden":"true",children:[U.jsx("circle",{cx:"5.5",cy:"5.5",r:"4",stroke:"currentColor",strokeWidth:"1.4"}),U.jsx("line",{x1:"8.5",y1:"8.5",x2:"11.5",y2:"11.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"})]})}function Ag(i){try{const r=new Date(i),f=Date.now()-r.getTime(),d=Math.floor(f/6e4);if(d<1)return"just now";if(d<60)return`${d}m ago`;const h=Math.floor(d/60);if(h<24)return`${h}h ago`;const p=Math.floor(h/24);return p<30?`${p}d ago`:r.toLocaleDateString()}catch{return i}}function Ch({repo:i,pinned:r,onPin:s,onUnpin:f}){const d=i.rootPath.split(/[/\\]/).pop()??i.repoId,h=i.symbolCount>0;return U.jsxs("div",{className:`flex items-center gap-2 px-3 py-2 border-b border-gray-800/60 ${h?"":"opacity-50"}`,"data-testid":"repo-row",children:[U.jsx("span",{className:`shrink-0 w-2 h-2 rounded-full ${h?"bg-green-500":"bg-gray-600"}`,title:h?`${i.symbolCount} symbols`:"Not indexed"}),U.jsxs("div",{className:"flex-1 min-w-0",children:[U.jsx("p",{className:"text-xs font-medium text-gray-200 truncate",title:i.rootPath,children:d}),U.jsxs("p",{className:"text-[10px] text-gray-500",children:[i.symbolCount.toLocaleString()," symbols · ",Ag(i.lastIndexed)]})]}),U.jsx("button",{type:"button",onClick:r?f:s,"aria-label":r?`Unpin ${d}`:`Pin ${d}`,"aria-pressed":r,className:`shrink-0 p-1 rounded transition-colors ${r?"text-yellow-400 hover:text-yellow-300":"text-gray-600 hover:text-gray-300"}`,"data-testid":r?"unpin-btn":"pin-btn",children:U.jsx(xg,{filled:r})})]})}function _g({onClose:i}){const r=hi(),s=Zf(M=>M.repos),f=Zf(M=>M.reposLoaded),d=Zf(M=>M.setRepos),h=Bn(M=>M.pinnedRepos),p=Bn(M=>M.pin),R=Bn(M=>M.unpin);_.useEffect(()=>{f||Tg.listRepos().then(M=>d(M.repos)).catch(()=>{})},[f,d]);function b(){if(h.length===0)return;const M=new URLSearchParams;for(const w of h)M.append("repoIds",w);r(`/search?${M.toString()}`),i()}function y(M){r(`/search?repoId=${encodeURIComponent(M)}`),i()}const O=s.filter(M=>h.includes(M.repoId)),T=s.filter(M=>!h.includes(M.repoId));return U.jsxs(U.Fragment,{children:[U.jsx("div",{className:"fixed inset-0 z-40",onClick:i,"aria-hidden":"true","data-testid":"workspace-backdrop"}),U.jsxs("aside",{className:"fixed top-14 right-0 bottom-0 z-50 w-72 bg-gray-900 border-l border-gray-800 flex flex-col shadow-xl",role:"dialog","aria-label":"Workspace panel","data-testid":"workspace-panel",children:[U.jsxs("div",{className:"flex items-center justify-between px-4 py-3 border-b border-gray-800 shrink-0",children:[U.jsxs("div",{children:[U.jsx("span",{className:"text-sm font-semibold text-gray-100",children:"Workspace"}),h.length>0&&U.jsx("span",{className:"ml-2 text-[10px] bg-blue-600 text-white rounded-full px-1.5 py-0.5 font-bold",children:h.length})]}),U.jsxs("div",{className:"flex items-center gap-2",children:[h.length>0&&U.jsxs("button",{type:"button",onClick:b,className:"flex items-center gap-1.5 px-2.5 py-1 bg-blue-600 hover:bg-blue-500 text-white text-xs rounded transition-colors",title:"Search across all pinned repos","data-testid":"search-all-btn",children:[U.jsx(zg,{}),"Search all"]}),U.jsx("button",{type:"button",onClick:i,className:"p-1 text-gray-500 hover:text-gray-200 transition-colors rounded","aria-label":"Close workspace panel",children:U.jsx(Rg,{})})]})]}),U.jsxs("div",{className:"flex-1 overflow-y-auto scrollbar-thin",children:[O.length>0&&U.jsxs("div",{children:[U.jsx("p",{className:"px-3 py-2 text-[10px] font-semibold text-gray-500 uppercase tracking-wide",children:"Pinned"}),O.map(M=>U.jsx("div",{onClick:()=>y(M.repoId),className:"cursor-pointer hover:bg-gray-800/30 transition-colors",children:U.jsx(Ch,{repo:M,pinned:!0,onPin:()=>p(M.repoId),onUnpin:()=>R(M.repoId)})},M.repoId))]}),T.length>0&&U.jsxs("div",{children:[U.jsx("p",{className:"px-3 py-2 text-[10px] font-semibold text-gray-500 uppercase tracking-wide",children:O.length>0?"All repositories":"Repositories"}),T.map(M=>U.jsx("div",{onClick:()=>y(M.repoId),className:"cursor-pointer hover:bg-gray-800/30 transition-colors",children:U.jsx(Ch,{repo:M,pinned:!1,onPin:()=>p(M.repoId),onUnpin:()=>R(M.repoId)})},M.repoId))]}),s.length===0&&f&&U.jsxs("div",{className:"flex flex-col items-center justify-center h-40 text-gray-600 text-sm gap-2",children:[U.jsx("p",{children:"No indexed repositories."}),U.jsxs("p",{className:"text-xs text-center px-4",children:["Run ",U.jsx("code",{className:"font-mono bg-gray-800 px-1 rounded",children:"index-folder"})," to get started."]})]}),s.length===0&&!f&&U.jsx("div",{className:"flex items-center justify-center h-24",children:U.jsx("span",{className:"block w-4 h-4 rounded-full border-2 border-blue-500 border-t-transparent animate-spin"})})]}),h.length===0&&s.length>0&&U.jsx("div",{className:"px-4 py-3 border-t border-gray-800 shrink-0",children:U.jsx("p",{className:"text-[10px] text-gray-600 text-center",children:"Pin repos to enable multi-repo search"})})]})]})}const Og=_.lazy(()=>Fl(()=>import("./RepoList-BKtST3hB.js"),[])),Cg=_.lazy(()=>Fl(()=>import("./RepoDetail-Dfp5z5Kq.js"),[])),Mg=_.lazy(()=>Fl(()=>import("./Search-DzhGDViy.js"),__vite__mapDeps([0,1]))),Dg=_.lazy(()=>Fl(()=>import("./SymbolView-ryVEwAHG.js"),[])),Mh=_.lazy(()=>Fl(()=>import("./DependencyGraph-BSMhzwWV.js"),__vite__mapDeps([2,3]))),Ug=_.lazy(()=>Fl(()=>import("./BlastRadius-QdgESOL8.js"),__vite__mapDeps([4,1]))),Ng=_.lazy(()=>Fl(()=>import("./NotFound-CipFP_s1.js"),[]));function jg(){return U.jsx("div",{className:"flex items-center justify-center h-64 text-gray-500",children:U.jsxs("div",{className:"flex gap-2 items-center",children:[U.jsx("div",{className:"w-4 h-4 rounded-full bg-blue-500 animate-pulse"}),U.jsx("span",{className:"text-sm",children:"Loading…"})]})})}const ci=({isActive:i})=>`px-3 py-1.5 rounded text-sm font-medium transition-colors ${i?"bg-blue-600 text-white":"text-gray-400 hover:text-gray-100 hover:bg-gray-800"}`;function Hg(){return U.jsxs("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none","aria-hidden":"true",children:[U.jsx("rect",{x:"1",y:"1",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.4"}),U.jsx("rect",{x:"9",y:"1",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.4"}),U.jsx("rect",{x:"1",y:"9",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.4"}),U.jsx("rect",{x:"9",y:"9",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.4"})]})}function Lg({onWorkspaceToggle:i}){const r=hi(),s=Bn(d=>d.pinnedRepos.length),f=Bn(d=>d.activeRepoId);return U.jsxs("header",{className:"h-14 border-b border-gray-800 flex items-center px-6 gap-6 shrink-0 bg-gray-900",children:[U.jsxs("button",{onClick:()=>r("/"),className:"flex items-center gap-2 text-blue-400 font-bold text-lg hover:text-blue-300 transition-colors",children:[U.jsx(Gg,{}),"PureContext"]}),U.jsxs("nav",{className:"flex items-center gap-1 ml-4",children:[U.jsx(Ln,{to:"/",end:!0,className:ci,children:"Repositories"}),U.jsx(Ln,{to:"/search",className:ci,children:"Search"}),U.jsx(Ln,{to:f?`/repos/${encodeURIComponent(f)}/graph`:"/graph",className:ci,children:"Graph"}),U.jsx(Ln,{to:"/blast-radius",className:ci,children:"Blast Radius"})]}),U.jsxs("div",{className:"ml-auto flex items-center gap-2",children:[U.jsxs("button",{type:"button",onClick:i,"aria-label":"Toggle workspace panel",title:"Workspace","data-testid":"workspace-toggle",className:"relative p-1.5 rounded text-gray-400 hover:text-gray-100 hover:bg-gray-800 transition-colors",children:[U.jsx(Hg,{}),s>0&&U.jsx("span",{className:"absolute -top-0.5 -right-0.5 w-3.5 h-3.5 bg-blue-600 text-white text-[8px] font-bold rounded-full flex items-center justify-center",children:s})]}),U.jsx(Bg,{})]})]})}function Bg(){const i=zh(s=>s.theme),r=zh(s=>s.toggle);return U.jsx("button",{type:"button",onClick:r,"aria-label":`Switch to ${i==="dark"?"light":"dark"} mode`,className:"p-1.5 rounded text-gray-400 hover:text-gray-100 hover:bg-gray-800 transition-colors","data-testid":"theme-toggle",children:i==="dark"?U.jsx(qg,{}):U.jsx(Yg,{})})}function qg(){return U.jsxs("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none","aria-hidden":"true",children:[U.jsx("circle",{cx:"7.5",cy:"7.5",r:"2.5",stroke:"currentColor",strokeWidth:"1.4"}),U.jsx("line",{x1:"7.5",y1:"1",x2:"7.5",y2:"3",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}),U.jsx("line",{x1:"7.5",y1:"12",x2:"7.5",y2:"14",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}),U.jsx("line",{x1:"1",y1:"7.5",x2:"3",y2:"7.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}),U.jsx("line",{x1:"12",y1:"7.5",x2:"14",y2:"7.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}),U.jsx("line",{x1:"3.05",y1:"3.05",x2:"4.46",y2:"4.46",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}),U.jsx("line",{x1:"10.54",y1:"10.54",x2:"11.95",y2:"11.95",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}),U.jsx("line",{x1:"11.95",y1:"3.05",x2:"10.54",y2:"4.46",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"}),U.jsx("line",{x1:"4.46",y1:"10.54",x2:"3.05",y2:"11.95",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round"})]})}function Yg(){return U.jsx("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none","aria-hidden":"true",children:U.jsx("path",{d:"M12.5 8A5 5 0 0 1 7 2.5a5 5 0 0 0 0 10A5 5 0 0 0 12.5 8z",stroke:"currentColor",strokeWidth:"1.4",strokeLinejoin:"round"})})}function Gg(){return U.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[U.jsx("circle",{cx:"10",cy:"10",r:"8",stroke:"currentColor",strokeWidth:"1.5"}),U.jsx("circle",{cx:"10",cy:"10",r:"3",fill:"currentColor"}),U.jsx("line",{x1:"10",y1:"2",x2:"10",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),U.jsx("line",{x1:"10",y1:"15",x2:"10",y2:"18",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),U.jsx("line",{x1:"2",y1:"10",x2:"5",y2:"10",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),U.jsx("line",{x1:"15",y1:"10",x2:"18",y2:"10",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Xg(){const[i,r]=_.useState(!1);return U.jsxs("div",{className:"h-screen flex flex-col overflow-hidden",children:[U.jsx(Lg,{onWorkspaceToggle:()=>r(s=>!s)}),U.jsx("main",{className:"flex-1 overflow-hidden",children:U.jsx(_.Suspense,{fallback:U.jsx(jg,{}),children:U.jsxs(Nv,{children:[U.jsx(ul,{path:"/",element:U.jsx(Og,{})}),U.jsx(ul,{path:"/repos/:id",element:U.jsx(Cg,{})}),U.jsx(ul,{path:"/search",element:U.jsx(Mg,{})}),U.jsx(ul,{path:"/symbols/:symbolId",element:U.jsx(Dg,{})}),U.jsx(ul,{path:"/graph",element:U.jsx(Mh,{})}),U.jsx(ul,{path:"/repos/:id/graph",element:U.jsx(Mh,{})}),U.jsx(ul,{path:"/blast-radius",element:U.jsx(Ug,{})}),U.jsx(ul,{path:"*",element:U.jsx(Ng,{})})]})})}),i&&U.jsx(_g,{onClose:()=>r(!1)})]})}class Qg extends La.Component{constructor(r){super(r),this.state={hasError:!1,error:null}}static getDerivedStateFromError(r){return{hasError:!0,error:r}}render(){var r;return this.state.hasError?U.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gray-950 text-white p-8",children:U.jsxs("div",{className:"max-w-lg text-center space-y-4",children:[U.jsx("h1",{className:"text-2xl font-bold text-red-400",children:"Something went wrong"}),U.jsx("p",{className:"text-gray-400",children:((r=this.state.error)==null?void 0:r.message)??"Unknown error"}),U.jsx("button",{onClick:()=>this.setState({hasError:!1,error:null}),className:"px-4 py-2 bg-blue-600 rounded hover:bg-blue-700 transition-colors",children:"Try again"})]})}):this.props.children}}const lm=document.getElementById("root");if(!lm)throw new Error("Root element not found");L0.createRoot(lm).render(U.jsx(La.StrictMode,{children:U.jsx(Qg,{children:U.jsx(ng,{children:U.jsx(Xg,{})})})}));export{Oh as A,Wh as L,La as R,Tg as a,Zf as b,lr as c,Zg as d,Bn as e,wg as f,zh as g,U0 as h,Jf as i,U as j,Dh as k,_ as r,hi as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var O=Object.defineProperty;var _=(e,t,a)=>t in e?O(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var R=(e,t,a)=>_(e,typeof t!="symbol"?t+"":t,a);import{r as s,a as L,A as j}from"./index-
|
|
1
|
+
var O=Object.defineProperty;var _=(e,t,a)=>t in e?O(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var R=(e,t,a)=>_(e,typeof t!="symbol"?t+"":t,a);import{r as s,a as L,A as j}from"./index-nX2chMqi.js";function q(e,t,a,c){return JSON.stringify({repoId:e,repoIds:t?[...t].sort():void 0,query:a,kinds:[...c.kinds].sort(),filePath:c.filePath})}class B{constructor(t){R(this,"map",new Map);this.maxSize=t}get(t){const a=this.map.get(t);return a!==void 0&&(this.map.delete(t),this.map.set(t,a)),a}set(t,a){if(this.map.has(t)&&this.map.delete(t),this.map.set(t,a),this.map.size>this.maxSize){const c=this.map.keys().next().value;c!==void 0&&this.map.delete(c)}}}const T=new B(50);function H({repoId:e,repoIds:t,debounceMs:a=300,cacheSize:c=50}){const[v,P]=s.useState(""),[h,x]=s.useState({kinds:[],filePath:""}),[A,m]=s.useState([]),[F,o]=s.useState(!1),[K,f]=s.useState(null),[y,C]=s.useState(null),d=s.useRef(null),u=s.useRef(null),g=s.useRef(null);s.useEffect(()=>{!e||!h.coverageStatus||t&&t.length>1||d.current!==e&&(d.current=e,L.getRepoCoverage(e).then(n=>{const r=new Map;for(const i of n.mappings)r.set(i.symbolId,i.coverageStatus);C(r)}).catch(()=>{C(null)}))},[e,h.coverageStatus]),s.useEffect(()=>{d.current=null,C(null)},[e,t]);const z=s.useCallback((n,r,i)=>{var w;const S=t&&t.length>1;if(!S&&!e){m([]),o(!1),f(null);return}if(n.trim().length===0){m([]),o(!1),f(null);return}const b=q(e,t,n,r),k=T.get(b);if(k){const l=r.coverageStatus&&i&&!S?k.filter(E=>i.get(E.id)===r.coverageStatus):k;m(l),o(!1),f(null);return}(w=u.current)==null||w.call(u);let p=!1;u.current=()=>{p=!0},o(!0),f(null);const M={query:n,...r.kinds.length===1?{kind:r.kinds[0]}:{},...r.filePath?{filePath:r.filePath}:{},limit:50,...S?{repoIds:t}:{}};L.searchSymbols(S?null:e,M).then(l=>{if(p)return;T.set(b,l.results);const E=r.coverageStatus&&i&&!S?l.results.filter(N=>i.get(N.id)===r.coverageStatus):l.results;m(E),o(!1)}).catch(l=>{p||(f(l instanceof j?l.message:String(l)),o(!1))})},[e,t]);s.useEffect(()=>(g.current!==null&&clearTimeout(g.current),g.current=setTimeout(()=>{z(v,h,y)},a),()=>{g.current!==null&&clearTimeout(g.current)}),[v,h,y,a,z]),s.useEffect(()=>()=>{var n;(n=u.current)==null||n.call(u)},[]);const Q=s.useCallback(n=>{P(n)},[]),J=s.useCallback(()=>{var n;P(""),x({kinds:[],filePath:""}),m([]),f(null),(n=u.current)==null||n.call(u)},[]);return{query:v,setQuery:Q,filters:h,setFilters:x,results:A,loading:F,error:K,clearSearch:J}}export{H as u};
|
package/dist/ui/index.html
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>PureContext</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-nX2chMqi.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Ny8gn9F0.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<div id="root"></div>
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "1.
|
|
1
|
+
export declare const VERSION = "1.2.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = '1.
|
|
1
|
+
export const VERSION = '1.2.0';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|