feat: domains page more or less finished

This commit is contained in:
Derock 2024-02-16 09:30:23 -05:00
parent 139821dc8e
commit febedc8dcb
No known key found for this signature in database
9 changed files with 364 additions and 304 deletions

View file

@ -20,7 +20,6 @@
"@hookform/resolvers": "^3.3.4",
"@mantine/form": "^7.4.0",
"@nicktomlin/codemirror-lang-yaml-lite": "^0.0.3",
"@prisma/migrate": "^5.7.1",
"@radix-ui/react-checkbox": "^1.0.4",
"@radix-ui/react-dialog": "^1.0.5",
"@radix-ui/react-dropdown-menu": "^2.0.6",

View file

@ -14,9 +14,6 @@ dependencies:
'@nicktomlin/codemirror-lang-yaml-lite':
specifier: ^0.0.3
version: 0.0.3
'@prisma/migrate':
specifier: ^5.7.1
version: 5.7.1(@prisma/generator-helper@5.8.1)(@prisma/internals@5.8.1)
'@radix-ui/react-checkbox':
specifier: ^1.0.4
version: 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.46)(react-dom@18.2.0)(react@18.2.0)
@ -67,10 +64,10 @@ dependencies:
version: 11.0.0-next-alpha.150
'@uiw/codemirror-extensions-langs':
specifier: ^4.21.21
version: 4.21.21(@codemirror/autocomplete@6.12.0)(@codemirror/language-data@6.3.1)(@codemirror/language@6.10.0)(@codemirror/legacy-modes@6.3.3)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/javascript@1.4.13)(@lezer/lr@1.3.14)
version: 4.21.21(@codemirror/autocomplete@6.12.0)(@codemirror/language-data@6.4.0)(@codemirror/language@6.10.1)(@codemirror/legacy-modes@6.3.3)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/javascript@1.4.13)(@lezer/lr@1.4.0)
'@uiw/react-codemirror':
specifier: ^4.21.21
version: 4.21.21(@babel/runtime@7.23.8)(@codemirror/autocomplete@6.12.0)(@codemirror/language@6.10.0)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.5)(@codemirror/state@6.4.0)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.23.0)(codemirror@6.0.1)(react-dom@18.2.0)(react@18.2.0)
version: 4.21.21(@babel/runtime@7.23.9)(@codemirror/autocomplete@6.12.0)(@codemirror/language@6.10.1)(@codemirror/lint@6.5.0)(@codemirror/search@6.5.6)(@codemirror/state@6.4.0)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.24.0)(codemirror@6.0.1)(react-dom@18.2.0)(react@18.2.0)
argon2:
specifier: ^0.31.2
version: 0.31.2
@ -293,6 +290,13 @@ packages:
regenerator-runtime: 0.14.1
dev: false
/@babel/runtime@7.23.9:
resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==}
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.14.1
dev: false
/@balena/dockerignore@1.0.2:
resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==}
dev: false
@ -321,7 +325,7 @@ packages:
'@lezer/common': 1.2.0
dev: false
/@codemirror/autocomplete@6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1):
/@codemirror/autocomplete@6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.0):
resolution: {integrity: sha512-L5UInv8Ffd6BPw0P3EF7JLYAMeEbclY7+6Q11REt8vhih8RuLreKtPy/xk8wPxs4EQgYqzI7cdgpiYwWlbS/ow==}
peerDependencies:
'@codemirror/language': ^6.0.0
@ -331,12 +335,12 @@ packages:
dependencies:
'@codemirror/language': 6.10.0
'@codemirror/state': 6.4.0
'@codemirror/view': 6.23.0
'@lezer/common': 1.2.1
'@codemirror/view': 6.24.0
'@lezer/common': 1.2.0
dev: false
/@codemirror/autocomplete@6.12.0(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1):
resolution: {integrity: sha512-r4IjdYFthwbCQyvqnSlx0WBHRHi8nBvU+WjJxFUij81qsBfhNudf/XKKmmC2j3m0LaOYUQTf3qiEK1J8lO1sdg==}
/@codemirror/autocomplete@6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1):
resolution: {integrity: sha512-L5UInv8Ffd6BPw0P3EF7JLYAMeEbclY7+6Q11REt8vhih8RuLreKtPy/xk8wPxs4EQgYqzI7cdgpiYwWlbS/ow==}
peerDependencies:
'@codemirror/language': ^6.0.0
'@codemirror/state': ^6.0.0
@ -345,7 +349,21 @@ packages:
dependencies:
'@codemirror/language': 6.10.0
'@codemirror/state': 6.4.0
'@codemirror/view': 6.23.0
'@codemirror/view': 6.24.0
'@lezer/common': 1.2.1
dev: false
/@codemirror/autocomplete@6.12.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1):
resolution: {integrity: sha512-r4IjdYFthwbCQyvqnSlx0WBHRHi8nBvU+WjJxFUij81qsBfhNudf/XKKmmC2j3m0LaOYUQTf3qiEK1J8lO1sdg==}
peerDependencies:
'@codemirror/language': ^6.0.0
'@codemirror/state': ^6.0.0
'@codemirror/view': ^6.0.0
'@lezer/common': ^1.0.0
dependencies:
'@codemirror/language': 6.10.1
'@codemirror/state': 6.4.0
'@codemirror/view': 6.24.0
'@lezer/common': 1.2.1
dev: false
@ -388,6 +406,18 @@ packages:
- '@codemirror/view'
dev: false
/@codemirror/lang-css@6.2.1(@codemirror/view@6.24.0):
resolution: {integrity: sha512-/UNWDNV5Viwi/1lpr/dIXJNWiwDxpw13I4pTUAsNxZdg6E0mI2kTQb0P2iHczg1Tu+H4EBgJR+hYhKiHKko7qg==}
dependencies:
'@codemirror/autocomplete': 6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.0)
'@codemirror/language': 6.10.0
'@codemirror/state': 6.4.0
'@lezer/common': 1.2.0
'@lezer/css': 1.1.6
transitivePeerDependencies:
- '@codemirror/view'
dev: false
/@codemirror/lang-html@6.4.7:
resolution: {integrity: sha512-y9hWSSO41XlcL4uYwWyk0lEgTHcelWWfRuqmvcAmxfCs0HNWZdriWo/EU43S63SxEZpc1Hd50Itw7ktfQvfkUg==}
dependencies:
@ -402,6 +432,20 @@ packages:
'@lezer/html': 1.3.8
dev: false
/@codemirror/lang-html@6.4.8:
resolution: {integrity: sha512-tE2YK7wDlb9ZpAH6mpTPiYm6rhfdQKVDa5r9IwIFlwwgvVaKsCfuKKZoJGWsmMZIf3FQAuJ5CHMPLymOtg1hXw==}
dependencies:
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)
'@codemirror/lang-css': 6.2.1(@codemirror/view@6.24.0)
'@codemirror/lang-javascript': 6.2.1
'@codemirror/language': 6.10.1
'@codemirror/state': 6.4.0
'@codemirror/view': 6.24.0
'@lezer/common': 1.2.1
'@lezer/css': 1.1.7
'@lezer/html': 1.3.8
dev: false
/@codemirror/lang-java@6.0.1:
resolution: {integrity: sha512-OOnmhH67h97jHzCuFaIEspbmsT98fNdhVhmA3zCxW0cn7l8rChDhZtwiwJ/JOKXgfm4J+ELxQihxaI7bj7mJRg==}
dependencies:
@ -428,10 +472,10 @@ packages:
'@lezer/json': 1.0.2
dev: false
/@codemirror/lang-less@6.0.2(@codemirror/view@6.23.0):
/@codemirror/lang-less@6.0.2(@codemirror/view@6.24.0):
resolution: {integrity: sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==}
dependencies:
'@codemirror/lang-css': 6.2.1(@codemirror/view@6.23.0)
'@codemirror/lang-css': 6.2.1(@codemirror/view@6.24.0)
'@codemirror/language': 6.10.0
'@lezer/common': 1.2.0
'@lezer/highlight': 1.2.0
@ -459,6 +503,19 @@ packages:
'@lezer/lr': 1.3.14
dev: false
/@codemirror/lang-liquid@6.2.1:
resolution: {integrity: sha512-J1Mratcm6JLNEiX+U2OlCDTysGuwbHD76XwuL5o5bo9soJtSbz2g6RU3vGHFyS5DC8rgVmFSzi7i6oBftm7tnA==}
dependencies:
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)
'@codemirror/lang-html': 6.4.8
'@codemirror/language': 6.10.1
'@codemirror/state': 6.4.0
'@codemirror/view': 6.24.0
'@lezer/common': 1.2.1
'@lezer/highlight': 1.2.0
'@lezer/lr': 1.4.0
dev: false
/@codemirror/lang-markdown@6.2.3:
resolution: {integrity: sha512-wCewRLWpdefWi7uVkHIDiE8+45Fe4buvMDZkihqEom5uRUQrl76Zb13emjeK3W+8pcRgRfAmwelURBbxNEKCIg==}
dependencies:
@ -474,11 +531,11 @@ packages:
/@codemirror/lang-markdown@6.2.4:
resolution: {integrity: sha512-UghkA1vSMs8bT7RSZM6vsIocigyah2bV00eRQuZy76401UmFZdsTsbQNBGdyxRQDOLeEvF5iFwap0BM8LKyd+g==}
dependencies:
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)
'@codemirror/lang-html': 6.4.7
'@codemirror/language': 6.10.0
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)
'@codemirror/lang-html': 6.4.8
'@codemirror/language': 6.10.1
'@codemirror/state': 6.4.0
'@codemirror/view': 6.23.0
'@codemirror/view': 6.24.0
'@lezer/common': 1.2.1
'@lezer/markdown': 1.2.0
dev: false
@ -493,10 +550,10 @@ packages:
'@lezer/php': 1.0.2
dev: false
/@codemirror/lang-python@6.1.3(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1):
/@codemirror/lang-python@6.1.3(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1):
resolution: {integrity: sha512-S9w2Jl74hFlD5nqtUMIaXAq9t5WlM0acCkyuQWUUSvZclk1sV+UfnpFiZzuZSG+hfEaOmxKR5UxY/Uxswn7EhQ==}
dependencies:
'@codemirror/autocomplete': 6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)
'@codemirror/autocomplete': 6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)
'@codemirror/language': 6.10.0
'@lezer/python': 1.1.10
transitivePeerDependencies:
@ -505,6 +562,18 @@ packages:
- '@lezer/common'
dev: false
/@codemirror/lang-python@6.1.4(@codemirror/view@6.24.0):
resolution: {integrity: sha512-b6d1TDqrkCjFNvMO01SWldFiDoZ39yl3tDMC1Y5f8glA2eZpynPxJhwYVTlGFr0stizcJgrp6ojLEGH2myoZAw==}
dependencies:
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)
'@codemirror/language': 6.10.1
'@codemirror/state': 6.4.0
'@lezer/common': 1.2.1
'@lezer/python': 1.1.11
transitivePeerDependencies:
- '@codemirror/view'
dev: false
/@codemirror/lang-rust@6.0.1:
resolution: {integrity: sha512-344EMWFBzWArHWdZn/NcgkwMvZIWUR1GEBdwG8FEp++6o6vT6KL9V7vGs2ONsKxxFUPXKI0SPcWhyYyl2zPYxQ==}
dependencies:
@ -512,10 +581,10 @@ packages:
'@lezer/rust': 1.0.2
dev: false
/@codemirror/lang-sass@6.0.2(@codemirror/view@6.23.0):
/@codemirror/lang-sass@6.0.2(@codemirror/view@6.24.0):
resolution: {integrity: sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==}
dependencies:
'@codemirror/lang-css': 6.2.1(@codemirror/view@6.23.0)
'@codemirror/lang-css': 6.2.1(@codemirror/view@6.24.0)
'@codemirror/language': 6.10.0
'@codemirror/state': 6.4.0
'@lezer/common': 1.2.0
@ -524,10 +593,10 @@ packages:
- '@codemirror/view'
dev: false
/@codemirror/lang-sql@6.5.5(@codemirror/view@6.23.0):
/@codemirror/lang-sql@6.5.5(@codemirror/view@6.24.0):
resolution: {integrity: sha512-DvOaP2RXLb2xlxJxxydTFfwyYw5YDqEFea6aAfgh9UH0kUD6J1KFZ0xPgPpw1eo/5s2w3L6uh5PVR7GM23GxkQ==}
dependencies:
'@codemirror/autocomplete': 6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.0)
'@codemirror/autocomplete': 6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.0)
'@codemirror/language': 6.10.0
'@codemirror/state': 6.4.0
'@lezer/common': 1.2.0
@ -557,10 +626,10 @@ packages:
'@lezer/lr': 1.3.14
dev: false
/@codemirror/lang-xml@6.0.2(@codemirror/view@6.23.0):
/@codemirror/lang-xml@6.0.2(@codemirror/view@6.24.0):
resolution: {integrity: sha512-JQYZjHL2LAfpiZI2/qZ/qzDuSqmGKMwyApYmEUUCTxLM4MWS7sATUEfIguZQr9Zjx/7gcdnewb039smF6nC2zw==}
dependencies:
'@codemirror/autocomplete': 6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.0)
'@codemirror/autocomplete': 6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.0)
'@codemirror/language': 6.10.0
'@codemirror/state': 6.4.0
'@lezer/common': 1.2.0
@ -569,32 +638,44 @@ packages:
- '@codemirror/view'
dev: false
/@codemirror/language-data@6.3.1(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1):
resolution: {integrity: sha512-p6jhJmvhGe1TG1EGNhwH7nFWWFSTJ8NDKnB2fVx5g3t+PpO0+63R7GJNxjS0TmmH3cdMxZbzejsik+rlEh1EyQ==}
/@codemirror/lang-yaml@6.0.0(@codemirror/view@6.24.0):
resolution: {integrity: sha512-fVPapdX1oYr5HMC5bou1MHscGnNCvOHuhUW6C+V2gfIeIRcughvVfznV0OuUyHy0AdXoBCjOehjzFcmLRumu2Q==}
dependencies:
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)
'@codemirror/language': 6.10.1
'@codemirror/state': 6.4.0
'@lezer/common': 1.2.1
'@lezer/yaml': 1.0.2
transitivePeerDependencies:
- '@codemirror/view'
dev: false
/@codemirror/language-data@6.4.0(@codemirror/view@6.24.0):
resolution: {integrity: sha512-Wvup3FunHdkL782SUaA35e/cBKa/KEHKxRsrZtvcqTWDgULhrq5K44SnC5r4xYhBLuuxk9NLCAJU3desf+/2qQ==}
dependencies:
'@codemirror/lang-angular': 0.1.3
'@codemirror/lang-cpp': 6.0.2
'@codemirror/lang-css': 6.2.1(@codemirror/view@6.23.0)
'@codemirror/lang-html': 6.4.7
'@codemirror/lang-css': 6.2.1(@codemirror/view@6.24.0)
'@codemirror/lang-html': 6.4.8
'@codemirror/lang-java': 6.0.1
'@codemirror/lang-javascript': 6.2.1
'@codemirror/lang-json': 6.0.1
'@codemirror/lang-less': 6.0.2(@codemirror/view@6.23.0)
'@codemirror/lang-less': 6.0.2(@codemirror/view@6.24.0)
'@codemirror/lang-liquid': 6.2.1
'@codemirror/lang-markdown': 6.2.4
'@codemirror/lang-php': 6.0.1
'@codemirror/lang-python': 6.1.3(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)
'@codemirror/lang-python': 6.1.4(@codemirror/view@6.24.0)
'@codemirror/lang-rust': 6.0.1
'@codemirror/lang-sass': 6.0.2(@codemirror/view@6.23.0)
'@codemirror/lang-sql': 6.5.5(@codemirror/view@6.23.0)
'@codemirror/lang-sass': 6.0.2(@codemirror/view@6.24.0)
'@codemirror/lang-sql': 6.5.5(@codemirror/view@6.24.0)
'@codemirror/lang-vue': 0.1.3
'@codemirror/lang-wast': 6.0.2
'@codemirror/lang-xml': 6.0.2(@codemirror/view@6.23.0)
'@codemirror/language': 6.10.0
'@codemirror/lang-xml': 6.0.2(@codemirror/view@6.24.0)
'@codemirror/lang-yaml': 6.0.0(@codemirror/view@6.24.0)
'@codemirror/language': 6.10.1
'@codemirror/legacy-modes': 6.3.3
transitivePeerDependencies:
- '@codemirror/state'
- '@codemirror/view'
- '@lezer/common'
dev: false
/@codemirror/language@6.10.0:
@ -608,10 +689,21 @@ packages:
style-mod: 4.1.0
dev: false
/@codemirror/language@6.10.1:
resolution: {integrity: sha512-5GrXzrhq6k+gL5fjkAwt90nYDmjlzTIJV8THnxNFtNKWotMIlzzN+CpqxqwXOECnUdOndmSeWntVrVcv5axWRQ==}
dependencies:
'@codemirror/state': 6.4.0
'@codemirror/view': 6.24.0
'@lezer/common': 1.2.1
'@lezer/highlight': 1.2.0
'@lezer/lr': 1.4.0
style-mod: 4.1.0
dev: false
/@codemirror/legacy-modes@6.3.3:
resolution: {integrity: sha512-X0Z48odJ0KIoh/HY8Ltz75/4tDYc9msQf1E/2trlxFaFFhgjpVHjZ/BCXe1Lk7s4Gd67LL/CeEEHNI+xHOiESg==}
dependencies:
'@codemirror/language': 6.10.0
'@codemirror/language': 6.10.1
dev: false
/@codemirror/lint@6.4.2:
@ -622,11 +714,19 @@ packages:
crelt: 1.0.6
dev: false
/@codemirror/search@6.5.5:
resolution: {integrity: sha512-PIEN3Ke1buPod2EHbJsoQwlbpkz30qGZKcnmH1eihq9+bPQx8gelauUwLYaY4vBOuBAuEhmpDLii4rj/uO0yMA==}
/@codemirror/lint@6.5.0:
resolution: {integrity: sha512-+5YyicIaaAZKU8K43IQi8TBy6mF6giGeWAH7N96Z5LC30Wm5JMjqxOYIE9mxwMG1NbhT2mA3l9hA4uuKUM3E5g==}
dependencies:
'@codemirror/state': 6.4.0
'@codemirror/view': 6.23.0
'@codemirror/view': 6.24.0
crelt: 1.0.6
dev: false
/@codemirror/search@6.5.6:
resolution: {integrity: sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==}
dependencies:
'@codemirror/state': 6.4.0
'@codemirror/view': 6.24.0
crelt: 1.0.6
dev: false
@ -637,9 +737,9 @@ packages:
/@codemirror/theme-one-dark@6.1.2:
resolution: {integrity: sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==}
dependencies:
'@codemirror/language': 6.10.0
'@codemirror/language': 6.10.1
'@codemirror/state': 6.4.0
'@codemirror/view': 6.23.0
'@codemirror/view': 6.24.0
'@lezer/highlight': 1.2.0
dev: false
@ -651,6 +751,14 @@ packages:
w3c-keyname: 2.2.8
dev: false
/@codemirror/view@6.24.0:
resolution: {integrity: sha512-zK6m5pNkdhdJl8idPP1gA4N8JKTiSsOz8U/Iw+C1ChMwyLG7+MLiNXnH/wFuAk6KeGEe33/adOiAh5jMqee03w==}
dependencies:
'@codemirror/state': 6.4.0
style-mod: 4.1.0
w3c-keyname: 2.2.8
dev: false
/@colors/colors@1.6.0:
resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==}
engines: {node: '>=0.1.90'}
@ -1265,6 +1373,14 @@ packages:
'@lezer/lr': 1.3.14
dev: false
/@lezer/css@1.1.7:
resolution: {integrity: sha512-7BlFFAKNn/b39jJLrhdLSX5A2k56GIJvyLqdmm7UU+7XvequY084iuKDMAEhAmAzHnwDE8FK4OQtsIUssW91tg==}
dependencies:
'@lezer/common': 1.2.1
'@lezer/highlight': 1.2.0
'@lezer/lr': 1.4.0
dev: false
/@lezer/highlight@1.1.6:
resolution: {integrity: sha512-cmSJYa2us+r3SePpRCjN5ymCqCPv+zyXmDl0ciWtVaNiORT/MxM7ZgOMQZADD0o51qOaOg24qc/zBViOIwAjJg==}
dependencies:
@ -1305,7 +1421,7 @@ packages:
dependencies:
'@lezer/common': 1.2.1
'@lezer/highlight': 1.2.0
'@lezer/lr': 1.3.14
'@lezer/lr': 1.4.0
dev: false
/@lezer/json@1.0.2:
@ -1335,6 +1451,12 @@ packages:
'@lezer/common': 1.2.0
dev: false
/@lezer/lr@1.4.0:
resolution: {integrity: sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg==}
dependencies:
'@lezer/common': 1.2.1
dev: false
/@lezer/markdown@1.2.0:
resolution: {integrity: sha512-d7MwsfAukZJo1GpPrcPGa3MxaFFOqNp0gbqF+3F7pTeNDOgeJN1muXzx1XXDPt+Ac+/voCzsH7qXqnn+xReG/g==}
dependencies:
@ -1358,6 +1480,14 @@ packages:
'@lezer/lr': 1.3.14
dev: false
/@lezer/python@1.1.11:
resolution: {integrity: sha512-C3QeLCcdAKJDUOsYjfFP6a1wdn8jhUNX200bgFm8TpKH1eM2PlgYQS5ugw6E38qGeEx7CP21I1Q52SoybXt0OQ==}
dependencies:
'@lezer/common': 1.2.1
'@lezer/highlight': 1.2.0
'@lezer/lr': 1.4.0
dev: false
/@lezer/rust@1.0.2:
resolution: {integrity: sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==}
dependencies:
@ -1382,6 +1512,14 @@ packages:
'@lezer/lr': 1.3.14
dev: false
/@lezer/yaml@1.0.2:
resolution: {integrity: sha512-XCkwuxe+eumJ28nA9e1S6XKsXz9W7V/AG+WBiWOtiIuUpKcZ/bHuvN8bLxSDREIcybSRpEd/jvphh4vgm6Ed2g==}
dependencies:
'@lezer/common': 1.2.1
'@lezer/highlight': 1.2.0
'@lezer/lr': 1.4.0
dev: false
/@mantine/form@7.4.0(react@18.2.0):
resolution: {integrity: sha512-JI/o2nECWct/Kvn3GF6VplHyJeaLy0q/jGNEB/F4yt12mAYBsux6vPfAhpWrKKZ8Jt31RI+ikn6R4UcY1HGIAw==}
peerDependencies:
@ -1565,89 +1703,6 @@ packages:
requiresBuild: true
optional: true
/@prisma/debug@5.7.1:
resolution: {integrity: sha512-yrVSO/YZOxdeIxcBtZ5BaNqUfPrZkNsAKQIQg36cJKMxj/VYK3Vk5jMKkI+gQLl0KReo1YvX8GWKfV788SELjw==}
dev: false
/@prisma/debug@5.8.1:
resolution: {integrity: sha512-tjuw7eA0Us3T42jx9AmAgL58rzwzpFGYc3R7Y4Ip75EBYrKMBA1YihuWMcBC92ILmjlQ/u3p8VxcIE0hr+fZfg==}
dev: false
/@prisma/engines-version@5.7.1-1.0ca5ccbcfa6bdc81c003cf549abe4269f59c41e5:
resolution: {integrity: sha512-dIR5IQK/ZxEoWRBDOHF87r1Jy+m2ih3Joi4vzJRP+FOj5yxCwS2pS5SBR3TWoVnEK1zxtLI/3N7BjHyGF84fgw==}
dev: false
/@prisma/engines-version@5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2:
resolution: {integrity: sha512-f5C3JM3l9yhGr3cr4FMqWloFaSCpNpMi58Om22rjD2DOz3owci2mFdFXMgnAGazFPKrCbbEhcxdsRfspEYRoFQ==}
dev: false
/@prisma/engines@5.8.1:
resolution: {integrity: sha512-TJgYLRrZr56uhqcXO4GmP5be+zjCIHtLDK20Cnfg+o9d905hsN065QOL+3Z0zQAy6YD31Ol4u2kzSfRmbJv/uA==}
requiresBuild: true
dependencies:
'@prisma/debug': 5.8.1
'@prisma/engines-version': 5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2
'@prisma/fetch-engine': 5.8.1
'@prisma/get-platform': 5.8.1
dev: false
/@prisma/fetch-engine@5.8.1:
resolution: {integrity: sha512-+bgjjoSFa6uYEbAPlklfoVSStOEfcpheOjoBoNsNNSQdSzcwE2nM4Q0prun0+P8/0sCHo18JZ9xqa8gObvgOUw==}
dependencies:
'@prisma/debug': 5.8.1
'@prisma/engines-version': 5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2
'@prisma/get-platform': 5.8.1
dev: false
/@prisma/generator-helper@5.8.1:
resolution: {integrity: sha512-2EDd0o+GHfbX1dtw5BnfOz3hQB7AtYrwe4YNiKfo2UDBvB/ne/ChZa3b/vBm/GKpjW2Xaymct8D9oIHev3juzQ==}
dependencies:
'@prisma/debug': 5.8.1
dev: false
/@prisma/get-platform@5.7.1:
resolution: {integrity: sha512-eDlswr3a1m5z9D/55Iyt/nZqS5UpD+DZ9MooBB3hvrcPhDQrcf9m4Tl7buy4mvAtrubQ626ECtb8c6L/f7rGSQ==}
dependencies:
'@prisma/debug': 5.7.1
dev: false
/@prisma/get-platform@5.8.1:
resolution: {integrity: sha512-wnA+6HTFcY+tkykMokix9GiAkaauPC5W/gg0O5JB0J8tCTNWrqpnQ7AsaGRfkYUbeOIioh6woDjQrGTTRf1Zag==}
dependencies:
'@prisma/debug': 5.8.1
dev: false
/@prisma/internals@5.8.1:
resolution: {integrity: sha512-9okoCgLeMqql58IbEG3YmzgNLRUQdN+qZUYp2DojWC7VAmL9TSOKQ5Dcc0588cKAsCBBDUQ2jfdflorYkzeFKw==}
dependencies:
'@prisma/debug': 5.8.1
'@prisma/engines': 5.8.1
'@prisma/fetch-engine': 5.8.1
'@prisma/generator-helper': 5.8.1
'@prisma/get-platform': 5.8.1
'@prisma/prisma-schema-wasm': 5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2
arg: 5.0.2
prompts: 2.4.2
dev: false
/@prisma/migrate@5.7.1(@prisma/generator-helper@5.8.1)(@prisma/internals@5.8.1):
resolution: {integrity: sha512-wcb+HaWs+KSbjDUw09UXNfExMspzVhVz5Tg+bU2VdskModaueOfHeckfGIuIYlMWSveweV4Evv0NsMmZSrhp0w==}
peerDependencies:
'@prisma/generator-helper': '*'
'@prisma/internals': '*'
dependencies:
'@prisma/debug': 5.7.1
'@prisma/engines-version': 5.7.1-1.0ca5ccbcfa6bdc81c003cf549abe4269f59c41e5
'@prisma/generator-helper': 5.8.1
'@prisma/get-platform': 5.7.1
'@prisma/internals': 5.8.1
prompts: 2.4.2
dev: false
/@prisma/prisma-schema-wasm@5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2:
resolution: {integrity: sha512-UAJANliORe2V/s7yDMx5EKOCj2PIbwX7yusKckxMBDb+ozaQF31c3CBwnZW/ZEdhBoZjrKw8bQlqwZudWXmiKA==}
dev: false
/@radix-ui/number@1.0.1:
resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==}
dependencies:
@ -2364,7 +2419,7 @@ packages:
'@babel/runtime': 7.23.8
dev: false
/@replit/codemirror-lang-csharp@6.2.0(@codemirror/autocomplete@6.12.0)(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/lr@1.3.14):
/@replit/codemirror-lang-csharp@6.2.0(@codemirror/autocomplete@6.12.0)(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/lr@1.4.0):
resolution: {integrity: sha512-6utbaWkoymhoAXj051mkRp+VIJlpwUgCX9Toevz3YatiZsz512fw3OVCedXQx+WcR0wb6zVHjChnuxqfCLtFVQ==}
peerDependencies:
'@codemirror/autocomplete': ^6.0.0
@ -2375,16 +2430,16 @@ packages:
'@lezer/highlight': ^1.0.0
'@lezer/lr': ^1.0.0
dependencies:
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)
'@codemirror/language': 6.10.0
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)
'@codemirror/language': 6.10.1
'@codemirror/state': 6.4.0
'@codemirror/view': 6.23.0
'@codemirror/view': 6.24.0
'@lezer/common': 1.2.1
'@lezer/highlight': 1.2.0
'@lezer/lr': 1.3.14
'@lezer/lr': 1.4.0
dev: false
/@replit/codemirror-lang-nix@6.0.1(@codemirror/autocomplete@6.12.0)(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/lr@1.3.14):
/@replit/codemirror-lang-nix@6.0.1(@codemirror/autocomplete@6.12.0)(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/lr@1.4.0):
resolution: {integrity: sha512-lvzjoYn9nfJzBD5qdm3Ut6G3+Or2wEacYIDJ49h9+19WSChVnxv4ojf+rNmQ78ncuxIt/bfbMvDLMeMP0xze6g==}
peerDependencies:
'@codemirror/autocomplete': ^6.0.0
@ -2395,24 +2450,24 @@ packages:
'@lezer/highlight': ^1.0.0
'@lezer/lr': ^1.0.0
dependencies:
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)
'@codemirror/language': 6.10.0
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)
'@codemirror/language': 6.10.1
'@codemirror/state': 6.4.0
'@codemirror/view': 6.23.0
'@codemirror/view': 6.24.0
'@lezer/common': 1.2.1
'@lezer/highlight': 1.2.0
'@lezer/lr': 1.3.14
'@lezer/lr': 1.4.0
dev: false
/@replit/codemirror-lang-solidity@6.0.1(@codemirror/language@6.10.0):
/@replit/codemirror-lang-solidity@6.0.1(@codemirror/language@6.10.1):
resolution: {integrity: sha512-kDnak0xZelGmvzJwKTpMTl6gYSfFq9hnxrkbLaMV0CARq/MFvDQJmcmYon/k8uZqXy6DfzewKDV8tx9kY2WUZg==}
peerDependencies:
'@codemirror/language': ^6.0.0
dependencies:
'@codemirror/language': 6.10.0
'@codemirror/language': 6.10.1
dev: false
/@replit/codemirror-lang-svelte@6.0.0(@codemirror/autocomplete@6.12.0)(@codemirror/lang-css@6.2.1)(@codemirror/lang-html@6.4.7)(@codemirror/lang-javascript@6.2.1)(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/javascript@1.4.13)(@lezer/lr@1.3.14):
/@replit/codemirror-lang-svelte@6.0.0(@codemirror/autocomplete@6.12.0)(@codemirror/lang-css@6.2.1)(@codemirror/lang-html@6.4.7)(@codemirror/lang-javascript@6.2.1)(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/javascript@1.4.13)(@lezer/lr@1.4.0):
resolution: {integrity: sha512-U2OqqgMM6jKelL0GNWbAmqlu1S078zZNoBqlJBW+retTc5M4Mha6/Y2cf4SVg6ddgloJvmcSpt4hHrVoM4ePRA==}
peerDependencies:
'@codemirror/autocomplete': ^6.0.0
@ -2427,17 +2482,17 @@ packages:
'@lezer/javascript': ^1.2.0
'@lezer/lr': ^1.0.0
dependencies:
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)
'@codemirror/lang-css': 6.2.1(@codemirror/view@6.23.0)
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)
'@codemirror/lang-css': 6.2.1(@codemirror/view@6.24.0)
'@codemirror/lang-html': 6.4.7
'@codemirror/lang-javascript': 6.2.1
'@codemirror/language': 6.10.0
'@codemirror/language': 6.10.1
'@codemirror/state': 6.4.0
'@codemirror/view': 6.23.0
'@codemirror/view': 6.24.0
'@lezer/common': 1.2.1
'@lezer/highlight': 1.2.0
'@lezer/javascript': 1.4.13
'@lezer/lr': 1.3.14
'@lezer/lr': 1.4.0
dev: false
/@rollup/rollup-android-arm-eabi@4.9.2:
@ -3021,7 +3076,7 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
/@uiw/codemirror-extensions-basic-setup@4.21.21(@codemirror/autocomplete@6.12.0)(@codemirror/commands@6.3.3)(@codemirror/language@6.10.0)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.5)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
/@uiw/codemirror-extensions-basic-setup@4.21.21(@codemirror/autocomplete@6.12.0)(@codemirror/commands@6.3.3)(@codemirror/language@6.10.1)(@codemirror/lint@6.5.0)(@codemirror/search@6.5.6)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0):
resolution: {integrity: sha512-+0i9dPrRSa8Mf0CvyrMvnAhajnqwsP3IMRRlaHDRgsSGL8igc4z7MhvUPn+7cWFAAqWzQRhMdMSWzo6/TEa3EA==}
peerDependencies:
'@codemirror/autocomplete': '>=6.0.0'
@ -3032,16 +3087,16 @@ packages:
'@codemirror/state': '>=6.0.0'
'@codemirror/view': '>=6.0.0'
dependencies:
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)
'@codemirror/commands': 6.3.3
'@codemirror/language': 6.10.0
'@codemirror/lint': 6.4.2
'@codemirror/search': 6.5.5
'@codemirror/language': 6.10.1
'@codemirror/lint': 6.5.0
'@codemirror/search': 6.5.6
'@codemirror/state': 6.4.0
'@codemirror/view': 6.23.0
'@codemirror/view': 6.24.0
dev: false
/@uiw/codemirror-extensions-langs@4.21.21(@codemirror/autocomplete@6.12.0)(@codemirror/language-data@6.3.1)(@codemirror/language@6.10.0)(@codemirror/legacy-modes@6.3.3)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/javascript@1.4.13)(@lezer/lr@1.3.14):
/@uiw/codemirror-extensions-langs@4.21.21(@codemirror/autocomplete@6.12.0)(@codemirror/language-data@6.4.0)(@codemirror/language@6.10.1)(@codemirror/legacy-modes@6.3.3)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/javascript@1.4.13)(@lezer/lr@1.4.0):
resolution: {integrity: sha512-h08pw2NeGLDgBiY8Ju5GNjfVzq1f6+wc0uPdqN5tkYBaKmByyKI10l5Gds7wBPzFH0uZlevP+Jyf9oSTcula5Q==}
peerDependencies:
'@codemirror/language-data': '>=6.0.0'
@ -3049,30 +3104,30 @@ packages:
dependencies:
'@codemirror/lang-angular': 0.1.3
'@codemirror/lang-cpp': 6.0.2
'@codemirror/lang-css': 6.2.1(@codemirror/view@6.23.0)
'@codemirror/lang-css': 6.2.1(@codemirror/view@6.24.0)
'@codemirror/lang-html': 6.4.7
'@codemirror/lang-java': 6.0.1
'@codemirror/lang-javascript': 6.2.1
'@codemirror/lang-json': 6.0.1
'@codemirror/lang-less': 6.0.2(@codemirror/view@6.23.0)
'@codemirror/lang-less': 6.0.2(@codemirror/view@6.24.0)
'@codemirror/lang-lezer': 6.0.1
'@codemirror/lang-liquid': 6.2.0
'@codemirror/lang-markdown': 6.2.3
'@codemirror/lang-php': 6.0.1
'@codemirror/lang-python': 6.1.3(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)
'@codemirror/lang-python': 6.1.3(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)
'@codemirror/lang-rust': 6.0.1
'@codemirror/lang-sass': 6.0.2(@codemirror/view@6.23.0)
'@codemirror/lang-sql': 6.5.5(@codemirror/view@6.23.0)
'@codemirror/lang-sass': 6.0.2(@codemirror/view@6.24.0)
'@codemirror/lang-sql': 6.5.5(@codemirror/view@6.24.0)
'@codemirror/lang-vue': 0.1.3
'@codemirror/lang-wast': 6.0.2
'@codemirror/lang-xml': 6.0.2(@codemirror/view@6.23.0)
'@codemirror/language-data': 6.3.1(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)
'@codemirror/lang-xml': 6.0.2(@codemirror/view@6.24.0)
'@codemirror/language-data': 6.4.0(@codemirror/view@6.24.0)
'@codemirror/legacy-modes': 6.3.3
'@nextjournal/lang-clojure': 1.0.0
'@replit/codemirror-lang-csharp': 6.2.0(@codemirror/autocomplete@6.12.0)(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/lr@1.3.14)
'@replit/codemirror-lang-nix': 6.0.1(@codemirror/autocomplete@6.12.0)(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/lr@1.3.14)
'@replit/codemirror-lang-solidity': 6.0.1(@codemirror/language@6.10.0)
'@replit/codemirror-lang-svelte': 6.0.0(@codemirror/autocomplete@6.12.0)(@codemirror/lang-css@6.2.1)(@codemirror/lang-html@6.4.7)(@codemirror/lang-javascript@6.2.1)(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/javascript@1.4.13)(@lezer/lr@1.3.14)
'@replit/codemirror-lang-csharp': 6.2.0(@codemirror/autocomplete@6.12.0)(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/lr@1.4.0)
'@replit/codemirror-lang-nix': 6.0.1(@codemirror/autocomplete@6.12.0)(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/lr@1.4.0)
'@replit/codemirror-lang-solidity': 6.0.1(@codemirror/language@6.10.1)
'@replit/codemirror-lang-svelte': 6.0.0(@codemirror/autocomplete@6.12.0)(@codemirror/lang-css@6.2.1)(@codemirror/lang-html@6.4.7)(@codemirror/lang-javascript@6.2.1)(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/javascript@1.4.13)(@lezer/lr@1.4.0)
codemirror-lang-mermaid: 0.5.0
transitivePeerDependencies:
- '@codemirror/autocomplete'
@ -3085,7 +3140,7 @@ packages:
- '@lezer/lr'
dev: false
/@uiw/react-codemirror@4.21.21(@babel/runtime@7.23.8)(@codemirror/autocomplete@6.12.0)(@codemirror/language@6.10.0)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.5)(@codemirror/state@6.4.0)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.23.0)(codemirror@6.0.1)(react-dom@18.2.0)(react@18.2.0):
/@uiw/react-codemirror@4.21.21(@babel/runtime@7.23.9)(@codemirror/autocomplete@6.12.0)(@codemirror/language@6.10.1)(@codemirror/lint@6.5.0)(@codemirror/search@6.5.6)(@codemirror/state@6.4.0)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.24.0)(codemirror@6.0.1)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-PaxBMarufMWoR0qc5zuvBSt76rJ9POm9qoOaJbqRmnNL2viaF+d+Paf2blPSlm1JSnqn7hlRjio+40nZJ9TKzw==}
peerDependencies:
'@babel/runtime': '>=7.11.0'
@ -3096,12 +3151,12 @@ packages:
react: '>=16.8.0'
react-dom: '>=16.8.0'
dependencies:
'@babel/runtime': 7.23.8
'@babel/runtime': 7.23.9
'@codemirror/commands': 6.3.3
'@codemirror/state': 6.4.0
'@codemirror/theme-one-dark': 6.1.2
'@codemirror/view': 6.23.0
'@uiw/codemirror-extensions-basic-setup': 4.21.21(@codemirror/autocomplete@6.12.0)(@codemirror/commands@6.3.3)(@codemirror/language@6.10.0)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.5)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
'@codemirror/view': 6.24.0
'@uiw/codemirror-extensions-basic-setup': 4.21.21(@codemirror/autocomplete@6.12.0)(@codemirror/commands@6.3.3)(@codemirror/language@6.10.1)(@codemirror/lint@6.5.0)(@codemirror/search@6.5.6)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)
codemirror: 6.0.1(@lezer/common@1.2.1)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@ -3719,13 +3774,13 @@ packages:
/codemirror@6.0.1(@lezer/common@1.2.1):
resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==}
dependencies:
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.1)
'@codemirror/autocomplete': 6.12.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)
'@codemirror/commands': 6.3.3
'@codemirror/language': 6.10.0
'@codemirror/lint': 6.4.2
'@codemirror/search': 6.5.5
'@codemirror/language': 6.10.1
'@codemirror/lint': 6.5.0
'@codemirror/search': 6.5.6
'@codemirror/state': 6.4.0
'@codemirror/view': 6.23.0
'@codemirror/view': 6.24.0
transitivePeerDependencies:
- '@lezer/common'
dev: false
@ -5920,11 +5975,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/kleur@3.0.3:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
dev: false
/klona@2.0.6:
resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==}
engines: {node: '>= 8'}
@ -6912,14 +6962,6 @@ packages:
hasBin: true
dev: true
/prompts@2.4.2:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
dependencies:
kleur: 3.0.3
sisteransi: 1.0.5
dev: false
/prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
dependencies:
@ -7447,6 +7489,7 @@ packages:
/sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
dev: true
/slash@2.0.0:
resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==}

View file

@ -1,17 +1,15 @@
"use client";
import { AnimatePresence, motion } from "framer-motion";
import { zodResolver } from "@hookform/resolvers/zod";
import { motion } from "framer-motion";
import { PlusIcon } from "lucide-react";
import { useFieldArray } from "react-hook-form";
import { useEffect } from "react";
import { useFieldArray, useForm } from "react-hook-form";
import { uuidv7 } from "uuidv7";
import { z } from "zod";
import { Button } from "~/components/ui/button";
import { Form } from "~/components/ui/form";
import {
FormSubmit,
FormUnsavedChangesIndicator,
useForm,
} from "~/hooks/forms";
import { FormSubmit } from "~/hooks/forms";
import { api } from "~/trpc/react";
import { useService } from "../_hooks/service";
import DomainEntry from "./_components/DomainEntry";
@ -19,7 +17,7 @@ import DomainEntry from "./_components/DomainEntry";
const formValidator = z.object({
domains: z.array(
z.object({
domainId: z.string(),
domainId: z.string().optional(),
domain: z
.string()
.regex(
@ -34,14 +32,19 @@ const formValidator = z.object({
),
});
export type DomainsListForm = z.infer<typeof formValidator>;
export default function DomainsList() {
const service = useService();
const updateDomain = api.projects.services.updateDomain.useMutation();
const deleteDomain = api.projects.services.deleteDomain.useMutation();
const form = useForm(formValidator, {
const form = useForm<z.infer<typeof formValidator>>({
defaultValues: {
domains: [],
},
resolver: zodResolver(formValidator),
});
const domainsForm = useFieldArray({
@ -49,10 +52,13 @@ export default function DomainsList() {
name: "domains",
});
// useEffect(() => {
// console.log("setting domains", service.data?.domains ?? []);
// form.setValue("domains", service.data?.domains ?? []);
// }, [service.data?.domains]);
useEffect(() => {
console.log("setting domains", service.data?.domains ?? []);
form.setValue(
"domains",
service.data?.domains.map((d) => ({ ...d, domainId: d.id })) ?? [],
);
}, [form, service.data?.domains]);
console.log(
"Rendering fields with ids: ",
@ -63,73 +69,96 @@ export default function DomainsList() {
<Form {...form}>
<form
onSubmit={form.handleSubmit(async (data) => {
// await Promise.all(
// data.domains.map((domain) => {
// if (service.data === undefined) return;
await Promise.all([
...data.domains.map((domain) => {
if (service.data === undefined) return;
// return updateDomain.mutateAsync({
// projectId: service.data.projectId,
// serviceId: service.data.id,
// domain: domain.domain,
// forceSSL: domain.forceSSL,
// https: domain.https,
// internalPort: domain.internalPort,
// });
// }),
// );
return updateDomain.mutateAsync({
projectId: service.data.projectId,
serviceId: service.data.id,
domainId: domain.domainId,
domain: domain.domain,
forceSSL: domain.forceSSL,
https: domain.https,
internalPort: domain.internalPort,
});
}),
// domains that don't exist anymore
...(service.data?.domains
.filter(
(d) =>
!data.domains.some(
(existingDomain) => existingDomain.domainId === d.id,
),
)
.map((domainToDelete) => {
if (service.data === undefined) return;
return deleteDomain.mutateAsync({
domainId: domainToDelete.id,
serviceId: service.data.id,
projectId: service.data.projectId,
});
}) ?? []),
]);
// refetch service
await service.refetch();
})}
className="flex flex-col gap-4"
>
<h1 className="col-span-2">Domains</h1>
{/* Animations break react-hook-form, no tracking issue yet. */}
{/* <AnimatePresence mode="sync"> */}
<AnimatePresence mode="sync">
{domainsForm.fields.map((field, index) => (
<DomainEntry
form={form}
domains={domainsForm}
field={field}
index={index}
key={field.id}
/>
))}
<h1 key="title" className="col-span-2">
Domains
</h1>
<motion.div
className="flex flex-row flex-wrap items-center gap-4"
layout
key={service.data?.id}
{domainsForm.fields.map((field, index) => (
<DomainEntry
field={field}
index={index}
key={field.id}
domains={domainsForm}
/>
))}
<motion.div
className="flex flex-row flex-wrap items-center gap-4"
layout
key={service.data?.id}
>
<FormSubmit
form={form}
className="col-span-2"
hideUnsavedChangesIndicator
/>
<Button
type="button"
variant="secondary"
icon={PlusIcon}
onClick={() => {
const domain = {
domainId: undefined,
domain: uuidv7().split("-").at(-1) + ".example.com",
forceSSL: false,
https: false,
internalPort: 8080,
};
console.log("add domain: ", domain.domainId);
domainsForm.append(domain);
}}
>
<FormSubmit
form={form}
className="col-span-2"
hideUnsavedChangesIndicator
/>
Add Domain
</Button>
<Button
variant="secondary"
icon={PlusIcon}
onClick={() => {
const domain = {
domainId: new Date().toISOString(),
domain: uuidv7().split("-").at(-1) + ".example.com",
forceSSL: false,
https: false,
internalPort: 8080,
};
console.log("add domain: ", domain.domainId);
domainsForm.append(domain);
}}
>
Add Domain
</Button>
<FormUnsavedChangesIndicator form={form} />
</motion.div>
</AnimatePresence>
{/* <FormUnsavedChangesIndicator form={form} /> */}
</motion.div>
{/* </AnimatePresence> */}
</form>
</Form>
);

View file

@ -3,13 +3,15 @@
import { AnimatePresence, motion } from "framer-motion";
import { ArrowRight, CogIcon, TrashIcon } from "lucide-react";
import { forwardRef, useState } from "react";
import { type UseFieldArrayReturn, type UseFormReturn } from "react-hook-form";
import { useFormContext, type UseFieldArrayReturn } from "react-hook-form";
import { Button } from "~/components/ui/button";
import { Card } from "~/components/ui/card";
import { Switch } from "~/components/ui/switch";
import { SimpleFormField } from "~/hooks/forms";
import { type DomainsListForm } from "../DomainsList";
type FieldData = {
id: string; // internal ID for react-form-hook
domainId: string;
domain: string;
internalPort: number;
@ -20,47 +22,29 @@ type FieldData = {
const DomainEntry = forwardRef<
HTMLDivElement,
{
form: UseFormReturn<
{
domains: FieldData[];
},
// eslint-disable-next-line @typescript-eslint/no-explicit-any
any,
undefined
>;
domains: UseFieldArrayReturn<
{
domains: FieldData[];
},
"domains",
"id"
>;
field: FieldData;
index: number;
domains: UseFieldArrayReturn<DomainsListForm, "domains", "id">;
}
>(({ form, domains, field, index }, ref) => {
>(({ field, index, domains }, ref) => {
const form = useFormContext();
const [isOpen, setIsOpen] = useState(false);
return (
<motion.div
ref={ref}
layout
// layout
initial={{ opacity: 0, scale: 0.5 }}
animate={{ opacity: 1, scale: 1 }}
exit={{ opacity: 0, scale: 0.5 }}
transition={{
duration: 0.4,
type: "spring",
bounce: 0.15,
}}
key={field.domainId}
>
<Card className="p-4">
<h1>
Rendering {field.domainId ?? "undefined???"} at index {index}
</h1>
<div className="flex flex-row gap-4">
<SimpleFormField
control={form.control}
@ -92,6 +76,7 @@ const DomainEntry = forwardRef<
<div className="flex flex-row gap-2 pt-8">
<Button
variant="secondary"
type="button"
icon={CogIcon}
className="mr-2"
onClick={() => {
@ -101,8 +86,10 @@ const DomainEntry = forwardRef<
<Button
variant="destructive"
type="button"
icon={TrashIcon}
onClick={() => {
console.log("remove domain: ", field.domainId);
domains.remove(index);
}}
/>
@ -111,31 +98,21 @@ const DomainEntry = forwardRef<
<AnimatePresence>
{isOpen && (
<motion.div className="flex flex-col gap-4">
<motion.div className="mt-4 grid grid-cols-2 rounded-md bg-background p-8">
<h1 className="col-span-2 pb-4">Advanced Settings</h1>
<SimpleFormField
control={form.control}
name={`domains.${index}.https`}
friendlyName="HTTPS"
name={`domains.${index}.forceSSL`}
friendlyName="Force SSL"
render={({ field }) => (
<div className="pt-2">
<Switch {...field} className="mx-auto block" />
<Switch {...field} className="mr-auto block" />
</div>
)}
/>
<SimpleFormField
control={form.control}
name={`domains.${index}.domain`}
friendlyName="Domain"
className="flex-1"
/>
<SimpleFormField
control={form.control}
name={`domains.${index}.internalPort`}
friendlyName="Internal Port"
className="w-60"
/>
{/* TODO: allow custom SSL certificates */}
</motion.div>
)}
</AnimatePresence>

View file

@ -1,7 +1,5 @@
"use client";
export function SourcePage() {
return (
)
}
return <h1>source</h1>;
}

View file

@ -11,11 +11,12 @@ const outfit = Outfit({
subsets: ["latin"],
variable: "--font-sans",
weight: ["100", "300", "400", "500", "700", "900"],
display: "swap",
});
export const metadata = {
title: "Create T3 App",
description: "Generated by create-t3-app",
title: "Hostforge",
description: "Open-source infrastructure management platform.",
icons: [{ rel: "icon", url: "/favicon.ico" }],
};
@ -24,6 +25,8 @@ export default function RootLayout({
}: {
children: React.ReactNode;
}) {
console.log(outfit);
return (
<html lang="en">
<body className={`font-sans ${outfit.variable} min-h-screen min-w-full`}>

View file

@ -155,7 +155,17 @@ export const getServiceContainers = authenticatedProcedure
? null
: await ctx.docker
.getContainer(task.Status.ContainerStatus.ContainerID)
.stats({ "one-shot": true, stream: false });
.stats({ "one-shot": true, stream: false })
.catch((err) => {
if (
typeof err === "object" &&
"statusCode" in err &&
// TODO: figure out why TS isn't happy
err.statusCode === 404
)
return null;
throw err;
});
return {
slot: task.Slot,

View file

@ -146,6 +146,7 @@ server.on("upgrade", (req, socket, head) => {
});
// start the server
logger.debug(`Attempting to listen on ${env.HOSTNAME}:${env.PORT}`);
server.listen(env.PORT, env.HOSTNAME, () => {
logger.info(`🚀 Hostforge`);
logger.info(`│ Server listening on ${env.HOSTNAME}:${env.PORT}`);

View file

@ -17,7 +17,7 @@ module.exports = {
},
extend: {
fontFamily: {
sans: ["var(--font-sans)", "Segoe UI", "sans-serif"],
sans: ["var(--font-sans)", "Segoe UI", "sans"],
},
colors: {
border: "hsl(var(--border))",