@franzzemen/brokenstock-shell 0.0.14 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -948,7 +948,7 @@ class Login {
948
948
  .login(this.model, force)
949
949
  .then(() => {
950
950
  this.#commandService.echoCommand(`login ${this.model.username}`);
951
- this.router.navigate(['/']).then(() => {
951
+ this.router.navigate(['/trades']).then(() => {
952
952
  setTimeout(() => this.#terminalFocusService.requestFocus());
953
953
  }).catch(console.error);
954
954
  })
@@ -1 +1 @@
1
- {"version":3,"file":"franzzemen-brokenstock-shell.mjs","sources":["../../src/lib/tokens/shell-tokens.ts","../../src/lib/provide-shell-config.ts","../../src/lib/services/thinking.service.ts","../../src/lib/services/authentication.service.ts","../../src/lib/guards/auth.guard.ts","../../src/lib/interceptors/auth.interceptor.ts","../../src/lib/directives/regex-validator.directive.ts","../../src/lib/services/theme.service.ts","../../src/lib/services/terminal-focus.service.ts","../../src/lib/services/keyboard-shortcut.service.ts","../../src/lib/services/command-registry.service.ts","../../src/lib/commands/command.utils.ts","../../src/lib/services/command.service.ts","../../src/lib/components/status-bar/status-bar.ts","../../src/lib/components/status-bar/status-bar.html","../../src/lib/components/side-menu/side-menu.ts","../../src/lib/components/side-menu/side-menu.html","../../src/lib/components/main-content/main-content.ts","../../src/lib/components/main-content/main-content.html","../../src/lib/components/command-terminal/command-terminal.ts","../../src/lib/components/command-terminal/command-terminal.html","../../src/lib/components/shell/shell.ts","../../src/lib/components/shell/shell.html","../../src/lib/components/login/login.ts","../../src/lib/components/login/login.html","../../src/lib/components/confirm-dialog/confirm-dialog.ts","../../src/public-api.ts","../../src/franzzemen-brokenstock-shell.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { CommandDefinition } from '../types/command.types';\nimport { MenuItem } from '../types/menu.types';\n\nexport interface ShellAuthUrls {\n login: string;\n logout: string;\n refresh: string;\n}\n\nexport const SHELL_APP_NAME = new InjectionToken<string>('SHELL_APP_NAME');\nexport const SHELL_MENU_ITEMS = new InjectionToken<MenuItem[]>('SHELL_MENU_ITEMS');\nexport const SHELL_AUTH_URLS = new InjectionToken<ShellAuthUrls>('SHELL_AUTH_URLS');\n\n/**\n * App-specific commands to register alongside the built-in command set.\n * Provide via provideShellConfig().\n */\nexport const SHELL_COMMANDS = new InjectionToken<CommandDefinition[]>('SHELL_COMMANDS');\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { CommandDefinition } from './types/command.types';\nimport { MenuItem } from './types/menu.types';\nimport { SHELL_APP_NAME, SHELL_AUTH_URLS, SHELL_COMMANDS, SHELL_MENU_ITEMS, ShellAuthUrls } from './tokens/shell-tokens';\n\nexport interface ShellConfig {\n appName: string;\n menuItems: MenuItem[];\n authUrls: ShellAuthUrls;\n commands?: CommandDefinition[];\n}\n\nexport function provideShellConfig(config: ShellConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: SHELL_APP_NAME, useValue: config.appName },\n { provide: SHELL_MENU_ITEMS, useValue: config.menuItems },\n { provide: SHELL_AUTH_URLS, useValue: config.authUrls },\n { provide: SHELL_COMMANDS, useValue: config.commands ?? [] },\n ]);\n}\n","import { Injectable, signal, computed } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ThinkingService {\n readonly #activeCount = signal(0);\n\n readonly isThinking = computed(() => this.#activeCount() > 0);\n\n startThinking(): void {\n this.#activeCount.update(c => c + 1);\n }\n\n stopThinking(): void {\n this.#activeCount.update(c => Math.max(0, c - 1));\n }\n\n reset(): void {\n this.#activeCount.set(0);\n }\n}\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { BEARER_TOKEN_REGEX, BearerToken, HttpHeader } from '@franzzemen/utility';\nimport { AuthenticationResponse, Credentials, EffectivePermissions, RoleNames, SessionSummary, UserSession, validateCredentials } from '@franzzemen/identity';\nimport { HttpClient, HttpErrorResponse, HttpResponse } from '@angular/common/http';\nimport { Router } from '@angular/router';\nimport { ThinkingService } from './thinking.service';\nimport { SHELL_AUTH_URLS } from '../tokens/shell-tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthenticationService {\n readonly authenticated = signal(false);\n readonly authenticating = signal(false);\n readonly userSession = signal<UserSession | undefined>(undefined);\n readonly effectivePermissions = signal<EffectivePermissions>({});\n readonly conflictSessions = signal<SessionSummary[] | undefined>(undefined);\n readonly pendingCredentials = signal<Credentials | undefined>(undefined);\n\n #refreshing: Promise<boolean> | null = null;\n #auth: BearerToken = 'Bearer ..' as BearerToken;\n\n readonly #httpClient = inject(HttpClient);\n readonly #thinkingService = inject(ThinkingService);\n readonly #router = inject(Router);\n readonly #authUrls = inject(SHELL_AUTH_URLS);\n\n get auth(): BearerToken {\n return this.#auth;\n }\n\n /** Check if the current user has a specific role. */\n hasRole(roleName: RoleNames): boolean {\n return this.authenticated() && this.userSession()?.roles.includes(roleName) === true;\n }\n\n /** Check if the current user has any of the specified roles. */\n hasAnyRole(roleNames: RoleNames[]): boolean {\n return this.authenticated() && roleNames.some(r => this.userSession()?.roles.includes(r) === true);\n }\n\n refresh(): Promise<boolean> {\n if (this.#refreshing) {\n return this.#refreshing;\n }\n this.#refreshing = this.#doRefresh().finally(() => { this.#refreshing = null; });\n return this.#refreshing;\n }\n\n clearConflict(): void {\n this.conflictSessions.set(undefined);\n this.pendingCredentials.set(undefined);\n }\n\n logout(): void {\n const subscription = this.#httpClient\n .get<void>(this.#authUrls.logout, {\n headers: {\n [HttpHeader.Authorization]: this.#auth,\n [HttpHeader.AppContext]: 'brokenstock',\n },\n })\n .subscribe({\n next: () => {\n this.#clearSession();\n subscription.unsubscribe();\n },\n error: () => {\n this.#thinkingService.reset();\n this.#clearSession();\n },\n });\n }\n\n login(credentials: Credentials, force = false): Promise<void> {\n const validation = validateCredentials(credentials);\n if (validation !== true) {\n return Promise.reject('Invalid credentials');\n }\n this.conflictSessions.set(undefined);\n this.#thinkingService.startThinking();\n return new Promise((resolve, reject) => {\n this.authenticating.set(true);\n const body = force ? {...credentials, force: true} : credentials;\n const subscription = this.#httpClient\n .post<HttpResponse<AuthenticationResponse>>(\n this.#authUrls.login,\n body,\n {\n headers: {\n [HttpHeader.ContentType]: 'application/json',\n [HttpHeader.AppContext]: 'brokenstock',\n },\n observe: 'response',\n responseType: 'json',\n withCredentials: true,\n },\n )\n .subscribe({\n next: (response: HttpResponse<any>) => {\n try {\n const authResponse: AuthenticationResponse = response.body;\n // @ts-ignore\n delete authResponse.session.token;\n this.userSession.set(authResponse.session);\n this.effectivePermissions.set(authResponse.effectivePermissions ?? {});\n const auth = response.headers.get(HttpHeader.Authorization);\n if (!auth || !BEARER_TOKEN_REGEX.test(auth)) {\n reject('Unable to login');\n return;\n }\n this.#auth = auth as BearerToken;\n this.authenticated.set(true);\n this.pendingCredentials.set(undefined);\n resolve();\n } catch {\n reject('Unable to login');\n } finally {\n this.authenticating.set(false);\n subscription.unsubscribe();\n this.#thinkingService.stopThinking();\n }\n },\n error: (err: HttpErrorResponse) => {\n try {\n if (err.status === 409) {\n this.conflictSessions.set(err.error?.activeSessions ?? []);\n this.pendingCredentials.set(credentials);\n reject('conflict');\n } else {\n reject(err.message ?? 'Unable to login');\n }\n } finally {\n this.authenticating.set(false);\n subscription.unsubscribe();\n this.#thinkingService.stopThinking();\n }\n },\n });\n });\n }\n\n async #doRefresh(): Promise<boolean> {\n try {\n const response = await fetch(this.#authUrls.refresh, {\n method: 'POST',\n headers: {\n [HttpHeader.Authorization]: this.#auth,\n [HttpHeader.AppContext]: 'brokenstock',\n },\n credentials: 'include',\n });\n if (!response.ok) return false;\n const auth = response.headers.get(HttpHeader.Authorization);\n if (!auth || !BEARER_TOKEN_REGEX.test(auth)) return false;\n const body: AuthenticationResponse = await response.json();\n this.#auth = auth as BearerToken;\n this.userSession.set(body.session);\n this.effectivePermissions.set(body.effectivePermissions ?? {});\n return true;\n } catch {\n return false;\n }\n }\n\n #clearSession(): void {\n this.authenticated.set(false);\n this.userSession.set(undefined);\n this.effectivePermissions.set({});\n this.conflictSessions.set(undefined);\n this.pendingCredentials.set(undefined);\n this.#auth = 'Bearer ..' as BearerToken;\n this.#router.navigate(['/login']).catch(console.error);\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { AuthenticationService } from '../services/authentication.service';\n\nexport const authGuard: CanActivateFn = () => {\n const authService = inject(AuthenticationService);\n const router = inject(Router);\n\n if (authService.authenticated()) {\n return true;\n }\n return router.createUrlTree(['/login']);\n};\n","import { HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { from, switchMap, catchError, tap, throwError } from 'rxjs';\nimport { AuthenticationService } from '../services/authentication.service';\nimport { ThinkingService } from '../services/thinking.service';\nimport { SHELL_AUTH_URLS } from '../tokens/shell-tokens';\nimport { HttpHeader } from '@franzzemen/utility';\n\nexport const authInterceptor: HttpInterceptorFn = (req, next) => {\n const authService = inject(AuthenticationService);\n const thinkingService = inject(ThinkingService);\n const authUrls = inject(SHELL_AUTH_URLS);\n const router = inject(Router);\n\n return next(req).pipe(\n tap({\n next: (event) => {\n if ('headers' in event && event.headers?.get('x-permissions-stale') === 'true') {\n authService.refresh();\n }\n },\n }),\n catchError((error) => {\n const isRefreshOrLogin = req.url === authUrls.refresh || req.url === authUrls.login;\n if (error.status === 401 && !isRefreshOrLogin) {\n return from(authService.refresh()).pipe(\n switchMap((refreshed) => {\n if (refreshed) {\n const retryReq = req.clone({\n setHeaders: { [HttpHeader.Authorization]: authService.auth },\n });\n return next(retryReq);\n }\n thinkingService.reset();\n authService.authenticated.set(false);\n authService.userSession.set(undefined);\n router.navigate(['/login']);\n return throwError(() => error);\n }),\n catchError(() => {\n thinkingService.reset();\n authService.authenticated.set(false);\n authService.userSession.set(undefined);\n router.navigate(['/login']);\n return throwError(() => error);\n }),\n );\n }\n return throwError(() => error);\n }),\n );\n};\n","import { Directive, input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\n\n@Directive({\n selector: '[regexValidator]',\n providers: [{ provide: NG_VALIDATORS, useExisting: RegexValidatorDirective, multi: true }],\n})\nexport class RegexValidatorDirective implements Validator {\n regex = input(/^[A-Z0-9._%+-@!?]{4,64}$/i);\n\n validate(control: AbstractControl): ValidationErrors | null {\n if (!control.value || !this.regex().test(control.value)) {\n return { regexValidator: { value: control.value } };\n }\n return null;\n }\n}\n","import { Injectable, signal, computed } from '@angular/core';\n\nexport type ThemeMode = 'dark';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n readonly mode = signal<ThemeMode>('dark');\n readonly isDark = computed(() => this.mode() === 'dark');\n}\n","import { Injectable, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class TerminalFocusService {\n readonly focusRequested = signal(0);\n\n requestFocus(): void {\n this.focusRequested.update(v => v + 1);\n }\n}\n","import { computed, inject, Injectable, NgZone, signal } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { TerminalFocusService } from './terminal-focus.service';\n\nexport interface ShortcutRegistration {\n key: string;\n modifier?: 'Alt';\n action: () => void;\n description: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class KeyboardShortcutService {\n readonly #groups = new Map<string, ShortcutRegistration[]>();\n readonly #activeGroupId = signal<string | null>(null);\n\n readonly #document = inject(DOCUMENT);\n readonly #zone = inject(NgZone);\n readonly #focusService = inject(TerminalFocusService);\n\n readonly helpVisible = signal(false);\n\n readonly activeShortcuts = computed(() => {\n const groupId = this.#activeGroupId();\n if (!groupId) return null;\n const shortcuts = this.#groups.get(groupId);\n if (!shortcuts) return null;\n return { groupId, shortcuts };\n });\n\n constructor() {\n this.#zone.runOutsideAngular(() => {\n this.#document.addEventListener('keydown', (event: KeyboardEvent) => {\n this.#handleKeydown(event);\n });\n });\n }\n\n registerGroup(groupId: string, shortcuts: ShortcutRegistration[]): void {\n this.#groups.set(groupId, shortcuts);\n this.#activeGroupId.set(groupId);\n }\n\n unregisterGroup(groupId: string): void {\n this.#groups.delete(groupId);\n if (this.#activeGroupId() === groupId) {\n const keys = [...this.#groups.keys()];\n this.#activeGroupId.set(keys.length > 0 ? keys[keys.length - 1] : null);\n }\n }\n\n toggleHelp(): void {\n this.helpVisible.update(v => !v);\n }\n\n #handleKeydown(event: KeyboardEvent): boolean {\n const activeId = this.#activeGroupId();\n if (activeId) {\n const shortcuts = this.#groups.get(activeId);\n if (shortcuts) {\n const match = shortcuts.find(s => {\n if (s.modifier === 'Alt') return event.altKey && s.key === event.key;\n return !event.altKey && !event.ctrlKey && !event.metaKey && s.key === event.key;\n });\n if (match) {\n event.preventDefault();\n this.#zone.run(() => match.action());\n return true;\n }\n }\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n this.#zone.run(() => {\n this.helpVisible.set(false);\n this.#focusService.requestFocus();\n });\n return true;\n }\n\n if (!event.altKey) return false;\n\n if (event.key === '?' || event.key === '/') {\n event.preventDefault();\n this.#zone.run(() => this.toggleHelp());\n return true;\n }\n\n return false;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { CommandDefinition } from '../types/command.types';\nimport { SHELL_COMMANDS } from '../tokens/shell-tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class CommandRegistryService {\n private readonly commands = new Map<string, CommandDefinition>();\n\n constructor() {\n const appCommands = inject(SHELL_COMMANDS, { optional: true }) ?? [];\n for (const cmd of appCommands) {\n this.register(cmd);\n }\n }\n\n register(command: CommandDefinition): void {\n this.commands.set(command.name, command);\n }\n\n get(name: string): CommandDefinition | undefined {\n return this.commands.get(name);\n }\n\n getAll(): CommandDefinition[] {\n return Array.from(this.commands.values());\n }\n\n /**\n * Returns command name suggestions for tab-completion.\n * Built-ins (clear, help) are included when authenticated.\n */\n getSuggestions(prefix: string, isAuthenticated: boolean): string[] {\n if (!prefix) return [];\n if (!isAuthenticated) {\n return 'login'.startsWith(prefix) && 'login' !== prefix ? ['login'] : [];\n }\n const builtIns = ['clear', 'help'];\n const registered = [...this.commands.values()].map(c => c.name);\n return [...builtIns, ...registered]\n .filter(name => name.startsWith(prefix) && name !== prefix)\n .sort();\n }\n}\n","/**\n * Quote-aware command tokenizer. Treats \"...\" as single tokens and strips enclosing quotes.\n */\nexport function tokenize(input: string): string[] {\n return (input.match(/(?:\"[^\"]*\"|\\S)+/g) ?? []).map(t => t.replace(/\"([^\"]*)\"/g, '$1'));\n}\n\nexport const CLEAR_USAGE =\n 'clear\\n\\n' +\n ' Clears the terminal history.\\n' +\n ' No arguments required.';\n\nexport const HELP_USAGE =\n 'help [command]\\n\\n' +\n ' With no arguments, lists all available commands.\\n' +\n ' With a command name, shows detailed usage for that command.\\n\\n' +\n ' Arguments:\\n' +\n ' [command] Optional command name to show detailed help for';\n","import { inject, Injectable, signal, computed, effect } from '@angular/core';\nimport { z } from 'zod/v4';\nimport { CommandResult, CommandHistoryEntry, Severity } from '../types/command.types';\nimport { tokenize, CLEAR_USAGE, HELP_USAGE } from '../commands/command.utils';\nimport { CommandRegistryService } from './command-registry.service';\nimport { AuthenticationService } from './authentication.service';\n\nexport type { CommandResult, CommandHistoryEntry, Severity };\n\nconst CommandInputSchema = z.string().trim().min(1, 'Command cannot be empty');\n\n@Injectable({ providedIn: 'root' })\nexport class CommandService {\n readonly history = signal<CommandHistoryEntry[]>([]);\n readonly currentInput = signal('');\n readonly isProcessing = signal(false);\n readonly helpOverlay = signal<string | null>(null);\n\n private readonly authService = inject(AuthenticationService);\n private readonly registry = inject(CommandRegistryService);\n\n constructor() {\n effect(() => {\n if (!this.authService.authenticated()) {\n this.history.set([]);\n }\n });\n }\n\n readonly lastResult = computed(() => {\n const h = this.history();\n return h.length > 0 ? h[h.length - 1].result : null;\n });\n\n dismissHelp(): void {\n this.helpOverlay.set(null);\n }\n\n echoCommand(input: string): void {\n if (this.#coalesce(input)) return;\n this.history.update(h => [...h, {\n input,\n result: { success: true, message: '', timestamp: new Date() },\n repeatCount: 1,\n }]);\n }\n\n pushNotification(notification: { message: string; severity: Severity }): void {\n this.history.update(h => [...h, {\n input: '',\n result: {\n success: notification.severity !== 'error',\n message: notification.message,\n timestamp: new Date(),\n severity: notification.severity,\n },\n }]);\n }\n\n execute(rawInput: string): void {\n const validation = CommandInputSchema.safeParse(rawInput);\n if (!validation.success) {\n this.history.update(h => [...h, {\n input: rawInput,\n result: { success: false, message: validation.error.issues[0].message, timestamp: new Date() },\n }]);\n this.currentInput.set('');\n return;\n }\n\n const input = validation.data;\n const parts = tokenize(input);\n const command = parts[0].toLowerCase();\n\n const def = this.registry.get(command);\n const displayInput = def?.sanitizeInput ? def.sanitizeInput(input) : input;\n\n const resultOrPromise = this.#dispatch(command, parts.slice(1));\n this.currentInput.set('');\n\n if (resultOrPromise instanceof Promise) {\n this.isProcessing.set(true);\n resultOrPromise\n .then(result => {\n if (result.isHelp && result.message) {\n this.helpOverlay.set(result.message);\n }\n const historyResult = result.isHelp ? { ...result, message: '' } : result;\n if (!this.#coalesce(displayInput)) {\n this.history.update(h => [...h, { input: displayInput, result: historyResult, repeatCount: 1 }]);\n }\n })\n .finally(() => this.isProcessing.set(false));\n } else {\n if (resultOrPromise.isHelp && resultOrPromise.message) {\n this.helpOverlay.set(resultOrPromise.message);\n }\n const historyResult = resultOrPromise.isHelp ? { ...resultOrPromise, message: '' } : resultOrPromise;\n if (!this.#coalesce(displayInput)) {\n this.history.update(h => [...h, { input: displayInput, result: historyResult, repeatCount: 1 }]);\n }\n }\n }\n\n #coalesce(input: string): boolean {\n if (!input) return false;\n const h = this.history();\n for (let i = h.length - 1; i >= 0; i--) {\n if (h[i].input) {\n if (h[i].input === input) {\n this.history.update(history => {\n const updated = [...history];\n updated[i] = { ...updated[i], repeatCount: (updated[i].repeatCount ?? 1) + 1 };\n return updated;\n });\n return true;\n }\n return false;\n }\n }\n return false;\n }\n\n #dispatch(command: string, args: string[]): CommandResult | Promise<CommandResult> {\n // Normalize \"help <command>\" → \"<command> help\" so auth and dispatch rules apply uniformly\n if (command === 'help' && args.length > 0 && args[0].toLowerCase() !== 'help') {\n [command, args] = [args[0].toLowerCase(), ['help']];\n }\n\n const hasHelp = args.some(a => a.toLowerCase() === 'help');\n const isAuthenticated = this.authService.authenticated();\n\n if (!isAuthenticated && command !== 'login') {\n return { success: false, message: 'Not logged in. Use \"login\" to authenticate.', timestamp: new Date() };\n }\n\n if (command === 'clear') {\n if (hasHelp) return { success: true, message: CLEAR_USAGE, timestamp: new Date(), isHelp: true };\n this.history.set([]);\n return { success: true, message: '', timestamp: new Date() };\n }\n\n if (command === 'help') {\n const target = args[0]?.toLowerCase();\n if (target) return this.#commandHelp(target);\n const registered = this.registry.getAll();\n const lines = [\n ' clear — Clear terminal history',\n ' help — List available commands',\n ...registered.map(c => ` ${c.name} — ${c.description}`),\n ];\n return {\n success: true,\n message: 'Available commands:\\n' + lines.join('\\n') + '\\n\\nType \"help <command>\" or \"<command> help\" for detailed usage.',\n timestamp: new Date(),\n isHelp: true,\n };\n }\n\n let def = this.registry.get(command);\n if (!def) {\n // Try swapping the first two tokens: \"disable user foo\" → \"user disable foo\"\n const swapped = args[0]?.toLowerCase();\n if (swapped && this.registry.get(swapped)) {\n def = this.registry.get(swapped)!;\n args = [command, ...args.slice(1)];\n command = swapped;\n } else {\n return { success: false, message: `Unknown command: ${command}`, timestamp: new Date() };\n }\n }\n\n if (hasHelp) {\n return { success: true, message: def.usage, timestamp: new Date(), isHelp: true };\n }\n\n const validation = def.argsSchema.safeParse(args);\n if (!validation.success) {\n return { success: false, message: `Invalid arguments for '${command}': ${validation.error.issues[0].message}`, timestamp: new Date() };\n }\n\n return def.execute(args);\n }\n\n #commandHelp(name: string): CommandResult {\n if (name === 'clear') return { success: true, message: CLEAR_USAGE, timestamp: new Date(), isHelp: true };\n if (name === 'help') return { success: true, message: HELP_USAGE, timestamp: new Date(), isHelp: true };\n const def = this.registry.get(name);\n if (!def) return { success: false, message: `Unknown command: ${name}`, timestamp: new Date() };\n return { success: true, message: def.usage, timestamp: new Date(), isHelp: true };\n }\n}\n","import { Component, computed, inject } from '@angular/core';\nimport { AuthenticationService } from '../../services/authentication.service';\nimport { CommandService } from '../../services/command.service';\nimport { TerminalFocusService } from '../../services/terminal-focus.service';\n\n@Component({\n selector: 'shell-status-bar',\n templateUrl: './status-bar.html',\n styleUrl: './status-bar.css',\n})\nexport class StatusBar {\n readonly #authService = inject(AuthenticationService);\n readonly #focusService = inject(TerminalFocusService);\n readonly #commandService = inject(CommandService);\n\n readonly isAuthenticated = this.#authService.authenticated;\n readonly loginStatus = computed(() =>\n this.#authService.authenticating()\n ? 'Authenticating...'\n : this.#authService.authenticated()\n ? 'Logged in'\n : 'Not logged in',\n );\n\n logout(): void {\n this.#authService.logout();\n this.#commandService.echoCommand('logout');\n this.#focusService.requestFocus();\n }\n}\n","<div class=\"status-bar\">\n <div class=\"status-item\">\n <span class=\"status-label text-secondary-info\">Status:</span>\n @if (isAuthenticated()) {\n <a class=\"status-value text-interactive logout-link\" (click)=\"logout()\">Log Out</a>\n } @else {\n <span class=\"status-value text-loss\">{{ loginStatus() }}</span>\n }\n </div>\n @if (isAuthenticated()) {\n <ng-content />\n }\n</div>\n","import { Component, computed, inject } from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TerminalFocusService } from '../../services/terminal-focus.service';\nimport { CommandService } from '../../services/command.service';\nimport { KeyboardShortcutService } from '../../services/keyboard-shortcut.service';\nimport { SHELL_MENU_ITEMS } from '../../tokens/shell-tokens';\nimport { MenuItem } from '../../types/menu.types';\n\nexport { MenuItem };\n\n@Component({\n selector: 'shell-side-menu',\n imports: [RouterLink, RouterLinkActive, MatIconModule, MatTooltipModule],\n templateUrl: './side-menu.html',\n styleUrl: './side-menu.css',\n})\nexport class SideMenu {\n readonly #focusService = inject(TerminalFocusService);\n readonly #commandService = inject(CommandService);\n readonly #shortcutService = inject(KeyboardShortcutService);\n readonly hasShortcuts = this.#shortcutService.activeShortcuts;\n\n readonly #allMenuItems: MenuItem[] = inject(SHELL_MENU_ITEMS, { optional: true }) ?? [];\n\n readonly menuItems = computed(() =>\n this.#allMenuItems.filter(item => !item.visible || item.visible()),\n );\n\n onMenuClick(item: MenuItem): void {\n if (item.command) {\n this.#commandService.echoCommand(item.command);\n }\n this.#focusService.requestFocus();\n }\n\n toggleHelp(): void {\n this.#shortcutService.toggleHelp();\n }\n}\n","<nav class=\"side-menu\">\n @for (item of menuItems(); track item.route) {\n <a\n class=\"menu-item\"\n [routerLink]=\"item.route\"\n routerLinkActive=\"active\"\n [matTooltip]=\"item.label\"\n matTooltipPosition=\"right\"\n (click)=\"onMenuClick(item)\"\n >\n <mat-icon>{{ item.icon }}</mat-icon>\n </a>\n }\n <div class=\"menu-spacer\"></div>\n @if (hasShortcuts()) {\n <button\n class=\"help-button\"\n matTooltip=\"Keyboard shortcuts\"\n matTooltipPosition=\"right\"\n (click)=\"toggleHelp()\"\n >\n <span class=\"help-modifier\">Alt+</span><span class=\"help-key\">?</span>\n </button>\n }\n</nav>\n","import { Component, inject } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { ThinkingService } from '../../services/thinking.service';\nimport { KeyboardShortcutService } from '../../services/keyboard-shortcut.service';\n\n@Component({\n selector: 'shell-main-content',\n imports: [RouterOutlet, MatProgressSpinnerModule],\n templateUrl: './main-content.html',\n styleUrl: './main-content.css',\n})\nexport class MainContent {\n readonly #thinkingService = inject(ThinkingService);\n readonly #shortcutService = inject(KeyboardShortcutService);\n readonly isThinking = this.#thinkingService.isThinking;\n readonly shortcutHelpVisible = this.#shortcutService.helpVisible;\n readonly activeShortcuts = this.#shortcutService.activeShortcuts;\n\n formatKey(key: string): string {\n const keyMap: Record<string, string> = {\n ArrowUp: '↑', ArrowDown: '↓', ArrowLeft: '←', ArrowRight: '→',\n PageUp: 'PgUp', PageDown: 'PgDn',\n };\n return keyMap[key] ?? key;\n }\n\n closeShortcutHelp(): void {\n this.#shortcutService.helpVisible.set(false);\n }\n}\n","<div class=\"main-content\">\n <div class=\"content-area\">\n <router-outlet />\n </div>\n @if (shortcutHelpVisible() && activeShortcuts()) {\n <div class=\"shortcut-overlay\" (click)=\"closeShortcutHelp()\">\n <div class=\"shortcut-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"shortcut-title text-secondary-info\">{{ activeShortcuts()!.groupId }} shortcuts</div>\n @for (s of activeShortcuts()!.shortcuts; track s.key) {\n <div class=\"shortcut-row\">\n <kbd class=\"shortcut-key\">Alt+{{ formatKey(s.key) }}</kbd>\n <span class=\"shortcut-desc text-text-primary\">{{ s.description }}</span>\n </div>\n }\n <div class=\"shortcut-row shortcut-dismiss\">\n <kbd class=\"shortcut-key\">Alt+?</kbd>\n <span class=\"shortcut-desc text-secondary-info\">or</span>\n <kbd class=\"shortcut-key\">Esc</kbd>\n <span class=\"shortcut-desc text-secondary-info\">dismiss</span>\n </div>\n </div>\n </div>\n }\n @if (isThinking()) {\n <div class=\"thinking-overlay\">\n <mat-spinner diameter=\"48\" />\n </div>\n }\n</div>\n","import { Component, inject, ElementRef, viewChild, effect, afterNextRender, computed } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommandService } from '../../services/command.service';\nimport { CommandRegistryService } from '../../services/command-registry.service';\nimport { AuthenticationService } from '../../services/authentication.service';\nimport { TerminalFocusService } from '../../services/terminal-focus.service';\nimport { CommandResult } from '../../types/command.types';\n\n@Component({\n selector: 'shell-command-terminal',\n imports: [FormsModule],\n templateUrl: './command-terminal.html',\n styleUrl: './command-terminal.css',\n})\nexport class CommandTerminal {\n private readonly commandService = inject(CommandService);\n private readonly registry = inject(CommandRegistryService);\n private readonly authService = inject(AuthenticationService);\n private readonly terminalFocusService = inject(TerminalFocusService);\n\n readonly history = computed(() => [...this.commandService.history()].reverse());\n readonly currentInput = this.commandService.currentInput;\n readonly isProcessing = this.commandService.isProcessing;\n\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('terminalInput');\n\n private tabCycleIndex = -1;\n private lastTabPrefix = '';\n\n readonly ghostText = computed(() => {\n const input = this.currentInput().trim();\n if (!input || input.includes(' ')) return '';\n const prefix = input.toLowerCase();\n const suggestions = this.registry.getSuggestions(prefix, this.authService.authenticated());\n return suggestions.length > 0 ? suggestions[0] : '';\n });\n\n constructor() {\n afterNextRender(() => this.focusInput());\n\n effect(() => {\n if (!this.isProcessing()) {\n setTimeout(() => this.focusInput());\n }\n });\n\n effect(() => {\n this.terminalFocusService.focusRequested();\n setTimeout(() => this.focusInput());\n });\n }\n\n onSubmit(): void {\n const input = this.currentInput();\n if (!input.trim()) return;\n this.commandService.execute(input);\n this.tabCycleIndex = -1;\n this.lastTabPrefix = '';\n this.focusInput();\n }\n\n onInputChange(value: string): void {\n this.currentInput.set(value);\n this.tabCycleIndex = -1;\n this.lastTabPrefix = '';\n if (this.commandService.helpOverlay()) {\n this.commandService.dismissHelp();\n }\n }\n\n dismissHelp(): void {\n this.commandService.dismissHelp();\n }\n\n onTab(event: KeyboardEvent): void {\n event.preventDefault();\n const input = this.currentInput().trim();\n if (!input || input.includes(' ')) return;\n\n const prefix = input.toLowerCase();\n const suggestions = this.registry.getSuggestions(prefix, this.authService.authenticated());\n if (suggestions.length === 0) return;\n\n if (suggestions.length === 1) {\n this.currentInput.set(suggestions[0] + ' ');\n this.tabCycleIndex = -1;\n this.lastTabPrefix = '';\n return;\n }\n\n if (this.lastTabPrefix !== prefix) {\n this.lastTabPrefix = prefix;\n this.tabCycleIndex = -1;\n }\n\n if (event.shiftKey) {\n this.tabCycleIndex = this.tabCycleIndex <= 0 ? suggestions.length - 1 : this.tabCycleIndex - 1;\n } else {\n this.tabCycleIndex = (this.tabCycleIndex + 1) % suggestions.length;\n }\n\n this.currentInput.set(suggestions[this.tabCycleIndex]);\n }\n\n getSeverityClass(result: CommandResult): string {\n if (result.severity === 'info') return 'info';\n if (result.severity === 'warning') return 'warning';\n if (result.severity === 'error' || !result.success) return 'error';\n return '';\n }\n\n focusInput(): void {\n this.inputEl()?.nativeElement.focus();\n }\n}\n","<div class=\"terminal\">\n <div class=\"terminal-input-row\">\n <span class=\"prompt\">$</span>\n <div class=\"input-wrapper\">\n @if (ghostText()) {\n <input\n class=\"ghost-input\"\n type=\"text\"\n [value]=\"ghostText()\"\n disabled\n tabindex=\"-1\"\n aria-hidden=\"true\"\n />\n }\n <input\n #terminalInput\n class=\"terminal-input\"\n type=\"text\"\n [ngModel]=\"currentInput()\"\n (ngModelChange)=\"onInputChange($event)\"\n (keydown.enter)=\"onSubmit()\"\n (keydown.tab)=\"onTab($any($event))\"\n (keydown.escape)=\"dismissHelp()\"\n placeholder=\"Type a command...\"\n [disabled]=\"isProcessing()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n </div>\n </div>\n <div class=\"terminal-output\">\n @for (entry of history(); track entry.result.timestamp) {\n @if (entry.input) {\n <div class=\"terminal-line\">\n <span class=\"prompt\">$</span>\n <span class=\"command-text\">{{ entry.input }}@if ((entry.repeatCount ?? 1) > 1) { <span class=\"repeat-count\">(×{{ entry.repeatCount }})</span>}</span>\n </div>\n }\n @if (entry.result.message) {\n <div class=\"terminal-line\" [class]=\"getSeverityClass(entry.result)\">{{ entry.result.message }}</div>\n }\n }\n </div>\n</div>\n","import { Component, inject, signal } from '@angular/core';\nimport { StatusBar } from '../status-bar/status-bar';\nimport { SideMenu } from '../side-menu/side-menu';\nimport { MainContent } from '../main-content/main-content';\nimport { CommandTerminal } from '../command-terminal/command-terminal';\nimport { ThinkingService } from '../../services/thinking.service';\nimport { CommandService } from '../../services/command.service';\nimport { AuthenticationService } from '../../services/authentication.service';\n\nconst MIN_TERMINAL_HEIGHT = 80;\nconst MAX_TERMINAL_RATIO = 0.6;\nconst DEFAULT_TERMINAL_HEIGHT = 160;\n\n@Component({\n selector: 'shell-root',\n imports: [StatusBar, SideMenu, MainContent, CommandTerminal],\n templateUrl: './shell.html',\n styleUrl: './shell.css',\n})\nexport class Shell {\n readonly #thinkingService = inject(ThinkingService);\n readonly #commandService = inject(CommandService);\n readonly #authService = inject(AuthenticationService);\n readonly isThinking = this.#thinkingService.isThinking;\n readonly isAuthenticated = this.#authService.authenticated;\n readonly helpOverlay = this.#commandService.helpOverlay;\n\n dismissHelp(): void {\n this.#commandService.dismissHelp();\n }\n readonly terminalHeight = signal(`${DEFAULT_TERMINAL_HEIGHT}px`);\n readonly isDragging = signal(false);\n\n #startY = 0;\n #startHeight = DEFAULT_TERMINAL_HEIGHT;\n\n readonly #onMouseMove = (event: MouseEvent) => {\n const deltaY = event.clientY - this.#startY;\n const maxHeight = Math.floor(window.innerHeight * MAX_TERMINAL_RATIO);\n const newHeight = Math.min(maxHeight, Math.max(MIN_TERMINAL_HEIGHT, this.#startHeight - deltaY));\n this.terminalHeight.set(`${newHeight}px`);\n };\n\n readonly #onMouseUp = () => {\n this.isDragging.set(false);\n document.removeEventListener('mousemove', this.#onMouseMove);\n document.removeEventListener('mouseup', this.#onMouseUp);\n };\n\n onResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.#startY = event.clientY;\n this.#startHeight = parseInt(this.terminalHeight(), 10);\n this.isDragging.set(true);\n document.addEventListener('mousemove', this.#onMouseMove);\n document.addEventListener('mouseup', this.#onMouseUp);\n }\n}\n","<div class=\"shell\" [style.--terminal-height]=\"terminalHeight()\" [class.is-dragging]=\"isDragging()\">\n <shell-status-bar class=\"shell-status\" [class.disabled-zone]=\"isThinking()\">\n <ng-content />\n </shell-status-bar>\n @if (isAuthenticated()) {\n <shell-side-menu class=\"shell-menu\" [class.disabled-zone]=\"isThinking()\" />\n }\n <shell-main-content class=\"shell-main\" [class.full-width]=\"!isAuthenticated()\" />\n <div class=\"shell-resize\" [class.dragging]=\"isDragging()\" (mousedown)=\"onResizeStart($event)\"></div>\n <shell-command-terminal class=\"shell-terminal\" [class.disabled-zone]=\"isThinking()\" />\n @if (helpOverlay(); as helpText) {\n <div class=\"help-backdrop\" (click)=\"dismissHelp()\">\n <div class=\"help-panel\" (click)=\"$event.stopPropagation()\" role=\"dialog\" aria-label=\"Command help\">\n <div class=\"help-panel-header\">\n <span class=\"help-panel-title\">Help</span>\n <button class=\"help-panel-close\" type=\"button\" (click)=\"dismissHelp()\" aria-label=\"Close help\">✕</button>\n </div>\n <div class=\"help-panel-content\">{{ helpText }}</div>\n <div class=\"help-panel-footer\">\n <span>Tip: for most commands you can swap the first and second words — e.g. \"disable user\" works the same as \"user disable\"</span>\n <span class=\"help-panel-footer-dismiss\">Press Escape, click outside, or start typing to close</span>\n </div>\n </div>\n </div>\n }\n</div>\n","import { Component, inject, signal } from '@angular/core';\nimport { AutofillEvent, TextFieldModule } from '@angular/cdk/text-field';\nimport { Credentials, validateCredentials } from '@franzzemen/identity';\nimport { PASSWORD_REGEX, USERNAME_REGEX } from '@franzzemen/utility';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatInput, MatInputModule } from '@angular/material/input';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Router } from '@angular/router';\nimport { DatePipe } from '@angular/common';\nimport { AuthenticationService } from '../../services/authentication.service';\nimport { CommandService } from '../../services/command.service';\nimport { TerminalFocusService } from '../../services/terminal-focus.service';\nimport { RegexValidatorDirective } from '../../directives/regex-validator.directive';\nimport { SHELL_APP_NAME } from '../../tokens/shell-tokens';\n\n@Component({\n selector: 'shell-login',\n templateUrl: './login.html',\n styleUrl: './login.css',\n imports: [\n FormsModule,\n MatFormField,\n MatLabel,\n MatInput,\n MatInputModule,\n MatButtonModule,\n MatCheckboxModule,\n MatIconModule,\n RegexValidatorDirective,\n TextFieldModule,\n DatePipe,\n ],\n})\nexport class Login {\n model: Credentials = { username: '', password: '' };\n submitted = false;\n hide = signal(true);\n takeover = signal(true);\n errors: { ndx: number; message: string }[] = [];\n\n protected readonly USERNAME_REGEX = USERNAME_REGEX;\n protected readonly PASSWORD_REGEX = PASSWORD_REGEX;\n protected readonly appName = inject(SHELL_APP_NAME, { optional: true }) ?? 'Application';\n\n readonly #commandService = inject(CommandService);\n readonly #terminalFocusService = inject(TerminalFocusService);\n\n constructor(\n protected authenticationService: AuthenticationService,\n protected router: Router,\n ) {}\n\n onAutofill(event: AutofillEvent, inputEl: HTMLInputElement): void {\n if (event.isAutofilled) {\n setTimeout(() => {\n const length = inputEl.value.length;\n inputEl.setSelectionRange(length, length);\n });\n }\n }\n\n clickEvent(event: MouseEvent): void {\n this.hide.set(!this.hide());\n event.stopPropagation();\n }\n\n onSubmit(event: Event): void {\n this.errors = [];\n event.preventDefault();\n this.submitted = true;\n const result = validateCredentials(this.model);\n if (result === true) {\n this.#doLogin(this.takeover());\n } else {\n for (let ndx = 0; ndx < result.length; ndx++) {\n this.errors.push({\n ndx,\n message: `${result[ndx].message ?? 'Unknown error'}: ${result[ndx].field ?? 'Unknown field'} ${result[ndx].type ?? 'Unknown type'} Expected: ${result[ndx].expected} Actual: ${result[ndx].actual}`,\n });\n }\n this.submitted = false;\n }\n }\n\n onTakeOver(): void {\n this.errors = [];\n this.#commandService.execute('login --force');\n }\n\n onCancelConflict(): void {\n this.authenticationService.clearConflict();\n this.submitted = false;\n }\n\n #doLogin(force: boolean): void {\n this.authenticationService\n .login(this.model, force)\n .then(() => {\n this.#commandService.echoCommand(`login ${this.model.username}`);\n this.router.navigate(['/']).then(() => {\n setTimeout(() => this.#terminalFocusService.requestFocus());\n }).catch(console.error);\n })\n .catch((err) => {\n if (err !== 'conflict') {\n this.errors.push({ ndx: 0, message: typeof err === 'string' ? err : 'Unable to login' });\n }\n this.submitted = false;\n });\n }\n}\n","@let usernameRegex = USERNAME_REGEX;\n@let passwordRegex = PASSWORD_REGEX;\n<div class=\"login-container\">\n <div class=\"login-header\">\n <h2 class=\"text-text-primary\">{{ appName }}</h2>\n <p class=\"text-secondary-info\">Sign in to continue</p>\n </div>\n <form #loginForm=\"ngForm\" (ngSubmit)=\"onSubmit($event)\" class=\"login-form\">\n <mat-form-field appearance=\"outline\" class=\"login-field\">\n <mat-label>Username</mat-label>\n <input\n #usernameInput\n matInput\n placeholder=\"Enter username\"\n [(ngModel)]=\"model.username\"\n name=\"username\"\n [disabled]=\"submitted\"\n required\n regexValidator\n [regex]=\"usernameRegex\"\n (cdkAutofill)=\"onAutofill($event, usernameInput)\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"login-field\">\n <mat-label>Password</mat-label>\n <input\n #passwordInput\n matInput\n placeholder=\"Enter password\"\n [type]=\"hide() ? 'password' : 'text'\"\n [(ngModel)]=\"model.password\"\n name=\"password\"\n [disabled]=\"submitted\"\n regexValidator\n [regex]=\"passwordRegex\"\n (cdkAutofill)=\"onAutofill($event, passwordInput)\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clickEvent($event)\"\n [attr.aria-label]=\"'Hide password'\"\n [attr.aria-pressed]=\"hide()\"\n >\n <mat-icon>{{ hide() ? 'visibility_off' : 'visibility' }}</mat-icon>\n </button>\n </mat-form-field>\n <mat-checkbox\n class=\"login-takeover\"\n name=\"takeover\"\n [checked]=\"takeover()\"\n (change)=\"takeover.set($event.checked)\"\n [disabled]=\"submitted\"\n >\n Takeover session if logged in elsewhere\n </mat-checkbox>\n <button mat-flat-button type=\"submit\" [disabled]=\"submitted\" class=\"login-button\">\n Login\n </button>\n </form>\n @if (errors.length > 0) {\n <div class=\"login-errors\">\n @for (error of errors; track error.ndx) {\n <div class=\"login-error text-loss\">{{ error.message }}</div>\n }\n </div>\n }\n @if (authenticationService.conflictSessions(); as sessions) {\n <div class=\"login-conflict\">\n @for (session of sessions; track $index) {\n <p class=\"text-secondary-info\">\n Already logged in from <strong>{{ session.appContext }}</strong>\n since {{ session.startEpoch | date:'short' }}.\n </p>\n }\n <p class=\"text-secondary-info\">Log in here and end that session?</p>\n <div class=\"login-conflict-actions\">\n <button mat-stroked-button type=\"button\" (click)=\"onCancelConflict()\">Cancel</button>\n <button mat-flat-button type=\"button\" (click)=\"onTakeOver()\">Take Over</button>\n </div>\n </div>\n }\n</div>\n","import { Component, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\n\nexport interface ConfirmDialogData {\n title: string;\n message: string;\n warningMessage?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n}\n\n@Component({\n selector: 'shell-confirm-dialog',\n imports: [MatDialogModule, MatButtonModule],\n template: `\n <h2 mat-dialog-title>{{ data.title }}</h2>\n <mat-dialog-content>\n <p>{{ data.message }}</p>\n @if (data.warningMessage) {\n <p class=\"warning-message\">{{ data.warningMessage }}</p>\n }\n </mat-dialog-content>\n <mat-dialog-actions align=\"end\">\n <button mat-button (click)=\"dialogRef.close(false)\">{{ data.cancelLabel ?? 'Cancel' }}</button>\n <button mat-flat-button color=\"warn\" (click)=\"dialogRef.close(true)\">{{ data.confirmLabel ?? 'Confirm' }}</button>\n </mat-dialog-actions>\n `,\n styles: [`\n :host { display: block; }\n .warning-message { color: var(--color-warning); margin-top: 8px; }\n `],\n})\nexport class ConfirmDialog {\n readonly data = inject<ConfirmDialogData>(MAT_DIALOG_DATA);\n readonly dialogRef = inject(MatDialogRef<ConfirmDialog>);\n}\n","/*\n * Public API surface for @franzzemen/brokenstock-shell\n */\n\n// Types\nexport * from './lib/types/command.types';\nexport * from './lib/types/menu.types';\n\n// Tokens & config\nexport * from './lib/tokens/shell-tokens';\nexport * from './lib/provide-shell-config';\n\n// Guards\nexport * from './lib/guards/auth.guard';\n\n// Interceptors\nexport * from './lib/interceptors/auth.interceptor';\n\n// Directives\nexport * from './lib/directives/regex-validator.directive';\n\n// Services\nexport * from './lib/services/thinking.service';\nexport * from './lib/services/theme.service';\nexport * from './lib/services/terminal-focus.service';\nexport * from './lib/services/keyboard-shortcut.service';\nexport * from './lib/services/authentication.service';\nexport * from './lib/services/command-registry.service';\nexport * from './lib/services/command.service';\n\n// Commands\nexport * from './lib/commands/command.utils';\n\n// Components\nexport * from './lib/components/shell/shell';\nexport * from './lib/components/side-menu/side-menu';\nexport * from './lib/components/status-bar/status-bar';\nexport * from './lib/components/main-content/main-content';\nexport * from './lib/components/command-terminal/command-terminal';\nexport * from './lib/components/login/login';\nexport * from './lib/components/confirm-dialog/confirm-dialog';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.AuthenticationService","i2"],"mappings":"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"}
1
+ {"version":3,"file":"franzzemen-brokenstock-shell.mjs","sources":["../../src/lib/tokens/shell-tokens.ts","../../src/lib/provide-shell-config.ts","../../src/lib/services/thinking.service.ts","../../src/lib/services/authentication.service.ts","../../src/lib/guards/auth.guard.ts","../../src/lib/interceptors/auth.interceptor.ts","../../src/lib/directives/regex-validator.directive.ts","../../src/lib/services/theme.service.ts","../../src/lib/services/terminal-focus.service.ts","../../src/lib/services/keyboard-shortcut.service.ts","../../src/lib/services/command-registry.service.ts","../../src/lib/commands/command.utils.ts","../../src/lib/services/command.service.ts","../../src/lib/components/status-bar/status-bar.ts","../../src/lib/components/status-bar/status-bar.html","../../src/lib/components/side-menu/side-menu.ts","../../src/lib/components/side-menu/side-menu.html","../../src/lib/components/main-content/main-content.ts","../../src/lib/components/main-content/main-content.html","../../src/lib/components/command-terminal/command-terminal.ts","../../src/lib/components/command-terminal/command-terminal.html","../../src/lib/components/shell/shell.ts","../../src/lib/components/shell/shell.html","../../src/lib/components/login/login.ts","../../src/lib/components/login/login.html","../../src/lib/components/confirm-dialog/confirm-dialog.ts","../../src/public-api.ts","../../src/franzzemen-brokenstock-shell.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { CommandDefinition } from '../types/command.types';\nimport { MenuItem } from '../types/menu.types';\n\nexport interface ShellAuthUrls {\n login: string;\n logout: string;\n refresh: string;\n}\n\nexport const SHELL_APP_NAME = new InjectionToken<string>('SHELL_APP_NAME');\nexport const SHELL_MENU_ITEMS = new InjectionToken<MenuItem[]>('SHELL_MENU_ITEMS');\nexport const SHELL_AUTH_URLS = new InjectionToken<ShellAuthUrls>('SHELL_AUTH_URLS');\n\n/**\n * App-specific commands to register alongside the built-in command set.\n * Provide via provideShellConfig().\n */\nexport const SHELL_COMMANDS = new InjectionToken<CommandDefinition[]>('SHELL_COMMANDS');\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { CommandDefinition } from './types/command.types';\nimport { MenuItem } from './types/menu.types';\nimport { SHELL_APP_NAME, SHELL_AUTH_URLS, SHELL_COMMANDS, SHELL_MENU_ITEMS, ShellAuthUrls } from './tokens/shell-tokens';\n\nexport interface ShellConfig {\n appName: string;\n menuItems: MenuItem[];\n authUrls: ShellAuthUrls;\n commands?: CommandDefinition[];\n}\n\nexport function provideShellConfig(config: ShellConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: SHELL_APP_NAME, useValue: config.appName },\n { provide: SHELL_MENU_ITEMS, useValue: config.menuItems },\n { provide: SHELL_AUTH_URLS, useValue: config.authUrls },\n { provide: SHELL_COMMANDS, useValue: config.commands ?? [] },\n ]);\n}\n","import { Injectable, signal, computed } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ThinkingService {\n readonly #activeCount = signal(0);\n\n readonly isThinking = computed(() => this.#activeCount() > 0);\n\n startThinking(): void {\n this.#activeCount.update(c => c + 1);\n }\n\n stopThinking(): void {\n this.#activeCount.update(c => Math.max(0, c - 1));\n }\n\n reset(): void {\n this.#activeCount.set(0);\n }\n}\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { BEARER_TOKEN_REGEX, BearerToken, HttpHeader } from '@franzzemen/utility';\nimport { AuthenticationResponse, Credentials, EffectivePermissions, RoleNames, SessionSummary, UserSession, validateCredentials } from '@franzzemen/identity';\nimport { HttpClient, HttpErrorResponse, HttpResponse } from '@angular/common/http';\nimport { Router } from '@angular/router';\nimport { ThinkingService } from './thinking.service';\nimport { SHELL_AUTH_URLS } from '../tokens/shell-tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthenticationService {\n readonly authenticated = signal(false);\n readonly authenticating = signal(false);\n readonly userSession = signal<UserSession | undefined>(undefined);\n readonly effectivePermissions = signal<EffectivePermissions>({});\n readonly conflictSessions = signal<SessionSummary[] | undefined>(undefined);\n readonly pendingCredentials = signal<Credentials | undefined>(undefined);\n\n #refreshing: Promise<boolean> | null = null;\n #auth: BearerToken = 'Bearer ..' as BearerToken;\n\n readonly #httpClient = inject(HttpClient);\n readonly #thinkingService = inject(ThinkingService);\n readonly #router = inject(Router);\n readonly #authUrls = inject(SHELL_AUTH_URLS);\n\n get auth(): BearerToken {\n return this.#auth;\n }\n\n /** Check if the current user has a specific role. */\n hasRole(roleName: RoleNames): boolean {\n return this.authenticated() && this.userSession()?.roles.includes(roleName) === true;\n }\n\n /** Check if the current user has any of the specified roles. */\n hasAnyRole(roleNames: RoleNames[]): boolean {\n return this.authenticated() && roleNames.some(r => this.userSession()?.roles.includes(r) === true);\n }\n\n refresh(): Promise<boolean> {\n if (this.#refreshing) {\n return this.#refreshing;\n }\n this.#refreshing = this.#doRefresh().finally(() => { this.#refreshing = null; });\n return this.#refreshing;\n }\n\n clearConflict(): void {\n this.conflictSessions.set(undefined);\n this.pendingCredentials.set(undefined);\n }\n\n logout(): void {\n const subscription = this.#httpClient\n .get<void>(this.#authUrls.logout, {\n headers: {\n [HttpHeader.Authorization]: this.#auth,\n [HttpHeader.AppContext]: 'brokenstock',\n },\n })\n .subscribe({\n next: () => {\n this.#clearSession();\n subscription.unsubscribe();\n },\n error: () => {\n this.#thinkingService.reset();\n this.#clearSession();\n },\n });\n }\n\n login(credentials: Credentials, force = false): Promise<void> {\n const validation = validateCredentials(credentials);\n if (validation !== true) {\n return Promise.reject('Invalid credentials');\n }\n this.conflictSessions.set(undefined);\n this.#thinkingService.startThinking();\n return new Promise((resolve, reject) => {\n this.authenticating.set(true);\n const body = force ? {...credentials, force: true} : credentials;\n const subscription = this.#httpClient\n .post<HttpResponse<AuthenticationResponse>>(\n this.#authUrls.login,\n body,\n {\n headers: {\n [HttpHeader.ContentType]: 'application/json',\n [HttpHeader.AppContext]: 'brokenstock',\n },\n observe: 'response',\n responseType: 'json',\n withCredentials: true,\n },\n )\n .subscribe({\n next: (response: HttpResponse<any>) => {\n try {\n const authResponse: AuthenticationResponse = response.body;\n // @ts-ignore\n delete authResponse.session.token;\n this.userSession.set(authResponse.session);\n this.effectivePermissions.set(authResponse.effectivePermissions ?? {});\n const auth = response.headers.get(HttpHeader.Authorization);\n if (!auth || !BEARER_TOKEN_REGEX.test(auth)) {\n reject('Unable to login');\n return;\n }\n this.#auth = auth as BearerToken;\n this.authenticated.set(true);\n this.pendingCredentials.set(undefined);\n resolve();\n } catch {\n reject('Unable to login');\n } finally {\n this.authenticating.set(false);\n subscription.unsubscribe();\n this.#thinkingService.stopThinking();\n }\n },\n error: (err: HttpErrorResponse) => {\n try {\n if (err.status === 409) {\n this.conflictSessions.set(err.error?.activeSessions ?? []);\n this.pendingCredentials.set(credentials);\n reject('conflict');\n } else {\n reject(err.message ?? 'Unable to login');\n }\n } finally {\n this.authenticating.set(false);\n subscription.unsubscribe();\n this.#thinkingService.stopThinking();\n }\n },\n });\n });\n }\n\n async #doRefresh(): Promise<boolean> {\n try {\n const response = await fetch(this.#authUrls.refresh, {\n method: 'POST',\n headers: {\n [HttpHeader.Authorization]: this.#auth,\n [HttpHeader.AppContext]: 'brokenstock',\n },\n credentials: 'include',\n });\n if (!response.ok) return false;\n const auth = response.headers.get(HttpHeader.Authorization);\n if (!auth || !BEARER_TOKEN_REGEX.test(auth)) return false;\n const body: AuthenticationResponse = await response.json();\n this.#auth = auth as BearerToken;\n this.userSession.set(body.session);\n this.effectivePermissions.set(body.effectivePermissions ?? {});\n return true;\n } catch {\n return false;\n }\n }\n\n #clearSession(): void {\n this.authenticated.set(false);\n this.userSession.set(undefined);\n this.effectivePermissions.set({});\n this.conflictSessions.set(undefined);\n this.pendingCredentials.set(undefined);\n this.#auth = 'Bearer ..' as BearerToken;\n this.#router.navigate(['/login']).catch(console.error);\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { AuthenticationService } from '../services/authentication.service';\n\nexport const authGuard: CanActivateFn = () => {\n const authService = inject(AuthenticationService);\n const router = inject(Router);\n\n if (authService.authenticated()) {\n return true;\n }\n return router.createUrlTree(['/login']);\n};\n","import { HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { from, switchMap, catchError, tap, throwError } from 'rxjs';\nimport { AuthenticationService } from '../services/authentication.service';\nimport { ThinkingService } from '../services/thinking.service';\nimport { SHELL_AUTH_URLS } from '../tokens/shell-tokens';\nimport { HttpHeader } from '@franzzemen/utility';\n\nexport const authInterceptor: HttpInterceptorFn = (req, next) => {\n const authService = inject(AuthenticationService);\n const thinkingService = inject(ThinkingService);\n const authUrls = inject(SHELL_AUTH_URLS);\n const router = inject(Router);\n\n return next(req).pipe(\n tap({\n next: (event) => {\n if ('headers' in event && event.headers?.get('x-permissions-stale') === 'true') {\n authService.refresh();\n }\n },\n }),\n catchError((error) => {\n const isRefreshOrLogin = req.url === authUrls.refresh || req.url === authUrls.login;\n if (error.status === 401 && !isRefreshOrLogin) {\n return from(authService.refresh()).pipe(\n switchMap((refreshed) => {\n if (refreshed) {\n const retryReq = req.clone({\n setHeaders: { [HttpHeader.Authorization]: authService.auth },\n });\n return next(retryReq);\n }\n thinkingService.reset();\n authService.authenticated.set(false);\n authService.userSession.set(undefined);\n router.navigate(['/login']);\n return throwError(() => error);\n }),\n catchError(() => {\n thinkingService.reset();\n authService.authenticated.set(false);\n authService.userSession.set(undefined);\n router.navigate(['/login']);\n return throwError(() => error);\n }),\n );\n }\n return throwError(() => error);\n }),\n );\n};\n","import { Directive, input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\n\n@Directive({\n selector: '[regexValidator]',\n providers: [{ provide: NG_VALIDATORS, useExisting: RegexValidatorDirective, multi: true }],\n})\nexport class RegexValidatorDirective implements Validator {\n regex = input(/^[A-Z0-9._%+-@!?]{4,64}$/i);\n\n validate(control: AbstractControl): ValidationErrors | null {\n if (!control.value || !this.regex().test(control.value)) {\n return { regexValidator: { value: control.value } };\n }\n return null;\n }\n}\n","import { Injectable, signal, computed } from '@angular/core';\n\nexport type ThemeMode = 'dark';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n readonly mode = signal<ThemeMode>('dark');\n readonly isDark = computed(() => this.mode() === 'dark');\n}\n","import { Injectable, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class TerminalFocusService {\n readonly focusRequested = signal(0);\n\n requestFocus(): void {\n this.focusRequested.update(v => v + 1);\n }\n}\n","import { computed, inject, Injectable, NgZone, signal } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { TerminalFocusService } from './terminal-focus.service';\n\nexport interface ShortcutRegistration {\n key: string;\n modifier?: 'Alt';\n action: () => void;\n description: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class KeyboardShortcutService {\n readonly #groups = new Map<string, ShortcutRegistration[]>();\n readonly #activeGroupId = signal<string | null>(null);\n\n readonly #document = inject(DOCUMENT);\n readonly #zone = inject(NgZone);\n readonly #focusService = inject(TerminalFocusService);\n\n readonly helpVisible = signal(false);\n\n readonly activeShortcuts = computed(() => {\n const groupId = this.#activeGroupId();\n if (!groupId) return null;\n const shortcuts = this.#groups.get(groupId);\n if (!shortcuts) return null;\n return { groupId, shortcuts };\n });\n\n constructor() {\n this.#zone.runOutsideAngular(() => {\n this.#document.addEventListener('keydown', (event: KeyboardEvent) => {\n this.#handleKeydown(event);\n });\n });\n }\n\n registerGroup(groupId: string, shortcuts: ShortcutRegistration[]): void {\n this.#groups.set(groupId, shortcuts);\n this.#activeGroupId.set(groupId);\n }\n\n unregisterGroup(groupId: string): void {\n this.#groups.delete(groupId);\n if (this.#activeGroupId() === groupId) {\n const keys = [...this.#groups.keys()];\n this.#activeGroupId.set(keys.length > 0 ? keys[keys.length - 1] : null);\n }\n }\n\n toggleHelp(): void {\n this.helpVisible.update(v => !v);\n }\n\n #handleKeydown(event: KeyboardEvent): boolean {\n const activeId = this.#activeGroupId();\n if (activeId) {\n const shortcuts = this.#groups.get(activeId);\n if (shortcuts) {\n const match = shortcuts.find(s => {\n if (s.modifier === 'Alt') return event.altKey && s.key === event.key;\n return !event.altKey && !event.ctrlKey && !event.metaKey && s.key === event.key;\n });\n if (match) {\n event.preventDefault();\n this.#zone.run(() => match.action());\n return true;\n }\n }\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n this.#zone.run(() => {\n this.helpVisible.set(false);\n this.#focusService.requestFocus();\n });\n return true;\n }\n\n if (!event.altKey) return false;\n\n if (event.key === '?' || event.key === '/') {\n event.preventDefault();\n this.#zone.run(() => this.toggleHelp());\n return true;\n }\n\n return false;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { CommandDefinition } from '../types/command.types';\nimport { SHELL_COMMANDS } from '../tokens/shell-tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class CommandRegistryService {\n private readonly commands = new Map<string, CommandDefinition>();\n\n constructor() {\n const appCommands = inject(SHELL_COMMANDS, { optional: true }) ?? [];\n for (const cmd of appCommands) {\n this.register(cmd);\n }\n }\n\n register(command: CommandDefinition): void {\n this.commands.set(command.name, command);\n }\n\n get(name: string): CommandDefinition | undefined {\n return this.commands.get(name);\n }\n\n getAll(): CommandDefinition[] {\n return Array.from(this.commands.values());\n }\n\n /**\n * Returns command name suggestions for tab-completion.\n * Built-ins (clear, help) are included when authenticated.\n */\n getSuggestions(prefix: string, isAuthenticated: boolean): string[] {\n if (!prefix) return [];\n if (!isAuthenticated) {\n return 'login'.startsWith(prefix) && 'login' !== prefix ? ['login'] : [];\n }\n const builtIns = ['clear', 'help'];\n const registered = [...this.commands.values()].map(c => c.name);\n return [...builtIns, ...registered]\n .filter(name => name.startsWith(prefix) && name !== prefix)\n .sort();\n }\n}\n","/**\n * Quote-aware command tokenizer. Treats \"...\" as single tokens and strips enclosing quotes.\n */\nexport function tokenize(input: string): string[] {\n return (input.match(/(?:\"[^\"]*\"|\\S)+/g) ?? []).map(t => t.replace(/\"([^\"]*)\"/g, '$1'));\n}\n\nexport const CLEAR_USAGE =\n 'clear\\n\\n' +\n ' Clears the terminal history.\\n' +\n ' No arguments required.';\n\nexport const HELP_USAGE =\n 'help [command]\\n\\n' +\n ' With no arguments, lists all available commands.\\n' +\n ' With a command name, shows detailed usage for that command.\\n\\n' +\n ' Arguments:\\n' +\n ' [command] Optional command name to show detailed help for';\n","import { inject, Injectable, signal, computed, effect } from '@angular/core';\nimport { z } from 'zod/v4';\nimport { CommandResult, CommandHistoryEntry, Severity } from '../types/command.types';\nimport { tokenize, CLEAR_USAGE, HELP_USAGE } from '../commands/command.utils';\nimport { CommandRegistryService } from './command-registry.service';\nimport { AuthenticationService } from './authentication.service';\n\nexport type { CommandResult, CommandHistoryEntry, Severity };\n\nconst CommandInputSchema = z.string().trim().min(1, 'Command cannot be empty');\n\n@Injectable({ providedIn: 'root' })\nexport class CommandService {\n readonly history = signal<CommandHistoryEntry[]>([]);\n readonly currentInput = signal('');\n readonly isProcessing = signal(false);\n readonly helpOverlay = signal<string | null>(null);\n\n private readonly authService = inject(AuthenticationService);\n private readonly registry = inject(CommandRegistryService);\n\n constructor() {\n effect(() => {\n if (!this.authService.authenticated()) {\n this.history.set([]);\n }\n });\n }\n\n readonly lastResult = computed(() => {\n const h = this.history();\n return h.length > 0 ? h[h.length - 1].result : null;\n });\n\n dismissHelp(): void {\n this.helpOverlay.set(null);\n }\n\n echoCommand(input: string): void {\n if (this.#coalesce(input)) return;\n this.history.update(h => [...h, {\n input,\n result: { success: true, message: '', timestamp: new Date() },\n repeatCount: 1,\n }]);\n }\n\n pushNotification(notification: { message: string; severity: Severity }): void {\n this.history.update(h => [...h, {\n input: '',\n result: {\n success: notification.severity !== 'error',\n message: notification.message,\n timestamp: new Date(),\n severity: notification.severity,\n },\n }]);\n }\n\n execute(rawInput: string): void {\n const validation = CommandInputSchema.safeParse(rawInput);\n if (!validation.success) {\n this.history.update(h => [...h, {\n input: rawInput,\n result: { success: false, message: validation.error.issues[0].message, timestamp: new Date() },\n }]);\n this.currentInput.set('');\n return;\n }\n\n const input = validation.data;\n const parts = tokenize(input);\n const command = parts[0].toLowerCase();\n\n const def = this.registry.get(command);\n const displayInput = def?.sanitizeInput ? def.sanitizeInput(input) : input;\n\n const resultOrPromise = this.#dispatch(command, parts.slice(1));\n this.currentInput.set('');\n\n if (resultOrPromise instanceof Promise) {\n this.isProcessing.set(true);\n resultOrPromise\n .then(result => {\n if (result.isHelp && result.message) {\n this.helpOverlay.set(result.message);\n }\n const historyResult = result.isHelp ? { ...result, message: '' } : result;\n if (!this.#coalesce(displayInput)) {\n this.history.update(h => [...h, { input: displayInput, result: historyResult, repeatCount: 1 }]);\n }\n })\n .finally(() => this.isProcessing.set(false));\n } else {\n if (resultOrPromise.isHelp && resultOrPromise.message) {\n this.helpOverlay.set(resultOrPromise.message);\n }\n const historyResult = resultOrPromise.isHelp ? { ...resultOrPromise, message: '' } : resultOrPromise;\n if (!this.#coalesce(displayInput)) {\n this.history.update(h => [...h, { input: displayInput, result: historyResult, repeatCount: 1 }]);\n }\n }\n }\n\n #coalesce(input: string): boolean {\n if (!input) return false;\n const h = this.history();\n for (let i = h.length - 1; i >= 0; i--) {\n if (h[i].input) {\n if (h[i].input === input) {\n this.history.update(history => {\n const updated = [...history];\n updated[i] = { ...updated[i], repeatCount: (updated[i].repeatCount ?? 1) + 1 };\n return updated;\n });\n return true;\n }\n return false;\n }\n }\n return false;\n }\n\n #dispatch(command: string, args: string[]): CommandResult | Promise<CommandResult> {\n // Normalize \"help <command>\" → \"<command> help\" so auth and dispatch rules apply uniformly\n if (command === 'help' && args.length > 0 && args[0].toLowerCase() !== 'help') {\n [command, args] = [args[0].toLowerCase(), ['help']];\n }\n\n const hasHelp = args.some(a => a.toLowerCase() === 'help');\n const isAuthenticated = this.authService.authenticated();\n\n if (!isAuthenticated && command !== 'login') {\n return { success: false, message: 'Not logged in. Use \"login\" to authenticate.', timestamp: new Date() };\n }\n\n if (command === 'clear') {\n if (hasHelp) return { success: true, message: CLEAR_USAGE, timestamp: new Date(), isHelp: true };\n this.history.set([]);\n return { success: true, message: '', timestamp: new Date() };\n }\n\n if (command === 'help') {\n const target = args[0]?.toLowerCase();\n if (target) return this.#commandHelp(target);\n const registered = this.registry.getAll();\n const lines = [\n ' clear — Clear terminal history',\n ' help — List available commands',\n ...registered.map(c => ` ${c.name} — ${c.description}`),\n ];\n return {\n success: true,\n message: 'Available commands:\\n' + lines.join('\\n') + '\\n\\nType \"help <command>\" or \"<command> help\" for detailed usage.',\n timestamp: new Date(),\n isHelp: true,\n };\n }\n\n let def = this.registry.get(command);\n if (!def) {\n // Try swapping the first two tokens: \"disable user foo\" → \"user disable foo\"\n const swapped = args[0]?.toLowerCase();\n if (swapped && this.registry.get(swapped)) {\n def = this.registry.get(swapped)!;\n args = [command, ...args.slice(1)];\n command = swapped;\n } else {\n return { success: false, message: `Unknown command: ${command}`, timestamp: new Date() };\n }\n }\n\n if (hasHelp) {\n return { success: true, message: def.usage, timestamp: new Date(), isHelp: true };\n }\n\n const validation = def.argsSchema.safeParse(args);\n if (!validation.success) {\n return { success: false, message: `Invalid arguments for '${command}': ${validation.error.issues[0].message}`, timestamp: new Date() };\n }\n\n return def.execute(args);\n }\n\n #commandHelp(name: string): CommandResult {\n if (name === 'clear') return { success: true, message: CLEAR_USAGE, timestamp: new Date(), isHelp: true };\n if (name === 'help') return { success: true, message: HELP_USAGE, timestamp: new Date(), isHelp: true };\n const def = this.registry.get(name);\n if (!def) return { success: false, message: `Unknown command: ${name}`, timestamp: new Date() };\n return { success: true, message: def.usage, timestamp: new Date(), isHelp: true };\n }\n}\n","import { Component, computed, inject } from '@angular/core';\nimport { AuthenticationService } from '../../services/authentication.service';\nimport { CommandService } from '../../services/command.service';\nimport { TerminalFocusService } from '../../services/terminal-focus.service';\n\n@Component({\n selector: 'shell-status-bar',\n templateUrl: './status-bar.html',\n styleUrl: './status-bar.css',\n})\nexport class StatusBar {\n readonly #authService = inject(AuthenticationService);\n readonly #focusService = inject(TerminalFocusService);\n readonly #commandService = inject(CommandService);\n\n readonly isAuthenticated = this.#authService.authenticated;\n readonly loginStatus = computed(() =>\n this.#authService.authenticating()\n ? 'Authenticating...'\n : this.#authService.authenticated()\n ? 'Logged in'\n : 'Not logged in',\n );\n\n logout(): void {\n this.#authService.logout();\n this.#commandService.echoCommand('logout');\n this.#focusService.requestFocus();\n }\n}\n","<div class=\"status-bar\">\n <div class=\"status-item\">\n <span class=\"status-label text-secondary-info\">Status:</span>\n @if (isAuthenticated()) {\n <a class=\"status-value text-interactive logout-link\" (click)=\"logout()\">Log Out</a>\n } @else {\n <span class=\"status-value text-loss\">{{ loginStatus() }}</span>\n }\n </div>\n @if (isAuthenticated()) {\n <ng-content />\n }\n</div>\n","import { Component, computed, inject } from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TerminalFocusService } from '../../services/terminal-focus.service';\nimport { CommandService } from '../../services/command.service';\nimport { KeyboardShortcutService } from '../../services/keyboard-shortcut.service';\nimport { SHELL_MENU_ITEMS } from '../../tokens/shell-tokens';\nimport { MenuItem } from '../../types/menu.types';\n\nexport { MenuItem };\n\n@Component({\n selector: 'shell-side-menu',\n imports: [RouterLink, RouterLinkActive, MatIconModule, MatTooltipModule],\n templateUrl: './side-menu.html',\n styleUrl: './side-menu.css',\n})\nexport class SideMenu {\n readonly #focusService = inject(TerminalFocusService);\n readonly #commandService = inject(CommandService);\n readonly #shortcutService = inject(KeyboardShortcutService);\n readonly hasShortcuts = this.#shortcutService.activeShortcuts;\n\n readonly #allMenuItems: MenuItem[] = inject(SHELL_MENU_ITEMS, { optional: true }) ?? [];\n\n readonly menuItems = computed(() =>\n this.#allMenuItems.filter(item => !item.visible || item.visible()),\n );\n\n onMenuClick(item: MenuItem): void {\n if (item.command) {\n this.#commandService.echoCommand(item.command);\n }\n this.#focusService.requestFocus();\n }\n\n toggleHelp(): void {\n this.#shortcutService.toggleHelp();\n }\n}\n","<nav class=\"side-menu\">\n @for (item of menuItems(); track item.route) {\n <a\n class=\"menu-item\"\n [routerLink]=\"item.route\"\n routerLinkActive=\"active\"\n [matTooltip]=\"item.label\"\n matTooltipPosition=\"right\"\n (click)=\"onMenuClick(item)\"\n >\n <mat-icon>{{ item.icon }}</mat-icon>\n </a>\n }\n <div class=\"menu-spacer\"></div>\n @if (hasShortcuts()) {\n <button\n class=\"help-button\"\n matTooltip=\"Keyboard shortcuts\"\n matTooltipPosition=\"right\"\n (click)=\"toggleHelp()\"\n >\n <span class=\"help-modifier\">Alt+</span><span class=\"help-key\">?</span>\n </button>\n }\n</nav>\n","import { Component, inject } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { ThinkingService } from '../../services/thinking.service';\nimport { KeyboardShortcutService } from '../../services/keyboard-shortcut.service';\n\n@Component({\n selector: 'shell-main-content',\n imports: [RouterOutlet, MatProgressSpinnerModule],\n templateUrl: './main-content.html',\n styleUrl: './main-content.css',\n})\nexport class MainContent {\n readonly #thinkingService = inject(ThinkingService);\n readonly #shortcutService = inject(KeyboardShortcutService);\n readonly isThinking = this.#thinkingService.isThinking;\n readonly shortcutHelpVisible = this.#shortcutService.helpVisible;\n readonly activeShortcuts = this.#shortcutService.activeShortcuts;\n\n formatKey(key: string): string {\n const keyMap: Record<string, string> = {\n ArrowUp: '↑', ArrowDown: '↓', ArrowLeft: '←', ArrowRight: '→',\n PageUp: 'PgUp', PageDown: 'PgDn',\n };\n return keyMap[key] ?? key;\n }\n\n closeShortcutHelp(): void {\n this.#shortcutService.helpVisible.set(false);\n }\n}\n","<div class=\"main-content\">\n <div class=\"content-area\">\n <router-outlet />\n </div>\n @if (shortcutHelpVisible() && activeShortcuts()) {\n <div class=\"shortcut-overlay\" (click)=\"closeShortcutHelp()\">\n <div class=\"shortcut-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"shortcut-title text-secondary-info\">{{ activeShortcuts()!.groupId }} shortcuts</div>\n @for (s of activeShortcuts()!.shortcuts; track s.key) {\n <div class=\"shortcut-row\">\n <kbd class=\"shortcut-key\">Alt+{{ formatKey(s.key) }}</kbd>\n <span class=\"shortcut-desc text-text-primary\">{{ s.description }}</span>\n </div>\n }\n <div class=\"shortcut-row shortcut-dismiss\">\n <kbd class=\"shortcut-key\">Alt+?</kbd>\n <span class=\"shortcut-desc text-secondary-info\">or</span>\n <kbd class=\"shortcut-key\">Esc</kbd>\n <span class=\"shortcut-desc text-secondary-info\">dismiss</span>\n </div>\n </div>\n </div>\n }\n @if (isThinking()) {\n <div class=\"thinking-overlay\">\n <mat-spinner diameter=\"48\" />\n </div>\n }\n</div>\n","import { Component, inject, ElementRef, viewChild, effect, afterNextRender, computed } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommandService } from '../../services/command.service';\nimport { CommandRegistryService } from '../../services/command-registry.service';\nimport { AuthenticationService } from '../../services/authentication.service';\nimport { TerminalFocusService } from '../../services/terminal-focus.service';\nimport { CommandResult } from '../../types/command.types';\n\n@Component({\n selector: 'shell-command-terminal',\n imports: [FormsModule],\n templateUrl: './command-terminal.html',\n styleUrl: './command-terminal.css',\n})\nexport class CommandTerminal {\n private readonly commandService = inject(CommandService);\n private readonly registry = inject(CommandRegistryService);\n private readonly authService = inject(AuthenticationService);\n private readonly terminalFocusService = inject(TerminalFocusService);\n\n readonly history = computed(() => [...this.commandService.history()].reverse());\n readonly currentInput = this.commandService.currentInput;\n readonly isProcessing = this.commandService.isProcessing;\n\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('terminalInput');\n\n private tabCycleIndex = -1;\n private lastTabPrefix = '';\n\n readonly ghostText = computed(() => {\n const input = this.currentInput().trim();\n if (!input || input.includes(' ')) return '';\n const prefix = input.toLowerCase();\n const suggestions = this.registry.getSuggestions(prefix, this.authService.authenticated());\n return suggestions.length > 0 ? suggestions[0] : '';\n });\n\n constructor() {\n afterNextRender(() => this.focusInput());\n\n effect(() => {\n if (!this.isProcessing()) {\n setTimeout(() => this.focusInput());\n }\n });\n\n effect(() => {\n this.terminalFocusService.focusRequested();\n setTimeout(() => this.focusInput());\n });\n }\n\n onSubmit(): void {\n const input = this.currentInput();\n if (!input.trim()) return;\n this.commandService.execute(input);\n this.tabCycleIndex = -1;\n this.lastTabPrefix = '';\n this.focusInput();\n }\n\n onInputChange(value: string): void {\n this.currentInput.set(value);\n this.tabCycleIndex = -1;\n this.lastTabPrefix = '';\n if (this.commandService.helpOverlay()) {\n this.commandService.dismissHelp();\n }\n }\n\n dismissHelp(): void {\n this.commandService.dismissHelp();\n }\n\n onTab(event: KeyboardEvent): void {\n event.preventDefault();\n const input = this.currentInput().trim();\n if (!input || input.includes(' ')) return;\n\n const prefix = input.toLowerCase();\n const suggestions = this.registry.getSuggestions(prefix, this.authService.authenticated());\n if (suggestions.length === 0) return;\n\n if (suggestions.length === 1) {\n this.currentInput.set(suggestions[0] + ' ');\n this.tabCycleIndex = -1;\n this.lastTabPrefix = '';\n return;\n }\n\n if (this.lastTabPrefix !== prefix) {\n this.lastTabPrefix = prefix;\n this.tabCycleIndex = -1;\n }\n\n if (event.shiftKey) {\n this.tabCycleIndex = this.tabCycleIndex <= 0 ? suggestions.length - 1 : this.tabCycleIndex - 1;\n } else {\n this.tabCycleIndex = (this.tabCycleIndex + 1) % suggestions.length;\n }\n\n this.currentInput.set(suggestions[this.tabCycleIndex]);\n }\n\n getSeverityClass(result: CommandResult): string {\n if (result.severity === 'info') return 'info';\n if (result.severity === 'warning') return 'warning';\n if (result.severity === 'error' || !result.success) return 'error';\n return '';\n }\n\n focusInput(): void {\n this.inputEl()?.nativeElement.focus();\n }\n}\n","<div class=\"terminal\">\n <div class=\"terminal-input-row\">\n <span class=\"prompt\">$</span>\n <div class=\"input-wrapper\">\n @if (ghostText()) {\n <input\n class=\"ghost-input\"\n type=\"text\"\n [value]=\"ghostText()\"\n disabled\n tabindex=\"-1\"\n aria-hidden=\"true\"\n />\n }\n <input\n #terminalInput\n class=\"terminal-input\"\n type=\"text\"\n [ngModel]=\"currentInput()\"\n (ngModelChange)=\"onInputChange($event)\"\n (keydown.enter)=\"onSubmit()\"\n (keydown.tab)=\"onTab($any($event))\"\n (keydown.escape)=\"dismissHelp()\"\n placeholder=\"Type a command...\"\n [disabled]=\"isProcessing()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n </div>\n </div>\n <div class=\"terminal-output\">\n @for (entry of history(); track entry.result.timestamp) {\n @if (entry.input) {\n <div class=\"terminal-line\">\n <span class=\"prompt\">$</span>\n <span class=\"command-text\">{{ entry.input }}@if ((entry.repeatCount ?? 1) > 1) { <span class=\"repeat-count\">(×{{ entry.repeatCount }})</span>}</span>\n </div>\n }\n @if (entry.result.message) {\n <div class=\"terminal-line\" [class]=\"getSeverityClass(entry.result)\">{{ entry.result.message }}</div>\n }\n }\n </div>\n</div>\n","import { Component, inject, signal } from '@angular/core';\nimport { StatusBar } from '../status-bar/status-bar';\nimport { SideMenu } from '../side-menu/side-menu';\nimport { MainContent } from '../main-content/main-content';\nimport { CommandTerminal } from '../command-terminal/command-terminal';\nimport { ThinkingService } from '../../services/thinking.service';\nimport { CommandService } from '../../services/command.service';\nimport { AuthenticationService } from '../../services/authentication.service';\n\nconst MIN_TERMINAL_HEIGHT = 80;\nconst MAX_TERMINAL_RATIO = 0.6;\nconst DEFAULT_TERMINAL_HEIGHT = 160;\n\n@Component({\n selector: 'shell-root',\n imports: [StatusBar, SideMenu, MainContent, CommandTerminal],\n templateUrl: './shell.html',\n styleUrl: './shell.css',\n})\nexport class Shell {\n readonly #thinkingService = inject(ThinkingService);\n readonly #commandService = inject(CommandService);\n readonly #authService = inject(AuthenticationService);\n readonly isThinking = this.#thinkingService.isThinking;\n readonly isAuthenticated = this.#authService.authenticated;\n readonly helpOverlay = this.#commandService.helpOverlay;\n\n dismissHelp(): void {\n this.#commandService.dismissHelp();\n }\n readonly terminalHeight = signal(`${DEFAULT_TERMINAL_HEIGHT}px`);\n readonly isDragging = signal(false);\n\n #startY = 0;\n #startHeight = DEFAULT_TERMINAL_HEIGHT;\n\n readonly #onMouseMove = (event: MouseEvent) => {\n const deltaY = event.clientY - this.#startY;\n const maxHeight = Math.floor(window.innerHeight * MAX_TERMINAL_RATIO);\n const newHeight = Math.min(maxHeight, Math.max(MIN_TERMINAL_HEIGHT, this.#startHeight - deltaY));\n this.terminalHeight.set(`${newHeight}px`);\n };\n\n readonly #onMouseUp = () => {\n this.isDragging.set(false);\n document.removeEventListener('mousemove', this.#onMouseMove);\n document.removeEventListener('mouseup', this.#onMouseUp);\n };\n\n onResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.#startY = event.clientY;\n this.#startHeight = parseInt(this.terminalHeight(), 10);\n this.isDragging.set(true);\n document.addEventListener('mousemove', this.#onMouseMove);\n document.addEventListener('mouseup', this.#onMouseUp);\n }\n}\n","<div class=\"shell\" [style.--terminal-height]=\"terminalHeight()\" [class.is-dragging]=\"isDragging()\">\n <shell-status-bar class=\"shell-status\" [class.disabled-zone]=\"isThinking()\">\n <ng-content />\n </shell-status-bar>\n @if (isAuthenticated()) {\n <shell-side-menu class=\"shell-menu\" [class.disabled-zone]=\"isThinking()\" />\n }\n <shell-main-content class=\"shell-main\" [class.full-width]=\"!isAuthenticated()\" />\n <div class=\"shell-resize\" [class.dragging]=\"isDragging()\" (mousedown)=\"onResizeStart($event)\"></div>\n <shell-command-terminal class=\"shell-terminal\" [class.disabled-zone]=\"isThinking()\" />\n @if (helpOverlay(); as helpText) {\n <div class=\"help-backdrop\" (click)=\"dismissHelp()\">\n <div class=\"help-panel\" (click)=\"$event.stopPropagation()\" role=\"dialog\" aria-label=\"Command help\">\n <div class=\"help-panel-header\">\n <span class=\"help-panel-title\">Help</span>\n <button class=\"help-panel-close\" type=\"button\" (click)=\"dismissHelp()\" aria-label=\"Close help\">✕</button>\n </div>\n <div class=\"help-panel-content\">{{ helpText }}</div>\n <div class=\"help-panel-footer\">\n <span>Tip: for most commands you can swap the first and second words — e.g. \"disable user\" works the same as \"user disable\"</span>\n <span class=\"help-panel-footer-dismiss\">Press Escape, click outside, or start typing to close</span>\n </div>\n </div>\n </div>\n }\n</div>\n","import { Component, inject, signal } from '@angular/core';\nimport { AutofillEvent, TextFieldModule } from '@angular/cdk/text-field';\nimport { Credentials, validateCredentials } from '@franzzemen/identity';\nimport { PASSWORD_REGEX, USERNAME_REGEX } from '@franzzemen/utility';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatInput, MatInputModule } from '@angular/material/input';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Router } from '@angular/router';\nimport { DatePipe } from '@angular/common';\nimport { AuthenticationService } from '../../services/authentication.service';\nimport { CommandService } from '../../services/command.service';\nimport { TerminalFocusService } from '../../services/terminal-focus.service';\nimport { RegexValidatorDirective } from '../../directives/regex-validator.directive';\nimport { SHELL_APP_NAME } from '../../tokens/shell-tokens';\n\n@Component({\n selector: 'shell-login',\n templateUrl: './login.html',\n styleUrl: './login.css',\n imports: [\n FormsModule,\n MatFormField,\n MatLabel,\n MatInput,\n MatInputModule,\n MatButtonModule,\n MatCheckboxModule,\n MatIconModule,\n RegexValidatorDirective,\n TextFieldModule,\n DatePipe,\n ],\n})\nexport class Login {\n model: Credentials = { username: '', password: '' };\n submitted = false;\n hide = signal(true);\n takeover = signal(true);\n errors: { ndx: number; message: string }[] = [];\n\n protected readonly USERNAME_REGEX = USERNAME_REGEX;\n protected readonly PASSWORD_REGEX = PASSWORD_REGEX;\n protected readonly appName = inject(SHELL_APP_NAME, { optional: true }) ?? 'Application';\n\n readonly #commandService = inject(CommandService);\n readonly #terminalFocusService = inject(TerminalFocusService);\n\n constructor(\n protected authenticationService: AuthenticationService,\n protected router: Router,\n ) {}\n\n onAutofill(event: AutofillEvent, inputEl: HTMLInputElement): void {\n if (event.isAutofilled) {\n setTimeout(() => {\n const length = inputEl.value.length;\n inputEl.setSelectionRange(length, length);\n });\n }\n }\n\n clickEvent(event: MouseEvent): void {\n this.hide.set(!this.hide());\n event.stopPropagation();\n }\n\n onSubmit(event: Event): void {\n this.errors = [];\n event.preventDefault();\n this.submitted = true;\n const result = validateCredentials(this.model);\n if (result === true) {\n this.#doLogin(this.takeover());\n } else {\n for (let ndx = 0; ndx < result.length; ndx++) {\n this.errors.push({\n ndx,\n message: `${result[ndx].message ?? 'Unknown error'}: ${result[ndx].field ?? 'Unknown field'} ${result[ndx].type ?? 'Unknown type'} Expected: ${result[ndx].expected} Actual: ${result[ndx].actual}`,\n });\n }\n this.submitted = false;\n }\n }\n\n onTakeOver(): void {\n this.errors = [];\n this.#commandService.execute('login --force');\n }\n\n onCancelConflict(): void {\n this.authenticationService.clearConflict();\n this.submitted = false;\n }\n\n #doLogin(force: boolean): void {\n this.authenticationService\n .login(this.model, force)\n .then(() => {\n this.#commandService.echoCommand(`login ${this.model.username}`);\n this.router.navigate(['/trades']).then(() => {\n setTimeout(() => this.#terminalFocusService.requestFocus());\n }).catch(console.error);\n })\n .catch((err) => {\n if (err !== 'conflict') {\n this.errors.push({ ndx: 0, message: typeof err === 'string' ? err : 'Unable to login' });\n }\n this.submitted = false;\n });\n }\n}\n","@let usernameRegex = USERNAME_REGEX;\n@let passwordRegex = PASSWORD_REGEX;\n<div class=\"login-container\">\n <div class=\"login-header\">\n <h2 class=\"text-text-primary\">{{ appName }}</h2>\n <p class=\"text-secondary-info\">Sign in to continue</p>\n </div>\n <form #loginForm=\"ngForm\" (ngSubmit)=\"onSubmit($event)\" class=\"login-form\">\n <mat-form-field appearance=\"outline\" class=\"login-field\">\n <mat-label>Username</mat-label>\n <input\n #usernameInput\n matInput\n placeholder=\"Enter username\"\n [(ngModel)]=\"model.username\"\n name=\"username\"\n [disabled]=\"submitted\"\n required\n regexValidator\n [regex]=\"usernameRegex\"\n (cdkAutofill)=\"onAutofill($event, usernameInput)\"\n />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"login-field\">\n <mat-label>Password</mat-label>\n <input\n #passwordInput\n matInput\n placeholder=\"Enter password\"\n [type]=\"hide() ? 'password' : 'text'\"\n [(ngModel)]=\"model.password\"\n name=\"password\"\n [disabled]=\"submitted\"\n regexValidator\n [regex]=\"passwordRegex\"\n (cdkAutofill)=\"onAutofill($event, passwordInput)\"\n />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clickEvent($event)\"\n [attr.aria-label]=\"'Hide password'\"\n [attr.aria-pressed]=\"hide()\"\n >\n <mat-icon>{{ hide() ? 'visibility_off' : 'visibility' }}</mat-icon>\n </button>\n </mat-form-field>\n <mat-checkbox\n class=\"login-takeover\"\n name=\"takeover\"\n [checked]=\"takeover()\"\n (change)=\"takeover.set($event.checked)\"\n [disabled]=\"submitted\"\n >\n Takeover session if logged in elsewhere\n </mat-checkbox>\n <button mat-flat-button type=\"submit\" [disabled]=\"submitted\" class=\"login-button\">\n Login\n </button>\n </form>\n @if (errors.length > 0) {\n <div class=\"login-errors\">\n @for (error of errors; track error.ndx) {\n <div class=\"login-error text-loss\">{{ error.message }}</div>\n }\n </div>\n }\n @if (authenticationService.conflictSessions(); as sessions) {\n <div class=\"login-conflict\">\n @for (session of sessions; track $index) {\n <p class=\"text-secondary-info\">\n Already logged in from <strong>{{ session.appContext }}</strong>\n since {{ session.startEpoch | date:'short' }}.\n </p>\n }\n <p class=\"text-secondary-info\">Log in here and end that session?</p>\n <div class=\"login-conflict-actions\">\n <button mat-stroked-button type=\"button\" (click)=\"onCancelConflict()\">Cancel</button>\n <button mat-flat-button type=\"button\" (click)=\"onTakeOver()\">Take Over</button>\n </div>\n </div>\n }\n</div>\n","import { Component, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\n\nexport interface ConfirmDialogData {\n title: string;\n message: string;\n warningMessage?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n}\n\n@Component({\n selector: 'shell-confirm-dialog',\n imports: [MatDialogModule, MatButtonModule],\n template: `\n <h2 mat-dialog-title>{{ data.title }}</h2>\n <mat-dialog-content>\n <p>{{ data.message }}</p>\n @if (data.warningMessage) {\n <p class=\"warning-message\">{{ data.warningMessage }}</p>\n }\n </mat-dialog-content>\n <mat-dialog-actions align=\"end\">\n <button mat-button (click)=\"dialogRef.close(false)\">{{ data.cancelLabel ?? 'Cancel' }}</button>\n <button mat-flat-button color=\"warn\" (click)=\"dialogRef.close(true)\">{{ data.confirmLabel ?? 'Confirm' }}</button>\n </mat-dialog-actions>\n `,\n styles: [`\n :host { display: block; }\n .warning-message { color: var(--color-warning); margin-top: 8px; }\n `],\n})\nexport class ConfirmDialog {\n readonly data = inject<ConfirmDialogData>(MAT_DIALOG_DATA);\n readonly dialogRef = inject(MatDialogRef<ConfirmDialog>);\n}\n","/*\n * Public API surface for @franzzemen/brokenstock-shell\n */\n\n// Types\nexport * from './lib/types/command.types';\nexport * from './lib/types/menu.types';\n\n// Tokens & config\nexport * from './lib/tokens/shell-tokens';\nexport * from './lib/provide-shell-config';\n\n// Guards\nexport * from './lib/guards/auth.guard';\n\n// Interceptors\nexport * from './lib/interceptors/auth.interceptor';\n\n// Directives\nexport * from './lib/directives/regex-validator.directive';\n\n// Services\nexport * from './lib/services/thinking.service';\nexport * from './lib/services/theme.service';\nexport * from './lib/services/terminal-focus.service';\nexport * from './lib/services/keyboard-shortcut.service';\nexport * from './lib/services/authentication.service';\nexport * from './lib/services/command-registry.service';\nexport * from './lib/services/command.service';\n\n// Commands\nexport * from './lib/commands/command.utils';\n\n// Components\nexport * from './lib/components/shell/shell';\nexport * from './lib/components/side-menu/side-menu';\nexport * from './lib/components/status-bar/status-bar';\nexport * from './lib/components/main-content/main-content';\nexport * from './lib/components/command-terminal/command-terminal';\nexport * from './lib/components/login/login';\nexport * from './lib/components/confirm-dialog/confirm-dialog';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.AuthenticationService","i2"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@franzzemen/brokenstock-shell",
3
- "version": "0.0.14",
3
+ "version": "0.0.16",
4
4
  "description": "Shared Angular shell library for Brokenstock applications",
5
5
  "author": "Franz Zemen",
6
6
  "license": "UNLICENSED",
@@ -33,4 +33,4 @@
33
33
  "dependencies": {
34
34
  "tslib": "^2.3.0"
35
35
  }
36
- }
36
+ }