@edmicro/olkit 1.1.6 → 1.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/edmicro-olkit.mjs +1654 -576
- package/fesm2022/edmicro-olkit.mjs.map +1 -1
- package/olkit.css +1 -1
- package/package.json +1 -1
- package/types/edmicro-olkit.d.ts +595 -191
- package/types/edmicro-olkit.d.ts.map +1 -1
- package/version.txt +2 -2
package/types/edmicro-olkit.d.ts
CHANGED
|
@@ -131,6 +131,17 @@ declare class OlAlert {
|
|
|
131
131
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlAlert, "ol-alert", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "headingLevel": { "alias": "headingLevel"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; }, { "onDismiss": "onDismiss"; }, never, ["[badge]", "*", "[alertActions]"], true, never>;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Bỏ dấu tiếng Việt để gõ không dấu vẫn tìm ra.
|
|
136
|
+
*
|
|
137
|
+
* Phải xử lý `đ`/`Đ` riêng: chúng KHÔNG phải `d` cộng dấu phụ nên `NFD` không
|
|
138
|
+
* tách ra được, `đăng nhập` sẽ không khớp `dang nhap` nếu bỏ bước này.
|
|
139
|
+
*
|
|
140
|
+
* Dùng chung cho mọi ô có tìm kiếm (`ol-command`, `ol-select`); `ol-command`
|
|
141
|
+
* export lại để giữ API công khai từ 1.1.1.
|
|
142
|
+
*/
|
|
143
|
+
declare function stripDiacritics(text: string): string;
|
|
144
|
+
|
|
134
145
|
/** Một lệnh trong bảng. `keywords` để tìm được bằng từ khác với chữ hiển thị. */
|
|
135
146
|
interface CommandItem {
|
|
136
147
|
id: string;
|
|
@@ -145,13 +156,7 @@ interface CommandGroup {
|
|
|
145
156
|
label: string;
|
|
146
157
|
items: CommandItem[];
|
|
147
158
|
}
|
|
148
|
-
|
|
149
|
-
* Bỏ dấu tiếng Việt để gõ không dấu vẫn tìm ra.
|
|
150
|
-
*
|
|
151
|
-
* Phải xử lý `đ`/`Đ` riêng: chúng KHÔNG phải `d` cộng dấu phụ nên `NFD` không
|
|
152
|
-
* tách ra được, `đăng nhập` sẽ không khớp `dang nhap` nếu bỏ bước này.
|
|
153
|
-
*/
|
|
154
|
-
declare function stripDiacritics(text: string): string;
|
|
159
|
+
|
|
155
160
|
/**
|
|
156
161
|
* @deprecated Dùng `stripDiacritics`. Giữ lại vì hàm này ĐÃ publish trong
|
|
157
162
|
* `@edmicro/olkit@1.1.1` (kiểm bằng `npm pack` rồi đọc `types/*.d.ts` — có
|
|
@@ -1052,6 +1057,178 @@ interface DatepickerPreset {
|
|
|
1052
1057
|
range: () => [Date, Date];
|
|
1053
1058
|
}
|
|
1054
1059
|
|
|
1060
|
+
/**
|
|
1061
|
+
* Bảng chuẩn kích thước và trạng thái cho MỌI ô nhập của thư viện.
|
|
1062
|
+
*
|
|
1063
|
+
* ## Vì sao cần
|
|
1064
|
+
*
|
|
1065
|
+
* Chín component họ form từng tự khai kích thước riêng, và chúng trôi khỏi
|
|
1066
|
+
* nhau. Đo ngày 2026-09-23 trên chín component:
|
|
1067
|
+
*
|
|
1068
|
+
* thiếu cỡ `xl` 3 component (select · autocomplete · input-counter)
|
|
1069
|
+
* nền sai 3 component (autocomplete · timepicker · datepicker)
|
|
1070
|
+
* viền sai 5 component
|
|
1071
|
+
* đệm ngang lệch 2px ở cả ba cỡ đầu (datepicker so với input)
|
|
1072
|
+
* cỡ chữ `sm` lệch 2px (14px vs 12px)
|
|
1073
|
+
*
|
|
1074
|
+
* Nền và viền lệch **chỉ lộ ở chế độ tối**: sáng thì `--bg-secondary` và
|
|
1075
|
+
* `--bg-secondary-medium` cùng ra `#f9fafb`, tối thì `gray-950` vs `gray-800`.
|
|
1076
|
+
* Nên lỗi sống rất lâu — người dựng nhìn chế độ sáng, thấy giống hệt nhau.
|
|
1077
|
+
*
|
|
1078
|
+
* Đọc từ đây thì thêm ô nhập mới cũng tự khớp, và đổi thang chỉ sửa một chỗ.
|
|
1079
|
+
*
|
|
1080
|
+
* ## Không gộp chiều cao với đệm ngang
|
|
1081
|
+
*
|
|
1082
|
+
* Hai thứ tách riêng vì component có icon cần `ps-*` thay `px-*`. Gộp lại thì
|
|
1083
|
+
* mỗi component phải cắt chuỗi ra để bỏ phần đệm — dễ sai hơn là ghép vào.
|
|
1084
|
+
*/
|
|
1085
|
+
/** Bốn cỡ của họ form. Trùng `InputSize`, `SelectSize`, `DatepickerSize`. */
|
|
1086
|
+
type FieldSize = 'sm' | 'base' | 'lg' | 'xl';
|
|
1087
|
+
/** Ba trạng thái hiển thị. */
|
|
1088
|
+
type FieldState = 'default' | 'error' | 'success';
|
|
1089
|
+
/**
|
|
1090
|
+
* Chiều cao theo cỡ — **cố định bằng `h-*`**, không suy từ `py-*`.
|
|
1091
|
+
*
|
|
1092
|
+
* Suy từ đệm dọc thì chiều cao phụ thuộc `line-height` của cỡ chữ và không
|
|
1093
|
+
* bao giờ khớp thang chung. Đo trước khi chuẩn hoá: datepicker ra 34/42/54
|
|
1094
|
+
* trong khi input ra 36/40/48 — đặt cạnh nhau là so le ngay, nặng nhất ở `lg`.
|
|
1095
|
+
*
|
|
1096
|
+
* `xl` (52px) là cỡ mới nhất; ba component còn thiếu nó sẽ so le 12px khi đặt
|
|
1097
|
+
* cạnh một `ol-input size="xl"`.
|
|
1098
|
+
*/
|
|
1099
|
+
declare const FIELD_HEIGHT: Record<FieldSize, string>;
|
|
1100
|
+
/**
|
|
1101
|
+
* Chiều cao TỐI THIỂU — cho component cao theo nội dung.
|
|
1102
|
+
*
|
|
1103
|
+
* `ol-select` nhiều lựa chọn, `ol-tag-input` nhiều thẻ: chúng phải giãn ra khi
|
|
1104
|
+
* nội dung xuống dòng, nên `h-*` cố định sẽ cắt mất. Giá trị bằng đúng
|
|
1105
|
+
* `FIELD_HEIGHT` để một dòng vẫn cao bằng các ô khác.
|
|
1106
|
+
*/
|
|
1107
|
+
declare const FIELD_MIN_HEIGHT: Record<FieldSize, string>;
|
|
1108
|
+
/**
|
|
1109
|
+
* Đệm ngang theo Figma `ol-input`: sm 10px · base 12px · lg 14px · xl 16px.
|
|
1110
|
+
*
|
|
1111
|
+
* KHÔNG dùng `[class.px-2.5]` trên template: Angular cắt phần sau dấu chấm
|
|
1112
|
+
* nên nó render ra `px-2`, lệch 2px so với thiết kế. Phải gom vào một chuỗi.
|
|
1113
|
+
*/
|
|
1114
|
+
declare const FIELD_PADDING_X: Record<FieldSize, string>;
|
|
1115
|
+
/**
|
|
1116
|
+
* `FIELD_PADDING_X` tách hai đầu — cho ô có icon: phần tử ĐẦU TIÊN trong khung
|
|
1117
|
+
* (icon hoặc ô gõ) nhận lề đầu, phần tử CUỐI nhận lề cuối, ở giữa chỉ còn
|
|
1118
|
+
* `FIELD_ICON_GAP`.
|
|
1119
|
+
*/
|
|
1120
|
+
declare const FIELD_PADDING_START: Record<FieldSize, string>;
|
|
1121
|
+
declare const FIELD_PADDING_END: Record<FieldSize, string>;
|
|
1122
|
+
/**
|
|
1123
|
+
* Icon ↔ chữ trong khung: 8px, mọi cỡ — Figma `ol-input` (1149:46826) và
|
|
1124
|
+
* `ol-timepicker` (1149:52243) đều `itemSpacing: 8`.
|
|
1125
|
+
*
|
|
1126
|
+
* Chỉ một nguồn tạo khoảng này. Bản cũ của `ol-input` có cả `gap-2` ở khung
|
|
1127
|
+
* lẫn `ps-2.5`/`pe-2.5` ở ô gõ → icon cách chữ 18px (đo 2026-09-29).
|
|
1128
|
+
*/
|
|
1129
|
+
declare const FIELD_ICON_GAP = "gap-2";
|
|
1130
|
+
/**
|
|
1131
|
+
* Đệm dọc của khung CHỌN NHIỀU (chip cao 24px). Nhãn nổi Bordered nằm vắt
|
|
1132
|
+
* qua viền trên, nửa dưới lấn vào khung ~10px — đệm 4px thường lệ để chip
|
|
1133
|
+
* nằm dưới chữ nhãn (đo 2026-09-29: đè 3px, 32/96 ô). Chừa 10px thì một
|
|
1134
|
+
* dòng chip vẫn cao đúng 40px: 1 + 10 + 24 + 4 + 1.
|
|
1135
|
+
*/
|
|
1136
|
+
declare function multiValuePadY(floatingOutlined: boolean): string;
|
|
1137
|
+
/**
|
|
1138
|
+
* Chỗ dành cho icon 16px nằm `absolute` ở đầu/cuối khung: lề cỡ + 16px +
|
|
1139
|
+
* `FIELD_ICON_GAP` 8px. Dùng khi icon ra khỏi luồng (select, autocomplete
|
|
1140
|
+
* chọn nhiều) nên khung phải tự chừa chỗ.
|
|
1141
|
+
*/
|
|
1142
|
+
declare const FIELD_ICON_RESERVE_START: Record<FieldSize, string>;
|
|
1143
|
+
declare const FIELD_ICON_RESERVE_END: Record<FieldSize, string>;
|
|
1144
|
+
/** Chỗ cho nút xoá 14px (`close` cỡ xs) nằm `absolute` cuối ô: lề cỡ + 14 + 8. */
|
|
1145
|
+
declare const FIELD_CLEAR_RESERVE_END: Record<FieldSize, string>;
|
|
1146
|
+
/**
|
|
1147
|
+
* Như `FIELD_ICON_RESERVE_START` nhưng cho icon lịch của datepicker, vốn to
|
|
1148
|
+
* theo cỡ ô (14 / 16 / 20 / 20px): lề cỡ + icon + 8px = 32 / 36 / 42 / 44.
|
|
1149
|
+
*/
|
|
1150
|
+
declare const PICKER_ICON_RESERVE_START: Record<FieldSize, string>;
|
|
1151
|
+
/**
|
|
1152
|
+
* Cỡ chữ theo cỡ ô.
|
|
1153
|
+
*
|
|
1154
|
+
* `sm` là **14px** (`text-sm`), không phải 12px. Datepicker từng dùng
|
|
1155
|
+
* `text-xs` nên chữ trong ô nhỏ hơn hẳn các ô cùng hàng.
|
|
1156
|
+
*/
|
|
1157
|
+
declare const FIELD_TEXT: Record<FieldSize, string>;
|
|
1158
|
+
/**
|
|
1159
|
+
* Nền · viền · vòng focus theo trạng thái.
|
|
1160
|
+
*
|
|
1161
|
+
* Dùng `-medium` cho cả nền lẫn viền ở trạng thái thường. Hai tên gần giống
|
|
1162
|
+
* nhau (`bg-neutral-secondary` vs `bg-neutral-secondary-medium`) nhưng **khác
|
|
1163
|
+
* hẳn ở chế độ tối**, nên nhầm một chữ là ô đó lệch màu mà chế độ sáng không
|
|
1164
|
+
* lộ ra.
|
|
1165
|
+
*
|
|
1166
|
+
* Dùng `focus-within:` chứ không `focus:`: viền nằm trên thẻ bọc, còn focus
|
|
1167
|
+
* rơi vào `<input>` bên trong. `focus:` trên thẻ bọc không bao giờ khớp.
|
|
1168
|
+
*/
|
|
1169
|
+
declare const FIELD_STATE: Record<FieldState, string>;
|
|
1170
|
+
/** Nền và con trỏ khi ô bị khoá. Áp đè lên `FIELD_STATE`. */
|
|
1171
|
+
declare const FIELD_DISABLED = "bg-disabled opacity-60 cursor-not-allowed";
|
|
1172
|
+
/** Bo góc — 12px cho mọi cỡ, theo Figma `bieu-mau.md`. */
|
|
1173
|
+
declare const FIELD_RADIUS = "rounded-md";
|
|
1174
|
+
/**
|
|
1175
|
+
* Lớp của nhãn phía trên ô.
|
|
1176
|
+
*
|
|
1177
|
+
* `text-heading` chứ không `text-body`: nhãn là thứ người dùng đọc đầu tiên để
|
|
1178
|
+
* biết ô này hỏi gì, nó phải đậm hơn chữ phụ.
|
|
1179
|
+
*/
|
|
1180
|
+
declare const FIELD_LABEL = "inline-flex items-center gap-1 text-sm font-medium text-heading";
|
|
1181
|
+
/** Khoảng cách nhãn → ô. */
|
|
1182
|
+
declare const FIELD_LABEL_GAP = "mb-1.5";
|
|
1183
|
+
/**
|
|
1184
|
+
* Vị trí nhãn so với ô: `top` (mặc định, nhãn trên ô) hoặc `left` (nhãn cùng
|
|
1185
|
+
* hàng, bên trái — form dạng bảng: cài đặt, hồ sơ). Nhãn nổi thắng cả hai.
|
|
1186
|
+
*/
|
|
1187
|
+
type LabelPosition = 'top' | 'left';
|
|
1188
|
+
/**
|
|
1189
|
+
* Khung ngoài của host khi nhãn `left`: lưới 2 cột. Cột 1 = nhãn, rộng theo
|
|
1190
|
+
* `--ol-label-w` (input `labelWidth`, mặc định 8rem). Cột 2 = mọi thứ còn lại
|
|
1191
|
+
* — khung nhập, dòng gợi ý/lỗi — nên chữ lỗi thẳng mép ô, không chui xuống
|
|
1192
|
+
* dưới nhãn. `[&>ol-field-label]` cụ thể hơn `[&>*]` nên nhãn thắng cột.
|
|
1193
|
+
*/
|
|
1194
|
+
declare const FIELD_LABEL_BESIDE = "grid grid-cols-[var(--ol-label-w,8rem)_minmax(0,1fr)] items-start gap-x-3 [&>*]:col-start-2 [&>ol-field-label]:col-start-1 [&>ol-field-label]:row-start-1";
|
|
1195
|
+
/** Lớp khung ngoài theo vị trí nhãn — rỗng khi nhãn trên hoặc nhãn nổi. */
|
|
1196
|
+
declare function fieldLabelLayout(position: LabelPosition, floating: boolean): string;
|
|
1197
|
+
/** Dấu sao bắt buộc. */
|
|
1198
|
+
declare const FIELD_ASTERISK = "text-fg-danger font-bold";
|
|
1199
|
+
/**
|
|
1200
|
+
* Chữ trợ giúp dưới ô, đổi màu theo trạng thái.
|
|
1201
|
+
*
|
|
1202
|
+
* Trạng thái lỗi mà chữ vẫn màu phụ thì người dùng không biết dòng đó là lời
|
|
1203
|
+
* giải thích lỗi hay chú thích thường.
|
|
1204
|
+
*/
|
|
1205
|
+
declare const FIELD_HELPER: Record<FieldState, string>;
|
|
1206
|
+
/** Khoảng cách ô → chữ trợ giúp. */
|
|
1207
|
+
declare const FIELD_HELPER_GAP = "mt-1.5";
|
|
1208
|
+
/**
|
|
1209
|
+
* Gộp chiều cao · đệm ngang · cỡ chữ · bo góc cho một cỡ.
|
|
1210
|
+
*
|
|
1211
|
+
* Tiện cho component không có icon. Component có icon tự ghép từ các bảng
|
|
1212
|
+
* riêng để thay `px-*` bằng `ps-*`.
|
|
1213
|
+
*/
|
|
1214
|
+
declare function fieldSizeClasses(size: FieldSize): string;
|
|
1215
|
+
/**
|
|
1216
|
+
* Ba kiểu nhãn nổi — Figma `ol-floating-label` (#1149:50454) trục `Type`:
|
|
1217
|
+
*
|
|
1218
|
+
* - `outlined` — **Bordered**: viền đủ, nhãn nổi nằm ĐÈ lên viền trên.
|
|
1219
|
+
* - `filled` — **With background**: nền xám + gạch chân 2px, nhãn nổi thành
|
|
1220
|
+
* một hàng 20px ở trên, nằm trong nền.
|
|
1221
|
+
* - `standard` — **Default**: chỉ gạch chân 2px, nhãn nổi thành hàng 20px ở trên.
|
|
1222
|
+
*/
|
|
1223
|
+
type FloatingVariant = 'outlined' | 'filled' | 'standard';
|
|
1224
|
+
/**
|
|
1225
|
+
* Vị trí ngang của nhãn KHI NỔI (px) = đệm ngang của ô (`FIELD_PADDING_X`) —
|
|
1226
|
+
* Figma đặt nhãn nổi thẳng mép chữ, kể cả khi có icon đầu (nhãn nổi lên trên
|
|
1227
|
+
* cột icon). Phải là SỐ vì nhãn đặt bằng `style.left`, cùng hệ với vị trí nằm
|
|
1228
|
+
* yên (đo lúc chạy).
|
|
1229
|
+
*/
|
|
1230
|
+
declare const FLOAT_LABEL_START: Record<FieldSize, number>;
|
|
1231
|
+
|
|
1055
1232
|
declare class OlDatepickerStateService {
|
|
1056
1233
|
readonly viewMode: _angular_core.WritableSignal<DatepickerViewMode>;
|
|
1057
1234
|
readonly viewDate: _angular_core.WritableSignal<Date>;
|
|
@@ -1099,7 +1276,11 @@ declare class OlDatepickerStateService {
|
|
|
1099
1276
|
}
|
|
1100
1277
|
|
|
1101
1278
|
declare class OlDatepicker implements ControlValueAccessor {
|
|
1102
|
-
|
|
1279
|
+
/**
|
|
1280
|
+
* Trạng thái lịch (ngày đang xem, khoảng đã chọn…). Tên cũ `state` nhường
|
|
1281
|
+
* cho input `state` (lỗi / thành công) — cùng tên với mọi ô nhập khác.
|
|
1282
|
+
*/
|
|
1283
|
+
readonly pickerState: OlDatepickerStateService;
|
|
1103
1284
|
private readonly hostEl;
|
|
1104
1285
|
/** Id do nơi gọi truyền; trống thì dùng id tự sinh bên dưới. */
|
|
1105
1286
|
readonly id: _angular_core.InputSignal<string>;
|
|
@@ -1113,6 +1294,33 @@ declare class OlDatepicker implements ControlValueAccessor {
|
|
|
1113
1294
|
readonly value: _angular_core.ModelSignal<Date | null>;
|
|
1114
1295
|
readonly placeholder: _angular_core.InputSignal<string>;
|
|
1115
1296
|
readonly label: _angular_core.InputSignal<string>;
|
|
1297
|
+
/**
|
|
1298
|
+
* Trạng thái hiển thị — lỗi / thành công, cùng thang `FIELD_STATE` với mọi ô
|
|
1299
|
+
* nhập khác. Trước đây datepicker không có (tên `state` bị service chiếm).
|
|
1300
|
+
*/
|
|
1301
|
+
readonly state: _angular_core.InputSignal<FieldState>;
|
|
1302
|
+
/**
|
|
1303
|
+
* Nhãn nổi: `label` nằm TRONG khung (sau icon lịch), nổi lên khi focus, mở
|
|
1304
|
+
* lịch hoặc đã có ngày (kể cả chữ đang gõ dở).
|
|
1305
|
+
*/
|
|
1306
|
+
readonly floatingLabel: _angular_core.InputSignal<boolean>;
|
|
1307
|
+
/**
|
|
1308
|
+
* Nhãn `top` (trên ô, mặc định) hay `left` (cùng hàng, bên trái). Nhãn nổi
|
|
1309
|
+
* (`floatingLabel`) thắng — bật nó thì bỏ qua input này.
|
|
1310
|
+
*/
|
|
1311
|
+
readonly labelPosition: _angular_core.InputSignal<LabelPosition>;
|
|
1312
|
+
/**
|
|
1313
|
+
* Độ rộng cột nhãn khi `labelPosition="left"` — độ dài CSS bất kỳ: `140px`,
|
|
1314
|
+
* `10rem`, `30%`. Bỏ trống = 8rem. Các ô trong cùng form đặt cùng một số thì
|
|
1315
|
+
* mép ô thẳng hàng.
|
|
1316
|
+
*/
|
|
1317
|
+
readonly labelWidth: _angular_core.InputSignal<string>;
|
|
1318
|
+
protected readonly labelLayout: _angular_core.Signal<string>;
|
|
1319
|
+
protected readonly labelBeside: _angular_core.Signal<boolean>;
|
|
1320
|
+
/** Khung nhãn + ô: cột dọc (nhãn trên) hoặc lưới 2 cột (nhãn trái). */
|
|
1321
|
+
protected readonly stackClasses: _angular_core.Signal<string>;
|
|
1322
|
+
/** Kiểu nhãn nổi — Figma Bordered / With background / Default. */
|
|
1323
|
+
readonly floatingVariant: _angular_core.InputSignal<FloatingVariant>;
|
|
1116
1324
|
readonly helperText: _angular_core.InputSignal<string>;
|
|
1117
1325
|
readonly required: _angular_core.InputSignal<boolean>;
|
|
1118
1326
|
/**
|
|
@@ -1203,6 +1411,16 @@ declare class OlDatepicker implements ControlValueAccessor {
|
|
|
1203
1411
|
* ngang và `ps-*` cho chỗ icon lịch.
|
|
1204
1412
|
*/
|
|
1205
1413
|
readonly inputSizeClasses: _angular_core.Signal<string>;
|
|
1414
|
+
private readonly sizeClasses;
|
|
1415
|
+
protected readonly showClear: _angular_core.Signal<boolean>;
|
|
1416
|
+
/**
|
|
1417
|
+
* `ms-px`/`me-px`: div bọc icon tính từ mép NGOÀI viền 1px của ô, còn đệm
|
|
1418
|
+
* ô tính từ mép trong. Nhãn nổi `filled`/`standard` không có viền hai bên
|
|
1419
|
+
* (chỉ gạch dưới) thì không bù.
|
|
1420
|
+
*/
|
|
1421
|
+
private readonly sideBorder;
|
|
1422
|
+
protected readonly leadPadClass: _angular_core.Signal<string>;
|
|
1423
|
+
protected readonly trailPadClass: _angular_core.Signal<string>;
|
|
1206
1424
|
/**
|
|
1207
1425
|
* Cỡ icon lịch theo `size` của ô nhập.
|
|
1208
1426
|
*
|
|
@@ -1257,17 +1475,57 @@ declare class OlDatepicker implements ControlValueAccessor {
|
|
|
1257
1475
|
*/
|
|
1258
1476
|
ngOnDestroy(): void;
|
|
1259
1477
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlDatepicker, never>;
|
|
1260
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlDatepicker, "ol-datepicker", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "daysDisabled": { "alias": "daysDisabled"; "required": false; "isSignal": true; }; "datesDisabled": { "alias": "datesDisabled"; "required": false; "isSignal": true; }; "datesEnabled": { "alias": "datesEnabled"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "inline": { "alias": "inline"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "dateChange": "dateChange"; "timestampChange": "timestampChange"; "isoChange": "isoChange"; "formattedChange": "formattedChange"; }, never, never, true, never>;
|
|
1478
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlDatepicker, "ol-datepicker", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "labelWidth": { "alias": "labelWidth"; "required": false; "isSignal": true; }; "floatingVariant": { "alias": "floatingVariant"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "daysDisabled": { "alias": "daysDisabled"; "required": false; "isSignal": true; }; "datesDisabled": { "alias": "datesDisabled"; "required": false; "isSignal": true; }; "datesEnabled": { "alias": "datesEnabled"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "inline": { "alias": "inline"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "dateChange": "dateChange"; "timestampChange": "timestampChange"; "isoChange": "isoChange"; "formattedChange": "formattedChange"; }, never, never, true, never>;
|
|
1261
1479
|
}
|
|
1262
1480
|
|
|
1263
1481
|
type OlDateRangePickerVariant = 'dual-inputs' | 'joined';
|
|
1264
1482
|
declare class OlDateRangePicker implements ControlValueAccessor {
|
|
1265
|
-
|
|
1483
|
+
/**
|
|
1484
|
+
* Trạng thái lịch (ngày đang xem, khoảng đã chọn…). Tên cũ `state` nhường
|
|
1485
|
+
* cho input `state` (lỗi / thành công) — cùng tên với mọi ô nhập khác.
|
|
1486
|
+
*/
|
|
1487
|
+
readonly pickerState: OlDatepickerStateService;
|
|
1266
1488
|
private readonly hostEl;
|
|
1267
1489
|
readonly value: _angular_core.ModelSignal<DateRange | null>;
|
|
1268
1490
|
readonly startPlaceholder: _angular_core.InputSignal<string>;
|
|
1269
1491
|
readonly endPlaceholder: _angular_core.InputSignal<string>;
|
|
1270
1492
|
readonly label: _angular_core.InputSignal<string>;
|
|
1493
|
+
/** Lỗi / thành công — cùng thang `FIELD_STATE` với mọi ô nhập khác. */
|
|
1494
|
+
readonly state: _angular_core.InputSignal<FieldState>;
|
|
1495
|
+
/**
|
|
1496
|
+
* Nhãn nổi. `joined`: một nhãn (`label`) cho cả khung. `dual-inputs`: mỗi ô
|
|
1497
|
+
* một nhãn (`fromLabel` / `toLabel`), nổi riêng theo ô đó có ngày hay không.
|
|
1498
|
+
*/
|
|
1499
|
+
readonly floatingLabel: _angular_core.InputSignal<boolean>;
|
|
1500
|
+
/**
|
|
1501
|
+
* Nhãn `top` (trên ô, mặc định) hay `left` (cùng hàng, bên trái). Nhãn nổi
|
|
1502
|
+
* (`floatingLabel`) thắng — bật nó thì bỏ qua input này.
|
|
1503
|
+
*/
|
|
1504
|
+
readonly labelPosition: _angular_core.InputSignal<LabelPosition>;
|
|
1505
|
+
/**
|
|
1506
|
+
* Độ rộng cột nhãn khi `labelPosition="left"` — độ dài CSS bất kỳ: `140px`,
|
|
1507
|
+
* `10rem`, `30%`. Bỏ trống = 8rem. Các ô trong cùng form đặt cùng một số thì
|
|
1508
|
+
* mép ô thẳng hàng.
|
|
1509
|
+
*/
|
|
1510
|
+
readonly labelWidth: _angular_core.InputSignal<string>;
|
|
1511
|
+
protected readonly labelLayout: _angular_core.Signal<string>;
|
|
1512
|
+
protected readonly labelBeside: _angular_core.Signal<boolean>;
|
|
1513
|
+
/**
|
|
1514
|
+
* `joined`: một nhãn cho cả khung → khung ngoài thành lưới. `dual-inputs`:
|
|
1515
|
+
* mỗi ô một nhãn ("Từ" / "Đến") → khung ngoài giữ cột dọc, từng CỘT thành lưới.
|
|
1516
|
+
*/
|
|
1517
|
+
protected readonly stackClasses: _angular_core.Signal<string>;
|
|
1518
|
+
protected readonly columnClasses: _angular_core.Signal<string>;
|
|
1519
|
+
/** Kiểu nhãn nổi — Figma Bordered / With background / Default. */
|
|
1520
|
+
readonly floatingVariant: _angular_core.InputSignal<FloatingVariant>;
|
|
1521
|
+
/**
|
|
1522
|
+
* Id hai ô `dual-inputs` — để `<label for>` nối được. Bản cũ hai nhãn
|
|
1523
|
+
* "Từ"/"Đến" KHÔNG có `for`, ô không có id: bấm nhãn không focus, trình đọc
|
|
1524
|
+
* màn hình đọc hai ô không tên.
|
|
1525
|
+
*/
|
|
1526
|
+
private readonly uid;
|
|
1527
|
+
readonly startInputId: string;
|
|
1528
|
+
readonly endInputId: string;
|
|
1271
1529
|
readonly fromLabel: _angular_core.InputSignal<string>;
|
|
1272
1530
|
readonly toLabel: _angular_core.InputSignal<string>;
|
|
1273
1531
|
readonly showInfoIcon: _angular_core.InputSignal<boolean>;
|
|
@@ -1341,7 +1599,27 @@ declare class OlDateRangePicker implements ControlValueAccessor {
|
|
|
1341
1599
|
* dùng y hệt `py-2 / py-2.5 / py-3.5` nên lệch cùng một kiểu; sửa một nửa là
|
|
1342
1600
|
* để lại đúng lỗi đó ở chỗ khác.
|
|
1343
1601
|
*/
|
|
1602
|
+
/**
|
|
1603
|
+
* Hai ô của dạng `dual-inputs`: icon lịch ở lề theo cỡ, chữ cách icon 8px.
|
|
1604
|
+
* Ô "Đến" mang nút xoá `absolute` nên lề phải chừa chỗ cho nó.
|
|
1605
|
+
*/
|
|
1344
1606
|
readonly inputSizeClasses: _angular_core.Signal<string>;
|
|
1607
|
+
readonly endInputClasses: _angular_core.Signal<string>;
|
|
1608
|
+
private inputClasses;
|
|
1609
|
+
protected readonly showClear: _angular_core.Signal<boolean>;
|
|
1610
|
+
/**
|
|
1611
|
+
* `ms-px`/`me-px`: div bọc icon tính từ mép NGOÀI viền 1px của ô, còn đệm
|
|
1612
|
+
* ô tính từ mép trong. Nhãn nổi `filled`/`standard` không có viền hai bên
|
|
1613
|
+
* (chỉ gạch dưới) thì không bù.
|
|
1614
|
+
*/
|
|
1615
|
+
private readonly sideBorder;
|
|
1616
|
+
protected readonly leadPadClass: _angular_core.Signal<string>;
|
|
1617
|
+
protected readonly trailPadClass: _angular_core.Signal<string>;
|
|
1618
|
+
/**
|
|
1619
|
+
* Dạng `joined`: khung có `p-1` (4px), nên icon lùi thêm lề cỡ − 4px để
|
|
1620
|
+
* mép icon cách viền đúng lề cỡ như mọi ô; chữ cách icon 8px.
|
|
1621
|
+
*/
|
|
1622
|
+
protected readonly joinedIconPadClass: _angular_core.Signal<string>;
|
|
1345
1623
|
/**
|
|
1346
1624
|
* Cỡ cho biến thể `joined` — khung bọc mang viền, hai input bên trong trong
|
|
1347
1625
|
* suốt. Phải tách khỏi `inputSizeClasses()`: ở đây chiều cao thuộc về KHUNG,
|
|
@@ -1356,9 +1634,10 @@ declare class OlDateRangePicker implements ControlValueAccessor {
|
|
|
1356
1634
|
* Khung có `p-1` = 4px mỗi cạnh, nên input con lùi 8px để TỔNG chiều cao
|
|
1357
1635
|
* khớp thang: h-9 → h-7, h-10 → h-8, h-12 → h-10, h-13 → h-11.
|
|
1358
1636
|
*/
|
|
1359
|
-
readonly joinedWrapperClasses: _angular_core.Signal<
|
|
1637
|
+
readonly joinedWrapperClasses: _angular_core.Signal<string>;
|
|
1638
|
+
private readonly joinedHeight;
|
|
1360
1639
|
/** Input bên trong khung `joined` — trừ đi `p-1` của khung. */
|
|
1361
|
-
readonly joinedInputClasses: _angular_core.Signal<
|
|
1640
|
+
readonly joinedInputClasses: _angular_core.Signal<string>;
|
|
1362
1641
|
writeValue(val: DateRange | null): void;
|
|
1363
1642
|
registerOnChange(fn: (val: DateRange | null) => void): void;
|
|
1364
1643
|
registerOnTouched(fn: () => void): void;
|
|
@@ -1394,7 +1673,7 @@ declare class OlDateRangePicker implements ControlValueAccessor {
|
|
|
1394
1673
|
*/
|
|
1395
1674
|
ngOnDestroy(): void;
|
|
1396
1675
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlDateRangePicker, never>;
|
|
1397
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlDateRangePicker, "ol-date-range-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "startPlaceholder": { "alias": "startPlaceholder"; "required": false; "isSignal": true; }; "endPlaceholder": { "alias": "endPlaceholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "fromLabel": { "alias": "fromLabel"; "required": false; "isSignal": true; }; "toLabel": { "alias": "toLabel"; "required": false; "isSignal": true; }; "showInfoIcon": { "alias": "showInfoIcon"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "dualMonth": { "alias": "dualMonth"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "daysDisabled": { "alias": "daysDisabled"; "required": false; "isSignal": true; }; "datesDisabled": { "alias": "datesDisabled"; "required": false; "isSignal": true; }; "datesEnabled": { "alias": "datesEnabled"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; "inline": { "alias": "inline"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "rangeChange": "rangeChange"; }, never, never, true, never>;
|
|
1676
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlDateRangePicker, "ol-date-range-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "startPlaceholder": { "alias": "startPlaceholder"; "required": false; "isSignal": true; }; "endPlaceholder": { "alias": "endPlaceholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "labelWidth": { "alias": "labelWidth"; "required": false; "isSignal": true; }; "floatingVariant": { "alias": "floatingVariant"; "required": false; "isSignal": true; }; "fromLabel": { "alias": "fromLabel"; "required": false; "isSignal": true; }; "toLabel": { "alias": "toLabel"; "required": false; "isSignal": true; }; "showInfoIcon": { "alias": "showInfoIcon"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "dualMonth": { "alias": "dualMonth"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "daysDisabled": { "alias": "daysDisabled"; "required": false; "isSignal": true; }; "datesDisabled": { "alias": "datesDisabled"; "required": false; "isSignal": true; }; "datesEnabled": { "alias": "datesEnabled"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; "inline": { "alias": "inline"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "rangeChange": "rangeChange"; }, never, never, true, never>;
|
|
1398
1677
|
}
|
|
1399
1678
|
|
|
1400
1679
|
declare class OlDatepickerDirective implements OnDestroy {
|
|
@@ -1906,6 +2185,74 @@ declare class OlDropdownHeader {
|
|
|
1906
2185
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlDropdownHeader, "ol-dropdown-header", never, { "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1907
2186
|
}
|
|
1908
2187
|
|
|
2188
|
+
/**
|
|
2189
|
+
* Ô tìm ở đầu menu — Figma `ol-dropdown-header` Type=Form (1149:39893): một
|
|
2190
|
+
* `ol-input` cỡ sm có icon tìm, đặt trên danh sách (`ol-dropdown` Type=Users,
|
|
2191
|
+
* Type=With scroll).
|
|
2192
|
+
*
|
|
2193
|
+
* Component KHÔNG tự lọc: mục trong menu do nơi dùng chiếu vào, có thể lấy từ
|
|
2194
|
+
* máy chủ, nên nơi dùng lọc theo `query` rồi hiện `ol-dropdown-state` khi rỗng
|
|
2195
|
+
* hoặc đang tải.
|
|
2196
|
+
*
|
|
2197
|
+
* Bàn phím: ↓ xuống mục đầu, Enter chọn mục đầu còn bấm được. Esc do
|
|
2198
|
+
* `ol-dropdown` lo (đóng + trả tiêu điểm về nút mở).
|
|
2199
|
+
*
|
|
2200
|
+
* `sticky`: menu dài có `menuClass="max-h-… overflow-y-auto"` thì ô tìm đứng
|
|
2201
|
+
* yên trên đỉnh khi cuộn danh sách. `-top-2 -mt-2 pt-2` phủ luôn đệm 8px của
|
|
2202
|
+
* menu, để mục cuộn qua không lộ ra phía trên ô tìm.
|
|
2203
|
+
*/
|
|
2204
|
+
declare class OlDropdownSearch {
|
|
2205
|
+
readonly query: _angular_core.ModelSignal<string>;
|
|
2206
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
2207
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
2208
|
+
/** Mở menu thì đưa tiêu điểm vào ô tìm — người mở menu có ô tìm là để gõ. */
|
|
2209
|
+
readonly autofocus: _angular_core.InputSignal<boolean>;
|
|
2210
|
+
/** Đóng menu thì xoá từ khoá, lần mở sau thấy lại đủ danh sách. */
|
|
2211
|
+
readonly clearOnClose: _angular_core.InputSignal<boolean>;
|
|
2212
|
+
private readonly host;
|
|
2213
|
+
private readonly dropdown;
|
|
2214
|
+
constructor();
|
|
2215
|
+
protected onKeydown(event: KeyboardEvent): void;
|
|
2216
|
+
private field;
|
|
2217
|
+
/**
|
|
2218
|
+
* Mục đầu còn bấm được trong CÙNG menu — bỏ qua mục khoá. Tính cả
|
|
2219
|
+
* `menuitemcheckbox`/`menuitemradio` (menu chọn nhiều, chọn một).
|
|
2220
|
+
*/
|
|
2221
|
+
private firstItem;
|
|
2222
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlDropdownSearch, never>;
|
|
2223
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlDropdownSearch, "ol-dropdown-search", never, { "query": { "alias": "query"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "clearOnClose": { "alias": "clearOnClose"; "required": false; "isSignal": true; }; }, { "query": "queryChange"; }, never, never, true, never>;
|
|
2224
|
+
}
|
|
2225
|
+
|
|
2226
|
+
type DropdownStateType = 'loading' | 'empty' | 'no-results';
|
|
2227
|
+
/**
|
|
2228
|
+
* Trạng thái của menu khi KHÔNG có mục nào để hiện — Figma `ol-dropdown`
|
|
2229
|
+
* Type=Đang tải (5266:29107) · Rỗng (5266:29111) · Không có kết quả (5266:29114).
|
|
2230
|
+
*
|
|
2231
|
+
* Figma ghi: "Menu lấy dữ liệu từ máy chủ phải có đủ bốn trạng thái. Thiếu
|
|
2232
|
+
* Đang tải / Rỗng / Không có kết quả là lỗi hay gặp nhất ở ô tìm kiếm gợi ý."
|
|
2233
|
+
*
|
|
2234
|
+
* Đệm 24/16px, căn giữa. Đang tải: ba thanh xương cao 10px (thanh cuối ngắn
|
|
2235
|
+
* ~70%), cách 10px. Hai trạng thái chữ: tiêu đề 14px đậm vừa `text-heading`,
|
|
2236
|
+
* dòng phụ 12px `text-body-subtle`, cách 8px.
|
|
2237
|
+
*
|
|
2238
|
+
* `role="status"`: trình đọc màn hình báo khi danh sách vừa lọc ra rỗng —
|
|
2239
|
+
* người dùng gõ tìm không nhìn thấy menu thì vẫn biết không có kết quả.
|
|
2240
|
+
*/
|
|
2241
|
+
declare class OlDropdownState {
|
|
2242
|
+
readonly type: _angular_core.InputSignal<DropdownStateType>;
|
|
2243
|
+
/** Tiêu đề — bỏ trống thì dùng câu mặc định theo `type`. */
|
|
2244
|
+
readonly heading: _angular_core.InputSignal<string>;
|
|
2245
|
+
/** Dòng phụ — bỏ trống thì dùng câu mặc định theo `type`. */
|
|
2246
|
+
readonly description: _angular_core.InputSignal<string>;
|
|
2247
|
+
/** Từ khoá vừa tìm — chèn vào câu mặc định của `no-results`. */
|
|
2248
|
+
readonly query: _angular_core.InputSignal<string>;
|
|
2249
|
+
protected readonly boxClasses: _angular_core.Signal<"flex flex-col items-center gap-2.5 px-4 py-6" | "flex flex-col items-center gap-2 px-4 py-6 text-center">;
|
|
2250
|
+
protected readonly resolvedHeading: _angular_core.Signal<string>;
|
|
2251
|
+
protected readonly resolvedDescription: _angular_core.Signal<string>;
|
|
2252
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlDropdownState, never>;
|
|
2253
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlDropdownState, "ol-dropdown-state", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "query": { "alias": "query"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2254
|
+
}
|
|
2255
|
+
|
|
1909
2256
|
declare class OlFooter {
|
|
1910
2257
|
/**
|
|
1911
2258
|
* Giới hạn nội dung trong khung rộng tối đa và căn giữa. Tắt đi thì chân
|
|
@@ -1962,112 +2309,6 @@ declare class OlFrame {
|
|
|
1962
2309
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlFrame, "ol-frame", never, { "spacing": { "alias": "spacing"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "stacked": { "alias": "stacked"; "required": false; "isSignal": true; }; "horizontal": { "alias": "horizontal"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1963
2310
|
}
|
|
1964
2311
|
|
|
1965
|
-
/**
|
|
1966
|
-
* Bảng chuẩn kích thước và trạng thái cho MỌI ô nhập của thư viện.
|
|
1967
|
-
*
|
|
1968
|
-
* ## Vì sao cần
|
|
1969
|
-
*
|
|
1970
|
-
* Chín component họ form từng tự khai kích thước riêng, và chúng trôi khỏi
|
|
1971
|
-
* nhau. Đo ngày 2026-09-23 trên chín component:
|
|
1972
|
-
*
|
|
1973
|
-
* thiếu cỡ `xl` 3 component (select · autocomplete · input-counter)
|
|
1974
|
-
* nền sai 3 component (autocomplete · timepicker · datepicker)
|
|
1975
|
-
* viền sai 5 component
|
|
1976
|
-
* đệm ngang lệch 2px ở cả ba cỡ đầu (datepicker so với input)
|
|
1977
|
-
* cỡ chữ `sm` lệch 2px (14px vs 12px)
|
|
1978
|
-
*
|
|
1979
|
-
* Nền và viền lệch **chỉ lộ ở chế độ tối**: sáng thì `--bg-secondary` và
|
|
1980
|
-
* `--bg-secondary-medium` cùng ra `#f9fafb`, tối thì `gray-950` vs `gray-800`.
|
|
1981
|
-
* Nên lỗi sống rất lâu — người dựng nhìn chế độ sáng, thấy giống hệt nhau.
|
|
1982
|
-
*
|
|
1983
|
-
* Đọc từ đây thì thêm ô nhập mới cũng tự khớp, và đổi thang chỉ sửa một chỗ.
|
|
1984
|
-
*
|
|
1985
|
-
* ## Không gộp chiều cao với đệm ngang
|
|
1986
|
-
*
|
|
1987
|
-
* Hai thứ tách riêng vì component có icon cần `ps-*` thay `px-*`. Gộp lại thì
|
|
1988
|
-
* mỗi component phải cắt chuỗi ra để bỏ phần đệm — dễ sai hơn là ghép vào.
|
|
1989
|
-
*/
|
|
1990
|
-
/** Bốn cỡ của họ form. Trùng `InputSize`, `SelectSize`, `DatepickerSize`. */
|
|
1991
|
-
type FieldSize = 'sm' | 'base' | 'lg' | 'xl';
|
|
1992
|
-
/** Ba trạng thái hiển thị. */
|
|
1993
|
-
type FieldState = 'default' | 'error' | 'success';
|
|
1994
|
-
/**
|
|
1995
|
-
* Chiều cao theo cỡ — **cố định bằng `h-*`**, không suy từ `py-*`.
|
|
1996
|
-
*
|
|
1997
|
-
* Suy từ đệm dọc thì chiều cao phụ thuộc `line-height` của cỡ chữ và không
|
|
1998
|
-
* bao giờ khớp thang chung. Đo trước khi chuẩn hoá: datepicker ra 34/42/54
|
|
1999
|
-
* trong khi input ra 36/40/48 — đặt cạnh nhau là so le ngay, nặng nhất ở `lg`.
|
|
2000
|
-
*
|
|
2001
|
-
* `xl` (52px) là cỡ mới nhất; ba component còn thiếu nó sẽ so le 12px khi đặt
|
|
2002
|
-
* cạnh một `ol-input size="xl"`.
|
|
2003
|
-
*/
|
|
2004
|
-
declare const FIELD_HEIGHT: Record<FieldSize, string>;
|
|
2005
|
-
/**
|
|
2006
|
-
* Chiều cao TỐI THIỂU — cho component cao theo nội dung.
|
|
2007
|
-
*
|
|
2008
|
-
* `ol-select` nhiều lựa chọn, `ol-tag-input` nhiều thẻ: chúng phải giãn ra khi
|
|
2009
|
-
* nội dung xuống dòng, nên `h-*` cố định sẽ cắt mất. Giá trị bằng đúng
|
|
2010
|
-
* `FIELD_HEIGHT` để một dòng vẫn cao bằng các ô khác.
|
|
2011
|
-
*/
|
|
2012
|
-
declare const FIELD_MIN_HEIGHT: Record<FieldSize, string>;
|
|
2013
|
-
/**
|
|
2014
|
-
* Đệm ngang theo Figma `ol-input`: sm 10px · base 12px · lg 14px · xl 16px.
|
|
2015
|
-
*
|
|
2016
|
-
* KHÔNG dùng `[class.px-2.5]` trên template: Angular cắt phần sau dấu chấm
|
|
2017
|
-
* nên nó render ra `px-2`, lệch 2px so với thiết kế. Phải gom vào một chuỗi.
|
|
2018
|
-
*/
|
|
2019
|
-
declare const FIELD_PADDING_X: Record<FieldSize, string>;
|
|
2020
|
-
/**
|
|
2021
|
-
* Cỡ chữ theo cỡ ô.
|
|
2022
|
-
*
|
|
2023
|
-
* `sm` là **14px** (`text-sm`), không phải 12px. Datepicker từng dùng
|
|
2024
|
-
* `text-xs` nên chữ trong ô nhỏ hơn hẳn các ô cùng hàng.
|
|
2025
|
-
*/
|
|
2026
|
-
declare const FIELD_TEXT: Record<FieldSize, string>;
|
|
2027
|
-
/**
|
|
2028
|
-
* Nền · viền · vòng focus theo trạng thái.
|
|
2029
|
-
*
|
|
2030
|
-
* Dùng `-medium` cho cả nền lẫn viền ở trạng thái thường. Hai tên gần giống
|
|
2031
|
-
* nhau (`bg-neutral-secondary` vs `bg-neutral-secondary-medium`) nhưng **khác
|
|
2032
|
-
* hẳn ở chế độ tối**, nên nhầm một chữ là ô đó lệch màu mà chế độ sáng không
|
|
2033
|
-
* lộ ra.
|
|
2034
|
-
*
|
|
2035
|
-
* Dùng `focus-within:` chứ không `focus:`: viền nằm trên thẻ bọc, còn focus
|
|
2036
|
-
* rơi vào `<input>` bên trong. `focus:` trên thẻ bọc không bao giờ khớp.
|
|
2037
|
-
*/
|
|
2038
|
-
declare const FIELD_STATE: Record<FieldState, string>;
|
|
2039
|
-
/** Nền và con trỏ khi ô bị khoá. Áp đè lên `FIELD_STATE`. */
|
|
2040
|
-
declare const FIELD_DISABLED = "bg-disabled opacity-60 cursor-not-allowed";
|
|
2041
|
-
/** Bo góc — 12px cho mọi cỡ, theo Figma `bieu-mau.md`. */
|
|
2042
|
-
declare const FIELD_RADIUS = "rounded-md";
|
|
2043
|
-
/**
|
|
2044
|
-
* Lớp của nhãn phía trên ô.
|
|
2045
|
-
*
|
|
2046
|
-
* `text-heading` chứ không `text-body`: nhãn là thứ người dùng đọc đầu tiên để
|
|
2047
|
-
* biết ô này hỏi gì, nó phải đậm hơn chữ phụ.
|
|
2048
|
-
*/
|
|
2049
|
-
declare const FIELD_LABEL = "inline-flex items-center gap-1 text-sm font-medium text-heading";
|
|
2050
|
-
/** Khoảng cách nhãn → ô. */
|
|
2051
|
-
declare const FIELD_LABEL_GAP = "mb-1.5";
|
|
2052
|
-
/** Dấu sao bắt buộc. */
|
|
2053
|
-
declare const FIELD_ASTERISK = "text-fg-danger font-bold";
|
|
2054
|
-
/**
|
|
2055
|
-
* Chữ trợ giúp dưới ô, đổi màu theo trạng thái.
|
|
2056
|
-
*
|
|
2057
|
-
* Trạng thái lỗi mà chữ vẫn màu phụ thì người dùng không biết dòng đó là lời
|
|
2058
|
-
* giải thích lỗi hay chú thích thường.
|
|
2059
|
-
*/
|
|
2060
|
-
declare const FIELD_HELPER: Record<FieldState, string>;
|
|
2061
|
-
/** Khoảng cách ô → chữ trợ giúp. */
|
|
2062
|
-
declare const FIELD_HELPER_GAP = "mt-1.5";
|
|
2063
|
-
/**
|
|
2064
|
-
* Gộp chiều cao · đệm ngang · cỡ chữ · bo góc cho một cỡ.
|
|
2065
|
-
*
|
|
2066
|
-
* Tiện cho component không có icon. Component có icon tự ghép từ các bảng
|
|
2067
|
-
* riêng để thay `px-*` bằng `ps-*`.
|
|
2068
|
-
*/
|
|
2069
|
-
declare function fieldSizeClasses(size: FieldSize): string;
|
|
2070
|
-
|
|
2071
2312
|
/**
|
|
2072
2313
|
* Nhãn cho ô nhập — khớp Figma `ol-label` (#1149:94727), trục
|
|
2073
2314
|
* `Type=[Default | Required & icon | Two texts]`.
|
|
@@ -2440,6 +2681,28 @@ declare class OlInput implements ControlValueAccessor {
|
|
|
2440
2681
|
readonly cleared: _angular_core.OutputEmitterRef<void>;
|
|
2441
2682
|
readonly rightHelperText: _angular_core.InputSignal<string>;
|
|
2442
2683
|
readonly id: _angular_core.InputSignal<string>;
|
|
2684
|
+
/**
|
|
2685
|
+
* Nhãn nổi: `label` nằm TRONG khung, nổi lên khi focus hoặc có chữ — thay
|
|
2686
|
+
* cho nhãn phía trên ô. Xem `OlFieldFrame`.
|
|
2687
|
+
*/
|
|
2688
|
+
readonly floatingLabel: _angular_core.InputSignal<boolean>;
|
|
2689
|
+
/**
|
|
2690
|
+
* Nhãn `top` (trên ô, mặc định) hay `left` (cùng hàng, bên trái). Nhãn nổi
|
|
2691
|
+
* (`floatingLabel`) thắng — bật nó thì bỏ qua input này.
|
|
2692
|
+
*/
|
|
2693
|
+
readonly labelPosition: _angular_core.InputSignal<LabelPosition>;
|
|
2694
|
+
/**
|
|
2695
|
+
* Độ rộng cột nhãn khi `labelPosition="left"` — độ dài CSS bất kỳ: `140px`,
|
|
2696
|
+
* `10rem`, `30%`. Bỏ trống = 8rem. Các ô trong cùng form đặt cùng một số thì
|
|
2697
|
+
* mép ô thẳng hàng.
|
|
2698
|
+
*/
|
|
2699
|
+
readonly labelWidth: _angular_core.InputSignal<string>;
|
|
2700
|
+
protected readonly labelLayout: _angular_core.Signal<string>;
|
|
2701
|
+
protected readonly labelBeside: _angular_core.Signal<boolean>;
|
|
2702
|
+
/** Kiểu nhãn nổi — Figma Bordered / With background / Default. */
|
|
2703
|
+
readonly floatingVariant: _angular_core.InputSignal<FloatingVariant>;
|
|
2704
|
+
/** Có chữ → nhãn nổi. `0` (input number) là CÓ giá trị. */
|
|
2705
|
+
readonly hasValue: _angular_core.Signal<boolean>;
|
|
2443
2706
|
/** Id thực dùng: ưu tiên id do nơi gọi truyền, không thì dùng id tự sinh. */
|
|
2444
2707
|
readonly inputId: _angular_core.Signal<string>;
|
|
2445
2708
|
readonly helperId: _angular_core.Signal<string>;
|
|
@@ -2456,6 +2719,18 @@ declare class OlInput implements ControlValueAccessor {
|
|
|
2456
2719
|
* lệch 2px so với thiết kế.
|
|
2457
2720
|
*/
|
|
2458
2721
|
readonly paddingClasses: _angular_core.Signal<string>;
|
|
2722
|
+
/**
|
|
2723
|
+
* Khoảng icon ↔ chữ đúng 8px (`FIELD_ICON_GAP`): icon mang lề đầu/cuối của
|
|
2724
|
+
* khung, ô gõ bỏ lề phía có icon. Khung KHÔNG có `gap` — add-on chữ/icon
|
|
2725
|
+
* phải sát ô gõ (Figma Type=Add-on: gap 0).
|
|
2726
|
+
*/
|
|
2727
|
+
protected readonly hasLeadingIcon: _angular_core.Signal<boolean>;
|
|
2728
|
+
protected readonly hasTrailingIcon: _angular_core.Signal<boolean>;
|
|
2729
|
+
protected readonly showClear: _angular_core.Signal<boolean>;
|
|
2730
|
+
protected readonly leadIconClasses: _angular_core.Signal<string>;
|
|
2731
|
+
/** Nút xoá đứng trước icon trạng thái thì để `ps-2` của icon tạo khoảng. */
|
|
2732
|
+
protected readonly clearClasses: _angular_core.Signal<string>;
|
|
2733
|
+
protected readonly trailIconClasses: _angular_core.Signal<string>;
|
|
2459
2734
|
/**
|
|
2460
2735
|
* Bốn phương thức này là thứ Angular Forms gọi tới. Thiếu chúng thì
|
|
2461
2736
|
* `formControlName` / `[formControl]` KHÔNG gắn được — dùng component trong
|
|
@@ -2480,7 +2755,7 @@ declare class OlInput implements ControlValueAccessor {
|
|
|
2480
2755
|
/** Gọi khi rời ô nhập — form dùng để đánh dấu `touched`. */
|
|
2481
2756
|
protected markTouched(): void;
|
|
2482
2757
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlInput, never>;
|
|
2483
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlInput, "ol-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showAsterisk": { "alias": "showAsterisk"; "required": false; "isSignal": true; }; "labelIcon": { "alias": "labelIcon"; "required": false; "isSignal": true; }; "labelTooltip": { "alias": "labelTooltip"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "prefixText": { "alias": "prefixText"; "required": false; "isSignal": true; }; "suffixText": { "alias": "suffixText"; "required": false; "isSignal": true; }; "addOnIcon": { "alias": "addOnIcon"; "required": false; "isSignal": true; }; "leftIcon": { "alias": "leftIcon"; "required": false; "isSignal": true; }; "rightIcon": { "alias": "rightIcon"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "rightHelperText": { "alias": "rightHelperText"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "cleared": "cleared"; }, never, ["[addOnIcon], [leftIcon]", "[
|
|
2758
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlInput, "ol-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showAsterisk": { "alias": "showAsterisk"; "required": false; "isSignal": true; }; "labelIcon": { "alias": "labelIcon"; "required": false; "isSignal": true; }; "labelTooltip": { "alias": "labelTooltip"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "prefixText": { "alias": "prefixText"; "required": false; "isSignal": true; }; "suffixText": { "alias": "suffixText"; "required": false; "isSignal": true; }; "addOnIcon": { "alias": "addOnIcon"; "required": false; "isSignal": true; }; "leftIcon": { "alias": "leftIcon"; "required": false; "isSignal": true; }; "rightIcon": { "alias": "rightIcon"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "rightHelperText": { "alias": "rightHelperText"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "labelWidth": { "alias": "labelWidth"; "required": false; "isSignal": true; }; "floatingVariant": { "alias": "floatingVariant"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "cleared": "cleared"; }, never, ["[addOnIcon], [leftIcon]", "[rightIcon]", "[rightHelperAction]"], true, never>;
|
|
2484
2759
|
}
|
|
2485
2760
|
|
|
2486
2761
|
type TextareaState = 'default' | 'error' | 'success';
|
|
@@ -2516,6 +2791,26 @@ declare class OlTextarea implements ControlValueAccessor {
|
|
|
2516
2791
|
readonly showAsterisk: _angular_core.InputSignal<boolean>;
|
|
2517
2792
|
readonly commentBox: _angular_core.InputSignal<boolean>;
|
|
2518
2793
|
readonly id: _angular_core.InputSignal<string>;
|
|
2794
|
+
/**
|
|
2795
|
+
* Nhãn nổi: `label` nằm TRONG khung ở dòng đầu, nổi lên khi focus hoặc có
|
|
2796
|
+
* chữ. Không áp cho `commentBox` (thẻ bình luận có bố cục riêng).
|
|
2797
|
+
*/
|
|
2798
|
+
readonly floatingLabel: _angular_core.InputSignal<boolean>;
|
|
2799
|
+
/**
|
|
2800
|
+
* Nhãn `top` (trên ô, mặc định) hay `left` (cùng hàng, bên trái). Nhãn nổi
|
|
2801
|
+
* (`floatingLabel`) thắng — bật nó thì bỏ qua input này.
|
|
2802
|
+
*/
|
|
2803
|
+
readonly labelPosition: _angular_core.InputSignal<LabelPosition>;
|
|
2804
|
+
/**
|
|
2805
|
+
* Độ rộng cột nhãn khi `labelPosition="left"` — độ dài CSS bất kỳ: `140px`,
|
|
2806
|
+
* `10rem`, `30%`. Bỏ trống = 8rem. Các ô trong cùng form đặt cùng một số thì
|
|
2807
|
+
* mép ô thẳng hàng.
|
|
2808
|
+
*/
|
|
2809
|
+
readonly labelWidth: _angular_core.InputSignal<string>;
|
|
2810
|
+
protected readonly labelLayout: _angular_core.Signal<string>;
|
|
2811
|
+
protected readonly labelBeside: _angular_core.Signal<boolean>;
|
|
2812
|
+
/** Kiểu nhãn nổi — Figma Bordered / With background / Default. */
|
|
2813
|
+
readonly floatingVariant: _angular_core.InputSignal<FloatingVariant>;
|
|
2519
2814
|
readonly submitComment: _angular_core.OutputEmitterRef<string>;
|
|
2520
2815
|
onSubmit(): void;
|
|
2521
2816
|
/**
|
|
@@ -2534,7 +2829,7 @@ declare class OlTextarea implements ControlValueAccessor {
|
|
|
2534
2829
|
/** Gọi khi rời ô nhập — form dùng để đánh dấu `touched`. */
|
|
2535
2830
|
protected markTouched(): void;
|
|
2536
2831
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlTextarea, never>;
|
|
2537
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlTextarea, "ol-textarea", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "showCharCount": { "alias": "showCharCount"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showAsterisk": { "alias": "showAsterisk"; "required": false; "isSignal": true; }; "commentBox": { "alias": "commentBox"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "submitComment": "submitComment"; }, never, never, true, never>;
|
|
2832
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlTextarea, "ol-textarea", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "showCharCount": { "alias": "showCharCount"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showAsterisk": { "alias": "showAsterisk"; "required": false; "isSignal": true; }; "commentBox": { "alias": "commentBox"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "labelWidth": { "alias": "labelWidth"; "required": false; "isSignal": true; }; "floatingVariant": { "alias": "floatingVariant"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "submitComment": "submitComment"; }, never, never, true, never>;
|
|
2538
2833
|
}
|
|
2539
2834
|
|
|
2540
2835
|
/**
|
|
@@ -2646,6 +2941,26 @@ declare class OlSelect implements ControlValueAccessor {
|
|
|
2646
2941
|
* cần `set()` được. Cách dùng từ ngoài không đổi.
|
|
2647
2942
|
*/
|
|
2648
2943
|
readonly disabled: _angular_core.ModelSignal<boolean>;
|
|
2944
|
+
/**
|
|
2945
|
+
* Nhãn nổi: `label` nằm TRONG khung, nổi lên khi focus, mở danh sách hoặc có
|
|
2946
|
+
* lựa chọn. Đa chọn: nhãn nằm yên ở dòng đầu, nổi lên không đẩy thẻ.
|
|
2947
|
+
*/
|
|
2948
|
+
readonly floatingLabel: _angular_core.InputSignal<boolean>;
|
|
2949
|
+
/**
|
|
2950
|
+
* Nhãn `top` (trên ô, mặc định) hay `left` (cùng hàng, bên trái). Nhãn nổi
|
|
2951
|
+
* (`floatingLabel`) thắng — bật nó thì bỏ qua input này.
|
|
2952
|
+
*/
|
|
2953
|
+
readonly labelPosition: _angular_core.InputSignal<LabelPosition>;
|
|
2954
|
+
/**
|
|
2955
|
+
* Độ rộng cột nhãn khi `labelPosition="left"` — độ dài CSS bất kỳ: `140px`,
|
|
2956
|
+
* `10rem`, `30%`. Bỏ trống = 8rem. Các ô trong cùng form đặt cùng một số thì
|
|
2957
|
+
* mép ô thẳng hàng.
|
|
2958
|
+
*/
|
|
2959
|
+
readonly labelWidth: _angular_core.InputSignal<string>;
|
|
2960
|
+
protected readonly labelLayout: _angular_core.Signal<string>;
|
|
2961
|
+
protected readonly labelBeside: _angular_core.Signal<boolean>;
|
|
2962
|
+
/** Kiểu nhãn nổi — Figma Bordered / With background / Default. */
|
|
2963
|
+
readonly floatingVariant: _angular_core.InputSignal<FloatingVariant>;
|
|
2649
2964
|
readonly placeholder: _angular_core.InputSignal<string>;
|
|
2650
2965
|
readonly multiple: _angular_core.InputSignal<boolean>;
|
|
2651
2966
|
readonly searchable: _angular_core.InputSignal<boolean>;
|
|
@@ -2655,6 +2970,10 @@ declare class OlSelect implements ControlValueAccessor {
|
|
|
2655
2970
|
readonly labelKey: _angular_core.InputSignal<string>;
|
|
2656
2971
|
readonly valueKey: _angular_core.InputSignal<string>;
|
|
2657
2972
|
readonly groupBy: _angular_core.InputSignal<string>;
|
|
2973
|
+
/**
|
|
2974
|
+
* Tiêu đề khi danh sách rỗng. Bỏ trống thì theo Figma: có từ khoá →
|
|
2975
|
+
* "Không tìm thấy “…”", chưa có mục nào → "Chưa có mục nào".
|
|
2976
|
+
*/
|
|
2658
2977
|
readonly emptyText: _angular_core.InputSignal<string>;
|
|
2659
2978
|
readonly searchPlaceholder: _angular_core.InputSignal<string>;
|
|
2660
2979
|
/**
|
|
@@ -2796,6 +3115,7 @@ declare class OlSelect implements ControlValueAccessor {
|
|
|
2796
3115
|
private readonly listboxRef;
|
|
2797
3116
|
/** Ô tìm ở đầu panel, để chuyển focus vào khi mở. */
|
|
2798
3117
|
private readonly oTimPanel;
|
|
3118
|
+
private readonly inlineSearch;
|
|
2799
3119
|
readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
2800
3120
|
readonly searchQuery: _angular_core.WritableSignal<string>;
|
|
2801
3121
|
readonly activeIndex: _angular_core.WritableSignal<number>;
|
|
@@ -2845,9 +3165,15 @@ declare class OlSelect implements ControlValueAccessor {
|
|
|
2845
3165
|
* 10/12/14/16px. Đặt `ol-select size="sm"` cạnh `ol-input size="sm"` là
|
|
2846
3166
|
* lệch 4px, và ở `xl` lệch 2px theo chiều ngược lại.
|
|
2847
3167
|
*
|
|
2848
|
-
*
|
|
3168
|
+
* Icon trái và cụm nút phải đều `absolute`, nên khung tự chừa chỗ cho
|
|
3169
|
+
* chúng bằng `FIELD_ICON_RESERVE_*`: icon ↔ chữ đúng 8px. Bản cũ `ps-10` /
|
|
3170
|
+
* `pe-10` cố định cho mọi cỡ ra 10px ở cỡ base, 14px ở sm (đo 2026-09-29).
|
|
2849
3171
|
*/
|
|
2850
3172
|
readonly paddingStartClass: _angular_core.Signal<string>;
|
|
3173
|
+
private readonly floatingOutlined;
|
|
3174
|
+
/** Icon trái và cụm nút phải nằm ở lề theo cỡ, như `ol-input`. */
|
|
3175
|
+
protected readonly leftIconPadClass: _angular_core.Signal<string>;
|
|
3176
|
+
protected readonly controlPadClass: _angular_core.Signal<string>;
|
|
2851
3177
|
private onChange;
|
|
2852
3178
|
private onTouched;
|
|
2853
3179
|
private readonly destroyRef;
|
|
@@ -3042,7 +3368,7 @@ declare class OlSelect implements ControlValueAccessor {
|
|
|
3042
3368
|
registerOnTouched(fn: () => void): void;
|
|
3043
3369
|
setDisabledState(isDisabled: boolean): void;
|
|
3044
3370
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlSelect, never>;
|
|
3045
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlSelect, "ol-select", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showAsterisk": { "alias": "showAsterisk"; "required": false; "isSignal": true; }; "leftIcon": { "alias": "leftIcon"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "labelKey": { "alias": "labelKey"; "required": false; "isSignal": true; }; "valueKey": { "alias": "valueKey"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "menuClass": { "alias": "menuClass"; "required": false; "isSignal": true; }; "matchTriggerWidth": { "alias": "matchTriggerWidth"; "required": false; "isSignal": true; }; "maxSelectedItems": { "alias": "maxSelectedItems"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "hideSelected": { "alias": "hideSelected"; "required": false; "isSignal": true; }; "allowCreate": { "alias": "allowCreate"; "required": false; "isSignal": true; }; "createText": { "alias": "createText"; "required": false; "isSignal": true; }; "groupSeparator": { "alias": "groupSeparator"; "required": false; "isSignal": true; }; "searchPosition": { "alias": "searchPosition"; "required": false; "isSignal": true; }; "searchIcon": { "alias": "searchIcon"; "required": false; "isSignal": true; }; "searchPrefix": { "alias": "searchPrefix"; "required": false; "isSignal": true; }; "triggerIcon": { "alias": "triggerIcon"; "required": false; "isSignal": true; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; "isSignal": true; }; "remoteSearch": { "alias": "remoteSearch"; "required": false; "isSignal": true; }; "minTermLength": { "alias": "minTermLength"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "typeToSearchText": { "alias": "typeToSearchText"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "bufferAmount": { "alias": "bufferAmount"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "search": "search"; "opened": "opened"; "closed": "closed"; "cleared": "cleared"; "added": "added"; "removed": "removed"; "selectionChange": "selectionChange"; }, ["optionTemplate", "labelTemplate"], ["[leftIcon]"], true, never>;
|
|
3371
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlSelect, "ol-select", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showAsterisk": { "alias": "showAsterisk"; "required": false; "isSignal": true; }; "leftIcon": { "alias": "leftIcon"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "labelWidth": { "alias": "labelWidth"; "required": false; "isSignal": true; }; "floatingVariant": { "alias": "floatingVariant"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "labelKey": { "alias": "labelKey"; "required": false; "isSignal": true; }; "valueKey": { "alias": "valueKey"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "menuClass": { "alias": "menuClass"; "required": false; "isSignal": true; }; "matchTriggerWidth": { "alias": "matchTriggerWidth"; "required": false; "isSignal": true; }; "maxSelectedItems": { "alias": "maxSelectedItems"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "hideSelected": { "alias": "hideSelected"; "required": false; "isSignal": true; }; "allowCreate": { "alias": "allowCreate"; "required": false; "isSignal": true; }; "createText": { "alias": "createText"; "required": false; "isSignal": true; }; "groupSeparator": { "alias": "groupSeparator"; "required": false; "isSignal": true; }; "searchPosition": { "alias": "searchPosition"; "required": false; "isSignal": true; }; "searchIcon": { "alias": "searchIcon"; "required": false; "isSignal": true; }; "searchPrefix": { "alias": "searchPrefix"; "required": false; "isSignal": true; }; "triggerIcon": { "alias": "triggerIcon"; "required": false; "isSignal": true; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; "isSignal": true; }; "remoteSearch": { "alias": "remoteSearch"; "required": false; "isSignal": true; }; "minTermLength": { "alias": "minTermLength"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "typeToSearchText": { "alias": "typeToSearchText"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "bufferAmount": { "alias": "bufferAmount"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "search": "search"; "opened": "opened"; "closed": "closed"; "cleared": "cleared"; "added": "added"; "removed": "removed"; "selectionChange": "selectionChange"; }, ["optionTemplate", "labelTemplate"], ["[leftIcon]"], true, never>;
|
|
3046
3372
|
}
|
|
3047
3373
|
|
|
3048
3374
|
/**
|
|
@@ -3269,7 +3595,13 @@ interface SegmentedOption<T = string | number> {
|
|
|
3269
3595
|
label: string;
|
|
3270
3596
|
icon?: string;
|
|
3271
3597
|
disabled?: boolean;
|
|
3598
|
+
/**
|
|
3599
|
+
* Màu của mục KHI ĐANG CHỌN — cho lựa chọn mang nghĩa (Đạt / Chưa đạt,
|
|
3600
|
+
* Đúng / Sai). Không truyền thì nền trắng chữ đậm như mặc định.
|
|
3601
|
+
*/
|
|
3602
|
+
color?: SegmentedColor;
|
|
3272
3603
|
}
|
|
3604
|
+
type SegmentedColor = 'neutral' | 'brand' | 'success' | 'warning' | 'danger';
|
|
3273
3605
|
type SegmentedSize = 'sm' | 'base';
|
|
3274
3606
|
/**
|
|
3275
3607
|
* Chọn MỘT trong vài chế độ loại trừ nhau, đặt cạnh nhau trên một rãnh xám;
|
|
@@ -3846,66 +4178,6 @@ declare class OlRange implements ControlValueAccessor {
|
|
|
3846
4178
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlRange, "ol-range", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "minValue": { "alias": "minValue"; "required": false; "isSignal": true; }; "maxValue": { "alias": "maxValue"; "required": false; "isSignal": true; }; "dualRange": { "alias": "dualRange"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "showTooltip": { "alias": "showTooltip"; "required": false; "isSignal": true; }; "showMinMaxLabels": { "alias": "showMinMaxLabels"; "required": false; "isSignal": true; }; "unit": { "alias": "unit"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "minValue": "minValueChange"; "maxValue": "maxValueChange"; "disabled": "disabledChange"; }, never, ["[slot=prefix]", "[slot=suffix]"], true, never>;
|
|
3847
4179
|
}
|
|
3848
4180
|
|
|
3849
|
-
/**
|
|
3850
|
-
* Figma `ol-floating-label` #1149:50454 trục `Type` chỉ có
|
|
3851
|
-
* `Default | With background | Bordered` — ánh xạ sang `outlined`/`filled`.
|
|
3852
|
-
* `standard` không có trong thiết kế và template cũng **không có nhánh nào**
|
|
3853
|
-
* cho nó (grep ra 0 lượt), nên truyền vào là ra y hệt `outlined`. Đã xoá.
|
|
3854
|
-
*/
|
|
3855
|
-
type FloatingLabelVariant = 'outlined' | 'filled';
|
|
3856
|
-
/**
|
|
3857
|
-
* Figma `ol-floating-label` (#1149:50454) có `Size=[sm|base|lg|xl]`; code
|
|
3858
|
-
* trước đây thiếu `xl`. Đo trên Figma, `xl` giống hệt `lg` trừ chiều cao
|
|
3859
|
-
* (48 -> 52px) và padding dọc (12 -> 14px): cùng gap 8, cùng icon 20px,
|
|
3860
|
-
* cùng cỡ chữ 16px, cùng bo góc 12px.
|
|
3861
|
-
*/
|
|
3862
|
-
type FloatingLabelSize = 'sm' | 'base' | 'lg' | 'xl';
|
|
3863
|
-
type FloatingLabelState = 'default' | 'error' | 'success';
|
|
3864
|
-
declare class OlFloatingLabel implements ControlValueAccessor {
|
|
3865
|
-
readonly value: _angular_core.ModelSignal<string>;
|
|
3866
|
-
readonly label: _angular_core.InputSignal<string>;
|
|
3867
|
-
readonly type: _angular_core.InputSignal<string>;
|
|
3868
|
-
readonly variant: _angular_core.InputSignal<FloatingLabelVariant>;
|
|
3869
|
-
readonly size: _angular_core.InputSignal<FloatingLabelSize>;
|
|
3870
|
-
readonly state: _angular_core.InputSignal<FloatingLabelState>;
|
|
3871
|
-
/**
|
|
3872
|
-
* Khai bằng `model()` thay vì `input()` để Reactive Forms khoá được component:
|
|
3873
|
-
* `setDisabledState()` cần `set()` giá trị, mà `input()` chỉ đọc. Cách dùng từ
|
|
3874
|
-
* ngoài không đổi — `[disabled]="true"` và `disabled()` trong template vẫn như cũ.
|
|
3875
|
-
*/
|
|
3876
|
-
readonly disabled: _angular_core.ModelSignal<boolean>;
|
|
3877
|
-
readonly readonly: _angular_core.InputSignal<boolean>;
|
|
3878
|
-
readonly helperText: _angular_core.InputSignal<string>;
|
|
3879
|
-
readonly errorText: _angular_core.InputSignal<string>;
|
|
3880
|
-
readonly id: _angular_core.InputSignal<string>;
|
|
3881
|
-
readonly autocomplete: _angular_core.InputSignal<string>;
|
|
3882
|
-
readonly labelBg: _angular_core.InputSignal<string>;
|
|
3883
|
-
readonly prefixIcon: _angular_core.InputSignal<string>;
|
|
3884
|
-
readonly suffixIcon: _angular_core.InputSignal<string>;
|
|
3885
|
-
readonly prefixVariant: _angular_core.InputSignal<string>;
|
|
3886
|
-
readonly suffixVariant: _angular_core.InputSignal<string>;
|
|
3887
|
-
readonly hasPrefix: _angular_core.Signal<boolean>;
|
|
3888
|
-
readonly hasSuffix: _angular_core.Signal<boolean>;
|
|
3889
|
-
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
3890
|
-
readonly isFloated: _angular_core.Signal<boolean>;
|
|
3891
|
-
private readonly generatedId;
|
|
3892
|
-
protected readonly inputId: _angular_core.Signal<string>;
|
|
3893
|
-
readonly helperId: _angular_core.Signal<string>;
|
|
3894
|
-
readonly describedBy: _angular_core.Signal<string | null>;
|
|
3895
|
-
readonly ariaInvalid: _angular_core.Signal<"true" | null>;
|
|
3896
|
-
private onChange;
|
|
3897
|
-
private onTouched;
|
|
3898
|
-
onFocus(): void;
|
|
3899
|
-
onBlur(): void;
|
|
3900
|
-
onModelChange(val: string): void;
|
|
3901
|
-
writeValue(val: string): void;
|
|
3902
|
-
registerOnChange(fn: any): void;
|
|
3903
|
-
registerOnTouched(fn: any): void;
|
|
3904
|
-
setDisabledState(isDisabled: boolean): void;
|
|
3905
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlFloatingLabel, never>;
|
|
3906
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlFloatingLabel, "ol-floating-label", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "labelBg": { "alias": "labelBg"; "required": false; "isSignal": true; }; "prefixIcon": { "alias": "prefixIcon"; "required": false; "isSignal": true; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; "isSignal": true; }; "prefixVariant": { "alias": "prefixVariant"; "required": false; "isSignal": true; }; "suffixVariant": { "alias": "suffixVariant"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; }, never, never, true, never>;
|
|
3907
|
-
}
|
|
3908
|
-
|
|
3909
4181
|
/**
|
|
3910
4182
|
* Thang cỡ theo Figma: `sm | base | lg`. `'md'` là BÍ DANH của `'base'`,
|
|
3911
4183
|
* giữ cho mã cũ chạy tiếp và sẽ bỏ ở bản sau — dùng `'base'` cho mã mới.
|
|
@@ -4076,6 +4348,26 @@ declare class OlTagInput implements ControlValueAccessor {
|
|
|
4076
4348
|
readonly maxTags: _angular_core.InputSignal<number | undefined>;
|
|
4077
4349
|
readonly id: _angular_core.InputSignal<string>;
|
|
4078
4350
|
readonly size: _angular_core.InputSignal<TagInputSize>;
|
|
4351
|
+
/**
|
|
4352
|
+
* Nhãn nổi: `label` nằm TRONG khung ở dòng đầu, nổi lên khi focus, đang gõ
|
|
4353
|
+
* hoặc đã có thẻ. Khung giãn nhiều dòng — nhãn nổi không đẩy thẻ.
|
|
4354
|
+
*/
|
|
4355
|
+
readonly floatingLabel: _angular_core.InputSignal<boolean>;
|
|
4356
|
+
/**
|
|
4357
|
+
* Nhãn `top` (trên ô, mặc định) hay `left` (cùng hàng, bên trái). Nhãn nổi
|
|
4358
|
+
* (`floatingLabel`) thắng — bật nó thì bỏ qua input này.
|
|
4359
|
+
*/
|
|
4360
|
+
readonly labelPosition: _angular_core.InputSignal<LabelPosition>;
|
|
4361
|
+
/**
|
|
4362
|
+
* Độ rộng cột nhãn khi `labelPosition="left"` — độ dài CSS bất kỳ: `140px`,
|
|
4363
|
+
* `10rem`, `30%`. Bỏ trống = 8rem. Các ô trong cùng form đặt cùng một số thì
|
|
4364
|
+
* mép ô thẳng hàng.
|
|
4365
|
+
*/
|
|
4366
|
+
readonly labelWidth: _angular_core.InputSignal<string>;
|
|
4367
|
+
protected readonly labelLayout: _angular_core.Signal<string>;
|
|
4368
|
+
protected readonly labelBeside: _angular_core.Signal<boolean>;
|
|
4369
|
+
/** Kiểu nhãn nổi — Figma Bordered / With background / Default. */
|
|
4370
|
+
readonly floatingVariant: _angular_core.InputSignal<FloatingVariant>;
|
|
4079
4371
|
/**
|
|
4080
4372
|
* Gom chiều cao + padding vào MỘT chuỗi thay vì nhiều `[class.X]`: hai class
|
|
4081
4373
|
* cùng thuộc tính đều nằm trên thẻ thì trình duyệt chọn theo thứ tự luật CSS
|
|
@@ -4112,7 +4404,7 @@ declare class OlTagInput implements ControlValueAccessor {
|
|
|
4112
4404
|
*/
|
|
4113
4405
|
protected markTouched(): void;
|
|
4114
4406
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlTagInput, never>;
|
|
4115
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlTagInput, "ol-tag-input", never, { "tags": { "alias": "tags"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "maxTags": { "alias": "maxTags"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "tags": "tagsChange"; "disabled": "disabledChange"; }, never, never, true, never>;
|
|
4407
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlTagInput, "ol-tag-input", never, { "tags": { "alias": "tags"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "maxTags": { "alias": "maxTags"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "labelWidth": { "alias": "labelWidth"; "required": false; "isSignal": true; }; "floatingVariant": { "alias": "floatingVariant"; "required": false; "isSignal": true; }; }, { "tags": "tagsChange"; "disabled": "disabledChange"; }, never, never, true, never>;
|
|
4116
4408
|
}
|
|
4117
4409
|
|
|
4118
4410
|
declare class OlRichTextEditor implements ControlValueAccessor {
|
|
@@ -4185,6 +4477,26 @@ declare class OlTimepicker implements ControlValueAccessor {
|
|
|
4185
4477
|
* `aria-labelledby` đã lo — không cần truyền cái này.
|
|
4186
4478
|
*/
|
|
4187
4479
|
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
4480
|
+
/**
|
|
4481
|
+
* Nhãn nổi: `label` nằm TRONG khung (sau icon đồng hồ), nổi lên khi focus,
|
|
4482
|
+
* mở bảng chọn hoặc đã có giờ. Có addon thì nhãn nằm trong ô, không trùm addon.
|
|
4483
|
+
*/
|
|
4484
|
+
readonly floatingLabel: _angular_core.InputSignal<boolean>;
|
|
4485
|
+
/**
|
|
4486
|
+
* Nhãn `top` (trên ô, mặc định) hay `left` (cùng hàng, bên trái). Nhãn nổi
|
|
4487
|
+
* (`floatingLabel`) thắng — bật nó thì bỏ qua input này.
|
|
4488
|
+
*/
|
|
4489
|
+
readonly labelPosition: _angular_core.InputSignal<LabelPosition>;
|
|
4490
|
+
/**
|
|
4491
|
+
* Độ rộng cột nhãn khi `labelPosition="left"` — độ dài CSS bất kỳ: `140px`,
|
|
4492
|
+
* `10rem`, `30%`. Bỏ trống = 8rem. Các ô trong cùng form đặt cùng một số thì
|
|
4493
|
+
* mép ô thẳng hàng.
|
|
4494
|
+
*/
|
|
4495
|
+
readonly labelWidth: _angular_core.InputSignal<string>;
|
|
4496
|
+
protected readonly labelLayout: _angular_core.Signal<string>;
|
|
4497
|
+
protected readonly labelBeside: _angular_core.Signal<boolean>;
|
|
4498
|
+
/** Kiểu nhãn nổi — Figma Bordered / With background / Default. */
|
|
4499
|
+
readonly floatingVariant: _angular_core.InputSignal<FloatingVariant>;
|
|
4188
4500
|
readonly placeholder: _angular_core.InputSignal<string>;
|
|
4189
4501
|
readonly format: _angular_core.InputSignal<TimepickerFormat>;
|
|
4190
4502
|
readonly size: _angular_core.InputSignal<TimepickerSize>;
|
|
@@ -4296,7 +4608,7 @@ declare class OlTimepicker implements ControlValueAccessor {
|
|
|
4296
4608
|
registerOnTouched(fn: any): void;
|
|
4297
4609
|
setDisabledState(isDisabled: boolean): void;
|
|
4298
4610
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlTimepicker, never>;
|
|
4299
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlTimepicker, "ol-timepicker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showAsterisk": { "alias": "showAsterisk"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "showPresets": { "alias": "showPresets"; "required": false; "isSignal": true; }; "addonType": { "alias": "addonType"; "required": false; "isSignal": true; }; "addonText": { "alias": "addonText"; "required": false; "isSignal": true; }; "addonIcon": { "alias": "addonIcon"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "timeChange": "timeChange"; "timestampChange": "timestampChange"; "isoChange": "isoChange"; "timeObjectChange": "timeObjectChange"; }, never, never, true, never>;
|
|
4611
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlTimepicker, "ol-timepicker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "labelWidth": { "alias": "labelWidth"; "required": false; "isSignal": true; }; "floatingVariant": { "alias": "floatingVariant"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showAsterisk": { "alias": "showAsterisk"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "showPresets": { "alias": "showPresets"; "required": false; "isSignal": true; }; "addonType": { "alias": "addonType"; "required": false; "isSignal": true; }; "addonText": { "alias": "addonText"; "required": false; "isSignal": true; }; "addonIcon": { "alias": "addonIcon"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "timeChange": "timeChange"; "timestampChange": "timestampChange"; "isoChange": "isoChange"; "timeObjectChange": "timeObjectChange"; }, never, never, true, never>;
|
|
4300
4612
|
}
|
|
4301
4613
|
|
|
4302
4614
|
/**
|
|
@@ -4320,6 +4632,28 @@ declare class OlAutocomplete implements ControlValueAccessor {
|
|
|
4320
4632
|
readonly value: _angular_core.ModelSignal<any>;
|
|
4321
4633
|
readonly options: _angular_core.InputSignal<any[]>;
|
|
4322
4634
|
readonly label: _angular_core.InputSignal<string>;
|
|
4635
|
+
/**
|
|
4636
|
+
* Nhãn nổi: `label` nằm TRONG khung (sau icon kính lúp), nổi lên khi focus,
|
|
4637
|
+
* đang gõ, mở danh sách hoặc đã chọn. Đa chọn: nổi lên không đẩy thẻ.
|
|
4638
|
+
*/
|
|
4639
|
+
readonly floatingLabel: _angular_core.InputSignal<boolean>;
|
|
4640
|
+
/**
|
|
4641
|
+
* Nhãn `top` (trên ô, mặc định) hay `left` (cùng hàng, bên trái). Nhãn nổi
|
|
4642
|
+
* (`floatingLabel`) thắng — bật nó thì bỏ qua input này.
|
|
4643
|
+
*/
|
|
4644
|
+
readonly labelPosition: _angular_core.InputSignal<LabelPosition>;
|
|
4645
|
+
/**
|
|
4646
|
+
* Độ rộng cột nhãn khi `labelPosition="left"` — độ dài CSS bất kỳ: `140px`,
|
|
4647
|
+
* `10rem`, `30%`. Bỏ trống = 8rem. Các ô trong cùng form đặt cùng một số thì
|
|
4648
|
+
* mép ô thẳng hàng.
|
|
4649
|
+
*/
|
|
4650
|
+
readonly labelWidth: _angular_core.InputSignal<string>;
|
|
4651
|
+
protected readonly labelLayout: _angular_core.Signal<string>;
|
|
4652
|
+
protected readonly labelBeside: _angular_core.Signal<boolean>;
|
|
4653
|
+
/** Kiểu nhãn nổi — Figma Bordered / With background / Default. */
|
|
4654
|
+
readonly floatingVariant: _angular_core.InputSignal<FloatingVariant>;
|
|
4655
|
+
/** Có giá trị để nhãn nổi: đã chọn (một hay nhiều) hoặc đang có chữ gõ. */
|
|
4656
|
+
protected readonly hasFloatValue: _angular_core.Signal<boolean>;
|
|
4323
4657
|
readonly placeholder: _angular_core.InputSignal<string>;
|
|
4324
4658
|
readonly labelKey: _angular_core.InputSignal<string>;
|
|
4325
4659
|
readonly valueKey: _angular_core.InputSignal<string>;
|
|
@@ -4337,7 +4671,7 @@ declare class OlAutocomplete implements ControlValueAccessor {
|
|
|
4337
4671
|
protected readonly resolvedSize: _angular_core.Signal<FieldSize>;
|
|
4338
4672
|
/**
|
|
4339
4673
|
* Đệm ngang theo BẢNG CHUẨN họ form. Chỉ dùng khi KHÔNG `multiple` —
|
|
4340
|
-
* chế độ nhiều thẻ
|
|
4674
|
+
* chế độ nhiều thẻ dùng `boxPaddingClass`.
|
|
4341
4675
|
*
|
|
4342
4676
|
* Ba lỗi cũ gộp làm một chỗ này (đo /autocomplete 2026-09-24):
|
|
4343
4677
|
* sm `[class.px-2.5]` -> Angular CẮT ở dấu chấm, render `px-2` = 8px
|
|
@@ -4346,6 +4680,26 @@ declare class OlAutocomplete implements ControlValueAccessor {
|
|
|
4346
4680
|
* xl có `px-4` nhưng nằm ở `[class.px-4]` rời, dễ lệch khỏi ba cỡ kia.
|
|
4347
4681
|
*/
|
|
4348
4682
|
protected readonly fieldPaddingClass: _angular_core.Signal<string>;
|
|
4683
|
+
/**
|
|
4684
|
+
* Đệm khung. Chọn nhiều: icon kính lúp vẫn là phần tử đầu nên lề đầu theo
|
|
4685
|
+
* cỡ như ô đơn (bản cũ `ps-1.5` để icon cách mép 6px, ô đơn 12px — hai ô
|
|
4686
|
+
* cạnh nhau lệch nhau rõ). Lề cuối chừa chỗ cụm nút absolute: lề cỡ + icon
|
|
4687
|
+
* 16px + `FIELD_ICON_GAP` 8px.
|
|
4688
|
+
*/
|
|
4689
|
+
protected readonly boxPaddingClass: _angular_core.Signal<string>;
|
|
4690
|
+
/**
|
|
4691
|
+
* Cụm nút cuối (xoá / chevron / spinner). Rộng icon 16px + `ps-0.5` để chữ
|
|
4692
|
+
* ↔ icon đúng 8px (`gap-1.5` của khung + 2px) — bản cũ `w-7` ra 18px.
|
|
4693
|
+
* `justify-end`: spinner 12px vẫn neo mép phải như icon.
|
|
4694
|
+
*/
|
|
4695
|
+
protected readonly controlClass: _angular_core.Signal<string>;
|
|
4696
|
+
/**
|
|
4697
|
+
* Đã có thẻ (chọn nhiều): khi KHÔNG gõ, ô gõ co về 0 (`min-w-0`, vẫn
|
|
4698
|
+
* `flex-1`) nên luôn ở cùng dòng chip cuối — không đẻ ra một dòng trống.
|
|
4699
|
+
* Focus để gõ thì mới cần chỗ (`focus:min-w-16`), lúc đó xuống dòng là đúng.
|
|
4700
|
+
* Đo 2026-09-29: dòng chip cuối còn 43px, `min-w-12` (48px) vẫn rớt.
|
|
4701
|
+
*/
|
|
4702
|
+
protected readonly hasChips: _angular_core.Signal<boolean>;
|
|
4349
4703
|
/**
|
|
4350
4704
|
* Cỡ chữ theo BẢNG CHUẨN. Trước đây `[class.text-base]` chỉ khai cho `lg`,
|
|
4351
4705
|
* `xl` không có nhánh nào nên rơi về 16px MẶC ĐỊNH của trình duyệt — trùng
|
|
@@ -4525,7 +4879,7 @@ declare class OlAutocomplete implements ControlValueAccessor {
|
|
|
4525
4879
|
registerOnTouched(fn: any): void;
|
|
4526
4880
|
setDisabledState(isDisabled: boolean): void;
|
|
4527
4881
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAutocomplete, never>;
|
|
4528
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlAutocomplete, "ol-autocomplete", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "labelKey": { "alias": "labelKey"; "required": false; "isSignal": true; }; "valueKey": { "alias": "valueKey"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showAsterisk": { "alias": "showAsterisk"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "allowCreate": { "alias": "allowCreate"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "menuClass": { "alias": "menuClass"; "required": false; "isSignal": true; }; "matchTriggerWidth": { "alias": "matchTriggerWidth"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "remoteSearch": { "alias": "remoteSearch"; "required": false; "isSignal": true; }; "minTermLength": { "alias": "minTermLength"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "typeToSearchText": { "alias": "typeToSearchText"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "createOption": "createOption"; "search": "search"; "opened": "opened"; "closed": "closed"; "cleared": "cleared"; "added": "added"; "removed": "removed"; "selectionChange": "selectionChange"; }, ["optionTemplate"], never, true, never>;
|
|
4882
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlAutocomplete, "ol-autocomplete", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "labelWidth": { "alias": "labelWidth"; "required": false; "isSignal": true; }; "floatingVariant": { "alias": "floatingVariant"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "labelKey": { "alias": "labelKey"; "required": false; "isSignal": true; }; "valueKey": { "alias": "valueKey"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showAsterisk": { "alias": "showAsterisk"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "allowCreate": { "alias": "allowCreate"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "menuClass": { "alias": "menuClass"; "required": false; "isSignal": true; }; "matchTriggerWidth": { "alias": "matchTriggerWidth"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "remoteSearch": { "alias": "remoteSearch"; "required": false; "isSignal": true; }; "minTermLength": { "alias": "minTermLength"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "typeToSearchText": { "alias": "typeToSearchText"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "createOption": "createOption"; "search": "search"; "opened": "opened"; "closed": "closed"; "cleared": "cleared"; "added": "added"; "removed": "removed"; "selectionChange": "selectionChange"; }, ["optionTemplate"], never, true, never>;
|
|
4529
4883
|
}
|
|
4530
4884
|
|
|
4531
4885
|
declare class OlKbd {
|
|
@@ -4791,6 +5145,30 @@ declare class OlModalFooter {
|
|
|
4791
5145
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlModalFooter, "ol-modal-footer", never, { "layout": { "alias": "layout"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
4792
5146
|
}
|
|
4793
5147
|
|
|
5148
|
+
/**
|
|
5149
|
+
* Mốc gập menu vào ☰, theo bề rộng THANH. `xl` (78rem ≈ 1248px) là mặc định cũ.
|
|
5150
|
+
* `md` (48rem = 768px) / `lg` (64rem = 1024px) cho thanh muốn giữ menu lâu hơn —
|
|
5151
|
+
* thường kèm `compactItems`, vì menu đầy đủ chữ hiếm khi vừa 768px.
|
|
5152
|
+
*/
|
|
5153
|
+
type NavbarCollapseAt = 'md' | 'lg' | 'xl';
|
|
5154
|
+
/**
|
|
5155
|
+
* Ba nấc hiển thị khi `compactItems` bật — thanh ĐO chỗ trống thật và chọn nấc
|
|
5156
|
+
* đầy đủ nhất còn vừa, ghi vào `data-density` trên gốc `<nav>`:
|
|
5157
|
+
*
|
|
5158
|
+
* - `full` — đủ hết.
|
|
5159
|
+
* - `medium` — vẫn ĐỦ CHỮ và icon menu; bỏ phần PHỤ của nơi gọi.
|
|
5160
|
+
* - `text` — đủ chữ, bỏ icon đầu mục (−24px mỗi mục).
|
|
5161
|
+
* - `compact` — mục có icon chỉ còn icon (chữ `sr-only`, có `title`).
|
|
5162
|
+
*
|
|
5163
|
+
* Từ `medium` trở xuống gốc có thêm `data-condensed`: nơi gọi ẩn phần phụ
|
|
5164
|
+
* (dòng phụ dưới logo, nhãn "Năm học:"…) bằng MỘT class
|
|
5165
|
+
* `group-data-[condensed]/navbar:hidden`, không phải liệt kê từng nấc.
|
|
5166
|
+
*
|
|
5167
|
+
* Bản trước đổi sang icon ở mốc CỨNG 78rem: thanh 1180px chỉ thiếu 3px là vừa
|
|
5168
|
+
* đủ chữ mà vẫn thành icon, để trống một khoảng lớn giữa menu và nút (báo
|
|
5169
|
+
* 2026-09-28 kèm ảnh).
|
|
5170
|
+
*/
|
|
5171
|
+
type NavbarDensity = 'full' | 'medium' | 'text' | 'compact';
|
|
4794
5172
|
declare class OlNavbar {
|
|
4795
5173
|
readonly brandLogo: _angular_core.InputSignal<string>;
|
|
4796
5174
|
readonly brandName: _angular_core.InputSignal<string>;
|
|
@@ -4799,6 +5177,13 @@ declare class OlNavbar {
|
|
|
4799
5177
|
readonly fluid: _angular_core.InputSignal<boolean>;
|
|
4800
5178
|
readonly showSearch: _angular_core.InputSignal<boolean>;
|
|
4801
5179
|
readonly searchPlaceholder: _angular_core.InputSignal<string>;
|
|
5180
|
+
/** Thanh hẹp hơn mốc này thì mục menu gập vào ☰. Xem `NavbarCollapseAt`. */
|
|
5181
|
+
readonly collapseAt: _angular_core.InputSignal<NavbarCollapseAt>;
|
|
5182
|
+
/**
|
|
5183
|
+
* Tự co theo chỗ trống thật (`full` → `medium` → `compact`, xem
|
|
5184
|
+
* `NavbarDensity`) thay vì gập menu. Thường đi kèm `collapseAt="md"`/`"lg"`.
|
|
5185
|
+
*/
|
|
5186
|
+
readonly compactItems: _angular_core.InputSignal<boolean>;
|
|
4802
5187
|
readonly isCollapsed: _angular_core.ModelSignal<boolean>;
|
|
4803
5188
|
readonly onSearch: _angular_core.OutputEmitterRef<string>;
|
|
4804
5189
|
readonly onToggleMobileMenu: _angular_core.OutputEmitterRef<boolean>;
|
|
@@ -4814,6 +5199,16 @@ declare class OlNavbar {
|
|
|
4814
5199
|
constructor();
|
|
4815
5200
|
/** Chiều cao khối mục xếp dọc (0 khi không xếp dọc) → `--ol-nav-stack-h`. */
|
|
4816
5201
|
private observeStackHeight;
|
|
5202
|
+
private observeDensity;
|
|
5203
|
+
/**
|
|
5204
|
+
* Thử từ nấc đầy đủ nhất xuống, dừng ở nấc đầu tiên vừa hàng. Đặt thuộc tính
|
|
5205
|
+
* rồi đọc kích thước NGAY (ép trình duyệt tính lại) nên không nháy khung nào
|
|
5206
|
+
* — trạng thái cuối được gán trước khi vẽ.
|
|
5207
|
+
*
|
|
5208
|
+
* Đo bằng `scrollWidth`: logo có `min-w-0 truncate`, bị ép co thì
|
|
5209
|
+
* `offsetWidth` nhỏ đi và phép đo báo "vừa" sai.
|
|
5210
|
+
*/
|
|
5211
|
+
updateDensity(): void;
|
|
4817
5212
|
private isStacked;
|
|
4818
5213
|
/**
|
|
4819
5214
|
* Đo lại mỗi lần mở ☰, không chỉ lúc đầu: nội dung chiếu vào có thể nằm
|
|
@@ -4828,8 +5223,17 @@ declare class OlNavbar {
|
|
|
4828
5223
|
* di động. Bản trước chỉ ẩn chúng, nên 5/7 thanh trên /navbar và /blocks bấm
|
|
4829
5224
|
* ☰ ra bảng trống (đo iPhone 13 giả lập, 2026-09-28).
|
|
4830
5225
|
*/
|
|
5226
|
+
protected readonly bp: _angular_core.Signal<{
|
|
5227
|
+
row: string;
|
|
5228
|
+
wide: string;
|
|
5229
|
+
stackReset: string;
|
|
5230
|
+
hide: string;
|
|
5231
|
+
}>;
|
|
5232
|
+
/** Hàng trên: lưới ở khung hẹp (logo | nút), flex từ mốc gập trở lên. */
|
|
5233
|
+
readonly rowClasses: _angular_core.Signal<string>;
|
|
5234
|
+
readonly toggleClasses: _angular_core.Signal<string>;
|
|
4831
5235
|
readonly navWrapClasses: _angular_core.Signal<string>;
|
|
4832
|
-
readonly mobilePanelClasses: _angular_core.Signal<
|
|
5236
|
+
readonly mobilePanelClasses: _angular_core.Signal<string>;
|
|
4833
5237
|
readonly navbarClasses: _angular_core.Signal<string>;
|
|
4834
5238
|
readonly containerClasses: _angular_core.Signal<"w-full px-4 @[40rem]:px-6" | "max-w-7xl mx-auto px-4 @[40rem]:px-6 @5xl:px-8">;
|
|
4835
5239
|
toggleMobileMenu(): void;
|
|
@@ -4837,7 +5241,7 @@ declare class OlNavbar {
|
|
|
4837
5241
|
handleSearchInput(event: Event): void;
|
|
4838
5242
|
handleGlobalKeydown(event: KeyboardEvent): void;
|
|
4839
5243
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlNavbar, never>;
|
|
4840
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlNavbar, "ol-navbar", never, { "brandLogo": { "alias": "brandLogo"; "required": false; "isSignal": true; }; "brandName": { "alias": "brandName"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "fluid": { "alias": "fluid"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "isCollapsed": { "alias": "isCollapsed"; "required": false; "isSignal": true; }; }, { "isCollapsed": "isCollapsedChange"; "onSearch": "onSearch"; "onToggleMobileMenu": "onToggleMobileMenu"; }, never, ["[slot=brand], [brand]", "[slot=navigation], [navigation], ol-navbar-item, ol-nav-dropdown", "[slot=actions], [actions]", "[slot=mobile-user]", "[slot=mobile], [slot=mobile-links]", "[slot=mobile-actions]", "[slot=mobile-footer]"], true, never>;
|
|
5244
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlNavbar, "ol-navbar", never, { "brandLogo": { "alias": "brandLogo"; "required": false; "isSignal": true; }; "brandName": { "alias": "brandName"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "fluid": { "alias": "fluid"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "collapseAt": { "alias": "collapseAt"; "required": false; "isSignal": true; }; "compactItems": { "alias": "compactItems"; "required": false; "isSignal": true; }; "isCollapsed": { "alias": "isCollapsed"; "required": false; "isSignal": true; }; }, { "isCollapsed": "isCollapsedChange"; "onSearch": "onSearch"; "onToggleMobileMenu": "onToggleMobileMenu"; }, never, ["[slot=brand], [brand]", "[slot=navigation], [navigation], ol-navbar-item, ol-nav-dropdown", "[slot=actions], [actions]", "[slot=mobile-user]", "[slot=mobile], [slot=mobile-links]", "[slot=mobile-actions]", "[slot=mobile-footer]"], true, never>;
|
|
4841
5245
|
}
|
|
4842
5246
|
|
|
4843
5247
|
declare class OlNavbarItem {
|
|
@@ -7909,6 +8313,6 @@ declare class OlOverlayContainer {
|
|
|
7909
8313
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
7910
8314
|
}
|
|
7911
8315
|
|
|
7912
|
-
export { CHAT_BUBBLE_STATUS, FIELD_ASTERISK, FIELD_DISABLED, FIELD_HEIGHT, FIELD_HELPER, FIELD_HELPER_GAP, FIELD_LABEL, FIELD_LABEL_GAP, FIELD_MIN_HEIGHT, FIELD_PADDING_X, FIELD_RADIUS, FIELD_STATE, FIELD_TEXT, FILE_KIND_META, MONTHS_FULL_EN, MONTHS_FULL_VI, MONTHS_SHORT_VI, 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, OlEmpty, OlFileDropzone, OlFileInput, OlFileItem, OlFileUpload,
|
|
7913
|
-
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, DropdownTrigger, EmptySize, FieldSize, FieldState, FileInputSize, FileItemVariant, FileKind, FileKindMeta, FileRejectReason, FileRejection, FileUploadMode, FileValidationResult, FileValidationRules,
|
|
8316
|
+
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, 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, startOfDay, stripDiacritics, toUploadFile, validateFiles };
|
|
8317
|
+
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 };
|
|
7914
8318
|
//# sourceMappingURL=edmicro-olkit.d.ts.map
|