@flyos/design-system 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flyos/design-system",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "FlyOS design system — shared components, directives, pipes, services, and models for Business App developers.",
5
5
  "keywords": [
6
6
  "flyos",
@@ -2,6 +2,16 @@
2
2
  // UI library global utilities (generic). EMITS CSS — import once from the
3
3
  // global stylesheet, after _tokens.scss.
4
4
  // ─────────────────────────────────────────────────────────────────────────────
5
+ @use 'shell-embed-bridge';
6
+
7
+ // Class form of the app-surface → shell-glass bridge, for consumers that cannot
8
+ // reach the mixin: a component with INLINE `styles:` (no SCSS pipeline), or a
9
+ // subtree portalled out of its app's stylesheet scope. Prefer the mixin in a
10
+ // real `.scss` file; this exists so the map is never retyped by hand. See
11
+ // `_shell-embed-bridge.scss` for why the bridge is needed at all.
12
+ .fly-app-surface-on-glass {
13
+ @include shell-embed-bridge.app-surface-on-glass;
14
+ }
5
15
 
6
16
  // Tabular numerals / code — reusable in templates without restyling a component.
7
17
  .mono {
@@ -0,0 +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
+ }
@@ -102,6 +102,14 @@ html.dark-theme {
102
102
  --glass-bg: rgb(22 22 26 / 72%);
103
103
  --glass-bg-elevated: rgb(30 30 36 / 82%);
104
104
 
105
+ // Tooltip surface — OPAQUE, and not a glass token. See the light theme for the full reasoning
106
+ // (a body-parented overlay can appear over any backdrop, so it cannot inherit a translucent,
107
+ // wallpaper-adaptive surface). Lifted slightly here so the plate still separates from a dark
108
+ // page, while keeping the same white ink and therefore the same contrast guarantee.
109
+ --tooltip-bg: #2c313c;
110
+ --tooltip-ink: #fff;
111
+ --tooltip-border: rgb(255 255 255 / 16%);
112
+
105
113
  // Ink for text ON `--glass-bg-elevated` — see the light theme for why this is its own pair.
106
114
  --glass-ink-elevated: rgb(255 255 255 / 96%);
107
115
  --glass-ink-elevated-secondary: rgb(255 255 255 / 65%);
@@ -97,6 +97,23 @@ html.light-theme {
97
97
  --glass-bg: rgb(255 255 255 / 60%);
98
98
  --glass-bg-elevated: rgb(255 255 255 / 88%);
99
99
 
100
+ // Tooltip surface. OPAQUE and deliberately NOT a glass token.
101
+ //
102
+ // A tooltip is body-parented and floats over whatever happens to be underneath — a light app
103
+ // surface, a dark board canvas, the wallpaper. The glass family is TRANSLUCENT and, at runtime,
104
+ // wallpaper-adaptive: the shell recomputes `--glass-bg-elevated` from the wallpaper and writes it
105
+ // at `:root`, so under a dark wallpaper it becomes a 54 %-alpha DARK plate even while the shell
106
+ // is in `light-theme`. Composited over a light page that resolves to roughly rgb(143,141,140),
107
+ // and the matching white ink lands at about 2.8:1 — the "tooltips are white on white" report.
108
+ // An overlay that can appear anywhere cannot inherit a surface tuned for one backdrop.
109
+ //
110
+ // Dark plate + white ink in BOTH themes is the classic tooltip treatment (macOS, Material,
111
+ // Bootstrap) and is exactly what this directive's own comment always claimed it fell back to —
112
+ // it just never actually did, because the `var()`s carried no fallback.
113
+ --tooltip-bg: #1f2430;
114
+ --tooltip-ink: #fff;
115
+ --tooltip-border: rgb(255 255 255 / 14%);
116
+
100
117
  // Ink for text sitting ON `--glass-bg-elevated`. This pair was already correct when the rest
101
118
  // of the theme was not, so it became the model the `--label-*` / `--text-color-*` families
102
119
  // were rebuilt against. It now agrees with them rather than compensating for them; the
@@ -4112,6 +4112,12 @@ interface ContextMenuItem {
4112
4112
  id: string;
4113
4113
  label: string;
4114
4114
  icon: string;
4115
+ /**
4116
+ * Nested items — when present (non-empty), activating this row opens a flyout submenu
4117
+ * instead of firing `action` directly. Recursive: a child item may itself declare
4118
+ * further children, each rendered as another nested `fly-context-menu` instance.
4119
+ */
4120
+ children?: ContextMenuItem[];
4115
4121
  }
4116
4122
  interface ContextMenuSection {
4117
4123
  label?: string;
@@ -4122,14 +4128,28 @@ interface ContextMenuSection {
4122
4128
  * Logical, not physical — `end` is the right edge in LTR and the left edge in RTL.
4123
4129
  */
4124
4130
  type ContextMenuAlign = 'start' | 'end';
4131
+ /**
4132
+ * `'below'` (default) — the original dropdown behaviour: the menu opens below (or above,
4133
+ * flipping on overflow) the anchor, left/right-aligned per {@link ContextMenuComponent.align}.
4134
+ * `'side'` — a submenu flyout: the menu opens beside the anchor (trailing edge in the
4135
+ * reading direction, flipping to the leading edge on overflow), top-aligned to it. Only
4136
+ * meaningful with an `[anchor]` — a submenu is always anchored to the parent row it hangs off.
4137
+ */
4138
+ type ContextMenuPlacement = 'below' | 'side';
4125
4139
  /**
4126
4140
  * A floating, anchor-relative context menu (right-click / kebab-button style). Positions itself
4127
4141
  * against the containing clipping ancestor rather than the viewport, flips to stay on-screen, and
4128
4142
  * marks its `[anchor]` with `data-fly-menu-open` while open so the trigger can render as pressed.
4129
4143
  * Sections group items with an optional label; each item carries an id, label, and icon.
4144
+ *
4145
+ * Items may declare `children` — a genuinely recursive submenu flyout (see the "Submenus"
4146
+ * region below). The component imports ITSELF so its template can mount a nested instance
4147
+ * for an open submenu; standard, supported Angular pattern for recursive standalone components.
4130
4148
  */
4131
4149
  declare class ContextMenuComponent implements AfterViewInit, OnDestroy {
4132
4150
  private menuEl?;
4151
+ /** The recursive submenu instance, mounted only while {@link openSubmenuId} is set. */
4152
+ private childMenuRef?;
4133
4153
  private readonly doc;
4134
4154
  private readonly hostEl;
4135
4155
  /**
@@ -4159,6 +4179,8 @@ declare class ContextMenuComponent implements AfterViewInit, OnDestroy {
4159
4179
  * a preference, not a guarantee. No effect without an anchor.
4160
4180
  */
4161
4181
  align: _angular_core.InputSignal<ContextMenuAlign>;
4182
+ /** See {@link ContextMenuPlacement}. Ignored without an `[anchor]`. */
4183
+ placement: _angular_core.InputSignal<ContextMenuPlacement>;
4162
4184
  sections: _angular_core.InputSignal<ContextMenuSection[]>;
4163
4185
  /**
4164
4186
  * Optional containing rect (viewport coords, e.g. from
@@ -4176,7 +4198,9 @@ declare class ContextMenuComponent implements AfterViewInit, OnDestroy {
4176
4198
  private anchorRect;
4177
4199
  /** Containing box derived from the anchor; only used when no explicit `boundary` is given. */
4178
4200
  private derivedBoundary;
4179
- private anchorRtl;
4201
+ /** `protected`, not `private` — the submenu-caret's mirroring in the template reads this
4202
+ * directly (see the `[class.is-rtl]` binding). */
4203
+ protected anchorRtl: _angular_core.WritableSignal<boolean>;
4180
4204
  private previouslyFocused;
4181
4205
  private prevAriaExpanded;
4182
4206
  private prevAriaHasPopup;
@@ -4184,6 +4208,40 @@ declare class ContextMenuComponent implements AfterViewInit, OnDestroy {
4184
4208
  left: number;
4185
4209
  top: number;
4186
4210
  }>;
4211
+ /** id of the item whose submenu is open, or null. */
4212
+ protected readonly openSubmenuId: _angular_core.WritableSignal<string | null>;
4213
+ private readonly openSubmenuAnchor;
4214
+ private readonly openSubmenuItem;
4215
+ /** `[sections]` input for the nested instance — a single unlabeled section wrapping
4216
+ * the open item's children. */
4217
+ protected readonly openSubmenuSections: _angular_core.Signal<ContextMenuSection[]>;
4218
+ protected readonly openSubmenuAnchorEl: _angular_core.Signal<HTMLElement | null>;
4219
+ /** Row click/Enter/Space handler — opens the submenu for a has-children item instead
4220
+ * of firing `action`; fires `action` directly (and closes) for a leaf item. */
4221
+ protected onItemActivate(item: ContextMenuItem, event: Event): void;
4222
+ private hoverTimer;
4223
+ /** Hover-intent delay before a submenu opens — long enough that a pointer sweeping
4224
+ * past on its way elsewhere doesn't pop every has-children row it crosses. */
4225
+ private static readonly SUBMENU_HOVER_DELAY_MS;
4226
+ /**
4227
+ * Hovering a has-children row opens its submenu after a short delay; hovering a
4228
+ * SIBLING leaf row closes whichever submenu was open — both standard desktop menu
4229
+ * conventions. No explicit "close on leave" handler: moving to another row re-fires
4230
+ * this and either replaces or closes the open submenu; moving off the menu entirely
4231
+ * is caught by the existing outside-click/Escape handling.
4232
+ */
4233
+ protected onItemMouseEnter(item: ContextMenuItem, event: MouseEvent): void;
4234
+ protected onItemMouseLeave(): void;
4235
+ private clearHoverTimer;
4236
+ private toggleSubmenu;
4237
+ protected closeSubmenu(): void;
4238
+ /** A leaf action fired somewhere inside the (possibly multi-level) open submenu —
4239
+ * bubble it up as this menu's own `action` and close the WHOLE stack, matching a
4240
+ * normal top-level item click. */
4241
+ protected onSubmenuAction(id: string): void;
4242
+ /** The child closed itself (Escape / an outside click within its own bounds) without
4243
+ * selecting anything — collapse back to this level; THIS menu stays open. */
4244
+ protected onSubmenuClosed(): void;
4187
4245
  ngAfterViewInit(): void;
4188
4246
  ngOnDestroy(): void;
4189
4247
  /**
@@ -4197,16 +4255,43 @@ declare class ContextMenuComponent implements AfterViewInit, OnDestroy {
4197
4255
  private clearAnchorOpen;
4198
4256
  private restoreAttr;
4199
4257
  onAction(id: string): void;
4258
+ /**
4259
+ * True when `target` is inside THIS menu's own DOM, or inside its currently-open
4260
+ * submenu (recursively — a submenu can have its own open grand-submenu). A submenu is
4261
+ * portaled to `<body>` as a SIBLING of this menu's own `.context-menu` div, not a DOM
4262
+ * descendant of it, so a plain `menuEl.contains()` check would treat a click inside an
4263
+ * open submenu as "outside" and wrongly close this whole stack. Delegating through the
4264
+ * child instance is what keeps arbitrarily-deep nesting correct without a global registry.
4265
+ */
4266
+ containsElement(target: Node): boolean;
4200
4267
  onClickOutside(event: MouseEvent): void;
4201
4268
  onEscape(): void;
4202
4269
  onContextMenu(event: MouseEvent): void;
4270
+ /** Flattened items across every section, in the same order the template renders
4271
+ * `[role="menuitem"]` buttons — lets a focused DOM element be mapped back to its
4272
+ * data item (to check `children`) by matching index. */
4273
+ private readonly flatItems;
4203
4274
  onKeydown(event: KeyboardEvent): void;
4275
+ /**
4276
+ * RTL-aware: the "descend into a submenu" arrow is Right in LTR, Left in RTL. Reuses
4277
+ * {@link anchorRtl} (sampled from the ANCHOR's pre-portal position — see
4278
+ * `ngAfterViewInit`) rather than reading direction off this menu's own host, which by
4279
+ * the time any key can be pressed has already been portaled to `<body>` and would
4280
+ * reflect the document's own direction, not necessarily this menu's local context. A
4281
+ * pointer-only menu (no anchor) has no locally-sampled direction to read and falls
4282
+ * back to LTR ordering — the same limitation `clampedPos`'s anchored branch already
4283
+ * has for positioning, kept consistent here rather than inventing a second mechanism.
4284
+ */
4285
+ private isOpenSubmenuKey;
4286
+ /** RTL-aware: the "back out of a submenu" arrow is Left in LTR, Right in RTL. */
4287
+ private isCloseSubmenuKey;
4204
4288
  private close;
4205
4289
  private getMenuItems;
4206
- private focusItem;
4290
+ /** Public: lets a parent instance focus this (nested) menu's first item once it mounts. */
4291
+ focusItem(index: number): void;
4207
4292
  private restoreFocus;
4208
4293
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContextMenuComponent, never>;
4209
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContextMenuComponent, "fly-context-menu", never, { "x": { "alias": "x"; "required": false; "isSignal": true; }; "y": { "alias": "y"; "required": false; "isSignal": true; }; "anchor": { "alias": "anchor"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "sections": { "alias": "sections"; "required": true; "isSignal": true; }; "boundary": { "alias": "boundary"; "required": false; "isSignal": true; }; }, { "action": "action"; "closed": "closed"; }, never, never, true, never>;
4294
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContextMenuComponent, "fly-context-menu", never, { "x": { "alias": "x"; "required": false; "isSignal": true; }; "y": { "alias": "y"; "required": false; "isSignal": true; }; "anchor": { "alias": "anchor"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "sections": { "alias": "sections"; "required": true; "isSignal": true; }; "boundary": { "alias": "boundary"; "required": false; "isSignal": true; }; }, { "action": "action"; "closed": "closed"; }, never, never, true, never>;
4210
4295
  }
4211
4296
 
4212
4297
  declare enum MessageBoxButtons {
@@ -8195,6 +8280,36 @@ declare function flyDownloadBlob(blob: Blob, fileName: string, mimeFallback?: st
8195
8280
  */
8196
8281
  declare function flyExportFileName(contentDisposition: string | null | undefined, fallback: string): string;
8197
8282
 
8283
+ /**
8284
+ * Shared presence-colour utility — one deterministic seed → colour mapping so
8285
+ * every co-authoring surface (mind-maps, canvas-boards, and future Documents/
8286
+ * Thoughts Labs consumers) paints the SAME user the SAME colour, without any
8287
+ * cross-app coordination beyond importing this module.
8288
+ *
8289
+ * The palette and hash algorithm are copied byte-for-byte from the mind-maps
8290
+ * feature app's inline `identity` computed (`mind-maps.component.ts`), which
8291
+ * predates this shared module and is the origin of the vocabulary — see
8292
+ * `PRESENCE_COLORS` / the `hash = (hash*31 + charCode)|0` loop there. This
8293
+ * file does not replace that call site (existing consumers are migrated in
8294
+ * future work per the canvas-board gap-closure plan §7); it exists so NEW
8295
+ * consumers (the canvas-board presence adapter) don't hand-roll a second copy
8296
+ * that could silently drift from the original.
8297
+ *
8298
+ * Rides no transport of its own — purely a pure function over a string seed
8299
+ * (typically a user id). Callers broadcast the resolved colour over Yjs
8300
+ * awareness (`user.color`) themselves.
8301
+ */
8302
+ /** Stable presence palette — identical order/values to the mind-maps palette. */
8303
+ declare const PRESENCE_COLORS: readonly string[];
8304
+ /**
8305
+ * Deterministically maps a seed (typically a user id, falling back to a
8306
+ * display name where no id is available) to one of {@link PRESENCE_COLORS}.
8307
+ *
8308
+ * Same seed ⇒ same colour, always — across apps, sessions, and page reloads,
8309
+ * with no server round-trip or shared state required.
8310
+ */
8311
+ declare function presenceColorFor(seed: string): string;
8312
+
8198
8313
  /**
8199
8314
  * Locale-aware formatting primitives — numbers, byte sizes, relative time, and dates.
8200
8315
  *
@@ -8928,7 +9043,10 @@ declare class FlyProgressComponent {
8928
9043
  */
8929
9044
  declare class FlySparklineComponent {
8930
9045
  readonly points: _angular_core.InputSignal<readonly number[]>;
8931
- /** viewBox metrics — the rendered size stretches to the host box. */
9046
+ /**
9047
+ * Viewbox metrics AND the host's rendered block-size (px) — see the host
9048
+ * binding comment above for why the two are deliberately the same input.
9049
+ */
8932
9050
  readonly width: _angular_core.InputSignal<number>;
8933
9051
  readonly height: _angular_core.InputSignal<number>;
8934
9052
  protected readonly viewBox: _angular_core.Signal<string>;
@@ -9514,7 +9632,7 @@ declare class FlyFormSectionComponent {
9514
9632
  * spans the full row.
9515
9633
  */
9516
9634
  declare class FlyFormGridComponent {
9517
- readonly cols: _angular_core.InputSignal<3 | 1 | 2 | "auto">;
9635
+ readonly cols: _angular_core.InputSignal<1 | 3 | 2 | "auto">;
9518
9636
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyFormGridComponent, never>;
9519
9637
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyFormGridComponent, "fly-form-grid", never, { "cols": { "alias": "cols"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
9520
9638
  }
@@ -9832,6 +9950,6 @@ declare const AUDIENCE_ERROR_CODES: {
9832
9950
  };
9833
9951
  type AudienceErrorCode = (typeof AUDIENCE_ERROR_CODES)[keyof typeof AUDIENCE_ERROR_CODES];
9834
9952
 
9835
- 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, 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, 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, printConsoleSecurityWarning, provideFlyChunkReloadRecovery, provideFlyEmojiPack, provideFlyStandaloneAuth, reloadOnceForChunkError, requestAppLaunch, resolveActiveModule, resolveActiveTab, resolveCellValue, resolveStateIcon, resolveStateMessageKey, restoreFocus, sameTags, sliderTrackGradient, sparklinePath, sparklinePoints, stepUpInterceptor, stepUpReturnKey, trimAgentPayload, trimAgentString, unloadRemoteStyles, utf8ByteLength, validateAgentPayload, warnIfEmbeddedSessionMissing };
9953
+ 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, 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, resolveActiveTab, resolveCellValue, resolveStateIcon, resolveStateMessageKey, restoreFocus, sameTags, sliderTrackGradient, sparklinePath, sparklinePoints, stepUpInterceptor, stepUpReturnKey, trimAgentPayload, trimAgentString, unloadRemoteStyles, utf8ByteLength, validateAgentPayload, warnIfEmbeddedSessionMissing };
9836
9954
  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, 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 };
9837
9955
  //# sourceMappingURL=flyos-design-system.d.ts.map