Skip to main content

πŸš€ 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:

ItemIconDescriptionBadge
Digital ProductsπŸ“¦Upload and manage digital products-
AnalyticsπŸ“ŠView dashboard analytics3
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​

  1. Find the launcher

    • Look at left sidebar
    • Find button with "βš™οΈ" and "β–Ά" arrow
  2. Click to expand

    • Toggles between collapsed (β–Ά) and expanded (β–Ό)
    • Shows menu items
  3. 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 launcherItems prop
  • 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.tsx source code (well-commented)
  • Review LcarsFrame.tsx integration
  • See usage in dashboard-6d/index.tsx

Version: 1.0.0
Status: βœ… Production Ready
Date: October 21, 2025
Location: Left sidebar below discipline pills