summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/context
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-10-16 14:53:44 -0500
committerAdam <[email protected]>2025-10-16 14:53:44 -0500
commit47d9e017657c4d265dea53bd86d727097a7ba282 (patch)
treee278fb3983f13f6fa474228cf5031c3b4680f566 /packages/desktop/src/context
parentfc18fc8a08e703a54553e714344e638673b2d313 (diff)
downloadopencode-47d9e017657c4d265dea53bd86d727097a7ba282.tar.gz
opencode-47d9e017657c4d265dea53bd86d727097a7ba282.zip
wip: css/ui and desktop work
Diffstat (limited to 'packages/desktop/src/context')
-rw-r--r--packages/desktop/src/context/index.ts1
-rw-r--r--packages/desktop/src/context/local.tsx50
-rw-r--r--packages/desktop/src/context/theme.tsx92
3 files changed, 25 insertions, 118 deletions
diff --git a/packages/desktop/src/context/index.ts b/packages/desktop/src/context/index.ts
index bc4bf3b1d..6ca3bbf97 100644
--- a/packages/desktop/src/context/index.ts
+++ b/packages/desktop/src/context/index.ts
@@ -4,4 +4,3 @@ export { MarkedProvider, useMarked } from "./marked"
export { SDKProvider, useSDK } from "./sdk"
export { ShikiProvider, useShiki } from "./shiki"
export { SyncProvider, useSync } from "./sync"
-export { ThemeProvider, useTheme } from "./theme"
diff --git a/packages/desktop/src/context/local.tsx b/packages/desktop/src/context/local.tsx
index e9fe8ee5c..c60e4520e 100644
--- a/packages/desktop/src/context/local.tsx
+++ b/packages/desktop/src/context/local.tsx
@@ -131,31 +131,31 @@ function init() {
const changeset = createMemo(() => new Set(sync.data.changes.map((f) => f.path)))
const changes = createMemo(() => Array.from(changeset()).sort((a, b) => a.localeCompare(b)))
- createEffect((prev: FileStatus[]) => {
- const removed = prev.filter((p) => !sync.data.changes.find((c) => c.path === p.path))
- for (const p of removed) {
- setStore(
- "node",
- p.path,
- produce((draft) => {
- draft.status = undefined
- draft.view = "raw"
- }),
- )
- load(p.path)
- }
- for (const p of sync.data.changes) {
- if (store.node[p.path] === undefined) {
- fetch(p.path).then(() => {
- if (store.node[p.path] === undefined) return
- setStore("node", p.path, "status", p)
- })
- } else {
- setStore("node", p.path, "status", p)
- }
- }
- return sync.data.changes
- }, sync.data.changes)
+ // createEffect((prev: FileStatus[]) => {
+ // const removed = prev.filter((p) => !sync.data.changes.find((c) => c.path === p.path))
+ // for (const p of removed) {
+ // setStore(
+ // "node",
+ // p.path,
+ // produce((draft) => {
+ // draft.status = undefined
+ // draft.view = "raw"
+ // }),
+ // )
+ // load(p.path)
+ // }
+ // for (const p of sync.data.changes) {
+ // if (store.node[p.path] === undefined) {
+ // fetch(p.path).then(() => {
+ // if (store.node[p.path] === undefined) return
+ // setStore("node", p.path, "status", p)
+ // })
+ // } else {
+ // setStore("node", p.path, "status", p)
+ // }
+ // }
+ // return sync.data.changes
+ // }, sync.data.changes)
const changed = (path: string) => {
const node = store.node[path]
diff --git a/packages/desktop/src/context/theme.tsx b/packages/desktop/src/context/theme.tsx
deleted file mode 100644
index 0b344ea97..000000000
--- a/packages/desktop/src/context/theme.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-import {
- createContext,
- useContext,
- createSignal,
- createEffect,
- onMount,
- type ParentComponent,
- onCleanup,
-} from "solid-js"
-
-export interface ThemeContextValue {
- theme: string | undefined
- isDark: boolean
- setTheme: (themeName: string) => void
- setDarkMode: (isDark: boolean) => void
-}
-
-const ThemeContext = createContext<ThemeContextValue>()
-
-export const useTheme = () => {
- const context = useContext(ThemeContext)
- if (!context) {
- throw new Error("useTheme must be used within a ThemeProvider")
- }
- return context
-}
-
-interface ThemeProviderProps {
- defaultTheme?: string
- defaultDarkMode?: boolean
-}
-
-const themes = ["opencode", "tokyonight", "ayu", "nord", "catppuccin"]
-
-export const ThemeProvider: ParentComponent<ThemeProviderProps> = (props) => {
- const [theme, setThemeSignal] = createSignal<string | undefined>()
- const [isDark, setIsDark] = createSignal(props.defaultDarkMode ?? false)
-
- const handleKeyDown = (event: KeyboardEvent) => {
- if (event.key === "t" && event.ctrlKey) {
- event.preventDefault()
- const current = theme()
- if (!current) return
- const index = themes.indexOf(current)
- const next = themes[(index + 1) % themes.length]
- setTheme(next)
- }
- }
-
- onMount(() => {
- window.addEventListener("keydown", handleKeyDown)
- })
-
- onCleanup(() => {
- window.removeEventListener("keydown", handleKeyDown)
- })
-
- onMount(() => {
- const savedTheme = localStorage.getItem("theme") ?? "opencode"
- const savedDarkMode = localStorage.getItem("darkMode") ?? "true"
- setIsDark(savedDarkMode === "true")
- setTheme(savedTheme)
- })
-
- createEffect(() => {
- const currentTheme = theme()
- const darkMode = isDark()
- if (currentTheme) {
- document.documentElement.setAttribute("data-theme", currentTheme)
- document.documentElement.setAttribute("data-dark", darkMode.toString())
- }
- })
-
- const setTheme = async (theme: string) => {
- setThemeSignal(theme)
- localStorage.setItem("theme", theme)
- }
-
- const setDarkMode = (dark: boolean) => {
- setIsDark(dark)
- localStorage.setItem("darkMode", dark.toString())
- }
-
- const contextValue: ThemeContextValue = {
- theme: theme(),
- isDark: isDark(),
- setTheme,
- setDarkMode,
- }
-
- return <ThemeContext.Provider value={contextValue}>{props.children}</ThemeContext.Provider>
-}