11import { SyntaxStyle , RGBA , type TerminalColors } from "@opentui/core"
22import path from "path"
3- import { createEffect , createMemo , onMount } from "solid-js"
3+ import { createEffect , createMemo } from "solid-js"
44import { useSync } from "@tui/context/sync"
55import { createSimpleContext } from "./helper"
66import aura from "./theme/aura.json" with { type : "json" }
@@ -95,6 +95,7 @@ type ThemeColors = {
9595type Theme = ThemeColors & {
9696 _hasSelectedListItemText : boolean
9797 thinkingOpacity : number
98+ transparent : boolean
9899}
99100
100101export function selectedForeground ( theme : Theme ) : RGBA {
@@ -157,12 +158,12 @@ export const DEFAULT_THEMES: Record<string, ThemeJson> = {
157158 solarized,
158159 synthwave84,
159160 tokyonight,
160- vesper,
161161 vercel,
162+ vesper,
162163 zenburn,
163164}
164165
165- function resolveTheme ( theme : ThemeJson , mode : "dark" | "light" ) {
166+ function resolveTheme ( theme : ThemeJson , mode : "dark" | "light" , transparent : boolean ) {
166167 const defs = theme . defs ?? { }
167168 function resolveColor ( c : ColorValue ) : RGBA {
168169 if ( c instanceof RGBA ) return c
@@ -213,10 +214,17 @@ function resolveTheme(theme: ThemeJson, mode: "dark" | "light") {
213214 // Handle thinkingOpacity - optional with default of 0.6
214215 const thinkingOpacity = theme . theme . thinkingOpacity ?? 0.6
215216
217+ if ( transparent ) {
218+ resolved . background = RGBA . fromInts ( 0 , 0 , 0 , 0 )
219+ // NOTE: Could alternatively apply an alpha channel to the theme's base background color
220+ // instead of forcing full transparency, allowing for adjustable opacity levels
221+ }
222+
216223 return {
217224 ...resolved ,
218225 _hasSelectedListItemText : hasSelectedListItemText ,
219226 thinkingOpacity,
227+ transparent,
220228 } as Theme
221229}
222230
@@ -274,6 +282,7 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
274282 themes : DEFAULT_THEMES ,
275283 mode : kv . get ( "theme_mode" , props . mode ) ,
276284 active : ( sync . data . config . theme ?? kv . get ( "theme" , "opencode" ) ) as string ,
285+ transparent : kv . get ( "theme_transparent" , false ) ,
277286 ready : false ,
278287 } )
279288
@@ -298,7 +307,7 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
298307 } )
299308
300309 const values = createMemo ( ( ) => {
301- return resolveTheme ( store . themes [ store . active ] ?? store . themes . opencode , store . mode )
310+ return resolveTheme ( store . themes [ store . active ] ?? store . themes . opencode , store . mode , store . transparent )
302311 } )
303312
304313 const syntax = createMemo ( ( ) => generateSyntax ( values ( ) ) )
@@ -330,6 +339,13 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
330339 setStore ( "active" , theme )
331340 kv . set ( "theme" , theme )
332341 } ,
342+ transparent ( ) {
343+ return store . transparent
344+ } ,
345+ setTransparent ( transparent : boolean ) {
346+ setStore ( "transparent" , transparent )
347+ kv . set ( "theme_transparent" , transparent )
348+ } ,
333349 get ready ( ) {
334350 return store . ready
335351 } ,
0 commit comments