@telemetryos/cli 1.14.0 → 1.15.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 (21) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/package.json +2 -2
  3. package/templates/claude-code/_claude/skills/tos-settings-ui/SKILL.md +128 -101
  4. package/templates/vite-react-typescript/index.html +1 -1
  5. package/templates/vite-react-typescript/public/assets/telemetryos-wordmark-dark.svg +11 -0
  6. package/templates/vite-react-typescript/src/components/FlickeringGrid.tsx +150 -0
  7. package/templates/vite-react-typescript/src/hooks/store.ts +32 -0
  8. package/templates/vite-react-typescript/src/themes.ts +226 -0
  9. package/templates/vite-react-typescript/src/views/Render.css +943 -5
  10. package/templates/vite-react-typescript/src/views/Render.tsx +139 -10
  11. package/templates/vite-react-typescript/src/views/Settings.tsx +145 -34
  12. package/templates/vite-react-typescript-web/index.html +1 -1
  13. package/templates/vite-react-typescript-web/public/assets/telemetryos-wordmark-dark.svg +11 -0
  14. package/templates/vite-react-typescript-web/src/components/FlickeringGrid.tsx +150 -0
  15. package/templates/vite-react-typescript-web/src/hooks/store.ts +35 -2
  16. package/templates/vite-react-typescript-web/src/themes.ts +226 -0
  17. package/templates/vite-react-typescript-web/src/views/Render.css +943 -5
  18. package/templates/vite-react-typescript-web/src/views/Render.tsx +139 -11
  19. package/templates/vite-react-typescript-web/src/views/Settings.tsx +156 -47
  20. /package/templates/vite-react-typescript-web/{assets → public/assets}/telemetryos-wordmark.svg +0 -0
  21. /package/templates/vite-react-typescript-web/{assets → public/assets}/tos-app.svg +0 -0
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Theme definitions shared across all TelemetryOS apps.
3
+ *
4
+ * Each theme provides a complete color palette and font family.
5
+ * Colors map to CSS custom properties in Render.css via `applyThemeVars()`.
6
+ *
7
+ * To add a theme:
8
+ * 1. Add a new key to the ThemeName union.
9
+ * 2. Add the corresponding entry to the `themes` record.
10
+ * 3. If the theme needs special CSS effects (like the-matrix scanlines),
11
+ * add a `render--{name}` modifier in Render.css and register it
12
+ * in the `themeModifier` map in Render.tsx.
13
+ */
14
+
15
+ /** Union of all available theme keys. */
16
+ export type ThemeName = 'telemetryos' | 'neon-pulse' | 'solar-flare' | 'arctic-aurora' | 'emerald-matrix' | 'the-matrix' | 'plain-light' | 'plain-dark'
17
+
18
+ /**
19
+ * Color tokens used by Render.css via CSS custom properties.
20
+ *
21
+ * bg* — full-page gradient background
22
+ * card* — primary "hero" card gradient + shadow
23
+ * primary — main text color
24
+ * secondary — subdued text (subtitles, dates)
25
+ * muted — lowest-emphasis text (labels, hints)
26
+ * accent — highlight color (icons, emphasis)
27
+ * cardBg — translucent fill for detail/section cards
28
+ * cardBorder — subtle border for detail/section cards
29
+ * statusGood — positive status indicators
30
+ */
31
+ export interface ThemeColors {
32
+ bgStart: string
33
+ bgMid: string
34
+ bgEnd: string
35
+ cardStart: string
36
+ cardMid1: string
37
+ cardMid2: string
38
+ cardEnd: string
39
+ cardShadow: string
40
+ primary: string
41
+ secondary: string
42
+ muted: string
43
+ accent: string
44
+ cardBg: string
45
+ cardBorder: string
46
+ statusGood: string
47
+ }
48
+
49
+ export interface Theme {
50
+ /** Display name shown in the settings theme picker. */
51
+ label: string
52
+ /** CSS font-family value. Must have a matching @import in index.html. */
53
+ fontFamily: string
54
+ colors: ThemeColors
55
+ }
56
+
57
+ export const themes: Record<ThemeName, Theme> = {
58
+ telemetryos: {
59
+ label: 'TelemetryOS',
60
+ fontFamily: '"Rubik", sans-serif',
61
+ colors: {
62
+ bgStart: '#1E2D3D',
63
+ bgMid: '#172433',
64
+ bgEnd: '#111D29',
65
+ cardStart: '#7A4A00',
66
+ cardMid1: '#A66800',
67
+ cardMid2: '#D49320',
68
+ cardEnd: '#F8B334',
69
+ cardShadow: 'rgba(248, 179, 52, 0.33)',
70
+ primary: '#EEE9DF',
71
+ secondary: '#B8B3A9',
72
+ muted: '#8A8477',
73
+ accent: '#F8B334',
74
+ cardBg: 'rgba(238, 233, 223, 0.03)',
75
+ cardBorder: 'rgba(238, 233, 223, 0.06)',
76
+ statusGood: '#4ADE80',
77
+ },
78
+ },
79
+ 'neon-pulse': {
80
+ label: 'Neon Pulse',
81
+ fontFamily: '"Orbitron", sans-serif',
82
+ colors: {
83
+ bgStart: '#050A15',
84
+ bgMid: '#0A1020',
85
+ bgEnd: '#0D1428',
86
+ cardStart: '#004D40',
87
+ cardMid1: '#00695C',
88
+ cardMid2: '#00897B',
89
+ cardEnd: '#00BCD4',
90
+ cardShadow: 'rgba(0, 229, 255, 0.33)',
91
+ primary: '#E0F7FA',
92
+ secondary: '#80CBC4',
93
+ muted: '#4DB6AC',
94
+ accent: '#00E5FF',
95
+ cardBg: 'rgba(0, 229, 255, 0.03)',
96
+ cardBorder: 'rgba(0, 229, 255, 0.06)',
97
+ statusGood: '#69F0AE',
98
+ },
99
+ },
100
+ 'solar-flare': {
101
+ label: 'Solar Flare',
102
+ fontFamily: '"Bebas Neue", sans-serif',
103
+ colors: {
104
+ bgStart: '#1A0A0A',
105
+ bgMid: '#1F0E0E',
106
+ bgEnd: '#150808',
107
+ cardStart: '#BF360C',
108
+ cardMid1: '#D84315',
109
+ cardMid2: '#F4511E',
110
+ cardEnd: '#FF6D00',
111
+ cardShadow: 'rgba(255, 109, 0, 0.33)',
112
+ primary: '#FFF3E0',
113
+ secondary: '#BCAAA4',
114
+ muted: '#8D6E63',
115
+ accent: '#FF6D00',
116
+ cardBg: 'rgba(255, 109, 0, 0.03)',
117
+ cardBorder: 'rgba(255, 109, 0, 0.06)',
118
+ statusGood: '#FFD54F',
119
+ },
120
+ },
121
+ 'arctic-aurora': {
122
+ label: 'Arctic Aurora',
123
+ fontFamily: '"Inter", sans-serif',
124
+ colors: {
125
+ bgStart: '#0A1628',
126
+ bgMid: '#0E1D32',
127
+ bgEnd: '#081220',
128
+ cardStart: '#1A237E',
129
+ cardMid1: '#283593',
130
+ cardMid2: '#3949AB',
131
+ cardEnd: '#5C6BC0',
132
+ cardShadow: 'rgba(66, 165, 245, 0.33)',
133
+ primary: '#E3F2FD',
134
+ secondary: '#90A4AE',
135
+ muted: '#607D8B',
136
+ accent: '#42A5F5',
137
+ cardBg: 'rgba(66, 165, 245, 0.03)',
138
+ cardBorder: 'rgba(66, 165, 245, 0.06)',
139
+ statusGood: '#80DEEA',
140
+ },
141
+ },
142
+ 'emerald-matrix': {
143
+ label: 'Emerald Matrix',
144
+ fontFamily: '"Space Grotesk", sans-serif',
145
+ colors: {
146
+ bgStart: '#0A1A0E',
147
+ bgMid: '#0F1F12',
148
+ bgEnd: '#081509',
149
+ cardStart: '#1B5E20',
150
+ cardMid1: '#2E7D32',
151
+ cardMid2: '#388E3C',
152
+ cardEnd: '#43A047',
153
+ cardShadow: 'rgba(0, 230, 118, 0.33)',
154
+ primary: '#E8F5E9',
155
+ secondary: '#A5D6A7',
156
+ muted: '#66BB6A',
157
+ accent: '#00E676',
158
+ cardBg: 'rgba(0, 230, 118, 0.03)',
159
+ cardBorder: 'rgba(0, 230, 118, 0.06)',
160
+ statusGood: '#B9F6CA',
161
+ },
162
+ },
163
+ 'the-matrix': {
164
+ label: 'The Matrix',
165
+ fontFamily: '"VT323", monospace',
166
+ colors: {
167
+ bgStart: '#000000',
168
+ bgMid: '#000800',
169
+ bgEnd: '#001000',
170
+ cardStart: '#002800',
171
+ cardMid1: '#003800',
172
+ cardMid2: '#004A00',
173
+ cardEnd: '#005C00',
174
+ cardShadow: 'rgba(0, 255, 65, 0.3)',
175
+ primary: '#00FF41',
176
+ secondary: '#00CC33',
177
+ muted: '#008822',
178
+ accent: '#00FF41',
179
+ cardBg: 'rgba(0, 255, 65, 0.03)',
180
+ cardBorder: 'rgba(0, 255, 65, 0.1)',
181
+ statusGood: '#00FF41',
182
+ },
183
+ },
184
+ 'plain-light': {
185
+ label: 'Plain Light',
186
+ fontFamily: '"Inter", sans-serif',
187
+ colors: {
188
+ bgStart: '#ffffff',
189
+ bgMid: '#ffffff',
190
+ bgEnd: '#ffffff',
191
+ cardStart: 'transparent',
192
+ cardMid1: 'transparent',
193
+ cardMid2: 'transparent',
194
+ cardEnd: 'transparent',
195
+ cardShadow: 'transparent',
196
+ primary: '#1a1a1a',
197
+ secondary: '#444444',
198
+ muted: '#777777',
199
+ accent: '#F8B334',
200
+ cardBg: 'transparent',
201
+ cardBorder: 'transparent',
202
+ statusGood: '#16a34a',
203
+ },
204
+ },
205
+ 'plain-dark': {
206
+ label: 'Plain Dark',
207
+ fontFamily: '"Inter", sans-serif',
208
+ colors: {
209
+ bgStart: 'transparent',
210
+ bgMid: 'transparent',
211
+ bgEnd: 'transparent',
212
+ cardStart: 'transparent',
213
+ cardMid1: 'transparent',
214
+ cardMid2: 'transparent',
215
+ cardEnd: 'transparent',
216
+ cardShadow: 'transparent',
217
+ primary: '#ffffff',
218
+ secondary: '#cccccc',
219
+ muted: '#999999',
220
+ accent: '#dddddd',
221
+ cardBg: 'transparent',
222
+ cardBorder: 'transparent',
223
+ statusGood: '#4ade80',
224
+ },
225
+ },
226
+ }