@flyos/design-system 2.0.0 → 2.2.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flyos/design-system",
3
- "version": "2.0.0",
3
+ "version": "2.2.0",
4
4
  "description": "FlyOS design system — shared components, directives, pipes, services, and models for Business App developers.",
5
5
  "keywords": [
6
6
  "flyos",
package/scss/_tokens.scss CHANGED
@@ -23,17 +23,18 @@
23
23
 
24
24
  // ── FlyOS Typography ──
25
25
  // Geist is the primary face (self-hosted, see styles/_geist-fonts.scss). Inter and the
26
- // system stack are the fallbacks, and the cascade also picks them up for scripts Geist
27
- // doesn't cover (ar / ur).
26
+ // system stack are the fallbacks. 'Noto Kufi Arabic' (self-hosted, styles/_kufi-fonts.scss,
27
+ // post-G7) carries the Arabic script for ar/ur: its @font-face is unicode-range-scoped to
28
+ // Arabic blocks, so per-GLYPH fallback gives Kufi to Arabic text and never touches Latin —
29
+ // Geist stays the Latin face in every locale, and no per-locale restatement is needed.
30
+ // In a consumer without that @font-face the name simply skips (pre-Kufi behaviour: system
31
+ // Arabic face) — External Apps declare their own faces per the estate convention.
28
32
  // ---
29
33
  // 2.0.0 removed 'SF Pro Display' / 'SF Pro' — D8 (no SF fonts, ever, for licensing). The
30
34
  // repo had been SHIPPING them: 9 self-hosted woff2 faces, preloaded from index.html.
31
- // Removing them changes NOTHING for ar/ur, contrary to the comment that used to sit here
32
- // and to the one in `_geist-fonts.scss`: measured in the live shell, Arabic and Urdu
33
- // render byte-identically with and without SF Pro in the stack (its @font-face rules carry
34
- // no unicode-range, and it supplies no Arabic glyphs at all — the apparent width delta was
35
- // one SPACE character). Those scripts have always resolved to the system Arabic face.
36
- --font-family: 'Geist', 'Inter', -apple-system, blinkmacsystemfont, 'Segoe UI', sans-serif;
35
+ // Removing them changed NOTHING for ar/ur: SF Pro carries no unicode-range and no Arabic
36
+ // glyphs, so before Kufi those scripts always resolved to the system Arabic face.
37
+ --font-family: 'Geist', 'Inter', 'Noto Kufi Arabic', -apple-system, blinkmacsystemfont, 'Segoe UI', sans-serif;
37
38
  --font-family-mono: 'Geist Mono', ui-monospace, 'SF Mono', menlo, monospace;
38
39
  --font-xl-title1: 700 48px/56px var(--font-family);
39
40
  --font-xl-title2: 700 38px/46px var(--font-family);
@@ -1589,17 +1589,27 @@ interface FlyAuthRefreshPayload {
1589
1589
  * across replicas). The bearer rides as `?access_token=` via the {@link AuthService} token. Idempotent
1590
1590
  * `connect()`; safe to call once auth is established.</p>
1591
1591
  *
1592
- * <p>Requires `@microsoft/signalr` (declared a peer dependency of the design system).</p>
1592
+ * <p>Requires `@microsoft/signalr` (declared a peer dependency of the design system). The package is
1593
+ * imported DYNAMICALLY on first `connect()`: this client sits in the core design system, which every
1594
+ * boot loads, and a static import made `@microsoft/signalr` (~14 KB compressed) part of every boot's
1595
+ * shared-module wave even though no bytes are needed until the hub actually connects. Under Native
1596
+ * Federation the dynamic import resolves through the same import map / shared singleton as a static
1597
+ * one — only the WHEN changes.</p>
1593
1598
  */
1594
1599
  declare class FlyHubClient {
1595
1600
  private readonly auth;
1596
1601
  private connection;
1602
+ /** In-flight first connect (module import + build + start). Guards double-connect. */
1603
+ private connecting;
1604
+ /** Set when disconnect() arrives while the first connect is still importing/starting. */
1605
+ private abandonConnect;
1597
1606
  readonly connected: _angular_core.WritableSignal<boolean>;
1598
1607
  private readonly _authRefresh$;
1599
1608
  /** Emits when the server signals this user's authorization shape changed. */
1600
1609
  readonly authRefresh$: Observable<FlyAuthRefreshPayload>;
1601
1610
  /** Open the hub connection (idempotent). No-op without an access token. */
1602
1611
  connect(): void;
1612
+ private doConnect;
1603
1613
  disconnect(): Promise<void>;
1604
1614
  get isConnected(): boolean;
1605
1615
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyHubClient, never>;
@@ -2513,6 +2523,44 @@ declare class SourceAppResolver {
2513
2523
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<SourceAppResolver>;
2514
2524
  }
2515
2525
 
2526
+ /**
2527
+ * Host-provided handler that navigates to a resolved in-app entity deep link
2528
+ * when the user clicks a `flyos:` anchor inside an editor surface (the
2529
+ * `fly-markdown-editor` in `@flyos/design-system-editor`, or any consumer that
2530
+ * resolves `flyos:` anchors itself).
2531
+ *
2532
+ * The design system can RESOLVE a `flyos:<appId>.<entity>/<id>` href to a
2533
+ * `{ appId, route }` (via `AgentLookupRegistry`), but it cannot LAUNCH it — the
2534
+ * launcher lives in the host (the desktop shell's `ShellLauncherService`, or a
2535
+ * remote's own router). The host provides this token; when absent, a `flyos:`
2536
+ * click is a no-op (the link is non-routable in a bare browser anyway).
2537
+ *
2538
+ * WHY THIS LIVES IN THE CORE PACKAGE, NOT `@flyos/design-system-editor`
2539
+ * (its original home, moved 2026-08-16):
2540
+ *
2541
+ * 1. Weight — the token is the editor package's HOST-INTEGRATION seam, so
2542
+ * hosts must import it eagerly to provide it (the shell does, from
2543
+ * `app.config.ts`). When it lived in the editor barrel that one value
2544
+ * import dragged the whole Tiptap/KaTeX stack into every boot.
2545
+ * 2. Identity — the core package is the federation-shared singleton with one
2546
+ * instance everywhere, so `provide` and `inject` always see the SAME token
2547
+ * object. The editor package is deliberately NOT a shared singleton
2548
+ * (remotes may bundle their own copy), and an injection token defined
2549
+ * there splits into per-copy identities across the federation boundary —
2550
+ * a provider under one identity is invisible to an `inject` under another.
2551
+ *
2552
+ * `@flyos/design-system-editor` re-exports both names, so existing imports
2553
+ * from the editor barrel keep compiling and — because the re-export aliases
2554
+ * THIS object — share this single identity.
2555
+ */
2556
+ type EntityLinkLauncher = (target: {
2557
+ readonly appId: string;
2558
+ readonly route: string;
2559
+ readonly kind: string;
2560
+ readonly id: string;
2561
+ }) => void;
2562
+ declare const ENTITY_LINK_LAUNCHER: InjectionToken<EntityLinkLauncher>;
2563
+
2516
2564
  /**
2517
2565
  * Per-window publisher handle returned by {@link FlyWindowHelpService.forWindow}.
2518
2566
  * Bound to a single window id; keep the handle and call {@link setHint} as the
@@ -2859,6 +2907,39 @@ declare class FlyUserDirectoryService {
2859
2907
  * single global stylesheet Angular emits. If a remote emits multiple stylesheets,
2860
2908
  * only the first is loaded — acceptable for Wave A1.
2861
2909
  */
2910
+ /** Options for {@link loadRemoteStyles}. */
2911
+ interface LoadRemoteStylesOptions {
2912
+ /**
2913
+ * Suppress the "no stylesheet found" warning. For opportunistic warm-up calls
2914
+ * (the shell pre-fetches every registered remote's stylesheet at manifest
2915
+ * load) where an unreachable remote is expected — e.g. a stopped dev server
2916
+ * in mock mode. A real window open retries loudly.
2917
+ */
2918
+ silent?: boolean;
2919
+ /**
2920
+ * Resolve only after the stylesheet's BYTES have been fetched (capped at
2921
+ * {@link APPLY_CAP_MS}), not merely after the element is injected. Without
2922
+ * this the returned promise settles while the CSS is still in flight, so a
2923
+ * caller that paints immediately afterwards can paint BEFORE the remote's
2924
+ * global rules apply — and any window-chrome override the remote ships then
2925
+ * lands as a visible layout shift (the stg CLS 0.638 finding). The shell's
2926
+ * registration-time warm-up passes this so the boot path can gate a window's
2927
+ * first paint on it. Fail-soft: timeouts and load errors still resolve.
2928
+ */
2929
+ awaitApplied?: boolean;
2930
+ /**
2931
+ * Short-circuit when this appId's stylesheet element is ALREADY in the
2932
+ * document: honour `awaitApplied` against the existing element and skip
2933
+ * re-discovery entirely. Without this every call re-fetches the remote's
2934
+ * `index.html` (deliberately uncached, so hot-deploys are picked up) even
2935
+ * when the boot warm applied the stylesheet milliseconds earlier — on the
2936
+ * deep-link boot that re-fetch was a measured ~300 ms serialized straight
2937
+ * into the LCP window. The window-open path passes this; long-session
2938
+ * staleness is covered by the chunk-404 reload-once self-heal, which a stale
2939
+ * stylesheet rides too.
2940
+ */
2941
+ preferApplied?: boolean;
2942
+ }
2862
2943
  /**
2863
2944
  * Injects the remote's stylesheet into `document.head`.
2864
2945
  *
@@ -2884,7 +2965,35 @@ declare class FlyUserDirectoryService {
2884
2965
  * The `data-fly-href` attribute stores the discovered href separately from the
2885
2966
  * element content so idempotency checks can compare the URL without parsing CSS.
2886
2967
  */
2887
- declare function loadRemoteStyles(appId: string, remoteBaseUrl: string): Promise<void>;
2968
+ declare function loadRemoteStyles(appId: string, remoteBaseUrl: string, opts?: LoadRemoteStylesOptions): Promise<void>;
2969
+ /**
2970
+ * Warms a remote's stylesheet into the HTTP cache WITHOUT applying it.
2971
+ *
2972
+ * Discovery is identical to {@link loadRemoteStyles} (fetch the remote's
2973
+ * `index.html`, scan for the hashed stylesheet, validate the href), but the
2974
+ * CSS is then fetched with a plain `fetch()` and the body discarded — nothing
2975
+ * is injected into `document.head`.
2976
+ *
2977
+ * Why this exists: applying a stylesheet registers its `@font-face` rules
2978
+ * document-wide, and the browser then downloads every face some text in the
2979
+ * document matches. The shell's deferred warm-up used to APPLY every
2980
+ * registered-but-unopened remote's stylesheet, which on a Circles deep link
2981
+ * pulled Thoughts' self-hosted Inter + Noto Kufi woff2 (~71 KB) into the LCP
2982
+ * window — for an app with no open window (stg trace, 2026-08-15). A cache
2983
+ * prefetch keeps the later real apply (window open, `loadRemoteStyles` with
2984
+ * `awaitApplied`) near-instant while deferring the font cost to the first
2985
+ * open, where the faces are actually about to be used.
2986
+ *
2987
+ * The fetch uses `mode: 'cors'` + `credentials: 'omit'` so its cache entry
2988
+ * matches the apply path's `<link crossorigin="anonymous">` request. (The
2989
+ * legacy `<style>@import` fallback path is no-cors and would not hit this
2990
+ * entry — modern browsers all take the `link[layer]` path, so the fallback
2991
+ * merely re-fetches, same as before.)
2992
+ *
2993
+ * Fail-soft and idempotent: errors are swallowed (the open path retries
2994
+ * loudly), and an already-applied appId is a no-op.
2995
+ */
2996
+ declare function prefetchRemoteStyles(appId: string, remoteBaseUrl: string): Promise<void>;
2888
2997
  /**
2889
2998
  * Removes the injected stylesheet element (either `<link>` or `<style>`) for
2890
2999
  * `appId` from `document.head` and clears all internal state for this appId.
@@ -3059,6 +3168,8 @@ declare class MockAuthService {
3059
3168
  hasAnyRole(required: readonly string[]): boolean;
3060
3169
  /** Parity with the real AuthService — patch profile fields on the mock session. */
3061
3170
  patchProfile(patch: Partial<User>): void;
3171
+ /** A fresh 24h mock session from the app-supplied config — used at construction and by {@link startLogin}. */
3172
+ private createSession;
3062
3173
  /** Override in subclass to supply app-specific mock data. */
3063
3174
  protected getConfig(): MockAuthConfig;
3064
3175
  init(): Promise<void>;
@@ -5212,7 +5323,7 @@ declare class FlyDrawerComponent {
5212
5323
  * downstream (the panel class, the sheet's own geometry) reads THIS, never the raw
5213
5324
  * input, so `auto` is resolved in exactly one place.
5214
5325
  */
5215
- readonly resolvedVariant: _angular_core.Signal<"side" | "sheet">;
5326
+ readonly resolvedVariant: _angular_core.Signal<"sheet" | "side">;
5216
5327
  /** Size/side classes as an ngClass map (kept off the `[class]` string binding,
5217
5328
  * which can race the leaving toggle and stutter the animation). */
5218
5329
  readonly panelClass: _angular_core.Signal<{
@@ -9335,6 +9446,21 @@ type FlyCurrencySelectorValue = string | readonly string[] | null;
9335
9446
  * i18n is self-sufficient through the `currency_selector.*` keys in `DS_BASELINE_LOCALES`
9336
9447
  * (en/ar/fr/ur); RTL works via logical CSS.
9337
9448
  *
9449
+ * ## `locked`, vs `disabled`
9450
+ * `disabled` is UI convention for "not applicable right now" — greyed out, no explanation,
9451
+ * because none is owed (a form section that only exists once a prior step completes, say).
9452
+ * `locked` is a different claim entirely: **the value is fixed on purpose**, because
9453
+ * something downstream now depends on it (PPM freezes a project's currency the moment any
9454
+ * financial row exists — changing it would silently re-denominate every stored amount).
9455
+ * A dimmed control with no explanation is exactly the failure `skills/magic-bar-actions.md`
9456
+ * §3.6 names for actions ("a vanishing action teaches the user nothing"); the same argument
9457
+ * applies to a frozen field. So `locked` renders differently on purpose: full-opacity (never
9458
+ * dimmed — the value is not "unavailable", it is authoritative), no dropdown affordance at
9459
+ * all, and an always-visible reason caption instead of a hover-only tooltip, so the "why" is
9460
+ * legible to a screen reader without requiring focus and to a sighted user without hovering.
9461
+ * `locked` takes precedence when both are set — it is the more specific state and the
9462
+ * `disabled` trigger markup (with its dropdown affordances) never renders underneath it.
9463
+ *
9338
9464
  * @example
9339
9465
  * ```html
9340
9466
  * <!-- Loads /api/currencies/brief itself: -->
@@ -9345,6 +9471,12 @@ type FlyCurrencySelectorValue = string | readonly string[] | null;
9345
9471
  * mode="multi"
9346
9472
  * [allowedCodes]="tenantCurrencies()"
9347
9473
  * (selectionDetailChange)="onCurrenciesPicked($event)" />
9474
+ *
9475
+ * <!-- Frozen once the project has financial rows — reason is an i18n KEY, never text: -->
9476
+ * <fly-currency-selector
9477
+ * [(ngModel)]="project.currency"
9478
+ * [locked]="project.hasFinancialRows"
9479
+ * lockedReasonKey="projects.currency_locked_reason" />
9348
9480
  * ```
9349
9481
  */
9350
9482
  declare class FlyCurrencySelectorComponent implements ControlValueAccessor {
@@ -9366,6 +9498,24 @@ declare class FlyCurrencySelectorComponent implements ControlValueAccessor {
9366
9498
  readonly pinnedCodes: _angular_core.InputSignal<readonly string[]>;
9367
9499
  /** Disable the whole control (also driven by reactive-forms `setDisabledState`). */
9368
9500
  readonly disabled: _angular_core.InputSignal<boolean>;
9501
+ /**
9502
+ * Freeze the current selection because something downstream now depends on it — a
9503
+ * DIFFERENT claim than `disabled`. See the class doc's "`locked`, vs `disabled`"
9504
+ * section. Renders the current pick as a plain, non-interactive readout (no dropdown
9505
+ * affordance at all) plus an always-visible reason caption — never a dimmed clickable-
9506
+ * looking control. Takes precedence over `disabled` when both are set.
9507
+ */
9508
+ readonly locked: _angular_core.InputSignal<boolean>;
9509
+ /**
9510
+ * i18n KEY (never resolved text — see `skills/magic-bar-actions.md` §3.4) explaining
9511
+ * WHY the control is locked. Omit to use the localized `currency_selector.locked_default_reason`
9512
+ * baseline key; supply your own only when that default reason is wrong for your case
9513
+ * (mirrors `MagicBarActionSpec.disabledTipKey`'s "supply only when the default is wrong"
9514
+ * contract). Ignored while `locked` is `false`.
9515
+ */
9516
+ readonly lockedReasonKey: _angular_core.InputSignal<string | null>;
9517
+ /** `I18nService.t()` params for `lockedReasonKey`, e.g. `{ date: frozenOn }`. */
9518
+ readonly lockedReasonParams: _angular_core.InputSignal<Record<string, string | number> | undefined>;
9369
9519
  /** Show the trigger clear (✕) affordance when there is a selection. */
9370
9520
  readonly clearable: _angular_core.InputSignal<boolean>;
9371
9521
  /** Trigger text when nothing is picked. Omit for the localized default. */
@@ -9383,6 +9533,8 @@ declare class FlyCurrencySelectorComponent implements ControlValueAccessor {
9383
9533
  private readonly _uid;
9384
9534
  readonly listboxId: string;
9385
9535
  readonly triggerId: string;
9536
+ /** id of the always-rendered locked-reason caption; `aria-describedby` target of the locked readout. */
9537
+ readonly lockedReasonId: string;
9386
9538
  readonly isOpen: _angular_core.WritableSignal<boolean>;
9387
9539
  readonly searchTerm: _angular_core.WritableSignal<string>;
9388
9540
  readonly activeIndex: _angular_core.WritableSignal<number>;
@@ -9410,6 +9562,8 @@ declare class FlyCurrencySelectorComponent implements ControlValueAccessor {
9410
9562
  readonly clearText: _angular_core.Signal<string>;
9411
9563
  readonly pinnedGroupText: _angular_core.Signal<string>;
9412
9564
  readonly allGroupText: _angular_core.Signal<string>;
9565
+ /** Resolved locked-reason text — the default baseline key, or the host's `lockedReasonKey`. */
9566
+ readonly lockedReasonText: _angular_core.Signal<string>;
9413
9567
  /** Every offered row, after the `allowedCodes` restriction. */
9414
9568
  readonly available: _angular_core.Signal<readonly FlyCurrency[]>;
9415
9569
  private readonly _byCode;
@@ -9461,7 +9615,105 @@ declare class FlyCurrencySelectorComponent implements ControlValueAccessor {
9461
9615
  private _commit;
9462
9616
  private _touch;
9463
9617
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyCurrencySelectorComponent, never>;
9464
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyCurrencySelectorComponent, "fly-currency-selector", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "currencies": { "alias": "currencies"; "required": false; "isSignal": true; }; "fetchFn": { "alias": "fetchFn"; "required": false; "isSignal": true; }; "allowedCodes": { "alias": "allowedCodes"; "required": false; "isSignal": true; }; "pinnedCodes": { "alias": "pinnedCodes"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "selectionDetailChange": "selectionDetailChange"; "openedChange": "openedChange"; }, never, never, true, never>;
9618
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyCurrencySelectorComponent, "fly-currency-selector", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "currencies": { "alias": "currencies"; "required": false; "isSignal": true; }; "fetchFn": { "alias": "fetchFn"; "required": false; "isSignal": true; }; "allowedCodes": { "alias": "allowedCodes"; "required": false; "isSignal": true; }; "pinnedCodes": { "alias": "pinnedCodes"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "locked": { "alias": "locked"; "required": false; "isSignal": true; }; "lockedReasonKey": { "alias": "lockedReasonKey"; "required": false; "isSignal": true; }; "lockedReasonParams": { "alias": "lockedReasonParams"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "selectionDetailChange": "selectionDetailChange"; "openedChange": "openedChange"; }, never, never, true, never>;
9619
+ }
9620
+
9621
+ /**
9622
+ * Locale-aware money formatting — the primitive `fly-currency-selector` never shipped
9623
+ * (see D-B7-2 in `FlyOS.PPM/.workflow/design/DECISIONS.md`).
9624
+ *
9625
+ * `FlyCurrency.decimalDigits` exists precisely so a consumer "doesn't have to assume 2
9626
+ * and misprice a dinar" — and yet nothing in the design system read it. Every consuming
9627
+ * app hand-rolled its own money string, and the ones that hardcoded `.toFixed(2)` are
9628
+ * wrong for seven real ISO 4217 currencies (BHD, IQD, JOD, KWD, LYD, OMR, TND — all
9629
+ * 3-decimal, all Gulf/MENA, on a platform whose reference tenant is a UAE government
9630
+ * entity).
9631
+ *
9632
+ * ## Why `formatToParts`, not a hand-rolled `${symbol}${number}` template
9633
+ * Currency placement is not "symbol then number" everywhere: `en` prefixes (`$1,234.50`),
9634
+ * `fr` and `ar` suffix it (`1 234,50 €`, with `ar` additionally wrapping the whole
9635
+ * expression in RTL marks). Building the string manually would mean re-deriving that
9636
+ * placement table ourselves and getting it wrong for a locale nobody tested. Instead
9637
+ * this asks `Intl.NumberFormat` to lay out a real `style: 'currency'` string for the
9638
+ * given locale, then walks the parts and swaps only the `currency` token for our own
9639
+ * text (the platform's `symbol` field, the code, or nothing) — every digit, the sign,
9640
+ * the decimal/group separators and the placement itself stay exactly what `Intl` (and
9641
+ * therefore the platform's existing number-formatting surface, `format.ts`) already
9642
+ * gets right for that locale.
9643
+ *
9644
+ * ## Why the Intl template is always built with `currencyDisplay: 'code'`
9645
+ * The formatter that produces the parts to substitute into is ALWAYS built with
9646
+ * `currencyDisplay: 'code'`, never `'symbol'` — even when `display: 'symbol'` is what
9647
+ * the caller asked for. `'code'` is the one `currencyDisplay` value ICU renders with a
9648
+ * stable separator (a literal space) between the currency token and the number, in
9649
+ * every locale tested (`en`, `fr`, `ar`, `ar-EG`). `'symbol'` does NOT: whether ICU
9650
+ * inserts a space depends on whether ITS OWN symbol for that specific currency happens
9651
+ * to be a single glyph (`$`, no space) or a multi-letter fallback (`KWD`, WITH a space)
9652
+ * — a per-currency accident of ICU's data, not something this function controls. Using
9653
+ * `'symbol'` as the template would make `display: 'symbol'` output space-inconsistent
9654
+ * currency-to-currency for reasons that have nothing to do with what this function
9655
+ * actually renders (the platform's OWN `symbol` field, substituted in afterward).
9656
+ *
9657
+ * ## `decimalDigits` always wins over Intl's own idea of the currency
9658
+ * `minimumFractionDigits`/`maximumFractionDigits` are pinned to the caller's
9659
+ * `decimalDigits`, not left to Intl's built-in per-currency table. Intl's table is
9660
+ * usually right, but the platform's own `/api/currencies/brief` catalogue is the
9661
+ * authoritative source on this platform — pinning the digits is what makes this
9662
+ * function agree with the picker regardless of whether the two ever disagree.
9663
+ */
9664
+ /** `'symbol'` (default): the row's own symbol (`$`, `د.إ`) — falls back to the ISO code
9665
+ * when no symbol is available (see the bare-code fallback below). `'code'`: always the
9666
+ * unambiguous ISO 4217 code — the right choice for a table column mixing currencies.
9667
+ * `'none'`: the bare number, for a headline figure whose currency is already named
9668
+ * elsewhere on screen (a currency selector next to it, a report title). */
9669
+ type FlyMoneyDisplay = 'symbol' | 'code' | 'none';
9670
+ interface FlyFormatMoneyOptions {
9671
+ /** @default 'symbol' */
9672
+ display?: FlyMoneyDisplay;
9673
+ /** BCP-47 locale tag. @default 'en' */
9674
+ locale?: string;
9675
+ }
9676
+ /**
9677
+ * Formats `amount` in `currency`, localized to `options.locale`.
9678
+ *
9679
+ * ```ts
9680
+ * flyFormatMoney(1234.5, kwdRow) // "د.ك 1,234.500" (KWD is 3-decimal)
9681
+ * flyFormatMoney(1234, 'JPY') // "JPY 1,234" (bare code, no symbol to read — degrades to the code)
9682
+ * flyFormatMoney(-42, usdRow, { display: 'code' }) // "-USD 42.00"
9683
+ * flyFormatMoney(99.9, eurRow, { display: 'none' }) // "99.90" (currency named elsewhere on screen)
9684
+ * flyFormatMoney(null, usdRow) // "—" (never "NaN")
9685
+ * ```
9686
+ *
9687
+ * `amount == null` or non-finite (`NaN`, `Infinity`), or an unresolvable `currency`,
9688
+ * renders {@link FLY_EMPTY_VALUE} — the same placeholder every other `format.ts`
9689
+ * primitive uses, so a money cell in a mixed table degrades exactly like its neighbours
9690
+ * instead of introducing a second "no value" convention.
9691
+ */
9692
+ declare function flyFormatMoney(amount: number | null | undefined, currency: FlyCurrency | string | null | undefined, options?: FlyFormatMoneyOptions): string;
9693
+
9694
+ /**
9695
+ * `{{ amount | flyMoney: currencyRow }}` → `"$1,234.50"` / `{{ amount | flyMoney: 'KWD' }}`
9696
+ * → `"KD 1,234.500"`.
9697
+ *
9698
+ * Template wrapper over {@link flyFormatMoney}, defaulting the locale to the active
9699
+ * {@link I18nService} language the same way every other `Fly*Pipe` in `format.pipes.ts`
9700
+ * does — see that file's doc comment for the "pass the locale signal explicitly in a
9701
+ * view that must react live to the language switcher" caveat, which applies here too.
9702
+ *
9703
+ * A separate file from `format.pipes.ts` on purpose: this pipe's `currency` argument
9704
+ * depends on `FlyCurrency` (the currency-selector's data contract), a domain type the
9705
+ * pure number/byte/date formatters in `format.pipes.ts` have no reason to import.
9706
+ *
9707
+ * ```html
9708
+ * {{ invoice.total | flyMoney: invoice.currency }}
9709
+ * {{ invoice.total | flyMoney: invoice.currency : { display: 'code' } }}
9710
+ * ```
9711
+ */
9712
+ declare class FlyMoneyPipe implements PipeTransform {
9713
+ private readonly i18n;
9714
+ transform(amount: number | null | undefined, currency: FlyCurrency | string | null | undefined, options?: FlyFormatMoneyOptions): string;
9715
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyMoneyPipe, never>;
9716
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<FlyMoneyPipe, "flyMoney", true>;
9465
9717
  }
9466
9718
 
9467
9719
  /**
@@ -11517,6 +11769,7 @@ declare class FlyAppTopbarComponent {
11517
11769
  protected readonly activeModule: _angular_core.Signal<FlyAppModule | null>;
11518
11770
  protected readonly brandAriaLabel: _angular_core.Signal<string>;
11519
11771
  protected readonly switchAriaLabel: _angular_core.Signal<string>;
11772
+ protected readonly triggerAriaLabel: _angular_core.Signal<string>;
11520
11773
  constructor();
11521
11774
  protected iconFor(key: string): TemplateRef<unknown> | null;
11522
11775
  protected indexOf(mod: FlyAppModule): number;
@@ -12342,6 +12595,6 @@ declare const AUDIENCE_ERROR_CODES: {
12342
12595
  };
12343
12596
  type AudienceErrorCode = (typeof AUDIENCE_ERROR_CODES)[keyof typeof AUDIENCE_ERROR_CODES];
12344
12597
 
12345
- 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_MAGIC_BAR_EVENT, FLY_MAGIC_BAR_ICONS, FLY_MAGIC_BAR_STORE_KEY, 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_SCAN_PENDING_DEFAULT_DELAY_MS, FLY_SCAN_PENDING_MAX_RETRIES, FLY_SCAN_PENDING_STATUS, FLY_SEARCH_DEBOUNCE_MS, FLY_SKIN_TONES, FLY_STANDALONE_AUTH_CONFIG, FLY_THEME_MODE_IDS, FLY_VIEWPORT_IS_MOBILE, 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, FlyCurrencySelectorComponent, FlyDataTableComponent, FlyDatePipe, FlyDateTimePipe, FlyDebouncer, FlyDecimalNumberPipe, FlyDetailCardComponent, FlyDetailShellComponent, FlyDrawerComponent, FlyDurationPipe, FlyDynamicFormComponent, FlyEmojiPickerComponent, FlyFieldComponent, FlyFileDownloadService, FlyFileUploadComponent, FlyFilterPanelComponent, FlyFormBannerComponent, FlyFormFooterComponent, FlyFormGridComponent, FlyFormSectionComponent, FlyFullNumberPipe, FlyGanttComponent, FlyHubClient, FlyIconButtonComponent, FlyIfAdminDirective, FlyIfRoleDirective, FlyImageUploadComponent, FlyLeaderboardComponent, FlyMagicActionsComponent, 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, MAGIC_BAR_SEARCH_WIDTH_DEFAULT, MAGIC_BAR_SEARCH_WIDTH_MAX, MAGIC_BAR_SEARCH_WIDTH_MIN, MagicBarRegistry, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, NOVA_PRIORITY_TONE, NOVA_STATUS_TONE, NOVA_TONE_FALLBACK, 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, clampMagicBarSearchWidth, clampPage, clampSliderValue, connectRemoteLaunch, enterActivatesNatively, filterGroup, filterSuggestions, findLocaleByDialect, findLocaleByPrefix, firstEnabledIndex, firstModuleIndex, flattenModules, flyAdminGuard, flyApiErrorMessage, flyCaptchaBase64Utf8, flyCaptchaBuildToken, flyCaptchaSha256Hex, flyCompactNumber, flyDebounced, flyDecimalNumber, flyDownloadBlob, flyDuration, flyEmojiFor, flyEmojiIsTonable, flyEmojiPackUrl, flyExportFileName, flyFirstEnabledIndex, flyFormatBytes, flyFormatDate, flyFormatDateTime, flyFormatTime, flyFullNumber, flyNextEnabledIndex, flyNextSegmentIndex, flyRelativeTime, flyResolveActiveTab, flyRoleGuard, flyScanPendingDelayMs, flyScanRetry, flySignedCompact, flySkinToneLabelKey, flyStandaloneAuthGuard, flyStandaloneAuthInterceptor, flyToDateOnly, flyToPage, flyUnwrap, flyUnwrapLenient, hasAnyRoleIn, healNativeFederationCacheOnce, initialExpanded, isAccentColor, isChunkLoadError, isFlyAuthStorePopulated, isNativeFederationCacheError, isRtlLocale, isRtlLocaleEntry, isValidCron, isValidSingleField, loadRemoteStyles, magicBarOwnerKey, magicBarSearchText, matchFlyRoutePattern, nextEnabledIndex, nextModuleIndex, nextSegmentIndex, nextSort, normalizeFlyTheme, normalizeRoles, novaPriorityToneVar, novaStatusToneVar, 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 };
12346
- 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, CardDensity, CardLayout, ChartTerm, ChildWindowData, ChipTone, ConfirmKind, ConnectRemoteLaunchOptions, ContextMenuAlign, ContextMenuItem, ContextMenuSection, CronAdvancedFieldDef, CronMode, CronParts, CronWeekday, DesktopApp, DesktopAppCategory, DesktopAppKind, DetailSection, DialogResultWithAcknowledgement, EmbeddedSessionProbe, EntityLinkSelection, FilterGroup, FlyAchievementRow, FlyApiError, FlyApiResponse, 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, FlyCurrency, FlyCurrencyFetchFn, FlyCurrencySelectorMode, FlyCurrencySelectorValue, FlyDrawerBodyPadding, FlyDrawerPosition, FlyDrawerSide, FlyDrawerSize, FlyDrawerVariant, FlyEmojiCategory, FlyEmojiCell, FlyEmojiEntry, FlyEmojiPack, FlyEmojiPackEntry, FlyEmojiPackManifest, FlyEmojiPickerSize, FlyEmojiPickerTab, FlyEmojiSection, FlyFileInfo, FlyFileSelection, FlyFormAnswer, FlyFormAnswerValue, FlyFormDefinition, FlyFormFieldOptions, FlyFormOption, FlyFormQuestion, FlyFormQuestionType, FlyFormScoreDisplay, FlyLaunchEventDetail, FlyLaunchRequestDetail, FlyLeaderboardRow, FlyLiveRefreshOptions, FlyLocaleEntry, FlyMagicBarIconName, FlyMetaItem, FlyModerationLoadPageRequest, FlyModerationLockThreadRequest, FlyModerationOpenSubjectRequest, FlyModerationReport, FlyModerationReportPage, FlyModerationResolutionStatus, FlyModerationResolveRequest, FlyNavigableItem, FlyPageMeta, FlyPageResult, FlyPaged, FlyPeoplePickerMode, FlyPeoplePickerOption, FlyPeopleSearchFn, FlyPointsSummary, FlyRemoteContext, FlyRemoteEagerRoute, FlyRemoteLazyRoute, FlyRemoteLoadedComponent, 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, MagicBarAction, MagicBarActionKind, MagicBarActionSpec, MagicBarActionView, MagicBarContribution, MagicBarGroup, MagicBarGroupSpec, MagicBarGroupView, MagicBarOwnerRef, MagicBarPublisher, MagicBarRadioMenu, MagicBarRadioMenuSpec, MagicBarRadioMenuView, MagicBarRadioOption, MagicBarSearch, MagicBarSearchSeed, MagicBarSearchSpec, MagicBarSearchView, MagicBarTextParams, MagicBarTone, MagicBarView, 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, TabsVariant, ToastAction, ToastEntry, ToastOptions, ToastVariant, User, UserPrincipal, UsersTerm, WindowHelpHint, WindowInstance, WindowState };
12598
+ 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, ENTITY_LINK_LAUNCHER, 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_MAGIC_BAR_EVENT, FLY_MAGIC_BAR_ICONS, FLY_MAGIC_BAR_STORE_KEY, 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_SCAN_PENDING_DEFAULT_DELAY_MS, FLY_SCAN_PENDING_MAX_RETRIES, FLY_SCAN_PENDING_STATUS, FLY_SEARCH_DEBOUNCE_MS, FLY_SKIN_TONES, FLY_STANDALONE_AUTH_CONFIG, FLY_THEME_MODE_IDS, FLY_VIEWPORT_IS_MOBILE, 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, FlyCurrencySelectorComponent, FlyDataTableComponent, FlyDatePipe, FlyDateTimePipe, FlyDebouncer, FlyDecimalNumberPipe, FlyDetailCardComponent, FlyDetailShellComponent, FlyDrawerComponent, FlyDurationPipe, FlyDynamicFormComponent, FlyEmojiPickerComponent, FlyFieldComponent, FlyFileDownloadService, FlyFileUploadComponent, FlyFilterPanelComponent, FlyFormBannerComponent, FlyFormFooterComponent, FlyFormGridComponent, FlyFormSectionComponent, FlyFullNumberPipe, FlyGanttComponent, FlyHubClient, FlyIconButtonComponent, FlyIfAdminDirective, FlyIfRoleDirective, FlyImageUploadComponent, FlyLeaderboardComponent, FlyMagicActionsComponent, FlyMetaListComponent, FlyModalComponent, FlyModerationQueueComponent, FlyModuleIconDirective, FlyMoneyPipe, 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, MAGIC_BAR_SEARCH_WIDTH_DEFAULT, MAGIC_BAR_SEARCH_WIDTH_MAX, MAGIC_BAR_SEARCH_WIDTH_MIN, MagicBarRegistry, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, NOVA_PRIORITY_TONE, NOVA_STATUS_TONE, NOVA_TONE_FALLBACK, 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, clampMagicBarSearchWidth, clampPage, clampSliderValue, connectRemoteLaunch, enterActivatesNatively, filterGroup, filterSuggestions, findLocaleByDialect, findLocaleByPrefix, firstEnabledIndex, firstModuleIndex, flattenModules, flyAdminGuard, flyApiErrorMessage, flyCaptchaBase64Utf8, flyCaptchaBuildToken, flyCaptchaSha256Hex, flyCompactNumber, flyDebounced, flyDecimalNumber, flyDownloadBlob, flyDuration, flyEmojiFor, flyEmojiIsTonable, flyEmojiPackUrl, flyExportFileName, flyFirstEnabledIndex, flyFormatBytes, flyFormatDate, flyFormatDateTime, flyFormatMoney, flyFormatTime, flyFullNumber, flyNextEnabledIndex, flyNextSegmentIndex, flyRelativeTime, flyResolveActiveTab, flyRoleGuard, flyScanPendingDelayMs, flyScanRetry, flySignedCompact, flySkinToneLabelKey, flyStandaloneAuthGuard, flyStandaloneAuthInterceptor, flyToDateOnly, flyToPage, flyUnwrap, flyUnwrapLenient, hasAnyRoleIn, healNativeFederationCacheOnce, initialExpanded, isAccentColor, isChunkLoadError, isFlyAuthStorePopulated, isNativeFederationCacheError, isRtlLocale, isRtlLocaleEntry, isValidCron, isValidSingleField, loadRemoteStyles, magicBarOwnerKey, magicBarSearchText, matchFlyRoutePattern, nextEnabledIndex, nextModuleIndex, nextSegmentIndex, nextSort, normalizeFlyTheme, normalizeRoles, novaPriorityToneVar, novaStatusToneVar, overlayStack, parseCron, parseStepUpChallenge, parseTags, prefetchRemoteStyles, 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 };
12599
+ 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, CardDensity, CardLayout, ChartTerm, ChildWindowData, ChipTone, ConfirmKind, ConnectRemoteLaunchOptions, ContextMenuAlign, ContextMenuItem, ContextMenuSection, CronAdvancedFieldDef, CronMode, CronParts, CronWeekday, DesktopApp, DesktopAppCategory, DesktopAppKind, DetailSection, DialogResultWithAcknowledgement, EmbeddedSessionProbe, EntityLinkLauncher, EntityLinkSelection, FilterGroup, FlyAchievementRow, FlyApiError, FlyApiResponse, 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, FlyCurrency, FlyCurrencyFetchFn, FlyCurrencySelectorMode, FlyCurrencySelectorValue, FlyDrawerBodyPadding, FlyDrawerPosition, FlyDrawerSide, FlyDrawerSize, FlyDrawerVariant, FlyEmojiCategory, FlyEmojiCell, FlyEmojiEntry, FlyEmojiPack, FlyEmojiPackEntry, FlyEmojiPackManifest, FlyEmojiPickerSize, FlyEmojiPickerTab, FlyEmojiSection, FlyFileInfo, FlyFileSelection, FlyFormAnswer, FlyFormAnswerValue, FlyFormDefinition, FlyFormFieldOptions, FlyFormOption, FlyFormQuestion, FlyFormQuestionType, FlyFormScoreDisplay, FlyFormatMoneyOptions, FlyLaunchEventDetail, FlyLaunchRequestDetail, FlyLeaderboardRow, FlyLiveRefreshOptions, FlyLocaleEntry, FlyMagicBarIconName, FlyMetaItem, FlyModerationLoadPageRequest, FlyModerationLockThreadRequest, FlyModerationOpenSubjectRequest, FlyModerationReport, FlyModerationReportPage, FlyModerationResolutionStatus, FlyModerationResolveRequest, FlyMoneyDisplay, FlyNavigableItem, FlyPageMeta, FlyPageResult, FlyPaged, FlyPeoplePickerMode, FlyPeoplePickerOption, FlyPeopleSearchFn, FlyPointsSummary, FlyRemoteContext, FlyRemoteEagerRoute, FlyRemoteLazyRoute, FlyRemoteLoadedComponent, 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, LoadRemoteStylesOptions, LookupDescriptor, LookupHandle, LookupRegistration, LookupResult, LookupSearch, MagicBarAction, MagicBarActionKind, MagicBarActionSpec, MagicBarActionView, MagicBarContribution, MagicBarGroup, MagicBarGroupSpec, MagicBarGroupView, MagicBarOwnerRef, MagicBarPublisher, MagicBarRadioMenu, MagicBarRadioMenuSpec, MagicBarRadioMenuView, MagicBarRadioOption, MagicBarSearch, MagicBarSearchSeed, MagicBarSearchSpec, MagicBarSearchView, MagicBarTextParams, MagicBarTone, MagicBarView, 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, TabsVariant, ToastAction, ToastEntry, ToastOptions, ToastVariant, User, UserPrincipal, UsersTerm, WindowHelpHint, WindowInstance, WindowState };
12347
12600
  //# sourceMappingURL=flyos-design-system.d.ts.map