@flyos/design-system 1.8.0 → 2.1.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/scss/_tokens.scss CHANGED
@@ -22,10 +22,19 @@
22
22
  --status-pending: var(--system-yellow);
23
23
 
24
24
  // ── FlyOS Typography ──
25
- // Geist is the primary face (self-hosted, see styles/_geist-fonts.scss).
26
- // SF Pro / Inter / system fonts remain as fallbacks; the cascade also picks
27
- // them up for scripts Geist doesn't cover (ar / ur).
28
- --font-family: 'Geist', 'SF Pro Display', 'SF Pro', 'Inter', -apple-system, blinkmacsystemfont, 'Segoe UI', sans-serif;
25
+ // Geist is the primary face (self-hosted, see styles/_geist-fonts.scss). Inter and the
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.
32
+ // ---
33
+ // 2.0.0 removed 'SF Pro Display' / 'SF Pro' — D8 (no SF fonts, ever, for licensing). The
34
+ // repo had been SHIPPING them: 9 self-hosted woff2 faces, preloaded from index.html.
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;
29
38
  --font-family-mono: 'Geist Mono', ui-monospace, 'SF Mono', menlo, monospace;
30
39
  --font-xl-title1: 700 48px/56px var(--font-family);
31
40
  --font-xl-title2: 700 38px/46px var(--font-family);
@@ -2859,6 +2859,27 @@ declare class FlyUserDirectoryService {
2859
2859
  * single global stylesheet Angular emits. If a remote emits multiple stylesheets,
2860
2860
  * only the first is loaded — acceptable for Wave A1.
2861
2861
  */
2862
+ /** Options for {@link loadRemoteStyles}. */
2863
+ interface LoadRemoteStylesOptions {
2864
+ /**
2865
+ * Suppress the "no stylesheet found" warning. For opportunistic warm-up calls
2866
+ * (the shell pre-fetches every registered remote's stylesheet at manifest
2867
+ * load) where an unreachable remote is expected — e.g. a stopped dev server
2868
+ * in mock mode. A real window open retries loudly.
2869
+ */
2870
+ silent?: boolean;
2871
+ /**
2872
+ * Resolve only after the stylesheet's BYTES have been fetched (capped at
2873
+ * {@link APPLY_CAP_MS}), not merely after the element is injected. Without
2874
+ * this the returned promise settles while the CSS is still in flight, so a
2875
+ * caller that paints immediately afterwards can paint BEFORE the remote's
2876
+ * global rules apply — and any window-chrome override the remote ships then
2877
+ * lands as a visible layout shift (the stg CLS 0.638 finding). The shell's
2878
+ * registration-time warm-up passes this so the boot path can gate a window's
2879
+ * first paint on it. Fail-soft: timeouts and load errors still resolve.
2880
+ */
2881
+ awaitApplied?: boolean;
2882
+ }
2862
2883
  /**
2863
2884
  * Injects the remote's stylesheet into `document.head`.
2864
2885
  *
@@ -2884,7 +2905,7 @@ declare class FlyUserDirectoryService {
2884
2905
  * The `data-fly-href` attribute stores the discovered href separately from the
2885
2906
  * element content so idempotency checks can compare the URL without parsing CSS.
2886
2907
  */
2887
- declare function loadRemoteStyles(appId: string, remoteBaseUrl: string): Promise<void>;
2908
+ declare function loadRemoteStyles(appId: string, remoteBaseUrl: string, opts?: LoadRemoteStylesOptions): Promise<void>;
2888
2909
  /**
2889
2910
  * Removes the injected stylesheet element (either `<link>` or `<style>`) for
2890
2911
  * `appId` from `document.head` and clears all internal state for this appId.
@@ -3059,6 +3080,8 @@ declare class MockAuthService {
3059
3080
  hasAnyRole(required: readonly string[]): boolean;
3060
3081
  /** Parity with the real AuthService — patch profile fields on the mock session. */
3061
3082
  patchProfile(patch: Partial<User>): void;
3083
+ /** A fresh 24h mock session from the app-supplied config — used at construction and by {@link startLogin}. */
3084
+ private createSession;
3062
3085
  /** Override in subclass to supply app-specific mock data. */
3063
3086
  protected getConfig(): MockAuthConfig;
3064
3087
  init(): Promise<void>;
@@ -4713,10 +4736,24 @@ declare class MessageBoxService {
4713
4736
  * current `MessageBoxService` request describes (icon, message, button set) and resolves that
4714
4737
  * request with the user's choice — the design-system replacement for native `alert()`/`confirm()`
4715
4738
  * dialogs, which the platform disallows (see `feedback_no_native_browser_dialogs`).
4739
+ *
4740
+ * ## The mobile confirm card (S5.4)
4741
+ * On mobile chrome the dialog stops being a fixed 400px plate floating in the middle of
4742
+ * a desktop and becomes the design's **confirm card**: full width less a 16px margin on
4743
+ * each side, one step rounder, and with its actions on a full-width row at the 44px
4744
+ * touch floor. That is a host class, not a media query, so the threshold stays where
4745
+ * S5.1 put it — see {@link FLY_VIEWPORT_IS_MOBILE}.
4746
+ *
4747
+ * This is the confirm surface users actually meet: `MessageBoxService` has ~59 call
4748
+ * sites across the shell and the core apps, while the DS's other confirm surface
4749
+ * (`fly-confirm-dialog`, the standalone business-app kit's port) has none outside the
4750
+ * design lab. Both got the treatment; only this one changes what anyone sees today.
4716
4751
  */
4717
4752
  declare class MessageBoxComponent implements AfterViewInit {
4718
4753
  private readonly injectedService;
4719
4754
  private elRef;
4755
+ /** Mobile chrome → the full-bleed confirm card. Read by the host class binding. */
4756
+ protected readonly isMobile: _angular_core.Signal<boolean>;
4720
4757
  /**
4721
4758
  * Optional service override. When bound, the component renders THIS instance's
4722
4759
  * state instead of the root singleton — the mechanism that lets each desktop
@@ -5088,15 +5125,25 @@ type FlyDrawerSide = 'end' | 'start';
5088
5125
  /** Standard body padding tier. `none` = full-bleed (consumer draws its own). */
5089
5126
  type FlyDrawerBodyPadding = 'none' | 'sm' | 'md' | 'lg';
5090
5127
  /**
5091
- * `'side'` (default) — the classic edge-pinned panel, sliding in along the inline axis
5092
- * (see {@link FlyDrawerSide}). `'sheet'` a bottom-anchored panel spanning the full
5093
- * inline size, sliding up from the block-end edge with rounded top corners; `side` is
5094
- * ignored in this mode (there is no edge to pick a sheet always anchors to the
5095
- * bottom). Stage 5 of the UX-refresh program converts every `side` drawer to a `sheet`
5096
- * on mobile; this variant is the primitive that makes that conversion a per-consumer
5097
- * `variant` flip rather than a second component.
5098
- */
5099
- type FlyDrawerVariant = 'side' | 'sheet';
5128
+ * - `'auto'` (default) — `sheet` while the host application is wearing mobile chrome,
5129
+ * `side` otherwise. Reads {@link FLY_VIEWPORT_IS_MOBILE}, which the shell binds to
5130
+ * its ONE breakpoint predicate; unprovided (bare tests, a standalone External App
5131
+ * that has not opted in) it is `false`, so `auto` is `side` and nothing changes.
5132
+ * - `'side'` the classic edge-pinned panel, sliding in along the inline axis (see
5133
+ * {@link FlyDrawerSide}). Pin this when a drawer must stay edge-anchored even on a
5134
+ * phone; it is an override of the platform default, so it wants a reason next to it.
5135
+ * - `'sheet'` — a bottom-anchored panel spanning the full inline size, sliding up from
5136
+ * the block-end edge with rounded top corners. `side` is ignored in this mode (there
5137
+ * is no edge to pick — a sheet always anchors to the bottom).
5138
+ *
5139
+ * S5.4 of the UX-refresh program converts every drawer to a sheet on mobile. It does
5140
+ * that HERE, once, rather than as ~50 per-call-site bindings: a viewport fact threaded
5141
+ * through fifty feature components is fifty chances to drift, and each one of those
5142
+ * components would be reaching for a viewport answer from inside an app surface —
5143
+ * precisely the container-vs-viewport trap. The call sites keep saying what the drawer
5144
+ * IS; the platform says how it presents.
5145
+ */
5146
+ type FlyDrawerVariant = 'auto' | 'side' | 'sheet';
5100
5147
  /**
5101
5148
  * Where the drawer is anchored.
5102
5149
  * - `absolute` (default) — clipped to the nearest positioned ancestor, i.e. the
@@ -5142,15 +5189,17 @@ type FlyDrawerPosition = 'absolute' | 'fixed';
5142
5189
  declare class FlyDrawerComponent {
5143
5190
  private host;
5144
5191
  private destroyRef;
5192
+ /** The host app's mobile-chrome flag — the only thing `variant="auto"` consults. */
5193
+ private readonly hostIsMobile;
5145
5194
  /** Drives mount + slide. Controlled by the parent. */
5146
5195
  readonly open: _angular_core.InputSignal<boolean>;
5147
5196
  /** Width tier → inline-size (sm 360 / md 480 / lg 640 / xl min(960px, 94%)). */
5148
5197
  readonly size: _angular_core.InputSignal<FlyDrawerSize>;
5149
5198
  /** Convenience title shown in the default header (ignored if `[flyDrawerHeader]` is projected). Treated as an i18n key. */
5150
5199
  readonly heading: _angular_core.InputSignal<string | null>;
5151
- /** Edge to pin to. `end` (default) slides from inline-end; RTL flips it. Ignored when `variant` is `sheet`. */
5200
+ /** Edge to pin to. `end` (default) slides from inline-end; RTL flips it. Ignored when the resolved variant is `sheet`. */
5152
5201
  readonly side: _angular_core.InputSignal<FlyDrawerSide>;
5153
- /** `side` (default, edge-pinned) or `sheet` (bottom-anchored, full-width). See {@link FlyDrawerVariant}. */
5202
+ /** `auto` (default — sheet on mobile), `side` (edge-pinned) or `sheet` (bottom-anchored). See {@link FlyDrawerVariant}. */
5154
5203
  readonly variant: _angular_core.InputSignal<FlyDrawerVariant>;
5155
5204
  /** Close when the scrim is clicked. */
5156
5205
  readonly dismissOnScrim: _angular_core.InputSignal<boolean>;
@@ -5181,6 +5230,12 @@ declare class FlyDrawerComponent {
5181
5230
  readonly leaving: _angular_core.WritableSignal<boolean>;
5182
5231
  readonly headingId = "fly-drawer-heading";
5183
5232
  readonly labelledBy: _angular_core.Signal<"fly-drawer-heading" | null>;
5233
+ /**
5234
+ * `variant` with `'auto'` collapsed to the concrete one that renders. Everything
5235
+ * downstream (the panel class, the sheet's own geometry) reads THIS, never the raw
5236
+ * input, so `auto` is resolved in exactly one place.
5237
+ */
5238
+ readonly resolvedVariant: _angular_core.Signal<"side" | "sheet">;
5184
5239
  /** Size/side classes as an ngClass map (kept off the `[class]` string binding,
5185
5240
  * which can race the leaving toggle and stutter the animation). */
5186
5241
  readonly panelClass: _angular_core.Signal<{
@@ -8212,6 +8267,13 @@ declare const FLY_MAGIC_BAR_ICONS: {
8212
8267
  readonly assignRobot: "<rect x=\"4\" y=\"8\" width=\"16\" height=\"11\" rx=\"3\"/><path d=\"M12 8V4\"/><circle cx=\"12\" cy=\"3\" r=\"1.2\"/><path d=\"M8 13v2M16 13v2\"/>";
8213
8268
  /** Task-detail "Add subtask". */
8214
8269
  readonly addSubtask: "<path d=\"M9 6h11M9 12h11M9 18h7\"/><path d=\"M4 6h.01M4 12h.01\"/><path d=\"M4.5 16h3M6 14.5v3\"/>";
8270
+ /**
8271
+ * Calendar magic-bar "View" trigger (S4.2) — a 4-cell grid standing in for the
8272
+ * year/month/week/day/agenda mode switcher behind it. No standalone glyph for
8273
+ * this exists in the UX drop's curated set (`today`/`settings` cover Today and
8274
+ * the settings gear, not the mode switcher).
8275
+ */
8276
+ readonly calendarView: "<rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"17\" rx=\"2.5\"/><path d=\"M3.5 12h17M12 3.5v17\"/>";
8215
8277
  /** `UX/FlyOS Desktop-app/MainContent.dc.html:927` (`pubTabActions`'s local `P` table). */
8216
8278
  readonly addEvidence: "<path d=\"M10.5 13.5a4 4 0 0 0 5.7 0l2-2a4 4 0 0 0-5.7-5.7l-.6.6\"/><path d=\"M13.5 10.5a4 4 0 0 0-5.7 0l-2 2a4 4 0 0 0 4.2 6.5\"/><path d=\"M17.5 15.5v5M15 18h5\"/>";
8217
8279
  /** `MainContent.dc.html:928`. Reused for every "Edit …" action (evidence, link, task). */
@@ -9296,6 +9358,21 @@ type FlyCurrencySelectorValue = string | readonly string[] | null;
9296
9358
  * i18n is self-sufficient through the `currency_selector.*` keys in `DS_BASELINE_LOCALES`
9297
9359
  * (en/ar/fr/ur); RTL works via logical CSS.
9298
9360
  *
9361
+ * ## `locked`, vs `disabled`
9362
+ * `disabled` is UI convention for "not applicable right now" — greyed out, no explanation,
9363
+ * because none is owed (a form section that only exists once a prior step completes, say).
9364
+ * `locked` is a different claim entirely: **the value is fixed on purpose**, because
9365
+ * something downstream now depends on it (PPM freezes a project's currency the moment any
9366
+ * financial row exists — changing it would silently re-denominate every stored amount).
9367
+ * A dimmed control with no explanation is exactly the failure `skills/magic-bar-actions.md`
9368
+ * §3.6 names for actions ("a vanishing action teaches the user nothing"); the same argument
9369
+ * applies to a frozen field. So `locked` renders differently on purpose: full-opacity (never
9370
+ * dimmed — the value is not "unavailable", it is authoritative), no dropdown affordance at
9371
+ * all, and an always-visible reason caption instead of a hover-only tooltip, so the "why" is
9372
+ * legible to a screen reader without requiring focus and to a sighted user without hovering.
9373
+ * `locked` takes precedence when both are set — it is the more specific state and the
9374
+ * `disabled` trigger markup (with its dropdown affordances) never renders underneath it.
9375
+ *
9299
9376
  * @example
9300
9377
  * ```html
9301
9378
  * <!-- Loads /api/currencies/brief itself: -->
@@ -9306,6 +9383,12 @@ type FlyCurrencySelectorValue = string | readonly string[] | null;
9306
9383
  * mode="multi"
9307
9384
  * [allowedCodes]="tenantCurrencies()"
9308
9385
  * (selectionDetailChange)="onCurrenciesPicked($event)" />
9386
+ *
9387
+ * <!-- Frozen once the project has financial rows — reason is an i18n KEY, never text: -->
9388
+ * <fly-currency-selector
9389
+ * [(ngModel)]="project.currency"
9390
+ * [locked]="project.hasFinancialRows"
9391
+ * lockedReasonKey="projects.currency_locked_reason" />
9309
9392
  * ```
9310
9393
  */
9311
9394
  declare class FlyCurrencySelectorComponent implements ControlValueAccessor {
@@ -9327,6 +9410,24 @@ declare class FlyCurrencySelectorComponent implements ControlValueAccessor {
9327
9410
  readonly pinnedCodes: _angular_core.InputSignal<readonly string[]>;
9328
9411
  /** Disable the whole control (also driven by reactive-forms `setDisabledState`). */
9329
9412
  readonly disabled: _angular_core.InputSignal<boolean>;
9413
+ /**
9414
+ * Freeze the current selection because something downstream now depends on it — a
9415
+ * DIFFERENT claim than `disabled`. See the class doc's "`locked`, vs `disabled`"
9416
+ * section. Renders the current pick as a plain, non-interactive readout (no dropdown
9417
+ * affordance at all) plus an always-visible reason caption — never a dimmed clickable-
9418
+ * looking control. Takes precedence over `disabled` when both are set.
9419
+ */
9420
+ readonly locked: _angular_core.InputSignal<boolean>;
9421
+ /**
9422
+ * i18n KEY (never resolved text — see `skills/magic-bar-actions.md` §3.4) explaining
9423
+ * WHY the control is locked. Omit to use the localized `currency_selector.locked_default_reason`
9424
+ * baseline key; supply your own only when that default reason is wrong for your case
9425
+ * (mirrors `MagicBarActionSpec.disabledTipKey`'s "supply only when the default is wrong"
9426
+ * contract). Ignored while `locked` is `false`.
9427
+ */
9428
+ readonly lockedReasonKey: _angular_core.InputSignal<string | null>;
9429
+ /** `I18nService.t()` params for `lockedReasonKey`, e.g. `{ date: frozenOn }`. */
9430
+ readonly lockedReasonParams: _angular_core.InputSignal<Record<string, string | number> | undefined>;
9330
9431
  /** Show the trigger clear (✕) affordance when there is a selection. */
9331
9432
  readonly clearable: _angular_core.InputSignal<boolean>;
9332
9433
  /** Trigger text when nothing is picked. Omit for the localized default. */
@@ -9344,6 +9445,8 @@ declare class FlyCurrencySelectorComponent implements ControlValueAccessor {
9344
9445
  private readonly _uid;
9345
9446
  readonly listboxId: string;
9346
9447
  readonly triggerId: string;
9448
+ /** id of the always-rendered locked-reason caption; `aria-describedby` target of the locked readout. */
9449
+ readonly lockedReasonId: string;
9347
9450
  readonly isOpen: _angular_core.WritableSignal<boolean>;
9348
9451
  readonly searchTerm: _angular_core.WritableSignal<string>;
9349
9452
  readonly activeIndex: _angular_core.WritableSignal<number>;
@@ -9371,6 +9474,8 @@ declare class FlyCurrencySelectorComponent implements ControlValueAccessor {
9371
9474
  readonly clearText: _angular_core.Signal<string>;
9372
9475
  readonly pinnedGroupText: _angular_core.Signal<string>;
9373
9476
  readonly allGroupText: _angular_core.Signal<string>;
9477
+ /** Resolved locked-reason text — the default baseline key, or the host's `lockedReasonKey`. */
9478
+ readonly lockedReasonText: _angular_core.Signal<string>;
9374
9479
  /** Every offered row, after the `allowedCodes` restriction. */
9375
9480
  readonly available: _angular_core.Signal<readonly FlyCurrency[]>;
9376
9481
  private readonly _byCode;
@@ -9422,7 +9527,105 @@ declare class FlyCurrencySelectorComponent implements ControlValueAccessor {
9422
9527
  private _commit;
9423
9528
  private _touch;
9424
9529
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyCurrencySelectorComponent, never>;
9425
- 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>;
9530
+ 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>;
9531
+ }
9532
+
9533
+ /**
9534
+ * Locale-aware money formatting — the primitive `fly-currency-selector` never shipped
9535
+ * (see D-B7-2 in `FlyOS.PPM/.workflow/design/DECISIONS.md`).
9536
+ *
9537
+ * `FlyCurrency.decimalDigits` exists precisely so a consumer "doesn't have to assume 2
9538
+ * and misprice a dinar" — and yet nothing in the design system read it. Every consuming
9539
+ * app hand-rolled its own money string, and the ones that hardcoded `.toFixed(2)` are
9540
+ * wrong for seven real ISO 4217 currencies (BHD, IQD, JOD, KWD, LYD, OMR, TND — all
9541
+ * 3-decimal, all Gulf/MENA, on a platform whose reference tenant is a UAE government
9542
+ * entity).
9543
+ *
9544
+ * ## Why `formatToParts`, not a hand-rolled `${symbol}${number}` template
9545
+ * Currency placement is not "symbol then number" everywhere: `en` prefixes (`$1,234.50`),
9546
+ * `fr` and `ar` suffix it (`1 234,50 €`, with `ar` additionally wrapping the whole
9547
+ * expression in RTL marks). Building the string manually would mean re-deriving that
9548
+ * placement table ourselves and getting it wrong for a locale nobody tested. Instead
9549
+ * this asks `Intl.NumberFormat` to lay out a real `style: 'currency'` string for the
9550
+ * given locale, then walks the parts and swaps only the `currency` token for our own
9551
+ * text (the platform's `symbol` field, the code, or nothing) — every digit, the sign,
9552
+ * the decimal/group separators and the placement itself stay exactly what `Intl` (and
9553
+ * therefore the platform's existing number-formatting surface, `format.ts`) already
9554
+ * gets right for that locale.
9555
+ *
9556
+ * ## Why the Intl template is always built with `currencyDisplay: 'code'`
9557
+ * The formatter that produces the parts to substitute into is ALWAYS built with
9558
+ * `currencyDisplay: 'code'`, never `'symbol'` — even when `display: 'symbol'` is what
9559
+ * the caller asked for. `'code'` is the one `currencyDisplay` value ICU renders with a
9560
+ * stable separator (a literal space) between the currency token and the number, in
9561
+ * every locale tested (`en`, `fr`, `ar`, `ar-EG`). `'symbol'` does NOT: whether ICU
9562
+ * inserts a space depends on whether ITS OWN symbol for that specific currency happens
9563
+ * to be a single glyph (`$`, no space) or a multi-letter fallback (`KWD`, WITH a space)
9564
+ * — a per-currency accident of ICU's data, not something this function controls. Using
9565
+ * `'symbol'` as the template would make `display: 'symbol'` output space-inconsistent
9566
+ * currency-to-currency for reasons that have nothing to do with what this function
9567
+ * actually renders (the platform's OWN `symbol` field, substituted in afterward).
9568
+ *
9569
+ * ## `decimalDigits` always wins over Intl's own idea of the currency
9570
+ * `minimumFractionDigits`/`maximumFractionDigits` are pinned to the caller's
9571
+ * `decimalDigits`, not left to Intl's built-in per-currency table. Intl's table is
9572
+ * usually right, but the platform's own `/api/currencies/brief` catalogue is the
9573
+ * authoritative source on this platform — pinning the digits is what makes this
9574
+ * function agree with the picker regardless of whether the two ever disagree.
9575
+ */
9576
+ /** `'symbol'` (default): the row's own symbol (`$`, `د.إ`) — falls back to the ISO code
9577
+ * when no symbol is available (see the bare-code fallback below). `'code'`: always the
9578
+ * unambiguous ISO 4217 code — the right choice for a table column mixing currencies.
9579
+ * `'none'`: the bare number, for a headline figure whose currency is already named
9580
+ * elsewhere on screen (a currency selector next to it, a report title). */
9581
+ type FlyMoneyDisplay = 'symbol' | 'code' | 'none';
9582
+ interface FlyFormatMoneyOptions {
9583
+ /** @default 'symbol' */
9584
+ display?: FlyMoneyDisplay;
9585
+ /** BCP-47 locale tag. @default 'en' */
9586
+ locale?: string;
9587
+ }
9588
+ /**
9589
+ * Formats `amount` in `currency`, localized to `options.locale`.
9590
+ *
9591
+ * ```ts
9592
+ * flyFormatMoney(1234.5, kwdRow) // "د.ك 1,234.500" (KWD is 3-decimal)
9593
+ * flyFormatMoney(1234, 'JPY') // "JPY 1,234" (bare code, no symbol to read — degrades to the code)
9594
+ * flyFormatMoney(-42, usdRow, { display: 'code' }) // "-USD 42.00"
9595
+ * flyFormatMoney(99.9, eurRow, { display: 'none' }) // "99.90" (currency named elsewhere on screen)
9596
+ * flyFormatMoney(null, usdRow) // "—" (never "NaN")
9597
+ * ```
9598
+ *
9599
+ * `amount == null` or non-finite (`NaN`, `Infinity`), or an unresolvable `currency`,
9600
+ * renders {@link FLY_EMPTY_VALUE} — the same placeholder every other `format.ts`
9601
+ * primitive uses, so a money cell in a mixed table degrades exactly like its neighbours
9602
+ * instead of introducing a second "no value" convention.
9603
+ */
9604
+ declare function flyFormatMoney(amount: number | null | undefined, currency: FlyCurrency | string | null | undefined, options?: FlyFormatMoneyOptions): string;
9605
+
9606
+ /**
9607
+ * `{{ amount | flyMoney: currencyRow }}` → `"$1,234.50"` / `{{ amount | flyMoney: 'KWD' }}`
9608
+ * → `"KD 1,234.500"`.
9609
+ *
9610
+ * Template wrapper over {@link flyFormatMoney}, defaulting the locale to the active
9611
+ * {@link I18nService} language the same way every other `Fly*Pipe` in `format.pipes.ts`
9612
+ * does — see that file's doc comment for the "pass the locale signal explicitly in a
9613
+ * view that must react live to the language switcher" caveat, which applies here too.
9614
+ *
9615
+ * A separate file from `format.pipes.ts` on purpose: this pipe's `currency` argument
9616
+ * depends on `FlyCurrency` (the currency-selector's data contract), a domain type the
9617
+ * pure number/byte/date formatters in `format.pipes.ts` have no reason to import.
9618
+ *
9619
+ * ```html
9620
+ * {{ invoice.total | flyMoney: invoice.currency }}
9621
+ * {{ invoice.total | flyMoney: invoice.currency : { display: 'code' } }}
9622
+ * ```
9623
+ */
9624
+ declare class FlyMoneyPipe implements PipeTransform {
9625
+ private readonly i18n;
9626
+ transform(amount: number | null | undefined, currency: FlyCurrency | string | null | undefined, options?: FlyFormatMoneyOptions): string;
9627
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyMoneyPipe, never>;
9628
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<FlyMoneyPipe, "flyMoney", true>;
9426
9629
  }
9427
9630
 
9428
9631
  /**
@@ -9587,6 +9790,47 @@ declare class FlyClickOutsideDirective {
9587
9790
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FlyClickOutsideDirective, "[flyClickOutside]", never, { "enabled": { "alias": "flyClickOutsideEnabled"; "required": false; "isSignal": true; }; }, { "flyClickOutside": "flyClickOutside"; }, never, never, true, never>;
9588
9791
  }
9589
9792
 
9793
+ /**
9794
+ * Whether the host application is currently wearing MOBILE chrome.
9795
+ *
9796
+ * ## Why the DS asks instead of measuring
9797
+ * A second `matchMedia` inside the design system would be a second breakpoint
9798
+ * mechanism, and two predicates that answer "is this a phone" drift the first time
9799
+ * anyone retunes one of them. The shell already owns exactly one such predicate
9800
+ * (`ShellViewportService`, S5.1) and mirrors it three ways — a class on `<html>`, a
9801
+ * signal for templates, and the shell's own inset arithmetic. This token is the
9802
+ * fourth route to that SAME answer, not a new one: the shell binds it to
9803
+ * `ShellViewportService.isMobile` and nothing here evaluates a query.
9804
+ *
9805
+ * ## Default: `false`, deliberately
9806
+ * Unprovided, every DS overlay behaves exactly as it did before this token existed
9807
+ * — desktop geometry, no mobile branch. That matters for two populations:
9808
+ *
9809
+ * - **Standalone External Apps** (Circles/Thoughts/PPM) render on their own page
9810
+ * with no FlyOS shell. They opt in by providing this from their own breakpoint
9811
+ * source; until they do, nothing about them changes.
9812
+ * - **Tests and Storybook-style harnesses** that construct a DS component bare.
9813
+ *
9814
+ * A default of "measure the window" would have been the opposite trade: silently
9815
+ * correct in the shell, silently surprising everywhere else, and impossible to
9816
+ * override downward.
9817
+ *
9818
+ * ## Consumers
9819
+ * `fly-drawer` (`variant="auto"` → `sheet` on mobile) and `fly-message-box` /
9820
+ * `fly-confirm-dialog` (the full-bleed confirm card). Each reads the signal and
9821
+ * either resolves an input or stamps a host class — none of them re-derive a
9822
+ * width, so retuning the threshold is still a one-line change in the shell.
9823
+ *
9824
+ * @example Shell wiring (`app.config.ts`)
9825
+ * ```ts
9826
+ * {
9827
+ * provide: FLY_VIEWPORT_IS_MOBILE,
9828
+ * useFactory: () => inject(ShellViewportService).isMobile,
9829
+ * }
9830
+ * ```
9831
+ */
9832
+ declare const FLY_VIEWPORT_IS_MOBILE: InjectionToken<Signal<boolean>>;
9833
+
9590
9834
  /**
9591
9835
  * Debounce primitives — the shared replacement for the `setTimeout` / `clearTimeout`
9592
9836
  * pairs hand-rolled in every list screen and typeahead across the estate.
@@ -11437,6 +11681,7 @@ declare class FlyAppTopbarComponent {
11437
11681
  protected readonly activeModule: _angular_core.Signal<FlyAppModule | null>;
11438
11682
  protected readonly brandAriaLabel: _angular_core.Signal<string>;
11439
11683
  protected readonly switchAriaLabel: _angular_core.Signal<string>;
11684
+ protected readonly triggerAriaLabel: _angular_core.Signal<string>;
11440
11685
  constructor();
11441
11686
  protected iconFor(key: string): TemplateRef<unknown> | null;
11442
11687
  protected indexOf(mod: FlyAppModule): number;
@@ -12077,6 +12322,8 @@ declare function enterActivatesNatively(tagName: string, inputType?: string | nu
12077
12322
  * focus is trapped while open and returns to the prior element on close.
12078
12323
  */
12079
12324
  declare class FlyConfirmDialogComponent {
12325
+ /** Mobile chrome → the full-bleed confirm card. Read by the host class binding. */
12326
+ protected readonly isMobile: _angular_core.Signal<boolean>;
12080
12327
  readonly open: _angular_core.InputSignal<boolean>;
12081
12328
  readonly kind: _angular_core.InputSignal<ConfirmKind>;
12082
12329
  readonly titleKey: _angular_core.InputSignal<string>;
@@ -12260,6 +12507,6 @@ declare const AUDIENCE_ERROR_CODES: {
12260
12507
  };
12261
12508
  type AudienceErrorCode = (typeof AUDIENCE_ERROR_CODES)[keyof typeof AUDIENCE_ERROR_CODES];
12262
12509
 
12263
- 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_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 };
12264
- 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 };
12510
+ 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, 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, 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 };
12511
+ 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, 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 };
12265
12512
  //# sourceMappingURL=flyos-design-system.d.ts.map