@mohamedatia/fly-design-system 1.5.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,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Type, InjectionToken, PipeTransform, signal, Signal, AfterViewInit, OnDestroy, OnInit, EventEmitter } 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
5
  /**
@@ -60,6 +60,10 @@ interface WindowInstance {
60
60
  childData?: ChildWindowData;
61
61
  /** Populated when remote `loadComponent()` fails (e.g. federation). */
62
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;
63
67
  }
64
68
  declare const WINDOW_DATA: InjectionToken<WindowInstance>;
65
69
 
@@ -104,6 +108,13 @@ interface ShareUserResult {
104
108
  interface ShareOuNode {
105
109
  id: string;
106
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;
107
118
  }
108
119
  interface SharePanelLevelOption {
109
120
  value: string;
@@ -239,13 +250,20 @@ declare class I18nService {
239
250
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<I18nService>;
240
251
  }
241
252
 
242
- 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;
243
260
  /**
244
- * 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.
245
262
  * Shell and standalone Business Apps use the same service (federation singleton when shared).
246
263
  */
247
264
  declare class FlyThemeService {
248
- readonly theme: _angular_core.WritableSignal<FlyThemeMode>;
265
+ private readonly platformId;
266
+ readonly theme: _angular_core.WritableSignal<"light" | "spatial" | "dark">;
249
267
  applyTheme(mode: FlyThemeMode): void;
250
268
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlyThemeService, never>;
251
269
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<FlyThemeService>;
@@ -280,6 +298,13 @@ declare abstract class WindowManagerService {
280
298
  abstract openChildWindow(options: OpenWindowOptions): void;
281
299
  abstract closeWindow(windowId: string): void;
282
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;
283
308
  }
284
309
  /**
285
310
  * No-op fallback implementation used when running a Business App in
@@ -358,6 +383,11 @@ declare class MockAuthService {
358
383
  readonly hasPendingTwoFactor: Signal<boolean>;
359
384
  /** Always false in mock mode — auth is pre-populated synchronously. */
360
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;
361
391
  constructor();
362
392
  /** Override in subclass to supply app-specific mock data. */
363
393
  protected getConfig(): MockAuthConfig;
@@ -491,7 +521,18 @@ declare class SharePanelComponent implements OnInit {
491
521
  /** Load current shares / permissions (host resolves display names when possible). */
492
522
  loadPermissions: () => Observable<SharePermissionEntry[]>;
493
523
  searchUsers: (query: string) => Observable<ShareUserResult[]>;
494
- loadOuTree: () => Observable<ShareOuNode[]>;
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>>;
495
536
  grantToUser: (userId: string, level: string, applyToChildren: boolean) => Observable<void>;
496
537
  grantToOu: (ouId: string, level: string, applyToChildren: boolean) => Observable<void>;
497
538
  updatePermission: (id: string, level: string) => Observable<void>;
@@ -513,8 +554,15 @@ declare class SharePanelComponent implements OnInit {
513
554
  searchResults: _angular_core.WritableSignal<ShareUserResult[]>;
514
555
  ouTree: _angular_core.WritableSignal<ShareOuNode[]>;
515
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;
516
561
  private searchTimeout;
562
+ /** Emits after chart options load; further emissions on user chart changes (no initial null). */
563
+ private readonly selectedChartId$;
517
564
  ngOnInit(): void;
565
+ onOrgChartSelectChange(chartId: string | null): void;
518
566
  get levelOptions(): SharePanelLevelOption[];
519
567
  refreshPermissions(): void;
520
568
  onSearchInput(): void;
@@ -523,11 +571,156 @@ declare class SharePanelComponent implements OnInit {
523
571
  onUpdateLevel(perm: SharePermissionEntry, level: string): void;
524
572
  onRevokePermission(perm: SharePermissionEntry): void;
525
573
  getPermIcon(perm: SharePermissionEntry): string;
574
+ /** Logical start padding for OU hierarchy (roots align with section padding). */
575
+ ouIndentStartPx(ou: ShareOuNode): number;
526
576
  getPermLabel(perm: SharePermissionEntry): string;
527
577
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SharePanelComponent, never>;
528
- 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; }; "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>;
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>;
529
722
  }
530
723
 
531
- export { AuthService, ContextMenuComponent, DialogResult, FlyThemeService, I18nService, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, RTL_LOCALE_SET, SHARE_PANEL_DEFAULT_FILE_LEVELS, SharePanelComponent, StandaloneWindowManagerService, TranslatePipe, WINDOW_DATA, WindowManagerService, isRtlLocale };
532
- export type { ChildWindowData, ContextMenuItem, ContextMenuSection, DesktopApp, DesktopAppKind, FlyThemeMode, LoadBundleOptions, MessageBoxButton, MessageBoxOptions, MockAuthConfig, OpenWindowOptions, RemoteAppDef, ShareOuNode, SharePanelLevelOption, SharePermissionEntry, ShareUserResult, User, WindowInstance, WindowState };
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 };
533
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/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"],"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":[]}
@@ -1,57 +0,0 @@
1
- // ─── Dark Theme Variables (shared mixin to avoid duplication) ────────────────
2
- @mixin dark-theme-vars {
3
- --primary-light: rgba(232, 115, 42, 0.18);
4
-
5
- --surface-ground: #0e0e10;
6
- --surface-section: rgba(28, 28, 30, 0.85);
7
- --surface-card: rgba(28, 28, 30, 0.7);
8
- --surface-border: rgba(255, 255, 255, 0.1);
9
- --surface-hover: rgba(255, 255, 255, 0.08);
10
- --text-color: #f2f2f7;
11
- --text-color-secondary: rgba(242, 242, 247, 0.65);
12
-
13
- --glass-bg: rgba(25, 25, 28, 0.72);
14
- --glass-bg-elevated: rgba(38, 38, 42, 0.82);
15
- --glass-border: rgba(255, 255, 255, 0.12);
16
- --glass-shadow: 0 8px 40px rgba(0, 0, 0, 0.35);
17
- --glass-inner-glow: inset 0 1px 0 rgba(255, 255, 255, 0.08);
18
-
19
- --window-bg: rgba(22, 22, 24, 0.55);
20
- --window-radius: 46px;
21
- --window-shadow: 0 24px 80px rgba(0, 0, 0, 0.4);
22
- --window-border: rgba(255, 255, 255, 0.12);
23
-
24
- --titlebar-bg: transparent;
25
-
26
- --dock-bg: rgba(20, 20, 22, 0.55);
27
- --dock-border: rgba(255, 255, 255, 0.12);
28
- --dock-blur: 50px;
29
-
30
- --menubar-bg: rgba(14, 14, 16, 0.6);
31
- --menubar-border: rgba(255, 255, 255, 0.06);
32
- --menubar-text: rgba(242, 242, 247, 1);
33
-
34
- --sidebar-bg: rgba(20, 20, 22, 0.6);
35
- --sidebar-border: rgba(255, 255, 255, 0.08);
36
-
37
- --focus-ring: rgba(232, 115, 42, 0.6);
38
-
39
- // Opaque Business App surfaces (mirror light-theme semantic set for embeds).
40
- --label-primary: var(--text-color);
41
- --label-secondary: var(--text-color-secondary);
42
- --label-tertiary: rgba(242, 242, 247, 0.42);
43
- --separator-primary: rgba(255, 255, 255, 0.14);
44
- --separator: var(--separator-primary);
45
- --fill-secondary: rgba(255, 255, 255, 0.1);
46
- --fill-tertiary: rgba(255, 255, 255, 0.06);
47
- --material-glass: rgba(28, 28, 30, 0.92);
48
-
49
- --fly-color-surface: rgba(28, 28, 30, 0.95);
50
- --fly-color-surface-alt: rgba(38, 38, 42, 0.9);
51
- --fly-color-border: rgba(255, 255, 255, 0.12);
52
- --fly-color-text-muted: var(--text-color-secondary);
53
- --fly-color-primary: var(--primary-color);
54
- --fly-color-primary-hover: var(--primary-hover);
55
- --fly-color-danger: var(--system-red);
56
- --fly-shadow-md: 0 4px 16px rgba(0, 0, 0, 0.35);
57
- }
@@ -1,41 +0,0 @@
1
- // ─── Transparent / Spatial Theme (visionOS-style) ───────────────────────────
2
- html.transparent-theme {
3
- --primary-light: rgba(232, 115, 42, 0.2);
4
-
5
- --surface-ground: transparent;
6
- --surface-section: rgba(255, 255, 255, 0.18);
7
- --surface-card: rgba(255, 255, 255, 0.22);
8
- --surface-border: rgba(255, 255, 255, 0.16);
9
- --surface-hover: rgba(0, 0, 0, 0.04);
10
- --text-color: var(--label-primary);
11
- --text-color-secondary: var(--label-secondary);
12
-
13
- --glass-bg: var(--material-glass);
14
- --glass-bg-elevated: rgba(128, 128, 128, 0.45);
15
- --glass-blur: var(--material-glass-blur);
16
- --glass-border: var(--material-glass-stroke);
17
- --glass-shadow: 0 12px 48px rgba(0, 0, 0, 0.15);
18
- --glass-inner-glow: var(--material-glass-specular);
19
-
20
- --window-bg: var(--material-glass);
21
- --window-radius: 46px;
22
- --window-blur: var(--material-glass-blur);
23
- --window-shadow: 0 24px 80px rgba(0, 0, 0, 0.15);
24
- --window-border: var(--material-glass-stroke);
25
-
26
- --titlebar-bg: transparent;
27
-
28
- --dock-bg: rgba(128, 128, 128, 0.2);
29
- --dock-border: var(--material-glass-stroke);
30
- --dock-blur: var(--material-glass-blur);
31
-
32
- --menubar-bg: rgba(128, 128, 128, 0.25);
33
- --menubar-border: var(--material-glass-stroke);
34
- --menubar-text: var(--label-primary);
35
- --menubar-blur: var(--material-glass-blur);
36
-
37
- --sidebar-bg: rgba(128, 128, 128, 0.2);
38
- --sidebar-border: var(--material-glass-stroke);
39
-
40
- --focus-ring: rgba(232, 115, 42, 0.6);
41
- }