diff --git a/apps/renderer/src/app/app.ts b/apps/renderer/src/app/app.ts index 473f575..64c5dcd 100644 --- a/apps/renderer/src/app/app.ts +++ b/apps/renderer/src/app/app.ts @@ -2,6 +2,7 @@ import { BreakpointObserver } from '@angular/cdk/layout'; import { ChangeDetectionStrategy, Component, + computed, DestroyRef, inject, signal, @@ -15,6 +16,16 @@ import { MatIconModule } from '@angular/material/icon'; import { MatButtonModule } from '@angular/material/button'; import { distinctUntilChanged, map } from 'rxjs'; +type NavLink = { + path: string; + label: string; + icon: string; + exact?: boolean; + lab?: boolean; +}; + +const LABS_MODE_STORAGE_KEY = 'angulectron.labsMode'; + @Component({ imports: [ RouterOutlet, @@ -34,9 +45,118 @@ import { distinctUntilChanged, map } from 'rxjs'; export class App { private readonly breakpointObserver = inject(BreakpointObserver); private readonly destroyRef = inject(DestroyRef); + private readonly navLinks: NavLink[] = [ + { path: '/', label: 'Home', icon: 'home', exact: true }, + { + path: '/material-showcase', + label: 'Material Showcase', + icon: 'palette', + lab: true, + }, + { + path: '/material-carbon-lab', + label: 'Material Carbon Lab', + icon: 'tune', + lab: true, + }, + { + path: '/carbon-showcase', + label: 'Carbon Showcase', + icon: 'view_quilt', + lab: true, + }, + { + path: '/tailwind-showcase', + label: 'Tailwind Showcase', + icon: 'waterfall_chart', + lab: true, + }, + { + path: '/form-validation-lab', + label: 'Form Validation Lab', + icon: 'fact_check', + lab: true, + }, + { + path: '/async-validation-lab', + label: 'Async Validation Lab', + icon: 'pending_actions', + lab: true, + }, + { + path: '/data-table-workbench', + label: 'Data Table Workbench', + icon: 'table_chart', + lab: true, + }, + { + path: '/theme-tokens-playground', + label: 'Theme Tokens Playground', + icon: 'format_paint', + lab: true, + }, + { + path: '/offline-retry-simulator', + label: 'Offline Retry Simulator', + icon: 'wifi_off', + lab: true, + }, + { + path: '/file-workflow-studio', + label: 'File Workflow Studio', + icon: 'schema', + lab: true, + }, + { + path: '/storage-explorer', + label: 'Storage Explorer', + icon: 'storage', + lab: true, + }, + { + path: '/api-playground', + label: 'API Playground', + icon: 'api', + lab: true, + }, + { + path: '/updates-release', + label: 'Updates & Release', + icon: 'system_update', + lab: true, + }, + { + path: '/telemetry-console', + label: 'Telemetry Console', + icon: 'analytics', + lab: true, + }, + { + path: '/ipc-diagnostics', + label: 'IPC Diagnostics', + icon: 'cable', + lab: true, + }, + { + path: '/auth-session-lab', + label: 'Auth Session Lab', + icon: 'badge', + lab: true, + }, + { + path: '/file-tools', + label: 'File Tools', + icon: 'folder_open', + lab: true, + }, + ]; protected readonly title = 'Angulectron'; protected readonly navOpen = signal(true); protected readonly mobileViewport = signal(false); + protected readonly labsMode = signal(this.loadLabsModePreference()); + protected readonly visibleNavLinks = computed(() => + this.navLinks.filter((item) => this.labsMode() || !item.lab), + ); constructor() { this.breakpointObserver @@ -76,4 +196,28 @@ export class App { this.navOpen.set(false); } } + + protected toggleLabsMode() { + this.labsMode.update((value) => { + const next = !value; + this.persistLabsModePreference(next); + return next; + }); + } + + private loadLabsModePreference(): boolean { + if (typeof localStorage === 'undefined') { + return false; + } + + return localStorage.getItem(LABS_MODE_STORAGE_KEY) === '1'; + } + + private persistLabsModePreference(enabled: boolean) { + if (typeof localStorage === 'undefined') { + return; + } + + localStorage.setItem(LABS_MODE_STORAGE_KEY, enabled ? '1' : '0'); + } } diff --git a/build/icon.ico b/build/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2ccabdcf12b9445034b1498124b67d1007cafec7 GIT binary patch literal 130461 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 a#x?&tn3Q6fni(7f3@0a}EL|aK67oM@WJK2h literal 0 HcmV?d00001 diff --git a/forge.config.cjs b/forge.config.cjs index 401fb81..bd0534f 100644 --- a/forge.config.cjs +++ b/forge.config.cjs @@ -5,6 +5,10 @@ const { const APP_NAME = 'Angulectron'; const APP_BUNDLE_ID = 'com.simonhagger.angulectron'; +const BUILD_ENV = (process.env.APP_ENV ?? 'production').toLowerCase(); +const isStagingBuild = BUILD_ENV === 'staging'; +const PRODUCT_NAME = isStagingBuild ? `${APP_NAME} Staging` : APP_NAME; +const EXECUTABLE_NAME = isStagingBuild ? `${APP_NAME}-Staging` : APP_NAME; const hasAppleSigningConfig = Boolean(process.env.APPLE_CODESIGN_IDENTITY) && @@ -15,15 +19,19 @@ module.exports = { packagerConfig: { asar: true, derefSymlinks: true, - executableName: APP_NAME, + icon: './build/icon', + executableName: EXECUTABLE_NAME, appBundleId: APP_BUNDLE_ID, appCategoryType: 'public.app-category.developer-tools', + extraMetadata: { + appEnv: BUILD_ENV, + }, win32metadata: { CompanyName: 'Angulectron', FileDescription: 'Angulectron Desktop Application', - ProductName: APP_NAME, - InternalName: APP_NAME, - OriginalFilename: `${APP_NAME}.exe`, + ProductName: PRODUCT_NAME, + InternalName: EXECUTABLE_NAME, + OriginalFilename: `${EXECUTABLE_NAME}.exe`, }, osxSign: hasAppleSigningConfig ? { diff --git a/package.json b/package.json index cc4555d..db17d2d 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,8 @@ "forge:clean": "node ./tools/scripts/clean-forge-output.mjs", "forge:start": "pnpm run build-desktop && electron-forge start", "forge:make": "pnpm run forge:clean && pnpm run build && electron-forge make", + "forge:make:staging": "pnpm run forge:clean && cross-env APP_ENV=staging DESKTOP_ENABLE_DEVTOOLS=1 pnpm run build && cross-env APP_ENV=staging DESKTOP_ENABLE_DEVTOOLS=1 electron-forge make", + "forge:make:production": "pnpm run forge:clean && cross-env APP_ENV=production DESKTOP_ENABLE_DEVTOOLS=0 pnpm run build && cross-env APP_ENV=production DESKTOP_ENABLE_DEVTOOLS=0 electron-forge make", "forge:publish": "electron-forge publish", "changeset": "changeset", "version-packages": "changeset version", diff --git a/tools/scripts/workspace-refresh-win.ps1 b/tools/scripts/workspace-refresh-win.ps1 index 0fda4e6..3c0cf2e 100644 --- a/tools/scripts/workspace-refresh-win.ps1 +++ b/tools/scripts/workspace-refresh-win.ps1 @@ -15,11 +15,13 @@ try { # 2) Stop node/electron processes tied to this workspace. $repoPattern = [Regex]::Escape($repoRoot) +$mcpProcessPattern = 'nx-mcp|@playwright/mcp|server-filesystem|mcp gateway|\bmcp\b' $nodeTargets = Get-CimInstance Win32_Process -Filter "name = 'node.exe'" | Where-Object { $_.CommandLine -and $_.CommandLine -match $repoPattern -and - $_.CommandLine -match 'nx|electron|ng\.js|vite|vitest|wait-on|playwright' + $_.CommandLine -match 'nx|electron|ng\.js|vite|vitest|wait-on|playwright' -and + $_.CommandLine -notmatch $mcpProcessPattern } if ($nodeTargets) { @@ -32,6 +34,18 @@ if ($nodeTargets) { Write-Host 'No workspace Node processes found.' } +$mcpTargets = Get-CimInstance Win32_Process -Filter "name = 'node.exe'" | + Where-Object { + $_.CommandLine -and + $_.CommandLine -match $repoPattern -and + $_.CommandLine -match $mcpProcessPattern + } + +if ($mcpTargets) { + $mcpPids = @($mcpTargets | Select-Object -ExpandProperty ProcessId) + Write-Host ("Preserved MCP Node processes: " + ($mcpPids -join ', ')) +} + $electronTargets = Get-CimInstance Win32_Process -Filter "name = 'electron.exe'" | Where-Object { $_.CommandLine -and $_.CommandLine -match $repoPattern } From 4dc791ad458c14d70e355e09d0ebca7861757a85 Mon Sep 17 00:00:00 2001 From: Simon Hagger Date: Thu, 12 Feb 2026 17:49:37 +0000 Subject: [PATCH 24/24] chore(ci): exclude lockfile from prettier format checks --- .prettierignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.prettierignore b/.prettierignore index 113709c..f415dbe 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,3 +4,4 @@ /.nx/cache /.nx/workspace-data .angular +pnpm-lock.yaml