1- import { SyntaxStyle , RGBA , type TerminalColors } from "@opentui/core"
1+ import { CliRenderEvents , SyntaxStyle , RGBA , type TerminalColors } from "@opentui/core"
22import path from "path"
3- import { createEffect , createMemo , onMount } from "solid-js"
3+ import { createEffect , createMemo , onCleanup , onMount } from "solid-js"
44import { createSimpleContext } from "./helper"
55import { Glob } from "../../../../util/glob"
66import aura from "./theme/aura.json" with { type : "json" }
@@ -280,6 +280,7 @@ function ansiToRgba(code: number): RGBA {
280280export const { use : useTheme , provider : ThemeProvider } = createSimpleContext ( {
281281 name : "Theme" ,
282282 init : ( props : { mode : "dark" | "light" } ) => {
283+ const renderer = useRenderer ( )
283284 const config = useTuiConfig ( )
284285 const kv = useKV ( )
285286 const [ store , setStore ] = createStore ( {
@@ -295,7 +296,7 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
295296 } )
296297
297298 function init ( ) {
298- resolveSystemTheme ( )
299+ resolveSystemTheme ( store . mode )
299300 getCustomThemes ( )
300301 . then ( ( custom ) => {
301302 setStore (
@@ -316,14 +317,12 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
316317
317318 onMount ( init )
318319
319- function resolveSystemTheme ( ) {
320- console . log ( "resolveSystemTheme" )
320+ function resolveSystemTheme ( mode : "dark" | "light" = store . mode ) {
321321 renderer
322322 . getPalette ( {
323323 size : 16 ,
324324 } )
325325 . then ( ( colors ) => {
326- console . log ( colors . palette )
327326 if ( ! colors . palette [ 0 ] ) {
328327 if ( store . active === "system" ) {
329328 setStore (
@@ -337,7 +336,7 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
337336 }
338337 setStore (
339338 produce ( ( draft ) => {
340- draft . themes . system = generateSystem ( colors , store . mode )
339+ draft . themes . system = generateSystem ( colors , mode )
341340 if ( store . active === "system" ) {
342341 draft . ready = true
343342 }
@@ -346,16 +345,30 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
346345 } )
347346 }
348347
349- const renderer = useRenderer ( )
350- process . on ( "SIGUSR2" , async ( ) => {
348+ function update ( mode : "dark" | "light" ) {
349+ if ( store . mode === mode ) return
350+ setStore ( "mode" , mode )
351+ kv . set ( "theme_mode" , mode )
351352 renderer . clearPaletteCache ( )
352- init ( )
353+ resolveSystemTheme ( mode )
354+ }
355+
356+ const handle = ( mode : "dark" | "light" ) => {
357+ update ( mode )
358+ }
359+ renderer . on ( CliRenderEvents . THEME_MODE , handle )
360+ onCleanup ( ( ) => {
361+ renderer . off ( CliRenderEvents . THEME_MODE , handle )
353362 } )
354363
355364 const values = createMemo ( ( ) => {
356365 return resolveTheme ( store . themes [ store . active ] ?? store . themes . opencode , store . mode )
357366 } )
358367
368+ createEffect ( ( ) => {
369+ renderer . setBackgroundColor ( values ( ) . background )
370+ } )
371+
359372 const syntax = createMemo ( ( ) => generateSyntax ( values ( ) ) )
360373 const subtleSyntax = createMemo ( ( ) => generateSubtleSyntax ( values ( ) ) )
361374
@@ -378,8 +391,7 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
378391 return store . mode
379392 } ,
380393 setMode ( mode : "dark" | "light" ) {
381- setStore ( "mode" , mode )
382- kv . set ( "theme_mode" , mode )
394+ update ( mode )
383395 } ,
384396 set ( theme : string ) {
385397 setStore ( "active" , theme )
0 commit comments