tuimon 0.1.0 → 0.2.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 (111) hide show
  1. package/AI.md +191 -0
  2. package/README.md +223 -87
  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 +171 -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/types.d.ts +90 -0
  95. package/dist/quick/types.d.ts.map +1 -0
  96. package/dist/quick/types.js +3 -0
  97. package/dist/quick/types.js.map +1 -0
  98. package/dist/quick/watch-mode.d.ts +3 -0
  99. package/dist/quick/watch-mode.d.ts.map +1 -0
  100. package/dist/quick/watch-mode.js +156 -0
  101. package/dist/quick/watch-mode.js.map +1 -0
  102. package/dist/server.js +2 -2
  103. package/dist/server.js.map +1 -1
  104. package/dist/types.d.ts +8 -1
  105. package/dist/types.d.ts.map +1 -1
  106. package/examples/demo.ts +134 -0
  107. package/examples/generate-access-log.ts +42 -0
  108. package/examples/screenshot-test.ts +105 -0
  109. package/examples/screenshot.png +0 -0
  110. package/frame-log.txt +830 -0
  111. 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"}