@sd-angular/core 19.0.15 → 19.0.16
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/sd-angular-core-components-form-generic.mjs +6 -6
- package/fesm2022/sd-angular-core-components-form-generic.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-query-bar.mjs +3 -3
- package/fesm2022/sd-angular-core-components-query-bar.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-query-builder.mjs +1 -1
- package/fesm2022/sd-angular-core-components-query-builder.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-table.mjs +3 -3
- package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-select.mjs +82 -5
- package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
- package/fesm2022/sd-angular-core-i18n.mjs +5 -0
- package/fesm2022/sd-angular-core-i18n.mjs.map +1 -1
- package/forms/select/src/select.component.d.ts +24 -3
- package/i18n/src/en.d.ts +1 -0
- package/package.json +5 -5
|
@@ -49,8 +49,8 @@ export declare class SdSelect<T extends object | string | number = Record<string
|
|
|
49
49
|
label: import("@angular/core").InputSignal<string | undefined>;
|
|
50
50
|
helperText: import("@angular/core").InputSignal<string | undefined>;
|
|
51
51
|
placeholder: import("@angular/core").InputSignal<string | undefined>;
|
|
52
|
-
valueField: import("@angular/core").InputSignal<T extends object ? { [Key in keyof T & string]: T[Key] extends string | number | boolean | Function | Date | null | undefined ? Key : T[Key] extends any[] ? Key : T[Key] extends object ? Key | `${Key}.${T[Key] extends infer T_1 ? T_1 extends T[Key] ? T_1 extends object ? { [Key_1 in keyof T_1 & string]: T_1[Key_1] extends string | number | boolean | Function | Date | null | undefined ? Key_1 : T_1[Key_1] extends any[] ? Key_1 : T_1[Key_1] extends object ? Key_1 | `${Key_1}.${T_1[Key_1] extends infer T_2 ? T_2 extends T_1[Key_1] ? T_2 extends object ? { [Key_2 in keyof T_2 & string]: T_2[Key_2] extends string | number | boolean | Function | Date | null | undefined ? Key_2 : T_2[Key_2] extends any[] ? Key_2 : T_2[Key_2] extends object ? Key_2 | `${Key_2}.${T_2[Key_2] extends infer T_3 ? T_3 extends T_2[Key_2] ? T_3 extends object ? { [Key_3 in keyof T_3 & string]: T_3[Key_3] extends string | number | boolean | Function | Date | null | undefined ? Key_3 : T_3[Key_3] extends any[] ? Key_3 : T_3[Key_3] extends object ? Key_3 : Key_3; }[keyof T_3 & string] : string : never : never}` : Key_2; }[keyof T_2 & string] : string : never : never}` : Key_1; }[keyof T_1 & string] : string : never : never}` : Key; }[keyof T & string] : string>;
|
|
53
|
-
displayField: import("@angular/core").InputSignal<T extends object ? { [Key in keyof T & string]: T[Key] extends string | number | boolean | Function | Date | null | undefined ? Key : T[Key] extends any[] ? Key : T[Key] extends object ? Key | `${Key}.${T[Key] extends infer T_1 ? T_1 extends T[Key] ? T_1 extends object ? { [Key_1 in keyof T_1 & string]: T_1[Key_1] extends string | number | boolean | Function | Date | null | undefined ? Key_1 : T_1[Key_1] extends any[] ? Key_1 : T_1[Key_1] extends object ? Key_1 | `${Key_1}.${T_1[Key_1] extends infer T_2 ? T_2 extends T_1[Key_1] ? T_2 extends object ? { [Key_2 in keyof T_2 & string]: T_2[Key_2] extends string | number | boolean | Function | Date | null | undefined ? Key_2 : T_2[Key_2] extends any[] ? Key_2 : T_2[Key_2] extends object ? Key_2 | `${Key_2}.${T_2[Key_2] extends infer T_3 ? T_3 extends T_2[Key_2] ? T_3 extends object ? { [Key_3 in keyof T_3 & string]: T_3[Key_3] extends string | number | boolean | Function | Date | null | undefined ? Key_3 : T_3[Key_3] extends any[] ? Key_3 : T_3[Key_3] extends object ? Key_3 : Key_3; }[keyof T_3 & string] : string : never : never}` : Key_2; }[keyof T_2 & string] : string : never : never}` : Key_1; }[keyof T_1 & string] : string : never : never}` : Key; }[keyof T & string] : string>;
|
|
52
|
+
valueField: import("@angular/core").InputSignal<"" | (T extends object ? { [Key in keyof T & string]: T[Key] extends string | number | boolean | Function | Date | null | undefined ? Key : T[Key] extends any[] ? Key : T[Key] extends object ? Key | `${Key}.${T[Key] extends infer T_1 ? T_1 extends T[Key] ? T_1 extends object ? { [Key_1 in keyof T_1 & string]: T_1[Key_1] extends string | number | boolean | Function | Date | null | undefined ? Key_1 : T_1[Key_1] extends any[] ? Key_1 : T_1[Key_1] extends object ? Key_1 | `${Key_1}.${T_1[Key_1] extends infer T_2 ? T_2 extends T_1[Key_1] ? T_2 extends object ? { [Key_2 in keyof T_2 & string]: T_2[Key_2] extends string | number | boolean | Function | Date | null | undefined ? Key_2 : T_2[Key_2] extends any[] ? Key_2 : T_2[Key_2] extends object ? Key_2 | `${Key_2}.${T_2[Key_2] extends infer T_3 ? T_3 extends T_2[Key_2] ? T_3 extends object ? { [Key_3 in keyof T_3 & string]: T_3[Key_3] extends string | number | boolean | Function | Date | null | undefined ? Key_3 : T_3[Key_3] extends any[] ? Key_3 : T_3[Key_3] extends object ? Key_3 : Key_3; }[keyof T_3 & string] : string : never : never}` : Key_2; }[keyof T_2 & string] : string : never : never}` : Key_1; }[keyof T_1 & string] : string : never : never}` : Key; }[keyof T & string] : string)>;
|
|
53
|
+
displayField: import("@angular/core").InputSignal<"" | (T extends object ? { [Key in keyof T & string]: T[Key] extends string | number | boolean | Function | Date | null | undefined ? Key : T[Key] extends any[] ? Key : T[Key] extends object ? Key | `${Key}.${T[Key] extends infer T_1 ? T_1 extends T[Key] ? T_1 extends object ? { [Key_1 in keyof T_1 & string]: T_1[Key_1] extends string | number | boolean | Function | Date | null | undefined ? Key_1 : T_1[Key_1] extends any[] ? Key_1 : T_1[Key_1] extends object ? Key_1 | `${Key_1}.${T_1[Key_1] extends infer T_2 ? T_2 extends T_1[Key_1] ? T_2 extends object ? { [Key_2 in keyof T_2 & string]: T_2[Key_2] extends string | number | boolean | Function | Date | null | undefined ? Key_2 : T_2[Key_2] extends any[] ? Key_2 : T_2[Key_2] extends object ? Key_2 | `${Key_2}.${T_2[Key_2] extends infer T_3 ? T_3 extends T_2[Key_2] ? T_3 extends object ? { [Key_3 in keyof T_3 & string]: T_3[Key_3] extends string | number | boolean | Function | Date | null | undefined ? Key_3 : T_3[Key_3] extends any[] ? Key_3 : T_3[Key_3] extends object ? Key_3 : Key_3; }[keyof T_3 & string] : string : never : never}` : Key_2; }[keyof T_2 & string] : string : never : never}` : Key_1; }[keyof T_1 & string] : string : never : never}` : Key; }[keyof T & string] : string)>;
|
|
54
54
|
disabledField: import("@angular/core").InputSignal<"" | (T extends object ? { [Key in keyof T & string]: T[Key] extends string | number | boolean | Function | Date | null | undefined ? Key : T[Key] extends any[] ? Key : T[Key] extends object ? Key | `${Key}.${T[Key] extends infer T_1 ? T_1 extends T[Key] ? T_1 extends object ? { [Key_1 in keyof T_1 & string]: T_1[Key_1] extends string | number | boolean | Function | Date | null | undefined ? Key_1 : T_1[Key_1] extends any[] ? Key_1 : T_1[Key_1] extends object ? Key_1 | `${Key_1}.${T_1[Key_1] extends infer T_2 ? T_2 extends T_1[Key_1] ? T_2 extends object ? { [Key_2 in keyof T_2 & string]: T_2[Key_2] extends string | number | boolean | Function | Date | null | undefined ? Key_2 : T_2[Key_2] extends any[] ? Key_2 : T_2[Key_2] extends object ? Key_2 | `${Key_2}.${T_2[Key_2] extends infer T_3 ? T_3 extends T_2[Key_2] ? T_3 extends object ? { [Key_3 in keyof T_3 & string]: T_3[Key_3] extends string | number | boolean | Function | Date | null | undefined ? Key_3 : T_3[Key_3] extends any[] ? Key_3 : T_3[Key_3] extends object ? Key_3 : Key_3; }[keyof T_3 & string] : string : never : never}` : Key_2; }[keyof T_2 & string] : string : never : never}` : Key_1; }[keyof T_1 & string] : string : never : never}` : Key; }[keyof T & string] : string)>;
|
|
55
55
|
cacheChecksum: import("@angular/core").InputSignal<any>;
|
|
56
56
|
limit: import("@angular/core").InputSignal<number>;
|
|
@@ -62,6 +62,11 @@ export declare class SdSelect<T extends object | string | number = Record<string
|
|
|
62
62
|
/** Display mode: `false` edit · `true` static view · `'inline'` view + click-to-edit (bare editor). */
|
|
63
63
|
viewed: import("@angular/core").InputSignalWithTransform<SdViewed, SdViewedInput>;
|
|
64
64
|
multiple: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
65
|
+
/**
|
|
66
|
+
* Hiện option "Chọn tất cả" đầu panel (chỉ multiple + items là mảng tĩnh/Signal — ẩn với
|
|
67
|
+
* SdSearch lazy vì dataset không xác định). Opt-in, default `false`.
|
|
68
|
+
*/
|
|
69
|
+
showSelectAll: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
65
70
|
/**
|
|
66
71
|
* Whether the `viewed='inline'` text face shows a hover clear-× to empty the value.
|
|
67
72
|
* Default `true`. Set `false` where the HOST owns removal (e.g. `<sd-query-bar>` chips,
|
|
@@ -107,6 +112,16 @@ export declare class SdSelect<T extends object | string | number = Record<string
|
|
|
107
112
|
normalizedValue: Signal<string | number | boolean | (string | number | boolean)[] | null | undefined>;
|
|
108
113
|
filtered: Signal<boolean>;
|
|
109
114
|
delayTime: Signal<0 | 500>;
|
|
115
|
+
/**
|
|
116
|
+
* Scope của "Chọn tất cả": item enabled khớp search text hiện tại, tính trên MẢNG NGUỒN
|
|
117
|
+
* `actualItems()`.
|
|
118
|
+
*/
|
|
119
|
+
readonly selectAllScope: Signal<T[]>;
|
|
120
|
+
/** Row "Chọn tất cả" chỉ render khi opt-in + multiple + items tĩnh + scope có item để thao tác. */
|
|
121
|
+
readonly selectAllVisible: Signal<boolean>;
|
|
122
|
+
/** Trạng thái checkbox "Chọn tất cả", tính trên items ENABLED trong scope (item disabled bỏ qua). */
|
|
123
|
+
readonly selectAllState: Signal<"checked" | "indeterminate" | "unchecked">;
|
|
124
|
+
readonly selectAllLabel: Signal<string>;
|
|
110
125
|
itemValue: (item: T) => unknown;
|
|
111
126
|
itemDisplay: (item: T) => string;
|
|
112
127
|
itemDisabled: (item: T) => boolean;
|
|
@@ -117,6 +132,12 @@ export declare class SdSelect<T extends object | string | number = Record<string
|
|
|
117
132
|
constructor();
|
|
118
133
|
ngOnInit(): void;
|
|
119
134
|
onSelectionChange: (change: MatSelectChange) => void;
|
|
135
|
+
/**
|
|
136
|
+
* Toggle "Chọn tất cả" theo scope hiện tại (items enabled khớp search):
|
|
137
|
+
* - Đang `checked` → BỎ chọn các value trong scope (giữ value ngoài scope, kể cả item disabled đã chọn).
|
|
138
|
+
* - Ngược lại → CHỌN THÊM toàn bộ scope, union với selection hiện có (additive khi đang search).
|
|
139
|
+
*/
|
|
140
|
+
toggleSelectAll: () => void;
|
|
120
141
|
reValidate: () => void;
|
|
121
142
|
clear: ($event?: any) => void;
|
|
122
143
|
onClick: () => void;
|
|
@@ -127,5 +148,5 @@ export declare class SdSelect<T extends object | string | number = Record<string
|
|
|
127
148
|
open: () => void;
|
|
128
149
|
onOpenedChange: (isOpened: boolean) => void;
|
|
129
150
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdSelect<any>, never>;
|
|
130
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdSelect<any>, "sd-select", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required":
|
|
151
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SdSelect<any>, "sd-select", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "displayField": { "alias": "displayField"; "required": false; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "cacheChecksum": { "alias": "cacheChecksum"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "hyperlink": { "alias": "hyperlink"; "required": false; "isSignal": true; }; "minWidthPanel": { "alias": "minWidthPanel"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "validator": { "alias": "validator"; "required": false; "isSignal": true; }; "inlineError": { "alias": "inlineError"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; "sdSelection": "sdSelection"; }, ["sdLabelTemplate", "sdValueTemplate", "sdSelectedTemplate", "itemDef", "sdViewDef", "footerActions"], ["[sdLabel]"], true, never>;
|
|
131
152
|
}
|
package/i18n/src/en.d.ts
CHANGED
|
@@ -138,6 +138,7 @@ export declare const EN_MESSAGES: {
|
|
|
138
138
|
readonly 'core.form.checkbox.checked': "Yes";
|
|
139
139
|
readonly 'core.form.checkbox.unchecked': "No";
|
|
140
140
|
readonly 'core.form.select.required': "Please enter information";
|
|
141
|
+
readonly 'core.form.select.selectAll': "Select all";
|
|
141
142
|
readonly 'core.form.textarea.required': "Please enter information";
|
|
142
143
|
readonly 'core.form.textarea.maxlength': "Maximum characters: {max}";
|
|
143
144
|
readonly 'core.form.textarea.invalid-pattern': "Invalid format";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sd-angular/core",
|
|
3
|
-
"version": "19.0.
|
|
3
|
+
"version": "19.0.16",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^19.0.0 || ^20.0.0 || ^21.0.0",
|
|
6
6
|
"@angular/core": "^19.0.0 || ^20.0.0 || ^21.0.0",
|
|
@@ -36,14 +36,14 @@
|
|
|
36
36
|
"types": "./components/index.d.ts",
|
|
37
37
|
"default": "./fesm2022/sd-angular-core-components.mjs"
|
|
38
38
|
},
|
|
39
|
-
"./directives": {
|
|
40
|
-
"types": "./directives/index.d.ts",
|
|
41
|
-
"default": "./fesm2022/sd-angular-core-directives.mjs"
|
|
42
|
-
},
|
|
43
39
|
"./configurations": {
|
|
44
40
|
"types": "./configurations/index.d.ts",
|
|
45
41
|
"default": "./fesm2022/sd-angular-core-configurations.mjs"
|
|
46
42
|
},
|
|
43
|
+
"./directives": {
|
|
44
|
+
"types": "./directives/index.d.ts",
|
|
45
|
+
"default": "./fesm2022/sd-angular-core-directives.mjs"
|
|
46
|
+
},
|
|
47
47
|
"./forms": {
|
|
48
48
|
"types": "./forms/index.d.ts",
|
|
49
49
|
"default": "./fesm2022/sd-angular-core-forms.mjs"
|