@donkit-ai/design-system 0.2.7 → 0.2.9
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 +18 -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 +29 -20
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 {
|
|
@@ -39,6 +39,14 @@
|
|
|
39
39
|
line-height: 1.5;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
.ds-select-trigger > span {
|
|
43
|
+
flex: 1;
|
|
44
|
+
min-width: 0;
|
|
45
|
+
overflow: hidden;
|
|
46
|
+
text-overflow: ellipsis;
|
|
47
|
+
white-space: nowrap;
|
|
48
|
+
}
|
|
49
|
+
|
|
42
50
|
.ds-select-trigger:hover:not(:disabled) {
|
|
43
51
|
border-color: var(--color-border-hover);
|
|
44
52
|
}
|
|
@@ -53,15 +61,15 @@
|
|
|
53
61
|
|
|
54
62
|
/* Sizes */
|
|
55
63
|
.ds-select-trigger--small {
|
|
56
|
-
height:
|
|
57
|
-
padding: 0 var(--
|
|
64
|
+
height: var(--height-s);
|
|
65
|
+
padding: 0 calc(var(--height-s) / 4);
|
|
58
66
|
font-size: var(--font-size-p2);
|
|
59
67
|
border-radius: var(--radius-xs);
|
|
60
68
|
}
|
|
61
69
|
|
|
62
70
|
.ds-select-trigger--medium {
|
|
63
|
-
height:
|
|
64
|
-
padding: 0 var(--
|
|
71
|
+
height: var(--height-m);
|
|
72
|
+
padding: 0 calc(var(--height-m) / 4);
|
|
65
73
|
font-size: var(--font-size-p1);
|
|
66
74
|
border-radius: var(--radius-s);
|
|
67
75
|
}
|
|
@@ -122,17 +130,19 @@
|
|
|
122
130
|
text-align: left;
|
|
123
131
|
transition: background-color var(--transition-normal);
|
|
124
132
|
line-height: 1.5;
|
|
133
|
+
white-space: normal;
|
|
134
|
+
word-wrap: break-word;
|
|
125
135
|
}
|
|
126
136
|
|
|
127
137
|
.ds-select-option--small {
|
|
128
|
-
height:
|
|
129
|
-
padding:
|
|
138
|
+
min-height: var(--height-s);
|
|
139
|
+
padding: var(--space-xs) calc(var(--height-s) / 4);
|
|
130
140
|
font-size: var(--font-size-p2);
|
|
131
141
|
}
|
|
132
142
|
|
|
133
143
|
.ds-select-option--medium {
|
|
134
|
-
height:
|
|
135
|
-
padding:
|
|
144
|
+
min-height: var(--height-m);
|
|
145
|
+
padding: var(--space-xs) calc(var(--height-m) / 4);
|
|
136
146
|
font-size: var(--font-size-p1);
|
|
137
147
|
}
|
|
138
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
|
@@ -160,13 +160,22 @@
|
|
|
160
160
|
/* =====================================
|
|
161
161
|
* 4) Border radius
|
|
162
162
|
* ===================================*/
|
|
163
|
-
--radius-xs:
|
|
164
|
-
--radius-s:
|
|
163
|
+
--radius-xs: 4px;
|
|
164
|
+
--radius-s: 6px;
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
:root {
|
|
168
168
|
/* =====================================
|
|
169
|
-
* 5)
|
|
169
|
+
* 5) Component heights
|
|
170
|
+
* ===================================*/
|
|
171
|
+
--height-s: 32px;
|
|
172
|
+
--height-m: 44px;
|
|
173
|
+
--height-l: 56px;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
:root {
|
|
177
|
+
/* =====================================
|
|
178
|
+
* 6) Typography scale (mobile/tablet/desktop)
|
|
170
179
|
* ===================================*/
|
|
171
180
|
/* Base typography settings */
|
|
172
181
|
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
|
@@ -174,21 +183,21 @@
|
|
|
174
183
|
font-weight: 400;
|
|
175
184
|
|
|
176
185
|
/* Mobile (default) */
|
|
177
|
-
--font-size-h1:
|
|
186
|
+
--font-size-h1: 32px;
|
|
178
187
|
--font-size-h2: 28px;
|
|
179
188
|
--font-size-h3: 24px;
|
|
180
|
-
--font-size-h4:
|
|
189
|
+
--font-size-h4: 18px;
|
|
181
190
|
--font-size-p1: 16px;
|
|
182
|
-
--font-size-p2:
|
|
191
|
+
--font-size-p2: 14px;
|
|
183
192
|
--font-size-p3: 12px;
|
|
184
193
|
|
|
185
194
|
/* Letter spacing (tracking) for small font sizes */
|
|
186
195
|
--letter-spacing-h1: 0;
|
|
187
196
|
--letter-spacing-h2: 0;
|
|
188
197
|
--letter-spacing-h3: 0;
|
|
189
|
-
--letter-spacing-h4: 0.02em; /*
|
|
198
|
+
--letter-spacing-h4: 0.02em; /* 18px → +2% */
|
|
190
199
|
--letter-spacing-p1: 0.02em; /* 16px → +2% */
|
|
191
|
-
--letter-spacing-p2: 0.
|
|
200
|
+
--letter-spacing-p2: 0.04em; /* 14px → +4% */
|
|
192
201
|
--letter-spacing-p3: 0.06em; /* 12px → +6% */
|
|
193
202
|
}
|
|
194
203
|
|
|
@@ -196,33 +205,33 @@
|
|
|
196
205
|
:root {
|
|
197
206
|
/* Tablet */
|
|
198
207
|
--font-size-h1: 40px;
|
|
199
|
-
--font-size-h2:
|
|
208
|
+
--font-size-h2: 36px;
|
|
200
209
|
--font-size-h3: 28px;
|
|
201
210
|
--font-size-h4: 20px;
|
|
202
|
-
--font-size-p1:
|
|
211
|
+
--font-size-p1: 18px;
|
|
203
212
|
--font-size-p2: 16px;
|
|
204
|
-
--font-size-p3:
|
|
213
|
+
--font-size-p3: 14px;
|
|
205
214
|
|
|
206
215
|
--letter-spacing-h4: 0; /* 20px → no tracking */
|
|
207
|
-
--letter-spacing-p1: 0.02em; /*
|
|
216
|
+
--letter-spacing-p1: 0.02em; /* 18px → +2% */
|
|
208
217
|
--letter-spacing-p2: 0.02em; /* 16px → +2% */
|
|
209
|
-
--letter-spacing-p3: 0.
|
|
218
|
+
--letter-spacing-p3: 0.04em; /* 14px → +4% */
|
|
210
219
|
}
|
|
211
220
|
}
|
|
212
221
|
|
|
213
222
|
@media (min-width: 1280px) {
|
|
214
223
|
:root {
|
|
215
224
|
/* Desktop */
|
|
216
|
-
--font-size-h1:
|
|
225
|
+
--font-size-h1: 40px;
|
|
217
226
|
--font-size-h2: 36px;
|
|
218
|
-
--font-size-h3:
|
|
219
|
-
--font-size-h4:
|
|
220
|
-
--font-size-p1:
|
|
227
|
+
--font-size-h3: 28px;
|
|
228
|
+
--font-size-h4: 20px;
|
|
229
|
+
--font-size-p1: 18px;
|
|
221
230
|
--font-size-p2: 16px;
|
|
222
231
|
--font-size-p3: 14px;
|
|
223
232
|
|
|
224
|
-
--letter-spacing-h4: 0; /*
|
|
225
|
-
--letter-spacing-p1: 0; /*
|
|
233
|
+
--letter-spacing-h4: 0; /* 20px → no tracking */
|
|
234
|
+
--letter-spacing-p1: 0.02em; /* 18px → +2% */
|
|
226
235
|
--letter-spacing-p2: 0.02em; /* 16px → +2% */
|
|
227
236
|
--letter-spacing-p3: 0.04em; /* 14px → +4% */
|
|
228
237
|
}
|
|
@@ -230,7 +239,7 @@
|
|
|
230
239
|
|
|
231
240
|
:root {
|
|
232
241
|
/* =====================================
|
|
233
|
-
*
|
|
242
|
+
* 7) Additional layout tokens
|
|
234
243
|
* ===================================*/
|
|
235
244
|
/* Mobile (default) */
|
|
236
245
|
--page-padding-hor: 16px;
|