@flyos/design-system 1.2.0 → 1.3.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": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "FlyOS design system — shared components, directives, pipes, services, and models for Business App developers.",
5
5
  "keywords": [
6
6
  "flyos",
@@ -19,61 +19,27 @@
19
19
  font-variant-numeric: tabular-nums;
20
20
  }
21
21
 
22
- // ── Tooltip (CSS-only, no JS dependency) ─────────────────────────────────────
23
- // Add `data-tooltip="text"` to any element to show a floating label on hover or
24
- // keyboard focus. Always pair with `aria-label` for screen-reader users —
25
- // data-tooltip is a *visual* affordance only (the flyTooltip directive wires
26
- // both together). Consumers should use `data-tooltip` *instead of* `title`.
22
+ // ── Tooltip ──────────────────────────────────────────────────────────────────
23
+ // `data-tooltip="text"` still shows a floating label on hover / keyboard focus, but the
24
+ // SURFACE is no longer drawn here. It used to be a `::before` + `::after` pair on this
25
+ // selector, and a pseudo-element is a child box of its host: every scrolling or
26
+ // `overflow: hidden` ancestor clipped it. The boards toolbar rail (an `overflow-y: auto`
27
+ // plate ~47px wide) cut every tool's tip off inside its own column, and no z-index could
28
+ // help — clipping is not a stacking question, and `position: fixed` on the pseudo would
29
+ // still be trapped by those plates' `backdrop-filter` containing block.
30
+ //
31
+ // `FlyTooltipDirective` now owns the surface for BOTH `[flyTooltip]` and `[data-tooltip]`:
32
+ // a `position: fixed` node parented to `<body>`, so it escapes every clip, flips placement
33
+ // and clamps to the viewport. Components that write `data-tooltip` imperatively (the DS
34
+ // icon button) list the directive in `hostDirectives`; templates with a static or bound
35
+ // `data-tooltip` must IMPORT `FlyTooltipDirective` for the label to appear.
36
+ //
37
+ // Only the positioning context the attribute implied is kept, since callers may still hang
38
+ // their own absolutely-positioned adornments (badges, dots) off a tooltip'd control.
27
39
  [data-tooltip] {
28
40
  position: relative;
29
41
  }
30
42
 
31
- [data-tooltip]::before,
32
- [data-tooltip]::after {
33
- position: absolute;
34
- left: 50%;
35
- pointer-events: none;
36
- opacity: 0;
37
- transition: opacity 0.14s ease, transform 0.14s ease;
38
- z-index: var(--z-tooltip);
39
- }
40
-
41
- [data-tooltip]::before {
42
- content: attr(data-tooltip);
43
- bottom: calc(100% + 8px);
44
- transform: translateX(-50%) translateY(3px);
45
- background: var(--ink);
46
- color: var(--ink-inverse);
47
- font-family: var(--font-sans, system-ui, sans-serif);
48
- font-size: var(--text-xs);
49
- font-weight: var(--fw-medium);
50
- line-height: 1.3;
51
- letter-spacing: 0;
52
- padding: 5px 9px;
53
- border-radius: var(--r-sm);
54
- white-space: nowrap;
55
- box-shadow: var(--shadow-tooltip);
56
- }
57
-
58
- [data-tooltip]::after {
59
- content: '';
60
- bottom: calc(100% + 3px);
61
- transform: translateX(-50%) translateY(3px);
62
- width: 0;
63
- height: 0;
64
- border-left: 5px solid transparent;
65
- border-right: 5px solid transparent;
66
- border-top: 5px solid var(--ink);
67
- }
68
-
69
- [data-tooltip]:hover::before,
70
- [data-tooltip]:hover::after,
71
- [data-tooltip]:focus-visible::before,
72
- [data-tooltip]:focus-visible::after {
73
- opacity: 1;
74
- transform: translateX(-50%) translateY(0);
75
- }
76
-
77
43
  // ── CDK overlay container ────────────────────────────────────────────────────
78
44
  // Styled entirely by @angular/cdk/overlay-prebuilt.css (imported by the global
79
45
  // stylesheet). Its default z-index 1000 is correct here: a connected dropdown
@@ -1,29 +1,29 @@
1
- // ─── Inherited-ink baseline ──────────────────────────────────────────────────
2
- //
3
- // Establishes the document's inherited `color`. Until this existed, NOTHING in
4
- // the shell ever set `color` on `html` or `body` — `_theme-light.scss` and
5
- // `_theme-dark.scss` declare custom properties only. So the inherited colour was
6
- // the user-agent default, **black**, and every component that says
7
- // `color: inherit` (fly-tree-nav rows, fly-breadcrumb's current crumb,
8
- // fly-search-input's typed text, fly-card's meta slot, and any consumer markup
9
- // that simply doesn't mention colour) rendered black ink on the smoked glass.
10
- //
11
- // That is why the "text is invisible in light theme" bug kept coming back app
12
- // after app: it was never really an app's mistake. There was no baseline to
13
- // inherit, so *forgetting* to set a colour was the failure mode, and the fix
14
- // kept being applied one component at a time. `--text-color` is white in BOTH
15
- // themes since the Liquid-Glass flip, so one declaration settles it everywhere.
16
- //
17
- // Scoped to the two theme classes on purpose — NOT `:root`. A business app
18
- // running STANDALONE renders on its own opaque paper (`--bg`, near-black
19
- // `--ink`) and does not load `fly-theme` at all; keying on the class means a
20
- // surface that never opted into a shell theme is never repainted white.
21
- //
22
- // A deliberate paper surface inside the shell (the documents editor) still
23
- // brings its own dark ink locally — a component rule beats this baseline, which
24
- // is exactly the intended precedence.
25
-
26
- html.light-theme,
27
- html.dark-theme {
28
- color: var(--text-color);
29
- }
1
+ // ─── Inherited-ink baseline ──────────────────────────────────────────────────
2
+ //
3
+ // Establishes the document's inherited `color`. Until this existed, NOTHING in
4
+ // the shell ever set `color` on `html` or `body` — `_theme-light.scss` and
5
+ // `_theme-dark.scss` declare custom properties only. So the inherited colour was
6
+ // the user-agent default, **black**, and every component that says
7
+ // `color: inherit` (fly-tree-nav rows, fly-breadcrumb's current crumb,
8
+ // fly-search-input's typed text, fly-card's meta slot, and any consumer markup
9
+ // that simply doesn't mention colour) rendered black ink on the smoked glass.
10
+ //
11
+ // That is why the "text is invisible in light theme" bug kept coming back app
12
+ // after app: it was never really an app's mistake. There was no baseline to
13
+ // inherit, so *forgetting* to set a colour was the failure mode, and the fix
14
+ // kept being applied one component at a time. `--text-color` is white in BOTH
15
+ // themes since the Liquid-Glass flip, so one declaration settles it everywhere.
16
+ //
17
+ // Scoped to the two theme classes on purpose — NOT `:root`. A business app
18
+ // running STANDALONE renders on its own opaque paper (`--bg`, near-black
19
+ // `--ink`) and does not load `fly-theme` at all; keying on the class means a
20
+ // surface that never opted into a shell theme is never repainted white.
21
+ //
22
+ // A deliberate paper surface inside the shell (the documents editor) still
23
+ // brings its own dark ink locally — a component rule beats this baseline, which
24
+ // is exactly the intended precedence.
25
+
26
+ html.light-theme,
27
+ html.dark-theme {
28
+ color: var(--text-color);
29
+ }
@@ -1,81 +1,81 @@
1
- // ─── Shell-embed bridge — app-surface tokens re-tinted onto shell glass ──────
2
- // MIXIN ONLY. This partial emits no CSS on import; it exists so the mapping
3
- // below lives in ONE place instead of being retyped per feature app.
4
- //
5
- // WHY IT IS NEEDED
6
- // The DS carries two token families on purpose (see `_app-surface-tokens.scss`'s
7
- // header). `--ink-*`/`--bg-*`/`--line-*` dress BUSINESS-APP CONTENT: an opaque
8
- // reading surface, dark ink on white in light mode. `--label-*`/`--surface-*`
9
- // dress SHELL CHROME: white ink on translucent glass over the user's wallpaper.
10
- //
11
- // A desktop-shell feature app renders inside a glass window, so its chrome is
12
- // necessarily the second family — but the moment it mounts a component from the
13
- // `fly-*` app-surface kit (or `@flyos/design-system-board`), that component
14
- // themes itself from the FIRST family and paints an opaque white slab with
15
- // near-black ink. One region, two families: the app's own header ink is white,
16
- // the slab beneath it is white, and the header goes invisible.
17
- //
18
- // That is not hypothetical. It shipped in canvas-boards and was measured live:
19
- // `.cbe__export-btn` computed `color: rgb(255,255,255)` sitting on a board whose
20
- // `--_surface` resolved to `oklch(100% 0 0deg)`. `core/theme/feature-app-surface-tokens.ts`
21
- // documents the same class of trap ("a dark-mode-only review passes while light
22
- // mode renders a white slab") — and note the failure is LIGHT-mode-only, because
23
- // in dark mode both families happen to agree on light-ink-on-dark.
24
- //
25
- // THE FIX is the seam the tokens file already names: an app that embeds in the
26
- // shell re-tints the content family onto glass. help-center (`.hc-shell`) and
27
- // dashboard-app hand-rolled identical copies of this map before it lived here.
28
- //
29
- // ALIASES ONLY — every value is another token, never a literal, so the whole map
30
- // follows the shell's theme automatically. The ONE exception is `--on-ink`, and
31
- // its reason is written at the declaration.
32
- @mixin app-surface-on-glass {
33
- // Surfaces: the window chrome supplies the material, so the app's own page
34
- // background is nothing at all; cards/tracks are lifts ON that plate.
35
- --bg: transparent;
36
- --bg-2: var(--surface-card);
37
- --bg-3: var(--fill-tertiary);
38
- --bg-hover: var(--surface-active);
39
-
40
- // Hairlines.
41
- --line: var(--separator);
42
- --line-2: var(--surface-border);
43
- --line-3: var(--separator);
44
-
45
- // Ink — opaque label tokens, never a surface token. Aliasing a translucent
46
- // surface onto an ink slot is what turns a control into an empty coloured
47
- // square (see the note in help-center.component.scss).
48
- --ink: var(--label-primary);
49
- --ink-2: var(--label-secondary);
50
- --ink-3: var(--label-secondary);
51
- --ink-4: var(--label-tertiary);
52
-
53
- // CONTRACT (`_app-surface-tokens.scss`): anything that redefines `--ink` MUST
54
- // redefine `--on-ink`, and it must be OPAQUE. `--on-ink` labels a fill of
55
- // `--ink` itself — the primary button. Above we pin `--ink` to the shell's
56
- // white label ink in BOTH themes, so its counter-ink is a fixed DARK value in
57
- // both. It cannot alias a shell token: the shell is glass and owns no
58
- // dark-opaque ink. This literal is the same value `--ink` carries in the
59
- // app-surface light theme, i.e. the colour a white pill is designed to label.
60
- //
61
- // `app-surface-conventions.spec.ts` can only police the DS token file itself;
62
- // its doc says consumers that remap `--ink` "carry the same obligation".
63
- // Routing every consumer through this mixin is how that obligation is met.
64
- --on-ink: oklch(18% 0.005 250deg);
65
-
66
- // `--ink-inverse` carries the SAME obligation as `--on-ink` and was missed.
67
- //
68
- // The app-surface family defines it once, as "text on dark / gradient fills" — near-white, which
69
- // is correct while `--ink` is near-black. This mixin flips `--ink` to the shell's WHITE label ink
70
- // and updated `--on-ink` accordingly, but left `--ink-inverse` at its near-white resting value.
71
- // Every `background: var(--ink); color: var(--ink-inverse)` pair inside an embedded app therefore
72
- // became WHITE ON WHITE at a contrast ratio of about 1:1.
73
- //
74
- // That is not hypothetical: it is what made `[data-tooltip]` (the CSS tooltip behind every
75
- // `fly-icon-button`'s `tooltipKey`) invisible across the board editor — measured live at
76
- // background rgb(255,255,255) with colour oklch(0.99 0 0). The same pair is used by the button,
77
- // icon-button, checkbox and card components, so this was never a Boards-only bug.
78
- //
79
- // Pinned to `--on-ink` rather than restated, so the two counter-inks cannot drift apart again.
80
- --ink-inverse: var(--on-ink);
81
- }
1
+ // ─── Shell-embed bridge — app-surface tokens re-tinted onto shell glass ──────
2
+ // MIXIN ONLY. This partial emits no CSS on import; it exists so the mapping
3
+ // below lives in ONE place instead of being retyped per feature app.
4
+ //
5
+ // WHY IT IS NEEDED
6
+ // The DS carries two token families on purpose (see `_app-surface-tokens.scss`'s
7
+ // header). `--ink-*`/`--bg-*`/`--line-*` dress BUSINESS-APP CONTENT: an opaque
8
+ // reading surface, dark ink on white in light mode. `--label-*`/`--surface-*`
9
+ // dress SHELL CHROME: white ink on translucent glass over the user's wallpaper.
10
+ //
11
+ // A desktop-shell feature app renders inside a glass window, so its chrome is
12
+ // necessarily the second family — but the moment it mounts a component from the
13
+ // `fly-*` app-surface kit (or `@flyos/design-system-board`), that component
14
+ // themes itself from the FIRST family and paints an opaque white slab with
15
+ // near-black ink. One region, two families: the app's own header ink is white,
16
+ // the slab beneath it is white, and the header goes invisible.
17
+ //
18
+ // That is not hypothetical. It shipped in canvas-boards and was measured live:
19
+ // `.cbe__export-btn` computed `color: rgb(255,255,255)` sitting on a board whose
20
+ // `--_surface` resolved to `oklch(100% 0 0deg)`. `core/theme/feature-app-surface-tokens.ts`
21
+ // documents the same class of trap ("a dark-mode-only review passes while light
22
+ // mode renders a white slab") — and note the failure is LIGHT-mode-only, because
23
+ // in dark mode both families happen to agree on light-ink-on-dark.
24
+ //
25
+ // THE FIX is the seam the tokens file already names: an app that embeds in the
26
+ // shell re-tints the content family onto glass. help-center (`.hc-shell`) and
27
+ // dashboard-app hand-rolled identical copies of this map before it lived here.
28
+ //
29
+ // ALIASES ONLY — every value is another token, never a literal, so the whole map
30
+ // follows the shell's theme automatically. The ONE exception is `--on-ink`, and
31
+ // its reason is written at the declaration.
32
+ @mixin app-surface-on-glass {
33
+ // Surfaces: the window chrome supplies the material, so the app's own page
34
+ // background is nothing at all; cards/tracks are lifts ON that plate.
35
+ --bg: transparent;
36
+ --bg-2: var(--surface-card);
37
+ --bg-3: var(--fill-tertiary);
38
+ --bg-hover: var(--surface-active);
39
+
40
+ // Hairlines.
41
+ --line: var(--separator);
42
+ --line-2: var(--surface-border);
43
+ --line-3: var(--separator);
44
+
45
+ // Ink — opaque label tokens, never a surface token. Aliasing a translucent
46
+ // surface onto an ink slot is what turns a control into an empty coloured
47
+ // square (see the note in help-center.component.scss).
48
+ --ink: var(--label-primary);
49
+ --ink-2: var(--label-secondary);
50
+ --ink-3: var(--label-secondary);
51
+ --ink-4: var(--label-tertiary);
52
+
53
+ // CONTRACT (`_app-surface-tokens.scss`): anything that redefines `--ink` MUST
54
+ // redefine `--on-ink`, and it must be OPAQUE. `--on-ink` labels a fill of
55
+ // `--ink` itself — the primary button. Above we pin `--ink` to the shell's
56
+ // white label ink in BOTH themes, so its counter-ink is a fixed DARK value in
57
+ // both. It cannot alias a shell token: the shell is glass and owns no
58
+ // dark-opaque ink. This literal is the same value `--ink` carries in the
59
+ // app-surface light theme, i.e. the colour a white pill is designed to label.
60
+ //
61
+ // `app-surface-conventions.spec.ts` can only police the DS token file itself;
62
+ // its doc says consumers that remap `--ink` "carry the same obligation".
63
+ // Routing every consumer through this mixin is how that obligation is met.
64
+ --on-ink: oklch(18% 0.005 250deg);
65
+
66
+ // `--ink-inverse` carries the SAME obligation as `--on-ink` and was missed.
67
+ //
68
+ // The app-surface family defines it once, as "text on dark / gradient fills" — near-white, which
69
+ // is correct while `--ink` is near-black. This mixin flips `--ink` to the shell's WHITE label ink
70
+ // and updated `--on-ink` accordingly, but left `--ink-inverse` at its near-white resting value.
71
+ // Every `background: var(--ink); color: var(--ink-inverse)` pair inside an embedded app therefore
72
+ // became WHITE ON WHITE at a contrast ratio of about 1:1.
73
+ //
74
+ // That is not hypothetical: it is what made `[data-tooltip]` (the CSS tooltip behind every
75
+ // `fly-icon-button`'s `tooltipKey`) invisible across the board editor — measured live at
76
+ // background rgb(255,255,255) with colour oklch(0.99 0 0). The same pair is used by the button,
77
+ // icon-button, checkbox and card components, so this was never a Boards-only bug.
78
+ //
79
+ // Pinned to `--on-ink` rather than restated, so the two counter-inks cannot drift apart again.
80
+ --ink-inverse: var(--on-ink);
81
+ }
@@ -1,28 +1,28 @@
1
- // visionOS button pseudo-element layers (used by _business-app-buttons.scss).
2
- // Kept separate from desktop-app glass mixins so Business Apps only pull button-related SCSS.
3
-
4
- @mixin vos-platter-layers($radius) {
5
- content: '';
6
- position: absolute;
7
- inset: 0;
8
- border-radius: $radius;
9
- pointer-events: none;
10
- background:
11
- linear-gradient(var(--btn-platter-lighten), var(--btn-platter-lighten)),
12
- linear-gradient(var(--btn-platter-dodge), var(--btn-platter-dodge));
13
- background-blend-mode: lighten, color-dodge;
14
- mix-blend-mode: screen;
15
- }
16
-
17
- @mixin vos-disabled-layers($radius) {
18
- content: '';
19
- position: absolute;
20
- inset: 0;
21
- border-radius: $radius;
22
- pointer-events: none;
23
- background:
24
- linear-gradient(var(--btn-disabled-lighten), var(--btn-disabled-lighten)),
25
- linear-gradient(var(--btn-disabled-dodge), var(--btn-disabled-dodge));
26
- background-blend-mode: lighten, color-dodge;
27
- mix-blend-mode: screen;
28
- }
1
+ // visionOS button pseudo-element layers (used by _business-app-buttons.scss).
2
+ // Kept separate from desktop-app glass mixins so Business Apps only pull button-related SCSS.
3
+
4
+ @mixin vos-platter-layers($radius) {
5
+ content: '';
6
+ position: absolute;
7
+ inset: 0;
8
+ border-radius: $radius;
9
+ pointer-events: none;
10
+ background:
11
+ linear-gradient(var(--btn-platter-lighten), var(--btn-platter-lighten)),
12
+ linear-gradient(var(--btn-platter-dodge), var(--btn-platter-dodge));
13
+ background-blend-mode: lighten, color-dodge;
14
+ mix-blend-mode: screen;
15
+ }
16
+
17
+ @mixin vos-disabled-layers($radius) {
18
+ content: '';
19
+ position: absolute;
20
+ inset: 0;
21
+ border-radius: $radius;
22
+ pointer-events: none;
23
+ background:
24
+ linear-gradient(var(--btn-disabled-lighten), var(--btn-disabled-lighten)),
25
+ linear-gradient(var(--btn-disabled-dodge), var(--btn-disabled-dodge));
26
+ background-blend-mode: lighten, color-dodge;
27
+ mix-blend-mode: screen;
28
+ }
@@ -6990,6 +6990,22 @@ type FlyTooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
6990
6990
  * host's `getBoundingClientRect()`, so it escapes every overflow-clip and app-window
6991
6991
  * bound. It flips placement + clamps to the viewport so it's always fully visible.
6992
6992
  *
6993
+ * ## `data-tooltip` is the SAME primitive now (the global clipping fix)
6994
+ * `[data-tooltip]` used to be a CSS-only `::before`/`::after` pair in
6995
+ * `_app-surface-utilities.scss`. A pseudo-element is a child box of its host, so it is
6996
+ * clipped by ANY scrolling / `overflow: hidden` ancestor — which is why the boards
6997
+ * toolbar rail (a `overflow-y: auto` plate) rendered every tool tip cut off inside its
6998
+ * own 47px-wide column. No z-index can fix that: clipping is not a stacking question.
6999
+ * `position: fixed` on the pseudo would not fix it either, because the same plates carry
7000
+ * `backdrop-filter`, and a filtered ancestor is a containing block for fixed descendants.
7001
+ *
7002
+ * The fix is to have ONE tooltip implementation, and it is this one: the selector now
7003
+ * also matches `[data-tooltip]`, and when no `flyTooltip` text is bound the directive
7004
+ * reads the host's `data-tooltip` attribute at show time. Reading it lazily (rather than
7005
+ * binding it) is what lets components that write the attribute IMPERATIVELY — the DS icon
7006
+ * button resolves an i18n key into it — participate by simply listing this directive in
7007
+ * `hostDirectives`, with no input to keep in sync.
7008
+ *
6993
7009
  * ## Behaviour
6994
7010
  * - Shows on `mouseenter` AND `focus` (keyboard users), after `flyTooltipDelay` ms.
6995
7011
  * - Hides immediately on `mouseleave` / `blur` / `Escape` / scroll / wheel / destroy.
@@ -7034,7 +7050,14 @@ declare class FlyTooltipDirective implements OnDestroy {
7034
7050
  private readonly onKeydown;
7035
7051
  constructor();
7036
7052
  ngOnDestroy(): void;
7037
- /** Trimmed text, or `''` when there's nothing meaningful to show. */
7053
+ /**
7054
+ * Trimmed text, or `''` when there's nothing meaningful to show.
7055
+ *
7056
+ * Falls back to the host's `data-tooltip` attribute — read from the DOM rather than through an
7057
+ * input, because the DS icon button writes it imperatively from a resolved i18n key (and re-writes
7058
+ * it on every locale change). A signal input could not see that; an attribute read at show time
7059
+ * always reports the current label.
7060
+ */
7038
7061
  private normalizedText;
7039
7062
  scheduleShow(): void;
7040
7063
  private show;
@@ -7055,7 +7078,7 @@ declare class FlyTooltipDirective implements OnDestroy {
7055
7078
  */
7056
7079
  private ensureStyles;
7057
7080
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyTooltipDirective, never>;
7058
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FlyTooltipDirective, "[flyTooltip]", never, { "text": { "alias": "flyTooltip"; "required": false; "isSignal": true; }; "flyTooltipPlacement": { "alias": "flyTooltipPlacement"; "required": false; "isSignal": true; }; "flyTooltipDisabled": { "alias": "flyTooltipDisabled"; "required": false; "isSignal": true; }; "flyTooltipDelay": { "alias": "flyTooltipDelay"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
7081
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FlyTooltipDirective, "[flyTooltip], [data-tooltip]", never, { "text": { "alias": "flyTooltip"; "required": false; "isSignal": true; }; "flyTooltipPlacement": { "alias": "flyTooltipPlacement"; "required": false; "isSignal": true; }; "flyTooltipDisabled": { "alias": "flyTooltipDisabled"; "required": false; "isSignal": true; }; "flyTooltipDelay": { "alias": "flyTooltipDelay"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
7059
7082
  }
7060
7083
 
7061
7084
  /**
@@ -8536,8 +8559,14 @@ declare class FlyButtonComponent {
8536
8559
  * Circular 34px icon-only button (ported from the legacy global
8537
8560
  * `.circles-iconbtn` disc — both render identically until the P6 sweep).
8538
8561
  *
8539
- * `tooltipKey` resolves through {@link I18nService} and wires BOTH
8540
- * `data-tooltip` (CSS tooltip) and `aria-label`, re-resolving on locale change.
8562
+ * `tooltipKey` resolves through {@link I18nService} and wires BOTH `data-tooltip` and
8563
+ * `aria-label`, re-resolving on locale change.
8564
+ *
8565
+ * The label is FLOATED by {@link FlyTooltipDirective} (a body-parented `position: fixed`
8566
+ * node), listed here as a host directive. It used to be a CSS `::before` on
8567
+ * `[data-tooltip]`, which any scrolling or `overflow: hidden` ancestor clipped — the
8568
+ * boards toolbar rail cut every tip off inside its own column. The directive reads the
8569
+ * attribute this component writes, so there is no input to keep in sync.
8541
8570
  */
8542
8571
  declare class FlyIconButtonComponent {
8543
8572
  private readonly i18n;
@@ -8549,7 +8578,7 @@ declare class FlyIconButtonComponent {
8549
8578
  readonly tooltipKey: _angular_core.InputSignal<string | undefined>;
8550
8579
  constructor();
8551
8580
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyIconButtonComponent, never>;
8552
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyIconButtonComponent, "button[fly-icon-button]", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "tooltipKey": { "alias": "tooltipKey"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
8581
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyIconButtonComponent, "button[fly-icon-button]", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "tooltipKey": { "alias": "tooltipKey"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof FlyTooltipDirective; inputs: {}; outputs: {}; }]>;
8553
8582
  }
8554
8583
 
8555
8584
  type ChipTone = 'neutral' | 'accent' | 'success' | 'warning' | 'danger';
@@ -9300,6 +9329,18 @@ interface FlyAppModuleSection {
9300
9329
  /** i18n key for the column heading. Omit for an untitled column. */
9301
9330
  titleKey?: string;
9302
9331
  modules: FlyAppModule[];
9332
+ /**
9333
+ * Card shape on the landing. `feature` is the tall icon-over-title card,
9334
+ * `compact` the short horizontal row. Defaults to `feature` for the first
9335
+ * section and `compact` for the rest.
9336
+ */
9337
+ layout?: 'feature' | 'compact';
9338
+ /** Renders the section behind a disclosure, collapsed initially. */
9339
+ collapsible?: boolean;
9340
+ /** i18n key for the aside shown beside a collapsible section's heading when OPEN. */
9341
+ hintKey?: string;
9342
+ /** i18n key for that aside when the section is COLLAPSED. Falls back to `hintKey`. */
9343
+ collapsedHintKey?: string;
9303
9344
  }
9304
9345
 
9305
9346
  /**
@@ -9416,6 +9457,113 @@ declare function nextModuleIndex(modules: readonly FlyAppModule[], from: number,
9416
9457
  /** First focusable row, or -1 when every row is disabled. */
9417
9458
  declare function firstModuleIndex(modules: readonly FlyAppModule[]): number;
9418
9459
 
9460
+ /**
9461
+ * `<fly-app-home>` — a business app's landing page: brand strip, hero, and one card
9462
+ * per module.
9463
+ *
9464
+ * The sibling of {@link FlyAppTopbarComponent}, and deliberately fed by the SAME
9465
+ * `FlyAppModuleSection[]`. An app declares its modules once; the switcher is how you
9466
+ * move between them once you are inside, this is the front door you arrive at. Two
9467
+ * registries would drift, and the drift would show as a module reachable from one and
9468
+ * not the other.
9469
+ *
9470
+ * ```html
9471
+ * <fly-app-home
9472
+ * brandLabelKey="common.label.thoughts"
9473
+ * titleKey="thoughts.home.title"
9474
+ * subtitleKey="thoughts.home.subtitle"
9475
+ * [sections]="navSections"
9476
+ * (moduleSelected)="open($event)">
9477
+ * <span app-home-brand><fly-thoughts-logo /></span>
9478
+ * <div app-home-actions><!-- locale / theme / profile --></div>
9479
+ * <ng-template flyModuleIcon="ideas"><svg …></svg></ng-template>
9480
+ * </fly-app-home>
9481
+ * ```
9482
+ *
9483
+ * Generalized from the Circles landing, whose layout was sound but whose content was
9484
+ * hardcoded — one inline `<svg>` and one `@if` per module, plus a bespoke card for each
9485
+ * non-module destination. Here every card is data, and a destination that is not really
9486
+ * a module (a gallery, a cross-cutting control room) is just another {@link FlyAppModule}
9487
+ * with a projected icon. That was the test of whether this abstraction was real.
9488
+ *
9489
+ * Icons reuse `flyModuleIcon` — the SAME directive the topbar takes — so an app that
9490
+ * renders both declares its icon templates once per surface, in the same syntax.
9491
+ *
9492
+ * a11y: cards are real `<button>`s in a labelled group; a collapsible section is a
9493
+ * disclosure (`aria-expanded` + `aria-controls`), and the region carries the section
9494
+ * heading. Layout is logical-property only, so it mirrors under `dir="rtl"` on its own —
9495
+ * the one exception is the chevron/arrow glyphs, which are directional by meaning and
9496
+ * flip explicitly.
9497
+ */
9498
+ declare class FlyAppHomeComponent {
9499
+ /** i18n key for the brand name beside the mark. Omit to render the mark alone. */
9500
+ readonly brandLabelKey: _angular_core.InputSignal<string | undefined>;
9501
+ /** i18n key for the hero headline. */
9502
+ readonly titleKey: _angular_core.InputSignal<string | undefined>;
9503
+ /** i18n key for the hero sub-line. */
9504
+ readonly subtitleKey: _angular_core.InputSignal<string | undefined>;
9505
+ /** The app's modules, grouped. Same array the topbar takes. */
9506
+ readonly sections: _angular_core.InputSignal<readonly FlyAppModuleSection[]>;
9507
+ /** i18n key for the card group's `aria-label`. */
9508
+ readonly modulesLabelKey: _angular_core.InputSignal<string>;
9509
+ /** Emits the selected module's `key`. Disabled modules never emit. */
9510
+ readonly moduleSelected: _angular_core.OutputEmitterRef<string>;
9511
+ /** Emits when the brand is activated. */
9512
+ readonly brandSelected: _angular_core.OutputEmitterRef<void>;
9513
+ private readonly icons;
9514
+ /**
9515
+ * Expanded section indices. Seeded from the inputs and then owned by the user —
9516
+ * `linkedSignal` semantics on purpose: re-declaring `sections` (a locale switch
9517
+ * re-evaluating labels, say) must not slam a section the user opened shut again.
9518
+ */
9519
+ private readonly userToggled;
9520
+ private readonly expandedSet;
9521
+ /** Presentation-resolved sections, so the template stays declarative. */
9522
+ readonly rows: _angular_core.Signal<{
9523
+ index: number;
9524
+ section: FlyAppModuleSection;
9525
+ layout: _flyos_design_system.FlyAppHomeLayout;
9526
+ expanded: boolean;
9527
+ hintKey: string | null;
9528
+ }[]>;
9529
+ protected iconFor(key: string): _angular_core.TemplateRef<unknown> | undefined;
9530
+ protected toggle(index: number): void;
9531
+ protected select(module: FlyAppModule): void;
9532
+ protected sectionId(index: number): string;
9533
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyAppHomeComponent, never>;
9534
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyAppHomeComponent, "fly-app-home", never, { "brandLabelKey": { "alias": "brandLabelKey"; "required": false; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "subtitleKey": { "alias": "subtitleKey"; "required": false; "isSignal": true; }; "sections": { "alias": "sections"; "required": false; "isSignal": true; }; "modulesLabelKey": { "alias": "modulesLabelKey"; "required": false; "isSignal": true; }; }, { "moduleSelected": "moduleSelected"; "brandSelected": "brandSelected"; }, ["icons"], ["[app-home-brand]", "[app-home-actions]"], true, never>;
9535
+ }
9536
+
9537
+ /** Card shape a section renders with on the landing. */
9538
+ type FlyAppHomeLayout = 'feature' | 'compact';
9539
+ /**
9540
+ * The section's card shape, applying the default when it declares none: the FIRST
9541
+ * section is the app's front door and gets tall feature cards; everything after it is
9542
+ * secondary and gets compact rows.
9543
+ *
9544
+ * Positional rather than required because the common case — one prominent section plus
9545
+ * a "supporting" tail — should need no configuration at all, and an app that wants
9546
+ * something else says so explicitly.
9547
+ */
9548
+ declare function sectionLayout(section: Pick<FlyAppModuleSection, 'layout'>, index: number): FlyAppHomeLayout;
9549
+ /**
9550
+ * Which sections start expanded: every non-collapsible one, plus none of the
9551
+ * collapsible ones.
9552
+ *
9553
+ * Returned as a `Set` of indices rather than mutating the sections, so the input array
9554
+ * stays the app's immutable declaration and re-rendering with new data cannot resurrect
9555
+ * a stale open/closed state.
9556
+ */
9557
+ declare function initialExpanded(sections: readonly Pick<FlyAppModuleSection, 'collapsible'>[]): ReadonlySet<number>;
9558
+ /**
9559
+ * The hint key for a collapsible section in its current state, or null when it has none.
9560
+ *
9561
+ * `collapsedHintKey` falls back to `hintKey` so an app that wants one message in both
9562
+ * states declares one key. A non-collapsible section never shows a hint — the hint
9563
+ * exists to explain what is hidden.
9564
+ */
9565
+ declare function sectionHintKey(section: Pick<FlyAppModuleSection, 'collapsible' | 'hintKey' | 'collapsedHintKey'>, expanded: boolean): string | null;
9566
+
9419
9567
  /**
9420
9568
  * Underline tab row + panels — visual port of the signal-detail sidecard tab
9421
9569
  * row (`.llc__tabs` / `.llc__tab`); also replaces the job-profile
@@ -10081,6 +10229,6 @@ declare const AUDIENCE_ERROR_CODES: {
10081
10229
  };
10082
10230
  type AudienceErrorCode = (typeof AUDIENCE_ERROR_CODES)[keyof typeof AUDIENCE_ERROR_CODES];
10083
10231
 
10084
- export { AGENT_DRAG_MIME, AGENT_PAYLOAD_VERSION, APP_LOOKUP, AUDIENCE_ERROR_CODES, AUDIENCE_LIMITS, AUDIENCE_PRESETS, AUDIENCE_TERM_KINDS, AgentActionBus, AgentActionUnsupportedDispatchError, AgentCommandRegistry, AgentDropRegistry, AgentFlightAnimator, AgentLookupRegistry, AgentPayloadOversizeError, AudienceBuilderComponent, AuthService, BilingualFieldComponent, CRON_MODES, CRON_WEEKDAYS, ContextMenuComponent, DEFAULT_AGENT_PAYLOAD_LIMITS, DEFAULT_FLY_THEME_MODE, DS_BASELINE_LOCALES, DashboardKpiComponent, DialogResult, EntityLookupComponent, FLYOS_LAUNCH_EVENT, FLYOS_LAUNCH_REQUEST_EVENT, FLYOS_REMOTE_ROUTE_EVENT, FLY_ACCENT_PROPERTY, FLY_ADMIN_ROLES, FLY_CHUNK_RELOAD_FLAG, FLY_COMPACT_THRESHOLD, FLY_COUNTRIES, FLY_EMOJI_BY_ID, FLY_EMOJI_CATEGORIES, FLY_EMOJI_CATEGORY_BY_ID, FLY_EMOJI_DEFAULT_CATEGORIES, FLY_EMOJI_PACK, FLY_EMOJI_PACK_MISSING_MESSAGE, FLY_EMOJI_PREVIEW_COUNT, FLY_EMPTY_VALUE, FLY_LOCALE_CATALOG, FLY_NF_CACHE_HEAL_FLAG, FLY_RELOAD_DEBOUNCE_MS, FLY_REMOTE_BASE_PATH, FLY_REMOTE_CONTEXT_EVENT, FLY_REMOTE_CONTEXT_STORE_KEY, FLY_REMOTE_ROUTES, FLY_SEARCH_DEBOUNCE_MS, FLY_SKIN_TONES, FLY_STANDALONE_AUTH_CONFIG, FLY_THEME_MODE_IDS, FLY_WINDOW_HELP_HINT_EVENT, FLY_WINDOW_PAGE_TITLE_EVENT, FlyAchievementProgressComponent, FlyActionMenuComponent, FlyActionStackComponent, FlyAgentDraggableDirective, FlyAnimatedEmojiComponent, FlyAppTopbarComponent, FlyAuthLiveRefresh, FlyBadgeWallComponent, FlyBlockUiComponent, FlyBreadcrumbComponent, FlyButtonComponent, FlyBytesPipe, FlyCaptchaComponent, FlyCardActionsComponent, FlyCardBodyComponent, FlyCardComponent, FlyCardFooterComponent, FlyCardGridComponent, FlyCardMediaComponent, FlyCardMetaComponent, FlyCardStatusComponent, FlyCardTitleComponent, FlyCellDirective, FlyCheckboxComponent, FlyChipComponent, FlyChunkReloadErrorHandler, FlyClickOutsideDirective, FlyCollapsibleComponent, FlyCommentThreadComponent, FlyCompactNumberPipe, FlyConfirmDialogComponent, FlyControlDirective, FlyCronBuilderComponent, FlyDataTableComponent, FlyDatePipe, FlyDateTimePipe, FlyDebouncer, FlyDecimalNumberPipe, FlyDetailCardComponent, FlyDetailShellComponent, FlyDrawerComponent, FlyDurationPipe, FlyDynamicFormComponent, FlyEmojiPickerComponent, FlyFieldComponent, FlyFileUploadComponent, FlyFilterPanelComponent, FlyFormBannerComponent, FlyFormFooterComponent, FlyFormGridComponent, FlyFormSectionComponent, FlyFullNumberPipe, FlyGanttComponent, FlyHubClient, FlyIconButtonComponent, FlyIfAdminDirective, FlyIfRoleDirective, FlyImageUploadComponent, FlyLeaderboardComponent, FlyMetaListComponent, FlyModalComponent, FlyModerationQueueComponent, FlyModuleIconDirective, FlyPaginationComponent, FlyPeoplePickerComponent, FlyPointsTierComponent, FlyProgressComponent, FlyRelativeTimePipe, FlyRemoteContextService, FlyRemoteRouter, FlyRemoteRouterOutletComponent, FlySearchInputComponent, FlySectionHeaderComponent, FlySecureSrcDirective, FlySegmentedComponent, FlySelectComponent, FlySkeletonComponent, FlySliderComponent, FlySparklineComponent, FlySpinnerComponent, FlyStandaloneAuthCallbackComponent, FlyStandaloneAuthService, FlyStateMessageComponent, FlyDynamicFormComponent as FlySurveyFormComponent, FlyTabComponent, FlyTabsComponent, FlyTagsInputComponent, FlyThemeService, FlyTimePipe, FlyToastService, FlyToggleComponent, FlyTooltipDirective, FlyTreeNavComponent, FlyTypeaheadComponent, FlyWindowHelpService, FlyWindowTitleService, FlyosPendingLaunchesGlobalKey, FlyosShellHandlesLaunchRequestsGlobalKey, FlyosShellOwnsHistoryGlobalKey, GANTT_ZOOMS, I18nService, LAUNCH_CONTEXT, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, OverlayStack, PRESENCE_COLORS, PageHeaderComponent, RTL_LOCALE_SET, SHARE_ORG_CHART_SYSTEM_KEY_APPS, SHARE_ORG_CHART_SYSTEM_KEY_DEFAULT, SHARE_PANEL_DEFAULT_FILE_LEVELS, STATE_DEFAULT_ICONS, STATE_DEFAULT_MESSAGE_KEYS, STEP_UP_CODE, STEP_UP_REAUTH_HANDLER, STEP_UP_RETURN_KEY, SUPPORTED_AGENT_PAYLOAD_VERSIONS, SharePanelComponent, SourceAppResolver, StandaloneWindowManagerService, StatusBadgeComponent, StepUpService, ToastHostComponent, TranslatePipe, WINDOW_DATA, WINDOW_HELP_HINT, WindowManagerService, applySkinTone, applySuggestion, ariaSort, buildCron, canConfirm, canGoNext, canGoPrev, captureFocus, clampPage, clampSliderValue, connectRemoteLaunch, enterActivatesNatively, filterGroup, filterSuggestions, findLocaleByDialect, findLocaleByPrefix, firstEnabledIndex, firstModuleIndex, flattenModules, flyAdminGuard, flyCaptchaBase64Utf8, flyCaptchaBuildToken, flyCaptchaSha256Hex, flyCompactNumber, flyDebounced, flyDecimalNumber, flyDownloadBlob, flyDuration, flyEmojiFor, flyEmojiIsTonable, flyEmojiPackUrl, flyExportFileName, flyFirstEnabledIndex, flyFormatBytes, flyFormatDate, flyFormatDateTime, flyFormatTime, flyFullNumber, flyNextEnabledIndex, flyNextSegmentIndex, flyRelativeTime, flyResolveActiveTab, flyRoleGuard, flySignedCompact, flySkinToneLabelKey, flyStandaloneAuthGuard, flyStandaloneAuthInterceptor, flyToDateOnly, hasAnyRoleIn, healNativeFederationCacheOnce, isAccentColor, isChunkLoadError, isFlyAuthStorePopulated, isNativeFederationCacheError, isRtlLocale, isRtlLocaleEntry, isValidCron, isValidSingleField, loadRemoteStyles, matchFlyRoutePattern, nextEnabledIndex, nextModuleIndex, nextSegmentIndex, nextSort, normalizeFlyTheme, normalizeRoles, overlayStack, parseCron, parseStepUpChallenge, parseTags, presenceColorFor, printConsoleSecurityWarning, provideFlyChunkReloadRecovery, provideFlyEmojiPack, provideFlyStandaloneAuth, reloadOnceForChunkError, requestAppLaunch, resolveActiveModule, resolveActiveSection, resolveActiveTab, resolveCellValue, resolveStateIcon, resolveStateMessageKey, restoreFocus, sameTags, sliderTrackGradient, sparklinePath, sparklinePoints, stepUpInterceptor, stepUpReturnKey, trimAgentPayload, trimAgentString, unloadRemoteStyles, utf8ByteLength, validateAgentPayload, warnIfEmbeddedSessionMissing };
10085
- export type { ActionMenuItem, AgentAction, AgentActionDispatch, AgentActionVerb, AgentChipHostInputs, AgentCommand, AgentCommandContextBinding, AgentCommandHandle, AgentCommandRegistration, AgentCommandScope, AgentCommandSlashSpec, AgentDragPayload, AgentDraggableItem, AgentDropChipMode, AgentDropRendererRegistration, AgentEnvelopeAttachment, AgentMcpScope, AgentMessageEnvelope, AgentPayloadLimits, AgentPayloadValidationResult, AppEveryonePrincipal, AppEveryoneTerm, AppLookup, AppLookupEntry, AudienceEditTarget, AudienceErrorCode, AudienceFilter, AudienceOptions, AudiencePresetKind, AudienceTerm, AudienceTermKind, BreadcrumbItem, ButtonSize, ButtonVariant, CardLayout, ChartTerm, ChildWindowData, ChipTone, ConfirmKind, ConnectRemoteLaunchOptions, ContextMenuAlign, ContextMenuItem, ContextMenuSection, CronAdvancedFieldDef, CronMode, CronParts, CronWeekday, DesktopApp, DesktopAppCategory, DesktopAppKind, DetailSection, DialogResultWithAcknowledgement, EmbeddedSessionProbe, EntityLinkSelection, FilterGroup, FlyAchievementRow, FlyAppModule, FlyAppModuleSection, FlyAuthRefreshPayload, FlyAuthStoreReadable, FlyBadgeTile, FlyBreadcrumbItem, FlyCaptchaChallenge, FlyCaptchaSolution, FlyCaptchaState, FlyCellContext, FlyColumn, FlyColumnKind, FlyComment, FlyCommentDeleteRequest, FlyCommentEditRequest, FlyCommentLoadMoreRequest, FlyCommentLoadRepliesRequest, FlyCommentLockToggleRequest, FlyCommentPage, FlyCommentReportReason, FlyCommentReportRequest, FlyCommentReportStatus, FlyCommentSubmitRequest, FlyCountry, FlyDrawerSide, FlyDrawerSize, FlyEmojiCategory, FlyEmojiCell, FlyEmojiEntry, FlyEmojiPack, FlyEmojiPackEntry, FlyEmojiPackManifest, FlyEmojiPickerSize, FlyEmojiPickerTab, FlyEmojiSection, FlyFileInfo, FlyFileSelection, FlyFormAnswer, FlyFormAnswerValue, FlyFormDefinition, FlyFormFieldOptions, FlyFormOption, FlyFormQuestion, FlyFormQuestionType, FlyFormScoreDisplay, FlyLaunchEventDetail, FlyLaunchRequestDetail, FlyLeaderboardRow, FlyLiveRefreshOptions, FlyLocaleEntry, FlyMetaItem, FlyModerationLoadPageRequest, FlyModerationLockThreadRequest, FlyModerationOpenSubjectRequest, FlyModerationReport, FlyModerationReportPage, FlyModerationResolutionStatus, FlyModerationResolveRequest, FlyNavigableItem, FlyPeoplePickerMode, FlyPeoplePickerOption, FlyPointsSummary, FlyRemoteContext, FlyRemoteMatch, FlyRemoteRoute, FlyRemoteRouteEventDetail, FlySearchExpandTrigger, FlySearchInputSize, FlySecureSrcState, FlySelectOption, FlySelectValue, FlySkeletonAnimation, FlySkeletonLayout, FlySkeletonShape, FlySkinTone, FlySort, FlyStandaloneAuthConfig, FlyFileSelection as FlySurveyFileSelection, FlyFormAnswer as FlySurveyFormAnswer, FlyFormAnswerValue as FlySurveyFormAnswerValue, FlyFormDefinition as FlySurveyFormDefinition, FlyFormFieldOptions as FlySurveyFormFieldOptions, FlyFormOption as FlySurveyFormOption, FlyFormQuestion as FlySurveyFormQuestion, FlyFormQuestionType as FlySurveyQuestionType, FlyThemeMode, FlyTooltipPlacement, FlyTreeNavNode, FlyTypeaheadOption, FlyWindowHelpHintEventDetail, FlyWindowHelpPublisher, FlyWindowPageTitleEventDetail, FlyWindowTitlePublisher, FlyosPendingLaunches, FocusRestore, FormBannerKind, GanttDependency, GanttDependencyCreate, GanttRow, GanttRowDatesChange, GanttRowKind, GanttZoom, IconButtonVariant, LaunchContext, LoadBundleOptions, LookupDescriptor, LookupHandle, LookupRegistration, LookupResult, LookupSearch, MessageBoxButton, MessageBoxDontAskAgainConfig, MessageBoxOptions, MessageBoxOptionsWithAcknowledgement, MockAuthConfig, OpenWindowOptions, OuPrincipal, OuTerm, OverlayHandle, PageHeaderVariant, PresetTerm, ProgressTone, RemoteAppDef, RequestAppLaunchOptions, RoleOuLookupRow, RolePrincipal, RolesTerm, SegmentedOption, ShareOrgChartOption, ShareOuNode, SharePanelLevelOption, SharePermissionEntry, SharePrincipal, SharePrincipalKind, ShareUserResult, StateMessageKind, StepUpChallenge, StepUpReauthHandler, StepUpReauthRequest, ToastAction, ToastEntry, ToastOptions, ToastVariant, User, UserPrincipal, UsersTerm, WindowHelpHint, WindowInstance, WindowState };
10232
+ export { AGENT_DRAG_MIME, AGENT_PAYLOAD_VERSION, APP_LOOKUP, AUDIENCE_ERROR_CODES, AUDIENCE_LIMITS, AUDIENCE_PRESETS, AUDIENCE_TERM_KINDS, AgentActionBus, AgentActionUnsupportedDispatchError, AgentCommandRegistry, AgentDropRegistry, AgentFlightAnimator, AgentLookupRegistry, AgentPayloadOversizeError, AudienceBuilderComponent, AuthService, BilingualFieldComponent, CRON_MODES, CRON_WEEKDAYS, ContextMenuComponent, DEFAULT_AGENT_PAYLOAD_LIMITS, DEFAULT_FLY_THEME_MODE, DS_BASELINE_LOCALES, DashboardKpiComponent, DialogResult, EntityLookupComponent, FLYOS_LAUNCH_EVENT, FLYOS_LAUNCH_REQUEST_EVENT, FLYOS_REMOTE_ROUTE_EVENT, FLY_ACCENT_PROPERTY, FLY_ADMIN_ROLES, FLY_CHUNK_RELOAD_FLAG, FLY_COMPACT_THRESHOLD, FLY_COUNTRIES, FLY_EMOJI_BY_ID, FLY_EMOJI_CATEGORIES, FLY_EMOJI_CATEGORY_BY_ID, FLY_EMOJI_DEFAULT_CATEGORIES, FLY_EMOJI_PACK, FLY_EMOJI_PACK_MISSING_MESSAGE, FLY_EMOJI_PREVIEW_COUNT, FLY_EMPTY_VALUE, FLY_LOCALE_CATALOG, FLY_NF_CACHE_HEAL_FLAG, FLY_RELOAD_DEBOUNCE_MS, FLY_REMOTE_BASE_PATH, FLY_REMOTE_CONTEXT_EVENT, FLY_REMOTE_CONTEXT_STORE_KEY, FLY_REMOTE_ROUTES, FLY_SEARCH_DEBOUNCE_MS, FLY_SKIN_TONES, FLY_STANDALONE_AUTH_CONFIG, FLY_THEME_MODE_IDS, FLY_WINDOW_HELP_HINT_EVENT, FLY_WINDOW_PAGE_TITLE_EVENT, FlyAchievementProgressComponent, FlyActionMenuComponent, FlyActionStackComponent, FlyAgentDraggableDirective, FlyAnimatedEmojiComponent, FlyAppHomeComponent, FlyAppTopbarComponent, FlyAuthLiveRefresh, FlyBadgeWallComponent, FlyBlockUiComponent, FlyBreadcrumbComponent, FlyButtonComponent, FlyBytesPipe, FlyCaptchaComponent, FlyCardActionsComponent, FlyCardBodyComponent, FlyCardComponent, FlyCardFooterComponent, FlyCardGridComponent, FlyCardMediaComponent, FlyCardMetaComponent, FlyCardStatusComponent, FlyCardTitleComponent, FlyCellDirective, FlyCheckboxComponent, FlyChipComponent, FlyChunkReloadErrorHandler, FlyClickOutsideDirective, FlyCollapsibleComponent, FlyCommentThreadComponent, FlyCompactNumberPipe, FlyConfirmDialogComponent, FlyControlDirective, FlyCronBuilderComponent, FlyDataTableComponent, FlyDatePipe, FlyDateTimePipe, FlyDebouncer, FlyDecimalNumberPipe, FlyDetailCardComponent, FlyDetailShellComponent, FlyDrawerComponent, FlyDurationPipe, FlyDynamicFormComponent, FlyEmojiPickerComponent, FlyFieldComponent, FlyFileUploadComponent, FlyFilterPanelComponent, FlyFormBannerComponent, FlyFormFooterComponent, FlyFormGridComponent, FlyFormSectionComponent, FlyFullNumberPipe, FlyGanttComponent, FlyHubClient, FlyIconButtonComponent, FlyIfAdminDirective, FlyIfRoleDirective, FlyImageUploadComponent, FlyLeaderboardComponent, FlyMetaListComponent, FlyModalComponent, FlyModerationQueueComponent, FlyModuleIconDirective, FlyPaginationComponent, FlyPeoplePickerComponent, FlyPointsTierComponent, FlyProgressComponent, FlyRelativeTimePipe, FlyRemoteContextService, FlyRemoteRouter, FlyRemoteRouterOutletComponent, FlySearchInputComponent, FlySectionHeaderComponent, FlySecureSrcDirective, FlySegmentedComponent, FlySelectComponent, FlySkeletonComponent, FlySliderComponent, FlySparklineComponent, FlySpinnerComponent, FlyStandaloneAuthCallbackComponent, FlyStandaloneAuthService, FlyStateMessageComponent, FlyDynamicFormComponent as FlySurveyFormComponent, FlyTabComponent, FlyTabsComponent, FlyTagsInputComponent, FlyThemeService, FlyTimePipe, FlyToastService, FlyToggleComponent, FlyTooltipDirective, FlyTreeNavComponent, FlyTypeaheadComponent, FlyWindowHelpService, FlyWindowTitleService, FlyosPendingLaunchesGlobalKey, FlyosShellHandlesLaunchRequestsGlobalKey, FlyosShellOwnsHistoryGlobalKey, GANTT_ZOOMS, I18nService, LAUNCH_CONTEXT, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, OverlayStack, PRESENCE_COLORS, PageHeaderComponent, RTL_LOCALE_SET, SHARE_ORG_CHART_SYSTEM_KEY_APPS, SHARE_ORG_CHART_SYSTEM_KEY_DEFAULT, SHARE_PANEL_DEFAULT_FILE_LEVELS, STATE_DEFAULT_ICONS, STATE_DEFAULT_MESSAGE_KEYS, STEP_UP_CODE, STEP_UP_REAUTH_HANDLER, STEP_UP_RETURN_KEY, SUPPORTED_AGENT_PAYLOAD_VERSIONS, SharePanelComponent, SourceAppResolver, StandaloneWindowManagerService, StatusBadgeComponent, StepUpService, ToastHostComponent, TranslatePipe, WINDOW_DATA, WINDOW_HELP_HINT, WindowManagerService, applySkinTone, applySuggestion, ariaSort, buildCron, canConfirm, canGoNext, canGoPrev, captureFocus, clampPage, clampSliderValue, connectRemoteLaunch, enterActivatesNatively, filterGroup, filterSuggestions, findLocaleByDialect, findLocaleByPrefix, firstEnabledIndex, firstModuleIndex, flattenModules, flyAdminGuard, flyCaptchaBase64Utf8, flyCaptchaBuildToken, flyCaptchaSha256Hex, flyCompactNumber, flyDebounced, flyDecimalNumber, flyDownloadBlob, flyDuration, flyEmojiFor, flyEmojiIsTonable, flyEmojiPackUrl, flyExportFileName, flyFirstEnabledIndex, flyFormatBytes, flyFormatDate, flyFormatDateTime, flyFormatTime, flyFullNumber, flyNextEnabledIndex, flyNextSegmentIndex, flyRelativeTime, flyResolveActiveTab, flyRoleGuard, flySignedCompact, flySkinToneLabelKey, flyStandaloneAuthGuard, flyStandaloneAuthInterceptor, flyToDateOnly, hasAnyRoleIn, healNativeFederationCacheOnce, initialExpanded, isAccentColor, isChunkLoadError, isFlyAuthStorePopulated, isNativeFederationCacheError, isRtlLocale, isRtlLocaleEntry, isValidCron, isValidSingleField, loadRemoteStyles, matchFlyRoutePattern, nextEnabledIndex, nextModuleIndex, nextSegmentIndex, nextSort, normalizeFlyTheme, normalizeRoles, overlayStack, parseCron, parseStepUpChallenge, parseTags, presenceColorFor, printConsoleSecurityWarning, provideFlyChunkReloadRecovery, provideFlyEmojiPack, provideFlyStandaloneAuth, reloadOnceForChunkError, requestAppLaunch, resolveActiveModule, resolveActiveSection, resolveActiveTab, resolveCellValue, resolveStateIcon, resolveStateMessageKey, restoreFocus, sameTags, sectionHintKey, sectionLayout, sliderTrackGradient, sparklinePath, sparklinePoints, stepUpInterceptor, stepUpReturnKey, trimAgentPayload, trimAgentString, unloadRemoteStyles, utf8ByteLength, validateAgentPayload, warnIfEmbeddedSessionMissing };
10233
+ export type { ActionMenuItem, AgentAction, AgentActionDispatch, AgentActionVerb, AgentChipHostInputs, AgentCommand, AgentCommandContextBinding, AgentCommandHandle, AgentCommandRegistration, AgentCommandScope, AgentCommandSlashSpec, AgentDragPayload, AgentDraggableItem, AgentDropChipMode, AgentDropRendererRegistration, AgentEnvelopeAttachment, AgentMcpScope, AgentMessageEnvelope, AgentPayloadLimits, AgentPayloadValidationResult, AppEveryonePrincipal, AppEveryoneTerm, AppLookup, AppLookupEntry, AudienceEditTarget, AudienceErrorCode, AudienceFilter, AudienceOptions, AudiencePresetKind, AudienceTerm, AudienceTermKind, BreadcrumbItem, ButtonSize, ButtonVariant, CardLayout, ChartTerm, ChildWindowData, ChipTone, ConfirmKind, ConnectRemoteLaunchOptions, ContextMenuAlign, ContextMenuItem, ContextMenuSection, CronAdvancedFieldDef, CronMode, CronParts, CronWeekday, DesktopApp, DesktopAppCategory, DesktopAppKind, DetailSection, DialogResultWithAcknowledgement, EmbeddedSessionProbe, EntityLinkSelection, FilterGroup, FlyAchievementRow, FlyAppHomeLayout, FlyAppModule, FlyAppModuleSection, FlyAuthRefreshPayload, FlyAuthStoreReadable, FlyBadgeTile, FlyBreadcrumbItem, FlyCaptchaChallenge, FlyCaptchaSolution, FlyCaptchaState, FlyCellContext, FlyColumn, FlyColumnKind, FlyComment, FlyCommentDeleteRequest, FlyCommentEditRequest, FlyCommentLoadMoreRequest, FlyCommentLoadRepliesRequest, FlyCommentLockToggleRequest, FlyCommentPage, FlyCommentReportReason, FlyCommentReportRequest, FlyCommentReportStatus, FlyCommentSubmitRequest, FlyCountry, FlyDrawerSide, FlyDrawerSize, FlyEmojiCategory, FlyEmojiCell, FlyEmojiEntry, FlyEmojiPack, FlyEmojiPackEntry, FlyEmojiPackManifest, FlyEmojiPickerSize, FlyEmojiPickerTab, FlyEmojiSection, FlyFileInfo, FlyFileSelection, FlyFormAnswer, FlyFormAnswerValue, FlyFormDefinition, FlyFormFieldOptions, FlyFormOption, FlyFormQuestion, FlyFormQuestionType, FlyFormScoreDisplay, FlyLaunchEventDetail, FlyLaunchRequestDetail, FlyLeaderboardRow, FlyLiveRefreshOptions, FlyLocaleEntry, FlyMetaItem, FlyModerationLoadPageRequest, FlyModerationLockThreadRequest, FlyModerationOpenSubjectRequest, FlyModerationReport, FlyModerationReportPage, FlyModerationResolutionStatus, FlyModerationResolveRequest, FlyNavigableItem, FlyPeoplePickerMode, FlyPeoplePickerOption, FlyPointsSummary, FlyRemoteContext, FlyRemoteMatch, FlyRemoteRoute, FlyRemoteRouteEventDetail, FlySearchExpandTrigger, FlySearchInputSize, FlySecureSrcState, FlySelectOption, FlySelectValue, FlySkeletonAnimation, FlySkeletonLayout, FlySkeletonShape, FlySkinTone, FlySort, FlyStandaloneAuthConfig, FlyFileSelection as FlySurveyFileSelection, FlyFormAnswer as FlySurveyFormAnswer, FlyFormAnswerValue as FlySurveyFormAnswerValue, FlyFormDefinition as FlySurveyFormDefinition, FlyFormFieldOptions as FlySurveyFormFieldOptions, FlyFormOption as FlySurveyFormOption, FlyFormQuestion as FlySurveyFormQuestion, FlyFormQuestionType as FlySurveyQuestionType, FlyThemeMode, FlyTooltipPlacement, FlyTreeNavNode, FlyTypeaheadOption, FlyWindowHelpHintEventDetail, FlyWindowHelpPublisher, FlyWindowPageTitleEventDetail, FlyWindowTitlePublisher, FlyosPendingLaunches, FocusRestore, FormBannerKind, GanttDependency, GanttDependencyCreate, GanttRow, GanttRowDatesChange, GanttRowKind, GanttZoom, IconButtonVariant, LaunchContext, LoadBundleOptions, LookupDescriptor, LookupHandle, LookupRegistration, LookupResult, LookupSearch, MessageBoxButton, MessageBoxDontAskAgainConfig, MessageBoxOptions, MessageBoxOptionsWithAcknowledgement, MockAuthConfig, OpenWindowOptions, OuPrincipal, OuTerm, OverlayHandle, PageHeaderVariant, PresetTerm, ProgressTone, RemoteAppDef, RequestAppLaunchOptions, RoleOuLookupRow, RolePrincipal, RolesTerm, SegmentedOption, ShareOrgChartOption, ShareOuNode, SharePanelLevelOption, SharePermissionEntry, SharePrincipal, SharePrincipalKind, ShareUserResult, StateMessageKind, StepUpChallenge, StepUpReauthHandler, StepUpReauthRequest, ToastAction, ToastEntry, ToastOptions, ToastVariant, User, UserPrincipal, UsersTerm, WindowHelpHint, WindowInstance, WindowState };
10086
10234
  //# sourceMappingURL=flyos-design-system.d.ts.map