@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.
- package/fesm2022/mohamedatia-fly-design-system.mjs +908 -21
- package/fesm2022/mohamedatia-fly-design-system.mjs.map +1 -1
- package/package.json +6 -5
- package/scss/_fly-theme.scss +2 -2
- package/scss/_theme-auto.scss +4 -3
- package/scss/_theme-dark.scss +77 -4
- package/scss/_theme-light.scss +11 -3
- package/scss/_theme-spatial-vars.scss +66 -0
- package/scss/_theme-spatial.scss +22 -0
- package/types/mohamedatia-fly-design-system.d.ts +292 -12
- package/types/mohamedatia-fly-design-system.d.ts.map +1 -1
- package/scss/_theme-dark-vars.scss +0 -57
- package/scss/_theme-transparent.scss +0 -41
package/scss/_theme-dark.scss
CHANGED
|
@@ -1,6 +1,79 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
//
|
|
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
|
-
|
|
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
|
}
|
package/scss/_theme-light.scss
CHANGED
|
@@ -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:
|
|
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:
|
|
42
|
-
--titlebar-padding: 0
|
|
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
|
-
*
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
-
|
|
360
|
-
|
|
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
|
-
|
|
445
|
-
|
|
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":";;;;
|
|
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":[]}
|