-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.html
More file actions
13 lines (13 loc) · 12.7 KB
/
index.html
File metadata and controls
13 lines (13 loc) · 12.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html><html> <head><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta charset="UTF-8"><link rel="icon" type="image/svg+xml" href="./favicon.svg"><title>AIAPI</title><link rel="stylesheet" href="./assets/index@_@astro.CUoE-nLt.css"></head> <body> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style><script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();</script><script>(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE_INFINITY*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script><astro-island uid="Z13VYgB" data-preact-island-id="1" component-url="./assets/App.Cpa-NM8s.js" component-export="default" renderer-url="./assets/client.By5JohYI.js" props="{}" ssr client="load" opts="{"name":"MyReactApp","value":true}" await-children><style>
@keyframes gradientFlow {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
.animate-bg-flow {
background-size: 400% 400%;
animation: gradientFlow 15s ease infinite;
}
.no-scrollbar::-webkit-scrollbar { display: none; }
.no-scrollbar { -ms-overflow-style: none; scrollbar-width: none; }
</style><nav class="fixed top-6 right-6 z-50 flex gap-2 bg-white/20 backdrop-blur-sm [-webkit-backdrop-filter:blur(8px)] p-2 rounded-2xl shadow-2xl border border-white/30"><button class="px-4 py-1.5 text-sm font-bold text-gray-700 hover:bg-white/50 rounded-xl transition-all active:scale-95">首页</button><button class="px-4 py-1.5 text-sm font-bold text-gray-700 hover:bg-white/50 rounded-xl transition-all active:scale-95">亮点</button><button class="px-4 py-1.5 text-sm font-bold text-gray-700 hover:bg-white/50 rounded-xl transition-all active:scale-95">指南</button><button class="px-4 py-1.5 text-sm font-bold text-gray-700 hover:bg-white/50 rounded-xl transition-all active:scale-95">展示</button></nav><div class="w-screen h-screen overflow-y-scroll snap-y snap-mandatory scroll-smooth bg-linear-to-br from-[#d9efdc] via-[#e5fff9] to-[#f6ffea] animate-bg-flow no-scrollbar"><section class="w-screen min-h-screen flex flex-col justify-center items-start pl-5 py-20 snap-start"><h1 class="text-6xl font-extrabold mb-5"><span class="block md:inline bg-linear-to-br from-[#00bc90] to-[#6abc00] bg-clip-text text-transparent ml-0">AIAPI</span></h1><span class="text-[#555] text-lg md:text-2xl mt-2 max-w-2xl">一款简单易用的 OpenAI 格式 AI API 客户端。</span><div class="inline-flex flex-wrap gap-2 mt-8"><div class="text-white text-base bg-linear-to-r from-[#4caf50] to-[#81c784] px-3 py-1 rounded-lg font-medium shadow-md">极度轻量</div><div class="text-white text-base bg-linear-to-r from-[#4caf50] to-[#81c784] px-3 py-1 rounded-lg font-medium shadow-md">Jetpack Compose</div><div class="text-white text-base bg-linear-to-r from-[#4caf50] to-[#81c784] px-3 py-1 rounded-lg font-medium shadow-md">Android</div><div class="text-white text-base bg-linear-to-r from-[#4caf50] to-[#81c784] px-3 py-1 rounded-lg font-medium shadow-md">OpenAI Format</div></div></section><section class="w-screen min-h-screen flex flex-col justify-center items-start pl-5 py-20 snap-start"><h1 class="text-4xl md:text-6xl font-extrabold mb-8 px-2"><span class="text-black">项目亮点</span></h1><div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 w-full max-w-7xl pr-5"><div class="bg-white/50 rounded-3xl px-4 py-4 w-[90%] max-w-105 shadow-xl text-center transition-transform duration-300 hover:-translate-y-1.5 min-h-70 max-h-105 overflow-y-auto flex flex-col"><h1 class="text-3xl font-extrabold bg-linear-to-br from-[#00bc90] to-[#6abc00] bg-clip-text text-transparent py-4">多配置 & 自由切换</h1><div class="text-base text-gray-600 leading-relaxed text-justify bg-[#f6f6f6]/90 p-4 rounded-xl mb-auto"><p>支持添加多个 API 配置。在每轮对话时,你可以自由选择不同的模型提供商和模型名称。</p></div></div><div class="bg-white/50 rounded-3xl px-4 py-4 w-[90%] max-w-105 shadow-xl text-center transition-transform duration-300 hover:-translate-y-1.5 min-h-70 max-h-105 overflow-y-auto flex flex-col"><h1 class="text-3xl font-extrabold bg-linear-to-br from-[#00bc90] to-[#6abc00] bg-clip-text text-transparent py-4">多模态 & 详情展示</h1><div class="text-base text-gray-600 leading-relaxed text-justify bg-[#f6f6f6]/90 p-4 rounded-xl mb-auto"><p>支持上传图片轻松利用视觉模型。如果提供商支持,还能实时显示响应速率与 Token 消耗量。而且极其轻量,启动极快!</p></div></div><div class="bg-white/50 rounded-3xl px-4 py-4 w-[90%] max-w-105 shadow-xl text-center transition-transform duration-300 hover:-translate-y-1.5 min-h-70 max-h-105 overflow-y-auto flex flex-col"><h1 class="text-3xl font-extrabold bg-linear-to-br from-[#00bc90] to-[#6abc00] bg-clip-text text-transparent py-4">Compose UI</h1><div class="text-base text-gray-600 leading-relaxed text-justify bg-[#f6f6f6]/90 p-4 rounded-xl mb-auto"><p>界面完全使用最新的 Jetpack Compose 编写,整体设计极度简洁,动画交互如丝般流畅。</p></div></div></div></section><section class="w-screen min-h-screen flex flex-col justify-center items-start pl-5 py-20 snap-start"><h1 class="text-4xl md:text-6xl font-extrabold mb-8 px-2"><span class="text-black">如何使用</span></h1><div class="bg-white/50 backdrop-blur-md rounded-3xl p-6 md:p-8 w-[95%] md:w-[80%] max-w-5xl shadow-xl text-left flex flex-col gap-4 max-h-[65vh] overflow-y-auto no-scrollbar"><div class="bg-[#f6f6f6]/90 p-5 rounded-2xl"><h2 class="text-xl font-bold text-[#00bc90] mb-2">1° 下载安装</h2><p class="text-gray-600 leading-relaxed text-sm md:text-base">前往 Releases 下载符合你设备的 APK:<br/>• 一般设备 (Android 8.0+) 下载 <code class="bg-gray-200 px-1 rounded text-[#4caf50]">Minsdk26</code><br/>• Android 10+ 下载 <code class="bg-gray-200 px-1 rounded text-[#4caf50]">Minsdk29</code><br/>• Android 15+ 下载 <code class="bg-gray-200 px-1 rounded text-[#4caf50]">Minsdk35</code><br/>• 如果不清楚,请直接下载 <code class="bg-gray-200 px-1 rounded text-[#4caf50]">universal</code> 通用版。</p></div><div class="bg-[#f6f6f6]/90 p-5 rounded-2xl"><h2 class="text-xl font-bold text-[#00bc90] mb-2">2° 配置 API</h2><p class="text-gray-600 leading-relaxed text-sm md:text-base">按照提示配置,取一个容易看懂的名字,填入模型提供商的 <b>URL</b>、<b>Key</b> 以及 <b>模型名称</b>。<br/><i>Tip: 点击模型名称后面的箭头,应用可根据已填内容为你检索可用模型列表。</i></p></div><div class="bg-[#f6f6f6]/90 p-5 rounded-2xl"><h2 class="text-xl font-bold text-[#00bc90] mb-2">3° 玩转对话</h2><p class="text-gray-600 leading-relaxed text-sm md:text-base">• 点击抽屉中的 <b>+</b> 开启新对话,长按可重命名或删除聊天。<br/>• 输入框下方的 <b>+</b> 按钮可添加图片,右上角 <b>···</b> 可进入设置。<br/>• AI 响应时,点击右下角的 <b>方块按钮</b> 可立刻停止生成。</p></div></div></section><section class="w-screen min-h-screen flex flex-col justify-center items-start pl-5 py-20 snap-start"><h1 class="text-4xl md:text-6xl font-extrabold mb-8 px-2"><span class="text-black">界面与源码</span></h1><div class="flex flex-row flex-wrap gap-6 items-center justify-start w-[90%] mb-8"><img src="https://github.com/user-attachments/assets/2aa07187-e6eb-4749-b87c-8b3644b3aa5c" alt="手机版界面" class="h-80 md:h-96 w-auto rounded-3xl shadow-xl border-4 border-white/50 object-cover hover:scale-105 transition-transform duration-300"/><img src="https://github.com/user-attachments/assets/5a04a368-17df-4392-a634-667dde1e9edd" alt="平板版界面" class="h-56 md:h-64 w-auto rounded-3xl shadow-xl border-4 border-white/50 object-cover hover:scale-105 transition-transform duration-300"/></div><div class="inline-flex flex-row gap-4 px-2"><button class="text-white text-base bg-linear-to-r from-[#000000] to-[#333333] px-4 py-2.5 rounded-xl inline-flex items-center shadow-lg transition-all duration-300 hover:scale-105 hover:shadow-gray-500/50 active:scale-95 font-bold"><svg focusable="false" width="24" height="24" fill="currentColor" class="mr-2"><path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path></svg>GitHub 源码</button><button class="text-white text-base bg-linear-to-r from-[#4caf50] to-[#81c784] px-4 py-2.5 rounded-xl inline-flex items-center shadow-lg transition-all duration-300 hover:scale-105 hover:shadow-green-500/50 active:scale-95 font-bold">前往下载体验</button></div></section></div><!--astro:end--></astro-island> </body></html>