@mohamedatia/fly-design-system 1.9.3 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/mohamedatia-fly-design-system.mjs +843 -35
- package/fesm2022/mohamedatia-fly-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/scss/_theme-light.scss +89 -89
- package/types/mohamedatia-fly-design-system.d.ts +525 -75
- package/types/mohamedatia-fly-design-system.d.ts.map +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { Type, InjectionToken,
|
|
2
|
+
import { Type, InjectionToken, Signal, OnInit, EventEmitter, OnChanges, OnDestroy, SimpleChanges, PipeTransform, signal, AfterViewInit, ElementRef } from '@angular/core';
|
|
3
|
+
import { ControlValueAccessor, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
|
|
3
4
|
import { Observable } from 'rxjs';
|
|
4
5
|
|
|
5
6
|
/**
|
|
@@ -66,6 +67,35 @@ interface WindowInstance {
|
|
|
66
67
|
contentUiBlockMessageKey?: string;
|
|
67
68
|
}
|
|
68
69
|
declare const WINDOW_DATA: InjectionToken<WindowInstance>;
|
|
70
|
+
/**
|
|
71
|
+
* Payload delivered to a window when it is launched (or re-launched) via a deep link.
|
|
72
|
+
* Both fields are nullable: a normal dock click yields `route: null`, `params: null`.
|
|
73
|
+
*
|
|
74
|
+
* Hosts provide a `Signal<LaunchContext | null>` per window via `LAUNCH_CONTEXT` so
|
|
75
|
+
* remotes can react with `effect()` when the same window is re-launched (the host
|
|
76
|
+
* bumps `version` to differentiate). `version` starts at 1 for the first launch.
|
|
77
|
+
*/
|
|
78
|
+
interface LaunchContext {
|
|
79
|
+
readonly route: string | null;
|
|
80
|
+
readonly params: Readonly<Record<string, unknown>> | null;
|
|
81
|
+
readonly version: number;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Per-window injection token carrying the active `LaunchContext` as a signal.
|
|
85
|
+
* Resolves to `null` outside the desktop shell (e.g. mock-host dev mode).
|
|
86
|
+
*
|
|
87
|
+
* Remotes typically consume it as:
|
|
88
|
+
* ```ts
|
|
89
|
+
* private readonly launchCtx = inject(LAUNCH_CONTEXT, { optional: true });
|
|
90
|
+
* constructor() {
|
|
91
|
+
* effect(() => {
|
|
92
|
+
* const ctx = this.launchCtx?.();
|
|
93
|
+
* if (ctx?.route) this.router.navigateByUrl(ctx.route);
|
|
94
|
+
* });
|
|
95
|
+
* }
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
declare const LAUNCH_CONTEXT: InjectionToken<Signal<LaunchContext | null>>;
|
|
69
99
|
|
|
70
100
|
interface User {
|
|
71
101
|
id: string;
|
|
@@ -88,16 +118,72 @@ interface User {
|
|
|
88
118
|
|
|
89
119
|
/**
|
|
90
120
|
* Generic share / ACL panel models — hosts map domain DTOs to these shapes.
|
|
121
|
+
*
|
|
122
|
+
* v2.0.0: introduces the {@link SharePrincipal} discriminated union to replace the v1
|
|
123
|
+
* "set-which-is-set" discriminator on {@link SharePermissionEntry} (`grantedToUserId` /
|
|
124
|
+
* `grantedToOuId` / `grantedToAppId`). The new shape compiles invalid combinations away
|
|
125
|
+
* (a permission row carries exactly one principal, never overlapping ids) and reserves
|
|
126
|
+
* a `role` kind for the planned apps-chart role-as-principal flow.
|
|
127
|
+
*/
|
|
128
|
+
/**
|
|
129
|
+
* Discriminated principal that owns a share permission row. Hosts translate domain DTO
|
|
130
|
+
* fields into one of these variants.
|
|
131
|
+
*
|
|
132
|
+
* The `role` variant is reserved for a follow-up enabling the Apps-chart role-as-principal
|
|
133
|
+
* flow end-to-end (frontend looks up the role-OU UUID; backend's PermissionResolver must
|
|
134
|
+
* enumerate the user's full OU set including computed-from-role memberships). Until that
|
|
135
|
+
* runtime work lands, hosts SHOULD NOT emit `role` principals.
|
|
136
|
+
*/
|
|
137
|
+
type SharePrincipal = UserPrincipal | RolePrincipal | OuPrincipal | AppEveryonePrincipal;
|
|
138
|
+
interface UserPrincipal {
|
|
139
|
+
kind: 'user';
|
|
140
|
+
/** Tenant-scoped user id. */
|
|
141
|
+
userId: string;
|
|
142
|
+
/** Display name resolved by the host (e.g. "Jane Doe"). Falls back to a Guid prefix. */
|
|
143
|
+
displayName?: string;
|
|
144
|
+
/** Optional email — surfaced as a secondary line on the row when set. */
|
|
145
|
+
email?: string;
|
|
146
|
+
}
|
|
147
|
+
interface RolePrincipal {
|
|
148
|
+
kind: 'role';
|
|
149
|
+
/** Owning app id (e.g. `circles`). Roles are unique within an app, not globally. */
|
|
150
|
+
appId: string;
|
|
151
|
+
/** Stable role key within that app (e.g. `ffo`, `viewer`). */
|
|
152
|
+
roleKey: string;
|
|
153
|
+
displayName?: string;
|
|
154
|
+
}
|
|
155
|
+
interface OuPrincipal {
|
|
156
|
+
kind: 'ou';
|
|
157
|
+
ouId: string;
|
|
158
|
+
/** Chart context for stable display labels. Null = the Default Company chart. */
|
|
159
|
+
chartId?: string | null;
|
|
160
|
+
displayName?: string;
|
|
161
|
+
}
|
|
162
|
+
interface AppEveryonePrincipal {
|
|
163
|
+
kind: 'app-everyone';
|
|
164
|
+
/** App id whose user population this grant targets. `*` = every tenant user. */
|
|
165
|
+
appId: string;
|
|
166
|
+
displayName?: string;
|
|
167
|
+
}
|
|
168
|
+
/** Principal-kind discriminator strings — re-exported for hosts that build menus dynamically. */
|
|
169
|
+
type SharePrincipalKind = SharePrincipal['kind'];
|
|
170
|
+
/**
|
|
171
|
+
* One row of the share-panel permissions list. v2.0 carries a {@link SharePrincipal}
|
|
172
|
+
* discriminated union instead of the v1 `grantedToUserId` / `grantedToOuId` / `grantedToAppId`
|
|
173
|
+
* fields. See the file header for migration notes.
|
|
91
174
|
*/
|
|
92
175
|
interface SharePermissionEntry {
|
|
93
176
|
id: string;
|
|
94
|
-
|
|
95
|
-
grantedToOuId?: string | null;
|
|
96
|
-
grantedToAppId?: string | null;
|
|
177
|
+
principal: SharePrincipal;
|
|
97
178
|
level: string;
|
|
98
179
|
isInherited?: boolean;
|
|
99
|
-
/**
|
|
100
|
-
|
|
180
|
+
/**
|
|
181
|
+
* When true, this row is a deny grant — visually distinct, revokes access for the
|
|
182
|
+
* principal regardless of any matching allow grant. Backed by the ACL semantic in
|
|
183
|
+
* Files Manager (`FilePermission.IsDeny`) and Notes (`NoteShareLevel.Deny`).
|
|
184
|
+
* Hosts that do not support deny grants may omit this field entirely.
|
|
185
|
+
*/
|
|
186
|
+
isDeny?: boolean;
|
|
101
187
|
}
|
|
102
188
|
interface ShareUserResult {
|
|
103
189
|
id: string;
|
|
@@ -121,6 +207,424 @@ interface SharePanelLevelOption {
|
|
|
121
207
|
labelKey: string;
|
|
122
208
|
}
|
|
123
209
|
|
|
210
|
+
/**
|
|
211
|
+
* Canonical {@link AudienceFilter} TypeScript model — wire-compatible byte-for-byte with the
|
|
212
|
+
* C# `Fly.Shared.Core.Audience.AudienceFilter` polymorphic record. The discriminator field is
|
|
213
|
+
* `kind` and matches the values declared in `AudienceTerm.cs`'s `[JsonDerivedType]` attributes:
|
|
214
|
+
* `users`, `roles`, `ou`, `app-everyone`, `chart`, `preset`.
|
|
215
|
+
*
|
|
216
|
+
* Resolution semantics (server-side, see `AudienceFilter.cs`):
|
|
217
|
+
* 1. Each include term is expanded to a user-id set; sets are unioned.
|
|
218
|
+
* 2. Each exclude term is expanded; the union of excludes is subtracted.
|
|
219
|
+
* 3. Inactive users are filtered when {@link AudienceOptions.excludeInactiveUsers} is true.
|
|
220
|
+
*
|
|
221
|
+
* **Empty `includes` resolves to the empty set — never "everyone".** To target every user in a
|
|
222
|
+
* tenant, emit an explicit {@link AppEveryoneTerm} or {@link ChartTerm}; this matches the
|
|
223
|
+
* defensive backend default and prevents a UI bug from broadcasting tenant-wide.
|
|
224
|
+
*/
|
|
225
|
+
interface AudienceFilter {
|
|
226
|
+
/** At least one term required server-side; an empty array resolves to zero recipients. */
|
|
227
|
+
includes: AudienceTerm[];
|
|
228
|
+
/** Optional. Subtracted from the include union. */
|
|
229
|
+
excludes?: AudienceTerm[];
|
|
230
|
+
/** Optional resolver options. Server applies defaults when omitted. */
|
|
231
|
+
options?: AudienceOptions;
|
|
232
|
+
}
|
|
233
|
+
/** Tagged union of the six supported audience term kinds. */
|
|
234
|
+
type AudienceTerm = UsersTerm | RolesTerm | OuTerm | AppEveryoneTerm | ChartTerm | PresetTerm;
|
|
235
|
+
type AudienceTermKind = AudienceTerm['kind'];
|
|
236
|
+
/** Discriminator string values — re-exported so hosts can build kind menus dynamically. */
|
|
237
|
+
declare const AUDIENCE_TERM_KINDS: readonly ["users", "roles", "ou", "app-everyone", "chart", "preset"];
|
|
238
|
+
/**
|
|
239
|
+
* Runtime values for {@link AudiencePresetKind}. Hosts iterate this when surfacing a
|
|
240
|
+
* preset picker; the type union mirrors this list 1:1.
|
|
241
|
+
*/
|
|
242
|
+
declare const AUDIENCE_PRESETS: readonly ["self", "ou-managers", "direct-reports"];
|
|
243
|
+
/** Explicit user ids. Capped server-side at {@link AUDIENCE_LIMITS.maxUserIdsPerTerm}. */
|
|
244
|
+
interface UsersTerm {
|
|
245
|
+
kind: 'users';
|
|
246
|
+
/** Tenant-scoped user ids. */
|
|
247
|
+
userIds: string[];
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Users holding any of the named roles in a single owning app. Roles are matched by
|
|
251
|
+
* `(appId, key)` and filtered to active rows by the manifest spec — deprecated roles never
|
|
252
|
+
* expand into the audience. RoleKeys are unique within an app, not globally.
|
|
253
|
+
*/
|
|
254
|
+
interface RolesTerm {
|
|
255
|
+
kind: 'roles';
|
|
256
|
+
/** The role's owning app id (e.g. `circles`). */
|
|
257
|
+
appId: string;
|
|
258
|
+
/** Role keys within that app (e.g. `["ffo", "ops"]`). */
|
|
259
|
+
roleKeys: string[];
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Members of one or more OUs. `chartId` null = the Default Company chart; non-null targets
|
|
263
|
+
* an alternative chart (including the Apps Chart). When `includeDescendants` is true, members
|
|
264
|
+
* of all descendant OUs are included (resolved server-side via a recursive CTE).
|
|
265
|
+
*
|
|
266
|
+
* `includeDescendants` is required (not optional) so the wire round-trip is unambiguous: a
|
|
267
|
+
* stored term that was previously emitted with `false` deserialises identically to one emitted
|
|
268
|
+
* fresh, and the backend never has to choose between "missing" and "explicit false". Builders
|
|
269
|
+
* MUST emit a definite boolean.
|
|
270
|
+
*/
|
|
271
|
+
interface OuTerm {
|
|
272
|
+
kind: 'ou';
|
|
273
|
+
ouIds: string[];
|
|
274
|
+
/**
|
|
275
|
+
* Chart context for descendant traversal; null = default tree by parent id. Use `null`
|
|
276
|
+
* (never `undefined`) to keep wire shape symmetric with C# `Guid?` deserialization.
|
|
277
|
+
*/
|
|
278
|
+
chartId: string | null;
|
|
279
|
+
includeDescendants: boolean;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* "All users of this app in this tenant" — semantically the Apps Chart app-root OU. Resolved
|
|
283
|
+
* from `UserRole` rows joined to active roles owned by the app, never from a materialized
|
|
284
|
+
* member list. `appId === '*'` means every tenant user.
|
|
285
|
+
*/
|
|
286
|
+
interface AppEveryoneTerm {
|
|
287
|
+
kind: 'app-everyone';
|
|
288
|
+
appId: string;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* "Every user placed somewhere in this chart". For the Default Company chart this is every
|
|
292
|
+
* user with at least one OU membership.
|
|
293
|
+
*/
|
|
294
|
+
interface ChartTerm {
|
|
295
|
+
kind: 'chart';
|
|
296
|
+
chartId: string;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Named platform preset evaluated against an anchor user. Anchor is typically the request
|
|
300
|
+
* initiator (`Self`) or a referenced user (e.g. delegate's manager).
|
|
301
|
+
*/
|
|
302
|
+
interface PresetTerm {
|
|
303
|
+
kind: 'preset';
|
|
304
|
+
preset: AudiencePresetKind;
|
|
305
|
+
anchorUserId: string;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Supported audience presets. Kept intentionally small — wire matches C# `JsonStringEnumMemberName`.
|
|
309
|
+
*/
|
|
310
|
+
type AudiencePresetKind = 'self' | 'ou-managers' | 'direct-reports';
|
|
311
|
+
interface AudienceOptions {
|
|
312
|
+
/** When true (default), users with `IsActive=false` are filtered out. */
|
|
313
|
+
excludeInactiveUsers?: boolean;
|
|
314
|
+
/** Caller-supplied ceiling. Server clamps to {@link AUDIENCE_LIMITS.maxResolvedUsers}. */
|
|
315
|
+
hardCap?: number;
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Hard caps mirrored from `AudienceLimits.cs`. Hosts use these for client-side validation
|
|
319
|
+
* before submit — backend re-validates regardless. Keep these in sync with the C# constants.
|
|
320
|
+
*/
|
|
321
|
+
declare const AUDIENCE_LIMITS: {
|
|
322
|
+
readonly maxTermsPerFilter: 64;
|
|
323
|
+
readonly maxUserIdsPerTerm: 500;
|
|
324
|
+
readonly maxRoleKeysPerTerm: 64;
|
|
325
|
+
readonly maxOuIdsPerTerm: 32;
|
|
326
|
+
readonly maxResolvedUsers: 10000;
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
/** Default permission levels (file-style ACL). Hosts can override via `permissionLevels`. */
|
|
330
|
+
declare const SHARE_PANEL_DEFAULT_FILE_LEVELS: SharePanelLevelOption[];
|
|
331
|
+
declare class SharePanelComponent implements OnInit {
|
|
332
|
+
/** Resource title shown in the header */
|
|
333
|
+
targetName: string;
|
|
334
|
+
/** i18n key for panel title */
|
|
335
|
+
titleKey: string;
|
|
336
|
+
/** Load current shares / permissions (host resolves display names when possible). */
|
|
337
|
+
loadPermissions: () => Observable<SharePermissionEntry[]>;
|
|
338
|
+
searchUsers: (query: string) => Observable<ShareUserResult[]>;
|
|
339
|
+
/**
|
|
340
|
+
* Load OU hierarchy for sharing. `chartId` is null for the default/official tree;
|
|
341
|
+
* non-null for an alternative chart.
|
|
342
|
+
*/
|
|
343
|
+
loadOuTree: (chartId: string | null) => Observable<ShareOuNode[]>;
|
|
344
|
+
/** Chart selector options; first entry should be the default chart (`id: null`). */
|
|
345
|
+
loadChartOptions: () => Observable<ShareOrgChartOption[]>;
|
|
346
|
+
/**
|
|
347
|
+
* Labels from the default (official) OU tree for stable display names on OU grants
|
|
348
|
+
* when the picker shows an alternative chart.
|
|
349
|
+
*/
|
|
350
|
+
loadOuLabelMap: () => Observable<Record<string, string>>;
|
|
351
|
+
grantToUser: (userId: string, level: string, applyToChildren: boolean, isDeny: boolean) => Observable<void>;
|
|
352
|
+
grantToOu: (ouId: string, level: string, applyToChildren: boolean, isDeny: boolean) => Observable<void>;
|
|
353
|
+
updatePermission: (id: string, level: string) => Observable<void>;
|
|
354
|
+
revokePermission: (id: string) => Observable<void>;
|
|
355
|
+
/** When true, show “apply to children” (e.g. folders). */
|
|
356
|
+
showApplyToChildren: boolean;
|
|
357
|
+
/**
|
|
358
|
+
* When true, surfaces an "Add as deny" toggle in the add-permission row and renders
|
|
359
|
+
* existing deny grants with red styling. Hosts whose backend does not support deny
|
|
360
|
+
* grants (legacy callers) leave this false and the panel hides all deny affordances.
|
|
361
|
+
*/
|
|
362
|
+
supportsDeny: boolean;
|
|
363
|
+
/** Override level dropdown options (e.g. notes: View / Edit only). */
|
|
364
|
+
permissionLevels?: SharePanelLevelOption[];
|
|
365
|
+
/** i18n key for wildcard app grant label */
|
|
366
|
+
everyoneLabelKey: string;
|
|
367
|
+
/**
|
|
368
|
+
* Optional apps-chart role-OU index for the tenant. When supplied, the panel:
|
|
369
|
+
* <list type="bullet">
|
|
370
|
+
* <item>Renders existing OU grants whose ouId matches a row as <c>RolePrincipal</c>
|
|
371
|
+
* chips ("FFO in Circles") instead of opaque OU labels.</item>
|
|
372
|
+
* <item>Surfaces an "Add role" picker that translates the picked role to its
|
|
373
|
+
* role-OU UUID and dispatches via {@link grantToOu}. Backend stores it as a
|
|
374
|
+
* plain OU grant; <see cref="PermissionResolver"/> resolves at access time via
|
|
375
|
+
* the user's effective OU set.</item>
|
|
376
|
+
* </list>
|
|
377
|
+
* Hosts that don't have access to the apps-chart (or don't want the role flow) omit
|
|
378
|
+
* this input — OU grants then render as generic OU principals.
|
|
379
|
+
*/
|
|
380
|
+
loadRoleOus?: () => Observable<RoleOuLookupRow[]>;
|
|
381
|
+
close: EventEmitter<void>;
|
|
382
|
+
private destroyRef;
|
|
383
|
+
private i18n;
|
|
384
|
+
permissions: _angular_core.WritableSignal<SharePermissionEntry[]>;
|
|
385
|
+
loading: _angular_core.WritableSignal<boolean>;
|
|
386
|
+
searchQuery: string;
|
|
387
|
+
newLevel: string;
|
|
388
|
+
applyToChildren: boolean;
|
|
389
|
+
/** Apps-chart role-OU index, populated lazily when {@link loadRoleOus} is provided. */
|
|
390
|
+
roleOus: _angular_core.WritableSignal<RoleOuLookupRow[]>;
|
|
391
|
+
/** Map<ouId, role row> — derived from roleOus for O(1) lookup during rendering. */
|
|
392
|
+
private readonly roleOusByOuId;
|
|
393
|
+
/** Two-way bound to the role picker's filter input. */
|
|
394
|
+
roleSearchQuery: string;
|
|
395
|
+
/** True while the role picker section is expanded. */
|
|
396
|
+
showRolePicker: _angular_core.WritableSignal<boolean>;
|
|
397
|
+
/**
|
|
398
|
+
* Two-way bound to the "Add as deny" toggle. When true, the next user/OU pick is
|
|
399
|
+
* persisted as a deny grant. Reset to false after each successful grant so the next
|
|
400
|
+
* pick defaults back to allow.
|
|
401
|
+
*/
|
|
402
|
+
addAsDeny: boolean;
|
|
403
|
+
searchResults: _angular_core.WritableSignal<ShareUserResult[]>;
|
|
404
|
+
ouTree: _angular_core.WritableSignal<ShareOuNode[]>;
|
|
405
|
+
showOuPicker: _angular_core.WritableSignal<boolean>;
|
|
406
|
+
chartOptions: _angular_core.WritableSignal<ShareOrgChartOption[]>;
|
|
407
|
+
selectedOrgChartId: _angular_core.WritableSignal<string | null>;
|
|
408
|
+
/** Default-tree id → display name for permission rows (OU grants). */
|
|
409
|
+
private readonly ouLabelById;
|
|
410
|
+
private searchTimeout;
|
|
411
|
+
/** Emits after chart options load; further emissions on user chart changes (no initial null). */
|
|
412
|
+
private readonly selectedChartId$;
|
|
413
|
+
ngOnInit(): void;
|
|
414
|
+
onOrgChartSelectChange(chartId: string | null): void;
|
|
415
|
+
get levelOptions(): SharePanelLevelOption[];
|
|
416
|
+
refreshPermissions(): void;
|
|
417
|
+
onSearchInput(): void;
|
|
418
|
+
onGrantToUser(user: ShareUserResult): void;
|
|
419
|
+
onGrantToOu(ou: ShareOuNode): void;
|
|
420
|
+
/**
|
|
421
|
+
* Add a role grant. Resolves to the role-OU UUID and dispatches via {@link grantToOu}
|
|
422
|
+
* so the backend stores it as a plain OU grant; PermissionResolver matches it at access
|
|
423
|
+
* time via the user's effective OU set (apps-chart computed-from-role membership).
|
|
424
|
+
*/
|
|
425
|
+
onGrantToRole(role: RoleOuLookupRow): void;
|
|
426
|
+
/** Filtered role list — empty query returns all roles, otherwise case-insensitive substring match. */
|
|
427
|
+
filteredRoles(): RoleOuLookupRow[];
|
|
428
|
+
onUpdateLevel(perm: SharePermissionEntry, level: string): void;
|
|
429
|
+
onRevokePermission(perm: SharePermissionEntry): void;
|
|
430
|
+
getPermIcon(perm: SharePermissionEntry): string;
|
|
431
|
+
/** Maps a principal kind to its display icon. Static so hosts can reuse for menus. */
|
|
432
|
+
static principalIcon(principal: SharePrincipal): string;
|
|
433
|
+
/** Logical start padding for OU hierarchy (roots align with section padding). */
|
|
434
|
+
ouIndentStartPx(ou: ShareOuNode): number;
|
|
435
|
+
getPermLabel(perm: SharePermissionEntry): string;
|
|
436
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SharePanelComponent, never>;
|
|
437
|
+
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; }; "supportsDeny": { "alias": "supportsDeny"; "required": false; }; "permissionLevels": { "alias": "permissionLevels"; "required": false; }; "everyoneLabelKey": { "alias": "everyoneLabelKey"; "required": false; }; "loadRoleOus": { "alias": "loadRoleOus"; "required": false; }; }, { "close": "close"; }, never, never, true, never>;
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* One row in the role-OU lookup table the share panel uses to render OU grants as Role
|
|
441
|
+
* chips and to drive the "Add role" picker. Hosts source this from
|
|
442
|
+
* <c>OrgStructureApiService.listRoleOus()</c> in the desktop shell.
|
|
443
|
+
*/
|
|
444
|
+
interface RoleOuLookupRow {
|
|
445
|
+
/** Apps-chart role-OU UUID — what backend stores in `grantedToOuId` / `sharedWithOuId`. */
|
|
446
|
+
ouId: string;
|
|
447
|
+
appId: string;
|
|
448
|
+
roleKey: string;
|
|
449
|
+
/** Display name resolved by the host (e.g. "FFO" or "Future Foresight Officer"). */
|
|
450
|
+
displayName: string;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/** Bucket the picker is currently editing. Exported so hosts can drive `editTarget` if needed. */
|
|
454
|
+
type AudienceEditTarget = 'includes' | 'excludes';
|
|
455
|
+
/**
|
|
456
|
+
* Generic builder for {@link AudienceFilter}. Accepts an initial value, emits both the
|
|
457
|
+
* full filter and a validity flag on every change. Reuses the same callback shapes as
|
|
458
|
+
* {@link SharePanelComponent} so a host already wiring the share panel can drop this in
|
|
459
|
+
* with no extra plumbing.
|
|
460
|
+
*
|
|
461
|
+
* Compaction policy: when the operator picks the same kind multiple times, the component
|
|
462
|
+
* merges into a single term where it's safe to do so:
|
|
463
|
+
* <list type="bullet">
|
|
464
|
+
* <item><b>users</b>: dedupes user ids into one {@link UsersTerm}.</item>
|
|
465
|
+
* <item><b>roles</b>: per `appId`, dedupes role keys into one {@link RolesTerm}.</item>
|
|
466
|
+
* <item><b>ou</b>: per `(chartId, includeDescendants)`, dedupes OU ids into one {@link OuTerm}.</item>
|
|
467
|
+
* <item><b>app-everyone / chart / preset</b>: idempotent per kind+key.</item>
|
|
468
|
+
* </list>
|
|
469
|
+
* This keeps the term count well below {@link AUDIENCE_LIMITS.maxTermsPerFilter} for typical
|
|
470
|
+
* use, and matches how the backend resolver would have unioned them anyway.
|
|
471
|
+
*/
|
|
472
|
+
declare class AudienceBuilderComponent implements OnInit, OnChanges, OnDestroy, ControlValueAccessor, Validator {
|
|
473
|
+
/** Initial audience filter. Two-way: changes emit via {@link audienceChange}. */
|
|
474
|
+
value: AudienceFilter | null | undefined;
|
|
475
|
+
/** Hide the Excludes section entirely (e.g. for simple "send to" pickers). */
|
|
476
|
+
showExcludes: boolean;
|
|
477
|
+
/**
|
|
478
|
+
* Which term kinds are selectable. Defaults to all six. Hosts that don't have a
|
|
479
|
+
* concept of `chart` or `preset` should narrow this down to keep the UI focused.
|
|
480
|
+
*/
|
|
481
|
+
supportedKinds: readonly AudienceTermKind[];
|
|
482
|
+
/**
|
|
483
|
+
* Anchor user id used when adding a `preset` term. Typically `auth.currentUser().id`.
|
|
484
|
+
* If null and the operator picks a preset, the term is rejected with an inline error.
|
|
485
|
+
*/
|
|
486
|
+
selfUserId: string | null;
|
|
487
|
+
/** App ids the host wants to expose as `app-everyone` options. */
|
|
488
|
+
appEveryoneOptions: {
|
|
489
|
+
appId: string;
|
|
490
|
+
displayName: string;
|
|
491
|
+
}[];
|
|
492
|
+
searchUsers: (query: string) => Observable<ShareUserResult[]>;
|
|
493
|
+
loadOuTree: (chartId: string | null) => Observable<ShareOuNode[]>;
|
|
494
|
+
loadChartOptions: () => Observable<ShareOrgChartOption[]>;
|
|
495
|
+
/**
|
|
496
|
+
* Optional apps-chart role-OU index. When supplied, the picker exposes a "Roles" tab
|
|
497
|
+
* surfacing role chips; without it, that tab is hidden even if `'roles'` is in
|
|
498
|
+
* {@link supportedKinds}.
|
|
499
|
+
*/
|
|
500
|
+
loadRoleOus?: () => Observable<RoleOuLookupRow[]>;
|
|
501
|
+
/** Fires on every successful add/remove with the current filter. */
|
|
502
|
+
audienceChange: EventEmitter<AudienceFilter>;
|
|
503
|
+
/**
|
|
504
|
+
* True when {@link AudienceFilter.includes} is non-empty and the term count is within
|
|
505
|
+
* {@link AUDIENCE_LIMITS.maxTermsPerFilter}. Hosts should disable submit when false.
|
|
506
|
+
*/
|
|
507
|
+
validityChange: EventEmitter<boolean>;
|
|
508
|
+
private readonly destroyRef;
|
|
509
|
+
private readonly i18n;
|
|
510
|
+
readonly includes: _angular_core.WritableSignal<AudienceTerm[]>;
|
|
511
|
+
readonly excludes: _angular_core.WritableSignal<AudienceTerm[]>;
|
|
512
|
+
readonly editTarget: _angular_core.WritableSignal<AudienceEditTarget>;
|
|
513
|
+
readonly pickerOpen: _angular_core.WritableSignal<boolean>;
|
|
514
|
+
readonly activeKind: _angular_core.WritableSignal<"ou" | "app-everyone" | "users" | "roles" | "chart" | "preset">;
|
|
515
|
+
readonly userSearchQuery: _angular_core.WritableSignal<string>;
|
|
516
|
+
readonly userSearchResults: _angular_core.WritableSignal<ShareUserResult[]>;
|
|
517
|
+
private readonly userSearch$;
|
|
518
|
+
readonly roleOus: _angular_core.WritableSignal<RoleOuLookupRow[]>;
|
|
519
|
+
readonly roleSearchQuery: _angular_core.WritableSignal<string>;
|
|
520
|
+
/**
|
|
521
|
+
* Filtered role list as a `computed` so the template doesn't re-call a method on every
|
|
522
|
+
* change-detection cycle.
|
|
523
|
+
*/
|
|
524
|
+
readonly filteredRoles: _angular_core.Signal<RoleOuLookupRow[]>;
|
|
525
|
+
readonly ouTree: _angular_core.WritableSignal<ShareOuNode[]>;
|
|
526
|
+
readonly chartOptions: _angular_core.WritableSignal<ShareOrgChartOption[]>;
|
|
527
|
+
readonly selectedChartId: _angular_core.WritableSignal<string | null>;
|
|
528
|
+
readonly ouIncludeDescendants: _angular_core.WritableSignal<boolean>;
|
|
529
|
+
/**
|
|
530
|
+
* Chart-term picker entries — filters out the null-id default chart since `ChartTerm`
|
|
531
|
+
* requires a real Guid. Avoids the UX trap where clicking "Default Company" surfaces
|
|
532
|
+
* an inline error.
|
|
533
|
+
*/
|
|
534
|
+
readonly chartTermOptions: _angular_core.Signal<ShareOrgChartOption[]>;
|
|
535
|
+
private readonly selectedChartId$;
|
|
536
|
+
readonly presetOptions: readonly ["self", "ou-managers", "direct-reports"];
|
|
537
|
+
readonly errorKey: _angular_core.WritableSignal<string | null>;
|
|
538
|
+
/** True when the host disabled this control (template-driven `[disabled]` or reactive). */
|
|
539
|
+
readonly disabled: _angular_core.WritableSignal<boolean>;
|
|
540
|
+
private onChange;
|
|
541
|
+
private onTouched;
|
|
542
|
+
private onValidatorChange;
|
|
543
|
+
ngOnInit(): void;
|
|
544
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
545
|
+
ngOnDestroy(): void;
|
|
546
|
+
/**
|
|
547
|
+
* Replaces the in-component state from an external value. Null-safe — if the host
|
|
548
|
+
* passes <c>null</c> or <c>undefined</c> (e.g. while a parent signal is loading),
|
|
549
|
+
* we treat it as an empty filter rather than crashing.
|
|
550
|
+
*/
|
|
551
|
+
private applyValue;
|
|
552
|
+
openPicker(target: AudienceEditTarget): void;
|
|
553
|
+
closePicker(): void;
|
|
554
|
+
selectKind(kind: AudienceTermKind): void;
|
|
555
|
+
onUserSearchInput(): void;
|
|
556
|
+
pickUser(user: ShareUserResult): void;
|
|
557
|
+
pickRole(role: RoleOuLookupRow): void;
|
|
558
|
+
onChartChange(chartId: string | null): void;
|
|
559
|
+
pickOu(ou: ShareOuNode): void;
|
|
560
|
+
ouIndentStartPx(ou: ShareOuNode): number;
|
|
561
|
+
pickAppEveryone(appId: string): void;
|
|
562
|
+
pickChart(chartId: string | null): void;
|
|
563
|
+
pickPreset(preset: AudiencePresetKind): void;
|
|
564
|
+
removeTerm(target: AudienceEditTarget, index: number): void;
|
|
565
|
+
removeUserId(target: AudienceEditTarget, termIndex: number, userId: string): void;
|
|
566
|
+
removeRoleKey(target: AudienceEditTarget, termIndex: number, roleKey: string): void;
|
|
567
|
+
removeOuId(target: AudienceEditTarget, termIndex: number, ouId: string): void;
|
|
568
|
+
/** Returns the current filter snapshot — useful for hosts that want to peek without subscribing. */
|
|
569
|
+
snapshot(): AudienceFilter;
|
|
570
|
+
/**
|
|
571
|
+
* Called by the forms infrastructure to push a new value into the control. Mirrors the
|
|
572
|
+
* `[value]` setter path — re-uses `applyValue` so template-driven and reactive callers
|
|
573
|
+
* converge on the same hydration code.
|
|
574
|
+
*/
|
|
575
|
+
writeValue(value: AudienceFilter | null | undefined): void;
|
|
576
|
+
registerOnChange(fn: (value: AudienceFilter) => void): void;
|
|
577
|
+
registerOnTouched(fn: () => void): void;
|
|
578
|
+
setDisabledState(isDisabled: boolean): void;
|
|
579
|
+
/**
|
|
580
|
+
* Aligns Angular's reactive-forms validity with the component's own `validityChange`
|
|
581
|
+
* output. Returns `audienceRequired` when includes is empty (the canonical "zero
|
|
582
|
+
* recipients" guard) and `audienceTooManyTerms` when over the per-filter cap.
|
|
583
|
+
* <br>
|
|
584
|
+
* The output-event path (<see cref="emitState"/>) reuses this method so there is ONE
|
|
585
|
+
* definition of "valid" — the classic "two almost-identical validators drifted" bug
|
|
586
|
+
* cannot recur here.
|
|
587
|
+
*/
|
|
588
|
+
validate(_: AbstractControl): ValidationErrors | null;
|
|
589
|
+
private validateFilter;
|
|
590
|
+
registerOnValidatorChange(fn: () => void): void;
|
|
591
|
+
ouLabel(ouId: string): string;
|
|
592
|
+
roleLabel(appId: string, roleKey: string): string;
|
|
593
|
+
appLabel(appId: string): string;
|
|
594
|
+
chartLabel(chartId: string): string;
|
|
595
|
+
/**
|
|
596
|
+
* Locale key for a term kind. Replaces hyphens with underscores so the JSON file uses
|
|
597
|
+
* one consistent naming convention (`audience.kind_app_everyone`, not the hyphen variant).
|
|
598
|
+
*/
|
|
599
|
+
kindLocaleKey(kind: AudienceTermKind): string;
|
|
600
|
+
/** Same convention as {@link kindLocaleKey} but for preset names. */
|
|
601
|
+
presetLocaleKey(preset: AudiencePresetKind): string;
|
|
602
|
+
/** Picon icon CSS class for a term kind tab — kept here so the template stays declarative. */
|
|
603
|
+
kindIconClass(kind: AudienceTermKind): string;
|
|
604
|
+
private addToActiveBucket;
|
|
605
|
+
private editTermAt;
|
|
606
|
+
private totalTermCount;
|
|
607
|
+
private upsertUsersTerm;
|
|
608
|
+
private upsertRolesTerm;
|
|
609
|
+
private upsertOuTerm;
|
|
610
|
+
private upsertAppEveryoneTerm;
|
|
611
|
+
private upsertChartTerm;
|
|
612
|
+
private upsertPresetTerm;
|
|
613
|
+
private buildFilter;
|
|
614
|
+
private emitState;
|
|
615
|
+
/**
|
|
616
|
+
* Emits ONLY the validity signal (component output + forms-validator hook). Used by
|
|
617
|
+
* <see cref="ngOnChanges"/> when the host pushes a new value: the host already knows the
|
|
618
|
+
* value it sent, so re-firing onChange / audienceChange is redundant and risks feedback
|
|
619
|
+
* loops with two-way bindings; but the validity flag may genuinely have flipped and the
|
|
620
|
+
* host needs that to enable / disable submit.
|
|
621
|
+
*/
|
|
622
|
+
private emitValidityOnly;
|
|
623
|
+
private computeValidity;
|
|
624
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AudienceBuilderComponent, never>;
|
|
625
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AudienceBuilderComponent, "fly-audience-builder", never, { "value": { "alias": "value"; "required": false; }; "showExcludes": { "alias": "showExcludes"; "required": false; }; "supportedKinds": { "alias": "supportedKinds"; "required": false; }; "selfUserId": { "alias": "selfUserId"; "required": false; }; "appEveryoneOptions": { "alias": "appEveryoneOptions"; "required": false; }; "searchUsers": { "alias": "searchUsers"; "required": true; }; "loadOuTree": { "alias": "loadOuTree"; "required": true; }; "loadChartOptions": { "alias": "loadChartOptions"; "required": true; }; "loadRoleOus": { "alias": "loadRoleOus"; "required": false; }; }, { "audienceChange": "audienceChange"; "validityChange": "validityChange"; }, never, never, true, never>;
|
|
626
|
+
}
|
|
627
|
+
|
|
124
628
|
/**
|
|
125
629
|
* Describes a Business or Supporting App remote from the Controller App's
|
|
126
630
|
* `GET /api/apps/manifest` endpoint. The shell loads the component at runtime
|
|
@@ -511,73 +1015,6 @@ declare class MessageBoxComponent implements AfterViewInit {
|
|
|
511
1015
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MessageBoxComponent, "fly-message-box", never, {}, {}, never, never, true, never>;
|
|
512
1016
|
}
|
|
513
1017
|
|
|
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
1018
|
/** Full-bleed loading overlay for window content (shell) or embedded hosts. */
|
|
582
1019
|
declare class FlyBlockUiComponent {
|
|
583
1020
|
/** When false, the overlay is not rendered (host may use @if instead). */
|
|
@@ -726,6 +1163,19 @@ declare class FlyFileUploadComponent {
|
|
|
726
1163
|
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; }; "existingFileIds": { "alias": "existingFileIds"; "required": false; "isSignal": true; }; "files": { "alias": "files"; "required": false; "isSignal": true; }; }, { "files": "filesChange"; "filesChanged": "filesChanged"; }, never, never, true, never>;
|
|
727
1164
|
}
|
|
728
1165
|
|
|
729
|
-
|
|
730
|
-
|
|
1166
|
+
/**
|
|
1167
|
+
* Stable error codes returned by audience-aware backend endpoints. Mirror of
|
|
1168
|
+
* `Fly.Shared.Core.Audience.AudienceErrorCodes`. Compare on these strings, not on HTTP
|
|
1169
|
+
* status, so localized messages can change without breaking integrations.
|
|
1170
|
+
*/
|
|
1171
|
+
declare const AUDIENCE_ERROR_CODES: {
|
|
1172
|
+
readonly invalidFilter: "INVALID_AUDIENCE_FILTER";
|
|
1173
|
+
readonly audienceTooLarge: "AUDIENCE_TOO_LARGE";
|
|
1174
|
+
readonly resolverUnavailable: "AUDIENCE_RESOLVER_UNAVAILABLE";
|
|
1175
|
+
readonly invalidAudienceKind: "INVALID_AUDIENCE_KIND";
|
|
1176
|
+
};
|
|
1177
|
+
type AudienceErrorCode = (typeof AUDIENCE_ERROR_CODES)[keyof typeof AUDIENCE_ERROR_CODES];
|
|
1178
|
+
|
|
1179
|
+
export { AUDIENCE_ERROR_CODES, AUDIENCE_LIMITS, AUDIENCE_PRESETS, AUDIENCE_TERM_KINDS, AudienceBuilderComponent, AuthService, ContextMenuComponent, DEFAULT_FLY_THEME_MODE, DialogResult, FLY_THEME_MODE_IDS, FlyBlockUiComponent, FlyFileUploadComponent, FlyImageUploadComponent, FlyThemeService, I18nService, LAUNCH_CONTEXT, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, RTL_LOCALE_SET, SHARE_PANEL_DEFAULT_FILE_LEVELS, SharePanelComponent, StandaloneWindowManagerService, TranslatePipe, WINDOW_DATA, WindowManagerService, isRtlLocale, normalizeFlyTheme };
|
|
1180
|
+
export type { AppEveryonePrincipal, AppEveryoneTerm, AudienceEditTarget, AudienceErrorCode, AudienceFilter, AudienceOptions, AudiencePresetKind, AudienceTerm, AudienceTermKind, ChartTerm, ChildWindowData, ContextMenuItem, ContextMenuSection, DesktopApp, DesktopAppKind, FlyFileInfo, FlyThemeMode, LaunchContext, LoadBundleOptions, MessageBoxButton, MessageBoxOptions, MockAuthConfig, OpenWindowOptions, OuPrincipal, OuTerm, PresetTerm, RemoteAppDef, RoleOuLookupRow, RolePrincipal, RolesTerm, ShareOrgChartOption, ShareOuNode, SharePanelLevelOption, SharePermissionEntry, SharePrincipal, SharePrincipalKind, ShareUserResult, User, UserPrincipal, UsersTerm, WindowInstance, WindowState };
|
|
731
1181
|
//# sourceMappingURL=mohamedatia-fly-design-system.d.ts.map
|