@foxeltech/angular-ui 0.4.0 → 0.7.44
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/archivo/archivo-400-latin-ext.woff2 +0 -0
- package/archivo/archivo-400-latin.woff2 +0 -0
- package/archivo/archivo-400-vietnamese.woff2 +0 -0
- package/archivo/archivo-500-latin-ext.woff2 +0 -0
- package/archivo/archivo-500-latin.woff2 +0 -0
- package/archivo/archivo-500-vietnamese.woff2 +0 -0
- package/archivo/archivo-600-latin-ext.woff2 +0 -0
- package/archivo/archivo-600-latin.woff2 +0 -0
- package/archivo/archivo-600-vietnamese.woff2 +0 -0
- package/archivo/archivo-700-latin-ext.woff2 +0 -0
- package/archivo/archivo-700-latin.woff2 +0 -0
- package/archivo/archivo-700-vietnamese.woff2 +0 -0
- package/components.css +12 -12
- package/dialogs.css +2 -2
- package/fesm2022/foxeltech-angular-ui-chart.mjs +185 -17
- package/fesm2022/foxeltech-angular-ui-chart.mjs.map +1 -1
- package/fesm2022/foxeltech-angular-ui-flow.mjs +176 -3
- package/fesm2022/foxeltech-angular-ui-flow.mjs.map +1 -1
- package/fesm2022/foxeltech-angular-ui-rich-text.mjs +2 -2
- package/fesm2022/foxeltech-angular-ui-rich-text.mjs.map +1 -1
- package/fesm2022/foxeltech-angular-ui.mjs +849 -69
- package/fesm2022/foxeltech-angular-ui.mjs.map +1 -1
- package/fonts.css +462 -138
- package/ibm-plex-mono/ibm-plex-mono-400-cyrillic-ext.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-400-cyrillic.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-400-latin-ext.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-400-latin.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-400-vietnamese.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-500-cyrillic-ext.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-500-cyrillic.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-500-latin-ext.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-500-latin.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-500-vietnamese.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-600-cyrillic-ext.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-600-cyrillic.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-600-latin-ext.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-600-latin.woff2 +0 -0
- package/ibm-plex-mono/ibm-plex-mono-600-vietnamese.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-400-cyrillic-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-400-cyrillic.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-400-greek.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-400-latin-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-400-latin.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-400-vietnamese.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-500-cyrillic-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-500-cyrillic.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-500-greek.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-500-latin-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-500-latin.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-500-vietnamese.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-600-cyrillic-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-600-cyrillic.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-600-greek.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-600-latin-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-600-latin.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-600-vietnamese.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-700-cyrillic-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-700-cyrillic.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-700-greek.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-700-latin-ext.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-700-latin.woff2 +0 -0
- package/jetbrains-mono/jetbrains-mono-700-vietnamese.woff2 +0 -0
- package/newsreader/newsreader-400-latin-ext.woff2 +0 -0
- package/newsreader/newsreader-400-latin.woff2 +0 -0
- package/newsreader/newsreader-400-vietnamese.woff2 +0 -0
- package/newsreader/newsreader-500-latin-ext.woff2 +0 -0
- package/newsreader/newsreader-500-latin.woff2 +0 -0
- package/newsreader/newsreader-500-vietnamese.woff2 +0 -0
- package/newsreader/newsreader-600-latin-ext.woff2 +0 -0
- package/newsreader/newsreader-600-latin.woff2 +0 -0
- package/newsreader/newsreader-600-vietnamese.woff2 +0 -0
- package/package.json +5 -2
- package/source-serif-4/source-serif-4-400-cyrillic-ext.woff2 +0 -0
- package/source-serif-4/source-serif-4-400-cyrillic.woff2 +0 -0
- package/source-serif-4/source-serif-4-400-greek.woff2 +0 -0
- package/source-serif-4/source-serif-4-400-latin-ext.woff2 +0 -0
- package/source-serif-4/source-serif-4-400-latin.woff2 +0 -0
- package/source-serif-4/source-serif-4-400-vietnamese.woff2 +0 -0
- package/source-serif-4/source-serif-4-600-cyrillic-ext.woff2 +0 -0
- package/source-serif-4/source-serif-4-600-cyrillic.woff2 +0 -0
- package/source-serif-4/source-serif-4-600-greek.woff2 +0 -0
- package/source-serif-4/source-serif-4-600-latin-ext.woff2 +0 -0
- package/source-serif-4/source-serif-4-600-latin.woff2 +0 -0
- package/source-serif-4/source-serif-4-600-vietnamese.woff2 +0 -0
- package/src/lib/styles/components.css +12 -12
- package/src/lib/styles/dialogs.css +2 -2
- package/src/lib/styles/fonts.css +462 -138
- package/src/lib/styles/tailwind.css +1 -1
- package/src/lib/styles/theme.css +596 -69
- package/src/lib/styles/tokens.css +56 -19
- package/src/lib/styles/utilities.css +4 -1
- package/src/lib/ui/components/bar-list/bar-list.component.html +29 -0
- package/src/lib/ui/components/button/button.component.html +7 -5
- package/src/lib/ui/components/checkbox/checkbox.component.html +1 -1
- package/src/lib/ui/components/code-block/code-block.component.html +8 -0
- package/src/lib/ui/components/drawer/drawer.component.html +35 -12
- package/src/lib/ui/components/drawer/drawer.component.scss +104 -18
- package/src/lib/ui/components/facets-rail/facets-rail.component.html +42 -0
- package/src/lib/ui/components/filter-pills/filter-pills.component.html +16 -0
- package/src/lib/ui/components/kanban-board/kanban-board.component.scss +9 -9
- package/src/lib/ui/components/list-row/list-row.component.html +20 -0
- package/src/lib/ui/components/master-detail/master-detail.component.css +22 -0
- package/src/lib/ui/components/master-detail/master-detail.component.html +33 -1
- package/src/lib/ui/components/pending-badge/pending-badge.component.html +15 -0
- package/src/lib/ui/components/pipeline-stepper/pipeline-stepper.component.html +45 -0
- package/src/lib/ui/components/project-card/project-card.component.html +102 -0
- package/src/lib/ui/components/radio-button/radio-button.component.html +1 -1
- package/src/lib/ui/components/radio-button-toggle/radio-button-toggle.component.html +1 -1
- package/src/lib/ui/components/sample-frame/sample-frame.component.html +18 -0
- package/src/lib/ui/components/score-badge/score-badge.component.html +7 -0
- package/src/lib/ui/components/screenshot-frame/screenshot-frame.component.html +40 -0
- package/src/lib/ui/components/section-card/section-card.component.html +19 -6
- package/src/lib/ui/components/segmented/segmented.component.html +42 -0
- package/src/lib/ui/components/segmented/segmented.component.scss +12 -0
- package/src/lib/ui/components/slider/slider.component.html +2 -2
- package/src/lib/ui/components/sparkbar/sparkbar.component.html +14 -0
- package/src/lib/ui/components/stage-dots/stage-dots.component.html +13 -0
- package/src/lib/ui/components/stat-cards/stat-cards.component.html +44 -11
- package/src/lib/ui/components/status-dot/status-dot.component.html +13 -0
- package/src/lib/ui/components/tab-group/tab-group.component.html +37 -8
- package/src/lib/ui/components/tab-group/tab-group.component.scss +41 -1
- package/src/lib/ui/components/tag/tag.component.html +2 -2
- package/src/lib/ui/components/theme-picker/theme-picker.component.html +44 -0
- package/src/lib/ui/components/tree-diagram/tree-diagram.component.html +3 -3
- package/tailwind.css +1 -1
- package/theme.css +596 -69
- package/tokens.css +56 -19
- package/types/foxeltech-angular-ui-chart.d.ts +14 -2
- package/types/foxeltech-angular-ui-flow.d.ts +83 -1
- package/types/foxeltech-angular-ui.d.ts +636 -20
- package/utilities.css +4 -1
- package/BeVietnamPro/BeVietnamPro-Bold.woff2 +0 -0
- package/BeVietnamPro/BeVietnamPro-ExtraLight.woff2 +0 -0
- package/BeVietnamPro/BeVietnamPro-Light.woff2 +0 -0
- package/BeVietnamPro/BeVietnamPro-Medium.woff2 +0 -0
- package/BeVietnamPro/BeVietnamPro-Regular.woff2 +0 -0
- package/BeVietnamPro/BeVietnamPro-SemiBold.woff2 +0 -0
- package/BeVietnamPro/BeVietnamPro-Thin.woff2 +0 -0
- package/SpaceMono-Regular.woff2 +0 -0
- package/dm-sans/DMSans-Bold.woff2 +0 -0
- package/dm-sans/DMSans-Light.woff2 +0 -0
- package/dm-sans/DMSans-Medium.woff2 +0 -0
- package/dm-sans/DMSans-Regular.woff2 +0 -0
- package/dm-sans/DMSans-SemiBold.woff2 +0 -0
- package/dm-sans/DMSans-Thin.woff2 +0 -0
- package/orbitron/Orbitron-Bold.woff2 +0 -0
- package/orbitron/Orbitron-Medium.woff2 +0 -0
- package/orbitron/Orbitron-Regular.woff2 +0 -0
- package/orbitron/Orbitron-SemiBold.woff2 +0 -0
- package/roboto/Roboto-Black.woff2 +0 -0
- package/roboto/Roboto-BlackItalic.woff2 +0 -0
- package/roboto/Roboto-Bold.woff2 +0 -0
- package/roboto/Roboto-BoldCondensed.woff2 +0 -0
- package/roboto/Roboto-BoldCondensedItalic.woff2 +0 -0
- package/roboto/Roboto-BoldItalic.woff2 +0 -0
- package/roboto/Roboto-Condensed.woff2 +0 -0
- package/roboto/Roboto-CondensedItalic.woff2 +0 -0
- package/roboto/Roboto-Italic.woff2 +0 -0
- package/roboto/Roboto-Light.woff2 +0 -0
- package/roboto/Roboto-LightItalic.woff2 +0 -0
- package/roboto/Roboto-Medium.woff2 +0 -0
- package/roboto/Roboto-MediumItalic.woff2 +0 -0
- package/roboto/Roboto-Regular.woff2 +0 -0
- package/roboto/Roboto-Thin.woff2 +0 -0
- package/roboto/Roboto-ThinItalic.woff2 +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { OnDestroy, Injector, DestroyRef, ApplicationRef, OnInit, AfterViewInit, ChangeDetectorRef, Type, EventEmitter, Provider, ModuleWithProviders, TemplateRef, ViewContainerRef, ElementRef, RendererFactory2, OnChanges, SimpleChanges, AfterContentInit, Renderer2, InjectionToken, QueryList, NgZone } from '@angular/core';
|
|
2
|
+
import { OnDestroy, Injector, DestroyRef, ApplicationRef, OnInit, AfterViewInit, ChangeDetectorRef, Type, EventEmitter, Provider, ModuleWithProviders, TemplateRef, ViewContainerRef, ElementRef, RendererFactory2, OnChanges, SimpleChanges, AfterContentInit, AfterViewChecked, Renderer2, InjectionToken, QueryList, NgZone } from '@angular/core';
|
|
3
3
|
import * as _foxeltech_angular_ui from '@foxeltech/angular-ui';
|
|
4
4
|
import { MatDialog, MatDialogRef, MatDialogConfig } from '@angular/material/dialog';
|
|
5
5
|
import { MatPaginator, PageEvent } from '@angular/material/paginator';
|
|
@@ -509,6 +509,14 @@ declare class FxUtils {
|
|
|
509
509
|
static convertColorFromVariable(name: string, alpha?: number, options?: {
|
|
510
510
|
legacyCommaSyntax?: boolean;
|
|
511
511
|
}): string;
|
|
512
|
+
/**
|
|
513
|
+
* Status/severity string → tag tone.
|
|
514
|
+
*
|
|
515
|
+
* Coerces instead of trusting the argument: every caller feeds this raw API
|
|
516
|
+
* values, and a numeric or null field used to throw
|
|
517
|
+
* "key.toLowerCase is not a function" and take the whole screen down.
|
|
518
|
+
* Non-string input simply falls through to the default tone.
|
|
519
|
+
*/
|
|
512
520
|
static getTagClass(key: string, isCriticalExist?: boolean): TagType;
|
|
513
521
|
static validateEmail(value: string): boolean;
|
|
514
522
|
/** Safe deep accessor with the org-wide empty placeholder. */
|
|
@@ -580,6 +588,25 @@ declare function toneBadge(tone: Tone | null): string;
|
|
|
580
588
|
*/
|
|
581
589
|
declare function toneColor(tone: Tone | null, alpha?: number): string;
|
|
582
590
|
|
|
591
|
+
/**
|
|
592
|
+
* Feature gating for the V2 rollout.
|
|
593
|
+
*
|
|
594
|
+
* Each app owns its own `environment.features` block, so the flags are passed
|
|
595
|
+
* in rather than read here — the library has no environment of its own.
|
|
596
|
+
*
|
|
597
|
+
* readonly knowledge = featureEnabled(environment.features, 'knowledge');
|
|
598
|
+
*
|
|
599
|
+
* Why a helper instead of `environment.features?.x`: call sites were drifting
|
|
600
|
+
* between truthy checks and `=== true`, some behind an `as any` cast that hides
|
|
601
|
+
* a typo in the flag name. One function keeps the semantics identical
|
|
602
|
+
* everywhere — a flag counts as on only when it is exactly `true`, so a missing
|
|
603
|
+
* block, a missing key or a stale string value all read as off.
|
|
604
|
+
*/
|
|
605
|
+
type FxFeatureFlags = Record<string, boolean | undefined> | undefined | null;
|
|
606
|
+
declare function featureEnabled(flags: FxFeatureFlags, name: string): boolean;
|
|
607
|
+
/** Convenience for templates that gate on several flags at once. */
|
|
608
|
+
declare function anyFeatureEnabled(flags: FxFeatureFlags, ...names: string[]): boolean;
|
|
609
|
+
|
|
583
610
|
declare class FxValidators {
|
|
584
611
|
/**
|
|
585
612
|
* Name fields: firstName, lastName, groupName, projectName, displayName
|
|
@@ -741,18 +768,54 @@ declare class BreadcrumbService {
|
|
|
741
768
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<BreadcrumbService>;
|
|
742
769
|
}
|
|
743
770
|
|
|
771
|
+
/** The six OgeniumDashboards themes. */
|
|
772
|
+
type OgTheme = 'porcelain' | 'charcoal' | 'ivory' | 'studio' | 'blueprint' | 'terminal';
|
|
773
|
+
declare const OG_THEMES: readonly OgTheme[];
|
|
774
|
+
declare const OG_LIGHT_THEMES: readonly OgTheme[];
|
|
775
|
+
/** Display metadata for theme pickers — accent/page swatches are brand constants. */
|
|
776
|
+
interface OgThemeMeta {
|
|
777
|
+
name: OgTheme;
|
|
778
|
+
label: string;
|
|
779
|
+
accent: string;
|
|
780
|
+
pageBg: string;
|
|
781
|
+
dark: boolean;
|
|
782
|
+
}
|
|
783
|
+
declare const OG_THEME_META: readonly OgThemeMeta[];
|
|
784
|
+
/**
|
|
785
|
+
* Theme NGƯỜI DÙNG được chọn (anh Tú chốt 31/08): chỉ còn một cặp
|
|
786
|
+
* light/dark. Bốn theme còn lại vẫn tồn tại đầy đủ trong theme.css và
|
|
787
|
+
* setTheme() vẫn nhận — chúng dùng cho trang /themes của demo và cho
|
|
788
|
+
* harness screenshot chạy ma trận 6 theme; chỉ **giấu khỏi picker**.
|
|
789
|
+
* Muốn mở lại: thêm tên vào mảng này, không phải dựng lại token.
|
|
790
|
+
*/
|
|
791
|
+
declare const OG_PICKER_THEMES: readonly OgTheme[];
|
|
792
|
+
/** OG_THEME_META đã lọc theo OG_PICKER_THEMES — nguồn duy nhất cho mọi picker. */
|
|
793
|
+
declare const OG_PICKER_THEME_META: readonly OgThemeMeta[];
|
|
794
|
+
/**
|
|
795
|
+
* V2 theme switching: one `data-og-theme` attribute on <html> selects the
|
|
796
|
+
* --og-* token block (theme.css). During the migration window the service
|
|
797
|
+
* also mirrors the legacy `light_theme` class on <body> so remotes built
|
|
798
|
+
* against the pre-V2 stylesheet keep resolving the correct palette
|
|
799
|
+
* (see the SKEW SHIELD note in theme.css).
|
|
800
|
+
*/
|
|
744
801
|
declare class ThemeService {
|
|
745
802
|
private renderer;
|
|
746
803
|
private lightClass;
|
|
747
804
|
private theme$;
|
|
748
805
|
themeStorageKey: string;
|
|
749
806
|
constructor(rendererFactory: RendererFactory2);
|
|
807
|
+
/** Primary API: activate one of the six V2 themes. */
|
|
808
|
+
setTheme(theme: OgTheme): void;
|
|
809
|
+
themeChanges(): Observable<OgTheme>;
|
|
810
|
+
getCurrentTheme(): OgTheme;
|
|
811
|
+
isLight(): boolean;
|
|
812
|
+
/** @deprecated V2: use setTheme(). Maps light→porcelain, dark→charcoal. */
|
|
750
813
|
setLightMode(enable: boolean): void;
|
|
814
|
+
/** @deprecated V2: use setTheme(). Flips between the two default themes. */
|
|
751
815
|
toggleTheme(): void;
|
|
752
|
-
themeChanges(): rxjs.Observable<"light" | "dark">;
|
|
753
|
-
getCurrentTheme(): 'light' | 'dark';
|
|
754
|
-
isLight(): boolean;
|
|
755
816
|
getLogoPath(): string;
|
|
817
|
+
private isLightTheme;
|
|
818
|
+
private readSavedTheme;
|
|
756
819
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeService, never>;
|
|
757
820
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ThemeService>;
|
|
758
821
|
}
|
|
@@ -1059,6 +1122,9 @@ declare class LoadingPanel {
|
|
|
1059
1122
|
|
|
1060
1123
|
declare class SearchBarComponent extends FxComponent<string> implements AfterViewInit {
|
|
1061
1124
|
private ref;
|
|
1125
|
+
/** FxComponent leaves `value` undefined; without ngModel the input would
|
|
1126
|
+
render the literal string "undefined". */
|
|
1127
|
+
value: string;
|
|
1062
1128
|
readonly placeholder: _angular_core.InputSignal<string>;
|
|
1063
1129
|
readonly search: _angular_core.OutputEmitterRef<string>;
|
|
1064
1130
|
readonly valueChange: _angular_core.OutputEmitterRef<string>;
|
|
@@ -1075,18 +1141,29 @@ declare class SearchBarComponent extends FxComponent<string> implements AfterVie
|
|
|
1075
1141
|
declare class TabComponent {
|
|
1076
1142
|
readonly label: _angular_core.InputSignal<string>;
|
|
1077
1143
|
icon?: string;
|
|
1144
|
+
/** Trailing count badge (V2 'page' variant); null/undefined hides it. */
|
|
1145
|
+
readonly count: _angular_core.InputSignal<number | null>;
|
|
1146
|
+
/** Tints the count badge (e.g. vulnerabilities tab shows a danger count). */
|
|
1147
|
+
readonly tone: _angular_core.InputSignal<Tone | null>;
|
|
1078
1148
|
readonly content: _angular_core.Signal<TemplateRef<any>>;
|
|
1079
1149
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabComponent, never>;
|
|
1080
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabComponent, "fx-ui-tab", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; }; }, {}, never, ["*"], true, never>;
|
|
1150
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabComponent, "fx-ui-tab", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; }; "count": { "alias": "count"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1081
1151
|
}
|
|
1082
1152
|
|
|
1083
|
-
declare class TabGroupComponent implements AfterContentInit {
|
|
1153
|
+
declare class TabGroupComponent implements AfterContentInit, AfterViewChecked, OnChanges {
|
|
1084
1154
|
private renderer;
|
|
1085
1155
|
private cdr;
|
|
1086
1156
|
readonly tabs: _angular_core.Signal<readonly TabComponent[]>;
|
|
1087
1157
|
activeIndex: number;
|
|
1158
|
+
/** Emitted on user selection — enables [(activeIndex)] two-way binding. */
|
|
1159
|
+
readonly activeIndexChange: _angular_core.OutputEmitterRef<number>;
|
|
1160
|
+
/** 'page' = the V2 workspace tab strip (larger hit area, count badges). */
|
|
1161
|
+
readonly variant: _angular_core.InputSignal<"default" | "page">;
|
|
1088
1162
|
readonly tabListRef: _angular_core.Signal<ElementRef<HTMLElement>>;
|
|
1089
|
-
readonly underlineRef: _angular_core.Signal<ElementRef<HTMLElement
|
|
1163
|
+
readonly underlineRef: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
|
|
1164
|
+
readonly pagePillRef: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
|
|
1165
|
+
/** Last applied pill geometry — skip DOM writes when nothing moved. */
|
|
1166
|
+
private pillState;
|
|
1090
1167
|
canScrollLeft: boolean;
|
|
1091
1168
|
canScrollRight: boolean;
|
|
1092
1169
|
private animateDelay;
|
|
@@ -1095,8 +1172,19 @@ declare class TabGroupComponent implements AfterContentInit {
|
|
|
1095
1172
|
constructor(renderer: Renderer2);
|
|
1096
1173
|
ngAfterContentInit(): void;
|
|
1097
1174
|
selectTab(index: number): void;
|
|
1175
|
+
badgeClass(tab: TabComponent): string;
|
|
1098
1176
|
/** Roving tablist keyboard nav: arrows move AND activate (selection follows focus). */
|
|
1099
1177
|
onTabKeydown(event: KeyboardEvent, index: number): void;
|
|
1178
|
+
/** Parent-driven activeIndex (deep-link ?tab=, quick-links) must also move the pill. */
|
|
1179
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
1180
|
+
/**
|
|
1181
|
+
* Re-measure every view check: catches label-width changes (language switch,
|
|
1182
|
+
* count arriving) with cached geometry so the DOM write only happens when
|
|
1183
|
+
* the pill actually moved.
|
|
1184
|
+
*/
|
|
1185
|
+
ngAfterViewChecked(): void;
|
|
1186
|
+
/** Slide the 'page' pill to the active tab (offset* is scroll-content relative). */
|
|
1187
|
+
private updatePagePill;
|
|
1100
1188
|
private updateUnderlinePosition;
|
|
1101
1189
|
private scrollToActiveTab;
|
|
1102
1190
|
scroll(direction: 'left' | 'right'): void;
|
|
@@ -1104,7 +1192,7 @@ declare class TabGroupComponent implements AfterContentInit {
|
|
|
1104
1192
|
private updateScrollButtons;
|
|
1105
1193
|
onResize(): void;
|
|
1106
1194
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabGroupComponent, never>;
|
|
1107
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabGroupComponent, "fx-ui-tab-group", never, { "activeIndex": { "alias": "activeIndex"; "required": false; }; }, {}, ["tabs"], never, true, never>;
|
|
1195
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabGroupComponent, "fx-ui-tab-group", never, { "activeIndex": { "alias": "activeIndex"; "required": false; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "activeIndexChange": "activeIndexChange"; }, ["tabs"], never, true, never>;
|
|
1108
1196
|
}
|
|
1109
1197
|
|
|
1110
1198
|
/**
|
|
@@ -1304,6 +1392,8 @@ interface DrawerItem {
|
|
|
1304
1392
|
id: string;
|
|
1305
1393
|
label: string;
|
|
1306
1394
|
icon: string;
|
|
1395
|
+
/** V2: renders as a non-interactive section caption (flat nav, no accordion). */
|
|
1396
|
+
heading?: boolean;
|
|
1307
1397
|
route?: string;
|
|
1308
1398
|
children?: DrawerItem[];
|
|
1309
1399
|
action?: () => void;
|
|
@@ -1313,8 +1403,15 @@ declare class DrawerComponent implements OnInit, OnDestroy {
|
|
|
1313
1403
|
private router;
|
|
1314
1404
|
private cdr;
|
|
1315
1405
|
readonly items: _angular_core.InputSignal<DrawerItem[]>;
|
|
1406
|
+
/** V2: bottom-pinned section (Administration group) — same item rendering,
|
|
1407
|
+
separated by a rule, above the [drawerFooter] slot and version. */
|
|
1408
|
+
readonly footerItems: _angular_core.InputSignal<DrawerItem[]>;
|
|
1316
1409
|
isExpanded: boolean;
|
|
1317
1410
|
logo?: string;
|
|
1411
|
+
/** Wordmark cạnh logo, chỉ hiện khi drawer mở. Bỏ trống = chỉ có mark. */
|
|
1412
|
+
logoText?: string;
|
|
1413
|
+
/** Dòng phụ dưới logoText (tagline/workspace). Chỉ hiện khi drawer mở. */
|
|
1414
|
+
logoSubtext?: string;
|
|
1318
1415
|
version?: string;
|
|
1319
1416
|
readonly toggleExpanded: _angular_core.OutputEmitterRef<boolean>;
|
|
1320
1417
|
readonly itemClicked: _angular_core.OutputEmitterRef<DrawerItem>;
|
|
@@ -1334,7 +1431,7 @@ declare class DrawerComponent implements OnInit, OnDestroy {
|
|
|
1334
1431
|
getAccordionState(itemId: string): string;
|
|
1335
1432
|
getDrawerState(): string;
|
|
1336
1433
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DrawerComponent, never>;
|
|
1337
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DrawerComponent, "fx-ui-drawer", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "isExpanded": { "alias": "isExpanded"; "required": false; }; "logo": { "alias": "logo"; "required": false; }; "version": { "alias": "version"; "required": false; }; }, { "toggleExpanded": "toggleExpanded"; "itemClicked": "itemClicked"; }, never,
|
|
1434
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DrawerComponent, "fx-ui-drawer", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "footerItems": { "alias": "footerItems"; "required": false; "isSignal": true; }; "isExpanded": { "alias": "isExpanded"; "required": false; }; "logo": { "alias": "logo"; "required": false; }; "logoText": { "alias": "logoText"; "required": false; }; "logoSubtext": { "alias": "logoSubtext"; "required": false; }; "version": { "alias": "version"; "required": false; }; }, { "toggleExpanded": "toggleExpanded"; "itemClicked": "itemClicked"; }, never, ["[drawerFooter]"], true, never>;
|
|
1338
1435
|
}
|
|
1339
1436
|
|
|
1340
1437
|
/** Row-card skeleton placeholder for master-detail list panes. */
|
|
@@ -1357,6 +1454,13 @@ declare class SkeletonDetailComponent {
|
|
|
1357
1454
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonDetailComponent, "fx-ui-skeleton-detail", never, { "cards": { "alias": "cards"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1358
1455
|
}
|
|
1359
1456
|
|
|
1457
|
+
interface FxStatCardDelta {
|
|
1458
|
+
/** Caller-formatted delta text (e.g. "+12%", "-3"). */
|
|
1459
|
+
value: string;
|
|
1460
|
+
direction: 'up' | 'down';
|
|
1461
|
+
/** Delta colour — up is not always good (findings up = danger). */
|
|
1462
|
+
tone?: Tone | null;
|
|
1463
|
+
}
|
|
1360
1464
|
interface FxStatCard {
|
|
1361
1465
|
/** Caller-translated caption. */
|
|
1362
1466
|
label: string;
|
|
@@ -1365,17 +1469,33 @@ interface FxStatCard {
|
|
|
1365
1469
|
icon?: string;
|
|
1366
1470
|
/** Colours the number and the icon box; null/undefined renders neutral. */
|
|
1367
1471
|
tone?: Tone | null;
|
|
1472
|
+
/** V2 StatGrid: trend chip beside the number. */
|
|
1473
|
+
delta?: FxStatCardDelta;
|
|
1474
|
+
/** V2 StatGrid: mini bar-trend under the caption. */
|
|
1475
|
+
spark?: number[];
|
|
1476
|
+
/** variant 'figure': caller-formatted sub-caption under the number ("+1 since 4.8.0"). */
|
|
1477
|
+
sub?: string;
|
|
1478
|
+
/** Colours the sub-caption; null/undefined renders muted. */
|
|
1479
|
+
subTone?: Tone | null;
|
|
1368
1480
|
}
|
|
1369
1481
|
/** KPI tile row: big number + tinted icon box + caption, in a responsive grid. */
|
|
1370
1482
|
declare class StatCardsComponent {
|
|
1371
1483
|
readonly cards: _angular_core.InputSignal<FxStatCard[]>;
|
|
1484
|
+
/**
|
|
1485
|
+
* 'tile' (default): tinted icon box + number + caption — the pre-V2 look.
|
|
1486
|
+
* 'figure': the V2 design's KPI column — caption on top, large figure-font
|
|
1487
|
+
* number, toned sub-caption underneath (no icon box).
|
|
1488
|
+
*/
|
|
1489
|
+
readonly variant: _angular_core.InputSignal<"figure" | "tile">;
|
|
1372
1490
|
/** Grid columns; defaults to one column per card. */
|
|
1373
1491
|
cols?: number;
|
|
1374
1492
|
get gridColumns(): string;
|
|
1375
1493
|
numClass(card: FxStatCard): string;
|
|
1376
1494
|
boxClass(card: FxStatCard): string;
|
|
1495
|
+
deltaClass(card: FxStatCard): string;
|
|
1496
|
+
subClass(card: FxStatCard): string;
|
|
1377
1497
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatCardsComponent, never>;
|
|
1378
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatCardsComponent, "fx-ui-stat-cards", never, { "cards": { "alias": "cards"; "required": false; "isSignal": true; }; "cols": { "alias": "cols"; "required": false; }; }, {}, never, never, true, never>;
|
|
1498
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatCardsComponent, "fx-ui-stat-cards", never, { "cards": { "alias": "cards"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "cols": { "alias": "cols"; "required": false; }; }, {}, never, never, true, never>;
|
|
1379
1499
|
}
|
|
1380
1500
|
|
|
1381
1501
|
/** Centered "no data" block. The message is caller-translated (no i18n in lib). */
|
|
@@ -1412,6 +1532,100 @@ declare class FilterChipsComponent {
|
|
|
1412
1532
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterChipsComponent, "fx-ui-filter-chips", never, { "options": { "alias": "options"; "required": false; }; "value": { "alias": "value"; "required": false; }; "toneOverrides": { "alias": "toneOverrides"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
1413
1533
|
}
|
|
1414
1534
|
|
|
1535
|
+
interface FxFilterPillOption {
|
|
1536
|
+
/** '' (empty) is the conventional "All" pill. */
|
|
1537
|
+
value: string;
|
|
1538
|
+
/** Caller-translated label. */
|
|
1539
|
+
label: string;
|
|
1540
|
+
/** Shown muted beside the label; null/undefined renders no count. */
|
|
1541
|
+
count?: number | null;
|
|
1542
|
+
}
|
|
1543
|
+
/**
|
|
1544
|
+
* V2 filter pills — the quick-filter row above ranked lists (design refs 02,
|
|
1545
|
+
* 03, 11): outlined capsules with a muted count, the active one filled with
|
|
1546
|
+
* the primary text colour.
|
|
1547
|
+
*
|
|
1548
|
+
* Distinct from `fx-ui-filter-chips`, which tints each chip by its severity
|
|
1549
|
+
* tone and carries no count. Presentational: the caller owns the filter state.
|
|
1550
|
+
*
|
|
1551
|
+
* <fx-ui-filter-pills [options]="pills" [value]="filters.status"
|
|
1552
|
+
* (valueChange)="filters.status = $event; refresh()" />
|
|
1553
|
+
*/
|
|
1554
|
+
declare class FilterPillsComponent {
|
|
1555
|
+
readonly options: _angular_core.InputSignal<FxFilterPillOption[]>;
|
|
1556
|
+
/** Accepts undefined so screens can bind an optional filter-bag key. */
|
|
1557
|
+
readonly value: _angular_core.InputSignal<string | undefined>;
|
|
1558
|
+
readonly valueChange: _angular_core.OutputEmitterRef<string>;
|
|
1559
|
+
isActive(option: FxFilterPillOption): boolean;
|
|
1560
|
+
pillClass(option: FxFilterPillOption): string;
|
|
1561
|
+
countClass(option: FxFilterPillOption): string;
|
|
1562
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterPillsComponent, never>;
|
|
1563
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterPillsComponent, "fx-ui-filter-pills", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
1564
|
+
}
|
|
1565
|
+
|
|
1566
|
+
/**
|
|
1567
|
+
* V2 stage progress dots — the walkthrough position indicator on the attack
|
|
1568
|
+
* chain toolbar (design refs 04, 07): one dot per stage, the current one drawn
|
|
1569
|
+
* as a wider accent bar, visited ones solid, the rest faint.
|
|
1570
|
+
*
|
|
1571
|
+
* <fx-ui-stage-dots [count]="8" [current]="stageIndex()"
|
|
1572
|
+
* (dotClick)="goToStage($event)" />
|
|
1573
|
+
*/
|
|
1574
|
+
declare class StageDotsComponent {
|
|
1575
|
+
readonly count: _angular_core.InputSignal<number>;
|
|
1576
|
+
/** 0-based current stage; -1 (default) means none selected yet. */
|
|
1577
|
+
readonly current: _angular_core.InputSignal<number>;
|
|
1578
|
+
/** Emit the clicked stage index; wire it to make the dots navigable. */
|
|
1579
|
+
readonly dotClick: _angular_core.OutputEmitterRef<number>;
|
|
1580
|
+
readonly dots: _angular_core.Signal<number[]>;
|
|
1581
|
+
dotClass(index: number): string;
|
|
1582
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StageDotsComponent, never>;
|
|
1583
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StageDotsComponent, "fx-ui-stage-dots", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; "current": { "alias": "current"; "required": false; "isSignal": true; }; }, { "dotClick": "dotClick"; }, never, never, true, never>;
|
|
1584
|
+
}
|
|
1585
|
+
|
|
1586
|
+
/**
|
|
1587
|
+
* V2 evidence code block — the mono panel that carries a process tree, a
|
|
1588
|
+
* command line or any captured text (design ref 05, "Process tree").
|
|
1589
|
+
*
|
|
1590
|
+
* Whitespace is preserved and the box scrolls on its own rather than pushing
|
|
1591
|
+
* the page wide, so ASCII trees survive narrow viewports.
|
|
1592
|
+
*
|
|
1593
|
+
* <fx-ui-code-block [label]="'analyze.processTree' | translate" [code]="tree" />
|
|
1594
|
+
*/
|
|
1595
|
+
declare class CodeBlockComponent {
|
|
1596
|
+
readonly code: _angular_core.InputSignal<string>;
|
|
1597
|
+
/** Caller-translated caption above the box; omit for a bare block. */
|
|
1598
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
1599
|
+
/** Scroll cap; empty grows with the content. */
|
|
1600
|
+
readonly maxHeight: _angular_core.InputSignal<string>;
|
|
1601
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CodeBlockComponent, never>;
|
|
1602
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CodeBlockComponent, "fx-ui-code-block", never, { "code": { "alias": "code"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1603
|
+
}
|
|
1604
|
+
|
|
1605
|
+
/**
|
|
1606
|
+
* V2 captured-evidence frame — a faux window chrome (traffic lights + mono file
|
|
1607
|
+
* name + timestamp) around a screenshot, with a placeholder when the image is
|
|
1608
|
+
* missing (design ref 05, "Screenshot").
|
|
1609
|
+
*
|
|
1610
|
+
* <fx-ui-screenshot-frame [label]="'analyze.screenshot' | translate"
|
|
1611
|
+
* fileName="chain-05.png" timestamp="09:42:18"
|
|
1612
|
+
* [src]="url" [caption]="caption" />
|
|
1613
|
+
*/
|
|
1614
|
+
declare class ScreenshotFrameComponent {
|
|
1615
|
+
/** Caller-translated caption above the frame; omit for a bare frame. */
|
|
1616
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
1617
|
+
readonly fileName: _angular_core.InputSignal<string>;
|
|
1618
|
+
readonly timestamp: _angular_core.InputSignal<string>;
|
|
1619
|
+
/** Image URL; empty renders the placeholder body. */
|
|
1620
|
+
readonly src: _angular_core.InputSignal<string>;
|
|
1621
|
+
/** Caller-translated line under (or inside) the frame. */
|
|
1622
|
+
readonly caption: _angular_core.InputSignal<string>;
|
|
1623
|
+
readonly alt: _angular_core.InputSignal<string>;
|
|
1624
|
+
readonly height: _angular_core.InputSignal<string>;
|
|
1625
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScreenshotFrameComponent, never>;
|
|
1626
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScreenshotFrameComponent, "fx-ui-screenshot-frame", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "timestamp": { "alias": "timestamp"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1627
|
+
}
|
|
1628
|
+
|
|
1415
1629
|
/** Thin tone-coloured progress/score bar with optional label and caption. */
|
|
1416
1630
|
declare class MeterComponent {
|
|
1417
1631
|
value: number;
|
|
@@ -1426,16 +1640,24 @@ declare class MeterComponent {
|
|
|
1426
1640
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MeterComponent, "fx-ui-meter", never, { "value": { "alias": "value"; "required": false; }; "max": { "alias": "max"; "required": false; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; }; "caption": { "alias": "caption"; "required": false; }; }, {}, never, never, true, never>;
|
|
1427
1641
|
}
|
|
1428
1642
|
|
|
1429
|
-
/**
|
|
1643
|
+
/**
|
|
1644
|
+
* Panel section: card with a header and projected body.
|
|
1645
|
+
* - titleStyle 'heading' (default): icon + heading, the pre-V2 look
|
|
1646
|
+
* - titleStyle 'eyebrow': the V2 design's panel header — small tracked
|
|
1647
|
+
* caption on the left, muted [aside] text on the right
|
|
1648
|
+
*/
|
|
1430
1649
|
declare class SectionCardComponent {
|
|
1431
1650
|
/** Caller-translated heading. */
|
|
1432
1651
|
readonly title: _angular_core.InputSignal<string>;
|
|
1433
1652
|
/** hero-icon name; omitted → text-only header. */
|
|
1434
1653
|
icon?: any;
|
|
1435
1654
|
readonly iconTone: _angular_core.InputSignal<Tone | null>;
|
|
1655
|
+
readonly titleStyle: _angular_core.InputSignal<"heading" | "eyebrow">;
|
|
1656
|
+
/** Caller-translated right-aligned hint (eyebrow style). */
|
|
1657
|
+
readonly aside: _angular_core.InputSignal<string>;
|
|
1436
1658
|
get iconClass(): string;
|
|
1437
1659
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SectionCardComponent, never>;
|
|
1438
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SectionCardComponent, "fx-ui-section-card", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; }; "iconTone": { "alias": "iconTone"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1660
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SectionCardComponent, "fx-ui-section-card", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; }; "iconTone": { "alias": "iconTone"; "required": false; "isSignal": true; }; "titleStyle": { "alias": "titleStyle"; "required": false; "isSignal": true; }; "aside": { "alias": "aside"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1439
1661
|
}
|
|
1440
1662
|
|
|
1441
1663
|
/**
|
|
@@ -1490,11 +1712,13 @@ declare class SeverityBadgesComponent {
|
|
|
1490
1712
|
}
|
|
1491
1713
|
|
|
1492
1714
|
/**
|
|
1493
|
-
*
|
|
1494
|
-
*
|
|
1495
|
-
* the
|
|
1715
|
+
* Master-detail shell driven by a BaseMasterDetailComponent. Two-column by
|
|
1716
|
+
* default; projecting a [mdFacets] block (V2 lookup screens) adds a third
|
|
1717
|
+
* facets-rail column before the list. The host page projects its own
|
|
1718
|
+
* header/filters and supplies templates for the parts that vary per entity:
|
|
1496
1719
|
*
|
|
1497
1720
|
* <fx-ui-master-detail [table]="this" [emptyMessage]="'noData' | translate">
|
|
1721
|
+
* <div mdFacets>…<fx-ui-facets-rail …/>…</div> <!-- optional, V2 -->
|
|
1498
1722
|
* <div mdHeader>…title / stat cards…</div>
|
|
1499
1723
|
* <div mdFilters>…search bar / filter chips…</div>
|
|
1500
1724
|
* <ng-template #row let-item let-selected="selected">…row body…</ng-template>
|
|
@@ -1504,7 +1728,10 @@ declare class SeverityBadgesComponent {
|
|
|
1504
1728
|
* The list behaves as a single-select listbox: the selected option is the
|
|
1505
1729
|
* tab stop, ArrowUp/Down/Home/End move the selection.
|
|
1506
1730
|
*/
|
|
1507
|
-
declare class MasterDetailComponent implements AfterViewInit {
|
|
1731
|
+
declare class MasterDetailComponent implements AfterViewInit, AfterContentInit {
|
|
1732
|
+
private hostEl;
|
|
1733
|
+
/** True when the host projected a [mdFacets] block — switches to 3 columns. */
|
|
1734
|
+
hasFacets: boolean;
|
|
1508
1735
|
table: BaseMasterDetailComponent<any>;
|
|
1509
1736
|
/** Fixed list-pane width on lg+ viewports (stacked full-width below). */
|
|
1510
1737
|
readonly listWidth: _angular_core.InputSignal<string>;
|
|
@@ -1514,16 +1741,26 @@ declare class MasterDetailComponent implements AfterViewInit {
|
|
|
1514
1741
|
readonly emptyMessage: _angular_core.InputSignal<string>;
|
|
1515
1742
|
readonly listLabel: _angular_core.InputSignal<string>;
|
|
1516
1743
|
readonly skeletonCards: _angular_core.InputSignal<number>;
|
|
1744
|
+
/** 'prevnext' renders the V2 "X of Y" + Prev/Next controls instead of the
|
|
1745
|
+
Material paginator (which stays in the DOM, hidden — it is the paging
|
|
1746
|
+
engine BaseTable subscribes to). */
|
|
1747
|
+
readonly paginationStyle: _angular_core.InputSignal<"paginator" | "prevnext">;
|
|
1748
|
+
/** Caller-translated Prev/Next labels ("X of Y" is numeric). */
|
|
1749
|
+
readonly prevLabel: _angular_core.InputSignal<string>;
|
|
1750
|
+
readonly nextLabel: _angular_core.InputSignal<string>;
|
|
1517
1751
|
readonly rowTemplate: _angular_core.Signal<TemplateRef<any>>;
|
|
1518
1752
|
readonly detailTemplate: _angular_core.Signal<TemplateRef<any>>;
|
|
1519
1753
|
readonly paginator: _angular_core.Signal<MatPaginator>;
|
|
1520
1754
|
readonly uid: string;
|
|
1755
|
+
ngAfterContentInit(): void;
|
|
1521
1756
|
ngAfterViewInit(): void;
|
|
1757
|
+
/** "X of Y" range text for the prevnext pagination style. */
|
|
1758
|
+
rangeText(): string;
|
|
1522
1759
|
isSelected(row: any): boolean;
|
|
1523
1760
|
optionId(index: number): string;
|
|
1524
1761
|
onKeydown(event: KeyboardEvent, index: number): void;
|
|
1525
1762
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MasterDetailComponent, never>;
|
|
1526
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MasterDetailComponent, "fx-ui-master-detail", never, { "table": { "alias": "table"; "required": false; }; "listWidth": { "alias": "listWidth"; "required": false; "isSignal": true; }; "maxListHeight": { "alias": "maxListHeight"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "listLabel": { "alias": "listLabel"; "required": false; "isSignal": true; }; "skeletonCards": { "alias": "skeletonCards"; "required": false; "isSignal": true; }; }, {}, ["rowTemplate", "detailTemplate"], ["[mdHeader]", "[mdFilters]"], true, never>;
|
|
1763
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MasterDetailComponent, "fx-ui-master-detail", never, { "table": { "alias": "table"; "required": false; }; "listWidth": { "alias": "listWidth"; "required": false; "isSignal": true; }; "maxListHeight": { "alias": "maxListHeight"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "listLabel": { "alias": "listLabel"; "required": false; "isSignal": true; }; "skeletonCards": { "alias": "skeletonCards"; "required": false; "isSignal": true; }; "paginationStyle": { "alias": "paginationStyle"; "required": false; "isSignal": true; }; "prevLabel": { "alias": "prevLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; }, {}, ["rowTemplate", "detailTemplate"], ["[mdFacets]", "[mdHeader]", "[mdFilters]"], true, never>;
|
|
1527
1764
|
}
|
|
1528
1765
|
|
|
1529
1766
|
interface FxMenuItem {
|
|
@@ -1557,6 +1794,385 @@ declare class MenuComponent {
|
|
|
1557
1794
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuComponent, "fx-ui-menu", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "select": "select"; }, never, ["*"], true, never>;
|
|
1558
1795
|
}
|
|
1559
1796
|
|
|
1797
|
+
/**
|
|
1798
|
+
* V2 theme picker — dropdown các theme OgeniumDashboards cho chọn
|
|
1799
|
+
* (OG_PICKER_THEME_META: porcelain/charcoal), mỗi dòng có swatch accent +
|
|
1800
|
+
* page. Drives ThemeService.setTheme(); replaces the pre-V2 sun/moon toggle
|
|
1801
|
+
* (behavior-layer rule: mat-menu stays inside the lib, apps never import
|
|
1802
|
+
* @angular/material directly).
|
|
1803
|
+
*
|
|
1804
|
+
* <fx-ui-theme-picker />
|
|
1805
|
+
*/
|
|
1806
|
+
declare class ThemePickerComponent {
|
|
1807
|
+
private themeService;
|
|
1808
|
+
readonly themes: readonly OgThemeMeta[];
|
|
1809
|
+
readonly current: _angular_core.Signal<OgTheme>;
|
|
1810
|
+
/** Tra trên bộ ĐẦY ĐỦ: theme đang active có thể là một trong 4 theme đã ẩn
|
|
1811
|
+
khỏi picker (deep-link /themes, localStorage cũ) — nhãn vẫn phải đúng. */
|
|
1812
|
+
currentMeta(): OgThemeMeta;
|
|
1813
|
+
select(theme: OgTheme): void;
|
|
1814
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemePickerComponent, never>;
|
|
1815
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ThemePickerComponent, "fx-ui-theme-picker", never, {}, {}, never, never, true, never>;
|
|
1816
|
+
}
|
|
1817
|
+
|
|
1818
|
+
/**
|
|
1819
|
+
* "Waiting on the backend" marker (anh Tú 29/08).
|
|
1820
|
+
*
|
|
1821
|
+
* Put this on any UI the V2 design calls for but no endpoint feeds yet, so the
|
|
1822
|
+
* gap is visible in the product instead of living only in a backlog file.
|
|
1823
|
+
* `grep -r "fx-ui-pending-badge"` then lists every outstanding field.
|
|
1824
|
+
*
|
|
1825
|
+
* <fx-ui-pending-badge [field]="'confirmed-chains weekly series'" />
|
|
1826
|
+
*
|
|
1827
|
+
* Keep the copy factual: it states that data is missing, never fakes a value.
|
|
1828
|
+
*/
|
|
1829
|
+
declare class PendingBadgeComponent {
|
|
1830
|
+
/** Caller-translated chip text. */
|
|
1831
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
1832
|
+
/**
|
|
1833
|
+
* What exactly is missing — shown as the title tooltip so a reviewer can read
|
|
1834
|
+
* the required field without opening the code.
|
|
1835
|
+
*/
|
|
1836
|
+
readonly field: _angular_core.InputSignal<string>;
|
|
1837
|
+
/** 'chip' (default) sits inline; 'dot' is a bare marker for dense rows. */
|
|
1838
|
+
readonly variant: _angular_core.InputSignal<"chip" | "dot">;
|
|
1839
|
+
get tooltip(): string;
|
|
1840
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PendingBadgeComponent, never>;
|
|
1841
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PendingBadgeComponent, "fx-ui-pending-badge", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "field": { "alias": "field"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1842
|
+
}
|
|
1843
|
+
|
|
1844
|
+
/**
|
|
1845
|
+
* Wraps UI that is rendered from PLACEHOLDER data so the layout can be
|
|
1846
|
+
* reviewed before its endpoint exists (anh Tú 29/08: "muốn có full giao diện
|
|
1847
|
+
* trước để review").
|
|
1848
|
+
*
|
|
1849
|
+
* The frame makes the status unmistakable — dashed outline, a corner label and
|
|
1850
|
+
* the pending marker naming the missing field — so sample shapes can never be
|
|
1851
|
+
* mistaken for measured values. Drop the wrapper (and the sample input) the
|
|
1852
|
+
* moment the API lands.
|
|
1853
|
+
*
|
|
1854
|
+
* The pending chip is inlined rather than composed from fx-ui-pending-badge:
|
|
1855
|
+
* one lib component importing another inside the same barrel tripped NG0919
|
|
1856
|
+
* (metadata read before definition) in consuming apps.
|
|
1857
|
+
*
|
|
1858
|
+
* <fx-ui-sample-frame [field]="'weekly activity'" [label]="'Sample layout'">
|
|
1859
|
+
* …chart rendered from sample series…
|
|
1860
|
+
* </fx-ui-sample-frame>
|
|
1861
|
+
*/
|
|
1862
|
+
declare class SampleFrameComponent {
|
|
1863
|
+
/** Caller-translated corner label. */
|
|
1864
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
1865
|
+
/** Field the backend still owes — shown on the pending badge tooltip. */
|
|
1866
|
+
readonly field: _angular_core.InputSignal<string>;
|
|
1867
|
+
/** Caller-translated pending-chip text. */
|
|
1868
|
+
readonly pendingLabel: _angular_core.InputSignal<string>;
|
|
1869
|
+
get tooltip(): string;
|
|
1870
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SampleFrameComponent, never>;
|
|
1871
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SampleFrameComponent, "fx-ui-sample-frame", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "field": { "alias": "field"; "required": false; "isSignal": true; }; "pendingLabel": { "alias": "pendingLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1872
|
+
}
|
|
1873
|
+
|
|
1874
|
+
/**
|
|
1875
|
+
* V2 score badge — the risk/score chip used on attack-path rows, dashboard
|
|
1876
|
+
* panels and project tiles. Colour comes from the 0–100 risk band unless an
|
|
1877
|
+
* explicit tone is given (bands: ≥90 critical, ≥70 danger, ≥40 warning, else
|
|
1878
|
+
* success — same thresholds as value-tone's scoreTone on a 0–100 scale).
|
|
1879
|
+
*/
|
|
1880
|
+
declare class ScoreBadgeComponent {
|
|
1881
|
+
readonly score: _angular_core.InputSignal<string | number>;
|
|
1882
|
+
/** Denominator shown as "98 / 100"; omit for a bare score. */
|
|
1883
|
+
readonly outOf: _angular_core.InputSignal<number | null>;
|
|
1884
|
+
/** Overrides the band-derived tone. */
|
|
1885
|
+
readonly tone: _angular_core.InputSignal<Tone | null>;
|
|
1886
|
+
readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
|
|
1887
|
+
readonly resolvedTone: _angular_core.Signal<Tone | null>;
|
|
1888
|
+
badgeClass(): string;
|
|
1889
|
+
sizeClass(): string;
|
|
1890
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScoreBadgeComponent, never>;
|
|
1891
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScoreBadgeComponent, "fx-ui-score-badge", never, { "score": { "alias": "score"; "required": true; "isSignal": true; }; "outOf": { "alias": "outOf"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1892
|
+
}
|
|
1893
|
+
|
|
1894
|
+
/**
|
|
1895
|
+
* V2 StatusDot — tiny tone-coloured indicator used in list rows, project
|
|
1896
|
+
* cards and stat grids. Optional pulse for "live" states (running scans).
|
|
1897
|
+
*
|
|
1898
|
+
* <fx-ui-status-dot tone="success" />
|
|
1899
|
+
* <fx-ui-status-dot tone="warning" [pulse]="true" />
|
|
1900
|
+
*/
|
|
1901
|
+
declare class StatusDotComponent {
|
|
1902
|
+
readonly tone: _angular_core.InputSignal<Tone | null>;
|
|
1903
|
+
/** Diameter in px. */
|
|
1904
|
+
readonly size: _angular_core.InputSignal<number>;
|
|
1905
|
+
readonly pulse: _angular_core.InputSignal<boolean>;
|
|
1906
|
+
dotClass(): string;
|
|
1907
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatusDotComponent, never>;
|
|
1908
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatusDotComponent, "fx-ui-status-dot", never, { "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "pulse": { "alias": "pulse"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1909
|
+
}
|
|
1910
|
+
|
|
1911
|
+
/**
|
|
1912
|
+
* V2 sparkbar — inline mini bar-trend (risk trend on project cards, deltas in
|
|
1913
|
+
* stat grids). Pure DOM, token-coloured; no chart engine.
|
|
1914
|
+
*
|
|
1915
|
+
* <fx-ui-sparkbar [values]="[3, 5, 2, 8, 6]" />
|
|
1916
|
+
*/
|
|
1917
|
+
declare class SparkbarComponent {
|
|
1918
|
+
readonly values: _angular_core.InputSignal<number[]>;
|
|
1919
|
+
/** Bar colour; null renders the accent. */
|
|
1920
|
+
readonly tone: _angular_core.InputSignal<Tone | null>;
|
|
1921
|
+
readonly height: _angular_core.InputSignal<number>;
|
|
1922
|
+
readonly bars: _angular_core.Signal<number[]>;
|
|
1923
|
+
barClass(): string;
|
|
1924
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SparkbarComponent, never>;
|
|
1925
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SparkbarComponent, "fx-ui-sparkbar", never, { "values": { "alias": "values"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1926
|
+
}
|
|
1927
|
+
|
|
1928
|
+
interface FxSegmentedOption {
|
|
1929
|
+
value: string | number;
|
|
1930
|
+
/** Caller-translated label. */
|
|
1931
|
+
label: string;
|
|
1932
|
+
/** Optional hero-icon before the label. */
|
|
1933
|
+
icon?: string;
|
|
1934
|
+
/** Optional trailing count chip. */
|
|
1935
|
+
count?: number;
|
|
1936
|
+
disabled?: boolean;
|
|
1937
|
+
}
|
|
1938
|
+
/**
|
|
1939
|
+
* V2 segmented control — mode toggles (Essentials/Advanced), Catalog/Table
|
|
1940
|
+
* view switches, sub-navigation inside a tab. Generic n-option control; the
|
|
1941
|
+
* semantics live with the caller.
|
|
1942
|
+
*
|
|
1943
|
+
* Rendered as a compact pill group (anh Tú 29/08): equal-width options inside
|
|
1944
|
+
* a rounded-full track, with a single "thumb" that SLIDES to the active
|
|
1945
|
+
* option (transform transition — no per-button background repaint).
|
|
1946
|
+
*
|
|
1947
|
+
* <fx-ui-segmented [options]="modes" [(value)]="mode" />
|
|
1948
|
+
*/
|
|
1949
|
+
declare class SegmentedComponent {
|
|
1950
|
+
readonly options: _angular_core.InputSignal<FxSegmentedOption[]>;
|
|
1951
|
+
readonly value: _angular_core.ModelSignal<string | number | null>;
|
|
1952
|
+
/** Accessible name for the group. */
|
|
1953
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
1954
|
+
/**
|
|
1955
|
+
* Both variants share the pill shape; they differ in the thumb fill:
|
|
1956
|
+
* 'default': raised surface thumb — view switches (Catalog/Table, ref 10).
|
|
1957
|
+
* 'pill': accent-filled thumb — the Essential/Advanced depth toggle
|
|
1958
|
+
* (design refs 04/05).
|
|
1959
|
+
*/
|
|
1960
|
+
readonly variant: _angular_core.InputSignal<"default" | "pill">;
|
|
1961
|
+
/** Index the sliding thumb sits on; -1 hides it (no/unknown selection). */
|
|
1962
|
+
readonly activeIndex: _angular_core.Signal<number>;
|
|
1963
|
+
/** Equal-width tracks → the thumb is 1/n of the inner width and slides by
|
|
1964
|
+
* multiples of its own width. Pure CSS transform, nothing to measure. */
|
|
1965
|
+
readonly thumbWidth: _angular_core.Signal<string>;
|
|
1966
|
+
readonly thumbTransform: _angular_core.Signal<string>;
|
|
1967
|
+
select(option: FxSegmentedOption): void;
|
|
1968
|
+
thumbClass(): string;
|
|
1969
|
+
optionClass(option: FxSegmentedOption): string;
|
|
1970
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SegmentedComponent, never>;
|
|
1971
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SegmentedComponent, "fx-ui-segmented", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
|
|
1972
|
+
}
|
|
1973
|
+
|
|
1974
|
+
interface FxListRowBadge {
|
|
1975
|
+
/** Caller-translated label. */
|
|
1976
|
+
label: string;
|
|
1977
|
+
tone?: Tone | null;
|
|
1978
|
+
}
|
|
1979
|
+
/**
|
|
1980
|
+
* V2 ListRow — presentational body for master-detail #row templates and other
|
|
1981
|
+
* selectable lists: status dot + title, trailing badges, meta line. Extra
|
|
1982
|
+
* content projects below the meta line.
|
|
1983
|
+
*
|
|
1984
|
+
* <ng-template #row let-item>
|
|
1985
|
+
* <fx-ui-list-row
|
|
1986
|
+
* [title]="item.name"
|
|
1987
|
+
* [meta]="item.version + ' · ' + item.date"
|
|
1988
|
+
* [dotTone]="statusTone(item)"
|
|
1989
|
+
* [badges]="[{ label: item.severity, tone: severityTone(item.severity) }]"
|
|
1990
|
+
* />
|
|
1991
|
+
* </ng-template>
|
|
1992
|
+
*/
|
|
1993
|
+
declare class ListRowComponent {
|
|
1994
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
1995
|
+
readonly meta: _angular_core.InputSignal<string>;
|
|
1996
|
+
readonly badges: _angular_core.InputSignal<FxListRowBadge[]>;
|
|
1997
|
+
readonly dotTone: _angular_core.InputSignal<Tone | null | undefined>;
|
|
1998
|
+
readonly dotPulse: _angular_core.InputSignal<boolean>;
|
|
1999
|
+
badgeClass(badge: FxListRowBadge): string;
|
|
2000
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListRowComponent, never>;
|
|
2001
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListRowComponent, "fx-ui-list-row", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "meta": { "alias": "meta"; "required": false; "isSignal": true; }; "badges": { "alias": "badges"; "required": false; "isSignal": true; }; "dotTone": { "alias": "dotTone"; "required": false; "isSignal": true; }; "dotPulse": { "alias": "dotPulse"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
2002
|
+
}
|
|
2003
|
+
|
|
2004
|
+
interface FxBarListItem {
|
|
2005
|
+
/** Caller-translated label. */
|
|
2006
|
+
label: string;
|
|
2007
|
+
value: number;
|
|
2008
|
+
/** Shown instead of the raw value (e.g. "9.8", "82%"). */
|
|
2009
|
+
valueLabel?: string;
|
|
2010
|
+
/** Bar colour; null/undefined renders the accent. */
|
|
2011
|
+
tone?: Tone | null;
|
|
2012
|
+
/** Secondary line under the label. */
|
|
2013
|
+
meta?: string;
|
|
2014
|
+
/** Free-form identifier handed back on (select). */
|
|
2015
|
+
data?: any;
|
|
2016
|
+
}
|
|
2017
|
+
/**
|
|
2018
|
+
* V2 BarList — ranked horizontal bars ("Top projects by risk", "Top critical
|
|
2019
|
+
* attack paths"). Pure DOM (accessible, token-native, clickable) — charts via
|
|
2020
|
+
* ECharts are for time series, not rankings.
|
|
2021
|
+
*
|
|
2022
|
+
* <fx-ui-bar-list [items]="topRisk" (select)="open($event)" />
|
|
2023
|
+
*/
|
|
2024
|
+
declare class BarListComponent {
|
|
2025
|
+
readonly items: _angular_core.InputSignal<FxBarListItem[]>;
|
|
2026
|
+
/** Rows render as buttons only when true (a (select) listener exists). */
|
|
2027
|
+
readonly interactive: _angular_core.InputSignal<boolean>;
|
|
2028
|
+
readonly select: _angular_core.OutputEmitterRef<FxBarListItem>;
|
|
2029
|
+
readonly max: _angular_core.Signal<number>;
|
|
2030
|
+
widthOf(item: FxBarListItem): number;
|
|
2031
|
+
barClass(item: FxBarListItem): string;
|
|
2032
|
+
onSelect(item: FxBarListItem): void;
|
|
2033
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BarListComponent, never>;
|
|
2034
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BarListComponent, "fx-ui-bar-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; }, { "select": "select"; }, never, never, true, never>;
|
|
2035
|
+
}
|
|
2036
|
+
|
|
2037
|
+
interface FxFacetOption {
|
|
2038
|
+
value: string | number;
|
|
2039
|
+
/** Caller-translated label. */
|
|
2040
|
+
label: string;
|
|
2041
|
+
count?: number;
|
|
2042
|
+
/** Optional tone dot before the label (severity facets). */
|
|
2043
|
+
tone?: Tone | null;
|
|
2044
|
+
}
|
|
2045
|
+
interface FxFacetGroup {
|
|
2046
|
+
id: string;
|
|
2047
|
+
/** Caller-translated group heading. */
|
|
2048
|
+
label: string;
|
|
2049
|
+
/** Multi-select (checkbox semantics); default single-select toggle. */
|
|
2050
|
+
multi?: boolean;
|
|
2051
|
+
options: FxFacetOption[];
|
|
2052
|
+
}
|
|
2053
|
+
type FxFacetSelection = Record<string, (string | number)[]>;
|
|
2054
|
+
/**
|
|
2055
|
+
* V2 facets rail — the first column of 3-column lookup screens: filter groups
|
|
2056
|
+
* with counts + a Reset link. Presentational: filtering itself stays in the
|
|
2057
|
+
* page (feed the emitted selection into BaseMasterDetail filters).
|
|
2058
|
+
*
|
|
2059
|
+
* <div mdFacets>
|
|
2060
|
+
* <fx-ui-facets-rail [groups]="facetGroups" [selection]="facets"
|
|
2061
|
+
* (selectionChange)="onFacets($event)" />
|
|
2062
|
+
* </div>
|
|
2063
|
+
*/
|
|
2064
|
+
declare class FacetsRailComponent {
|
|
2065
|
+
readonly groups: _angular_core.InputSignal<FxFacetGroup[]>;
|
|
2066
|
+
readonly selection: _angular_core.InputSignal<FxFacetSelection>;
|
|
2067
|
+
/** Caller-translated label for the reset affordance. */
|
|
2068
|
+
readonly resetLabel: _angular_core.InputSignal<string>;
|
|
2069
|
+
readonly selectionChange: _angular_core.OutputEmitterRef<FxFacetSelection>;
|
|
2070
|
+
readonly hasSelection: _angular_core.Signal<boolean>;
|
|
2071
|
+
isSelected(group: FxFacetGroup, option: FxFacetOption): boolean;
|
|
2072
|
+
toggle(group: FxFacetGroup, option: FxFacetOption): void;
|
|
2073
|
+
reset(): void;
|
|
2074
|
+
toneClass(option: FxFacetOption): string;
|
|
2075
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FacetsRailComponent, never>;
|
|
2076
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FacetsRailComponent, "fx-ui-facets-rail", never, { "groups": { "alias": "groups"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "resetLabel": { "alias": "resetLabel"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
|
|
2077
|
+
}
|
|
2078
|
+
|
|
2079
|
+
interface FxProjectCardChip {
|
|
2080
|
+
/** Caller-translated label. */
|
|
2081
|
+
label: string;
|
|
2082
|
+
tone?: Tone | null;
|
|
2083
|
+
}
|
|
2084
|
+
interface FxProjectCardMetric {
|
|
2085
|
+
/** Caller-formatted figure ("128", "--"). */
|
|
2086
|
+
value: string | number;
|
|
2087
|
+
/** Caller-translated caption under the figure. */
|
|
2088
|
+
label: string;
|
|
2089
|
+
}
|
|
2090
|
+
interface FxProjectCard {
|
|
2091
|
+
name: string;
|
|
2092
|
+
description?: string;
|
|
2093
|
+
/** 1–2 char initials rendered in an accent-soft square (design 12). */
|
|
2094
|
+
avatar?: string;
|
|
2095
|
+
/** Small line under the name (schedule / scope) with an optional hero-icon. */
|
|
2096
|
+
sub?: {
|
|
2097
|
+
icon?: string;
|
|
2098
|
+
label: string;
|
|
2099
|
+
};
|
|
2100
|
+
/** Score chip top-right ("High · 82"); rendered as a toned pill. */
|
|
2101
|
+
score?: string | number;
|
|
2102
|
+
scoreTone?: Tone | null;
|
|
2103
|
+
/** Caption under the score chip (kept for pre-V2 callers). */
|
|
2104
|
+
scoreLabel?: string;
|
|
2105
|
+
/** Risk-trend sparkbar values (pre-V2 look; prefer `trend`). */
|
|
2106
|
+
spark?: number[];
|
|
2107
|
+
/**
|
|
2108
|
+
* Design-12 risk trend: one toned block per period, oldest first, with a
|
|
2109
|
+
* caption line underneath ("risk trend" · "128 analyses").
|
|
2110
|
+
*/
|
|
2111
|
+
trend?: {
|
|
2112
|
+
tones: (Tone | null)[];
|
|
2113
|
+
caption?: string;
|
|
2114
|
+
aside?: string;
|
|
2115
|
+
};
|
|
2116
|
+
chips?: FxProjectCardChip[];
|
|
2117
|
+
/** Metric columns (Binaries · Findings · …): figure + caption. */
|
|
2118
|
+
metrics?: FxProjectCardMetric[];
|
|
2119
|
+
/** Footer meta line (e.g. "Last analysis · 2d ago"). */
|
|
2120
|
+
meta?: string;
|
|
2121
|
+
/** Footer link label right of the meta ("Open ›"); the whole card emits (open). */
|
|
2122
|
+
openLabel?: string;
|
|
2123
|
+
/** Free-form identifier handed back on (open). */
|
|
2124
|
+
data?: any;
|
|
2125
|
+
}
|
|
2126
|
+
/**
|
|
2127
|
+
* V2 project card — the Project Management catalog tile (design 12): initials
|
|
2128
|
+
* avatar + name + schedule line, toned score chip, risk-trend blocks, metric
|
|
2129
|
+
* columns and a "Last analysis · … / Open ›" footer.
|
|
2130
|
+
*
|
|
2131
|
+
* <fx-ui-project-card [card]="project" (open)="goTo(project)" />
|
|
2132
|
+
*/
|
|
2133
|
+
declare class ProjectCardComponent {
|
|
2134
|
+
readonly card: _angular_core.InputSignal<FxProjectCard>;
|
|
2135
|
+
readonly open: _angular_core.OutputEmitterRef<FxProjectCard>;
|
|
2136
|
+
scoreChipClass(): string;
|
|
2137
|
+
chipClass(chip: FxProjectCardChip): string;
|
|
2138
|
+
blockClass(tone: Tone | null): string;
|
|
2139
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProjectCardComponent, never>;
|
|
2140
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProjectCardComponent, "fx-ui-project-card", never, { "card": { "alias": "card"; "required": true; "isSignal": true; }; }, { "open": "open"; }, never, never, true, never>;
|
|
2141
|
+
}
|
|
2142
|
+
|
|
2143
|
+
type FxPipelineStageState = 'pending' | 'active' | 'done' | 'error';
|
|
2144
|
+
interface FxPipelineStage {
|
|
2145
|
+
id: string;
|
|
2146
|
+
/** Caller-translated label. */
|
|
2147
|
+
label: string;
|
|
2148
|
+
state?: FxPipelineStageState;
|
|
2149
|
+
/** Small line under the label (e.g. "optional", a duration). */
|
|
2150
|
+
description?: string;
|
|
2151
|
+
}
|
|
2152
|
+
/**
|
|
2153
|
+
* V2 pipeline stepper — the New Analysis 7-stage pipeline header. Renders the
|
|
2154
|
+
* stage strip only; the page owns the stage bodies (project the current one
|
|
2155
|
+
* below). Stage states are data — the parent decides what is done/active.
|
|
2156
|
+
*
|
|
2157
|
+
* <fx-ui-pipeline-stepper [stages]="stages" (stageClick)="goTo($event)">
|
|
2158
|
+
* …current stage body…
|
|
2159
|
+
* </fx-ui-pipeline-stepper>
|
|
2160
|
+
*/
|
|
2161
|
+
declare class PipelineStepperComponent {
|
|
2162
|
+
readonly stages: _angular_core.InputSignal<FxPipelineStage[]>;
|
|
2163
|
+
/** Only done stages are click-navigable (review a completed step). */
|
|
2164
|
+
readonly clickable: _angular_core.InputSignal<boolean>;
|
|
2165
|
+
readonly stageClick: _angular_core.OutputEmitterRef<number>;
|
|
2166
|
+
stateOf(stage: FxPipelineStage): FxPipelineStageState;
|
|
2167
|
+
circleClass(stage: FxPipelineStage): string;
|
|
2168
|
+
labelClass(stage: FxPipelineStage): string;
|
|
2169
|
+
connectorClass(stage: FxPipelineStage): string;
|
|
2170
|
+
canClick(stage: FxPipelineStage): boolean;
|
|
2171
|
+
onStageClick(stage: FxPipelineStage, index: number): void;
|
|
2172
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PipelineStepperComponent, never>;
|
|
2173
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PipelineStepperComponent, "fx-ui-pipeline-stepper", never, { "stages": { "alias": "stages"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; }, { "stageClick": "stageClick"; }, never, ["*"], true, never>;
|
|
2174
|
+
}
|
|
2175
|
+
|
|
1560
2176
|
declare class ConfirmationDialogComponent {
|
|
1561
2177
|
private ref;
|
|
1562
2178
|
bindings: any;
|
|
@@ -1585,9 +2201,9 @@ declare class ConfirmationDialogComponent {
|
|
|
1585
2201
|
*/
|
|
1586
2202
|
declare class UiModule {
|
|
1587
2203
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiModule, never>;
|
|
1588
|
-
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<UiModule, never, [typeof i1$1.FormsModule, typeof i1$1.ReactiveFormsModule, typeof i2.RouterModule, typeof HasPermissionDirective, typeof TrimOnBlurDirective, typeof InputComponent, typeof SelectComponent, typeof RadioButtonComponent, typeof CheckboxComponent, typeof DndUploadComponent, typeof ButtonComponent, typeof RadioButtonToggleComponent, typeof DatetimePicker, typeof LoadingPanel, typeof SearchBarComponent, typeof TabGroupComponent, typeof TabComponent, typeof HeroIconComponent, typeof ToastComponent, typeof ToastContainerComponent, typeof TagComponent, typeof SliderComponent, typeof SwitchComponent, typeof SkeletonTableLoadingComponent, typeof CircleProgressBar, typeof TreeDiagram, typeof TableCell, typeof KanbanBoardComponent, typeof DrawerComponent, typeof SkeletonListComponent, typeof SkeletonDetailComponent, typeof StatCardsComponent, typeof EmptyStateComponent, typeof FilterChipsComponent, typeof MeterComponent, typeof SectionCardComponent, typeof InfoFieldComponent, typeof SeverityBadgesComponent, typeof MasterDetailComponent, typeof MenuComponent, typeof ConfirmationDialogComponent], [typeof InputComponent, typeof SelectComponent, typeof RadioButtonComponent, typeof CheckboxComponent, typeof DndUploadComponent, typeof ButtonComponent, typeof RadioButtonToggleComponent, typeof DatetimePicker, typeof LoadingPanel, typeof SearchBarComponent, typeof TabGroupComponent, typeof TabComponent, typeof HeroIconComponent, typeof ToastComponent, typeof ToastContainerComponent, typeof TagComponent, typeof SliderComponent, typeof SwitchComponent, typeof SkeletonTableLoadingComponent, typeof CircleProgressBar, typeof TreeDiagram, typeof TableCell, typeof KanbanBoardComponent, typeof DrawerComponent, typeof SkeletonListComponent, typeof SkeletonDetailComponent, typeof StatCardsComponent, typeof EmptyStateComponent, typeof FilterChipsComponent, typeof MeterComponent, typeof SectionCardComponent, typeof InfoFieldComponent, typeof SeverityBadgesComponent, typeof MasterDetailComponent, typeof MenuComponent, typeof ConfirmationDialogComponent, typeof i1$1.FormsModule, typeof i1$1.ReactiveFormsModule, typeof i2.RouterModule, typeof HasPermissionDirective, typeof TrimOnBlurDirective]>;
|
|
2204
|
+
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<UiModule, never, [typeof i1$1.FormsModule, typeof i1$1.ReactiveFormsModule, typeof i2.RouterModule, typeof HasPermissionDirective, typeof TrimOnBlurDirective, typeof InputComponent, typeof SelectComponent, typeof RadioButtonComponent, typeof CheckboxComponent, typeof DndUploadComponent, typeof ButtonComponent, typeof RadioButtonToggleComponent, typeof DatetimePicker, typeof LoadingPanel, typeof SearchBarComponent, typeof TabGroupComponent, typeof TabComponent, typeof HeroIconComponent, typeof ToastComponent, typeof ToastContainerComponent, typeof TagComponent, typeof SliderComponent, typeof SwitchComponent, typeof SkeletonTableLoadingComponent, typeof CircleProgressBar, typeof TreeDiagram, typeof TableCell, typeof KanbanBoardComponent, typeof DrawerComponent, typeof SkeletonListComponent, typeof SkeletonDetailComponent, typeof StatCardsComponent, typeof EmptyStateComponent, typeof FilterChipsComponent, typeof FilterPillsComponent, typeof StageDotsComponent, typeof CodeBlockComponent, typeof ScreenshotFrameComponent, typeof MeterComponent, typeof SectionCardComponent, typeof InfoFieldComponent, typeof SeverityBadgesComponent, typeof MasterDetailComponent, typeof MenuComponent, typeof ThemePickerComponent, typeof PendingBadgeComponent, typeof SampleFrameComponent, typeof ScoreBadgeComponent, typeof StatusDotComponent, typeof SparkbarComponent, typeof SegmentedComponent, typeof ListRowComponent, typeof BarListComponent, typeof FacetsRailComponent, typeof ProjectCardComponent, typeof PipelineStepperComponent, typeof ConfirmationDialogComponent], [typeof InputComponent, typeof SelectComponent, typeof RadioButtonComponent, typeof CheckboxComponent, typeof DndUploadComponent, typeof ButtonComponent, typeof RadioButtonToggleComponent, typeof DatetimePicker, typeof LoadingPanel, typeof SearchBarComponent, typeof TabGroupComponent, typeof TabComponent, typeof HeroIconComponent, typeof ToastComponent, typeof ToastContainerComponent, typeof TagComponent, typeof SliderComponent, typeof SwitchComponent, typeof SkeletonTableLoadingComponent, typeof CircleProgressBar, typeof TreeDiagram, typeof TableCell, typeof KanbanBoardComponent, typeof DrawerComponent, typeof SkeletonListComponent, typeof SkeletonDetailComponent, typeof StatCardsComponent, typeof EmptyStateComponent, typeof FilterChipsComponent, typeof FilterPillsComponent, typeof StageDotsComponent, typeof CodeBlockComponent, typeof ScreenshotFrameComponent, typeof MeterComponent, typeof SectionCardComponent, typeof InfoFieldComponent, typeof SeverityBadgesComponent, typeof MasterDetailComponent, typeof MenuComponent, typeof ThemePickerComponent, typeof PendingBadgeComponent, typeof SampleFrameComponent, typeof ScoreBadgeComponent, typeof StatusDotComponent, typeof SparkbarComponent, typeof SegmentedComponent, typeof ListRowComponent, typeof BarListComponent, typeof FacetsRailComponent, typeof ProjectCardComponent, typeof PipelineStepperComponent, typeof ConfirmationDialogComponent, typeof i1$1.FormsModule, typeof i1$1.ReactiveFormsModule, typeof i2.RouterModule, typeof HasPermissionDirective, typeof TrimOnBlurDirective]>;
|
|
1589
2205
|
static ɵinj: _angular_core.ɵɵInjectorDeclaration<UiModule>;
|
|
1590
2206
|
}
|
|
1591
2207
|
|
|
1592
|
-
export { AuthInterceptor, AuthStateService, BaseComponent, BaseDialogComponent, BaseMasterDetailComponent, BaseResolver, BaseTableComponent, BreadcrumbService, ButtonComponent, CheckboxComponent, CircleProgressBar, ConfirmationDialogComponent, DatetimePicker, DndUploadComponent, DrawerComponent, EmptyStateComponent, FX_ICON_SPRITE_URL, FilterChipsComponent, FxComponent, FxDialogService, FxLoadingService, FxStorageService, FxToastrService, FxUtils, FxValidators, HasPermissionDirective, HeroIconComponent, HttpLoaderFactory, HttpWrapper, InfoFieldComponent, InputComponent, KanbanBoardComponent, LoadingPanel, MasterDetailComponent, MenuComponent, MeterComponent, NotificationService, PermissionGuard, PermissionService, RadioButtonComponent, RadioButtonToggleComponent, RealtimeTableSync, SearchBarComponent, SectionCardComponent, SelectComponent, SeverityBadgesComponent, SkeletonDetailComponent, SkeletonListComponent, SkeletonTableLoadingComponent, SliderComponent, StatCardsComponent, SwitchComponent, TabComponent, TabGroupComponent, TableCell, TagComponent, ThemeService, ToastComponent, ToastContainerComponent, TranslationModule, TranslationService, TreeDiagram, TrimOnBlurDirective, UiModule, countTone, createApi, fxListResolver, scoreTone, severityTone, toneBadge, toneBg, toneColor, toneText };
|
|
1593
|
-
export type { Breadcrumb, ColumnChangedEvent, ErrorMessages, FxApiClass, FxConfirmOptions, FxFilterChipOption, FxListRequest, FxListResolverContext, FxMenuItem, FxSeverityBadge, FxStatCard, FxTableFilters, IRadioButton, KanbanColumn, NotificationCallback, NotificationConnectOptions, RealtimeTableEvent, RealtimeTableSyncOptions, TableResult, TagType, ToastData, Tone, TreeNode, UploadResult };
|
|
2208
|
+
export { AuthInterceptor, AuthStateService, BarListComponent, BaseComponent, BaseDialogComponent, BaseMasterDetailComponent, BaseResolver, BaseTableComponent, BreadcrumbService, ButtonComponent, CheckboxComponent, CircleProgressBar, CodeBlockComponent, ConfirmationDialogComponent, DatetimePicker, DndUploadComponent, DrawerComponent, EmptyStateComponent, FX_ICON_SPRITE_URL, FacetsRailComponent, FilterChipsComponent, FilterPillsComponent, FxComponent, FxDialogService, FxLoadingService, FxStorageService, FxToastrService, FxUtils, FxValidators, HasPermissionDirective, HeroIconComponent, HttpLoaderFactory, HttpWrapper, InfoFieldComponent, InputComponent, KanbanBoardComponent, ListRowComponent, LoadingPanel, MasterDetailComponent, MenuComponent, MeterComponent, NotificationService, OG_LIGHT_THEMES, OG_PICKER_THEMES, OG_PICKER_THEME_META, OG_THEMES, OG_THEME_META, PendingBadgeComponent, PermissionGuard, PermissionService, PipelineStepperComponent, ProjectCardComponent, RadioButtonComponent, RadioButtonToggleComponent, RealtimeTableSync, SampleFrameComponent, ScoreBadgeComponent, ScreenshotFrameComponent, SearchBarComponent, SectionCardComponent, SegmentedComponent, SelectComponent, SeverityBadgesComponent, SkeletonDetailComponent, SkeletonListComponent, SkeletonTableLoadingComponent, SliderComponent, SparkbarComponent, StageDotsComponent, StatCardsComponent, StatusDotComponent, SwitchComponent, TabComponent, TabGroupComponent, TableCell, TagComponent, ThemePickerComponent, ThemeService, ToastComponent, ToastContainerComponent, TranslationModule, TranslationService, TreeDiagram, TrimOnBlurDirective, UiModule, anyFeatureEnabled, countTone, createApi, featureEnabled, fxListResolver, scoreTone, severityTone, toneBadge, toneBg, toneColor, toneText };
|
|
2209
|
+
export type { Breadcrumb, ColumnChangedEvent, DrawerItem, ErrorMessages, FxApiClass, FxBarListItem, FxConfirmOptions, FxFacetGroup, FxFacetOption, FxFacetSelection, FxFeatureFlags, FxFilterChipOption, FxFilterPillOption, FxListRequest, FxListResolverContext, FxListRowBadge, FxMenuItem, FxPipelineStage, FxPipelineStageState, FxProjectCard, FxProjectCardChip, FxProjectCardMetric, FxSegmentedOption, FxSeverityBadge, FxStatCard, FxStatCardDelta, FxTableFilters, IRadioButton, KanbanColumn, NotificationCallback, NotificationConnectOptions, OgTheme, OgThemeMeta, RealtimeTableEvent, RealtimeTableSyncOptions, TableResult, TagType, ToastData, Tone, TreeNode, UploadResult };
|