@sd-angular/core 19.0.45 → 19.0.46
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/README.md +3 -1
- package/assets/scss/core/form.scss +33 -4
- package/assets/scss/themes/_material-tokens.scss +10 -25
- package/package.json +17 -17
package/README.md
CHANGED
|
@@ -120,7 +120,9 @@ export const appConfig: ApplicationConfig = {
|
|
|
120
120
|
| `--sd-view-label-color` | `var(--sd-black400)` | Label chỉ-đọc (`sd-view`, control ở `viewed`, `sd-section-item`), class `.sd-view-label` |
|
|
121
121
|
| `--sd-view-value-color` | `var(--sd-black500)` | Giá trị chỉ-đọc, class `.sd-view-value` |
|
|
122
122
|
|
|
123
|
-
`theme()` còn ánh xạ token Material của form field, option và datepicker sang palette này (`assets/scss/themes/_material-tokens.scss`):
|
|
123
|
+
`theme()` còn ánh xạ token Material của form field, option và datepicker sang palette này (`assets/scss/themes/_material-tokens.scss`): label/caret/mũi tên select khi focus và option/ngày đang chọn dùng `--sd-primary`. Đổi `primary` trong `theme()` là các trạng thái này đổi theo.
|
|
124
|
+
|
|
125
|
+
Viền (outline) của form field luôn là `--sd-black200` ở mọi trạng thái — nghỉ, hover, focus (chỉ dày hơn) và lỗi (`assets/scss/core/form.scss`, `!important`). Field lỗi báo bằng label, message và dấu `*` màu đỏ; riêng field `hideInlineError` bị lỗi (không có message) có viền `--sd-error`.
|
|
124
126
|
|
|
125
127
|
### Custom Theme / Tuỳ chỉnh theme
|
|
126
128
|
|
|
@@ -11,8 +11,22 @@
|
|
|
11
11
|
color: map.get(color.$color_map, 'error');
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
//
|
|
15
|
-
//
|
|
14
|
+
// Xử lý màu border nhạt bớt
|
|
15
|
+
// why: viền xám ở MỌI trạng thái (nghỉ, hover, focus, lỗi) — focus chỉ dày hơn, lỗi báo bằng label và
|
|
16
|
+
// message đỏ. 19.0.45 từng đổi viền focus sang primary và viền lỗi sang đỏ; 19.0.46 trả lại giao diện
|
|
17
|
+
// cũ vì các app đang dùng không được báo trước thay đổi này.
|
|
18
|
+
.mat-mdc-notch-piece {
|
|
19
|
+
&.mdc-notched-outline__leading {
|
|
20
|
+
border-color: map.get(color.$color_map, 'black200') !important;
|
|
21
|
+
}
|
|
22
|
+
&.mdc-notched-outline__notch {
|
|
23
|
+
border-top-color: map.get(color.$color_map, 'black200') !important;
|
|
24
|
+
border-bottom-color: map.get(color.$color_map, 'black200') !important;
|
|
25
|
+
}
|
|
26
|
+
&.mdc-notched-outline__trailing {
|
|
27
|
+
border-color: map.get(color.$color_map, 'black200') !important;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
16
30
|
|
|
17
31
|
// Xử lý icon
|
|
18
32
|
.sd-suffix-icon {
|
|
@@ -113,12 +127,27 @@
|
|
|
113
127
|
}
|
|
114
128
|
}
|
|
115
129
|
|
|
116
|
-
// Bỏ padding nếu hideInlineError
|
|
117
|
-
// như mọi field khác.
|
|
130
|
+
// Bỏ padding nếu hideInlineError
|
|
118
131
|
&.hide-inline-error {
|
|
119
132
|
.mat-mdc-form-field-subscript-wrapper {
|
|
120
133
|
display: none;
|
|
121
134
|
}
|
|
135
|
+
|
|
136
|
+
// why: không có message lỗi bên dưới nên field lỗi tô viền đỏ — ngoại lệ duy nhất của viền xám ở trên.
|
|
137
|
+
&.mat-form-field-invalid {
|
|
138
|
+
.mat-mdc-notch-piece {
|
|
139
|
+
&.mdc-notched-outline__leading {
|
|
140
|
+
border-color: map.get(color.$color_map, 'error') !important;
|
|
141
|
+
}
|
|
142
|
+
&.mdc-notched-outline__notch {
|
|
143
|
+
border-top-color: map.get(color.$color_map, 'error') !important;
|
|
144
|
+
border-bottom-color: map.get(color.$color_map, 'error') !important;
|
|
145
|
+
}
|
|
146
|
+
&.mdc-notched-outline__trailing {
|
|
147
|
+
border-color: map.get(color.$color_map, 'error') !important;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
122
151
|
}
|
|
123
152
|
|
|
124
153
|
// Size normal`
|
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
// Angular Material component tokens mapped onto the Core palette.
|
|
2
2
|
//
|
|
3
|
-
// why:
|
|
4
|
-
//
|
|
5
|
-
// a grey outline under a red label. The colours now go through Material's own tokens, declared by
|
|
6
|
-
// theme() so every theme scope resolves them against its palette and a parent of a field can still
|
|
7
|
-
// override a token for its subtree.
|
|
3
|
+
// why: theme() declares these, so every theme scope resolves them against its palette and a parent of a
|
|
4
|
+
// field can still override a token for its subtree.
|
|
8
5
|
//
|
|
9
|
-
// -
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
6
|
+
// - Outline: not here. `core/form.scss` forces `--sd-black200` with `!important` on the outline pieces in
|
|
7
|
+
// every state (red only for an invalid `hideInlineError` field). 19.0.45 moved the outline onto the
|
|
8
|
+
// focus/error tokens (primary while focused, red when invalid); 19.0.46 restored the grey outline.
|
|
9
|
+
// - Focus: --sd-primary for the floating label, caret, select arrow, datepicker toggle and the filled
|
|
10
|
+
// active indicator.
|
|
11
|
+
// - Error: Material's own error colours (the Material 2 warn palette of `material-theme.scss`): red label,
|
|
12
|
+
// caret and select arrow; the filled active indicator turns --sd-error.
|
|
14
13
|
// - Options, checkmarks and datepicker: selected state in --sd-primary.
|
|
15
14
|
//
|
|
16
15
|
// Token names are the Material 19 ones (`--mdc-*-text-field-*`, `--mat-{full,minimal}-pseudo-checkbox-*`).
|
|
17
|
-
// The label references fall back to the Material 2 theme values of `material-theme.scss`.
|
|
18
16
|
|
|
19
17
|
$-text-field-prefixes: (
|
|
20
18
|
outlined: '--mdc-outlined-text-field-',
|
|
@@ -24,20 +22,8 @@ $-text-field-prefixes: (
|
|
|
24
22
|
@mixin emit() {
|
|
25
23
|
@each $appearance, $prefix in $-text-field-prefixes {
|
|
26
24
|
#{$prefix}caret-color: var(--sd-primary);
|
|
27
|
-
#{$prefix}error-caret-color: var(--sd-primary);
|
|
28
25
|
#{$prefix}focus-label-text-color: var(--sd-primary);
|
|
29
|
-
|
|
30
|
-
#{$prefix}error-label-text-color: var(#{$prefix}label-text-color, rgba(0, 0, 0, 0.6));
|
|
31
|
-
#{$prefix}error-hover-label-text-color: var(#{$prefix}hover-label-text-color, rgba(0, 0, 0, 0.87));
|
|
32
|
-
@if $appearance == outlined {
|
|
33
|
-
#{$prefix}outline-color: var(--sd-black200);
|
|
34
|
-
#{$prefix}hover-outline-color: var(--sd-black200);
|
|
35
|
-
#{$prefix}disabled-outline-color: var(--sd-black200);
|
|
36
|
-
#{$prefix}focus-outline-color: var(--sd-primary);
|
|
37
|
-
#{$prefix}error-outline-color: var(--sd-error);
|
|
38
|
-
#{$prefix}error-hover-outline-color: var(--sd-error);
|
|
39
|
-
#{$prefix}error-focus-outline-color: var(--sd-error);
|
|
40
|
-
} @else {
|
|
26
|
+
@if $appearance == filled {
|
|
41
27
|
#{$prefix}focus-active-indicator-color: var(--sd-primary);
|
|
42
28
|
#{$prefix}error-active-indicator-color: var(--sd-error);
|
|
43
29
|
#{$prefix}error-hover-active-indicator-color: var(--sd-error);
|
|
@@ -46,7 +32,6 @@ $-text-field-prefixes: (
|
|
|
46
32
|
}
|
|
47
33
|
--mat-form-field-focus-select-arrow-color: var(--sd-primary);
|
|
48
34
|
--mat-select-focused-arrow-color: var(--sd-primary);
|
|
49
|
-
--mat-select-invalid-arrow-color: var(--mat-select-enabled-arrow-color, rgba(0, 0, 0, 0.54));
|
|
50
35
|
--mat-datepicker-toggle-active-state-icon-color: var(--sd-primary);
|
|
51
36
|
|
|
52
37
|
--mat-option-selected-state-label-text-color: var(--sd-primary);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sd-angular/core",
|
|
3
|
-
"version": "19.0.
|
|
3
|
+
"version": "19.0.46",
|
|
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",
|
|
@@ -38,14 +38,14 @@
|
|
|
38
38
|
"types": "./index.d.ts",
|
|
39
39
|
"default": "./fesm2022/sd-angular-core.mjs"
|
|
40
40
|
},
|
|
41
|
-
"./configurations": {
|
|
42
|
-
"types": "./configurations/index.d.ts",
|
|
43
|
-
"default": "./fesm2022/sd-angular-core-configurations.mjs"
|
|
44
|
-
},
|
|
45
41
|
"./components": {
|
|
46
42
|
"types": "./components/index.d.ts",
|
|
47
43
|
"default": "./fesm2022/sd-angular-core-components.mjs"
|
|
48
44
|
},
|
|
45
|
+
"./configurations": {
|
|
46
|
+
"types": "./configurations/index.d.ts",
|
|
47
|
+
"default": "./fesm2022/sd-angular-core-configurations.mjs"
|
|
48
|
+
},
|
|
49
49
|
"./directives": {
|
|
50
50
|
"types": "./directives/index.d.ts",
|
|
51
51
|
"default": "./fesm2022/sd-angular-core-directives.mjs"
|
|
@@ -274,10 +274,6 @@
|
|
|
274
274
|
"types": "./forms/label/index.d.ts",
|
|
275
275
|
"default": "./fesm2022/sd-angular-core-forms-label.mjs"
|
|
276
276
|
},
|
|
277
|
-
"./forms/models": {
|
|
278
|
-
"types": "./forms/models/index.d.ts",
|
|
279
|
-
"default": "./fesm2022/sd-angular-core-forms-models.mjs"
|
|
280
|
-
},
|
|
281
277
|
"./forms/radio": {
|
|
282
278
|
"types": "./forms/radio/index.d.ts",
|
|
283
279
|
"default": "./fesm2022/sd-angular-core-forms-radio.mjs"
|
|
@@ -302,30 +298,34 @@
|
|
|
302
298
|
"types": "./modules/authom/index.d.ts",
|
|
303
299
|
"default": "./fesm2022/sd-angular-core-modules-authom.mjs"
|
|
304
300
|
},
|
|
301
|
+
"./forms/models": {
|
|
302
|
+
"types": "./forms/models/index.d.ts",
|
|
303
|
+
"default": "./fesm2022/sd-angular-core-forms-models.mjs"
|
|
304
|
+
},
|
|
305
305
|
"./modules/keycloak": {
|
|
306
306
|
"types": "./modules/keycloak/index.d.ts",
|
|
307
307
|
"default": "./fesm2022/sd-angular-core-modules-keycloak.mjs"
|
|
308
308
|
},
|
|
309
|
-
"./modules/layout": {
|
|
310
|
-
"types": "./modules/layout/index.d.ts",
|
|
311
|
-
"default": "./fesm2022/sd-angular-core-modules-layout.mjs"
|
|
312
|
-
},
|
|
313
309
|
"./modules/permission": {
|
|
314
310
|
"types": "./modules/permission/index.d.ts",
|
|
315
311
|
"default": "./fesm2022/sd-angular-core-modules-permission.mjs"
|
|
316
312
|
},
|
|
313
|
+
"./modules/layout": {
|
|
314
|
+
"types": "./modules/layout/index.d.ts",
|
|
315
|
+
"default": "./fesm2022/sd-angular-core-modules-layout.mjs"
|
|
316
|
+
},
|
|
317
317
|
"./services/api": {
|
|
318
318
|
"types": "./services/api/index.d.ts",
|
|
319
319
|
"default": "./fesm2022/sd-angular-core-services-api.mjs"
|
|
320
320
|
},
|
|
321
|
-
"./services/cache": {
|
|
322
|
-
"types": "./services/cache/index.d.ts",
|
|
323
|
-
"default": "./fesm2022/sd-angular-core-services-cache.mjs"
|
|
324
|
-
},
|
|
325
321
|
"./services/confirm": {
|
|
326
322
|
"types": "./services/confirm/index.d.ts",
|
|
327
323
|
"default": "./fesm2022/sd-angular-core-services-confirm.mjs"
|
|
328
324
|
},
|
|
325
|
+
"./services/cache": {
|
|
326
|
+
"types": "./services/cache/index.d.ts",
|
|
327
|
+
"default": "./fesm2022/sd-angular-core-services-cache.mjs"
|
|
328
|
+
},
|
|
329
329
|
"./services/date-time": {
|
|
330
330
|
"types": "./services/date-time/index.d.ts",
|
|
331
331
|
"default": "./fesm2022/sd-angular-core-services-date-time.mjs"
|