diff --git a/client/src/components/AppCredits.vue b/client/src/components/AppCredits.vue new file mode 100644 index 0000000..f7b0c06 --- /dev/null +++ b/client/src/components/AppCredits.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/client/src/router/index.ts b/client/src/router/index.ts index 34e5614..75569fc 100644 --- a/client/src/router/index.ts +++ b/client/src/router/index.ts @@ -5,6 +5,7 @@ import Dashboard from '../views/Dashboard.vue'; import DemoGame from '../views/DemoGame.vue'; import UuidSelector from '../views/UuidSelector.vue'; import Leaderboard from '../views/Leaderboard.vue'; +import Credits from '../views/Credits.vue'; const router = createRouter({ history: createWebHistory(), @@ -34,6 +35,11 @@ const router = createRouter({ name: 'Leaderboard', component: Leaderboard }, + { + path: '/credits', + name: 'Credits', + component: Credits + }, { path: '/', name: 'UuidSelector', diff --git a/client/src/views/Credits.vue b/client/src/views/Credits.vue new file mode 100644 index 0000000..1d36815 --- /dev/null +++ b/client/src/views/Credits.vue @@ -0,0 +1,77 @@ + + + + + + diff --git a/client/src/views/Dashboard.vue b/client/src/views/Dashboard.vue index e342278..e55d19d 100644 --- a/client/src/views/Dashboard.vue +++ b/client/src/views/Dashboard.vue @@ -231,6 +231,7 @@ @view-details="viewRoomDetails" @kick-player="kickPlayer" /> + @@ -238,6 +239,7 @@ import { ref, onMounted, onUnmounted, computed } from 'vue'; import { useRouter } from 'vue-router'; import { colyseusService } from '../services/colyseus'; +import AppCredits from '../components/AppCredits.vue'; import RoomCard from '../components/RoomCard.vue'; import RoomsTable from '../components/RoomsTable.vue'; import RoomModal from '../components/RoomModal.vue'; diff --git a/client/src/views/DemoGame.vue b/client/src/views/DemoGame.vue index 8be6eb7..22c2d06 100644 --- a/client/src/views/DemoGame.vue +++ b/client/src/views/DemoGame.vue @@ -72,8 +72,10 @@ + +
@@ -90,6 +92,7 @@ import { ref, onMounted, computed } from 'vue'; import { useRouter, useRoute } from 'vue-router'; import { colyseusService } from '../services/colyseus'; import { getStateCallbacks } from 'colyseus.js'; +import AppCredits from '../components/AppCredits.vue'; import G1 from './games/G1.vue'; import G2 from './games/G2.vue'; diff --git a/client/src/views/Game.vue b/client/src/views/Game.vue index d1536b2..96bef5b 100644 --- a/client/src/views/Game.vue +++ b/client/src/views/Game.vue @@ -69,6 +69,7 @@ +
@@ -78,6 +79,7 @@ import { ref, onMounted, onUnmounted, computed } from 'vue'; import { useRouter, useRoute } from 'vue-router'; import { colyseusService } from '../services/colyseus'; import { getStateCallbacks } from 'colyseus.js'; +import AppCredits from '../components/AppCredits.vue'; const router = useRouter(); const route = useRoute(); diff --git a/client/src/views/Leaderboard.vue b/client/src/views/Leaderboard.vue index a8b63b4..29aedfa 100644 --- a/client/src/views/Leaderboard.vue +++ b/client/src/views/Leaderboard.vue @@ -121,6 +121,7 @@ totalPlayers: totalPlayersCount }" /> + @@ -131,6 +132,7 @@ import EventChart from '../components/EventChart.vue'; import EventFilters from '../components/EventFilters.vue'; import DataSourceSelector from '../components/DataSourceSelector.vue'; import GameLogo from '../components/GameLogo.vue'; +import AppCredits from '../components/AppCredits.vue'; import { useEventFilters } from '../composables/useEventFilters'; interface RoomInfo { roomId: string; metadata?: any; } diff --git a/client/src/views/Lobby.vue b/client/src/views/Lobby.vue index c87b9b0..bc22dfb 100644 --- a/client/src/views/Lobby.vue +++ b/client/src/views/Lobby.vue @@ -78,6 +78,8 @@ + + @@ -86,6 +88,7 @@ import { ref, onMounted, onUnmounted, computed, watch, nextTick } from 'vue'; import PlayerStats from './games/PlayerStats.vue'; import GameLogo from '../components/GameLogo.vue'; +import AppCredits from '../components/AppCredits.vue'; import { useRouter, useRoute } from 'vue-router'; import { colyseusService } from '../services/colyseus'; import { getStateCallbacks } from 'colyseus.js'; @@ -969,3 +972,6 @@ margin: 0 0 20px 0; } } + + + diff --git a/client/src/views/UuidSelector.vue b/client/src/views/UuidSelector.vue index 89aa148..868c40c 100644 --- a/client/src/views/UuidSelector.vue +++ b/client/src/views/UuidSelector.vue @@ -87,7 +87,7 @@
- +
+ + +
+
+ Hecho por Nucleo Inteligencia + + 2024 + + firstcontact@nucleoriofrio.com + + Proyecto abierto, sin fines de lucro +
+
@@ -926,6 +939,25 @@ async function copyToClipboard() { .uuid-card { -webkit-tap-highlight-color: transparent; outline: none; } .uuid-card:focus, .uuid-card:focus-visible { outline: none; } +/* Credits */ +.credits { display:flex; justify-content:center; margin-top: 14px; } +.credits-card { + background: rgba(255,255,255,0.22); + backdrop-filter: blur(6px); + -webkit-backdrop-filter: blur(6px); + border: 1px solid rgba(0,0,0,0.04); + border-radius: 10px; + padding: 8px 12px; + color: #64748b; + font-size: 12px; + line-height: 1.2; + text-align: center; +} +.credits-card .sep { opacity: 0.6; margin: 0 6px; } +.credits-card strong { color: #475569; font-weight: 700; } +.credits-link { color: #64748b; text-decoration: none; border-bottom: 1px dotted rgba(100,116,139,0.5); } +.credits-link:hover { color: #475569; border-bottom-color: rgba(71,85,105,0.6); } + .uuids-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));