summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop
diff options
context:
space:
mode:
Diffstat (limited to 'packages/desktop')
-rw-r--r--packages/desktop/src/components/file-tree.tsx3
-rw-r--r--packages/desktop/src/components/prompt-input.tsx2
-rw-r--r--packages/desktop/src/context/sync.tsx32
-rw-r--r--packages/desktop/src/pages/directory-layout.tsx2
-rw-r--r--packages/desktop/src/pages/home.tsx3
-rw-r--r--packages/desktop/src/pages/layout.tsx3
-rw-r--r--packages/desktop/src/pages/session.tsx2
-rw-r--r--packages/desktop/src/ui/collapsible.tsx62
-rw-r--r--packages/desktop/src/ui/index.ts6
-rw-r--r--packages/desktop/src/utils/index.ts1
-rw-r--r--packages/desktop/src/utils/path.ts20
11 files changed, 13 insertions, 123 deletions
diff --git a/packages/desktop/src/components/file-tree.tsx b/packages/desktop/src/components/file-tree.tsx
index f3729a8d3..0841c71d1 100644
--- a/packages/desktop/src/components/file-tree.tsx
+++ b/packages/desktop/src/components/file-tree.tsx
@@ -1,5 +1,5 @@
import { useLocal, type LocalFile } from "@/context/local"
-import { Collapsible } from "@/ui"
+import { Collapsible } from "@opencode-ai/ui/collapsible"
import { FileIcon } from "@opencode-ai/ui/file-icon"
import { Tooltip } from "@opencode-ai/ui/tooltip"
import { For, Match, Switch, Show, type ComponentProps, type ParentProps } from "solid-js"
@@ -76,6 +76,7 @@ export default function FileTree(props: {
<Switch>
<Match when={node.type === "directory"}>
<Collapsible
+ variant="ghost"
class="w-full"
forceMount={false}
// open={local.file.node(node.path)?.expanded}
diff --git a/packages/desktop/src/components/prompt-input.tsx b/packages/desktop/src/components/prompt-input.tsx
index 94d8ff882..976924223 100644
--- a/packages/desktop/src/components/prompt-input.tsx
+++ b/packages/desktop/src/components/prompt-input.tsx
@@ -1,7 +1,6 @@
import { useFilteredList } from "@opencode-ai/ui/hooks"
import { createEffect, on, Component, Show, For, onMount, onCleanup, Switch, Match } from "solid-js"
import { createStore } from "solid-js/store"
-import { getDirectory, getFilename } from "@/utils"
import { createFocusSignal } from "@solid-primitives/active-element"
import { useLocal } from "@/context/local"
import { DateTime } from "luxon"
@@ -16,6 +15,7 @@ import { Icon } from "@opencode-ai/ui/icon"
import { Tooltip } from "@opencode-ai/ui/tooltip"
import { IconButton } from "@opencode-ai/ui/icon-button"
import { Select } from "@opencode-ai/ui/select"
+import { getDirectory, getFilename } from "@opencode-ai/util/path"
interface PromptInputProps {
class?: string
diff --git a/packages/desktop/src/context/sync.tsx b/packages/desktop/src/context/sync.tsx
index 38058c370..3eb921a31 100644
--- a/packages/desktop/src/context/sync.tsx
+++ b/packages/desktop/src/context/sync.tsx
@@ -1,4 +1,3 @@
-import type { Part } from "@opencode-ai/sdk"
import { produce } from "solid-js/store"
import { createMemo } from "solid-js"
import { Binary } from "@opencode-ai/util/binary"
@@ -34,29 +33,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
Promise.all(Object.values(load).map((p) => p())).then(() => setStore("ready", true))
- const sanitizer = createMemo(() => new RegExp(`${store.path.directory}/`, "g"))
- const sanitize = (text: string) => text.replace(sanitizer(), "")
const absolute = (path: string) => (store.path.directory + "/" + path).replace("//", "/")
- const sanitizePart = (part: Part) => {
- if (part.type === "tool") {
- if (part.state.status === "completed" || part.state.status === "error") {
- for (const key in part.state.metadata) {
- if (typeof part.state.metadata[key] === "string") {
- part.state.metadata[key] = sanitize(part.state.metadata[key] as string)
- }
- }
- for (const key in part.state.input) {
- if (typeof part.state.input[key] === "string") {
- part.state.input[key] = sanitize(part.state.input[key] as string)
- }
- }
- if ("error" in part.state) {
- part.state.error = sanitize(part.state.error as string)
- }
- }
- }
- return part
- }
return {
data: store,
@@ -88,10 +65,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
.slice()
.sort((a, b) => a.id.localeCompare(b.id))
for (const message of messages.data!) {
- draft.part[message.info.id] = message.parts
- .slice()
- .map(sanitizePart)
- .sort((a, b) => a.id.localeCompare(b.id))
+ draft.part[message.info.id] = message.parts.slice().sort((a, b) => a.id.localeCompare(b.id))
}
draft.session_diff[sessionID] = diff.data ?? []
}),
@@ -105,7 +79,9 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
},
load,
absolute,
- sanitize,
+ get directory() {
+ return store.path.directory
+ },
}
},
})
diff --git a/packages/desktop/src/pages/directory-layout.tsx b/packages/desktop/src/pages/directory-layout.tsx
index 2fe750fda..de16eff30 100644
--- a/packages/desktop/src/pages/directory-layout.tsx
+++ b/packages/desktop/src/pages/directory-layout.tsx
@@ -21,7 +21,7 @@ export default function Layout(props: ParentProps) {
{iife(() => {
const sync = useSync()
return (
- <DataProvider data={sync.data}>
+ <DataProvider data={sync.data} directory={directory()}>
<LocalProvider>{props.children}</LocalProvider>
</DataProvider>
)
diff --git a/packages/desktop/src/pages/home.tsx b/packages/desktop/src/pages/home.tsx
index e773fff57..58fcb20ce 100644
--- a/packages/desktop/src/pages/home.tsx
+++ b/packages/desktop/src/pages/home.tsx
@@ -1,8 +1,9 @@
import { useGlobalSync } from "@/context/global-sync"
-import { base64Encode, getFilename } from "@/utils"
+import { base64Encode } from "@/utils"
import { For } from "solid-js"
import { A } from "@solidjs/router"
import { Button } from "@opencode-ai/ui/button"
+import { getFilename } from "@opencode-ai/util/path"
export default function Home() {
const sync = useGlobalSync()
diff --git a/packages/desktop/src/pages/layout.tsx b/packages/desktop/src/pages/layout.tsx
index c9bb559d8..15180c885 100644
--- a/packages/desktop/src/pages/layout.tsx
+++ b/packages/desktop/src/pages/layout.tsx
@@ -3,7 +3,7 @@ import { DateTime } from "luxon"
import { A, useParams } from "@solidjs/router"
import { useLayout } from "@/context/layout"
import { useGlobalSync } from "@/context/global-sync"
-import { base64Encode, getFilename } from "@/utils"
+import { base64Encode } from "@/utils"
import { Mark } from "@opencode-ai/ui/logo"
import { Button } from "@opencode-ai/ui/button"
import { Icon } from "@opencode-ai/ui/icon"
@@ -11,6 +11,7 @@ import { IconButton } from "@opencode-ai/ui/icon-button"
import { Tooltip } from "@opencode-ai/ui/tooltip"
import { Collapsible } from "@opencode-ai/ui/collapsible"
import { DiffChanges } from "@opencode-ai/ui/diff-changes"
+import { getFilename } from "@opencode-ai/util/path"
export default function Layout(props: ParentProps) {
const params = useParams()
diff --git a/packages/desktop/src/pages/session.tsx b/packages/desktop/src/pages/session.tsx
index 0eb0f37ce..40acac663 100644
--- a/packages/desktop/src/pages/session.tsx
+++ b/packages/desktop/src/pages/session.tsx
@@ -1,7 +1,6 @@
import { For, onCleanup, onMount, Show, Match, Switch, createResource, createMemo } from "solid-js"
import { useLocal, type LocalFile } from "@/context/local"
import { createStore } from "solid-js/store"
-import { getDirectory, getFilename } from "@/utils"
import { PromptInput } from "@/components/prompt-input"
import { DateTime } from "luxon"
import { FileIcon } from "@opencode-ai/ui/file-icon"
@@ -30,6 +29,7 @@ import type { JSX } from "solid-js"
import { useSync } from "@/context/sync"
import { useSession } from "@/context/session"
import { useLayout } from "@/context/layout"
+import { getDirectory, getFilename } from "@opencode-ai/util/path"
export default function Page() {
const layout = useLayout()
diff --git a/packages/desktop/src/ui/collapsible.tsx b/packages/desktop/src/ui/collapsible.tsx
deleted file mode 100644
index 5fbb6c7a4..000000000
--- a/packages/desktop/src/ui/collapsible.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { Collapsible as KobalteCollapsible } from "@kobalte/core/collapsible"
-import { Icon, IconProps } from "@opencode-ai/ui/icon"
-import { splitProps } from "solid-js"
-import type { ComponentProps, ParentProps } from "solid-js"
-
-export interface CollapsibleProps extends ComponentProps<typeof KobalteCollapsible> {}
-export interface CollapsibleTriggerProps extends ComponentProps<typeof KobalteCollapsible.Trigger> {}
-export interface CollapsibleContentProps extends ComponentProps<typeof KobalteCollapsible.Content> {}
-
-function CollapsibleRoot(props: CollapsibleProps) {
- return <KobalteCollapsible forceMount {...props} />
-}
-
-function CollapsibleTrigger(props: CollapsibleTriggerProps) {
- const [local, others] = splitProps(props, ["class"])
- return (
- <KobalteCollapsible.Trigger
- classList={{
- "w-full group/collapsible": true,
- [local.class ?? ""]: !!local.class,
- }}
- {...others}
- />
- )
-}
-
-function CollapsibleContent(props: ParentProps<CollapsibleContentProps>) {
- const [local, others] = splitProps(props, ["class", "children"])
- return (
- <KobalteCollapsible.Content
- classList={{
- "h-0 overflow-hidden transition-all duration-100 ease-out": true,
- "data-expanded:h-fit": true,
- [local.class]: !!local.class,
- }}
- {...others}
- >
- {local.children}
- </KobalteCollapsible.Content>
- )
-}
-
-function CollapsibleArrow(props: Partial<IconProps>) {
- const [local, others] = splitProps(props, ["class", "name"])
- return (
- <Icon
- name={local.name ?? "chevron-right"}
- classList={{
- "flex-none text-text-muted transition-transform duration-100": true,
- "group-data-[expanded]/collapsible:rotate-90": true,
- [local.class ?? ""]: !!local.class,
- }}
- {...others}
- />
- )
-}
-
-export const Collapsible = Object.assign(CollapsibleRoot, {
- Trigger: CollapsibleTrigger,
- Content: CollapsibleContent,
- Arrow: CollapsibleArrow,
-})
diff --git a/packages/desktop/src/ui/index.ts b/packages/desktop/src/ui/index.ts
deleted file mode 100644
index 8cbf0834f..000000000
--- a/packages/desktop/src/ui/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export {
- Collapsible,
- type CollapsibleProps,
- type CollapsibleTriggerProps,
- type CollapsibleContentProps,
-} from "./collapsible"
diff --git a/packages/desktop/src/utils/index.ts b/packages/desktop/src/utils/index.ts
index 63a656cc4..e50efe837 100644
--- a/packages/desktop/src/utils/index.ts
+++ b/packages/desktop/src/utils/index.ts
@@ -1,3 +1,2 @@
-export * from "./path"
export * from "./dom"
export * from "./encode"
diff --git a/packages/desktop/src/utils/path.ts b/packages/desktop/src/utils/path.ts
deleted file mode 100644
index d23568ae6..000000000
--- a/packages/desktop/src/utils/path.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { useSync } from "@/context/sync"
-
-export function getFilename(path: string) {
- if (!path) return ""
- const trimmed = path.replace(/[\/]+$/, "")
- const parts = trimmed.split("/")
- return parts[parts.length - 1] ?? ""
-}
-
-export function getDirectory(path: string) {
- const sync = useSync()
- const parts = path.split("/")
- const dir = parts.slice(0, parts.length - 1).join("/")
- return dir ? sync.sanitize(dir + "/") : ""
-}
-
-export function getFileExtension(path: string) {
- const parts = path.split(".")
- return parts[parts.length - 1]
-}