@skygraph/styles 0.2.4 → 0.6.6
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 +98 -98
- package/components/autocomplete.css +35 -35
- package/components/autofield.css +67 -67
- package/components/avatar.css +37 -37
- package/components/badge.css +102 -102
- package/components/breadcrumb.css +29 -29
- package/components/button.css +181 -181
- package/components/calendar.css +408 -408
- package/components/carousel.css +102 -102
- package/components/cascader.css +380 -380
- package/components/charts.css +408 -408
- package/components/checkbox.css +114 -114
- package/components/collapse.css +166 -166
- package/components/colorpicker.css +252 -252
- package/components/context-menu.css +95 -95
- package/components/descriptions.css +82 -82
- package/components/diagram.css +435 -435
- package/components/drawer.css +124 -124
- package/components/dropdown.css +110 -110
- package/components/empty.css +25 -25
- package/components/event-timeline.css +134 -134
- package/components/field.css +35 -35
- package/components/form.css +115 -115
- package/components/gantt.css +166 -166
- package/components/input-number.css +76 -76
- package/components/input-password.css +104 -104
- package/components/input.css +211 -211
- package/components/list.css +366 -366
- package/components/mentions.css +54 -54
- package/components/menu.css +326 -326
- package/components/modal.css +1 -0
- package/components/notification.css +128 -128
- package/components/pagination.css +162 -162
- package/components/popconfirm.css +95 -95
- package/components/progress.css +116 -116
- package/components/radio.css +95 -95
- package/components/rate.css +48 -48
- package/components/resource-calendar.css +224 -224
- package/components/result.css +45 -45
- package/components/schema-form-editor.css +433 -433
- package/components/search-input.css +112 -112
- package/components/segmented.css +76 -76
- package/components/select.css +181 -181
- package/components/skeleton.css +72 -72
- package/components/slider.css +51 -51
- package/components/spin.css +102 -102
- package/components/steps.css +194 -194
- package/components/switch.css +75 -75
- package/components/table.css +9 -1
- package/components/tabs.css +137 -137
- package/components/tag.css +61 -61
- package/components/textarea.css +22 -22
- package/components/timeline.css +169 -169
- package/components/timepicker.css +224 -224
- package/components/tooltip.css +91 -91
- package/components/transfer.css +140 -140
- package/components/tree.css +601 -601
- package/components/treeselect.css +221 -221
- package/components/upload.css +124 -124
- package/index.css +70 -70
- package/index.d.ts +9 -9
- package/package.json +1 -1
- package/print.css +88 -88
- package/reset.css +17 -17
- package/themes/dark.css +17 -17
- package/themes/default.css +14 -14
- package/tokens.css +310 -310
- package/transitions.css +158 -158
|
@@ -1,134 +1,134 @@
|
|
|
1
|
-
/* EventTimeline — chronological event stream with optional grouping. */
|
|
2
|
-
|
|
3
|
-
.sg-event-timeline {
|
|
4
|
-
font-size: var(--sg-font-size);
|
|
5
|
-
color: var(--sg-color-text);
|
|
6
|
-
font-family: inherit;
|
|
7
|
-
gap: var(--sg-margin-md);
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.sg-event-timeline-vertical {
|
|
11
|
-
align-items: stretch;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
.sg-event-timeline-horizontal {
|
|
15
|
-
align-items: flex-start;
|
|
16
|
-
overflow-x: auto;
|
|
17
|
-
padding-bottom: var(--sg-padding-md);
|
|
18
|
-
/* Drop the flex gap horizontally: it broke the marker rail into disjoint
|
|
19
|
-
* segments (one per card) which read as a dashed, glitchy line. Items carry
|
|
20
|
-
* their own horizontal padding for spacing instead, and the rail below is
|
|
21
|
-
* extended to bridge that padding so it renders as one continuous track. */
|
|
22
|
-
gap: 0;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
.sg-event-timeline-group {
|
|
26
|
-
font-size: var(--sg-font-size-sm);
|
|
27
|
-
color: var(--sg-color-text-tertiary);
|
|
28
|
-
font-weight: 600;
|
|
29
|
-
letter-spacing: 0.04em;
|
|
30
|
-
text-transform: uppercase;
|
|
31
|
-
padding: var(--sg-padding-xs) 0;
|
|
32
|
-
border-bottom: 1px solid var(--sg-color-border-secondary);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.sg-event-timeline-horizontal .sg-event-timeline-group {
|
|
36
|
-
border-bottom: none;
|
|
37
|
-
border-right: 1px solid var(--sg-color-border-secondary);
|
|
38
|
-
padding: 0 var(--sg-padding-md);
|
|
39
|
-
align-self: stretch;
|
|
40
|
-
display: flex;
|
|
41
|
-
align-items: center;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.sg-event-timeline-item {
|
|
45
|
-
display: flex;
|
|
46
|
-
gap: var(--sg-margin-sm);
|
|
47
|
-
padding: var(--sg-padding-sm) 0;
|
|
48
|
-
/* Smooth color/transform transitions for hover; we only animate
|
|
49
|
-
* properties that touch the dot/title. */
|
|
50
|
-
transition: background-color var(--sg-transition-fast);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.sg-event-timeline-item:hover .sg-event-timeline-dot {
|
|
54
|
-
/* Slightly larger dot + brighter halo when the parent item is hovered.
|
|
55
|
-
* Both are driven by the new `--sg-event-timeline-dot-shadow-hover`
|
|
56
|
-
* token so the affordance remains theme-correct. */
|
|
57
|
-
transform: scale(1.2);
|
|
58
|
-
box-shadow: var(--sg-event-timeline-dot-shadow-hover);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.sg-event-timeline-horizontal .sg-event-timeline-item {
|
|
62
|
-
flex-direction: column;
|
|
63
|
-
align-items: flex-start;
|
|
64
|
-
min-width: 160px;
|
|
65
|
-
padding: 0 var(--sg-padding-md);
|
|
66
|
-
position: relative;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/* Horizontal mode: lay the marker out as a full-width rail so the dots line up
|
|
70
|
-
* on a single track instead of floating above each card. */
|
|
71
|
-
.sg-event-timeline-horizontal .sg-event-timeline-marker {
|
|
72
|
-
width: 100%;
|
|
73
|
-
justify-content: flex-start;
|
|
74
|
-
margin-bottom: var(--sg-margin-sm);
|
|
75
|
-
position: relative;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
.sg-event-timeline-horizontal .sg-event-timeline-marker::before {
|
|
79
|
-
content: '';
|
|
80
|
-
position: absolute;
|
|
81
|
-
top: 50%;
|
|
82
|
-
/* Extend across the item's own horizontal padding so adjacent items'
|
|
83
|
-
* rails meet edge-to-edge into one continuous line. */
|
|
84
|
-
left: calc(-1 * var(--sg-padding-md));
|
|
85
|
-
right: calc(-1 * var(--sg-padding-md));
|
|
86
|
-
height: 2px;
|
|
87
|
-
background: var(--sg-color-border-secondary);
|
|
88
|
-
transform: translateY(-50%);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.sg-event-timeline-horizontal .sg-event-timeline-dot {
|
|
92
|
-
position: relative;
|
|
93
|
-
z-index: var(--sg-z-base);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
.sg-event-timeline-marker {
|
|
97
|
-
display: flex;
|
|
98
|
-
align-items: center;
|
|
99
|
-
justify-content: center;
|
|
100
|
-
flex-shrink: 0;
|
|
101
|
-
width: 16px;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
.sg-event-timeline-dot {
|
|
105
|
-
width: 10px;
|
|
106
|
-
height: 10px;
|
|
107
|
-
border-radius: 50%;
|
|
108
|
-
background: var(--sg-color-primary);
|
|
109
|
-
display: inline-block;
|
|
110
|
-
/* Halo via the semantic token: outer ring of `--sg-color-bg` punches
|
|
111
|
-
* the dot out from the rail, inner glow uses primary-tint for depth. */
|
|
112
|
-
box-shadow: var(--sg-event-timeline-dot-shadow);
|
|
113
|
-
transition:
|
|
114
|
-
box-shadow var(--sg-transition-medium),
|
|
115
|
-
transform var(--sg-transition-medium);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
.sg-event-timeline-content {
|
|
119
|
-
flex: 1;
|
|
120
|
-
min-width: 0;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.sg-event-timeline-title {
|
|
124
|
-
font-weight: 600;
|
|
125
|
-
color: var(--sg-color-text);
|
|
126
|
-
line-height: var(--sg-line-height);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
.sg-event-timeline-description {
|
|
130
|
-
margin-top: var(--sg-margin-xs);
|
|
131
|
-
color: var(--sg-color-text-secondary);
|
|
132
|
-
font-size: var(--sg-font-size-sm);
|
|
133
|
-
line-height: var(--sg-line-height);
|
|
134
|
-
}
|
|
1
|
+
/* EventTimeline — chronological event stream with optional grouping. */
|
|
2
|
+
|
|
3
|
+
.sg-event-timeline {
|
|
4
|
+
font-size: var(--sg-font-size);
|
|
5
|
+
color: var(--sg-color-text);
|
|
6
|
+
font-family: inherit;
|
|
7
|
+
gap: var(--sg-margin-md);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.sg-event-timeline-vertical {
|
|
11
|
+
align-items: stretch;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.sg-event-timeline-horizontal {
|
|
15
|
+
align-items: flex-start;
|
|
16
|
+
overflow-x: auto;
|
|
17
|
+
padding-bottom: var(--sg-padding-md);
|
|
18
|
+
/* Drop the flex gap horizontally: it broke the marker rail into disjoint
|
|
19
|
+
* segments (one per card) which read as a dashed, glitchy line. Items carry
|
|
20
|
+
* their own horizontal padding for spacing instead, and the rail below is
|
|
21
|
+
* extended to bridge that padding so it renders as one continuous track. */
|
|
22
|
+
gap: 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.sg-event-timeline-group {
|
|
26
|
+
font-size: var(--sg-font-size-sm);
|
|
27
|
+
color: var(--sg-color-text-tertiary);
|
|
28
|
+
font-weight: 600;
|
|
29
|
+
letter-spacing: 0.04em;
|
|
30
|
+
text-transform: uppercase;
|
|
31
|
+
padding: var(--sg-padding-xs) 0;
|
|
32
|
+
border-bottom: 1px solid var(--sg-color-border-secondary);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.sg-event-timeline-horizontal .sg-event-timeline-group {
|
|
36
|
+
border-bottom: none;
|
|
37
|
+
border-right: 1px solid var(--sg-color-border-secondary);
|
|
38
|
+
padding: 0 var(--sg-padding-md);
|
|
39
|
+
align-self: stretch;
|
|
40
|
+
display: flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.sg-event-timeline-item {
|
|
45
|
+
display: flex;
|
|
46
|
+
gap: var(--sg-margin-sm);
|
|
47
|
+
padding: var(--sg-padding-sm) 0;
|
|
48
|
+
/* Smooth color/transform transitions for hover; we only animate
|
|
49
|
+
* properties that touch the dot/title. */
|
|
50
|
+
transition: background-color var(--sg-transition-fast);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.sg-event-timeline-item:hover .sg-event-timeline-dot {
|
|
54
|
+
/* Slightly larger dot + brighter halo when the parent item is hovered.
|
|
55
|
+
* Both are driven by the new `--sg-event-timeline-dot-shadow-hover`
|
|
56
|
+
* token so the affordance remains theme-correct. */
|
|
57
|
+
transform: scale(1.2);
|
|
58
|
+
box-shadow: var(--sg-event-timeline-dot-shadow-hover);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.sg-event-timeline-horizontal .sg-event-timeline-item {
|
|
62
|
+
flex-direction: column;
|
|
63
|
+
align-items: flex-start;
|
|
64
|
+
min-width: 160px;
|
|
65
|
+
padding: 0 var(--sg-padding-md);
|
|
66
|
+
position: relative;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* Horizontal mode: lay the marker out as a full-width rail so the dots line up
|
|
70
|
+
* on a single track instead of floating above each card. */
|
|
71
|
+
.sg-event-timeline-horizontal .sg-event-timeline-marker {
|
|
72
|
+
width: 100%;
|
|
73
|
+
justify-content: flex-start;
|
|
74
|
+
margin-bottom: var(--sg-margin-sm);
|
|
75
|
+
position: relative;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.sg-event-timeline-horizontal .sg-event-timeline-marker::before {
|
|
79
|
+
content: '';
|
|
80
|
+
position: absolute;
|
|
81
|
+
top: 50%;
|
|
82
|
+
/* Extend across the item's own horizontal padding so adjacent items'
|
|
83
|
+
* rails meet edge-to-edge into one continuous line. */
|
|
84
|
+
left: calc(-1 * var(--sg-padding-md));
|
|
85
|
+
right: calc(-1 * var(--sg-padding-md));
|
|
86
|
+
height: 2px;
|
|
87
|
+
background: var(--sg-color-border-secondary);
|
|
88
|
+
transform: translateY(-50%);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.sg-event-timeline-horizontal .sg-event-timeline-dot {
|
|
92
|
+
position: relative;
|
|
93
|
+
z-index: var(--sg-z-base);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.sg-event-timeline-marker {
|
|
97
|
+
display: flex;
|
|
98
|
+
align-items: center;
|
|
99
|
+
justify-content: center;
|
|
100
|
+
flex-shrink: 0;
|
|
101
|
+
width: 16px;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.sg-event-timeline-dot {
|
|
105
|
+
width: 10px;
|
|
106
|
+
height: 10px;
|
|
107
|
+
border-radius: 50%;
|
|
108
|
+
background: var(--sg-color-primary);
|
|
109
|
+
display: inline-block;
|
|
110
|
+
/* Halo via the semantic token: outer ring of `--sg-color-bg` punches
|
|
111
|
+
* the dot out from the rail, inner glow uses primary-tint for depth. */
|
|
112
|
+
box-shadow: var(--sg-event-timeline-dot-shadow);
|
|
113
|
+
transition:
|
|
114
|
+
box-shadow var(--sg-transition-medium),
|
|
115
|
+
transform var(--sg-transition-medium);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.sg-event-timeline-content {
|
|
119
|
+
flex: 1;
|
|
120
|
+
min-width: 0;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.sg-event-timeline-title {
|
|
124
|
+
font-weight: 600;
|
|
125
|
+
color: var(--sg-color-text);
|
|
126
|
+
line-height: var(--sg-line-height);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.sg-event-timeline-description {
|
|
130
|
+
margin-top: var(--sg-margin-xs);
|
|
131
|
+
color: var(--sg-color-text-secondary);
|
|
132
|
+
font-size: var(--sg-font-size-sm);
|
|
133
|
+
line-height: var(--sg-line-height);
|
|
134
|
+
}
|
package/components/field.css
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
.sg-field {
|
|
2
|
-
font-size: inherit;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
.sg-field-label {
|
|
6
|
-
display: block;
|
|
7
|
-
margin-bottom: var(--sg-margin-xs);
|
|
8
|
-
color: var(--sg-color-text);
|
|
9
|
-
font-size: var(--sg-font-size);
|
|
10
|
-
line-height: var(--sg-line-height);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
.sg-field-required {
|
|
14
|
-
color: var(--sg-color-error);
|
|
15
|
-
margin-left: 2px;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.sg-field-control {
|
|
19
|
-
position: relative;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.sg-field-error {
|
|
23
|
-
color: var(--sg-color-error);
|
|
24
|
-
font-size: var(--sg-font-size-sm);
|
|
25
|
-
margin-top: var(--sg-margin-xs);
|
|
26
|
-
line-height: var(--sg-line-height);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.sg-field-has-error .sg-input {
|
|
30
|
-
--sg-input-border: var(--sg-color-error);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.sg-field-has-error .sg-input:focus {
|
|
34
|
-
box-shadow: 0 0 0 2px var(--sg-color-error-bg);
|
|
35
|
-
}
|
|
1
|
+
.sg-field {
|
|
2
|
+
font-size: inherit;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.sg-field-label {
|
|
6
|
+
display: block;
|
|
7
|
+
margin-bottom: var(--sg-margin-xs);
|
|
8
|
+
color: var(--sg-color-text);
|
|
9
|
+
font-size: var(--sg-font-size);
|
|
10
|
+
line-height: var(--sg-line-height);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.sg-field-required {
|
|
14
|
+
color: var(--sg-color-error);
|
|
15
|
+
margin-left: 2px;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.sg-field-control {
|
|
19
|
+
position: relative;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.sg-field-error {
|
|
23
|
+
color: var(--sg-color-error);
|
|
24
|
+
font-size: var(--sg-font-size-sm);
|
|
25
|
+
margin-top: var(--sg-margin-xs);
|
|
26
|
+
line-height: var(--sg-line-height);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.sg-field-has-error .sg-input {
|
|
30
|
+
--sg-input-border: var(--sg-color-error);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.sg-field-has-error .sg-input:focus {
|
|
34
|
+
box-shadow: 0 0 0 2px var(--sg-color-error-bg);
|
|
35
|
+
}
|
package/components/form.css
CHANGED
|
@@ -1,115 +1,115 @@
|
|
|
1
|
-
.sg-form {
|
|
2
|
-
font-size: var(--sg-font-size);
|
|
3
|
-
color: var(--sg-color-text);
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
/* Layouts */
|
|
7
|
-
.sg-form-vertical .sg-field {
|
|
8
|
-
margin-bottom: var(--sg-margin-md);
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
.sg-form-horizontal .sg-field {
|
|
12
|
-
display: flex;
|
|
13
|
-
align-items: flex-start;
|
|
14
|
-
margin-bottom: var(--sg-margin-md);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
.sg-form-horizontal .sg-field-label {
|
|
18
|
-
flex-shrink: 0;
|
|
19
|
-
min-width: 80px;
|
|
20
|
-
padding-top: 5px;
|
|
21
|
-
padding-right: var(--sg-padding-md);
|
|
22
|
-
text-align: right;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
.sg-form-inline {
|
|
26
|
-
display: flex;
|
|
27
|
-
flex-wrap: wrap;
|
|
28
|
-
gap: var(--sg-margin-md);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.sg-form-inline .sg-field {
|
|
32
|
-
display: flex;
|
|
33
|
-
align-items: center;
|
|
34
|
-
gap: var(--sg-padding-sm);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/* Sizes */
|
|
38
|
-
.sg-form-small {
|
|
39
|
-
font-size: var(--sg-font-size-sm);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.sg-form-large {
|
|
43
|
-
font-size: var(--sg-font-size-lg);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/* Disabled */
|
|
47
|
-
.sg-form-disabled {
|
|
48
|
-
opacity: 0.65;
|
|
49
|
-
pointer-events: none;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/* Field label */
|
|
53
|
-
.sg-field-label {
|
|
54
|
-
display: block;
|
|
55
|
-
margin-bottom: 4px;
|
|
56
|
-
font-weight: 500;
|
|
57
|
-
color: var(--sg-color-text);
|
|
58
|
-
font-size: var(--sg-font-size);
|
|
59
|
-
line-height: 1.5;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
.sg-field-required {
|
|
63
|
-
color: var(--sg-color-error);
|
|
64
|
-
margin-left: 2px;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
.sg-field-optional {
|
|
68
|
-
color: var(--sg-color-text-tertiary);
|
|
69
|
-
font-weight: 400;
|
|
70
|
-
font-size: 0.85em;
|
|
71
|
-
margin-left: 4px;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/* Field error */
|
|
75
|
-
.sg-field-error {
|
|
76
|
-
color: var(--sg-color-error);
|
|
77
|
-
font-size: var(--sg-font-size-sm);
|
|
78
|
-
margin-top: 4px;
|
|
79
|
-
line-height: 1.4;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.sg-field-has-error .sg-input,
|
|
83
|
-
.sg-field-has-error .sg-textarea,
|
|
84
|
-
.sg-field-has-error .sg-select-trigger,
|
|
85
|
-
.sg-field-has-error .sg-input-number-input {
|
|
86
|
-
border-color: var(--sg-color-error);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.sg-field-has-error .sg-input:focus,
|
|
90
|
-
.sg-field-has-error .sg-textarea:focus {
|
|
91
|
-
box-shadow: 0 0 0 2px color-mix(in srgb, var(--sg-color-error) 10%, transparent);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/* Field help */
|
|
95
|
-
.sg-field-help {
|
|
96
|
-
color: var(--sg-color-text-tertiary);
|
|
97
|
-
font-size: var(--sg-font-size-sm, 12px);
|
|
98
|
-
margin-top: 4px;
|
|
99
|
-
line-height: 1.4;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/* Field extra */
|
|
103
|
-
.sg-field-extra {
|
|
104
|
-
color: var(--sg-color-text-secondary);
|
|
105
|
-
font-size: var(--sg-font-size-sm, 12px);
|
|
106
|
-
margin-top: 4px;
|
|
107
|
-
line-height: 1.4;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/* Horizontal layout label/control wrappers — width and text-align come
|
|
111
|
-
* from the React component as inline overrides (computed from `labelCol`
|
|
112
|
-
* / `wrapperCol` props), so this rule only locks down the static parts. */
|
|
113
|
-
.sg-field-label-wrap {
|
|
114
|
-
flex-shrink: 0;
|
|
115
|
-
}
|
|
1
|
+
.sg-form {
|
|
2
|
+
font-size: var(--sg-font-size);
|
|
3
|
+
color: var(--sg-color-text);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
/* Layouts */
|
|
7
|
+
.sg-form-vertical .sg-field {
|
|
8
|
+
margin-bottom: var(--sg-margin-md);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.sg-form-horizontal .sg-field {
|
|
12
|
+
display: flex;
|
|
13
|
+
align-items: flex-start;
|
|
14
|
+
margin-bottom: var(--sg-margin-md);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.sg-form-horizontal .sg-field-label {
|
|
18
|
+
flex-shrink: 0;
|
|
19
|
+
min-width: 80px;
|
|
20
|
+
padding-top: 5px;
|
|
21
|
+
padding-right: var(--sg-padding-md);
|
|
22
|
+
text-align: right;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.sg-form-inline {
|
|
26
|
+
display: flex;
|
|
27
|
+
flex-wrap: wrap;
|
|
28
|
+
gap: var(--sg-margin-md);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.sg-form-inline .sg-field {
|
|
32
|
+
display: flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
gap: var(--sg-padding-sm);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Sizes */
|
|
38
|
+
.sg-form-small {
|
|
39
|
+
font-size: var(--sg-font-size-sm);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.sg-form-large {
|
|
43
|
+
font-size: var(--sg-font-size-lg);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* Disabled */
|
|
47
|
+
.sg-form-disabled {
|
|
48
|
+
opacity: 0.65;
|
|
49
|
+
pointer-events: none;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* Field label */
|
|
53
|
+
.sg-field-label {
|
|
54
|
+
display: block;
|
|
55
|
+
margin-bottom: 4px;
|
|
56
|
+
font-weight: 500;
|
|
57
|
+
color: var(--sg-color-text);
|
|
58
|
+
font-size: var(--sg-font-size);
|
|
59
|
+
line-height: 1.5;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.sg-field-required {
|
|
63
|
+
color: var(--sg-color-error);
|
|
64
|
+
margin-left: 2px;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.sg-field-optional {
|
|
68
|
+
color: var(--sg-color-text-tertiary);
|
|
69
|
+
font-weight: 400;
|
|
70
|
+
font-size: 0.85em;
|
|
71
|
+
margin-left: 4px;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* Field error */
|
|
75
|
+
.sg-field-error {
|
|
76
|
+
color: var(--sg-color-error);
|
|
77
|
+
font-size: var(--sg-font-size-sm);
|
|
78
|
+
margin-top: 4px;
|
|
79
|
+
line-height: 1.4;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.sg-field-has-error .sg-input,
|
|
83
|
+
.sg-field-has-error .sg-textarea,
|
|
84
|
+
.sg-field-has-error .sg-select-trigger,
|
|
85
|
+
.sg-field-has-error .sg-input-number-input {
|
|
86
|
+
border-color: var(--sg-color-error);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.sg-field-has-error .sg-input:focus,
|
|
90
|
+
.sg-field-has-error .sg-textarea:focus {
|
|
91
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--sg-color-error) 10%, transparent);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* Field help */
|
|
95
|
+
.sg-field-help {
|
|
96
|
+
color: var(--sg-color-text-tertiary);
|
|
97
|
+
font-size: var(--sg-font-size-sm, 12px);
|
|
98
|
+
margin-top: 4px;
|
|
99
|
+
line-height: 1.4;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* Field extra */
|
|
103
|
+
.sg-field-extra {
|
|
104
|
+
color: var(--sg-color-text-secondary);
|
|
105
|
+
font-size: var(--sg-font-size-sm, 12px);
|
|
106
|
+
margin-top: 4px;
|
|
107
|
+
line-height: 1.4;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/* Horizontal layout label/control wrappers — width and text-align come
|
|
111
|
+
* from the React component as inline overrides (computed from `labelCol`
|
|
112
|
+
* / `wrapperCol` props), so this rule only locks down the static parts. */
|
|
113
|
+
.sg-field-label-wrap {
|
|
114
|
+
flex-shrink: 0;
|
|
115
|
+
}
|