@flyos/design-system 2.1.0 → 2.2.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.
|
@@ -3,7 +3,6 @@ import { InjectionToken, signal, computed, Injectable, inject, TemplateRef, View
|
|
|
3
3
|
import { catchError, throwError, Subject, from, firstValueFrom, of, Observable, map, ReplaySubject, retry, timer, tap } from 'rxjs';
|
|
4
4
|
import { HttpClient, HttpParams, HttpHeaders, HttpErrorResponse, HttpEventType } from '@angular/common/http';
|
|
5
5
|
import { switchMap, debounceTime, distinctUntilChanged, filter, catchError as catchError$1 } from 'rxjs/operators';
|
|
6
|
-
import { HubConnectionBuilder, HttpTransportType, LogLevel, HubConnectionState } from '@microsoft/signalr';
|
|
7
6
|
import { Router, NavigationEnd } from '@angular/router';
|
|
8
7
|
import * as i1$1 from '@angular/common';
|
|
9
8
|
import { isPlatformBrowser, NgComponentOutlet, CommonModule, DOCUMENT, NgTemplateOutlet, NgClass, DatePipe } from '@angular/common';
|
|
@@ -48,7 +47,7 @@ import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
|
|
|
48
47
|
// tools/publish-library.ps1 at bump time, and asserted by the spec beside this file.
|
|
49
48
|
// Used only for the diagnostic message; the duplicate-instance detection itself is
|
|
50
49
|
// version-agnostic, so a stale literal misnames a fork rather than hiding one.
|
|
51
|
-
const FLY_DS_VERSION = '2.
|
|
50
|
+
const FLY_DS_VERSION = '2.2.0';
|
|
52
51
|
const FLY_DS_REGISTRY_KEY = '__FLY_DS_INSTANCES__';
|
|
53
52
|
/**
|
|
54
53
|
* Records this design-system instance on the shared `scope` and returns the
|
|
@@ -708,23 +707,42 @@ const FLY_STANDALONE_AUTH_CONFIG = new InjectionToken('FLY_STANDALONE_AUTH_CONFI
|
|
|
708
707
|
* across replicas). The bearer rides as `?access_token=` via the {@link AuthService} token. Idempotent
|
|
709
708
|
* `connect()`; safe to call once auth is established.</p>
|
|
710
709
|
*
|
|
711
|
-
* <p>Requires `@microsoft/signalr` (declared a peer dependency of the design system)
|
|
710
|
+
* <p>Requires `@microsoft/signalr` (declared a peer dependency of the design system). The package is
|
|
711
|
+
* imported DYNAMICALLY on first `connect()`: this client sits in the core design system, which every
|
|
712
|
+
* boot loads, and a static import made `@microsoft/signalr` (~14 KB compressed) part of every boot's
|
|
713
|
+
* shared-module wave even though no bytes are needed until the hub actually connects. Under Native
|
|
714
|
+
* Federation the dynamic import resolves through the same import map / shared singleton as a static
|
|
715
|
+
* one — only the WHEN changes.</p>
|
|
712
716
|
*/
|
|
713
717
|
class FlyHubClient {
|
|
714
718
|
auth = inject(AuthService);
|
|
715
719
|
connection = null;
|
|
720
|
+
/** In-flight first connect (module import + build + start). Guards double-connect. */
|
|
721
|
+
connecting = null;
|
|
722
|
+
/** Set when disconnect() arrives while the first connect is still importing/starting. */
|
|
723
|
+
abandonConnect = false;
|
|
716
724
|
connected = signal(false, ...(ngDevMode ? [{ debugName: "connected" }] : /* istanbul ignore next */ []));
|
|
717
725
|
_authRefresh$ = new Subject();
|
|
718
726
|
/** Emits when the server signals this user's authorization shape changed. */
|
|
719
727
|
authRefresh$ = this._authRefresh$.asObservable();
|
|
720
728
|
/** Open the hub connection (idempotent). No-op without an access token. */
|
|
721
729
|
connect() {
|
|
722
|
-
if (this.connection !== null)
|
|
730
|
+
if (this.connection !== null || this.connecting !== null)
|
|
723
731
|
return;
|
|
724
732
|
const token = this.auth.accessToken();
|
|
725
733
|
if (!token)
|
|
726
734
|
return;
|
|
727
|
-
this.
|
|
735
|
+
this.abandonConnect = false;
|
|
736
|
+
this.connecting = this.doConnect()
|
|
737
|
+
.catch(() => this.connected.set(false))
|
|
738
|
+
.finally(() => { this.connecting = null; });
|
|
739
|
+
}
|
|
740
|
+
async doConnect() {
|
|
741
|
+
const { HubConnectionBuilder, HttpTransportType, LogLevel } = await import('@microsoft/signalr');
|
|
742
|
+
// A disconnect() may have raced the import — stay down.
|
|
743
|
+
if (this.abandonConnect)
|
|
744
|
+
return;
|
|
745
|
+
const connection = new HubConnectionBuilder()
|
|
728
746
|
.withUrl('/hubs/fly', {
|
|
729
747
|
accessTokenFactory: () => this.auth.accessToken() ?? '',
|
|
730
748
|
skipNegotiation: true,
|
|
@@ -733,15 +751,25 @@ class FlyHubClient {
|
|
|
733
751
|
.withAutomaticReconnect([0, 2000, 5000, 10000, 30000])
|
|
734
752
|
.configureLogging(LogLevel.Warning)
|
|
735
753
|
.build();
|
|
736
|
-
this.connection
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
this.
|
|
754
|
+
this.connection = connection;
|
|
755
|
+
connection.on('AuthRefresh', (payload) => this._authRefresh$.next(payload ?? {}));
|
|
756
|
+
connection.onreconnected(() => this.connected.set(true));
|
|
757
|
+
connection.onreconnecting(() => this.connected.set(false));
|
|
758
|
+
connection.onclose(() => { this.connected.set(false); this.connection = null; });
|
|
759
|
+
await connection.start()
|
|
741
760
|
.then(() => this.connected.set(true))
|
|
742
761
|
.catch(() => this.connected.set(false));
|
|
743
762
|
}
|
|
744
763
|
async disconnect() {
|
|
764
|
+
// A first connect still importing/starting: mark it abandoned and wait it out,
|
|
765
|
+
// so a connection can't surface after the caller believed it closed.
|
|
766
|
+
if (this.connecting) {
|
|
767
|
+
this.abandonConnect = true;
|
|
768
|
+
try {
|
|
769
|
+
await this.connecting;
|
|
770
|
+
}
|
|
771
|
+
catch { /* connect failure — already down */ }
|
|
772
|
+
}
|
|
745
773
|
if (this.connection) {
|
|
746
774
|
const c = this.connection;
|
|
747
775
|
this.connection = null;
|
|
@@ -753,7 +781,11 @@ class FlyHubClient {
|
|
|
753
781
|
}
|
|
754
782
|
}
|
|
755
783
|
get isConnected() {
|
|
756
|
-
|
|
784
|
+
// String-compare instead of `=== HubConnectionState.Connected`: the enum is a
|
|
785
|
+
// VALUE import, and pulling it statically would re-create the eager edge this
|
|
786
|
+
// client exists to avoid. `HubConnectionState` is a string enum — its
|
|
787
|
+
// `Connected` member is the literal 'Connected'.
|
|
788
|
+
return this.connection?.state === 'Connected';
|
|
757
789
|
}
|
|
758
790
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: FlyHubClient, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
759
791
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: FlyHubClient, providedIn: 'root' });
|
|
@@ -4038,6 +4070,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImpo
|
|
|
4038
4070
|
args: [{ providedIn: 'root' }]
|
|
4039
4071
|
}] });
|
|
4040
4072
|
|
|
4073
|
+
const ENTITY_LINK_LAUNCHER = new InjectionToken('ENTITY_LINK_LAUNCHER');
|
|
4074
|
+
|
|
4041
4075
|
/**
|
|
4042
4076
|
* Publishes a {@link WindowHelpHint} for a window so the shell's titlebar Help
|
|
4043
4077
|
* button deeplinks the help-center reader to the article most relevant to where
|
|
@@ -4771,6 +4805,18 @@ function _validateHref(href, remoteBaseUrl) {
|
|
|
4771
4805
|
async function loadRemoteStyles(appId, remoteBaseUrl, opts = {}) {
|
|
4772
4806
|
if (typeof document === 'undefined')
|
|
4773
4807
|
return; // SSR guard
|
|
4808
|
+
// Already-applied fast path — see the `preferApplied` option docs.
|
|
4809
|
+
if (opts.preferApplied) {
|
|
4810
|
+
const applied = document.head.querySelector(`link[data-fly-app="${CSS.escape(appId)}"], style[data-fly-app="${CSS.escape(appId)}"]`);
|
|
4811
|
+
if (applied) {
|
|
4812
|
+
// `.sheet` is non-null once the stylesheet is parsed — the bytes signal
|
|
4813
|
+
// for an element whose load event may already have fired.
|
|
4814
|
+
if (!opts.awaitApplied || applied.sheet)
|
|
4815
|
+
return;
|
|
4816
|
+
await _awaitLoadCapped(applied, APPLY_CAP_MS);
|
|
4817
|
+
return;
|
|
4818
|
+
}
|
|
4819
|
+
}
|
|
4774
4820
|
// Resolve relative remoteBaseUrl (e.g. '/circles-dev') against the current
|
|
4775
4821
|
// page origin so all downstream URL operations (fetch, origin check) receive
|
|
4776
4822
|
// an absolute URL. Absolute inputs are returned unchanged by new URL().
|
|
@@ -4853,6 +4899,58 @@ async function loadRemoteStyles(appId, remoteBaseUrl, opts = {}) {
|
|
|
4853
4899
|
}
|
|
4854
4900
|
}
|
|
4855
4901
|
}
|
|
4902
|
+
/**
|
|
4903
|
+
* Warms a remote's stylesheet into the HTTP cache WITHOUT applying it.
|
|
4904
|
+
*
|
|
4905
|
+
* Discovery is identical to {@link loadRemoteStyles} (fetch the remote's
|
|
4906
|
+
* `index.html`, scan for the hashed stylesheet, validate the href), but the
|
|
4907
|
+
* CSS is then fetched with a plain `fetch()` and the body discarded — nothing
|
|
4908
|
+
* is injected into `document.head`.
|
|
4909
|
+
*
|
|
4910
|
+
* Why this exists: applying a stylesheet registers its `@font-face` rules
|
|
4911
|
+
* document-wide, and the browser then downloads every face some text in the
|
|
4912
|
+
* document matches. The shell's deferred warm-up used to APPLY every
|
|
4913
|
+
* registered-but-unopened remote's stylesheet, which on a Circles deep link
|
|
4914
|
+
* pulled Thoughts' self-hosted Inter + Noto Kufi woff2 (~71 KB) into the LCP
|
|
4915
|
+
* window — for an app with no open window (stg trace, 2026-08-15). A cache
|
|
4916
|
+
* prefetch keeps the later real apply (window open, `loadRemoteStyles` with
|
|
4917
|
+
* `awaitApplied`) near-instant while deferring the font cost to the first
|
|
4918
|
+
* open, where the faces are actually about to be used.
|
|
4919
|
+
*
|
|
4920
|
+
* The fetch uses `mode: 'cors'` + `credentials: 'omit'` so its cache entry
|
|
4921
|
+
* matches the apply path's `<link crossorigin="anonymous">` request. (The
|
|
4922
|
+
* legacy `<style>@import` fallback path is no-cors and would not hit this
|
|
4923
|
+
* entry — modern browsers all take the `link[layer]` path, so the fallback
|
|
4924
|
+
* merely re-fetches, same as before.)
|
|
4925
|
+
*
|
|
4926
|
+
* Fail-soft and idempotent: errors are swallowed (the open path retries
|
|
4927
|
+
* loudly), and an already-applied appId is a no-op.
|
|
4928
|
+
*/
|
|
4929
|
+
async function prefetchRemoteStyles(appId, remoteBaseUrl) {
|
|
4930
|
+
if (typeof document === 'undefined')
|
|
4931
|
+
return; // SSR guard
|
|
4932
|
+
// Already applied — the bytes are necessarily present; nothing to warm.
|
|
4933
|
+
const escapedId = CSS.escape(appId);
|
|
4934
|
+
if (document.head.querySelector(`link[data-fly-app="${escapedId}"], style[data-fly-app="${escapedId}"]`)) {
|
|
4935
|
+
return;
|
|
4936
|
+
}
|
|
4937
|
+
const absoluteBase = new URL(remoteBaseUrl, location.href).href.replace(/\/$/, '');
|
|
4938
|
+
let fetchPromise = _inFlight.get(appId);
|
|
4939
|
+
if (!fetchPromise) {
|
|
4940
|
+
fetchPromise = _discoverStylesheetHref(appId, absoluteBase);
|
|
4941
|
+
_inFlight.set(appId, fetchPromise);
|
|
4942
|
+
}
|
|
4943
|
+
const href = await fetchPromise;
|
|
4944
|
+
_inFlight.delete(appId);
|
|
4945
|
+
if (!href)
|
|
4946
|
+
return;
|
|
4947
|
+
try {
|
|
4948
|
+
await fetch(href, { mode: 'cors', credentials: 'omit', cache: 'default' });
|
|
4949
|
+
}
|
|
4950
|
+
catch {
|
|
4951
|
+
/* unreachable remote — the open path retries and reports */
|
|
4952
|
+
}
|
|
4953
|
+
}
|
|
4856
4954
|
/**
|
|
4857
4955
|
* Removes the injected stylesheet element (either `<link>` or `<style>`) for
|
|
4858
4956
|
* `appId` from `document.head` and clears all internal state for this appId.
|
|
@@ -5003,10 +5101,10 @@ class FlyRemoteRouterOutletComponent {
|
|
|
5003
5101
|
});
|
|
5004
5102
|
}
|
|
5005
5103
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: FlyRemoteRouterOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5006
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: FlyRemoteRouterOutletComponent, isStandalone: true, selector: "fly-remote-router-outlet", ngImport: i0, template: `
|
|
5007
|
-
@if (rendered(); as cmp) {
|
|
5008
|
-
<ng-container *ngComponentOutlet="cmp" />
|
|
5009
|
-
}
|
|
5104
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: FlyRemoteRouterOutletComponent, isStandalone: true, selector: "fly-remote-router-outlet", ngImport: i0, template: `
|
|
5105
|
+
@if (rendered(); as cmp) {
|
|
5106
|
+
<ng-container *ngComponentOutlet="cmp" />
|
|
5107
|
+
}
|
|
5010
5108
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5011
5109
|
}
|
|
5012
5110
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: FlyRemoteRouterOutletComponent, decorators: [{
|
|
@@ -5016,10 +5114,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImpo
|
|
|
5016
5114
|
standalone: true,
|
|
5017
5115
|
imports: [NgComponentOutlet],
|
|
5018
5116
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5019
|
-
template: `
|
|
5020
|
-
@if (rendered(); as cmp) {
|
|
5021
|
-
<ng-container *ngComponentOutlet="cmp" />
|
|
5022
|
-
}
|
|
5117
|
+
template: `
|
|
5118
|
+
@if (rendered(); as cmp) {
|
|
5119
|
+
<ng-container *ngComponentOutlet="cmp" />
|
|
5120
|
+
}
|
|
5023
5121
|
`,
|
|
5024
5122
|
}]
|
|
5025
5123
|
}], ctorParameters: () => [] });
|
|
@@ -9447,11 +9545,11 @@ class FlyBlockUiComponent {
|
|
|
9447
9545
|
return k && k.length > 0 ? k : 'common.loading';
|
|
9448
9546
|
}, ...(ngDevMode ? [{ debugName: "resolvedMessageKey" }] : /* istanbul ignore next */ []));
|
|
9449
9547
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: FlyBlockUiComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9450
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: FlyBlockUiComponent, isStandalone: true, selector: "fly-block-ui", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: true, transformFunction: null }, messageKey: { classPropertyName: "messageKey", publicName: "messageKey", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (active()) {\n <div\n class=\"fly-block-ui\"\n role=\"status\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n [attr.aria-label]=\"resolvedMessageKey() | translate\">\n <div class=\"fly-block-ui__card\">\n <i class=\"pi pi-spin pi-spinner fly-block-ui__spinner\" aria-hidden=\"true\"></i>\n <span class=\"fly-block-ui__text\">{{ resolvedMessageKey() | translate }}</span>\n </div>\n </div>\n}\n", styles: [":host{display:contents}.fly-block-ui{position:absolute;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--surface-ground, #0c0c12) 58%,transparent);-webkit-backdrop-filter:blur(6px) saturate(120%);backdrop-filter:blur(6px) saturate(120%)}.fly-block-ui__card{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 36px;border-radius:12px;background:var(--glass-bg, rgba(255, 255, 255, .14));border:1px solid var(--glass-border, rgba(255, 255, 255, .22));box-shadow:0 8px 32px #0000002e}.fly-block-ui__spinner{font-size:2rem;color:var(--primary-color)}.fly-block-ui__text{font-size:.875rem;color:var(--text-color-secondary)}\n"], dependencies: [{ kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
9548
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: FlyBlockUiComponent, isStandalone: true, selector: "fly-block-ui", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: true, transformFunction: null }, messageKey: { classPropertyName: "messageKey", publicName: "messageKey", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (active()) {\r\n <div\r\n class=\"fly-block-ui\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n aria-busy=\"true\"\r\n [attr.aria-label]=\"resolvedMessageKey() | translate\">\r\n <div class=\"fly-block-ui__card\">\r\n <i class=\"pi pi-spin pi-spinner fly-block-ui__spinner\" aria-hidden=\"true\"></i>\r\n <span class=\"fly-block-ui__text\">{{ resolvedMessageKey() | translate }}</span>\r\n </div>\r\n </div>\r\n}\r\n", styles: [":host{display:contents}.fly-block-ui{position:absolute;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--surface-ground, #0c0c12) 58%,transparent);-webkit-backdrop-filter:blur(6px) saturate(120%);backdrop-filter:blur(6px) saturate(120%)}.fly-block-ui__card{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 36px;border-radius:12px;background:var(--glass-bg, rgba(255, 255, 255, .14));border:1px solid var(--glass-border, rgba(255, 255, 255, .22));box-shadow:0 8px 32px #0000002e}.fly-block-ui__spinner{font-size:2rem;color:var(--primary-color)}.fly-block-ui__text{font-size:.875rem;color:var(--text-color-secondary)}\n"], dependencies: [{ kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
9451
9549
|
}
|
|
9452
9550
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: FlyBlockUiComponent, decorators: [{
|
|
9453
9551
|
type: Component,
|
|
9454
|
-
args: [{ selector: 'fly-block-ui', standalone: true, imports: [TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (active()) {\n <div\n class=\"fly-block-ui\"\n role=\"status\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n [attr.aria-label]=\"resolvedMessageKey() | translate\">\n <div class=\"fly-block-ui__card\">\n <i class=\"pi pi-spin pi-spinner fly-block-ui__spinner\" aria-hidden=\"true\"></i>\n <span class=\"fly-block-ui__text\">{{ resolvedMessageKey() | translate }}</span>\n </div>\n </div>\n}\n", styles: [":host{display:contents}.fly-block-ui{position:absolute;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--surface-ground, #0c0c12) 58%,transparent);-webkit-backdrop-filter:blur(6px) saturate(120%);backdrop-filter:blur(6px) saturate(120%)}.fly-block-ui__card{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 36px;border-radius:12px;background:var(--glass-bg, rgba(255, 255, 255, .14));border:1px solid var(--glass-border, rgba(255, 255, 255, .22));box-shadow:0 8px 32px #0000002e}.fly-block-ui__spinner{font-size:2rem;color:var(--primary-color)}.fly-block-ui__text{font-size:.875rem;color:var(--text-color-secondary)}\n"] }]
|
|
9552
|
+
args: [{ selector: 'fly-block-ui', standalone: true, imports: [TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (active()) {\r\n <div\r\n class=\"fly-block-ui\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n aria-busy=\"true\"\r\n [attr.aria-label]=\"resolvedMessageKey() | translate\">\r\n <div class=\"fly-block-ui__card\">\r\n <i class=\"pi pi-spin pi-spinner fly-block-ui__spinner\" aria-hidden=\"true\"></i>\r\n <span class=\"fly-block-ui__text\">{{ resolvedMessageKey() | translate }}</span>\r\n </div>\r\n </div>\r\n}\r\n", styles: [":host{display:contents}.fly-block-ui{position:absolute;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--surface-ground, #0c0c12) 58%,transparent);-webkit-backdrop-filter:blur(6px) saturate(120%);backdrop-filter:blur(6px) saturate(120%)}.fly-block-ui__card{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 36px;border-radius:12px;background:var(--glass-bg, rgba(255, 255, 255, .14));border:1px solid var(--glass-border, rgba(255, 255, 255, .22));box-shadow:0 8px 32px #0000002e}.fly-block-ui__spinner{font-size:2rem;color:var(--primary-color)}.fly-block-ui__text{font-size:.875rem;color:var(--text-color-secondary)}\n"] }]
|
|
9455
9553
|
}], propDecorators: { active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: true }] }], messageKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "messageKey", required: false }] }] } });
|
|
9456
9554
|
|
|
9457
9555
|
/**
|
|
@@ -18581,11 +18679,11 @@ class FlyPeoplePickerComponent {
|
|
|
18581
18679
|
this.selectionChange.emit(this._selected().map((o) => o.id));
|
|
18582
18680
|
}
|
|
18583
18681
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: FlyPeoplePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
18584
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: FlyPeoplePickerComponent, isStandalone: true, selector: "fly-people-picker", inputs: { searchFn: { classPropertyName: "searchFn", publicName: "searchFn", isSignal: true, isRequired: true, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, excludeIds: { classPropertyName: "excludeIds", publicName: "excludeIds", isSignal: true, isRequired: false, transformFunction: null }, initialSelection: { classPropertyName: "initialSelection", publicName: "initialSelection", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange" }, host: { classAttribute: "fly-people-picker" }, viewQueries: [{ propertyName: "typeahead", first: true, predicate: FlyTypeaheadComponent, descendants: true }], ngImport: i0, template: "@if (selected().length > 0) {\n <ul class=\"fly-people-picker__chips\" role=\"list\">\n @for (o of selected(); track o.id) {\n <li class=\"fly-people-picker__chip\" role=\"listitem\">\n <span class=\"fly-people-picker__chip-avatar\" aria-hidden=\"true\">\n @if (o.avatarUrl) {\n <img [src]=\"o.avatarUrl\" alt=\"\" />\n } @else {\n <span class=\"fly-people-picker__chip-initials\">{{ initialsFor(o.displayName) }}</span>\n }\n </span>\n <span class=\"fly-people-picker__chip-name\" [title]=\"o.email || o.displayName\">{{ o.displayName }}</span>\n <button\n type=\"button\"\n class=\"fly-people-picker__chip-remove\"\n [attr.aria-label]=\"'people_picker.remove' | translate: { name: o.displayName }\"\n (click)=\"remove(o.id)\">\n \u2715\n </button>\n </li>\n }\n </ul>\n}\n\n@if (showSearch()) {\n <fly-typeahead\n [searchFn]=\"typeaheadSearchFn\"\n [placeholder]=\"placeholder() || ('people_picker.search_placeholder' | translate)\"\n [allowFreeText]=\"false\"\n (selected)=\"onPicked($event)\" />\n} @else {\n <button type=\"button\" class=\"fly-people-picker__change-btn\" (click)=\"change()\">\n {{ 'people_picker.change' | translate }}\n </button>\n}\n", styles: [":host,:host *,:host *:before,:host *:after{box-sizing:border-box}:host{--_surface: var(--surface-card, #fff);--_surface-hover: var(--surface-hover, #f1f5f9);--_border: var(--separator, var(--surface-border, #e2e8f0));--_text: var(--label-primary, var(--text-color, #0f172a));--_text-subtle: var(--label-secondary, var(--text-color-secondary, #64748b));--_fill: var(--fill-tertiary, #f3f4f6);--_accent: var(--accent);--_danger: var(--system-red, #ef4444);--_radius: 999px;display:flex;flex-direction:column;gap:8px;inline-size:100%;color:var(--_text);font-size:13px}.fly-people-picker__chips{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}.fly-people-picker__chip{display:inline-flex;align-items:center;gap:6px;padding-block:3px;padding-inline:3px 6px;border-radius:var(--_radius);background:var(--_fill);max-inline-size:220px}.fly-people-picker__chip-avatar{inline-size:22px;block-size:22px;border-radius:50%;overflow:hidden;flex:none;background:var(--_surface);display:flex;align-items:center;justify-content:center}.fly-people-picker__chip-avatar img{inline-size:100%;block-size:100%;object-fit:cover}.fly-people-picker__chip-initials{font-size:9px;font-weight:700;color:var(--_text-subtle);text-transform:uppercase}.fly-people-picker__chip-name{font-size:12px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fly-people-picker__chip-remove{border:none;background:transparent;padding:2px;margin-inline-start:2px;border-radius:50%;color:var(--_text-subtle);font-size:10px;line-height:1;cursor:pointer;flex:none}.fly-people-picker__chip-remove:hover{background:color-mix(in srgb,var(--_danger) 18%,transparent);color:var(--_danger)}.fly-people-picker__change-btn{align-self:flex-start;border:1px solid var(--_border);border-radius:8px;background:var(--_surface);padding:5px 12px;color:var(--_text);font:inherit;font-weight:600;cursor:pointer}.fly-people-picker__change-btn:hover{background:var(--_surface-hover)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FlyTypeaheadComponent, selector: "fly-typeahead", inputs: ["searchFn", "debounceMs", "placeholder", "ariaLabel", "value", "allowFreeText", "openOnFocus"], outputs: ["valueChange", "selected", "cleared"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
18682
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: FlyPeoplePickerComponent, isStandalone: true, selector: "fly-people-picker", inputs: { searchFn: { classPropertyName: "searchFn", publicName: "searchFn", isSignal: true, isRequired: true, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, excludeIds: { classPropertyName: "excludeIds", publicName: "excludeIds", isSignal: true, isRequired: false, transformFunction: null }, initialSelection: { classPropertyName: "initialSelection", publicName: "initialSelection", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange" }, host: { classAttribute: "fly-people-picker" }, viewQueries: [{ propertyName: "typeahead", first: true, predicate: FlyTypeaheadComponent, descendants: true }], ngImport: i0, template: "@if (selected().length > 0) {\r\n <ul class=\"fly-people-picker__chips\" role=\"list\">\r\n @for (o of selected(); track o.id) {\r\n <li class=\"fly-people-picker__chip\" role=\"listitem\">\r\n <span class=\"fly-people-picker__chip-avatar\" aria-hidden=\"true\">\r\n @if (o.avatarUrl) {\r\n <img [src]=\"o.avatarUrl\" alt=\"\" />\r\n } @else {\r\n <span class=\"fly-people-picker__chip-initials\">{{ initialsFor(o.displayName) }}</span>\r\n }\r\n </span>\r\n <span class=\"fly-people-picker__chip-name\" [title]=\"o.email || o.displayName\">{{ o.displayName }}</span>\r\n <button\r\n type=\"button\"\r\n class=\"fly-people-picker__chip-remove\"\r\n [attr.aria-label]=\"'people_picker.remove' | translate: { name: o.displayName }\"\r\n (click)=\"remove(o.id)\">\r\n \u2715\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n}\r\n\r\n@if (showSearch()) {\r\n <fly-typeahead\r\n [searchFn]=\"typeaheadSearchFn\"\r\n [placeholder]=\"placeholder() || ('people_picker.search_placeholder' | translate)\"\r\n [allowFreeText]=\"false\"\r\n (selected)=\"onPicked($event)\" />\r\n} @else {\r\n <button type=\"button\" class=\"fly-people-picker__change-btn\" (click)=\"change()\">\r\n {{ 'people_picker.change' | translate }}\r\n </button>\r\n}\r\n", styles: [":host,:host *,:host *:before,:host *:after{box-sizing:border-box}:host{--_surface: var(--surface-card, #fff);--_surface-hover: var(--surface-hover, #f1f5f9);--_border: var(--separator, var(--surface-border, #e2e8f0));--_text: var(--label-primary, var(--text-color, #0f172a));--_text-subtle: var(--label-secondary, var(--text-color-secondary, #64748b));--_fill: var(--fill-tertiary, #f3f4f6);--_accent: var(--accent);--_danger: var(--system-red, #ef4444);--_radius: 999px;display:flex;flex-direction:column;gap:8px;inline-size:100%;color:var(--_text);font-size:13px}.fly-people-picker__chips{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}.fly-people-picker__chip{display:inline-flex;align-items:center;gap:6px;padding-block:3px;padding-inline:3px 6px;border-radius:var(--_radius);background:var(--_fill);max-inline-size:220px}.fly-people-picker__chip-avatar{inline-size:22px;block-size:22px;border-radius:50%;overflow:hidden;flex:none;background:var(--_surface);display:flex;align-items:center;justify-content:center}.fly-people-picker__chip-avatar img{inline-size:100%;block-size:100%;object-fit:cover}.fly-people-picker__chip-initials{font-size:9px;font-weight:700;color:var(--_text-subtle);text-transform:uppercase}.fly-people-picker__chip-name{font-size:12px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fly-people-picker__chip-remove{border:none;background:transparent;padding:2px;margin-inline-start:2px;border-radius:50%;color:var(--_text-subtle);font-size:10px;line-height:1;cursor:pointer;flex:none}.fly-people-picker__chip-remove:hover{background:color-mix(in srgb,var(--_danger) 18%,transparent);color:var(--_danger)}.fly-people-picker__change-btn{align-self:flex-start;border:1px solid var(--_border);border-radius:8px;background:var(--_surface);padding:5px 12px;color:var(--_text);font:inherit;font-weight:600;cursor:pointer}.fly-people-picker__change-btn:hover{background:var(--_surface-hover)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FlyTypeaheadComponent, selector: "fly-typeahead", inputs: ["searchFn", "debounceMs", "placeholder", "ariaLabel", "value", "allowFreeText", "openOnFocus"], outputs: ["valueChange", "selected", "cleared"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
18585
18683
|
}
|
|
18586
18684
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: FlyPeoplePickerComponent, decorators: [{
|
|
18587
18685
|
type: Component,
|
|
18588
|
-
args: [{ selector: 'fly-people-picker', standalone: true, imports: [CommonModule, TranslatePipe, FlyTypeaheadComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'fly-people-picker' }, template: "@if (selected().length > 0) {\n <ul class=\"fly-people-picker__chips\" role=\"list\">\n @for (o of selected(); track o.id) {\n <li class=\"fly-people-picker__chip\" role=\"listitem\">\n <span class=\"fly-people-picker__chip-avatar\" aria-hidden=\"true\">\n @if (o.avatarUrl) {\n <img [src]=\"o.avatarUrl\" alt=\"\" />\n } @else {\n <span class=\"fly-people-picker__chip-initials\">{{ initialsFor(o.displayName) }}</span>\n }\n </span>\n <span class=\"fly-people-picker__chip-name\" [title]=\"o.email || o.displayName\">{{ o.displayName }}</span>\n <button\n type=\"button\"\n class=\"fly-people-picker__chip-remove\"\n [attr.aria-label]=\"'people_picker.remove' | translate: { name: o.displayName }\"\n (click)=\"remove(o.id)\">\n \u2715\n </button>\n </li>\n }\n </ul>\n}\n\n@if (showSearch()) {\n <fly-typeahead\n [searchFn]=\"typeaheadSearchFn\"\n [placeholder]=\"placeholder() || ('people_picker.search_placeholder' | translate)\"\n [allowFreeText]=\"false\"\n (selected)=\"onPicked($event)\" />\n} @else {\n <button type=\"button\" class=\"fly-people-picker__change-btn\" (click)=\"change()\">\n {{ 'people_picker.change' | translate }}\n </button>\n}\n", styles: [":host,:host *,:host *:before,:host *:after{box-sizing:border-box}:host{--_surface: var(--surface-card, #fff);--_surface-hover: var(--surface-hover, #f1f5f9);--_border: var(--separator, var(--surface-border, #e2e8f0));--_text: var(--label-primary, var(--text-color, #0f172a));--_text-subtle: var(--label-secondary, var(--text-color-secondary, #64748b));--_fill: var(--fill-tertiary, #f3f4f6);--_accent: var(--accent);--_danger: var(--system-red, #ef4444);--_radius: 999px;display:flex;flex-direction:column;gap:8px;inline-size:100%;color:var(--_text);font-size:13px}.fly-people-picker__chips{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}.fly-people-picker__chip{display:inline-flex;align-items:center;gap:6px;padding-block:3px;padding-inline:3px 6px;border-radius:var(--_radius);background:var(--_fill);max-inline-size:220px}.fly-people-picker__chip-avatar{inline-size:22px;block-size:22px;border-radius:50%;overflow:hidden;flex:none;background:var(--_surface);display:flex;align-items:center;justify-content:center}.fly-people-picker__chip-avatar img{inline-size:100%;block-size:100%;object-fit:cover}.fly-people-picker__chip-initials{font-size:9px;font-weight:700;color:var(--_text-subtle);text-transform:uppercase}.fly-people-picker__chip-name{font-size:12px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fly-people-picker__chip-remove{border:none;background:transparent;padding:2px;margin-inline-start:2px;border-radius:50%;color:var(--_text-subtle);font-size:10px;line-height:1;cursor:pointer;flex:none}.fly-people-picker__chip-remove:hover{background:color-mix(in srgb,var(--_danger) 18%,transparent);color:var(--_danger)}.fly-people-picker__change-btn{align-self:flex-start;border:1px solid var(--_border);border-radius:8px;background:var(--_surface);padding:5px 12px;color:var(--_text);font:inherit;font-weight:600;cursor:pointer}.fly-people-picker__change-btn:hover{background:var(--_surface-hover)}\n"] }]
|
|
18686
|
+
args: [{ selector: 'fly-people-picker', standalone: true, imports: [CommonModule, TranslatePipe, FlyTypeaheadComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'fly-people-picker' }, template: "@if (selected().length > 0) {\r\n <ul class=\"fly-people-picker__chips\" role=\"list\">\r\n @for (o of selected(); track o.id) {\r\n <li class=\"fly-people-picker__chip\" role=\"listitem\">\r\n <span class=\"fly-people-picker__chip-avatar\" aria-hidden=\"true\">\r\n @if (o.avatarUrl) {\r\n <img [src]=\"o.avatarUrl\" alt=\"\" />\r\n } @else {\r\n <span class=\"fly-people-picker__chip-initials\">{{ initialsFor(o.displayName) }}</span>\r\n }\r\n </span>\r\n <span class=\"fly-people-picker__chip-name\" [title]=\"o.email || o.displayName\">{{ o.displayName }}</span>\r\n <button\r\n type=\"button\"\r\n class=\"fly-people-picker__chip-remove\"\r\n [attr.aria-label]=\"'people_picker.remove' | translate: { name: o.displayName }\"\r\n (click)=\"remove(o.id)\">\r\n \u2715\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n}\r\n\r\n@if (showSearch()) {\r\n <fly-typeahead\r\n [searchFn]=\"typeaheadSearchFn\"\r\n [placeholder]=\"placeholder() || ('people_picker.search_placeholder' | translate)\"\r\n [allowFreeText]=\"false\"\r\n (selected)=\"onPicked($event)\" />\r\n} @else {\r\n <button type=\"button\" class=\"fly-people-picker__change-btn\" (click)=\"change()\">\r\n {{ 'people_picker.change' | translate }}\r\n </button>\r\n}\r\n", styles: [":host,:host *,:host *:before,:host *:after{box-sizing:border-box}:host{--_surface: var(--surface-card, #fff);--_surface-hover: var(--surface-hover, #f1f5f9);--_border: var(--separator, var(--surface-border, #e2e8f0));--_text: var(--label-primary, var(--text-color, #0f172a));--_text-subtle: var(--label-secondary, var(--text-color-secondary, #64748b));--_fill: var(--fill-tertiary, #f3f4f6);--_accent: var(--accent);--_danger: var(--system-red, #ef4444);--_radius: 999px;display:flex;flex-direction:column;gap:8px;inline-size:100%;color:var(--_text);font-size:13px}.fly-people-picker__chips{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}.fly-people-picker__chip{display:inline-flex;align-items:center;gap:6px;padding-block:3px;padding-inline:3px 6px;border-radius:var(--_radius);background:var(--_fill);max-inline-size:220px}.fly-people-picker__chip-avatar{inline-size:22px;block-size:22px;border-radius:50%;overflow:hidden;flex:none;background:var(--_surface);display:flex;align-items:center;justify-content:center}.fly-people-picker__chip-avatar img{inline-size:100%;block-size:100%;object-fit:cover}.fly-people-picker__chip-initials{font-size:9px;font-weight:700;color:var(--_text-subtle);text-transform:uppercase}.fly-people-picker__chip-name{font-size:12px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fly-people-picker__chip-remove{border:none;background:transparent;padding:2px;margin-inline-start:2px;border-radius:50%;color:var(--_text-subtle);font-size:10px;line-height:1;cursor:pointer;flex:none}.fly-people-picker__chip-remove:hover{background:color-mix(in srgb,var(--_danger) 18%,transparent);color:var(--_danger)}.fly-people-picker__change-btn{align-self:flex-start;border:1px solid var(--_border);border-radius:8px;background:var(--_surface);padding:5px 12px;color:var(--_text);font:inherit;font-weight:600;cursor:pointer}.fly-people-picker__change-btn:hover{background:var(--_surface-hover)}\n"] }]
|
|
18589
18687
|
}], ctorParameters: () => [], propDecorators: { searchFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchFn", required: true }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], excludeIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "excludeIds", required: false }] }], initialSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialSelection", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], typeahead: [{
|
|
18590
18688
|
type: ViewChild,
|
|
18591
18689
|
args: [FlyTypeaheadComponent]
|
|
@@ -21760,30 +21858,30 @@ class FlyDetailCardComponent {
|
|
|
21760
21858
|
/** Drop the body padding — for a child that brings its own list/table chrome. */
|
|
21761
21859
|
flush = input(false, ...(ngDevMode ? [{ debugName: "flush" }] : /* istanbul ignore next */ []));
|
|
21762
21860
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: FlyDetailCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21763
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: FlyDetailCardComponent, isStandalone: true, selector: "fly-detail-card", inputs: { titleKey: { classPropertyName: "titleKey", publicName: "titleKey", isSignal: true, isRequired: false, transformFunction: null }, hasProjectedTitle: { classPropertyName: "hasProjectedTitle", publicName: "hasProjectedTitle", isSignal: true, isRequired: false, transformFunction: null }, flush: { classPropertyName: "flush", publicName: "flush", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
21764
|
-
@if (titleKey() || hasProjectedTitle()) {
|
|
21765
|
-
<fly-section-header [titleKey]="titleKey()">
|
|
21766
|
-
<ng-content select="[card-title]" ngProjectAs="[section-title]" />
|
|
21767
|
-
<ng-content select="[card-actions]" ngProjectAs="[section-actions]" />
|
|
21768
|
-
</fly-section-header>
|
|
21769
|
-
}
|
|
21770
|
-
<div class="dc__body" [class.dc__body--flush]="flush()">
|
|
21771
|
-
<ng-content />
|
|
21772
|
-
</div>
|
|
21861
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: FlyDetailCardComponent, isStandalone: true, selector: "fly-detail-card", inputs: { titleKey: { classPropertyName: "titleKey", publicName: "titleKey", isSignal: true, isRequired: false, transformFunction: null }, hasProjectedTitle: { classPropertyName: "hasProjectedTitle", publicName: "hasProjectedTitle", isSignal: true, isRequired: false, transformFunction: null }, flush: { classPropertyName: "flush", publicName: "flush", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
21862
|
+
@if (titleKey() || hasProjectedTitle()) {
|
|
21863
|
+
<fly-section-header [titleKey]="titleKey()">
|
|
21864
|
+
<ng-content select="[card-title]" ngProjectAs="[section-title]" />
|
|
21865
|
+
<ng-content select="[card-actions]" ngProjectAs="[section-actions]" />
|
|
21866
|
+
</fly-section-header>
|
|
21867
|
+
}
|
|
21868
|
+
<div class="dc__body" [class.dc__body--flush]="flush()">
|
|
21869
|
+
<ng-content />
|
|
21870
|
+
</div>
|
|
21773
21871
|
`, isInline: true, styles: [":host{display:block;background:var(--bg-2);border:1px solid var(--w08);border-radius:var(--r-lg);box-shadow:var(--shadow-card);overflow:hidden;animation:itemIn .3s var(--nova-ease-micro) both}.dc__body{padding:var(--sp-3) var(--sp-4) var(--sp-4)}.dc__body--flush{padding:0}\n"], dependencies: [{ kind: "component", type: FlySectionHeaderComponent, selector: "fly-section-header", inputs: ["titleKey"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
21774
21872
|
}
|
|
21775
21873
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: FlyDetailCardComponent, decorators: [{
|
|
21776
21874
|
type: Component,
|
|
21777
|
-
args: [{ selector: 'fly-detail-card', standalone: true, imports: [FlySectionHeaderComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
21778
|
-
@if (titleKey() || hasProjectedTitle()) {
|
|
21779
|
-
<fly-section-header [titleKey]="titleKey()">
|
|
21780
|
-
<ng-content select="[card-title]" ngProjectAs="[section-title]" />
|
|
21781
|
-
<ng-content select="[card-actions]" ngProjectAs="[section-actions]" />
|
|
21782
|
-
</fly-section-header>
|
|
21783
|
-
}
|
|
21784
|
-
<div class="dc__body" [class.dc__body--flush]="flush()">
|
|
21785
|
-
<ng-content />
|
|
21786
|
-
</div>
|
|
21875
|
+
args: [{ selector: 'fly-detail-card', standalone: true, imports: [FlySectionHeaderComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
21876
|
+
@if (titleKey() || hasProjectedTitle()) {
|
|
21877
|
+
<fly-section-header [titleKey]="titleKey()">
|
|
21878
|
+
<ng-content select="[card-title]" ngProjectAs="[section-title]" />
|
|
21879
|
+
<ng-content select="[card-actions]" ngProjectAs="[section-actions]" />
|
|
21880
|
+
</fly-section-header>
|
|
21881
|
+
}
|
|
21882
|
+
<div class="dc__body" [class.dc__body--flush]="flush()">
|
|
21883
|
+
<ng-content />
|
|
21884
|
+
</div>
|
|
21787
21885
|
`, styles: [":host{display:block;background:var(--bg-2);border:1px solid var(--w08);border-radius:var(--r-lg);box-shadow:var(--shadow-card);overflow:hidden;animation:itemIn .3s var(--nova-ease-micro) both}.dc__body{padding:var(--sp-3) var(--sp-4) var(--sp-4)}.dc__body--flush{padding:0}\n"] }]
|
|
21788
21886
|
}], propDecorators: { titleKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "titleKey", required: false }] }], hasProjectedTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasProjectedTitle", required: false }] }], flush: [{ type: i0.Input, args: [{ isSignal: true, alias: "flush", required: false }] }] } });
|
|
21789
21887
|
|
|
@@ -21911,108 +22009,108 @@ class FlyDetailShellComponent {
|
|
|
21911
22009
|
buttons?.[next]?.focus();
|
|
21912
22010
|
}
|
|
21913
22011
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: FlyDetailShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21914
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: FlyDetailShellComponent, isStandalone: true, selector: "fly-detail-shell", inputs: { sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, sectionsLabelKey: { classPropertyName: "sectionsLabelKey", publicName: "sectionsLabelKey", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selectedChange" }, viewQueries: [{ propertyName: "rail", first: true, predicate: ["rail"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
21915
|
-
<div class="ds__layout">
|
|
21916
|
-
<aside class="ds__aside">
|
|
21917
|
-
<div class="ds__pinned">
|
|
21918
|
-
<ng-content select="[detail-aside]" />
|
|
21919
|
-
</div>
|
|
21920
|
-
|
|
21921
|
-
@if (sections().length > 0) {
|
|
21922
|
-
<div
|
|
21923
|
-
#rail
|
|
21924
|
-
class="ds__rail"
|
|
21925
|
-
role="tablist"
|
|
21926
|
-
tabindex="-1"
|
|
21927
|
-
[attr.aria-orientation]="'vertical'"
|
|
21928
|
-
[attr.aria-label]="sectionsLabelKey() | translate"
|
|
21929
|
-
(keydown)="onKey($event)"
|
|
21930
|
-
>
|
|
21931
|
-
@for (s of sections(); track s.id) {
|
|
21932
|
-
<button
|
|
21933
|
-
type="button"
|
|
21934
|
-
class="ds__tab"
|
|
21935
|
-
role="tab"
|
|
21936
|
-
[id]="tabId(s.id)"
|
|
21937
|
-
[class.ds__tab--active]="activeId() === s.id"
|
|
21938
|
-
[attr.aria-selected]="activeId() === s.id"
|
|
21939
|
-
[attr.aria-controls]="panelId()"
|
|
21940
|
-
[attr.tabindex]="activeId() === s.id ? 0 : -1"
|
|
21941
|
-
[attr.title]="s.labelKey | translate"
|
|
21942
|
-
(click)="select(s.id)"
|
|
21943
|
-
>
|
|
21944
|
-
@if (s.icon) {
|
|
21945
|
-
<span class="pi {{ s.icon }} ds__tab-ico" aria-hidden="true"></span>
|
|
21946
|
-
}
|
|
21947
|
-
<span class="ds__tab-label">{{ s.labelKey | translate }}</span>
|
|
21948
|
-
</button>
|
|
21949
|
-
}
|
|
21950
|
-
</div>
|
|
21951
|
-
}
|
|
21952
|
-
</aside>
|
|
21953
|
-
|
|
21954
|
-
<div
|
|
21955
|
-
class="ds__panel"
|
|
21956
|
-
[id]="panelId()"
|
|
21957
|
-
[attr.role]="sections().length ? 'tabpanel' : null"
|
|
21958
|
-
[attr.aria-labelledby]="activeId() ? tabId(activeId()!) : null"
|
|
21959
|
-
>
|
|
21960
|
-
<ng-content />
|
|
21961
|
-
</div>
|
|
21962
|
-
</div>
|
|
22012
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: FlyDetailShellComponent, isStandalone: true, selector: "fly-detail-shell", inputs: { sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, sectionsLabelKey: { classPropertyName: "sectionsLabelKey", publicName: "sectionsLabelKey", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selectedChange" }, viewQueries: [{ propertyName: "rail", first: true, predicate: ["rail"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
22013
|
+
<div class="ds__layout">
|
|
22014
|
+
<aside class="ds__aside">
|
|
22015
|
+
<div class="ds__pinned">
|
|
22016
|
+
<ng-content select="[detail-aside]" />
|
|
22017
|
+
</div>
|
|
22018
|
+
|
|
22019
|
+
@if (sections().length > 0) {
|
|
22020
|
+
<div
|
|
22021
|
+
#rail
|
|
22022
|
+
class="ds__rail"
|
|
22023
|
+
role="tablist"
|
|
22024
|
+
tabindex="-1"
|
|
22025
|
+
[attr.aria-orientation]="'vertical'"
|
|
22026
|
+
[attr.aria-label]="sectionsLabelKey() | translate"
|
|
22027
|
+
(keydown)="onKey($event)"
|
|
22028
|
+
>
|
|
22029
|
+
@for (s of sections(); track s.id) {
|
|
22030
|
+
<button
|
|
22031
|
+
type="button"
|
|
22032
|
+
class="ds__tab"
|
|
22033
|
+
role="tab"
|
|
22034
|
+
[id]="tabId(s.id)"
|
|
22035
|
+
[class.ds__tab--active]="activeId() === s.id"
|
|
22036
|
+
[attr.aria-selected]="activeId() === s.id"
|
|
22037
|
+
[attr.aria-controls]="panelId()"
|
|
22038
|
+
[attr.tabindex]="activeId() === s.id ? 0 : -1"
|
|
22039
|
+
[attr.title]="s.labelKey | translate"
|
|
22040
|
+
(click)="select(s.id)"
|
|
22041
|
+
>
|
|
22042
|
+
@if (s.icon) {
|
|
22043
|
+
<span class="pi {{ s.icon }} ds__tab-ico" aria-hidden="true"></span>
|
|
22044
|
+
}
|
|
22045
|
+
<span class="ds__tab-label">{{ s.labelKey | translate }}</span>
|
|
22046
|
+
</button>
|
|
22047
|
+
}
|
|
22048
|
+
</div>
|
|
22049
|
+
}
|
|
22050
|
+
</aside>
|
|
22051
|
+
|
|
22052
|
+
<div
|
|
22053
|
+
class="ds__panel"
|
|
22054
|
+
[id]="panelId()"
|
|
22055
|
+
[attr.role]="sections().length ? 'tabpanel' : null"
|
|
22056
|
+
[attr.aria-labelledby]="activeId() ? tabId(activeId()!) : null"
|
|
22057
|
+
>
|
|
22058
|
+
<ng-content />
|
|
22059
|
+
</div>
|
|
22060
|
+
</div>
|
|
21963
22061
|
`, isInline: true, styles: [":host{display:block;container-type:inline-size}.ds__layout{display:grid;grid-template-columns:var(--fly-detail-aside, 300px) minmax(0,1fr);gap:var(--sp-4);align-items:start}.ds__aside{display:flex;flex-direction:column;gap:var(--sp-4);min-width:0}.ds__aside .ds__rail{order:-1}.ds__pinned{display:flex;flex-direction:column;gap:var(--sp-4);min-width:0}.ds__panel{display:flex;flex-direction:column;gap:var(--sp-4);min-width:0;align-self:stretch}.ds__panel>:only-child{flex:1}.ds__rail{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-2);background:var(--bg-2);border:1px solid var(--w08);border-radius:var(--r-lg);box-shadow:var(--shadow-card)}.ds__tab{display:flex;align-items:center;gap:var(--sp-3);width:100%;padding:var(--sp-2);border:0;background:transparent;border-radius:var(--r-md);color:var(--ink-2);cursor:pointer;font-family:inherit;font-size:var(--text-sm);text-align:start;white-space:nowrap;overflow:hidden;transition:background var(--t-state),color var(--t-state)}.ds__tab:hover{background:var(--w06);color:var(--ink)}.ds__tab:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.ds__tab--active{background:var(--accent-fill);color:var(--on-accent-fill);font-weight:var(--fw-semibold)}.ds__tab-ico{font-size:var(--text-md);flex-shrink:0;width:20px;text-align:center}.ds__tab-label{min-width:0;overflow:hidden;text-overflow:ellipsis}@container (width <= 980px){.ds__layout{grid-template-columns:minmax(0,1fr)}.ds__rail{flex-flow:row wrap}.ds__tab{width:auto}}@media(width<=980px){.ds__layout{grid-template-columns:minmax(0,1fr)}.ds__rail{flex-flow:row wrap}.ds__tab{width:auto}}\n"], dependencies: [{ kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
21964
22062
|
}
|
|
21965
22063
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: FlyDetailShellComponent, decorators: [{
|
|
21966
22064
|
type: Component,
|
|
21967
|
-
args: [{ selector: 'fly-detail-shell', standalone: true, imports: [TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
21968
|
-
<div class="ds__layout">
|
|
21969
|
-
<aside class="ds__aside">
|
|
21970
|
-
<div class="ds__pinned">
|
|
21971
|
-
<ng-content select="[detail-aside]" />
|
|
21972
|
-
</div>
|
|
21973
|
-
|
|
21974
|
-
@if (sections().length > 0) {
|
|
21975
|
-
<div
|
|
21976
|
-
#rail
|
|
21977
|
-
class="ds__rail"
|
|
21978
|
-
role="tablist"
|
|
21979
|
-
tabindex="-1"
|
|
21980
|
-
[attr.aria-orientation]="'vertical'"
|
|
21981
|
-
[attr.aria-label]="sectionsLabelKey() | translate"
|
|
21982
|
-
(keydown)="onKey($event)"
|
|
21983
|
-
>
|
|
21984
|
-
@for (s of sections(); track s.id) {
|
|
21985
|
-
<button
|
|
21986
|
-
type="button"
|
|
21987
|
-
class="ds__tab"
|
|
21988
|
-
role="tab"
|
|
21989
|
-
[id]="tabId(s.id)"
|
|
21990
|
-
[class.ds__tab--active]="activeId() === s.id"
|
|
21991
|
-
[attr.aria-selected]="activeId() === s.id"
|
|
21992
|
-
[attr.aria-controls]="panelId()"
|
|
21993
|
-
[attr.tabindex]="activeId() === s.id ? 0 : -1"
|
|
21994
|
-
[attr.title]="s.labelKey | translate"
|
|
21995
|
-
(click)="select(s.id)"
|
|
21996
|
-
>
|
|
21997
|
-
@if (s.icon) {
|
|
21998
|
-
<span class="pi {{ s.icon }} ds__tab-ico" aria-hidden="true"></span>
|
|
21999
|
-
}
|
|
22000
|
-
<span class="ds__tab-label">{{ s.labelKey | translate }}</span>
|
|
22001
|
-
</button>
|
|
22002
|
-
}
|
|
22003
|
-
</div>
|
|
22004
|
-
}
|
|
22005
|
-
</aside>
|
|
22006
|
-
|
|
22007
|
-
<div
|
|
22008
|
-
class="ds__panel"
|
|
22009
|
-
[id]="panelId()"
|
|
22010
|
-
[attr.role]="sections().length ? 'tabpanel' : null"
|
|
22011
|
-
[attr.aria-labelledby]="activeId() ? tabId(activeId()!) : null"
|
|
22012
|
-
>
|
|
22013
|
-
<ng-content />
|
|
22014
|
-
</div>
|
|
22015
|
-
</div>
|
|
22065
|
+
args: [{ selector: 'fly-detail-shell', standalone: true, imports: [TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
22066
|
+
<div class="ds__layout">
|
|
22067
|
+
<aside class="ds__aside">
|
|
22068
|
+
<div class="ds__pinned">
|
|
22069
|
+
<ng-content select="[detail-aside]" />
|
|
22070
|
+
</div>
|
|
22071
|
+
|
|
22072
|
+
@if (sections().length > 0) {
|
|
22073
|
+
<div
|
|
22074
|
+
#rail
|
|
22075
|
+
class="ds__rail"
|
|
22076
|
+
role="tablist"
|
|
22077
|
+
tabindex="-1"
|
|
22078
|
+
[attr.aria-orientation]="'vertical'"
|
|
22079
|
+
[attr.aria-label]="sectionsLabelKey() | translate"
|
|
22080
|
+
(keydown)="onKey($event)"
|
|
22081
|
+
>
|
|
22082
|
+
@for (s of sections(); track s.id) {
|
|
22083
|
+
<button
|
|
22084
|
+
type="button"
|
|
22085
|
+
class="ds__tab"
|
|
22086
|
+
role="tab"
|
|
22087
|
+
[id]="tabId(s.id)"
|
|
22088
|
+
[class.ds__tab--active]="activeId() === s.id"
|
|
22089
|
+
[attr.aria-selected]="activeId() === s.id"
|
|
22090
|
+
[attr.aria-controls]="panelId()"
|
|
22091
|
+
[attr.tabindex]="activeId() === s.id ? 0 : -1"
|
|
22092
|
+
[attr.title]="s.labelKey | translate"
|
|
22093
|
+
(click)="select(s.id)"
|
|
22094
|
+
>
|
|
22095
|
+
@if (s.icon) {
|
|
22096
|
+
<span class="pi {{ s.icon }} ds__tab-ico" aria-hidden="true"></span>
|
|
22097
|
+
}
|
|
22098
|
+
<span class="ds__tab-label">{{ s.labelKey | translate }}</span>
|
|
22099
|
+
</button>
|
|
22100
|
+
}
|
|
22101
|
+
</div>
|
|
22102
|
+
}
|
|
22103
|
+
</aside>
|
|
22104
|
+
|
|
22105
|
+
<div
|
|
22106
|
+
class="ds__panel"
|
|
22107
|
+
[id]="panelId()"
|
|
22108
|
+
[attr.role]="sections().length ? 'tabpanel' : null"
|
|
22109
|
+
[attr.aria-labelledby]="activeId() ? tabId(activeId()!) : null"
|
|
22110
|
+
>
|
|
22111
|
+
<ng-content />
|
|
22112
|
+
</div>
|
|
22113
|
+
</div>
|
|
22016
22114
|
`, styles: [":host{display:block;container-type:inline-size}.ds__layout{display:grid;grid-template-columns:var(--fly-detail-aside, 300px) minmax(0,1fr);gap:var(--sp-4);align-items:start}.ds__aside{display:flex;flex-direction:column;gap:var(--sp-4);min-width:0}.ds__aside .ds__rail{order:-1}.ds__pinned{display:flex;flex-direction:column;gap:var(--sp-4);min-width:0}.ds__panel{display:flex;flex-direction:column;gap:var(--sp-4);min-width:0;align-self:stretch}.ds__panel>:only-child{flex:1}.ds__rail{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-2);background:var(--bg-2);border:1px solid var(--w08);border-radius:var(--r-lg);box-shadow:var(--shadow-card)}.ds__tab{display:flex;align-items:center;gap:var(--sp-3);width:100%;padding:var(--sp-2);border:0;background:transparent;border-radius:var(--r-md);color:var(--ink-2);cursor:pointer;font-family:inherit;font-size:var(--text-sm);text-align:start;white-space:nowrap;overflow:hidden;transition:background var(--t-state),color var(--t-state)}.ds__tab:hover{background:var(--w06);color:var(--ink)}.ds__tab:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.ds__tab--active{background:var(--accent-fill);color:var(--on-accent-fill);font-weight:var(--fw-semibold)}.ds__tab-ico{font-size:var(--text-md);flex-shrink:0;width:20px;text-align:center}.ds__tab-label{min-width:0;overflow:hidden;text-overflow:ellipsis}@container (width <= 980px){.ds__layout{grid-template-columns:minmax(0,1fr)}.ds__rail{flex-flow:row wrap}.ds__tab{width:auto}}@media(width<=980px){.ds__layout{grid-template-columns:minmax(0,1fr)}.ds__rail{flex-flow:row wrap}.ds__tab{width:auto}}\n"] }]
|
|
22017
22115
|
}], propDecorators: { rail: [{ type: i0.ViewChild, args: ['rail', { isSignal: true }] }], sections: [{ type: i0.Input, args: [{ isSignal: true, alias: "sections", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }, { type: i0.Output, args: ["selectedChange"] }], sectionsLabelKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "sectionsLabelKey", required: false }] }] } });
|
|
22018
22116
|
|
|
@@ -24741,5 +24839,5 @@ const AUDIENCE_ERROR_CODES = {
|
|
|
24741
24839
|
* Generated bundle index. Do not edit.
|
|
24742
24840
|
*/
|
|
24743
24841
|
|
|
24744
|
-
export { AGENT_DRAG_MIME, AGENT_PAYLOAD_VERSION, APP_LOOKUP, AUDIENCE_ERROR_CODES, AUDIENCE_LIMITS, AUDIENCE_PRESETS, AUDIENCE_TERM_KINDS, AgentActionBus, AgentActionUnsupportedDispatchError, AgentCommandRegistry, AgentDropRegistry, AgentFlightAnimator, AgentLookupRegistry, AgentPayloadOversizeError, AudienceBuilderComponent, AuthService, BilingualFieldComponent, CRON_MODES, CRON_WEEKDAYS, ContextMenuComponent, DEFAULT_AGENT_PAYLOAD_LIMITS, DEFAULT_FLY_THEME_MODE, DS_BASELINE_LOCALES, DashboardKpiComponent, DialogResult, EntityLookupComponent, FLYOS_LAUNCH_EVENT, FLYOS_LAUNCH_REQUEST_EVENT, FLYOS_REMOTE_ROUTE_EVENT, FLY_ACCENT_PROPERTY, FLY_ADMIN_ROLES, FLY_CHUNK_RELOAD_FLAG, FLY_COMPACT_THRESHOLD, FLY_COUNTRIES, FLY_EMOJI_BY_ID, FLY_EMOJI_CATEGORIES, FLY_EMOJI_CATEGORY_BY_ID, FLY_EMOJI_DEFAULT_CATEGORIES, FLY_EMOJI_PACK, FLY_EMOJI_PACK_MISSING_MESSAGE, FLY_EMOJI_PREVIEW_COUNT, FLY_EMPTY_VALUE, FLY_LOCALE_CATALOG, FLY_MAGIC_BAR_EVENT, FLY_MAGIC_BAR_ICONS, FLY_MAGIC_BAR_STORE_KEY, FLY_NF_CACHE_HEAL_FLAG, FLY_RELOAD_DEBOUNCE_MS, FLY_RELOAD_REARM_MS, FLY_REMOTE_BASE_PATH, FLY_REMOTE_CONTEXT_EVENT, FLY_REMOTE_CONTEXT_STORE_KEY, FLY_REMOTE_ROUTES, FLY_SCAN_PENDING_DEFAULT_DELAY_MS, FLY_SCAN_PENDING_MAX_RETRIES, FLY_SCAN_PENDING_STATUS, FLY_SEARCH_DEBOUNCE_MS, FLY_SKIN_TONES, FLY_STANDALONE_AUTH_CONFIG, FLY_THEME_MODE_IDS, FLY_VIEWPORT_IS_MOBILE, FLY_WINDOW_HELP_HINT_EVENT, FLY_WINDOW_PAGE_TITLE_EVENT, FlyAchievementProgressComponent, FlyActionMenuComponent, FlyActionStackComponent, FlyAgentDraggableDirective, FlyAnimatedEmojiComponent, FlyAppHomeComponent, FlyAppTopbarComponent, FlyAuthLiveRefresh, FlyBadgeWallComponent, FlyBlockUiComponent, FlyBreadcrumbComponent, FlyButtonComponent, FlyBytesPipe, FlyCaptchaComponent, FlyCardActionsComponent, FlyCardBodyComponent, FlyCardComponent, FlyCardFooterComponent, FlyCardGridComponent, FlyCardMediaComponent, FlyCardMetaComponent, FlyCardStatusComponent, FlyCardTitleComponent, FlyCellDirective, FlyCheckboxComponent, FlyChipComponent, FlyChunkReloadErrorHandler, FlyClickOutsideDirective, FlyCollapsibleComponent, FlyCommentThreadComponent, FlyCompactNumberPipe, FlyConfirmDialogComponent, FlyControlDirective, FlyCronBuilderComponent, FlyCurrencySelectorComponent, FlyDataTableComponent, FlyDatePipe, FlyDateTimePipe, FlyDebouncer, FlyDecimalNumberPipe, FlyDetailCardComponent, FlyDetailShellComponent, FlyDrawerComponent, FlyDurationPipe, FlyDynamicFormComponent, FlyEmojiPickerComponent, FlyFieldComponent, FlyFileDownloadService, FlyFileUploadComponent, FlyFilterPanelComponent, FlyFormBannerComponent, FlyFormFooterComponent, FlyFormGridComponent, FlyFormSectionComponent, FlyFullNumberPipe, FlyGanttComponent, FlyHubClient, FlyIconButtonComponent, FlyIfAdminDirective, FlyIfRoleDirective, FlyImageUploadComponent, FlyLeaderboardComponent, FlyMagicActionsComponent, FlyMetaListComponent, FlyModalComponent, FlyModerationQueueComponent, FlyModuleIconDirective, FlyMoneyPipe, FlyPaginationComponent, FlyPeoplePickerComponent, FlyPointsTierComponent, FlyProgressComponent, FlyRelativeTimePipe, FlyRemoteContextService, FlyRemoteRouter, FlyRemoteRouterOutletComponent, FlySearchInputComponent, FlySectionHeaderComponent, FlySecureSrcDirective, FlySegmentedComponent, FlySelectComponent, FlySkeletonComponent, FlySliderComponent, FlySparklineComponent, FlySpinnerComponent, FlyStandaloneAuthCallbackComponent, FlyStandaloneAuthService, FlyStateMessageComponent, FlyDynamicFormComponent as FlySurveyFormComponent, FlyTabComponent, FlyTabsComponent, FlyTagsInputComponent, FlyThemeService, FlyTimePipe, FlyToastService, FlyToggleComponent, FlyTooltipDirective, FlyTreeNavComponent, FlyTypeaheadComponent, FlyUserDirectoryService, FlyWindowHelpService, FlyWindowTitleService, FlyosPendingLaunchesGlobalKey, FlyosShellHandlesLaunchRequestsGlobalKey, FlyosShellOwnsHistoryGlobalKey, GANTT_ZOOMS, I18nService, LAUNCH_CONTEXT, MAGIC_BAR_SEARCH_WIDTH_DEFAULT, MAGIC_BAR_SEARCH_WIDTH_MAX, MAGIC_BAR_SEARCH_WIDTH_MIN, MagicBarRegistry, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, NOVA_PRIORITY_TONE, NOVA_STATUS_TONE, NOVA_TONE_FALLBACK, OverlayStack, PRESENCE_COLORS, PageHeaderComponent, RTL_LOCALE_SET, SHARE_ORG_CHART_SYSTEM_KEY_APPS, SHARE_ORG_CHART_SYSTEM_KEY_DEFAULT, SHARE_PANEL_DEFAULT_FILE_LEVELS, STATE_DEFAULT_ICONS, STATE_DEFAULT_MESSAGE_KEYS, STEP_UP_CODE, STEP_UP_REAUTH_HANDLER, STEP_UP_RETURN_KEY, SUPPORTED_AGENT_PAYLOAD_VERSIONS, SharePanelComponent, SourceAppResolver, StandaloneWindowManagerService, StatusBadgeComponent, StepUpService, ToastHostComponent, TranslatePipe, WINDOW_DATA, WINDOW_HELP_HINT, WindowManagerService, applySkinTone, applySuggestion, ariaSort, buildCron, canConfirm, canGoNext, canGoPrev, captureFocus, clampMagicBarSearchWidth, clampPage, clampSliderValue, connectRemoteLaunch, enterActivatesNatively, filterGroup, filterSuggestions, findLocaleByDialect, findLocaleByPrefix, firstEnabledIndex, firstModuleIndex, flattenModules, flyAdminGuard, flyApiErrorMessage, flyCaptchaBase64Utf8, flyCaptchaBuildToken, flyCaptchaSha256Hex, flyCompactNumber, flyDebounced, flyDecimalNumber, flyDownloadBlob, flyDuration, flyEmojiFor, flyEmojiIsTonable, flyEmojiPackUrl, flyExportFileName, flyFirstEnabledIndex, flyFormatBytes, flyFormatDate, flyFormatDateTime, flyFormatMoney, flyFormatTime, flyFullNumber, flyNextEnabledIndex, flyNextSegmentIndex, flyRelativeTime, flyResolveActiveTab, flyRoleGuard, flyScanPendingDelayMs, flyScanRetry, flySignedCompact, flySkinToneLabelKey, flyStandaloneAuthGuard, flyStandaloneAuthInterceptor, flyToDateOnly, flyToPage, flyUnwrap, flyUnwrapLenient, hasAnyRoleIn, healNativeFederationCacheOnce, initialExpanded, isAccentColor, isChunkLoadError, isFlyAuthStorePopulated, isNativeFederationCacheError, isRtlLocale, isRtlLocaleEntry, isValidCron, isValidSingleField, loadRemoteStyles, magicBarOwnerKey, magicBarSearchText, matchFlyRoutePattern, nextEnabledIndex, nextModuleIndex, nextSegmentIndex, nextSort, normalizeFlyTheme, normalizeRoles, novaPriorityToneVar, novaStatusToneVar, overlayStack, parseCron, parseStepUpChallenge, parseTags, presenceColorFor, printConsoleSecurityWarning, provideFlyChunkReloadRecovery, provideFlyEmojiPack, provideFlyStandaloneAuth, reloadOnceForChunkError, requestAppLaunch, resolveActiveModule, resolveActiveSection, resolveActiveTab, resolveCellValue, resolveStateIcon, resolveStateMessageKey, restoreFocus, sameTags, sectionHintKey, sectionLayout, sliderTrackGradient, sparklinePath, sparklinePoints, stepUpInterceptor, stepUpReturnKey, trimAgentPayload, trimAgentString, unloadRemoteStyles, utf8ByteLength, validateAgentPayload, warnIfEmbeddedSessionMissing };
|
|
24842
|
+
export { AGENT_DRAG_MIME, AGENT_PAYLOAD_VERSION, APP_LOOKUP, AUDIENCE_ERROR_CODES, AUDIENCE_LIMITS, AUDIENCE_PRESETS, AUDIENCE_TERM_KINDS, AgentActionBus, AgentActionUnsupportedDispatchError, AgentCommandRegistry, AgentDropRegistry, AgentFlightAnimator, AgentLookupRegistry, AgentPayloadOversizeError, AudienceBuilderComponent, AuthService, BilingualFieldComponent, CRON_MODES, CRON_WEEKDAYS, ContextMenuComponent, DEFAULT_AGENT_PAYLOAD_LIMITS, DEFAULT_FLY_THEME_MODE, DS_BASELINE_LOCALES, DashboardKpiComponent, DialogResult, ENTITY_LINK_LAUNCHER, EntityLookupComponent, FLYOS_LAUNCH_EVENT, FLYOS_LAUNCH_REQUEST_EVENT, FLYOS_REMOTE_ROUTE_EVENT, FLY_ACCENT_PROPERTY, FLY_ADMIN_ROLES, FLY_CHUNK_RELOAD_FLAG, FLY_COMPACT_THRESHOLD, FLY_COUNTRIES, FLY_EMOJI_BY_ID, FLY_EMOJI_CATEGORIES, FLY_EMOJI_CATEGORY_BY_ID, FLY_EMOJI_DEFAULT_CATEGORIES, FLY_EMOJI_PACK, FLY_EMOJI_PACK_MISSING_MESSAGE, FLY_EMOJI_PREVIEW_COUNT, FLY_EMPTY_VALUE, FLY_LOCALE_CATALOG, FLY_MAGIC_BAR_EVENT, FLY_MAGIC_BAR_ICONS, FLY_MAGIC_BAR_STORE_KEY, FLY_NF_CACHE_HEAL_FLAG, FLY_RELOAD_DEBOUNCE_MS, FLY_RELOAD_REARM_MS, FLY_REMOTE_BASE_PATH, FLY_REMOTE_CONTEXT_EVENT, FLY_REMOTE_CONTEXT_STORE_KEY, FLY_REMOTE_ROUTES, FLY_SCAN_PENDING_DEFAULT_DELAY_MS, FLY_SCAN_PENDING_MAX_RETRIES, FLY_SCAN_PENDING_STATUS, FLY_SEARCH_DEBOUNCE_MS, FLY_SKIN_TONES, FLY_STANDALONE_AUTH_CONFIG, FLY_THEME_MODE_IDS, FLY_VIEWPORT_IS_MOBILE, FLY_WINDOW_HELP_HINT_EVENT, FLY_WINDOW_PAGE_TITLE_EVENT, FlyAchievementProgressComponent, FlyActionMenuComponent, FlyActionStackComponent, FlyAgentDraggableDirective, FlyAnimatedEmojiComponent, FlyAppHomeComponent, FlyAppTopbarComponent, FlyAuthLiveRefresh, FlyBadgeWallComponent, FlyBlockUiComponent, FlyBreadcrumbComponent, FlyButtonComponent, FlyBytesPipe, FlyCaptchaComponent, FlyCardActionsComponent, FlyCardBodyComponent, FlyCardComponent, FlyCardFooterComponent, FlyCardGridComponent, FlyCardMediaComponent, FlyCardMetaComponent, FlyCardStatusComponent, FlyCardTitleComponent, FlyCellDirective, FlyCheckboxComponent, FlyChipComponent, FlyChunkReloadErrorHandler, FlyClickOutsideDirective, FlyCollapsibleComponent, FlyCommentThreadComponent, FlyCompactNumberPipe, FlyConfirmDialogComponent, FlyControlDirective, FlyCronBuilderComponent, FlyCurrencySelectorComponent, FlyDataTableComponent, FlyDatePipe, FlyDateTimePipe, FlyDebouncer, FlyDecimalNumberPipe, FlyDetailCardComponent, FlyDetailShellComponent, FlyDrawerComponent, FlyDurationPipe, FlyDynamicFormComponent, FlyEmojiPickerComponent, FlyFieldComponent, FlyFileDownloadService, FlyFileUploadComponent, FlyFilterPanelComponent, FlyFormBannerComponent, FlyFormFooterComponent, FlyFormGridComponent, FlyFormSectionComponent, FlyFullNumberPipe, FlyGanttComponent, FlyHubClient, FlyIconButtonComponent, FlyIfAdminDirective, FlyIfRoleDirective, FlyImageUploadComponent, FlyLeaderboardComponent, FlyMagicActionsComponent, FlyMetaListComponent, FlyModalComponent, FlyModerationQueueComponent, FlyModuleIconDirective, FlyMoneyPipe, FlyPaginationComponent, FlyPeoplePickerComponent, FlyPointsTierComponent, FlyProgressComponent, FlyRelativeTimePipe, FlyRemoteContextService, FlyRemoteRouter, FlyRemoteRouterOutletComponent, FlySearchInputComponent, FlySectionHeaderComponent, FlySecureSrcDirective, FlySegmentedComponent, FlySelectComponent, FlySkeletonComponent, FlySliderComponent, FlySparklineComponent, FlySpinnerComponent, FlyStandaloneAuthCallbackComponent, FlyStandaloneAuthService, FlyStateMessageComponent, FlyDynamicFormComponent as FlySurveyFormComponent, FlyTabComponent, FlyTabsComponent, FlyTagsInputComponent, FlyThemeService, FlyTimePipe, FlyToastService, FlyToggleComponent, FlyTooltipDirective, FlyTreeNavComponent, FlyTypeaheadComponent, FlyUserDirectoryService, FlyWindowHelpService, FlyWindowTitleService, FlyosPendingLaunchesGlobalKey, FlyosShellHandlesLaunchRequestsGlobalKey, FlyosShellOwnsHistoryGlobalKey, GANTT_ZOOMS, I18nService, LAUNCH_CONTEXT, MAGIC_BAR_SEARCH_WIDTH_DEFAULT, MAGIC_BAR_SEARCH_WIDTH_MAX, MAGIC_BAR_SEARCH_WIDTH_MIN, MagicBarRegistry, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, NOVA_PRIORITY_TONE, NOVA_STATUS_TONE, NOVA_TONE_FALLBACK, OverlayStack, PRESENCE_COLORS, PageHeaderComponent, RTL_LOCALE_SET, SHARE_ORG_CHART_SYSTEM_KEY_APPS, SHARE_ORG_CHART_SYSTEM_KEY_DEFAULT, SHARE_PANEL_DEFAULT_FILE_LEVELS, STATE_DEFAULT_ICONS, STATE_DEFAULT_MESSAGE_KEYS, STEP_UP_CODE, STEP_UP_REAUTH_HANDLER, STEP_UP_RETURN_KEY, SUPPORTED_AGENT_PAYLOAD_VERSIONS, SharePanelComponent, SourceAppResolver, StandaloneWindowManagerService, StatusBadgeComponent, StepUpService, ToastHostComponent, TranslatePipe, WINDOW_DATA, WINDOW_HELP_HINT, WindowManagerService, applySkinTone, applySuggestion, ariaSort, buildCron, canConfirm, canGoNext, canGoPrev, captureFocus, clampMagicBarSearchWidth, clampPage, clampSliderValue, connectRemoteLaunch, enterActivatesNatively, filterGroup, filterSuggestions, findLocaleByDialect, findLocaleByPrefix, firstEnabledIndex, firstModuleIndex, flattenModules, flyAdminGuard, flyApiErrorMessage, flyCaptchaBase64Utf8, flyCaptchaBuildToken, flyCaptchaSha256Hex, flyCompactNumber, flyDebounced, flyDecimalNumber, flyDownloadBlob, flyDuration, flyEmojiFor, flyEmojiIsTonable, flyEmojiPackUrl, flyExportFileName, flyFirstEnabledIndex, flyFormatBytes, flyFormatDate, flyFormatDateTime, flyFormatMoney, flyFormatTime, flyFullNumber, flyNextEnabledIndex, flyNextSegmentIndex, flyRelativeTime, flyResolveActiveTab, flyRoleGuard, flyScanPendingDelayMs, flyScanRetry, flySignedCompact, flySkinToneLabelKey, flyStandaloneAuthGuard, flyStandaloneAuthInterceptor, flyToDateOnly, flyToPage, flyUnwrap, flyUnwrapLenient, hasAnyRoleIn, healNativeFederationCacheOnce, initialExpanded, isAccentColor, isChunkLoadError, isFlyAuthStorePopulated, isNativeFederationCacheError, isRtlLocale, isRtlLocaleEntry, isValidCron, isValidSingleField, loadRemoteStyles, magicBarOwnerKey, magicBarSearchText, matchFlyRoutePattern, nextEnabledIndex, nextModuleIndex, nextSegmentIndex, nextSort, normalizeFlyTheme, normalizeRoles, novaPriorityToneVar, novaStatusToneVar, overlayStack, parseCron, parseStepUpChallenge, parseTags, prefetchRemoteStyles, presenceColorFor, printConsoleSecurityWarning, provideFlyChunkReloadRecovery, provideFlyEmojiPack, provideFlyStandaloneAuth, reloadOnceForChunkError, requestAppLaunch, resolveActiveModule, resolveActiveSection, resolveActiveTab, resolveCellValue, resolveStateIcon, resolveStateMessageKey, restoreFocus, sameTags, sectionHintKey, sectionLayout, sliderTrackGradient, sparklinePath, sparklinePoints, stepUpInterceptor, stepUpReturnKey, trimAgentPayload, trimAgentString, unloadRemoteStyles, utf8ByteLength, validateAgentPayload, warnIfEmbeddedSessionMissing };
|
|
24745
24843
|
//# sourceMappingURL=flyos-design-system.mjs.map
|