Files
Nebula-OS/src/index.html
T
andrew a04ae7803b Add library UI, spatial nav & game launcher
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.
2026-05-16 20:45:54 +12:00

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>