@taiga-ui/styles 5.22.0 → 5.23.0-canary.a178c55

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.
@@ -0,0 +1,95 @@
1
+ :where([tuiCardLarge]:not([tuiHeader])&) {
2
+ font: var(--tui-typography-body-m);
3
+ }
4
+
5
+ [tuiCardLarge][data-space]:where(*&) {
6
+ --t-space: 0.75rem;
7
+ --t-radius: var(--tui-radius-l);
8
+ --t-comp: -0.25rem;
9
+ --t-padding: 0.75rem;
10
+ --t-dim: calc(var(--t-padding) + var(--t-comp));
11
+
12
+ padding: var(--t-padding);
13
+ border-radius: var(--t-radius);
14
+ box-sizing: border-box;
15
+ text-align: start;
16
+
17
+ &[data-space='normal'] {
18
+ --t-radius: 1.5rem;
19
+ --t-padding: 1.5rem;
20
+ --t-space: 1.5rem;
21
+ }
22
+
23
+ &[data-space='compact'] {
24
+ --t-radius: 1rem;
25
+ --t-padding: 1.25rem;
26
+ --t-space: 1.25rem;
27
+ }
28
+
29
+ &:not([tuiCell], [tuiHeader], [tuiForm]) {
30
+ flex-direction: column;
31
+ gap: var(--t-space);
32
+ align-items: stretch;
33
+
34
+ > :last-child:not([tuiCell]) {
35
+ margin-block-start: auto;
36
+ }
37
+ }
38
+
39
+ &[tuiHeader] {
40
+ padding: var(--t-dim) var(--t-padding);
41
+
42
+ [tuiButton]:last-child,
43
+ [tuiAvatar]:last-child,
44
+ [tuiSwitch]:last-child,
45
+ tui-segmented:last-child {
46
+ margin-inline-end: var(--t-comp);
47
+ }
48
+ }
49
+
50
+ > [tuiHeader] {
51
+ margin: var(--t-comp) 0 calc(2 * var(--t-comp));
52
+
53
+ [tuiButton]:last-child,
54
+ [tuiAvatar]:last-child,
55
+ [tuiSwitch]:last-child,
56
+ tui-segmented:last-child {
57
+ margin-inline-end: var(--t-comp);
58
+ }
59
+ }
60
+
61
+ [tuiCell]:not(:where(tui-textfield *, [tuiStep])) {
62
+ inline-size: 100%;
63
+ margin: -0.5rem -0.5rem -0.75rem;
64
+ border-radius: var(--tui-radius-l);
65
+
66
+ --t-pad: 0.5rem;
67
+
68
+ &:last-of-type {
69
+ margin-block-end: -0.5rem;
70
+ }
71
+ }
72
+
73
+ [tuiHeader] + [tuiDescription] {
74
+ margin-block: -0.5rem -0.25rem;
75
+ }
76
+
77
+ [tuiHeader] + [tuiCell] {
78
+ margin-block-start: var(--t-comp);
79
+ }
80
+
81
+ [tuiAccessories] > [tuiButtonX] {
82
+ align-self: flex-start;
83
+
84
+ --t-size: 1.5rem;
85
+ }
86
+
87
+ > footer {
88
+ margin-block-end: var(--t-comp);
89
+
90
+ > [tuiButton],
91
+ > [tuiBlock] {
92
+ margin-block-end: calc(-1 * var(--t-comp));
93
+ }
94
+ }
95
+ }
@@ -0,0 +1,26 @@
1
+ [tuiCardMedium]:where(*&) {
2
+ inline-size: calc(8.75rem * var(--tui-font-scale));
3
+ block-size: calc(8.75rem * var(--tui-font-scale));
4
+ flex-direction: column;
5
+ justify-content: space-between;
6
+ padding: 0.75rem;
7
+ border-radius: var(--tui-radius-l);
8
+ box-sizing: border-box;
9
+
10
+ &[tuiTitle] {
11
+ padding: 0.625rem 0.75rem;
12
+ }
13
+
14
+ [tuiTitle] {
15
+ margin: -0.125rem 0;
16
+ }
17
+
18
+ [tuiSubtitle] {
19
+ color: var(--tui-text-primary);
20
+ }
21
+
22
+ &[tuiTitle],
23
+ [tuiTitle]:not([tuiCell] *):not([tuiLabel] *) {
24
+ font-weight: bold;
25
+ }
26
+ }
@@ -0,0 +1,29 @@
1
+ [tuiCardRow]:where(*&) {
2
+ display: flex;
3
+ align-items: center;
4
+ gap: 3rem;
5
+
6
+ tui-icon {
7
+ font-size: 1rem;
8
+ }
9
+
10
+ [tuiTitle] {
11
+ font: var(--tui-typography-body-s);
12
+
13
+ > :not([tuiSubtitle]) {
14
+ display: flex;
15
+ align-items: center;
16
+ gap: 0.25rem;
17
+ }
18
+ }
19
+
20
+ [tuiSubtitle] {
21
+ color: var(--tui-text-secondary);
22
+ font: var(--tui-typography-body-xs);
23
+ }
24
+
25
+ & > [tuiButton],
26
+ & > [tuiIconButton] {
27
+ margin-inline-start: auto;
28
+ }
29
+ }
@@ -0,0 +1,23 @@
1
+ @import '@taiga-ui/styles/utils';
2
+
3
+ [tuiCardMedium],
4
+ [tuiCardLarge] {
5
+ position: relative;
6
+ display: flex;
7
+ align-items: flex-start;
8
+ flex-shrink: 0;
9
+ text-decoration: none;
10
+ overflow: hidden;
11
+ padding: 0;
12
+ border: 0;
13
+ background: var(--tui-background-elevation-2);
14
+
15
+ [tuiTitle],
16
+ [tuiSubtitle] {
17
+ max-inline-size: 100%;
18
+ }
19
+
20
+ > * {
21
+ .scrollbar-hidden();
22
+ }
23
+ }
@@ -0,0 +1,292 @@
1
+ @import '@taiga-ui/styles/utils';
2
+
3
+ [tuiCell]:where(*&) {
4
+ --t-pad: 0.125rem 1rem;
5
+ --t-radius: var(--tui-radius-s);
6
+
7
+ .transition(~'background');
8
+ .button-clear();
9
+
10
+ position: relative;
11
+ display: flex;
12
+ align-items: center;
13
+ text-align: start;
14
+ box-sizing: content-box;
15
+ isolation: isolate;
16
+ color: var(--tui-text-primary);
17
+ padding: var(--t-pad);
18
+ min-block-size: var(--t-block-size);
19
+ border-radius: var(--t-radius);
20
+
21
+ &:is(button, label):not(:disabled):active {
22
+ background: var(--tui-background-neutral-1);
23
+ }
24
+
25
+ &:disabled,
26
+ &[data-state='disabled'] {
27
+ opacity: initial;
28
+ pointer-events: none;
29
+
30
+ & > *:not([tuiTooltip]) {
31
+ opacity: var(--tui-disabled-opacity);
32
+ }
33
+ }
34
+
35
+ &:is(label):has(input:disabled) {
36
+ opacity: initial;
37
+ pointer-events: none;
38
+
39
+ & > *:not([tuiTooltip]) {
40
+ opacity: var(--tui-disabled-opacity);
41
+ }
42
+ }
43
+
44
+ [tuiAccessories] {
45
+ position: relative;
46
+ display: flex;
47
+ max-block-size: var(--t-block-size);
48
+ align-items: center;
49
+ align-self: stretch;
50
+ margin-inline-start: auto;
51
+ }
52
+
53
+ // Specificity artificially increased for disabled state
54
+ [tuiCellActions][tuiCellActions] {
55
+ position: absolute;
56
+ z-index: 1;
57
+ inset-inline-end: 0;
58
+ padding-inline-end: inherit;
59
+
60
+ --t-group-mask: none;
61
+ --t-group-mask-end: none;
62
+ --t-group-mask-start: none;
63
+
64
+ & ~ * {
65
+ .transition(opacity);
66
+ }
67
+
68
+ & button,
69
+ & a {
70
+ .transition(opacity);
71
+
72
+ opacity: 0;
73
+
74
+ &:focus-visible {
75
+ opacity: 1;
76
+ }
77
+ }
78
+ }
79
+
80
+ [tuiSubtitle] {
81
+ display: flex;
82
+ align-items: center;
83
+ gap: 0.25rem;
84
+ color: var(--tui-text-secondary);
85
+ }
86
+
87
+ [tuiTitle] {
88
+ flex: 3 7 30%;
89
+ align-items: normal;
90
+ text-align: start;
91
+ gap: 0.25rem 0.5rem;
92
+
93
+ [tuiTitle] {
94
+ flex-direction: row;
95
+ justify-content: space-between;
96
+
97
+ ~ [tuiSubtitle] > [tuiFade]:first-child,
98
+ > [tuiFade]:first-child,
99
+ ~ [tuiSubtitle] > [tuiFade]:last-child,
100
+ > [tuiFade]:last-child {
101
+ flex: 3 7 30%;
102
+ max-inline-size: max-content;
103
+ white-space: nowrap;
104
+ }
105
+
106
+ ~ [tuiSubtitle] > [tuiFade]:last-child,
107
+ > [tuiFade]:last-child {
108
+ flex: 7 3 70%;
109
+ }
110
+
111
+ ~ [tuiSubtitle] {
112
+ justify-content: space-between;
113
+ }
114
+ }
115
+
116
+ ~ [tuiTitle] {
117
+ flex: 7 3 70%;
118
+ max-inline-size: max-content;
119
+ margin-inline-start: auto;
120
+ text-align: end;
121
+ align-items: flex-end;
122
+
123
+ &[tuiFade] {
124
+ align-items: flex-start;
125
+ }
126
+ }
127
+ }
128
+
129
+ tui-badge-notification[data-size='xs'] {
130
+ .center-top();
131
+
132
+ inset-inline-start: 0.375rem;
133
+ }
134
+
135
+ &[data-size='s'] {
136
+ --t-block-size: calc(var(--tui-height-s) - 0.125rem);
137
+ --t-pad: 0.1875rem 1rem;
138
+
139
+ gap: 0.5rem;
140
+
141
+ &[data-height='spacious'] {
142
+ --t-pad: 0.4375rem 1rem;
143
+ }
144
+
145
+ &[data-height='compact'] {
146
+ --t-block-size: calc(var(--tui-height-s) - 0.25rem);
147
+ --t-pad: 0 1rem;
148
+ }
149
+
150
+ [tuiTitle] {
151
+ max-block-size: 100%;
152
+ font: var(--tui-typography-ui-s);
153
+ gap: 0;
154
+ }
155
+
156
+ [tuiSubtitle] {
157
+ font: var(--tui-typography-ui-2xs);
158
+ }
159
+
160
+ [tuiAvatar] {
161
+ --t-size: 1.5rem;
162
+ --t-radius: var(--tui-radius-m);
163
+
164
+ font: var(--tui-typography-body-m);
165
+ font-size: 0.5625rem;
166
+ margin: 0.1875rem 0;
167
+ }
168
+ }
169
+
170
+ &[data-size='m'] {
171
+ --t-block-size: calc(var(--tui-height-m) - 0.75rem);
172
+ --t-pad: 0.375rem 1rem;
173
+
174
+ gap: 0.5rem 0.75rem;
175
+
176
+ &[data-height='spacious'] {
177
+ --t-pad: 1rem;
178
+ }
179
+
180
+ &[data-height='compact'] {
181
+ --t-block-size: calc(var(--tui-height-m) - 0.5rem);
182
+ --t-pad: 0 1rem;
183
+ }
184
+
185
+ [tuiTitle] {
186
+ font: var(--tui-typography-ui-s);
187
+ gap: 0.0625rem;
188
+ }
189
+
190
+ [tuiSubtitle] {
191
+ font: var(--tui-typography-ui-xs);
192
+ }
193
+
194
+ [tuiAvatar] {
195
+ --t-size: 2rem;
196
+ --t-radius: var(--tui-radius-m);
197
+
198
+ align-self: flex-start;
199
+ }
200
+ }
201
+
202
+ &[data-size='l'] {
203
+ --t-block-size: calc(var(--tui-height-l) - 1rem);
204
+ --t-pad: 0.5rem 1rem;
205
+ --t-radius: var(--tui-radius-l);
206
+
207
+ gap: 0.5rem 1rem;
208
+
209
+ &[data-height='spacious'] {
210
+ --t-pad: 1.25rem 1rem;
211
+ }
212
+
213
+ &[data-height='compact'] {
214
+ --t-block-size: calc(var(--tui-height-l) - 1rem);
215
+ --t-pad: 0 1rem;
216
+ }
217
+
218
+ [tuiAvatar] {
219
+ --t-size: 2.5rem;
220
+
221
+ font: var(--tui-typography-body-m);
222
+ font-weight: bold;
223
+ align-self: flex-start;
224
+ }
225
+ }
226
+
227
+ &:hover [tuiCellActions] ~ * {
228
+ opacity: 0;
229
+ }
230
+
231
+ &:hover [tuiCellActions] button,
232
+ &:hover [tuiCellActions] a,
233
+ &:hover [tuiCellActions] label {
234
+ opacity: 1;
235
+ }
236
+
237
+ &:focus-visible {
238
+ outline: 0.125rem solid var(--tui-border-focus);
239
+ outline-offset: -0.125rem;
240
+ }
241
+
242
+ &[tuiCellStretch] {
243
+ inline-size: 100%;
244
+ margin-inline: -1rem;
245
+ }
246
+
247
+ &[tuiCellResponsive] {
248
+ display: grid;
249
+ grid-auto-flow: column;
250
+ grid-auto-columns: fit-content(100%);
251
+ grid-template-columns: auto 1fr;
252
+
253
+ &:has(> [tuiTitle]:first-child) {
254
+ grid-template-columns: 1fr;
255
+ }
256
+
257
+ > * {
258
+ grid-row: 1;
259
+ }
260
+
261
+ &._rearranged {
262
+ [tuiAccessories] {
263
+ grid-row: 2;
264
+ }
265
+
266
+ [tuiTitle] {
267
+ [tuiTitle],
268
+ [tuiSubtitle] {
269
+ display: grid;
270
+ }
271
+ }
272
+ }
273
+ }
274
+ }
275
+
276
+ @media @tui-mouse {
277
+ a[tuiCell]:where(*&):hover,
278
+ button[tuiCell]:where(*&):hover,
279
+ label[tuiCell]:where(*&):hover {
280
+ &:not(:disabled, [data-state='disabled']) {
281
+ background: var(--tui-background-neutral-1);
282
+ cursor: pointer;
283
+ }
284
+ }
285
+
286
+ label[tuiCell]:where(*&):hover {
287
+ &:not(:has(input:disabled)) {
288
+ background: var(--tui-background-neutral-1);
289
+ cursor: pointer;
290
+ }
291
+ }
292
+ }
@@ -0,0 +1,73 @@
1
+ @import '@taiga-ui/styles/utils.less';
2
+
3
+ /**
4
+ * @name Floating
5
+ * @selector [tuiFloatingContainer]
6
+ *
7
+ * @description
8
+ * Container for creating sticky footers
9
+ *
10
+ * @example
11
+ * <footer tuiFloatingContainer>
12
+ * <button
13
+ type="button"
14
+ tuiButton
15
+ >
16
+ Close
17
+ </button>
18
+ * </footer>
19
+ *
20
+ * @see-also
21
+ * Block, SheetDialog
22
+ */
23
+ [tuiFloatingContainer]:where(*&) {
24
+ .transition(inset-block-end);
25
+
26
+ position: sticky;
27
+ z-index: 1;
28
+ display: grid;
29
+ inset-block-end: ~'max(0px, calc(100 * var(--tui-viewport-svh) - var(--tui-viewport-height) - var(--tui-viewport-y)))';
30
+ inset-block-end: ~'max(0px, calc(100svh - var(--tui-viewport-height) - var(--tui-viewport-y)))';
31
+ margin-block-start: 1rem;
32
+ padding-block-end: ~'max(1rem, env(safe-area-inset-bottom))';
33
+ text-align: center;
34
+ font: var(--tui-typography-ui-s);
35
+ color: var(--tui-text-secondary);
36
+
37
+ &.tui-enter,
38
+ &.tui-leave {
39
+ animation-name: tuiSlide;
40
+ }
41
+
42
+ > * {
43
+ grid-area: 2 / 1;
44
+
45
+ &:first-child {
46
+ grid-row: 1;
47
+ margin-block-end: 0.5rem;
48
+ }
49
+ }
50
+
51
+ // grid stretches direct children only; stretch wrapped content too
52
+ > tui-expand > .t-wrapper > *,
53
+ > tui-elastic-container > .t-wrapper > * {
54
+ inline-size: 100%;
55
+ }
56
+
57
+ &::before {
58
+ .fullsize(absolute, inset);
59
+ .transition(background);
60
+
61
+ content: '';
62
+ position: absolute;
63
+ z-index: -1;
64
+ inset-inline-start: -1rem;
65
+ inset-inline-end: -1rem;
66
+ background: var(--t-background, var(--tui-background-elevation-1));
67
+ mask-image: linear-gradient(180deg, transparent, black 2.5rem);
68
+ }
69
+ }
70
+
71
+ tui-sheet-dialog [tuiFloatingContainer]:where(*&) {
72
+ margin-block-end: ~'calc(-1* max(1.5rem, env(safe-area-inset-bottom)))';
73
+ }
@@ -326,7 +326,7 @@ tui-textfield:where(*&) {
326
326
  }
327
327
 
328
328
  textarea ~ .t-content {
329
- min-inline-size: 0.5rem;
329
+ min-inline-size: 1px;
330
330
  }
331
331
 
332
332
  &:is([data-mode~='readonly'], [data-state='disabled'], ._empty) [tuiButtonX],
@@ -44,7 +44,7 @@
44
44
  }
45
45
 
46
46
  .appearance-invalid(@content) {
47
- &:is([data-mode~='invalid'], .tui-invalid, :invalid):not(
47
+ &:is([data-mode~='invalid'], .tui-invalid, :invalid:not(._untouched)):not(
48
48
  [data-mode~='readonly'],
49
49
  [data-mode~='valid'],
50
50
  [data-state='disabled'],
@@ -45,7 +45,7 @@
45
45
  }
46
46
 
47
47
  @mixin appearance-invalid {
48
- &:is([data-mode~='invalid'], .tui-invalid, :invalid):not(
48
+ &:is([data-mode~='invalid'], .tui-invalid, :invalid:not(._untouched)):not(
49
49
  [data-mode~='readonly'],
50
50
  [data-mode~='valid'],
51
51
  [data-state='disabled'],
@@ -16,6 +16,12 @@
16
16
  }
17
17
  }
18
18
 
19
+ .liquid-glass-only(@ruleset) {
20
+ @supports (-webkit-touch-callout: none) and (position-anchor: --value) {
21
+ @ruleset();
22
+ }
23
+ }
24
+
19
25
  .chrome-only(@ruleset) {
20
26
  @supports (not (-moz-appearance: none)) and (not (-webkit-hyphens: none)) {
21
27
  @ruleset();
@@ -16,6 +16,12 @@
16
16
  }
17
17
  }
18
18
 
19
+ @mixin liquid-glass-only {
20
+ @supports (-webkit-touch-callout: none) and (position-anchor: --value) {
21
+ @content;
22
+ }
23
+ }
24
+
19
25
  @mixin chrome-only {
20
26
  @supports (not (-moz-appearance: none)) and (not (-webkit-hyphens: none)) {
21
27
  @content;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taiga-ui/styles",
3
- "version": "5.22.0",
3
+ "version": "5.23.0-canary.a178c55",
4
4
  "description": "Framework-agnostic package with styles for Taiga UI",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,6 +25,6 @@
25
25
  "./*": "./*"
26
26
  },
27
27
  "peerDependencies": {
28
- "@taiga-ui/design-tokens": "~0.316.0"
28
+ "@taiga-ui/design-tokens": "~0.320.0"
29
29
  }
30
30
  }