@franzzemen/brokenstock-shell 0.0.26 → 0.0.28

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@franzzemen/brokenstock-shell",
3
- "version": "0.0.26",
3
+ "version": "0.0.28",
4
4
  "description": "Shared Angular shell library for Brokenstock applications",
5
5
  "author": "Franz Zemen",
6
6
  "license": "UNLICENSED",
@@ -10,6 +10,13 @@
10
10
  "rxjs": "~7.8.0",
11
11
  "zod": "^4.3.6"
12
12
  },
13
+ "dependencies": {
14
+ "front-matter": "^4.0.2",
15
+ "fuse.js": "^7.3.0",
16
+ "marked": "^18.0.3",
17
+ "marked-gfm-heading-id": "^4.1.4",
18
+ "tslib": "^2.3.0"
19
+ },
13
20
  "module": "fesm2022/franzzemen-brokenstock-shell.mjs",
14
21
  "typings": "types/franzzemen-brokenstock-shell.d.ts",
15
22
  "exports": {
@@ -22,8 +29,5 @@
22
29
  }
23
30
  },
24
31
  "sideEffects": false,
25
- "type": "module",
26
- "dependencies": {
27
- "tslib": "^2.3.0"
28
- }
32
+ "type": "module"
29
33
  }
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod/v4';
2
2
  import * as _angular_core from '@angular/core';
3
- import { InjectionToken, EnvironmentProviders } from '@angular/core';
3
+ import { InjectionToken, EnvironmentProviders, ElementRef } from '@angular/core';
4
4
  import { CanActivateFn, Router } from '@angular/router';
5
5
  import { HttpInterceptorFn } from '@angular/common/http';
6
6
  import { Validator, AbstractControl, ValidationErrors } from '@angular/forms';
@@ -86,6 +86,425 @@ declare class RegexValidatorDirective implements Validator {
86
86
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RegexValidatorDirective, "[regexValidator]", never, { "regex": { "alias": "regex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
87
87
  }
88
88
 
89
+ /**
90
+ * Shared types for the FAQ help system.
91
+ *
92
+ * Manifest is generated by the build-time validator (E9) and read at runtime
93
+ * by FaqContentLoader (E1) and FaqService (E2).
94
+ */
95
+ type FaqAudience = 'public' | 'authenticated';
96
+ type FaqRenderContext = 'modal' | 'page';
97
+ /** Raw frontmatter as authored in the `.md` file. */
98
+ interface FaqFrontmatter {
99
+ title: string;
100
+ category: string;
101
+ order?: number;
102
+ audience?: FaqAudience;
103
+ 'image-prefix'?: string;
104
+ description?: string;
105
+ 'seo-ready'?: boolean;
106
+ }
107
+ /** One row in the generated manifest — normalized form of frontmatter + file path. */
108
+ interface FaqEntry {
109
+ /** Dot-notation key, e.g. "trade.segments". */
110
+ key: string;
111
+ title: string;
112
+ category: string;
113
+ order: number;
114
+ audience: FaqAudience;
115
+ description?: string;
116
+ seoReady: boolean;
117
+ imagePrefix?: string;
118
+ /**
119
+ * Path to the source file relative to `/assets/faq/`, without `.md`.
120
+ * Example: `trade/segments` (subdirs allowed; key path-separator is `.`,
121
+ * file path-separator is `/`).
122
+ */
123
+ file: string;
124
+ }
125
+ interface FaqManifest {
126
+ /** ISO timestamp set by the validator at generation time. */
127
+ generatedAt: string;
128
+ entries: FaqEntry[];
129
+ }
130
+ interface ParsedFaq {
131
+ frontmatter: FaqFrontmatter;
132
+ body: string;
133
+ }
134
+ interface FaqRenderOptions {
135
+ context: FaqRenderContext;
136
+ /**
137
+ * Optional override for the entry's `image-prefix` frontmatter.
138
+ * When set, relative image hrefs are prefixed with this string.
139
+ */
140
+ imagePrefix?: string;
141
+ }
142
+
143
+ /**
144
+ * Pluggable content source for FAQ markdown + manifest.
145
+ *
146
+ * Default implementation is `HttpFaqContentLoader`, which fetches from
147
+ * `/assets/faq/manifest.json` and `/assets/faq/<file>.md`. Consumer apps
148
+ * may override (e.g. broken-stock-admin pulling from an internal source),
149
+ * but most apps will just use the HTTP default.
150
+ */
151
+ interface FaqContentLoader {
152
+ /** Loads (and may cache) the manifest. Idempotent. */
153
+ loadManifest(): Promise<FaqManifest>;
154
+ /**
155
+ * Resolves the manifest entry for `key`, then loads its .md body.
156
+ * Returns `null` when the key is not in the manifest.
157
+ */
158
+ loadContent(key: string): Promise<string | null>;
159
+ }
160
+ declare const FAQ_CONTENT_LOADER: InjectionToken<FaqContentLoader>;
161
+
162
+ /**
163
+ * Stateless markdown renderer for FAQ content.
164
+ *
165
+ * Two responsibilities:
166
+ * 1. Split a `.md` file into `{ frontmatter, body }` (front-matter parser).
167
+ * 2. Render the body to HTML via marked with a context-aware link hook:
168
+ * - `faq:<key>` — in-modal nav (modal) | `<a href="/help/<file>">` (page)
169
+ * - `app:/path` — close-modal-and-route (modal) | `<a href="/path">` (page)
170
+ * - `http(s)://...` — external, target=_blank rel=noopener (both)
171
+ * - `#anchor` — intra-page scroll (both)
172
+ *
173
+ * In modal context, links are emitted with `data-faq-href` / `data-faq-kind`
174
+ * sentinels so the modal's click handler (E5) can intercept and dispatch.
175
+ * In page context, links are emitted as plain navigable anchors; the prerendered
176
+ * static HTML can be clicked through directly.
177
+ */
178
+ declare class FaqMarkdownRendererService {
179
+ parse(raw: string): ParsedFaq;
180
+ render(body: string, opts: FaqRenderOptions): string;
181
+ private buildRenderer;
182
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FaqMarkdownRendererService, never>;
183
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<FaqMarkdownRendererService>;
184
+ }
185
+
186
+ /**
187
+ * Default FaqContentLoader. Reads the build-generated manifest from
188
+ * `/assets/faq/manifest.json` and lazy-fetches individual `.md` files
189
+ * from `/assets/faq/<entry.file>.md`.
190
+ *
191
+ * Manifest is cached after first load; .md fetches are cached per key.
192
+ */
193
+ declare class HttpFaqContentLoader implements FaqContentLoader {
194
+ private readonly http;
195
+ private manifestPromise;
196
+ private readonly contentCache;
197
+ loadManifest(): Promise<FaqManifest>;
198
+ loadContent(key: string): Promise<string | null>;
199
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HttpFaqContentLoader, never>;
200
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<HttpFaqContentLoader>;
201
+ }
202
+
203
+ interface FaqRegistrationHandle {
204
+ /** Call from the component's destroy hook (or DestroyRef) to clear the registration. */
205
+ deregister(): void;
206
+ }
207
+ interface FaqResolution {
208
+ /** The key that produced a content match, or `null` when nothing matched. */
209
+ key: string | null;
210
+ /** Raw .md content for `key`, or `null` when nothing matched. */
211
+ content: string | null;
212
+ /** The entry whose content was returned, or `null` when nothing matched. */
213
+ entry: FaqEntry | null;
214
+ /**
215
+ * The chain of keys actually attempted, in order
216
+ * (e.g. `["trade.segments", "trade", "index"]`).
217
+ */
218
+ attempted: string[];
219
+ }
220
+ /**
221
+ * Central FAQ state + resolution service.
222
+ *
223
+ * Responsibilities:
224
+ * - Track the current route's FAQ key (set by components on activation /
225
+ * tab change via `register()`).
226
+ * - Lazy-load and cache the FAQ manifest from the configured FaqContentLoader.
227
+ * - Resolve a dot-notation key against the manifest with parent fallback,
228
+ * audience filtering, and `index` as the terminal fallback.
229
+ */
230
+ declare class FaqService {
231
+ private readonly loader;
232
+ private readonly history;
233
+ private readonly auth;
234
+ private readonly _currentFaqKey;
235
+ /** Component-set current key. Bare `faq` opens at this key. */
236
+ readonly currentFaqKey: _angular_core.Signal<string | null>;
237
+ private readonly _manifest;
238
+ readonly manifest: _angular_core.Signal<FaqManifest | null>;
239
+ readonly entries: _angular_core.Signal<FaqEntry[]>;
240
+ private readonly _modalOpen;
241
+ readonly modalOpen: _angular_core.Signal<boolean>;
242
+ private readonly _activeEntry;
243
+ readonly activeEntry: _angular_core.Signal<FaqEntry | null>;
244
+ private readonly _activeContent;
245
+ readonly activeContent: _angular_core.Signal<string | null>;
246
+ private readonly _activeAttempted;
247
+ readonly activeAttempted: _angular_core.Signal<string[]>;
248
+ private readonly _navigating;
249
+ readonly navigating: _angular_core.Signal<boolean>;
250
+ private readonly _initialSearchTerm;
251
+ readonly initialSearchTerm: _angular_core.Signal<string | null>;
252
+ /** Called by the search UI once it has consumed the pre-fill term. */
253
+ consumeInitialSearchTerm(): void;
254
+ readonly canGoBack: _angular_core.Signal<boolean>;
255
+ readonly canGoForward: _angular_core.Signal<boolean>;
256
+ private manifestPromise;
257
+ /**
258
+ * Triggers manifest load if not already loaded. Idempotent. Subsequent
259
+ * calls return the cached promise.
260
+ */
261
+ ensureManifest(): Promise<FaqManifest>;
262
+ /**
263
+ * Walks the dot-notation fallback chain (`a.b.c` → `a.b` → `a` → `index`)
264
+ * and returns the first entry whose audience allows the caller and whose
265
+ * content loads. Audience filtering: unauthenticated callers only see
266
+ * `audience: public` entries.
267
+ */
268
+ resolveKey(key: string | null, isAuthenticated: boolean): Promise<FaqResolution>;
269
+ /**
270
+ * Component registration. Sets `currentFaqKey`; on `deregister()` the
271
+ * key is cleared only if it still matches (so a sibling tab activating
272
+ * mid-teardown doesn't get its key clobbered).
273
+ */
274
+ register(key: string): FaqRegistrationHandle;
275
+ /**
276
+ * E3 — Open the FAQ modal. If `initialKey` is omitted, falls back to
277
+ * `currentFaqKey` and then to `'index'`. Resolves the key, loads content,
278
+ * and starts an E8 history session so subsequent in-modal nav uses
279
+ * `history.pushState`.
280
+ */
281
+ openModal(initialKey?: string, opts?: {
282
+ searchTerm?: string;
283
+ }): Promise<void>;
284
+ /**
285
+ * Programmatic in-modal nav. Pushes a new history entry and loads `key`
286
+ * into the active slot. Use this for click handlers on `faq:` links and
287
+ * for the TOC sidebar.
288
+ */
289
+ navigateTo(key: string): Promise<void>;
290
+ back(): void;
291
+ forward(): void;
292
+ /**
293
+ * Close button / Esc / backdrop close. Unwinds the FAQ history entries
294
+ * so the underlying app route is left untouched.
295
+ */
296
+ closeModal(): void;
297
+ private finalizeClose;
298
+ private loadIntoActive;
299
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FaqService, never>;
300
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<FaqService>;
301
+ }
302
+ declare function buildFallbackChain(key: string | null): string[];
303
+ declare function audienceAllowed(audience: FaqAudience, isAuthenticated: boolean): boolean;
304
+
305
+ /**
306
+ * E8 — In-modal navigation history.
307
+ *
308
+ * The browser's `history` API is shared by Angular Router and any other
309
+ * code that calls `pushState`. We tag each FAQ entry's state object with
310
+ * `faq: true` so we can distinguish our entries from router/app entries.
311
+ *
312
+ * On open: `pushState({faq:true, faqPosition:0})` once; stack=[initialKey].
313
+ * On in-modal nav: truncate forward, push key, `pushState({faq:true,
314
+ * faqPosition:position})`.
315
+ * On browser back/forward (`popstate`):
316
+ * - If next state has `faq:true` → set position to its `faqPosition`,
317
+ * swap content for `stack[position]`.
318
+ * - If next state lacks `faq:true` (user backed out of the modal entirely)
319
+ * → close modal without further history manipulation.
320
+ * On explicit close (close button / Esc / backdrop): `history.go(-(position+1))`
321
+ * to unwind our entries; suppress in-flight popstates while unwinding;
322
+ * finalize close once we've seen the expected number of popstates.
323
+ */
324
+ declare class FaqHistoryService {
325
+ private readonly _stack;
326
+ private readonly _position;
327
+ readonly stack: _angular_core.Signal<string[]>;
328
+ readonly position: _angular_core.Signal<number>;
329
+ /** True when popstate is processing the unwind kicked off by closeAndUnwind(). */
330
+ private unwinding;
331
+ private unwindRemaining;
332
+ private onUnwindComplete;
333
+ private popstateListener;
334
+ private onInModalNav;
335
+ private onExitModal;
336
+ /**
337
+ * Begin a new FAQ history session. Pushes the initial state entry and
338
+ * starts listening for popstate. Callbacks fire for in-modal navs and
339
+ * for popping out of FAQ entirely.
340
+ */
341
+ begin(initialKey: string, onNav: (key: string) => void, onExit: () => void): void;
342
+ /** Push a new key onto the stack. Truncates any forward history. */
343
+ navigate(key: string): void;
344
+ canGoBack(): boolean;
345
+ canGoForward(): boolean;
346
+ /** Programmatic back — triggers a real browser back so popstate handles UI. */
347
+ back(): void;
348
+ forward(): void;
349
+ /** Currently rendered key. */
350
+ currentKey(): string | null;
351
+ /**
352
+ * Close the modal cleanly by unwinding our FAQ history entries so the
353
+ * underlying app route is left exactly where it was before the modal opened.
354
+ * `onComplete` fires after the unwind settles.
355
+ */
356
+ closeAndUnwind(onComplete: () => void): void;
357
+ private teardown;
358
+ private pushHistoryState;
359
+ private attachListener;
360
+ private detachListener;
361
+ private handlePopState;
362
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FaqHistoryService, never>;
363
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<FaqHistoryService>;
364
+ }
365
+
366
+ interface TocGroup {
367
+ category: string;
368
+ entries: FaqEntry[];
369
+ }
370
+ interface SearchResult {
371
+ key: string;
372
+ title: string;
373
+ category: string;
374
+ snippet: string;
375
+ }
376
+ /**
377
+ * E3 — FAQ modal. Two-pane layout (TOC sidebar + content pane), 80% viewport.
378
+ *
379
+ * E4 — Search uses a lazy-imported `fuse.js` index over title + body,
380
+ * built on first search activation, filtered by audience, cached for the
381
+ * modal session and invalidated on auth state change.
382
+ *
383
+ * E5 — `app:` link clicks close the modal and route to the app path; the
384
+ * returnUrl-aware `authGuard` funnels unauthenticated users through
385
+ * `/login?returnUrl=...`, and `Login` honors returnUrl on success.
386
+ */
387
+ declare class FaqModal {
388
+ readonly devMode: boolean;
389
+ private readonly faq;
390
+ private readonly renderer;
391
+ private readonly auth;
392
+ private readonly router;
393
+ private readonly loader;
394
+ readonly open: _angular_core.Signal<boolean>;
395
+ readonly navigating: _angular_core.Signal<boolean>;
396
+ readonly activeEntry: _angular_core.Signal<FaqEntry | null>;
397
+ readonly attempted: _angular_core.Signal<string[]>;
398
+ readonly canGoBack: _angular_core.Signal<boolean>;
399
+ readonly canGoForward: _angular_core.Signal<boolean>;
400
+ readonly sidebarCollapsed: _angular_core.WritableSignal<boolean>;
401
+ readonly searchMode: _angular_core.WritableSignal<boolean>;
402
+ readonly searchQuery: _angular_core.WritableSignal<string>;
403
+ readonly searchLoading: _angular_core.WritableSignal<boolean>;
404
+ readonly searchResults: _angular_core.WritableSignal<SearchResult[]>;
405
+ private fuse;
406
+ private fuseBuild;
407
+ readonly renderedHtml: _angular_core.Signal<string>;
408
+ readonly toc: _angular_core.Signal<TocGroup[]>;
409
+ contentPaneRef?: ElementRef<HTMLDivElement>;
410
+ constructor();
411
+ onEscape(): void;
412
+ close(): void;
413
+ onBackdropClick(): void;
414
+ stopPropagation(event: Event): void;
415
+ toggleSidebar(): void;
416
+ goBack(): void;
417
+ goForward(): void;
418
+ goIndex(): void;
419
+ toggleSearch(): void;
420
+ onSearchInput(event: Event): void;
421
+ onSearchResultClick(key: string): void;
422
+ onTocClick(key: string): void;
423
+ private ensureSearchIndex;
424
+ private runSearch;
425
+ /**
426
+ * Event-delegated click handler for the rendered content pane.
427
+ * Intercepts our sentinel anchors emitted by FaqMarkdownRendererService.
428
+ */
429
+ onContentClick(event: MouseEvent): void;
430
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FaqModal, never>;
431
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FaqModal, "faq-modal", never, {}, {}, never, never, true, never>;
432
+ }
433
+
434
+ /**
435
+ * Gate for the dev-only FAQ authoring panel (E11).
436
+ *
437
+ * Defaults to Angular's `isDevMode()` so the panel auto-enables in `ng serve`
438
+ * and auto-disables in production builds. Consumers can override with an
439
+ * explicit value (e.g. `!environment.production`, or `true` for a staging
440
+ * diagnostic build) via `{provide: FAQ_DEV_MODE, useValue: ...}`.
441
+ *
442
+ * The panel is loaded via dynamic `import()` and lives in its own lazy chunk;
443
+ * builds where this resolves to `false` never request the chunk.
444
+ */
445
+ declare const FAQ_DEV_MODE: InjectionToken<boolean>;
446
+ /**
447
+ * Optional absolute filesystem root of the consuming app's workspace (e.g.
448
+ * `/Users/foo/dev/broken-stock`). When set, the authoring panel emits
449
+ * `webstorm://open?file=<root>/<relative-path>` deeplinks pointing at the
450
+ * exact source file. When unset, the panel falls back to a relative path.
451
+ */
452
+ declare const FAQ_DEV_WORKSPACE_ROOT: InjectionToken<string>;
453
+ /**
454
+ * Editor URL scheme for the "Open in editor" deeplink. Defaults to WebStorm.
455
+ * Set to `'vscode'` (or any custom scheme handler) per consuming app.
456
+ */
457
+ type FaqDevEditor = 'webstorm' | 'vscode';
458
+ declare const FAQ_DEV_EDITOR: InjectionToken<FaqDevEditor>;
459
+
460
+ /**
461
+ * E11 — Dev-only FAQ authoring panel.
462
+ *
463
+ * Two modes, both dynamic-imported by `FaqModal` and gated behind
464
+ * `FAQ_DEV_MODE`:
465
+ * - `missing`: full scaffold panel rendered when no FAQ resolved.
466
+ * - `existing`: collapsed source strip rendered below the article when an
467
+ * entry IS resolved.
468
+ *
469
+ * The panel never imports `environment.*` directly — gating is the modal's
470
+ * responsibility (via the FAQ_DEV_MODE token + dynamic import).
471
+ */
472
+ declare class FaqAuthoringPanel {
473
+ private readonly faq;
474
+ private readonly workspaceRoot;
475
+ private readonly editor;
476
+ /** `'missing'` shows the full scaffold; `'existing'` shows the collapsed strip. */
477
+ readonly mode: _angular_core.InputSignal<"missing" | "existing">;
478
+ /**
479
+ * The dot-notation key actually being authored. For `missing` mode this is
480
+ * the deepest attempted key (chain[0]); for `existing` it's the resolved key.
481
+ */
482
+ readonly key: _angular_core.InputSignal<string>;
483
+ /** Fallback chain that was attempted. For `missing` every entry is missing. */
484
+ readonly attempted: _angular_core.InputSignal<string[]>;
485
+ /** Resolved entry — only set in `existing` mode. */
486
+ readonly entry: _angular_core.InputSignal<FaqEntry | null>;
487
+ readonly expanded: _angular_core.WritableSignal<boolean>;
488
+ readonly showAllFiles: _angular_core.WritableSignal<boolean>;
489
+ readonly copyState: _angular_core.WritableSignal<string | null>;
490
+ readonly relPath: _angular_core.Signal<string>;
491
+ readonly absPath: _angular_core.Signal<string>;
492
+ readonly editorHref: _angular_core.Signal<string>;
493
+ readonly editorLabel: _angular_core.Signal<"Open in VS Code" | "Open in WebStorm">;
494
+ readonly scaffoldCmd: _angular_core.Signal<string>;
495
+ readonly frontmatterScaffold: _angular_core.Signal<string>;
496
+ readonly allEntries: _angular_core.Signal<FaqEntry[]>;
497
+ readonly missedChain: _angular_core.Signal<{
498
+ key: string;
499
+ present: boolean;
500
+ }[]>;
501
+ toggleExpanded(): void;
502
+ toggleAllFiles(): void;
503
+ copy(text: string, label: string): Promise<void>;
504
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FaqAuthoringPanel, never>;
505
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FaqAuthoringPanel, "faq-authoring-panel", never, { "mode": { "alias": "mode"; "required": true; "isSignal": true; }; "key": { "alias": "key"; "required": true; "isSignal": true; }; "attempted": { "alias": "attempted"; "required": false; "isSignal": true; }; "entry": { "alias": "entry"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
506
+ }
507
+
89
508
  declare class ThinkingService {
90
509
  #private;
91
510
  readonly isThinking: _angular_core.Signal<boolean>;
@@ -227,6 +646,7 @@ declare class StatusBar {
227
646
  readonly isAuthenticated: _angular_core.WritableSignal<boolean>;
228
647
  readonly loginStatus: _angular_core.Signal<"Authenticating..." | "Logged in" | "Not logged in">;
229
648
  logout(): void;
649
+ openFaq(): void;
230
650
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatusBar, never>;
231
651
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatusBar, "shell-status-bar", never, {}, {}, never, ["*"], true, never>;
232
652
  }
@@ -307,6 +727,6 @@ declare class ConfirmDialog {
307
727
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConfirmDialog, "shell-confirm-dialog", never, {}, {}, never, never, true, never>;
308
728
  }
309
729
 
310
- export { AuthenticationService, CLEAR_USAGE, CommandRegistryService, CommandService, CommandTerminal, ConfirmDialog, HELP_USAGE, KeyboardShortcutService, Login, MainContent, RegexValidatorDirective, SHELL_APP_NAME, SHELL_AUTH_URLS, SHELL_COMMANDS, SHELL_MENU_ITEMS, SHELL_POST_LOGIN_ROUTE, Shell, SideMenu, StatusBar, TerminalFocusService, ThemeService, ThinkingService, authGuard, authInterceptor, guestGuard, provideShellConfig, tokenize };
311
- export type { CommandDefinition, CommandHistoryEntry, CommandLexiconEntry, CommandResult, ConfirmDialogData, MenuItem, Severity, ShellAuthUrls, ShellConfig, ShortcutRegistration, ThemeMode };
730
+ export { AuthenticationService, CLEAR_USAGE, CommandRegistryService, CommandService, CommandTerminal, ConfirmDialog, FAQ_CONTENT_LOADER, FAQ_DEV_EDITOR, FAQ_DEV_MODE, FAQ_DEV_WORKSPACE_ROOT, FaqAuthoringPanel, FaqHistoryService, FaqMarkdownRendererService, FaqModal, FaqService, HELP_USAGE, HttpFaqContentLoader, KeyboardShortcutService, Login, MainContent, RegexValidatorDirective, SHELL_APP_NAME, SHELL_AUTH_URLS, SHELL_COMMANDS, SHELL_MENU_ITEMS, SHELL_POST_LOGIN_ROUTE, Shell, SideMenu, StatusBar, TerminalFocusService, ThemeService, ThinkingService, audienceAllowed, authGuard, authInterceptor, buildFallbackChain, guestGuard, provideShellConfig, tokenize };
731
+ export type { CommandDefinition, CommandHistoryEntry, CommandLexiconEntry, CommandResult, ConfirmDialogData, FaqAudience, FaqContentLoader, FaqDevEditor, FaqEntry, FaqFrontmatter, FaqManifest, FaqRegistrationHandle, FaqRenderContext, FaqRenderOptions, FaqResolution, MenuItem, ParsedFaq, Severity, ShellAuthUrls, ShellConfig, ShortcutRegistration, ThemeMode };
312
732
  //# sourceMappingURL=franzzemen-brokenstock-shell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"franzzemen-brokenstock-shell.d.ts","sources":["../../src/lib/types/command.types.ts","../../src/lib/types/menu.types.ts","../../src/lib/tokens/shell-tokens.ts","../../src/lib/provide-shell-config.ts","../../src/lib/guards/auth.guard.ts","../../src/lib/guards/guest.guard.ts","../../src/lib/interceptors/auth.interceptor.ts","../../src/lib/directives/regex-validator.directive.ts","../../src/lib/services/thinking.service.ts","../../src/lib/services/theme.service.ts","../../src/lib/services/terminal-focus.service.ts","../../src/lib/services/keyboard-shortcut.service.ts","../../src/lib/services/authentication.service.ts","../../src/lib/services/command-registry.service.ts","../../src/lib/services/command.service.ts","../../src/lib/commands/command.utils.ts","../../src/lib/components/shell/shell.ts","../../src/lib/components/side-menu/side-menu.ts","../../src/lib/components/status-bar/status-bar.ts","../../src/lib/components/main-content/main-content.ts","../../src/lib/components/command-terminal/command-terminal.ts","../../src/lib/components/login/login.ts","../../src/lib/components/confirm-dialog/confirm-dialog.ts"],"mappings":"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","names":[]}
1
+ {"version":3,"file":"franzzemen-brokenstock-shell.d.ts","sources":["../../src/lib/types/command.types.ts","../../src/lib/types/menu.types.ts","../../src/lib/tokens/shell-tokens.ts","../../src/lib/provide-shell-config.ts","../../src/lib/guards/auth.guard.ts","../../src/lib/guards/guest.guard.ts","../../src/lib/interceptors/auth.interceptor.ts","../../src/lib/directives/regex-validator.directive.ts","../../src/lib/faq/faq.types.ts","../../src/lib/faq/faq-content-loader.token.ts","../../src/lib/faq/faq-markdown-renderer.service.ts","../../src/lib/faq/http-faq-content-loader.service.ts","../../src/lib/faq/faq.service.ts","../../src/lib/faq/faq-history.service.ts","../../src/lib/faq/faq-modal/faq-modal.ts","../../src/lib/faq/faq-dev-mode.token.ts","../../src/lib/faq/faq-authoring-panel/faq-authoring-panel.ts","../../src/lib/services/thinking.service.ts","../../src/lib/services/theme.service.ts","../../src/lib/services/terminal-focus.service.ts","../../src/lib/services/keyboard-shortcut.service.ts","../../src/lib/services/authentication.service.ts","../../src/lib/services/command-registry.service.ts","../../src/lib/services/command.service.ts","../../src/lib/commands/command.utils.ts","../../src/lib/components/shell/shell.ts","../../src/lib/components/side-menu/side-menu.ts","../../src/lib/components/status-bar/status-bar.ts","../../src/lib/components/main-content/main-content.ts","../../src/lib/components/command-terminal/command-terminal.ts","../../src/lib/components/login/login.ts","../../src/lib/components/confirm-dialog/confirm-dialog.ts"],"mappings":"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","names":[]}