tuimon 0.1.0 → 0.3.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 (139) hide show
  1. package/AI.md +191 -0
  2. package/README.md +240 -94
  3. package/dist/browser.d.ts.map +1 -1
  4. package/dist/browser.js +3 -0
  5. package/dist/browser.js.map +1 -1
  6. package/dist/cli.js +224 -3
  7. package/dist/cli.js.map +1 -1
  8. package/dist/config.d.ts +17 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +106 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/fkeybar.d.ts.map +1 -1
  13. package/dist/fkeybar.js +13 -0
  14. package/dist/fkeybar.js.map +1 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +148 -18
  17. package/dist/index.js.map +1 -1
  18. package/dist/layout/generator-css.d.ts +3 -0
  19. package/dist/layout/generator-css.d.ts.map +1 -0
  20. package/dist/layout/generator-css.js +202 -0
  21. package/dist/layout/generator-css.js.map +1 -0
  22. package/dist/layout/generator-js.d.ts +3 -0
  23. package/dist/layout/generator-js.d.ts.map +1 -0
  24. package/dist/layout/generator-js.js +353 -0
  25. package/dist/layout/generator-js.js.map +1 -0
  26. package/dist/layout/generator.d.ts +4 -0
  27. package/dist/layout/generator.d.ts.map +1 -0
  28. package/dist/layout/generator.js +124 -0
  29. package/dist/layout/generator.js.map +1 -0
  30. package/dist/layout/theme.d.ts +4 -0
  31. package/dist/layout/theme.d.ts.map +1 -0
  32. package/dist/layout/theme.js +28 -0
  33. package/dist/layout/theme.js.map +1 -0
  34. package/dist/layout/types.d.ts +68 -0
  35. package/dist/layout/types.d.ts.map +1 -0
  36. package/dist/layout/types.js +3 -0
  37. package/dist/layout/types.js.map +1 -0
  38. package/dist/quick/auto-layout.d.ts +5 -0
  39. package/dist/quick/auto-layout.d.ts.map +1 -0
  40. package/dist/quick/auto-layout.js +262 -0
  41. package/dist/quick/auto-layout.js.map +1 -0
  42. package/dist/quick/db/detect.d.ts +16 -0
  43. package/dist/quick/db/detect.d.ts.map +1 -0
  44. package/dist/quick/db/detect.js +131 -0
  45. package/dist/quick/db/detect.js.map +1 -0
  46. package/dist/quick/db/mongo.d.ts +10 -0
  47. package/dist/quick/db/mongo.d.ts.map +1 -0
  48. package/dist/quick/db/mongo.js +81 -0
  49. package/dist/quick/db/mongo.js.map +1 -0
  50. package/dist/quick/db/mysql.d.ts +8 -0
  51. package/dist/quick/db/mysql.d.ts.map +1 -0
  52. package/dist/quick/db/mysql.js +43 -0
  53. package/dist/quick/db/mysql.js.map +1 -0
  54. package/dist/quick/db/postgres.d.ts +8 -0
  55. package/dist/quick/db/postgres.d.ts.map +1 -0
  56. package/dist/quick/db/postgres.js +47 -0
  57. package/dist/quick/db/postgres.js.map +1 -0
  58. package/dist/quick/db/sqlite.d.ts +8 -0
  59. package/dist/quick/db/sqlite.d.ts.map +1 -0
  60. package/dist/quick/db/sqlite.js +43 -0
  61. package/dist/quick/db/sqlite.js.map +1 -0
  62. package/dist/quick/db-mode.d.ts +13 -0
  63. package/dist/quick/db-mode.d.ts.map +1 -0
  64. package/dist/quick/db-mode.js +159 -0
  65. package/dist/quick/db-mode.js.map +1 -0
  66. package/dist/quick/detect.d.ts +4 -0
  67. package/dist/quick/detect.d.ts.map +1 -0
  68. package/dist/quick/detect.js +76 -0
  69. package/dist/quick/detect.js.map +1 -0
  70. package/dist/quick/file-mode.d.ts +5 -0
  71. package/dist/quick/file-mode.d.ts.map +1 -0
  72. package/dist/quick/file-mode.js +158 -0
  73. package/dist/quick/file-mode.js.map +1 -0
  74. package/dist/quick/parsers/csv.d.ts +3 -0
  75. package/dist/quick/parsers/csv.d.ts.map +1 -0
  76. package/dist/quick/parsers/csv.js +145 -0
  77. package/dist/quick/parsers/csv.js.map +1 -0
  78. package/dist/quick/parsers/detect-meta.d.ts +7 -0
  79. package/dist/quick/parsers/detect-meta.d.ts.map +1 -0
  80. package/dist/quick/parsers/detect-meta.js +35 -0
  81. package/dist/quick/parsers/detect-meta.js.map +1 -0
  82. package/dist/quick/parsers/json.d.ts +3 -0
  83. package/dist/quick/parsers/json.d.ts.map +1 -0
  84. package/dist/quick/parsers/json.js +74 -0
  85. package/dist/quick/parsers/json.js.map +1 -0
  86. package/dist/quick/parsers/log.d.ts +3 -0
  87. package/dist/quick/parsers/log.d.ts.map +1 -0
  88. package/dist/quick/parsers/log.js +185 -0
  89. package/dist/quick/parsers/log.js.map +1 -0
  90. package/dist/quick/parsers/modsec.d.ts +3 -0
  91. package/dist/quick/parsers/modsec.d.ts.map +1 -0
  92. package/dist/quick/parsers/modsec.js +338 -0
  93. package/dist/quick/parsers/modsec.js.map +1 -0
  94. package/dist/quick/presets/coverage.d.ts +3 -0
  95. package/dist/quick/presets/coverage.d.ts.map +1 -0
  96. package/dist/quick/presets/coverage.js +362 -0
  97. package/dist/quick/presets/coverage.js.map +1 -0
  98. package/dist/quick/presets/deps.d.ts +3 -0
  99. package/dist/quick/presets/deps.d.ts.map +1 -0
  100. package/dist/quick/presets/deps.js +194 -0
  101. package/dist/quick/presets/deps.js.map +1 -0
  102. package/dist/quick/presets/docker.d.ts +3 -0
  103. package/dist/quick/presets/docker.d.ts.map +1 -0
  104. package/dist/quick/presets/docker.js +100 -0
  105. package/dist/quick/presets/docker.js.map +1 -0
  106. package/dist/quick/presets/git.d.ts +3 -0
  107. package/dist/quick/presets/git.d.ts.map +1 -0
  108. package/dist/quick/presets/git.js +116 -0
  109. package/dist/quick/presets/git.js.map +1 -0
  110. package/dist/quick/presets/ps.d.ts +3 -0
  111. package/dist/quick/presets/ps.d.ts.map +1 -0
  112. package/dist/quick/presets/ps.js +168 -0
  113. package/dist/quick/presets/ps.js.map +1 -0
  114. package/dist/quick/presets/runner.d.ts +3 -0
  115. package/dist/quick/presets/runner.d.ts.map +1 -0
  116. package/dist/quick/presets/runner.js +20 -0
  117. package/dist/quick/presets/runner.js.map +1 -0
  118. package/dist/quick/presets/types.d.ts +7 -0
  119. package/dist/quick/presets/types.d.ts.map +1 -0
  120. package/dist/quick/presets/types.js +2 -0
  121. package/dist/quick/presets/types.js.map +1 -0
  122. package/dist/quick/types.d.ts +90 -0
  123. package/dist/quick/types.d.ts.map +1 -0
  124. package/dist/quick/types.js +3 -0
  125. package/dist/quick/types.js.map +1 -0
  126. package/dist/quick/watch-mode.d.ts +3 -0
  127. package/dist/quick/watch-mode.d.ts.map +1 -0
  128. package/dist/quick/watch-mode.js +156 -0
  129. package/dist/quick/watch-mode.js.map +1 -0
  130. package/dist/server.js +2 -2
  131. package/dist/server.js.map +1 -1
  132. package/dist/types.d.ts +9 -2
  133. package/dist/types.d.ts.map +1 -1
  134. package/examples/demo.ts +134 -0
  135. package/examples/generate-access-log.ts +42 -0
  136. package/examples/screenshot-test.ts +105 -0
  137. package/examples/screenshot.png +0 -0
  138. package/frame-log.txt +830 -0
  139. package/package.json +10 -5
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
1
  import path from 'node:path';
2
+ import { mkdirSync, writeFileSync, rmSync, readdirSync } from 'node:fs';
3
+ import { tmpdir } from 'node:os';
2
4
  import { detectGraphicsSupport, getTerminalDimensions } from './detect.js';
3
5
  import { startServer } from './server.js';
4
6
  import { createBrowser } from './browser.js';
@@ -6,6 +8,7 @@ import { encodeAndRender } from './encoder.js';
6
8
  import { startKeyHandler } from './keyhandler.js';
7
9
  import { renderFKeyBar } from './fkeybar.js';
8
10
  import { createRouter } from './router.js';
11
+ import { generateDashboardHtml } from './layout/generator.js';
9
12
  const MAX_REFRESH_FAILURES = 5;
10
13
  async function start(options) {
11
14
  const { pages } = options;
@@ -23,6 +26,42 @@ async function start(options) {
23
26
  }
24
27
  // iterm2 uses kitty-compatible rendering for our purposes
25
28
  const protocol = (graphics.protocol === 'sixel') ? 'sixel' : 'kitty';
29
+ // Clean up stale temp dirs from previous crashed runs
30
+ try {
31
+ const tmp = tmpdir();
32
+ for (const entry of readdirSync(tmp)) {
33
+ if (entry.startsWith('tuimon-layout-')) {
34
+ const pid = entry.split('-').pop();
35
+ // Check if process is still running — if not, it's orphaned
36
+ try {
37
+ if (pid)
38
+ process.kill(Number(pid), 0);
39
+ }
40
+ catch {
41
+ try {
42
+ rmSync(path.join(tmp, entry), { recursive: true, force: true });
43
+ }
44
+ catch { }
45
+ }
46
+ }
47
+ }
48
+ }
49
+ catch { }
50
+ // Generate HTML for layout-based pages
51
+ const layoutTmpDir = path.join(tmpdir(), `tuimon-layout-${process.pid}`);
52
+ let layoutTmpCreated = false;
53
+ for (const [id, page] of pageEntries) {
54
+ if (page.layout && !page.html) {
55
+ if (!layoutTmpCreated) {
56
+ mkdirSync(layoutTmpDir, { recursive: true });
57
+ layoutTmpCreated = true;
58
+ }
59
+ const html = generateDashboardHtml(page.layout);
60
+ const htmlPath = path.join(layoutTmpDir, `${id}.html`);
61
+ writeFileSync(htmlPath, html, 'utf-8');
62
+ page.html = htmlPath;
63
+ }
64
+ }
26
65
  // Resolve all page html paths and find common root
27
66
  const resolvedPages = new Map();
28
67
  const allDirs = [];
@@ -51,9 +90,14 @@ async function start(options) {
51
90
  const cellPixelHeight = Math.floor(dims.pixelHeight / dims.rows);
52
91
  const viewportHeight = dims.pixelHeight - cellPixelHeight;
53
92
  const viewportWidth = dims.pixelWidth;
54
- // Start browser
93
+ // Resolve default page URL for initial navigation
94
+ const defaultPageId = pageEntries.find(([, p]) => p.default)?.[0] ?? pageEntries[0][0];
95
+ const defaultPage = pages[defaultPageId];
96
+ const defaultFilename = path.basename(path.resolve(process.cwd(), defaultPage.html));
97
+ const defaultPageUrl = server.urlFor(defaultFilename);
98
+ // Start browser — navigate directly to the default page
55
99
  const browser = await createBrowser({
56
- url: server.url,
100
+ url: defaultPageUrl,
57
101
  width: viewportWidth,
58
102
  height: viewportHeight,
59
103
  });
@@ -64,26 +108,78 @@ async function start(options) {
64
108
  let refreshInterval;
65
109
  let stopped = false;
66
110
  let rendering = false;
67
- // Render function with concurrency guard
111
+ // Handle terminal resize pause rendering during resize, redraw when settled
112
+ const cellPixelWidth = Math.floor(dims.pixelWidth / dims.cols);
113
+ let resizing = false;
114
+ let resizeTimer;
115
+ const onTermResize = () => {
116
+ if (stopped)
117
+ return;
118
+ resizing = true; // pause frame rendering
119
+ if (resizeTimer)
120
+ clearTimeout(resizeTimer);
121
+ resizeTimer = setTimeout(() => {
122
+ const cols = process.stdout.columns || 80;
123
+ const rows = process.stdout.rows || 24;
124
+ const newW = Math.max(320, cols * cellPixelWidth);
125
+ const newH = Math.max(200, (rows - 1) * cellPixelHeight);
126
+ process.stdout.write('\x1b[2J\x1b[H');
127
+ browser.resize(newW, newH)
128
+ .then(() => {
129
+ resizing = false;
130
+ return renderFrame();
131
+ })
132
+ .then(() => { fkeyBar.redraw(); })
133
+ .catch((err) => {
134
+ resizing = false;
135
+ console.error('[tuimon] resize error:', err);
136
+ });
137
+ }, 300);
138
+ };
139
+ process.stdout.on('resize', onTermResize);
140
+ // Render function with concurrency guard + timeout safety
141
+ const debug = !!process.env['TUIMON_DEBUG'];
142
+ let renderTimeout;
68
143
  async function renderFrame(data) {
69
- if (stopped || rendering)
144
+ if (stopped || rendering || resizing)
70
145
  return;
71
146
  rendering = true;
147
+ // Safety: if render takes >5s, log warning but don't force-unlock (avoids race)
148
+ renderTimeout = setTimeout(() => {
149
+ console.error('[tuimon] render frame exceeded 5s — possible hang');
150
+ }, 5000);
151
+ const t0 = performance.now();
72
152
  try {
73
153
  if (data)
74
154
  lastData = data;
155
+ const t1 = performance.now();
75
156
  await browser.pushData(lastData);
157
+ const t2 = performance.now();
76
158
  await new Promise((resolve) => setTimeout(resolve, renderDelay));
159
+ const t3 = performance.now();
77
160
  const screenshot = await browser.screenshot();
161
+ const t4 = performance.now();
78
162
  await encodeAndRender(screenshot, { protocol });
163
+ const t5 = performance.now();
164
+ // Always redraw F-key bar after frame — image may have overwritten it
165
+ fkeyBar.redraw();
166
+ if (debug) {
167
+ const total = (t5 - t0).toFixed(0);
168
+ const push = (t2 - t1).toFixed(0);
169
+ const wait = (t3 - t2).toFixed(0);
170
+ const snap = (t4 - t3).toFixed(0);
171
+ const encode = (t5 - t4).toFixed(0);
172
+ const size = (screenshot.length / 1024).toFixed(0);
173
+ process.stderr.write(`[tuimon] frame ${total}ms | push:${push} wait:${wait} snap:${snap} encode:${encode} | ${size}KB\n`);
174
+ }
79
175
  }
80
176
  finally {
177
+ if (renderTimeout)
178
+ clearTimeout(renderTimeout);
81
179
  rendering = false;
82
180
  }
83
181
  }
84
182
  // F-key bar
85
- const defaultPageId = pageEntries.find(([, p]) => p.default)?.[0] ?? pageEntries[0][0];
86
- const defaultPage = pages[defaultPageId];
87
183
  const fkeyBar = renderFKeyBar({ keys: defaultPage.keys ?? {} });
88
184
  // Router navigate helper
89
185
  async function navigateToPage(htmlPath) {
@@ -102,9 +198,34 @@ async function start(options) {
102
198
  setKeys: (keys) => { fkeyBar.setKeys(keys); },
103
199
  confirmQuitHtml: '/tuimon/confirm-quit.html',
104
200
  });
105
- // Key handler catch unhandled rejections from handleKey
201
+ // Arrow/Page key table navigation action mapping
202
+ const NAV_KEYS = {
203
+ '\x1b[B': 'next', // Arrow Down
204
+ '\x1b[A': 'prev', // Arrow Up
205
+ '\x1b[6~': 'next', // Page Down
206
+ '\x1b[5~': 'prev', // Page Up
207
+ '\x1b[F': 'last', // End
208
+ '\x1b[H': 'first', // Home
209
+ };
210
+ // Key handler — intercept Ctrl+C for emergency exit, nav keys for tables
106
211
  const keyHandler = startKeyHandler({
107
212
  onKey: (key) => {
213
+ // Ctrl+C: synchronous emergency cleanup and exit
214
+ if (key === '\x03') {
215
+ keyHandler.stop();
216
+ fkeyBar.stop();
217
+ process.stdout.write('\x1b[?25h\x1b[?1049l');
218
+ process.exit(0);
219
+ return;
220
+ }
221
+ // Arrow/Page keys: dispatch table navigation to browser
222
+ const navAction = NAV_KEYS[key];
223
+ if (navAction) {
224
+ browser.evaluate(`window.dispatchEvent(new CustomEvent('tuimon:tableNav', { detail: { action: '${navAction}' } }))`)
225
+ .then(() => renderFrame())
226
+ .catch(() => { });
227
+ return;
228
+ }
108
229
  router.handleKey(key).catch((err) => {
109
230
  console.error('[tuimon] key handler error:', err);
110
231
  });
@@ -132,10 +253,6 @@ async function start(options) {
132
253
  }, options.refresh);
133
254
  refreshInterval.unref();
134
255
  }
135
- // Navigate to the default page
136
- const defaultHtml = defaultPage.html;
137
- const defaultFilename = path.basename(path.resolve(process.cwd(), defaultHtml));
138
- await browser.navigate(server.urlFor(defaultFilename));
139
256
  // Stop function
140
257
  async function stop() {
141
258
  if (stopped)
@@ -143,20 +260,33 @@ async function start(options) {
143
260
  stopped = true;
144
261
  if (refreshInterval)
145
262
  clearInterval(refreshInterval);
263
+ if (resizeTimer)
264
+ clearTimeout(resizeTimer);
265
+ process.stdout.removeListener('resize', onTermResize);
146
266
  keyHandler.stop();
147
267
  fkeyBar.stop();
148
268
  await browser.close();
149
269
  await server.close();
270
+ // Clean up temp layout files
271
+ if (layoutTmpCreated) {
272
+ try {
273
+ rmSync(layoutTmpDir, { recursive: true, force: true });
274
+ }
275
+ catch { }
276
+ }
150
277
  // Restore terminal: show cursor + exit alt screen
151
278
  process.stdout.write('\x1b[?25h\x1b[?1049l');
152
279
  }
153
- // Await stop on SIGINT to ensure cleanup completes
154
- process.once('SIGINT', () => {
155
- stop().catch((err) => {
156
- console.error('[tuimon] shutdown error:', err);
157
- process.exit(1);
158
- });
159
- });
280
+ // Ensure cleanup on any exit path
281
+ const onShutdown = () => {
282
+ // Force exit after 3s if graceful stop hangs
283
+ const forceTimer = setTimeout(() => { process.exit(1); }, 3000);
284
+ forceTimer.unref();
285
+ stop().catch(() => { process.exit(1); });
286
+ };
287
+ process.once('SIGINT', onShutdown);
288
+ process.once('SIGTERM', onShutdown);
289
+ process.once('beforeExit', () => { void stop(); });
160
290
  return {
161
291
  render: async (data) => { await renderFrame(data); },
162
292
  stop,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ThemeConfig } from './types.js';
2
+ export declare function generateCss(t: ThemeConfig): string;
3
+ //# sourceMappingURL=generator-css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator-css.d.ts","sourceRoot":"","sources":["../../src/layout/generator-css.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAwMlD"}
@@ -0,0 +1,202 @@
1
+ export function generateCss(t) {
2
+ return `
3
+ * { margin: 0; padding: 0; box-sizing: border-box; }
4
+ body {
5
+ background: ${t.bg};
6
+ color: ${t.text};
7
+ font-family: ${t.fontFamily};
8
+ padding: 10px;
9
+ overflow: hidden;
10
+ height: 100vh;
11
+ display: flex;
12
+ flex-direction: column;
13
+ gap: 10px;
14
+ }
15
+
16
+ /* ── Header ── */
17
+ .dash-header {
18
+ display: flex;
19
+ justify-content: space-between;
20
+ align-items: center;
21
+ padding-bottom: 8px;
22
+ border-bottom: 1px solid ${t.border}33;
23
+ flex-shrink: 0;
24
+ }
25
+ .dash-title {
26
+ font-size: 16px;
27
+ font-weight: 600;
28
+ color: ${t.accent};
29
+ text-transform: uppercase;
30
+ letter-spacing: 2px;
31
+ }
32
+ .dash-time { font-size: 11px; color: ${t.textMuted}; }
33
+
34
+ /* ── Stat cards ── */
35
+ .stat-row {
36
+ display: flex;
37
+ gap: 10px;
38
+ flex-shrink: 0;
39
+ }
40
+ .stat-card {
41
+ flex: 1;
42
+ background: ${t.panelBg};
43
+ border: 1px solid ${t.border}44;
44
+ border-radius: 6px;
45
+ padding: 12px 16px;
46
+ min-width: 0;
47
+ }
48
+ .stat-label {
49
+ font-size: 10px;
50
+ text-transform: uppercase;
51
+ letter-spacing: 1px;
52
+ color: ${t.textMuted};
53
+ }
54
+ .stat-value {
55
+ font-size: 28px;
56
+ font-weight: 700;
57
+ color: ${t.accent};
58
+ margin-top: 2px;
59
+ }
60
+ .stat-extra { font-size: 11px; margin-top: 2px; }
61
+ .stat-trend { color: ${t.success}; margin-right: 6px; }
62
+ .stat-unit { color: ${t.textMuted}; }
63
+
64
+ /* ── Gauge ── */
65
+ .gauge-track {
66
+ height: 6px;
67
+ background: ${t.border}22;
68
+ border-radius: 3px;
69
+ margin-top: 8px;
70
+ overflow: hidden;
71
+ }
72
+ .gauge-fill {
73
+ height: 100%;
74
+ border-radius: 3px;
75
+ background: ${t.success};
76
+ transition: width 0.4s ease, background 0.4s ease;
77
+ }
78
+
79
+ /* ── Panel grid ── */
80
+ .panel-grid {
81
+ display: grid;
82
+ grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));
83
+ gap: 10px;
84
+ flex: 1;
85
+ min-height: 0;
86
+ }
87
+ .panel {
88
+ background: ${t.panelBg};
89
+ border: 1px solid ${t.border}44;
90
+ border-radius: 6px;
91
+ padding: 12px;
92
+ display: flex;
93
+ flex-direction: column;
94
+ min-height: 0;
95
+ overflow: hidden;
96
+ position: relative;
97
+ }
98
+ .panel-header {
99
+ font-size: 11px;
100
+ text-transform: uppercase;
101
+ letter-spacing: 1px;
102
+ color: ${t.textMuted};
103
+ margin-bottom: 8px;
104
+ flex-shrink: 0;
105
+ }
106
+ .chart-wrap { flex: 1; min-height: 0; position: relative; }
107
+ .chart-wrap canvas { width: 100% !important; height: 100% !important; }
108
+
109
+ /* ── Event log ── */
110
+ .event-list {
111
+ flex: 1;
112
+ overflow-y: auto;
113
+ font-size: 12px;
114
+ font-family: monospace;
115
+ }
116
+ .event-entry {
117
+ padding: 4px 0;
118
+ border-bottom: 1px solid ${t.border}15;
119
+ line-height: 1.5;
120
+ }
121
+ .event-time { color: ${t.textMuted}; margin-right: 8px; font-size: 10px; }
122
+ .event-text { color: ${t.text}; }
123
+ .event-entry.success .event-text { color: ${t.success}; }
124
+ .event-entry.warning .event-text { color: ${t.warning}; }
125
+ .event-entry.error .event-text { color: ${t.danger}; }
126
+ .event-empty { color: ${t.textMuted}; font-style: italic; }
127
+
128
+ /* ── Status grid ── */
129
+ .status-grid {
130
+ display: flex;
131
+ flex-wrap: wrap;
132
+ gap: 10px;
133
+ padding: 4px 0;
134
+ }
135
+ .status-item {
136
+ display: flex;
137
+ align-items: center;
138
+ gap: 6px;
139
+ font-size: 12px;
140
+ }
141
+ .status-dot {
142
+ width: 10px;
143
+ height: 10px;
144
+ border-radius: 50%;
145
+ flex-shrink: 0;
146
+ }
147
+ .status-dot.ok { background: ${t.success}; box-shadow: 0 0 6px ${t.success}66; }
148
+ .status-dot.warn { background: ${t.warning}; box-shadow: 0 0 6px ${t.warning}66; }
149
+ .status-dot.error { background: ${t.danger}; box-shadow: 0 0 6px ${t.danger}66; }
150
+ .status-dot.unknown { background: ${t.textMuted}; }
151
+ .status-label { color: ${t.text}; }
152
+
153
+ /* ── Table ── */
154
+ .table-wrap {
155
+ flex: 1;
156
+ overflow: hidden;
157
+ font-size: 12px;
158
+ display: flex;
159
+ flex-direction: column;
160
+ }
161
+ .table-scroll {
162
+ flex: 1;
163
+ overflow: hidden;
164
+ }
165
+ .table-wrap table {
166
+ width: 100%;
167
+ border-collapse: collapse;
168
+ font-family: monospace;
169
+ }
170
+ .table-wrap th {
171
+ position: sticky;
172
+ top: 0;
173
+ background: ${t.bg};
174
+ color: ${t.accent};
175
+ text-align: left;
176
+ padding: 6px 10px;
177
+ border-bottom: 1px solid ${t.border}44;
178
+ font-size: 10px;
179
+ text-transform: uppercase;
180
+ letter-spacing: 1px;
181
+ }
182
+ .table-wrap td {
183
+ padding: 4px 10px;
184
+ border-bottom: 1px solid ${t.border}15;
185
+ color: ${t.text};
186
+ white-space: nowrap;
187
+ overflow: hidden;
188
+ text-overflow: ellipsis;
189
+ max-width: 300px;
190
+ }
191
+ .table-wrap tr:nth-child(even) td { background: ${t.border}08; }
192
+ .table-wrap td.num { color: ${t.accent}; }
193
+ .table-info {
194
+ font-size: 11px;
195
+ color: ${t.accent};
196
+ padding: 6px 0 2px;
197
+ flex-shrink: 0;
198
+ border-top: 1px solid ${t.border}33;
199
+ }
200
+ `;
201
+ }
202
+ //# sourceMappingURL=generator-css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator-css.js","sourceRoot":"","sources":["../../src/layout/generator-css.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,CAAc;IACxC,OAAO;;;oBAGW,CAAC,CAAC,EAAE;eACT,CAAC,CAAC,IAAI;qBACA,CAAC,CAAC,UAAU;;;;;;;;;;;;;;;iCAeA,CAAC,CAAC,MAAM;;;;;;eAM1B,CAAC,CAAC,MAAM;;;;2CAIoB,CAAC,CAAC,SAAS;;;;;;;;;;oBAUlC,CAAC,CAAC,OAAO;0BACH,CAAC,CAAC,MAAM;;;;;;;;;eASnB,CAAC,CAAC,SAAS;;;;;eAKX,CAAC,CAAC,MAAM;;;;2BAII,CAAC,CAAC,OAAO;0BACV,CAAC,CAAC,SAAS;;;;;oBAKjB,CAAC,CAAC,MAAM;;;;;;;;oBAQR,CAAC,CAAC,OAAO;;;;;;;;;;;;;oBAaT,CAAC,CAAC,OAAO;0BACH,CAAC,CAAC,MAAM;;;;;;;;;;;;;eAanB,CAAC,CAAC,SAAS;;;;;;;;;;;;;;;;iCAgBO,CAAC,CAAC,MAAM;;;2BAGd,CAAC,CAAC,SAAS;2BACX,CAAC,CAAC,IAAI;gDACe,CAAC,CAAC,OAAO;gDACT,CAAC,CAAC,OAAO;8CACX,CAAC,CAAC,MAAM;4BAC1B,CAAC,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;mCAqBJ,CAAC,CAAC,OAAO,yBAAyB,CAAC,CAAC,OAAO;qCACzC,CAAC,CAAC,OAAO,yBAAyB,CAAC,CAAC,OAAO;sCAC1C,CAAC,CAAC,MAAM,yBAAyB,CAAC,CAAC,MAAM;wCACvC,CAAC,CAAC,SAAS;6BACtB,CAAC,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;oBAsBf,CAAC,CAAC,EAAE;eACT,CAAC,CAAC,MAAM;;;iCAGU,CAAC,CAAC,MAAM;;;;;;;iCAOR,CAAC,CAAC,MAAM;eAC1B,CAAC,CAAC,IAAI;;;;;;sDAMiC,CAAC,CAAC,MAAM;kCAC5B,CAAC,CAAC,MAAM;;;eAG3B,CAAC,CAAC,MAAM;;;8BAGO,CAAC,CAAC,MAAM;;GAEnC,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { LayoutConfig, ThemeConfig } from './types.js';
2
+ export declare function generateJs(layout: LayoutConfig, t: ThemeConfig): string;
3
+ //# sourceMappingURL=generator-js.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator-js.d.ts","sourceRoot":"","sources":["../../src/layout/generator-js.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE3D,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,GAAG,MAAM,CAoWvE"}