@donkit-ai/design-system 0.2.8 → 0.2.10
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 +21 -37
- package/package.json +1 -1
- package/src/components/Alert.css +0 -5
- package/src/components/Badge.css +0 -6
- package/src/components/Button.css +6 -6
- package/src/components/Input.css +12 -12
- package/src/components/Select.css +8 -8
- package/src/components/Stepper.css +6 -6
- package/src/components/Stepper.jsx +1 -1
- package/src/components/Tabs.css +6 -20
- package/src/components/Tabs.jsx +2 -2
- package/src/components/Textarea.css +23 -6
- package/src/styles/tokens.css +33 -22
package/README.md
CHANGED
|
@@ -38,7 +38,7 @@ npm install @donkit-ai/design-system@latest
|
|
|
38
38
|
## Компоненты
|
|
39
39
|
|
|
40
40
|
- **Button** - кнопки с вариантами (primary, secondary, ghost) и размерами (small, medium, large)
|
|
41
|
-
- **Tabs** - вкладки с
|
|
41
|
+
- **Tabs** - вкладки с состоянием selected в трех размерах (small, medium, large)
|
|
42
42
|
- **Input** - текстовые поля с поддержкой иконок, ошибок и подсказок (small, medium)
|
|
43
43
|
- **Stepper** - числовое поле с кнопками +/- для изменения значения (small, medium)
|
|
44
44
|
- **Card** - карточки двух типов: info (информационная, прозрачный фон) и interactive (интерактивная с hover эффектом)
|
|
@@ -200,13 +200,13 @@ document.documentElement.setAttribute('data-theme', 'light');
|
|
|
200
200
|
- Font Family: **Fira Mono** (fallback: SF Mono, Monaco, Cascadia Code, Roboto Mono, monospace)
|
|
201
201
|
|
|
202
202
|
**Размеры шрифтов (mobile → tablet → desktop):**
|
|
203
|
-
- `--font-size-h1`:
|
|
204
|
-
- `--font-size-h2`: 28px →
|
|
205
|
-
- `--font-size-h3`: 24px → 28px →
|
|
206
|
-
- `--font-size-h4`:
|
|
207
|
-
- `--font-size-p1`: 16px →
|
|
208
|
-
- `--font-size-p2`:
|
|
209
|
-
- `--font-size-p3`: 12px →
|
|
203
|
+
- `--font-size-h1`: 32px → 40px → 40px
|
|
204
|
+
- `--font-size-h2`: 28px → 36px → 36px
|
|
205
|
+
- `--font-size-h3`: 24px → 28px → 28px
|
|
206
|
+
- `--font-size-h4`: 18px → 20px → 20px
|
|
207
|
+
- `--font-size-p1`: 16px → 18px → 18px
|
|
208
|
+
- `--font-size-p2`: 14px → 16px → 16px
|
|
209
|
+
- `--font-size-p3`: 12px → 14px → 14px
|
|
210
210
|
|
|
211
211
|
**Letter Spacing (трекинг для мелких кеглей):**
|
|
212
212
|
- Меньше 20px → +2% (0.02em)
|
|
@@ -214,10 +214,10 @@ document.documentElement.setAttribute('data-theme', 'light');
|
|
|
214
214
|
- Меньше 14px → +6% (0.06em)
|
|
215
215
|
|
|
216
216
|
Адаптивные значения трекинга:
|
|
217
|
-
- `--letter-spacing-h4`: 0.02em → 0 → 0 (
|
|
218
|
-
- `--letter-spacing-p1`: 0.02em → 0.02em → 0 (16px /
|
|
219
|
-
- `--letter-spacing-p2`: 0.
|
|
220
|
-
- `--letter-spacing-p3`: 0.06em → 0.
|
|
217
|
+
- `--letter-spacing-h4`: 0.02em → 0 → 0 (18px / 20px / 20px)
|
|
218
|
+
- `--letter-spacing-p1`: 0.02em → 0.02em → 0.02em (16px / 18px / 18px)
|
|
219
|
+
- `--letter-spacing-p2`: 0.04em → 0.02em → 0.02em (14px / 16px / 16px)
|
|
220
|
+
- `--letter-spacing-p3`: 0.06em → 0.04em → 0.04em (12px / 14px / 14px)
|
|
221
221
|
|
|
222
222
|
### Переходы
|
|
223
223
|
|
|
@@ -327,27 +327,14 @@ document.documentElement.setAttribute('data-theme', 'light');
|
|
|
327
327
|
|
|
328
328
|
### Tabs
|
|
329
329
|
|
|
330
|
-
Вкладки с
|
|
330
|
+
Вкладки с минималистичным дизайном без border.
|
|
331
331
|
|
|
332
332
|
```jsx
|
|
333
333
|
import { Tabs, Tab } from '@donkit-ai/design-system';
|
|
334
334
|
import { AlertCircle } from 'lucide-react';
|
|
335
335
|
|
|
336
|
-
//
|
|
337
|
-
<Tabs size="medium"
|
|
338
|
-
<Tab selected={selectedTab === 'tab1'} onClick={() => setSelectedTab('tab1')}>
|
|
339
|
-
Overview
|
|
340
|
-
</Tab>
|
|
341
|
-
<Tab selected={selectedTab === 'tab2'} onClick={() => setSelectedTab('tab2')}>
|
|
342
|
-
Details
|
|
343
|
-
</Tab>
|
|
344
|
-
<Tab selected={selectedTab === 'tab3'} onClick={() => setSelectedTab('tab3')}>
|
|
345
|
-
Settings
|
|
346
|
-
</Tab>
|
|
347
|
-
</Tabs>
|
|
348
|
-
|
|
349
|
-
// Ghost tabs - без border, минималистичный стиль
|
|
350
|
-
<Tabs size="medium" variant="ghost">
|
|
336
|
+
// Basic tabs
|
|
337
|
+
<Tabs size="medium">
|
|
351
338
|
<Tab selected={selectedTab === 'tab1'} onClick={() => setSelectedTab('tab1')}>
|
|
352
339
|
Overview
|
|
353
340
|
</Tab>
|
|
@@ -360,7 +347,7 @@ import { AlertCircle } from 'lucide-react';
|
|
|
360
347
|
</Tabs>
|
|
361
348
|
|
|
362
349
|
// With icons (всегда 20px для Tabs)
|
|
363
|
-
<Tabs size="small"
|
|
350
|
+
<Tabs size="small">
|
|
364
351
|
<Tab
|
|
365
352
|
selected={selectedTab === 'alerts'}
|
|
366
353
|
onClick={() => setSelectedTab('alerts')}
|
|
@@ -374,19 +361,16 @@ import { AlertCircle } from 'lucide-react';
|
|
|
374
361
|
</Tabs>
|
|
375
362
|
|
|
376
363
|
// Disabled tab
|
|
377
|
-
<Tabs size="medium"
|
|
364
|
+
<Tabs size="medium">
|
|
378
365
|
<Tab selected>Active</Tab>
|
|
379
366
|
<Tab disabled>Disabled</Tab>
|
|
380
367
|
</Tabs>
|
|
381
368
|
```
|
|
382
369
|
|
|
383
|
-
|
|
384
|
-
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
- **ghost** - без border, минималистичный
|
|
388
|
-
- Selected: фон `--color-item-bg-selected`
|
|
389
|
-
- Hover: фон `--color-item-bg-hover`
|
|
370
|
+
**Стили:**
|
|
371
|
+
- Selected: фон `--color-item-bg-selected`, текст `--color-txt-icon-1`
|
|
372
|
+
- Hover: фон `--color-item-bg-hover`, текст `--color-txt-icon-1`
|
|
373
|
+
- Default: текст `--color-txt-icon-2`
|
|
390
374
|
|
|
391
375
|
**Размеры:** small, medium, large
|
|
392
376
|
|
package/package.json
CHANGED
package/src/components/Alert.css
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
gap: var(--space-s);
|
|
5
5
|
padding: var(--space-s);
|
|
6
6
|
border-radius: var(--radius-s);
|
|
7
|
-
border: 1px solid;
|
|
8
7
|
}
|
|
9
8
|
|
|
10
9
|
.ds-alert--no-title {
|
|
@@ -59,7 +58,6 @@
|
|
|
59
58
|
/* Variants */
|
|
60
59
|
.ds-alert--info {
|
|
61
60
|
background: linear-gradient(var(--color-status-info-bg), var(--color-status-info-bg)), var(--color-bg);
|
|
62
|
-
border-color: var(--color-status-info);
|
|
63
61
|
color: var(--color-status-info);
|
|
64
62
|
}
|
|
65
63
|
|
|
@@ -69,7 +67,6 @@
|
|
|
69
67
|
|
|
70
68
|
.ds-alert--success {
|
|
71
69
|
background: linear-gradient(var(--color-status-success-bg), var(--color-status-success-bg)), var(--color-bg);
|
|
72
|
-
border-color: var(--color-status-success);
|
|
73
70
|
color: var(--color-status-success);
|
|
74
71
|
}
|
|
75
72
|
|
|
@@ -79,7 +76,6 @@
|
|
|
79
76
|
|
|
80
77
|
.ds-alert--warning {
|
|
81
78
|
background: linear-gradient(var(--color-status-warning-bg), var(--color-status-warning-bg)), var(--color-bg);
|
|
82
|
-
border-color: var(--color-status-warning);
|
|
83
79
|
color: var(--color-status-warning);
|
|
84
80
|
}
|
|
85
81
|
|
|
@@ -89,7 +85,6 @@
|
|
|
89
85
|
|
|
90
86
|
.ds-alert--error {
|
|
91
87
|
background: linear-gradient(var(--color-status-error-bg), var(--color-status-error-bg)), var(--color-bg);
|
|
92
|
-
border-color: var(--color-status-error);
|
|
93
88
|
color: var(--color-status-error);
|
|
94
89
|
}
|
|
95
90
|
|
package/src/components/Badge.css
CHANGED
|
@@ -24,35 +24,29 @@
|
|
|
24
24
|
.ds-badge--default {
|
|
25
25
|
background-color: var(--color-item-bg);
|
|
26
26
|
color: var(--color-txt-icon-2);
|
|
27
|
-
border: 1px solid var(--color-txt-icon-2);
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
.ds-badge--info {
|
|
31
30
|
background-color: var(--color-status-info-bg);
|
|
32
31
|
color: var(--color-status-info);
|
|
33
|
-
border: 1px solid var(--color-status-info);
|
|
34
32
|
}
|
|
35
33
|
|
|
36
34
|
.ds-badge--success {
|
|
37
35
|
background-color: var(--color-status-success-bg);
|
|
38
36
|
color: var(--color-status-success);
|
|
39
|
-
border: 1px solid var(--color-status-success);
|
|
40
37
|
}
|
|
41
38
|
|
|
42
39
|
.ds-badge--warning {
|
|
43
40
|
background-color: var(--color-status-warning-bg);
|
|
44
41
|
color: var(--color-status-warning);
|
|
45
|
-
border: 1px solid var(--color-status-warning);
|
|
46
42
|
}
|
|
47
43
|
|
|
48
44
|
.ds-badge--error {
|
|
49
45
|
background-color: var(--color-status-error-bg);
|
|
50
46
|
color: var(--color-status-error);
|
|
51
|
-
border: 1px solid var(--color-status-error);
|
|
52
47
|
}
|
|
53
48
|
|
|
54
49
|
.ds-badge--accent {
|
|
55
50
|
background-color: var(--color-red-10);
|
|
56
51
|
color: var(--color-accent);
|
|
57
|
-
border: 1px solid var(--color-accent);
|
|
58
52
|
}
|
|
@@ -59,22 +59,22 @@
|
|
|
59
59
|
|
|
60
60
|
/* Sizes */
|
|
61
61
|
.ds-button--small {
|
|
62
|
-
height:
|
|
63
|
-
padding: 0 var(--
|
|
62
|
+
height: var(--height-s);
|
|
63
|
+
padding: 0 calc(var(--height-s) / 2);
|
|
64
64
|
font-size: var(--font-size-p2);
|
|
65
65
|
border-radius: var(--radius-xs);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
.ds-button--medium {
|
|
69
|
-
height:
|
|
70
|
-
padding: 0 var(--
|
|
69
|
+
height: var(--height-m);
|
|
70
|
+
padding: 0 calc(var(--height-m) / 2);
|
|
71
71
|
font-size: var(--font-size-p1);
|
|
72
72
|
border-radius: var(--radius-s);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
.ds-button--large {
|
|
76
|
-
height:
|
|
77
|
-
padding: 0 var(--
|
|
76
|
+
height: var(--height-l);
|
|
77
|
+
padding: 0 calc(var(--height-l) / 2);
|
|
78
78
|
font-size: var(--font-size-h4);
|
|
79
79
|
border-radius: var(--radius-s);
|
|
80
80
|
gap: var(--space-s);
|
package/src/components/Input.css
CHANGED
|
@@ -59,33 +59,33 @@
|
|
|
59
59
|
|
|
60
60
|
/* Sizes */
|
|
61
61
|
.ds-input--small {
|
|
62
|
-
height:
|
|
63
|
-
padding: 0 var(--
|
|
62
|
+
height: var(--height-s);
|
|
63
|
+
padding: 0 calc(var(--height-s) / 4);
|
|
64
64
|
font-size: var(--font-size-p2);
|
|
65
65
|
border-radius: var(--radius-xs);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
.ds-input--medium {
|
|
69
|
-
height:
|
|
70
|
-
padding: 0 var(--
|
|
69
|
+
height: var(--height-m);
|
|
70
|
+
padding: 0 calc(var(--height-m) / 4);
|
|
71
71
|
font-size: var(--font-size-p1);
|
|
72
72
|
border-radius: var(--radius-s);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
.ds-input--with-icon.ds-input--small {
|
|
76
|
-
padding-left: calc(var(--
|
|
76
|
+
padding-left: calc(var(--height-s) / 4 + 20px + var(--height-s) / 4);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
.ds-input--with-icon.ds-input--medium {
|
|
80
|
-
padding-left: calc(var(--
|
|
80
|
+
padding-left: calc(var(--height-m) / 4 + 24px + var(--height-m) / 4);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
.ds-input--with-icon-right.ds-input--small {
|
|
84
|
-
padding-right: calc(var(--
|
|
84
|
+
padding-right: calc(var(--height-s) / 4 + 20px + var(--height-s) / 4);
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
.ds-input--with-icon-right.ds-input--medium {
|
|
88
|
-
padding-right: calc(var(--
|
|
88
|
+
padding-right: calc(var(--height-m) / 4 + 24px + var(--height-m) / 4);
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
.ds-input-icon {
|
|
@@ -97,11 +97,11 @@
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
.ds-input-icon--small {
|
|
100
|
-
left:
|
|
100
|
+
left: 8px;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
.ds-input-icon--medium {
|
|
104
|
-
left:
|
|
104
|
+
left: 11px;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
.ds-input-icon-right {
|
|
@@ -122,11 +122,11 @@
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
.ds-input-icon-right--small {
|
|
125
|
-
right:
|
|
125
|
+
right: 8px;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
.ds-input-icon-right--medium {
|
|
129
|
-
right:
|
|
129
|
+
right: 11px;
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
.ds-input-hint {
|
|
@@ -61,15 +61,15 @@
|
|
|
61
61
|
|
|
62
62
|
/* Sizes */
|
|
63
63
|
.ds-select-trigger--small {
|
|
64
|
-
height:
|
|
65
|
-
padding: 0 var(--
|
|
64
|
+
height: var(--height-s);
|
|
65
|
+
padding: 0 calc(var(--height-s) / 4);
|
|
66
66
|
font-size: var(--font-size-p2);
|
|
67
67
|
border-radius: var(--radius-xs);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
.ds-select-trigger--medium {
|
|
71
|
-
height:
|
|
72
|
-
padding: 0 var(--
|
|
71
|
+
height: var(--height-m);
|
|
72
|
+
padding: 0 calc(var(--height-m) / 4);
|
|
73
73
|
font-size: var(--font-size-p1);
|
|
74
74
|
border-radius: var(--radius-s);
|
|
75
75
|
}
|
|
@@ -135,14 +135,14 @@
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
.ds-select-option--small {
|
|
138
|
-
min-height:
|
|
139
|
-
padding: var(--space-xs) var(--
|
|
138
|
+
min-height: var(--height-s);
|
|
139
|
+
padding: var(--space-xs) calc(var(--height-s) / 4);
|
|
140
140
|
font-size: var(--font-size-p2);
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
.ds-select-option--medium {
|
|
144
|
-
min-height:
|
|
145
|
-
padding: var(--space-
|
|
144
|
+
min-height: var(--height-m);
|
|
145
|
+
padding: var(--space-xs) calc(var(--height-m) / 4);
|
|
146
146
|
font-size: var(--font-size-p1);
|
|
147
147
|
}
|
|
148
148
|
|
|
@@ -100,13 +100,13 @@
|
|
|
100
100
|
|
|
101
101
|
/* Small */
|
|
102
102
|
.ds-stepper--small .ds-stepper-button {
|
|
103
|
-
width:
|
|
104
|
-
height:
|
|
103
|
+
width: var(--height-s);
|
|
104
|
+
height: var(--height-s);
|
|
105
105
|
padding: 0;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
.ds-stepper--small .ds-stepper-input {
|
|
109
|
-
height:
|
|
109
|
+
height: var(--height-s);
|
|
110
110
|
font-size: var(--font-size-p2);
|
|
111
111
|
letter-spacing: var(--letter-spacing-p2);
|
|
112
112
|
padding: 0 var(--space-xs);
|
|
@@ -114,13 +114,13 @@
|
|
|
114
114
|
|
|
115
115
|
/* Medium */
|
|
116
116
|
.ds-stepper--medium .ds-stepper-button {
|
|
117
|
-
width:
|
|
118
|
-
height:
|
|
117
|
+
width: var(--height-m);
|
|
118
|
+
height: var(--height-m);
|
|
119
119
|
padding: 0;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
.ds-stepper--medium .ds-stepper-input {
|
|
123
|
-
height:
|
|
123
|
+
height: var(--height-m);
|
|
124
124
|
font-size: var(--font-size-p1);
|
|
125
125
|
letter-spacing: var(--letter-spacing-p1);
|
|
126
126
|
padding: 0 var(--space-s);
|
package/src/components/Tabs.css
CHANGED
|
@@ -20,20 +20,6 @@
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
/* Variants */
|
|
23
|
-
.ds-tab--secondary {
|
|
24
|
-
border: 1px solid var(--color-border);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.ds-tab--secondary:hover:not(.ds-tab--selected):not(:disabled) {
|
|
28
|
-
background-color: var(--color-item-bg-hover);
|
|
29
|
-
border-color: var(--color-border-hover);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
.ds-tab--secondary.ds-tab--selected {
|
|
33
|
-
background-color: var(--color-item-bg-selected);
|
|
34
|
-
border-color: var(--color-border-selected);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
23
|
.ds-tab--ghost {
|
|
38
24
|
border: none;
|
|
39
25
|
color: var(--color-txt-icon-2);
|
|
@@ -51,22 +37,22 @@
|
|
|
51
37
|
|
|
52
38
|
/* Sizes */
|
|
53
39
|
.ds-tab--small {
|
|
54
|
-
height:
|
|
55
|
-
padding: 0 var(--
|
|
40
|
+
height: var(--height-s);
|
|
41
|
+
padding: 0 calc(var(--height-s) / 2);
|
|
56
42
|
font-size: var(--font-size-p2);
|
|
57
43
|
border-radius: var(--radius-xs);
|
|
58
44
|
}
|
|
59
45
|
|
|
60
46
|
.ds-tab--medium {
|
|
61
|
-
height:
|
|
62
|
-
padding: 0 var(--
|
|
47
|
+
height: var(--height-m);
|
|
48
|
+
padding: 0 calc(var(--height-m) / 2);
|
|
63
49
|
font-size: var(--font-size-p1);
|
|
64
50
|
border-radius: var(--radius-s);
|
|
65
51
|
}
|
|
66
52
|
|
|
67
53
|
.ds-tab--large {
|
|
68
|
-
height:
|
|
69
|
-
padding: 0 var(--
|
|
54
|
+
height: var(--height-l);
|
|
55
|
+
padding: 0 calc(var(--height-l) / 2);
|
|
70
56
|
font-size: var(--font-size-p1);
|
|
71
57
|
border-radius: var(--radius-s);
|
|
72
58
|
gap: var(--space-s);
|
package/src/components/Tabs.jsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import './Tabs.css';
|
|
3
3
|
|
|
4
|
-
export function Tabs({ children, size = 'medium', variant = '
|
|
4
|
+
export function Tabs({ children, size = 'medium', variant = 'ghost', ...props }) {
|
|
5
5
|
return (
|
|
6
6
|
<div className="ds-tabs" role="tablist" {...props}>
|
|
7
7
|
{React.Children.map(children, (child) => {
|
|
@@ -14,7 +14,7 @@ export function Tabs({ children, size = 'medium', variant = 'secondary', ...prop
|
|
|
14
14
|
);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
export function Tab({ children, selected = false, onClick, size = 'medium', variant = '
|
|
17
|
+
export function Tab({ children, selected = false, onClick, size = 'medium', variant = 'ghost', disabled = false, icon, ...props }) {
|
|
18
18
|
const isIconOnly = icon && !children;
|
|
19
19
|
|
|
20
20
|
const className = [
|
|
@@ -28,8 +28,10 @@
|
|
|
28
28
|
transition: border-color var(--transition-normal);
|
|
29
29
|
line-height: 1.5;
|
|
30
30
|
resize: vertical;
|
|
31
|
-
/* Кастомный resize handle
|
|
32
|
-
background
|
|
31
|
+
/* Кастомный resize handle */
|
|
32
|
+
background:
|
|
33
|
+
linear-gradient(135deg, transparent 6px, var(--color-border) 6px, var(--color-border) 7px, transparent 7px),
|
|
34
|
+
linear-gradient(135deg, transparent 10px, var(--color-border) 10px, var(--color-border) 11px, transparent 11px);
|
|
33
35
|
background-repeat: no-repeat;
|
|
34
36
|
background-position: bottom right;
|
|
35
37
|
background-size: 12px 12px;
|
|
@@ -41,14 +43,24 @@
|
|
|
41
43
|
|
|
42
44
|
.ds-textarea:hover:not(:disabled) {
|
|
43
45
|
border-color: var(--color-border-hover);
|
|
44
|
-
background
|
|
46
|
+
background:
|
|
47
|
+
linear-gradient(135deg, transparent 6px, var(--color-border-hover) 6px, var(--color-border-hover) 7px, transparent 7px),
|
|
48
|
+
linear-gradient(135deg, transparent 10px, var(--color-border-hover) 10px, var(--color-border-hover) 11px, transparent 11px);
|
|
49
|
+
background-repeat: no-repeat;
|
|
50
|
+
background-position: bottom right;
|
|
51
|
+
background-size: 12px 12px;
|
|
45
52
|
}
|
|
46
53
|
|
|
47
54
|
.ds-textarea:focus,
|
|
48
55
|
.ds-textarea:active {
|
|
49
56
|
outline: none;
|
|
50
57
|
border-color: var(--color-border-hover);
|
|
51
|
-
background
|
|
58
|
+
background:
|
|
59
|
+
linear-gradient(135deg, transparent 6px, var(--color-border-hover) 6px, var(--color-border-hover) 7px, transparent 7px),
|
|
60
|
+
linear-gradient(135deg, transparent 10px, var(--color-border-hover) 10px, var(--color-border-hover) 11px, transparent 11px);
|
|
61
|
+
background-repeat: no-repeat;
|
|
62
|
+
background-position: bottom right;
|
|
63
|
+
background-size: 12px 12px;
|
|
52
64
|
}
|
|
53
65
|
|
|
54
66
|
.ds-textarea:disabled {
|
|
@@ -57,12 +69,17 @@
|
|
|
57
69
|
|
|
58
70
|
.ds-textarea--error {
|
|
59
71
|
border-color: var(--color-error);
|
|
60
|
-
background
|
|
72
|
+
background:
|
|
73
|
+
linear-gradient(135deg, transparent 6px, var(--color-error) 6px, var(--color-error) 7px, transparent 7px),
|
|
74
|
+
linear-gradient(135deg, transparent 10px, var(--color-error) 10px, var(--color-error) 11px, transparent 11px);
|
|
75
|
+
background-repeat: no-repeat;
|
|
76
|
+
background-position: bottom right;
|
|
77
|
+
background-size: 12px 12px;
|
|
61
78
|
}
|
|
62
79
|
|
|
63
80
|
.ds-textarea--no-resize {
|
|
64
81
|
resize: none;
|
|
65
|
-
background
|
|
82
|
+
background: none;
|
|
66
83
|
}
|
|
67
84
|
|
|
68
85
|
/* Sizes */
|
package/src/styles/tokens.css
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* ===================================*/
|
|
11
11
|
/* Color primitives - white */
|
|
12
12
|
--color-white: #FFFAFA;
|
|
13
|
+
--color-white-95: rgba(255, 250, 250, 0.95);
|
|
13
14
|
--color-white-65: rgba(255, 250, 250, 0.65);
|
|
14
15
|
--color-white-50: rgba(255, 250, 250, 0.5);
|
|
15
16
|
--color-white-40: rgba(255, 250, 250, 0.4);
|
|
@@ -20,6 +21,7 @@
|
|
|
20
21
|
|
|
21
22
|
/* Color primitives - black */
|
|
22
23
|
--color-black: #0E0F11;
|
|
24
|
+
--color-black-95: rgba(14, 15, 17, 0.95);
|
|
23
25
|
--color-black-65: rgba(14, 15, 17, 0.65);
|
|
24
26
|
--color-black-60: rgba(14, 15, 17, 0.6);
|
|
25
27
|
--color-black-50: rgba(14, 15, 17, 0.5);
|
|
@@ -65,7 +67,7 @@
|
|
|
65
67
|
--color-border: var(--color-white-20);
|
|
66
68
|
--color-border-hover: var(--color-white-40);
|
|
67
69
|
--color-border-selected: var(--color-white-50);
|
|
68
|
-
--color-txt-icon-1: var(--color-white);
|
|
70
|
+
--color-txt-icon-1: var(--color-white-95);
|
|
69
71
|
--color-txt-icon-2: var(--color-white-65);
|
|
70
72
|
--color-accent: var(--color-red);
|
|
71
73
|
--color-accent-hover: var(--color-red-90);
|
|
@@ -92,7 +94,7 @@
|
|
|
92
94
|
--color-border: var(--color-black-20);
|
|
93
95
|
--color-border-hover: var(--color-black-40);
|
|
94
96
|
--color-border-selected: var(--color-black-50);
|
|
95
|
-
--color-txt-icon-1: var(--color-black);
|
|
97
|
+
--color-txt-icon-1: var(--color-black-95);
|
|
96
98
|
--color-txt-icon-2: var(--color-black-65);
|
|
97
99
|
--color-accent: var(--color-red);
|
|
98
100
|
--color-accent-hover: var(--color-red-90);
|
|
@@ -160,13 +162,22 @@
|
|
|
160
162
|
/* =====================================
|
|
161
163
|
* 4) Border radius
|
|
162
164
|
* ===================================*/
|
|
163
|
-
--radius-xs:
|
|
164
|
-
--radius-s:
|
|
165
|
+
--radius-xs: 4px;
|
|
166
|
+
--radius-s: 6px;
|
|
165
167
|
}
|
|
166
168
|
|
|
167
169
|
:root {
|
|
168
170
|
/* =====================================
|
|
169
|
-
* 5)
|
|
171
|
+
* 5) Component heights
|
|
172
|
+
* ===================================*/
|
|
173
|
+
--height-s: 32px;
|
|
174
|
+
--height-m: 44px;
|
|
175
|
+
--height-l: 56px;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
:root {
|
|
179
|
+
/* =====================================
|
|
180
|
+
* 6) Typography scale (mobile/tablet/desktop)
|
|
170
181
|
* ===================================*/
|
|
171
182
|
/* Base typography settings */
|
|
172
183
|
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
|
@@ -174,21 +185,21 @@
|
|
|
174
185
|
font-weight: 400;
|
|
175
186
|
|
|
176
187
|
/* Mobile (default) */
|
|
177
|
-
--font-size-h1:
|
|
188
|
+
--font-size-h1: 32px;
|
|
178
189
|
--font-size-h2: 28px;
|
|
179
190
|
--font-size-h3: 24px;
|
|
180
|
-
--font-size-h4:
|
|
191
|
+
--font-size-h4: 18px;
|
|
181
192
|
--font-size-p1: 16px;
|
|
182
|
-
--font-size-p2:
|
|
193
|
+
--font-size-p2: 14px;
|
|
183
194
|
--font-size-p3: 12px;
|
|
184
195
|
|
|
185
196
|
/* Letter spacing (tracking) for small font sizes */
|
|
186
197
|
--letter-spacing-h1: 0;
|
|
187
198
|
--letter-spacing-h2: 0;
|
|
188
199
|
--letter-spacing-h3: 0;
|
|
189
|
-
--letter-spacing-h4: 0.02em; /*
|
|
200
|
+
--letter-spacing-h4: 0.02em; /* 18px → +2% */
|
|
190
201
|
--letter-spacing-p1: 0.02em; /* 16px → +2% */
|
|
191
|
-
--letter-spacing-p2: 0.
|
|
202
|
+
--letter-spacing-p2: 0.04em; /* 14px → +4% */
|
|
192
203
|
--letter-spacing-p3: 0.06em; /* 12px → +6% */
|
|
193
204
|
}
|
|
194
205
|
|
|
@@ -196,33 +207,33 @@
|
|
|
196
207
|
:root {
|
|
197
208
|
/* Tablet */
|
|
198
209
|
--font-size-h1: 40px;
|
|
199
|
-
--font-size-h2:
|
|
210
|
+
--font-size-h2: 36px;
|
|
200
211
|
--font-size-h3: 28px;
|
|
201
212
|
--font-size-h4: 20px;
|
|
202
|
-
--font-size-p1:
|
|
213
|
+
--font-size-p1: 18px;
|
|
203
214
|
--font-size-p2: 16px;
|
|
204
|
-
--font-size-p3:
|
|
215
|
+
--font-size-p3: 14px;
|
|
205
216
|
|
|
206
217
|
--letter-spacing-h4: 0; /* 20px → no tracking */
|
|
207
|
-
--letter-spacing-p1: 0.02em; /*
|
|
218
|
+
--letter-spacing-p1: 0.02em; /* 18px → +2% */
|
|
208
219
|
--letter-spacing-p2: 0.02em; /* 16px → +2% */
|
|
209
|
-
--letter-spacing-p3: 0.
|
|
220
|
+
--letter-spacing-p3: 0.04em; /* 14px → +4% */
|
|
210
221
|
}
|
|
211
222
|
}
|
|
212
223
|
|
|
213
224
|
@media (min-width: 1280px) {
|
|
214
225
|
:root {
|
|
215
226
|
/* Desktop */
|
|
216
|
-
--font-size-h1:
|
|
227
|
+
--font-size-h1: 40px;
|
|
217
228
|
--font-size-h2: 36px;
|
|
218
|
-
--font-size-h3:
|
|
219
|
-
--font-size-h4:
|
|
220
|
-
--font-size-p1:
|
|
229
|
+
--font-size-h3: 28px;
|
|
230
|
+
--font-size-h4: 20px;
|
|
231
|
+
--font-size-p1: 18px;
|
|
221
232
|
--font-size-p2: 16px;
|
|
222
233
|
--font-size-p3: 14px;
|
|
223
234
|
|
|
224
|
-
--letter-spacing-h4: 0; /*
|
|
225
|
-
--letter-spacing-p1: 0; /*
|
|
235
|
+
--letter-spacing-h4: 0; /* 20px → no tracking */
|
|
236
|
+
--letter-spacing-p1: 0.02em; /* 18px → +2% */
|
|
226
237
|
--letter-spacing-p2: 0.02em; /* 16px → +2% */
|
|
227
238
|
--letter-spacing-p3: 0.04em; /* 14px → +4% */
|
|
228
239
|
}
|
|
@@ -230,7 +241,7 @@
|
|
|
230
241
|
|
|
231
242
|
:root {
|
|
232
243
|
/* =====================================
|
|
233
|
-
*
|
|
244
|
+
* 7) Additional layout tokens
|
|
234
245
|
* ===================================*/
|
|
235
246
|
/* Mobile (default) */
|
|
236
247
|
--page-padding-hor: 16px;
|