- Rename test-apps to base-apps with proper manifest.json for each app - Add is_system_app flag to app discovery and Lua API - Fix icon path resolution for /system/icons/ paths - Add layout.lua and layout.rcss for reusable UI components - Update home screen to dynamically load all apps from manifests - Update all app RML files to use layout components - Comprehensive testing framework documentation with JSON action format - Add tests/ directory structure for automated UI testing
417 lines
12 KiB
Plaintext
417 lines
12 KiB
Plaintext
<rml>
|
|
<head>
|
|
<link type="text/rcss" href="../../ui/html.rcss"/>
|
|
<link type="text/rcss" href="../../ui/theme.rcss"/>
|
|
<link type="text/rcss" href="../../ui/components.rcss"/>
|
|
<link type="text/rcss" href="../../ui/layout.rcss"/>
|
|
<script src="../../scripts/navigation.lua"></script>
|
|
<script src="../../scripts/layout.lua"></script>
|
|
<script src="store.lua"></script>
|
|
<title>Store</title>
|
|
<style>
|
|
.store-content {
|
|
flex: 1;
|
|
overflow: auto;
|
|
padding-bottom: 16px;
|
|
}
|
|
|
|
.store-search {
|
|
margin: 16px;
|
|
background-color: #2D2D2D;
|
|
border-radius: 24px;
|
|
padding: 12px 16px;
|
|
display: flex;
|
|
align-items: center;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.store-search:hover {
|
|
background-color: #3D3D3D;
|
|
}
|
|
|
|
.store-search img {
|
|
width: 24px;
|
|
height: 24px;
|
|
margin-right: 12px;
|
|
opacity: 0.6;
|
|
}
|
|
|
|
.store-search-text {
|
|
font-size: 16px;
|
|
color: #B3B3B3;
|
|
}
|
|
|
|
.section-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 16px 16px 8px 16px;
|
|
}
|
|
|
|
.section-title {
|
|
font-size: 18px;
|
|
font-weight: 500;
|
|
color: #FFFFFF;
|
|
}
|
|
|
|
.section-action {
|
|
font-size: 16px;
|
|
color: #BB86FC;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.featured-banner {
|
|
margin: 0 16px 16px 16px;
|
|
height: 140px;
|
|
background-color: #7C3AED;
|
|
border-radius: 16px;
|
|
padding: 20px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: flex-end;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.featured-banner:hover {
|
|
opacity: 0.95;
|
|
}
|
|
|
|
.featured-tag {
|
|
font-size: 14px;
|
|
color: rgba(255,255,255,0.7);
|
|
text-transform: uppercase;
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
.featured-title {
|
|
font-size: 22px;
|
|
font-weight: 600;
|
|
color: #FFFFFF;
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.featured-subtitle {
|
|
font-size: 16px;
|
|
color: rgba(255,255,255,0.8);
|
|
}
|
|
|
|
.app-cards-row {
|
|
display: flex;
|
|
overflow-x: auto;
|
|
padding: 0 16px;
|
|
gap: 12px;
|
|
}
|
|
|
|
.app-card {
|
|
min-width: 130px;
|
|
background-color: #1E1E1E;
|
|
border-radius: 12px;
|
|
padding: 12px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.app-card:hover {
|
|
background-color: #252525;
|
|
}
|
|
|
|
.app-card-icon {
|
|
width: 56px;
|
|
height: 56px;
|
|
border-radius: 14px;
|
|
margin-bottom: 12px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 24px;
|
|
color: #000000;
|
|
}
|
|
|
|
.app-card-name {
|
|
font-size: 16px;
|
|
font-weight: 500;
|
|
color: #FFFFFF;
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.app-card-category {
|
|
font-size: 14px;
|
|
color: #B3B3B3;
|
|
margin-bottom: 6px;
|
|
}
|
|
|
|
.app-card-rating {
|
|
font-size: 14px;
|
|
color: #B3B3B3;
|
|
}
|
|
|
|
.app-list-item {
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 12px 16px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.app-list-item:hover {
|
|
background-color: #1E1E1E;
|
|
}
|
|
|
|
.app-list-icon {
|
|
width: 56px;
|
|
height: 56px;
|
|
border-radius: 12px;
|
|
margin-right: 16px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 24px;
|
|
color: #000000;
|
|
}
|
|
|
|
.app-list-info {
|
|
flex: 1;
|
|
}
|
|
|
|
.app-list-name {
|
|
font-size: 16px;
|
|
font-weight: 500;
|
|
color: #FFFFFF;
|
|
}
|
|
|
|
.app-list-meta {
|
|
font-size: 14px;
|
|
color: #B3B3B3;
|
|
margin-top: 4px;
|
|
}
|
|
|
|
.install-btn {
|
|
background-color: #BB86FC;
|
|
color: #000000;
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
padding: 10px 20px;
|
|
border-radius: 20px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.install-btn:hover {
|
|
background-color: #D4A5FF;
|
|
}
|
|
|
|
.install-btn.installed {
|
|
background-color: transparent;
|
|
color: #BB86FC;
|
|
}
|
|
|
|
.category-chips {
|
|
display: flex;
|
|
overflow-x: auto;
|
|
padding: 0 16px;
|
|
gap: 8px;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.category-chip {
|
|
background-color: #2D2D2D;
|
|
color: #FFFFFF;
|
|
font-size: 14px;
|
|
padding: 8px 16px;
|
|
border-radius: 20px;
|
|
white-space: nowrap;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.category-chip:hover {
|
|
background-color: #3D3D3D;
|
|
}
|
|
|
|
.category-chip.active {
|
|
background-color: #BB86FC;
|
|
color: #000000;
|
|
}
|
|
|
|
.store-bottom-nav {
|
|
display: flex;
|
|
height: 56px;
|
|
background-color: #1E1E1E;
|
|
}
|
|
|
|
.store-nav-item {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
cursor: pointer;
|
|
color: #B3B3B3;
|
|
}
|
|
|
|
.store-nav-item:hover {
|
|
background-color: rgba(255, 255, 255, 0.05);
|
|
}
|
|
|
|
.store-nav-item.active {
|
|
color: #BB86FC;
|
|
}
|
|
|
|
.store-nav-item img {
|
|
width: 28px;
|
|
height: 28px;
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.store-nav-item span {
|
|
font-size: 14px;
|
|
}
|
|
|
|
.bg-purple { background-color: #BB86FC; }
|
|
.bg-teal { background-color: #03DAC6; }
|
|
.bg-orange { background-color: #FF9800; }
|
|
.bg-blue { background-color: #2196F3; }
|
|
.bg-green { background-color: #4CAF50; }
|
|
.bg-red { background-color: #F44336; }
|
|
.bg-pink { background-color: #E91E63; }
|
|
.bg-indigo { background-color: #3F51B5; }
|
|
</style>
|
|
</head>
|
|
<body class="app-screen" onload="initLayout(document)">
|
|
<!-- System Status Bar -->
|
|
<div class="system-status-bar">
|
|
<span id="status-time" class="system-status-time">12:30</span>
|
|
<div class="system-status-icons">
|
|
<img src="../../icons/wifi.tga"/>
|
|
<img src="../../icons/signal.tga"/>
|
|
<img src="../../icons/battery.tga"/>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- App Bar -->
|
|
<div class="app-bar">
|
|
<div class="app-bar-back" onclick="goBack()">
|
|
<img src="../../icons/back.tga"/>
|
|
</div>
|
|
<span class="app-bar-title">Mosis Store</span>
|
|
<div class="app-bar-actions">
|
|
<div class="app-bar-action">
|
|
<img src="../../icons/account.tga"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Store Content -->
|
|
<div class="store-content">
|
|
<!-- Search Bar -->
|
|
<div class="store-search">
|
|
<img src="../../icons/search.tga"/>
|
|
<span class="store-search-text">Search apps & games</span>
|
|
</div>
|
|
|
|
<!-- Featured Banner -->
|
|
<div class="featured-banner">
|
|
<span class="featured-tag">Featured</span>
|
|
<span class="featured-title">Weather Pro</span>
|
|
<span class="featured-subtitle">Beautiful forecasts for your virtual world</span>
|
|
</div>
|
|
|
|
<!-- Category Chips -->
|
|
<div class="category-chips">
|
|
<div class="category-chip active">For You</div>
|
|
<div class="category-chip">Games</div>
|
|
<div class="category-chip">Social</div>
|
|
<div class="category-chip">Productivity</div>
|
|
<div class="category-chip">Tools</div>
|
|
</div>
|
|
|
|
<!-- Recommended Section -->
|
|
<div class="section-header">
|
|
<span class="section-title">Recommended for You</span>
|
|
<span class="section-action">See all</span>
|
|
</div>
|
|
|
|
<div class="app-cards-row">
|
|
<div class="app-card">
|
|
<div class="app-card-icon bg-teal">N</div>
|
|
<div class="app-card-name">Notes</div>
|
|
<div class="app-card-category">Productivity</div>
|
|
<div class="app-card-rating">4.7</div>
|
|
</div>
|
|
<div class="app-card">
|
|
<div class="app-card-icon bg-orange">C</div>
|
|
<div class="app-card-name">Calculator</div>
|
|
<div class="app-card-category">Tools</div>
|
|
<div class="app-card-rating">4.5</div>
|
|
</div>
|
|
<div class="app-card">
|
|
<div class="app-card-icon bg-blue">W</div>
|
|
<div class="app-card-name">Weather</div>
|
|
<div class="app-card-category">Weather</div>
|
|
<div class="app-card-rating">4.8</div>
|
|
</div>
|
|
<div class="app-card">
|
|
<div class="app-card-icon bg-green">M</div>
|
|
<div class="app-card-name">Maps</div>
|
|
<div class="app-card-category">Navigation</div>
|
|
<div class="app-card-rating">4.6</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Top Apps Section -->
|
|
<div class="section-header">
|
|
<span class="section-title">Top Free Apps</span>
|
|
<span class="section-action">See all</span>
|
|
</div>
|
|
|
|
<div class="app-list-item">
|
|
<div class="app-list-icon bg-purple">S</div>
|
|
<div class="app-list-info">
|
|
<div class="app-list-name">Social Hub</div>
|
|
<div class="app-list-meta">Social - 12 MB - 4.9</div>
|
|
</div>
|
|
<div class="install-btn">Install</div>
|
|
</div>
|
|
|
|
<div class="app-list-item">
|
|
<div class="app-list-icon bg-red">G</div>
|
|
<div class="app-list-info">
|
|
<div class="app-list-name">Games Center</div>
|
|
<div class="app-list-meta">Games - 45 MB - 4.7</div>
|
|
</div>
|
|
<div class="install-btn">Install</div>
|
|
</div>
|
|
|
|
<div class="app-list-item">
|
|
<div class="app-list-icon bg-indigo">F</div>
|
|
<div class="app-list-info">
|
|
<div class="app-list-name">File Manager</div>
|
|
<div class="app-list-meta">Tools - 8 MB - 4.6</div>
|
|
</div>
|
|
<div class="install-btn installed">Open</div>
|
|
</div>
|
|
|
|
<div class="app-list-item">
|
|
<div class="app-list-icon bg-pink">M</div>
|
|
<div class="app-list-info">
|
|
<div class="app-list-name">Music Player</div>
|
|
<div class="app-list-meta">Music - 18 MB - 4.5</div>
|
|
</div>
|
|
<div class="install-btn">Install</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Bottom Navigation -->
|
|
<div class="store-bottom-nav">
|
|
<div class="store-nav-item active">
|
|
<img src="../../icons/home.tga"/>
|
|
<span>Apps</span>
|
|
</div>
|
|
<div class="store-nav-item">
|
|
<img src="../../icons/game.tga"/>
|
|
<span>Games</span>
|
|
</div>
|
|
<div class="store-nav-item">
|
|
<img src="../../icons/download.tga"/>
|
|
<span>Updates</span>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</rml>
|