a04ae7803b
Introduce a full library feature: add new frontend modules (libraryBridge, libraryComponents, libraryController, libraryFilters, libraryModel) and refactor library view JS to use them; implement rich library CSS and UI templates in index.html (new hints, sidebar entries). Rework spatial navigation (src/core/nav.js) with a geometry-based picker, anchor behavior, sidebar/content regions and integration hook for external nebula navigation; add navigation refresh handling in main.js. Update controller/state glyphs to include a 'clear' button. On the Tauri backend, add a launch_library_game command and its result type, wire it into lib.rs commands, and adjust DB upsert to handle app_kind correctly and export list_games usage. Misc: various wiring to load/scan/launch library items and improved focus/keyboard behaviors.
112 lines
5.4 KiB
HTML
112 lines
5.4 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<link rel="stylesheet" href="/styles/theme.css" />
|
|
<link rel="stylesheet" href="/styles/base.css" />
|
|
<link rel="stylesheet" href="/styles/components.css" />
|
|
<link rel="stylesheet" href="/views/lock/lock.css" />
|
|
<link rel="stylesheet" href="/views/onboarding/userSetup.css" />
|
|
<link rel="stylesheet" href="/views/home/home.css" />
|
|
<link rel="stylesheet" href="/views/settings/settings.css" />
|
|
<link rel="stylesheet" href="/views/library/library.css" />
|
|
<link rel="stylesheet" href="/views/overlays/powerMenu.css" />
|
|
<link rel="stylesheet" href="/views/overlays/keyboard.css" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>Nebula Shell</title>
|
|
<script type="module" src="/main.js" defer></script>
|
|
</head>
|
|
|
|
<body>
|
|
<div id="nebula-background" aria-hidden="true">
|
|
<div class="nebula-layer gradient"></div>
|
|
<div class="nebula-layer starfield"></div>
|
|
<div class="nebula-layer fog"></div>
|
|
<div class="nebula-layer vignette"></div>
|
|
</div>
|
|
|
|
<div class="app-layout">
|
|
|
|
<!-- Persistent left sidebar — hidden for lock/onboarding via JS class -->
|
|
<nav class="sidebar" id="sidebar" aria-label="Main navigation">
|
|
<div class="sidebar-logo">
|
|
<span class="sidebar-logo-icon" aria-hidden="true">✦</span>
|
|
<span class="sidebar-logo-text">Nebula OS</span>
|
|
</div>
|
|
|
|
<ul class="sidebar-nav" role="list">
|
|
<li class="sidebar-nav-item is-active focusable" data-sidebar-nav="home" data-target="home" data-nav-region="sidebar" data-focusable="true" data-row="0" data-col="-1" data-focus-key="sidebar-home" role="listitem" aria-current="page">
|
|
<span class="sidebar-nav-icon" aria-hidden="true">⌂</span>
|
|
<span class="sidebar-nav-label">Home</span>
|
|
</li>
|
|
<li class="sidebar-nav-item focusable" data-sidebar-nav="library" data-target="library" data-nav-region="sidebar" data-focusable="true" data-row="1" data-col="-1" data-focus-key="sidebar-library" role="listitem">
|
|
<span class="sidebar-nav-icon" aria-hidden="true">⊟</span>
|
|
<span class="sidebar-nav-label">Library</span>
|
|
</li>
|
|
<li class="sidebar-nav-item focusable" data-sidebar-nav="store" data-nav-region="sidebar" data-focusable="true" data-row="2" data-col="-1" data-focus-key="sidebar-store" data-disabled="true" role="listitem" aria-disabled="true">
|
|
<span class="sidebar-nav-icon" aria-hidden="true">⊞</span>
|
|
<span class="sidebar-nav-label">Store</span>
|
|
</li>
|
|
<li class="sidebar-nav-item focusable" data-sidebar-nav="mods" data-nav-region="sidebar" data-focusable="true" data-row="3" data-col="-1" data-focus-key="sidebar-mods" data-disabled="true" role="listitem" aria-disabled="true">
|
|
<span class="sidebar-nav-icon" aria-hidden="true">◇</span>
|
|
<span class="sidebar-nav-label">Mods</span>
|
|
</li>
|
|
<li class="sidebar-nav-item focusable" data-sidebar-nav="appstore" data-nav-region="sidebar" data-focusable="true" data-row="4" data-col="-1" data-focus-key="sidebar-appstore" data-disabled="true" role="listitem" aria-disabled="true">
|
|
<span class="sidebar-nav-icon" aria-hidden="true">▣</span>
|
|
<span class="sidebar-nav-label">Appstore</span>
|
|
</li>
|
|
</ul>
|
|
|
|
<div class="sidebar-user">
|
|
<div class="sidebar-user-avatar" aria-hidden="true"></div>
|
|
</div>
|
|
</nav>
|
|
|
|
<!-- Main content area -->
|
|
<div class="app-main-area">
|
|
<main id="app" class="app-shell"></main>
|
|
<footer class="app-footer" id="app-footer"></footer>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div id="overlay-root"></div>
|
|
<div id="keyboard-root"></div>
|
|
|
|
<template id="global-hints-template">
|
|
<div class="hint-row">
|
|
<span class="hint"><span data-glyph="accept"></span> Select</span>
|
|
<span class="hint"><span data-glyph="back"></span> Back</span>
|
|
<span class="hint"><span data-glyph="menu"></span> Menu</span>
|
|
</div>
|
|
</template>
|
|
|
|
<template id="minimal-hints-template">
|
|
<div class="hint-row">
|
|
<span class="hint"><span data-glyph="accept"></span> Open</span>
|
|
<span class="hint"><span data-glyph="menu"></span> Power Menu</span>
|
|
</div>
|
|
</template>
|
|
|
|
<template id="keyboard-hints-template">
|
|
<div class="hint-row">
|
|
<span class="hint"><span data-glyph="accept"></span> Type</span>
|
|
<span class="hint"><span data-glyph="back"></span> Backspace</span>
|
|
<span class="hint"><span data-glyph="l1"></span>/<span data-glyph="r1"></span> Field</span>
|
|
<span class="hint"><span data-glyph="menu"></span> Done</span>
|
|
</div>
|
|
</template>
|
|
|
|
<template id="library-hints-template">
|
|
<div class="hint-row">
|
|
<span class="hint"><span data-glyph="accept"></span> Launch / Select</span>
|
|
<span class="hint"><span data-glyph="clear"></span> Details</span>
|
|
<span class="hint"><span data-glyph="y"></span> Filter / Sort</span>
|
|
<span class="hint"><span data-glyph="l1"></span>/<span data-glyph="r1"></span> Tabs</span>
|
|
<span class="hint"><span data-glyph="l2"></span>/<span data-glyph="r2"></span> Genres</span>
|
|
<span class="hint"><span data-glyph="back"></span> Back</span>
|
|
</div>
|
|
</template>
|
|
</body>
|
|
</html>
|