@tanstack/devtools-ui 0.3.3 → 0.3.4

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.
@@ -12,9 +12,7 @@ const MainPanel = ({
12
12
  return (() => {
13
13
  var _el$ = _tmpl$();
14
14
  insert(_el$, children);
15
- effect(() => className(_el$, clsx(styles().mainPanel.panel, className$1, classStyles, {
16
- [styles().mainPanel.withPadding]: withPadding
17
- })));
15
+ effect(() => className(_el$, clsx(styles().mainPanel.panel(Boolean(withPadding)), className$1, classStyles)));
18
16
  return _el$;
19
17
  })();
20
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"main-panel.js","sources":["../../../src/components/main-panel.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { useStyles } from '../styles/use-styles'\nimport type { JSX } from 'solid-js/jsx-runtime'\n\ntype PanelProps = JSX.IntrinsicElements['div'] & {\n children?: any\n className?: string\n withPadding?: boolean\n}\n\nexport const MainPanel = ({\n className,\n children,\n class: classStyles,\n withPadding,\n}: PanelProps) => {\n const styles = useStyles()\n return (\n <div\n class={clsx(styles().mainPanel.panel, className, classStyles, {\n [styles().mainPanel.withPadding]: withPadding,\n })}\n >\n {children}\n </div>\n )\n}\n"],"names":["MainPanel","className","children","class","classStyles","withPadding","styles","useStyles","_el$","_tmpl$","_$insert","_$effect","_$className","clsx","mainPanel","panel"],"mappings":";;;;AAUO,MAAMA,YAAYA,CAAC;AAAA,EAAA,WACxBC;AAAAA,EACAC;AAAAA,EACAC,OAAOC;AAAAA,EACPC;AACU,MAAM;AAChB,QAAMC,SAASC,UAAAA;AACf,UAAA,MAAA;AAAA,QAAAC,OAAAC,OAAAA;AAAAC,WAAAF,MAMKN,QAAQ;AAAAS,iBAAAC,UAAAJ,MAJFK,KAAKP,SAASQ,UAAUC,OAAOd,aAAWG,aAAa;AAAA,MAC5D,CAACE,OAAAA,EAASQ,UAAUT,WAAW,GAAGA;AAAAA,IAAAA,CACnC,CAAC,CAAA;AAAA,WAAAG;AAAAA,EAAA,GAAA;AAKR;"}
1
+ {"version":3,"file":"main-panel.js","sources":["../../../src/components/main-panel.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { useStyles } from '../styles/use-styles'\nimport type { JSX } from 'solid-js/jsx-runtime'\n\ntype PanelProps = JSX.IntrinsicElements['div'] & {\n children?: any\n className?: string\n withPadding?: boolean\n}\n\nexport const MainPanel = ({\n className,\n children,\n class: classStyles,\n withPadding,\n}: PanelProps) => {\n const styles = useStyles()\n\n return (\n <div\n class={clsx(\n styles().mainPanel.panel(Boolean(withPadding)),\n className,\n classStyles,\n )}\n >\n {children}\n </div>\n )\n}\n"],"names":["MainPanel","className","children","class","classStyles","withPadding","styles","useStyles","_el$","_tmpl$","_$insert","_$effect","_$className","clsx","mainPanel","panel","Boolean"],"mappings":";;;;AAUO,MAAMA,YAAYA,CAAC;AAAA,EAAA,WACxBC;AAAAA,EACAC;AAAAA,EACAC,OAAOC;AAAAA,EACPC;AACU,MAAM;AAChB,QAAMC,SAASC,UAAAA;AAEf,UAAA,MAAA;AAAA,QAAAC,OAAAC,OAAAA;AAAAC,WAAAF,MAQKN,QAAQ;AAAAS,WAAA,MAAAC,UAAAJ,MANFK,KACLP,SAASQ,UAAUC,MAAMC,QAAQX,WAAW,CAAC,GAC7CJ,aACAG,WACF,CAAC,CAAA;AAAA,WAAAI;AAAAA,EAAA,GAAA;AAKP;"}
@@ -0,0 +1,12 @@
1
+ import { Accessor, JSX } from 'solid-js';
2
+ export type Theme = 'light' | 'dark';
3
+ type ThemeContextValue = {
4
+ theme: Accessor<Theme>;
5
+ setTheme: (theme: Theme) => void;
6
+ };
7
+ export declare const ThemeContextProvider: (props: {
8
+ children: JSX.Element;
9
+ theme: Theme;
10
+ }) => JSX.Element;
11
+ export declare function useTheme(): ThemeContextValue;
12
+ export {};
@@ -0,0 +1,30 @@
1
+ import { createComponent } from "solid-js/web";
2
+ import { createContext, createSignal, createEffect, useContext } from "solid-js";
3
+ const ThemeContext = createContext(void 0);
4
+ const ThemeContextProvider = (props) => {
5
+ const [theme, setTheme] = createSignal(props.theme);
6
+ createEffect(() => {
7
+ setTheme(props.theme);
8
+ });
9
+ return createComponent(ThemeContext.Provider, {
10
+ value: {
11
+ theme,
12
+ setTheme
13
+ },
14
+ get children() {
15
+ return props.children;
16
+ }
17
+ });
18
+ };
19
+ function useTheme() {
20
+ const context = useContext(ThemeContext);
21
+ if (!context) {
22
+ throw new Error("useTheme must be used within a ThemeContextProvider");
23
+ }
24
+ return context;
25
+ }
26
+ export {
27
+ ThemeContextProvider,
28
+ useTheme
29
+ };
30
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sources":["../../../src/components/theme.tsx"],"sourcesContent":["import { createContext, createEffect, createSignal, useContext } from 'solid-js'\nimport type { Accessor, JSX } from 'solid-js'\n\nexport type Theme = 'light' | 'dark'\n\ntype ThemeContextValue = {\n theme: Accessor<Theme>\n setTheme: (theme: Theme) => void\n}\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined)\n\nexport const ThemeContextProvider = (props: {\n children: JSX.Element\n theme: Theme\n}) => {\n const [theme, setTheme] = createSignal<Theme>(props.theme)\n createEffect(() => {\n setTheme(props.theme)\n })\n return (\n <ThemeContext.Provider value={{ theme, setTheme }}>\n {props.children}\n </ThemeContext.Provider>\n )\n}\n\nexport function useTheme() {\n const context = useContext(ThemeContext)\n if (!context) {\n throw new Error('useTheme must be used within a ThemeContextProvider')\n }\n\n return context\n}\n"],"names":["ThemeContext","createContext","undefined","ThemeContextProvider","props","theme","setTheme","createSignal","createEffect","_$createComponent","Provider","value","children","useTheme","context","useContext","Error"],"mappings":";;AASA,MAAMA,eAAeC,cAA6CC,MAAS;AAEpE,MAAMC,uBAAuBA,CAACC,UAG/B;AACJ,QAAM,CAACC,OAAOC,QAAQ,IAAIC,aAAoBH,MAAMC,KAAK;AACzDG,eAAa,MAAM;AACjBF,aAASF,MAAMC,KAAK;AAAA,EACtB,CAAC;AACD,SAAAI,gBACGT,aAAaU,UAAQ;AAAA,IAACC,OAAO;AAAA,MAAEN;AAAAA,MAAOC;AAAAA,IAAAA;AAAAA,IAAU,IAAAM,WAAA;AAAA,aAC9CR,MAAMQ;AAAAA,IAAQ;AAAA,EAAA,CAAA;AAGrB;AAEO,SAASC,WAAW;AACzB,QAAMC,UAAUC,WAAWf,YAAY;AACvC,MAAI,CAACc,SAAS;AACZ,UAAM,IAAIE,MAAM,qDAAqD;AAAA,EACvE;AAEA,SAAOF;AACT;"}
@@ -8,3 +8,4 @@ export { Tag } from './components/tag.js';
8
8
  export { MainPanel } from './components/main-panel.js';
9
9
  export { Section, SectionTitle, SectionDescription, SectionIcon, } from './components/section.js';
10
10
  export { Header, HeaderLogo } from './components/header.js';
11
+ export { useTheme, ThemeContextProvider } from './components/theme.js';
package/dist/esm/index.js CHANGED
@@ -8,6 +8,7 @@ import { Tag } from "./components/tag.js";
8
8
  import { MainPanel } from "./components/main-panel.js";
9
9
  import { Section, SectionDescription, SectionIcon, SectionTitle } from "./components/section.js";
10
10
  import { Header, HeaderLogo } from "./components/header.js";
11
+ import { ThemeContextProvider, useTheme } from "./components/theme.js";
11
12
  export {
12
13
  Button,
13
14
  Checkbox,
@@ -22,6 +23,8 @@ export {
22
23
  SectionTitle,
23
24
  Select,
24
25
  Tag,
25
- TanStackLogo
26
+ TanStackLogo,
27
+ ThemeContextProvider,
28
+ useTheme
26
29
  };
27
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
@@ -62,7 +62,6 @@ export declare function useStyles(): import('solid-js').Accessor<{
62
62
  description: string;
63
63
  };
64
64
  mainPanel: {
65
- panel: string;
66
- withPadding: string;
65
+ panel: (withPadding: boolean) => string;
67
66
  };
68
67
  }>;
@@ -1,5 +1,6 @@
1
1
  import * as goober from "goober";
2
- import { createSignal } from "solid-js";
2
+ import { createSignal, createEffect } from "solid-js";
3
+ import { useTheme } from "../components/theme.js";
3
4
  import { tokens } from "./tokens.js";
4
5
  const buttonVariantColors = {
5
6
  primary: {
@@ -79,12 +80,12 @@ const stylesFactory = (theme = "dark") => {
79
80
  selectLabel: css`
80
81
  font-size: 0.875rem;
81
82
  font-weight: 500;
82
- color: ${colors.gray[100]};
83
+ color: ${t(colors.gray[900], colors.gray[100])};
83
84
  text-align: left;
84
85
  `,
85
86
  selectDescription: css`
86
87
  font-size: 0.8rem;
87
- color: ${colors.gray[400]};
88
+ color: ${t(colors.gray[500], colors.gray[400])};
88
89
  margin: 0;
89
90
  line-height: 1.3;
90
91
  text-align: left;
@@ -94,9 +95,9 @@ const stylesFactory = (theme = "dark") => {
94
95
  width: 100%;
95
96
  padding: 0.75rem 3rem 0.75rem 0.75rem;
96
97
  border-radius: 0.5rem;
97
- background-color: ${colors.darkGray[800]};
98
- color: ${colors.gray[100]};
99
- border: 1px solid ${colors.gray[700]};
98
+ background-color: ${t(colors.gray[50], colors.darkGray[800])};
99
+ color: ${t(colors.gray[900], colors.gray[100])};
100
+ border: 1px solid ${t(colors.gray[300], colors.gray[700])};
100
101
  font-size: 0.875rem;
101
102
  transition: all 0.2s ease;
102
103
  cursor: pointer;
@@ -108,7 +109,7 @@ const stylesFactory = (theme = "dark") => {
108
109
  background-size: 1.25rem;
109
110
 
110
111
  &:hover {
111
- border-color: ${colors.gray[600]};
112
+ border-color: ${t(colors.gray[400], colors.gray[600])};
112
113
  }
113
114
 
114
115
  &:focus {
@@ -130,12 +131,12 @@ const stylesFactory = (theme = "dark") => {
130
131
  inputLabel: css`
131
132
  font-size: 0.875rem;
132
133
  font-weight: 500;
133
- color: ${colors.gray[100]};
134
+ color: ${t(colors.gray[900], colors.gray[100])};
134
135
  text-align: left;
135
136
  `,
136
137
  inputDescription: css`
137
138
  font-size: 0.8rem;
138
- color: ${colors.gray[400]};
139
+ color: ${t(colors.gray[500], colors.gray[400])};
139
140
  margin: 0;
140
141
  line-height: 1.3;
141
142
  text-align: left;
@@ -145,25 +146,26 @@ const stylesFactory = (theme = "dark") => {
145
146
  width: 100%;
146
147
  padding: 0.75rem;
147
148
  border-radius: 0.5rem;
148
- background-color: ${colors.darkGray[800]};
149
- color: ${colors.gray[100]};
150
- border: 1px solid ${colors.gray[700]};
149
+ background-color: ${t(colors.gray[50], colors.darkGray[800])};
150
+ color: ${t(colors.gray[900], colors.gray[100])};
151
+ border: 1px solid ${t(colors.gray[300], colors.gray[700])};
151
152
  font-size: 0.875rem;
152
153
  font-family: ${fontFamily.mono};
153
154
  transition: all 0.2s ease;
154
155
 
155
156
  &::placeholder {
156
- color: ${colors.gray[500]};
157
+ color: ${t(colors.gray[400], colors.gray[500])};
157
158
  }
158
159
 
159
160
  &:hover {
160
- border-color: ${colors.gray[600]};
161
+ border-color: ${t(colors.gray[400], colors.gray[600])};
161
162
  }
162
163
 
163
164
  &:focus {
164
165
  outline: none;
165
- border-color: ${colors.purple[400]};
166
- box-shadow: 0 0 0 3px ${colors.purple[400]}${alpha[20]};
166
+ border-color: ${t(colors.purple[500], colors.purple[400])};
167
+ box-shadow: 0 0 0 3px
168
+ ${t(colors.purple[100] + alpha[20], colors.purple[400] + alpha[20])};
167
169
  }
168
170
  `,
169
171
  checkboxWrapper: css`
@@ -177,7 +179,7 @@ const stylesFactory = (theme = "dark") => {
177
179
  transition: background-color 0.2s ease;
178
180
 
179
181
  &:hover {
180
- background-color: ${colors.darkGray[800]};
182
+ background-color: ${t(colors.gray[100], colors.darkGray[800])};
181
183
  }
182
184
  `,
183
185
  checkboxContainer: css`
@@ -193,9 +195,9 @@ const stylesFactory = (theme = "dark") => {
193
195
  appearance: none;
194
196
  width: 1.25rem;
195
197
  height: 1.25rem;
196
- border: 2px solid ${colors.gray[700]};
198
+ border: 2px solid ${t(colors.gray[300], colors.gray[700])};
197
199
  border-radius: 0.375rem;
198
- background-color: ${colors.darkGray[800]};
200
+ background-color: ${t(colors.gray[50], colors.darkGray[800])};
199
201
  display: grid;
200
202
  place-items: center;
201
203
  transition: all 0.2s ease;
@@ -203,33 +205,33 @@ const stylesFactory = (theme = "dark") => {
203
205
  margin-top: 0.125rem;
204
206
 
205
207
  &:hover {
206
- border-color: ${colors.purple[400]};
208
+ border-color: ${t(colors.purple[500], colors.purple[400])};
207
209
  }
208
210
 
209
211
  &:checked {
210
- background-color: ${colors.purple[500]};
211
- border-color: ${colors.purple[500]};
212
+ background-color: ${t(colors.purple[500], colors.purple[700])};
213
+ border-color: ${t(colors.purple[500], colors.purple[700])};
212
214
  }
213
215
 
214
216
  &:checked::after {
215
217
  content: '';
216
218
  width: 0.4rem;
217
219
  height: 0.6rem;
218
- border: solid white;
220
+ border: solid ${t("#fff", colors.gray[100])};
219
221
  border-width: 0 2px 2px 0;
220
222
  transform: rotate(45deg);
221
223
  margin-top: -3px;
222
224
  }
223
225
  `,
224
226
  checkboxLabel: css`
225
- color: ${colors.gray[100]};
227
+ color: ${t(colors.gray[900], colors.gray[100])};
226
228
  font-size: 0.875rem;
227
229
  font-weight: 500;
228
230
  line-height: 1.4;
229
231
  text-align: left;
230
232
  `,
231
233
  checkboxDescription: css`
232
- color: ${colors.gray[400]};
234
+ color: ${t(colors.gray[500], colors.gray[400])};
233
235
  font-size: 0.8rem;
234
236
  line-height: 1.3;
235
237
  text-align: left;
@@ -259,42 +261,42 @@ const stylesFactory = (theme = "dark") => {
259
261
  if (ghost) {
260
262
  return css`
261
263
  background: transparent;
262
- color: ${v.bg};
264
+ color: ${t(v.bg, v.bg)};
263
265
  border-color: transparent;
264
266
  &:hover {
265
- background: ${tokens.colors.purple[100]};
267
+ background: ${t(colors.purple[100], colors.darkGray[700])};
266
268
  }
267
269
  &:active {
268
- background: ${tokens.colors.purple[200]};
270
+ background: ${t(colors.purple[200], colors.darkGray[800])};
269
271
  }
270
272
  `;
271
273
  }
272
274
  if (outline) {
273
275
  return css`
274
276
  background: transparent;
275
- color: ${v.bg};
276
- border-color: ${v.bg};
277
+ color: ${t(v.bg, v.bg)};
278
+ border-color: ${t(v.bg, v.bg)};
277
279
  &:hover {
278
- background: ${tokens.colors.purple[100]};
279
- border-color: ${v.hover};
280
+ background: ${t(colors.purple[100], colors.darkGray[700])};
281
+ border-color: ${t(v.hover, v.hover)};
280
282
  }
281
283
  &:active {
282
- background: ${tokens.colors.purple[200]};
283
- border-color: ${v.active};
284
+ background: ${t(colors.purple[200], colors.darkGray[800])};
285
+ border-color: ${t(v.active, v.active)};
284
286
  }
285
287
  `;
286
288
  }
287
289
  return css`
288
- background: ${v.bg};
289
- color: ${v.text};
290
- border-color: ${v.border};
290
+ background: ${t(v.bg, v.bg)};
291
+ color: ${t(v.text, v.text)};
292
+ border-color: ${t(v.border, v.border)};
291
293
  &:hover {
292
- background: ${v.hover};
293
- border-color: ${v.hover};
294
+ background: ${t(v.hover, v.hover)};
295
+ border-color: ${t(v.hover, v.hover)};
294
296
  }
295
297
  &:active {
296
- background: ${v.active};
297
- border-color: ${v.active};
298
+ background: ${t(v.active, v.active)};
299
+ border-color: ${t(v.active, v.active)};
298
300
  }
299
301
  `;
300
302
  }
@@ -304,7 +306,10 @@ const stylesFactory = (theme = "dark") => {
304
306
  width: ${tokens.size[1.5]};
305
307
  height: ${tokens.size[1.5]};
306
308
  border-radius: ${tokens.border.radius.full};
307
- background-color: ${tokens.colors[color][500]};
309
+ background-color: ${t(
310
+ tokens.colors[color][500],
311
+ tokens.colors[color][500]
312
+ )};
308
313
  `,
309
314
  base: css`
310
315
  display: flex;
@@ -324,7 +329,7 @@ const stylesFactory = (theme = "dark") => {
324
329
  position: relative;
325
330
  &:focus-visible {
326
331
  outline-offset: 2px;
327
- outline: 2px solid ${colors.blue[800]};
332
+ outline: 2px solid ${t(colors.blue[700], colors.blue[800])};
328
333
  }
329
334
  `,
330
335
  label: css`
@@ -348,7 +353,6 @@ const stylesFactory = (theme = "dark") => {
348
353
  color: ${t(colors.gray[500], colors.gray[500])};
349
354
  font-size: ${font.size.xs};
350
355
  margin-right: ${size[1]};
351
- /* outline: 1px solid ${colors.yellow[400]}; */
352
356
  `,
353
357
  actionButton: css`
354
358
  background-color: transparent;
@@ -370,7 +374,7 @@ const stylesFactory = (theme = "dark") => {
370
374
 
371
375
  &:focus-visible {
372
376
  border-radius: ${border.radius.xs};
373
- outline: 2px solid ${colors.blue[800]};
377
+ outline: 2px solid ${t(colors.blue[700], colors.blue[800])};
374
378
  outline-offset: 2px;
375
379
  }
376
380
  `,
@@ -382,7 +386,7 @@ const stylesFactory = (theme = "dark") => {
382
386
  left: -16px;
383
387
  top: 3px;
384
388
  & path {
385
- stroke: ${colors.blue[300]};
389
+ stroke: ${t(colors.blue[400], colors.blue[300])};
386
390
  }
387
391
  & svg {
388
392
  width: ${size[3]};
@@ -392,19 +396,18 @@ const stylesFactory = (theme = "dark") => {
392
396
  display: inline-flex;
393
397
  align-items: center;
394
398
  transition: all 0.1s ease;
395
- /* outline: 1px solid ${colors.blue[400]}; */
396
399
  `,
397
400
  expandedLine: (hasBorder) => css`
398
401
  display: block;
399
402
  padding-left: 0.75rem;
400
403
  margin-left: -0.7rem;
401
- ${hasBorder ? `border-left: 1px solid ${colors.blue[300]};` : ""}
404
+ ${hasBorder ? `border-left: 1px solid ${t(colors.blue[400], colors.blue[300])};` : ""}
402
405
  `,
403
406
  collapsible: css`
404
407
  cursor: pointer;
405
408
  transition: all 0.2s ease;
406
409
  &:hover {
407
- background-color: ${colors.darkGray[700]};
410
+ background-color: ${t(colors.gray[100], colors.darkGray[700])};
408
411
  border-radius: ${tokens.border.radius.sm};
409
412
  padding: 0 ${tokens.size[1]};
410
413
  }
@@ -420,26 +423,26 @@ const stylesFactory = (theme = "dark") => {
420
423
  }
421
424
  `,
422
425
  valueCollapsed: css`
423
- color: ${colors.gray[400]};
426
+ color: ${t(colors.gray[500], colors.gray[400])};
424
427
  `,
425
428
  valueFunction: css`
426
- color: ${colors.cyan[400]};
429
+ color: ${t(colors.cyan[500], colors.cyan[400])};
427
430
  `,
428
431
  valueString: css`
429
- color: ${colors.green[400]};
432
+ color: ${t(colors.green[500], colors.green[400])};
430
433
  `,
431
434
  valueNumber: css`
432
- color: ${colors.yellow[400]};
435
+ color: ${t(colors.yellow[500], colors.yellow[400])};
433
436
  `,
434
437
  valueBoolean: css`
435
- color: ${colors.pink[400]};
438
+ color: ${t(colors.pink[500], colors.pink[400])};
436
439
  `,
437
440
  valueNull: css`
438
- color: ${colors.gray[400]};
441
+ color: ${t(colors.gray[500], colors.gray[400])};
439
442
  font-style: italic;
440
443
  `,
441
444
  valueKey: css`
442
- color: ${colors.blue[300]};
445
+ color: ${t(colors.blue[400], colors.blue[300])};
443
446
  `,
444
447
  valueBraces: css`
445
448
  color: ${colors.gray[500]};
@@ -502,7 +505,7 @@ const stylesFactory = (theme = "dark") => {
502
505
  font-weight: ${font.weight.bold};
503
506
  line-height: ${font.lineHeight.xs};
504
507
  white-space: nowrap;
505
- color: ${t(colors.gray[600], colors.gray[300])};
508
+ color: ${t(colors.gray[700], colors.gray[300])};
506
509
  `,
507
510
  flavorLogo: (flavorLight, flavorDark) => css`
508
511
  font-weight: ${font.weight.semibold};
@@ -519,18 +522,21 @@ const stylesFactory = (theme = "dark") => {
519
522
  main: css`
520
523
  margin-bottom: 2rem;
521
524
  padding: 1.5rem;
522
- background-color: ${colors.darkGray[800]};
523
- border: 1px solid ${colors.gray[700]};
525
+ background-color: ${t(colors.gray[50], colors.darkGray[800])};
526
+ border: 1px solid ${t(colors.gray[300], colors.gray[700])};
524
527
  border-radius: 0.75rem;
525
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
528
+ box-shadow: ${t(
529
+ "0 1px 3px rgba(0,0,0,0.06)",
530
+ "0 1px 3px rgba(0,0,0,0.18)"
531
+ )};
526
532
  `,
527
533
  title: css`
528
534
  font-size: 1.125rem;
529
535
  font-weight: 600;
530
- color: ${colors.gray[100]};
536
+ color: ${t(colors.gray[900], colors.gray[100])};
531
537
  margin: 0 0 1rem 0;
532
538
  padding-bottom: 0.5rem;
533
- border-bottom: 1px solid ${colors.gray[700]};
539
+ border-bottom: 1px solid ${t(colors.gray[300], colors.gray[700])};
534
540
  display: flex;
535
541
  align-items: center;
536
542
  gap: 0.5rem;
@@ -543,10 +549,10 @@ const stylesFactory = (theme = "dark") => {
543
549
  height: 100%;
544
550
  width: 100%;
545
551
  }
546
- color: ${colors.purple[400]};
552
+ color: ${t(colors.purple[500], colors.purple[400])};
547
553
  `,
548
554
  description: css`
549
- color: ${colors.gray[400]};
555
+ color: ${t(colors.gray[500], colors.gray[400])};
550
556
  font-size: 0.875rem;
551
557
  margin: 0 0 1.5rem 0;
552
558
  line-height: 1.5;
@@ -554,21 +560,22 @@ const stylesFactory = (theme = "dark") => {
554
560
  `
555
561
  },
556
562
  mainPanel: {
557
- panel: css`
558
- padding: 0;
559
- background: ${colors.darkGray[700]};
563
+ panel: (withPadding) => css`
564
+ padding: ${withPadding ? tokens.size[4] : 0};
565
+ background: ${t(colors.gray[50], colors.darkGray[700])};
560
566
  overflow-y: auto;
561
567
  height: 100%;
562
- `,
563
- withPadding: css`
564
- padding: ${tokens.size[4]};
565
568
  `
566
569
  }
567
570
  };
568
571
  };
569
572
  function useStyles() {
570
- const [_styles] = createSignal(stylesFactory());
571
- return _styles;
573
+ const { theme } = useTheme();
574
+ const [styles, setStyles] = createSignal(stylesFactory(theme()));
575
+ createEffect(() => {
576
+ setStyles(stylesFactory(theme()));
577
+ });
578
+ return styles;
572
579
  }
573
580
  export {
574
581
  css,
@@ -1 +1 @@
1
- {"version":3,"file":"use-styles.js","sources":["../../../src/styles/use-styles.ts"],"sourcesContent":["import * as goober from 'goober'\nimport { createSignal } from 'solid-js'\nimport { tokens } from './tokens'\nimport type { ButtonVariant } from '../components/button'\n\nconst buttonVariantColors: Record<\n ButtonVariant,\n { bg: string; hover: string; active: string; text: string; border: string }\n> = {\n primary: {\n bg: tokens.colors.purple[500],\n hover: tokens.colors.purple[600],\n active: tokens.colors.purple[700],\n text: '#fff',\n border: tokens.colors.purple[500],\n },\n secondary: {\n bg: tokens.colors.gray[800],\n hover: tokens.colors.gray[700],\n active: tokens.colors.gray[600],\n text: tokens.colors.gray[100],\n border: tokens.colors.gray[700],\n },\n info: {\n bg: tokens.colors.blue[500],\n hover: tokens.colors.blue[600],\n active: tokens.colors.blue[700],\n text: '#fff',\n border: tokens.colors.blue[500],\n },\n warning: {\n bg: tokens.colors.yellow[500],\n hover: tokens.colors.yellow[600],\n active: tokens.colors.yellow[700],\n text: '#fff',\n border: tokens.colors.yellow[500],\n },\n danger: {\n bg: tokens.colors.red[500],\n hover: tokens.colors.red[600],\n active: tokens.colors.red[700],\n text: '#fff',\n border: tokens.colors.red[500],\n },\n success: {\n bg: tokens.colors.green[500],\n hover: tokens.colors.green[600],\n active: tokens.colors.green[700],\n text: '#fff',\n border: tokens.colors.green[500],\n },\n}\nexport const css = goober.css\nconst stylesFactory = (theme: 'light' | 'dark' = 'dark') => {\n const { colors, font, size, alpha, border } = tokens\n const { fontFamily } = font\n\n const t = (light: string, dark: string) => (theme === 'light' ? light : dark)\n\n return {\n logo: css`\n cursor: pointer;\n display: flex;\n flex-direction: column;\n background-color: transparent;\n border: none;\n width: ${size[12]};\n height: ${size[12]};\n font-family: ${fontFamily.sans};\n gap: ${tokens.size[0.5]};\n padding: 0px;\n &:hover {\n opacity: 0.7;\n }\n `,\n\n selectWrapper: css`\n width: 100%;\n max-width: 300px;\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n `,\n selectContainer: css`\n width: 100%;\n `,\n selectLabel: css`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${colors.gray[100]};\n text-align: left;\n `,\n selectDescription: css`\n font-size: 0.8rem;\n color: ${colors.gray[400]};\n margin: 0;\n line-height: 1.3;\n text-align: left;\n `,\n select: css`\n appearance: none;\n width: 100%;\n padding: 0.75rem 3rem 0.75rem 0.75rem;\n border-radius: 0.5rem;\n background-color: ${colors.darkGray[800]};\n color: ${colors.gray[100]};\n border: 1px solid ${colors.gray[700]};\n font-size: 0.875rem;\n transition: all 0.2s ease;\n cursor: pointer;\n\n /* Custom arrow */\n background-image: url(\"data:image/svg+xml;utf8,<svg fill='%236b7280' height='20' viewBox='0 0 24 24' width='20' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/></svg>\");\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 1.25rem;\n\n &:hover {\n border-color: ${colors.gray[600]};\n }\n\n &:focus {\n outline: none;\n border-color: ${colors.purple[400]};\n box-shadow: 0 0 0 3px ${colors.purple[400]}${alpha[20]};\n }\n `,\n inputWrapper: css`\n width: 100%;\n max-width: 300px;\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n `,\n inputContainer: css`\n width: 100%;\n `,\n inputLabel: css`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${colors.gray[100]};\n text-align: left;\n `,\n inputDescription: css`\n font-size: 0.8rem;\n color: ${colors.gray[400]};\n margin: 0;\n line-height: 1.3;\n text-align: left;\n `,\n input: css`\n appearance: none;\n width: 100%;\n padding: 0.75rem;\n border-radius: 0.5rem;\n background-color: ${colors.darkGray[800]};\n color: ${colors.gray[100]};\n border: 1px solid ${colors.gray[700]};\n font-size: 0.875rem;\n font-family: ${fontFamily.mono};\n transition: all 0.2s ease;\n\n &::placeholder {\n color: ${colors.gray[500]};\n }\n\n &:hover {\n border-color: ${colors.gray[600]};\n }\n\n &:focus {\n outline: none;\n border-color: ${colors.purple[400]};\n box-shadow: 0 0 0 3px ${colors.purple[400]}${alpha[20]};\n }\n `,\n checkboxWrapper: css`\n display: flex;\n align-items: flex-start;\n gap: 0.75rem;\n cursor: pointer;\n user-select: none;\n padding: 0.5rem;\n border-radius: 0.5rem;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${colors.darkGray[800]};\n }\n `,\n checkboxContainer: css`\n width: 100%;\n `,\n checkboxLabelContainer: css`\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n flex: 1;\n `,\n checkbox: css`\n appearance: none;\n width: 1.25rem;\n height: 1.25rem;\n border: 2px solid ${colors.gray[700]};\n border-radius: 0.375rem;\n background-color: ${colors.darkGray[800]};\n display: grid;\n place-items: center;\n transition: all 0.2s ease;\n flex-shrink: 0;\n margin-top: 0.125rem;\n\n &:hover {\n border-color: ${colors.purple[400]};\n }\n\n &:checked {\n background-color: ${colors.purple[500]};\n border-color: ${colors.purple[500]};\n }\n\n &:checked::after {\n content: '';\n width: 0.4rem;\n height: 0.6rem;\n border: solid white;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n margin-top: -3px;\n }\n `,\n checkboxLabel: css`\n color: ${colors.gray[100]};\n font-size: 0.875rem;\n font-weight: 500;\n line-height: 1.4;\n text-align: left;\n `,\n checkboxDescription: css`\n color: ${colors.gray[400]};\n font-size: 0.8rem;\n line-height: 1.3;\n text-align: left;\n `,\n button: {\n base: css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-family: ${tokens.font.fontFamily.sans};\n font-size: 0.8rem;\n font-weight: 500;\n border-radius: 0.2rem;\n padding: 0.2rem 0.6rem;\n cursor: pointer;\n transition:\n background 0.2s,\n color 0.2s,\n border 0.2s,\n box-shadow 0.2s;\n outline: none;\n border-width: 1px;\n border-style: solid;\n `,\n variant(variant: ButtonVariant, outline?: boolean, ghost?: boolean) {\n const v = buttonVariantColors[variant]\n if (ghost) {\n return css`\n background: transparent;\n color: ${v.bg};\n border-color: transparent;\n &:hover {\n background: ${tokens.colors.purple[100]};\n }\n &:active {\n background: ${tokens.colors.purple[200]};\n }\n `\n }\n if (outline) {\n return css`\n background: transparent;\n color: ${v.bg};\n border-color: ${v.bg};\n &:hover {\n background: ${tokens.colors.purple[100]};\n border-color: ${v.hover};\n }\n &:active {\n background: ${tokens.colors.purple[200]};\n border-color: ${v.active};\n }\n `\n }\n // Default solid button\n return css`\n background: ${v.bg};\n color: ${v.text};\n border-color: ${v.border};\n &:hover {\n background: ${v.hover};\n border-color: ${v.hover};\n }\n &:active {\n background: ${v.active};\n border-color: ${v.active};\n }\n `\n },\n },\n tag: {\n dot: (color: keyof typeof tokens.colors) => css`\n width: ${tokens.size[1.5]};\n height: ${tokens.size[1.5]};\n border-radius: ${tokens.border.radius.full};\n background-color: ${tokens.colors[color][500]};\n `,\n base: css`\n display: flex;\n gap: ${tokens.size[1.5]};\n box-sizing: border-box;\n height: ${tokens.size[6.5]};\n background: ${t(colors.gray[50], colors.darkGray[500])};\n color: ${t(colors.gray[700], colors.gray[300])};\n border-radius: ${tokens.border.radius.sm};\n font-size: ${font.size.sm};\n padding: ${tokens.size[1]};\n padding-left: ${tokens.size[1.5]};\n align-items: center;\n font-weight: ${font.weight.medium};\n border: ${t('1px solid ' + colors.gray[300], '1px solid transparent')};\n user-select: none;\n position: relative;\n &:focus-visible {\n outline-offset: 2px;\n outline: 2px solid ${colors.blue[800]};\n }\n `,\n label: css`\n font-size: ${font.size.xs};\n `,\n count: css`\n font-size: ${font.size.xs};\n padding: 0 5px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${t(colors.gray[500], colors.gray[400])};\n background-color: ${t(colors.gray[200], colors.darkGray[300])};\n border-radius: 2px;\n font-variant-numeric: tabular-nums;\n height: ${tokens.size[4.5]};\n `,\n },\n tree: {\n info: css`\n color: ${t(colors.gray[500], colors.gray[500])};\n font-size: ${font.size.xs};\n margin-right: ${size[1]};\n /* outline: 1px solid ${colors.yellow[400]}; */\n `,\n actionButton: css`\n background-color: transparent;\n color: ${t(colors.gray[500], colors.gray[500])};\n border: none;\n display: inline-flex;\n padding: 0px;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n width: ${size[3]};\n height: ${size[3]};\n position: relative;\n z-index: 1;\n\n &:hover svg {\n color: ${t(colors.gray[600], colors.gray[400])};\n }\n\n &:focus-visible {\n border-radius: ${border.radius.xs};\n outline: 2px solid ${colors.blue[800]};\n outline-offset: 2px;\n }\n `,\n expanderContainer: css`\n position: relative;\n `,\n expander: css`\n position: absolute;\n left: -16px;\n top: 3px;\n & path {\n stroke: ${colors.blue[300]};\n }\n & svg {\n width: ${size[3]};\n height: ${size[3]};\n }\n\n display: inline-flex;\n align-items: center;\n transition: all 0.1s ease;\n /* outline: 1px solid ${colors.blue[400]}; */\n `,\n expandedLine: (hasBorder: boolean) => css`\n display: block;\n padding-left: 0.75rem;\n margin-left: -0.7rem;\n ${hasBorder ? `border-left: 1px solid ${colors.blue[300]};` : ''}\n `,\n collapsible: css`\n cursor: pointer;\n transition: all 0.2s ease;\n &:hover {\n background-color: ${colors.darkGray[700]};\n border-radius: ${tokens.border.radius.sm};\n padding: 0 ${tokens.size[1]};\n }\n `,\n actions: css`\n display: inline-flex;\n margin-left: ${size[2]};\n gap: ${size[2]};\n align-items: center;\n & svg {\n height: 12px;\n width: 12px;\n }\n `,\n valueCollapsed: css`\n color: ${colors.gray[400]};\n `,\n valueFunction: css`\n color: ${colors.cyan[400]};\n `,\n valueString: css`\n color: ${colors.green[400]};\n `,\n valueNumber: css`\n color: ${colors.yellow[400]};\n `,\n valueBoolean: css`\n color: ${colors.pink[400]};\n `,\n valueNull: css`\n color: ${colors.gray[400]};\n font-style: italic;\n `,\n valueKey: css`\n color: ${colors.blue[300]};\n `,\n valueBraces: css`\n color: ${colors.gray[500]};\n `,\n valueContainer: (isRoot: boolean) => css`\n display: block;\n margin-left: ${isRoot ? '0' : '1rem'};\n\n &:not(:hover) .actions {\n display: none;\n }\n\n &:hover .actions {\n display: inline-flex;\n }\n `,\n },\n header: {\n row: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${tokens.size[2]} ${tokens.size[2.5]};\n gap: ${tokens.size[2.5]};\n border-bottom: ${t(colors.gray[300], colors.darkGray[500])} 1px solid;\n align-items: center;\n `,\n logoAndToggleContainer: css`\n display: flex;\n gap: ${tokens.size[3]};\n align-items: center;\n & > button {\n padding: 0;\n background: transparent;\n border: none;\n display: flex;\n gap: ${size[0.5]};\n flex-direction: column;\n }\n `,\n logo: css`\n cursor: pointer;\n display: flex;\n flex-direction: column;\n background-color: transparent;\n border: none;\n gap: ${tokens.size[0.5]};\n padding: 0px;\n &:hover {\n opacity: 0.7;\n }\n &:focus-visible {\n outline-offset: 4px;\n border-radius: ${border.radius.xs};\n outline: 2px solid ${colors.blue[800]};\n }\n `,\n tanstackLogo: css`\n font-size: ${font.size.md};\n font-weight: ${font.weight.bold};\n line-height: ${font.lineHeight.xs};\n white-space: nowrap;\n color: ${t(colors.gray[600], colors.gray[300])};\n `,\n flavorLogo: (flavorLight: string, flavorDark: string) => css`\n font-weight: ${font.weight.semibold};\n font-size: ${font.size.xs};\n background: linear-gradient(to right, ${t(flavorLight, flavorDark)});\n background-clip: text;\n -webkit-background-clip: text;\n line-height: 1;\n -webkit-text-fill-color: transparent;\n white-space: nowrap;\n `,\n },\n section: {\n main: css`\n margin-bottom: 2rem;\n padding: 1.5rem;\n background-color: ${colors.darkGray[800]};\n border: 1px solid ${colors.gray[700]};\n border-radius: 0.75rem;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n `,\n title: css`\n font-size: 1.125rem;\n font-weight: 600;\n color: ${colors.gray[100]};\n margin: 0 0 1rem 0;\n padding-bottom: 0.5rem;\n border-bottom: 1px solid ${colors.gray[700]};\n display: flex;\n align-items: center;\n gap: 0.5rem;\n text-align: left;\n `,\n icon: css`\n height: 20px;\n width: 20px;\n & > svg {\n height: 100%;\n width: 100%;\n }\n color: ${colors.purple[400]};\n `,\n description: css`\n color: ${colors.gray[400]};\n font-size: 0.875rem;\n margin: 0 0 1.5rem 0;\n line-height: 1.5;\n text-align: left;\n `,\n },\n mainPanel: {\n panel: css`\n padding: 0;\n background: ${colors.darkGray[700]};\n overflow-y: auto;\n height: 100%;\n `,\n withPadding: css`\n padding: ${tokens.size[4]};\n `,\n },\n }\n}\n\nexport function useStyles() {\n const [_styles] = createSignal(stylesFactory())\n return _styles\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-styles.js","sources":["../../../src/styles/use-styles.ts"],"sourcesContent":["import * as goober from 'goober'\nimport { createEffect, createSignal } from 'solid-js'\nimport { useTheme } from '../components/theme'\nimport { tokens } from './tokens'\nimport type { ButtonVariant } from '../components/button'\nimport type { Theme } from '../components/theme'\n\nconst buttonVariantColors: Record<\n ButtonVariant,\n { bg: string; hover: string; active: string; text: string; border: string }\n> = {\n primary: {\n bg: tokens.colors.purple[500],\n hover: tokens.colors.purple[600],\n active: tokens.colors.purple[700],\n text: '#fff',\n border: tokens.colors.purple[500],\n },\n secondary: {\n bg: tokens.colors.gray[800],\n hover: tokens.colors.gray[700],\n active: tokens.colors.gray[600],\n text: tokens.colors.gray[100],\n border: tokens.colors.gray[700],\n },\n info: {\n bg: tokens.colors.blue[500],\n hover: tokens.colors.blue[600],\n active: tokens.colors.blue[700],\n text: '#fff',\n border: tokens.colors.blue[500],\n },\n warning: {\n bg: tokens.colors.yellow[500],\n hover: tokens.colors.yellow[600],\n active: tokens.colors.yellow[700],\n text: '#fff',\n border: tokens.colors.yellow[500],\n },\n danger: {\n bg: tokens.colors.red[500],\n hover: tokens.colors.red[600],\n active: tokens.colors.red[700],\n text: '#fff',\n border: tokens.colors.red[500],\n },\n success: {\n bg: tokens.colors.green[500],\n hover: tokens.colors.green[600],\n active: tokens.colors.green[700],\n text: '#fff',\n border: tokens.colors.green[500],\n },\n}\nexport const css = goober.css\nconst stylesFactory = (theme: Theme = 'dark') => {\n const { colors, font, size, alpha, border } = tokens\n const { fontFamily } = font\n\n const t = (light: string, dark: string) => (theme === 'light' ? light : dark)\n\n return {\n logo: css`\n cursor: pointer;\n display: flex;\n flex-direction: column;\n background-color: transparent;\n border: none;\n width: ${size[12]};\n height: ${size[12]};\n font-family: ${fontFamily.sans};\n gap: ${tokens.size[0.5]};\n padding: 0px;\n &:hover {\n opacity: 0.7;\n }\n `,\n\n selectWrapper: css`\n width: 100%;\n max-width: 300px;\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n `,\n selectContainer: css`\n width: 100%;\n `,\n selectLabel: css`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${t(colors.gray[900], colors.gray[100])};\n text-align: left;\n `,\n selectDescription: css`\n font-size: 0.8rem;\n color: ${t(colors.gray[500], colors.gray[400])};\n margin: 0;\n line-height: 1.3;\n text-align: left;\n `,\n select: css`\n appearance: none;\n width: 100%;\n padding: 0.75rem 3rem 0.75rem 0.75rem;\n border-radius: 0.5rem;\n background-color: ${t(colors.gray[50], colors.darkGray[800])};\n color: ${t(colors.gray[900], colors.gray[100])};\n border: 1px solid ${t(colors.gray[300], colors.gray[700])};\n font-size: 0.875rem;\n transition: all 0.2s ease;\n cursor: pointer;\n\n /* Custom arrow */\n background-image: url(\"data:image/svg+xml;utf8,<svg fill='%236b7280' height='20' viewBox='0 0 24 24' width='20' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/></svg>\");\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 1.25rem;\n\n &:hover {\n border-color: ${t(colors.gray[400], colors.gray[600])};\n }\n\n &:focus {\n outline: none;\n border-color: ${colors.purple[400]};\n box-shadow: 0 0 0 3px ${colors.purple[400]}${alpha[20]};\n }\n `,\n inputWrapper: css`\n width: 100%;\n max-width: 300px;\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n `,\n inputContainer: css`\n width: 100%;\n `,\n inputLabel: css`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${t(colors.gray[900], colors.gray[100])};\n text-align: left;\n `,\n inputDescription: css`\n font-size: 0.8rem;\n color: ${t(colors.gray[500], colors.gray[400])};\n margin: 0;\n line-height: 1.3;\n text-align: left;\n `,\n input: css`\n appearance: none;\n width: 100%;\n padding: 0.75rem;\n border-radius: 0.5rem;\n background-color: ${t(colors.gray[50], colors.darkGray[800])};\n color: ${t(colors.gray[900], colors.gray[100])};\n border: 1px solid ${t(colors.gray[300], colors.gray[700])};\n font-size: 0.875rem;\n font-family: ${fontFamily.mono};\n transition: all 0.2s ease;\n\n &::placeholder {\n color: ${t(colors.gray[400], colors.gray[500])};\n }\n\n &:hover {\n border-color: ${t(colors.gray[400], colors.gray[600])};\n }\n\n &:focus {\n outline: none;\n border-color: ${t(colors.purple[500], colors.purple[400])};\n box-shadow: 0 0 0 3px\n ${t(colors.purple[100] + alpha[20], colors.purple[400] + alpha[20])};\n }\n `,\n checkboxWrapper: css`\n display: flex;\n align-items: flex-start;\n gap: 0.75rem;\n cursor: pointer;\n user-select: none;\n padding: 0.5rem;\n border-radius: 0.5rem;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${t(colors.gray[100], colors.darkGray[800])};\n }\n `,\n checkboxContainer: css`\n width: 100%;\n `,\n checkboxLabelContainer: css`\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n flex: 1;\n `,\n checkbox: css`\n appearance: none;\n width: 1.25rem;\n height: 1.25rem;\n border: 2px solid ${t(colors.gray[300], colors.gray[700])};\n border-radius: 0.375rem;\n background-color: ${t(colors.gray[50], colors.darkGray[800])};\n display: grid;\n place-items: center;\n transition: all 0.2s ease;\n flex-shrink: 0;\n margin-top: 0.125rem;\n\n &:hover {\n border-color: ${t(colors.purple[500], colors.purple[400])};\n }\n\n &:checked {\n background-color: ${t(colors.purple[500], colors.purple[700])};\n border-color: ${t(colors.purple[500], colors.purple[700])};\n }\n\n &:checked::after {\n content: '';\n width: 0.4rem;\n height: 0.6rem;\n border: solid ${t('#fff', colors.gray[100])};\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n margin-top: -3px;\n }\n `,\n checkboxLabel: css`\n color: ${t(colors.gray[900], colors.gray[100])};\n font-size: 0.875rem;\n font-weight: 500;\n line-height: 1.4;\n text-align: left;\n `,\n checkboxDescription: css`\n color: ${t(colors.gray[500], colors.gray[400])};\n font-size: 0.8rem;\n line-height: 1.3;\n text-align: left;\n `,\n button: {\n base: css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-family: ${tokens.font.fontFamily.sans};\n font-size: 0.8rem;\n font-weight: 500;\n border-radius: 0.2rem;\n padding: 0.2rem 0.6rem;\n cursor: pointer;\n transition:\n background 0.2s,\n color 0.2s,\n border 0.2s,\n box-shadow 0.2s;\n outline: none;\n border-width: 1px;\n border-style: solid;\n `,\n variant(variant: ButtonVariant, outline?: boolean, ghost?: boolean) {\n const v = buttonVariantColors[variant]\n if (ghost) {\n return css`\n background: transparent;\n color: ${t(v.bg, v.bg)};\n border-color: transparent;\n &:hover {\n background: ${t(colors.purple[100], colors.darkGray[700])};\n }\n &:active {\n background: ${t(colors.purple[200], colors.darkGray[800])};\n }\n `\n }\n if (outline) {\n return css`\n background: transparent;\n color: ${t(v.bg, v.bg)};\n border-color: ${t(v.bg, v.bg)};\n &:hover {\n background: ${t(colors.purple[100], colors.darkGray[700])};\n border-color: ${t(v.hover, v.hover)};\n }\n &:active {\n background: ${t(colors.purple[200], colors.darkGray[800])};\n border-color: ${t(v.active, v.active)};\n }\n `\n }\n // Default solid button\n return css`\n background: ${t(v.bg, v.bg)};\n color: ${t(v.text, v.text)};\n border-color: ${t(v.border, v.border)};\n &:hover {\n background: ${t(v.hover, v.hover)};\n border-color: ${t(v.hover, v.hover)};\n }\n &:active {\n background: ${t(v.active, v.active)};\n border-color: ${t(v.active, v.active)};\n }\n `\n },\n },\n tag: {\n dot: (color: keyof typeof tokens.colors) => css`\n width: ${tokens.size[1.5]};\n height: ${tokens.size[1.5]};\n border-radius: ${tokens.border.radius.full};\n background-color: ${t(\n tokens.colors[color][500],\n tokens.colors[color][500],\n )};\n `,\n base: css`\n display: flex;\n gap: ${tokens.size[1.5]};\n box-sizing: border-box;\n height: ${tokens.size[6.5]};\n background: ${t(colors.gray[50], colors.darkGray[500])};\n color: ${t(colors.gray[700], colors.gray[300])};\n border-radius: ${tokens.border.radius.sm};\n font-size: ${font.size.sm};\n padding: ${tokens.size[1]};\n padding-left: ${tokens.size[1.5]};\n align-items: center;\n font-weight: ${font.weight.medium};\n border: ${t('1px solid ' + colors.gray[300], '1px solid transparent')};\n user-select: none;\n position: relative;\n &:focus-visible {\n outline-offset: 2px;\n outline: 2px solid ${t(colors.blue[700], colors.blue[800])};\n }\n `,\n label: css`\n font-size: ${font.size.xs};\n `,\n count: css`\n font-size: ${font.size.xs};\n padding: 0 5px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${t(colors.gray[500], colors.gray[400])};\n background-color: ${t(colors.gray[200], colors.darkGray[300])};\n border-radius: 2px;\n font-variant-numeric: tabular-nums;\n height: ${tokens.size[4.5]};\n `,\n },\n tree: {\n info: css`\n color: ${t(colors.gray[500], colors.gray[500])};\n font-size: ${font.size.xs};\n margin-right: ${size[1]};\n `,\n actionButton: css`\n background-color: transparent;\n color: ${t(colors.gray[500], colors.gray[500])};\n border: none;\n display: inline-flex;\n padding: 0px;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n width: ${size[3]};\n height: ${size[3]};\n position: relative;\n z-index: 1;\n\n &:hover svg {\n color: ${t(colors.gray[600], colors.gray[400])};\n }\n\n &:focus-visible {\n border-radius: ${border.radius.xs};\n outline: 2px solid ${t(colors.blue[700], colors.blue[800])};\n outline-offset: 2px;\n }\n `,\n expanderContainer: css`\n position: relative;\n `,\n expander: css`\n position: absolute;\n left: -16px;\n top: 3px;\n & path {\n stroke: ${t(colors.blue[400], colors.blue[300])};\n }\n & svg {\n width: ${size[3]};\n height: ${size[3]};\n }\n\n display: inline-flex;\n align-items: center;\n transition: all 0.1s ease;\n `,\n expandedLine: (hasBorder: boolean) => css`\n display: block;\n padding-left: 0.75rem;\n margin-left: -0.7rem;\n ${hasBorder\n ? `border-left: 1px solid ${t(colors.blue[400], colors.blue[300])};`\n : ''}\n `,\n collapsible: css`\n cursor: pointer;\n transition: all 0.2s ease;\n &:hover {\n background-color: ${t(colors.gray[100], colors.darkGray[700])};\n border-radius: ${tokens.border.radius.sm};\n padding: 0 ${tokens.size[1]};\n }\n `,\n actions: css`\n display: inline-flex;\n margin-left: ${size[2]};\n gap: ${size[2]};\n align-items: center;\n & svg {\n height: 12px;\n width: 12px;\n }\n `,\n valueCollapsed: css`\n color: ${t(colors.gray[500], colors.gray[400])};\n `,\n valueFunction: css`\n color: ${t(colors.cyan[500], colors.cyan[400])};\n `,\n valueString: css`\n color: ${t(colors.green[500], colors.green[400])};\n `,\n valueNumber: css`\n color: ${t(colors.yellow[500], colors.yellow[400])};\n `,\n valueBoolean: css`\n color: ${t(colors.pink[500], colors.pink[400])};\n `,\n valueNull: css`\n color: ${t(colors.gray[500], colors.gray[400])};\n font-style: italic;\n `,\n valueKey: css`\n color: ${t(colors.blue[400], colors.blue[300])};\n `,\n valueBraces: css`\n color: ${colors.gray[500]};\n `,\n valueContainer: (isRoot: boolean) => css`\n display: block;\n margin-left: ${isRoot ? '0' : '1rem'};\n\n &:not(:hover) .actions {\n display: none;\n }\n\n &:hover .actions {\n display: inline-flex;\n }\n `,\n },\n header: {\n row: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${tokens.size[2]} ${tokens.size[2.5]};\n gap: ${tokens.size[2.5]};\n border-bottom: ${t(colors.gray[300], colors.darkGray[500])} 1px solid;\n align-items: center;\n `,\n logoAndToggleContainer: css`\n display: flex;\n gap: ${tokens.size[3]};\n align-items: center;\n & > button {\n padding: 0;\n background: transparent;\n border: none;\n display: flex;\n gap: ${size[0.5]};\n flex-direction: column;\n }\n `,\n logo: css`\n cursor: pointer;\n display: flex;\n flex-direction: column;\n background-color: transparent;\n border: none;\n gap: ${tokens.size[0.5]};\n padding: 0px;\n &:hover {\n opacity: 0.7;\n }\n &:focus-visible {\n outline-offset: 4px;\n border-radius: ${border.radius.xs};\n outline: 2px solid ${colors.blue[800]};\n }\n `,\n tanstackLogo: css`\n font-size: ${font.size.md};\n font-weight: ${font.weight.bold};\n line-height: ${font.lineHeight.xs};\n white-space: nowrap;\n color: ${t(colors.gray[700], colors.gray[300])};\n `,\n flavorLogo: (flavorLight: string, flavorDark: string) => css`\n font-weight: ${font.weight.semibold};\n font-size: ${font.size.xs};\n background: linear-gradient(to right, ${t(flavorLight, flavorDark)});\n background-clip: text;\n -webkit-background-clip: text;\n line-height: 1;\n -webkit-text-fill-color: transparent;\n white-space: nowrap;\n `,\n },\n section: {\n main: css`\n margin-bottom: 2rem;\n padding: 1.5rem;\n background-color: ${t(colors.gray[50], colors.darkGray[800])};\n border: 1px solid ${t(colors.gray[300], colors.gray[700])};\n border-radius: 0.75rem;\n box-shadow: ${t(\n '0 1px 3px rgba(0,0,0,0.06)',\n '0 1px 3px rgba(0,0,0,0.18)',\n )};\n `,\n title: css`\n font-size: 1.125rem;\n font-weight: 600;\n color: ${t(colors.gray[900], colors.gray[100])};\n margin: 0 0 1rem 0;\n padding-bottom: 0.5rem;\n border-bottom: 1px solid ${t(colors.gray[300], colors.gray[700])};\n display: flex;\n align-items: center;\n gap: 0.5rem;\n text-align: left;\n `,\n icon: css`\n height: 20px;\n width: 20px;\n & > svg {\n height: 100%;\n width: 100%;\n }\n color: ${t(colors.purple[500], colors.purple[400])};\n `,\n description: css`\n color: ${t(colors.gray[500], colors.gray[400])};\n font-size: 0.875rem;\n margin: 0 0 1.5rem 0;\n line-height: 1.5;\n text-align: left;\n `,\n },\n mainPanel: {\n panel: (withPadding: boolean) => css`\n padding: ${withPadding ? tokens.size[4] : 0};\n background: ${t(colors.gray[50], colors.darkGray[700])};\n overflow-y: auto;\n height: 100%;\n `,\n },\n }\n}\n\nexport function useStyles() {\n const { theme } = useTheme()\n const [styles, setStyles] = createSignal(stylesFactory(theme()))\n createEffect(() => {\n setStyles(stylesFactory(theme()))\n })\n return styles\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/devtools-ui",
3
- "version": "0.3.3",
3
+ "version": "0.3.4",
4
4
  "description": "TanStack Devtools UI is a set of UI components for building devtool panels for your application.",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -15,11 +15,14 @@ export const MainPanel = ({
15
15
  withPadding,
16
16
  }: PanelProps) => {
17
17
  const styles = useStyles()
18
+
18
19
  return (
19
20
  <div
20
- class={clsx(styles().mainPanel.panel, className, classStyles, {
21
- [styles().mainPanel.withPadding]: withPadding,
22
- })}
21
+ class={clsx(
22
+ styles().mainPanel.panel(Boolean(withPadding)),
23
+ className,
24
+ classStyles,
25
+ )}
23
26
  >
24
27
  {children}
25
28
  </div>
@@ -0,0 +1,34 @@
1
+ import { createContext, createEffect, createSignal, useContext } from 'solid-js'
2
+ import type { Accessor, JSX } from 'solid-js'
3
+
4
+ export type Theme = 'light' | 'dark'
5
+
6
+ type ThemeContextValue = {
7
+ theme: Accessor<Theme>
8
+ setTheme: (theme: Theme) => void
9
+ }
10
+ const ThemeContext = createContext<ThemeContextValue | undefined>(undefined)
11
+
12
+ export const ThemeContextProvider = (props: {
13
+ children: JSX.Element
14
+ theme: Theme
15
+ }) => {
16
+ const [theme, setTheme] = createSignal<Theme>(props.theme)
17
+ createEffect(() => {
18
+ setTheme(props.theme)
19
+ })
20
+ return (
21
+ <ThemeContext.Provider value={{ theme, setTheme }}>
22
+ {props.children}
23
+ </ThemeContext.Provider>
24
+ )
25
+ }
26
+
27
+ export function useTheme() {
28
+ const context = useContext(ThemeContext)
29
+ if (!context) {
30
+ throw new Error('useTheme must be used within a ThemeContextProvider')
31
+ }
32
+
33
+ return context
34
+ }
package/src/index.ts CHANGED
@@ -13,3 +13,4 @@ export {
13
13
  SectionIcon,
14
14
  } from './components/section'
15
15
  export { Header, HeaderLogo } from './components/header'
16
+ export { useTheme, ThemeContextProvider } from './components/theme'
@@ -1,7 +1,9 @@
1
1
  import * as goober from 'goober'
2
- import { createSignal } from 'solid-js'
2
+ import { createEffect, createSignal } from 'solid-js'
3
+ import { useTheme } from '../components/theme'
3
4
  import { tokens } from './tokens'
4
5
  import type { ButtonVariant } from '../components/button'
6
+ import type { Theme } from '../components/theme'
5
7
 
6
8
  const buttonVariantColors: Record<
7
9
  ButtonVariant,
@@ -51,7 +53,7 @@ const buttonVariantColors: Record<
51
53
  },
52
54
  }
53
55
  export const css = goober.css
54
- const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
56
+ const stylesFactory = (theme: Theme = 'dark') => {
55
57
  const { colors, font, size, alpha, border } = tokens
56
58
  const { fontFamily } = font
57
59
 
@@ -87,12 +89,12 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
87
89
  selectLabel: css`
88
90
  font-size: 0.875rem;
89
91
  font-weight: 500;
90
- color: ${colors.gray[100]};
92
+ color: ${t(colors.gray[900], colors.gray[100])};
91
93
  text-align: left;
92
94
  `,
93
95
  selectDescription: css`
94
96
  font-size: 0.8rem;
95
- color: ${colors.gray[400]};
97
+ color: ${t(colors.gray[500], colors.gray[400])};
96
98
  margin: 0;
97
99
  line-height: 1.3;
98
100
  text-align: left;
@@ -102,9 +104,9 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
102
104
  width: 100%;
103
105
  padding: 0.75rem 3rem 0.75rem 0.75rem;
104
106
  border-radius: 0.5rem;
105
- background-color: ${colors.darkGray[800]};
106
- color: ${colors.gray[100]};
107
- border: 1px solid ${colors.gray[700]};
107
+ background-color: ${t(colors.gray[50], colors.darkGray[800])};
108
+ color: ${t(colors.gray[900], colors.gray[100])};
109
+ border: 1px solid ${t(colors.gray[300], colors.gray[700])};
108
110
  font-size: 0.875rem;
109
111
  transition: all 0.2s ease;
110
112
  cursor: pointer;
@@ -116,7 +118,7 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
116
118
  background-size: 1.25rem;
117
119
 
118
120
  &:hover {
119
- border-color: ${colors.gray[600]};
121
+ border-color: ${t(colors.gray[400], colors.gray[600])};
120
122
  }
121
123
 
122
124
  &:focus {
@@ -138,12 +140,12 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
138
140
  inputLabel: css`
139
141
  font-size: 0.875rem;
140
142
  font-weight: 500;
141
- color: ${colors.gray[100]};
143
+ color: ${t(colors.gray[900], colors.gray[100])};
142
144
  text-align: left;
143
145
  `,
144
146
  inputDescription: css`
145
147
  font-size: 0.8rem;
146
- color: ${colors.gray[400]};
148
+ color: ${t(colors.gray[500], colors.gray[400])};
147
149
  margin: 0;
148
150
  line-height: 1.3;
149
151
  text-align: left;
@@ -153,25 +155,26 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
153
155
  width: 100%;
154
156
  padding: 0.75rem;
155
157
  border-radius: 0.5rem;
156
- background-color: ${colors.darkGray[800]};
157
- color: ${colors.gray[100]};
158
- border: 1px solid ${colors.gray[700]};
158
+ background-color: ${t(colors.gray[50], colors.darkGray[800])};
159
+ color: ${t(colors.gray[900], colors.gray[100])};
160
+ border: 1px solid ${t(colors.gray[300], colors.gray[700])};
159
161
  font-size: 0.875rem;
160
162
  font-family: ${fontFamily.mono};
161
163
  transition: all 0.2s ease;
162
164
 
163
165
  &::placeholder {
164
- color: ${colors.gray[500]};
166
+ color: ${t(colors.gray[400], colors.gray[500])};
165
167
  }
166
168
 
167
169
  &:hover {
168
- border-color: ${colors.gray[600]};
170
+ border-color: ${t(colors.gray[400], colors.gray[600])};
169
171
  }
170
172
 
171
173
  &:focus {
172
174
  outline: none;
173
- border-color: ${colors.purple[400]};
174
- box-shadow: 0 0 0 3px ${colors.purple[400]}${alpha[20]};
175
+ border-color: ${t(colors.purple[500], colors.purple[400])};
176
+ box-shadow: 0 0 0 3px
177
+ ${t(colors.purple[100] + alpha[20], colors.purple[400] + alpha[20])};
175
178
  }
176
179
  `,
177
180
  checkboxWrapper: css`
@@ -185,7 +188,7 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
185
188
  transition: background-color 0.2s ease;
186
189
 
187
190
  &:hover {
188
- background-color: ${colors.darkGray[800]};
191
+ background-color: ${t(colors.gray[100], colors.darkGray[800])};
189
192
  }
190
193
  `,
191
194
  checkboxContainer: css`
@@ -201,9 +204,9 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
201
204
  appearance: none;
202
205
  width: 1.25rem;
203
206
  height: 1.25rem;
204
- border: 2px solid ${colors.gray[700]};
207
+ border: 2px solid ${t(colors.gray[300], colors.gray[700])};
205
208
  border-radius: 0.375rem;
206
- background-color: ${colors.darkGray[800]};
209
+ background-color: ${t(colors.gray[50], colors.darkGray[800])};
207
210
  display: grid;
208
211
  place-items: center;
209
212
  transition: all 0.2s ease;
@@ -211,33 +214,33 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
211
214
  margin-top: 0.125rem;
212
215
 
213
216
  &:hover {
214
- border-color: ${colors.purple[400]};
217
+ border-color: ${t(colors.purple[500], colors.purple[400])};
215
218
  }
216
219
 
217
220
  &:checked {
218
- background-color: ${colors.purple[500]};
219
- border-color: ${colors.purple[500]};
221
+ background-color: ${t(colors.purple[500], colors.purple[700])};
222
+ border-color: ${t(colors.purple[500], colors.purple[700])};
220
223
  }
221
224
 
222
225
  &:checked::after {
223
226
  content: '';
224
227
  width: 0.4rem;
225
228
  height: 0.6rem;
226
- border: solid white;
229
+ border: solid ${t('#fff', colors.gray[100])};
227
230
  border-width: 0 2px 2px 0;
228
231
  transform: rotate(45deg);
229
232
  margin-top: -3px;
230
233
  }
231
234
  `,
232
235
  checkboxLabel: css`
233
- color: ${colors.gray[100]};
236
+ color: ${t(colors.gray[900], colors.gray[100])};
234
237
  font-size: 0.875rem;
235
238
  font-weight: 500;
236
239
  line-height: 1.4;
237
240
  text-align: left;
238
241
  `,
239
242
  checkboxDescription: css`
240
- color: ${colors.gray[400]};
243
+ color: ${t(colors.gray[500], colors.gray[400])};
241
244
  font-size: 0.8rem;
242
245
  line-height: 1.3;
243
246
  text-align: left;
@@ -267,43 +270,43 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
267
270
  if (ghost) {
268
271
  return css`
269
272
  background: transparent;
270
- color: ${v.bg};
273
+ color: ${t(v.bg, v.bg)};
271
274
  border-color: transparent;
272
275
  &:hover {
273
- background: ${tokens.colors.purple[100]};
276
+ background: ${t(colors.purple[100], colors.darkGray[700])};
274
277
  }
275
278
  &:active {
276
- background: ${tokens.colors.purple[200]};
279
+ background: ${t(colors.purple[200], colors.darkGray[800])};
277
280
  }
278
281
  `
279
282
  }
280
283
  if (outline) {
281
284
  return css`
282
285
  background: transparent;
283
- color: ${v.bg};
284
- border-color: ${v.bg};
286
+ color: ${t(v.bg, v.bg)};
287
+ border-color: ${t(v.bg, v.bg)};
285
288
  &:hover {
286
- background: ${tokens.colors.purple[100]};
287
- border-color: ${v.hover};
289
+ background: ${t(colors.purple[100], colors.darkGray[700])};
290
+ border-color: ${t(v.hover, v.hover)};
288
291
  }
289
292
  &:active {
290
- background: ${tokens.colors.purple[200]};
291
- border-color: ${v.active};
293
+ background: ${t(colors.purple[200], colors.darkGray[800])};
294
+ border-color: ${t(v.active, v.active)};
292
295
  }
293
296
  `
294
297
  }
295
298
  // Default solid button
296
299
  return css`
297
- background: ${v.bg};
298
- color: ${v.text};
299
- border-color: ${v.border};
300
+ background: ${t(v.bg, v.bg)};
301
+ color: ${t(v.text, v.text)};
302
+ border-color: ${t(v.border, v.border)};
300
303
  &:hover {
301
- background: ${v.hover};
302
- border-color: ${v.hover};
304
+ background: ${t(v.hover, v.hover)};
305
+ border-color: ${t(v.hover, v.hover)};
303
306
  }
304
307
  &:active {
305
- background: ${v.active};
306
- border-color: ${v.active};
308
+ background: ${t(v.active, v.active)};
309
+ border-color: ${t(v.active, v.active)};
307
310
  }
308
311
  `
309
312
  },
@@ -313,7 +316,10 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
313
316
  width: ${tokens.size[1.5]};
314
317
  height: ${tokens.size[1.5]};
315
318
  border-radius: ${tokens.border.radius.full};
316
- background-color: ${tokens.colors[color][500]};
319
+ background-color: ${t(
320
+ tokens.colors[color][500],
321
+ tokens.colors[color][500],
322
+ )};
317
323
  `,
318
324
  base: css`
319
325
  display: flex;
@@ -333,7 +339,7 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
333
339
  position: relative;
334
340
  &:focus-visible {
335
341
  outline-offset: 2px;
336
- outline: 2px solid ${colors.blue[800]};
342
+ outline: 2px solid ${t(colors.blue[700], colors.blue[800])};
337
343
  }
338
344
  `,
339
345
  label: css`
@@ -357,7 +363,6 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
357
363
  color: ${t(colors.gray[500], colors.gray[500])};
358
364
  font-size: ${font.size.xs};
359
365
  margin-right: ${size[1]};
360
- /* outline: 1px solid ${colors.yellow[400]}; */
361
366
  `,
362
367
  actionButton: css`
363
368
  background-color: transparent;
@@ -379,7 +384,7 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
379
384
 
380
385
  &:focus-visible {
381
386
  border-radius: ${border.radius.xs};
382
- outline: 2px solid ${colors.blue[800]};
387
+ outline: 2px solid ${t(colors.blue[700], colors.blue[800])};
383
388
  outline-offset: 2px;
384
389
  }
385
390
  `,
@@ -391,7 +396,7 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
391
396
  left: -16px;
392
397
  top: 3px;
393
398
  & path {
394
- stroke: ${colors.blue[300]};
399
+ stroke: ${t(colors.blue[400], colors.blue[300])};
395
400
  }
396
401
  & svg {
397
402
  width: ${size[3]};
@@ -401,19 +406,20 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
401
406
  display: inline-flex;
402
407
  align-items: center;
403
408
  transition: all 0.1s ease;
404
- /* outline: 1px solid ${colors.blue[400]}; */
405
409
  `,
406
410
  expandedLine: (hasBorder: boolean) => css`
407
411
  display: block;
408
412
  padding-left: 0.75rem;
409
413
  margin-left: -0.7rem;
410
- ${hasBorder ? `border-left: 1px solid ${colors.blue[300]};` : ''}
414
+ ${hasBorder
415
+ ? `border-left: 1px solid ${t(colors.blue[400], colors.blue[300])};`
416
+ : ''}
411
417
  `,
412
418
  collapsible: css`
413
419
  cursor: pointer;
414
420
  transition: all 0.2s ease;
415
421
  &:hover {
416
- background-color: ${colors.darkGray[700]};
422
+ background-color: ${t(colors.gray[100], colors.darkGray[700])};
417
423
  border-radius: ${tokens.border.radius.sm};
418
424
  padding: 0 ${tokens.size[1]};
419
425
  }
@@ -429,26 +435,26 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
429
435
  }
430
436
  `,
431
437
  valueCollapsed: css`
432
- color: ${colors.gray[400]};
438
+ color: ${t(colors.gray[500], colors.gray[400])};
433
439
  `,
434
440
  valueFunction: css`
435
- color: ${colors.cyan[400]};
441
+ color: ${t(colors.cyan[500], colors.cyan[400])};
436
442
  `,
437
443
  valueString: css`
438
- color: ${colors.green[400]};
444
+ color: ${t(colors.green[500], colors.green[400])};
439
445
  `,
440
446
  valueNumber: css`
441
- color: ${colors.yellow[400]};
447
+ color: ${t(colors.yellow[500], colors.yellow[400])};
442
448
  `,
443
449
  valueBoolean: css`
444
- color: ${colors.pink[400]};
450
+ color: ${t(colors.pink[500], colors.pink[400])};
445
451
  `,
446
452
  valueNull: css`
447
- color: ${colors.gray[400]};
453
+ color: ${t(colors.gray[500], colors.gray[400])};
448
454
  font-style: italic;
449
455
  `,
450
456
  valueKey: css`
451
- color: ${colors.blue[300]};
457
+ color: ${t(colors.blue[400], colors.blue[300])};
452
458
  `,
453
459
  valueBraces: css`
454
460
  color: ${colors.gray[500]};
@@ -511,7 +517,7 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
511
517
  font-weight: ${font.weight.bold};
512
518
  line-height: ${font.lineHeight.xs};
513
519
  white-space: nowrap;
514
- color: ${t(colors.gray[600], colors.gray[300])};
520
+ color: ${t(colors.gray[700], colors.gray[300])};
515
521
  `,
516
522
  flavorLogo: (flavorLight: string, flavorDark: string) => css`
517
523
  font-weight: ${font.weight.semibold};
@@ -528,18 +534,21 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
528
534
  main: css`
529
535
  margin-bottom: 2rem;
530
536
  padding: 1.5rem;
531
- background-color: ${colors.darkGray[800]};
532
- border: 1px solid ${colors.gray[700]};
537
+ background-color: ${t(colors.gray[50], colors.darkGray[800])};
538
+ border: 1px solid ${t(colors.gray[300], colors.gray[700])};
533
539
  border-radius: 0.75rem;
534
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
540
+ box-shadow: ${t(
541
+ '0 1px 3px rgba(0,0,0,0.06)',
542
+ '0 1px 3px rgba(0,0,0,0.18)',
543
+ )};
535
544
  `,
536
545
  title: css`
537
546
  font-size: 1.125rem;
538
547
  font-weight: 600;
539
- color: ${colors.gray[100]};
548
+ color: ${t(colors.gray[900], colors.gray[100])};
540
549
  margin: 0 0 1rem 0;
541
550
  padding-bottom: 0.5rem;
542
- border-bottom: 1px solid ${colors.gray[700]};
551
+ border-bottom: 1px solid ${t(colors.gray[300], colors.gray[700])};
543
552
  display: flex;
544
553
  align-items: center;
545
554
  gap: 0.5rem;
@@ -552,10 +561,10 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
552
561
  height: 100%;
553
562
  width: 100%;
554
563
  }
555
- color: ${colors.purple[400]};
564
+ color: ${t(colors.purple[500], colors.purple[400])};
556
565
  `,
557
566
  description: css`
558
- color: ${colors.gray[400]};
567
+ color: ${t(colors.gray[500], colors.gray[400])};
559
568
  font-size: 0.875rem;
560
569
  margin: 0 0 1.5rem 0;
561
570
  line-height: 1.5;
@@ -563,20 +572,21 @@ const stylesFactory = (theme: 'light' | 'dark' = 'dark') => {
563
572
  `,
564
573
  },
565
574
  mainPanel: {
566
- panel: css`
567
- padding: 0;
568
- background: ${colors.darkGray[700]};
575
+ panel: (withPadding: boolean) => css`
576
+ padding: ${withPadding ? tokens.size[4] : 0};
577
+ background: ${t(colors.gray[50], colors.darkGray[700])};
569
578
  overflow-y: auto;
570
579
  height: 100%;
571
580
  `,
572
- withPadding: css`
573
- padding: ${tokens.size[4]};
574
- `,
575
581
  },
576
582
  }
577
583
  }
578
584
 
579
585
  export function useStyles() {
580
- const [_styles] = createSignal(stylesFactory())
581
- return _styles
586
+ const { theme } = useTheme()
587
+ const [styles, setStyles] = createSignal(stylesFactory(theme()))
588
+ createEffect(() => {
589
+ setStyles(stylesFactory(theme()))
590
+ })
591
+ return styles
582
592
  }