feat(migration): frontend migration submissions -> opus-magnum

This commit is contained in:
Loïc Gremaud 2026-05-24 18:54:14 +02:00
parent b437210eb3
commit a5fe8aacaf
Signed by: Legrems
GPG Key ID: D4620E6DF3E0121D
11 changed files with 87 additions and 87 deletions

View File

@ -32,8 +32,8 @@ The Noita Submission API allows clients to upload the result of the log file of
# Add authentication for protected endpoints # Add authentication for protected endpoints
# api.auth = django_auth # Uncomment if you want global auth # api.auth = django_auth # Uncomment if you want global auth
# Include the submissions router # Include the opus_magnum router
api.add_router("/submissions/", submissions_router, tags=["submissions"]) api.add_router("/opus-magnum/", submissions_router, tags=["opus-magnum"])
api.add_router("/results/", results_router, tags=["results"]) api.add_router("/results/", results_router, tags=["results"])
api.add_router("/noita/", noita_router, tags=["noita"]) api.add_router("/noita/", noita_router, tags=["noita"])
api.add_router("/games/", games_router, tags=["games"]) api.add_router("/games/", games_router, tags=["games"])

View File

@ -7,7 +7,7 @@ import Results from "@/components/Results.vue";
import Winners from "@/components/Winners.vue"; import Winners from "@/components/Winners.vue";
import PuzzleResults from "@/components/PuzzleResults.vue"; import PuzzleResults from "@/components/PuzzleResults.vue";
import TopUsersLeaderboard from "@/components/TopUsersLeaderboard.vue"; import TopUsersLeaderboard from "@/components/TopUsersLeaderboard.vue";
import { polylanSubmitterApiGetUserInfo, submissionsApiGetCollection } from "@/api"; import { polylanSubmitterApiGetUserInfo, opusMagnumApiGetCollection } from "@/api";
import { errorHelpers } from "@/services/apiService"; import { errorHelpers } from "@/services/apiService";
import { usePuzzlesStore } from "@/stores/puzzles"; import { usePuzzlesStore } from "@/stores/puzzles";
import { useSubmissionsStore } from "@/stores/submissions"; import { useSubmissionsStore } from "@/stores/submissions";
@ -77,7 +77,7 @@ async function initialize() {
// Load collection data // Load collection data
console.log("Loading collection..."); console.log("Loading collection...");
const collectionResponse = await submissionsApiGetCollection(); const collectionResponse = await opusMagnumApiGetCollection();
if (collectionResponse.data) { if (collectionResponse.data) {
collection.value = collectionResponse.data as SteamCollection; collection.value = collectionResponse.data as SteamCollection;
console.log("Collection loaded:", collectionResponse.data); console.log("Collection loaded:", collectionResponse.data);

View File

@ -1,4 +1,4 @@
// This file is auto-generated by @hey-api/openapi-ts // This file is auto-generated by @hey-api/openapi-ts
export { animationsApiPuzzleResults, animationsApiResults, animationsApiTopSubmissions, gamesApiListGames, marketApiCloseMarket, marketApiCreateBet, marketApiListMarkets, marketApiListUserBets, marketApiResolveMarket, noitaApiGetLeaderboard, noitaApiGetResults, noitaApiSubmitLogFile, type Options, polylanSubmitterApiClearCache, polylanSubmitterApiGetUserInfo, polylanSubmitterApiHealthCheck, submissionsApiCreateSubmission, submissionsApiDeleteSubmission, submissionsApiGetCollection, submissionsApiGetStats, submissionsApiGetSubmission, submissionsApiListPuzzles, submissionsApiListResponsesNeedingValidation, submissionsApiListSubmissions, submissionsApiValidateAuto, submissionsApiValidateResponse, submissionsApiValidateSubmission } from './sdk.gen'; export { animationsApiPuzzleResults, animationsApiResults, animationsApiTopSubmissions, gamesApiListGames, marketApiCloseMarket, marketApiCreateBet, marketApiListMarkets, marketApiListUserBets, marketApiResolveMarket, noitaApiGetLeaderboard, noitaApiGetResults, noitaApiSubmitLogFile, type Options, opusMagnumApiCreateSubmission, opusMagnumApiDeleteSubmission, opusMagnumApiGetCollection, opusMagnumApiGetStats, opusMagnumApiGetSubmission, opusMagnumApiListPuzzles, opusMagnumApiListResponsesNeedingValidation, opusMagnumApiListSubmissions, opusMagnumApiValidateAuto, opusMagnumApiValidateResponse, opusMagnumApiValidateSubmission, polylanSubmitterApiClearCache, polylanSubmitterApiGetUserInfo, polylanSubmitterApiHealthCheck } from './sdk.gen';
export type { AnimationsApiPuzzleResultsData, AnimationsApiPuzzleResultsResponse, AnimationsApiPuzzleResultsResponses, AnimationsApiResultsData, AnimationsApiResultsResponse, AnimationsApiResultsResponses, AnimationsApiTopSubmissionsData, AnimationsApiTopSubmissionsResponse, AnimationsApiTopSubmissionsResponses, ClientOptions, GameOut, GamesApiListGamesData, GamesApiListGamesResponse, GamesApiListGamesResponses, Input, LeaderboardEntryOut, LeaderboardOut, MarketApiCloseMarketData, MarketApiCloseMarketResponses, MarketApiCreateBetData, MarketApiCreateBetResponse, MarketApiCreateBetResponses, MarketApiListMarketsData, MarketApiListMarketsResponse, MarketApiListMarketsResponses, MarketApiListUserBetsData, MarketApiListUserBetsResponse, MarketApiListUserBetsResponses, MarketApiResolveMarketData, MarketApiResolveMarketResponse, MarketApiResolveMarketResponses, MarketListSchema, MarketOptionSchema, NoitaApiGetLeaderboardData, NoitaApiGetLeaderboardResponse, NoitaApiGetLeaderboardResponses, NoitaApiGetResultsData, NoitaApiGetResultsResponse, NoitaApiGetResultsResponses, NoitaApiSubmitLogFileData, NoitaApiSubmitLogFileError, NoitaApiSubmitLogFileErrors, NoitaApiSubmitLogFileResponse, NoitaApiSubmitLogFileResponses, NoitaSubmissionOut, ObjectivResultOut, PagedSubmissionOut, PolylanSubmitterApiClearCacheData, PolylanSubmitterApiClearCacheResponses, PolylanSubmitterApiGetUserInfoData, PolylanSubmitterApiGetUserInfoResponse, PolylanSubmitterApiGetUserInfoResponses, PolylanSubmitterApiHealthCheckData, PolylanSubmitterApiHealthCheckResponses, PuzzlePointsFactorOut, PuzzleResponseIn, PuzzleResponseOut, PuzzleResponseRankingOut, PuzzleResultsOut, PuzzleSubmissionsOut, PuzzleSubmissionWithRankOut, RankingSchema, ResolveMarketSchema, ResultsOut, SteamCollectionItemOut, SteamCollectionOut, SubmissionFileOut, SubmissionIn, SubmissionOut, SubmissionsApiCreateSubmissionData, SubmissionsApiCreateSubmissionResponse, SubmissionsApiCreateSubmissionResponses, SubmissionsApiDeleteSubmissionData, SubmissionsApiDeleteSubmissionResponses, SubmissionsApiGetCollectionData, SubmissionsApiGetCollectionResponse, SubmissionsApiGetCollectionResponses, SubmissionsApiGetStatsData, SubmissionsApiGetStatsResponses, SubmissionsApiGetSubmissionData, SubmissionsApiGetSubmissionResponse, SubmissionsApiGetSubmissionResponses, SubmissionsApiListPuzzlesData, SubmissionsApiListPuzzlesResponse, SubmissionsApiListPuzzlesResponses, SubmissionsApiListResponsesNeedingValidationData, SubmissionsApiListResponsesNeedingValidationResponse, SubmissionsApiListResponsesNeedingValidationResponses, SubmissionsApiListSubmissionsData, SubmissionsApiListSubmissionsResponse, SubmissionsApiListSubmissionsResponses, SubmissionsApiValidateAutoData, SubmissionsApiValidateAutoResponse, SubmissionsApiValidateAutoResponses, SubmissionsApiValidateResponseData, SubmissionsApiValidateResponseResponse, SubmissionsApiValidateResponseResponses, SubmissionsApiValidateSubmissionData, SubmissionsApiValidateSubmissionResponse, SubmissionsApiValidateSubmissionResponses, TournamentPuzzleResultsOut, TournamentSubmissionsOut, UserBetCreateSchema, UserBetSchema, UserDisplayOut, UserInfoOut, ValidationIn, WinnerFileOut, WinnerResponseOut } from './types.gen'; export type { AnimationsApiPuzzleResultsData, AnimationsApiPuzzleResultsResponse, AnimationsApiPuzzleResultsResponses, AnimationsApiResultsData, AnimationsApiResultsResponse, AnimationsApiResultsResponses, AnimationsApiTopSubmissionsData, AnimationsApiTopSubmissionsResponse, AnimationsApiTopSubmissionsResponses, ClientOptions, GameOut, GamesApiListGamesData, GamesApiListGamesResponse, GamesApiListGamesResponses, Input, LeaderboardEntryOut, LeaderboardOut, MarketApiCloseMarketData, MarketApiCloseMarketResponses, MarketApiCreateBetData, MarketApiCreateBetResponse, MarketApiCreateBetResponses, MarketApiListMarketsData, MarketApiListMarketsResponse, MarketApiListMarketsResponses, MarketApiListUserBetsData, MarketApiListUserBetsResponse, MarketApiListUserBetsResponses, MarketApiResolveMarketData, MarketApiResolveMarketResponse, MarketApiResolveMarketResponses, MarketListSchema, MarketOptionSchema, NoitaApiGetLeaderboardData, NoitaApiGetLeaderboardResponse, NoitaApiGetLeaderboardResponses, NoitaApiGetResultsData, NoitaApiGetResultsResponse, NoitaApiGetResultsResponses, NoitaApiSubmitLogFileData, NoitaApiSubmitLogFileError, NoitaApiSubmitLogFileErrors, NoitaApiSubmitLogFileResponse, NoitaApiSubmitLogFileResponses, NoitaSubmissionOut, ObjectivResultOut, OpusMagnumApiCreateSubmissionData, OpusMagnumApiCreateSubmissionResponse, OpusMagnumApiCreateSubmissionResponses, OpusMagnumApiDeleteSubmissionData, OpusMagnumApiDeleteSubmissionResponses, OpusMagnumApiGetCollectionData, OpusMagnumApiGetCollectionResponse, OpusMagnumApiGetCollectionResponses, OpusMagnumApiGetStatsData, OpusMagnumApiGetStatsResponses, OpusMagnumApiGetSubmissionData, OpusMagnumApiGetSubmissionResponse, OpusMagnumApiGetSubmissionResponses, OpusMagnumApiListPuzzlesData, OpusMagnumApiListPuzzlesResponse, OpusMagnumApiListPuzzlesResponses, OpusMagnumApiListResponsesNeedingValidationData, OpusMagnumApiListResponsesNeedingValidationResponse, OpusMagnumApiListResponsesNeedingValidationResponses, OpusMagnumApiListSubmissionsData, OpusMagnumApiListSubmissionsResponse, OpusMagnumApiListSubmissionsResponses, OpusMagnumApiValidateAutoData, OpusMagnumApiValidateAutoResponse, OpusMagnumApiValidateAutoResponses, OpusMagnumApiValidateResponseData, OpusMagnumApiValidateResponseResponse, OpusMagnumApiValidateResponseResponses, OpusMagnumApiValidateSubmissionData, OpusMagnumApiValidateSubmissionResponse, OpusMagnumApiValidateSubmissionResponses, PagedSubmissionOut, PolylanSubmitterApiClearCacheData, PolylanSubmitterApiClearCacheResponses, PolylanSubmitterApiGetUserInfoData, PolylanSubmitterApiGetUserInfoResponse, PolylanSubmitterApiGetUserInfoResponses, PolylanSubmitterApiHealthCheckData, PolylanSubmitterApiHealthCheckResponses, PuzzlePointsFactorOut, PuzzleResponseIn, PuzzleResponseOut, PuzzleResponseRankingOut, PuzzleResultsOut, PuzzleSubmissionsOut, PuzzleSubmissionWithRankOut, RankingSchema, ResolveMarketSchema, ResultsOut, SteamCollectionItemOut, SteamCollectionOut, SubmissionFileOut, SubmissionIn, SubmissionOut, TournamentPuzzleResultsOut, TournamentSubmissionsOut, UserBetCreateSchema, UserBetSchema, UserDisplayOut, UserInfoOut, ValidationIn, WinnerFileOut, WinnerResponseOut } from './types.gen';

View File

@ -2,7 +2,7 @@
import { type Client, formDataBodySerializer, type Options as Options2, type TDataShape } from './client'; import { type Client, formDataBodySerializer, type Options as Options2, type TDataShape } from './client';
import { client } from './client.gen'; import { client } from './client.gen';
import type { AnimationsApiPuzzleResultsData, AnimationsApiPuzzleResultsResponses, AnimationsApiResultsData, AnimationsApiResultsResponses, AnimationsApiTopSubmissionsData, AnimationsApiTopSubmissionsResponses, GamesApiListGamesData, GamesApiListGamesResponses, MarketApiCloseMarketData, MarketApiCloseMarketResponses, MarketApiCreateBetData, MarketApiCreateBetResponses, MarketApiListMarketsData, MarketApiListMarketsResponses, MarketApiListUserBetsData, MarketApiListUserBetsResponses, MarketApiResolveMarketData, MarketApiResolveMarketResponses, NoitaApiGetLeaderboardData, NoitaApiGetLeaderboardResponses, NoitaApiGetResultsData, NoitaApiGetResultsResponses, NoitaApiSubmitLogFileData, NoitaApiSubmitLogFileErrors, NoitaApiSubmitLogFileResponses, PolylanSubmitterApiClearCacheData, PolylanSubmitterApiClearCacheResponses, PolylanSubmitterApiGetUserInfoData, PolylanSubmitterApiGetUserInfoResponses, PolylanSubmitterApiHealthCheckData, PolylanSubmitterApiHealthCheckResponses, SubmissionsApiCreateSubmissionData, SubmissionsApiCreateSubmissionResponses, SubmissionsApiDeleteSubmissionData, SubmissionsApiDeleteSubmissionResponses, SubmissionsApiGetCollectionData, SubmissionsApiGetCollectionResponses, SubmissionsApiGetStatsData, SubmissionsApiGetStatsResponses, SubmissionsApiGetSubmissionData, SubmissionsApiGetSubmissionResponses, SubmissionsApiListPuzzlesData, SubmissionsApiListPuzzlesResponses, SubmissionsApiListResponsesNeedingValidationData, SubmissionsApiListResponsesNeedingValidationResponses, SubmissionsApiListSubmissionsData, SubmissionsApiListSubmissionsResponses, SubmissionsApiValidateAutoData, SubmissionsApiValidateAutoResponses, SubmissionsApiValidateResponseData, SubmissionsApiValidateResponseResponses, SubmissionsApiValidateSubmissionData, SubmissionsApiValidateSubmissionResponses } from './types.gen'; import type { AnimationsApiPuzzleResultsData, AnimationsApiPuzzleResultsResponses, AnimationsApiResultsData, AnimationsApiResultsResponses, AnimationsApiTopSubmissionsData, AnimationsApiTopSubmissionsResponses, GamesApiListGamesData, GamesApiListGamesResponses, MarketApiCloseMarketData, MarketApiCloseMarketResponses, MarketApiCreateBetData, MarketApiCreateBetResponses, MarketApiListMarketsData, MarketApiListMarketsResponses, MarketApiListUserBetsData, MarketApiListUserBetsResponses, MarketApiResolveMarketData, MarketApiResolveMarketResponses, NoitaApiGetLeaderboardData, NoitaApiGetLeaderboardResponses, NoitaApiGetResultsData, NoitaApiGetResultsResponses, NoitaApiSubmitLogFileData, NoitaApiSubmitLogFileErrors, NoitaApiSubmitLogFileResponses, OpusMagnumApiCreateSubmissionData, OpusMagnumApiCreateSubmissionResponses, OpusMagnumApiDeleteSubmissionData, OpusMagnumApiDeleteSubmissionResponses, OpusMagnumApiGetCollectionData, OpusMagnumApiGetCollectionResponses, OpusMagnumApiGetStatsData, OpusMagnumApiGetStatsResponses, OpusMagnumApiGetSubmissionData, OpusMagnumApiGetSubmissionResponses, OpusMagnumApiListPuzzlesData, OpusMagnumApiListPuzzlesResponses, OpusMagnumApiListResponsesNeedingValidationData, OpusMagnumApiListResponsesNeedingValidationResponses, OpusMagnumApiListSubmissionsData, OpusMagnumApiListSubmissionsResponses, OpusMagnumApiValidateAutoData, OpusMagnumApiValidateAutoResponses, OpusMagnumApiValidateResponseData, OpusMagnumApiValidateResponseResponses, OpusMagnumApiValidateSubmissionData, OpusMagnumApiValidateSubmissionResponses, PolylanSubmitterApiClearCacheData, PolylanSubmitterApiClearCacheResponses, PolylanSubmitterApiGetUserInfoData, PolylanSubmitterApiGetUserInfoResponses, PolylanSubmitterApiHealthCheckData, PolylanSubmitterApiHealthCheckResponses } from './types.gen';
export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options2<TData, ThrowOnError, TResponse> & { export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options2<TData, ThrowOnError, TResponse> & {
/** /**
@ -44,30 +44,30 @@ export const polylanSubmitterApiGetUserInfo = <ThrowOnError extends boolean = fa
* *
* Get list of available puzzles * Get list of available puzzles
*/ */
export const submissionsApiListPuzzles = <ThrowOnError extends boolean = false>(options?: Options<SubmissionsApiListPuzzlesData, ThrowOnError>) => (options?.client ?? client).get<SubmissionsApiListPuzzlesResponses, unknown, ThrowOnError>({ url: '/api/submissions/puzzles', ...options }); export const opusMagnumApiListPuzzles = <ThrowOnError extends boolean = false>(options?: Options<OpusMagnumApiListPuzzlesData, ThrowOnError>) => (options?.client ?? client).get<OpusMagnumApiListPuzzlesResponses, unknown, ThrowOnError>({ url: '/api/opus-magnum/puzzles', ...options });
/** /**
* Get Collection * Get Collection
* *
* Get the active collection details * Get the active collection details
*/ */
export const submissionsApiGetCollection = <ThrowOnError extends boolean = false>(options?: Options<SubmissionsApiGetCollectionData, ThrowOnError>) => (options?.client ?? client).get<SubmissionsApiGetCollectionResponses, unknown, ThrowOnError>({ url: '/api/submissions/collection', ...options }); export const opusMagnumApiGetCollection = <ThrowOnError extends boolean = false>(options?: Options<OpusMagnumApiGetCollectionData, ThrowOnError>) => (options?.client ?? client).get<OpusMagnumApiGetCollectionResponses, unknown, ThrowOnError>({ url: '/api/opus-magnum/collection', ...options });
/** /**
* List Submissions * List Submissions
* *
* Get paginated list of submissions * Get paginated list of submissions
*/ */
export const submissionsApiListSubmissions = <ThrowOnError extends boolean = false>(options?: Options<SubmissionsApiListSubmissionsData, ThrowOnError>) => (options?.client ?? client).get<SubmissionsApiListSubmissionsResponses, unknown, ThrowOnError>({ url: '/api/submissions/submissions', ...options }); export const opusMagnumApiListSubmissions = <ThrowOnError extends boolean = false>(options?: Options<OpusMagnumApiListSubmissionsData, ThrowOnError>) => (options?.client ?? client).get<OpusMagnumApiListSubmissionsResponses, unknown, ThrowOnError>({ url: '/api/opus-magnum/submissions', ...options });
/** /**
* Create Submission * Create Submission
* *
* Create a new submission with multiple puzzle responses * Create a new submission with multiple puzzle responses
*/ */
export const submissionsApiCreateSubmission = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiCreateSubmissionData, ThrowOnError>) => (options.client ?? client).post<SubmissionsApiCreateSubmissionResponses, unknown, ThrowOnError>({ export const opusMagnumApiCreateSubmission = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiCreateSubmissionData, ThrowOnError>) => (options.client ?? client).post<OpusMagnumApiCreateSubmissionResponses, unknown, ThrowOnError>({
...formDataBodySerializer, ...formDataBodySerializer,
url: '/api/submissions/submissions', url: '/api/opus-magnum/submissions',
...options, ...options,
headers: { headers: {
'Content-Type': null, 'Content-Type': null,
@ -80,22 +80,22 @@ export const submissionsApiCreateSubmission = <ThrowOnError extends boolean = fa
* *
* Delete a submission (admin only) * Delete a submission (admin only)
*/ */
export const submissionsApiDeleteSubmission = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiDeleteSubmissionData, ThrowOnError>) => (options.client ?? client).delete<SubmissionsApiDeleteSubmissionResponses, unknown, ThrowOnError>({ url: '/api/submissions/submissions/{submission_id}', ...options }); export const opusMagnumApiDeleteSubmission = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiDeleteSubmissionData, ThrowOnError>) => (options.client ?? client).delete<OpusMagnumApiDeleteSubmissionResponses, unknown, ThrowOnError>({ url: '/api/opus-magnum/submissions/{submission_id}', ...options });
/** /**
* Get Submission * Get Submission
* *
* Get detailed submission by ID * Get detailed submission by ID
*/ */
export const submissionsApiGetSubmission = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiGetSubmissionData, ThrowOnError>) => (options.client ?? client).get<SubmissionsApiGetSubmissionResponses, unknown, ThrowOnError>({ url: '/api/submissions/submissions/{submission_id}', ...options }); export const opusMagnumApiGetSubmission = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiGetSubmissionData, ThrowOnError>) => (options.client ?? client).get<OpusMagnumApiGetSubmissionResponses, unknown, ThrowOnError>({ url: '/api/opus-magnum/submissions/{submission_id}', ...options });
/** /**
* Validate Response * Validate Response
* *
* Manually validate a puzzle response * Manually validate a puzzle response
*/ */
export const submissionsApiValidateResponse = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiValidateResponseData, ThrowOnError>) => (options.client ?? client).put<SubmissionsApiValidateResponseResponses, unknown, ThrowOnError>({ export const opusMagnumApiValidateResponse = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiValidateResponseData, ThrowOnError>) => (options.client ?? client).put<OpusMagnumApiValidateResponseResponses, unknown, ThrowOnError>({
url: '/api/submissions/responses/{response_id}/validate', url: '/api/opus-magnum/responses/{response_id}/validate',
...options, ...options,
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -108,28 +108,28 @@ export const submissionsApiValidateResponse = <ThrowOnError extends boolean = fa
* *
* Try to auto validate a puzzle response * Try to auto validate a puzzle response
*/ */
export const submissionsApiValidateAuto = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiValidateAutoData, ThrowOnError>) => (options.client ?? client).put<SubmissionsApiValidateAutoResponses, unknown, ThrowOnError>({ url: '/api/submissions/responses/{response_id}/validate/auto', ...options }); export const opusMagnumApiValidateAuto = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiValidateAutoData, ThrowOnError>) => (options.client ?? client).put<OpusMagnumApiValidateAutoResponses, unknown, ThrowOnError>({ url: '/api/opus-magnum/responses/{response_id}/validate/auto', ...options });
/** /**
* List Responses Needing Validation * List Responses Needing Validation
* *
* Get all responses that need manual validation * Get all responses that need manual validation
*/ */
export const submissionsApiListResponsesNeedingValidation = <ThrowOnError extends boolean = false>(options?: Options<SubmissionsApiListResponsesNeedingValidationData, ThrowOnError>) => (options?.client ?? client).get<SubmissionsApiListResponsesNeedingValidationResponses, unknown, ThrowOnError>({ url: '/api/submissions/responses/needs-validation', ...options }); export const opusMagnumApiListResponsesNeedingValidation = <ThrowOnError extends boolean = false>(options?: Options<OpusMagnumApiListResponsesNeedingValidationData, ThrowOnError>) => (options?.client ?? client).get<OpusMagnumApiListResponsesNeedingValidationResponses, unknown, ThrowOnError>({ url: '/api/opus-magnum/responses/needs-validation', ...options });
/** /**
* Validate Submission * Validate Submission
* *
* Mark entire submission as validated * Mark entire submission as validated
*/ */
export const submissionsApiValidateSubmission = <ThrowOnError extends boolean = false>(options: Options<SubmissionsApiValidateSubmissionData, ThrowOnError>) => (options.client ?? client).post<SubmissionsApiValidateSubmissionResponses, unknown, ThrowOnError>({ url: '/api/submissions/submissions/{submission_id}/validate', ...options }); export const opusMagnumApiValidateSubmission = <ThrowOnError extends boolean = false>(options: Options<OpusMagnumApiValidateSubmissionData, ThrowOnError>) => (options.client ?? client).post<OpusMagnumApiValidateSubmissionResponses, unknown, ThrowOnError>({ url: '/api/opus-magnum/submissions/{submission_id}/validate', ...options });
/** /**
* Get Stats * Get Stats
* *
* Get submission statistics * Get submission statistics
*/ */
export const submissionsApiGetStats = <ThrowOnError extends boolean = false>(options?: Options<SubmissionsApiGetStatsData, ThrowOnError>) => (options?.client ?? client).get<SubmissionsApiGetStatsResponses, unknown, ThrowOnError>({ url: '/api/submissions/stats', ...options }); export const opusMagnumApiGetStats = <ThrowOnError extends boolean = false>(options?: Options<OpusMagnumApiGetStatsData, ThrowOnError>) => (options?.client ?? client).get<OpusMagnumApiGetStatsResponses, unknown, ThrowOnError>({ url: '/api/opus-magnum/stats', ...options });
/** /**
* Results * Results

View File

@ -1111,14 +1111,14 @@ export type PolylanSubmitterApiGetUserInfoResponses = {
export type PolylanSubmitterApiGetUserInfoResponse = PolylanSubmitterApiGetUserInfoResponses[keyof PolylanSubmitterApiGetUserInfoResponses]; export type PolylanSubmitterApiGetUserInfoResponse = PolylanSubmitterApiGetUserInfoResponses[keyof PolylanSubmitterApiGetUserInfoResponses];
export type SubmissionsApiListPuzzlesData = { export type OpusMagnumApiListPuzzlesData = {
body?: never; body?: never;
path?: never; path?: never;
query?: never; query?: never;
url: '/api/submissions/puzzles'; url: '/api/opus-magnum/puzzles';
}; };
export type SubmissionsApiListPuzzlesResponses = { export type OpusMagnumApiListPuzzlesResponses = {
/** /**
* Response * Response
* *
@ -1127,25 +1127,25 @@ export type SubmissionsApiListPuzzlesResponses = {
200: Array<SteamCollectionItemOut>; 200: Array<SteamCollectionItemOut>;
}; };
export type SubmissionsApiListPuzzlesResponse = SubmissionsApiListPuzzlesResponses[keyof SubmissionsApiListPuzzlesResponses]; export type OpusMagnumApiListPuzzlesResponse = OpusMagnumApiListPuzzlesResponses[keyof OpusMagnumApiListPuzzlesResponses];
export type SubmissionsApiGetCollectionData = { export type OpusMagnumApiGetCollectionData = {
body?: never; body?: never;
path?: never; path?: never;
query?: never; query?: never;
url: '/api/submissions/collection'; url: '/api/opus-magnum/collection';
}; };
export type SubmissionsApiGetCollectionResponses = { export type OpusMagnumApiGetCollectionResponses = {
/** /**
* OK * OK
*/ */
200: SteamCollectionOut; 200: SteamCollectionOut;
}; };
export type SubmissionsApiGetCollectionResponse = SubmissionsApiGetCollectionResponses[keyof SubmissionsApiGetCollectionResponses]; export type OpusMagnumApiGetCollectionResponse = OpusMagnumApiGetCollectionResponses[keyof OpusMagnumApiGetCollectionResponses];
export type SubmissionsApiListSubmissionsData = { export type OpusMagnumApiListSubmissionsData = {
body?: never; body?: never;
path?: never; path?: never;
query?: { query?: {
@ -1158,19 +1158,19 @@ export type SubmissionsApiListSubmissionsData = {
*/ */
offset?: number; offset?: number;
}; };
url: '/api/submissions/submissions'; url: '/api/opus-magnum/submissions';
}; };
export type SubmissionsApiListSubmissionsResponses = { export type OpusMagnumApiListSubmissionsResponses = {
/** /**
* OK * OK
*/ */
200: PagedSubmissionOut; 200: PagedSubmissionOut;
}; };
export type SubmissionsApiListSubmissionsResponse = SubmissionsApiListSubmissionsResponses[keyof SubmissionsApiListSubmissionsResponses]; export type OpusMagnumApiListSubmissionsResponse = OpusMagnumApiListSubmissionsResponses[keyof OpusMagnumApiListSubmissionsResponses];
export type SubmissionsApiCreateSubmissionData = { export type OpusMagnumApiCreateSubmissionData = {
/** /**
* MultiPartBodyParams * MultiPartBodyParams
*/ */
@ -1183,19 +1183,19 @@ export type SubmissionsApiCreateSubmissionData = {
}; };
path?: never; path?: never;
query?: never; query?: never;
url: '/api/submissions/submissions'; url: '/api/opus-magnum/submissions';
}; };
export type SubmissionsApiCreateSubmissionResponses = { export type OpusMagnumApiCreateSubmissionResponses = {
/** /**
* OK * OK
*/ */
200: SubmissionOut; 200: SubmissionOut;
}; };
export type SubmissionsApiCreateSubmissionResponse = SubmissionsApiCreateSubmissionResponses[keyof SubmissionsApiCreateSubmissionResponses]; export type OpusMagnumApiCreateSubmissionResponse = OpusMagnumApiCreateSubmissionResponses[keyof OpusMagnumApiCreateSubmissionResponses];
export type SubmissionsApiDeleteSubmissionData = { export type OpusMagnumApiDeleteSubmissionData = {
body?: never; body?: never;
path: { path: {
/** /**
@ -1204,17 +1204,17 @@ export type SubmissionsApiDeleteSubmissionData = {
submission_id: string; submission_id: string;
}; };
query?: never; query?: never;
url: '/api/submissions/submissions/{submission_id}'; url: '/api/opus-magnum/submissions/{submission_id}';
}; };
export type SubmissionsApiDeleteSubmissionResponses = { export type OpusMagnumApiDeleteSubmissionResponses = {
/** /**
* OK * OK
*/ */
200: unknown; 200: unknown;
}; };
export type SubmissionsApiGetSubmissionData = { export type OpusMagnumApiGetSubmissionData = {
body?: never; body?: never;
path: { path: {
/** /**
@ -1223,19 +1223,19 @@ export type SubmissionsApiGetSubmissionData = {
submission_id: string; submission_id: string;
}; };
query?: never; query?: never;
url: '/api/submissions/submissions/{submission_id}'; url: '/api/opus-magnum/submissions/{submission_id}';
}; };
export type SubmissionsApiGetSubmissionResponses = { export type OpusMagnumApiGetSubmissionResponses = {
/** /**
* OK * OK
*/ */
200: SubmissionOut; 200: SubmissionOut;
}; };
export type SubmissionsApiGetSubmissionResponse = SubmissionsApiGetSubmissionResponses[keyof SubmissionsApiGetSubmissionResponses]; export type OpusMagnumApiGetSubmissionResponse = OpusMagnumApiGetSubmissionResponses[keyof OpusMagnumApiGetSubmissionResponses];
export type SubmissionsApiValidateResponseData = { export type OpusMagnumApiValidateResponseData = {
body: ValidationIn; body: ValidationIn;
path: { path: {
/** /**
@ -1244,19 +1244,19 @@ export type SubmissionsApiValidateResponseData = {
response_id: number; response_id: number;
}; };
query?: never; query?: never;
url: '/api/submissions/responses/{response_id}/validate'; url: '/api/opus-magnum/responses/{response_id}/validate';
}; };
export type SubmissionsApiValidateResponseResponses = { export type OpusMagnumApiValidateResponseResponses = {
/** /**
* OK * OK
*/ */
200: PuzzleResponseOut; 200: PuzzleResponseOut;
}; };
export type SubmissionsApiValidateResponseResponse = SubmissionsApiValidateResponseResponses[keyof SubmissionsApiValidateResponseResponses]; export type OpusMagnumApiValidateResponseResponse = OpusMagnumApiValidateResponseResponses[keyof OpusMagnumApiValidateResponseResponses];
export type SubmissionsApiValidateAutoData = { export type OpusMagnumApiValidateAutoData = {
body?: never; body?: never;
path: { path: {
/** /**
@ -1265,26 +1265,26 @@ export type SubmissionsApiValidateAutoData = {
response_id: number; response_id: number;
}; };
query?: never; query?: never;
url: '/api/submissions/responses/{response_id}/validate/auto'; url: '/api/opus-magnum/responses/{response_id}/validate/auto';
}; };
export type SubmissionsApiValidateAutoResponses = { export type OpusMagnumApiValidateAutoResponses = {
/** /**
* OK * OK
*/ */
200: PuzzleResponseOut; 200: PuzzleResponseOut;
}; };
export type SubmissionsApiValidateAutoResponse = SubmissionsApiValidateAutoResponses[keyof SubmissionsApiValidateAutoResponses]; export type OpusMagnumApiValidateAutoResponse = OpusMagnumApiValidateAutoResponses[keyof OpusMagnumApiValidateAutoResponses];
export type SubmissionsApiListResponsesNeedingValidationData = { export type OpusMagnumApiListResponsesNeedingValidationData = {
body?: never; body?: never;
path?: never; path?: never;
query?: never; query?: never;
url: '/api/submissions/responses/needs-validation'; url: '/api/opus-magnum/responses/needs-validation';
}; };
export type SubmissionsApiListResponsesNeedingValidationResponses = { export type OpusMagnumApiListResponsesNeedingValidationResponses = {
/** /**
* Response * Response
* *
@ -1293,9 +1293,9 @@ export type SubmissionsApiListResponsesNeedingValidationResponses = {
200: Array<PuzzleResponseOut>; 200: Array<PuzzleResponseOut>;
}; };
export type SubmissionsApiListResponsesNeedingValidationResponse = SubmissionsApiListResponsesNeedingValidationResponses[keyof SubmissionsApiListResponsesNeedingValidationResponses]; export type OpusMagnumApiListResponsesNeedingValidationResponse = OpusMagnumApiListResponsesNeedingValidationResponses[keyof OpusMagnumApiListResponsesNeedingValidationResponses];
export type SubmissionsApiValidateSubmissionData = { export type OpusMagnumApiValidateSubmissionData = {
body?: never; body?: never;
path: { path: {
/** /**
@ -1304,26 +1304,26 @@ export type SubmissionsApiValidateSubmissionData = {
submission_id: string; submission_id: string;
}; };
query?: never; query?: never;
url: '/api/submissions/submissions/{submission_id}/validate'; url: '/api/opus-magnum/submissions/{submission_id}/validate';
}; };
export type SubmissionsApiValidateSubmissionResponses = { export type OpusMagnumApiValidateSubmissionResponses = {
/** /**
* OK * OK
*/ */
200: SubmissionOut; 200: SubmissionOut;
}; };
export type SubmissionsApiValidateSubmissionResponse = SubmissionsApiValidateSubmissionResponses[keyof SubmissionsApiValidateSubmissionResponses]; export type OpusMagnumApiValidateSubmissionResponse = OpusMagnumApiValidateSubmissionResponses[keyof OpusMagnumApiValidateSubmissionResponses];
export type SubmissionsApiGetStatsData = { export type OpusMagnumApiGetStatsData = {
body?: never; body?: never;
path?: never; path?: never;
query?: never; query?: never;
url: '/api/submissions/stats'; url: '/api/opus-magnum/stats';
}; };
export type SubmissionsApiGetStatsResponses = { export type OpusMagnumApiGetStatsResponses = {
/** /**
* OK * OK
*/ */

View File

@ -109,11 +109,11 @@ export class ApiService {
// Puzzle endpoints // Puzzle endpoints
async getPuzzles(): Promise<ApiResponse<SteamCollectionItem[]>> { async getPuzzles(): Promise<ApiResponse<SteamCollectionItem[]>> {
return this.request<SteamCollectionItem[]>('/submissions/puzzles') return this.request<SteamCollectionItem[]>('/opus-magnum/puzzles')
} }
async getCollection(): Promise<ApiResponse<SteamCollection>> { async getCollection(): Promise<ApiResponse<SteamCollection>> {
return this.request<SteamCollection>('/submissions/collection') return this.request<SteamCollection>('/opus-magnum/collection')
} }
async getTopSubmissions(limit = 5): Promise<ApiResponse<TournamentSubmissions>> { async getTopSubmissions(limit = 5): Promise<ApiResponse<TournamentSubmissions>> {
@ -127,12 +127,12 @@ export class ApiService {
// Submission endpoints // Submission endpoints
async getSubmissions(limit = 20, offset = 0): Promise<ApiResponse<PaginatedResponse<Submission>>> { async getSubmissions(limit = 20, offset = 0): Promise<ApiResponse<PaginatedResponse<Submission>>> {
return this.request<PaginatedResponse<Submission>>( return this.request<PaginatedResponse<Submission>>(
`/submissions/submissions?limit=${limit}&offset=${offset}` `/opus-magnum/submissions?limit=${limit}&offset=${offset}`
) )
} }
async getSubmission(id: string): Promise<ApiResponse<Submission>> { async getSubmission(id: string): Promise<ApiResponse<Submission>> {
return this.request<Submission>(`/submissions/submissions/${id}`) return this.request<Submission>(`/opus-magnum/submissions/${id}`)
} }
async createSubmission( async createSubmission(
@ -163,7 +163,7 @@ export class ApiService {
formData.append('files', file) formData.append('files', file)
}) })
return this.uploadRequest<Submission>('/submissions/submissions', formData) return this.uploadRequest<Submission>('/opus-magnum/submissions', formData)
} }
// Admin endpoints (require staff permissions) // Admin endpoints (require staff permissions)
@ -175,37 +175,37 @@ export class ApiService {
validated_area?: number validated_area?: number
} }
): Promise<ApiResponse<PuzzleResponse>> { ): Promise<ApiResponse<PuzzleResponse>> {
return this.request<PuzzleResponse>(`/submissions/responses/${responseId}/validate`, { return this.request<PuzzleResponse>(`/opus-magnum/responses/${responseId}/validate`, {
method: 'PUT', method: 'PUT',
body: JSON.stringify(validationData), body: JSON.stringify(validationData),
}) })
} }
async autoValidateResponses(responseId: number): Promise<ApiResponse<PuzzleResponse>> { async autoValidateResponses(responseId: number): Promise<ApiResponse<PuzzleResponse>> {
return this.request<PuzzleResponse>(`/submissions/responses/${responseId}/validate/auto`, { return this.request<PuzzleResponse>(`/opus-magnum/responses/${responseId}/validate/auto`, {
method: 'PUT', method: 'PUT',
}) })
} }
async getResponsesNeedingValidation(): Promise<ApiResponse<PuzzleResponse[]>> { async getResponsesNeedingValidation(): Promise<ApiResponse<PuzzleResponse[]>> {
return this.request<PuzzleResponse[]>('/submissions/responses/needs-validation') return this.request<PuzzleResponse[]>('/opus-magnum/responses/needs-validation')
} }
async validateSubmission(submissionId: string): Promise<ApiResponse<Submission>> { async validateSubmission(submissionId: string): Promise<ApiResponse<Submission>> {
return this.request<Submission>(`/submissions/submissions/${submissionId}/validate`, { return this.request<Submission>(`/opus-magnum/submissions/${submissionId}/validate`, {
method: 'POST', method: 'POST',
}) })
} }
async deleteSubmission(submissionId: string): Promise<ApiResponse<{ detail: string }>> { async deleteSubmission(submissionId: string): Promise<ApiResponse<{ detail: string }>> {
return this.request<{ detail: string }>(`/submissions/submissions/${submissionId}`, { return this.request<{ detail: string }>(`/opus-magnum/submissions/${submissionId}`, {
method: 'DELETE', method: 'DELETE',
}) })
} }
// Statistics endpoint // Statistics endpoint
async getStats(): Promise<ApiResponse<SubmissionStats>> { async getStats(): Promise<ApiResponse<SubmissionStats>> {
return this.request<SubmissionStats>('/submissions/stats') return this.request<SubmissionStats>('/opus-magnum/stats')
} }
// Health check // Health check

View File

@ -1,6 +1,6 @@
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
import { ref, computed } from 'vue' import { ref, computed } from 'vue'
import { submissionsApiListPuzzles } from '@/api' import { opusMagnumApiListPuzzles } from '@/api'
import type { SteamCollectionItem } from '@/types' import type { SteamCollectionItem } from '@/types'
export const usePuzzlesStore = defineStore('puzzles', () => { export const usePuzzlesStore = defineStore('puzzles', () => {
@ -38,7 +38,7 @@ export const usePuzzlesStore = defineStore('puzzles', () => {
isLoading.value = true isLoading.value = true
error.value = '' error.value = ''
const response = await submissionsApiListPuzzles() const response = await opusMagnumApiListPuzzles()
if (response.error) { if (response.error) {
error.value = String(response.error) error.value = String(response.error)
console.error('Failed to load puzzles:', response.error) console.error('Failed to load puzzles:', response.error)

View File

@ -1 +1 @@
import{d as v,r as l,q as g,a as o,o as r,b as e,j as f,F as x,g as h,t as y,f as _,E as w}from"./style-BkYIZIDm.js";import{g as k}from"./sdk.gen-CMTwTM_A.js";const j={class:"min-h-screen bg-base-300 flex items-center justify-center px-4"},S={class:"w-full max-w-6xl"},E={key:0,class:"flex justify-center py-20"},C={key:1,class:"grid grid-cols-1 md:grid-cols-2 gap-8"},N=["onClick"],$={class:"relative h-60 bg-base-300 overflow-hidden"},A=["src","alt","onError"],B={key:1,class:"w-full h-full bg-gradient-to-br from-blue-600 to-blue-400 flex items-center justify-center text-white"},L={class:"card-body"},P={class:"card-title text-2xl"},V=v({__name:"Home",setup(F){const i=l(),n=l(!0),d=l(new Set),u=s=>`https://cdn.akamai.steamstatic.com/steam/apps/${s}/header.jpg`,b=s=>{d.value.add(s)},c=s=>{window.location.href=s};return g(async()=>{const s=await k();s.data&&(i.value=s.data),n.value=!1}),(s,t)=>(r(),o("div",j,[e("div",S,[t[6]||(t[6]=e("div",{class:"text-center mb-12"},[e("h1",{class:"text-5xl font-bold mb-4"},"PolyLAN Submitter"),e("p",{class:"text-xl text-base-content/70"}," Choose a game and submit your best solutions ")],-1)),n.value?(r(),o("div",E,[...t[1]||(t[1]=[e("span",{class:"loading loading-spinner loading-lg"},null,-1)])])):(r(),o("div",C,[e("div",{onClick:t[0]||(t[0]=a=>c("/market")),class:"card card-xl bg-base-200 shadow-xl hover:shadow-2xl transition-all cursor-pointer transform hover:-translate-y-2 hover:scale-[1.05] hover:bg-base-100 overflow-hidden"},[...t[2]||(t[2]=[f('<figure class="relative h-60 bg-gradient-to-br from-purple-600 to-blue-600 flex items-center justify-center"><i class="mdi mdi-chart-box text-6xl text-white opacity-80"></i><div class="absolute inset-0 bg-black/30 group-hover:bg-black/20 transition-colors"></div></figure><div class="card-body"><h2 class="card-title text-2xl">Market</h2><p class="text-base-content/70">Place your bets and compete</p><div class="card-actions justify-end mt-4"><button class="btn btn-primary"><i class="mdi mdi-arrow-right mr-2"></i> Place bets </button></div></div>',2)])]),(r(!0),o(x,null,h(i.value,a=>(r(),o("div",{key:a.steam_app_id,onClick:p=>c(a.path),class:"card card-xl bg-base-200 shadow-xl hover:shadow-2xl transition-all cursor-pointer transform hover:-translate-y-2 hover:scale-[1.05] hover:bg-base-100 overflow-hidden"},[e("figure",$,[d.value.has(a.steam_app_id)?(r(),o("div",B,[...t[3]||(t[3]=[e("i",{class:"mdi mdi-gamepad-variant text-5xl"},null,-1)])])):(r(),o("img",{key:0,src:u(a.steam_app_id),alt:a.name,onError:p=>b(a.steam_app_id),class:"w-full h-full object-cover"},null,40,A)),t[4]||(t[4]=e("div",{class:"absolute inset-0 bg-black/30 group-hover:bg-black/20 transition-colors"},null,-1))]),e("div",L,[e("h2",P,y(a.name),1),t[5]||(t[5]=e("div",{class:"card-actions justify-end mt-4"},[e("button",{class:"btn btn-primary"},[e("i",{class:"mdi mdi-arrow-right mr-2"}),_(" Submit results ")])],-1))])],8,N))),128))])),t[7]||(t[7]=e("div",{class:"text-center mt-12 text-base-content/50"},[e("p",null,"Select a game above to begin submitting")],-1))])]))}}),m="#app",q=document.querySelector(m),D=w(V,{...q?.dataset});D.mount(m); import{d as v,r as l,q as g,a as o,o as r,b as e,j as f,F as x,g as h,t as y,f as _,E as w}from"./style-BkYIZIDm.js";import{g as k}from"./sdk.gen-CA3PL0uK.js";const j={class:"min-h-screen bg-base-300 flex items-center justify-center px-4"},S={class:"w-full max-w-6xl"},E={key:0,class:"flex justify-center py-20"},C={key:1,class:"grid grid-cols-1 md:grid-cols-2 gap-8"},N=["onClick"],$={class:"relative h-60 bg-base-300 overflow-hidden"},A=["src","alt","onError"],B={key:1,class:"w-full h-full bg-gradient-to-br from-blue-600 to-blue-400 flex items-center justify-center text-white"},L={class:"card-body"},P={class:"card-title text-2xl"},V=v({__name:"Home",setup(F){const i=l(),n=l(!0),d=l(new Set),u=s=>`https://cdn.akamai.steamstatic.com/steam/apps/${s}/header.jpg`,b=s=>{d.value.add(s)},c=s=>{window.location.href=s};return g(async()=>{const s=await k();s.data&&(i.value=s.data),n.value=!1}),(s,t)=>(r(),o("div",j,[e("div",S,[t[6]||(t[6]=e("div",{class:"text-center mb-12"},[e("h1",{class:"text-5xl font-bold mb-4"},"PolyLAN Submitter"),e("p",{class:"text-xl text-base-content/70"}," Choose a game and submit your best solutions ")],-1)),n.value?(r(),o("div",E,[...t[1]||(t[1]=[e("span",{class:"loading loading-spinner loading-lg"},null,-1)])])):(r(),o("div",C,[e("div",{onClick:t[0]||(t[0]=a=>c("/market")),class:"card card-xl bg-base-200 shadow-xl hover:shadow-2xl transition-all cursor-pointer transform hover:-translate-y-2 hover:scale-[1.05] hover:bg-base-100 overflow-hidden"},[...t[2]||(t[2]=[f('<figure class="relative h-60 bg-gradient-to-br from-purple-600 to-blue-600 flex items-center justify-center"><i class="mdi mdi-chart-box text-6xl text-white opacity-80"></i><div class="absolute inset-0 bg-black/30 group-hover:bg-black/20 transition-colors"></div></figure><div class="card-body"><h2 class="card-title text-2xl">Market</h2><p class="text-base-content/70">Place your bets and compete</p><div class="card-actions justify-end mt-4"><button class="btn btn-primary"><i class="mdi mdi-arrow-right mr-2"></i> Place bets </button></div></div>',2)])]),(r(!0),o(x,null,h(i.value,a=>(r(),o("div",{key:a.steam_app_id,onClick:p=>c(a.path),class:"card card-xl bg-base-200 shadow-xl hover:shadow-2xl transition-all cursor-pointer transform hover:-translate-y-2 hover:scale-[1.05] hover:bg-base-100 overflow-hidden"},[e("figure",$,[d.value.has(a.steam_app_id)?(r(),o("div",B,[...t[3]||(t[3]=[e("i",{class:"mdi mdi-gamepad-variant text-5xl"},null,-1)])])):(r(),o("img",{key:0,src:u(a.steam_app_id),alt:a.name,onError:p=>b(a.steam_app_id),class:"w-full h-full object-cover"},null,40,A)),t[4]||(t[4]=e("div",{class:"absolute inset-0 bg-black/30 group-hover:bg-black/20 transition-colors"},null,-1))]),e("div",L,[e("h2",P,y(a.name),1),t[5]||(t[5]=e("div",{class:"card-actions justify-end mt-4"},[e("button",{class:"btn btn-primary"},[e("i",{class:"mdi mdi-arrow-right mr-2"}),_(" Submit results ")])],-1))])],8,N))),128))])),t[7]||(t[7]=e("div",{class:"text-center mt-12 text-base-content/50"},[e("p",null,"Select a game above to begin submitting")],-1))])]))}}),m="#app",q=document.querySelector(m),D=w(V,{...q?.dataset});D.mount(m);

View File

@ -6,8 +6,8 @@
"_style-BkYIZIDm.js" "_style-BkYIZIDm.js"
] ]
}, },
"_sdk.gen-CMTwTM_A.js": { "_sdk.gen-CA3PL0uK.js": {
"file": "assets/sdk.gen-CMTwTM_A.js", "file": "assets/sdk.gen-CA3PL0uK.js",
"name": "sdk.gen" "name": "sdk.gen"
}, },
"_style-B5FWYd7r.css": { "_style-B5FWYd7r.css": {
@ -44,13 +44,13 @@
"src": "node_modules/.pnpm/@mdi+font@7.4.47/node_modules/@mdi/font/fonts/materialdesignicons-webfont.woff2" "src": "node_modules/.pnpm/@mdi+font@7.4.47/node_modules/@mdi/font/fonts/materialdesignicons-webfont.woff2"
}, },
"src/home.ts": { "src/home.ts": {
"file": "assets/home-CYjKnyvD.js", "file": "assets/home-Bd8zSeuF.js",
"name": "home", "name": "home",
"src": "src/home.ts", "src": "src/home.ts",
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_style-BkYIZIDm.js", "_style-BkYIZIDm.js",
"_sdk.gen-CMTwTM_A.js" "_sdk.gen-CA3PL0uK.js"
] ]
}, },
"src/noita.ts": { "src/noita.ts": {
@ -64,14 +64,14 @@
] ]
}, },
"src/opus-magnum.ts": { "src/opus-magnum.ts": {
"file": "assets/opus_magnum-DdwCzot1.js", "file": "assets/opus_magnum-CX0R2B7z.js",
"name": "opus_magnum", "name": "opus_magnum",
"src": "src/opus-magnum.ts", "src": "src/opus-magnum.ts",
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_style-BkYIZIDm.js", "_style-BkYIZIDm.js",
"_index-C0ZY4EM6.js", "_index-C0ZY4EM6.js",
"_sdk.gen-CMTwTM_A.js" "_sdk.gen-CA3PL0uK.js"
] ]
} }
} }