Compare commits
157 Commits
v0.3.8
..
5f2b0aea8b
| Author | SHA1 | Date | |
|---|---|---|---|
| 5f2b0aea8b | |||
| 6f6d1329c6 | |||
| 156ee4197c | |||
| a5882f32c4 | |||
| 516168d290 | |||
| c2be53e53f | |||
| 953a1e26e6 | |||
| 5d9b629dca | |||
| 4cc6c6f1ed | |||
| 82f329808e | |||
| 0ab08a9374 | |||
| c9884d1cbd | |||
| 974eca4bb2 | |||
| 8437ddcb7f | |||
| aa0af5db4f | |||
| e79505d8b4 | |||
| b0d820cd92 | |||
| a8cb5c5933 | |||
| bda4c9d73d | |||
| d4fff01e35 | |||
| 77313671b6 | |||
| e76f755abb | |||
| 3bc8f9721e | |||
| a66b777712 | |||
| 19386c2b33 | |||
| e7deb84660 | |||
| 76230bb9d6 | |||
| 908b87eb5d | |||
| e62f551e2f | |||
| 83409cef0d | |||
| a99714eec6 | |||
| 6a24b6f335 | |||
| 87a49118b5 | |||
| 300aeb219f | |||
| 0f19b9089d | |||
| 3c7b8278ce | |||
| a277c78e2c | |||
| 038ac1fe8e | |||
| 07c72b041d | |||
| f6322fb779 | |||
| 49ea7c4e3b | |||
| 95cbcf79a4 | |||
| 3fd0b0e9e2 | |||
| 97c5d81d70 | |||
| f9af9ae15d | |||
| 5127144709 | |||
| 3d31054626 | |||
| 7c70082f37 | |||
| 2674c254a1 | |||
| 64df016f3f | |||
| 2f55521187 | |||
| b23e9ffc6f | |||
| fb9e3e39a8 | |||
| c55ab2a8bb | |||
| 01dd273bd5 | |||
| e1c20044ac | |||
| 3783b37df8 | |||
| 9a5594da4f | |||
| b325d5185b | |||
| 57615f5117 | |||
| d20c0da498 | |||
| 19a3ea489b | |||
| a086a575be | |||
| 83eb6ea2f7 | |||
| c83319ba37 | |||
| 1ab5cfd721 | |||
| 62b8097746 | |||
| 2025d763f9 | |||
| c8151c6e38 | |||
| 6d08016451 | |||
| ca64608e12 | |||
| a91720d045 | |||
| a3064b94ab | |||
| d033a3e088 | |||
| 4e429ca920 | |||
| c9a213ab8a | |||
| cb4df31f43 | |||
| d3756b5f47 | |||
| c731101bc7 | |||
| b0248571f4 | |||
| e6a3eea181 | |||
| c65e93f9ba | |||
| d069707473 | |||
| 0fa0227013 | |||
| 1ac176eb9f | |||
| 90e9c24d81 | |||
| 682bfd9c6a | |||
| b360832128 | |||
| 30b24a5f9a | |||
| ee7c4c4144 | |||
| a4dbca093e | |||
| 4adbffab0c | |||
| eb2ded9614 | |||
| 126c0323ee | |||
| 0d822803f9 | |||
| 8222cc9502 | |||
| 0427b0e624 | |||
| fde0bfef37 | |||
| 7277614ae5 | |||
| 883b775c2f | |||
| bca2ad5bcd | |||
| de53da1c76 | |||
| d416d5d926 | |||
| 41ae10ad64 | |||
| e80334e336 | |||
| 0bd049f52a | |||
| c7df642876 | |||
| fffa422d16 | |||
| d17eab3f11 | |||
| 76e430aa22 | |||
| f5e767cdbb | |||
| 6bf21a81f7 | |||
| 8311ecaf7f | |||
| d000b06748 | |||
| b2726bdc5a | |||
| 2deb4acc0f | |||
| cca1f1e619 | |||
| 0f54657b23 | |||
| 6654a9ee6b | |||
| 174134630e | |||
| eee4bcaa8d | |||
| a82fd7a473 | |||
| a8532fea21 | |||
| b03dcb05a8 | |||
| 73c2f4f01e | |||
| fe8ad61143 | |||
| 5d9b29a89b | |||
| 6d0a1fd15f | |||
| 199be07961 | |||
| 7c6037bd93 | |||
| 64267cbdd0 | |||
| 52f949fece | |||
| aad0eab716 | |||
| 17ee59c9c4 | |||
| b28e072e81 | |||
| f4c5fae10a | |||
| f6403339fd | |||
| c57889e477 | |||
| 9ee7b9e587 | |||
| 5462f74d03 | |||
| 5153ad7210 | |||
| 3fee0e5d43 | |||
| b22d231a18 | |||
| 6d97d28237 | |||
| e951e4b922 | |||
| ac98f73616 | |||
| d2c5830466 | |||
| bf3bf2392c | |||
| 37d8b82d5b | |||
| 5f95fa6357 | |||
| 086ed99ae0 | |||
| eaf8d0d8fa | |||
| 0c25e42bc3 | |||
| 876ae5c227 | |||
| d5f0310218 | |||
| 1d81b811bd | |||
| 413c423ad1 |
@@ -1,25 +1,23 @@
|
|||||||
# App
|
# dumpsterChat Environment Configuration
|
||||||
DUMPSTER_HOST=localhost
|
# Copy this file to .env and fill in your values.
|
||||||
DUMPSTER_PORT=8080
|
|
||||||
DUMPSTER_SECRET=*** Database
|
# Server
|
||||||
POSTGRES_HOST=localhost
|
DUMPSTER_HOST=dumpster.dustin.coffee
|
||||||
POSTGRES_PORT=5432
|
DUMPSTER_SECRET=generate-a-random-secret-here
|
||||||
|
|
||||||
|
# Database
|
||||||
POSTGRES_USER=dumpster
|
POSTGRES_USER=dumpster
|
||||||
POSTGRES_PASSWORD=dumpster
|
POSTGRES_PASSWORD=generate-a-random-password-here
|
||||||
POSTGRES_SSLMODE=disable
|
POSTGRES_DB=dumpster
|
||||||
# Valkey
|
|
||||||
VALKEY_URL=redis://localhost:***@example.com
|
# MinIO (optional — omit for local filesystem)
|
||||||
# MinIO
|
MINIO_ENDPOINT=
|
||||||
MINIO_ENDPOINT=minio:9000
|
MINIO_ACCESS_KEY=
|
||||||
MINIO_ACCESS_KEY=<generated>
|
MINIO_SECRET_KEY=
|
||||||
MINIO_SECRET_KEY=<gener...n
|
|
||||||
# LiveKit
|
# LiveKit (WebRTC / voice)
|
||||||
LIVEKIT_URL=wss://livekit.your.domain
|
LIVEKIT_API_KEY=generate-a-random-key-here
|
||||||
LIVEKIT_API_KEY=<generated>
|
LIVEKIT_API_SECRET=generate-a-random-secret-here
|
||||||
LIVEKIT_API_SECRET=<gener...n
|
|
||||||
# Web Push
|
# Giphy (optional — for GIF search)
|
||||||
VAPID_PUBLIC_KEY=<generated>
|
GIPHY_API_KEY=
|
||||||
VAPID_PRIVATE_KEY=<generated>
|
|
||||||
VAPID_SUBJECT=admin@your.domain
|
|
||||||
# Integrations
|
|
||||||
GIPHY_API_KEY=your_giphy_api_key_here
|
|
||||||
|
|||||||
@@ -46,3 +46,7 @@ steamfree
|
|||||||
# Tauri Android keystore (contains signing passwords)
|
# Tauri Android keystore (contains signing passwords)
|
||||||
web/src-tauri/gen/android/keystore.properties
|
web/src-tauri/gen/android/keystore.properties
|
||||||
|
|
||||||
|
# Secrets and certificates
|
||||||
|
/certs/
|
||||||
|
cookie.txt
|
||||||
|
|
||||||
|
|||||||
@@ -1,81 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDkTCCAxegAwIBAgISBQjShZO8+oxeU80iyTOUKHhdMAoGCCqGSM49BAMDMDMx
|
|
||||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQDEwNZ
|
|
||||||
RTIwHhcNMjYwNzA2MDEzMDM1WhcNMjYxMDA0MDEzMDM0WjAdMRswGQYDVQQDExJ0
|
|
||||||
dXJuLmR1c3Rpbi5jb2ZmZWUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATB70bx
|
|
||||||
IRjXyxdwR/3k56AkiFRKwApxq/h7xNXK5/I5xZ+5+HCLMHjEmFOIUtUj87DpcPHs
|
|
||||||
rAfJZcH19gQIt7Xlo4ICHzCCAhswDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoG
|
|
||||||
CCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFE8HllwR3SN9Ay0rvVLX
|
|
||||||
9mOsdJ0UMB8GA1UdIwQYMBaAFLlZ8o7PIvCG0zdI/3YUGLqC2FWHMDMGCCsGAQUF
|
|
||||||
BwEBBCcwJTAjBggrBgEFBQcwAoYXaHR0cDovL3llMi5pLmxlbmNyLm9yZy8wHQYD
|
|
||||||
VR0RBBYwFIISdHVybi5kdXN0aW4uY29mZmVlMBMGA1UdIAQMMAowCAYGZ4EMAQIB
|
|
||||||
MC4GA1UdHwQnMCUwI6AhoB+GHWh0dHA6Ly95ZTIuYy5sZW5jci5vcmcvOTQuY3Js
|
|
||||||
MIIBCwYKKwYBBAHWeQIEAgSB/ASB+QD3AHUAwjF+V0UZo0XufzjespBB68fCIVoi
|
|
||||||
v3/Vta12mtkOUs0AAAGfNUH9yAAABAMARjBEAiBUIFA17umU+cAdlBJlkjhivt7h
|
|
||||||
4f1HF7kdlQtt0hURaAIgRWAiqclKJy3QikfbGF7EFK3sNRyf/PZNBLtjJeieP1IA
|
|
||||||
fgAm42RuWGkhI7w0P0ckNZs3ks0kWojYFdOTM/2ZGKtHIwAAAZ81QfvIAAgAAAUA
|
|
||||||
JeWwugQDAEcwRQIhAJ9gzEj26/VOpYO0HkS2ZcItIhoBf7bDfzt9gpIK2RH2AiA2
|
|
||||||
66DvuRKPYthZ4AFBXbVtSX4rf4aX2IvgQIWTudJMlDAKBggqhkjOPQQDAwNoADBl
|
|
||||||
AjANu3rbmE/SqrfsMNGEv7rl+qvblv0btupKZ2qHg87079XD4gTh3Sqyl+Z4RnHq
|
|
||||||
JkkCMQDI3q5ZQ6GVF3geVTbNvLlJ+R35eB+EIcoX0Cbs20S5k9N/SiWS2BlQzlUM
|
|
||||||
QpPxaok=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICjDCCAhGgAwIBAgIQTfOxXdbAeExQfNN7WObxFTAKBggqhkjOPQQDAzAuMQsw
|
|
||||||
CQYDVQQGEwJVUzENMAsGA1UEChMESVNSRzEQMA4GA1UEAxMHUm9vdCBZRTAeFw0y
|
|
||||||
NTA5MDMwMDAwMDBaFw0yODA5MDIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYD
|
|
||||||
VQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQDEwNZRTIwdjAQBgcqhkjOPQIBBgUr
|
|
||||||
gQQAIgNiAARxmrQzkdbEEL3MqXt3dJQttYc47axkdDTHud5TPqM2z5uSD5cmk0Wr
|
|
||||||
HlWXvnlvqBLqiB34kluxIbmMyAiq3/YD6e80/vV259K8XQIdjFXloYOa0mIU71f7
|
|
||||||
HQ09PvYDlw+jge4wgeswDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF
|
|
||||||
BwMBMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLlZ8o7PIvCG0zdI/3YU
|
|
||||||
GLqC2FWHMB8GA1UdIwQYMBaAFKPIJlqOoUzQNWP8myPIOq5W809WMDIGCCsGAQUF
|
|
||||||
BwEBBCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3llLmkubGVuY3Iub3JnLzATBgNV
|
|
||||||
HSAEDDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veWUuYy5s
|
|
||||||
ZW5jci5vcmcvMAoGCCqGSM49BAMDA2kAMGYCMQDIcnw5dcZLN9ffynXnnkLD/itS
|
|
||||||
JEycJPb3sRkzeqBowup7vOsAwaqoCnNn/jh9wycCMQCJM6CPlaOC4pQYYbJtVPYb
|
|
||||||
DKrIb2EKk5NpOpE6/XttQYZV/3gilB9l+Cc/DOVwmyg=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICpjCCAiugAwIBAgIRAIchZfw0tuX7qK3Vs3BftTowCgYIKoZIzj0EAwMwTzEL
|
|
||||||
MAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNo
|
|
||||||
IEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDIwHhcNMjYwNTEzMDAwMDAwWhcN
|
|
||||||
MzIwOTAyMjM1OTU5WjAuMQswCQYDVQQGEwJVUzENMAsGA1UEChMESVNSRzEQMA4G
|
|
||||||
A1UEAxMHUm9vdCBZRTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDwS/6vhrcVqcbBo
|
|
||||||
+wgdI3fwn9x7DNJJOY/lTOti0vkwuRN87RhEhTH17E7XyFjWsPYhIPt/wzOqxTd2
|
|
||||||
b+4ZJNy9ID04YywF9U5zasDVyGSNErVNtz8uSGh5izW87j77GaOB6zCB6DAOBgNV
|
|
||||||
HQ8BAf8EBAMCAQYwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB
|
|
||||||
/zAdBgNVHQ4EFgQUo8gmWo6hTNA1Y/ybI8g6rlbzT1YwHwYDVR0jBBgwFoAUfEKW
|
|
||||||
rt5LSDv6kviejM9ti6lyN5UwMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZo
|
|
||||||
dHRwOi8veDIuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcGA1Ud
|
|
||||||
HwQgMB4wHKAaoBiGFmh0dHA6Ly94Mi5jLmxlbmNyLm9yZy8wCgYIKoZIzj0EAwMD
|
|
||||||
aQAwZgIxAMU19WCtmxVND8UHBZRoma49Z7jPs64Dma0eTu1OChVbB/2J7GV3nvYK
|
|
||||||
Ax54uk1G9QIxAO0miLVJu8PLNiXXXkiE/gsK3CTRTF/aeo4bMX42Zw40csRU6AC2
|
|
||||||
6hSW1/IWaas6dg==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEcDCCAligAwIBAgIQbI8dxyfHEX97r4U6yYD5zTANBgkqhkiG9w0BAQsFADBP
|
|
||||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
|
||||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNjA1MTMwMDAwMDBa
|
|
||||||
Fw0zMjA5MDIyMzU5NTlaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5l
|
|
||||||
dCBTZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgy
|
|
||||||
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0H
|
|
||||||
ttwW+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7
|
|
||||||
AlF9ItgKbppbd9/w+kHsOdx1ymgHDB/qo4H1MIHyMA4GA1UdDwEB/wQEAwIBBjAd
|
|
||||||
BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDwYDVR0TAQH/BAUwAwEB/zAd
|
|
||||||
BgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwHwYDVR0jBBgwFoAUebRZ5nu2
|
|
||||||
5eQBc4AIiMgaWPbpm24wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRw
|
|
||||||
Oi8veDEuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcGA1UdHwQg
|
|
||||||
MB4wHKAaoBiGFmh0dHA6Ly94MS5jLmxlbmNyLm9yZy8wDQYJKoZIhvcNAQELBQAD
|
|
||||||
ggIBAD2/e9frmMxNpCV03qUHegg+MV2wz9644YoXdqtH8RyWYcBO7xfjjGEXdU1e
|
|
||||||
/o0OkEFiynUCOSIk/vLLo7ttz6CPAeNlWfC0XNkoGeWgK6jjXvozBaGuGH5n0Ufo
|
|
||||||
shMeWTuURqNN5G00sSXDTBrpp2+mgvdZQjb8K11TYMA25QA+YHNfbIEL0BniAhKS
|
|
||||||
2gsnJjSzrdZLI+EZ7SEyqdR2rkjd1KutLDU+n3TFyxjniZVGur4YlhMP3mY/dV95
|
|
||||||
IruAkkjOZier6hGBdEgZXXvaCz9u9iVEadsIE75pAGL8oHV5vxdARDiotRpul1IN
|
|
||||||
/UZwzAbrfUFcw1HkAcYD/mlZfnQ2ieCF2MS7j3Vhv7JPDKp45fmykmzYNSrumRW0
|
|
||||||
upFFKDBOoF7hsOb7oLyHS+Uft6jOUfOrogj8YUx38hKb2K20r42OgsSdDdxdeYWc
|
|
||||||
MS3Sb6mwJeSZEYxJ2gaXnDSPaKhhrNkYwljyVQyr4Nq+MEJytXNTnHqaAcrNwZlV
|
|
||||||
pcJL1KBnMrMjP7eanvUwL3FYj3cF17jtboLt7gLoi4+2rWZFvn+w54jmd/FIuhhZ
|
|
||||||
cEaU/wvU6BUNMtcVquVGHp7itQeDth5j+XL3j4WJ2SABwzUl6OeYdgpIt/ITZa+p
|
|
||||||
TT0mQ/r5XyA4MEAiabn7XJjvCERlF2dcn2wqJw+CreTkkQ2R
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
-----BEGIN PRIVATE KEY-----
|
|
||||||
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQggnJOfQM8flEJFULr
|
|
||||||
8vvHwWRlXlJ1a0sI5Jw/Y6KRQeGhRANCAATB70bxIRjXyxdwR/3k56AkiFRKwApx
|
|
||||||
q/h7xNXK5/I5xZ+5+HCLMHjEmFOIUtUj87DpcPHsrAfJZcH19gQIt7Xl
|
|
||||||
-----END PRIVATE KEY-----
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
# Netscape HTTP Cookie File
|
|
||||||
# https://curl.se/docs/http-cookies.html
|
|
||||||
# This file was generated by libcurl! Edit at your own risk.
|
|
||||||
|
|
||||||
#HttpOnly_localhost FALSE / TRUE 1785435515 dumpster_session 720a3aad74029e6c8e0c4b93f8db0b48381afc5355e1c1345143a0f5e3d5ae34
|
|
||||||
@@ -9,9 +9,9 @@ rtc:
|
|||||||
- host: turn.dustin.coffee
|
- host: turn.dustin.coffee
|
||||||
port: 443
|
port: 443
|
||||||
protocol: tls
|
protocol: tls
|
||||||
username: V8S6EWOU1Lqp
|
username: "${LIVEKIT_API_KEY}"
|
||||||
credential: jQRJztgWbqDn9vjMUhHZg1ooxuhiBjhk
|
credential: "${LIVEKIT_API_SECRET}"
|
||||||
turn:
|
turn:
|
||||||
enabled: false
|
enabled: false
|
||||||
keys:
|
keys:
|
||||||
V8S6EWOU1Lqp: jQRJztgWbqDn9vjMUhHZg1ooxuhiBjhk
|
"${LIVEKIT_API_KEY}": "${LIVEKIT_API_SECRET}"
|
||||||
|
|||||||
|
After Width: | Height: | Size: 502 KiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
|
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
|
||||||
"productName": "dumpsterChat",
|
"productName": "dumpsterChat",
|
||||||
"version": "0.2.8",
|
"version": "0.2.9",
|
||||||
"identifier": "coffee.dustin.dumpster",
|
"identifier": "coffee.dustin.dumpster",
|
||||||
"build": {
|
"build": {
|
||||||
"frontendDist": "../dist",
|
"frontendDist": "../dist",
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ export function Layout() {
|
|||||||
<div className="h-full w-full bg-gb-bg text-gb-fg font-mono flex flex-col">
|
<div className="h-full w-full bg-gb-bg text-gb-fg font-mono flex flex-col">
|
||||||
{/* Outer terminal frame with safe area */}
|
{/* Outer terminal frame with safe area */}
|
||||||
<div className="flex-1 terminal-border bg-gb-bg-h flex flex-col min-h-0"
|
<div className="flex-1 terminal-border bg-gb-bg-h flex flex-col min-h-0"
|
||||||
style={{ padding: 'max(env(safe-area-inset-top), 1.5rem) max(env(safe-area-inset-right), 0) max(env(safe-area-inset-bottom), 0.75rem) max(env(safe-area-inset-left), 0)' }}>
|
style={{ padding: 'var(--safe-top, 0.25rem) var(--safe-right, 0) var(--safe-bottom, 0) var(--safe-left, 0)' }}>
|
||||||
|
|
||||||
{/* Top bar — minimal on mobile */}
|
{/* Top bar — minimal on mobile */}
|
||||||
<div className="flex items-center justify-between px-2 md:px-3 py-1 border-b border-gb-bg-t bg-gb-bg-s gap-1">
|
<div className="flex items-center justify-between px-2 md:px-3 py-1 border-b border-gb-bg-t bg-gb-bg-s gap-1">
|
||||||
@@ -237,7 +237,7 @@ function MobileBottomNav({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="md:hidden flex items-center bg-gb-bg-h border-t border-gb-bg-t shrink-0"
|
<div className="md:hidden flex items-center bg-gb-bg-h border-t border-gb-bg-t shrink-0"
|
||||||
style={{ paddingBottom: 'env(safe-area-inset-bottom)' }}>
|
style={{ paddingBottom: 'var(--safe-bottom)' }}>
|
||||||
<NavTab active={mobileView === 'sidebar'} onClick={() => onViewChange('sidebar')}>
|
<NavTab active={mobileView === 'sidebar'} onClick={() => onViewChange('sidebar')}>
|
||||||
[SERVERS]
|
[SERVERS]
|
||||||
</NavTab>
|
</NavTab>
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ export function MobileNav({ activeTab, onTabChange, onToggleDrawer }: MobileNavP
|
|||||||
<ThemeToggle />
|
<ThemeToggle />
|
||||||
</div>
|
</div>
|
||||||
{/* Safe area for phones with bottom notch */}
|
{/* Safe area for phones with bottom notch */}
|
||||||
<div className="h-[env(safe-area-inset-bottom)]" />
|
<div className="h-[var(--safe-bottom)]" />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,20 @@ import App from './App.tsx';
|
|||||||
|
|
||||||
const isTauri = 'window' in globalThis && '__TAURI_INTERNALS__' in window;
|
const isTauri = 'window' in globalThis && '__TAURI_INTERNALS__' in window;
|
||||||
if (isTauri) {
|
if (isTauri) {
|
||||||
|
// WebView safe-area fallbacks: Android doesn't support CSS env(), and
|
||||||
|
// Linux WebKitGTK chokes on env() inside var(). Set explicit values via JS.
|
||||||
|
if (navigator.userAgent.includes('Android')) {
|
||||||
|
document.documentElement.style.setProperty('--safe-top', '1.5rem');
|
||||||
|
document.documentElement.style.setProperty('--safe-bottom', '0.75rem');
|
||||||
|
document.documentElement.style.setProperty('--safe-left', '0px');
|
||||||
|
document.documentElement.style.setProperty('--safe-right', '0px');
|
||||||
|
} else {
|
||||||
|
// Linux / macOS Tauri — no notch, but body has default padding already
|
||||||
|
document.documentElement.style.setProperty('--safe-top', '0px');
|
||||||
|
document.documentElement.style.setProperty('--safe-bottom', '0px');
|
||||||
|
document.documentElement.style.setProperty('--safe-left', '0px');
|
||||||
|
document.documentElement.style.setProperty('--safe-right', '0px');
|
||||||
|
}
|
||||||
const TARGET = 'https://dumpster.dustin.coffee';
|
const TARGET = 'https://dumpster.dustin.coffee';
|
||||||
const WS_TARGET = 'wss://dumpster.dustin.coffee';
|
const WS_TARGET = 'wss://dumpster.dustin.coffee';
|
||||||
|
|
||||||
@@ -65,7 +79,8 @@ if (isTauri) {
|
|||||||
|
|
||||||
return ws;
|
return ws;
|
||||||
} as unknown as typeof WebSocket;
|
} as unknown as typeof WebSocket;
|
||||||
window.WebSocket.prototype = OriginalWebSocket.prototype;
|
// ponytail: WebKitGTK may have read-only prototype — guard against throw
|
||||||
|
try { window.WebSocket.prototype = OriginalWebSocket.prototype; } catch { /* readonly, fine */ }
|
||||||
}
|
}
|
||||||
|
|
||||||
createRoot(document.getElementById('root')!).render(
|
createRoot(document.getElementById('root')!).render(
|
||||||
|
|||||||