@flyos/design-system 3.14.0 → 3.16.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": "3.14.0",
3
+ "version": "3.16.0",
4
4
  "description": "FlyOS design system — shared components, directives, pipes, services, and models for Business App developers.",
5
5
  "keywords": [
6
6
  "flyos",
@@ -14,7 +14,7 @@
14
14
  // ── Nova (UX v2) design language ─────────────────────────────────────────────
15
15
  // Additive layer: new vocabulary only, nothing here re-values a token the three
16
16
  // partials above already define (the colliding glass quartet is renamed
17
- // `--glass2-*` per the D1 ruling). Canon: `skills/desktop-design-language.md`.
17
+ // `--glass2-*` per the D1 ruling). Canon: `skills/shell-design-language.md`.
18
18
  // `nova-glass` is mixins-only and is @used by components, not from here.
19
19
  @use 'nova-tokens';
20
20
  @use 'nova-motion';
@@ -1,6 +1,6 @@
1
1
  // ─── Nova motion library (UX v2) ─────────────────────────────────────────────
2
2
  // Stage 1 task S1.3 of the UX-refresh program.
3
- // Canon: `skills/desktop-design-language.md` §5, which cites
3
+ // Canon: `skills/shell-design-language.md` §5, which cites
4
4
  // `.workflow/plans/ux-refresh/analysis/D1-home-desktop.md` §5 and
5
5
  // `D2-appwindow-circles.md` §6 for the exact numbers below.
6
6
  // This partial is the EMISSION entry, `@use`d exactly once — from
@@ -2,7 +2,7 @@
2
2
  // The Nova design language's colour vocabulary, both themes. Landed by Stage-1
3
3
  // task S1.1 of the UX-refresh program.
4
4
 
5
- // Canon: `skills/desktop-design-language.md` §2 (ratified table) and §3 (the
5
+ // Canon: `skills/shell-design-language.md` §2 (ratified table) and §3 (the
6
6
  // ramp law), which in turn cite `.workflow/plans/ux-refresh/analysis/
7
7
  // D3-styleguide-tokens.md`. NEVER re-derive a value from the `UX/**/*.dc.html`
8
8
  // prototypes — the prototypes drift, the skill is the contract.
@@ -1,6 +1,6 @@
1
1
  // ─── Nova type roles (UX v2) ─────────────────────────────────────────────────
2
2
  // Stage 1 task S1.10 of the UX-refresh program.
3
- // Canon: `skills/desktop-design-language.md` §7, which cites
3
+ // Canon: `skills/shell-design-language.md` §7, which cites
4
4
  // `.workflow/plans/ux-refresh/analysis/D1-home-desktop.md` §6 for the exact
5
5
  // numbers below. Never re-derive a value from the `UX/**/*.dc.html`
6
6
  // prototypes — the prototypes drift, the skill is the contract.
@@ -122,7 +122,7 @@ interface LaunchContext {
122
122
  * provisioning. Remotes subscribe to deep links via the federation-safe surfaces
123
123
  * instead: `FLYOS_LAUNCH_EVENT` (window CustomEvent) plus the
124
124
  * `__FLYOS_PENDING_LAUNCHES__` registry on `globalThis`. See
125
- * <c>skills/cross-app-deep-linking.md</c>.
125
+ * <c>skills/platform-deep-linking.md</c>.
126
126
  */
127
127
  declare const LAUNCH_CONTEXT: InjectionToken<Signal<LaunchContext | null>>;
128
128
  /**
@@ -168,7 +168,7 @@ type FlyosPendingLaunches = Record<string, LaunchContext>;
168
168
  *
169
169
  * Only the shell may act on this: it owns the app registry and the window manager,
170
170
  * neither of which is reachable from a federated remote. See
171
- * `skills/cross-app-deep-linking.md` § "Initiator side (federated remote)".
171
+ * `skills/platform-deep-linking.md` § "Initiator side (federated remote)".
172
172
  */
173
173
  interface FlyLaunchRequestDetail {
174
174
  /** Shell-registry app id of the app to open, e.g. `'chats'`. */
@@ -2377,7 +2377,7 @@ declare class FlyRemoteRouter {
2377
2377
  * `/trends/abc`) instead would leave a host-unroutable path in the bar — on
2378
2378
  * reload the shell router falls through to its `**` wildcard, redirects to
2379
2379
  * `/desktop`, and the deep link is silently lost. See
2380
- * skills/cross-app-deep-linking.md.
2380
+ * skills/platform-deep-linking.md.
2381
2381
  *
2382
2382
  * `flyRemoteUrl` is still stashed in the history state so the popstate
2383
2383
  * listener restores the exact remote URL for back/forward without re-parsing
@@ -2467,6 +2467,21 @@ interface ConnectRemoteLaunchOptions {
2467
2467
  * `route => void flyRouter.navigateByUrl(route)`.
2468
2468
  */
2469
2469
  readonly navigate: (route: string) => void;
2470
+ /**
2471
+ * Optional side-channel for the rest of the launch — most importantly `ctx.params`,
2472
+ * which {@link navigate} cannot carry (it is handed a route string).
2473
+ *
2474
+ * Called once per accepted (version-deduped) launch, BEFORE {@link navigate}, and
2475
+ * called even when `ctx.route` is `null` — a params-only launch ("re-filter what is
2476
+ * already open") is a real case and must not be swallowed by the null-route
2477
+ * navigation no-op.
2478
+ *
2479
+ * Prefer {@link FlyLaunchContextService} over this callback for anything that isn't
2480
+ * the root component: the helper publishes every accepted launch there too, so a
2481
+ * lazily-mounted leaf can `inject(FlyLaunchContextService).contextFor(appId)` without
2482
+ * the root having to thread a value down. This hook is for root-local reactions.
2483
+ */
2484
+ readonly onLaunch?: (ctx: LaunchContext) => void;
2470
2485
  /**
2471
2486
  * Gate. Pass your `isEmbedded` flag — when `false` the helper is a no-op (a
2472
2487
  * standalone remote has no shell dispatcher). Defaults to `true`. The helper is
@@ -2479,7 +2494,7 @@ interface ConnectRemoteLaunchOptions {
2479
2494
  * Federation-safe deep-link RECEIVER for an Angular Native-Federation remote — the
2480
2495
  * remote-side counterpart of the shell's `connectWindowRoute`. Collapses the
2481
2496
  * drain + dedupe + listen + cleanup boilerplate every remote root used to
2482
- * hand-roll (see `skills/cross-app-deep-linking.md` § "Receiver side") into one
2497
+ * hand-roll (see `skills/platform-deep-linking.md` § "Receiver side") into one
2483
2498
  * call, so the correct contract can't be hand-rolled wrong.
2484
2499
  *
2485
2500
  * **Must be called from an injection context** (component constructor or a field
@@ -2502,12 +2517,32 @@ interface ConnectRemoteLaunchOptions {
2502
2517
  * `appId`: the {@link FLYOS_LAUNCH_EVENT} window `CustomEvent` and the
2503
2518
  * `globalThis[FlyosPendingLaunchesGlobalKey]` registry. This helper consumes both.
2504
2519
  *
2520
+ * ## The launch PARAMS
2521
+ * `navigate` receives a route string, so it structurally cannot carry `ctx.params` —
2522
+ * the payload dashboard drill-down rides on (`skills/dashboard-reports.md` §
2523
+ * "Drill-down" sends `{ [filterParam]: clickedValue }`). Before DS 3.15.0 this helper
2524
+ * read `ctx.route` and dropped the rest, so every drill-down into a federated remote
2525
+ * opened an UNFILTERED register, and consumers hand-rolled a second, non-destructive
2526
+ * peek at the same pending-launch registry — with a load-bearing construction-ordering
2527
+ * dependency on running before this helper's drain deleted the entry.
2528
+ *
2529
+ * Every accepted launch is now published to {@link FlyLaunchContextService}, keyed by
2530
+ * `appId`, so any component in the remote reads the full context — params included —
2531
+ * with no ordering constraint:
2532
+ *
2533
+ * ```ts
2534
+ * private readonly ctx = inject(FlyLaunchContextService).contextFor('ppm');
2535
+ * ```
2536
+ *
2537
+ * {@link ConnectRemoteLaunchOptions.onLaunch} is the callback form, for a root-local
2538
+ * reaction that needs no injectable.
2539
+ *
2505
2540
  * ## Two inbound paths, one dedupe
2506
2541
  * 1. **First-mount drain.** The launch event fires BEFORE this listener attaches
2507
2542
  * for the very first launch, so the shell stashes the latest context per
2508
2543
  * `appId` on the `globalThis` registry. The helper reads it then **deletes**
2509
2544
  * it — never leaving a stale entry behind (a leftover entry would re-apply on
2510
- * every re-mount; this is the failure mode `skills/cross-app-deep-linking.md`
2545
+ * every re-mount; this is the failure mode `skills/platform-deep-linking.md`
2511
2546
  * § "What NOT to do" warns about).
2512
2547
  * 2. **Live event.** Re-launches into an already-mounted remote arrive on
2513
2548
  * {@link FLYOS_LAUNCH_EVENT}; the `appId` filter is mandatory.
@@ -2528,6 +2563,111 @@ interface ConnectRemoteLaunchOptions {
2528
2563
  */
2529
2564
  declare function connectRemoteLaunch(opts: ConnectRemoteLaunchOptions): void;
2530
2565
 
2566
+ /**
2567
+ * Shared cross-bundle store key + sync event for the inbound launch channel.
2568
+ *
2569
+ * **Public contract**, for the same reason {@link FLY_REMOTE_CONTEXT_STORE_KEY} is: a
2570
+ * consumer pinned to a DS older than 3.15.0 can read this slot directly (same shape,
2571
+ * keyed by appId) rather than re-deriving the peek-the-pending-registry workaround.
2572
+ * Keep these literals stable; they are an integration boundary.
2573
+ */
2574
+ declare const FLY_LAUNCH_CONTEXT_STORE_KEY = "__flyLaunchContext__";
2575
+ declare const FLY_LAUNCH_CONTEXT_EVENT = "fly:launch-context";
2576
+ /**
2577
+ * Shell → remote launch channel: the **whole** {@link LaunchContext} of the most
2578
+ * recent launch into each app, `params` included.
2579
+ *
2580
+ * Why this exists
2581
+ * ---------------
2582
+ * {@link connectRemoteLaunch} consumes the two DI-free launch surfaces
2583
+ * (`FLYOS_LAUNCH_EVENT` + the `__FLYOS_PENDING_LAUNCHES__` registry) and applies the
2584
+ * `route` half by navigating. Until DS 3.15.0 it read `ctx.route` and **nothing else**,
2585
+ * so `ctx.params` — the payload dashboard drill-down carries (`skills/dashboard-reports.md`
2586
+ * § "Drill-down": `{ [filterParam]: clickedValue }`) — was silently dropped, and every
2587
+ * drill-down into a federated remote landed on an UNFILTERED register.
2588
+ *
2589
+ * The shell-side answer to "read the launch params" is `inject(LAUNCH_CONTEXT)`, which a
2590
+ * federated remote must not use: Native Federation can split that `InjectionToken`
2591
+ * instance across host and remote bundles, so `inject()` returns `null` (see
2592
+ * `LAUNCH_CONTEXT`'s own doc). This service is the federation-safe counterpart —
2593
+ * `connectRemoteLaunch` publishes here, and any component in the remote (however deep, in
2594
+ * whatever lazy chunk) injects this and reads the same context.
2595
+ *
2596
+ * Why `globalThis`, not just the DI singleton
2597
+ * -------------------------------------------
2598
+ * Identical rationale to {@link FlyRemoteContextService}: the shell builds the design
2599
+ * system from workspace SOURCE while remotes consume the published npm package, and NF's
2600
+ * version negotiation has silently split `providedIn: 'root'` before. State therefore
2601
+ * lives on `globalThis` (see {@link FLY_LAUNCH_CONTEXT_STORE_KEY}); {@link context} /
2602
+ * {@link params} read it directly (split-proof, synchronous) and a per-instance signal
2603
+ * mirrors it for reactive consumers, re-synced from a `globalThis` event whenever another
2604
+ * copy of the service mutates the store.
2605
+ *
2606
+ * Reading it
2607
+ * ----------
2608
+ * ```ts
2609
+ * private readonly launch = inject(FlyLaunchContextService);
2610
+ * private readonly drillDown = this.launch.contextFor('ppm');
2611
+ * private lastVersion = -1; // -1 never collides: the shell counts from 1
2612
+ *
2613
+ * constructor() {
2614
+ * effect(() => {
2615
+ * const ctx = this.drillDown();
2616
+ * if (!ctx || ctx.version === this.lastVersion) return; // version-dedupe is the consumer's job
2617
+ * this.lastVersion = ctx.version;
2618
+ * const status = ctx.params?.['status'];
2619
+ * if (typeof status === 'string') this.applyStatusFilter(status);
2620
+ * });
2621
+ * }
2622
+ * ```
2623
+ *
2624
+ * Staleness
2625
+ * ---------
2626
+ * An entry is **not** dropped once read — a lazily-mounted consumer must still find the
2627
+ * launch that opened the window, which may have arrived long before its chunk loaded (the
2628
+ * exact ordering hazard the hand-rolled "peek the pending registry before
2629
+ * `connectRemoteLaunch` drains it" workaround existed to dodge). It cannot go stale across
2630
+ * a remount for the same reason `connectRemoteLaunch`'s `lastVersion` reset is safe: the
2631
+ * shell is the single writer and `reloadWindowContent` ALWAYS re-publishes the window's
2632
+ * CURRENT context (`params: null`, bumped version) before dropping the injector, so the
2633
+ * remount's drain overwrites this slot before any consumer mounts. Consumers dedupe on
2634
+ * `version` regardless, exactly as they must for the live-event path.
2635
+ *
2636
+ * Keyed by `appId` (last launch wins) — a single live window per app, matching
2637
+ * `__FLYOS_PENDING_LAUNCHES__`'s own keying.
2638
+ */
2639
+ declare class FlyLaunchContextService {
2640
+ private readonly _byApp;
2641
+ /** Every app's latest inbound launch context, keyed by app id. Reactive. */
2642
+ readonly contexts: Signal<ReadonlyMap<string, LaunchContext>>;
2643
+ /**
2644
+ * `contextFor` memo — one computed per app id, so repeated calls (a component field
2645
+ * initializer re-running per instance) hand back the SAME signal instead of leaking a
2646
+ * new computed each time.
2647
+ */
2648
+ private readonly perApp;
2649
+ constructor();
2650
+ /**
2651
+ * Record an inbound launch for an app. Called by {@link connectRemoteLaunch} once per
2652
+ * accepted (version-deduped) launch — a remote should not normally call this itself.
2653
+ */
2654
+ publish(appId: string, ctx: LaunchContext): void;
2655
+ /** Latest launch context for an app as a signal — the reactive read path. */
2656
+ contextFor(appId: string): Signal<LaunchContext | null>;
2657
+ /** Latest launch context for an app, read straight off the store. `null` when none. */
2658
+ context(appId: string): LaunchContext | null;
2659
+ /**
2660
+ * The `params` half of an app's latest launch — the drill-down payload. `null` when the
2661
+ * app has no launch context, or when the launch carried no params. The **consumer**
2662
+ * interprets the keys against its own filter contract; the platform never does.
2663
+ */
2664
+ params(appId: string): Readonly<Record<string, unknown>> | null;
2665
+ /** Drop an app's launch context. No-op if absent. Mainly for teardown and tests. */
2666
+ clear(appId: string): void;
2667
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyLaunchContextService, never>;
2668
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<FlyLaunchContextService>;
2669
+ }
2670
+
2531
2671
  /**
2532
2672
  * A federated remote's current navigation context, as published to the shell.
2533
2673
  *
@@ -3903,7 +4043,7 @@ interface AgentDragPayload<T = unknown> {
3903
4043
  * DS package is shell-agnostic and shouldn't grow a second copy of the
3904
4044
  * URL grammar. Apps building envelopes are expected to stamp routes that
3905
4045
  * match their own internal route schema (e.g. dashboard publishes
3906
- * `/reports/{id}` and `/custom/{id}`); see `skills/cross-app-deep-linking.md`.
4046
+ * `/reports/{id}` and `/custom/{id}`); see `skills/platform-deep-linking.md`.
3907
4047
  *
3908
4048
  * Backwards-compat: absent on v1 payloads and on v2 payloads built
3909
4049
  * before this field was added. Persisted JSONB chips without the field
@@ -5983,7 +6123,7 @@ interface FlySelectPanelPosition {
5983
6123
  * input still wins. It used to default to a hardcoded English literal that every consumer had to
5984
6124
  * remember to override — none did, so a searchable select read "Search…" under ar/fr/ur.
5985
6125
  * Styling composes the Nova token language (`--w*` ramp, `--accent`, `nova-glass.popover`) — see
5986
- * `skills/desktop-design-language.md` §3.2 and `.workflow/plans/ux-refresh/notes/S1.7-form-family.md`.
6126
+ * `skills/shell-design-language.md` §3.2 and `.workflow/plans/ux-refresh/notes/S1.7-form-family.md`.
5987
6127
  *
5988
6128
  * **Positioning (S1.7 — Nova):** the panel is `position: fixed`, measured from the trigger, and
5989
6129
  * **portaled to `<body>`** the same way {@link ContextMenuComponent} escapes a clipping/glass
@@ -6514,6 +6654,21 @@ interface GanttRow {
6514
6654
  * expanding it emits {@link FlyGanttComponent.rowExpand} instead of revealing nothing.
6515
6655
  */
6516
6656
  hasChildren?: boolean;
6657
+ /**
6658
+ * Whether a row that currently has NO children is still a valid drag-to-reorder PARENT —
6659
+ * dropping another row directly beneath it files that row as its first child instead of as its
6660
+ * sibling. Independent of {@link hasChildren}: that field also paints a chevron, which is wrong
6661
+ * for a container with nothing in it yet (a milestone that has no tasks is a point-in-time
6662
+ * marker, not an expandable list with zero items). This field changes ONLY what
6663
+ * `resolveGanttReorderDrop` does with a drop on this row; it paints nothing.
6664
+ *
6665
+ * Existing rows with real children need no help — `hasChildren && !collapsed` already nests
6666
+ * into them. This exists for the row that CAN adopt a child but has not yet: the indent action
6667
+ * already reaches this case (`canIndentGanttRow` only checks depth, never child count), so
6668
+ * without this flag a drag and an indent onto the same empty container disagreed — one nested
6669
+ * the row, the other filed it as a root/backlog sibling with no explanation.
6670
+ */
6671
+ canAdoptChildren?: boolean;
6517
6672
  /**
6518
6673
  * Optional baseline (plan-of-record) date, ISO `YYYY-MM-DD`. When both `baselineStart` and
6519
6674
  * `baselineEnd` are set and {@link FlyGanttComponent.showBaselines} is on, the chart renders a
@@ -6691,7 +6846,7 @@ interface GanttLinkGesture {
6691
6846
  * `gantt-label-pane.ts`: a few pure functions plus one signal-based class composed by the host).
6692
6847
  * The functions below remain dependency-free — no Angular, no DOM — for the same reason
6693
6848
  * `gantt-scale.ts`'s are: jsdom lays nothing out, so pure functions are the only directly
6694
- * testable form of this math (skill: design-system-gantt.md §8).
6849
+ * testable form of this math (skill: ds-gantt.md §8).
6695
6850
  *
6696
6851
  * ## The `viewBox`-pan trick this math drives
6697
6852
  * The body `<svg>` stays `position: absolute`, sized to only the rendered window
@@ -6842,18 +6997,37 @@ interface GanttDragTooltip {
6842
6997
  readonly text: string;
6843
6998
  }
6844
6999
 
6845
- /** One dependency arrow, routed and ready for the template. */
6846
- interface LinkVm {
7000
+ /**
7001
+ * Which end of each row a relationship touches.
7002
+ *
7003
+ * The two letters ARE the anchors — `FS` is "from my **F**inish to your **S**tart" — so this is
7004
+ * the exact inverse of `linkTypeFor`, and stating it as a function rather than re-reading the
7005
+ * letters at each call site is what keeps the arrowhead, the re-target handle and the type
7006
+ * derivation from ever disagreeing about which end an arrow lands on.
7007
+ */
7008
+ declare function linkAnchorsFor(type: GanttDependencyType): {
7009
+ from: GanttLinkAnchor;
7010
+ to: GanttLinkAnchor;
7011
+ };
7012
+ /** A dependency arrow, ready to draw. Render space throughout. */
7013
+ interface GanttLinkVm {
6847
7014
  key: string;
6848
7015
  fromId: string;
6849
7016
  toId: string;
6850
7017
  type: GanttDependencyType;
6851
7018
  path: string;
6852
- /** Anchor for the delete affordance shown while the link is selected (render space). */
7019
+ /** Anchor for the delete affordance shown while the link is selected. */
6853
7020
  badgeX: number;
6854
7021
  badgeY: number;
7022
+ /** The arrowhead end — where the re-target handle sits while the link is selected. */
7023
+ headX: number;
7024
+ headY: number;
7025
+ /** The end of the SOURCE row this arrow leaves from, which a re-target drag has to start on. */
7026
+ fromAnchor: GanttLinkAnchor;
6855
7027
  ariaLabel: string;
6856
7028
  }
7029
+
7030
+ /** One dependency arrow, routed and ready for the template. */
6857
7031
  /**
6858
7032
  * **`fly-gantt`** — the design-system SVG Gantt chart.
6859
7033
  *
@@ -7079,11 +7253,6 @@ declare class FlyGanttComponent {
7079
7253
  readonly rowVms: _angular_core.Signal<GanttRowVm[]>;
7080
7254
  /** Only the rows carrying a tint, so the band pass does not emit an empty rect per row. */
7081
7255
  readonly tintedRows: _angular_core.Signal<GanttRowVm[]>;
7082
- /** Dependency arrows whose y-span intersects the row window — O(E), not O(N). Endpoints are
7083
- * resolved via {@link _vmForFlat} directly (not off `rowVms()`) since an edge can cross the
7084
- * window with one endpoint outside it — the memo §4.3 rule-2 fix for the pre-A9 "both
7085
- * endpoints rendered" predicate, which would erase exactly those crossing arrows. */
7086
- readonly linkVms: _angular_core.Signal<LinkVm[]>;
7087
7256
  /**
7088
7257
  * Render-space geometry, in {@link GanttRowGeometry} — the row view-model plus every shape
7089
7258
  * derived from it. Composed for the same reason as the gestures below it: given a row and the
@@ -7093,6 +7262,19 @@ declare class FlyGanttComponent {
7093
7262
  readonly geo: GanttRowGeometry;
7094
7263
  /** Bar height for the current row height — bound directly by the template. */
7095
7264
  readonly barHeight: _angular_core.Signal<number>;
7265
+ /**
7266
+ * Dependency arrows, in {@link GanttLinkVms} — the drawing half of the link surface, paired with
7267
+ * the dragging half in `gantt-link-gestures.ts`. Declared after {@link geo} because it is handed
7268
+ * that instance: both halves of a link resolve through the SAME row geometry the rows draw from,
7269
+ * so an arrow can never land somewhere its own endpoint is not.
7270
+ *
7271
+ * Only arrows whose y-span intersects the row window are built — O(E), not O(N) — and the
7272
+ * predicate is CROSSES, not "both endpoints rendered": an edge with one end scrolled out of the
7273
+ * window still has to be drawn through it (memo §4.3 rule 2).
7274
+ */
7275
+ private readonly _linkVms;
7276
+ /** The arrows the template draws. */
7277
+ readonly linkVms: _angular_core.Signal<GanttLinkVm[]>;
7096
7278
  /**
7097
7279
  * The divider's own state machine, in {@link GanttLabelPane}. It is composed rather than
7098
7280
  * inlined because it is the one region of this component with no coupling to the chart: give it
@@ -7138,11 +7320,24 @@ declare class FlyGanttComponent {
7138
7320
  onShapePointerDown(ev: PointerEvent, id: string): void;
7139
7321
  /** Settled (debounced) text from the corner search field. */
7140
7322
  onSearchQueryChange(query: string): void;
7141
- onLinkClick(ev: Event, vm: LinkVm): void;
7142
- deleteLink(ev: Event, vm: LinkVm): void;
7143
- onGridKeydown(ev: KeyboardEvent): void;
7144
- /** Shift both dates of the selected bar by `deltaDays` and emit (respecting read-only). */
7145
- private _nudgeSelected;
7323
+ onLinkClick(ev: Event, vm: GanttLinkVm): void;
7324
+ /**
7325
+ * Claim the press on a dependency arrow before the canvas can read it as the start of a pan.
7326
+ *
7327
+ * An arrow is a CONTROL sitting on the pan surface, and it selects on `click` — but the pan
7328
+ * gesture swallows the trailing click of any press that travelled more than
7329
+ * `PAN_THRESHOLD_PX`, so on a 1.5px line a perfectly ordinary click (a few pixels of hand
7330
+ * movement between press and release) selected nothing and nudged the chart sideways instead.
7331
+ * The bar drag and the connector drag were never affected because both already stop the press
7332
+ * here; the arrow was the one interactive thing on the canvas that did not.
7333
+ */
7334
+ onLinkPathPointerDown(ev: PointerEvent): void;
7335
+ /**
7336
+ * Grab the head of the selected arrow and re-point it. Resolves the arrow's SOURCE row, because
7337
+ * that is where the gesture has to originate for the drop to derive a relationship type.
7338
+ */
7339
+ onLinkHeadPointerDown(ev: PointerEvent, vm: GanttLinkVm): void;
7340
+ deleteLink(ev: Event, vm: GanttLinkVm): void;
7146
7341
  /**
7147
7342
  * Moving and resizing a bar, in {@link GanttBarDrag} — the last of the three pointer gestures
7148
7343
  * to be composed rather than inlined, for the same reason as the other two: it needs a scale, a
@@ -7163,6 +7358,13 @@ declare class FlyGanttComponent {
7163
7358
  readonly linkGesture: _angular_core.WritableSignal<GanttLinkGesture | null>;
7164
7359
  /** Rubber-band path for an in-flight link gesture (render space). */
7165
7360
  readonly linkGesturePath: _angular_core.Signal<string | null>;
7361
+ /**
7362
+ * The chart's keyboard map, in {@link GanttKeyboard} — composed for the same reason as the three
7363
+ * pointer gestures below it. Declared after the link surface because it is handed both halves:
7364
+ * Delete belongs to a selected ARROW before it belongs to a selected row.
7365
+ */
7366
+ private readonly _keyboard;
7367
+ onGridKeydown(ev: KeyboardEvent): void;
7166
7368
  onLinkPointerDown(ev: PointerEvent, vm: GanttRowVm, anchor: GanttLinkAnchor): void;
7167
7369
  /**
7168
7370
  * Ctrl+wheel scrolls horizontally and a press-drag on empty chart space pans, both in
@@ -7841,28 +8043,29 @@ declare function ganttPeriodBarItem(spec: {
7841
8043
  * would have to pick a label for a state the user cannot see.
7842
8044
  *
7843
8045
  * ## Icon-only, and why they are still discoverable
7844
- * Both are icon-only despite `skills/magic-bar-view-contributions.md` §5's default, because the
8046
+ * Both are icon-only despite `skills/shell-magic-bar-views.md` §5's default, because the
7845
8047
  * indent/outdent glyph pair is one of the few marks a user genuinely reads without help — it is the
7846
8048
  * same pair every word processor, IDE and desktop planner has shipped for thirty years, and the two
7847
8049
  * are identified by being MIRRORS of each other, which a label cannot improve on. They also sort
7848
8050
  * inside Add/Delete/Edit under {@link orderMagicBarItems}, so they never take the outer edge from a
7849
8051
  * verb that needs it.
7850
8052
  *
7851
- * ## Disabled, never hidden
7852
- * `canIndent` / `canOutdent` are state gates, not permission gates: the same row becomes indentable
7853
- * the moment a suitable row appears above it. So both stay rendered and dimmed, with a tip saying
7854
- * why §6's default. Pass `disabledTipKey`s when your app's reason is more specific than the
7855
- * baseline "this row cannot move any further".
8053
+ * ## Omitted, never dimmed
8054
+ * An unavailable verb is left OUT of the returned array — the magic bar renders no disabled
8055
+ * buttons at all (`skills/shell-magic-bar-views.md` §6). The bar is one small shared strip
8056
+ * and its cost is measured in how many things it shows at once, so a dimmed button spends that
8057
+ * budget on an action the user cannot take. This pair is the clearest case: at most ONE of the two
8058
+ * is ever available for a given row, so dimming doubled the group's width to say nothing. What
8059
+ * availability depends on is also on screen while the bar is being read — a row already nested
8060
+ * cannot nest further — so the dimmed state was not teaching anything the chart did not show.
8061
+ *
8062
+ * Returns 0, 1 or 2 actions. Spread it; never index it.
7856
8063
  */
7857
8064
  declare function ganttOutlineBarItems(spec: {
7858
8065
  canIndent: boolean;
7859
8066
  canOutdent: boolean;
7860
8067
  onIndent: () => void;
7861
8068
  onOutdent: () => void;
7862
- /** Tip shown while Indent is dimmed. Defaults to the DS baseline reason. */
7863
- indentDisabledTipKey?: string;
7864
- /** Tip shown while Outdent is dimmed. Defaults to the DS baseline reason. */
7865
- outdentDisabledTipKey?: string;
7866
8069
  }): MagicBarAction[];
7867
8070
 
7868
8071
  /**
@@ -9289,7 +9492,7 @@ declare function magicBarSearchText(previous: MagicBarSearchSeed | null, next: M
9289
9492
  *
9290
9493
  * ## Why this lives in the design system
9291
9494
  * It shipped first inside PPM (`ppm/shared/magic-bar-order.util.ts`) and
9292
- * `skills/magic-bar-view-contributions.md` §7 named that file as the reference implementation —
9495
+ * `skills/shell-magic-bar-views.md` §7 named that file as the reference implementation —
9293
9496
  * which is exactly the shape of a rule that is about to be copy-pasted into the next External App.
9294
9497
  * The ordering is a property of the BAR, not of any one app: the same renderer paints every
9295
9498
  * contribution, so two apps disagreeing about it is a platform-visible inconsistency, not a local
@@ -9717,7 +9920,7 @@ type FlyMagicBarIconName = keyof typeof FLY_MAGIC_BAR_ICONS;
9717
9920
  * App running standalone.
9718
9921
  *
9719
9922
  * ## The gap this closes
9720
- * A view publishes one `MagicBarContribution` (skill: `magic-bar-actions.md`)
9923
+ * A view publishes one `MagicBarContribution` (skill: `shell-magic-bar.md`)
9721
9924
  * and, embedded in the desktop shell, the top-bar pill renders it. Standalone,
9722
9925
  * nothing did — so every screen also kept a bespoke header-actions row
9723
9926
  * (`[page-header-actions]` buttons) that duplicated the published actions in
@@ -10995,7 +11198,7 @@ type FlyCurrencySelectorValue = string | readonly string[] | null;
10995
11198
  * `locked` is a different claim entirely: **the value is fixed on purpose**, because
10996
11199
  * something downstream now depends on it (PPM freezes a project's currency the moment any
10997
11200
  * financial row exists — changing it would silently re-denominate every stored amount).
10998
- * A dimmed control with no explanation is exactly the failure `skills/magic-bar-actions.md`
11201
+ * A dimmed control with no explanation is exactly the failure `skills/shell-magic-bar.md`
10999
11202
  * §3.6 names for actions ("a vanishing action teaches the user nothing"); the same argument
11000
11203
  * applies to a frozen field. So `locked` renders differently on purpose: full-opacity (never
11001
11204
  * dimmed — the value is not "unavailable", it is authoritative), no dropdown affordance at
@@ -11078,7 +11281,7 @@ declare class FlyCurrencySelectorComponent implements ControlValueAccessor {
11078
11281
  */
11079
11282
  readonly locked: _angular_core.InputSignal<boolean>;
11080
11283
  /**
11081
- * i18n KEY (never resolved text — see `skills/magic-bar-actions.md` §3.4) explaining
11284
+ * i18n KEY (never resolved text — see `skills/shell-magic-bar.md` §3.4) explaining
11082
11285
  * WHY the control is locked. Omit to use the localized `currency_selector.locked_default_reason`
11083
11286
  * baseline key; supply your own only when that default reason is wrong for your case
11084
11287
  * (mirrors `MagicBarActionSpec.disabledTipKey`'s "supply only when the default is wrong"
@@ -13407,6 +13610,13 @@ declare class FlyDataTableComponent {
13407
13610
  /** `fly-state-message` key when `rows` is empty (omit to render nothing). */
13408
13611
  readonly emptyKey: _angular_core.InputSignal<string | undefined>;
13409
13612
  readonly emptyIconClass: _angular_core.InputSignal<string | undefined>;
13613
+ /**
13614
+ * The selected row's `id`, or `null`/omitted for no selection — the select-then-act model
13615
+ * (`skills/shell-ux-rulebook.md` §1) paints the matching `<tr>` with `--tint-sel` and
13616
+ * `aria-selected`. A page that still opens rows on activation (rather than selecting them) simply
13617
+ * never sets this; the table renders exactly as before.
13618
+ */
13619
+ readonly selectedId: _angular_core.InputSignal<string | null>;
13410
13620
  protected readonly skeletonRows: number[];
13411
13621
  private readonly cellTemplates;
13412
13622
  private readonly templateMap;
@@ -13418,13 +13628,14 @@ declare class FlyDataTableComponent {
13418
13628
  */
13419
13629
  protected onRowActivate(event: Event, row: unknown): void;
13420
13630
  protected cellValue(row: unknown, col: FlyColumn): unknown;
13631
+ protected isSelected(row: unknown): boolean;
13421
13632
  /** Default text rendering — em-dash for absent values, verbatim otherwise. */
13422
13633
  protected displayValue(row: unknown, col: FlyColumn): string;
13423
13634
  protected headerAriaSort(col: FlyColumn): string | null;
13424
13635
  protected sortDirFor(col: FlyColumn): string | null;
13425
13636
  protected onHeaderClick(col: FlyColumn): void;
13426
13637
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyDataTableComponent, never>;
13427
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyDataTableComponent, "fly-data-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rows": { "alias": "rows"; "required": true; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "ariaLabelKey": { "alias": "ariaLabelKey"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "emptyKey": { "alias": "emptyKey"; "required": false; "isSignal": true; }; "emptyIconClass": { "alias": "emptyIconClass"; "required": false; "isSignal": true; }; }, { "sortChange": "sortChange"; "rowActivated": "rowActivated"; }, ["cellTemplates"], never, true, never>;
13638
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyDataTableComponent, "fly-data-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rows": { "alias": "rows"; "required": true; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "ariaLabelKey": { "alias": "ariaLabelKey"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "emptyKey": { "alias": "emptyKey"; "required": false; "isSignal": true; }; "emptyIconClass": { "alias": "emptyIconClass"; "required": false; "isSignal": true; }; "selectedId": { "alias": "selectedId"; "required": false; "isSignal": true; }; }, { "sortChange": "sortChange"; "rowActivated": "rowActivated"; }, ["cellTemplates"], never, true, never>;
13428
13639
  }
13429
13640
 
13430
13641
  /**
@@ -14819,6 +15030,6 @@ declare const AUDIENCE_ERROR_CODES: {
14819
15030
  };
14820
15031
  type AudienceErrorCode = (typeof AUDIENCE_ERROR_CODES)[keyof typeof AUDIENCE_ERROR_CODES];
14821
15032
 
14822
- 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_CURRENCIES_BRIEF_ENDPOINT, FLY_CURRENCY_DEFAULT_ENDPOINT, 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_GANTT_DEFAULTS, 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_OUTLET_DEPTH, 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_STRATEGY_OBJECTIVES_LOOKUP_ENDPOINT, FLY_THEME_MODE_IDS, FLY_VIEWPORT_IS_MOBILE, FLY_WINDOW_BREADCRUMBS_EVENT, FLY_WINDOW_BREADCRUMBS_STORE_KEY, FLY_WINDOW_HELP_HINT_EVENT, FLY_WINDOW_PAGE_TITLE_EVENT, FlyAchievementProgressComponent, FlyActionMenuComponent, FlyActionStackComponent, FlyAgentDraggableDirective, FlyAnimatedEmojiComponent, FlyAppHomeComponent, FlyAppTopbarComponent, FlyAppUnavailableComponent, 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, FlyCurrencyCatalogService, FlyCurrencySelectorComponent, FlyDataTableComponent, FlyDatePipe, FlyDateTimePipe, FlyDebouncer, FlyDecimalNumberPipe, FlyDeepLinkPrefetchService, FlyDetailCardComponent, FlyDetailShellComponent, FlyDrawerComponent, FlyDurationPipe, FlyDynamicFormComponent, FlyEmojiPickerComponent, FlyFieldComponent, FlyFileDownloadService, FlyFileUploadComponent, FlyFilterPanelComponent, FlyFormBannerComponent, FlyFormFooterComponent, FlyFormGridComponent, FlyFormSectionComponent, FlyFullNumberPipe, FlyGanttComponent, FlyHubClient, FlyIconButtonComponent, FlyIfAdminDirective, FlyIfRoleDirective, FlyImageUploadComponent, FlyLeaderboardComponent, FlyLifecyclePipelineComponent, FlyMagicActionsComponent, FlyMetaListComponent, FlyModalComponent, FlyModerationQueueComponent, FlyModuleIconDirective, FlyMoneyPipe, FlyOverviewKpiRowComponent, FlyOverviewRowsComponent, FlyOverviewSectionComponent, FlyOverviewSurfaceComponent, FlyPagerComponent, FlyPaginationComponent, FlyPeoplePickerComponent, FlyPointsTierComponent, FlyProgressComponent, FlyRelativeTimePipe, FlyRemoteContextService, FlyRemoteRouter, FlyRemoteRouterOutletComponent, FlySearchInputComponent, FlySectionHeaderComponent, FlySecureSrcDirective, FlySegmentedComponent, FlySelectComponent, FlySkeletonComponent, FlySliderComponent, FlySparklineComponent, FlySpinnerComponent, FlyStandaloneAuthCallbackComponent, FlyStandaloneAuthService, FlyStandaloneMagicActionsComponent, FlyStateMessageComponent, FlyStrategySelectorComponent, FlyDynamicFormComponent as FlySurveyFormComponent, FlyTabComponent, FlyTabsComponent, FlyTagsInputComponent, FlyThemeService, FlyTimePipe, FlyToastService, FlyToggleComponent, FlyTooltipDirective, FlyTreeNavComponent, FlyTypeaheadComponent, FlyUserDirectoryService, FlyWindowHelpService, FlyWindowTitleService, FlyosPendingLaunchesGlobalKey, FlyosShellHandlesLaunchRequestsGlobalKey, FlyosShellOwnsHistoryGlobalKey, GANTT_DEPENDENCY_TYPES, GANTT_LABEL_W_DEFAULT, GANTT_LABEL_W_MAX, GANTT_LABEL_W_MIN, GANTT_ROW_TINT_ALPHA, 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, WindowBreadcrumbsRegistry, WindowManagerService, applyGanttRowReorder, applySkinTone, applySuggestion, ariaSort, buildCron, canConfirm, canGoNext$1 as canGoNext, canGoPrev$1 as canGoPrev, captureFocus, clampMagicBarSearchWidth, clampPage$1 as clampPage, clampSliderValue, connectRemoteLaunch, deepestFlyMatch, enterActivatesNatively, filterGanttRows, 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, flyUnwrapCurrencies, flyUnwrapCurrency, flyUnwrapLenient, flyUnwrapObjectiveLookup, ganttOutlineBarItems, ganttPeriodBarItem, hasAnyRoleIn, healNativeFederationCacheOnce, initialExpanded, isAccentColor, isChunkLoadError, isFlyAuthStorePopulated, isNativeFederationCacheError, isRtlLocale, isRtlLocaleEntry, isValidCron, isValidSingleField, loadRemoteStyles, magicBarOwnerKey, magicBarSearchText, matchFlyRoutePattern, matchFlyRoutePrefix, matchFlyRouteTable, nextEnabledIndex, nextModuleIndex, nextSegmentIndex, nextSort, normalizeFlyTheme, normalizeGanttSearchText, normalizeRoles, novaPriorityToneVar, novaStatusToneVar, orderMagicBarItems, overlayStack, canGoNext as pagerCanGoNext, canGoPrev as pagerCanGoPrev, clampPage as pagerClampPage, parseCron, parseStepUpChallenge, parseTags, prefetchRemoteStyles, presenceColorFor, printConsoleSecurityWarning, provideFlyChunkReloadRecovery, provideFlyEmojiPack, provideFlyGanttDefaults, provideFlyOfflineAuth, provideFlyStandaloneAuth, reloadOnceForChunkError, requestAppLaunch, resolveActiveModule, resolveActiveSection, resolveActiveTab, resolveCellValue, resolveStateIcon, resolveStateMessageKey, restoreFocus, sameTags, sectionHintKey, sectionLayout, sliderTrackGradient, sparklinePath, sparklinePoints, stepUpInterceptor, stepUpReturnKey, trimAgentPayload, trimAgentString, unloadRemoteStyles, utf8ByteLength, validateAgentPayload, warnIfEmbeddedSessionMissing };
14823
- 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, FlyAppUnavailableState, 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, FlyDeepLinkPrefetchRoute, 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, FlyGanttDefaults, FlyLaunchEventDetail, FlyLaunchRequestDetail, FlyLeaderboardRow, FlyLiveRefreshOptions, FlyLocaleEntry, FlyMagicBarIconName, FlyMetaItem, FlyModerationLoadPageRequest, FlyModerationLockThreadRequest, FlyModerationOpenSubjectRequest, FlyModerationReport, FlyModerationReportPage, FlyModerationResolutionStatus, FlyModerationResolveRequest, FlyMoneyDisplay, FlyNavigableItem, FlyOfflineAuthConfig, 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, FlyStrategyObjectiveRef, FlyStrategyObjectiveSearchFn, FlyFileSelection as FlySurveyFileSelection, FlyFormAnswer as FlySurveyFormAnswer, FlyFormAnswerValue as FlySurveyFormAnswerValue, FlyFormDefinition as FlySurveyFormDefinition, FlyFormFieldOptions as FlySurveyFormFieldOptions, FlyFormOption as FlySurveyFormOption, FlyFormQuestion as FlySurveyFormQuestion, FlyFormQuestionType as FlySurveyQuestionType, FlyTenantDefaultCurrencyFetchFn, FlyThemeMode, FlyTooltipPlacement, FlyTreeNavNode, FlyTypeaheadOption, FlyWindowHelpHintEventDetail, FlyWindowHelpPublisher, FlyWindowPageTitleEventDetail, FlyWindowTitlePublisher, FlyosPendingLaunches, FocusRestore, FormBannerKind, GanttDependency, GanttDependencyCreate, GanttDependencyDelete, GanttDependencyType, GanttRow, GanttRowDatesChange, GanttRowIndentChange, GanttRowKind, GanttRowReorder, GanttZoom, IconButtonVariant, LaunchContext, LifecycleRollupItem, LifecycleStep, 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, OverviewKpiItem, OverviewKpiTone, OverviewRow, PageHeaderVariant, PresetTerm, ProgressTone, RemoteAppDef, RequestAppLaunchOptions, RoleOuLookupRow, RolePrincipal, RolesTerm, SegmentedOption, SegmentedVariant, ShareOrgChartOption, ShareOuNode, SharePanelLevelOption, SharePermissionEntry, SharePrincipal, SharePrincipalKind, ShareUserResult, StateMessageKind, StepUpChallenge, StepUpReauthHandler, StepUpReauthRequest, TabsVariant, ToastAction, ToastEntry, ToastOptions, ToastVariant, User, UserPrincipal, UsersTerm, WindowBreadcrumb, WindowHelpHint, WindowInstance, WindowState };
15033
+ 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_CURRENCIES_BRIEF_ENDPOINT, FLY_CURRENCY_DEFAULT_ENDPOINT, 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_GANTT_DEFAULTS, FLY_LAUNCH_CONTEXT_EVENT, FLY_LAUNCH_CONTEXT_STORE_KEY, 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_OUTLET_DEPTH, 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_STRATEGY_OBJECTIVES_LOOKUP_ENDPOINT, FLY_THEME_MODE_IDS, FLY_VIEWPORT_IS_MOBILE, FLY_WINDOW_BREADCRUMBS_EVENT, FLY_WINDOW_BREADCRUMBS_STORE_KEY, FLY_WINDOW_HELP_HINT_EVENT, FLY_WINDOW_PAGE_TITLE_EVENT, FlyAchievementProgressComponent, FlyActionMenuComponent, FlyActionStackComponent, FlyAgentDraggableDirective, FlyAnimatedEmojiComponent, FlyAppHomeComponent, FlyAppTopbarComponent, FlyAppUnavailableComponent, 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, FlyCurrencyCatalogService, FlyCurrencySelectorComponent, FlyDataTableComponent, FlyDatePipe, FlyDateTimePipe, FlyDebouncer, FlyDecimalNumberPipe, FlyDeepLinkPrefetchService, FlyDetailCardComponent, FlyDetailShellComponent, FlyDrawerComponent, FlyDurationPipe, FlyDynamicFormComponent, FlyEmojiPickerComponent, FlyFieldComponent, FlyFileDownloadService, FlyFileUploadComponent, FlyFilterPanelComponent, FlyFormBannerComponent, FlyFormFooterComponent, FlyFormGridComponent, FlyFormSectionComponent, FlyFullNumberPipe, FlyGanttComponent, FlyHubClient, FlyIconButtonComponent, FlyIfAdminDirective, FlyIfRoleDirective, FlyImageUploadComponent, FlyLaunchContextService, FlyLeaderboardComponent, FlyLifecyclePipelineComponent, FlyMagicActionsComponent, FlyMetaListComponent, FlyModalComponent, FlyModerationQueueComponent, FlyModuleIconDirective, FlyMoneyPipe, FlyOverviewKpiRowComponent, FlyOverviewRowsComponent, FlyOverviewSectionComponent, FlyOverviewSurfaceComponent, FlyPagerComponent, FlyPaginationComponent, FlyPeoplePickerComponent, FlyPointsTierComponent, FlyProgressComponent, FlyRelativeTimePipe, FlyRemoteContextService, FlyRemoteRouter, FlyRemoteRouterOutletComponent, FlySearchInputComponent, FlySectionHeaderComponent, FlySecureSrcDirective, FlySegmentedComponent, FlySelectComponent, FlySkeletonComponent, FlySliderComponent, FlySparklineComponent, FlySpinnerComponent, FlyStandaloneAuthCallbackComponent, FlyStandaloneAuthService, FlyStandaloneMagicActionsComponent, FlyStateMessageComponent, FlyStrategySelectorComponent, FlyDynamicFormComponent as FlySurveyFormComponent, FlyTabComponent, FlyTabsComponent, FlyTagsInputComponent, FlyThemeService, FlyTimePipe, FlyToastService, FlyToggleComponent, FlyTooltipDirective, FlyTreeNavComponent, FlyTypeaheadComponent, FlyUserDirectoryService, FlyWindowHelpService, FlyWindowTitleService, FlyosPendingLaunchesGlobalKey, FlyosShellHandlesLaunchRequestsGlobalKey, FlyosShellOwnsHistoryGlobalKey, GANTT_DEPENDENCY_TYPES, GANTT_LABEL_W_DEFAULT, GANTT_LABEL_W_MAX, GANTT_LABEL_W_MIN, GANTT_ROW_TINT_ALPHA, 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, WindowBreadcrumbsRegistry, WindowManagerService, applyGanttRowReorder, applySkinTone, applySuggestion, ariaSort, buildCron, canConfirm, canGoNext$1 as canGoNext, canGoPrev$1 as canGoPrev, captureFocus, clampMagicBarSearchWidth, clampPage$1 as clampPage, clampSliderValue, connectRemoteLaunch, deepestFlyMatch, enterActivatesNatively, filterGanttRows, 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, flyUnwrapCurrencies, flyUnwrapCurrency, flyUnwrapLenient, flyUnwrapObjectiveLookup, ganttOutlineBarItems, ganttPeriodBarItem, hasAnyRoleIn, healNativeFederationCacheOnce, initialExpanded, isAccentColor, isChunkLoadError, isFlyAuthStorePopulated, isNativeFederationCacheError, isRtlLocale, isRtlLocaleEntry, isValidCron, isValidSingleField, linkAnchorsFor, loadRemoteStyles, magicBarOwnerKey, magicBarSearchText, matchFlyRoutePattern, matchFlyRoutePrefix, matchFlyRouteTable, nextEnabledIndex, nextModuleIndex, nextSegmentIndex, nextSort, normalizeFlyTheme, normalizeGanttSearchText, normalizeRoles, novaPriorityToneVar, novaStatusToneVar, orderMagicBarItems, overlayStack, canGoNext as pagerCanGoNext, canGoPrev as pagerCanGoPrev, clampPage as pagerClampPage, parseCron, parseStepUpChallenge, parseTags, prefetchRemoteStyles, presenceColorFor, printConsoleSecurityWarning, provideFlyChunkReloadRecovery, provideFlyEmojiPack, provideFlyGanttDefaults, provideFlyOfflineAuth, provideFlyStandaloneAuth, reloadOnceForChunkError, requestAppLaunch, resolveActiveModule, resolveActiveSection, resolveActiveTab, resolveCellValue, resolveStateIcon, resolveStateMessageKey, restoreFocus, sameTags, sectionHintKey, sectionLayout, sliderTrackGradient, sparklinePath, sparklinePoints, stepUpInterceptor, stepUpReturnKey, trimAgentPayload, trimAgentString, unloadRemoteStyles, utf8ByteLength, validateAgentPayload, warnIfEmbeddedSessionMissing };
15034
+ 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, FlyAppUnavailableState, 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, FlyDeepLinkPrefetchRoute, 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, FlyGanttDefaults, FlyLaunchEventDetail, FlyLaunchRequestDetail, FlyLeaderboardRow, FlyLiveRefreshOptions, FlyLocaleEntry, FlyMagicBarIconName, FlyMetaItem, FlyModerationLoadPageRequest, FlyModerationLockThreadRequest, FlyModerationOpenSubjectRequest, FlyModerationReport, FlyModerationReportPage, FlyModerationResolutionStatus, FlyModerationResolveRequest, FlyMoneyDisplay, FlyNavigableItem, FlyOfflineAuthConfig, 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, FlyStrategyObjectiveRef, FlyStrategyObjectiveSearchFn, FlyFileSelection as FlySurveyFileSelection, FlyFormAnswer as FlySurveyFormAnswer, FlyFormAnswerValue as FlySurveyFormAnswerValue, FlyFormDefinition as FlySurveyFormDefinition, FlyFormFieldOptions as FlySurveyFormFieldOptions, FlyFormOption as FlySurveyFormOption, FlyFormQuestion as FlySurveyFormQuestion, FlyFormQuestionType as FlySurveyQuestionType, FlyTenantDefaultCurrencyFetchFn, FlyThemeMode, FlyTooltipPlacement, FlyTreeNavNode, FlyTypeaheadOption, FlyWindowHelpHintEventDetail, FlyWindowHelpPublisher, FlyWindowPageTitleEventDetail, FlyWindowTitlePublisher, FlyosPendingLaunches, FocusRestore, FormBannerKind, GanttDependency, GanttDependencyCreate, GanttDependencyDelete, GanttDependencyType, GanttLinkVm, GanttRow, GanttRowDatesChange, GanttRowIndentChange, GanttRowKind, GanttRowReorder, GanttZoom, IconButtonVariant, LaunchContext, LifecycleRollupItem, LifecycleStep, 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, OverviewKpiItem, OverviewKpiTone, OverviewRow, PageHeaderVariant, PresetTerm, ProgressTone, RemoteAppDef, RequestAppLaunchOptions, RoleOuLookupRow, RolePrincipal, RolesTerm, SegmentedOption, SegmentedVariant, ShareOrgChartOption, ShareOuNode, SharePanelLevelOption, SharePermissionEntry, SharePrincipal, SharePrincipalKind, ShareUserResult, StateMessageKind, StepUpChallenge, StepUpReauthHandler, StepUpReauthRequest, TabsVariant, ToastAction, ToastEntry, ToastOptions, ToastVariant, User, UserPrincipal, UsersTerm, WindowBreadcrumb, WindowHelpHint, WindowInstance, WindowState };
14824
15035
  //# sourceMappingURL=flyos-design-system.d.ts.map