@mohamedatia/fly-design-system 1.4.0 → 1.9.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.
@@ -1,6 +1,79 @@
1
- @use 'theme-dark-vars' as *;
2
-
3
- // ─── Dark Theme applied to <html> via FlyThemeService (shell or standalone) ─
1
+ // ─── Dark theme (`html.dark-theme`, persisted `dark`) ────────────────────────
2
+ // Shell Appearance label "Dark" / i18n `settings.theme.dark`.
3
+ // **Opaque** dark UI (no acrylic): solid surfaces + zero blur tokens.
4
4
  html.dark-theme {
5
- @include dark-theme-vars;
5
+ /* Native selects / scrollbars follow OS form appearance; keep in sync with light-on-glass labels. */
6
+ color-scheme: dark;
7
+ --primary-light: rgba(232, 115, 42, 0.2);
8
+
9
+ --material-glass: #1c1c1f;
10
+ --material-glass-blur: 0px;
11
+ --material-glass-stroke: rgba(255, 255, 255, 0.14);
12
+
13
+ --app-content-plate: #121214;
14
+
15
+ --surface-ground: #0e0e10;
16
+ --surface-section: #161618;
17
+ --surface-card: #1c1c1f;
18
+ --surface-border: rgba(255, 255, 255, 0.1);
19
+ --surface-hover: rgba(255, 255, 255, 0.08);
20
+
21
+ /* `:root` / `html.light-theme` set dark `--label-*`; dark shell must force light-on-dark. */
22
+ --label-primary: rgba(255, 255, 255, 0.96);
23
+ --label-secondary: rgba(255, 255, 255, 0.65);
24
+ --label-tertiary: rgba(255, 255, 255, 0.42);
25
+ --separator-primary: rgba(255, 255, 255, 0.14);
26
+ --separator: var(--separator-primary);
27
+ --fill-secondary: rgba(255, 255, 255, 0.1);
28
+ --fill-tertiary: rgba(255, 255, 255, 0.06);
29
+
30
+ --text-color: var(--label-primary);
31
+ --text-color-secondary: var(--label-secondary);
32
+
33
+ --fly-color-surface: #1c1c1f;
34
+ --fly-color-surface-alt: #242428;
35
+ --fly-color-border: rgba(255, 255, 255, 0.14);
36
+ --fly-color-text-muted: var(--text-color-secondary);
37
+ --fly-color-primary: var(--primary-color);
38
+ --fly-color-primary-hover: var(--primary-hover);
39
+ --fly-color-danger: var(--system-red);
40
+ --fly-shadow-md: 0 4px 16px rgba(0, 0, 0, 0.35);
41
+
42
+ --glass-bg: #161618;
43
+ --glass-bg-elevated: #1e1e22;
44
+ --glass-blur: 0px;
45
+ --glass-border: var(--material-glass-stroke);
46
+ --glass-shadow: 0 12px 48px rgba(0, 0, 0, 0.38);
47
+ --glass-inner-glow: var(--material-glass-specular);
48
+
49
+ --window-bg: #141416;
50
+ --window-radius: 24px;
51
+ --window-blur: 0px;
52
+ --window-backdrop-saturate: 100%;
53
+ --window-shadow: 0 36px 120px rgba(0, 0, 0, 0.38);
54
+ --window-border: var(--material-glass-stroke);
55
+ --window-content-scrim: transparent;
56
+
57
+ --titlebar-bg: transparent;
58
+
59
+ --dock-bg: #121214;
60
+ --dock-border: var(--material-glass-stroke);
61
+ --dock-blur: 0px;
62
+
63
+ --menubar-bg: #0e0e10;
64
+ --menubar-border: var(--material-glass-stroke);
65
+ --menubar-text: var(--label-primary);
66
+ --menubar-blur: 0px;
67
+
68
+ --sidebar-bg: #121214;
69
+ --sidebar-border: var(--material-glass-stroke);
70
+
71
+ --focus-ring: rgba(232, 115, 42, 0.6);
72
+ }
73
+
74
+ @media (prefers-reduced-transparency: reduce) {
75
+ html.dark-theme {
76
+ /* Already opaque / no backdrop blur; keep tokens stable for OS setting. */
77
+ --window-backdrop-saturate: 100%;
78
+ }
6
79
  }
@@ -1,6 +1,7 @@
1
1
  // ─── Light Theme (default) ───────────────────────────────────────────────────
2
2
  :root,
3
3
  html.light-theme {
4
+ color-scheme: light;
4
5
  --primary-color: #E8732A;
5
6
  --primary-hover: #D4631E;
6
7
  --primary-light: rgba(232, 115, 42, 0.12);
@@ -31,15 +32,18 @@ html.light-theme {
31
32
  --card-gap: 14px;
32
33
 
33
34
  --window-bg: var(--material-glass);
34
- --window-radius: 46px;
35
+ --window-radius: 24px;
35
36
  --window-blur: var(--material-glass-blur);
37
+ --window-backdrop-saturate: 125%;
36
38
  --window-shadow: 0 24px 80px rgba(0, 0, 0, 0.12);
37
39
  --window-border: var(--material-glass-stroke);
38
40
  --window-specular: var(--material-glass-specular);
41
+ --window-content-scrim: transparent;
42
+ --app-content-plate: transparent;
39
43
 
40
44
  --titlebar-bg: transparent;
41
- --titlebar-height: 92px;
42
- --titlebar-padding: 0 24px;
45
+ --titlebar-height: 44px;
46
+ --titlebar-padding: 0 14px;
43
47
 
44
48
  --dock-bg: rgba(255, 255, 255, 0.15);
45
49
  --dock-border: rgba(255, 255, 255, 0.3);
@@ -59,6 +63,10 @@ html.light-theme {
59
63
 
60
64
  --focus-ring: rgba(232, 115, 42, 0.5);
61
65
 
66
+ // Segmented `.vos-btn.selected` / `.active` (Settings theme row, clock, weather, etc.): dark pill on light UI.
67
+ --btn-selected-bg: #111827;
68
+ --btn-selected-text: #ffffff;
69
+
62
70
  // Business Apps / opaque content: :root visionOS tokens use white labels; override for light surfaces.
63
71
  --label-primary: #111827;
64
72
  --label-secondary: rgba(17, 24, 39, 0.65);
@@ -0,0 +1,66 @@
1
+ // ─── Spatial Theme Variables (shared mixin to avoid duplication) ─────────────
2
+ // Used by `html.spatial-theme` (Settings label **Spatial**, persisted `spatial`):
3
+ // **silver frosted glass** — cool translucent plates + blur over the wallpaper.
4
+ @mixin spatial-theme-vars {
5
+ --primary-light: rgba(232, 115, 42, 0.18);
6
+
7
+ --surface-ground: rgba(12, 14, 20, 0.52);
8
+ --surface-section: rgba(218, 226, 238, 0.12);
9
+ --surface-card: rgba(208, 218, 234, 0.14);
10
+ --surface-border: rgba(255, 255, 255, 0.16);
11
+ --surface-hover: rgba(255, 255, 255, 0.1);
12
+ --text-color: #f2f2f7;
13
+ --text-color-secondary: rgba(242, 242, 247, 0.65);
14
+
15
+ --glass-bg: rgba(200, 212, 228, 0.28);
16
+ --glass-bg-elevated: rgba(225, 232, 245, 0.24);
17
+ --glass-border: rgba(255, 255, 255, 0.2);
18
+ --glass-blur: 52px;
19
+ --glass-shadow: 0 12px 48px rgba(0, 0, 0, 0.32);
20
+ --glass-inner-glow: inset 0 1px 0 rgba(255, 255, 255, 0.22);
21
+
22
+ --window-bg: rgba(210, 220, 236, 0.48);
23
+ --window-radius: 24px;
24
+ --window-blur: 56px;
25
+ --window-backdrop-saturate: 175%;
26
+ --window-shadow: 0 28px 90px rgba(0, 0, 0, 0.38);
27
+ --window-border: rgba(255, 255, 255, 0.22);
28
+ --window-content-scrim: rgba(6, 8, 12, 0.50);
29
+ --app-content-plate: rgba(14, 16, 22, 0.58);
30
+
31
+ --titlebar-bg: transparent;
32
+ --titlebar-height: 44px;
33
+ --titlebar-padding: 0 14px;
34
+
35
+ --dock-bg: rgba(198, 210, 226, 0.15);
36
+ --dock-border: rgba(255, 255, 255, 0.18);
37
+ --dock-blur: 48px;
38
+
39
+ --menubar-bg: rgba(190, 204, 222, 0.14);
40
+ --menubar-border: rgba(255, 255, 255, 0.14);
41
+ --menubar-blur: 44px;
42
+ --menubar-text: rgba(242, 242, 247, 1);
43
+
44
+ --sidebar-bg: rgba(205, 216, 232, 0.24);
45
+ --sidebar-border: rgba(255, 255, 255, 0.16);
46
+
47
+ --focus-ring: rgba(232, 115, 42, 0.6);
48
+
49
+ --label-primary: var(--text-color);
50
+ --label-secondary: var(--text-color-secondary);
51
+ --label-tertiary: rgba(242, 242, 247, 0.42);
52
+ --separator-primary: rgba(255, 255, 255, 0.16);
53
+ --separator: var(--separator-primary);
54
+ --fill-secondary: rgba(255, 255, 255, 0.12);
55
+ --fill-tertiary: rgba(255, 255, 255, 0.07);
56
+ --material-glass: rgba(212, 222, 236, 0.30);
57
+
58
+ --fly-color-surface: rgba(26, 30, 40, 0.45);
59
+ --fly-color-surface-alt: rgba(34, 40, 52, 0.5);
60
+ --fly-color-border: rgba(255, 255, 255, 0.14);
61
+ --fly-color-text-muted: var(--text-color-secondary);
62
+ --fly-color-primary: var(--primary-color);
63
+ --fly-color-primary-hover: var(--primary-hover);
64
+ --fly-color-danger: var(--system-red);
65
+ --fly-shadow-md: 0 4px 20px rgba(0, 0, 0, 0.35);
66
+ }
@@ -0,0 +1,22 @@
1
+ @use 'theme-spatial-vars' as *;
2
+
3
+ // ─── Spatial Theme — applied to <html> via FlyThemeService (shell or standalone) ─
4
+ // Settings label **Spatial**: silver frosted glass (`spatial-theme-vars`).
5
+ html.spatial-theme {
6
+ color-scheme: dark;
7
+ @include spatial-theme-vars;
8
+ }
9
+
10
+ @media (prefers-reduced-transparency: reduce) {
11
+ html.spatial-theme {
12
+ --material-glass: rgba(212, 222, 236, 0.40);
13
+ --window-bg: rgba(210, 220, 236, 0.62);
14
+ --window-blur: 22px;
15
+ --window-backdrop-saturate: 125%;
16
+ --window-content-scrim: rgba(6, 8, 12, 0.65);
17
+ --glass-blur: 22px;
18
+ --dock-blur: 20px;
19
+ --menubar-blur: 20px;
20
+ --app-content-plate: rgba(14, 16, 22, 0.78);
21
+ }
22
+ }
@@ -1,7 +1,12 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Type, InjectionToken, PipeTransform, signal, Signal, AfterViewInit } from '@angular/core';
2
+ import { Type, InjectionToken, PipeTransform, signal, Signal, AfterViewInit, OnDestroy, OnInit, EventEmitter, ElementRef } from '@angular/core';
3
3
  import { Observable } from 'rxjs';
4
4
 
5
+ /**
6
+ * FlyOS architectural app category — see repo `docs/01-ecosystem-overview.md`.
7
+ * Orthogonal to {@link DesktopApp.category} (Finder / dock UI grouping: system, productivity, etc.).
8
+ */
9
+ type DesktopAppKind = 'os-core' | 'business' | 'supporting' | 'control';
5
10
  interface DesktopApp {
6
11
  id: string;
7
12
  name: string;
@@ -19,6 +24,8 @@ interface DesktopApp {
19
24
  };
20
25
  isPinned: boolean;
21
26
  category: 'system' | 'productivity' | 'analytics' | 'utility';
27
+ /** Defaults: shell-bundled entries → `os-core`; manifest remotes → `business` unless overridden. */
28
+ kind?: DesktopAppKind;
22
29
  chromeless?: boolean;
23
30
  }
24
31
 
@@ -53,6 +60,10 @@ interface WindowInstance {
53
60
  childData?: ChildWindowData;
54
61
  /** Populated when remote `loadComponent()` fails (e.g. federation). */
55
62
  remoteLoadError?: string;
63
+ /** When true, the shell draws a block overlay over `.window-content` (see `FlyBlockUiComponent`). */
64
+ contentUiBlocked?: boolean;
65
+ /** i18n key for block overlay label; shell defaults to `common.loading` when unset. */
66
+ contentUiBlockMessageKey?: string;
56
67
  }
57
68
  declare const WINDOW_DATA: InjectionToken<WindowInstance>;
58
69
 
@@ -76,9 +87,44 @@ interface User {
76
87
  }
77
88
 
78
89
  /**
79
- * Describes a Business App remote registered via the Controller App's
80
- * /api/apps/manifest endpoint. The shell loads the component at runtime
81
- * using Angular Native Federation.
90
+ * Generic share / ACL panel models hosts map domain DTOs to these shapes.
91
+ */
92
+ interface SharePermissionEntry {
93
+ id: string;
94
+ grantedToUserId?: string | null;
95
+ grantedToOuId?: string | null;
96
+ grantedToAppId?: string | null;
97
+ level: string;
98
+ isInherited?: boolean;
99
+ /** Resolved label (user name, OU name, etc.); if omitted, panel uses fallbacks. */
100
+ displayName?: string;
101
+ }
102
+ interface ShareUserResult {
103
+ id: string;
104
+ firstName: string;
105
+ lastName: string;
106
+ email: string;
107
+ }
108
+ interface ShareOuNode {
109
+ id: string;
110
+ displayName: string;
111
+ /** 0 = root. When set, share panel indents rows for hierarchy. */
112
+ depth?: number;
113
+ }
114
+ /** Option for OU tree source: `id` null = default/official org chart. */
115
+ interface ShareOrgChartOption {
116
+ id: string | null;
117
+ name: string;
118
+ }
119
+ interface SharePanelLevelOption {
120
+ value: string;
121
+ labelKey: string;
122
+ }
123
+
124
+ /**
125
+ * Describes a Business or Supporting App remote from the Controller App's
126
+ * `GET /api/apps/manifest` endpoint. The shell loads the component at runtime
127
+ * via Angular Native Federation.
82
128
  */
83
129
  interface RemoteAppDef {
84
130
  id: string;
@@ -102,6 +148,8 @@ interface RemoteAppDef {
102
148
  };
103
149
  isPinned: boolean;
104
150
  category: DesktopApp['category'];
151
+ /** Defaults to `business` when omitted; use `supporting` for horizontal productivity remotes. */
152
+ kind?: Extract<DesktopApp['kind'], 'business' | 'supporting'>;
105
153
  chromeless?: boolean;
106
154
  }
107
155
 
@@ -202,13 +250,20 @@ declare class I18nService {
202
250
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<I18nService>;
203
251
  }
204
252
 
205
- type FlyThemeMode = 'light' | 'dark' | 'transparent';
253
+ /** Single source of truth for persisted / API theme strings. */
254
+ declare const FLY_THEME_MODE_IDS: readonly ["light", "spatial", "dark"];
255
+ type FlyThemeMode = (typeof FLY_THEME_MODE_IDS)[number];
256
+ /** Factory default: `dark` (opaque dark / `html.dark-theme`); shell i18n `settings.theme.dark`. Keep in sync with `UserSettings` defaults. */
257
+ declare const DEFAULT_FLY_THEME_MODE: FlyThemeMode;
258
+ /** Coerce unknown values (localStorage, API) to a valid theme mode. */
259
+ declare function normalizeFlyTheme(value: unknown): FlyThemeMode;
206
260
  /**
207
- * Applies `html.light-theme` / `html.dark-theme` / `html.transparent-theme` for DS SCSS.
261
+ * Applies `html.light-theme` / `html.spatial-theme` / `html.dark-theme` for DS SCSS.
208
262
  * Shell and standalone Business Apps use the same service (federation singleton when shared).
209
263
  */
210
264
  declare class FlyThemeService {
211
- readonly theme: _angular_core.WritableSignal<FlyThemeMode>;
265
+ private readonly platformId;
266
+ readonly theme: _angular_core.WritableSignal<"light" | "spatial" | "dark">;
212
267
  applyTheme(mode: FlyThemeMode): void;
213
268
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyThemeService, never>;
214
269
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<FlyThemeService>;
@@ -243,6 +298,13 @@ declare abstract class WindowManagerService {
243
298
  abstract openChildWindow(options: OpenWindowOptions): void;
244
299
  abstract closeWindow(windowId: string): void;
245
300
  abstract focusWindow(windowId: string): void;
301
+ /**
302
+ * Shell: increments per-window depth and shows content block UI.
303
+ * Standalone / no host: no-op.
304
+ */
305
+ beginContentUiBlock(_windowId: string, _messageKey?: string): void;
306
+ /** Shell: decrements depth; clears block when depth reaches 0. Standalone: no-op. */
307
+ endContentUiBlock(_windowId: string): void;
246
308
  }
247
309
  /**
248
310
  * No-op fallback implementation used when running a Business App in
@@ -321,6 +383,11 @@ declare class MockAuthService {
321
383
  readonly hasPendingTwoFactor: Signal<boolean>;
322
384
  /** Always false in mock mode — auth is pre-populated synchronously. */
323
385
  readonly initializing: Signal<boolean>;
386
+ /**
387
+ * Shell and guards may read this flag; real auth uses `localStorage` `fly_had_session`.
388
+ * Default false — override in the app’s `auth.service.mock.ts` if needed.
389
+ */
390
+ get hadPriorSession(): boolean;
324
391
  constructor();
325
392
  /** Override in subclass to supply app-specific mock data. */
326
393
  protected getConfig(): MockAuthConfig;
@@ -345,8 +412,10 @@ interface ContextMenuSection {
345
412
  label?: string;
346
413
  items: ContextMenuItem[];
347
414
  }
348
- declare class ContextMenuComponent implements AfterViewInit {
415
+ declare class ContextMenuComponent implements AfterViewInit, OnDestroy {
349
416
  private menuEl?;
417
+ private readonly doc;
418
+ private readonly hostEl;
350
419
  x: _angular_core.InputSignal<number>;
351
420
  y: _angular_core.InputSignal<number>;
352
421
  sections: _angular_core.InputSignal<ContextMenuSection[]>;
@@ -356,10 +425,11 @@ declare class ContextMenuComponent implements AfterViewInit {
356
425
  private menuHeight;
357
426
  private previouslyFocused;
358
427
  clampedPos: _angular_core.Signal<{
359
- x: number;
360
- y: number;
428
+ left: number;
429
+ top: number;
361
430
  }>;
362
431
  ngAfterViewInit(): void;
432
+ ngOnDestroy(): void;
363
433
  onAction(id: string): void;
364
434
  onClickOutside(event: MouseEvent): void;
365
435
  onEscape(): void;
@@ -441,6 +511,216 @@ declare class MessageBoxComponent implements AfterViewInit {
441
511
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<MessageBoxComponent, "fly-message-box", never, {}, {}, never, never, true, never>;
442
512
  }
443
513
 
444
- export { AuthService, ContextMenuComponent, DialogResult, FlyThemeService, I18nService, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, RTL_LOCALE_SET, StandaloneWindowManagerService, TranslatePipe, WINDOW_DATA, WindowManagerService, isRtlLocale };
445
- export type { ChildWindowData, ContextMenuItem, ContextMenuSection, DesktopApp, FlyThemeMode, LoadBundleOptions, MessageBoxButton, MessageBoxOptions, MockAuthConfig, OpenWindowOptions, RemoteAppDef, User, WindowInstance, WindowState };
514
+ /** Default permission levels (file-style ACL). Hosts can override via `permissionLevels`. */
515
+ declare const SHARE_PANEL_DEFAULT_FILE_LEVELS: SharePanelLevelOption[];
516
+ declare class SharePanelComponent implements OnInit {
517
+ /** Resource title shown in the header */
518
+ targetName: string;
519
+ /** i18n key for panel title */
520
+ titleKey: string;
521
+ /** Load current shares / permissions (host resolves display names when possible). */
522
+ loadPermissions: () => Observable<SharePermissionEntry[]>;
523
+ searchUsers: (query: string) => Observable<ShareUserResult[]>;
524
+ /**
525
+ * Load OU hierarchy for sharing. `chartId` is null for the default/official tree;
526
+ * non-null for an alternative chart.
527
+ */
528
+ loadOuTree: (chartId: string | null) => Observable<ShareOuNode[]>;
529
+ /** Chart selector options; first entry should be the default chart (`id: null`). */
530
+ loadChartOptions: () => Observable<ShareOrgChartOption[]>;
531
+ /**
532
+ * Labels from the default (official) OU tree for stable display names on OU grants
533
+ * when the picker shows an alternative chart.
534
+ */
535
+ loadOuLabelMap: () => Observable<Record<string, string>>;
536
+ grantToUser: (userId: string, level: string, applyToChildren: boolean) => Observable<void>;
537
+ grantToOu: (ouId: string, level: string, applyToChildren: boolean) => Observable<void>;
538
+ updatePermission: (id: string, level: string) => Observable<void>;
539
+ revokePermission: (id: string) => Observable<void>;
540
+ /** When true, show “apply to children” (e.g. folders). */
541
+ showApplyToChildren: boolean;
542
+ /** Override level dropdown options (e.g. notes: View / Edit only). */
543
+ permissionLevels?: SharePanelLevelOption[];
544
+ /** i18n key for wildcard app grant label */
545
+ everyoneLabelKey: string;
546
+ close: EventEmitter<void>;
547
+ private destroyRef;
548
+ private i18n;
549
+ permissions: _angular_core.WritableSignal<SharePermissionEntry[]>;
550
+ loading: _angular_core.WritableSignal<boolean>;
551
+ searchQuery: string;
552
+ newLevel: string;
553
+ applyToChildren: boolean;
554
+ searchResults: _angular_core.WritableSignal<ShareUserResult[]>;
555
+ ouTree: _angular_core.WritableSignal<ShareOuNode[]>;
556
+ showOuPicker: _angular_core.WritableSignal<boolean>;
557
+ chartOptions: _angular_core.WritableSignal<ShareOrgChartOption[]>;
558
+ selectedOrgChartId: _angular_core.WritableSignal<string | null>;
559
+ /** Default-tree id → display name for permission rows (OU grants). */
560
+ private readonly ouLabelById;
561
+ private searchTimeout;
562
+ /** Emits after chart options load; further emissions on user chart changes (no initial null). */
563
+ private readonly selectedChartId$;
564
+ ngOnInit(): void;
565
+ onOrgChartSelectChange(chartId: string | null): void;
566
+ get levelOptions(): SharePanelLevelOption[];
567
+ refreshPermissions(): void;
568
+ onSearchInput(): void;
569
+ onGrantToUser(user: ShareUserResult): void;
570
+ onGrantToOu(ou: ShareOuNode): void;
571
+ onUpdateLevel(perm: SharePermissionEntry, level: string): void;
572
+ onRevokePermission(perm: SharePermissionEntry): void;
573
+ getPermIcon(perm: SharePermissionEntry): string;
574
+ /** Logical start padding for OU hierarchy (roots align with section padding). */
575
+ ouIndentStartPx(ou: ShareOuNode): number;
576
+ getPermLabel(perm: SharePermissionEntry): string;
577
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SharePanelComponent, never>;
578
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SharePanelComponent, "fly-share-panel", never, { "targetName": { "alias": "targetName"; "required": false; }; "titleKey": { "alias": "titleKey"; "required": false; }; "loadPermissions": { "alias": "loadPermissions"; "required": true; }; "searchUsers": { "alias": "searchUsers"; "required": true; }; "loadOuTree": { "alias": "loadOuTree"; "required": true; }; "loadChartOptions": { "alias": "loadChartOptions"; "required": true; }; "loadOuLabelMap": { "alias": "loadOuLabelMap"; "required": true; }; "grantToUser": { "alias": "grantToUser"; "required": true; }; "grantToOu": { "alias": "grantToOu"; "required": true; }; "updatePermission": { "alias": "updatePermission"; "required": true; }; "revokePermission": { "alias": "revokePermission"; "required": true; }; "showApplyToChildren": { "alias": "showApplyToChildren"; "required": false; }; "permissionLevels": { "alias": "permissionLevels"; "required": false; }; "everyoneLabelKey": { "alias": "everyoneLabelKey"; "required": false; }; }, { "close": "close"; }, never, never, true, never>;
579
+ }
580
+
581
+ /** Full-bleed loading overlay for window content (shell) or embedded hosts. */
582
+ declare class FlyBlockUiComponent {
583
+ /** When false, the overlay is not rendered (host may use @if instead). */
584
+ active: _angular_core.InputSignal<boolean>;
585
+ /** i18n key for status text; empty uses `common.loading`. */
586
+ messageKey: _angular_core.InputSignal<string>;
587
+ readonly resolvedMessageKey: _angular_core.Signal<string>;
588
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyBlockUiComponent, never>;
589
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyBlockUiComponent, "fly-block-ui", never, { "active": { "alias": "active"; "required": true; "isSignal": true; }; "messageKey": { "alias": "messageKey"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
590
+ }
591
+
592
+ /**
593
+ * Metadata returned by Files Manager after a successful upload or metadata query.
594
+ * Mirrors the `FileMetadataDto` shape from `GET /api/files/{id}` and `POST /api/files/upload`.
595
+ */
596
+ interface FlyFileInfo {
597
+ id: string;
598
+ fileName: string;
599
+ contentType: string;
600
+ sizeBytes: number;
601
+ sourceApp: string;
602
+ sourceEntityType?: string;
603
+ sourceEntityId?: string;
604
+ uploadedByUserId?: string;
605
+ correlationId?: string;
606
+ isConfirmed: boolean;
607
+ version: number;
608
+ scanStatus: string;
609
+ createdAt: string;
610
+ folderId?: string;
611
+ hasErrors: boolean;
612
+ }
613
+
614
+ /**
615
+ * Image upload component with built-in cropperjs cropping modal.
616
+ *
617
+ * Usage:
618
+ * ```html
619
+ * <fly-image-upload
620
+ * [aspectRatio]="16/9"
621
+ * [currentImageId]="trend.coverImageId"
622
+ * sourceApp="circles"
623
+ * sourceEntityType="trend"
624
+ * (uploaded)="onImageUploaded($event)"
625
+ * (removed)="onImageRemoved()"
626
+ * />
627
+ * ```
628
+ */
629
+ declare class FlyImageUploadComponent {
630
+ private http;
631
+ aspectRatio: _angular_core.InputSignal<number>;
632
+ maxSizeBytes: _angular_core.InputSignal<number>;
633
+ currentImageId: _angular_core.InputSignal<string | null>;
634
+ sourceApp: _angular_core.InputSignal<string>;
635
+ sourceEntityType: _angular_core.InputSignal<string | null>;
636
+ sourceEntityId: _angular_core.InputSignal<string | null>;
637
+ uploaded: _angular_core.OutputEmitterRef<FlyFileInfo>;
638
+ removed: _angular_core.OutputEmitterRef<void>;
639
+ uploading: _angular_core.WritableSignal<boolean>;
640
+ error: _angular_core.WritableSignal<string | null>;
641
+ showCropper: _angular_core.WritableSignal<boolean>;
642
+ rawImageUrl: _angular_core.WritableSignal<string>;
643
+ localBlob: _angular_core.WritableSignal<string | null>;
644
+ fileInput: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
645
+ cropImage: _angular_core.Signal<ElementRef<HTMLImageElement> | undefined>;
646
+ private cropper;
647
+ private selectedFile;
648
+ previewUrl: _angular_core.Signal<string | null>;
649
+ sizeHint: _angular_core.Signal<string>;
650
+ triggerFileInput(): void;
651
+ onDragOver(e: DragEvent): void;
652
+ onDrop(e: DragEvent): void;
653
+ onFileSelected(e: Event): void;
654
+ removeImage(): void;
655
+ cancelCrop(): void;
656
+ applyCrop(): void;
657
+ private processFile;
658
+ private initCropper;
659
+ private destroyCropper;
660
+ private uploadFile;
661
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyImageUploadComponent, never>;
662
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyImageUploadComponent, "fly-image-upload", never, { "aspectRatio": { "alias": "aspectRatio"; "required": false; "isSignal": true; }; "maxSizeBytes": { "alias": "maxSizeBytes"; "required": false; "isSignal": true; }; "currentImageId": { "alias": "currentImageId"; "required": false; "isSignal": true; }; "sourceApp": { "alias": "sourceApp"; "required": false; "isSignal": true; }; "sourceEntityType": { "alias": "sourceEntityType"; "required": false; "isSignal": true; }; "sourceEntityId": { "alias": "sourceEntityId"; "required": false; "isSignal": true; }; }, { "uploaded": "uploaded"; "removed": "removed"; }, never, never, true, never>;
663
+ }
664
+
665
+ interface UploadSlot {
666
+ file: File;
667
+ progress: number;
668
+ status: 'uploading' | 'done' | 'error';
669
+ info?: FlyFileInfo;
670
+ error?: string;
671
+ }
672
+ /**
673
+ * Multi-file upload with drag-drop, progress, and validation.
674
+ *
675
+ * Usage:
676
+ * ```html
677
+ * <fly-file-upload
678
+ * [maxFiles]="5"
679
+ * [maxFileSizeBytes]="5242880"
680
+ * accept=".pdf,.docx,.xlsx"
681
+ * [(files)]="trend.attachments"
682
+ * sourceApp="circles"
683
+ * sourceEntityType="trend"
684
+ * (filesChanged)="onAttachmentsChanged($event)"
685
+ * />
686
+ * ```
687
+ */
688
+ declare class FlyFileUploadComponent {
689
+ private http;
690
+ maxFiles: _angular_core.InputSignal<number>;
691
+ maxFileSizeBytes: _angular_core.InputSignal<number>;
692
+ accept: _angular_core.InputSignal<string>;
693
+ sourceApp: _angular_core.InputSignal<string>;
694
+ sourceEntityType: _angular_core.InputSignal<string | null>;
695
+ sourceEntityId: _angular_core.InputSignal<string | null>;
696
+ /** Two-way model for completed file metadata. */
697
+ files: _angular_core.ModelSignal<FlyFileInfo[]>;
698
+ filesChanged: _angular_core.OutputEmitterRef<FlyFileInfo[]>;
699
+ error: _angular_core.WritableSignal<string | null>;
700
+ dragging: _angular_core.WritableSignal<boolean>;
701
+ slots: _angular_core.WritableSignal<UploadSlot[]>;
702
+ /** Pre-existing files loaded from the entity (before any new uploads this session). */
703
+ existingFiles: _angular_core.WritableSignal<FlyFileInfo[]>;
704
+ fileInput: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
705
+ allSlots: _angular_core.Signal<UploadSlot[]>;
706
+ canAddMore: _angular_core.Signal<boolean>;
707
+ limitHint: _angular_core.Signal<string>;
708
+ triggerFileInput(): void;
709
+ onDragOver(e: DragEvent): void;
710
+ onDragLeave(e: DragEvent): void;
711
+ onDrop(e: DragEvent): void;
712
+ onFilesSelected(e: Event): void;
713
+ removeSlot(slot: UploadSlot): void;
714
+ removeExisting(f: FlyFileInfo): void;
715
+ iconFor(slot: UploadSlot): string;
716
+ iconForInfo(f: FlyFileInfo): string;
717
+ formatFileSize(bytes: number): string;
718
+ private processFiles;
719
+ private uploadFile;
720
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyFileUploadComponent, never>;
721
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlyFileUploadComponent, "fly-file-upload", never, { "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "maxFileSizeBytes": { "alias": "maxFileSizeBytes"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "sourceApp": { "alias": "sourceApp"; "required": false; "isSignal": true; }; "sourceEntityType": { "alias": "sourceEntityType"; "required": false; "isSignal": true; }; "sourceEntityId": { "alias": "sourceEntityId"; "required": false; "isSignal": true; }; "files": { "alias": "files"; "required": false; "isSignal": true; }; }, { "files": "filesChange"; "filesChanged": "filesChanged"; }, never, never, true, never>;
722
+ }
723
+
724
+ export { AuthService, ContextMenuComponent, DEFAULT_FLY_THEME_MODE, DialogResult, FLY_THEME_MODE_IDS, FlyBlockUiComponent, FlyFileUploadComponent, FlyImageUploadComponent, FlyThemeService, I18nService, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, RTL_LOCALE_SET, SHARE_PANEL_DEFAULT_FILE_LEVELS, SharePanelComponent, StandaloneWindowManagerService, TranslatePipe, WINDOW_DATA, WindowManagerService, isRtlLocale, normalizeFlyTheme };
725
+ export type { ChildWindowData, ContextMenuItem, ContextMenuSection, DesktopApp, DesktopAppKind, FlyFileInfo, FlyThemeMode, LoadBundleOptions, MessageBoxButton, MessageBoxOptions, MockAuthConfig, OpenWindowOptions, RemoteAppDef, ShareOrgChartOption, ShareOuNode, SharePanelLevelOption, SharePermissionEntry, ShareUserResult, User, WindowInstance, WindowState };
446
726
  //# sourceMappingURL=mohamedatia-fly-design-system.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mohamedatia-fly-design-system.d.ts","sources":["../../../projects/design-system/src/lib/models/app.model.ts","../../../projects/design-system/src/lib/models/window.model.ts","../../../projects/design-system/src/lib/models/user.model.ts","../../../projects/design-system/src/lib/models/remote-app.model.ts","../../../projects/design-system/src/lib/services/auth.service.ts","../../../projects/design-system/src/lib/services/i18n.service.ts","../../../projects/design-system/src/lib/services/fly-theme.service.ts","../../../projects/design-system/src/lib/services/window-manager.service.ts","../../../projects/design-system/src/lib/pipes/translate.pipe.ts","../../../projects/design-system/src/lib/services/auth.service.mock.ts","../../../projects/design-system/src/lib/components/context-menu/context-menu.component.ts","../../../projects/design-system/src/lib/components/message-box/message-box.service.ts","../../../projects/design-system/src/lib/components/message-box/message-box.component.ts"],"mappings":"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","names":[]}
1
+ {"version":3,"file":"mohamedatia-fly-design-system.d.ts","sources":["../../../projects/design-system/src/lib/models/app.model.ts","../../../projects/design-system/src/lib/models/window.model.ts","../../../projects/design-system/src/lib/models/user.model.ts","../../../projects/design-system/src/lib/models/share-panel.model.ts","../../../projects/design-system/src/lib/models/remote-app.model.ts","../../../projects/design-system/src/lib/services/auth.service.ts","../../../projects/design-system/src/lib/services/i18n.service.ts","../../../projects/design-system/src/lib/services/fly-theme.service.ts","../../../projects/design-system/src/lib/services/window-manager.service.ts","../../../projects/design-system/src/lib/pipes/translate.pipe.ts","../../../projects/design-system/src/lib/services/auth.service.mock.ts","../../../projects/design-system/src/lib/components/context-menu/context-menu.component.ts","../../../projects/design-system/src/lib/components/message-box/message-box.service.ts","../../../projects/design-system/src/lib/components/message-box/message-box.component.ts","../../../projects/design-system/src/lib/components/share-panel/share-panel.component.ts","../../../projects/design-system/src/lib/components/block-ui/block-ui.component.ts","../../../projects/design-system/src/lib/models/file.model.ts","../../../projects/design-system/src/lib/components/image-upload/fly-image-upload.component.ts","../../../projects/design-system/src/lib/components/file-upload/fly-file-upload.component.ts"],"mappings":"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","names":[]}