@taiga-ui/core 4.6.0 → 4.7.0-canary.5ce088a

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.
Files changed (65) hide show
  1. package/components/calendar/calendar-sheet.component.d.ts +3 -3
  2. package/components/calendar/calendar-year.component.d.ts +3 -6
  3. package/components/data-list/data-list.component.d.ts +2 -0
  4. package/components/textfield/select.directive.d.ts +4 -4
  5. package/components/textfield/textfield.component.d.ts +3 -1
  6. package/components/textfield/textfield.directive.d.ts +11 -8
  7. package/directives/appearance/appearance.bindings.d.ts +3 -0
  8. package/directives/appearance/appearance.directive.d.ts +7 -2
  9. package/directives/appearance/appearance.options.d.ts +2 -1
  10. package/directives/appearance/with-appearance.d.ts +1 -1
  11. package/directives/dropdown/dropdown-options.directive.d.ts +1 -1
  12. package/directives/hint/hint-describe.directive.d.ts +1 -0
  13. package/directives/hint/hint-options.directive.d.ts +1 -1
  14. package/esm2022/components/calendar/calendar-sheet.component.mjs +27 -29
  15. package/esm2022/components/calendar/calendar-year.component.mjs +20 -50
  16. package/esm2022/components/data-list/data-list.component.mjs +10 -4
  17. package/esm2022/components/root/root.component.mjs +8 -2
  18. package/esm2022/components/textfield/select.directive.mjs +2 -3
  19. package/esm2022/components/textfield/textfield.component.mjs +9 -5
  20. package/esm2022/components/textfield/textfield.directive.mjs +11 -7
  21. package/esm2022/directives/appearance/appearance.bindings.mjs +4 -1
  22. package/esm2022/directives/appearance/appearance.directive.mjs +24 -7
  23. package/esm2022/directives/appearance/appearance.options.mjs +1 -1
  24. package/esm2022/directives/appearance/with-appearance.mjs +3 -2
  25. package/esm2022/directives/dropdown/dropdown-options.directive.mjs +3 -2
  26. package/esm2022/directives/group/group.directive.mjs +2 -2
  27. package/esm2022/directives/hint/hint-describe.directive.mjs +5 -4
  28. package/esm2022/directives/hint/hint-options.directive.mjs +3 -2
  29. package/esm2022/pipes/flag/flag.pipe.mjs +1 -1
  30. package/fesm2022/taiga-ui-core-components-calendar.mjs +44 -76
  31. package/fesm2022/taiga-ui-core-components-calendar.mjs.map +1 -1
  32. package/fesm2022/taiga-ui-core-components-data-list.mjs +9 -3
  33. package/fesm2022/taiga-ui-core-components-data-list.mjs.map +1 -1
  34. package/fesm2022/taiga-ui-core-components-root.mjs +7 -1
  35. package/fesm2022/taiga-ui-core-components-root.mjs.map +1 -1
  36. package/fesm2022/taiga-ui-core-components-textfield.mjs +19 -12
  37. package/fesm2022/taiga-ui-core-components-textfield.mjs.map +1 -1
  38. package/fesm2022/taiga-ui-core-directives-appearance.mjs +29 -8
  39. package/fesm2022/taiga-ui-core-directives-appearance.mjs.map +1 -1
  40. package/fesm2022/taiga-ui-core-directives-dropdown.mjs +2 -2
  41. package/fesm2022/taiga-ui-core-directives-dropdown.mjs.map +1 -1
  42. package/fesm2022/taiga-ui-core-directives-group.mjs +2 -2
  43. package/fesm2022/taiga-ui-core-directives-group.mjs.map +1 -1
  44. package/fesm2022/taiga-ui-core-directives-hint.mjs +5 -4
  45. package/fesm2022/taiga-ui-core-directives-hint.mjs.map +1 -1
  46. package/fesm2022/taiga-ui-core-pipes-flag.mjs.map +1 -1
  47. package/package.json +324 -324
  48. package/pipes/flag/flag.pipe.d.ts +6 -3
  49. package/styles/components/appearance.less +5 -1
  50. package/styles/components/group.less +6 -5
  51. package/styles/components/textfield.less +16 -7
  52. package/styles/mixins/date-picker.less +152 -0
  53. package/styles/mixins/picker.less +1 -0
  54. package/styles/mixins/picker.scss +1 -0
  55. package/styles/taiga-ui-local.less +1 -0
  56. package/styles/theme/appearance/floating.less +2 -2
  57. package/styles/theme/appearance/glass.less +3 -3
  58. package/styles/theme/appearance/opposite.less +2 -2
  59. package/styles/theme/appearance/outline.less +6 -5
  60. package/styles/theme/appearance/primary.less +2 -1
  61. package/styles/theme/appearance/secondary.less +11 -6
  62. package/styles/theme/appearance/status.less +12 -6
  63. package/styles/theme/appearance/textfield.less +3 -3
  64. package/styles/theme/palette.less +58 -58
  65. package/styles/theme/wrapper.less +11 -9
@@ -1,11 +1,14 @@
1
1
  import type { PipeTransform } from '@angular/core';
2
+ import type { TuiLooseUnion } from '@taiga-ui/cdk/types';
2
3
  import type { TuiCountryIsoCode } from '@taiga-ui/i18n/types';
3
4
  import * as i0 from "@angular/core";
5
+ type IsoCode = TuiLooseUnion<TuiCountryIsoCode>;
4
6
  export declare class TuiFlagPipe implements PipeTransform {
5
7
  private readonly staticPath;
6
- transform(countryIsoCode: TuiCountryIsoCode | string): string;
7
- transform(countryIsoCode: TuiCountryIsoCode | string | undefined): string | null;
8
- transform(countryIsoCode?: TuiCountryIsoCode | string | null): string | null;
8
+ transform(countryIsoCode: IsoCode): string;
9
+ transform(countryIsoCode: IsoCode | undefined): string | null;
10
+ transform(countryIsoCode?: IsoCode | null): string | null;
9
11
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiFlagPipe, never>;
10
12
  static ɵpipe: i0.ɵɵPipeDeclaration<TuiFlagPipe, "tuiFlag", true>;
11
13
  }
14
+ export {};
@@ -11,7 +11,7 @@
11
11
  * data-appearance — current appearance
12
12
  * data-state — manual interactive state override ('active' | 'disabled' | 'hover')
13
13
  * data-focus — manual :focus-visible state override
14
- * data-mode — arbitrary manual mode like 'checked', 'invalid' or 'readonly'
14
+ * data-mode — arbitrary manual mode like 'checked', 'invalid' or 'checked invalid'
15
15
  *
16
16
  * @example
17
17
  * <button tuiAppearance data-appearance='primary'></button>
@@ -27,6 +27,10 @@
27
27
  outline: 0.125rem solid transparent;
28
28
  outline-offset: -0.125rem;
29
29
 
30
+ &.tui-appearance-initializing {
31
+ transition: none !important;
32
+ }
33
+
30
34
  .appearance-focus({
31
35
  outline-color: var(--tui-border-focus);
32
36
  });
@@ -38,15 +38,15 @@
38
38
  z-index: 0;
39
39
  }
40
40
 
41
- &:invalid,
42
- &[data-mode='invalid'] {
41
+ &:invalid:not([data-mode]),
42
+ &[data-mode~='invalid'] {
43
43
  z-index: 2;
44
44
 
45
45
  --t-group-clip: none;
46
46
  }
47
47
 
48
- &:has(:invalid),
49
- &:has([data-mode='invalid']) {
48
+ &:has(:invalid:not([data-mode])),
49
+ &:has([data-mode~='invalid']) {
50
50
  z-index: 2;
51
51
 
52
52
  --t-group-clip: none;
@@ -64,7 +64,8 @@
64
64
  --t-group-clip: none;
65
65
  }
66
66
 
67
- &[data-mode='checked'] {
67
+ &:checked:not([data-mode]),
68
+ &[data-mode~='checked'] {
68
69
  z-index: 4;
69
70
 
70
71
  --t-group-clip: none;
@@ -114,7 +114,7 @@ tui-textfield {
114
114
  color: var(--tui-text-secondary);
115
115
 
116
116
  &:has(input:read-only),
117
- &:has(select[data-mode='readonly']) {
117
+ &:has(select[data-mode~='readonly']) {
118
118
  color: var(--tui-text-tertiary);
119
119
  }
120
120
  }
@@ -182,6 +182,15 @@ tui-textfield {
182
182
  padding: inherit;
183
183
  }
184
184
 
185
+ .t-template {
186
+ display: flex;
187
+ align-items: center;
188
+ }
189
+
190
+ &._with-template select {
191
+ color: transparent !important;
192
+ }
193
+
185
194
  input:defined,
186
195
  select:defined {
187
196
  pointer-events: auto;
@@ -197,7 +206,7 @@ tui-textfield {
197
206
  & ~ .t-content {
198
207
  opacity: var(--tui-disabled-opacity);
199
208
 
200
- tui-icon {
209
+ > tui-icon {
201
210
  display: none;
202
211
  }
203
212
  }
@@ -210,17 +219,17 @@ tui-textfield {
210
219
  transform: translateY(-0.7em);
211
220
  }
212
221
 
213
- &:not(:disabled)[data-mode='invalid'] ~ label,
222
+ &:not(:disabled)[data-mode~='invalid'] ~ label,
214
223
  &:invalid:not(:disabled):not([data-mode]) ~ label {
215
224
  color: var(--tui-text-negative);
216
225
  }
217
226
 
218
- &:not(:disabled):not([data-mode='readonly']) ~ .t-content .t-clear {
227
+ &:not(:disabled):not([data-mode~='readonly']) ~ .t-content .t-clear {
219
228
  display: flex;
220
229
  }
221
230
  }
222
231
 
223
- &:not([data-mode='readonly']) {
232
+ &:not([data-mode~='readonly']) {
224
233
  .appearance-focus({
225
234
  &::placeholder,
226
235
  &._empty {
@@ -261,7 +270,7 @@ tui-textfield {
261
270
  color: var(--tui-text-secondary);
262
271
  }
263
272
 
264
- select:not([data-mode='readonly']) {
273
+ select:not([data-mode~='readonly']) {
265
274
  cursor: pointer;
266
275
  }
267
276
 
@@ -277,7 +286,7 @@ tui-textfield {
277
286
  margin-inline-start: auto;
278
287
  isolation: isolate;
279
288
 
280
- tui-icon {
289
+ > tui-icon {
281
290
  pointer-events: auto;
282
291
  }
283
292
  }
@@ -0,0 +1,152 @@
1
+ @import 'mixins.less';
2
+
3
+ .date-picker() {
4
+ .t-row {
5
+ display: flex;
6
+ justify-content: flex-start;
7
+ font: var(--tui-font-text-m);
8
+
9
+ &:first-child {
10
+ justify-content: flex-end;
11
+ }
12
+
13
+ &:last-child {
14
+ justify-content: flex-start;
15
+ }
16
+ }
17
+
18
+ .t-cell {
19
+ position: relative;
20
+ display: flex;
21
+ align-items: center;
22
+ justify-content: center;
23
+ line-height: 2rem;
24
+ isolation: isolate;
25
+ cursor: pointer;
26
+ overflow: hidden;
27
+ border: 0.125rem solid transparent;
28
+ box-sizing: border-box;
29
+ mask: linear-gradient(
30
+ transparent calc(50% - 1rem),
31
+ #000 calc(50% - 1rem),
32
+ #000 calc(50% + 1rem),
33
+ transparent calc(50% + 1rem)
34
+ );
35
+
36
+ &:first-child {
37
+ border-inline-start-color: transparent !important;
38
+ }
39
+
40
+ &:last-child {
41
+ border-inline-end-color: transparent !important;
42
+ }
43
+
44
+ &::before,
45
+ &::after {
46
+ .fullsize(absolute, inset);
47
+
48
+ content: '';
49
+ z-index: -1;
50
+ border-radius: var(--tui-radius-m);
51
+ }
52
+
53
+ &::after {
54
+ mask:
55
+ url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 32"><path d="M0.2856 0L0.6763 0C2.9265 0 4.9876 1.259 6.0147 3.2611L10.2442 11.5048C11.5301 14.0113 11.5683 16.9754 10.3472 19.5141L5.9766 28.6007C4.9772 30.6786 2.8754 32 0.5696 32H0.285645V0Z"></path></svg>')
56
+ right/0.75rem 100% no-repeat,
57
+ linear-gradient(#000, #000) left/calc(100% - 0.7rem) 100% no-repeat;
58
+ }
59
+
60
+ &[data-range]::before {
61
+ background: var(--tui-background-base-alt);
62
+ }
63
+
64
+ :host._picking &[data-range]::before {
65
+ background: var(--tui-background-neutral-1-hover);
66
+ }
67
+
68
+ &[data-range='middle'] {
69
+ border-color: var(--tui-background-base-alt);
70
+
71
+ :host._picking & {
72
+ border-color: var(--tui-background-neutral-1-hover);
73
+ }
74
+
75
+ &:not(:first-child)::before {
76
+ border-start-start-radius: 0;
77
+ border-end-start-radius: 0;
78
+ }
79
+
80
+ &:not(:last-child)::before {
81
+ border-start-end-radius: 0;
82
+ border-end-end-radius: 0;
83
+ }
84
+ }
85
+
86
+ &[data-range='start'] {
87
+ border-inline-end-color: var(--tui-background-base-alt);
88
+ color: var(--tui-text-primary-on-accent-1);
89
+
90
+ :host._picking & {
91
+ border-inline-end-color: var(--tui-background-neutral-1-hover);
92
+ }
93
+
94
+ &:not(:last-child)::before {
95
+ right: -1rem;
96
+ }
97
+
98
+ &::after {
99
+ background: var(--tui-background-accent-1);
100
+ }
101
+ }
102
+
103
+ &[data-range='end'] {
104
+ border-inline-start-color: var(--tui-background-base-alt);
105
+ color: var(--tui-text-primary-on-accent-1);
106
+
107
+ :host._picking & {
108
+ border-inline-start-color: var(--tui-background-neutral-1-hover);
109
+ }
110
+
111
+ &:not(:first-child)::before {
112
+ left: -1rem;
113
+ }
114
+
115
+ &::after {
116
+ background: var(--tui-background-accent-1);
117
+ transform: scale(-1, 1);
118
+ }
119
+ }
120
+
121
+ &[data-range='active'] {
122
+ color: var(--tui-text-primary-on-accent-1);
123
+
124
+ &::after {
125
+ background: var(--tui-background-accent-1);
126
+ mask: none;
127
+ }
128
+ }
129
+
130
+ &_disabled {
131
+ opacity: var(--tui-disabled-opacity);
132
+ pointer-events: none;
133
+ }
134
+
135
+ &_today {
136
+ text-decoration: underline;
137
+ text-underline-offset: 0.25rem;
138
+ }
139
+
140
+ @media (hover: hover) {
141
+ &:hover:not([data-range='start']):not([data-range='end'])::before {
142
+ background: var(--tui-background-neutral-1-hover);
143
+ }
144
+
145
+ &[data-range='start']:hover::after,
146
+ &[data-range='end']:hover::after,
147
+ &[data-range='active']:hover::after {
148
+ background: var(--tui-background-accent-1-hover);
149
+ }
150
+ }
151
+ }
152
+ }
@@ -1,5 +1,6 @@
1
1
  @import 'mixins.less';
2
2
 
3
+ // @deprecated
3
4
  .picker(@itemSize) {
4
5
  :host {
5
6
  display: block;
@@ -1,5 +1,6 @@
1
1
  @import 'mixins.scss';
2
2
 
3
+ // @deprecated
3
4
  @mixin picker($itemSize) {
4
5
  :host {
5
6
  display: block;
@@ -1,4 +1,5 @@
1
1
  @import 'mixins/browsers.less';
2
+ @import 'mixins/date-picker.less';
2
3
  @import 'mixins/mixins.less';
3
4
  @import 'mixins/picker.less';
4
5
  @import 'mixins/slider.less';
@@ -2,8 +2,8 @@
2
2
 
3
3
  [tuiAppearance][data-appearance='floating'] {
4
4
  background: #fff;
5
- color: rgb(0 0 0 / 80%);
6
- box-shadow: 0 0.25rem 1.25rem rgb(0 0 0 / 10%);
5
+ color: rgba(0, 0, 0, 0.8);
6
+ box-shadow: 0 0.25rem 1.25rem rgba(0, 0, 0, 0.1);
7
7
 
8
8
  .appearance-hover({
9
9
  box-shadow: 0 0.875rem 2.625rem rgba(0, 0, 0, 0.14);
@@ -1,11 +1,11 @@
1
1
  @import '@taiga-ui/core/styles/taiga-ui-local.less';
2
2
 
3
3
  [tuiAppearance][data-appearance='glass'] {
4
- background: rgb(0 0 0 / 40%);
4
+ background: rgba(0, 0, 0, 0.4);
5
5
  color: #fff;
6
6
  backdrop-filter: blur(1rem);
7
7
 
8
- --tui-border-focus: rgb(255 255 255 / 64%);
8
+ --tui-border-focus: rgba(255, 255, 255, 0.64);
9
9
 
10
10
  .appearance-hover({
11
11
  background: rgba(0, 0, 0, 0.48);
@@ -18,7 +18,7 @@
18
18
 
19
19
  [tuiTheme='dark'] [tuiAppearance][data-appearance='glass'],
20
20
  [tuiTheme='dark'][tuiAppearance][data-appearance='glass'] {
21
- background: rgb(255 255 255 / 30%);
21
+ background: rgba(255, 255, 255, 0.3);
22
22
 
23
23
  .appearance-hover({
24
24
  background: rgba(255, 255, 255, 0.4);
@@ -1,7 +1,7 @@
1
1
  @import '@taiga-ui/core/styles/taiga-ui-local.less';
2
2
 
3
3
  [tuiAppearance][data-appearance='opposite'] {
4
- --tui-border-focus: rgb(255 255 255 / 64%);
4
+ --tui-border-focus: rgba(255, 255, 255, 0.64);
5
5
 
6
6
  background: var(--tui-background-accent-opposite);
7
7
  color: var(--tui-background-base);
@@ -17,5 +17,5 @@
17
17
 
18
18
  [tuiTheme='dark'] [tuiAppearance][data-appearance='opposite'],
19
19
  [tuiTheme='dark'][tuiAppearance][data-appearance='opposite'] {
20
- --tui-border-focus: rgb(51 51 51 / 48%);
20
+ --tui-border-focus: rgba(51, 51, 51, 0.48);
21
21
  }
@@ -7,8 +7,8 @@
7
7
  color: var(--tui-text-action);
8
8
  box-shadow: inset 0 0 0 1px var(--t-bs);
9
9
 
10
- &:checked,
11
- &[data-mode='checked'] {
10
+ &:checked:not([data-mode]),
11
+ &[data-mode~='checked'] {
12
12
  --t-bs: var(--tui-background-accent-1);
13
13
 
14
14
  box-shadow: inset 0 0 0 2px var(--t-bs);
@@ -22,12 +22,13 @@
22
22
  });
23
23
  }
24
24
 
25
- &:invalid {
25
+ &:invalid:not([data-mode]),
26
+ &[data-mode~='invalid'] {
26
27
  box-shadow: inset 0 0 0 1px var(--tui-status-negative-pale-hover);
27
28
  }
28
29
 
29
- &:checked:invalid,
30
- &[data-mode='checked']:invalid {
30
+ &:checked:invalid:not([data-mode]),
31
+ &[data-mode~='checked'][data-mode~='invalid'] {
31
32
  box-shadow: inset 0 0 0 2px var(--tui-status-negative);
32
33
  }
33
34
 
@@ -6,7 +6,8 @@
6
6
  background: var(--t-bg);
7
7
  color: var(--tui-text-primary-on-accent-1);
8
8
 
9
- &:invalid {
9
+ &:invalid:not([data-mode]),
10
+ &[data-mode~='invalid'] {
10
11
  background: var(--tui-status-negative);
11
12
  }
12
13
 
@@ -14,8 +14,9 @@
14
14
  background: var(--tui-background-neutral-1-pressed);
15
15
  });
16
16
 
17
- &:checked,
18
- &[type='checkbox']:indeterminate {
17
+ &:checked:not([data-mode]),
18
+ &[data-mode~='checked'],
19
+ &[type='checkbox']:indeterminate:not([data-mode]) {
19
20
  background: var(--tui-background-accent-1);
20
21
  color: var(--tui-text-primary-on-accent-1);
21
22
 
@@ -27,7 +28,8 @@
27
28
  background: var(--tui-background-accent-1-pressed);
28
29
  });
29
30
 
30
- &:invalid {
31
+ &:invalid:not([data-mode]),
32
+ &[data-mode~='invalid'] {
31
33
  background: var(--tui-status-negative);
32
34
  color: #fff;
33
35
 
@@ -43,7 +45,8 @@
43
45
  }
44
46
  }
45
47
 
46
- &:invalid {
48
+ &:invalid:not([data-mode]),
49
+ &[data-mode~='invalid'] {
47
50
  color: var(--tui-text-negative);
48
51
  background: var(--tui-status-negative-pale);
49
52
 
@@ -60,11 +63,13 @@
60
63
  }
61
64
 
62
65
  [tuiAppearance][data-appearance='flat'],
63
- [tuiAppearance][data-appearance='flat']:invalid {
66
+ [tuiAppearance][data-appearance='flat']:invalid:not([data-mode]),
67
+ [tuiAppearance][data-appearance='flat'][data-mode~='invalid'] {
64
68
  background: transparent;
65
69
  }
66
70
 
67
- [tuiAppearance][data-appearance='flat']:checked {
71
+ [tuiAppearance][data-appearance='flat']:checked:not([data-mode]),
72
+ [tuiAppearance][data-appearance='flat'][data-mode~='checked'] {
68
73
  background: var(--tui-background-neutral-1);
69
74
 
70
75
  .appearance-hover({
@@ -7,7 +7,8 @@
7
7
  [tuiAppearance][data-appearance='neutral'] {
8
8
  background: var(--t-bg);
9
9
 
10
- &:checked {
10
+ &:checked:not([data-mode]),
11
+ &[data-mode~='checked'] {
11
12
  color: #fff;
12
13
  }
13
14
  }
@@ -28,7 +29,8 @@
28
29
  --t-bg: var(--tui-status-negative-pale-hover);
29
30
  });
30
31
 
31
- &:checked {
32
+ &:checked:not([data-mode]),
33
+ &[data-mode~='checked'] {
32
34
  background: var(--tui-status-negative);
33
35
  }
34
36
  }
@@ -49,7 +51,8 @@
49
51
  --t-bg: var(--tui-status-positive-pale-hover);
50
52
  });
51
53
 
52
- &:checked {
54
+ &:checked:not([data-mode]),
55
+ &[data-mode~='checked'] {
53
56
  background: var(--tui-status-positive);
54
57
  }
55
58
  }
@@ -70,7 +73,8 @@
70
73
  --t-bg: var(--tui-status-warning-pale-hover);
71
74
  });
72
75
 
73
- &:checked {
76
+ &:checked:not([data-mode]),
77
+ &[data-mode~='checked'] {
74
78
  background: var(--tui-status-warning);
75
79
  }
76
80
  }
@@ -91,7 +95,8 @@
91
95
  --t-bg: var(--tui-status-info-pale-hover);
92
96
  });
93
97
 
94
- &:checked {
98
+ &:checked:not([data-mode]),
99
+ &[data-mode~='checked'] {
95
100
  background: var(--tui-status-info);
96
101
  }
97
102
  }
@@ -112,7 +117,8 @@
112
117
  --t-bg: var(--tui-background-neutral-1-pressed);
113
118
  });
114
119
 
115
- &:checked {
120
+ &:checked:not([data-mode]),
121
+ &[data-mode~='checked'] {
116
122
  background: var(--tui-status-neutral);
117
123
  }
118
124
  }
@@ -3,7 +3,7 @@
3
3
  [tuiAppearance][data-appearance='textfield'] {
4
4
  .transition(~'box-shadow, background, outline-color, border-color');
5
5
 
6
- --t-shadow: 0 0.125rem 0.1875rem rgb(0 0 0 / 10%);
6
+ --t-shadow: 0 0.125rem 0.1875rem rgba(0, 0, 0, 0.1);
7
7
 
8
8
  background-color: var(--tui-background-base);
9
9
  color: var(--tui-text-primary);
@@ -26,12 +26,12 @@
26
26
  box-shadow: none;
27
27
  });
28
28
 
29
- &[data-mode='invalid'][data-mode='invalid'],
29
+ &[data-mode~='invalid'][data-mode~='invalid'],
30
30
  &:invalid:not([data-mode]) {
31
31
  outline-color: var(--tui-status-negative);
32
32
  }
33
33
 
34
- &[data-mode='readonly'],
34
+ &[data-mode~='readonly'],
35
35
  input&:read-only:not([data-mode]) {
36
36
  box-shadow: none;
37
37
  outline-color: var(--tui-border-normal) !important;