@foxeltech/angular-ui 0.7.75 → 0.7.101
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/components.css +66 -3
- package/fesm2022/foxeltech-angular-ui-chart.mjs +33 -3
- package/fesm2022/foxeltech-angular-ui-chart.mjs.map +1 -1
- package/fesm2022/foxeltech-angular-ui-flow.mjs +42 -5
- package/fesm2022/foxeltech-angular-ui-flow.mjs.map +1 -1
- package/fesm2022/foxeltech-angular-ui.mjs +641 -60
- package/fesm2022/foxeltech-angular-ui.mjs.map +1 -1
- package/package.json +3 -2
- package/src/lib/styles/components.css +66 -3
- package/src/lib/styles/utilities.css +8 -2
- package/src/lib/ui/components/breadcrumb/breadcrumb.component.css +262 -0
- package/src/lib/ui/components/breadcrumb/breadcrumb.component.html +91 -0
- package/src/lib/ui/components/button/button.component.html +1 -0
- package/src/lib/ui/components/filter-pills/filter-pills.component.html +1 -1
- package/src/lib/ui/components/load-status/load-status.component.css +96 -0
- package/src/lib/ui/components/load-status/load-status.component.html +20 -0
- package/src/lib/ui/components/master-detail/master-detail.component.css +63 -11
- package/src/lib/ui/components/master-detail/master-detail.component.html +71 -42
- package/src/lib/ui/components/pending-badge/pending-badge.component.html +2 -2
- package/src/lib/ui/components/project-card/project-card.component.html +7 -3
- package/src/lib/ui/components/route-skeleton/route-skeleton.component.css +1 -1
- package/src/lib/ui/components/sample-frame/sample-frame.component.html +6 -7
- package/src/lib/ui/components/section-card/section-card.component.html +3 -1
- package/src/lib/ui/components/segmented/segmented.component.html +6 -2
- package/src/lib/ui/components/severity-badges/severity-badges.component.html +1 -1
- package/src/lib/ui/components/stat-cards/stat-cards.component.css +18 -0
- package/src/lib/ui/components/stat-cards/stat-cards.component.html +3 -3
- package/types/foxeltech-angular-ui-chart.d.ts +18 -1
- package/types/foxeltech-angular-ui-flow.d.ts +7 -0
- package/types/foxeltech-angular-ui.d.ts +349 -14
- package/utilities.css +8 -2
|
@@ -60,6 +60,54 @@ declare class HttpWrapper {
|
|
|
60
60
|
disable(params: any): Promise<any>;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
interface FxLoadJob {
|
|
64
|
+
id: number;
|
|
65
|
+
/** Short caller-supplied label — "summary", "history", "projects". */
|
|
66
|
+
label: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Backend-request bookkeeping behind the topbar load status (design
|
|
70
|
+
* "Loading States", 04/09): while any tracked request is in flight the shell
|
|
71
|
+
* shows a spinner + "Loading <label> · k of n" and a thin indeterminate bar;
|
|
72
|
+
* once the batch settles it shows "● Up to date · just now".
|
|
73
|
+
*
|
|
74
|
+
* A batch = every job started while at least one job is still pending. When
|
|
75
|
+
* the last one settles the batch closes (`lastUpdated` moves) and the next
|
|
76
|
+
* job opens a fresh count — so "k of n" always reads against the requests of
|
|
77
|
+
* the current page load, not the session total.
|
|
78
|
+
*
|
|
79
|
+
* Wire-ups: `fxListResolver` and `BaseTableComponent.fetch()` track
|
|
80
|
+
* automatically; screens with their own fetches call `track()`.
|
|
81
|
+
*/
|
|
82
|
+
declare class FxLoadStatusService {
|
|
83
|
+
private seq;
|
|
84
|
+
private readonly _pending;
|
|
85
|
+
private readonly _batchTotal;
|
|
86
|
+
private readonly _lastUpdated;
|
|
87
|
+
private readonly _reload;
|
|
88
|
+
/** Jobs still in flight, oldest first. */
|
|
89
|
+
readonly pending: _angular_core.Signal<FxLoadJob[]>;
|
|
90
|
+
/** Requests started in the current batch. */
|
|
91
|
+
readonly total: _angular_core.Signal<number>;
|
|
92
|
+
readonly done: _angular_core.Signal<number>;
|
|
93
|
+
readonly loading: _angular_core.Signal<boolean>;
|
|
94
|
+
/** Label of the oldest pending request — what the status line names. */
|
|
95
|
+
readonly current: _angular_core.Signal<string>;
|
|
96
|
+
/** When the last batch settled; null until the first one does. */
|
|
97
|
+
readonly lastUpdated: _angular_core.Signal<Date | null>;
|
|
98
|
+
/** Fired by the topbar ↻ — the shell decides how to re-fetch the route. */
|
|
99
|
+
readonly reload$: rxjs.Observable<void>;
|
|
100
|
+
/** Register a request; call the returned function when it settles. */
|
|
101
|
+
begin(label: string): () => void;
|
|
102
|
+
/** Track a promise (or a factory producing one) under `label`. */
|
|
103
|
+
track<T>(label: string, work: Promise<T> | (() => Promise<T>)): Promise<T>;
|
|
104
|
+
requestReload(): void;
|
|
105
|
+
/** Short label from a request url: `/TEST1/history` → "history", `/search` → "search". */
|
|
106
|
+
static labelFromUrl(url: string): string;
|
|
107
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FxLoadStatusService, never>;
|
|
108
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<FxLoadStatusService>;
|
|
109
|
+
}
|
|
110
|
+
|
|
63
111
|
interface ToastData {
|
|
64
112
|
id: number;
|
|
65
113
|
message: string;
|
|
@@ -118,6 +166,8 @@ declare class BaseTableComponent<T = any> extends BaseComponent implements OnIni
|
|
|
118
166
|
loading: boolean;
|
|
119
167
|
expandedElement: T | null;
|
|
120
168
|
toastr: FxToastrService;
|
|
169
|
+
/** Topbar load status; optional so hand-rolled test injectors keep working. */
|
|
170
|
+
protected loadStatus: FxLoadStatusService | null;
|
|
121
171
|
_lock: boolean;
|
|
122
172
|
keywordChange$: Subject<string>;
|
|
123
173
|
dataSourcePlaceholder: any[];
|
|
@@ -157,7 +207,22 @@ declare class BaseTableComponent<T = any> extends BaseComponent implements OnIni
|
|
|
157
207
|
message?: string;
|
|
158
208
|
};
|
|
159
209
|
};
|
|
160
|
-
|
|
210
|
+
/**
|
|
211
|
+
* The paging engine. Either the page's own <mat-paginator> (found by the
|
|
212
|
+
* ViewChild query) or one handed in by a child such as fx-ui-master-detail,
|
|
213
|
+
* whose paginator lives in ITS view where the query cannot see it.
|
|
214
|
+
*
|
|
215
|
+
* ⚠️ A plain `@ViewChild` property was clobbered: the query re-runs before
|
|
216
|
+
* every ngAfterViewInit and, finding nothing, wrote `undefined` over the
|
|
217
|
+
* instance the child had assigned a moment earlier — so page events were
|
|
218
|
+
* never subscribed and Prev/Next changed the range text but not the rows
|
|
219
|
+
* (anh Tú 04/09). The setter attaches on any real assignment and ignores
|
|
220
|
+
* `undefined`, so whichever side provides the paginator wins.
|
|
221
|
+
*/
|
|
222
|
+
set paginator(p: MatPaginator | undefined);
|
|
223
|
+
get paginator(): MatPaginator;
|
|
224
|
+
private _paginator?;
|
|
225
|
+
private _pageSub?;
|
|
161
226
|
readonly table: _angular_core.Signal<MatTable<any>>;
|
|
162
227
|
constructor(injector: Injector, api: HttpWrapper, modal: MatDialog, ref: ChangeDetectorRef);
|
|
163
228
|
ngOnInit(): void;
|
|
@@ -719,7 +784,23 @@ declare function toneBadge(tone: Tone | string | null | undefined): string;
|
|
|
719
784
|
* nơi cần nhấn mạnh nhất; đừng dùng cho badge có chấm bên trong (chấm sẽ chìm).
|
|
720
785
|
*/
|
|
721
786
|
declare function toneBadgeSolid(tone: Tone | string | null | undefined): string;
|
|
722
|
-
/**
|
|
787
|
+
/**
|
|
788
|
+
* Chỉ MÀU của tông, không kèm hình dạng pill — cho ô icon, chip, ô nền.
|
|
789
|
+
*
|
|
790
|
+
* ⚠️ Đây là họ SOLID: `tone-tint-critical` đặt `background: --og-text`
|
|
791
|
+
* (gần đen) VÀ `color: --og-surface` (trắng) trên CÙNG element.
|
|
792
|
+
*
|
|
793
|
+
* Hệ quả bắt buộc nhớ:
|
|
794
|
+
* 1. Chỉ dùng cho **badge một phần tử**. Với hộp nhiều dòng thì con sẽ cần màu
|
|
795
|
+
* chữ riêng, và nếu con ghi đè bằng `toneFg()` (đỏ sẫm) thì thành đỏ sẫm
|
|
796
|
+
* trên gần đen — không đọc được. Đã bị đúng vậy ở hộp RISK của
|
|
797
|
+
* `info-binary-detail` (anh Tú 03/09).
|
|
798
|
+
* 2. **KHÔNG** đặt `toneFg()` lên phần tử con của một phần tử đã có
|
|
799
|
+
* `toneTint()` — nó phá màu tương phản mà `toneTint` vừa đặt.
|
|
800
|
+
*
|
|
801
|
+
* Hộp/khối nhiều dòng thì dùng `toneScale()`: nền nhạt (color-mix 12%) + chữ
|
|
802
|
+
* đúng tông, con chỉ cần THỪA HƯỞNG.
|
|
803
|
+
*/
|
|
723
804
|
declare function toneTint(tone: Tone | string | null | undefined): string;
|
|
724
805
|
/**
|
|
725
806
|
* CHỮ theo tông — dùng thành viên dễ đọc nhất của mỗi họ severity, KHÔNG phải
|
|
@@ -918,10 +999,57 @@ declare class AuthInterceptor implements HttpInterceptor {
|
|
|
918
999
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AuthInterceptor>;
|
|
919
1000
|
}
|
|
920
1001
|
|
|
1002
|
+
/** One row of a crumb's switcher panel. */
|
|
1003
|
+
interface BreadcrumbOption {
|
|
1004
|
+
label: string;
|
|
1005
|
+
value: string;
|
|
1006
|
+
/** Where picking the row navigates. */
|
|
1007
|
+
url: string;
|
|
1008
|
+
/** Muted trailing text (a risk chip, a date, a status). */
|
|
1009
|
+
meta?: string;
|
|
1010
|
+
}
|
|
1011
|
+
/**
|
|
1012
|
+
* V2 topbar (design 02/12/13): a crumb that names an entity — the project, the
|
|
1013
|
+
* analysed binary — is a bordered chip with a dropdown to switch to a sibling.
|
|
1014
|
+
* The caller owns the data: `load` runs on open and on every keystroke.
|
|
1015
|
+
*/
|
|
1016
|
+
interface BreadcrumbSwitcher {
|
|
1017
|
+
/** Panel heading, e.g. "Switch project". */
|
|
1018
|
+
title: string;
|
|
1019
|
+
/** Search box placeholder; omit to render no search box. */
|
|
1020
|
+
filterPlaceholder?: string;
|
|
1021
|
+
/** Value of the option currently in scope — rendered with a check mark. */
|
|
1022
|
+
selected?: string;
|
|
1023
|
+
/** Options for the keyword ('' on open). Caller-translated labels. */
|
|
1024
|
+
load: (keyword: string) => Promise<BreadcrumbOption[]>;
|
|
1025
|
+
/** Copy for an empty result. */
|
|
1026
|
+
emptyLabel?: string;
|
|
1027
|
+
/** Quiet link under the options — "View all projects". */
|
|
1028
|
+
viewAll?: {
|
|
1029
|
+
label: string;
|
|
1030
|
+
url: string;
|
|
1031
|
+
};
|
|
1032
|
+
/** Accent-soft CTA at the bottom — "Create project". */
|
|
1033
|
+
create?: {
|
|
1034
|
+
label: string;
|
|
1035
|
+
url: string;
|
|
1036
|
+
};
|
|
1037
|
+
/** Options render in the mono face (binary identities). */
|
|
1038
|
+
mono?: boolean;
|
|
1039
|
+
}
|
|
921
1040
|
interface Breadcrumb {
|
|
922
1041
|
label: string;
|
|
923
1042
|
url?: string;
|
|
924
1043
|
code?: string;
|
|
1044
|
+
/**
|
|
1045
|
+
* Heroicon drawn in accent before the label. Setting it (or `switcher`)
|
|
1046
|
+
* turns the crumb into a chip — the design's project / analysis pickers.
|
|
1047
|
+
*/
|
|
1048
|
+
icon?: string;
|
|
1049
|
+
/** Mono face for binary identities ("rocketchat.exe · 4.8.1"). */
|
|
1050
|
+
mono?: boolean;
|
|
1051
|
+
/** Dropdown to switch the entity this crumb names. */
|
|
1052
|
+
switcher?: BreadcrumbSwitcher;
|
|
925
1053
|
}
|
|
926
1054
|
declare class BreadcrumbService {
|
|
927
1055
|
private breadcrumbs$;
|
|
@@ -1675,6 +1803,11 @@ declare class StatCardsComponent {
|
|
|
1675
1803
|
readonly variant: _angular_core.InputSignal<"figure" | "tile">;
|
|
1676
1804
|
/** Grid columns; defaults to one column per card. */
|
|
1677
1805
|
cols?: number;
|
|
1806
|
+
/**
|
|
1807
|
+
* Column count for the ≥ md (720px) container. Below that the CSS takes
|
|
1808
|
+
* over (2-up, then 1-up under 360px) — see stat-cards.component.css — so an
|
|
1809
|
+
* explicit `cols` never squeezes four figures into a phone-width row.
|
|
1810
|
+
*/
|
|
1678
1811
|
get gridColumns(): string;
|
|
1679
1812
|
numClass(card: FxStatCard): string;
|
|
1680
1813
|
boxClass(card: FxStatCard): string;
|
|
@@ -1742,6 +1875,12 @@ declare class FilterPillsComponent {
|
|
|
1742
1875
|
/** Accepts undefined so screens can bind an optional filter-bag key. */
|
|
1743
1876
|
readonly value: _angular_core.InputSignal<string | undefined>;
|
|
1744
1877
|
readonly valueChange: _angular_core.OutputEmitterRef<string>;
|
|
1878
|
+
/**
|
|
1879
|
+
* Fill of the ACTIVE pill. 'accent' (default, design 11 vulnerabilities);
|
|
1880
|
+
* 'solid' = `--og-text` on inverse text — the demo's Attack-paths panel on
|
|
1881
|
+
* the Overview tab (design 02 "All paths 164") and Recent analyses (design 13).
|
|
1882
|
+
*/
|
|
1883
|
+
readonly tone: _angular_core.InputSignal<"accent" | "solid">;
|
|
1745
1884
|
isActive(option: FxFilterPillOption): boolean;
|
|
1746
1885
|
/**
|
|
1747
1886
|
* Pill ĐANG CHỌN dùng **accent** (xanh), không phải nền đen — khớp demo:
|
|
@@ -1752,7 +1891,7 @@ declare class FilterPillsComponent {
|
|
|
1752
1891
|
pillClass(option: FxFilterPillOption): string;
|
|
1753
1892
|
countClass(option: FxFilterPillOption): string;
|
|
1754
1893
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterPillsComponent, never>;
|
|
1755
|
-
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>;
|
|
1894
|
+
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; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
1756
1895
|
}
|
|
1757
1896
|
|
|
1758
1897
|
/**
|
|
@@ -1837,6 +1976,10 @@ declare class MeterComponent {
|
|
|
1837
1976
|
* - titleStyle 'heading' (default): icon + heading, the pre-V2 look
|
|
1838
1977
|
* - titleStyle 'eyebrow': the V2 design's panel header — small tracked
|
|
1839
1978
|
* caption on the left, muted [aside] text on the right
|
|
1979
|
+
*
|
|
1980
|
+
* The host is a flex column (not the custom element's inline default) so that
|
|
1981
|
+
* in a CSS grid row every card stretches to the row height and panels line up
|
|
1982
|
+
* (anh Tú 04/09); a footer projected with `mt-auto` sticks to the bottom.
|
|
1840
1983
|
*/
|
|
1841
1984
|
declare class SectionCardComponent {
|
|
1842
1985
|
/** Caller-translated heading. */
|
|
@@ -1946,19 +2089,33 @@ declare class MasterDetailComponent implements AfterViewInit, AfterContentInit {
|
|
|
1946
2089
|
/** Caller-translated Prev/Next labels ("X of Y" is numeric). */
|
|
1947
2090
|
readonly prevLabel: _angular_core.InputSignal<string>;
|
|
1948
2091
|
readonly nextLabel: _angular_core.InputSignal<string>;
|
|
2092
|
+
/** "Page 1 of 4" (design 11/14/17) — the two words, caller-translated. */
|
|
2093
|
+
readonly pageLabel: _angular_core.InputSignal<string>;
|
|
2094
|
+
readonly ofLabel: _angular_core.InputSignal<string>;
|
|
2095
|
+
/**
|
|
2096
|
+
* Facets rail open (design 11/14) or collapsed to a 40px strip (design 17).
|
|
2097
|
+
* The user can toggle either way; this only sets the initial state.
|
|
2098
|
+
*/
|
|
2099
|
+
readonly facetsOpen: _angular_core.InputSignal<boolean>;
|
|
2100
|
+
/** Caller-translated rail heading ("Scope & facets"). */
|
|
2101
|
+
readonly facetsLabel: _angular_core.InputSignal<string>;
|
|
2102
|
+
readonly expandFacetsLabel: _angular_core.InputSignal<string>;
|
|
2103
|
+
readonly collapseFacetsLabel: _angular_core.InputSignal<string>;
|
|
2104
|
+
/** Current rail state — follows `facetsOpen` until the user toggles. */
|
|
2105
|
+
readonly railOpen: _angular_core.WritableSignal<boolean>;
|
|
1949
2106
|
readonly rowTemplate: _angular_core.Signal<TemplateRef<any>>;
|
|
1950
2107
|
readonly detailTemplate: _angular_core.Signal<TemplateRef<any>>;
|
|
1951
2108
|
readonly paginator: _angular_core.Signal<MatPaginator>;
|
|
1952
2109
|
readonly uid: string;
|
|
1953
2110
|
ngAfterContentInit(): void;
|
|
1954
2111
|
ngAfterViewInit(): void;
|
|
1955
|
-
/** "X of Y"
|
|
2112
|
+
/** "Page X of Y" for the prevnext pagination style (design 11/14/17). */
|
|
1956
2113
|
rangeText(): string;
|
|
1957
2114
|
isSelected(row: any): boolean;
|
|
1958
2115
|
optionId(index: number): string;
|
|
1959
2116
|
onKeydown(event: KeyboardEvent, index: number): void;
|
|
1960
2117
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MasterDetailComponent, never>;
|
|
1961
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MasterDetailComponent, "fx-ui-master-detail", never, { "table": { "alias": "table"; "required": false; }; "listWidth": { "alias": "listWidth"; "required": false; "isSignal": true; }; "paneHeight": { "alias": "paneHeight"; "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>;
|
|
2118
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MasterDetailComponent, "fx-ui-master-detail", never, { "table": { "alias": "table"; "required": false; }; "listWidth": { "alias": "listWidth"; "required": false; "isSignal": true; }; "paneHeight": { "alias": "paneHeight"; "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; }; "pageLabel": { "alias": "pageLabel"; "required": false; "isSignal": true; }; "ofLabel": { "alias": "ofLabel"; "required": false; "isSignal": true; }; "facetsOpen": { "alias": "facetsOpen"; "required": false; "isSignal": true; }; "facetsLabel": { "alias": "facetsLabel"; "required": false; "isSignal": true; }; "expandFacetsLabel": { "alias": "expandFacetsLabel"; "required": false; "isSignal": true; }; "collapseFacetsLabel": { "alias": "collapseFacetsLabel"; "required": false; "isSignal": true; }; }, {}, ["rowTemplate", "detailTemplate"], ["[mdFacets]", "[mdHeader]", "[mdFilters]"], true, never>;
|
|
1962
2119
|
}
|
|
1963
2120
|
|
|
1964
2121
|
interface FxMenuItem {
|
|
@@ -2023,6 +2180,7 @@ declare class ThemePickerComponent {
|
|
|
2023
2180
|
* <fx-ui-pending-badge [field]="'confirmed-chains weekly series'" />
|
|
2024
2181
|
*
|
|
2025
2182
|
* Keep the copy factual: it states that data is missing, never fakes a value.
|
|
2183
|
+
* Styling is neutral on purpose (anh Tú 04/09): a hint, not a warning.
|
|
2026
2184
|
*/
|
|
2027
2185
|
declare class PendingBadgeComponent {
|
|
2028
2186
|
/** Caller-translated chip text. */
|
|
@@ -2039,15 +2197,90 @@ declare class PendingBadgeComponent {
|
|
|
2039
2197
|
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>;
|
|
2040
2198
|
}
|
|
2041
2199
|
|
|
2200
|
+
/**
|
|
2201
|
+
* V2 topbar breadcrumb (design 02/12/13, measured on the demo 04/09).
|
|
2202
|
+
*
|
|
2203
|
+
* Projects / [◳ RocketChat ▾] / [⬡ rocketchat.exe · 4.8.1 ▾]
|
|
2204
|
+
*
|
|
2205
|
+
* Plain crumbs are quiet links (12.5px / 500 / muted); the last one is strong.
|
|
2206
|
+
* A crumb with `icon` or `switcher` renders as a chip — hairline border,
|
|
2207
|
+
* surface fill, 1px shadow — and a `switcher` opens a listbox with a filter
|
|
2208
|
+
* box, the sibling options, an optional "View all" row and a "Create" CTA.
|
|
2209
|
+
* Data comes from the app through `BreadcrumbService`; this component only
|
|
2210
|
+
* draws and navigates.
|
|
2211
|
+
*/
|
|
2212
|
+
declare class BreadcrumbComponent {
|
|
2213
|
+
private readonly service;
|
|
2214
|
+
private readonly router;
|
|
2215
|
+
private readonly host;
|
|
2216
|
+
readonly crumbs: _angular_core.Signal<Breadcrumb[]>;
|
|
2217
|
+
/** Index of the crumb whose switcher panel is open; null = closed. */
|
|
2218
|
+
readonly openIndex: _angular_core.WritableSignal<number | null>;
|
|
2219
|
+
readonly options: _angular_core.WritableSignal<BreadcrumbOption[]>;
|
|
2220
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
2221
|
+
readonly keyword: _angular_core.WritableSignal<string>;
|
|
2222
|
+
/** Drops results of a superseded load (typing fast, reopening). */
|
|
2223
|
+
private loadSeq;
|
|
2224
|
+
isChip(crumb: Breadcrumb): boolean;
|
|
2225
|
+
onChipClick(crumb: Breadcrumb, index: number, event: MouseEvent): void;
|
|
2226
|
+
private open;
|
|
2227
|
+
close(): void;
|
|
2228
|
+
onFilter(crumb: Breadcrumb, value: string): void;
|
|
2229
|
+
private load;
|
|
2230
|
+
pick(option: BreadcrumbOption, event: Event): void;
|
|
2231
|
+
go(event: Event, url?: string): void;
|
|
2232
|
+
private navigate;
|
|
2233
|
+
onDocumentClick(event: MouseEvent): void;
|
|
2234
|
+
onEscape(): void;
|
|
2235
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BreadcrumbComponent, never>;
|
|
2236
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BreadcrumbComponent, "fx-ui-breadcrumb", never, {}, {}, never, never, true, never>;
|
|
2237
|
+
}
|
|
2238
|
+
|
|
2239
|
+
/**
|
|
2240
|
+
* Topbar load status (design "Loading States", measured 04/09):
|
|
2241
|
+
*
|
|
2242
|
+
* ◌ Loading charts · 1 of 4 → while requests are pending
|
|
2243
|
+
* ● Up to date · just now ↻ → once the batch settled
|
|
2244
|
+
*
|
|
2245
|
+
* Mono 10.5px; muted while loading, faint when idle; 11px spinner (2px ring,
|
|
2246
|
+
* accent top). With `bar` a 2px indeterminate strip is drawn along the top
|
|
2247
|
+
* edge of the nearest positioned ancestor (the topbar) while loading.
|
|
2248
|
+
* Labels are caller-translated inputs; the ↻ button emits `reload`.
|
|
2249
|
+
*/
|
|
2250
|
+
declare class LoadStatusComponent {
|
|
2251
|
+
readonly status: FxLoadStatusService;
|
|
2252
|
+
readonly loadingLabel: _angular_core.InputSignal<string>;
|
|
2253
|
+
readonly ofLabel: _angular_core.InputSignal<string>;
|
|
2254
|
+
readonly upToDateLabel: _angular_core.InputSignal<string>;
|
|
2255
|
+
readonly justNowLabel: _angular_core.InputSignal<string>;
|
|
2256
|
+
/** `{n}` is replaced by the minute count. */
|
|
2257
|
+
readonly minutesAgoLabel: _angular_core.InputSignal<string>;
|
|
2258
|
+
readonly reloadLabel: _angular_core.InputSignal<string>;
|
|
2259
|
+
/** Draw the 2px indeterminate bar along the top of the positioned ancestor. */
|
|
2260
|
+
readonly bar: _angular_core.InputSignal<boolean>;
|
|
2261
|
+
/** Show the ↻ button. */
|
|
2262
|
+
readonly showReload: _angular_core.InputSignal<boolean>;
|
|
2263
|
+
readonly reload: _angular_core.OutputEmitterRef<void>;
|
|
2264
|
+
/** Ticks every 30 s so "just now" ages into "N min ago" without traffic. */
|
|
2265
|
+
private readonly tick;
|
|
2266
|
+
constructor();
|
|
2267
|
+
readonly loadingText: _angular_core.Signal<string>;
|
|
2268
|
+
readonly idleText: _angular_core.Signal<string>;
|
|
2269
|
+
onReload(): void;
|
|
2270
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LoadStatusComponent, never>;
|
|
2271
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LoadStatusComponent, "fx-ui-load-status", never, { "loadingLabel": { "alias": "loadingLabel"; "required": false; "isSignal": true; }; "ofLabel": { "alias": "ofLabel"; "required": false; "isSignal": true; }; "upToDateLabel": { "alias": "upToDateLabel"; "required": false; "isSignal": true; }; "justNowLabel": { "alias": "justNowLabel"; "required": false; "isSignal": true; }; "minutesAgoLabel": { "alias": "minutesAgoLabel"; "required": false; "isSignal": true; }; "reloadLabel": { "alias": "reloadLabel"; "required": false; "isSignal": true; }; "bar": { "alias": "bar"; "required": false; "isSignal": true; }; "showReload": { "alias": "showReload"; "required": false; "isSignal": true; }; }, { "reload": "reload"; }, never, never, true, never>;
|
|
2272
|
+
}
|
|
2273
|
+
|
|
2042
2274
|
/**
|
|
2043
2275
|
* Wraps UI that is rendered from PLACEHOLDER data so the layout can be
|
|
2044
2276
|
* reviewed before its endpoint exists (anh Tú 29/08: "muốn có full giao diện
|
|
2045
2277
|
* trước để review").
|
|
2046
2278
|
*
|
|
2047
|
-
* The
|
|
2048
|
-
*
|
|
2049
|
-
*
|
|
2050
|
-
*
|
|
2279
|
+
* The marker is deliberately quiet (anh Tú 04/09: no yellow frame, just a
|
|
2280
|
+
* subtle "Pending API" chip): a neutral chip above the block, with the label
|
|
2281
|
+
* and missing field in its tooltip. The content itself is non-interactive so
|
|
2282
|
+
* sample shapes are never mistaken for live state. Drop the wrapper (and the
|
|
2283
|
+
* sample input) the moment the API lands.
|
|
2051
2284
|
*
|
|
2052
2285
|
* The pending chip is inlined rather than composed from fx-ui-pending-badge:
|
|
2053
2286
|
* one lib component importing another inside the same barrel tripped NG0919
|
|
@@ -2058,7 +2291,7 @@ declare class PendingBadgeComponent {
|
|
|
2058
2291
|
* </fx-ui-sample-frame>
|
|
2059
2292
|
*/
|
|
2060
2293
|
declare class SampleFrameComponent {
|
|
2061
|
-
/** Caller-translated
|
|
2294
|
+
/** Caller-translated block label — surfaces in the chip tooltip only. */
|
|
2062
2295
|
readonly label: _angular_core.InputSignal<string>;
|
|
2063
2296
|
/** Field the backend still owes — shown on the pending badge tooltip. */
|
|
2064
2297
|
readonly field: _angular_core.InputSignal<string>;
|
|
@@ -2156,17 +2389,29 @@ declare class SegmentedComponent {
|
|
|
2156
2389
|
* (design refs 04/05).
|
|
2157
2390
|
*/
|
|
2158
2391
|
readonly variant: _angular_core.InputSignal<"default" | "pill">;
|
|
2392
|
+
/**
|
|
2393
|
+
* 'equal' (default): every segment takes the same width (view toggles such
|
|
2394
|
+
* as Catalog | Table). 'content': each segment is as wide as its label —
|
|
2395
|
+
* the demo's detail-pane tabs ("Affected software · Summary · Evidence"),
|
|
2396
|
+
* where equal columns would truncate the long label in a narrow pane.
|
|
2397
|
+
*/
|
|
2398
|
+
readonly fit: _angular_core.InputSignal<"content" | "equal">;
|
|
2399
|
+
private readonly optionEls;
|
|
2400
|
+
/** Measured box of the active segment — only used when fit === 'content'. */
|
|
2401
|
+
private readonly thumbBox;
|
|
2402
|
+
constructor();
|
|
2159
2403
|
/** Index the sliding thumb sits on; -1 hides it (no/unknown selection). */
|
|
2160
2404
|
readonly activeIndex: _angular_core.Signal<number>;
|
|
2161
2405
|
/** Equal-width tracks → the thumb is 1/n of the inner width and slides by
|
|
2162
2406
|
* multiples of its own width. Pure CSS transform, nothing to measure. */
|
|
2163
2407
|
readonly thumbWidth: _angular_core.Signal<string>;
|
|
2164
2408
|
readonly thumbTransform: _angular_core.Signal<string>;
|
|
2409
|
+
readonly gridClass: _angular_core.Signal<"auto-cols-auto" | "auto-cols-fr">;
|
|
2165
2410
|
select(option: FxSegmentedOption): void;
|
|
2166
2411
|
thumbClass(): string;
|
|
2167
2412
|
optionClass(option: FxSegmentedOption): string;
|
|
2168
2413
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SegmentedComponent, never>;
|
|
2169
|
-
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>;
|
|
2414
|
+
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; }; "fit": { "alias": "fit"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
|
|
2170
2415
|
}
|
|
2171
2416
|
|
|
2172
2417
|
interface FxListRowBadge {
|
|
@@ -2433,6 +2678,80 @@ declare class ConfirmationDialogComponent {
|
|
|
2433
2678
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConfirmationDialogComponent, "fx-ui-confirmation-dialog", never, {}, {}, never, never, true, never>;
|
|
2434
2679
|
}
|
|
2435
2680
|
|
|
2681
|
+
/**
|
|
2682
|
+
* Staggered entrance for one element (GSAP).
|
|
2683
|
+
*
|
|
2684
|
+
* <fx-ui-section-card [fxReveal]="2">…</fx-ui-section-card>
|
|
2685
|
+
*
|
|
2686
|
+
* The host starts invisible and rises into place; `fxReveal` is its slot in
|
|
2687
|
+
* the stagger (× 60 ms). Elements that mount later (async lists) animate on
|
|
2688
|
+
* their own mount, so late data arrives with motion instead of a jump.
|
|
2689
|
+
* Reduced-motion users see the final state immediately. For a whole page use
|
|
2690
|
+
* `fxRevealGroup` on the container instead of numbering children by hand.
|
|
2691
|
+
*/
|
|
2692
|
+
declare class FxRevealDirective {
|
|
2693
|
+
/** Stagger slot; 0 = first. */
|
|
2694
|
+
readonly fxReveal: _angular_core.InputSignal<string | number | undefined>;
|
|
2695
|
+
private readonly el;
|
|
2696
|
+
constructor();
|
|
2697
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FxRevealDirective, never>;
|
|
2698
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FxRevealDirective, "[fxReveal]", never, { "fxReveal": { "alias": "fxReveal"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2699
|
+
}
|
|
2700
|
+
/** Run the standard reveal on an element at the given stagger slot. */
|
|
2701
|
+
declare function fxRevealElement(el: HTMLElement, slot?: number): void;
|
|
2702
|
+
|
|
2703
|
+
/**
|
|
2704
|
+
* One attribute on a page root reveals its sections top-to-bottom.
|
|
2705
|
+
*
|
|
2706
|
+
* <div fxRevealGroup> ← page root
|
|
2707
|
+
* <div>heading…</div> ← slot 0
|
|
2708
|
+
* <fx-ui-stat-cards …/> ← slot 1
|
|
2709
|
+
* <div class="grid …">…</div> ← slot 2 (the grid moves as one block)
|
|
2710
|
+
* </div>
|
|
2711
|
+
*
|
|
2712
|
+
* Direct element children present at first render get consecutive slots.
|
|
2713
|
+
* Children added later (a list that arrives after its request, an `@if` that
|
|
2714
|
+
* flips) are revealed as they mount, so async content never pops in flat.
|
|
2715
|
+
* Skeletons (`fx-ui-route-skeleton`, `[aria-busy]`) are left alone. Replaces
|
|
2716
|
+
* the page-level `animate.enter="fade-in-animation"` one-shot fade.
|
|
2717
|
+
*/
|
|
2718
|
+
declare class FxRevealGroupDirective implements OnDestroy {
|
|
2719
|
+
/** Cap on how many children get their own slot; the rest share the last one. */
|
|
2720
|
+
readonly fxRevealGroup: _angular_core.InputSignal<string | number | undefined>;
|
|
2721
|
+
private readonly el;
|
|
2722
|
+
private observer?;
|
|
2723
|
+
private readonly seen;
|
|
2724
|
+
constructor();
|
|
2725
|
+
private children;
|
|
2726
|
+
private eligible;
|
|
2727
|
+
private hide;
|
|
2728
|
+
private reveal;
|
|
2729
|
+
ngOnDestroy(): void;
|
|
2730
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FxRevealGroupDirective, never>;
|
|
2731
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FxRevealGroupDirective, "[fxRevealGroup]", never, { "fxRevealGroup": { "alias": "fxRevealGroup"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2732
|
+
}
|
|
2733
|
+
|
|
2734
|
+
/**
|
|
2735
|
+
* Counts a figure up from 0 (GSAP) whenever its value changes.
|
|
2736
|
+
*
|
|
2737
|
+
* <span [fxCountUp]="card.value"></span>
|
|
2738
|
+
*
|
|
2739
|
+
* Numbers tween over 0.8 s and render with the user's locale grouping; any
|
|
2740
|
+
* non-numeric value ('--', '98 / 100', '1,224') is written verbatim so pending
|
|
2741
|
+
* or composite figures never animate to nonsense. Reduced motion → final value.
|
|
2742
|
+
*/
|
|
2743
|
+
declare class FxCountUpDirective implements OnDestroy {
|
|
2744
|
+
readonly fxCountUp: _angular_core.InputSignal<string | number | null | undefined>;
|
|
2745
|
+
private readonly el;
|
|
2746
|
+
private tween?;
|
|
2747
|
+
private readonly state;
|
|
2748
|
+
constructor();
|
|
2749
|
+
private format;
|
|
2750
|
+
ngOnDestroy(): void;
|
|
2751
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FxCountUpDirective, never>;
|
|
2752
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FxCountUpDirective, "[fxCountUp]", never, { "fxCountUp": { "alias": "fxCountUp"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2753
|
+
}
|
|
2754
|
+
|
|
2436
2755
|
/**
|
|
2437
2756
|
* Compatibility barrel over the (now standalone) core components.
|
|
2438
2757
|
*
|
|
@@ -2446,9 +2765,25 @@ declare class ConfirmationDialogComponent {
|
|
|
2446
2765
|
*/
|
|
2447
2766
|
declare class UiModule {
|
|
2448
2767
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiModule, never>;
|
|
2449
|
-
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 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 SkeletonFacetsComponent, typeof SkeletonDashboardComponent, typeof SkeletonFrameComponent, typeof RouteSkeletonComponent, 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 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 SkeletonFacetsComponent, typeof SkeletonDashboardComponent, typeof SkeletonFrameComponent, typeof RouteSkeletonComponent, typeof ConfirmationDialogComponent, typeof i1$1.FormsModule, typeof i1$1.ReactiveFormsModule, typeof i2.RouterModule, typeof HasPermissionDirective, typeof TrimOnBlurDirective]>;
|
|
2768
|
+
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 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 BreadcrumbComponent, typeof LoadStatusComponent, typeof SampleFrameComponent, typeof ScoreBadgeComponent, typeof StatusDotComponent, typeof SparkbarComponent, typeof SegmentedComponent, typeof ListRowComponent, typeof BarListComponent, typeof FacetsRailComponent, typeof ProjectCardComponent, typeof PipelineStepperComponent, typeof SkeletonFacetsComponent, typeof SkeletonDashboardComponent, typeof SkeletonFrameComponent, typeof RouteSkeletonComponent, typeof ConfirmationDialogComponent, typeof FxRevealDirective, typeof FxRevealGroupDirective, typeof FxCountUpDirective], [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 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 BreadcrumbComponent, typeof LoadStatusComponent, typeof SampleFrameComponent, typeof ScoreBadgeComponent, typeof StatusDotComponent, typeof SparkbarComponent, typeof SegmentedComponent, typeof ListRowComponent, typeof BarListComponent, typeof FacetsRailComponent, typeof ProjectCardComponent, typeof PipelineStepperComponent, typeof SkeletonFacetsComponent, typeof SkeletonDashboardComponent, typeof SkeletonFrameComponent, typeof RouteSkeletonComponent, typeof ConfirmationDialogComponent, typeof FxRevealDirective, typeof FxRevealGroupDirective, typeof FxCountUpDirective, typeof i1$1.FormsModule, typeof i1$1.ReactiveFormsModule, typeof i2.RouterModule, typeof HasPermissionDirective, typeof TrimOnBlurDirective]>;
|
|
2450
2769
|
static ɵinj: _angular_core.ɵɵInjectorDeclaration<UiModule>;
|
|
2451
2770
|
}
|
|
2452
2771
|
|
|
2453
|
-
|
|
2454
|
-
|
|
2772
|
+
/** Users who asked the OS for reduced motion get instant state changes. */
|
|
2773
|
+
declare function fxMotionAllowed(): boolean;
|
|
2774
|
+
/** Shared timing so every screen moves the same way. */
|
|
2775
|
+
declare const FX_MOTION: {
|
|
2776
|
+
readonly duration: 0.5;
|
|
2777
|
+
/** Delay between consecutive slots. */
|
|
2778
|
+
readonly stagger: 0.06;
|
|
2779
|
+
/** Never let a long list push the last item beyond this delay. */
|
|
2780
|
+
readonly maxSlot: 12;
|
|
2781
|
+
readonly travelPx: 12;
|
|
2782
|
+
readonly ease: "power2.out";
|
|
2783
|
+
};
|
|
2784
|
+
|
|
2785
|
+
/** Motion directives exported by UiModule (GSAP-based, reduced-motion aware). */
|
|
2786
|
+
declare const FX_MOTION_DIRECTIVES: readonly [typeof FxRevealDirective, typeof FxRevealGroupDirective, typeof FxCountUpDirective];
|
|
2787
|
+
|
|
2788
|
+
export { AuthInterceptor, AuthStateService, BarListComponent, BaseComponent, BaseDialogComponent, BaseMasterDetailComponent, BaseTableComponent, BreadcrumbComponent, BreadcrumbService, ButtonComponent, CheckboxComponent, CircleProgressBar, CodeBlockComponent, ConfirmationDialogComponent, DatetimePicker, DndUploadComponent, DrawerComponent, EmptyStateComponent, FX_ICON_SPRITE_URL, FX_MOTION, FX_MOTION_DIRECTIVES, FX_SKELETON_DATA_KEY, FacetsRailComponent, FilterChipsComponent, FilterPillsComponent, FxComponent, FxCountUpDirective, FxDialogService, FxLoadStatusService, FxLoadingService, FxRevealDirective, FxRevealGroupDirective, FxRouteSkeletonService, FxStorageService, FxToastrService, FxUtils, FxValidators, HasPermissionDirective, HeroIconComponent, HttpLoaderFactory, HttpWrapper, InfoFieldComponent, InputComponent, KanbanBoardComponent, ListRowComponent, LoadStatusComponent, 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, RouteSkeletonComponent, SampleFrameComponent, ScoreBadgeComponent, ScreenshotFrameComponent, SearchBarComponent, SectionCardComponent, SegmentedComponent, SelectComponent, SeverityBadgesComponent, SkeletonDashboardComponent, SkeletonDetailComponent, SkeletonFacetsComponent, SkeletonFrameComponent, SkeletonListComponent, SliderComponent, SparkbarComponent, StageDotsComponent, StatCardsComponent, StatusDotComponent, SwitchComponent, TabComponent, TabGroupComponent, TableCell, TagComponent, ThemePickerComponent, ThemeService, ToastComponent, ToastContainerComponent, TranslationModule, TranslationService, TreeDiagram, TrimOnBlurDirective, UiModule, anyFeatureEnabled, countTone, createApi, featureEnabled, fxListResolver, fxMotionAllowed, fxRevealElement, scoreTone, severityTone, toneBadge, toneBadgeSolid, toneBg, toneBorder, toneColor, toneDot, toneDotChart, toneFg, toneScale, toneText, toneTint };
|
|
2789
|
+
export type { Breadcrumb, BreadcrumbOption, BreadcrumbSwitcher, ColumnChangedEvent, DrawerItem, ErrorMessages, FxApiClass, FxBarListItem, FxConfirmOptions, FxFacetGroup, FxFacetOption, FxFacetSelection, FxFeatureFlags, FxFilterChipOption, FxFilterPillOption, FxListRequest, FxListResolverContext, FxListRowBadge, FxLoadJob, FxMenuItem, FxPipelineStage, FxPipelineStageState, FxProjectCard, FxProjectCardChip, FxProjectCardMetric, FxSegmentedOption, FxSeverityBadge, FxSkeletonBlock, FxSkeletonBlockKind, FxSkeletonBlockSpec, FxSkeletonHint, FxStatCard, FxStatCardDelta, FxTableFilters, IRadioButton, KanbanColumn, NotificationCallback, NotificationConnectOptions, OgTheme, OgThemeMeta, RealtimeTableEvent, RealtimeTableSyncOptions, TableResult, TagType, ToastData, Tone, TreeNode, UploadResult };
|
package/utilities.css
CHANGED
|
@@ -31,9 +31,15 @@
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
@utility card-common {
|
|
34
|
-
@apply text-left px-xl py-large border border-border-default rounded-lg
|
|
34
|
+
@apply text-left px-xl py-large border border-border-default rounded-lg transition-colors duration-500 ease-in-out;
|
|
35
|
+
/* Demo `.og-panel` / `.og-statgrid`: hairline border + two soft layers.
|
|
36
|
+
Replaces Tailwind shadow-sm, which reads harder at the edges. */
|
|
37
|
+
box-shadow:
|
|
38
|
+
0 1px 2px rgb(0 0 0 / 0.04),
|
|
39
|
+
0 3px 8px rgb(0 0 0 / 0.05);
|
|
35
40
|
}
|
|
36
41
|
|
|
37
42
|
@utility tag-common {
|
|
38
|
-
|
|
43
|
+
/* design .og-badge: 3px 10px (anh Tú 04/09: pills read too thin at 2px) */
|
|
44
|
+
@apply flex min-w-7 px-[10px] py-[3px] leading-5 hover:opacity-70 items-center justify-center;
|
|
39
45
|
}
|