feat:themes, tactilea codec
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
Date : 2026-04-01 16:39:17
|
||||
|
||||
Directory e:\\Workspace\\joyson-serial
|
||||
Directory e:\\Workspace\\JE-Skin
|
||||
|
||||
Total : 47 files, 8908 codes, 94 comments, 1250 blanks, all 10252 lines
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Date : 2026-04-01 16:39:17
|
||||
|
||||
Directory e:\\Workspace\\joyson-serial
|
||||
Directory e:\\Workspace\\JE-Skin
|
||||
|
||||
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Date : 2026-04-01 16:39:17
|
||||
|
||||
Directory e:\\Workspace\\joyson-serial
|
||||
Directory e:\\Workspace\\JE-Skin
|
||||
|
||||
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Date : 2026-04-01 16:39:17
|
||||
Directory : e:\Workspace\joyson-serial
|
||||
Directory : e:\Workspace\JE-Skin
|
||||
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines
|
||||
|
||||
Languages
|
||||
|
||||
@@ -1,49 +1,49 @@
|
||||
"filename", "language", "JavaScript", "JSON", "Markdown", "JSON with Comments", "XML", "TypeScript", "Svelte", "Rust", "PostCSS", "HTML", "comment", "blank", "total"
|
||||
"e:\Workspace\joyson-serial\.idea\modules.xml", "XML", 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 8
|
||||
"e:\Workspace\joyson-serial\.idea\tauri-demo.iml", "XML", 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11
|
||||
"e:\Workspace\joyson-serial\README.md", "Markdown", 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 20, 54
|
||||
"e:\Workspace\joyson-serial\flowus_tools.json", "JSON", 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2
|
||||
"e:\Workspace\joyson-serial\frontend_prompt.md", "Markdown", 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 66, 255
|
||||
"e:\Workspace\joyson-serial\package-lock.json", "JSON", 0, 1957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1958
|
||||
"e:\Workspace\joyson-serial\package.json", "JSON", 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32
|
||||
"e:\Workspace\joyson-serial\src-tauri\build.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 4
|
||||
"e:\Workspace\joyson-serial\src-tauri\capabilities\default.json", "JSON", 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\commands\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 3
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\commands\serial.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 44, 290
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\commands\window.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 6, 33
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\lib.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 2, 24
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\log.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 2, 36
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\main.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 1, 2, 11
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\codec.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 1, 7
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 5
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\tactile_a.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 17, 84
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\test.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 7, 40, 260
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\error.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 6, 53
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\frame.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 3, 9, 58
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 7, 29
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\model.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 57, 67, 501
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\record.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 4, 11, 65
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\serial.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 8, 81
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\utils.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 6, 32
|
||||
"e:\Workspace\joyson-serial\src-tauri\tauri.conf.json", "JSON", 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 37
|
||||
"e:\Workspace\joyson-serial\src\app.html", "HTML", 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 14
|
||||
"e:\Workspace\joyson-serial\src\lib\components\CenterStage.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, 96, 787
|
||||
"e:\Workspace\joyson-serial\src\lib\components\ConfigPanel.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 63, 461
|
||||
"e:\Workspace\joyson-serial\src\lib\components\HudPanel.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 861, 0, 0, 0, 0, 110, 971
|
||||
"e:\Workspace\joyson-serial\src\lib\components\PressureMatrixViewer.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 97, 655
|
||||
"e:\Workspace\joyson-serial\src\lib\components\SignalChart.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 71, 453
|
||||
"e:\Workspace\joyson-serial\src\lib\components\SummaryCurve.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 88, 585
|
||||
"e:\Workspace\joyson-serial\src\lib\config\color-map.ts", "TypeScript", 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 3, 58
|
||||
"e:\Workspace\joyson-serial\src\lib\styles\theme.css", "PostCSS", 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 1, 7, 51
|
||||
"e:\Workspace\joyson-serial\src\lib\types\hud.ts", "TypeScript", 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 20, 146
|
||||
"e:\Workspace\joyson-serial\src\routes\+layout.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 5, 18
|
||||
"e:\Workspace\joyson-serial\src\routes\+layout.ts", "TypeScript", 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 4, 1, 6
|
||||
"e:\Workspace\joyson-serial\src\routes\+page.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 1286, 0, 0, 0, 0, 176, 1462
|
||||
"e:\Workspace\joyson-serial\static\svelte.svg", "XML", 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
|
||||
"e:\Workspace\joyson-serial\static\tauri.svg", "XML", 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 1, 7
|
||||
"e:\Workspace\joyson-serial\static\vite.svg", "XML", 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
|
||||
"e:\Workspace\joyson-serial\svelte.config.js", "JavaScript", 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 19
|
||||
"e:\Workspace\joyson-serial\tauri-event.md", "Markdown", 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 181, 555
|
||||
"e:\Workspace\joyson-serial\tsconfig.json", "JSON with Comments", 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 5, 1, 20
|
||||
"e:\Workspace\joyson-serial\vite.config.js", "JavaScript", 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 33
|
||||
"e:\Workspace\JE-Skin\.idea\modules.xml", "XML", 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 8
|
||||
"e:\Workspace\JE-Skin\.idea\tauri-demo.iml", "XML", 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11
|
||||
"e:\Workspace\JE-Skin\README.md", "Markdown", 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 20, 54
|
||||
"e:\Workspace\JE-Skin\flowus_tools.json", "JSON", 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2
|
||||
"e:\Workspace\JE-Skin\frontend_prompt.md", "Markdown", 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 66, 255
|
||||
"e:\Workspace\JE-Skin\package-lock.json", "JSON", 0, 1957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1958
|
||||
"e:\Workspace\JE-Skin\package.json", "JSON", 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32
|
||||
"e:\Workspace\JE-Skin\src-tauri\build.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 4
|
||||
"e:\Workspace\JE-Skin\src-tauri\capabilities\default.json", "JSON", 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\commands\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 3
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\commands\serial.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 44, 290
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\commands\window.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 6, 33
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\lib.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 2, 24
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\log.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 2, 36
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\main.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 1, 2, 11
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\codec.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 1, 7
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 5
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\tactile_a.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 17, 84
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\test.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 7, 40, 260
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\error.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 6, 53
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\frame.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 3, 9, 58
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 7, 29
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\model.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 57, 67, 501
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\record.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 4, 11, 65
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\serial.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 8, 81
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\utils.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 6, 32
|
||||
"e:\Workspace\JE-Skin\src-tauri\tauri.conf.json", "JSON", 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 37
|
||||
"e:\Workspace\JE-Skin\src\app.html", "HTML", 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 14
|
||||
"e:\Workspace\JE-Skin\src\lib\components\CenterStage.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, 96, 787
|
||||
"e:\Workspace\JE-Skin\src\lib\components\ConfigPanel.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 63, 461
|
||||
"e:\Workspace\JE-Skin\src\lib\components\HudPanel.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 861, 0, 0, 0, 0, 110, 971
|
||||
"e:\Workspace\JE-Skin\src\lib\components\PressureMatrixViewer.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 97, 655
|
||||
"e:\Workspace\JE-Skin\src\lib\components\SignalChart.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 71, 453
|
||||
"e:\Workspace\JE-Skin\src\lib\components\SummaryCurve.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 88, 585
|
||||
"e:\Workspace\JE-Skin\src\lib\config\color-map.ts", "TypeScript", 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 3, 58
|
||||
"e:\Workspace\JE-Skin\src\lib\styles\theme.css", "PostCSS", 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 1, 7, 51
|
||||
"e:\Workspace\JE-Skin\src\lib\types\hud.ts", "TypeScript", 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 20, 146
|
||||
"e:\Workspace\JE-Skin\src\routes\+layout.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 5, 18
|
||||
"e:\Workspace\JE-Skin\src\routes\+layout.ts", "TypeScript", 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 4, 1, 6
|
||||
"e:\Workspace\JE-Skin\src\routes\+page.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 1286, 0, 0, 0, 0, 176, 1462
|
||||
"e:\Workspace\JE-Skin\static\svelte.svg", "XML", 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
|
||||
"e:\Workspace\JE-Skin\static\tauri.svg", "XML", 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 1, 7
|
||||
"e:\Workspace\JE-Skin\static\vite.svg", "XML", 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
|
||||
"e:\Workspace\JE-Skin\svelte.config.js", "JavaScript", 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 19
|
||||
"e:\Workspace\JE-Skin\tauri-event.md", "Markdown", 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 181, 555
|
||||
"e:\Workspace\JE-Skin\tsconfig.json", "JSON with Comments", 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 5, 1, 20
|
||||
"e:\Workspace\JE-Skin\vite.config.js", "JavaScript", 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 33
|
||||
"Total", "-", 33, 2040, 597, 14, 27, 182, 4686, 1273, 43, 13, 94, 1250, 10252
|
||||
|
File diff suppressed because one or more lines are too long
@@ -2,7 +2,7 @@
|
||||
|
||||
Date : 2026-04-01 16:39:17
|
||||
|
||||
Directory e:\\Workspace\\joyson-serial
|
||||
Directory e:\\Workspace\\JE-Skin
|
||||
|
||||
Total : 47 files, 8908 codes, 94 comments, 1250 blanks, all 10252 lines
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Date : 2026-04-01 16:39:17
|
||||
Directory : e:\Workspace\joyson-serial
|
||||
Directory : e:\Workspace\JE-Skin
|
||||
Total : 47 files, 8908 codes, 94 comments, 1250 blanks, all 10252 lines
|
||||
|
||||
Languages
|
||||
@@ -49,52 +49,52 @@ Files
|
||||
+---------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+
|
||||
| filename | language | code | comment | blank | total |
|
||||
+---------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+
|
||||
| e:\Workspace\joyson-serial\.idea\modules.xml | XML | 8 | 0 | 0 | 8 |
|
||||
| e:\Workspace\joyson-serial\.idea\tauri-demo.iml | XML | 11 | 0 | 0 | 11 |
|
||||
| e:\Workspace\joyson-serial\README.md | Markdown | 34 | 0 | 20 | 54 |
|
||||
| e:\Workspace\joyson-serial\flowus_tools.json | JSON | 1 | 0 | 1 | 2 |
|
||||
| e:\Workspace\joyson-serial\frontend_prompt.md | Markdown | 189 | 0 | 66 | 255 |
|
||||
| e:\Workspace\joyson-serial\package-lock.json | JSON | 1,957 | 0 | 1 | 1,958 |
|
||||
| e:\Workspace\joyson-serial\package.json | JSON | 31 | 0 | 1 | 32 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\build.rs | Rust | 3 | 0 | 1 | 4 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\capabilities\default.json | JSON | 15 | 0 | 1 | 16 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\commands\mod.rs | Rust | 2 | 0 | 1 | 3 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\commands\serial.rs | Rust | 246 | 0 | 44 | 290 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\commands\window.rs | Rust | 27 | 0 | 6 | 33 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\lib.rs | Rust | 22 | 0 | 2 | 24 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\log.rs | Rust | 34 | 0 | 2 | 36 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\main.rs | Rust | 8 | 1 | 2 | 11 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\codec.rs | Rust | 6 | 0 | 1 | 7 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\mod.rs | Rust | 4 | 0 | 1 | 5 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\tactile_a.rs | Rust | 67 | 0 | 17 | 84 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\test.rs | Rust | 213 | 7 | 40 | 260 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\error.rs | Rust | 47 | 0 | 6 | 53 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\frame.rs | Rust | 46 | 3 | 9 | 58 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\mod.rs | Rust | 22 | 0 | 7 | 29 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\model.rs | Rust | 377 | 57 | 67 | 501 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\record.rs | Rust | 50 | 4 | 11 | 65 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\serial.rs | Rust | 73 | 0 | 8 | 81 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\utils.rs | Rust | 26 | 0 | 6 | 32 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\tauri.conf.json | JSON | 36 | 0 | 1 | 37 |
|
||||
| e:\Workspace\joyson-serial\src\app.html | HTML | 13 | 0 | 1 | 14 |
|
||||
| e:\Workspace\joyson-serial\src\lib\components\CenterStage.svelte | Svelte | 691 | 0 | 96 | 787 |
|
||||
| e:\Workspace\joyson-serial\src\lib\components\ConfigPanel.svelte | Svelte | 398 | 0 | 63 | 461 |
|
||||
| e:\Workspace\joyson-serial\src\lib\components\HudPanel.svelte | Svelte | 861 | 0 | 110 | 971 |
|
||||
| e:\Workspace\joyson-serial\src\lib\components\PressureMatrixViewer.svelte | Svelte | 558 | 0 | 97 | 655 |
|
||||
| e:\Workspace\joyson-serial\src\lib\components\SignalChart.svelte | Svelte | 382 | 0 | 71 | 453 |
|
||||
| e:\Workspace\joyson-serial\src\lib\components\SummaryCurve.svelte | Svelte | 497 | 0 | 88 | 585 |
|
||||
| e:\Workspace\joyson-serial\src\lib\config\color-map.ts | TypeScript | 55 | 0 | 3 | 58 |
|
||||
| e:\Workspace\joyson-serial\src\lib\styles\theme.css | PostCSS | 43 | 1 | 7 | 51 |
|
||||
| e:\Workspace\joyson-serial\src\lib\types\hud.ts | TypeScript | 126 | 0 | 20 | 146 |
|
||||
| e:\Workspace\joyson-serial\src\routes\+layout.svelte | Svelte | 13 | 0 | 5 | 18 |
|
||||
| e:\Workspace\joyson-serial\src\routes\+layout.ts | TypeScript | 1 | 4 | 1 | 6 |
|
||||
| e:\Workspace\joyson-serial\src\routes\+page.svelte | Svelte | 1,286 | 0 | 176 | 1,462 |
|
||||
| e:\Workspace\joyson-serial\static\svelte.svg | XML | 1 | 0 | 0 | 1 |
|
||||
| e:\Workspace\joyson-serial\static\tauri.svg | XML | 6 | 0 | 1 | 7 |
|
||||
| e:\Workspace\joyson-serial\static\vite.svg | XML | 1 | 0 | 0 | 1 |
|
||||
| e:\Workspace\joyson-serial\svelte.config.js | JavaScript | 11 | 5 | 3 | 19 |
|
||||
| e:\Workspace\joyson-serial\tauri-event.md | Markdown | 374 | 0 | 181 | 555 |
|
||||
| e:\Workspace\joyson-serial\tsconfig.json | JSON with Comments | 14 | 5 | 1 | 20 |
|
||||
| e:\Workspace\joyson-serial\vite.config.js | JavaScript | 22 | 7 | 4 | 33 |
|
||||
| e:\Workspace\JE-Skin\.idea\modules.xml | XML | 8 | 0 | 0 | 8 |
|
||||
| e:\Workspace\JE-Skin\.idea\tauri-demo.iml | XML | 11 | 0 | 0 | 11 |
|
||||
| e:\Workspace\JE-Skin\README.md | Markdown | 34 | 0 | 20 | 54 |
|
||||
| e:\Workspace\JE-Skin\flowus_tools.json | JSON | 1 | 0 | 1 | 2 |
|
||||
| e:\Workspace\JE-Skin\frontend_prompt.md | Markdown | 189 | 0 | 66 | 255 |
|
||||
| e:\Workspace\JE-Skin\package-lock.json | JSON | 1,957 | 0 | 1 | 1,958 |
|
||||
| e:\Workspace\JE-Skin\package.json | JSON | 31 | 0 | 1 | 32 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\build.rs | Rust | 3 | 0 | 1 | 4 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\capabilities\default.json | JSON | 15 | 0 | 1 | 16 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\commands\mod.rs | Rust | 2 | 0 | 1 | 3 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\commands\serial.rs | Rust | 246 | 0 | 44 | 290 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\commands\window.rs | Rust | 27 | 0 | 6 | 33 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\lib.rs | Rust | 22 | 0 | 2 | 24 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\log.rs | Rust | 34 | 0 | 2 | 36 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\main.rs | Rust | 8 | 1 | 2 | 11 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\codec.rs | Rust | 6 | 0 | 1 | 7 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\mod.rs | Rust | 4 | 0 | 1 | 5 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\tactile_a.rs | Rust | 67 | 0 | 17 | 84 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\test.rs | Rust | 213 | 7 | 40 | 260 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\error.rs | Rust | 47 | 0 | 6 | 53 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\frame.rs | Rust | 46 | 3 | 9 | 58 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\mod.rs | Rust | 22 | 0 | 7 | 29 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\model.rs | Rust | 377 | 57 | 67 | 501 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\record.rs | Rust | 50 | 4 | 11 | 65 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\serial.rs | Rust | 73 | 0 | 8 | 81 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\utils.rs | Rust | 26 | 0 | 6 | 32 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\tauri.conf.json | JSON | 36 | 0 | 1 | 37 |
|
||||
| e:\Workspace\JE-Skin\src\app.html | HTML | 13 | 0 | 1 | 14 |
|
||||
| e:\Workspace\JE-Skin\src\lib\components\CenterStage.svelte | Svelte | 691 | 0 | 96 | 787 |
|
||||
| e:\Workspace\JE-Skin\src\lib\components\ConfigPanel.svelte | Svelte | 398 | 0 | 63 | 461 |
|
||||
| e:\Workspace\JE-Skin\src\lib\components\HudPanel.svelte | Svelte | 861 | 0 | 110 | 971 |
|
||||
| e:\Workspace\JE-Skin\src\lib\components\PressureMatrixViewer.svelte | Svelte | 558 | 0 | 97 | 655 |
|
||||
| e:\Workspace\JE-Skin\src\lib\components\SignalChart.svelte | Svelte | 382 | 0 | 71 | 453 |
|
||||
| e:\Workspace\JE-Skin\src\lib\components\SummaryCurve.svelte | Svelte | 497 | 0 | 88 | 585 |
|
||||
| e:\Workspace\JE-Skin\src\lib\config\color-map.ts | TypeScript | 55 | 0 | 3 | 58 |
|
||||
| e:\Workspace\JE-Skin\src\lib\styles\theme.css | PostCSS | 43 | 1 | 7 | 51 |
|
||||
| e:\Workspace\JE-Skin\src\lib\types\hud.ts | TypeScript | 126 | 0 | 20 | 146 |
|
||||
| e:\Workspace\JE-Skin\src\routes\+layout.svelte | Svelte | 13 | 0 | 5 | 18 |
|
||||
| e:\Workspace\JE-Skin\src\routes\+layout.ts | TypeScript | 1 | 4 | 1 | 6 |
|
||||
| e:\Workspace\JE-Skin\src\routes\+page.svelte | Svelte | 1,286 | 0 | 176 | 1,462 |
|
||||
| e:\Workspace\JE-Skin\static\svelte.svg | XML | 1 | 0 | 0 | 1 |
|
||||
| e:\Workspace\JE-Skin\static\tauri.svg | XML | 6 | 0 | 1 | 7 |
|
||||
| e:\Workspace\JE-Skin\static\vite.svg | XML | 1 | 0 | 0 | 1 |
|
||||
| e:\Workspace\JE-Skin\svelte.config.js | JavaScript | 11 | 5 | 3 | 19 |
|
||||
| e:\Workspace\JE-Skin\tauri-event.md | Markdown | 374 | 0 | 181 | 555 |
|
||||
| e:\Workspace\JE-Skin\tsconfig.json | JSON with Comments | 14 | 5 | 1 | 20 |
|
||||
| e:\Workspace\JE-Skin\vite.config.js | JavaScript | 22 | 7 | 4 | 33 |
|
||||
| Total | | 8,908 | 94 | 1,250 | 10,252 |
|
||||
+---------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Date : 2026-04-02 14:42:07
|
||||
|
||||
Directory e:\\Workspace\\joyson-serial
|
||||
Directory e:\\Workspace\\JE-Skin
|
||||
|
||||
Total : 47 files, 9155 codes, 95 comments, 1279 blanks, all 10529 lines
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Date : 2026-04-02 14:42:07
|
||||
|
||||
Directory e:\\Workspace\\joyson-serial
|
||||
Directory e:\\Workspace\\JE-Skin
|
||||
|
||||
Total : 6 files, 247 codes, 1 comments, 29 blanks, all 277 lines
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
"filename", "language", "Rust", "comment", "blank", "total"
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\tactile_a.rs", "Rust", 153, 0, 11, 164
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\test.rs", "Rust", 2, 1, -2, 1
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\error.rs", "Rust", 2, 0, 0, 2
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\frame.rs", "Rust", 1, 0, -1, 0
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\serial.rs", "Rust", 68, 0, 14, 82
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\utils.rs", "Rust", 21, 0, 7, 28
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\tactile_a.rs", "Rust", 153, 0, 11, 164
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\test.rs", "Rust", 2, 1, -2, 1
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\error.rs", "Rust", 2, 0, 0, 2
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\frame.rs", "Rust", 1, 0, -1, 0
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\serial.rs", "Rust", 68, 0, 14, 82
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\utils.rs", "Rust", 21, 0, 7, 28
|
||||
"Total", "-", 247, 1, 29, 277
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
Date : 2026-04-02 14:42:07
|
||||
|
||||
Directory e:\\Workspace\\joyson-serial
|
||||
Directory e:\\Workspace\\JE-Skin
|
||||
|
||||
Total : 6 files, 247 codes, 1 comments, 29 blanks, all 277 lines
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Date : 2026-04-02 14:42:07
|
||||
Directory : e:\Workspace\joyson-serial
|
||||
Directory : e:\Workspace\JE-Skin
|
||||
Total : 6 files, 247 codes, 1 comments, 29 blanks, all 277 lines
|
||||
|
||||
Languages
|
||||
@@ -25,11 +25,11 @@ Files
|
||||
+--------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
||||
| filename | language | code | comment | blank | total |
|
||||
+--------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\tactile_a.rs | Rust | 153 | 0 | 11 | 164 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\test.rs | Rust | 2 | 1 | -2 | 1 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\error.rs | Rust | 2 | 0 | 0 | 2 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\frame.rs | Rust | 1 | 0 | -1 | 0 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\serial.rs | Rust | 68 | 0 | 14 | 82 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\utils.rs | Rust | 21 | 0 | 7 | 28 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\tactile_a.rs | Rust | 153 | 0 | 11 | 164 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\test.rs | Rust | 2 | 1 | -2 | 1 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\error.rs | Rust | 2 | 0 | 0 | 2 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\frame.rs | Rust | 1 | 0 | -1 | 0 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\serial.rs | Rust | 68 | 0 | 14 | 82 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\utils.rs | Rust | 21 | 0 | 7 | 28 |
|
||||
| Total | | 247 | 1 | 29 | 277 |
|
||||
+--------------------------------------------------------------------------+----------+------------+------------+------------+------------+
|
||||
@@ -1,49 +1,49 @@
|
||||
"filename", "language", "Markdown", "JSON with Comments", "JSON", "XML", "JavaScript", "HTML", "Rust", "TypeScript", "Svelte", "PostCSS", "comment", "blank", "total"
|
||||
"e:\Workspace\joyson-serial\.idea\modules.xml", "XML", 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8
|
||||
"e:\Workspace\joyson-serial\.idea\tauri-demo.iml", "XML", 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 11
|
||||
"e:\Workspace\joyson-serial\README.md", "Markdown", 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 54
|
||||
"e:\Workspace\joyson-serial\flowus_tools.json", "JSON", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2
|
||||
"e:\Workspace\joyson-serial\frontend_prompt.md", "Markdown", 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 255
|
||||
"e:\Workspace\joyson-serial\package-lock.json", "JSON", 0, 0, 1957, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1958
|
||||
"e:\Workspace\joyson-serial\package.json", "JSON", 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32
|
||||
"e:\Workspace\joyson-serial\src-tauri\build.rs", "Rust", 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 4
|
||||
"e:\Workspace\joyson-serial\src-tauri\capabilities\default.json", "JSON", 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\commands\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 3
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\commands\serial.rs", "Rust", 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 44, 290
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\commands\window.rs", "Rust", 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 6, 33
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\lib.rs", "Rust", 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 2, 24
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\log.rs", "Rust", 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 2, 36
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\main.rs", "Rust", 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 1, 2, 11
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\codec.rs", "Rust", 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 1, 7
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\tactile_a.rs", "Rust", 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 28, 248
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\test.rs", "Rust", 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 8, 38, 261
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\error.rs", "Rust", 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 6, 55
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\frame.rs", "Rust", 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 3, 8, 58
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 7, 29
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\model.rs", "Rust", 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 57, 67, 501
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\record.rs", "Rust", 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 4, 11, 65
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\serial.rs", "Rust", 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 22, 163
|
||||
"e:\Workspace\joyson-serial\src-tauri\src\serial_core\utils.rs", "Rust", 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 13, 60
|
||||
"e:\Workspace\joyson-serial\src-tauri\tauri.conf.json", "JSON", 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 37
|
||||
"e:\Workspace\joyson-serial\src\app.html", "HTML", 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 1, 14
|
||||
"e:\Workspace\joyson-serial\src\lib\components\CenterStage.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 0, 96, 787
|
||||
"e:\Workspace\joyson-serial\src\lib\components\ConfigPanel.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 63, 461
|
||||
"e:\Workspace\joyson-serial\src\lib\components\HudPanel.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 861, 0, 0, 110, 971
|
||||
"e:\Workspace\joyson-serial\src\lib\components\PressureMatrixViewer.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 97, 655
|
||||
"e:\Workspace\joyson-serial\src\lib\components\SignalChart.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 71, 453
|
||||
"e:\Workspace\joyson-serial\src\lib\components\SummaryCurve.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 88, 585
|
||||
"e:\Workspace\joyson-serial\src\lib\config\color-map.ts", "TypeScript", 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 3, 58
|
||||
"e:\Workspace\joyson-serial\src\lib\styles\theme.css", "PostCSS", 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 7, 51
|
||||
"e:\Workspace\joyson-serial\src\lib\types\hud.ts", "TypeScript", 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 20, 146
|
||||
"e:\Workspace\joyson-serial\src\routes\+layout.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 5, 18
|
||||
"e:\Workspace\joyson-serial\src\routes\+layout.ts", "TypeScript", 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 1, 6
|
||||
"e:\Workspace\joyson-serial\src\routes\+page.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 1286, 0, 0, 176, 1462
|
||||
"e:\Workspace\joyson-serial\static\svelte.svg", "XML", 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1
|
||||
"e:\Workspace\joyson-serial\static\tauri.svg", "XML", 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1, 7
|
||||
"e:\Workspace\joyson-serial\static\vite.svg", "XML", 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1
|
||||
"e:\Workspace\joyson-serial\svelte.config.js", "JavaScript", 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 5, 3, 19
|
||||
"e:\Workspace\joyson-serial\tauri-event.md", "Markdown", 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 555
|
||||
"e:\Workspace\joyson-serial\tsconfig.json", "JSON with Comments", 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 20
|
||||
"e:\Workspace\joyson-serial\vite.config.js", "JavaScript", 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 7, 4, 33
|
||||
"e:\Workspace\JE-Skin\.idea\modules.xml", "XML", 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8
|
||||
"e:\Workspace\JE-Skin\.idea\tauri-demo.iml", "XML", 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 11
|
||||
"e:\Workspace\JE-Skin\README.md", "Markdown", 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 54
|
||||
"e:\Workspace\JE-Skin\flowus_tools.json", "JSON", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2
|
||||
"e:\Workspace\JE-Skin\frontend_prompt.md", "Markdown", 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 255
|
||||
"e:\Workspace\JE-Skin\package-lock.json", "JSON", 0, 0, 1957, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1958
|
||||
"e:\Workspace\JE-Skin\package.json", "JSON", 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32
|
||||
"e:\Workspace\JE-Skin\src-tauri\build.rs", "Rust", 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 4
|
||||
"e:\Workspace\JE-Skin\src-tauri\capabilities\default.json", "JSON", 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\commands\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 3
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\commands\serial.rs", "Rust", 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 44, 290
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\commands\window.rs", "Rust", 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 6, 33
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\lib.rs", "Rust", 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 2, 24
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\log.rs", "Rust", 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 2, 36
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\main.rs", "Rust", 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 1, 2, 11
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\codec.rs", "Rust", 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 1, 7
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 5
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\tactile_a.rs", "Rust", 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 28, 248
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\test.rs", "Rust", 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 8, 38, 261
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\error.rs", "Rust", 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 6, 55
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\frame.rs", "Rust", 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 3, 8, 58
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 7, 29
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\model.rs", "Rust", 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 57, 67, 501
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\record.rs", "Rust", 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 4, 11, 65
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\serial.rs", "Rust", 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 22, 163
|
||||
"e:\Workspace\JE-Skin\src-tauri\src\serial_core\utils.rs", "Rust", 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 13, 60
|
||||
"e:\Workspace\JE-Skin\src-tauri\tauri.conf.json", "JSON", 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 37
|
||||
"e:\Workspace\JE-Skin\src\app.html", "HTML", 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 1, 14
|
||||
"e:\Workspace\JE-Skin\src\lib\components\CenterStage.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 0, 96, 787
|
||||
"e:\Workspace\JE-Skin\src\lib\components\ConfigPanel.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 63, 461
|
||||
"e:\Workspace\JE-Skin\src\lib\components\HudPanel.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 861, 0, 0, 110, 971
|
||||
"e:\Workspace\JE-Skin\src\lib\components\PressureMatrixViewer.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 97, 655
|
||||
"e:\Workspace\JE-Skin\src\lib\components\SignalChart.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 71, 453
|
||||
"e:\Workspace\JE-Skin\src\lib\components\SummaryCurve.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 88, 585
|
||||
"e:\Workspace\JE-Skin\src\lib\config\color-map.ts", "TypeScript", 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 3, 58
|
||||
"e:\Workspace\JE-Skin\src\lib\styles\theme.css", "PostCSS", 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 1, 7, 51
|
||||
"e:\Workspace\JE-Skin\src\lib\types\hud.ts", "TypeScript", 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 20, 146
|
||||
"e:\Workspace\JE-Skin\src\routes\+layout.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 5, 18
|
||||
"e:\Workspace\JE-Skin\src\routes\+layout.ts", "TypeScript", 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 1, 6
|
||||
"e:\Workspace\JE-Skin\src\routes\+page.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 0, 0, 1286, 0, 0, 176, 1462
|
||||
"e:\Workspace\JE-Skin\static\svelte.svg", "XML", 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1
|
||||
"e:\Workspace\JE-Skin\static\tauri.svg", "XML", 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1, 7
|
||||
"e:\Workspace\JE-Skin\static\vite.svg", "XML", 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1
|
||||
"e:\Workspace\JE-Skin\svelte.config.js", "JavaScript", 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 5, 3, 19
|
||||
"e:\Workspace\JE-Skin\tauri-event.md", "Markdown", 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 555
|
||||
"e:\Workspace\JE-Skin\tsconfig.json", "JSON with Comments", 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 20
|
||||
"e:\Workspace\JE-Skin\vite.config.js", "JavaScript", 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 7, 4, 33
|
||||
"Total", "-", 597, 14, 2040, 27, 33, 13, 1520, 182, 4686, 43, 95, 1279, 10529
|
||||
|
File diff suppressed because one or more lines are too long
@@ -2,7 +2,7 @@
|
||||
|
||||
Date : 2026-04-02 14:42:07
|
||||
|
||||
Directory e:\\Workspace\\joyson-serial
|
||||
Directory e:\\Workspace\\JE-Skin
|
||||
|
||||
Total : 47 files, 9155 codes, 95 comments, 1279 blanks, all 10529 lines
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Date : 2026-04-02 14:42:07
|
||||
Directory : e:\Workspace\joyson-serial
|
||||
Directory : e:\Workspace\JE-Skin
|
||||
Total : 47 files, 9155 codes, 95 comments, 1279 blanks, all 10529 lines
|
||||
|
||||
Languages
|
||||
@@ -49,52 +49,52 @@ Files
|
||||
+---------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+
|
||||
| filename | language | code | comment | blank | total |
|
||||
+---------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+
|
||||
| e:\Workspace\joyson-serial\.idea\modules.xml | XML | 8 | 0 | 0 | 8 |
|
||||
| e:\Workspace\joyson-serial\.idea\tauri-demo.iml | XML | 11 | 0 | 0 | 11 |
|
||||
| e:\Workspace\joyson-serial\README.md | Markdown | 34 | 0 | 20 | 54 |
|
||||
| e:\Workspace\joyson-serial\flowus_tools.json | JSON | 1 | 0 | 1 | 2 |
|
||||
| e:\Workspace\joyson-serial\frontend_prompt.md | Markdown | 189 | 0 | 66 | 255 |
|
||||
| e:\Workspace\joyson-serial\package-lock.json | JSON | 1,957 | 0 | 1 | 1,958 |
|
||||
| e:\Workspace\joyson-serial\package.json | JSON | 31 | 0 | 1 | 32 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\build.rs | Rust | 3 | 0 | 1 | 4 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\capabilities\default.json | JSON | 15 | 0 | 1 | 16 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\commands\mod.rs | Rust | 2 | 0 | 1 | 3 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\commands\serial.rs | Rust | 246 | 0 | 44 | 290 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\commands\window.rs | Rust | 27 | 0 | 6 | 33 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\lib.rs | Rust | 22 | 0 | 2 | 24 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\log.rs | Rust | 34 | 0 | 2 | 36 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\main.rs | Rust | 8 | 1 | 2 | 11 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\codec.rs | Rust | 6 | 0 | 1 | 7 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\mod.rs | Rust | 4 | 0 | 1 | 5 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\tactile_a.rs | Rust | 220 | 0 | 28 | 248 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\test.rs | Rust | 215 | 8 | 38 | 261 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\error.rs | Rust | 49 | 0 | 6 | 55 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\frame.rs | Rust | 47 | 3 | 8 | 58 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\mod.rs | Rust | 22 | 0 | 7 | 29 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\model.rs | Rust | 377 | 57 | 67 | 501 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\record.rs | Rust | 50 | 4 | 11 | 65 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\serial.rs | Rust | 141 | 0 | 22 | 163 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\src\serial_core\utils.rs | Rust | 47 | 0 | 13 | 60 |
|
||||
| e:\Workspace\joyson-serial\src-tauri\tauri.conf.json | JSON | 36 | 0 | 1 | 37 |
|
||||
| e:\Workspace\joyson-serial\src\app.html | HTML | 13 | 0 | 1 | 14 |
|
||||
| e:\Workspace\joyson-serial\src\lib\components\CenterStage.svelte | Svelte | 691 | 0 | 96 | 787 |
|
||||
| e:\Workspace\joyson-serial\src\lib\components\ConfigPanel.svelte | Svelte | 398 | 0 | 63 | 461 |
|
||||
| e:\Workspace\joyson-serial\src\lib\components\HudPanel.svelte | Svelte | 861 | 0 | 110 | 971 |
|
||||
| e:\Workspace\joyson-serial\src\lib\components\PressureMatrixViewer.svelte | Svelte | 558 | 0 | 97 | 655 |
|
||||
| e:\Workspace\joyson-serial\src\lib\components\SignalChart.svelte | Svelte | 382 | 0 | 71 | 453 |
|
||||
| e:\Workspace\joyson-serial\src\lib\components\SummaryCurve.svelte | Svelte | 497 | 0 | 88 | 585 |
|
||||
| e:\Workspace\joyson-serial\src\lib\config\color-map.ts | TypeScript | 55 | 0 | 3 | 58 |
|
||||
| e:\Workspace\joyson-serial\src\lib\styles\theme.css | PostCSS | 43 | 1 | 7 | 51 |
|
||||
| e:\Workspace\joyson-serial\src\lib\types\hud.ts | TypeScript | 126 | 0 | 20 | 146 |
|
||||
| e:\Workspace\joyson-serial\src\routes\+layout.svelte | Svelte | 13 | 0 | 5 | 18 |
|
||||
| e:\Workspace\joyson-serial\src\routes\+layout.ts | TypeScript | 1 | 4 | 1 | 6 |
|
||||
| e:\Workspace\joyson-serial\src\routes\+page.svelte | Svelte | 1,286 | 0 | 176 | 1,462 |
|
||||
| e:\Workspace\joyson-serial\static\svelte.svg | XML | 1 | 0 | 0 | 1 |
|
||||
| e:\Workspace\joyson-serial\static\tauri.svg | XML | 6 | 0 | 1 | 7 |
|
||||
| e:\Workspace\joyson-serial\static\vite.svg | XML | 1 | 0 | 0 | 1 |
|
||||
| e:\Workspace\joyson-serial\svelte.config.js | JavaScript | 11 | 5 | 3 | 19 |
|
||||
| e:\Workspace\joyson-serial\tauri-event.md | Markdown | 374 | 0 | 181 | 555 |
|
||||
| e:\Workspace\joyson-serial\tsconfig.json | JSON with Comments | 14 | 5 | 1 | 20 |
|
||||
| e:\Workspace\joyson-serial\vite.config.js | JavaScript | 22 | 7 | 4 | 33 |
|
||||
| e:\Workspace\JE-Skin\.idea\modules.xml | XML | 8 | 0 | 0 | 8 |
|
||||
| e:\Workspace\JE-Skin\.idea\tauri-demo.iml | XML | 11 | 0 | 0 | 11 |
|
||||
| e:\Workspace\JE-Skin\README.md | Markdown | 34 | 0 | 20 | 54 |
|
||||
| e:\Workspace\JE-Skin\flowus_tools.json | JSON | 1 | 0 | 1 | 2 |
|
||||
| e:\Workspace\JE-Skin\frontend_prompt.md | Markdown | 189 | 0 | 66 | 255 |
|
||||
| e:\Workspace\JE-Skin\package-lock.json | JSON | 1,957 | 0 | 1 | 1,958 |
|
||||
| e:\Workspace\JE-Skin\package.json | JSON | 31 | 0 | 1 | 32 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\build.rs | Rust | 3 | 0 | 1 | 4 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\capabilities\default.json | JSON | 15 | 0 | 1 | 16 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\commands\mod.rs | Rust | 2 | 0 | 1 | 3 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\commands\serial.rs | Rust | 246 | 0 | 44 | 290 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\commands\window.rs | Rust | 27 | 0 | 6 | 33 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\lib.rs | Rust | 22 | 0 | 2 | 24 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\log.rs | Rust | 34 | 0 | 2 | 36 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\main.rs | Rust | 8 | 1 | 2 | 11 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\codec.rs | Rust | 6 | 0 | 1 | 7 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\mod.rs | Rust | 4 | 0 | 1 | 5 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\tactile_a.rs | Rust | 220 | 0 | 28 | 248 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\codecs\test.rs | Rust | 215 | 8 | 38 | 261 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\error.rs | Rust | 49 | 0 | 6 | 55 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\frame.rs | Rust | 47 | 3 | 8 | 58 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\mod.rs | Rust | 22 | 0 | 7 | 29 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\model.rs | Rust | 377 | 57 | 67 | 501 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\record.rs | Rust | 50 | 4 | 11 | 65 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\serial.rs | Rust | 141 | 0 | 22 | 163 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\src\serial_core\utils.rs | Rust | 47 | 0 | 13 | 60 |
|
||||
| e:\Workspace\JE-Skin\src-tauri\tauri.conf.json | JSON | 36 | 0 | 1 | 37 |
|
||||
| e:\Workspace\JE-Skin\src\app.html | HTML | 13 | 0 | 1 | 14 |
|
||||
| e:\Workspace\JE-Skin\src\lib\components\CenterStage.svelte | Svelte | 691 | 0 | 96 | 787 |
|
||||
| e:\Workspace\JE-Skin\src\lib\components\ConfigPanel.svelte | Svelte | 398 | 0 | 63 | 461 |
|
||||
| e:\Workspace\JE-Skin\src\lib\components\HudPanel.svelte | Svelte | 861 | 0 | 110 | 971 |
|
||||
| e:\Workspace\JE-Skin\src\lib\components\PressureMatrixViewer.svelte | Svelte | 558 | 0 | 97 | 655 |
|
||||
| e:\Workspace\JE-Skin\src\lib\components\SignalChart.svelte | Svelte | 382 | 0 | 71 | 453 |
|
||||
| e:\Workspace\JE-Skin\src\lib\components\SummaryCurve.svelte | Svelte | 497 | 0 | 88 | 585 |
|
||||
| e:\Workspace\JE-Skin\src\lib\config\color-map.ts | TypeScript | 55 | 0 | 3 | 58 |
|
||||
| e:\Workspace\JE-Skin\src\lib\styles\theme.css | PostCSS | 43 | 1 | 7 | 51 |
|
||||
| e:\Workspace\JE-Skin\src\lib\types\hud.ts | TypeScript | 126 | 0 | 20 | 146 |
|
||||
| e:\Workspace\JE-Skin\src\routes\+layout.svelte | Svelte | 13 | 0 | 5 | 18 |
|
||||
| e:\Workspace\JE-Skin\src\routes\+layout.ts | TypeScript | 1 | 4 | 1 | 6 |
|
||||
| e:\Workspace\JE-Skin\src\routes\+page.svelte | Svelte | 1,286 | 0 | 176 | 1,462 |
|
||||
| e:\Workspace\JE-Skin\static\svelte.svg | XML | 1 | 0 | 0 | 1 |
|
||||
| e:\Workspace\JE-Skin\static\tauri.svg | XML | 6 | 0 | 1 | 7 |
|
||||
| e:\Workspace\JE-Skin\static\vite.svg | XML | 1 | 0 | 0 | 1 |
|
||||
| e:\Workspace\JE-Skin\svelte.config.js | JavaScript | 11 | 5 | 3 | 19 |
|
||||
| e:\Workspace\JE-Skin\tauri-event.md | Markdown | 374 | 0 | 181 | 555 |
|
||||
| e:\Workspace\JE-Skin\tsconfig.json | JSON with Comments | 14 | 5 | 1 | 20 |
|
||||
| e:\Workspace\JE-Skin\vite.config.js | JavaScript | 22 | 7 | 4 | 33 |
|
||||
| Total | | 9,155 | 95 | 1,279 | 10,529 |
|
||||
+---------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+
|
||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "joyson-serial",
|
||||
"name": "JE-Skin",
|
||||
"version": "0.1.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "joyson-serial",
|
||||
"name": "JE-Skin",
|
||||
"version": "0.1.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "joyson-serial",
|
||||
"name": "JE-Skin",
|
||||
"version": "0.1.0",
|
||||
"description": "",
|
||||
"type": "module",
|
||||
|
||||
44
src-tauri/Cargo.lock
generated
44
src-tauri/Cargo.lock
generated
@@ -2,6 +2,28 @@
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "JE-Skin"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
"chrono",
|
||||
"crc",
|
||||
"csv",
|
||||
"fern",
|
||||
"humantime",
|
||||
"log",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"tauri",
|
||||
"tauri-build",
|
||||
"tauri-plugin-opener",
|
||||
"tokio",
|
||||
"tokio-serial",
|
||||
"tokio-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "adler2"
|
||||
version = "2.0.1"
|
||||
@@ -1941,28 +1963,6 @@ version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
|
||||
|
||||
[[package]]
|
||||
name = "joyson-serial"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
"chrono",
|
||||
"crc",
|
||||
"csv",
|
||||
"fern",
|
||||
"humantime",
|
||||
"log",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"tauri",
|
||||
"tauri-build",
|
||||
"tauri-plugin-opener",
|
||||
"tokio",
|
||||
"tokio-serial",
|
||||
"tokio-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "js-sys"
|
||||
version = "0.3.91"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[package]
|
||||
name = "joyson-serial"
|
||||
name = "JE-Skin"
|
||||
version = "0.1.0"
|
||||
description = "A Tauri App"
|
||||
authors = ["you"]
|
||||
|
||||
@@ -113,7 +113,7 @@ pub async fn serial_connect(
|
||||
let task_app = app.clone();
|
||||
let task_port_name = port_name.clone();
|
||||
|
||||
let port = tokio_serial::new(&port_name, 115200)
|
||||
let port = tokio_serial::new(&port_name, 921600)
|
||||
.open_native_async()
|
||||
.map_err(|_| SerialError::OpenError)?;
|
||||
let session_started_at = Instant::now();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use fern::colors::{Color, ColoredLevelConfig};
|
||||
use log::{debug, error, info, trace, warn};
|
||||
use fern::{Dispatch, colors::{Color, ColoredLevelConfig}};
|
||||
use log::{debug};
|
||||
use std::time::SystemTime;
|
||||
pub fn setup_logger() {
|
||||
let colors_line = ColoredLevelConfig::new()
|
||||
@@ -10,7 +10,13 @@ pub fn setup_logger() {
|
||||
.trace(Color::BrightBlack);
|
||||
|
||||
let colors_level = colors_line.info(Color::Green);
|
||||
fern::Dispatch::new()
|
||||
let level = if cfg!(debug_assertions) {
|
||||
log::LevelFilter::Debug
|
||||
} else {
|
||||
log::LevelFilter::Info
|
||||
};
|
||||
|
||||
let console_config = fern::Dispatch::new()
|
||||
.format(move |out, message, record| {
|
||||
out.finish(
|
||||
format_args!(
|
||||
@@ -26,11 +32,33 @@ pub fn setup_logger() {
|
||||
)
|
||||
);
|
||||
})
|
||||
.level(log::LevelFilter::Info)
|
||||
.chain(std::io::stdout())
|
||||
.chain(fern::DateBased::new("program.log", "%Y-%m-%d"))
|
||||
.level(level)
|
||||
.chain(std::io::stdout());
|
||||
// .chain(fern::DateBased::new("program.log", "%Y-%m-%d"))
|
||||
// .apply()
|
||||
// .unwrap();
|
||||
|
||||
let file_config = fern::Dispatch::new()
|
||||
.format(move |out, message, record| {
|
||||
out.finish(
|
||||
format_args!(
|
||||
"[{data} {level} {target}] {message}",
|
||||
data = humantime::format_rfc3339_seconds(SystemTime::now()),
|
||||
target = record.target(),
|
||||
level = colors_level.color(record.level()),
|
||||
message = message,
|
||||
)
|
||||
);
|
||||
})
|
||||
.level(level)
|
||||
.chain(fern::DateBased::new("program.log", "%Y-%m-%d"));
|
||||
|
||||
Dispatch::new()
|
||||
.level(log::LevelFilter::Debug)
|
||||
.chain(console_config)
|
||||
.chain(file_config)
|
||||
.apply()
|
||||
.unwrap();
|
||||
|
||||
debug!("logging initialized");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ use crate::serial_core::frame::{
|
||||
FrameHandler, TactileAFrameMetaData, TactileARepFrame, TactileAReqFrame,
|
||||
};
|
||||
use crate::serial_core::record::{write_csv, CsvExporter, CsvImporter, RecordedFrame, Recording};
|
||||
use crate::serial_core::utils::{calc_crc8_itu, elapsed_millis, usize_to_u16_le_bytes};
|
||||
use crate::serial_core::utils::{calc_crc8_itu, elapsed_millis};
|
||||
use crate::serial_core::{
|
||||
codec::Codec,
|
||||
frame::{TactileAFrame, TactileAFrameStatusCode},
|
||||
@@ -12,12 +12,14 @@ use async_trait::async_trait;
|
||||
use csv::StringRecord;
|
||||
use anyhow::anyhow;
|
||||
use std::io::Read;
|
||||
use log::debug;
|
||||
|
||||
const FRAME_BUFFER_MIN_LENGTH: usize = 15;
|
||||
|
||||
pub struct TactileACodec {
|
||||
buffer: Vec<u8>,
|
||||
frame_nb: u64,
|
||||
expected_data_len: usize,
|
||||
}
|
||||
|
||||
pub struct TactileACsvExporter {
|
||||
@@ -64,6 +66,7 @@ impl TactileACodec {
|
||||
Self {
|
||||
buffer: Vec::new(),
|
||||
frame_nb: 0,
|
||||
expected_data_len: cols * rows * 2,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,11 +148,33 @@ impl Codec<TactileAFrame> for TactileACodec {
|
||||
]);
|
||||
let except_data_len = u16::from_le_bytes([self.buffer[11], self.buffer[12]]) as usize;
|
||||
let status = TactileAFrameStatusCode::from(self.buffer[13]);
|
||||
if except_data_len != self.expected_data_len {
|
||||
debug!(
|
||||
"unexpected payload length: expected {}, got {}, buffer_len={}",
|
||||
self.expected_data_len,
|
||||
except_data_len,
|
||||
self.buffer.len()
|
||||
);
|
||||
self.buffer.drain(0..1);
|
||||
continue;
|
||||
}
|
||||
|
||||
let frame_length = except_data_len + FRAME_BUFFER_MIN_LENGTH;
|
||||
if self.buffer.len() < frame_length {
|
||||
break;
|
||||
}
|
||||
|
||||
let need_check_data = self.buffer[0..14 + except_data_len].to_vec();
|
||||
let payload = self.buffer[14..14 + except_data_len].to_vec();
|
||||
let crc8_itu_alg = crc::Crc::<u8>::new(&crc::CRC_8_I_432_1);
|
||||
let checksum = crc8_itu_alg.checksum(&payload.as_slice());
|
||||
let frame_length = except_data_len + FRAME_BUFFER_MIN_LENGTH;
|
||||
let checksum = crc8_itu_alg.checksum(&need_check_data.as_slice());
|
||||
if self.buffer[frame_length - 1] != checksum {
|
||||
debug!(
|
||||
"checksum mismatch: expected {:02X}, got {:02X}, frame_len={}",
|
||||
checksum,
|
||||
self.buffer[frame_length - 1],
|
||||
frame_length
|
||||
);
|
||||
self.buffer.drain(0..1);
|
||||
continue;
|
||||
}
|
||||
@@ -187,11 +212,13 @@ impl Codec<TactileAFrame> for TactileACodec {
|
||||
TactileAFrame::Req(f) => {
|
||||
let mut req_bytes: Vec<u8> = Vec::new();
|
||||
req_bytes.extend_from_slice(f.meta.header.as_slice());
|
||||
req_bytes.extend_from_slice(usize_to_u16_le_bytes(f.meta.payload_len).as_slice());
|
||||
req_bytes.extend_from_slice((f.meta.payload_len as u16).to_le_bytes().as_slice());
|
||||
req_bytes.push(f.meta.device_addr);
|
||||
req_bytes.push(f.meta.extend_code);
|
||||
req_bytes.push(f.meta.func_code);
|
||||
|
||||
req_bytes.extend_from_slice(f.meta.start_addr.to_le_bytes().as_slice());
|
||||
req_bytes.extend_from_slice((f.meta.except_data_len as u16).to_le_bytes().as_slice());
|
||||
let checksum = calc_crc8_itu(req_bytes.as_slice());
|
||||
req_bytes.push(checksum);
|
||||
Ok(req_bytes)
|
||||
@@ -209,6 +236,7 @@ impl FrameHandler<TactileAFrame, i32> for TactileAHandler {
|
||||
match frame {
|
||||
TactileAFrame::Rep(rep) => {
|
||||
let vals = TactileACodec::parse_data_frame(&rep.payload)?;
|
||||
debug!("vals is {:?}", vals);
|
||||
Ok(Some(vals))
|
||||
}
|
||||
_ => Ok(None),
|
||||
|
||||
@@ -6,7 +6,6 @@ use anyhow::anyhow;
|
||||
use async_trait::async_trait;
|
||||
use csv::StringRecord;
|
||||
use crate::serial_core::record::{write_csv, CsvExporter, CsvImporter, RecordedFrame, Recording};
|
||||
use crc::{Crc, CRC_8_SMBUS};
|
||||
use crate::serial_core::utils::{
|
||||
elapsed_millis,
|
||||
usize_to_u16_be_bytes
|
||||
|
||||
@@ -12,7 +12,7 @@ use tokio_util::sync::CancellationToken;
|
||||
use std::future::pending;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::time::Instant;
|
||||
use log::info;
|
||||
use log::{info, debug};
|
||||
use crate::serial_core::record::{FrameTiming, RecordedFrame};
|
||||
|
||||
pub enum PollMode<F> {
|
||||
@@ -211,6 +211,7 @@ where
|
||||
let mut prune_interval = time::interval(Duration::from_millis(450));
|
||||
prune_interval.set_missed_tick_behavior(MissedTickBehavior::Delay);
|
||||
|
||||
|
||||
loop {
|
||||
tokio::select! {
|
||||
_ = cancel.cancelled() => break,
|
||||
@@ -239,6 +240,9 @@ where
|
||||
read_result = port.read(&mut buffer) => {
|
||||
let n = read_result?;
|
||||
if n == 0 {
|
||||
// Some serial drivers can resolve reads with 0 bytes repeatedly.
|
||||
// Yield here so timer-driven poll requests are not starved by a busy loop.
|
||||
tokio::task::yield_now().await;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -261,7 +265,6 @@ where
|
||||
|
||||
let display_values = if let Some(vals) = decode_res.as_ref() {
|
||||
let summary = vals.iter().copied().sum::<i32>();
|
||||
info!("dot value summary: {}", summary);
|
||||
chart_state.record_summary(summary as f32);
|
||||
chart_state.record_pressure_matrix(vals.as_slice());
|
||||
Some(vec![summary])
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
use anyhow::Ok;
|
||||
use crc::{Crc, CRC_8_I_432_1, CRC_8_SMBUS};
|
||||
|
||||
use std::time::Instant;
|
||||
|
||||
pub fn usize_to_u16_be_bytes(n: usize) -> [u8; 2] {
|
||||
|
||||
3
src-tauri/target-codex-checkfqvNiz/CACHEDIR.TAG
Normal file
3
src-tauri/target-codex-checkfqvNiz/CACHEDIR.TAG
Normal file
@@ -0,0 +1,3 @@
|
||||
Signature: 8a477f597d28d172789f06886806bc55
|
||||
# This file is a cache directory tag created by cargo.
|
||||
# For information about cache directory tags see https://bford.info/cachedir/
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"$schema": "https://schema.tauri.app/config/2",
|
||||
"productName": "tauri-demo",
|
||||
"productName": "JE-Skin",
|
||||
"version": "0.1.0",
|
||||
"identifier": "com.lenn.tauri-serial",
|
||||
"build": {
|
||||
@@ -12,7 +12,7 @@
|
||||
"app": {
|
||||
"windows": [
|
||||
{
|
||||
"title": "joyson-serial",
|
||||
"title": "JE-Skin",
|
||||
"width": 1366,
|
||||
"height": 860,
|
||||
"decorations": false
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
export let matrixRows = 12;
|
||||
export let matrixCols = 7;
|
||||
export let rangeMin = 0;
|
||||
export let rangeMax = 5000;
|
||||
export let rangeMax = 16000;
|
||||
export let colorMapPreset: PressureColorMapPreset = "emerald";
|
||||
export let colorMapOptions: HudColorMapOption[] = [];
|
||||
export let replaySectionLabel = "";
|
||||
@@ -193,7 +193,7 @@
|
||||
</div>
|
||||
|
||||
<div class="canvas-wrap">
|
||||
{#key `${matrixRows}x${matrixCols}`}
|
||||
{#key `${matrixRows}x${matrixCols}:${colorMapPreset}`}
|
||||
<PressureMatrixViewer
|
||||
{pressureMatrix}
|
||||
{matrixRows}
|
||||
@@ -351,12 +351,17 @@
|
||||
min-height: 0;
|
||||
overflow: hidden;
|
||||
border-radius: 0.72rem;
|
||||
border: 1px solid rgb(101 133 152 / 0.2);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.2);
|
||||
background:
|
||||
linear-gradient(170deg, rgb(8 12 16 / 0.86) 0%, rgb(0 0 0 / 0.96) 58%, rgb(6 10 14 / 0.9) 100%),
|
||||
radial-gradient(circle at 50% 0, rgb(62 232 255 / 0.04), transparent 48%);
|
||||
linear-gradient(
|
||||
170deg,
|
||||
rgb(var(--hud-surface-rgb) / 0.86) 0%,
|
||||
rgb(var(--hud-surface-deep-rgb) / 0.96) 58%,
|
||||
rgb(var(--hud-surface-alt-rgb) / 0.9) 100%
|
||||
),
|
||||
radial-gradient(circle at 50% 0, rgb(var(--hud-glow-rgb) / 0.04), transparent 48%);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgb(175 216 240 / 0.08),
|
||||
inset 0 1px 0 rgb(var(--hud-border-strong-rgb) / 0.08),
|
||||
inset 0 -36px 72px rgb(0 0 0 / 0.4);
|
||||
}
|
||||
|
||||
@@ -390,16 +395,16 @@
|
||||
min-width: 0;
|
||||
max-inline-size: min(22rem, 62%);
|
||||
padding: 0.3rem 0.5rem 0.35rem;
|
||||
border: 1px solid rgb(112 146 166 / 0.2);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.2);
|
||||
border-radius: 0.45rem;
|
||||
background: rgb(2 8 12 / 0.45);
|
||||
background: rgb(var(--hud-surface-deep-rgb) / 0.45);
|
||||
backdrop-filter: blur(2px);
|
||||
}
|
||||
|
||||
.meta-label {
|
||||
margin: 0;
|
||||
font-size: 0.56rem;
|
||||
color: rgb(148 171 189 / 0.8);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.8);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.1em;
|
||||
}
|
||||
@@ -407,7 +412,7 @@
|
||||
h2 {
|
||||
margin: 0.08rem 0 0;
|
||||
font-size: clamp(0.75rem, 1.1vw, 0.92rem);
|
||||
color: rgb(222 241 255 / 0.96);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.96);
|
||||
letter-spacing: 0.03em;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
@@ -416,30 +421,30 @@
|
||||
.meta-hint {
|
||||
margin: 0.09rem 0 0;
|
||||
font-size: 0.62rem;
|
||||
color: rgb(142 165 183 / 0.76);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.76);
|
||||
line-height: 1.15;
|
||||
}
|
||||
|
||||
.runtime-status {
|
||||
margin: 0;
|
||||
align-self: center;
|
||||
border: 1px solid rgb(95 128 149 / 0.35);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.35);
|
||||
border-radius: 999px;
|
||||
padding: 0.3rem 0.66rem;
|
||||
font-size: 0.66rem;
|
||||
letter-spacing: 0.08em;
|
||||
color: rgb(150 174 194 / 0.9);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.9);
|
||||
text-transform: uppercase;
|
||||
white-space: nowrap;
|
||||
background: rgb(3 10 15 / 0.62);
|
||||
background: rgb(var(--hud-surface-deep-rgb) / 0.62);
|
||||
}
|
||||
|
||||
.runtime-status.is-ok {
|
||||
color: rgb(204 248 184 / 0.94);
|
||||
color: rgb(var(--hud-lime-rgb) / 0.94);
|
||||
}
|
||||
|
||||
.runtime-status.is-warn {
|
||||
color: rgb(255 205 188 / 0.92);
|
||||
color: rgb(var(--hud-orange-rgb) / 0.92);
|
||||
}
|
||||
|
||||
.canvas-wrap {
|
||||
@@ -533,15 +538,15 @@
|
||||
pointer-events: auto;
|
||||
display: grid;
|
||||
gap: 0.52rem;
|
||||
border: 1px solid rgb(95 136 159 / 0.34);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.34);
|
||||
border-radius: 0.66rem;
|
||||
padding: 0.66rem 0.72rem;
|
||||
background:
|
||||
linear-gradient(180deg, rgb(8 14 19 / 0.86), rgb(4 8 12 / 0.8)),
|
||||
radial-gradient(circle at 50% 0, rgb(62 232 255 / 0.07), transparent 56%);
|
||||
linear-gradient(180deg, rgb(var(--hud-surface-rgb) / 0.86), rgb(var(--hud-surface-deep-rgb) / 0.8)),
|
||||
radial-gradient(circle at 50% 0, rgb(var(--hud-glow-rgb) / 0.07), transparent 56%);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgb(183 218 239 / 0.08),
|
||||
0 0 18px rgb(62 232 255 / 0.1);
|
||||
inset 0 1px 0 rgb(var(--hud-border-strong-rgb) / 0.08),
|
||||
0 0 18px rgb(var(--hud-glow-rgb) / 0.1);
|
||||
}
|
||||
|
||||
.replay-floating-panel.is-right {
|
||||
@@ -582,24 +587,24 @@
|
||||
font-size: 0.58rem;
|
||||
letter-spacing: 0.11em;
|
||||
text-transform: uppercase;
|
||||
color: rgb(152 185 206 / 0.86);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.86);
|
||||
}
|
||||
|
||||
.replay-panel-file {
|
||||
font-size: 0.73rem;
|
||||
letter-spacing: 0.03em;
|
||||
color: rgb(221 241 255 / 0.94);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.94);
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.replay-panel-frame {
|
||||
border: 1px solid rgb(133 255 68 / 0.36);
|
||||
border: 1px solid rgb(var(--hud-lime-rgb) / 0.36);
|
||||
border-radius: 999px;
|
||||
padding: 0.16rem 0.52rem;
|
||||
background: rgb(17 28 15 / 0.64);
|
||||
color: rgb(204 255 178 / 0.94);
|
||||
background: rgb(var(--hud-surface-alt-rgb) / 0.64);
|
||||
color: rgb(var(--hud-lime-rgb) / 0.94);
|
||||
font-size: 0.67rem;
|
||||
letter-spacing: 0.07em;
|
||||
white-space: nowrap;
|
||||
@@ -608,10 +613,10 @@
|
||||
.replay-close-btn {
|
||||
inline-size: 1.82rem;
|
||||
block-size: 1.82rem;
|
||||
border: 1px solid rgb(255 98 76 / 0.44);
|
||||
border: 1px solid rgb(var(--hud-orange-rgb) / 0.44);
|
||||
border-radius: 0.32rem;
|
||||
background: rgb(24 10 12 / 0.88);
|
||||
color: rgb(255 210 203 / 0.96);
|
||||
background: rgb(var(--hud-surface-deep-rgb) / 0.88);
|
||||
color: rgb(var(--hud-orange-rgb) / 0.96);
|
||||
font-size: 1rem;
|
||||
line-height: 1;
|
||||
display: grid;
|
||||
@@ -624,9 +629,9 @@
|
||||
}
|
||||
|
||||
.replay-close-btn:hover {
|
||||
border-color: rgb(255 132 115 / 0.66);
|
||||
color: rgb(255 234 228 / 0.98);
|
||||
box-shadow: 0 0 12px rgb(255 91 63 / 0.2);
|
||||
border-color: rgb(var(--hud-orange-rgb) / 0.66);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.98);
|
||||
box-shadow: 0 0 12px rgb(var(--hud-orange-rgb) / 0.2);
|
||||
}
|
||||
|
||||
.replay-panel-controls {
|
||||
@@ -643,11 +648,11 @@
|
||||
|
||||
.replay-action-btn {
|
||||
min-block-size: 1.82rem;
|
||||
border: 1px solid rgb(62 232 255 / 0.36);
|
||||
border: 1px solid rgb(var(--hud-cyan-rgb) / 0.36);
|
||||
border-radius: 999px;
|
||||
padding: 0.2rem 0.66rem;
|
||||
background: rgb(8 19 25 / 0.9);
|
||||
color: rgb(225 246 255 / 0.96);
|
||||
background: rgb(var(--hud-surface-alt-rgb) / 0.9);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.96);
|
||||
font-size: 0.7rem;
|
||||
letter-spacing: 0.05em;
|
||||
cursor: pointer;
|
||||
@@ -657,19 +662,19 @@
|
||||
}
|
||||
|
||||
.replay-action-btn:hover {
|
||||
border-color: rgb(116 245 255 / 0.58);
|
||||
box-shadow: 0 0 10px rgb(62 232 255 / 0.14);
|
||||
border-color: rgb(var(--hud-cyan-rgb) / 0.58);
|
||||
box-shadow: 0 0 10px rgb(var(--hud-cyan-rgb) / 0.14);
|
||||
}
|
||||
|
||||
.replay-action-btn.is-stop {
|
||||
border-color: rgb(255 91 63 / 0.44);
|
||||
color: rgb(255 223 214 / 0.94);
|
||||
background: rgb(27 12 10 / 0.86);
|
||||
border-color: rgb(var(--hud-orange-rgb) / 0.44);
|
||||
color: rgb(var(--hud-orange-rgb) / 0.94);
|
||||
background: rgb(var(--hud-surface-deep-rgb) / 0.86);
|
||||
}
|
||||
|
||||
.replay-action-btn.is-stop:hover {
|
||||
border-color: rgb(255 124 101 / 0.64);
|
||||
box-shadow: 0 0 10px rgb(255 91 63 / 0.18);
|
||||
border-color: rgb(var(--hud-orange-rgb) / 0.64);
|
||||
box-shadow: 0 0 10px rgb(var(--hud-orange-rgb) / 0.18);
|
||||
}
|
||||
|
||||
.replay-speed-select,
|
||||
@@ -678,15 +683,15 @@
|
||||
align-items: center;
|
||||
gap: 0.36rem;
|
||||
min-block-size: 1.92rem;
|
||||
border: 1px solid rgb(95 132 158 / 0.32);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.32);
|
||||
border-radius: 999px;
|
||||
padding: 0.16rem 0.2rem 0.16rem 0.48rem;
|
||||
background: rgb(8 15 21 / 0.78);
|
||||
background: rgb(var(--hud-surface-rgb) / 0.78);
|
||||
}
|
||||
|
||||
.replay-speed-select span,
|
||||
.replay-progress-slider span {
|
||||
color: rgb(154 176 194 / 0.84);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.84);
|
||||
font-size: 0.62rem;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
@@ -694,11 +699,11 @@
|
||||
}
|
||||
|
||||
.replay-speed-select select {
|
||||
border: 1px solid rgb(95 132 158 / 0.34);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.34);
|
||||
border-radius: 999px;
|
||||
padding: 0.22rem 0.48rem;
|
||||
background: rgb(4 11 16 / 0.88);
|
||||
color: rgb(216 235 248 / 0.96);
|
||||
background: rgb(var(--hud-surface-deep-rgb) / 0.88);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.96);
|
||||
font-size: 0.72rem;
|
||||
letter-spacing: 0.05em;
|
||||
outline: none;
|
||||
@@ -710,7 +715,7 @@
|
||||
|
||||
.replay-progress-slider input {
|
||||
inline-size: 100%;
|
||||
accent-color: rgb(133 255 68 / 0.92);
|
||||
accent-color: rgb(var(--hud-lime-rgb) / 0.92);
|
||||
}
|
||||
|
||||
.stage-bottom-overlay {
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
export let matrixRows = 12;
|
||||
export let matrixCols = 7;
|
||||
export let rangeMin = 0;
|
||||
export let rangeMax = 5000;
|
||||
export let rangeMax = 16000;
|
||||
export let colorMapPreset: PressureColorMapPreset = "emerald";
|
||||
export let colorMapOptions: HudColorMapOption[] = [];
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
matrixRows = 12;
|
||||
matrixCols = 7;
|
||||
rangeMin = 0;
|
||||
rangeMax = 5000;
|
||||
rangeMax = 16000;
|
||||
colorMapPreset = "emerald";
|
||||
}
|
||||
|
||||
@@ -222,13 +222,13 @@
|
||||
gap: 0.9rem;
|
||||
inline-size: min(23rem, 100%);
|
||||
padding: 0.92rem 0.96rem 1rem;
|
||||
border: 1px solid rgb(88 132 116 / 0.3);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.3);
|
||||
border-radius: 0.82rem;
|
||||
background:
|
||||
linear-gradient(180deg, rgb(6 18 14 / 0.92), rgb(4 10 9 / 0.88)),
|
||||
radial-gradient(circle at 100% 0, rgb(97 146 255 / 0.07), transparent 38%);
|
||||
linear-gradient(180deg, rgb(var(--hud-surface-alt-rgb) / 0.92), rgb(var(--hud-surface-deep-rgb) / 0.88)),
|
||||
radial-gradient(circle at 100% 0, rgb(var(--hud-info-rgb) / 0.07), transparent 38%);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgb(184 236 206 / 0.08),
|
||||
inset 0 1px 0 rgb(var(--hud-border-strong-rgb) / 0.08),
|
||||
0 18px 46px rgb(0 0 0 / 0.28);
|
||||
backdrop-filter: blur(10px);
|
||||
}
|
||||
@@ -249,7 +249,7 @@
|
||||
.field-label,
|
||||
.live-note {
|
||||
margin: 0;
|
||||
color: rgb(157 206 181 / 0.8);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.8);
|
||||
font-size: 0.58rem;
|
||||
letter-spacing: 0.12em;
|
||||
text-transform: uppercase;
|
||||
@@ -257,7 +257,7 @@
|
||||
|
||||
h3 {
|
||||
margin: 0.12rem 0 0;
|
||||
color: rgb(237 248 241 / 0.98);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.98);
|
||||
font-size: 1rem;
|
||||
line-height: 1.2;
|
||||
font-weight: 600;
|
||||
@@ -266,7 +266,7 @@
|
||||
.config-hint,
|
||||
.section-note {
|
||||
margin: 0.14rem 0 0;
|
||||
color: rgb(142 182 164 / 0.78);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.78);
|
||||
font-size: 0.7rem;
|
||||
line-height: 1.25;
|
||||
}
|
||||
@@ -275,9 +275,9 @@
|
||||
position: relative;
|
||||
inline-size: 2rem;
|
||||
block-size: 2rem;
|
||||
border: 1px solid rgb(82 122 106 / 0.32);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.32);
|
||||
border-radius: 999px;
|
||||
background: rgb(4 12 9 / 0.72);
|
||||
background: rgb(var(--hud-surface-deep-rgb) / 0.72);
|
||||
cursor: pointer;
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
@@ -288,7 +288,7 @@
|
||||
left: 50%;
|
||||
inline-size: 0.8rem;
|
||||
block-size: 1px;
|
||||
background: rgb(182 210 195 / 0.9);
|
||||
background: rgb(var(--hud-text-main-rgb) / 0.9);
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
@@ -304,9 +304,9 @@
|
||||
display: grid;
|
||||
gap: 0.62rem;
|
||||
padding: 0.76rem 0.8rem;
|
||||
border: 1px solid rgb(72 116 96 / 0.22);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.22);
|
||||
border-radius: 0.72rem;
|
||||
background: linear-gradient(180deg, rgb(7 15 12 / 0.76), rgb(5 10 8 / 0.64));
|
||||
background: linear-gradient(180deg, rgb(var(--hud-surface-rgb) / 0.76), rgb(var(--hud-surface-deep-rgb) / 0.64));
|
||||
}
|
||||
|
||||
.section-head {
|
||||
@@ -331,11 +331,11 @@
|
||||
.preset-btn,
|
||||
.reset-btn,
|
||||
.palette-btn {
|
||||
border: 1px solid rgb(80 126 105 / 0.28);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.28);
|
||||
border-radius: 999px;
|
||||
padding: 0.38rem 0.72rem;
|
||||
background: rgb(8 19 15 / 0.76);
|
||||
color: rgb(191 219 206 / 0.92);
|
||||
background: rgb(var(--hud-surface-rgb) / 0.76);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.92);
|
||||
font: inherit;
|
||||
font-size: 0.72rem;
|
||||
cursor: pointer;
|
||||
@@ -347,10 +347,10 @@
|
||||
}
|
||||
|
||||
.preset-btn.is-active {
|
||||
border-color: rgb(98 201 149 / 0.48);
|
||||
background: linear-gradient(180deg, rgb(18 54 37 / 0.96), rgb(10 32 23 / 0.92));
|
||||
color: rgb(233 247 240 / 0.98);
|
||||
box-shadow: inset 0 1px 0 rgb(198 246 222 / 0.14), 0 0 16px rgb(63 184 120 / 0.14);
|
||||
border-color: rgb(var(--hud-lime-rgb) / 0.48);
|
||||
background: linear-gradient(180deg, rgb(var(--hud-surface-alt-rgb) / 0.96), rgb(var(--hud-surface-rgb) / 0.92));
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.98);
|
||||
box-shadow: inset 0 1px 0 rgb(var(--hud-border-strong-rgb) / 0.14), 0 0 16px rgb(var(--hud-glow-alt-rgb) / 0.14);
|
||||
}
|
||||
|
||||
.palette-btn {
|
||||
@@ -363,10 +363,10 @@
|
||||
}
|
||||
|
||||
.palette-btn.is-active {
|
||||
border-color: rgb(98 201 149 / 0.48);
|
||||
background: linear-gradient(180deg, rgb(18 54 37 / 0.96), rgb(10 32 23 / 0.92));
|
||||
color: rgb(233 247 240 / 0.98);
|
||||
box-shadow: inset 0 1px 0 rgb(198 246 222 / 0.14), 0 0 16px rgb(63 184 120 / 0.14);
|
||||
border-color: rgb(var(--hud-lime-rgb) / 0.48);
|
||||
background: linear-gradient(180deg, rgb(var(--hud-surface-alt-rgb) / 0.96), rgb(var(--hud-surface-rgb) / 0.92));
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.98);
|
||||
box-shadow: inset 0 1px 0 rgb(var(--hud-border-strong-rgb) / 0.14), 0 0 16px rgb(var(--hud-glow-alt-rgb) / 0.14);
|
||||
}
|
||||
|
||||
.palette-preview {
|
||||
@@ -405,26 +405,26 @@
|
||||
display: grid;
|
||||
gap: 0.38rem;
|
||||
padding: 0.58rem 0.64rem 0.66rem;
|
||||
border: 1px solid rgb(68 106 89 / 0.26);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.26);
|
||||
border-radius: 0.58rem;
|
||||
background: linear-gradient(180deg, rgb(6 14 11 / 0.86), rgb(3 8 6 / 0.82));
|
||||
background: linear-gradient(180deg, rgb(var(--hud-surface-rgb) / 0.86), rgb(var(--hud-surface-deep-rgb) / 0.82));
|
||||
}
|
||||
|
||||
.field-card input {
|
||||
inline-size: 100%;
|
||||
border: 1px solid rgb(82 131 109 / 0.28);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.28);
|
||||
border-radius: 0.46rem;
|
||||
padding: 0.55rem 0.62rem;
|
||||
background: rgb(7 16 12 / 0.92);
|
||||
color: rgb(238 246 241 / 0.98);
|
||||
background: rgb(var(--hud-surface-rgb) / 0.92);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.98);
|
||||
font: inherit;
|
||||
font-size: 0.86rem;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.field-card input:focus {
|
||||
border-color: rgb(97 201 147 / 0.54);
|
||||
box-shadow: 0 0 0 1px rgb(97 201 147 / 0.24);
|
||||
border-color: rgb(var(--hud-lime-rgb) / 0.54);
|
||||
box-shadow: 0 0 0 1px rgb(var(--hud-lime-rgb) / 0.24);
|
||||
}
|
||||
|
||||
.config-foot {
|
||||
@@ -435,11 +435,11 @@
|
||||
}
|
||||
|
||||
.live-note {
|
||||
color: rgb(142 182 164 / 0.8);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.8);
|
||||
}
|
||||
|
||||
.reset-btn {
|
||||
background: linear-gradient(180deg, rgb(10 21 17 / 0.88), rgb(6 12 10 / 0.84));
|
||||
background: linear-gradient(180deg, rgb(var(--hud-surface-alt-rgb) / 0.88), rgb(var(--hud-surface-deep-rgb) / 0.84));
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
||||
@@ -377,8 +377,8 @@
|
||||
display: grid;
|
||||
place-items: center;
|
||||
background:
|
||||
radial-gradient(circle at 30% 12%, rgb(62 232 255 / 0.08), transparent 42%),
|
||||
radial-gradient(circle at 84% 10%, rgb(133 255 68 / 0.07), transparent 40%),
|
||||
radial-gradient(circle at 30% 12%, rgb(var(--hud-glow-rgb) / 0.08), transparent 42%),
|
||||
radial-gradient(circle at 84% 10%, rgb(var(--hud-glow-alt-rgb) / 0.07), transparent 40%),
|
||||
rgb(0 0 0 / 0.6);
|
||||
backdrop-filter: blur(3px);
|
||||
padding: clamp(0.65rem, 2.4vw, 1.25rem);
|
||||
@@ -392,14 +392,19 @@
|
||||
block-size: min(720px, 100%);
|
||||
max-inline-size: calc(100% - 2 * clamp(0.65rem, 2.4vw, 1.25rem));
|
||||
max-block-size: calc(100% - 2 * clamp(0.65rem, 2.4vw, 1.25rem));
|
||||
border: 1px solid rgb(95 132 158 / 0.34);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.34);
|
||||
border-radius: 0.72rem;
|
||||
background:
|
||||
linear-gradient(172deg, rgb(8 12 16 / 0.96) 0%, rgb(4 8 12 / 0.96) 52%, rgb(3 6 10 / 0.98) 100%),
|
||||
radial-gradient(circle at 18% 0, rgb(62 232 255 / 0.06), transparent 42%),
|
||||
radial-gradient(circle at 90% 0, rgb(133 255 68 / 0.05), transparent 38%);
|
||||
linear-gradient(
|
||||
172deg,
|
||||
rgb(var(--hud-surface-rgb) / 0.96) 0%,
|
||||
rgb(var(--hud-surface-deep-rgb) / 0.96) 52%,
|
||||
rgb(var(--hud-surface-deep-rgb) / 0.98) 100%
|
||||
),
|
||||
radial-gradient(circle at 18% 0, rgb(var(--hud-glow-rgb) / 0.06), transparent 42%),
|
||||
radial-gradient(circle at 90% 0, rgb(var(--hud-glow-alt-rgb) / 0.05), transparent 38%);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgb(192 221 240 / 0.08),
|
||||
inset 0 1px 0 rgb(var(--hud-border-strong-rgb) / 0.08),
|
||||
0 22px 50px rgb(0 0 0 / 0.52);
|
||||
overflow: hidden;
|
||||
transform: translate3d(var(--explorer-drag-x, 0), var(--explorer-drag-y, 0), 0);
|
||||
@@ -411,8 +416,8 @@
|
||||
justify-content: space-between;
|
||||
gap: 0.65rem;
|
||||
padding: 0.72rem 0.85rem 0.65rem;
|
||||
border-bottom: 1px solid rgb(95 132 158 / 0.28);
|
||||
background: linear-gradient(180deg, rgb(16 25 32 / 0.6), transparent);
|
||||
border-bottom: 1px solid rgb(var(--hud-border-rgb) / 0.28);
|
||||
background: linear-gradient(180deg, rgb(var(--hud-surface-alt-rgb) / 0.6), transparent);
|
||||
cursor: grab;
|
||||
user-select: none;
|
||||
touch-action: none;
|
||||
@@ -434,12 +439,12 @@
|
||||
block-size: 0.5rem;
|
||||
border-radius: 999px;
|
||||
background: var(--hud-lime);
|
||||
box-shadow: 0 0 0 2px rgb(133 255 68 / 0.14);
|
||||
box-shadow: 0 0 0 2px rgb(var(--hud-lime-rgb) / 0.14);
|
||||
}
|
||||
|
||||
.explorer-title {
|
||||
margin: 0;
|
||||
color: #ecf9ff;
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.98);
|
||||
font-size: 0.92rem;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
@@ -448,10 +453,10 @@
|
||||
.header-close-btn {
|
||||
inline-size: 2rem;
|
||||
block-size: 1.64rem;
|
||||
border: 1px solid rgb(98 131 156 / 0.36);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.36);
|
||||
border-radius: 0.36rem;
|
||||
background: rgb(8 13 18 / 0.9);
|
||||
color: rgb(174 219 244 / 0.9);
|
||||
background: rgb(var(--hud-surface-rgb) / 0.9);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.9);
|
||||
font-size: 1rem;
|
||||
line-height: 1;
|
||||
cursor: pointer;
|
||||
@@ -461,8 +466,8 @@
|
||||
}
|
||||
|
||||
.header-close-btn:hover {
|
||||
border-color: rgb(255 91 63 / 0.6);
|
||||
color: rgb(255 208 198 / 0.96);
|
||||
border-color: rgb(var(--hud-orange-rgb) / 0.6);
|
||||
color: rgb(var(--hud-orange-rgb) / 0.96);
|
||||
}
|
||||
|
||||
.explorer-toolbar {
|
||||
@@ -470,17 +475,17 @@
|
||||
grid-template-columns: auto minmax(0, 1fr);
|
||||
gap: 0.58rem;
|
||||
padding: 0.62rem 0.85rem;
|
||||
border-bottom: 1px solid rgb(95 132 158 / 0.22);
|
||||
background: linear-gradient(90deg, rgb(62 232 255 / 0.03), transparent 44%, rgb(133 255 68 / 0.02));
|
||||
border-bottom: 1px solid rgb(var(--hud-border-rgb) / 0.22);
|
||||
background: linear-gradient(90deg, rgb(var(--hud-glow-rgb) / 0.03), transparent 44%, rgb(var(--hud-glow-alt-rgb) / 0.02));
|
||||
}
|
||||
|
||||
.tool-btn {
|
||||
min-block-size: 1.95rem;
|
||||
border: 1px solid rgb(95 132 158 / 0.36);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.36);
|
||||
border-radius: 0.42rem;
|
||||
padding: 0.25rem 0.65rem;
|
||||
background: rgb(9 16 21 / 0.86);
|
||||
color: rgb(213 233 245 / 0.94);
|
||||
background: rgb(var(--hud-surface-alt-rgb) / 0.86);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.94);
|
||||
font-size: 0.72rem;
|
||||
letter-spacing: 0.05em;
|
||||
cursor: pointer;
|
||||
@@ -491,8 +496,8 @@
|
||||
}
|
||||
|
||||
.tool-btn:hover:not(:disabled) {
|
||||
border-color: rgb(62 232 255 / 0.46);
|
||||
box-shadow: inset 0 0 0 1px rgb(178 216 239 / 0.08);
|
||||
border-color: rgb(var(--hud-cyan-rgb) / 0.46);
|
||||
box-shadow: inset 0 0 0 1px rgb(var(--hud-border-strong-rgb) / 0.08);
|
||||
}
|
||||
|
||||
.tool-btn:disabled {
|
||||
@@ -506,14 +511,14 @@
|
||||
grid-template-columns: auto 1fr;
|
||||
align-items: center;
|
||||
gap: 0.45rem;
|
||||
border: 1px solid rgb(95 132 158 / 0.32);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.32);
|
||||
border-radius: 0.42rem;
|
||||
padding: 0.25rem 0.55rem;
|
||||
background: rgb(8 14 18 / 0.76);
|
||||
background: rgb(var(--hud-surface-rgb) / 0.76);
|
||||
}
|
||||
|
||||
.path-label {
|
||||
color: rgb(140 163 181 / 0.84);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.84);
|
||||
font-size: 0.63rem;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
@@ -525,7 +530,7 @@
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
color: rgb(225 243 255 / 0.97);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.97);
|
||||
font-size: 0.76rem;
|
||||
letter-spacing: 0.03em;
|
||||
}
|
||||
|
||||
@@ -306,15 +306,25 @@
|
||||
display: grid;
|
||||
grid-template-rows: auto auto;
|
||||
gap: clamp(0.5rem, 1.2vw, 0.85rem);
|
||||
--panel-line: rgb(var(--hud-border-rgb) / 0.34);
|
||||
--panel-line-soft: rgb(var(--hud-border-rgb) / 0.22);
|
||||
--panel-line-strong: rgb(var(--hud-border-strong-rgb) / 0.42);
|
||||
--panel-surface: rgb(var(--hud-surface-rgb) / 0.7);
|
||||
--panel-surface-strong: rgb(var(--hud-surface-alt-rgb) / 0.84);
|
||||
--panel-surface-deep: rgb(var(--hud-surface-deep-rgb) / 0.9);
|
||||
--panel-text: rgb(var(--hud-text-main-rgb) / 0.96);
|
||||
--panel-text-dim: rgb(var(--hud-text-dim-rgb) / 0.84);
|
||||
--panel-glow: rgb(var(--hud-glow-rgb) / 0.12);
|
||||
--panel-glow-alt: rgb(var(--hud-glow-alt-rgb) / 0.12);
|
||||
}
|
||||
|
||||
.title-bar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
border-bottom: 1px solid rgb(108 143 166 / 0.22);
|
||||
border-bottom: 1px solid var(--panel-line-soft);
|
||||
padding: 0.05rem 0.1rem 0.55rem 0.1rem;
|
||||
background: linear-gradient(180deg, rgb(15 22 28 / 0.32), transparent);
|
||||
background: linear-gradient(180deg, rgb(var(--hud-surface-alt-rgb) / 0.32), transparent);
|
||||
}
|
||||
|
||||
.title-cluster {
|
||||
@@ -328,15 +338,15 @@
|
||||
inline-size: 0.52rem;
|
||||
block-size: 0.52rem;
|
||||
border-radius: 50%;
|
||||
background: rgb(133 255 68 / 0.95);
|
||||
box-shadow: 0 0 0 2px rgb(133 255 68 / 0.14);
|
||||
background: rgb(var(--hud-lime-rgb) / 0.95);
|
||||
box-shadow: 0 0 0 2px rgb(var(--hud-lime-rgb) / 0.14);
|
||||
}
|
||||
|
||||
.app-name {
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.07em;
|
||||
color: #f0fbff;
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.98);
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
@@ -359,10 +369,10 @@
|
||||
justify-content: center;
|
||||
inline-size: 1.8rem;
|
||||
block-size: 1.52rem;
|
||||
border: 1px solid rgb(82 120 146 / 0.36);
|
||||
border: 1px solid var(--panel-line);
|
||||
border-radius: 0.34rem;
|
||||
color: rgb(179 245 255 / 0.92);
|
||||
background: rgb(8 12 16 / 0.82);
|
||||
color: rgb(var(--hud-cyan-rgb) / 0.92);
|
||||
background: rgb(var(--hud-surface-rgb) / 0.82);
|
||||
cursor: pointer;
|
||||
transition:
|
||||
background-color 200ms ease,
|
||||
@@ -381,27 +391,27 @@
|
||||
}
|
||||
|
||||
.window-btn:hover {
|
||||
border-color: rgb(62 232 255 / 0.42);
|
||||
background: rgb(14 20 26 / 0.9);
|
||||
color: #f3fdff;
|
||||
border-color: rgb(var(--hud-cyan-rgb) / 0.42);
|
||||
background: rgb(var(--hud-surface-alt-rgb) / 0.9);
|
||||
color: rgb(var(--hud-text-main-rgb) / 1);
|
||||
}
|
||||
|
||||
.window-btn.is-maximized {
|
||||
border-color: rgb(133 255 68 / 0.5);
|
||||
color: rgb(211 255 190 / 0.92);
|
||||
border-color: rgb(var(--hud-lime-rgb) / 0.5);
|
||||
color: rgb(var(--hud-lime-rgb) / 0.92);
|
||||
}
|
||||
|
||||
.window-btn.is-close:hover {
|
||||
border-color: rgb(255 91 63 / 0.62);
|
||||
background: rgb(27 11 10 / 0.9);
|
||||
color: rgb(255 200 188 / 0.96);
|
||||
border-color: rgb(var(--hud-orange-rgb) / 0.62);
|
||||
background: rgb(var(--hud-surface-deep-rgb) / 0.92);
|
||||
color: rgb(var(--hud-orange-rgb) / 0.96);
|
||||
}
|
||||
|
||||
.control-bar {
|
||||
display: grid;
|
||||
gap: 0.45rem;
|
||||
padding: 0 0.1rem;
|
||||
background: linear-gradient(90deg, rgb(62 232 255 / 0.02), transparent 45%, rgb(133 255 68 / 0.015));
|
||||
background: linear-gradient(90deg, rgb(var(--hud-glow-rgb) / 0.02), transparent 45%, rgb(var(--hud-glow-alt-rgb) / 0.015));
|
||||
}
|
||||
|
||||
.control-main-row {
|
||||
@@ -416,32 +426,32 @@
|
||||
align-items: center;
|
||||
gap: 0.42rem;
|
||||
min-block-size: 2rem;
|
||||
border: 1px solid rgb(95 132 158 / 0.3);
|
||||
border: 1px solid var(--panel-line);
|
||||
border-radius: 999px;
|
||||
padding: 0.2rem 0.62rem 0.2rem 0.36rem;
|
||||
background: rgb(10 16 20 / 0.68);
|
||||
background: var(--panel-surface);
|
||||
}
|
||||
|
||||
.state-dot {
|
||||
inline-size: 0.55rem;
|
||||
block-size: 0.55rem;
|
||||
border-radius: 50%;
|
||||
background: rgb(143 165 186 / 0.92);
|
||||
box-shadow: 0 0 0 2px rgb(143 165 186 / 0.14);
|
||||
background: rgb(var(--hud-text-dim-rgb) / 0.92);
|
||||
box-shadow: 0 0 0 2px rgb(var(--hud-text-dim-rgb) / 0.14);
|
||||
}
|
||||
|
||||
.state-dot.ok {
|
||||
background: var(--hud-lime);
|
||||
box-shadow: 0 0 0 2px rgb(133 255 68 / 0.16);
|
||||
box-shadow: 0 0 0 2px rgb(var(--hud-lime-rgb) / 0.16);
|
||||
}
|
||||
|
||||
.state-dot.warn {
|
||||
background: var(--hud-orange);
|
||||
box-shadow: 0 0 0 2px rgb(255 91 63 / 0.16);
|
||||
box-shadow: 0 0 0 2px rgb(var(--hud-orange-rgb) / 0.16);
|
||||
}
|
||||
|
||||
.state-label {
|
||||
color: rgb(154 176 194 / 0.84);
|
||||
color: var(--panel-text-dim);
|
||||
font-size: 0.66rem;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
@@ -449,7 +459,7 @@
|
||||
}
|
||||
|
||||
.state-value {
|
||||
color: #ecf8ff;
|
||||
color: var(--panel-text);
|
||||
font-size: 0.92rem;
|
||||
letter-spacing: 0.02em;
|
||||
font-weight: 600;
|
||||
@@ -461,10 +471,10 @@
|
||||
align-items: center;
|
||||
gap: 0.38rem;
|
||||
min-block-size: 2rem;
|
||||
border: 1px solid rgb(95 132 158 / 0.3);
|
||||
border: 1px solid var(--panel-line);
|
||||
border-radius: 999px;
|
||||
padding: 0.18rem 0.2rem 0.18rem 0.56rem;
|
||||
background: rgb(10 16 20 / 0.7);
|
||||
background: var(--panel-surface);
|
||||
min-inline-size: 0;
|
||||
}
|
||||
|
||||
@@ -475,7 +485,7 @@
|
||||
}
|
||||
|
||||
.serial-tag {
|
||||
color: rgb(154 176 194 / 0.84);
|
||||
color: var(--panel-text-dim);
|
||||
font-size: 0.66rem;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
@@ -487,11 +497,11 @@
|
||||
appearance: none;
|
||||
inline-size: 100%;
|
||||
min-inline-size: 7rem;
|
||||
border: 1px solid rgb(95 132 158 / 0.32);
|
||||
border: 1px solid var(--panel-line);
|
||||
border-radius: 999px;
|
||||
padding: 0.3rem 1.5rem 0.3rem 0.6rem;
|
||||
background: rgb(4 11 16 / 0.84);
|
||||
color: #d5ebfb;
|
||||
background: rgb(var(--hud-surface-deep-rgb) / 0.84);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.92);
|
||||
font-size: 0.84rem;
|
||||
letter-spacing: 0.06em;
|
||||
text-transform: uppercase;
|
||||
@@ -502,12 +512,12 @@
|
||||
}
|
||||
|
||||
.serial-select-input:hover {
|
||||
border-color: rgb(62 232 255 / 0.36);
|
||||
border-color: rgb(var(--hud-cyan-rgb) / 0.36);
|
||||
}
|
||||
|
||||
.serial-select-input:focus-visible {
|
||||
border-color: rgb(62 232 255 / 0.5);
|
||||
box-shadow: 0 0 0 2px rgb(62 232 255 / 0.14);
|
||||
border-color: rgb(var(--hud-cyan-rgb) / 0.5);
|
||||
box-shadow: 0 0 0 2px rgb(var(--hud-cyan-rgb) / 0.14);
|
||||
}
|
||||
|
||||
.serial-select-caret {
|
||||
@@ -516,8 +526,8 @@
|
||||
inset-block-start: 50%;
|
||||
inline-size: 0.42rem;
|
||||
block-size: 0.42rem;
|
||||
border-right: 1px solid rgb(153 189 214 / 0.82);
|
||||
border-bottom: 1px solid rgb(153 189 214 / 0.82);
|
||||
border-right: 1px solid rgb(var(--hud-text-main-rgb) / 0.82);
|
||||
border-bottom: 1px solid rgb(var(--hud-text-main-rgb) / 0.82);
|
||||
transform: translateY(-64%) rotate(45deg);
|
||||
pointer-events: none;
|
||||
}
|
||||
@@ -527,13 +537,13 @@
|
||||
align-items: center;
|
||||
gap: 0.36rem;
|
||||
min-block-size: 2rem;
|
||||
border: 1px solid rgb(95 132 158 / 0.34);
|
||||
border: 1px solid var(--panel-line);
|
||||
border-radius: 999px;
|
||||
padding: 0.24rem 0.64rem;
|
||||
background:
|
||||
linear-gradient(180deg, rgb(11 18 24 / 0.92), rgb(7 12 17 / 0.88)),
|
||||
radial-gradient(circle at 50% 0, rgb(62 232 255 / 0.1), transparent 58%);
|
||||
color: rgb(214 236 248 / 0.96);
|
||||
linear-gradient(180deg, rgb(var(--hud-surface-alt-rgb) / 0.92), rgb(var(--hud-surface-rgb) / 0.88)),
|
||||
radial-gradient(circle at 50% 0, rgb(var(--hud-glow-rgb) / 0.1), transparent 58%);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.96);
|
||||
font-size: 0.74rem;
|
||||
letter-spacing: 0.05em;
|
||||
cursor: pointer;
|
||||
@@ -556,10 +566,10 @@
|
||||
}
|
||||
|
||||
.refresh-btn:hover:not(:disabled) {
|
||||
border-color: rgb(62 232 255 / 0.44);
|
||||
border-color: rgb(var(--hud-cyan-rgb) / 0.44);
|
||||
box-shadow:
|
||||
inset 0 0 0 1px rgb(167 218 252 / 0.07),
|
||||
0 0 10px rgb(62 232 255 / 0.1);
|
||||
inset 0 0 0 1px rgb(var(--hud-border-strong-rgb) / 0.07),
|
||||
0 0 10px rgb(var(--hud-glow-rgb) / 0.1);
|
||||
}
|
||||
|
||||
.refresh-btn:disabled {
|
||||
@@ -572,13 +582,13 @@
|
||||
align-items: center;
|
||||
gap: 0.42rem;
|
||||
min-block-size: 2rem;
|
||||
border: 1px solid rgb(133 255 68 / 0.4);
|
||||
border: 1px solid rgb(var(--hud-lime-rgb) / 0.4);
|
||||
border-radius: 999px;
|
||||
padding: 0.24rem 0.76rem;
|
||||
background:
|
||||
linear-gradient(180deg, rgb(24 33 22 / 0.96), rgb(12 19 12 / 0.92)),
|
||||
radial-gradient(circle at 50% 0, rgb(133 255 68 / 0.12), transparent 58%);
|
||||
color: #f2ffe8;
|
||||
linear-gradient(180deg, rgb(var(--hud-surface-alt-rgb) / 0.96), rgb(var(--hud-surface-rgb) / 0.92)),
|
||||
radial-gradient(circle at 50% 0, rgb(var(--hud-glow-alt-rgb) / 0.12), transparent 58%);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.98);
|
||||
font-size: 0.78rem;
|
||||
letter-spacing: 0.05em;
|
||||
cursor: pointer;
|
||||
@@ -591,10 +601,10 @@
|
||||
}
|
||||
|
||||
.connect-btn:hover:not(:disabled) {
|
||||
border-color: rgb(170 255 121 / 0.62);
|
||||
border-color: rgb(var(--hud-lime-rgb) / 0.62);
|
||||
box-shadow:
|
||||
inset 0 0 0 1px rgb(231 255 214 / 0.08),
|
||||
0 0 12px rgb(133 255 68 / 0.14);
|
||||
inset 0 0 0 1px rgb(var(--hud-text-main-rgb) / 0.08),
|
||||
0 0 12px rgb(var(--hud-glow-alt-rgb) / 0.14);
|
||||
}
|
||||
|
||||
.connect-btn:disabled {
|
||||
@@ -603,19 +613,19 @@
|
||||
}
|
||||
|
||||
.connect-btn.is-busy {
|
||||
border-color: rgb(255 91 63 / 0.48);
|
||||
border-color: rgb(var(--hud-orange-rgb) / 0.48);
|
||||
background:
|
||||
linear-gradient(180deg, rgb(38 18 15 / 0.96), rgb(23 10 10 / 0.92)),
|
||||
radial-gradient(circle at 50% 0, rgb(255 91 63 / 0.12), transparent 58%);
|
||||
color: rgb(255 223 217 / 0.96);
|
||||
linear-gradient(180deg, rgb(var(--hud-surface-alt-rgb) / 0.96), rgb(var(--hud-surface-deep-rgb) / 0.92)),
|
||||
radial-gradient(circle at 50% 0, rgb(var(--hud-orange-rgb) / 0.12), transparent 58%);
|
||||
color: rgb(var(--hud-orange-rgb) / 0.96);
|
||||
}
|
||||
|
||||
.connect-btn.is-connected {
|
||||
border-color: rgb(62 232 255 / 0.46);
|
||||
border-color: rgb(var(--hud-cyan-rgb) / 0.46);
|
||||
background:
|
||||
linear-gradient(180deg, rgb(10 28 32 / 0.96), rgb(6 15 18 / 0.92)),
|
||||
radial-gradient(circle at 50% 0, rgb(62 232 255 / 0.14), transparent 58%);
|
||||
color: rgb(227 251 255 / 0.98);
|
||||
linear-gradient(180deg, rgb(var(--hud-surface-alt-rgb) / 0.96), rgb(var(--hud-surface-rgb) / 0.92)),
|
||||
radial-gradient(circle at 50% 0, rgb(var(--hud-cyan-rgb) / 0.14), transparent 58%);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.98);
|
||||
}
|
||||
|
||||
.connect-btn-indicator {
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
export let matrixRows = 12;
|
||||
export let matrixCols = 7;
|
||||
export let rangeMin = 0;
|
||||
export let rangeMax = 5000;
|
||||
export let rangeMax = 16000;
|
||||
export let colorMapPreset: PressureColorMapPreset = "emerald";
|
||||
|
||||
let viewerEl: HTMLDivElement | undefined;
|
||||
@@ -34,7 +34,7 @@
|
||||
let overlayEl: HTMLCanvasElement | undefined;
|
||||
let stats: ViewerStats = { total: 0, max: 0, avg: 0 };
|
||||
|
||||
const RAW_DATA_MAX = 5000;
|
||||
const DEFAULT_RANGE_MAX = 16000;
|
||||
const BASE_MATRIX_SPAN = 24;
|
||||
const MATRIX_SPAN_GROWTH = 0.6;
|
||||
const MIN_MATRIX_SPAN = 24;
|
||||
@@ -64,7 +64,6 @@
|
||||
const MATRIX_ROTATION_Y = 0;
|
||||
|
||||
const labelVector = new THREE.Vector3();
|
||||
const whiteColor = new THREE.Color("#ffffff");
|
||||
$: resolvedColorPalette = pressureColorPalettes[colorMapPreset] ?? pressureColorPalettes.emerald;
|
||||
$: surfaceBaseColor = new THREE.Color(resolvedColorPalette.surfaceBase);
|
||||
$: surfaceLowColor = new THREE.Color(resolvedColorPalette.surfaceLow);
|
||||
@@ -75,6 +74,38 @@
|
||||
$: labelLowColor = new THREE.Color(resolvedColorPalette.labelLow);
|
||||
$: labelMidColor = new THREE.Color(resolvedColorPalette.labelMid);
|
||||
$: labelHighColor = new THREE.Color(resolvedColorPalette.labelHigh);
|
||||
$: sceneClearColor = new THREE.Color(resolvedColorPalette.uiTheme.bg30);
|
||||
$: sceneBoardColor = new THREE.Color(resolvedColorPalette.uiTheme.bg20);
|
||||
$: sceneGridCenterColor = new THREE.Color(resolvedColorPalette.surfaceMid);
|
||||
$: sceneGridLineColor = new THREE.Color(resolvedColorPalette.uiTheme.bg20);
|
||||
$: sceneAmbientLightColor = rgbTripletToThreeColor(resolvedColorPalette.uiTheme.textMainRgb);
|
||||
$: sceneKeyLightColor = rgbTripletToThreeColor(resolvedColorPalette.uiTheme.glowAltRgb);
|
||||
$: sceneAccentLightColor = rgbTripletToThreeColor(resolvedColorPalette.uiTheme.glowRgb);
|
||||
$: surfaceThemeAccentColor = rgbTripletToThreeColor(resolvedColorPalette.uiTheme.glowRgb);
|
||||
$: labelThemeAccentColor = rgbTripletToThreeColor(resolvedColorPalette.uiTheme.glowRgb);
|
||||
$: labelHighlightCss = colorToCss(surfaceHotColor);
|
||||
$: viewerThemeStyle = [
|
||||
`--matrix-bg-10: ${resolvedColorPalette.uiTheme.bg10}`,
|
||||
`--matrix-bg-20: ${resolvedColorPalette.uiTheme.bg20}`,
|
||||
`--matrix-bg-30: ${resolvedColorPalette.uiTheme.bg30}`,
|
||||
`--matrix-text-main-rgb: ${resolvedColorPalette.uiTheme.textMainRgb}`,
|
||||
`--matrix-text-dim-rgb: ${resolvedColorPalette.uiTheme.textDimRgb}`,
|
||||
`--matrix-border-rgb: ${resolvedColorPalette.uiTheme.borderRgb}`,
|
||||
`--matrix-border-strong-rgb: ${resolvedColorPalette.uiTheme.borderStrongRgb}`,
|
||||
`--matrix-surface-rgb: ${resolvedColorPalette.uiTheme.surfaceRgb}`,
|
||||
`--matrix-surface-alt-rgb: ${resolvedColorPalette.uiTheme.surfaceAltRgb}`,
|
||||
`--matrix-surface-deep-rgb: ${resolvedColorPalette.uiTheme.surfaceDeepRgb}`,
|
||||
`--matrix-glow-rgb: ${resolvedColorPalette.uiTheme.glowRgb}`,
|
||||
`--matrix-glow-alt-rgb: ${resolvedColorPalette.uiTheme.glowAltRgb}`
|
||||
].join("; ");
|
||||
|
||||
let rendererRef: THREE.WebGLRenderer | null = null;
|
||||
let boardMaterialRef: THREE.MeshBasicMaterial | null = null;
|
||||
let gridRef: THREE.GridHelper | null = null;
|
||||
let gridMaterialRef: THREE.Material | THREE.Material[] | null = null;
|
||||
let ambientLightRef: THREE.AmbientLight | null = null;
|
||||
let dirLightRef: THREE.DirectionalLight | null = null;
|
||||
let sideLightRef: THREE.DirectionalLight | null = null;
|
||||
|
||||
function sanitizeGridValue(value: number): number {
|
||||
return clamp(Math.round(Number.isFinite(value) ? value : 12), 1, 128);
|
||||
@@ -82,7 +113,7 @@
|
||||
|
||||
function sanitizeRangePair(minValue: number, maxValue: number): { min: number; max: number } {
|
||||
const resolvedMin = Math.round(Number.isFinite(minValue) ? minValue : 0);
|
||||
const resolvedMax = Math.max(Math.round(Number.isFinite(maxValue) ? maxValue : RAW_DATA_MAX), resolvedMin + 1);
|
||||
const resolvedMax = Math.max(Math.round(Number.isFinite(maxValue) ? maxValue : DEFAULT_RANGE_MAX), resolvedMin + 1);
|
||||
return { min: resolvedMin, max: resolvedMax };
|
||||
}
|
||||
|
||||
@@ -107,6 +138,10 @@
|
||||
return clamp((value - minValue) / Math.max(1, maxValue - minValue), 0, 1);
|
||||
}
|
||||
|
||||
function rgbTripletToThreeColor(rgbTriplet: string): THREE.Color {
|
||||
return new THREE.Color(`rgb(${rgbTriplet.replace(/\s+/g, ", ")})`);
|
||||
}
|
||||
|
||||
function surfaceColorMap(valueNormalized: number, target: THREE.Color = new THREE.Color()): THREE.Color {
|
||||
const value = clamp(valueNormalized, 0, 1);
|
||||
let mapped: THREE.Color;
|
||||
@@ -122,14 +157,15 @@
|
||||
mapped = target.copy(surfaceMidColor).lerp(surfaceHighColor, t);
|
||||
}
|
||||
|
||||
const baseAccentStrength = (1 - smoothstep(0.12, 0.52, value)) * 0.34;
|
||||
const highlightStrength = smoothstep(0.82, 1, value) * 0.3;
|
||||
return mapped.lerp(surfaceHotColor, highlightStrength);
|
||||
return mapped.lerp(surfaceThemeAccentColor, baseAccentStrength).lerp(surfaceHotColor, highlightStrength);
|
||||
}
|
||||
|
||||
function glowColorMap(valueNormalized: number, target: THREE.Color = new THREE.Color()): THREE.Color {
|
||||
const value = clamp(valueNormalized, 0, 1);
|
||||
const glowStrength = smoothstep(0.55, 1, value);
|
||||
return surfaceColorMap(value, target).lerp(whiteColor, glowStrength * 0.42);
|
||||
return surfaceColorMap(value, target).lerp(surfaceHotColor, glowStrength * 0.42);
|
||||
}
|
||||
|
||||
function labelColorMap(valueNormalized: number, target: THREE.Color = new THREE.Color()): THREE.Color {
|
||||
@@ -147,8 +183,9 @@
|
||||
mapped = target.copy(labelMidColor).lerp(labelHighColor, t);
|
||||
}
|
||||
|
||||
const baseAccentStrength = (1 - smoothstep(0.16, 0.58, value)) * 0.46;
|
||||
const highlightStrength = smoothstep(0.8, 1, value) * 0.36;
|
||||
return mapped.lerp(whiteColor, highlightStrength);
|
||||
return mapped.lerp(labelThemeAccentColor, baseAccentStrength).lerp(surfaceHotColor, highlightStrength);
|
||||
}
|
||||
|
||||
function shapeHeightValue(valueNormalized: number): number {
|
||||
@@ -208,7 +245,8 @@
|
||||
|
||||
function copyExternalField(target: Float32Array, values: number[]): void {
|
||||
for (let index = 0; index < target.length; index += 1) {
|
||||
target[index] = clamp(values[index] ?? 0, 0, RAW_DATA_MAX);
|
||||
const value = Number(values[index] ?? 0);
|
||||
target[index] = Number.isFinite(value) ? value : 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,7 +255,7 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
return Math.round(clamp(rawValue, 0, Math.max(maxValue, RAW_DATA_MAX)));
|
||||
return Math.round(rawValue);
|
||||
}
|
||||
|
||||
function colorToCss(color: THREE.Color): string {
|
||||
@@ -228,6 +266,57 @@
|
||||
const t = index / 32;
|
||||
return colorToCss(labelColorMap(t, new THREE.Color()));
|
||||
});
|
||||
$: labelGlowPalette = Array.from({ length: 33 }, (_, index) => {
|
||||
const t = index / 32;
|
||||
return colorToCss(glowColorMap(t, new THREE.Color()));
|
||||
});
|
||||
|
||||
function applyGridTheme(grid: THREE.GridHelper, divisions: number): void {
|
||||
const colorAttribute = grid.geometry.getAttribute("color");
|
||||
if (!(colorAttribute instanceof THREE.BufferAttribute)) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (let division = 0; division <= divisions; division += 1) {
|
||||
const lineColor = division === divisions / 2 ? sceneGridCenterColor : sceneGridLineColor;
|
||||
const vertexBase = division * 4;
|
||||
|
||||
for (let vertexOffset = 0; vertexOffset < 4; vertexOffset += 1) {
|
||||
colorAttribute.setXYZ(vertexBase + vertexOffset, lineColor.r, lineColor.g, lineColor.b);
|
||||
}
|
||||
}
|
||||
|
||||
colorAttribute.needsUpdate = true;
|
||||
}
|
||||
|
||||
function applySceneTheme(): void {
|
||||
if (!rendererRef || !boardMaterialRef || !gridRef || !gridMaterialRef) {
|
||||
return;
|
||||
}
|
||||
|
||||
rendererRef.setClearColor(sceneClearColor, 1);
|
||||
boardMaterialRef.color.copy(sceneBoardColor);
|
||||
boardMaterialRef.needsUpdate = true;
|
||||
applyGridTheme(gridRef, matrixLayout.gridDivisions);
|
||||
|
||||
if (Array.isArray(gridMaterialRef)) {
|
||||
for (const material of gridMaterialRef) {
|
||||
material.transparent = true;
|
||||
material.opacity = 0.034;
|
||||
material.needsUpdate = true;
|
||||
}
|
||||
} else {
|
||||
gridMaterialRef.transparent = true;
|
||||
gridMaterialRef.opacity = 0.034;
|
||||
gridMaterialRef.needsUpdate = true;
|
||||
}
|
||||
|
||||
ambientLightRef?.color.copy(sceneAmbientLightColor);
|
||||
dirLightRef?.color.copy(sceneKeyLightColor);
|
||||
sideLightRef?.color.copy(sceneAccentLightColor);
|
||||
}
|
||||
|
||||
$: applySceneTheme();
|
||||
|
||||
onMount(() => {
|
||||
if (!viewerEl || !canvasEl || !overlayEl) {
|
||||
@@ -251,8 +340,9 @@
|
||||
alpha: true,
|
||||
powerPreference: "high-performance"
|
||||
});
|
||||
rendererRef = renderer;
|
||||
renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));
|
||||
renderer.setClearColor(0x06080a, 1);
|
||||
renderer.setClearColor(sceneClearColor, 1);
|
||||
renderer.outputColorSpace = THREE.SRGBColorSpace;
|
||||
|
||||
const scene = new THREE.Scene();
|
||||
@@ -277,11 +367,14 @@
|
||||
controls.target.set(CAMERA_TARGET_X, CAMERA_TARGET_Y, CAMERA_TARGET_Z);
|
||||
controls.enabled = false;
|
||||
|
||||
const ambientLight = new THREE.AmbientLight(0xffffff, 0.26);
|
||||
const dirLight = new THREE.DirectionalLight(0xffffff, 0.34);
|
||||
const ambientLight = new THREE.AmbientLight(sceneAmbientLightColor, 0.26);
|
||||
const dirLight = new THREE.DirectionalLight(sceneKeyLightColor, 0.34);
|
||||
dirLight.position.set(50, 100, 50);
|
||||
const sideLight = new THREE.DirectionalLight(0x7cffba, 0.16);
|
||||
const sideLight = new THREE.DirectionalLight(sceneAccentLightColor, 0.16);
|
||||
sideLight.position.set(-50, 50, -50);
|
||||
ambientLightRef = ambientLight;
|
||||
dirLightRef = dirLight;
|
||||
sideLightRef = sideLight;
|
||||
scene.add(ambientLight, dirLight, sideLight);
|
||||
|
||||
const matrixGroup = new THREE.Group();
|
||||
@@ -292,29 +385,33 @@
|
||||
const board = new THREE.Mesh(
|
||||
new THREE.PlaneGeometry(boardWidth + boardPadding * 2, boardDepth + boardPadding * 2),
|
||||
new THREE.MeshBasicMaterial({
|
||||
color: 0x05070a,
|
||||
color: sceneBoardColor,
|
||||
transparent: true,
|
||||
opacity: 0.12,
|
||||
toneMapped: false
|
||||
})
|
||||
);
|
||||
boardMaterialRef = board.material;
|
||||
board.rotation.x = -Math.PI / 2;
|
||||
board.position.y = -0.04;
|
||||
matrixGroup.add(board);
|
||||
|
||||
const grid = new THREE.GridHelper(gridSpan, gridDivisions, 0x1a2630, 0x0a1015);
|
||||
const grid = new THREE.GridHelper(gridSpan, gridDivisions, sceneGridCenterColor, sceneGridLineColor);
|
||||
gridRef = grid;
|
||||
grid.position.y = 0;
|
||||
const gridMaterial = grid.material;
|
||||
gridMaterialRef = gridMaterial;
|
||||
if (Array.isArray(gridMaterial)) {
|
||||
for (const material of gridMaterial) {
|
||||
material.transparent = true;
|
||||
material.opacity = 0.028;
|
||||
material.opacity = 0.034;
|
||||
}
|
||||
} else {
|
||||
gridMaterial.transparent = true;
|
||||
gridMaterial.opacity = 0.028;
|
||||
gridMaterial.opacity = 0.034;
|
||||
}
|
||||
matrixGroup.add(grid);
|
||||
applySceneTheme();
|
||||
|
||||
const cellX = new Float32Array(instanceCount);
|
||||
const cellZ = new Float32Array(instanceCount);
|
||||
@@ -377,14 +474,14 @@
|
||||
|
||||
overlayContext.font = `600 ${glyphSize.toFixed(1)}px "JetBrains Mono", "IBM Plex Mono", "Consolas", monospace`;
|
||||
overlayContext.shadowBlur = glowBlur;
|
||||
overlayContext.shadowColor = labelPalette[bucket];
|
||||
overlayContext.shadowColor = labelGlowPalette[bucket];
|
||||
|
||||
overlayContext.fillStyle = labelPalette[bucket];
|
||||
overlayContext.globalAlpha = displayValue === 0 ? 0.86 : 1;
|
||||
overlayContext.fillText(displayText, screenX, screenY);
|
||||
|
||||
if (normalized >= 0.8) {
|
||||
overlayContext.fillStyle = "rgb(255 245 220)";
|
||||
overlayContext.fillStyle = labelHighlightCss;
|
||||
overlayContext.globalAlpha = smoothstep(0.8, 1, normalized) * 0.34;
|
||||
overlayContext.fillText(displayText, screenX, screenY);
|
||||
}
|
||||
@@ -493,11 +590,18 @@
|
||||
gridMaterial.dispose();
|
||||
}
|
||||
renderer.dispose();
|
||||
rendererRef = null;
|
||||
boardMaterialRef = null;
|
||||
gridRef = null;
|
||||
gridMaterialRef = null;
|
||||
ambientLightRef = null;
|
||||
dirLightRef = null;
|
||||
sideLightRef = null;
|
||||
};
|
||||
});
|
||||
</script>
|
||||
|
||||
<div class="viewer-root" bind:this={viewerEl}>
|
||||
<div class="viewer-root" bind:this={viewerEl} style={viewerThemeStyle}>
|
||||
<canvas class="viewer-canvas" bind:this={canvasEl} aria-label="Pressure Matrix Viewer"></canvas>
|
||||
<canvas class="viewer-overlay" bind:this={overlayEl} aria-hidden="true"></canvas>
|
||||
|
||||
@@ -532,9 +636,9 @@
|
||||
inset: 0;
|
||||
overflow: hidden;
|
||||
background:
|
||||
radial-gradient(circle at 50% 58%, rgb(72 127 255 / 0.065), transparent 32%),
|
||||
radial-gradient(circle at 50% 12%, rgb(151 231 255 / 0.05), transparent 26%),
|
||||
linear-gradient(180deg, rgb(10 13 17 / 0.82), rgb(5 7 10 / 0.96));
|
||||
radial-gradient(circle at 50% 58%, rgb(var(--matrix-glow-rgb) / 0.11), transparent 32%),
|
||||
radial-gradient(circle at 50% 12%, rgb(var(--matrix-glow-alt-rgb) / 0.09), transparent 26%),
|
||||
linear-gradient(180deg, color-mix(in srgb, var(--matrix-bg-10) 84%, transparent), color-mix(in srgb, var(--matrix-bg-30) 96%, black 4%));
|
||||
}
|
||||
|
||||
.viewer-canvas,
|
||||
@@ -563,7 +667,14 @@
|
||||
}
|
||||
|
||||
.viewer-noise {
|
||||
background: repeating-linear-gradient(180deg, rgb(124 165 216 / 0.02) 0, rgb(124 165 216 / 0.02) 1px, transparent 1px, transparent 3px);
|
||||
background:
|
||||
repeating-linear-gradient(
|
||||
180deg,
|
||||
rgb(var(--matrix-glow-alt-rgb) / 0.025) 0,
|
||||
rgb(var(--matrix-glow-alt-rgb) / 0.025) 1px,
|
||||
transparent 1px,
|
||||
transparent 3px
|
||||
);
|
||||
}
|
||||
|
||||
.viewer-controls {
|
||||
@@ -580,17 +691,19 @@
|
||||
display: grid;
|
||||
gap: 0.58rem;
|
||||
padding: 0.74rem 0.84rem 0.82rem;
|
||||
border: 1px solid rgb(86 151 118 / 0.32);
|
||||
border: 1px solid rgb(var(--matrix-border-rgb) / 0.32);
|
||||
border-radius: 0.76rem;
|
||||
background: linear-gradient(180deg, rgb(7 17 14 / 0.9), rgb(5 10 9 / 0.84));
|
||||
box-shadow: inset 0 1px 0 rgb(171 224 197 / 0.08), 0 0 24px rgb(42 138 88 / 0.08);
|
||||
background: linear-gradient(180deg, rgb(var(--matrix-surface-alt-rgb) / 0.92), rgb(var(--matrix-surface-deep-rgb) / 0.86));
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgb(var(--matrix-border-strong-rgb) / 0.08),
|
||||
0 0 24px rgb(var(--matrix-glow-rgb) / 0.08);
|
||||
}
|
||||
|
||||
.stats-label,
|
||||
.stats-key,
|
||||
.stats-note {
|
||||
margin: 0;
|
||||
color: rgb(165 212 187 / 0.84);
|
||||
color: rgb(var(--matrix-text-dim-rgb) / 0.84);
|
||||
font-size: 0.58rem;
|
||||
letter-spacing: 0.12em;
|
||||
text-transform: uppercase;
|
||||
@@ -607,9 +720,9 @@
|
||||
gap: 0.24rem;
|
||||
min-height: 4.2rem;
|
||||
padding: 0.58rem 0.64rem;
|
||||
border: 1px solid rgb(71 122 96 / 0.24);
|
||||
border: 1px solid rgb(var(--matrix-border-rgb) / 0.24);
|
||||
border-radius: 0.56rem;
|
||||
background: linear-gradient(180deg, rgb(8 16 14 / 0.88), rgb(5 9 8 / 0.84));
|
||||
background: linear-gradient(180deg, rgb(var(--matrix-surface-rgb) / 0.9), rgb(var(--matrix-surface-deep-rgb) / 0.86));
|
||||
}
|
||||
|
||||
.stats-card-wide {
|
||||
@@ -617,7 +730,7 @@
|
||||
}
|
||||
|
||||
.stats-value {
|
||||
color: rgb(240 246 255 / 0.98);
|
||||
color: rgb(var(--matrix-text-main-rgb) / 0.98);
|
||||
font-size: clamp(1.16rem, 1vw + 0.82rem, 1.56rem);
|
||||
line-height: 1;
|
||||
font-weight: 600;
|
||||
|
||||
@@ -162,16 +162,16 @@
|
||||
aspect-ratio: 1.44 / 1;
|
||||
min-block-size: 11.8rem;
|
||||
justify-self: start;
|
||||
border: 1px solid rgb(130 174 202 / 0.42);
|
||||
border: 1px solid rgb(var(--hud-border-strong-rgb) / 0.42);
|
||||
border-radius: 0.92rem;
|
||||
padding: 0.56rem 0.62rem 0.58rem;
|
||||
background:
|
||||
linear-gradient(160deg, rgb(10 18 26 / 0.76) 0%, rgb(3 8 12 / 0.62) 48%, rgb(1 2 4 / 0.76) 100%),
|
||||
radial-gradient(circle at 12% 0, rgb(62 232 255 / 0.1), transparent 40%);
|
||||
linear-gradient(160deg, rgb(var(--hud-surface-alt-rgb) / 0.76) 0%, rgb(var(--hud-surface-rgb) / 0.62) 48%, rgb(var(--hud-surface-deep-rgb) / 0.76) 100%),
|
||||
radial-gradient(circle at 12% 0, rgb(var(--hud-glow-rgb) / 0.1), transparent 40%);
|
||||
box-shadow:
|
||||
inset 0 0 0 1px rgb(165 224 255 / 0.08),
|
||||
inset 0 0 0 1px rgb(var(--hud-border-strong-rgb) / 0.08),
|
||||
inset 0 -24px 32px rgb(0 0 0 / 0.48),
|
||||
0 0 14px rgb(62 232 255 / 0.14);
|
||||
0 0 14px rgb(var(--hud-glow-rgb) / 0.14);
|
||||
opacity: 1;
|
||||
transform: translateX(0) scale(1) rotate(0);
|
||||
transition:
|
||||
@@ -215,7 +215,7 @@
|
||||
.panel-code {
|
||||
margin: 0;
|
||||
font-size: 0.63rem;
|
||||
color: rgb(153 188 211 / 0.88);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.88);
|
||||
letter-spacing: 0.12em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
@@ -223,7 +223,7 @@
|
||||
.panel-title {
|
||||
margin: 0.12rem 0 0;
|
||||
font-size: 0.75rem;
|
||||
color: rgb(225 243 255 / 0.96);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.96);
|
||||
letter-spacing: 0.05em;
|
||||
}
|
||||
|
||||
@@ -236,25 +236,25 @@
|
||||
}
|
||||
|
||||
.icon-chip {
|
||||
border: 1px solid rgb(138 178 204 / 0.44);
|
||||
border: 1px solid rgb(var(--hud-border-strong-rgb) / 0.44);
|
||||
border-radius: 999px;
|
||||
padding: 0.08rem 0.36rem;
|
||||
font-size: 0.58rem;
|
||||
letter-spacing: 0.08em;
|
||||
color: rgb(209 237 255 / 0.94);
|
||||
background: rgb(5 13 20 / 0.66);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.94);
|
||||
background: rgb(var(--hud-surface-rgb) / 0.66);
|
||||
}
|
||||
|
||||
.icon-chip.tone-cyan {
|
||||
border-color: rgb(62 232 255 / 0.54);
|
||||
border-color: rgb(var(--hud-cyan-rgb) / 0.54);
|
||||
}
|
||||
|
||||
.icon-chip.tone-lime {
|
||||
border-color: rgb(133 255 68 / 0.56);
|
||||
border-color: rgb(var(--hud-lime-rgb) / 0.56);
|
||||
}
|
||||
|
||||
.icon-chip.tone-orange {
|
||||
border-color: rgb(255 91 63 / 0.58);
|
||||
border-color: rgb(var(--hud-orange-rgb) / 0.58);
|
||||
}
|
||||
|
||||
.icon-chip.tone-violet {
|
||||
@@ -272,12 +272,12 @@
|
||||
.chart-stage {
|
||||
position: relative;
|
||||
block-size: clamp(6.4rem, 9vw, 8.2rem);
|
||||
border: 1px solid rgb(132 174 200 / 0.32);
|
||||
border: 1px solid rgb(var(--hud-border-strong-rgb) / 0.32);
|
||||
border-radius: 0.62rem;
|
||||
overflow: hidden;
|
||||
background:
|
||||
linear-gradient(180deg, rgb(8 17 26 / 0.68), rgb(1 6 10 / 0.78)),
|
||||
radial-gradient(circle at 50% 0, rgb(62 232 255 / 0.09), transparent 45%);
|
||||
linear-gradient(180deg, rgb(var(--hud-surface-alt-rgb) / 0.68), rgb(var(--hud-surface-deep-rgb) / 0.78)),
|
||||
radial-gradient(circle at 50% 0, rgb(var(--hud-glow-rgb) / 0.09), transparent 45%);
|
||||
}
|
||||
|
||||
svg {
|
||||
@@ -287,7 +287,7 @@
|
||||
}
|
||||
|
||||
.grid-line-group line {
|
||||
stroke: rgb(138 184 210 / 0.16);
|
||||
stroke: rgb(var(--hud-border-strong-rgb) / 0.16);
|
||||
stroke-width: 0.45;
|
||||
}
|
||||
|
||||
@@ -300,15 +300,15 @@
|
||||
}
|
||||
|
||||
.series-line.tone-cyan {
|
||||
stroke: rgb(62 232 255 / 0.95);
|
||||
stroke: rgb(var(--hud-cyan-rgb) / 0.95);
|
||||
}
|
||||
|
||||
.series-line.tone-lime {
|
||||
stroke: rgb(133 255 68 / 0.94);
|
||||
stroke: rgb(var(--hud-lime-rgb) / 0.94);
|
||||
}
|
||||
|
||||
.series-line.tone-orange {
|
||||
stroke: rgb(255 91 63 / 0.94);
|
||||
stroke: rgb(var(--hud-orange-rgb) / 0.94);
|
||||
}
|
||||
|
||||
.series-line.tone-violet {
|
||||
@@ -329,12 +329,12 @@
|
||||
background:
|
||||
repeating-linear-gradient(
|
||||
180deg,
|
||||
rgb(146 191 214 / 0.04) 0,
|
||||
rgb(146 191 214 / 0.04) 1px,
|
||||
rgb(var(--hud-border-strong-rgb) / 0.04) 0,
|
||||
rgb(var(--hud-border-strong-rgb) / 0.04) 1px,
|
||||
transparent 1px,
|
||||
transparent 3px
|
||||
),
|
||||
linear-gradient(180deg, transparent 0%, rgb(62 232 255 / 0.06) 50%, transparent 100%);
|
||||
linear-gradient(180deg, transparent 0%, rgb(var(--hud-glow-rgb) / 0.06) 50%, transparent 100%);
|
||||
background-size: 100% 100%, 100% 100%;
|
||||
mix-blend-mode: screen;
|
||||
pointer-events: none;
|
||||
@@ -353,7 +353,7 @@
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.3rem;
|
||||
color: rgb(173 206 227 / 0.9);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.9);
|
||||
font-size: 0.62rem;
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
@@ -365,19 +365,19 @@
|
||||
}
|
||||
|
||||
.dot.tone-cyan {
|
||||
background: rgb(62 232 255);
|
||||
background: rgb(var(--hud-cyan-rgb));
|
||||
}
|
||||
|
||||
.dot.tone-lime {
|
||||
background: rgb(133 255 68);
|
||||
background: rgb(var(--hud-lime-rgb));
|
||||
}
|
||||
|
||||
.dot.tone-orange {
|
||||
background: rgb(255 91 63);
|
||||
background: rgb(var(--hud-orange-rgb));
|
||||
}
|
||||
|
||||
.metric-label {
|
||||
color: rgb(144 172 191 / 0.82);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.82);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.08em;
|
||||
}
|
||||
|
||||
@@ -313,15 +313,15 @@
|
||||
grid-template-rows: auto auto auto;
|
||||
gap: 0.4rem;
|
||||
padding: 0.56rem 0.62rem 0.58rem;
|
||||
border: 1px solid rgb(130 174 202 / 0.42);
|
||||
border: 1px solid rgb(var(--hud-border-strong-rgb) / 0.42);
|
||||
border-radius: 0.92rem;
|
||||
background:
|
||||
linear-gradient(160deg, rgb(10 18 26 / 0.76) 0%, rgb(3 8 12 / 0.62) 48%, rgb(1 2 4 / 0.76) 100%),
|
||||
radial-gradient(circle at 12% 0, rgb(62 232 255 / 0.1), transparent 40%);
|
||||
linear-gradient(160deg, rgb(var(--hud-surface-alt-rgb) / 0.76) 0%, rgb(var(--hud-surface-rgb) / 0.62) 48%, rgb(var(--hud-surface-deep-rgb) / 0.76) 100%),
|
||||
radial-gradient(circle at 12% 0, rgb(var(--hud-glow-rgb) / 0.1), transparent 40%);
|
||||
box-shadow:
|
||||
inset 0 0 0 1px rgb(165 224 255 / 0.08),
|
||||
inset 0 0 0 1px rgb(var(--hud-border-strong-rgb) / 0.08),
|
||||
inset 0 -24px 32px rgb(0 0 0 / 0.48),
|
||||
0 0 14px rgb(62 232 255 / 0.14);
|
||||
0 0 14px rgb(var(--hud-glow-rgb) / 0.14);
|
||||
opacity: 1;
|
||||
transform: translateX(0) scale(1) rotate(0);
|
||||
transition:
|
||||
@@ -360,7 +360,7 @@
|
||||
.panel-code {
|
||||
margin: 0;
|
||||
font-size: 0.63rem;
|
||||
color: rgb(153 188 211 / 0.88);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.88);
|
||||
letter-spacing: 0.12em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
@@ -368,7 +368,7 @@
|
||||
.panel-title {
|
||||
margin: 0.12rem 0 0;
|
||||
font-size: 0.75rem;
|
||||
color: rgb(225 243 255 / 0.96);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.96);
|
||||
letter-spacing: 0.05em;
|
||||
}
|
||||
|
||||
@@ -381,36 +381,36 @@
|
||||
}
|
||||
|
||||
.icon-chip {
|
||||
border: 1px solid rgb(138 178 204 / 0.44);
|
||||
border: 1px solid rgb(var(--hud-border-strong-rgb) / 0.44);
|
||||
border-radius: 999px;
|
||||
padding: 0.08rem 0.36rem;
|
||||
font-size: 0.58rem;
|
||||
letter-spacing: 0.08em;
|
||||
color: rgb(209 237 255 / 0.94);
|
||||
background: rgb(5 13 20 / 0.66);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.94);
|
||||
background: rgb(var(--hud-surface-rgb) / 0.66);
|
||||
}
|
||||
|
||||
.icon-chip.tone-cyan {
|
||||
border-color: rgb(62 232 255 / 0.54);
|
||||
border-color: rgb(var(--hud-cyan-rgb) / 0.54);
|
||||
}
|
||||
|
||||
.icon-chip.tone-lime {
|
||||
border-color: rgb(133 255 68 / 0.56);
|
||||
border-color: rgb(var(--hud-lime-rgb) / 0.56);
|
||||
}
|
||||
|
||||
.icon-chip.tone-orange {
|
||||
border-color: rgb(255 91 63 / 0.58);
|
||||
border-color: rgb(var(--hud-orange-rgb) / 0.58);
|
||||
}
|
||||
|
||||
.chart-stage {
|
||||
position: relative;
|
||||
block-size: clamp(6.4rem, 9vw, 8.2rem);
|
||||
overflow: hidden;
|
||||
border: 1px solid rgb(132 174 200 / 0.32);
|
||||
border: 1px solid rgb(var(--hud-border-strong-rgb) / 0.32);
|
||||
border-radius: 0.62rem;
|
||||
background:
|
||||
linear-gradient(180deg, rgb(8 17 26 / 0.68), rgb(1 6 10 / 0.78)),
|
||||
radial-gradient(circle at 50% 0, rgb(62 232 255 / 0.09), transparent 45%);
|
||||
linear-gradient(180deg, rgb(var(--hud-surface-alt-rgb) / 0.68), rgb(var(--hud-surface-deep-rgb) / 0.78)),
|
||||
radial-gradient(circle at 50% 0, rgb(var(--hud-glow-rgb) / 0.09), transparent 45%);
|
||||
}
|
||||
|
||||
svg {
|
||||
@@ -420,7 +420,7 @@
|
||||
}
|
||||
|
||||
.grid-lines line {
|
||||
stroke: rgb(138 184 210 / 0.16);
|
||||
stroke: rgb(var(--hud-border-strong-rgb) / 0.16);
|
||||
stroke-width: 0.45;
|
||||
}
|
||||
|
||||
@@ -430,20 +430,20 @@
|
||||
|
||||
.summary-line {
|
||||
fill: none;
|
||||
stroke: rgb(62 232 255 / 0.96);
|
||||
stroke: rgb(var(--hud-cyan-rgb) / 0.96);
|
||||
stroke-width: 1.35;
|
||||
stroke-linecap: round;
|
||||
stroke-linejoin: round;
|
||||
filter: drop-shadow(0 0 4px rgb(62 232 255 / 0.22));
|
||||
filter: drop-shadow(0 0 4px rgb(var(--hud-cyan-rgb) / 0.22));
|
||||
}
|
||||
|
||||
.summary-dot {
|
||||
fill: rgb(133 255 68 / 0.98);
|
||||
filter: drop-shadow(0 0 6px rgb(133 255 68 / 0.3));
|
||||
fill: rgb(var(--hud-lime-rgb) / 0.98);
|
||||
filter: drop-shadow(0 0 6px rgb(var(--hud-lime-rgb) / 0.3));
|
||||
}
|
||||
|
||||
.axis-label {
|
||||
fill: rgb(176 204 222 / 0.88);
|
||||
fill: rgb(var(--hud-text-main-rgb) / 0.88);
|
||||
font-size: 2.8px;
|
||||
font-weight: 500;
|
||||
letter-spacing: 0.02em;
|
||||
@@ -453,11 +453,11 @@
|
||||
}
|
||||
|
||||
.y-axis-label {
|
||||
fill: rgb(162 198 220 / 0.84);
|
||||
fill: rgb(var(--hud-text-dim-rgb) / 0.84);
|
||||
}
|
||||
|
||||
.x-axis-label {
|
||||
fill: rgb(162 198 220 / 0.9);
|
||||
fill: rgb(var(--hud-text-dim-rgb) / 0.9);
|
||||
}
|
||||
|
||||
.empty-state {
|
||||
@@ -466,11 +466,11 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: rgb(155 186 204 / 0.76);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.76);
|
||||
font-size: 0.66rem;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
background: linear-gradient(180deg, rgb(2 7 11 / 0.06), rgb(2 7 11 / 0.18));
|
||||
background: linear-gradient(180deg, rgb(var(--hud-surface-deep-rgb) / 0.06), rgb(var(--hud-surface-deep-rgb) / 0.18));
|
||||
}
|
||||
|
||||
.panel-foot {
|
||||
@@ -486,13 +486,13 @@
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.28rem;
|
||||
color: rgb(173 206 227 / 0.9);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.9);
|
||||
font-size: 0.62rem;
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
|
||||
.metric-text {
|
||||
color: rgb(146 173 191 / 0.82);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.82);
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
@@ -503,15 +503,15 @@
|
||||
}
|
||||
|
||||
.dot.tone-cyan {
|
||||
background: rgb(62 232 255);
|
||||
background: rgb(var(--hud-cyan-rgb));
|
||||
}
|
||||
|
||||
.dot.tone-lime {
|
||||
background: rgb(133 255 68);
|
||||
background: rgb(var(--hud-lime-rgb));
|
||||
}
|
||||
|
||||
.dot.tone-orange {
|
||||
background: rgb(255 91 63);
|
||||
background: rgb(var(--hud-orange-rgb));
|
||||
}
|
||||
|
||||
.value {
|
||||
|
||||
@@ -12,6 +12,25 @@ export interface PressureColorPalette {
|
||||
labelHigh: string;
|
||||
rangeStops: [string, string, string, string, string, string];
|
||||
rangeGlow: [string, string, string];
|
||||
uiTheme: {
|
||||
bg00: string;
|
||||
bg10: string;
|
||||
bg20: string;
|
||||
bg30: string;
|
||||
textMainRgb: string;
|
||||
textDimRgb: string;
|
||||
borderRgb: string;
|
||||
borderStrongRgb: string;
|
||||
surfaceRgb: string;
|
||||
surfaceAltRgb: string;
|
||||
surfaceDeepRgb: string;
|
||||
glowRgb: string;
|
||||
glowAltRgb: string;
|
||||
cyanRgb: string;
|
||||
limeRgb: string;
|
||||
orangeRgb: string;
|
||||
infoRgb: string;
|
||||
};
|
||||
}
|
||||
|
||||
export const pressureColorPalettes: Record<PressureColorMapPreset, PressureColorPalette> = {
|
||||
@@ -26,7 +45,26 @@ export const pressureColorPalettes: Record<PressureColorMapPreset, PressureColor
|
||||
labelMid: "#98e6ff",
|
||||
labelHigh: "#ffab78",
|
||||
rangeStops: ["#13201a", "#285338", "#3f8a66", "#6dd3ad", "#98e6ff", "#ffab78"],
|
||||
rangeGlow: ["#54df8e", "#98e6ff", "#ffab78"]
|
||||
rangeGlow: ["#54df8e", "#98e6ff", "#ffab78"],
|
||||
uiTheme: {
|
||||
bg00: "#020403",
|
||||
bg10: "#07100d",
|
||||
bg20: "#0c1712",
|
||||
bg30: "#040806",
|
||||
textMainRgb: "240 251 255",
|
||||
textDimRgb: "157 206 181",
|
||||
borderRgb: "88 132 116",
|
||||
borderStrongRgb: "120 190 156",
|
||||
surfaceRgb: "8 18 14",
|
||||
surfaceAltRgb: "12 26 20",
|
||||
surfaceDeepRgb: "4 10 8",
|
||||
glowRgb: "84 223 142",
|
||||
glowAltRgb: "152 230 255",
|
||||
cyanRgb: "152 230 255",
|
||||
limeRgb: "84 223 142",
|
||||
orangeRgb: "255 171 120",
|
||||
infoRgb: "122 198 255"
|
||||
}
|
||||
},
|
||||
arctic: {
|
||||
surfaceBase: "#08141d",
|
||||
@@ -39,7 +77,26 @@ export const pressureColorPalettes: Record<PressureColorMapPreset, PressureColor
|
||||
labelMid: "#aef3ff",
|
||||
labelHigh: "#ffffff",
|
||||
rangeStops: ["#08141d", "#14354d", "#1f6690", "#58bee8", "#aef3ff", "#ffffff"],
|
||||
rangeGlow: ["#5ea9ff", "#7fe5ff", "#ffffff"]
|
||||
rangeGlow: ["#5ea9ff", "#7fe5ff", "#ffffff"],
|
||||
uiTheme: {
|
||||
bg00: "#02070c",
|
||||
bg10: "#07131b",
|
||||
bg20: "#0d1f2b",
|
||||
bg30: "#040b12",
|
||||
textMainRgb: "236 248 255",
|
||||
textDimRgb: "147 187 212",
|
||||
borderRgb: "86 129 160",
|
||||
borderStrongRgb: "129 193 228",
|
||||
surfaceRgb: "7 16 24",
|
||||
surfaceAltRgb: "10 23 34",
|
||||
surfaceDeepRgb: "4 9 15",
|
||||
glowRgb: "109 200 255",
|
||||
glowAltRgb: "174 243 255",
|
||||
cyanRgb: "109 200 255",
|
||||
limeRgb: "174 243 255",
|
||||
orangeRgb: "255 194 138",
|
||||
infoRgb: "94 169 255"
|
||||
}
|
||||
},
|
||||
ember: {
|
||||
surfaceBase: "#1b0c08",
|
||||
@@ -52,6 +109,25 @@ export const pressureColorPalettes: Record<PressureColorMapPreset, PressureColor
|
||||
labelMid: "#ffd06a",
|
||||
labelHigh: "#fff4df",
|
||||
rangeStops: ["#1b0c08", "#4a1f15", "#8f4124", "#d9772f", "#ffd06a", "#fff4df"],
|
||||
rangeGlow: ["#ff7247", "#ffb14d", "#fff4df"]
|
||||
rangeGlow: ["#ff7247", "#ffb14d", "#fff4df"],
|
||||
uiTheme: {
|
||||
bg00: "#0a0503",
|
||||
bg10: "#140906",
|
||||
bg20: "#22120c",
|
||||
bg30: "#0c0504",
|
||||
textMainRgb: "255 241 231",
|
||||
textDimRgb: "202 156 128",
|
||||
borderRgb: "144 101 77",
|
||||
borderStrongRgb: "214 145 92",
|
||||
surfaceRgb: "20 10 8",
|
||||
surfaceAltRgb: "32 15 11",
|
||||
surfaceDeepRgb: "13 7 6",
|
||||
glowRgb: "255 138 78",
|
||||
glowAltRgb: "255 208 106",
|
||||
cyanRgb: "255 180 109",
|
||||
limeRgb: "255 208 106",
|
||||
orangeRgb: "255 108 84",
|
||||
infoRgb: "255 160 96"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -8,6 +8,19 @@
|
||||
--hud-cyan: #3ee8ff;
|
||||
--hud-lime: #85ff44;
|
||||
--hud-orange: #ff5b3f;
|
||||
--hud-cyan-rgb: 62 232 255;
|
||||
--hud-lime-rgb: 133 255 68;
|
||||
--hud-orange-rgb: 255 91 63;
|
||||
--hud-info-rgb: 122 198 255;
|
||||
--hud-border-rgb: 95 132 158;
|
||||
--hud-border-strong-rgb: 140 184 210;
|
||||
--hud-surface-rgb: 8 14 19;
|
||||
--hud-surface-alt-rgb: 12 20 26;
|
||||
--hud-surface-deep-rgb: 4 10 14;
|
||||
--hud-glow-rgb: 62 232 255;
|
||||
--hud-glow-alt-rgb: 133 255 68;
|
||||
--hud-text-main-rgb: 207 231 255;
|
||||
--hud-text-dim-rgb: 134 162 184;
|
||||
--hud-range-0: #13201a;
|
||||
--hud-range-1: #285338;
|
||||
--hud-range-2: #3f8a66;
|
||||
@@ -20,8 +33,8 @@
|
||||
|
||||
/* Keep root surface close to the main board style to avoid visible drag-edge seams. */
|
||||
background:
|
||||
radial-gradient(circle at 18% 8%, rgb(62 232 255 / 0.05), transparent 38%),
|
||||
radial-gradient(circle at 84% 14%, rgb(133 255 68 / 0.04), transparent 36%),
|
||||
radial-gradient(circle at 18% 8%, rgb(var(--hud-glow-rgb) / 0.05), transparent 38%),
|
||||
radial-gradient(circle at 84% 14%, rgb(var(--hud-glow-alt-rgb) / 0.04), transparent 36%),
|
||||
linear-gradient(165deg, var(--hud-bg-20) 0%, var(--hud-bg-10) 48%, var(--hud-bg-30) 100%);
|
||||
background-color: var(--hud-bg-00);
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
const copyByLocale: Record<LocaleCode, HudCopy> = {
|
||||
"zh-CN": {
|
||||
appName: "JOYSON HUD",
|
||||
appName: "JE-Skin",
|
||||
suiteName: "v0.1.0",
|
||||
stageTitle: "WebGL2 主渲染区",
|
||||
stageHint: "底图与三维操作将在此区域加载",
|
||||
@@ -98,7 +98,7 @@
|
||||
disconnectedLabel: "未连接"
|
||||
},
|
||||
"en-US": {
|
||||
appName: "JOYSON HUD",
|
||||
appName: "JE-Skin",
|
||||
suiteName: "v0.1.0",
|
||||
stageTitle: "WebGL2 Main Surface",
|
||||
stageHint: "Map texture and 3D interactions will render here",
|
||||
@@ -197,7 +197,7 @@
|
||||
let connectionNotice = "";
|
||||
let connectionNoticeTone: HudNoticeTone = "info";
|
||||
let isExporting = false;
|
||||
let deviceValue = "JY-Sense Unit";
|
||||
let deviceValue = "JE-Skin-F";
|
||||
let sampleRateValue = "100Hz";
|
||||
let channelsValue = "84";
|
||||
let webglStatusTone: StageStatusTone = "warn";
|
||||
@@ -211,7 +211,7 @@
|
||||
let matrixRows = 12;
|
||||
let matrixCols = 7;
|
||||
let rangeMin = 0;
|
||||
let rangeMax = 5000;
|
||||
let rangeMax = 16000;
|
||||
let colorMapPreset: PressureColorMapPreset = "emerald";
|
||||
let replayFrames: ReplayFrame[] = [];
|
||||
let replayCurrentIndex = 0;
|
||||
@@ -308,8 +308,49 @@
|
||||
const palette = pressureColorPalettes[preset] ?? pressureColorPalettes.emerald;
|
||||
const [range0, range1, range2, range3, range4, range5] = palette.rangeStops;
|
||||
const [glow0, glow1, glow2] = palette.rangeGlow;
|
||||
const {
|
||||
bg00,
|
||||
bg10,
|
||||
bg20,
|
||||
bg30,
|
||||
textMainRgb,
|
||||
textDimRgb,
|
||||
borderRgb,
|
||||
borderStrongRgb,
|
||||
surfaceRgb,
|
||||
surfaceAltRgb,
|
||||
surfaceDeepRgb,
|
||||
glowRgb,
|
||||
glowAltRgb,
|
||||
cyanRgb,
|
||||
limeRgb,
|
||||
orangeRgb,
|
||||
infoRgb
|
||||
} = palette.uiTheme;
|
||||
|
||||
return [
|
||||
`--hud-bg-00: ${bg00}`,
|
||||
`--hud-bg-10: ${bg10}`,
|
||||
`--hud-bg-20: ${bg20}`,
|
||||
`--hud-bg-30: ${bg30}`,
|
||||
`--hud-text-main-rgb: ${textMainRgb}`,
|
||||
`--hud-text-dim-rgb: ${textDimRgb}`,
|
||||
`--hud-text-main: rgb(${textMainRgb})`,
|
||||
`--hud-text-dim: rgb(${textDimRgb})`,
|
||||
`--hud-border-rgb: ${borderRgb}`,
|
||||
`--hud-border-strong-rgb: ${borderStrongRgb}`,
|
||||
`--hud-surface-rgb: ${surfaceRgb}`,
|
||||
`--hud-surface-alt-rgb: ${surfaceAltRgb}`,
|
||||
`--hud-surface-deep-rgb: ${surfaceDeepRgb}`,
|
||||
`--hud-glow-rgb: ${glowRgb}`,
|
||||
`--hud-glow-alt-rgb: ${glowAltRgb}`,
|
||||
`--hud-cyan-rgb: ${cyanRgb}`,
|
||||
`--hud-lime-rgb: ${limeRgb}`,
|
||||
`--hud-orange-rgb: ${orangeRgb}`,
|
||||
`--hud-info-rgb: ${infoRgb}`,
|
||||
`--hud-cyan: rgb(${cyanRgb})`,
|
||||
`--hud-lime: rgb(${limeRgb})`,
|
||||
`--hud-orange: rgb(${orangeRgb})`,
|
||||
`--hud-range-0: ${range0}`,
|
||||
`--hud-range-1: ${range1}`,
|
||||
`--hud-range-2: ${range2}`,
|
||||
@@ -615,11 +656,10 @@
|
||||
function frameValuesToMatrix(values: number[]): number[] {
|
||||
const totalCells = Math.max(matrixRows * matrixCols, 1);
|
||||
const matrix = new Array<number>(totalCells).fill(0);
|
||||
const maxRawValue = Math.max(rangeMax, 5000);
|
||||
|
||||
for (let index = 0; index < totalCells; index += 1) {
|
||||
const value = Number(values[index] ?? 0);
|
||||
matrix[index] = clamp(Number.isFinite(value) ? value : 0, 0, maxRawValue);
|
||||
matrix[index] = Number.isFinite(value) ? value : 0;
|
||||
}
|
||||
|
||||
return matrix;
|
||||
@@ -1468,7 +1508,7 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
<main class="hud-screen">
|
||||
<main class="hud-screen" style={rangeScaleStyle}>
|
||||
<div class="hud-background" aria-hidden="true">
|
||||
<div class="hud-gradient"></div>
|
||||
<div class="hud-vignette"></div>
|
||||
@@ -1567,7 +1607,7 @@
|
||||
on:replayclose={handleReplayClose}
|
||||
on:configclose={() => (isConfigPanelOpen = false)}
|
||||
>
|
||||
<section class="range-scale" aria-label="Signal Range" style={rangeScaleStyle}>
|
||||
<section class="range-scale" aria-label="Signal Range">
|
||||
<p class="range-label">Range</p>
|
||||
<div class="range-track">
|
||||
{#each rangeTicks as tick}
|
||||
@@ -1627,8 +1667,8 @@
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background:
|
||||
radial-gradient(circle at 14% 6%, rgb(62 232 255 / 0.07), transparent 36%),
|
||||
radial-gradient(circle at 86% 14%, rgb(133 255 68 / 0.05), transparent 32%),
|
||||
radial-gradient(circle at 14% 6%, rgb(var(--hud-glow-rgb) / 0.07), transparent 36%),
|
||||
radial-gradient(circle at 86% 14%, rgb(var(--hud-glow-alt-rgb) / 0.05), transparent 32%),
|
||||
linear-gradient(170deg, var(--hud-bg-20) 0%, var(--hud-bg-10) 56%, var(--hud-bg-30) 100%);
|
||||
}
|
||||
|
||||
@@ -1655,14 +1695,19 @@
|
||||
grid-template-rows: auto minmax(0, 1fr);
|
||||
gap: clamp(0.5rem, 1.2vw, 0.95rem);
|
||||
padding: clamp(0.65rem, 1.75vw, 1.3rem);
|
||||
border: 1px solid rgb(111 150 173 / 0.2);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.2);
|
||||
border-radius: 0.9rem;
|
||||
background:
|
||||
linear-gradient(176deg, rgb(8 10 12 / 0.9) 0%, rgb(0 0 0 / 0.94) 56%, rgb(6 8 10 / 0.9) 100%),
|
||||
radial-gradient(circle at 18% 0%, rgb(62 232 255 / 0.05), transparent 40%),
|
||||
radial-gradient(circle at 84% 8%, rgb(133 255 68 / 0.04), transparent 36%);
|
||||
linear-gradient(
|
||||
176deg,
|
||||
rgb(var(--hud-surface-alt-rgb) / 0.9) 0%,
|
||||
rgb(var(--hud-surface-deep-rgb) / 0.94) 56%,
|
||||
rgb(var(--hud-surface-rgb) / 0.9) 100%
|
||||
),
|
||||
radial-gradient(circle at 18% 0%, rgb(var(--hud-glow-rgb) / 0.05), transparent 40%),
|
||||
radial-gradient(circle at 84% 8%, rgb(var(--hud-glow-alt-rgb) / 0.04), transparent 36%);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgb(197 228 245 / 0.08),
|
||||
inset 0 1px 0 rgb(var(--hud-border-strong-rgb) / 0.08),
|
||||
inset 0 -28px 60px rgb(0 0 0 / 0.34);
|
||||
overflow: hidden;
|
||||
}
|
||||
@@ -1672,21 +1717,21 @@
|
||||
grid-template-columns: auto 1fr;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
border: 1px solid rgb(103 135 154 / 0.24);
|
||||
border: 1px solid rgb(var(--hud-border-rgb) / 0.24);
|
||||
border-radius: 0.48rem;
|
||||
padding: 0.34rem 0.52rem;
|
||||
background:
|
||||
linear-gradient(180deg, rgb(4 10 14 / 0.72), rgb(2 6 10 / 0.56)),
|
||||
radial-gradient(circle at 50% 0, rgb(62 232 255 / 0.06), transparent 52%);
|
||||
linear-gradient(180deg, rgb(var(--hud-surface-rgb) / 0.72), rgb(var(--hud-surface-deep-rgb) / 0.56)),
|
||||
radial-gradient(circle at 50% 0, rgb(var(--hud-glow-rgb) / 0.06), transparent 52%);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgb(176 218 240 / 0.06),
|
||||
0 0 12px rgb(62 232 255 / 0.08);
|
||||
inset 0 1px 0 rgb(var(--hud-border-strong-rgb) / 0.06),
|
||||
0 0 12px rgb(var(--hud-glow-rgb) / 0.08);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.range-label {
|
||||
margin: 0;
|
||||
color: rgb(146 170 187 / 0.82);
|
||||
color: rgb(var(--hud-text-dim-rgb) / 0.82);
|
||||
font-size: 0.56rem;
|
||||
letter-spacing: 0.1em;
|
||||
text-transform: uppercase;
|
||||
@@ -1699,9 +1744,9 @@
|
||||
grid-template-columns: repeat(11, minmax(0, 1fr));
|
||||
gap: 0.26rem;
|
||||
padding: 0.28rem 0.36rem 0.16rem;
|
||||
border: 1px solid rgb(131 181 200 / 0.14);
|
||||
border: 1px solid rgb(var(--hud-border-strong-rgb) / 0.14);
|
||||
border-radius: 999px;
|
||||
background: rgb(6 13 16 / 0.34);
|
||||
background: rgb(var(--hud-surface-rgb) / 0.34);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@@ -1721,9 +1766,9 @@
|
||||
color-mix(in srgb, var(--hud-range-4) 96%, black) 84%,
|
||||
color-mix(in srgb, var(--hud-range-5) 94%, black) 100%
|
||||
),
|
||||
linear-gradient(180deg, rgb(255 255 255 / 0.06), transparent 42%);
|
||||
linear-gradient(180deg, rgb(var(--hud-text-main-rgb) / 0.06), transparent 42%);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgb(255 255 255 / 0.1),
|
||||
inset 0 1px 0 rgb(var(--hud-text-main-rgb) / 0.1),
|
||||
inset 0 -10px 18px rgb(0 0 0 / 0.18);
|
||||
opacity: 0.94;
|
||||
}
|
||||
@@ -1749,12 +1794,12 @@
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
padding-block-start: 0.36rem;
|
||||
color: rgb(230 243 252 / 0.96);
|
||||
color: rgb(var(--hud-text-main-rgb) / 0.96);
|
||||
font-size: 0.56rem;
|
||||
text-align: center;
|
||||
text-shadow:
|
||||
0 1px 0 rgb(0 0 0 / 0.46),
|
||||
0 0 12px rgb(10 18 24 / 0.4);
|
||||
0 0 12px rgb(var(--hud-surface-alt-rgb) / 0.4);
|
||||
}
|
||||
|
||||
.range-tick::before {
|
||||
@@ -1765,8 +1810,8 @@
|
||||
inline-size: 1px;
|
||||
block-size: 0.24rem;
|
||||
transform: translateX(-50%);
|
||||
background: rgb(234 247 255 / 0.74);
|
||||
box-shadow: 0 0 8px rgb(62 232 255 / 0.22);
|
||||
background: rgb(var(--hud-text-main-rgb) / 0.74);
|
||||
box-shadow: 0 0 8px rgb(var(--hud-glow-rgb) / 0.22);
|
||||
}
|
||||
|
||||
@media (max-width: 760px) {
|
||||
|
||||
3
target-codex-checkHGP49y/CACHEDIR.TAG
Normal file
3
target-codex-checkHGP49y/CACHEDIR.TAG
Normal file
@@ -0,0 +1,3 @@
|
||||
Signature: 8a477f597d28d172789f06886806bc55
|
||||
# This file is a cache directory tag created by cargo.
|
||||
# For information about cache directory tags see https://bford.info/cachedir/
|
||||
Reference in New Issue
Block a user