| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- /** Host registration for the browser theme preference and pre-plugin palette. */
- import type { Context } from '@deepseek-ai/cordis'
- import type {} from '@deepseek-ai/dsh-host-webserver'
- import { settingsNamespace } from '@deepseek-ai/dsh-settings'
- import { bootThemeInjection } from './boot-theme.ts'
- import {
- DEFAULT_PREFERENCE, THEME_SETTINGS_NAMESPACE, ThemeSettingsSchema,
- type ThemePreference, type ThemeSettings,
- } from './theme-settings.ts'
- export {
- DEFAULT_PREFERENCE, THEME_PREFERENCE_FIELD, THEME_PREFERENCES, THEME_SETTINGS_NAMESPACE,
- type ThemePreference, type ThemeSettings,
- } from './theme-settings.ts'
- const THEME_NAMESPACE = settingsNamespace(THEME_SETTINGS_NAMESPACE)
- /** Read the registered preference or use the schema default without a settings provider. */
- function readPreference(ctx: Context): ThemePreference {
- const settings = ctx.get('settings')
- if (settings === undefined) return DEFAULT_PREFERENCE
- const section = settings.get(THEME_NAMESPACE) as ThemeSettings | undefined
- if (section === undefined) return DEFAULT_PREFERENCE
- return section.preference
- }
- /**
- * Register the durable theme section when the optional settings service is
- * composed, and answer every index injection collection with the current
- * theme bootstrap row.
- * @param ctx - Host context that may acquire the settings service.
- */
- export function apply(ctx: Context): void {
- ctx.inject(['settings'], (settingsCtx) => {
- settingsCtx.settings.register(THEME_NAMESPACE, ThemeSettingsSchema)
- })
- ctx.on('webserver/index-inject', (table) => {
- table.push(bootThemeInjection(readPreference(ctx)))
- })
- }
|