@edmicro/olkit 1.1.8 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1984,7 +1984,9 @@ declare class OlDrawerFooter {
1984
1984
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlDrawerFooter, "ol-drawer-footer", never, { "layout": { "alias": "layout"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1985
1985
  }
1986
1986
 
1987
- type DropdownPlacement = 'bottom' | 'top' | 'left' | 'right' | 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';
1987
+ type DropdownPlacement = 'bottom' | 'top' | 'left' | 'right' | 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end'
1988
+ /** Mở sang bên, căn mép trên / dưới theo nút — vd. menu tài khoản ở đáy sidebar (`right-end`). */
1989
+ | 'right-start' | 'right-end' | 'left-start' | 'left-end';
1988
1990
  /**
1989
1991
  * `context` là menu chuột phải. Nó KHÔNG neo vào nút trigger như hai kiểu kia
1990
1992
  * mà neo vào chỗ con trỏ — nên có thêm một mốc ẩn 0×0 di chuyển theo chuột.
@@ -2030,6 +2032,12 @@ declare class OlDropdown {
2030
2032
  */
2031
2033
  readonly appendTo: _angular_core.InputSignal<"body" | null>;
2032
2034
  readonly placement: _angular_core.InputSignal<DropdownPlacement>;
2035
+ /**
2036
+ * Khoảng cách (px) từ nút tới panel. Mặc định 8. Tăng khi nút nằm thụt
2037
+ * trong một khung mà panel phải mọc RA NGOÀI khung — vd. thẻ tài khoản trong
2038
+ * `ol-app-nav` (đệm 20px) mở sang phải phải vượt qua mép sidebar.
2039
+ */
2040
+ readonly offset: _angular_core.InputSignal<number>;
2033
2041
  readonly trigger: _angular_core.InputSignal<DropdownTrigger>;
2034
2042
  readonly autoClose: _angular_core.InputSignal<DropdownAutoClose>;
2035
2043
  readonly disabled: _angular_core.InputSignal<boolean>;
@@ -2134,7 +2142,7 @@ declare class OlDropdown {
2134
2142
  toggle(): void;
2135
2143
  private clearHideTimeout;
2136
2144
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlDropdown, never>;
2137
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlDropdown, "ol-dropdown", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "autoClose": { "alias": "autoClose"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "triggerClass": { "alias": "triggerClass"; "required": false; "isSignal": true; }; "menuClass": { "alias": "menuClass"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "opened": "opened"; "closed": "closed"; }, never, ["[slot=trigger], [trigger]", "[triggerIcon]", "[triggerIcon]", "*"], true, never>;
2145
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlDropdown, "ol-dropdown", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "autoClose": { "alias": "autoClose"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "triggerClass": { "alias": "triggerClass"; "required": false; "isSignal": true; }; "menuClass": { "alias": "menuClass"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "opened": "opened"; "closed": "closed"; }, never, ["[slot=trigger], [trigger]", "[triggerIcon]", "[triggerIcon]", "*"], true, never>;
2138
2146
  }
2139
2147
 
2140
2148
  declare class OlDropdownItem {
@@ -3603,6 +3611,16 @@ interface SegmentedOption<T = string | number> {
3603
3611
  }
3604
3612
  type SegmentedColor = 'neutral' | 'brand' | 'success' | 'warning' | 'danger';
3605
3613
  type SegmentedSize = 'sm' | 'base';
3614
+ /**
3615
+ * Tông của khung theo NỀN đặt nó lên.
3616
+ *
3617
+ * `default` rãnh xám `bg-neutral-tertiary`, mục chọn nổi nền trắng — nền sáng
3618
+ * `inverse` cho nền TỐI / màu (thanh menu navy): rãnh trắng 15% để LỘ màu nền
3619
+ * bên dưới, chữ mục chưa chọn trắng; mục chọn vẫn nền trắng, chữ
3620
+ * brand-900 GHIM (không đổi theo `.dark`: nền trắng ở cả hai chế
3621
+ * độ — `--text-fg-brand-strong` lật sang brand-300 sẽ chìm)
3622
+ */
3623
+ type SegmentedVariant = 'default' | 'inverse';
3606
3624
  /**
3607
3625
  * Chọn MỘT trong vài chế độ loại trừ nhau, đặt cạnh nhau trên một rãnh xám;
3608
3626
  * mục đang chọn nổi lên nền trắng (segmented control).
@@ -3627,6 +3645,13 @@ declare class OlSegmented implements ControlValueAccessor {
3627
3645
  readonly disabled: _angular_core.ModelSignal<boolean>;
3628
3646
  /** Tên nhóm cho bộ đọc màn hình — nên đặt, vì nhóm không có nhãn nhìn thấy. */
3629
3647
  readonly ariaLabel: _angular_core.InputSignal<string>;
3648
+ /** Tông khung theo nền — xem `SegmentedVariant`. */
3649
+ readonly variant: _angular_core.InputSignal<SegmentedVariant>;
3650
+ /**
3651
+ * Class màu nền tuỳ ý cho khung (rãnh), thay nền của `variant` — ví dụ
3652
+ * `bg-brand` hay `bg-[var(--bg-app-nav-hover)]`. Mục đang chọn giữ nguyên.
3653
+ */
3654
+ readonly trackClass: _angular_core.InputSignal<string>;
3630
3655
  private readonly host;
3631
3656
  private onChange;
3632
3657
  private onTouched;
@@ -3644,7 +3669,7 @@ declare class OlSegmented implements ControlValueAccessor {
3644
3669
  registerOnTouched(fn: () => void): void;
3645
3670
  setDisabledState(isDisabled: boolean): void;
3646
3671
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlSegmented, never>;
3647
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlSegmented, "ol-segmented", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; }, never, never, true, never>;
3672
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlSegmented, "ol-segmented", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "trackClass": { "alias": "trackClass"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; }, never, never, true, never>;
3648
3673
  }
3649
3674
 
3650
3675
  /**
@@ -4941,6 +4966,73 @@ declare class OlListGroupItem {
4941
4966
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlListGroupItem, "ol-list-group-item", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, never, ["*"], true, never>;
4942
4967
  }
4943
4968
 
4969
+ /** `full`: cú mèo + chữ "nluyện.vn" (tỉ lệ ~5:1). `mark`: chỉ cú mèo, vuông. */
4970
+ type LogoVariant = 'full' | 'mark';
4971
+ /**
4972
+ * Bản màu nào. Chọn theo **màu NỀN** đặt logo, không theo chế độ sáng/tối:
4973
+ *
4974
+ * - `color` — nền sáng (trắng, xám nhạt).
4975
+ * - `white` — nền tối/brand (menu navy của `ol-app-nav`, banner brand). Menu
4976
+ * navy ở CẢ hai chế độ nên luôn dùng bản trắng.
4977
+ * - `auto` — nền đổi theo chế độ (`bg-neutral-primary`…): sáng → màu,
4978
+ * `.dark` → trắng. Vẽ cả hai bản, CSS ẩn một — không cần JS theo dõi chế độ.
4979
+ */
4980
+ type LogoTone = 'auto' | 'color' | 'white';
4981
+ /**
4982
+ * Logo Ôn Luyện — Figma `Logo ol` (#6603:1269), 4 bản: dài/vuông × màu/trắng.
4983
+ *
4984
+ * SVG nhúng sẵn trong gói: nơi dùng không phải chép file ảnh vào `assets/`.
4985
+ * Cao theo `height` (px), rộng tự theo tỉ lệ.
4986
+ *
4987
+ * ```html
4988
+ * <ol-logo /> <!-- dài, tự đổi theo chế độ, cao 32px -->
4989
+ * <ol-logo variant="mark" tone="white" [height]="40" />
4990
+ * ```
4991
+ */
4992
+ declare class OlLogo {
4993
+ private readonly sanitizer;
4994
+ private readonly uid;
4995
+ readonly variant: _angular_core.InputSignal<LogoVariant>;
4996
+ readonly tone: _angular_core.InputSignal<LogoTone>;
4997
+ /** Chiều cao (px). Bản dài 32px rộng ~164px; bản vuông bằng cạnh. */
4998
+ readonly height: _angular_core.InputSignal<number>;
4999
+ /** Tên đọc cho trình đọc màn hình. */
5000
+ readonly alt: _angular_core.InputSignal<string>;
5001
+ /** Bản màu — `null` khi `tone="white"`. */
5002
+ readonly colorSvg: _angular_core.Signal<SafeHtml | null>;
5003
+ /** Bản trắng — `null` khi `tone="color"`. */
5004
+ readonly whiteSvg: _angular_core.Signal<SafeHtml | null>;
5005
+ readonly colorClass: _angular_core.Signal<"h-full dark:hidden" | "h-full">;
5006
+ readonly whiteClass: _angular_core.Signal<"h-full" | "hidden h-full dark:block">;
5007
+ /**
5008
+ * SVG tĩnh từ `logo.art.ts` (chỉ `<path>`/`<linearGradient>`, không lấy từ
5009
+ * người dùng) nên đánh dấu tin cậy được — cùng cách `OlIconService` làm.
5010
+ */
5011
+ private render;
5012
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlLogo, never>;
5013
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlLogo, "ol-logo", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5014
+ }
5015
+
5016
+ /**
5017
+ * Logo Ôn Luyện — 4 bản từ Figma `Logo ol` (#6603:1269), xuất SVG 2026-10-06.
5018
+ *
5019
+ * Đã lọc: nền xám `#F0F0F0` và khung nét đứt của frame Figma, mọi `id` lớp.
5020
+ * `__ID__` là chỗ `OlLogo` thay bằng id riêng từng lần vẽ — hai bản màu dùng
5021
+ * gradient, id trùng nhau thì bản đang `display:none` giữ `<defs>` làm bản
5022
+ * đang hiện mất màu (Chrome không vẽ paint server nằm trong cây bị ẩn).
5023
+ *
5024
+ * Chỉ chứa hình vẽ (`<path>`, `<linearGradient>`), không có script hay
5025
+ * `<foreignObject>` — `OlLogo` đánh dấu tin cậy được.
5026
+ */
5027
+ interface OlLogoArt {
5028
+ viewBox: string;
5029
+ body: string;
5030
+ }
5031
+ declare const OL_LOGO_FULL_COLOR: OlLogoArt;
5032
+ declare const OL_LOGO_FULL_WHITE: OlLogoArt;
5033
+ declare const OL_LOGO_MARK_COLOR: OlLogoArt;
5034
+ declare const OL_LOGO_MARK_WHITE: OlLogoArt;
5035
+
4944
5036
  type ModalSize = 'sm' | 'base' | 'lg' | 'xl' | '2xl';
4945
5037
  type ModalPlacement = 'center' | 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
4946
5038
  type OlModalBackdrop = 'static' | 'dynamic';
@@ -6064,6 +6156,23 @@ interface AppNavItem {
6064
6156
  badge?: string | number;
6065
6157
  /** Mờ 40% và không bấm được — theo Figma State=Disabled. */
6066
6158
  disabled?: boolean;
6159
+ /**
6160
+ * Nhãn phụ nhỏ cạnh tên, viền trắng — ví dụ `beta`. Khác `badge` (đếm số,
6161
+ * nền đỏ): đây là chú thích tính chất của mục.
6162
+ */
6163
+ extraText?: string;
6164
+ /**
6165
+ * Menu con — tối đa 3 cấp (mục → con → cháu). Mục có con là NÚT mở/đóng,
6166
+ * không điều hướng; `route` của nó (nếu có) chỉ dùng để nhận diện nhánh.
6167
+ * Nhánh chứa trang đang mở tự mở ra khi vào trang.
6168
+ */
6169
+ children?: AppNavItem[];
6170
+ /**
6171
+ * Đường dẫn khác cũng tính là "đang ở mục này" — ví dụ trang chi tiết
6172
+ * `/manage-exam/detail` thuộc mục "Quản lý kỳ thi" (`/manage-exam/list-exam`).
6173
+ * So khớp đúng hoặc theo tiền tố `<route>/`.
6174
+ */
6175
+ activeRoutes?: string[];
6067
6176
  }
6068
6177
  /**
6069
6178
  * Một nhóm mục. Figma chia menu làm hai phần, ngăn bằng một đường kẻ:
@@ -6076,8 +6185,33 @@ interface AppNavItem {
6076
6185
  */
6077
6186
  interface AppNavGroup {
6078
6187
  section: 'main' | 'footer';
6188
+ /**
6189
+ * Tiêu đề nhóm, in hoa nhỏ phía trên các mục — ví dụ "QUẢN LÝ TRƯỜNG HỌC".
6190
+ * Ẩn khi menu thu gọn. Bỏ trống thì nhóm không có tiêu đề (như bản cũ).
6191
+ */
6192
+ label?: string;
6079
6193
  items: AppNavItem[];
6080
6194
  }
6195
+ /**
6196
+ * Một mục trong menu tài khoản — mở ra khi bấm thẻ tài khoản (popup trên
6197
+ * desktop, khay menu trên mobile).
6198
+ *
6199
+ * Component chỉ PHÁT `userAction` kèm mục được bấm; đăng xuất thật, mở hộp
6200
+ * đổi mật khẩu… là việc của nơi dùng. Có `route` thì router điều hướng luôn.
6201
+ */
6202
+ interface AppNavUserAction {
6203
+ /** Khoá để nơi dùng phân nhánh: `profile`, `change-password`, `logout`… */
6204
+ id: string;
6205
+ label: string;
6206
+ /** Tên icon theo `OlIconService`. */
6207
+ icon: string;
6208
+ /** Đường dẫn router. Bỏ trống thì chỉ phát `userAction`. */
6209
+ route?: string;
6210
+ /** Tô đỏ — dùng cho hành động phá vỡ phiên như Đăng xuất. */
6211
+ danger?: boolean;
6212
+ /** Kẻ một đường ngăn phía trên mục này. */
6213
+ dividerBefore?: boolean;
6214
+ }
6081
6215
  /** Thẻ tài khoản dưới cùng. */
6082
6216
  interface AppNavUser {
6083
6217
  name: string;
@@ -6085,7 +6219,37 @@ interface AppNavUser {
6085
6219
  subtitle?: string;
6086
6220
  /** Ảnh đại diện. Bỏ trống thì `ol-avatar` tự dựng chữ cái đầu từ `name`. */
6087
6221
  avatarSrc?: string;
6222
+ /**
6223
+ * Menu tài khoản. Bỏ trống thì dùng `APP_NAV_DEFAULT_USER_ACTIONS`
6224
+ * (Trang cá nhân · Đổi mật khẩu · Đăng xuất). Truyền `[]` để tắt menu —
6225
+ * bấm thẻ khi đó chỉ phát `userClick` như bản cũ.
6226
+ */
6227
+ actions?: AppNavUserAction[];
6088
6228
  }
6229
+ /**
6230
+ * Menu tài khoản mặc định — ba việc mọi tài khoản đều cần.
6231
+ *
6232
+ * Không có `route`: đường dẫn trang cá nhân, cách đổi mật khẩu (trang riêng
6233
+ * hay hộp thoại) khác nhau giữa các sản phẩm. Nơi dùng bắt `userAction` theo
6234
+ * `id`, hoặc tự khai `user.actions` có `route`.
6235
+ */
6236
+ declare const APP_NAV_DEFAULT_USER_ACTIONS: readonly AppNavUserAction[];
6237
+ /**
6238
+ * Bố cục theo bề ngang màn hình.
6239
+ *
6240
+ * `desktop` menu dọc, mọi bề ngang (mặc định — giữ hành vi các bản trước)
6241
+ * `auto` từ `md` (768px) là menu dọc; dưới `md` là thanh đáy + khay menu
6242
+ * `mobile` luôn thanh đáy + khay menu (xem trước trên trang docs)
6243
+ */
6244
+ type AppNavLayout = 'desktop' | 'auto' | 'mobile';
6245
+ /**
6246
+ * Chỗ một mục được vẽ — template tuỳ biến đọc để vẽ khác nhau:
6247
+ *
6248
+ * `rail` menu dọc nền navy (chữ trắng)
6249
+ * `sheet` một dòng trong khay menu mobile (nền sáng)
6250
+ * `bar` một ô trên thanh đáy mobile (icon + nhãn ngắn)
6251
+ */
6252
+ type AppNavItemVariant = 'rail' | 'sheet' | 'bar';
6089
6253
  /**
6090
6254
  * Trọn bộ dữ liệu một menu — đúng thứ nơi dùng nạp từ JSON.
6091
6255
  *
@@ -6102,8 +6266,152 @@ interface AppNavUser {
6102
6266
  interface AppNavConfig {
6103
6267
  groups: AppNavGroup[];
6104
6268
  user?: AppNavUser;
6269
+ /**
6270
+ * Thanh đáy mobile: `id` các mục theo ĐÚNG thứ tự muốn hiện — sắp mobile
6271
+ * độc lập với menu desktop (`groups` giữ nguyên thứ tự desktop).
6272
+ *
6273
+ * - Lấy được mục ở mọi cấp và mọi nhóm (kể cả `footer`, kể cả con của một
6274
+ * mục cha), miễn có `route` và không có con — ô thanh đáy là một cú chạm.
6275
+ * - Mục gốc đã lên thanh đáy không lặp lại trong khay; mục con vẫn ở trong
6276
+ * menu con của cha nó.
6277
+ * - Khai thì `mobilePrimaryCount` bị bỏ qua — số ô là độ dài danh sách. Nên
6278
+ * ≤ 4 (màn 375px: 4 ô + nút Menu).
6279
+ * - Không khai: `mobilePrimaryCount` mục đầu nhóm `main` như trước.
6280
+ *
6281
+ * ```ts
6282
+ * mobileBar: ['home', 'assignments', 'live-classes', 'self-study-practice'],
6283
+ * ```
6284
+ */
6285
+ mobileBar?: readonly string[];
6105
6286
  }
6106
6287
 
6288
+ /**
6289
+ * Các khe template của `ol-app-nav`.
6290
+ *
6291
+ * Nơi dùng truyền `<ng-template olAppNavXxx let-...>` vào trong
6292
+ * `<ol-app-nav>`; vùng nào không truyền thì component vẽ giao diện mặc định.
6293
+ *
6294
+ * Template chỉ thay PHẦN RUỘT. Phần vỏ vẫn do component giữ để mọi nơi dùng
6295
+ * có cùng hành vi mà không phải chép lại:
6296
+ *
6297
+ * mục `<a routerLink>` / `<button>`, mục đang chọn, tooltip khi thu gọn,
6298
+ * mục bị khoá, đóng khay mobile khi bấm
6299
+ * tài khoản nút mở popup, `aria-expanded`, đóng popup khi chọn
6300
+ *
6301
+ * `ngTemplateContextGuard` cho trình biên dịch biết kiểu của `let-...` —
6302
+ * thiếu nó thì mọi biến trong template là `any`.
6303
+ */
6304
+ /** Ngữ cảnh template một mục. */
6305
+ interface AppNavItemContext {
6306
+ $implicit: AppNavItem;
6307
+ /** Menu dọc đang thu gọn (luôn `false` ở `sheet`/`bar`). */
6308
+ collapsed: boolean;
6309
+ /** Mục đang chọn — theo `activeId` hoặc router. */
6310
+ active: boolean;
6311
+ /** Cấp trong cây: 1 = mục gốc, 2 = con, 3 = cháu. */
6312
+ level: number;
6313
+ /** Mục có con và đang mở. */
6314
+ expanded: boolean;
6315
+ variant: AppNavItemVariant;
6316
+ }
6317
+ /** Ngữ cảnh khe đầu / chân menu (`olAppNavHeader` · `olAppNavFooter`). */
6318
+ interface AppNavSlotContext {
6319
+ /** Menu dọc đang thu gọn (luôn `false` trong khay mobile). */
6320
+ $implicit: boolean;
6321
+ collapsed: boolean;
6322
+ /** `rail`: trong menu dọc. `sheet`: trong khay mobile. */
6323
+ variant: 'rail' | 'sheet';
6324
+ }
6325
+ /** Ngữ cảnh template logo. */
6326
+ interface AppNavLogoContext {
6327
+ /** Menu đang thu gọn. */
6328
+ $implicit: boolean;
6329
+ collapsed: boolean;
6330
+ }
6331
+ /** Ngữ cảnh template thẻ tài khoản. */
6332
+ interface AppNavUserContext {
6333
+ $implicit: AppNavUser;
6334
+ collapsed: boolean;
6335
+ /** Chữ cái đầu dựng sẵn ("Nguyễn Nhật Linh" → "NL"). */
6336
+ initials: string;
6337
+ /** `rail`: nút ở đáy menu dọc. `sheet`: khối đầu khay mobile. */
6338
+ variant: 'rail' | 'sheet';
6339
+ }
6340
+ /** Ngữ cảnh template menu tài khoản (ruột popup). */
6341
+ interface AppNavUserMenuContext {
6342
+ $implicit: AppNavUser;
6343
+ /** Danh sách mục đã chốt (`user.actions` hoặc mặc định). */
6344
+ actions: readonly AppNavUserAction[];
6345
+ initials: string;
6346
+ /** Phát `userAction` + đóng popup — gọi khi người dùng chọn một mục. */
6347
+ select: (action: AppNavUserAction) => void;
6348
+ /** Chỉ đóng popup (trong khay mobile: đóng khay). */
6349
+ close: () => void;
6350
+ /**
6351
+ * Nơi vẽ: `popup` (nổi cạnh sidebar, mở được menu con SANG NGANG) hoặc
6352
+ * `sheet` (khay mobile — không có chỗ ngang, nên xổ xuống tại chỗ).
6353
+ */
6354
+ variant: 'popup' | 'sheet';
6355
+ /**
6356
+ * Phần nào của menu đang vẽ. `all`: trọn menu (popup; khay khi
6357
+ * `mobileUserMenu="bottom"`). Khay với `mobileUserMenu="split"` vẽ template
6358
+ * HAI lần: `top` ngay dưới thẻ tài khoản (việc thường, cài đặt), `bottom`
6359
+ * cuối khay (mục phụ). Mục `danger` ở `split` do component vẽ thành nút icon
6360
+ * trên thẻ tài khoản — template đừng vẽ lại ở `bottom`.
6361
+ */
6362
+ part: 'all' | 'top' | 'bottom';
6363
+ }
6364
+ /** `<ng-template olAppNavItem let-item let-active="active" let-variant="variant">` */
6365
+ declare class OlAppNavItemDef {
6366
+ readonly template: TemplateRef<AppNavItemContext>;
6367
+ static ngTemplateContextGuard(_dir: OlAppNavItemDef, ctx: unknown): ctx is AppNavItemContext;
6368
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAppNavItemDef, never>;
6369
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<OlAppNavItemDef, "ng-template[olAppNavItem]", never, {}, {}, never, never, true, never>;
6370
+ }
6371
+ /**
6372
+ * `<ng-template olAppNavHeader let-collapsed>` — vùng ngay dưới logo, trên
6373
+ * các mục (ví dụ bộ chọn vai Quản trị / Giảng dạy). Cũng hiện ở đầu khay mobile.
6374
+ */
6375
+ declare class OlAppNavHeaderDef {
6376
+ readonly template: TemplateRef<AppNavSlotContext>;
6377
+ static ngTemplateContextGuard(_dir: OlAppNavHeaderDef, ctx: unknown): ctx is AppNavSlotContext;
6378
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAppNavHeaderDef, never>;
6379
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<OlAppNavHeaderDef, "ng-template[olAppNavHeader]", never, {}, {}, never, never, true, never>;
6380
+ }
6381
+ /**
6382
+ * `<ng-template olAppNavFooter let-collapsed>` — vùng cuối danh sách mục chính,
6383
+ * trên đường kẻ (ví dụ ô "Niên khoá 2026 - 2027"). Cũng hiện cuối khay mobile.
6384
+ */
6385
+ declare class OlAppNavFooterDef {
6386
+ readonly template: TemplateRef<AppNavSlotContext>;
6387
+ static ngTemplateContextGuard(_dir: OlAppNavFooterDef, ctx: unknown): ctx is AppNavSlotContext;
6388
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAppNavFooterDef, never>;
6389
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<OlAppNavFooterDef, "ng-template[olAppNavFooter]", never, {}, {}, never, never, true, never>;
6390
+ }
6391
+ /** `<ng-template olAppNavLogo let-collapsed>` */
6392
+ declare class OlAppNavLogoDef {
6393
+ readonly template: TemplateRef<AppNavLogoContext>;
6394
+ static ngTemplateContextGuard(_dir: OlAppNavLogoDef, ctx: unknown): ctx is AppNavLogoContext;
6395
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAppNavLogoDef, never>;
6396
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<OlAppNavLogoDef, "ng-template[olAppNavLogo]", never, {}, {}, never, never, true, never>;
6397
+ }
6398
+ /** `<ng-template olAppNavUser let-user let-collapsed="collapsed">` */
6399
+ declare class OlAppNavUserDef {
6400
+ readonly template: TemplateRef<AppNavUserContext>;
6401
+ static ngTemplateContextGuard(_dir: OlAppNavUserDef, ctx: unknown): ctx is AppNavUserContext;
6402
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAppNavUserDef, never>;
6403
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<OlAppNavUserDef, "ng-template[olAppNavUser]", never, {}, {}, never, never, true, never>;
6404
+ }
6405
+ /** `<ng-template olAppNavUserMenu let-user let-actions="actions" let-select="select">` */
6406
+ declare class OlAppNavUserMenuDef {
6407
+ readonly template: TemplateRef<AppNavUserMenuContext>;
6408
+ static ngTemplateContextGuard(_dir: OlAppNavUserMenuDef, ctx: unknown): ctx is AppNavUserMenuContext;
6409
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAppNavUserMenuDef, never>;
6410
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<OlAppNavUserMenuDef, "ng-template[olAppNavUserMenu]", never, {}, {}, never, never, true, never>;
6411
+ }
6412
+ /** Gom sáu directive để nơi dùng nhập một lần: `imports: [OlAppNav, OL_APP_NAV_TEMPLATES]`. */
6413
+ declare const OL_APP_NAV_TEMPLATES: readonly [typeof OlAppNavItemDef, typeof OlAppNavHeaderDef, typeof OlAppNavFooterDef, typeof OlAppNavLogoDef, typeof OlAppNavUserDef, typeof OlAppNavUserMenuDef];
6414
+
6107
6415
  /**
6108
6416
  * `ol-app-nav` — menu điều hướng dọc của Ôn Luyện.
6109
6417
  *
@@ -6120,6 +6428,21 @@ interface AppNavConfig {
6120
6428
  * Không gộp hai cái làm một: gộp thì `ol-sidebar` phải mang theo nền gradient
6121
6429
  * và bố cục ba vùng mà 90% nơi dùng không cần.
6122
6430
  *
6431
+ * ## Dữ liệu + template từng vùng
6432
+ *
6433
+ * Danh sách mục vẫn đi qua `config` (nạp từ JSON/API theo vai). Phần RUỘT của
6434
+ * bốn vùng thay được bằng `<ng-template>` truyền vào — xem `app-nav-templates.ts`:
6435
+ * `olAppNavItem` · `olAppNavLogo` · `olAppNavUser` · `olAppNavUserMenu`. Vỏ
6436
+ * (liên kết, mục đang chọn, tooltip, mở/đóng popup) vẫn do component giữ.
6437
+ *
6438
+ * ## Mobile
6439
+ *
6440
+ * `layout="auto"`: dưới `md` menu dọc ẩn, thay bằng thanh đáy (`mobilePrimaryCount`
6441
+ * mục đầu nhóm chính + nút Menu) và khay menu trượt lên chứa phần còn lại, thẻ
6442
+ * tài khoản và menu tài khoản. Hai phần này `position: fixed` theo màn hình;
6443
+ * muốn xem trước trong khung (trang docs) thì bọc khung bằng `transform` —
6444
+ * phần tử `fixed` khi đó neo theo khung thay vì màn hình.
6445
+ *
6123
6446
  * ## Dữ liệu từ ngoài, không nhúng cứng
6124
6447
  *
6125
6448
  * Ba quyền trong Figma là NỘI DUNG mẫu. Component nhận `config` — nơi dùng nạp
@@ -6136,6 +6459,21 @@ interface AppNavConfig {
6136
6459
  * như Figma mô tả ("dùng trên nền tối, chữ và biểu tượng đều `text-white`").
6137
6460
  */
6138
6461
  declare class OlAppNav {
6462
+ private readonly overlayContainer;
6463
+ private readonly router;
6464
+ /**
6465
+ * URL hiện tại (bỏ query/hash) — nguồn của mục đang chọn và nhánh tự mở.
6466
+ *
6467
+ * Không dùng `routerLinkActive` nữa: nó không biết `activeRoutes`, không cho
6468
+ * biết mục CHA có con đang mở, và không chạy với mục cha (là nút, không có
6469
+ * `routerLink`). Tự so URL thì một luật áp cho cả cây.
6470
+ */
6471
+ private readonly currentUrl;
6472
+ /** Id các mục cha đang mở. */
6473
+ private readonly expandedIds;
6474
+ /** Hàm gỡ khay mobile khỏi ngăn xếp Escape. `null` khi khay đóng. */
6475
+ private releaseEscape;
6476
+ constructor();
6139
6477
  /** Danh sách menu và thẻ tài khoản. Xem `AppNavConfig`. */
6140
6478
  readonly config: _angular_core.InputSignal<AppNavConfig>;
6141
6479
  /**
@@ -6152,16 +6490,74 @@ declare class OlAppNav {
6152
6490
  * signal. Có `route` thì `routerLinkActive` tự lo, không cần đặt cái này.
6153
6491
  */
6154
6492
  readonly activeId: _angular_core.InputSignal<string | null>;
6155
- /** Ảnh logo. Bỏ trống thì dựng chữ "Ôn luyện" bằng text. */
6493
+ /**
6494
+ * Logo — ba cách, theo thứ tự ưu tiên:
6495
+ *
6496
+ * 1. `<ng-template olAppNavLogo let-collapsed>` — tự vẽ hoàn toàn.
6497
+ * 2. `logoSrc` (+ `logoMarkSrc` khi thu gọn) — ảnh của nơi dùng.
6498
+ * 3. Mặc định: `ol-logo` của kit — mở thì bản DÀI, thu gọn thì bản VUÔNG.
6499
+ */
6156
6500
  readonly logoSrc: _angular_core.InputSignal<string>;
6501
+ /**
6502
+ * Ảnh logo vuông khi thu gọn (khung 70px không đủ chỗ logo dài). Bỏ trống
6503
+ * thì thu gọn vẫn dùng `logoSrc`, co vừa ô 40px.
6504
+ */
6505
+ readonly logoMarkSrc: _angular_core.InputSignal<string>;
6506
+ /**
6507
+ * Tông logo của kit. Mặc định `auto`: chế độ sáng dùng logo MÀU, `.dark`
6508
+ * dùng logo trắng (người dùng chốt 2026-10-06 — bản trước mặc định `white`
6509
+ * ở cả hai chế độ). Muốn luôn trắng thì truyền `white`.
6510
+ */
6511
+ readonly logoTone: _angular_core.InputSignal<LogoTone>;
6157
6512
  /** Chiều rộng khi mở. Figma: 270px. */
6158
6513
  readonly width: _angular_core.InputSignal<string>;
6159
6514
  /** Chiều rộng khi thu gọn. Figma: 70px. */
6160
6515
  readonly collapsedWidth: _angular_core.InputSignal<string>;
6161
6516
  /** Phát khi bấm một mục. Mục có `route` thì router đã lo điều hướng. */
6162
6517
  readonly itemClick: _angular_core.OutputEmitterRef<AppNavItem>;
6163
- /** Phát khi bấm thẻ tài khoản — nơi dùng mở menu đổi tài khoản, đăng xuất. */
6518
+ /**
6519
+ * Phát khi bấm thẻ tài khoản (cả khi menu tài khoản mở ra sau đó). Giữ để
6520
+ * tương thích các bản trước; chọn một mục trong menu thì nghe `userAction`.
6521
+ */
6164
6522
  readonly userClick: _angular_core.OutputEmitterRef<void>;
6523
+ /** Phát khi chọn một mục trong menu tài khoản — `profile`, `change-password`, `logout`… */
6524
+ readonly userAction: _angular_core.OutputEmitterRef<AppNavUserAction>;
6525
+ /** Popup tài khoản (desktop) đang mở. Hai chiều: `[(userMenuOpen)]`. */
6526
+ readonly userMenuOpen: _angular_core.ModelSignal<boolean>;
6527
+ /**
6528
+ * Bố cục theo bề ngang. Mặc định `desktop` — giữ nguyên hành vi các bản
6529
+ * trước. `auto`: dưới `md` chuyển sang thanh đáy + khay menu. Xem `AppNavLayout`.
6530
+ */
6531
+ readonly layout: _angular_core.InputSignal<AppNavLayout>;
6532
+ /**
6533
+ * Số mục lên thanh đáy mobile (đầu nhóm `main`); ô cuối luôn là nút Menu.
6534
+ * Bỏ qua khi `config.mobileBar` có khai — khi đó danh sách quyết định.
6535
+ *
6536
+ * Bốn: màn 375px chia 5 ô mỗi ô 75px — vừa icon 24px và một dòng nhãn 10px.
6537
+ * Sáu ô thì mỗi ô 62px, nhãn bắt đầu bị cắt.
6538
+ */
6539
+ readonly mobilePrimaryCount: _angular_core.InputSignal<number>;
6540
+ /** Khay menu mobile đang mở. Hai chiều: `[(mobileMenuOpen)]` — khung đóng khi chuyển trang. */
6541
+ readonly mobileMenuOpen: _angular_core.ModelSignal<boolean>;
6542
+ /**
6543
+ * Chỗ đặt menu tài khoản trong khay mobile:
6544
+ * - `bottom` (mặc định, như các bản trước): trọn menu ở cuối khay.
6545
+ * - `split`: việc thường (Trang cá nhân, Đổi mật khẩu… — mục không `danger`)
6546
+ * lên ĐẦU khay ngay dưới thẻ tài khoản; mục `danger` (Đăng xuất) thành nút
6547
+ * CHỈ ICON đỏ bên phải thẻ tài khoản. Template `olAppNavUserMenu` nhận
6548
+ * `part: 'top' | 'bottom'` để tự chia — và KHÔNG vẽ mục danger ở `bottom`.
6549
+ */
6550
+ readonly mobileUserMenu: _angular_core.InputSignal<"bottom" | "split">;
6551
+ /** Chữ trên nút Menu của thanh đáy. */
6552
+ readonly mobileMenuLabel: _angular_core.InputSignal<string>;
6553
+ readonly itemDef: _angular_core.Signal<OlAppNavItemDef | undefined>;
6554
+ readonly headerDef: _angular_core.Signal<OlAppNavHeaderDef | undefined>;
6555
+ readonly footerDef: _angular_core.Signal<OlAppNavFooterDef | undefined>;
6556
+ readonly logoDef: _angular_core.Signal<OlAppNavLogoDef | undefined>;
6557
+ readonly userDef: _angular_core.Signal<OlAppNavUserDef | undefined>;
6558
+ readonly userMenuDef: _angular_core.Signal<OlAppNavUserMenuDef | undefined>;
6559
+ /** Id khay mobile — `aria-controls` của nút Menu trỏ vào. */
6560
+ readonly sheetId: string;
6165
6561
  /**
6166
6562
  * Hiện thanh kéo (rail) ở mép phải để thu gọn / mở lại.
6167
6563
  *
@@ -6171,10 +6567,98 @@ declare class OlAppNav {
6171
6567
  readonly showRail: _angular_core.InputSignal<boolean>;
6172
6568
  /** Chữ trên tooltip của thanh kéo, đổi theo trạng thái. */
6173
6569
  readonly railLabel: _angular_core.Signal<"Mở rộng" | "Thu gọn">;
6174
- /** Mục của phần trên. */
6570
+ /** Mọi nhóm, giữ thứ tự khai. */
6571
+ private readonly allGroups;
6572
+ /** Nhóm phần trên — vẽ theo nhóm để hiện `label`. */
6573
+ readonly mainGroups: _angular_core.Signal<AppNavGroup[]>;
6574
+ /** Mục gốc của phần trên, phẳng (cho thanh đáy mobile). */
6175
6575
  readonly mainItems: _angular_core.Signal<AppNavItem[]>;
6176
6576
  /** Mục của phần dưới, nằm sát thẻ tài khoản. */
6177
6577
  readonly footerItems: _angular_core.Signal<AppNavItem[]>;
6578
+ /**
6579
+ * Mục lên thanh đáy mobile. Có `config.mobileBar` → đúng các id đó, đúng
6580
+ * thứ tự đó (mọi nhóm, mọi cấp). Không có → `mobilePrimaryCount` mục gốc ĐẦU
6581
+ * TIÊN của phần trên. Cả hai chỉ nhận mục có `route` và KHÔNG có con — ô
6582
+ * thanh đáy là một cú chạm điều hướng, không chứa được menu con.
6583
+ */
6584
+ readonly primaryItems: _angular_core.Signal<AppNavItem[]>;
6585
+ /**
6586
+ * Nhóm vào khay mobile: mọi nhóm (kể cả `footer` — dưới `md` không còn menu
6587
+ * dọc nào chứa chúng), bỏ các mục đã lên thanh đáy, giữ tiêu đề nhóm.
6588
+ */
6589
+ readonly sheetGroups: _angular_core.Signal<AppNavGroup[]>;
6590
+ /** Phần còn lại, phẳng — giữ cho nơi dùng đã đọc trước đây. */
6591
+ readonly overflowItems: _angular_core.Signal<AppNavItem[]>;
6592
+ /**
6593
+ * Khoảng cách popup tài khoản → thẻ, để popup nằm HẲN ngoài sidebar, cách
6594
+ * mép 8px. Thẻ thụt trong sidebar: mở rộng đệm 16px (`px-4`, bản gọn);
6595
+ * thu gọn nút giữa khung 70px còn 15px. Đo 2026-10-06 sau bản gọn: khe 8px
6596
+ * ở cả hai trạng thái (offset 8 cố định từng làm popup chồng mép sidebar).
6597
+ */
6598
+ readonly userMenuOffset: _angular_core.Signal<24 | 23>;
6599
+ /** Menu tài khoản đã chốt: `user.actions`, hoặc mặc định khi không khai. */
6600
+ readonly userActions: _angular_core.Signal<readonly AppNavUserAction[]>;
6601
+ /** Class menu dọc theo `layout`. */
6602
+ readonly railDisplay: _angular_core.Signal<"flex" | "hidden" | "hidden md:flex">;
6603
+ /** Có vẽ thanh đáy + khay không, và ẩn từ `md` khi `auto`. */
6604
+ readonly hasMobile: _angular_core.Signal<boolean>;
6605
+ readonly mobileDisplay: _angular_core.Signal<"" | "md:hidden">;
6606
+ /** Ngữ cảnh template một mục. */
6607
+ itemContext(item: AppNavItem, variant: AppNavItemVariant, level?: number): AppNavItemContext;
6608
+ /** Ngữ cảnh khe đầu / chân menu. */
6609
+ slotContext(variant: 'rail' | 'sheet'): {
6610
+ $implicit: boolean;
6611
+ collapsed: boolean;
6612
+ variant: "rail" | "sheet";
6613
+ };
6614
+ /** Bỏ query/hash và `/` cuối — `/a/b/?x=1#y` → `/a/b`. */
6615
+ private static normalize;
6616
+ /** `route` khớp URL hiện tại: đúng hệt, hoặc URL nằm dưới nó (`route/…`). `/` chỉ khớp đúng. */
6617
+ isRouteActive(route: string): boolean;
6618
+ /**
6619
+ * Mục đang chọn: `activeId` trùng, hoặc `route` / `activeRoutes` khớp URL.
6620
+ * Mục CHA không bao giờ "đang chọn" — trang nằm ở con; cha chỉ được đánh
6621
+ * dấu "chứa mục đang chọn" (`hasActiveChild`).
6622
+ */
6623
+ isItemActive(item: AppNavItem): boolean;
6624
+ /** Mục có con (cháu…) đang chọn. */
6625
+ hasActiveChild(item: AppNavItem): boolean;
6626
+ isExpanded(item: AppNavItem): boolean;
6627
+ /**
6628
+ * Mở / đóng một nhánh (menu dọc đang mở, hoặc khay mobile).
6629
+ *
6630
+ * Kiểu ACCORDION — mỗi cấp chỉ một nhánh mở: mở một mục thì đóng các mục
6631
+ * CÙNG CẤP (kèm mọi nhánh con của chúng). Cấp 1 tính chung mọi nhóm, cả
6632
+ * nhóm `footer`; cấp 2 · 3 tính trong cùng mục cha. Menu dài (Quản trị
6633
+ * trường 5 nhóm) mà mở nhiều nhánh một lúc thì cuộn mãi không hết.
6634
+ */
6635
+ toggleExpand(item: AppNavItem): void;
6636
+ /** Id mục cha đang mở menu nổi. */
6637
+ readonly flyoutId: _angular_core.WritableSignal<string | null>;
6638
+ private flyoutCloseTimer;
6639
+ /** Rê vào nút hoặc panel: mở (và huỷ hẹn đóng). */
6640
+ openFlyout(id: string): void;
6641
+ cancelFlyoutClose(): void;
6642
+ /** Rời nút hoặc panel: đóng sau 150ms — đủ để chuột băng qua khe giữa hai cái. */
6643
+ scheduleFlyoutClose(): void;
6644
+ /** `ol-dropdown` báo mở/đóng (bấm nút, bấm ra ngoài, Esc). */
6645
+ onFlyoutOpenChange(id: string, open: boolean): void;
6646
+ /** Chọn một mục trong menu nổi: đóng menu, phát `itemClick` (router lo điều hướng). */
6647
+ onFlyoutSelect(item: AppNavItem): void;
6648
+ /** Id mọi mục cha nằm trên đường tới mục đang chọn. */
6649
+ private activeAncestorIds;
6650
+ /** Ngữ cảnh template menu tài khoản — popup desktop và khay mobile. */
6651
+ readonly userMenuPopupContext: _angular_core.Signal<AppNavUserMenuContext | null>;
6652
+ readonly userMenuSheetContext: _angular_core.Signal<AppNavUserMenuContext | null>;
6653
+ readonly userMenuSheetTopContext: _angular_core.Signal<AppNavUserMenuContext | null>;
6654
+ /** Mục `danger` (Đăng xuất) — `split`: nút icon đỏ trên thẻ tài khoản đầu khay. */
6655
+ readonly cardActions: _angular_core.Signal<AppNavUserAction[]>;
6656
+ /**
6657
+ * Mục tài khoản mặc định (không template) cho phần khay đang vẽ. `split`:
6658
+ * việc thường ở `top`, mục danger đã lên thẻ tài khoản nên `bottom` rỗng.
6659
+ */
6660
+ sheetActionsFor(part: 'all' | 'top' | 'bottom'): readonly AppNavUserAction[];
6661
+ private buildUserMenuContext;
6178
6662
  /** Đường kẻ chỉ vẽ khi phần dưới có mục — không thì thừa một vạch. */
6179
6663
  readonly showDivider: _angular_core.Signal<boolean>;
6180
6664
  readonly navWidth: _angular_core.Signal<string>;
@@ -6191,7 +6675,7 @@ declare class OlAppNav {
6191
6675
  * Gộp vào MỘT chuỗi thay vì nhiều `[class.x]`: hai binding cùng tên thuộc
6192
6676
  * tính thì cái sau thắng, cái trước mất im lặng.
6193
6677
  */
6194
- itemClasses(item: AppNavItem): string;
6678
+ itemClasses(item: AppNavItem, level?: number): string;
6195
6679
  /**
6196
6680
  * Chữ cái đầu cho ảnh đại diện, khi không có ảnh.
6197
6681
  *
@@ -6201,10 +6685,212 @@ declare class OlAppNav {
6201
6685
  * phải "NN".
6202
6686
  */
6203
6687
  readonly userInitials: _angular_core.Signal<string>;
6688
+ /** Nút thẻ tài khoản ở đáy menu dọc. */
6689
+ /**
6690
+ * Nút thẻ tài khoản ở đáy menu dọc.
6691
+ *
6692
+ * Mở rộng: đệm phải 10px (`pe-2.5`, bằng đệm mục menu phía trên) — bản trước
6693
+ * `p-1` 4px làm mũi tên dính sát viền bo (người dùng chỉ ra 2026-10-06).
6694
+ * Đang mở menu tài khoản thì GIỮ nền nổi như mục cha đang mở.
6695
+ */
6696
+ userCardClasses(): string;
6697
+ /** Một ô thanh đáy mobile. Mục có route thì `routerLinkActive` tô thêm `text-fg-brand`. */
6698
+ barItemClasses(item: AppNavItem): string;
6699
+ /** Một dòng trong khay mobile. */
6700
+ sheetItemClasses(item: AppNavItem, level?: number): string;
6701
+ /**
6702
+ * Một mục menu tài khoản trong khay. Mục `danger` đổi CẢ nền lẫn chữ khi
6703
+ * hover: `text-fg-danger` trên `bg-danger-soft` chỉ đạt 4,09 (dưới AA 4,5),
6704
+ * nên chữ kéo xuống `fg-danger-strong` cho khớp nền.
6705
+ */
6706
+ sheetActionClasses(action: AppNavUserAction): string;
6204
6707
  onItemClick(item: AppNavItem): void;
6708
+ /** Chọn một mục menu tài khoản — đóng popup/khay rồi phát cho nơi dùng. */
6709
+ onUserAction(action: AppNavUserAction): void;
6710
+ toggleMobileMenu(): void;
6205
6711
  toggle(): void;
6206
6712
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAppNav, never>;
6207
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlAppNav, "ol-app-nav", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "activeId": { "alias": "activeId"; "required": false; "isSignal": true; }; "logoSrc": { "alias": "logoSrc"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "collapsedWidth": { "alias": "collapsedWidth"; "required": false; "isSignal": true; }; "showRail": { "alias": "showRail"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; "itemClick": "itemClick"; "userClick": "userClick"; }, never, never, true, never>;
6713
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlAppNav, "ol-app-nav", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "activeId": { "alias": "activeId"; "required": false; "isSignal": true; }; "logoSrc": { "alias": "logoSrc"; "required": false; "isSignal": true; }; "logoMarkSrc": { "alias": "logoMarkSrc"; "required": false; "isSignal": true; }; "logoTone": { "alias": "logoTone"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "collapsedWidth": { "alias": "collapsedWidth"; "required": false; "isSignal": true; }; "userMenuOpen": { "alias": "userMenuOpen"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "mobilePrimaryCount": { "alias": "mobilePrimaryCount"; "required": false; "isSignal": true; }; "mobileMenuOpen": { "alias": "mobileMenuOpen"; "required": false; "isSignal": true; }; "mobileUserMenu": { "alias": "mobileUserMenu"; "required": false; "isSignal": true; }; "mobileMenuLabel": { "alias": "mobileMenuLabel"; "required": false; "isSignal": true; }; "showRail": { "alias": "showRail"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; "itemClick": "itemClick"; "userClick": "userClick"; "userAction": "userAction"; "userMenuOpen": "userMenuOpenChange"; "mobileMenuOpen": "mobileMenuOpenChange"; }, ["itemDef", "headerDef", "footerDef", "logoDef", "userDef", "userMenuDef"], never, true, never>;
6714
+ }
6715
+
6716
+ /**
6717
+ * Các khe template của `ol-app-header`. Vùng nào không truyền thì component
6718
+ * vẽ giao diện mặc định. Khung (kiểu nhìn, dính đỉnh, nền mobile, chiều cao)
6719
+ * luôn do component giữ.
6720
+ *
6721
+ * olAppHeaderTitle thay khối tiêu đề (breadcrumb, avatar lớp…)
6722
+ * olAppHeaderActions cụm bên phải (chip, chuông…)
6723
+ * olAppHeaderContent thay TOÀN BỘ ruột — thanh làm bài (đồng hồ + tiến
6724
+ * trình + Nộp bài); khi có, nút quay lại / tiêu đề /
6725
+ * ô tìm không vẽ
6726
+ */
6727
+ /** Ngữ cảnh khe — chưa mang dữ liệu; để sẵn cho mở rộng không phá API. */
6728
+ type AppHeaderSlotContext = Record<string, never>;
6729
+ /** `<ng-template olAppHeaderTitle>` */
6730
+ declare class OlAppHeaderTitleDef {
6731
+ readonly template: TemplateRef<AppHeaderSlotContext>;
6732
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAppHeaderTitleDef, never>;
6733
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<OlAppHeaderTitleDef, "ng-template[olAppHeaderTitle]", never, {}, {}, never, never, true, never>;
6734
+ }
6735
+ /** `<ng-template olAppHeaderActions>` */
6736
+ declare class OlAppHeaderActionsDef {
6737
+ readonly template: TemplateRef<AppHeaderSlotContext>;
6738
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAppHeaderActionsDef, never>;
6739
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<OlAppHeaderActionsDef, "ng-template[olAppHeaderActions]", never, {}, {}, never, never, true, never>;
6740
+ }
6741
+ /** `<ng-template olAppHeaderContent>` */
6742
+ declare class OlAppHeaderContentDef {
6743
+ readonly template: TemplateRef<AppHeaderSlotContext>;
6744
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAppHeaderContentDef, never>;
6745
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<OlAppHeaderContentDef, "ng-template[olAppHeaderContent]", never, {}, {}, never, never, true, never>;
6746
+ }
6747
+ /** Gom sẵn để import một lần. */
6748
+ declare const OL_APP_HEADER_TEMPLATES: readonly [typeof OlAppHeaderTitleDef, typeof OlAppHeaderActionsDef, typeof OlAppHeaderContentDef];
6749
+
6750
+ /**
6751
+ * Kiểu dữ liệu cho `ol-app-header` — thanh trên của trang trong app (đi cặp
6752
+ * `ol-app-nav`). Khác `ol-navbar`: đó là navbar trang WEB (logo + liên kết).
6753
+ */
6754
+ /**
6755
+ * Kiểu nhìn:
6756
+ * `plain` trong suốt, không viền — đặt trên nền trang (có hoạ tiết)
6757
+ * `solid` nền trắng + viền dưới — trang nền trơn, admin
6758
+ * `floating` thẻ trắng bo góc + bóng nhẹ — dashboard kiểu thẻ
6759
+ */
6760
+ type AppHeaderVariant = 'plain' | 'solid' | 'floating';
6761
+ /** Chiều cao: `base` 64px · `sm` 56px. */
6762
+ type AppHeaderSize = 'base' | 'sm';
6763
+ /** Một mục đường dẫn (breadcrumb). Không có `link` = không bấm được (mục cuối). */
6764
+ interface AppHeaderCrumb {
6765
+ label: string;
6766
+ link?: string;
6767
+ }
6768
+ /** Mốc ô tìm hiện đầy đủ giữa hàng; dưới mốc là nút kính lúp mở ô. */
6769
+ type AppHeaderSearchCollapseAt = 'lg' | 'xl';
6770
+
6771
+ /**
6772
+ * Thanh trên của trang trong app — đi cặp `ol-app-nav`.
6773
+ *
6774
+ * Bố cục một hàng: [←] [tiêu đề] [ô tìm — co theo chỗ] [hành động].
6775
+ *
6776
+ * ## Hai hành vi theo bề ngang
6777
+ *
6778
+ * Desktop theo `variant`. Dưới `md` (`mobileSolid`, mặc định bật) header luôn
6779
+ * DÍNH ĐỈNH và NỀN ĐẶC: ở màn hẹp không còn menu trái, header là mốc duy nhất
6780
+ * cho biết đang ở màn nào; dính mà trong suốt thì nội dung cuộn qua hiện
6781
+ * xuyên lên, chữ chồng chữ.
6782
+ *
6783
+ * ## Ô tìm co giãn
6784
+ *
6785
+ * Từ `searchCollapseAt` trở lên ô nằm giữa hàng, `flex-1`, co lại khi chật;
6786
+ * dưới mốc đó thành nút kính lúp mở ô trong bảng thả xuống — không bóp ô tới
6787
+ * mức không gõ nổi.
6788
+ *
6789
+ * ## Khe
6790
+ *
6791
+ * `olAppHeaderTitle` · `olAppHeaderActions` · `olAppHeaderContent` — xem
6792
+ * `app-header-templates.ts`. `olAppHeaderContent` thay trọn ruột (thanh làm
6793
+ * bài), khung vẫn của component.
6794
+ */
6795
+ declare class OlAppHeader {
6796
+ private readonly router;
6797
+ readonly variant: _angular_core.InputSignal<AppHeaderVariant>;
6798
+ readonly size: _angular_core.InputSignal<AppHeaderSize>;
6799
+ /** Dưới `md`: dính đỉnh + nền đặc + viền dưới. */
6800
+ readonly mobileSolid: _angular_core.InputSignal<boolean>;
6801
+ /** Dính đỉnh cả trên desktop — `plain` tự có nền đặc khi dính. */
6802
+ readonly sticky: _angular_core.InputSignal<boolean>;
6803
+ /**
6804
+ * Class thêm vào thẻ `<header>` — host là `contents` nên class đặt trên
6805
+ * `<ol-app-header>` không có hộp nào để áp. Ví dụ kéo tràn mép ở mobile:
6806
+ * `headerClass="-mx-4 -mt-4 md:mx-0 md:mt-0"`.
6807
+ */
6808
+ readonly headerClass: _angular_core.InputSignal<string>;
6809
+ readonly title: _angular_core.InputSignal<string>;
6810
+ /** Dòng nhỏ phía trên tiêu đề, ví dụ "HỌC SINH · ÔN LUYỆN". Ẩn dưới `sm`. */
6811
+ readonly subtitle: _angular_core.InputSignal<string>;
6812
+ /**
6813
+ * Đường dẫn phía trên tiêu đề, thay `subtitle` khi có ≥ 2 mục. Mục cuối là
6814
+ * trang hiện tại (không bấm được). Ẩn dưới `sm` như `subtitle`.
6815
+ */
6816
+ readonly breadcrumbs: _angular_core.InputSignal<readonly AppHeaderCrumb[]>;
6817
+ readonly showBreadcrumbs: _angular_core.Signal<boolean>;
6818
+ /** Đường dẫn quay lại — bấm thì `router.navigateByUrl`. */
6819
+ readonly backLink: _angular_core.InputSignal<string>;
6820
+ /** Hiện nút quay lại và chỉ phát `(back)` — nơi dùng tự điều hướng. */
6821
+ readonly showBack: _angular_core.InputSignal<boolean>;
6822
+ /** Tên đọc + tooltip của nút quay lại: "Quay lại <backLabel>". */
6823
+ readonly backLabel: _angular_core.InputSignal<string>;
6824
+ readonly back: _angular_core.OutputEmitterRef<void>;
6825
+ readonly showSearch: _angular_core.InputSignal<boolean>;
6826
+ readonly searchPlaceholder: _angular_core.InputSignal<string>;
6827
+ readonly searchAriaLabel: _angular_core.InputSignal<string>;
6828
+ readonly searchCollapseAt: _angular_core.InputSignal<AppHeaderSearchCollapseAt>;
6829
+ readonly searchValue: _angular_core.ModelSignal<string>;
6830
+ /** Bấm Enter trong ô tìm — giá trị đã cắt khoảng trắng, bỏ qua khi rỗng. */
6831
+ readonly search: _angular_core.OutputEmitterRef<string>;
6832
+ readonly titleDef: _angular_core.Signal<OlAppHeaderTitleDef | undefined>;
6833
+ readonly actionsDef: _angular_core.Signal<OlAppHeaderActionsDef | undefined>;
6834
+ readonly contentDef: _angular_core.Signal<OlAppHeaderContentDef | undefined>;
6835
+ readonly hasBack: _angular_core.Signal<boolean>;
6836
+ readonly backAriaLabel: _angular_core.Signal<string>;
6837
+ /** Khung `<header>` — kiểu nhìn + hành vi mobile + dính đỉnh. */
6838
+ readonly headerClasses: _angular_core.Signal<string>;
6839
+ /** Ô tìm đầy đủ: chỉ hiện từ mốc. Viết đủ hai chuỗi để Tailwind quét thấy. */
6840
+ readonly searchInlineClasses: _angular_core.Signal<"hidden min-w-0 max-w-md flex-1 lg:block" | "hidden min-w-0 max-w-md flex-1 xl:block">;
6841
+ /** Nút kính lúp: chỉ dưới mốc. */
6842
+ readonly searchToggleClasses: _angular_core.Signal<"shrink-0 lg:hidden" | "shrink-0 xl:hidden">;
6843
+ /**
6844
+ * Khối tiêu đề: chiếm chỗ trống khi ô tìm không nằm giữa hàng; khi ô tìm
6845
+ * hiện thì nhường `flex-1` cho ô tìm, tiêu đề chỉ rộng theo chữ.
6846
+ */
6847
+ readonly titleClasses: _angular_core.Signal<"min-w-0 flex-1" | "min-w-0 flex-1 lg:max-w-[40%] lg:flex-none" | "min-w-0 flex-1 xl:max-w-[40%] xl:flex-none">;
6848
+ onBack(): void;
6849
+ submitSearch(event: Event): void;
6850
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAppHeader, never>;
6851
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlAppHeader, "ol-app-header", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "mobileSolid": { "alias": "mobileSolid"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "headerClass": { "alias": "headerClass"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "breadcrumbs": { "alias": "breadcrumbs"; "required": false; "isSignal": true; }; "backLink": { "alias": "backLink"; "required": false; "isSignal": true; }; "showBack": { "alias": "showBack"; "required": false; "isSignal": true; }; "backLabel": { "alias": "backLabel"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "searchAriaLabel": { "alias": "searchAriaLabel"; "required": false; "isSignal": true; }; "searchCollapseAt": { "alias": "searchCollapseAt"; "required": false; "isSignal": true; }; "searchValue": { "alias": "searchValue"; "required": false; "isSignal": true; }; }, { "back": "back"; "searchValue": "searchValueChange"; "search": "search"; }, ["titleDef", "actionsDef", "contentDef"], never, true, never>;
6852
+ }
6853
+
6854
+ /**
6855
+ * 20 hoạ tiết của Figma component "Pattern" (#1240:55097). Thứ tự theo Figma.
6856
+ * Dùng mảng này cho bộ chọn / trang trưng bày.
6857
+ */
6858
+ declare const OL_PATTERN_TYPES: readonly ["lines", "rounded-lines", "creative", "diamond-right", "diamond-left", "vertical-lines", "oblique-lines", "dots", "lines-modern", "squares", "modern", "comb", "tech", "tech-square", "tech-squares", "technology", "comb-linear", "big-comb", "lines-oblique", "technology-top"];
6859
+ type PatternType = (typeof OL_PATTERN_TYPES)[number];
6860
+ /**
6861
+ * Cách phủ hình lên khung:
6862
+ * cover phủ kín, cắt phần thừa (mặc định — nền trang, banner)
6863
+ * contain hiện trọn hình, có thể chừa lề
6864
+ * repeat lặp hình gốc theo kích thước thật (~1512×776)
6865
+ */
6866
+ type PatternFit = 'cover' | 'contain' | 'repeat';
6867
+ /** `absolute` phủ khối cha (cha cần `relative`); `fixed` phủ cả màn, đứng yên khi cuộn. */
6868
+ type PatternPosition = 'absolute' | 'fixed';
6869
+ /**
6870
+ * Hoạ tiết nền — lớp trang trí phủ khối cha (banner, thẻ, nền trang).
6871
+ *
6872
+ * Màu = `currentColor`: đặt `class="text-white"` trên nền tối,
6873
+ * `class="text-fg-brand"` trên nền sáng. Độ đậm qua `opacity`.
6874
+ *
6875
+ * CẦN import `@edmicro/olkit/styles/patterns.css` (file riêng — 20 SVG chỉ tải
6876
+ * kiểu đang dùng). Thiếu file đó thì hoạ tiết không hiện.
6877
+ *
6878
+ * ```html
6879
+ * <div class="relative overflow-hidden rounded-lg bg-brand">
6880
+ * <ol-pattern type="tech" class="text-white" [opacity]="0.2" />
6881
+ * …nội dung…
6882
+ * </div>
6883
+ * ```
6884
+ */
6885
+ declare class OlPattern {
6886
+ readonly type: _angular_core.InputSignal<"dots" | "lines" | "rounded-lines" | "creative" | "diamond-right" | "diamond-left" | "vertical-lines" | "oblique-lines" | "lines-modern" | "squares" | "modern" | "comb" | "tech" | "tech-square" | "tech-squares" | "technology" | "comb-linear" | "big-comb" | "lines-oblique" | "technology-top">;
6887
+ readonly fit: _angular_core.InputSignal<PatternFit>;
6888
+ readonly position: _angular_core.InputSignal<PatternPosition>;
6889
+ /** Độ đậm 0–1. Trên nền sáng thường 0,06–0,15; trên nền tối 0,15–0,4. */
6890
+ readonly opacity: _angular_core.InputSignal<number>;
6891
+ readonly hostClasses: _angular_core.Signal<string>;
6892
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlPattern, never>;
6893
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlPattern, "ol-pattern", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "fit": { "alias": "fit"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "opacity": { "alias": "opacity"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6208
6894
  }
6209
6895
 
6210
6896
  declare class OlSidebar {
@@ -6876,6 +7562,10 @@ declare class OlTooltipDirective implements OnDestroy {
6876
7562
  private showTimeout?;
6877
7563
  private hideTimeout?;
6878
7564
  private touchTimeout?;
7565
+ /** Hẹn hiện tooltip khi NHẤN GIỮ — huỷ nếu nhấc tay sớm (chạm nhanh). */
7566
+ private longPressTimeout?;
7567
+ /** Mốc chạm gần nhất — bỏ qua mouseenter/focus trình duyệt tự sinh sau cú chạm. */
7568
+ private lastTouchAt;
6879
7569
  private tooltipComponent?;
6880
7570
  private tooltipElement?;
6881
7571
  private cleanupAutoUpdate?;
@@ -6886,12 +7576,16 @@ declare class OlTooltipDirective implements OnDestroy {
6886
7576
  private blurListener?;
6887
7577
  private touchStartListener?;
6888
7578
  private touchEndListener?;
7579
+ private touchCancelListeners;
6889
7580
  constructor();
6890
7581
  ngOnDestroy(): void;
6891
7582
  /**
6892
7583
  * Setup event listeners for tooltip triggers
6893
7584
  */
6894
7585
  private setupListeners;
7586
+ /** Sự kiện chuột/focus này có phải do cú chạm vừa rồi sinh ra không (≤ 800ms). */
7587
+ private fromRecentTouch;
7588
+ private clearLongPress;
6895
7589
  /**
6896
7590
  * Remove event listeners
6897
7591
  */
@@ -7592,6 +8286,20 @@ declare class OlChart {
7592
8286
  readonly hiddenItems: _angular_core.WritableSignal<Set<string>>;
7593
8287
  toggleLegendItem(name: string): void;
7594
8288
  isItemHidden(name: string): boolean;
8289
+ readonly zoomScale: _angular_core.WritableSignal<number>;
8290
+ readonly panX: _angular_core.WritableSignal<number>;
8291
+ readonly panY: _angular_core.WritableSignal<number>;
8292
+ private isPanning;
8293
+ private lastPanX;
8294
+ private lastPanY;
8295
+ readonly showZoomControls: _angular_core.Signal<boolean>;
8296
+ readonly svgTransform: _angular_core.Signal<string>;
8297
+ zoomIn(): void;
8298
+ zoomOut(): void;
8299
+ resetZoom(): void;
8300
+ onPanStart(event: MouseEvent | TouchEvent): void;
8301
+ onPanMove(event: MouseEvent | TouchEvent): void;
8302
+ onPanEnd(): void;
7595
8303
  readonly seriesLegendList: _angular_core.Signal<{
7596
8304
  name: string;
7597
8305
  color: string;
@@ -8342,6 +9050,6 @@ declare class OlOverlayContainer {
8342
9050
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
8343
9051
  }
8344
9052
 
8345
- export { CHAT_BUBBLE_STATUS, FIELD_ASTERISK, FIELD_CLEAR_RESERVE_END, FIELD_DISABLED, FIELD_HEIGHT, FIELD_HELPER, FIELD_HELPER_GAP, FIELD_ICON_GAP, FIELD_ICON_RESERVE_END, FIELD_ICON_RESERVE_START, FIELD_LABEL, FIELD_LABEL_BESIDE, FIELD_LABEL_GAP, FIELD_MIN_HEIGHT, FIELD_PADDING_END, FIELD_PADDING_START, FIELD_PADDING_X, FIELD_RADIUS, FIELD_STATE, FIELD_TEXT, FILE_KIND_META, FLOAT_LABEL_START, MONTHS_FULL_EN, MONTHS_FULL_VI, MONTHS_SHORT_VI, OL_ICONS, OlAccordion, OlAccordionItem, OlAlert, OlAlertDialog, OlAppNav, OlAspectRatio, OlAutocomplete, OlAvatar, OlAvatarGroup, OlBackdrop, OlBadge, OlBanner, OlBottomNav, OlBottomNavItem, OlBreadcrumb, OlBreadcrumbItem, OlButton, OlButtonGroup, OlCard, OlCarousel, OlCarouselSlide, OlChart, OlChatBubble, OlChatContainer, OlCheckbox, OlCheckboxRadioForm, OlCheckboxRadioGroup, OlClipboard, OlCollapse, OlCommand, OlDateRangePicker, OlDatepicker, OlDatepickerDirective, OlDatepickerFooter, OlDatepickerHeader, OlDatepickerPopup, OlDatepickerStateService, OlDayView, OlDeviceMockup, OlDownloadAppButton, OlDrawer, OlDrawerFooter, OlDrawerHeader, OlDropdown, OlDropdownHeader, OlDropdownItem, OlDropdownSearch, OlDropdownState, OlEmpty, OlFileDropzone, OlFileInput, OlFileItem, OlFileUpload, OlFocusTrapService, OlFooter, OlFrame, OlGallery, OlGalleryItem, OlHelper, OlIcon, OlIconService, OlIconShape, OlIconStack, OlImagePreview, OlInput, OlInputCounter, OlItem, OlJumbotron, OlKbd, OlLabel, OlListGroup, OlListGroupItem, OlLoadingOverlay, OlMenubar, OlModal, OlModalFooter, OlModalHeader, OlMonthView, OlNavDropdown, OlNavbar, OlNavbarItem, OlOtpInput, OlOverlayContainer, OlPagination, OlPopover, OlPopoverContent, OlPositioningService, OlProgress, OlProgressBarService, OlProgressBarTop, OlRadio, OlRange, OlRating, OlResizable, OlRichTextEditor, OlScrollArea, OlScrollspy, OlSegmented, OlSelect, OlSeparator, OlSidebar, OlSidebarGroup, OlSidebarItem, OlSidebarSubmenu, OlSkeleton, OlSpeedDial, OlSpeedDialItem, OlSpinner, OlStepItem, OlStepper, OlTabItem, OlTable, OlTableLoading, OlTableRow, OlTabs, OlTagInput, OlTextarea, OlTimeline, OlTimelineItem, OlTimepicker, OlToast, OlToastContainer, OlToastService, OlToggle, OlToggleGroup, OlToggleInput, OlTooltip, OlTooltipDirective, OlTree, OlTreeNodeItem, OlYearView, PICKER_ICON_RESERVE_START, WEEKDAYS_SHORT_EN, WEEKDAYS_SHORT_VI, boDau, cloneDate, detectFileKind, endOfDay, fieldLabelLayout, fieldSizeClasses, fileExtension, filesFromClipboard, formatDate, formatFileSize, generateMonthMatrix, generateMonthsMatrix, generateYearsMatrix, isBetween, isDateDisabled, isEditableTarget, isSameDay, isSameMonth, isSameYear, isToday, matchesAccept, multiValuePadY, parseDate, pasteShortcutLabel, provideOlIcons, startOfDay, stripDiacritics, toUploadFile, validateFiles };
8346
- export type { AccordionVariant, AlertColor, AlertDialogTone, AlertLayout, AlertRounded, AlertType, AlertVariant, AppDevice, AppNavConfig, AppNavGroup, AppNavItem, AppNavUser, AppTheme, AutocompleteOption, AutocompleteSize, AutocompleteState, AvatarShape, AvatarSize, AvatarStatus, BadgeColor, BadgeShape, BadgeSize, BadgeTheme, BadgeType, BannerPosition, BannerVariant, BoxplotDataPoint, BreadcrumbItemStatus, BreadcrumbSeparator, BreadcrumbVariant, ButtonColor, ButtonGroupColor, ButtonGroupOrientation, ButtonGroupSize, ButtonSize, CardPadding, CardRadius, CardShadow, CardVariant, ChartDataPoint, ChartSeries, ChartType, ChatBubbleStatus, ChatSender, CheckboxSize, ChoiceControl, ChoiceControlPosition, ChoiceGroupLayout, ChoiceLayout, ChoiceShape, CommandGroup, CommandItem, DateCustomClass, DateRange, DatepickerPreset, DatepickerSelectionMode, DatepickerSize, DatepickerViewMode, DayCell, DeviceType, DrawerFooterLayout, DrawerPlacement, DrawerSize, DropdownAutoClose, DropdownPlacement, DropdownStateType, DropdownTrigger, EmptySize, FieldSize, FieldState, FileInputSize, FileItemVariant, FileKind, FileKindMeta, FileRejectReason, FileRejection, FileUploadMode, FileValidationResult, FileValidationRules, FloatingVariant, HeatmapData, HelperFeature, HelperRule, HelperSize, HelperState, IconColor, IconShapeColor, IconShapeSize, IconShapeType, IconSize, IconVariant, InputCounterSize, InputSize, InputState, JumbotronVariant, LabelPosition, ListGroupType, ModalFooterLayout, ModalPlacement, ModalSize, MonthCell, NavbarCollapseAt, NavbarDensity, OlAvatarStatusPosition, OlBottomNavPosition, OlButtonType, OlCheckboxRadioFormAlign, OlCheckboxRadioGroupRole, OlDateRangePickerVariant, OlFrameRounded, OlFrameSpacing, OlFrameVariant, OlGalleryGap, OlGalleryRatio, OlHelperType, OlIconStackSize, OlItemAlign, OlItemSize, OlMenubarItem, OlMenubarMenu, OlModalBackdrop, OlModalRole, OlPreviewImage, OlResizableDirection, OlScrollspyItem, OlScrollspyOrientation, OlSkeletonAnimation, OlSkeletonAspectRatio, OlSkeletonRounded, OlSkeletonType, OlSpeedDialTooltipPosition, OlTimepickerAddonType, OlToggleInputAlign, OlTreeNode, OlTreeNodeSelectionMode, OlTreeNodeToggleIcon, OlTreeSelectionMode, OlTreeToggleIcon, OlUploadFile, OtpInputSize, OverlayLayer, PaginationType, PaginationVariant, PopoverPlacement, PopoverTrigger, PositionedCoordinates, PositioningOptions, ProgressColor, ProgressLabelPosition, ProgressSize, RadarIndicator, RadioSize, RatingType, ScatterDataPoint, ScatterSeries, ScrollAreaAxis, ScrollAreaScrollbar, SegmentedColor, SegmentedOption, SegmentedSize, SelectOption, SelectSize, SelectState, SeparatorOrientation, SpeedDialAction, SpeedDialColor, SpeedDialDirection, SpeedDialTrigger, SpeedDialType, StepState, StepperBreakpoint, StepperOrientation, StepperVariant, TabsSize, TabsVariant, TagInputSize, TextareaState, TimeObject, TimepickerFormat, TimepickerSize, TimepickerState, Toast, ToastConfig, ToastPosition, ToggleColor, TogglePosition, ToggleSize, UploadStatus, YearCell };
9053
+ export { APP_NAV_DEFAULT_USER_ACTIONS, CHAT_BUBBLE_STATUS, FIELD_ASTERISK, FIELD_CLEAR_RESERVE_END, FIELD_DISABLED, FIELD_HEIGHT, FIELD_HELPER, FIELD_HELPER_GAP, FIELD_ICON_GAP, FIELD_ICON_RESERVE_END, FIELD_ICON_RESERVE_START, FIELD_LABEL, FIELD_LABEL_BESIDE, FIELD_LABEL_GAP, FIELD_MIN_HEIGHT, FIELD_PADDING_END, FIELD_PADDING_START, FIELD_PADDING_X, FIELD_RADIUS, FIELD_STATE, FIELD_TEXT, FILE_KIND_META, FLOAT_LABEL_START, MONTHS_FULL_EN, MONTHS_FULL_VI, MONTHS_SHORT_VI, OL_APP_HEADER_TEMPLATES, OL_APP_NAV_TEMPLATES, OL_ICONS, OL_LOGO_FULL_COLOR, OL_LOGO_FULL_WHITE, OL_LOGO_MARK_COLOR, OL_LOGO_MARK_WHITE, OL_PATTERN_TYPES, OlAccordion, OlAccordionItem, OlAlert, OlAlertDialog, OlAppHeader, OlAppHeaderActionsDef, OlAppHeaderContentDef, OlAppHeaderTitleDef, OlAppNav, OlAppNavFooterDef, OlAppNavHeaderDef, OlAppNavItemDef, OlAppNavLogoDef, OlAppNavUserDef, OlAppNavUserMenuDef, OlAspectRatio, OlAutocomplete, OlAvatar, OlAvatarGroup, OlBackdrop, OlBadge, OlBanner, OlBottomNav, OlBottomNavItem, OlBreadcrumb, OlBreadcrumbItem, OlButton, OlButtonGroup, OlCard, OlCarousel, OlCarouselSlide, OlChart, OlChatBubble, OlChatContainer, OlCheckbox, OlCheckboxRadioForm, OlCheckboxRadioGroup, OlClipboard, OlCollapse, OlCommand, OlDateRangePicker, OlDatepicker, OlDatepickerDirective, OlDatepickerFooter, OlDatepickerHeader, OlDatepickerPopup, OlDatepickerStateService, OlDayView, OlDeviceMockup, OlDownloadAppButton, OlDrawer, OlDrawerFooter, OlDrawerHeader, OlDropdown, OlDropdownHeader, OlDropdownItem, OlDropdownSearch, OlDropdownState, OlEmpty, OlFileDropzone, OlFileInput, OlFileItem, OlFileUpload, OlFocusTrapService, OlFooter, OlFrame, OlGallery, OlGalleryItem, OlHelper, OlIcon, OlIconService, OlIconShape, OlIconStack, OlImagePreview, OlInput, OlInputCounter, OlItem, OlJumbotron, OlKbd, OlLabel, OlListGroup, OlListGroupItem, OlLoadingOverlay, OlLogo, OlMenubar, OlModal, OlModalFooter, OlModalHeader, OlMonthView, OlNavDropdown, OlNavbar, OlNavbarItem, OlOtpInput, OlOverlayContainer, OlPagination, OlPattern, OlPopover, OlPopoverContent, OlPositioningService, OlProgress, OlProgressBarService, OlProgressBarTop, OlRadio, OlRange, OlRating, OlResizable, OlRichTextEditor, OlScrollArea, OlScrollspy, OlSegmented, OlSelect, OlSeparator, OlSidebar, OlSidebarGroup, OlSidebarItem, OlSidebarSubmenu, OlSkeleton, OlSpeedDial, OlSpeedDialItem, OlSpinner, OlStepItem, OlStepper, OlTabItem, OlTable, OlTableLoading, OlTableRow, OlTabs, OlTagInput, OlTextarea, OlTimeline, OlTimelineItem, OlTimepicker, OlToast, OlToastContainer, OlToastService, OlToggle, OlToggleGroup, OlToggleInput, OlTooltip, OlTooltipDirective, OlTree, OlTreeNodeItem, OlYearView, PICKER_ICON_RESERVE_START, WEEKDAYS_SHORT_EN, WEEKDAYS_SHORT_VI, boDau, cloneDate, detectFileKind, endOfDay, fieldLabelLayout, fieldSizeClasses, fileExtension, filesFromClipboard, formatDate, formatFileSize, generateMonthMatrix, generateMonthsMatrix, generateYearsMatrix, isBetween, isDateDisabled, isEditableTarget, isSameDay, isSameMonth, isSameYear, isToday, matchesAccept, multiValuePadY, parseDate, pasteShortcutLabel, provideOlIcons, startOfDay, stripDiacritics, toUploadFile, validateFiles };
9054
+ export type { AccordionVariant, AlertColor, AlertDialogTone, AlertLayout, AlertRounded, AlertType, AlertVariant, AppDevice, AppHeaderCrumb, AppHeaderSearchCollapseAt, AppHeaderSize, AppHeaderSlotContext, AppHeaderVariant, AppNavConfig, AppNavGroup, AppNavItem, AppNavItemContext, AppNavItemVariant, AppNavLayout, AppNavLogoContext, AppNavSlotContext, AppNavUser, AppNavUserAction, AppNavUserContext, AppNavUserMenuContext, AppTheme, AutocompleteOption, AutocompleteSize, AutocompleteState, AvatarShape, AvatarSize, AvatarStatus, BadgeColor, BadgeShape, BadgeSize, BadgeTheme, BadgeType, BannerPosition, BannerVariant, BoxplotDataPoint, BreadcrumbItemStatus, BreadcrumbSeparator, BreadcrumbVariant, ButtonColor, ButtonGroupColor, ButtonGroupOrientation, ButtonGroupSize, ButtonSize, CardPadding, CardRadius, CardShadow, CardVariant, ChartDataPoint, ChartSeries, ChartType, ChatBubbleStatus, ChatSender, CheckboxSize, ChoiceControl, ChoiceControlPosition, ChoiceGroupLayout, ChoiceLayout, ChoiceShape, CommandGroup, CommandItem, DateCustomClass, DateRange, DatepickerPreset, DatepickerSelectionMode, DatepickerSize, DatepickerViewMode, DayCell, DeviceType, DrawerFooterLayout, DrawerPlacement, DrawerSize, DropdownAutoClose, DropdownPlacement, DropdownStateType, DropdownTrigger, EmptySize, FieldSize, FieldState, FileInputSize, FileItemVariant, FileKind, FileKindMeta, FileRejectReason, FileRejection, FileUploadMode, FileValidationResult, FileValidationRules, FloatingVariant, HeatmapData, HelperFeature, HelperRule, HelperSize, HelperState, IconColor, IconShapeColor, IconShapeSize, IconShapeType, IconSize, IconVariant, InputCounterSize, InputSize, InputState, JumbotronVariant, LabelPosition, ListGroupType, LogoTone, LogoVariant, ModalFooterLayout, ModalPlacement, ModalSize, MonthCell, NavbarCollapseAt, NavbarDensity, OlAvatarStatusPosition, OlBottomNavPosition, OlButtonType, OlCheckboxRadioFormAlign, OlCheckboxRadioGroupRole, OlDateRangePickerVariant, OlFrameRounded, OlFrameSpacing, OlFrameVariant, OlGalleryGap, OlGalleryRatio, OlHelperType, OlIconStackSize, OlItemAlign, OlItemSize, OlLogoArt, OlMenubarItem, OlMenubarMenu, OlModalBackdrop, OlModalRole, OlPreviewImage, OlResizableDirection, OlScrollspyItem, OlScrollspyOrientation, OlSkeletonAnimation, OlSkeletonAspectRatio, OlSkeletonRounded, OlSkeletonType, OlSpeedDialTooltipPosition, OlTimepickerAddonType, OlToggleInputAlign, OlTreeNode, OlTreeNodeSelectionMode, OlTreeNodeToggleIcon, OlTreeSelectionMode, OlTreeToggleIcon, OlUploadFile, OtpInputSize, OverlayLayer, PaginationType, PaginationVariant, PatternFit, PatternPosition, PatternType, PopoverPlacement, PopoverTrigger, PositionedCoordinates, PositioningOptions, ProgressColor, ProgressLabelPosition, ProgressSize, RadarIndicator, RadioSize, RatingType, ScatterDataPoint, ScatterSeries, ScrollAreaAxis, ScrollAreaScrollbar, SegmentedColor, SegmentedOption, SegmentedSize, SegmentedVariant, SelectOption, SelectSize, SelectState, SeparatorOrientation, SpeedDialAction, SpeedDialColor, SpeedDialDirection, SpeedDialTrigger, SpeedDialType, StepState, StepperBreakpoint, StepperOrientation, StepperVariant, TabsSize, TabsVariant, TagInputSize, TextareaState, TimeObject, TimepickerFormat, TimepickerSize, TimepickerState, Toast, ToastConfig, ToastPosition, ToggleColor, TogglePosition, ToggleSize, UploadStatus, YearCell };
8347
9055
  //# sourceMappingURL=edmicro-olkit.d.ts.map