@tanstack/pacer-devtools 0.1.0

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.
Files changed (93) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/PacerContextProvider.cjs +156 -0
  3. package/dist/cjs/PacerContextProvider.cjs.map +1 -0
  4. package/dist/cjs/PacerContextProvider.d.cts +19 -0
  5. package/dist/cjs/PacerDevtools.cjs +13 -0
  6. package/dist/cjs/PacerDevtools.cjs.map +1 -0
  7. package/dist/cjs/PacerDevtools.d.cts +1 -0
  8. package/dist/cjs/components/ActionButtons.cjs +157 -0
  9. package/dist/cjs/components/ActionButtons.cjs.map +1 -0
  10. package/dist/cjs/components/ActionButtons.d.cts +6 -0
  11. package/dist/cjs/components/DetailsPanel.cjs +80 -0
  12. package/dist/cjs/components/DetailsPanel.cjs.map +1 -0
  13. package/dist/cjs/components/DetailsPanel.d.cts +11 -0
  14. package/dist/cjs/components/Shell.cjs +102 -0
  15. package/dist/cjs/components/Shell.cjs.map +1 -0
  16. package/dist/cjs/components/Shell.d.cts +1 -0
  17. package/dist/cjs/components/StateHeader.cjs +95 -0
  18. package/dist/cjs/components/StateHeader.cjs.map +1 -0
  19. package/dist/cjs/components/StateHeader.d.cts +11 -0
  20. package/dist/cjs/components/UtilList.cjs +70 -0
  21. package/dist/cjs/components/UtilList.cjs.map +1 -0
  22. package/dist/cjs/components/UtilList.d.cts +8 -0
  23. package/dist/cjs/components/util-groups.cjs +40 -0
  24. package/dist/cjs/components/util-groups.cjs.map +1 -0
  25. package/dist/cjs/components/util-groups.d.cts +8 -0
  26. package/dist/cjs/core.cjs +43 -0
  27. package/dist/cjs/core.cjs.map +1 -0
  28. package/dist/cjs/core.d.cts +8 -0
  29. package/dist/cjs/index.cjs +15 -0
  30. package/dist/cjs/index.cjs.map +1 -0
  31. package/dist/cjs/index.d.cts +3 -0
  32. package/dist/cjs/production.cjs +7 -0
  33. package/dist/cjs/production.cjs.map +1 -0
  34. package/dist/cjs/production.d.cts +3 -0
  35. package/dist/cjs/styles/tokens.cjs +90 -0
  36. package/dist/cjs/styles/tokens.cjs.map +1 -0
  37. package/dist/cjs/styles/tokens.d.cts +298 -0
  38. package/dist/cjs/styles/use-styles.cjs +397 -0
  39. package/dist/cjs/styles/use-styles.cjs.map +1 -0
  40. package/dist/cjs/styles/use-styles.d.cts +42 -0
  41. package/dist/esm/PacerContextProvider.d.ts +19 -0
  42. package/dist/esm/PacerContextProvider.js +156 -0
  43. package/dist/esm/PacerContextProvider.js.map +1 -0
  44. package/dist/esm/PacerDevtools.d.ts +1 -0
  45. package/dist/esm/PacerDevtools.js +14 -0
  46. package/dist/esm/PacerDevtools.js.map +1 -0
  47. package/dist/esm/components/ActionButtons.d.ts +6 -0
  48. package/dist/esm/components/ActionButtons.js +157 -0
  49. package/dist/esm/components/ActionButtons.js.map +1 -0
  50. package/dist/esm/components/DetailsPanel.d.ts +11 -0
  51. package/dist/esm/components/DetailsPanel.js +80 -0
  52. package/dist/esm/components/DetailsPanel.js.map +1 -0
  53. package/dist/esm/components/Shell.d.ts +1 -0
  54. package/dist/esm/components/Shell.js +102 -0
  55. package/dist/esm/components/Shell.js.map +1 -0
  56. package/dist/esm/components/StateHeader.d.ts +11 -0
  57. package/dist/esm/components/StateHeader.js +95 -0
  58. package/dist/esm/components/StateHeader.js.map +1 -0
  59. package/dist/esm/components/UtilList.d.ts +8 -0
  60. package/dist/esm/components/UtilList.js +70 -0
  61. package/dist/esm/components/UtilList.js.map +1 -0
  62. package/dist/esm/components/util-groups.d.ts +8 -0
  63. package/dist/esm/components/util-groups.js +40 -0
  64. package/dist/esm/components/util-groups.js.map +1 -0
  65. package/dist/esm/core.d.ts +8 -0
  66. package/dist/esm/core.js +42 -0
  67. package/dist/esm/core.js.map +1 -0
  68. package/dist/esm/index.d.ts +3 -0
  69. package/dist/esm/index.js +15 -0
  70. package/dist/esm/index.js.map +1 -0
  71. package/dist/esm/production.d.ts +3 -0
  72. package/dist/esm/production.js +7 -0
  73. package/dist/esm/production.js.map +1 -0
  74. package/dist/esm/styles/tokens.d.ts +298 -0
  75. package/dist/esm/styles/tokens.js +90 -0
  76. package/dist/esm/styles/tokens.js.map +1 -0
  77. package/dist/esm/styles/use-styles.d.ts +42 -0
  78. package/dist/esm/styles/use-styles.js +380 -0
  79. package/dist/esm/styles/use-styles.js.map +1 -0
  80. package/package.json +84 -0
  81. package/src/PacerContextProvider.tsx +203 -0
  82. package/src/PacerDevtools.tsx +10 -0
  83. package/src/components/ActionButtons.tsx +143 -0
  84. package/src/components/DetailsPanel.tsx +61 -0
  85. package/src/components/Shell.tsx +102 -0
  86. package/src/components/StateHeader.tsx +106 -0
  87. package/src/components/UtilList.tsx +62 -0
  88. package/src/components/util-groups.ts +54 -0
  89. package/src/core.tsx +41 -0
  90. package/src/index.ts +17 -0
  91. package/src/production.ts +7 -0
  92. package/src/styles/tokens.ts +305 -0
  93. package/src/styles/use-styles.ts +379 -0
@@ -0,0 +1,305 @@
1
+ export const tokens = {
2
+ colors: {
3
+ inherit: 'inherit',
4
+ current: 'currentColor',
5
+ transparent: 'transparent',
6
+ black: '#000000',
7
+ white: '#ffffff',
8
+ neutral: {
9
+ 50: '#f9fafb',
10
+ 100: '#f2f4f7',
11
+ 200: '#eaecf0',
12
+ 300: '#d0d5dd',
13
+ 400: '#98a2b3',
14
+ 500: '#667085',
15
+ 600: '#475467',
16
+ 700: '#344054',
17
+ 800: '#1d2939',
18
+ 900: '#101828',
19
+ },
20
+ darkGray: {
21
+ 50: '#525c7a',
22
+ 100: '#49536e',
23
+ 200: '#414962',
24
+ 300: '#394056',
25
+ 400: '#313749',
26
+ 500: '#292e3d',
27
+ 600: '#212530',
28
+ 700: '#191c24',
29
+ 800: '#111318',
30
+ 900: '#0b0d10',
31
+ },
32
+ gray: {
33
+ 50: '#f9fafb',
34
+ 100: '#f2f4f7',
35
+ 200: '#eaecf0',
36
+ 300: '#d0d5dd',
37
+ 400: '#98a2b3',
38
+ 500: '#667085',
39
+ 600: '#475467',
40
+ 700: '#344054',
41
+ 800: '#1d2939',
42
+ 900: '#101828',
43
+ },
44
+ blue: {
45
+ 25: '#F5FAFF',
46
+ 50: '#EFF8FF',
47
+ 100: '#D1E9FF',
48
+ 200: '#B2DDFF',
49
+ 300: '#84CAFF',
50
+ 400: '#53B1FD',
51
+ 500: '#2E90FA',
52
+ 600: '#1570EF',
53
+ 700: '#175CD3',
54
+ 800: '#1849A9',
55
+ 900: '#194185',
56
+ },
57
+ green: {
58
+ 25: '#F6FEF9',
59
+ 50: '#ECFDF3',
60
+ 100: '#D1FADF',
61
+ 200: '#A6F4C5',
62
+ 300: '#6CE9A6',
63
+ 400: '#32D583',
64
+ 500: '#12B76A',
65
+ 600: '#039855',
66
+ 700: '#027A48',
67
+ 800: '#05603A',
68
+ 900: '#054F31',
69
+ },
70
+ red: {
71
+ 50: '#fef2f2',
72
+ 100: '#fee2e2',
73
+ 200: '#fecaca',
74
+ 300: '#fca5a5',
75
+ 400: '#f87171',
76
+ 500: '#ef4444',
77
+ 600: '#dc2626',
78
+ 700: '#b91c1c',
79
+ 800: '#991b1b',
80
+ 900: '#7f1d1d',
81
+ 950: '#450a0a',
82
+ },
83
+ yellow: {
84
+ 25: '#FFFCF5',
85
+ 50: '#FFFAEB',
86
+ 100: '#FEF0C7',
87
+ 200: '#FEDF89',
88
+ 300: '#FEC84B',
89
+ 400: '#FDB022',
90
+ 500: '#F79009',
91
+ 600: '#DC6803',
92
+ 700: '#B54708',
93
+ 800: '#93370D',
94
+ 900: '#7A2E0E',
95
+ },
96
+ purple: {
97
+ 25: '#FAFAFF',
98
+ 50: '#F4F3FF',
99
+ 100: '#EBE9FE',
100
+ 200: '#D9D6FE',
101
+ 300: '#BDB4FE',
102
+ 400: '#9B8AFB',
103
+ 500: '#7A5AF8',
104
+ 600: '#6938EF',
105
+ 700: '#5925DC',
106
+ 800: '#4A1FB8',
107
+ 900: '#3E1C96',
108
+ },
109
+ teal: {
110
+ 25: '#F6FEFC',
111
+ 50: '#F0FDF9',
112
+ 100: '#CCFBEF',
113
+ 200: '#99F6E0',
114
+ 300: '#5FE9D0',
115
+ 400: '#2ED3B7',
116
+ 500: '#15B79E',
117
+ 600: '#0E9384',
118
+ 700: '#107569',
119
+ 800: '#125D56',
120
+ 900: '#134E48',
121
+ },
122
+ pink: {
123
+ 25: '#fdf2f8',
124
+ 50: '#fce7f3',
125
+ 100: '#fbcfe8',
126
+ 200: '#f9a8d4',
127
+ 300: '#f472b6',
128
+ 400: '#ec4899',
129
+ 500: '#db2777',
130
+ 600: '#be185d',
131
+ 700: '#9d174d',
132
+ 800: '#831843',
133
+ 900: '#500724',
134
+ },
135
+ cyan: {
136
+ 25: '#ecfeff',
137
+ 50: '#cffafe',
138
+ 100: '#a5f3fc',
139
+ 200: '#67e8f9',
140
+ 300: '#22d3ee',
141
+ 400: '#06b6d4',
142
+ 500: '#0891b2',
143
+ 600: '#0e7490',
144
+ 700: '#155e75',
145
+ 800: '#164e63',
146
+ 900: '#083344',
147
+ },
148
+ },
149
+ alpha: {
150
+ 100: 'ff',
151
+ 90: 'e5',
152
+ 80: 'cc',
153
+ 70: 'b3',
154
+ 60: '99',
155
+ 50: '80',
156
+ 40: '66',
157
+ 30: '4d',
158
+ 20: '33',
159
+ 10: '1a',
160
+ 0: '00',
161
+ },
162
+ font: {
163
+ size: {
164
+ '2xs': 'calc(var(--tsrd-font-size) * 0.625)',
165
+ xs: 'calc(var(--tsrd-font-size) * 0.75)',
166
+ sm: 'calc(var(--tsrd-font-size) * 0.875)',
167
+ md: 'var(--tsrd-font-size)',
168
+ lg: 'calc(var(--tsrd-font-size) * 1.125)',
169
+ xl: 'calc(var(--tsrd-font-size) * 1.25)',
170
+ '2xl': 'calc(var(--tsrd-font-size) * 1.5)',
171
+ '3xl': 'calc(var(--tsrd-font-size) * 1.875)',
172
+ '4xl': 'calc(var(--tsrd-font-size) * 2.25)',
173
+ '5xl': 'calc(var(--tsrd-font-size) * 3)',
174
+ '6xl': 'calc(var(--tsrd-font-size) * 3.75)',
175
+ '7xl': 'calc(var(--tsrd-font-size) * 4.5)',
176
+ '8xl': 'calc(var(--tsrd-font-size) * 6)',
177
+ '9xl': 'calc(var(--tsrd-font-size) * 8)',
178
+ },
179
+ lineHeight: {
180
+ '3xs': 'calc(var(--tsrd-font-size) * 0.75)',
181
+ '2xs': 'calc(var(--tsrd-font-size) * 0.875)',
182
+ xs: 'calc(var(--tsrd-font-size) * 1)',
183
+ sm: 'calc(var(--tsrd-font-size) * 1.25)',
184
+ md: 'calc(var(--tsrd-font-size) * 1.5)',
185
+ lg: 'calc(var(--tsrd-font-size) * 1.75)',
186
+ xl: 'calc(var(--tsrd-font-size) * 2)',
187
+ '2xl': 'calc(var(--tsrd-font-size) * 2.25)',
188
+ '3xl': 'calc(var(--tsrd-font-size) * 2.5)',
189
+ '4xl': 'calc(var(--tsrd-font-size) * 2.75)',
190
+ '5xl': 'calc(var(--tsrd-font-size) * 3)',
191
+ '6xl': 'calc(var(--tsrd-font-size) * 3.25)',
192
+ '7xl': 'calc(var(--tsrd-font-size) * 3.5)',
193
+ '8xl': 'calc(var(--tsrd-font-size) * 3.75)',
194
+ '9xl': 'calc(var(--tsrd-font-size) * 4)',
195
+ },
196
+ weight: {
197
+ thin: '100',
198
+ extralight: '200',
199
+ light: '300',
200
+ normal: '400',
201
+ medium: '500',
202
+ semibold: '600',
203
+ bold: '700',
204
+ extrabold: '800',
205
+ black: '900',
206
+ },
207
+ fontFamily: {
208
+ sans: 'ui-sans-serif, Inter, system-ui, sans-serif, sans-serif',
209
+ mono: `ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace`,
210
+ },
211
+ },
212
+ breakpoints: {
213
+ xs: '320px',
214
+ sm: '640px',
215
+ md: '768px',
216
+ lg: '1024px',
217
+ xl: '1280px',
218
+ '2xl': '1536px',
219
+ },
220
+ border: {
221
+ radius: {
222
+ none: '0px',
223
+ xs: 'calc(var(--tsrd-font-size) * 0.125)',
224
+ sm: 'calc(var(--tsrd-font-size) * 0.25)',
225
+ md: 'calc(var(--tsrd-font-size) * 0.375)',
226
+ lg: 'calc(var(--tsrd-font-size) * 0.5)',
227
+ xl: 'calc(var(--tsrd-font-size) * 0.75)',
228
+ '2xl': 'calc(var(--tsrd-font-size) * 1)',
229
+ '3xl': 'calc(var(--tsrd-font-size) * 1.5)',
230
+ full: '9999px',
231
+ },
232
+ },
233
+ size: {
234
+ 0: '0px',
235
+ 0.25: 'calc(var(--tsrd-font-size) * 0.0625)',
236
+ 0.5: 'calc(var(--tsrd-font-size) * 0.125)',
237
+ 1: 'calc(var(--tsrd-font-size) * 0.25)',
238
+ 1.5: 'calc(var(--tsrd-font-size) * 0.375)',
239
+ 2: 'calc(var(--tsrd-font-size) * 0.5)',
240
+ 2.5: 'calc(var(--tsrd-font-size) * 0.625)',
241
+ 3: 'calc(var(--tsrd-font-size) * 0.75)',
242
+ 3.5: 'calc(var(--tsrd-font-size) * 0.875)',
243
+ 4: 'calc(var(--tsrd-font-size) * 1)',
244
+ 4.5: 'calc(var(--tsrd-font-size) * 1.125)',
245
+ 5: 'calc(var(--tsrd-font-size) * 1.25)',
246
+ 5.5: 'calc(var(--tsrd-font-size) * 1.375)',
247
+ 6: 'calc(var(--tsrd-font-size) * 1.5)',
248
+ 6.5: 'calc(var(--tsrd-font-size) * 1.625)',
249
+ 7: 'calc(var(--tsrd-font-size) * 1.75)',
250
+ 8: 'calc(var(--tsrd-font-size) * 2)',
251
+ 9: 'calc(var(--tsrd-font-size) * 2.25)',
252
+ 10: 'calc(var(--tsrd-font-size) * 2.5)',
253
+ 11: 'calc(var(--tsrd-font-size) * 2.75)',
254
+ 12: 'calc(var(--tsrd-font-size) * 3)',
255
+ 14: 'calc(var(--tsrd-font-size) * 3.5)',
256
+ 16: 'calc(var(--tsrd-font-size) * 4)',
257
+ 20: 'calc(var(--tsrd-font-size) * 5)',
258
+ 24: 'calc(var(--tsrd-font-size) * 6)',
259
+ 28: 'calc(var(--tsrd-font-size) * 7)',
260
+ 32: 'calc(var(--tsrd-font-size) * 8)',
261
+ 36: 'calc(var(--tsrd-font-size) * 9)',
262
+ 40: 'calc(var(--tsrd-font-size) * 10)',
263
+ 44: 'calc(var(--tsrd-font-size) * 11)',
264
+ 48: 'calc(var(--tsrd-font-size) * 12)',
265
+ 52: 'calc(var(--tsrd-font-size) * 13)',
266
+ 56: 'calc(var(--tsrd-font-size) * 14)',
267
+ 60: 'calc(var(--tsrd-font-size) * 15)',
268
+ 64: 'calc(var(--tsrd-font-size) * 16)',
269
+ 72: 'calc(var(--tsrd-font-size) * 18)',
270
+ 80: 'calc(var(--tsrd-font-size) * 20)',
271
+ 96: 'calc(var(--tsrd-font-size) * 24)',
272
+ },
273
+ shadow: {
274
+ xs: (_: string = 'rgb(0 0 0 / 0.1)') =>
275
+ `0 1px 2px 0 rgb(0 0 0 / 0.05)` as const,
276
+ sm: (color: string = 'rgb(0 0 0 / 0.1)') =>
277
+ `0 1px 3px 0 ${color}, 0 1px 2px -1px ${color}` as const,
278
+ md: (color: string = 'rgb(0 0 0 / 0.1)') =>
279
+ `0 4px 6px -1px ${color}, 0 2px 4px -2px ${color}` as const,
280
+ lg: (color: string = 'rgb(0 0 0 / 0.1)') =>
281
+ `0 10px 15px -3px ${color}, 0 4px 6px -4px ${color}` as const,
282
+ xl: (color: string = 'rgb(0 0 0 / 0.1)') =>
283
+ `0 20px 25px -5px ${color}, 0 8px 10px -6px ${color}` as const,
284
+ '2xl': (color: string = 'rgb(0 0 0 / 0.25)') =>
285
+ `0 25px 50px -12px ${color}` as const,
286
+ inner: (color: string = 'rgb(0 0 0 / 0.05)') =>
287
+ `inset 0 2px 4px 0 ${color}` as const,
288
+ none: () => `none` as const,
289
+ },
290
+ zIndices: {
291
+ hide: -1,
292
+ auto: 'auto',
293
+ base: 0,
294
+ docked: 10,
295
+ dropdown: 1000,
296
+ sticky: 1100,
297
+ banner: 1200,
298
+ overlay: 1300,
299
+ modal: 1400,
300
+ popover: 1500,
301
+ skipLink: 1600,
302
+ toast: 1700,
303
+ tooltip: 1800,
304
+ },
305
+ } as const
@@ -0,0 +1,379 @@
1
+ import * as goober from 'goober'
2
+ import { createSignal } from 'solid-js'
3
+ import { tokens } from './tokens'
4
+
5
+ const stylesFactory = () => {
6
+ const { colors, font, size, alpha, border } = tokens
7
+ const { fontFamily, size: fontSize } = font
8
+ const css = goober.css
9
+
10
+ return {
11
+ devtoolsPanel: css`
12
+ background: ${colors.darkGray[900]};
13
+ color: ${colors.gray[100]};
14
+ font-family: ${fontFamily.sans};
15
+ font-size: ${fontSize.sm};
16
+ box-sizing: border-box;
17
+ display: flex;
18
+ flex-direction: column;
19
+ width: 100%;
20
+ height: 100%;
21
+ overflow: hidden;
22
+ `,
23
+ stickyHeader: css`
24
+ position: sticky;
25
+ top: 0;
26
+ z-index: 10;
27
+ background: ${colors.darkGray[900]};
28
+ padding: ${size[2]};
29
+ font-size: ${fontSize.lg};
30
+ font-weight: ${font.weight.bold};
31
+ color: #84cc16;
32
+ letter-spacing: 0.04em;
33
+ text-transform: uppercase;
34
+ border-bottom: 1px solid ${colors.darkGray[700]};
35
+ box-shadow: 0 2px 8px 0 ${colors.black + alpha[40]};
36
+ flex-shrink: 0;
37
+ `,
38
+ mainContainer: css`
39
+ display: flex;
40
+ flex: 1;
41
+ min-height: 0;
42
+ overflow: hidden;
43
+ padding: ${size[2]};
44
+ padding-top: 0;
45
+ `,
46
+ dragHandle: css`
47
+ width: 8px;
48
+ background: ${colors.darkGray[600]};
49
+ cursor: col-resize;
50
+ position: relative;
51
+ transition: all 0.2s ease;
52
+ user-select: none;
53
+ pointer-events: all;
54
+ margin: 0 ${size[1]};
55
+ border-radius: 2px;
56
+
57
+ &:hover {
58
+ background: ${colors.blue[500]};
59
+ margin: 0 ${size[1]};
60
+ }
61
+
62
+ &.dragging {
63
+ background: ${colors.blue[600]};
64
+ margin: 0 ${size[1]};
65
+ }
66
+
67
+ &::after {
68
+ content: '';
69
+ position: absolute;
70
+ top: 50%;
71
+ left: 50%;
72
+ transform: translate(-50%, -50%);
73
+ width: 2px;
74
+ height: 20px;
75
+ background: ${colors.darkGray[400]};
76
+ border-radius: 1px;
77
+ pointer-events: none;
78
+ }
79
+
80
+ &:hover::after,
81
+ &.dragging::after {
82
+ background: ${colors.blue[300]};
83
+ }
84
+ `,
85
+ leftPanel: css`
86
+ background: ${colors.darkGray[800]};
87
+ border-radius: ${border.radius.lg};
88
+ border: 1px solid ${colors.darkGray[700]};
89
+ display: flex;
90
+ flex-direction: column;
91
+ overflow: hidden;
92
+ min-height: 0;
93
+ flex-shrink: 0;
94
+ `,
95
+ rightPanel: css`
96
+ background: ${colors.darkGray[800]};
97
+ border-radius: ${border.radius.lg};
98
+ border: 1px solid ${colors.darkGray[700]};
99
+ display: flex;
100
+ flex-direction: column;
101
+ overflow: hidden;
102
+ min-height: 0;
103
+ flex: 1;
104
+ `,
105
+ panelHeader: css`
106
+ font-size: ${fontSize.md};
107
+ font-weight: ${font.weight.bold};
108
+ color: ${colors.blue[400]};
109
+ padding: ${size[2]};
110
+ border-bottom: 1px solid ${colors.darkGray[700]};
111
+ background: ${colors.darkGray[800]};
112
+ flex-shrink: 0;
113
+ `,
114
+ utilList: css`
115
+ flex: 1;
116
+ overflow-y: auto;
117
+ padding: ${size[1]};
118
+ min-height: 0;
119
+ `,
120
+ utilGroup: css`
121
+ margin-bottom: ${size[2]};
122
+ `,
123
+ utilGroupHeader: css`
124
+ font-size: ${fontSize.xs};
125
+ font-weight: ${font.weight.semibold};
126
+ color: ${colors.gray[400]};
127
+ text-transform: uppercase;
128
+ letter-spacing: 0.05em;
129
+ margin-bottom: ${size[1]};
130
+ padding: ${size[1]} ${size[2]};
131
+ background: ${colors.darkGray[700]};
132
+ border-radius: ${border.radius.md};
133
+ `,
134
+ utilRow: css`
135
+ display: flex;
136
+ justify-content: space-between;
137
+ align-items: center;
138
+ padding: ${size[2]};
139
+ margin-bottom: ${size[1]};
140
+ background: ${colors.darkGray[700]};
141
+ border-radius: ${border.radius.md};
142
+ cursor: pointer;
143
+ transition: all 0.2s ease;
144
+ border: 1px solid transparent;
145
+
146
+ &:hover {
147
+ background: ${colors.darkGray[600]};
148
+ border-color: ${colors.darkGray[500]};
149
+ }
150
+ `,
151
+ utilRowSelected: css`
152
+ background: ${colors.blue[900] + alpha[20]};
153
+ border-color: ${colors.blue[500]};
154
+ box-shadow: 0 0 0 1px ${colors.blue[500] + alpha[30]};
155
+ `,
156
+ utilKey: css`
157
+ font-family: ${fontFamily.mono};
158
+ font-size: ${fontSize.xs};
159
+ color: ${colors.gray[100]};
160
+ flex: 1;
161
+ overflow: hidden;
162
+ text-overflow: ellipsis;
163
+ white-space: nowrap;
164
+ `,
165
+ utilStatus: css`
166
+ font-size: ${fontSize.xs};
167
+ color: ${colors.gray[400]};
168
+ text-transform: uppercase;
169
+ letter-spacing: 0.05em;
170
+ padding: ${size[1]} ${size[1]};
171
+ background: ${colors.darkGray[600]};
172
+ border-radius: ${border.radius.sm};
173
+ margin-left: ${size[1]};
174
+ `,
175
+ stateDetails: css`
176
+ flex: 1;
177
+ overflow-y: auto;
178
+ padding: ${size[2]};
179
+ min-height: 0;
180
+ `,
181
+ stateHeader: css`
182
+ margin-bottom: ${size[2]};
183
+ padding-bottom: ${size[2]};
184
+ border-bottom: 1px solid ${colors.darkGray[700]};
185
+ `,
186
+ stateTitle: css`
187
+ font-size: ${fontSize.md};
188
+ font-weight: ${font.weight.bold};
189
+ color: ${colors.blue[400]};
190
+ margin-bottom: ${size[1]};
191
+ `,
192
+ stateKey: css`
193
+ font-family: ${fontFamily.mono};
194
+ font-size: ${fontSize.xs};
195
+ color: ${colors.gray[400]};
196
+ word-break: break-all;
197
+ `,
198
+ stateContent: css`
199
+ background: ${colors.darkGray[700]};
200
+ border-radius: ${border.radius.md};
201
+ padding: ${size[2]};
202
+ border: 1px solid ${colors.darkGray[600]};
203
+ `,
204
+ detailsGrid: css`
205
+ display: grid;
206
+ grid-template-columns: 1fr;
207
+ gap: ${size[2]};
208
+ align-items: start;
209
+ `,
210
+ detailSection: css`
211
+ background: ${colors.darkGray[700]};
212
+ border: 1px solid ${colors.darkGray[600]};
213
+ border-radius: ${border.radius.md};
214
+ padding: ${size[2]};
215
+ `,
216
+ detailSectionHeader: css`
217
+ font-size: ${fontSize.sm};
218
+ font-weight: ${font.weight.bold};
219
+ color: ${colors.gray[200]};
220
+ margin-bottom: ${size[1]};
221
+ text-transform: uppercase;
222
+ letter-spacing: 0.04em;
223
+ `,
224
+ actionsRow: css`
225
+ display: flex;
226
+ flex-wrap: wrap;
227
+ gap: ${size[2]};
228
+ `,
229
+ actionButton: css`
230
+ display: inline-flex;
231
+ align-items: center;
232
+ gap: ${size[1]};
233
+ padding: ${size[1]} ${size[2]};
234
+ border-radius: ${border.radius.md};
235
+ border: 1px solid ${colors.darkGray[500]};
236
+ background: ${colors.darkGray[600]};
237
+ color: ${colors.gray[100]};
238
+ font-size: ${fontSize.xs};
239
+ cursor: pointer;
240
+ user-select: none;
241
+ transition:
242
+ background 0.15s,
243
+ border-color 0.15s;
244
+ &:hover {
245
+ background: ${colors.darkGray[500]};
246
+ border-color: ${colors.darkGray[400]};
247
+ }
248
+ &:disabled {
249
+ opacity: 0.5;
250
+ cursor: not-allowed;
251
+ &:hover {
252
+ background: ${colors.darkGray[600]};
253
+ border-color: ${colors.darkGray[500]};
254
+ }
255
+ }
256
+ `,
257
+ actionDotBlue: css`
258
+ width: 6px;
259
+ height: 6px;
260
+ border-radius: 9999px;
261
+ background: ${colors.blue[400]};
262
+ `,
263
+ actionDotGreen: css`
264
+ width: 6px;
265
+ height: 6px;
266
+ border-radius: 9999px;
267
+ background: ${colors.green[400]};
268
+ `,
269
+ actionDotRed: css`
270
+ width: 6px;
271
+ height: 6px;
272
+ border-radius: 9999px;
273
+ background: ${colors.red[400]};
274
+ `,
275
+ actionDotYellow: css`
276
+ width: 6px;
277
+ height: 6px;
278
+ border-radius: 9999px;
279
+ background: ${colors.yellow[400]};
280
+ `,
281
+ actionDotOrange: css`
282
+ width: 6px;
283
+ height: 6px;
284
+ border-radius: 9999px;
285
+ background: ${colors.pink[400]};
286
+ `,
287
+ actionDotPurple: css`
288
+ width: 6px;
289
+ height: 6px;
290
+ border-radius: 9999px;
291
+ background: ${colors.purple[400]};
292
+ `,
293
+ infoGrid: css`
294
+ display: grid;
295
+ grid-template-columns: auto 1fr;
296
+ gap: ${size[1]};
297
+ row-gap: ${size[1]};
298
+ align-items: center;
299
+ `,
300
+ infoLabel: css`
301
+ color: ${colors.gray[400]};
302
+ font-size: ${fontSize.xs};
303
+ text-transform: uppercase;
304
+ letter-spacing: 0.05em;
305
+ `,
306
+ infoValueMono: css`
307
+ font-family: ${fontFamily.mono};
308
+ font-size: ${fontSize.xs};
309
+ color: ${colors.gray[100]};
310
+ word-break: break-all;
311
+ `,
312
+ noSelection: css`
313
+ flex: 1;
314
+ display: flex;
315
+ align-items: center;
316
+ justify-content: center;
317
+ color: ${colors.gray[500]};
318
+ font-style: italic;
319
+ text-align: center;
320
+ padding: ${size[4]};
321
+ `,
322
+ // Keep existing styles for backward compatibility
323
+ sectionContainer: css`
324
+ display: flex;
325
+ flex-wrap: wrap;
326
+ gap: ${size[4]};
327
+ `,
328
+ section: css`
329
+ background: ${colors.darkGray[800]};
330
+ border-radius: ${border.radius.lg};
331
+ box-shadow: ${tokens.shadow.md(colors.black + alpha[80])};
332
+ padding: ${size[4]};
333
+ margin-bottom: ${size[4]};
334
+ border: 1px solid ${colors.darkGray[700]};
335
+ min-width: 0;
336
+ max-width: 33%;
337
+ max-height: fit-content;
338
+ `,
339
+ sectionHeader: css`
340
+ font-size: ${fontSize.lg};
341
+ font-weight: ${font.weight.bold};
342
+ margin-bottom: ${size[2]};
343
+ color: ${colors.blue[400]};
344
+ letter-spacing: 0.01em;
345
+ display: flex;
346
+ align-items: center;
347
+ gap: ${size[2]};
348
+ `,
349
+ sectionEmpty: css`
350
+ color: ${colors.gray[500]};
351
+ font-size: ${fontSize.sm};
352
+ font-style: italic;
353
+ margin: ${size[2]} 0;
354
+ `,
355
+ instanceList: css`
356
+ display: flex;
357
+ flex-direction: column;
358
+ gap: ${size[2]};
359
+ `,
360
+ instanceCard: css`
361
+ background: ${colors.darkGray[700]};
362
+ border-radius: ${border.radius.md};
363
+ padding: ${size[3]};
364
+ border: 1px solid ${colors.darkGray[600]};
365
+ font-size: ${fontSize.sm};
366
+ color: ${colors.gray[100]};
367
+ font-family: ${fontFamily.mono};
368
+ overflow-x: auto;
369
+ transition:
370
+ box-shadow 0.3s,
371
+ background 0.3s;
372
+ `,
373
+ }
374
+ }
375
+
376
+ export function useStyles() {
377
+ const [_styles] = createSignal(stylesFactory())
378
+ return _styles
379
+ }