dsh-theme-gallery 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +657 -0
- package/cordis.patch.yml +48 -0
- package/lib/client.d.ts +29 -0
- package/lib/client.js +4229 -0
- package/lib/index.d.ts +14 -0
- package/lib/index.js +178 -0
- package/lib/themes/meng-hai-you-yu.json +292 -0
- package/lib/themes/shan-qing-ting-cai.json +290 -0
- package/package.json +118 -0
- package/schema/theme.schema.json +159 -0
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type surface of the theme pack's host half.
|
|
3
|
+
*/
|
|
4
|
+
import type { Context } from '@deepseek-ai/cordis'
|
|
5
|
+
|
|
6
|
+
/** Display name used in loader diagnostics. */
|
|
7
|
+
export declare const name: string
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Host plugin body: intentionally empty — the pack contributes browser-side
|
|
11
|
+
* themes only.
|
|
12
|
+
* @param ctx - host context.
|
|
13
|
+
*/
|
|
14
|
+
export declare function apply(ctx: Context): void
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host half of the theme pack.
|
|
3
|
+
*
|
|
4
|
+
* This half registers the `theme-gallery` settings namespace — **a reserved
|
|
5
|
+
* extension point that nothing reads today.** It is kept, and kept honest:
|
|
6
|
+
*
|
|
7
|
+
* - The desktop profile composes its settings provider as `path: ':memory:'`, so
|
|
8
|
+
* a hand-written `$DSH_HOME/settings.yaml` is archived as `settings.yaml.imported`
|
|
9
|
+
* and never consulted. A person who follows an older revision of this README and
|
|
10
|
+
* writes themes into that file will see nothing happen.
|
|
11
|
+
* - The browser half no longer reads this section either: themes are registered
|
|
12
|
+
* with `ctx.theme.register`, and the bundled `lib/themes/*.json` list is the
|
|
13
|
+
* only source. Selection is persisted by the theme service itself.
|
|
14
|
+
*
|
|
15
|
+
* What remains is the landing place for a **file-backed** settings provider: the
|
|
16
|
+
* schema below is what such a provider would validate, so the shape is pinned and
|
|
17
|
+
* tested even though no runner consumes it yet.
|
|
18
|
+
*
|
|
19
|
+
* Registered with no schema `default`, deliberately: a fresh settings document then
|
|
20
|
+
* stays free of the section rather than being pre-populated with the bundled list.
|
|
21
|
+
*
|
|
22
|
+
* The bundled files are validated at build time (`npm run check`), not here — the
|
|
23
|
+
* browser half is the side that turns them into real themes, and it ships them
|
|
24
|
+
* inlined.
|
|
25
|
+
*/
|
|
26
|
+
import z from '@deepseek-ai/schemastery'
|
|
27
|
+
|
|
28
|
+
/** Settings namespace owning the theme definitions. */
|
|
29
|
+
export const THEME_GALLERY_NAMESPACE = 'theme-gallery'
|
|
30
|
+
|
|
31
|
+
/** Color schemes accepted as a theme's base palette. */
|
|
32
|
+
export const COLOR_SCHEMES = ['light', 'dark']
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* One token override: both schemes are mandatory because the same definition is
|
|
36
|
+
* reused when the user flips the color scheme, and a single value would then go
|
|
37
|
+
* illegible. The theme service throws a TypeError on a bare string.
|
|
38
|
+
*
|
|
39
|
+
* `required()` is explicit: schemastery treats object members as optional by
|
|
40
|
+
* default, so an omitted `dark` would otherwise sail through the settings
|
|
41
|
+
* boundary and only fail later, in the browser, as a registration error.
|
|
42
|
+
*/
|
|
43
|
+
export const TokenModesSchema = z.object({
|
|
44
|
+
light: z.string().required().description('Value applied while the light base palette is active.'),
|
|
45
|
+
dark: z.string().required().description('Value applied while the dark base palette is active.'),
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The reading state: what a theme looks like once a conversation has messages.
|
|
50
|
+
*
|
|
51
|
+
* The whole point of a skin is that it covers the screen — which is also what
|
|
52
|
+
* makes a long conversation tiring to read. So a theme may declare how it
|
|
53
|
+
* recedes: the card the transcript sits on, and how strongly it reads over the
|
|
54
|
+
* theme fill. `bg` is lightened toward white while light, so a gradient or
|
|
55
|
+
* tinted fill still shows around the card instead of being painted over.
|
|
56
|
+
*/
|
|
57
|
+
export const ReadingSchema = z.object({
|
|
58
|
+
colorScheme: z.union([...COLOR_SCHEMES]).required()
|
|
59
|
+
.description('Color scheme the transcript card is rendered in.'),
|
|
60
|
+
bg: z.string().required()
|
|
61
|
+
.description('Card base color; lightened toward white at `alpha`.'),
|
|
62
|
+
alpha: z.number().required().min(0).max(1)
|
|
63
|
+
.description('How opaque the card is over the theme fill. Higher reads better; lower keeps the skin visible.'),
|
|
64
|
+
blur: z.number().required().min(0).max(40)
|
|
65
|
+
.description('Backdrop blur in px behind the card.'),
|
|
66
|
+
maxWidth: z.number().required().min(320).max(1600)
|
|
67
|
+
.description('Transcript column width in px while reading.'),
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Sidebar scenery a theme may ask for.
|
|
72
|
+
*
|
|
73
|
+
* The value is a data key rather than an asset path: the browser half renders each
|
|
74
|
+
* kind from inline SVG ported from the source admin system, so only the scenes it
|
|
75
|
+
* actually carries are addressable. A theme without this field draws nothing —
|
|
76
|
+
* the scenery belongs to the skin, not to the app.
|
|
77
|
+
*/
|
|
78
|
+
export const AmbientSchema = z.object({
|
|
79
|
+
kind: z.union(['shan', 'dream']).required()
|
|
80
|
+
.description('Which ported scene to draw: "shan" is 山青婷彩, "dream" is 梦海游鱼.'),
|
|
81
|
+
petals: z.number().min(0).max(20)
|
|
82
|
+
.description('"shan" only: how many falling petals to seed.'),
|
|
83
|
+
bubbles: z.number().min(0).max(24)
|
|
84
|
+
.description('"dream" only: how many pale outlined bubbles to seed.'),
|
|
85
|
+
// The motes and the fish are SEPARATE effects from the bubbles, drawn at the same time, so
|
|
86
|
+
// each gets its own count rather than sharing one.
|
|
87
|
+
motes: z.number().min(0).max(24)
|
|
88
|
+
.description('"dream" only: how many light-blue glowing motes to seed.'),
|
|
89
|
+
fish: z.number().min(0).max(6)
|
|
90
|
+
.description('"dream" only: how many cartoon fish to swim across the water.'),
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* One selectable theme.
|
|
95
|
+
*
|
|
96
|
+
* Every member is explicitly required — schemastery's default is optional, and a
|
|
97
|
+
* theme missing `label` or `tokens` must be refused at the settings boundary, not
|
|
98
|
+
* discovered later as a blank button or a crash in the browser.
|
|
99
|
+
*
|
|
100
|
+
* `label`, `description`, `reading`, `accent` and `ambient` are extensions beyond
|
|
101
|
+
* the official `ThemeDefinition` (which carries only id/colorScheme/tokens): the
|
|
102
|
+
* official Appearance row localizes its three hard-coded cubes and never reads a
|
|
103
|
+
* theme name, so a third-party picker has to carry its own. The theme service
|
|
104
|
+
* validates only `tokens`, so the extra fields are inert at runtime.
|
|
105
|
+
*/
|
|
106
|
+
export const ThemeDefinitionSchema = z.object({
|
|
107
|
+
id: z.string()
|
|
108
|
+
.required()
|
|
109
|
+
.pattern(/^[a-z0-9][a-z0-9-]*$/)
|
|
110
|
+
.description('Stable theme id, also the string passed to ctx.theme.setTheme. "system" is reserved.'),
|
|
111
|
+
label: z.string().required().description('Name shown on the theme button in Settings.'),
|
|
112
|
+
description: z.string().required().description('One-line description shown as the button tooltip.'),
|
|
113
|
+
colorScheme: z.union([...COLOR_SCHEMES]).required().description('Base palette the overrides sit on top of.'),
|
|
114
|
+
tokens: z.dict(TokenModesSchema)
|
|
115
|
+
.required()
|
|
116
|
+
.description('Alias-token overrides keyed by --dsw-alias-* variable name.'),
|
|
117
|
+
reading: ReadingSchema
|
|
118
|
+
.description('Optional reading-state treatment; a theme without one never lightens.'),
|
|
119
|
+
accent: z.string()
|
|
120
|
+
.pattern(/^#[0-9a-fA-F]{6}$/)
|
|
121
|
+
.description('Marker colour for the active workspace / conversation states. Composed with an alpha suffix, so a 6-digit hex literal is required.'),
|
|
122
|
+
ambient: AmbientSchema
|
|
123
|
+
.description('Optional sidebar scenery; a theme without one draws nothing.'),
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Durable theme-gallery section: the user's own themes, absent until they add one.
|
|
128
|
+
* A user theme reusing a bundled id replaces that bundled theme.
|
|
129
|
+
*/
|
|
130
|
+
export const ThemeGallerySchema = z.object({
|
|
131
|
+
themes: z.array(ThemeDefinitionSchema)
|
|
132
|
+
.description('Themes to register on top of the bundled defaults.'),
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
/** Display name used in loader diagnostics. */
|
|
136
|
+
export const name = 'theme-gallery'
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* The host half is deliberately INERT.
|
|
140
|
+
*
|
|
141
|
+
* ── WHY THERE IS NO `apply` THAT RESERVES A SETTINGS SECTION ─────────────────
|
|
142
|
+
*
|
|
143
|
+
* This module used to do:
|
|
144
|
+
*
|
|
145
|
+
* ctx.inject(['settings'], (settingsCtx) => {
|
|
146
|
+
* settingsCtx.settings.register(THEME_GALLERY_NAMESPACE, ThemeGallerySchema)
|
|
147
|
+
* })
|
|
148
|
+
*
|
|
149
|
+
* That single call twice stopped the desktop application from starting, and both times it
|
|
150
|
+
* reported as `dsh-theme-gallery: pending (waiting for service: settingsScope)` in the crash
|
|
151
|
+
* log — a boot hang with no exception, which reads like a model or network fault.
|
|
152
|
+
*
|
|
153
|
+
* `settingsScope` is a service the CLIENT half provides: the official
|
|
154
|
+
* `@deepseek-ai/dsh-client-ui-theme` lists it in its own `inject` and calls
|
|
155
|
+
* `ctx.settingsScope.bind({ namespace: 'ui-theme' })`. A host-side module cannot reach it by
|
|
156
|
+
* name, so the deferred callback never ran and its fiber never settled — and the shell waits
|
|
157
|
+
* for every fiber before it leaves "Loading plugins...".
|
|
158
|
+
*
|
|
159
|
+
* The section was also pointless: nothing has ever read it. Themes are registered through
|
|
160
|
+
* `ctx.theme.register` in the browser half, and selection is persisted by the theme service
|
|
161
|
+
* itself under its own namespace. So this half now contributes nothing to the running app,
|
|
162
|
+
* and the schemas below are exported only as the validated contract for the bundled
|
|
163
|
+
* `lib/themes/*.json` files (see `npm run check`).
|
|
164
|
+
*
|
|
165
|
+
* ── DO NOT ADD A SERVICE WAIT HERE ───────────────────────────────────────────
|
|
166
|
+
*
|
|
167
|
+
* Anything added to this module must be SYNCHRONOUS and must not wait on a service. If a
|
|
168
|
+
* host-side service is genuinely needed later, it has to be declared in the package's own
|
|
169
|
+
* composition so it is provided before this row activates — never requested from inside a
|
|
170
|
+
* deferred callback that can leave the fiber pending. See tests/check-boot-safety.mjs, which
|
|
171
|
+
* fails if this half starts depending on `settings`, `settingsScope`, `configForms` or
|
|
172
|
+
* `remote`.
|
|
173
|
+
*
|
|
174
|
+
* @param ctx - host context; unused, and deliberately so.
|
|
175
|
+
*/
|
|
176
|
+
export function apply(ctx) {
|
|
177
|
+
void ctx
|
|
178
|
+
}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "meng-hai-you-yu",
|
|
4
|
+
"label": "梦海游鱼",
|
|
5
|
+
"description": "梦幻海洋,游鱼作伴 —— 复刻自电商新零售系统管理后台的默认主题",
|
|
6
|
+
"colorScheme": "light",
|
|
7
|
+
"tokens": {
|
|
8
|
+
"--dsw-alias-bg-base": {
|
|
9
|
+
"light": "linear-gradient(to bottom,#F7FBFF 0%,#EDF5FD 55%,#E2EEFA 100%)",
|
|
10
|
+
"dark": "linear-gradient(to bottom,#F7FBFF 0%,#EDF5FD 55%,#E2EEFA 100%)"
|
|
11
|
+
},
|
|
12
|
+
"--dsw-alias-bg-layer-1": {
|
|
13
|
+
"light": "#FBFDFF",
|
|
14
|
+
"dark": "#FBFDFF"
|
|
15
|
+
},
|
|
16
|
+
"--dsw-alias-bg-layer-2": {
|
|
17
|
+
"light": "#FFFFFF",
|
|
18
|
+
"dark": "#FFFFFF"
|
|
19
|
+
},
|
|
20
|
+
"--dsw-alias-bg-layer-3": {
|
|
21
|
+
"light": "#FFFFFF",
|
|
22
|
+
"dark": "#FFFFFF"
|
|
23
|
+
},
|
|
24
|
+
"--dsw-alias-bg-overlay": {
|
|
25
|
+
"light": "#E1EFFB",
|
|
26
|
+
"dark": "#E1EFFB"
|
|
27
|
+
},
|
|
28
|
+
"--dsw-alias-bg-skeleton": {
|
|
29
|
+
"light": "#177CB014",
|
|
30
|
+
"dark": "#177CB014"
|
|
31
|
+
},
|
|
32
|
+
"--dsw-alias-bg-module-platform": {
|
|
33
|
+
"light": "#E0EFFB",
|
|
34
|
+
"dark": "#E0EFFB"
|
|
35
|
+
},
|
|
36
|
+
"--dsw-alias-bg-multi-select": {
|
|
37
|
+
"light": "#E0EFFB",
|
|
38
|
+
"dark": "#E0EFFB"
|
|
39
|
+
},
|
|
40
|
+
"--dsw-alias-border-l1": {
|
|
41
|
+
"light": "#177CB00F",
|
|
42
|
+
"dark": "#177CB00F"
|
|
43
|
+
},
|
|
44
|
+
"--dsw-alias-border-l2": {
|
|
45
|
+
"light": "#177CB021",
|
|
46
|
+
"dark": "#177CB021"
|
|
47
|
+
},
|
|
48
|
+
"--dsw-alias-border-l3": {
|
|
49
|
+
"light": "#177CB02E",
|
|
50
|
+
"dark": "#177CB02E"
|
|
51
|
+
},
|
|
52
|
+
"--dsw-alias-border-l4": {
|
|
53
|
+
"light": "#177CB03D",
|
|
54
|
+
"dark": "#177CB03D"
|
|
55
|
+
},
|
|
56
|
+
"--dsw-alias-brand-primary": {
|
|
57
|
+
"light": "#177CB0",
|
|
58
|
+
"dark": "#177CB0"
|
|
59
|
+
},
|
|
60
|
+
"--dsw-alias-brand-primary-invert": {
|
|
61
|
+
"light": "#FFFFFF",
|
|
62
|
+
"dark": "#FFFFFF"
|
|
63
|
+
},
|
|
64
|
+
"--dsw-alias-brand-text": {
|
|
65
|
+
"light": "#177CB0",
|
|
66
|
+
"dark": "#177CB0"
|
|
67
|
+
},
|
|
68
|
+
"--dsw-alias-label-primary": {
|
|
69
|
+
"light": "#16384F",
|
|
70
|
+
"dark": "#16384F"
|
|
71
|
+
},
|
|
72
|
+
"--dsw-alias-label-primary-bluish": {
|
|
73
|
+
"light": "#16384F",
|
|
74
|
+
"dark": "#16384F"
|
|
75
|
+
},
|
|
76
|
+
"--dsw-alias-label-secondary": {
|
|
77
|
+
"light": "#2E4A63",
|
|
78
|
+
"dark": "#2E4A63"
|
|
79
|
+
},
|
|
80
|
+
"--dsw-alias-label-tertiary": {
|
|
81
|
+
"light": "#5A7B96",
|
|
82
|
+
"dark": "#5A7B96"
|
|
83
|
+
},
|
|
84
|
+
"--dsw-alias-label-caption": {
|
|
85
|
+
"light": "#5A7B96",
|
|
86
|
+
"dark": "#5A7B96"
|
|
87
|
+
},
|
|
88
|
+
"--dsw-alias-label-dimmed": {
|
|
89
|
+
"light": "#8FAAC0",
|
|
90
|
+
"dark": "#8FAAC0"
|
|
91
|
+
},
|
|
92
|
+
"--dsw-alias-label-primary-dimmed": {
|
|
93
|
+
"light": "#2E4A63",
|
|
94
|
+
"dark": "#2E4A63"
|
|
95
|
+
},
|
|
96
|
+
"--dsw-alias-label-primary-foreground": {
|
|
97
|
+
"light": "#FFFFFF",
|
|
98
|
+
"dark": "#FFFFFF"
|
|
99
|
+
},
|
|
100
|
+
"--dsw-alias-label-primary-inverted": {
|
|
101
|
+
"light": "#FFFFFF",
|
|
102
|
+
"dark": "#FFFFFF"
|
|
103
|
+
},
|
|
104
|
+
"--dsw-alias-link": {
|
|
105
|
+
"light": "#B8860B",
|
|
106
|
+
"dark": "#B8860B"
|
|
107
|
+
},
|
|
108
|
+
"--dsw-alias-interactive-bg-hover": {
|
|
109
|
+
"light": "#2B74B512",
|
|
110
|
+
"dark": "#2B74B512"
|
|
111
|
+
},
|
|
112
|
+
"--dsw-alias-interactive-bg-active": {
|
|
113
|
+
"light": "#2B74B529",
|
|
114
|
+
"dark": "#2B74B529"
|
|
115
|
+
},
|
|
116
|
+
"--dsw-alias-interactive-bg-hover-solid": {
|
|
117
|
+
"light": "#E0EFFB",
|
|
118
|
+
"dark": "#E0EFFB"
|
|
119
|
+
},
|
|
120
|
+
"--dsw-alias-interactive-bg-hover-accent": {
|
|
121
|
+
"light": "#06527929",
|
|
122
|
+
"dark": "#06527929"
|
|
123
|
+
},
|
|
124
|
+
"--dsw-alias-button-primary-fill": {
|
|
125
|
+
"light": "#177CB0",
|
|
126
|
+
"dark": "#177CB0"
|
|
127
|
+
},
|
|
128
|
+
"--dsw-alias-button-primary-hover": {
|
|
129
|
+
"light": "#2B74B5",
|
|
130
|
+
"dark": "#2B74B5"
|
|
131
|
+
},
|
|
132
|
+
"--dsw-alias-button-primary-dimmed": {
|
|
133
|
+
"light": "#177CB047",
|
|
134
|
+
"dark": "#177CB047"
|
|
135
|
+
},
|
|
136
|
+
"--dsw-alias-button-ghost-active-fill": {
|
|
137
|
+
"light": "#2B74B524",
|
|
138
|
+
"dark": "#2B74B524"
|
|
139
|
+
},
|
|
140
|
+
"--dsw-alias-button-ghost-active-border": {
|
|
141
|
+
"light": "#2B74B5",
|
|
142
|
+
"dark": "#2B74B5"
|
|
143
|
+
},
|
|
144
|
+
"--dsw-alias-button-ghost-active-hover": {
|
|
145
|
+
"light": "#2B74B53D",
|
|
146
|
+
"dark": "#2B74B53D"
|
|
147
|
+
},
|
|
148
|
+
"--dsw-alias-button-info-fill": {
|
|
149
|
+
"light": "#4C8DAE",
|
|
150
|
+
"dark": "#4C8DAE"
|
|
151
|
+
},
|
|
152
|
+
"--dsw-alias-button-info-hover": {
|
|
153
|
+
"light": "#177CB0",
|
|
154
|
+
"dark": "#177CB0"
|
|
155
|
+
},
|
|
156
|
+
"--dsw-alias-button-elevated-fill": {
|
|
157
|
+
"light": "#FFFFFF",
|
|
158
|
+
"dark": "#FFFFFF"
|
|
159
|
+
},
|
|
160
|
+
"--dsw-alias-button-floating-fill": {
|
|
161
|
+
"light": "#FFFFFF",
|
|
162
|
+
"dark": "#FFFFFF"
|
|
163
|
+
},
|
|
164
|
+
"--dsw-alias-button-floating-hover": {
|
|
165
|
+
"light": "#F5FAFF",
|
|
166
|
+
"dark": "#F5FAFF"
|
|
167
|
+
},
|
|
168
|
+
"--dsw-alias-button-contrast-fill": {
|
|
169
|
+
"light": "#16384F",
|
|
170
|
+
"dark": "#16384F"
|
|
171
|
+
},
|
|
172
|
+
"--dsw-alias-markdown-code-block": {
|
|
173
|
+
"light": "#EAF5FF",
|
|
174
|
+
"dark": "#EAF5FF"
|
|
175
|
+
},
|
|
176
|
+
"--dsw-alias-markdown-code-block-banner": {
|
|
177
|
+
"light": "#D6E9F8",
|
|
178
|
+
"dark": "#D6E9F8"
|
|
179
|
+
},
|
|
180
|
+
"--dsw-alias-markdown-inline-code": {
|
|
181
|
+
"light": "#E0EFFB",
|
|
182
|
+
"dark": "#E0EFFB"
|
|
183
|
+
},
|
|
184
|
+
"--dsw-alias-markdown-citation": {
|
|
185
|
+
"light": "#E0EFFB",
|
|
186
|
+
"dark": "#E0EFFB"
|
|
187
|
+
},
|
|
188
|
+
"--dsw-alias-markdown-tag": {
|
|
189
|
+
"light": "#E0EFFB",
|
|
190
|
+
"dark": "#E0EFFB"
|
|
191
|
+
},
|
|
192
|
+
"--dsw-alias-markdown-placeholder": {
|
|
193
|
+
"light": "#D6E9F8",
|
|
194
|
+
"dark": "#D6E9F8"
|
|
195
|
+
},
|
|
196
|
+
"--dsw-alias-markdown-code-segment-selected": {
|
|
197
|
+
"light": "#2B74B524",
|
|
198
|
+
"dark": "#2B74B524"
|
|
199
|
+
},
|
|
200
|
+
"--dsw-alias-markdown-code-segment-unselected": {
|
|
201
|
+
"light": "#EAF5FF",
|
|
202
|
+
"dark": "#EAF5FF"
|
|
203
|
+
},
|
|
204
|
+
"--dsw-alias-scrollbar-bg-l1": {
|
|
205
|
+
"light": "#2B74B529",
|
|
206
|
+
"dark": "#2B74B529"
|
|
207
|
+
},
|
|
208
|
+
"--dsw-alias-scrollbar-bg-l2": {
|
|
209
|
+
"light": "#2B74B538",
|
|
210
|
+
"dark": "#2B74B538"
|
|
211
|
+
},
|
|
212
|
+
"--dsw-alias-scrollbar-hover-l1": {
|
|
213
|
+
"light": "#2B74B552",
|
|
214
|
+
"dark": "#2B74B552"
|
|
215
|
+
},
|
|
216
|
+
"--dsw-alias-scrollbar-hover-l2": {
|
|
217
|
+
"light": "#2B74B566",
|
|
218
|
+
"dark": "#2B74B566"
|
|
219
|
+
},
|
|
220
|
+
"--dsw-alias-tooltip-bg": {
|
|
221
|
+
"light": "#065279",
|
|
222
|
+
"dark": "#065279"
|
|
223
|
+
},
|
|
224
|
+
"--dsw-alias-toast-bg": {
|
|
225
|
+
"light": "#FFFFFF",
|
|
226
|
+
"dark": "#FFFFFF"
|
|
227
|
+
},
|
|
228
|
+
"--dsw-alias-state-error-primary": {
|
|
229
|
+
"light": "#C0566A",
|
|
230
|
+
"dark": "#C0566A"
|
|
231
|
+
},
|
|
232
|
+
"--dsw-alias-state-error-secondary": {
|
|
233
|
+
"light": "#DB5A6B",
|
|
234
|
+
"dark": "#DB5A6B"
|
|
235
|
+
},
|
|
236
|
+
"--dsw-alias-state-success-primary": {
|
|
237
|
+
"light": "#21A675",
|
|
238
|
+
"dark": "#21A675"
|
|
239
|
+
},
|
|
240
|
+
"--dsw-alias-state-success-secondary": {
|
|
241
|
+
"light": "#177CB0",
|
|
242
|
+
"dark": "#177CB0"
|
|
243
|
+
},
|
|
244
|
+
"--dsw-alias-state-success-tertiary": {
|
|
245
|
+
"light": "#9CC3E4",
|
|
246
|
+
"dark": "#9CC3E4"
|
|
247
|
+
},
|
|
248
|
+
"--dsw-alias-state-warn-primary": {
|
|
249
|
+
"light": "#CA6924",
|
|
250
|
+
"dark": "#CA6924"
|
|
251
|
+
},
|
|
252
|
+
"--dsw-alias-state-warn-secondary": {
|
|
253
|
+
"light": "#E09A4E",
|
|
254
|
+
"dark": "#E09A4E"
|
|
255
|
+
},
|
|
256
|
+
"--dsw-alias-state-warn-tertiary": {
|
|
257
|
+
"light": "#F3E3CB",
|
|
258
|
+
"dark": "#F3E3CB"
|
|
259
|
+
},
|
|
260
|
+
"--dsw-alias-state-warn-label": {
|
|
261
|
+
"light": "#8A4A12",
|
|
262
|
+
"dark": "#8A4A12"
|
|
263
|
+
},
|
|
264
|
+
"--dsw-alias-state-business-primary": {
|
|
265
|
+
"light": "#177CB0",
|
|
266
|
+
"dark": "#177CB0"
|
|
267
|
+
},
|
|
268
|
+
"--dsw-alias-state-business-tertiary": {
|
|
269
|
+
"light": "#4C8DAE",
|
|
270
|
+
"dark": "#4C8DAE"
|
|
271
|
+
},
|
|
272
|
+
"--dsw-specific-sidebar-fill": {
|
|
273
|
+
"light": "linear-gradient(to bottom,#EAF5FF 0%,#DDF0FF 26%,#CDE9FB 52%,#C7E7FA 62%,#CDEEFC 70%,#C4E7FA 80%,#B9DCF3 90%,#B0D9F0 100%)",
|
|
274
|
+
"dark": "linear-gradient(to bottom,#EAF5FF 0%,#DDF0FF 26%,#CDE9FB 52%,#C7E7FA 62%,#CDEEFC 70%,#C4E7FA 80%,#B9DCF3 90%,#B0D9F0 100%)"
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
"reading": {
|
|
278
|
+
"colorScheme": "light",
|
|
279
|
+
"bg": "#FFFFFF",
|
|
280
|
+
"alpha": 0.62,
|
|
281
|
+
"blur": 3,
|
|
282
|
+
"maxWidth": 640
|
|
283
|
+
},
|
|
284
|
+
"accent": "#FFD166",
|
|
285
|
+
"ambient": {
|
|
286
|
+
"kind": "dream",
|
|
287
|
+
"bubbles": 9,
|
|
288
|
+
"motes": 5,
|
|
289
|
+
"fish": 3
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
]
|