diff options
Diffstat (limited to 'cloud/app/src')
| -rw-r--r-- | cloud/app/src/app.tsx | 16 | ||||
| -rw-r--r-- | cloud/app/src/component/icon.tsx | 58 | ||||
| -rw-r--r-- | cloud/app/src/entry-client.tsx | 4 | ||||
| -rw-r--r-- | cloud/app/src/entry-server.tsx | 48 | ||||
| -rw-r--r-- | cloud/app/src/routes/index.tsx | 7 | ||||
| -rw-r--r-- | cloud/app/src/routes/workspace.tsx | 12 | ||||
| -rw-r--r-- | cloud/app/src/routes/workspace/[id].tsx | 89 | ||||
| -rw-r--r-- | cloud/app/src/style/token/font.css | 3 |
8 files changed, 140 insertions, 97 deletions
diff --git a/cloud/app/src/app.tsx b/cloud/app/src/app.tsx index 17385c4a5..bc3961214 100644 --- a/cloud/app/src/app.tsx +++ b/cloud/app/src/app.tsx @@ -1,15 +1,15 @@ -import { MetaProvider, Title, Meta } from "@solidjs/meta"; -import { Router } from "@solidjs/router"; -import { FileRoutes } from "@solidjs/start/router"; -import { ErrorBoundary, Suspense } from "solid-js"; -import "@ibm/plex/css/ibm-plex.css"; -import "./app.css"; +import { MetaProvider, Title, Meta } from "@solidjs/meta" +import { Router } from "@solidjs/router" +import { FileRoutes } from "@solidjs/start/router" +import { ErrorBoundary, Suspense } from "solid-js" +import "@ibm/plex/css/ibm-plex.css" +import "./app.css" export default function App() { return ( <Router explicitLinks={true} - root={props => ( + root={(props) => ( <MetaProvider> <Title>opencode</Title> <Meta name="description" content="opencode - The AI coding agent built for the terminal." /> @@ -19,5 +19,5 @@ export default function App() { > <FileRoutes /> </Router> - ); + ) } diff --git a/cloud/app/src/component/icon.tsx b/cloud/app/src/component/icon.tsx index d73c178bc..c91c4937d 100644 --- a/cloud/app/src/component/icon.tsx +++ b/cloud/app/src/component/icon.tsx @@ -6,34 +6,66 @@ export function IconLogo(props: JSX.SvgSVGAttributes<SVGSVGElement>) { <path d="M264.5 0H288.5V8.5H272.5V16.5H288.5V25H272.5V33H288.5V41.5H264.5V0Z" fill="currentColor" /> <path d="M248.5 0H224.5V41.5H248.5V33H232.5V8.5H248.5V0Z" fill="currentColor" /> <path d="M256.5 8.5H248.5V33H256.5V8.5Z" fill="currentColor" /> - <path fill-rule="evenodd" clip-rule="evenodd" d="M184.5 0H216.5V41.5H184.5V0ZM208.5 8.5H192.5V33H208.5V8.5Z" fill="currentColor" /> + <path + fill-rule="evenodd" + clip-rule="evenodd" + d="M184.5 0H216.5V41.5H184.5V0ZM208.5 8.5H192.5V33H208.5V8.5Z" + fill="currentColor" + /> <path d="M144.5 8.5H136.5V41.5H144.5V8.5Z" fill="currentColor" /> <path d="M136.5 0H112.5V41.5H120.5V8.5H136.5V0Z" fill="currentColor" /> <path d="M80.5 0H104.5V8.5H88.5V16.5H104.5V25H88.5V33H104.5V41.5H80.5V0Z" fill="currentColor" /> - <path fill-rule="evenodd" clip-rule="evenodd" d="M40.5 0H72.5V41.5H48.5V49.5H40.5V0ZM64.5 8.5H48.5V33H64.5V8.5Z" fill="currentColor" /> - <path fill-rule="evenodd" clip-rule="evenodd" d="M0.5 0H32.5V41.5955H0.5V0ZM24.5 8.5H8.5V33H24.5V8.5Z" fill="currentColor" /> + <path + fill-rule="evenodd" + clip-rule="evenodd" + d="M40.5 0H72.5V41.5H48.5V49.5H40.5V0ZM64.5 8.5H48.5V33H64.5V8.5Z" + fill="currentColor" + /> + <path + fill-rule="evenodd" + clip-rule="evenodd" + d="M0.5 0H32.5V41.5955H0.5V0ZM24.5 8.5H8.5V33H24.5V8.5Z" + fill="currentColor" + /> <path d="M152.5 0H176.5V8.5H160.5V33H176.5V41.5H152.5V0Z" fill="currentColor" /> </svg> - ); + ) } export function IconCopy(props: JSX.SvgSVGAttributes<SVGSVGElement>) { return ( - <svg - {...props} - viewBox="0 0 512 512" > - <rect width="336" height="336" x="128" y="128" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32" rx="57" ry="57"></rect> - <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32" d="m383.5 128l.5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24"></path> + <svg {...props} viewBox="0 0 512 512"> + <rect + width="336" + height="336" + x="128" + y="128" + fill="none" + stroke="currentColor" + stroke-linejoin="round" + stroke-width="32" + rx="57" + ry="57" + ></rect> + <path + fill="none" + stroke="currentColor" + stroke-linecap="round" + stroke-linejoin="round" + stroke-width="32" + d="m383.5 128l.5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24" + ></path> </svg> ) } export function IconCheck(props: JSX.SvgSVGAttributes<SVGSVGElement>) { return ( - <svg - {...props} - viewBox="0 0 24 24" > - <path fill="currentColor" d="M9 16.17L5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41z"></path> + <svg {...props} viewBox="0 0 24 24"> + <path + fill="currentColor" + d="M9 16.17L5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41z" + ></path> </svg> ) } diff --git a/cloud/app/src/entry-client.tsx b/cloud/app/src/entry-client.tsx index 0ca4e3c30..642deacf7 100644 --- a/cloud/app/src/entry-client.tsx +++ b/cloud/app/src/entry-client.tsx @@ -1,4 +1,4 @@ // @refresh reload -import { mount, StartClient } from "@solidjs/start/client"; +import { mount, StartClient } from "@solidjs/start/client" -mount(() => <StartClient />, document.getElementById("app")!); +mount(() => <StartClient />, document.getElementById("app")!) diff --git a/cloud/app/src/entry-server.tsx b/cloud/app/src/entry-server.tsx index d2e6044aa..d5fca6aa5 100644 --- a/cloud/app/src/entry-server.tsx +++ b/cloud/app/src/entry-server.tsx @@ -1,26 +1,28 @@ // @refresh reload import { createHandler, StartServer } from "@solidjs/start/server" - -export default createHandler(() => ( - <StartServer - document={({ assets, children, scripts }) => ( - <html lang="en"> - <head> - <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <link rel="icon" href="/favicon.svg" /> - <meta property="og:image" content="/social-share.png" /> - <meta property="twitter:image" content="/social-share.png" /> - {assets} - </head> - <body> - <div id="app">{children}</div> - {scripts} - </body> - </html> - )} - /> -), { - mode: "async", -}) +export default createHandler( + () => ( + <StartServer + document={({ assets, children, scripts }) => ( + <html lang="en"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <link rel="icon" href="/favicon.svg" /> + <meta property="og:image" content="/social-share.png" /> + <meta property="twitter:image" content="/social-share.png" /> + {assets} + </head> + <body> + <div id="app">{children}</div> + {scripts} + </body> + </html> + )} + /> + ), + { + mode: "async", + }, +) diff --git a/cloud/app/src/routes/index.tsx b/cloud/app/src/routes/index.tsx index 23e870a55..fe355d79e 100644 --- a/cloud/app/src/routes/index.tsx +++ b/cloud/app/src/routes/index.tsx @@ -64,9 +64,7 @@ export default function Home() { <section data-component="cta"> <div data-slot="left"> - <a href="/docs"> - Get Started - </a> + <a href="/docs">Get Started</a> </div> <div data-slot="right"> <button data-copy data-slot="command"> @@ -90,7 +88,8 @@ export default function Home() { <strong>LSP enabled</strong> Automatically loads the right LSPs for the LLM </li> <li> - <strong>opencode zen</strong> A <a href="/docs/zen">curated list of models</a> provided by opencode <label>New</label> + <strong>opencode zen</strong> A <a href="/docs/zen">curated list of models</a> provided by opencode{" "} + <label>New</label> </li> <li> <strong>Multi-session</strong> Start multiple agents in parallel on the same project diff --git a/cloud/app/src/routes/workspace.tsx b/cloud/app/src/routes/workspace.tsx index 746a3adcd..3f08a70a0 100644 --- a/cloud/app/src/routes/workspace.tsx +++ b/cloud/app/src/routes/workspace.tsx @@ -2,7 +2,17 @@ import "./workspace.css" import { useAuthSession } from "~/context/auth.session" import { IconLogo } from "../component/icon" import { withActor } from "~/context/auth.withActor" -import { query, action, redirect, createAsync, RouteSectionProps, Navigate, useNavigate, useParams, A } from "@solidjs/router" +import { + query, + action, + redirect, + createAsync, + RouteSectionProps, + Navigate, + useNavigate, + useParams, + A, +} from "@solidjs/router" import { User } from "@opencode/cloud-core/user.js" import { Actor } from "@opencode/cloud-core/actor.js" import { getRequestEvent } from "solid-js/web" diff --git a/cloud/app/src/routes/workspace/[id].tsx b/cloud/app/src/routes/workspace/[id].tsx index 61e9c1db6..959799c63 100644 --- a/cloud/app/src/routes/workspace/[id].tsx +++ b/cloud/app/src/routes/workspace/[id].tsx @@ -1,15 +1,7 @@ import "./[id].css" import { Billing } from "@opencode/cloud-core/billing.js" import { Key } from "@opencode/cloud-core/key.js" -import { - json, - query, - action, - useParams, - useAction, - createAsync, - useSubmission, -} from "@solidjs/router" +import { json, query, action, useParams, useAction, createAsync, useSubmission } from "@solidjs/router" import { createMemo, createSignal, For, Show } from "solid-js" import { withActor } from "~/context/auth.withActor" import { IconCopy, IconCheck } from "~/component/icon" @@ -432,50 +424,57 @@ function PaymentsSection() { const payments = createAsync(() => getPaymentsInfo(params.id)) // const payments = () => dummyPayments - return payments() && payments()!.length > 0 && ( - <section data-component="payments-section"> - <div data-slot="section-title"> - <h2>Payments History</h2> - <p>Recent payment transactions.</p> - </div> - <div data-slot="payments-table"> - <table data-slot="payments-table-element"> - <thead> - <tr> - <th>Date</th> - <th>Payment ID</th> - <th>Amount</th> - </tr> - </thead> - <tbody> - <For each={payments()!}> - {(payment) => { - const date = new Date(payment.timeCreated) - return ( - <tr> - <td data-slot="payment-date" title={formatDateUTC(date)}> - {formatDateForTable(date)} - </td> - <td data-slot="payment-id">{payment.id}</td> - <td data-slot="payment-amount">${((payment.amount ?? 0) / 100000000).toFixed(2)}</td> - </tr> - ) - }} - </For> - </tbody> - </table> - </div> - </section> + return ( + payments() && + payments()!.length > 0 && ( + <section data-component="payments-section"> + <div data-slot="section-title"> + <h2>Payments History</h2> + <p>Recent payment transactions.</p> + </div> + <div data-slot="payments-table"> + <table data-slot="payments-table-element"> + <thead> + <tr> + <th>Date</th> + <th>Payment ID</th> + <th>Amount</th> + </tr> + </thead> + <tbody> + <For each={payments()!}> + {(payment) => { + const date = new Date(payment.timeCreated) + return ( + <tr> + <td data-slot="payment-date" title={formatDateUTC(date)}> + {formatDateForTable(date)} + </td> + <td data-slot="payment-id">{payment.id}</td> + <td data-slot="payment-amount">${((payment.amount ?? 0) / 100000000).toFixed(2)}</td> + </tr> + ) + }} + </For> + </tbody> + </table> + </div> + </section> + ) ) } -export default function() { +export default function () { return ( <div data-page="workspace-[id]"> <section data-component="title-section"> <h1>Zen</h1> <p> - Curated list of models provided by opencode. <a target="_blank" href="/docs/zen">Learn more</a>. + Curated list of models provided by opencode.{" "} + <a target="_blank" href="/docs/zen"> + Learn more + </a> + . </p> </section> diff --git a/cloud/app/src/style/token/font.css b/cloud/app/src/style/token/font.css index 4d20e324c..67143e662 100644 --- a/cloud/app/src/style/token/font.css +++ b/cloud/app/src/style/token/font.css @@ -14,6 +14,7 @@ body { --font-size-8xl: 6rem; --font-size-9xl: 8rem; - --font-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --font-mono: + "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; --font-sans: var(--font-mono); } |
