@flyos/design-system 1.3.0 → 1.5.0

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.
@@ -1344,6 +1344,24 @@ interface FlyStandaloneAuthConfig {
1344
1344
  * does not (yet) return.
1345
1345
  */
1346
1346
  readonly scope?: string;
1347
+ /**
1348
+ * Extra same-origin path fragments that are reachable **anonymously**, matched as substrings of
1349
+ * the request pathname (e.g. `['/api/thoughts/public/']`).
1350
+ *
1351
+ * A request to one of these is treated exactly like the built-in pre-auth paths: no bearer is
1352
+ * attached, and — critically — a `401` from it never triggers `startLogin()`.
1353
+ *
1354
+ * **Why an app must be able to declare these.** The interceptor kicks off PKCE login on any `401`
1355
+ * received while no session exists, which is right for a gated app but wrong for an app that also
1356
+ * serves an anonymous surface: Thoughts' public idea portal is `[AllowAnonymous]` and reached
1357
+ * shell-less with no session, so a stray `401` there would bounce a member of the public into a
1358
+ * login they neither need nor can complete. The app cannot fix this on its own — Angular's
1359
+ * interceptor chain is fixed, so a local interceptor can neither skip this one nor suppress its
1360
+ * side effect — which is why the exemption has to be declarable here.
1361
+ *
1362
+ * Defaults to none, so existing consumers are unaffected.
1363
+ */
1364
+ readonly anonymousPaths?: readonly string[];
1347
1365
  }
1348
1366
  /**
1349
1367
  * DI token carrying the {@link FlyStandaloneAuthConfig}. Provided by {@link provideFlyStandaloneAuth};
@@ -1481,9 +1499,14 @@ declare const flyStandaloneAuthGuard: CanActivateFn;
1481
1499
  * token — attaching it would exfiltrate the token to whatever host the app happens to call.
1482
1500
  *
1483
1501
  * Requests that MUST NOT carry the bearer even same-origin: the STS token endpoint (its own client
1484
- * auth) and the pre-auth BFF endpoints under `/api/{appId}/auth/` (they authenticate via the HttpOnly
1485
- * cookie). The exclusion runs on the origin-NORMALIZED pathname, so an absolute same-origin URL to
1486
- * the BFF is excluded exactly like its relative spelling.
1502
+ * auth), the pre-auth BFF endpoints under `/api/{appId}/auth/` (they authenticate via the HttpOnly
1503
+ * cookie), and any path the app declared in `anonymousPaths` (an `[AllowAnonymous]` surface such as
1504
+ * a public portal). The exclusion runs on the origin-NORMALIZED pathname, so an absolute same-origin
1505
+ * URL to the BFF is excluded exactly like its relative spelling.
1506
+ *
1507
+ * The same exclusion governs the 401 handling: a `401` from an excluded path never starts a login.
1508
+ * That matters most for `anonymousPaths` — without it, a stray 401 on a public surface would bounce
1509
+ * an anonymous visitor into a PKCE login they cannot complete.
1487
1510
  *
1488
1511
  * Ordering: register this AFTER any offline/sample-data interceptor and BEFORE `stepUpInterceptor`
1489
1512
  * (a `401 step_up_required` arrives while the session is valid, so this interceptor passes it through
@@ -1661,14 +1684,18 @@ interface LoadBundleOptions {
1661
1684
  /**
1662
1685
  * Shared I18nService for the shell and Business Apps.
1663
1686
  *
1664
- * **Merge order** (later keys win): DS baseline → shell layer remote bundles
1665
- * in registration order.
1687
+ * **Merge order** (later keys win): DS baseline → remote bundles in registration
1688
+ * order shell layer.
1666
1689
  *
1667
1690
  * - Baseline: {@link DS_BASELINE_LOCALES} — built-in strings for DS components
1668
1691
  * (markdown editor, entity lookup) so they render localized labels even in a
1669
1692
  * standalone consumer that never populated the shell layer. Always overridable.
1670
- * - Shell: `setShellTranslations()` after loading `locale/{lang}.json` and API overrides.
1671
- * - Remotes: `loadBundle()` per manifest `localeBaseUrl`.
1693
+ * - Remotes: `loadBundle()` per manifest `localeBaseUrl`. May ADD any key and may
1694
+ * override the baseline, but cannot redefine a key the shell owns — the dictionary
1695
+ * is global, so allowing that let one remote restyle the whole desktop's wording.
1696
+ * - Shell: `setShellTranslations()` after loading `locale/{lang}.json` and API
1697
+ * overrides. Highest priority, which also makes the per-tenant
1698
+ * `/api/i18n/desktop-shell/{lang}` overrides authoritative over every app.
1672
1699
  */
1673
1700
  declare class I18nService {
1674
1701
  private readonly errorHandler;
@@ -1677,9 +1704,32 @@ declare class I18nService {
1677
1704
  private readonly _bundleOrder;
1678
1705
  private readonly _locale;
1679
1706
  private readonly _version;
1707
+ /** `${bundleId}|${locale}` pairs already reported by {@link warnOnSuppressedShellKeys}. */
1708
+ private readonly _warnedCollisions;
1680
1709
  /** Built-in DS strings for the active locale (falls back to `en` for any
1681
1710
  * locale we don't ship). Lowest-priority layer — always overridable. */
1682
1711
  private readonly _baseline;
1712
+ /**
1713
+ * Merge order, lowest priority first: DS baseline → remote bundles (registration
1714
+ * order) → shell.
1715
+ *
1716
+ * The shell layer is LAST, and that is the whole point. Translations live in one
1717
+ * flat, global dictionary with no per-app scoping, so when remote bundles were
1718
+ * merged last, any remote that happened to define a key the shell also defines
1719
+ * silently rewrote that string for the ENTIRE desktop — every other app included.
1720
+ *
1721
+ * That was not hypothetical: the Circles remote's bundle shares 63 keys with the
1722
+ * shell and differed on 27 of them, one being `common.label.dashboard`, which is
1723
+ * how it came to own the Arabic display name of a Core App it has nothing to do
1724
+ * with. The symptom is near-impossible to chase from the outside — editing the
1725
+ * shell's own `locale/{lang}.json` simply has no effect at runtime, with nothing
1726
+ * logged.
1727
+ *
1728
+ * A remote may still override the DS baseline (bundles are merged after it), which
1729
+ * is the layer explicitly documented as always-overridable, and it may still add
1730
+ * any key the shell does not define. What it can no longer do is redefine a string
1731
+ * the shell owns. {@link loadBundle} warns in dev when a bundle tries.
1732
+ */
1683
1733
  private readonly _merged;
1684
1734
  readonly locale: _angular_core.Signal<string>;
1685
1735
  readonly version: _angular_core.Signal<number>;
@@ -1694,6 +1744,20 @@ declare class I18nService {
1694
1744
  * @returns whether the bundle was loaded successfully.
1695
1745
  */
1696
1746
  loadBundle(opts: LoadBundleOptions): Promise<boolean>;
1747
+ /**
1748
+ * Dev-only: report keys a bundle defines that the shell already owns.
1749
+ *
1750
+ * These are now silently ignored (the shell wins), so without this the app would
1751
+ * simply not use strings the remote shipped and nobody would know which ones. The
1752
+ * previous precedence was worse — it applied them, changing wording across the
1753
+ * whole desktop, also silently. Either way the failure is invisible, which is the
1754
+ * argument for saying it out loud exactly once, when the bundle loads.
1755
+ *
1756
+ * A hit is not automatically a bug: an app legitimately reuses shared keys it does
1757
+ * not intend to redefine, so only keys whose VALUE differs are worth reporting.
1758
+ * The fix on the app's side is to namespace the key under its own app id.
1759
+ */
1760
+ private warnOnSuppressedShellKeys;
1697
1761
  removeBundle(id: string): void;
1698
1762
  clearRemoteBundles(): void;
1699
1763
  t(key: string, params?: Record<string, string | number>): string;
@@ -2507,6 +2571,161 @@ declare class FlyWindowTitleService {
2507
2571
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<FlyWindowTitleService>;
2508
2572
  }
2509
2573
 
2574
+ /**
2575
+ * One candidate/selected person. Mirrors the fields of the Controller's
2576
+ * `UserLookupDto` the component actually renders (`id`/`displayName`/
2577
+ * `avatarUrl`); `email` is optional and purely decorative (chip tooltip).
2578
+ * A host wiring `/api/users/lookup` maps the response 1:1 into this shape.
2579
+ */
2580
+ interface FlyPeoplePickerOption {
2581
+ readonly id: string;
2582
+ readonly displayName: string;
2583
+ readonly email?: string;
2584
+ readonly avatarUrl?: string;
2585
+ }
2586
+ /** Single pick (replaces the current selection) vs multi pick (adds, chips accumulate). */
2587
+ type FlyPeoplePickerMode = 'single' | 'multi';
2588
+
2589
+ /** The exact shape `fly-people-picker` binds to `[searchFn]`. */
2590
+ type FlyPeopleSearchFn = (query: string) => Observable<readonly FlyPeoplePickerOption[]>;
2591
+ /**
2592
+ * **`FlyUserDirectoryService`** — the one id→person adapter for the platform user
2593
+ * directory (`GET /api/users/lookup?q=`, `POST /api/users/resolve`).
2594
+ *
2595
+ * Every app that renders a *list* of people — comment authors, contributors,
2596
+ * approvers, credits, audit rows — needs the same thing: turn a `userId` into a
2597
+ * name without issuing one request per row. Before this service each app wrote
2598
+ * its own copy (Circles `UserResolverService`, Thoughts `UserLookupService`,
2599
+ * plus hand-rolled `/api/users/resolve` calls in the shell and admin portal),
2600
+ * and every copy re-derived the same read-through cache. This is that cache,
2601
+ * once, in the design system.
2602
+ *
2603
+ * The HTTP call rides the **host's** `HttpClient`, so the host's gateway routing,
2604
+ * auth interceptor, and correlation headers all apply — the same arrangement
2605
+ * `fly-entity-lookup` uses. The DS never configures a base URL of its own.
2606
+ *
2607
+ * ## `label()` is read-through — hosts do not prime
2608
+ *
2609
+ * {@link label} is a *signal-backed* accessor: on a cache miss it queues the id
2610
+ * and returns `null`, then the queued ids are resolved in ONE batched request a
2611
+ * microtask later. Because the read happens inside Angular's reactive context,
2612
+ * a template calling `label(id)` re-renders by itself when the answer lands —
2613
+ * no `computed` shadow state, no `prime()` call at each fetch site.
2614
+ *
2615
+ * That last point is the whole reason this exists. The prime-then-read shape it
2616
+ * replaces required every host to (a) keep the raw page separate from the mapped
2617
+ * page, (b) derive the mapped page through a `computed`, and (c) remember to
2618
+ * prime on *every* fetch path — root load, load-more, load-replies, refetch. Miss
2619
+ * one path and that path silently renders GUIDs, with nothing failing. Making the
2620
+ * cache read-through deletes the whole bug class.
2621
+ *
2622
+ * ## Failure is graceful, and never a retry storm
2623
+ *
2624
+ * A failed lookup caches nothing, so callers fall back to whatever they render
2625
+ * for an unresolved id (typically the raw id). Deliberate asymmetry in retry
2626
+ * behaviour, because a render-driven read must not hammer a broken endpoint:
2627
+ *
2628
+ * - **Render-driven** ({@link label}) attempts an id **once**. After a failure it
2629
+ * stays unresolved for the session rather than re-requesting on every
2630
+ * change-detection pass.
2631
+ * - **Explicit** ({@link prime}, {@link resolve}, {@link invalidate}) always
2632
+ * re-attempts. A host re-fetching a page therefore retries naturally, and a
2633
+ * retry button can call {@link invalidate}.
2634
+ *
2635
+ * Unknown / cross-tenant ids are omitted by the endpoint rather than erroring, so
2636
+ * they simply never resolve — which is also the correct behaviour for a
2637
+ * standalone External App where `/api/users/*` isn't reachable at all.
2638
+ *
2639
+ * @example Comment thread — one binding, no plumbing
2640
+ * ```html
2641
+ * <fly-comment-thread
2642
+ * [rootPage]="rootPage()"
2643
+ * [resolveDisplayName]="directory.label" />
2644
+ * ```
2645
+ * ```ts
2646
+ * protected readonly directory = inject(FlyUserDirectoryService);
2647
+ * ```
2648
+ *
2649
+ * @example People picker — search + prefill
2650
+ * ```html
2651
+ * <fly-people-picker
2652
+ * [searchFn]="directory.search()"
2653
+ * [initialSelection]="selected()" />
2654
+ * ```
2655
+ */
2656
+ declare class FlyUserDirectoryService {
2657
+ private readonly http;
2658
+ /** id → person, for everything resolved so far. Signal-backed so {@link label} is reactive. */
2659
+ private readonly entries;
2660
+ /** Ids with a request in the air — so a re-render cannot duplicate an in-flight lookup. */
2661
+ private readonly inFlight;
2662
+ /**
2663
+ * Ids {@link label} has already attempted at least once. Checked ONLY on the
2664
+ * render-driven path: it is what stops a persistently failing endpoint from
2665
+ * being re-requested on every change-detection pass. Explicit callers ignore it.
2666
+ */
2667
+ private readonly attempted;
2668
+ /** Ids queued by {@link label}, awaiting the batched microtask flush. */
2669
+ private readonly queued;
2670
+ private flushScheduled;
2671
+ /**
2672
+ * Display name for `id`, or `null` when it is not (yet) resolved — on a miss the
2673
+ * id is queued for the next batched resolve. Null rather than the raw id on
2674
+ * purpose: a GUID is not a name, and the caller should render its own fallback
2675
+ * (or localized placeholder) instead of the DS guessing one.
2676
+ *
2677
+ * Bound as a value (`[resolveDisplayName]="directory.label"`), so it is an arrow
2678
+ * property rather than a method — `this` stays correct without the host wrapping
2679
+ * it in a closure.
2680
+ */
2681
+ readonly label: (id: string | null | undefined) => string | null;
2682
+ /**
2683
+ * The full resolved person for `id` (name, email, avatar), or `null` when not yet
2684
+ * known. Same read-through queueing as {@link label} — use it when a surface can
2685
+ * render an avatar rather than just a name.
2686
+ */
2687
+ readonly option: (id: string | null | undefined) => FlyPeoplePickerOption | null;
2688
+ /**
2689
+ * Eagerly resolves any ids not already known, merging them into the cache.
2690
+ * Optional — {@link label} resolves on demand — but useful to warm the cache
2691
+ * before a render, or to force a retry after a failed auto-attempt (explicit
2692
+ * calls are not subject to the once-only rule; see the class doc).
2693
+ */
2694
+ prime(ids: readonly (string | null | undefined)[]): void;
2695
+ /**
2696
+ * Bulk-resolves ids to picker options — for prefilling `fly-people-picker`'s
2697
+ * `[initialSelection]` from stored ids. Requests are chunked to the endpoint's
2698
+ * {@link RESOLVE_BATCH_SIZE} cap rather than truncated, so a large selection
2699
+ * resolves fully instead of silently losing its tail. Resolved rows also land in
2700
+ * the cache, so a later {@link label} for the same id is free. Empty in → empty
2701
+ * out with no request.
2702
+ */
2703
+ resolve(ids: readonly (string | null | undefined)[]): Observable<FlyPeoplePickerOption[]>;
2704
+ /**
2705
+ * Drops cached entries so the next read re-resolves them — the retry hook for a
2706
+ * host that surfaces a "couldn't load names" affordance. Omit `ids` to clear the
2707
+ * whole cache.
2708
+ */
2709
+ invalidate(ids?: readonly string[]): void;
2710
+ /**
2711
+ * A `searchFn` over the platform users directory — bind straight to
2712
+ * `<fly-people-picker [searchFn]>`. Results are cached too, so picking someone
2713
+ * makes their name available to {@link label} without another round-trip.
2714
+ */
2715
+ search(): FlyPeopleSearchFn;
2716
+ /** Queues a render-driven miss, honouring the once-only rule. */
2717
+ private queueForRender;
2718
+ private flush;
2719
+ /** Issues the (chunked) resolve calls for `ids` and merges whatever comes back. */
2720
+ private fetch;
2721
+ private post;
2722
+ private merge;
2723
+ private distinct;
2724
+ private chunk;
2725
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyUserDirectoryService, never>;
2726
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<FlyUserDirectoryService>;
2727
+ }
2728
+
2510
2729
  /**
2511
2730
  * fly-remote-styles — Shell-layer CSS loader for Native Federation remotes.
2512
2731
  *
@@ -6146,6 +6365,13 @@ interface FlyCommentLockToggleRequest {
6146
6365
  * eager load-all) — the explicit fix for the legacy unpaged-children scale bug
6147
6366
  * — and each level pages independently via `loadMore`.
6148
6367
  *
6368
+ * The `comments` core app owns no user profile data, so `FlyComment` carries
6369
+ * `authorUserId` and an OPTIONAL `authorDisplayName`. Rather than make every host
6370
+ * map names in itself (and render GUIDs when it forgets), bind
6371
+ * `[resolveDisplayName]` to `FlyUserDirectoryService.label` — see
6372
+ * {@link FlyCommentThreadComponent.resolveDisplayName}. Still transport-agnostic:
6373
+ * the resolver is a function the host hands over, not a call this component makes.
6374
+ *
6149
6375
  * i18n is self-sufficient through the `comment.*` keys in `DS_BASELINE_LOCALES`
6150
6376
  * (en/ar/fr/ur), overridable by any consumer key of the same name. RTL works via
6151
6377
  * logical CSS. Styling uses DS theme tokens (`--surface-*`, `--label-*`,
@@ -6158,6 +6384,7 @@ interface FlyCommentLockToggleRequest {
6158
6384
  * [rootPage]="rootPage()"
6159
6385
  * [repliesByParent]="repliesByParent()"
6160
6386
  * [currentUserId]="me.id"
6387
+ * [resolveDisplayName]="directory.label"
6161
6388
  * [canModerateThread]="canModerate()"
6162
6389
  * [isLocked]="thread().isLocked"
6163
6390
  * (loadReplies)="onLoadReplies($event)"
@@ -6192,6 +6419,23 @@ declare class FlyCommentThreadComponent {
6192
6419
  /** Thread-scoped moderator permission (lock/unlock). Additive — distinct from the
6193
6420
  * per-comment `canModerate` flag, which gates delete-any on that specific comment. */
6194
6421
  readonly canModerateThread: _angular_core.InputSignal<boolean>;
6422
+ /**
6423
+ * Optional id→name lookup, for the common case where the backend DTO carries only
6424
+ * `authorUserId`. The `comments` core app owns no user profile data, so without
6425
+ * this every host had to map display names into `authorDisplayName` itself — and
6426
+ * a host that forgot rendered raw GUIDs at the reader.
6427
+ *
6428
+ * Bind `FlyUserDirectoryService.label` (a signal-backed read-through cache that
6429
+ * resolves on demand and batches). Because the component reads it during render,
6430
+ * the name appears by itself once the lookup lands — the host keeps a plain
6431
+ * page signal, with no `computed` derivation and no priming.
6432
+ *
6433
+ * The component still never calls an API: this is a function the HOST supplies,
6434
+ * exactly like `fly-entity-lookup`'s `LOOKUP_APP_NAME_RESOLVER`. Absent (or
6435
+ * returning `null`), rendering falls back as before. See {@link authorLabel} for
6436
+ * the resolution order.
6437
+ */
6438
+ readonly resolveDisplayName: _angular_core.InputSignal<((userId: string) => string | null) | null>;
6195
6439
  /** Expand a collapsed reply subtree — always page 1 of that parent. */
6196
6440
  readonly loadReplies: _angular_core.OutputEmitterRef<{
6197
6441
  parentCommentId: string;
@@ -6254,6 +6498,19 @@ declare class FlyCommentThreadComponent {
6254
6498
  repliesFor(commentId: string): FlyCommentPage | undefined;
6255
6499
  replyDraft(commentId: string): string;
6256
6500
  isOwn(comment: FlyComment): boolean;
6501
+ /**
6502
+ * The name to render for a comment's author. Resolution order:
6503
+ * explicit `authorDisplayName` (a host that already knows the name, or a
6504
+ * backend that returns one, always wins) → {@link resolveDisplayName} →
6505
+ * the raw `authorUserId`.
6506
+ *
6507
+ * The raw id remains the last resort rather than a placeholder: it is stable,
6508
+ * unique, and lets a reader correlate two comments by the same author even
6509
+ * when the directory is unreachable.
6510
+ */
6511
+ authorLabel(comment: FlyComment): string;
6512
+ /** First character of {@link authorLabel}, for the avatar-initials fallback. */
6513
+ authorInitial(comment: FlyComment): string;
6257
6514
  canReport(comment: FlyComment): boolean;
6258
6515
  canReply(): boolean;
6259
6516
  canDeleteComment(comment: FlyComment): boolean;
@@ -6287,7 +6544,7 @@ declare class FlyCommentThreadComponent {
6287
6544
  onSortPick(next: 'newest' | 'oldest'): void;
6288
6545
  private _setDraft;
6289
6546
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyCommentThreadComponent, never>;
6290
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyCommentThreadComponent, "fly-comment-thread", never, { "rootPage": { "alias": "rootPage"; "required": true; "isSignal": true; }; "repliesByParent": { "alias": "repliesByParent"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "isLocked": { "alias": "isLocked"; "required": false; "isSignal": true; }; "currentUserId": { "alias": "currentUserId"; "required": false; "isSignal": true; }; "isReadonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "canModerateThread": { "alias": "canModerateThread"; "required": false; "isSignal": true; }; }, { "loadReplies": "loadReplies"; "loadMore": "loadMore"; "submit": "submit"; "edit": "edit"; "delete": "delete"; "report": "report"; "lockToggle": "lockToggle"; "sortChange": "sortChange"; }, never, never, true, never>;
6547
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyCommentThreadComponent, "fly-comment-thread", never, { "rootPage": { "alias": "rootPage"; "required": true; "isSignal": true; }; "repliesByParent": { "alias": "repliesByParent"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "isLocked": { "alias": "isLocked"; "required": false; "isSignal": true; }; "currentUserId": { "alias": "currentUserId"; "required": false; "isSignal": true; }; "isReadonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "canModerateThread": { "alias": "canModerateThread"; "required": false; "isSignal": true; }; "resolveDisplayName": { "alias": "resolveDisplayName"; "required": false; "isSignal": true; }; }, { "loadReplies": "loadReplies"; "loadMore": "loadMore"; "submit": "submit"; "edit": "edit"; "delete": "delete"; "report": "report"; "lockToggle": "lockToggle"; "sortChange": "sortChange"; }, never, never, true, never>;
6291
6548
  }
6292
6549
 
6293
6550
  /**
@@ -7279,18 +7536,29 @@ declare function isRtlLocaleEntry(entry: FlyLocaleEntry): entry is FlyLocaleEntr
7279
7536
  /** True when `err` is a failed lazy/dynamic module (chunk) load. */
7280
7537
  declare function isChunkLoadError(err: unknown): boolean;
7281
7538
  /**
7282
- * sessionStorage key recording that this tab session's single chunk-error
7283
- * reload was already spent. It persists across the reload it triggers (an
7284
- * in-memory flag resets on reload and cannot guard a loop).
7539
+ * sessionStorage key recording WHEN this tab session last spent its chunk-error
7540
+ * reload (epoch ms). It persists across the reload it triggers (an in-memory
7541
+ * flag resets on reload and cannot guard a loop).
7285
7542
  */
7286
7543
  declare const FLY_CHUNK_RELOAD_FLAG = "fly:chunk-reload-attempted";
7287
7544
  /**
7288
- * One-shot self-heal for a stale client after a redeploy. Permits exactly ONE
7289
- * reload per tab session, so a reload that keeps failing (a chunk truly missing
7290
- * from the current build, or a genuinely-down host) does NOT loop.
7545
+ * How long a spent self-heal attempt stays spent. Within the window a repeat
7546
+ * failure falls through to the caller's error UI (loop guard); after it the
7547
+ * heal re-arms. A permanent one-shot stranded long-lived tabs on environments
7548
+ * that redeploy repeatedly (e.g. a Helm upgrade→rollback→retry cycle flips the
7549
+ * served build several times in an afternoon — each flip needs its own reload,
7550
+ * but only the first ever got one). 10 min is far above any error→reload→error
7551
+ * loop period (seconds) while well below the gap between distinct redeploys.
7552
+ */
7553
+ declare const FLY_RELOAD_REARM_MS: number;
7554
+ /**
7555
+ * Self-heal for a stale client after a redeploy. Permits ONE reload per
7556
+ * {@link FLY_RELOAD_REARM_MS} window per tab session, so a reload that keeps
7557
+ * failing (a chunk truly missing from the current build, or a genuinely-down
7558
+ * host) does NOT loop — but a LATER redeploy re-arms it.
7291
7559
  *
7292
7560
  * @returns `true` when a reload was initiated (the page will navigate away);
7293
- * `false` when the session's reload was already spent or sessionStorage is
7561
+ * `false` when the window's reload was already spent or sessionStorage is
7294
7562
  * unavailable — callers should surface a fallback / stop rather than spin.
7295
7563
  */
7296
7564
  declare function reloadOnceForChunkError(): boolean;
@@ -7313,10 +7581,11 @@ declare function reloadOnceForChunkError(): boolean;
7313
7581
  */
7314
7582
  declare function isNativeFederationCacheError(err: unknown): boolean;
7315
7583
  /**
7316
- * sessionStorage key recording that this tab session's single Native-Federation
7317
- * cache-heal (revalidation sweep + reload) was already spent separate from
7318
- * {@link FLY_CHUNK_RELOAD_FLAG} so a plain chunk-404 reload and a shared-bundle
7319
- * revalidation sweep each get one independent attempt.
7584
+ * sessionStorage key recording WHEN this tab session last spent its
7585
+ * Native-Federation cache-heal (revalidation sweep + reload; epoch ms)
7586
+ * separate from {@link FLY_CHUNK_RELOAD_FLAG} so a plain chunk-404 reload and a
7587
+ * shared-bundle revalidation sweep each get one independent attempt per
7588
+ * {@link FLY_RELOAD_REARM_MS} window.
7320
7589
  */
7321
7590
  declare const FLY_NF_CACHE_HEAL_FLAG = "nf-cache-heal-attempted";
7322
7591
  /**
@@ -7582,6 +7851,13 @@ declare class FlyModerationQueueComponent {
7582
7851
  readonly error: _angular_core.InputSignal<string | null>;
7583
7852
  /** The currently applied status filter; `null` = "All". Host-controlled, like `[sort]` on `fly-comment-thread`. */
7584
7853
  readonly status: _angular_core.InputSignal<FlyCommentReportStatus | null>;
7854
+ /**
7855
+ * Optional id→name lookup for the reporter column, mirroring
7856
+ * `fly-comment-thread`'s input of the same name. Bind
7857
+ * `FlyUserDirectoryService.label`; absent, rows fall back to the raw id.
7858
+ * See {@link reporterLabel} for the resolution order.
7859
+ */
7860
+ readonly resolveDisplayName: _angular_core.InputSignal<((userId: string) => string | null) | null>;
7585
7861
  /** A status-filter pick (page resets to 1) or a `loadMore` (next page at the current filter). */
7586
7862
  readonly loadPage: _angular_core.OutputEmitterRef<FlyModerationLoadPageRequest>;
7587
7863
  /** Resolve a report as `ActionTaken` or `Dismissed`, with an optional note and delete-the-comment flag. */
@@ -7614,6 +7890,12 @@ declare class FlyModerationQueueComponent {
7614
7890
  shortId(id: string): string;
7615
7891
  subjectHref(r: FlyModerationReport): string;
7616
7892
  subjectDisplay(r: FlyModerationReport): string;
7893
+ /**
7894
+ * Who filed the report. Resolution order: explicit `reporterDisplayName` →
7895
+ * {@link resolveDisplayName} → the raw `reporterUserId`. Same contract as
7896
+ * `fly-comment-thread`'s `authorLabel`.
7897
+ */
7898
+ reporterLabel(r: FlyModerationReport): string;
7617
7899
  formatDate(iso: string): string;
7618
7900
  onStatusPick(next: FlyCommentReportStatus | null): void;
7619
7901
  loadMore(): void;
@@ -7636,24 +7918,9 @@ declare class FlyModerationQueueComponent {
7636
7918
  /** Only one row can be in the lock-confirm state at a time, so a class query is unambiguous. */
7637
7919
  private focusLockCancelButton;
7638
7920
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyModerationQueueComponent, never>;
7639
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyModerationQueueComponent, "fly-moderation-queue", never, { "page": { "alias": "page"; "required": true; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, { "loadPage": "loadPage"; "resolve": "resolve"; "lockThread": "lockThread"; "openSubject": "openSubject"; }, never, never, true, never>;
7921
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyModerationQueueComponent, "fly-moderation-queue", never, { "page": { "alias": "page"; "required": true; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "resolveDisplayName": { "alias": "resolveDisplayName"; "required": false; "isSignal": true; }; }, { "loadPage": "loadPage"; "resolve": "resolve"; "lockThread": "lockThread"; "openSubject": "openSubject"; }, never, never, true, never>;
7640
7922
  }
7641
7923
 
7642
- /**
7643
- * One candidate/selected person. Mirrors the fields of the Controller's
7644
- * `UserLookupDto` the component actually renders (`id`/`displayName`/
7645
- * `avatarUrl`); `email` is optional and purely decorative (chip tooltip).
7646
- * A host wiring `/api/users/lookup` maps the response 1:1 into this shape.
7647
- */
7648
- interface FlyPeoplePickerOption {
7649
- readonly id: string;
7650
- readonly displayName: string;
7651
- readonly email?: string;
7652
- readonly avatarUrl?: string;
7653
- }
7654
- /** Single pick (replaces the current selection) vs multi pick (adds, chips accumulate). */
7655
- type FlyPeoplePickerMode = 'single' | 'multi';
7656
-
7657
7924
  /**
7658
7925
  * **`fly-people-picker`** — a thin design-system wrapper over `fly-typeahead`
7659
7926
  * pre-canned for the platform Controller's users lookup
@@ -10229,6 +10496,6 @@ declare const AUDIENCE_ERROR_CODES: {
10229
10496
  };
10230
10497
  type AudienceErrorCode = (typeof AUDIENCE_ERROR_CODES)[keyof typeof AUDIENCE_ERROR_CODES];
10231
10498
 
10232
- export { AGENT_DRAG_MIME, AGENT_PAYLOAD_VERSION, APP_LOOKUP, AUDIENCE_ERROR_CODES, AUDIENCE_LIMITS, AUDIENCE_PRESETS, AUDIENCE_TERM_KINDS, AgentActionBus, AgentActionUnsupportedDispatchError, AgentCommandRegistry, AgentDropRegistry, AgentFlightAnimator, AgentLookupRegistry, AgentPayloadOversizeError, AudienceBuilderComponent, AuthService, BilingualFieldComponent, CRON_MODES, CRON_WEEKDAYS, ContextMenuComponent, DEFAULT_AGENT_PAYLOAD_LIMITS, DEFAULT_FLY_THEME_MODE, DS_BASELINE_LOCALES, DashboardKpiComponent, DialogResult, EntityLookupComponent, FLYOS_LAUNCH_EVENT, FLYOS_LAUNCH_REQUEST_EVENT, FLYOS_REMOTE_ROUTE_EVENT, FLY_ACCENT_PROPERTY, FLY_ADMIN_ROLES, FLY_CHUNK_RELOAD_FLAG, FLY_COMPACT_THRESHOLD, FLY_COUNTRIES, FLY_EMOJI_BY_ID, FLY_EMOJI_CATEGORIES, FLY_EMOJI_CATEGORY_BY_ID, FLY_EMOJI_DEFAULT_CATEGORIES, FLY_EMOJI_PACK, FLY_EMOJI_PACK_MISSING_MESSAGE, FLY_EMOJI_PREVIEW_COUNT, FLY_EMPTY_VALUE, FLY_LOCALE_CATALOG, FLY_NF_CACHE_HEAL_FLAG, FLY_RELOAD_DEBOUNCE_MS, FLY_REMOTE_BASE_PATH, FLY_REMOTE_CONTEXT_EVENT, FLY_REMOTE_CONTEXT_STORE_KEY, FLY_REMOTE_ROUTES, FLY_SEARCH_DEBOUNCE_MS, FLY_SKIN_TONES, FLY_STANDALONE_AUTH_CONFIG, FLY_THEME_MODE_IDS, FLY_WINDOW_HELP_HINT_EVENT, FLY_WINDOW_PAGE_TITLE_EVENT, FlyAchievementProgressComponent, FlyActionMenuComponent, FlyActionStackComponent, FlyAgentDraggableDirective, FlyAnimatedEmojiComponent, FlyAppHomeComponent, FlyAppTopbarComponent, FlyAuthLiveRefresh, FlyBadgeWallComponent, FlyBlockUiComponent, FlyBreadcrumbComponent, FlyButtonComponent, FlyBytesPipe, FlyCaptchaComponent, FlyCardActionsComponent, FlyCardBodyComponent, FlyCardComponent, FlyCardFooterComponent, FlyCardGridComponent, FlyCardMediaComponent, FlyCardMetaComponent, FlyCardStatusComponent, FlyCardTitleComponent, FlyCellDirective, FlyCheckboxComponent, FlyChipComponent, FlyChunkReloadErrorHandler, FlyClickOutsideDirective, FlyCollapsibleComponent, FlyCommentThreadComponent, FlyCompactNumberPipe, FlyConfirmDialogComponent, FlyControlDirective, FlyCronBuilderComponent, FlyDataTableComponent, FlyDatePipe, FlyDateTimePipe, FlyDebouncer, FlyDecimalNumberPipe, FlyDetailCardComponent, FlyDetailShellComponent, FlyDrawerComponent, FlyDurationPipe, FlyDynamicFormComponent, FlyEmojiPickerComponent, FlyFieldComponent, FlyFileUploadComponent, FlyFilterPanelComponent, FlyFormBannerComponent, FlyFormFooterComponent, FlyFormGridComponent, FlyFormSectionComponent, FlyFullNumberPipe, FlyGanttComponent, FlyHubClient, FlyIconButtonComponent, FlyIfAdminDirective, FlyIfRoleDirective, FlyImageUploadComponent, FlyLeaderboardComponent, FlyMetaListComponent, FlyModalComponent, FlyModerationQueueComponent, FlyModuleIconDirective, FlyPaginationComponent, FlyPeoplePickerComponent, FlyPointsTierComponent, FlyProgressComponent, FlyRelativeTimePipe, FlyRemoteContextService, FlyRemoteRouter, FlyRemoteRouterOutletComponent, FlySearchInputComponent, FlySectionHeaderComponent, FlySecureSrcDirective, FlySegmentedComponent, FlySelectComponent, FlySkeletonComponent, FlySliderComponent, FlySparklineComponent, FlySpinnerComponent, FlyStandaloneAuthCallbackComponent, FlyStandaloneAuthService, FlyStateMessageComponent, FlyDynamicFormComponent as FlySurveyFormComponent, FlyTabComponent, FlyTabsComponent, FlyTagsInputComponent, FlyThemeService, FlyTimePipe, FlyToastService, FlyToggleComponent, FlyTooltipDirective, FlyTreeNavComponent, FlyTypeaheadComponent, FlyWindowHelpService, FlyWindowTitleService, FlyosPendingLaunchesGlobalKey, FlyosShellHandlesLaunchRequestsGlobalKey, FlyosShellOwnsHistoryGlobalKey, GANTT_ZOOMS, I18nService, LAUNCH_CONTEXT, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, OverlayStack, PRESENCE_COLORS, PageHeaderComponent, RTL_LOCALE_SET, SHARE_ORG_CHART_SYSTEM_KEY_APPS, SHARE_ORG_CHART_SYSTEM_KEY_DEFAULT, SHARE_PANEL_DEFAULT_FILE_LEVELS, STATE_DEFAULT_ICONS, STATE_DEFAULT_MESSAGE_KEYS, STEP_UP_CODE, STEP_UP_REAUTH_HANDLER, STEP_UP_RETURN_KEY, SUPPORTED_AGENT_PAYLOAD_VERSIONS, SharePanelComponent, SourceAppResolver, StandaloneWindowManagerService, StatusBadgeComponent, StepUpService, ToastHostComponent, TranslatePipe, WINDOW_DATA, WINDOW_HELP_HINT, WindowManagerService, applySkinTone, applySuggestion, ariaSort, buildCron, canConfirm, canGoNext, canGoPrev, captureFocus, clampPage, clampSliderValue, connectRemoteLaunch, enterActivatesNatively, filterGroup, filterSuggestions, findLocaleByDialect, findLocaleByPrefix, firstEnabledIndex, firstModuleIndex, flattenModules, flyAdminGuard, flyCaptchaBase64Utf8, flyCaptchaBuildToken, flyCaptchaSha256Hex, flyCompactNumber, flyDebounced, flyDecimalNumber, flyDownloadBlob, flyDuration, flyEmojiFor, flyEmojiIsTonable, flyEmojiPackUrl, flyExportFileName, flyFirstEnabledIndex, flyFormatBytes, flyFormatDate, flyFormatDateTime, flyFormatTime, flyFullNumber, flyNextEnabledIndex, flyNextSegmentIndex, flyRelativeTime, flyResolveActiveTab, flyRoleGuard, flySignedCompact, flySkinToneLabelKey, flyStandaloneAuthGuard, flyStandaloneAuthInterceptor, flyToDateOnly, hasAnyRoleIn, healNativeFederationCacheOnce, initialExpanded, isAccentColor, isChunkLoadError, isFlyAuthStorePopulated, isNativeFederationCacheError, isRtlLocale, isRtlLocaleEntry, isValidCron, isValidSingleField, loadRemoteStyles, matchFlyRoutePattern, nextEnabledIndex, nextModuleIndex, nextSegmentIndex, nextSort, normalizeFlyTheme, normalizeRoles, overlayStack, parseCron, parseStepUpChallenge, parseTags, presenceColorFor, printConsoleSecurityWarning, provideFlyChunkReloadRecovery, provideFlyEmojiPack, provideFlyStandaloneAuth, reloadOnceForChunkError, requestAppLaunch, resolveActiveModule, resolveActiveSection, resolveActiveTab, resolveCellValue, resolveStateIcon, resolveStateMessageKey, restoreFocus, sameTags, sectionHintKey, sectionLayout, sliderTrackGradient, sparklinePath, sparklinePoints, stepUpInterceptor, stepUpReturnKey, trimAgentPayload, trimAgentString, unloadRemoteStyles, utf8ByteLength, validateAgentPayload, warnIfEmbeddedSessionMissing };
10233
- export type { ActionMenuItem, AgentAction, AgentActionDispatch, AgentActionVerb, AgentChipHostInputs, AgentCommand, AgentCommandContextBinding, AgentCommandHandle, AgentCommandRegistration, AgentCommandScope, AgentCommandSlashSpec, AgentDragPayload, AgentDraggableItem, AgentDropChipMode, AgentDropRendererRegistration, AgentEnvelopeAttachment, AgentMcpScope, AgentMessageEnvelope, AgentPayloadLimits, AgentPayloadValidationResult, AppEveryonePrincipal, AppEveryoneTerm, AppLookup, AppLookupEntry, AudienceEditTarget, AudienceErrorCode, AudienceFilter, AudienceOptions, AudiencePresetKind, AudienceTerm, AudienceTermKind, BreadcrumbItem, ButtonSize, ButtonVariant, CardLayout, ChartTerm, ChildWindowData, ChipTone, ConfirmKind, ConnectRemoteLaunchOptions, ContextMenuAlign, ContextMenuItem, ContextMenuSection, CronAdvancedFieldDef, CronMode, CronParts, CronWeekday, DesktopApp, DesktopAppCategory, DesktopAppKind, DetailSection, DialogResultWithAcknowledgement, EmbeddedSessionProbe, EntityLinkSelection, FilterGroup, FlyAchievementRow, FlyAppHomeLayout, FlyAppModule, FlyAppModuleSection, FlyAuthRefreshPayload, FlyAuthStoreReadable, FlyBadgeTile, FlyBreadcrumbItem, FlyCaptchaChallenge, FlyCaptchaSolution, FlyCaptchaState, FlyCellContext, FlyColumn, FlyColumnKind, FlyComment, FlyCommentDeleteRequest, FlyCommentEditRequest, FlyCommentLoadMoreRequest, FlyCommentLoadRepliesRequest, FlyCommentLockToggleRequest, FlyCommentPage, FlyCommentReportReason, FlyCommentReportRequest, FlyCommentReportStatus, FlyCommentSubmitRequest, FlyCountry, FlyDrawerSide, FlyDrawerSize, FlyEmojiCategory, FlyEmojiCell, FlyEmojiEntry, FlyEmojiPack, FlyEmojiPackEntry, FlyEmojiPackManifest, FlyEmojiPickerSize, FlyEmojiPickerTab, FlyEmojiSection, FlyFileInfo, FlyFileSelection, FlyFormAnswer, FlyFormAnswerValue, FlyFormDefinition, FlyFormFieldOptions, FlyFormOption, FlyFormQuestion, FlyFormQuestionType, FlyFormScoreDisplay, FlyLaunchEventDetail, FlyLaunchRequestDetail, FlyLeaderboardRow, FlyLiveRefreshOptions, FlyLocaleEntry, FlyMetaItem, FlyModerationLoadPageRequest, FlyModerationLockThreadRequest, FlyModerationOpenSubjectRequest, FlyModerationReport, FlyModerationReportPage, FlyModerationResolutionStatus, FlyModerationResolveRequest, FlyNavigableItem, FlyPeoplePickerMode, FlyPeoplePickerOption, FlyPointsSummary, FlyRemoteContext, FlyRemoteMatch, FlyRemoteRoute, FlyRemoteRouteEventDetail, FlySearchExpandTrigger, FlySearchInputSize, FlySecureSrcState, FlySelectOption, FlySelectValue, FlySkeletonAnimation, FlySkeletonLayout, FlySkeletonShape, FlySkinTone, FlySort, FlyStandaloneAuthConfig, FlyFileSelection as FlySurveyFileSelection, FlyFormAnswer as FlySurveyFormAnswer, FlyFormAnswerValue as FlySurveyFormAnswerValue, FlyFormDefinition as FlySurveyFormDefinition, FlyFormFieldOptions as FlySurveyFormFieldOptions, FlyFormOption as FlySurveyFormOption, FlyFormQuestion as FlySurveyFormQuestion, FlyFormQuestionType as FlySurveyQuestionType, FlyThemeMode, FlyTooltipPlacement, FlyTreeNavNode, FlyTypeaheadOption, FlyWindowHelpHintEventDetail, FlyWindowHelpPublisher, FlyWindowPageTitleEventDetail, FlyWindowTitlePublisher, FlyosPendingLaunches, FocusRestore, FormBannerKind, GanttDependency, GanttDependencyCreate, GanttRow, GanttRowDatesChange, GanttRowKind, GanttZoom, IconButtonVariant, LaunchContext, LoadBundleOptions, LookupDescriptor, LookupHandle, LookupRegistration, LookupResult, LookupSearch, MessageBoxButton, MessageBoxDontAskAgainConfig, MessageBoxOptions, MessageBoxOptionsWithAcknowledgement, MockAuthConfig, OpenWindowOptions, OuPrincipal, OuTerm, OverlayHandle, PageHeaderVariant, PresetTerm, ProgressTone, RemoteAppDef, RequestAppLaunchOptions, RoleOuLookupRow, RolePrincipal, RolesTerm, SegmentedOption, ShareOrgChartOption, ShareOuNode, SharePanelLevelOption, SharePermissionEntry, SharePrincipal, SharePrincipalKind, ShareUserResult, StateMessageKind, StepUpChallenge, StepUpReauthHandler, StepUpReauthRequest, ToastAction, ToastEntry, ToastOptions, ToastVariant, User, UserPrincipal, UsersTerm, WindowHelpHint, WindowInstance, WindowState };
10499
+ export { AGENT_DRAG_MIME, AGENT_PAYLOAD_VERSION, APP_LOOKUP, AUDIENCE_ERROR_CODES, AUDIENCE_LIMITS, AUDIENCE_PRESETS, AUDIENCE_TERM_KINDS, AgentActionBus, AgentActionUnsupportedDispatchError, AgentCommandRegistry, AgentDropRegistry, AgentFlightAnimator, AgentLookupRegistry, AgentPayloadOversizeError, AudienceBuilderComponent, AuthService, BilingualFieldComponent, CRON_MODES, CRON_WEEKDAYS, ContextMenuComponent, DEFAULT_AGENT_PAYLOAD_LIMITS, DEFAULT_FLY_THEME_MODE, DS_BASELINE_LOCALES, DashboardKpiComponent, DialogResult, EntityLookupComponent, FLYOS_LAUNCH_EVENT, FLYOS_LAUNCH_REQUEST_EVENT, FLYOS_REMOTE_ROUTE_EVENT, FLY_ACCENT_PROPERTY, FLY_ADMIN_ROLES, FLY_CHUNK_RELOAD_FLAG, FLY_COMPACT_THRESHOLD, FLY_COUNTRIES, FLY_EMOJI_BY_ID, FLY_EMOJI_CATEGORIES, FLY_EMOJI_CATEGORY_BY_ID, FLY_EMOJI_DEFAULT_CATEGORIES, FLY_EMOJI_PACK, FLY_EMOJI_PACK_MISSING_MESSAGE, FLY_EMOJI_PREVIEW_COUNT, FLY_EMPTY_VALUE, FLY_LOCALE_CATALOG, FLY_NF_CACHE_HEAL_FLAG, FLY_RELOAD_DEBOUNCE_MS, FLY_RELOAD_REARM_MS, FLY_REMOTE_BASE_PATH, FLY_REMOTE_CONTEXT_EVENT, FLY_REMOTE_CONTEXT_STORE_KEY, FLY_REMOTE_ROUTES, FLY_SEARCH_DEBOUNCE_MS, FLY_SKIN_TONES, FLY_STANDALONE_AUTH_CONFIG, FLY_THEME_MODE_IDS, FLY_WINDOW_HELP_HINT_EVENT, FLY_WINDOW_PAGE_TITLE_EVENT, FlyAchievementProgressComponent, FlyActionMenuComponent, FlyActionStackComponent, FlyAgentDraggableDirective, FlyAnimatedEmojiComponent, FlyAppHomeComponent, FlyAppTopbarComponent, FlyAuthLiveRefresh, FlyBadgeWallComponent, FlyBlockUiComponent, FlyBreadcrumbComponent, FlyButtonComponent, FlyBytesPipe, FlyCaptchaComponent, FlyCardActionsComponent, FlyCardBodyComponent, FlyCardComponent, FlyCardFooterComponent, FlyCardGridComponent, FlyCardMediaComponent, FlyCardMetaComponent, FlyCardStatusComponent, FlyCardTitleComponent, FlyCellDirective, FlyCheckboxComponent, FlyChipComponent, FlyChunkReloadErrorHandler, FlyClickOutsideDirective, FlyCollapsibleComponent, FlyCommentThreadComponent, FlyCompactNumberPipe, FlyConfirmDialogComponent, FlyControlDirective, FlyCronBuilderComponent, FlyDataTableComponent, FlyDatePipe, FlyDateTimePipe, FlyDebouncer, FlyDecimalNumberPipe, FlyDetailCardComponent, FlyDetailShellComponent, FlyDrawerComponent, FlyDurationPipe, FlyDynamicFormComponent, FlyEmojiPickerComponent, FlyFieldComponent, FlyFileUploadComponent, FlyFilterPanelComponent, FlyFormBannerComponent, FlyFormFooterComponent, FlyFormGridComponent, FlyFormSectionComponent, FlyFullNumberPipe, FlyGanttComponent, FlyHubClient, FlyIconButtonComponent, FlyIfAdminDirective, FlyIfRoleDirective, FlyImageUploadComponent, FlyLeaderboardComponent, FlyMetaListComponent, FlyModalComponent, FlyModerationQueueComponent, FlyModuleIconDirective, FlyPaginationComponent, FlyPeoplePickerComponent, FlyPointsTierComponent, FlyProgressComponent, FlyRelativeTimePipe, FlyRemoteContextService, FlyRemoteRouter, FlyRemoteRouterOutletComponent, FlySearchInputComponent, FlySectionHeaderComponent, FlySecureSrcDirective, FlySegmentedComponent, FlySelectComponent, FlySkeletonComponent, FlySliderComponent, FlySparklineComponent, FlySpinnerComponent, FlyStandaloneAuthCallbackComponent, FlyStandaloneAuthService, FlyStateMessageComponent, FlyDynamicFormComponent as FlySurveyFormComponent, FlyTabComponent, FlyTabsComponent, FlyTagsInputComponent, FlyThemeService, FlyTimePipe, FlyToastService, FlyToggleComponent, FlyTooltipDirective, FlyTreeNavComponent, FlyTypeaheadComponent, FlyUserDirectoryService, FlyWindowHelpService, FlyWindowTitleService, FlyosPendingLaunchesGlobalKey, FlyosShellHandlesLaunchRequestsGlobalKey, FlyosShellOwnsHistoryGlobalKey, GANTT_ZOOMS, I18nService, LAUNCH_CONTEXT, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, OverlayStack, PRESENCE_COLORS, PageHeaderComponent, RTL_LOCALE_SET, SHARE_ORG_CHART_SYSTEM_KEY_APPS, SHARE_ORG_CHART_SYSTEM_KEY_DEFAULT, SHARE_PANEL_DEFAULT_FILE_LEVELS, STATE_DEFAULT_ICONS, STATE_DEFAULT_MESSAGE_KEYS, STEP_UP_CODE, STEP_UP_REAUTH_HANDLER, STEP_UP_RETURN_KEY, SUPPORTED_AGENT_PAYLOAD_VERSIONS, SharePanelComponent, SourceAppResolver, StandaloneWindowManagerService, StatusBadgeComponent, StepUpService, ToastHostComponent, TranslatePipe, WINDOW_DATA, WINDOW_HELP_HINT, WindowManagerService, applySkinTone, applySuggestion, ariaSort, buildCron, canConfirm, canGoNext, canGoPrev, captureFocus, clampPage, clampSliderValue, connectRemoteLaunch, enterActivatesNatively, filterGroup, filterSuggestions, findLocaleByDialect, findLocaleByPrefix, firstEnabledIndex, firstModuleIndex, flattenModules, flyAdminGuard, flyCaptchaBase64Utf8, flyCaptchaBuildToken, flyCaptchaSha256Hex, flyCompactNumber, flyDebounced, flyDecimalNumber, flyDownloadBlob, flyDuration, flyEmojiFor, flyEmojiIsTonable, flyEmojiPackUrl, flyExportFileName, flyFirstEnabledIndex, flyFormatBytes, flyFormatDate, flyFormatDateTime, flyFormatTime, flyFullNumber, flyNextEnabledIndex, flyNextSegmentIndex, flyRelativeTime, flyResolveActiveTab, flyRoleGuard, flySignedCompact, flySkinToneLabelKey, flyStandaloneAuthGuard, flyStandaloneAuthInterceptor, flyToDateOnly, hasAnyRoleIn, healNativeFederationCacheOnce, initialExpanded, isAccentColor, isChunkLoadError, isFlyAuthStorePopulated, isNativeFederationCacheError, isRtlLocale, isRtlLocaleEntry, isValidCron, isValidSingleField, loadRemoteStyles, matchFlyRoutePattern, nextEnabledIndex, nextModuleIndex, nextSegmentIndex, nextSort, normalizeFlyTheme, normalizeRoles, overlayStack, parseCron, parseStepUpChallenge, parseTags, presenceColorFor, printConsoleSecurityWarning, provideFlyChunkReloadRecovery, provideFlyEmojiPack, provideFlyStandaloneAuth, reloadOnceForChunkError, requestAppLaunch, resolveActiveModule, resolveActiveSection, resolveActiveTab, resolveCellValue, resolveStateIcon, resolveStateMessageKey, restoreFocus, sameTags, sectionHintKey, sectionLayout, sliderTrackGradient, sparklinePath, sparklinePoints, stepUpInterceptor, stepUpReturnKey, trimAgentPayload, trimAgentString, unloadRemoteStyles, utf8ByteLength, validateAgentPayload, warnIfEmbeddedSessionMissing };
10500
+ export type { ActionMenuItem, AgentAction, AgentActionDispatch, AgentActionVerb, AgentChipHostInputs, AgentCommand, AgentCommandContextBinding, AgentCommandHandle, AgentCommandRegistration, AgentCommandScope, AgentCommandSlashSpec, AgentDragPayload, AgentDraggableItem, AgentDropChipMode, AgentDropRendererRegistration, AgentEnvelopeAttachment, AgentMcpScope, AgentMessageEnvelope, AgentPayloadLimits, AgentPayloadValidationResult, AppEveryonePrincipal, AppEveryoneTerm, AppLookup, AppLookupEntry, AudienceEditTarget, AudienceErrorCode, AudienceFilter, AudienceOptions, AudiencePresetKind, AudienceTerm, AudienceTermKind, BreadcrumbItem, ButtonSize, ButtonVariant, CardLayout, ChartTerm, ChildWindowData, ChipTone, ConfirmKind, ConnectRemoteLaunchOptions, ContextMenuAlign, ContextMenuItem, ContextMenuSection, CronAdvancedFieldDef, CronMode, CronParts, CronWeekday, DesktopApp, DesktopAppCategory, DesktopAppKind, DetailSection, DialogResultWithAcknowledgement, EmbeddedSessionProbe, EntityLinkSelection, FilterGroup, FlyAchievementRow, FlyAppHomeLayout, FlyAppModule, FlyAppModuleSection, FlyAuthRefreshPayload, FlyAuthStoreReadable, FlyBadgeTile, FlyBreadcrumbItem, FlyCaptchaChallenge, FlyCaptchaSolution, FlyCaptchaState, FlyCellContext, FlyColumn, FlyColumnKind, FlyComment, FlyCommentDeleteRequest, FlyCommentEditRequest, FlyCommentLoadMoreRequest, FlyCommentLoadRepliesRequest, FlyCommentLockToggleRequest, FlyCommentPage, FlyCommentReportReason, FlyCommentReportRequest, FlyCommentReportStatus, FlyCommentSubmitRequest, FlyCountry, FlyDrawerSide, FlyDrawerSize, FlyEmojiCategory, FlyEmojiCell, FlyEmojiEntry, FlyEmojiPack, FlyEmojiPackEntry, FlyEmojiPackManifest, FlyEmojiPickerSize, FlyEmojiPickerTab, FlyEmojiSection, FlyFileInfo, FlyFileSelection, FlyFormAnswer, FlyFormAnswerValue, FlyFormDefinition, FlyFormFieldOptions, FlyFormOption, FlyFormQuestion, FlyFormQuestionType, FlyFormScoreDisplay, FlyLaunchEventDetail, FlyLaunchRequestDetail, FlyLeaderboardRow, FlyLiveRefreshOptions, FlyLocaleEntry, FlyMetaItem, FlyModerationLoadPageRequest, FlyModerationLockThreadRequest, FlyModerationOpenSubjectRequest, FlyModerationReport, FlyModerationReportPage, FlyModerationResolutionStatus, FlyModerationResolveRequest, FlyNavigableItem, FlyPeoplePickerMode, FlyPeoplePickerOption, FlyPeopleSearchFn, FlyPointsSummary, FlyRemoteContext, FlyRemoteMatch, FlyRemoteRoute, FlyRemoteRouteEventDetail, FlySearchExpandTrigger, FlySearchInputSize, FlySecureSrcState, FlySelectOption, FlySelectValue, FlySkeletonAnimation, FlySkeletonLayout, FlySkeletonShape, FlySkinTone, FlySort, FlyStandaloneAuthConfig, FlyFileSelection as FlySurveyFileSelection, FlyFormAnswer as FlySurveyFormAnswer, FlyFormAnswerValue as FlySurveyFormAnswerValue, FlyFormDefinition as FlySurveyFormDefinition, FlyFormFieldOptions as FlySurveyFormFieldOptions, FlyFormOption as FlySurveyFormOption, FlyFormQuestion as FlySurveyFormQuestion, FlyFormQuestionType as FlySurveyQuestionType, FlyThemeMode, FlyTooltipPlacement, FlyTreeNavNode, FlyTypeaheadOption, FlyWindowHelpHintEventDetail, FlyWindowHelpPublisher, FlyWindowPageTitleEventDetail, FlyWindowTitlePublisher, FlyosPendingLaunches, FocusRestore, FormBannerKind, GanttDependency, GanttDependencyCreate, GanttRow, GanttRowDatesChange, GanttRowKind, GanttZoom, IconButtonVariant, LaunchContext, LoadBundleOptions, LookupDescriptor, LookupHandle, LookupRegistration, LookupResult, LookupSearch, MessageBoxButton, MessageBoxDontAskAgainConfig, MessageBoxOptions, MessageBoxOptionsWithAcknowledgement, MockAuthConfig, OpenWindowOptions, OuPrincipal, OuTerm, OverlayHandle, PageHeaderVariant, PresetTerm, ProgressTone, RemoteAppDef, RequestAppLaunchOptions, RoleOuLookupRow, RolePrincipal, RolesTerm, SegmentedOption, ShareOrgChartOption, ShareOuNode, SharePanelLevelOption, SharePermissionEntry, SharePrincipal, SharePrincipalKind, ShareUserResult, StateMessageKind, StepUpChallenge, StepUpReauthHandler, StepUpReauthRequest, ToastAction, ToastEntry, ToastOptions, ToastVariant, User, UserPrincipal, UsersTerm, WindowHelpHint, WindowInstance, WindowState };
10234
10501
  //# sourceMappingURL=flyos-design-system.d.ts.map