π LCARS Application Launcher
Overviewβ
The LCARS Application Launcher is a collapsible menu on the left sidebar that provides quick access to different applications and features within the 6d-dashboard.
Locationβ
Left sidebar, below the discipline pills (D, S, A, W, I, B).
βββββββββββββββββββββββββββββββ
β LCARS Frame Layout β
βββββββββββββββββββββββββββββββ€
β βββββββββββββββββββββββββββ β
β β [All] β β
β β [D] [S] [A] [W] [I] [B] β β β Discipline pills
β β βββββββββββββββββββββββ β β
β β [βοΈ βΆ APPLICATIONS] β β β LAUNCHER (collapsed)
β β β β
β βββββββββββββββββββββββββββ β
β β
β Main Content β
β β
βββββββββββββββββββββββββββββββ
Featuresβ
π Toggle Buttonβ
- Label: "βοΈ APPLICATIONS"
- Style: Cyan border, LCARS aesthetic
- Click: Expands/collapses menu
- Hover: Glows with cyan effect
π Menu Itemsβ
When expanded, shows list of available applications:
| Item | Icon | Description | Badge |
|---|---|---|---|
| Digital Products | π¦ | Upload and manage digital products | - |
| Analytics | π | View dashboard analytics | 3 |
| Settings | βοΈ | Application settings | - |
π¨ Item Stylingβ
- Background: Dark surface (#141a22)
- Border: Purple (#b782ff)
- Text: Purple, uppercase
- Hover: Lighter background + purple glow
- Badge: Cyan circle with count
β¨ Animationsβ
- Expand: Smooth slide-down (250ms)
- Hover: Glow and color shift (200ms)
- Click: Auto-collapses after selection
Usageβ
For Usersβ
-
Find the launcher
- Look at left sidebar
- Find button with "βοΈ" and "βΆ" arrow
-
Click to expand
- Toggles between collapsed (βΆ) and expanded (βΌ)
- Shows menu items
-
Click a feature
- Launches that feature
- Menu auto-closes
For Developersβ
Adding New Launcher Itemsβ
In src/app/routes/dashboard-6d/index.tsx:
const launcherItems: LauncherItem[] = [
{
id: "digital-products",
label: "Digital Products",
icon: "π¦",
description: "Upload and manage digital products",
onClick: () => onNavigate?.("digital-products"),
badge: "5", // Optional: shows badge with count
},
{
id: "analytics",
label: "Analytics",
icon: "π",
description: "View dashboard analytics",
onClick: () => navigateToAnalytics(),
},
// Add more items...
];
Then pass to LcarsFrame:
<LcarsFrame
launcherItems={launcherItems}
// ... other props
>
LauncherItem Interfaceβ
interface LauncherItem {
id: string; // Unique identifier
label: string; // Display label
icon: string; // Emoji or icon
description?: string; // Tooltip text
onClick: () => void; // Click handler
badge?: string; // Optional badge (count, status, etc)
}
Component Structureβ
LcarsLauncher.tsxβ
- Location:
/src/components/lcars/LcarsLauncher.tsx - Props:
items,title - State:
isExpanded(boolean) - Size: ~150 lines
LcarsFrame.tsxβ
- Updated: Now accepts
launcherItemsprop - Integration: Renders launcher in sidebar below discipline pills
Stylingβ
Colors (Aurora Palette)β
- Toggle Border: Cyan (#52d1ff)
- Toggle Hover: Cyan glow
- Menu Items: Purple (#b782ff) border
- Menu Hover: Purple glow + darker background
- Badge: Cyan background with black text
Spacingβ
- Uses CSS variables from Aurora tokens:
--spacing-sm- Small gaps--spacing-md- Medium padding--spacing-xs- Extra small gaps
Animationsβ
/* Slide-down animation when expanding */
@keyframes slideDown {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
Current Launcher Itemsβ
1. Digital Products (π¦)β
- Purpose: Upload and manage digital products
- Action: Navigates to Digital Product Manager page
- Status: Active
2. Analytics (π)β
- Purpose: View dashboard analytics
- Badge: "3" (example badge)
- Action: Placeholder (logs to console)
- Status: Ready for implementation
3. Settings (βοΈ)β
- Purpose: Application settings
- Action: Placeholder (logs to console)
- Status: Ready for implementation
Adding More Itemsβ
Step 1: Create onClick Handlerβ
const handleNewFeature = () => {
// Navigate or open modal
navigate("/new-feature");
};
Step 2: Add to launcherItems Arrayβ
const launcherItems: LauncherItem[] = [
// ... existing items
{
id: "new-feature",
label: "New Feature",
icon: "π―",
description: "Description of new feature",
onClick: handleNewFeature,
badge: "1", // Optional
},
];
Responsive Designβ
- Desktop: Full launcher visible on left sidebar
- Tablet: Collapses to icon-only when space is tight
- Mobile: May need to adapt layout (future enhancement)
Accessibilityβ
β Keyboard Navigable
- Tab to toggle button
- Enter/Space to toggle
- Tab through menu items
β ARIA Labels
- Buttons have descriptive labels
- Titles on hover
β High Contrast
- Purple and cyan colors meet WCAG AA
- Clear text color on backgrounds
Performanceβ
- No external dependencies (pure React)
- Lightweight: ~5 KB
- Fast animations: CSS-based (GPU accelerated)
- Minimal re-renders: State only affects own component
Future Enhancementsβ
- Keyboard shortcuts (e.g., Ctrl+K to open launcher)
- Search/filter items
- Drag to reorder
- Favorites/pinned items
- Dynamic loading of features
- Recent items history
- Item groups/categories
Example: Adding Admin Panelβ
// In dashboard-6d/index.tsx
const handleAdminPanel = () => {
onNavigate?.("admin-panel"); // Or: window.open('/admin', '_blank')
};
const launcherItems: LauncherItem[] = [
{
id: "digital-products",
label: "Digital Products",
icon: "π¦",
description: "Upload and manage digital products",
onClick: () => onNavigate?.("digital-products"),
},
{
id: "admin-panel",
label: "Admin Panel",
icon: "π¨βπΌ",
description: "Admin controls and settings",
onClick: handleAdminPanel,
badge: "β οΈ", // Or numeric badge
},
// ... more items
];
Testingβ
Manual Testing Checklistβ
- Launcher button visible on left sidebar
- Button has cyan border and "βοΈ" icon
- Arrow toggles: βΆ when collapsed, βΌ when expanded
- Click button expands menu smoothly
- Menu items display with correct icons and labels
- Each item has purple border and background
- Hover shows glow effect and darker background
- Click on item executes correct action
- Menu auto-closes after item selection
- Badge displays correctly (if present)
- Keyboard navigation works
- No console errors
Unit Testingβ
// Example test
test('launcher expands and collapses', () => {
const { getByText } = render(<LcarsLauncher items={mockItems} />);
const button = getByText(/APPLICATIONS/);
expect(button).toHaveTextContent('βΆ');
fireEvent.click(button);
expect(button).toHaveTextContent('βΌ');
fireEvent.click(button);
expect(button).toHaveTextContent('βΆ');
});
Supportβ
Questions?
- Check
LcarsLauncher.tsxsource code (well-commented) - Review
LcarsFrame.tsxintegration - See usage in
dashboard-6d/index.tsx
Version: 1.0.0
Status: β
Production Ready
Date: October 21, 2025
Location: Left sidebar below discipline pills