@skygraph/styles 0.6.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
package/components/rate.css
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
.sg-rate {
|
|
2
|
-
/* Component-local variable: empty (inactive) symbol opacity. Colour
|
|
3
|
-
* emoji ignore CSS `color`, so opacity is the only signal that
|
|
4
|
-
* separates active vs inactive characters. Override globally for
|
|
5
|
-
* monochrome glyphs by setting it to `1`. */
|
|
6
|
-
--sg-rate-symbol-empty-color: var(--sg-color-text-tertiary);
|
|
7
|
-
--sg-rate-symbol-empty-opacity: 0.72;
|
|
8
|
-
|
|
9
|
-
display: inline-flex;
|
|
10
|
-
gap: var(--sg-padding-xs);
|
|
11
|
-
font-size: var(--sg-font-size-xl);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/* Dark theme: the tertiary text colour already carries a low alpha, and the
|
|
15
|
-
* extra 0.72 symbol opacity stacked on top made empty stars nearly invisible
|
|
16
|
-
* on a dark surface. Use an explicit visible grey at full opacity instead. */
|
|
17
|
-
[data-sg-theme='dark'] .sg-rate {
|
|
18
|
-
--sg-rate-symbol-empty-color: rgba(255, 255, 255, 0.55);
|
|
19
|
-
--sg-rate-symbol-empty-opacity: 1;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.sg-rate-disabled {
|
|
23
|
-
pointer-events: none;
|
|
24
|
-
opacity: 0.5;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.sg-rate-star {
|
|
28
|
-
cursor: pointer;
|
|
29
|
-
color: var(--sg-rate-symbol-empty-color, var(--sg-color-text-tertiary));
|
|
30
|
-
opacity: var(--sg-rate-symbol-empty-opacity);
|
|
31
|
-
transition:
|
|
32
|
-
color var(--sg-transition-duration),
|
|
33
|
-
opacity var(--sg-transition-duration),
|
|
34
|
-
transform var(--sg-transition-duration);
|
|
35
|
-
user-select: none;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
.sg-rate-star:hover {
|
|
39
|
-
transform: scale(1.15);
|
|
40
|
-
}
|
|
41
|
-
.sg-rate-star-full {
|
|
42
|
-
color: var(--sg-color-star);
|
|
43
|
-
opacity: 1;
|
|
44
|
-
}
|
|
45
|
-
.sg-rate-star-half {
|
|
46
|
-
color: var(--sg-color-star);
|
|
47
|
-
opacity: 0.76;
|
|
48
|
-
}
|
|
1
|
+
.sg-rate {
|
|
2
|
+
/* Component-local variable: empty (inactive) symbol opacity. Colour
|
|
3
|
+
* emoji ignore CSS `color`, so opacity is the only signal that
|
|
4
|
+
* separates active vs inactive characters. Override globally for
|
|
5
|
+
* monochrome glyphs by setting it to `1`. */
|
|
6
|
+
--sg-rate-symbol-empty-color: var(--sg-color-text-tertiary);
|
|
7
|
+
--sg-rate-symbol-empty-opacity: 0.72;
|
|
8
|
+
|
|
9
|
+
display: inline-flex;
|
|
10
|
+
gap: var(--sg-padding-xs);
|
|
11
|
+
font-size: var(--sg-font-size-xl);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Dark theme: the tertiary text colour already carries a low alpha, and the
|
|
15
|
+
* extra 0.72 symbol opacity stacked on top made empty stars nearly invisible
|
|
16
|
+
* on a dark surface. Use an explicit visible grey at full opacity instead. */
|
|
17
|
+
[data-sg-theme='dark'] .sg-rate {
|
|
18
|
+
--sg-rate-symbol-empty-color: rgba(255, 255, 255, 0.55);
|
|
19
|
+
--sg-rate-symbol-empty-opacity: 1;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.sg-rate-disabled {
|
|
23
|
+
pointer-events: none;
|
|
24
|
+
opacity: 0.5;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.sg-rate-star {
|
|
28
|
+
cursor: pointer;
|
|
29
|
+
color: var(--sg-rate-symbol-empty-color, var(--sg-color-text-tertiary));
|
|
30
|
+
opacity: var(--sg-rate-symbol-empty-opacity);
|
|
31
|
+
transition:
|
|
32
|
+
color var(--sg-transition-duration),
|
|
33
|
+
opacity var(--sg-transition-duration),
|
|
34
|
+
transform var(--sg-transition-duration);
|
|
35
|
+
user-select: none;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.sg-rate-star:hover {
|
|
39
|
+
transform: scale(1.15);
|
|
40
|
+
}
|
|
41
|
+
.sg-rate-star-full {
|
|
42
|
+
color: var(--sg-color-star);
|
|
43
|
+
opacity: 1;
|
|
44
|
+
}
|
|
45
|
+
.sg-rate-star-half {
|
|
46
|
+
color: var(--sg-color-star);
|
|
47
|
+
opacity: 0.76;
|
|
48
|
+
}
|
|
@@ -1,224 +1,224 @@
|
|
|
1
|
-
/* Resource Calendar — shifts / bookings per resource lane.
|
|
2
|
-
*
|
|
3
|
-
* All colours route through `--sg-*` global tokens. Component-local
|
|
4
|
-
* variables are scoped under `.sg-rcal` so external themes can
|
|
5
|
-
* override them per-instance without bleeding to other components.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
.sg-rcal {
|
|
9
|
-
/* Component-local tokens — derived from global ones, redirect freely. */
|
|
10
|
-
--sg-rcal-availability-off-bg: var(--sg-color-bg-disabled);
|
|
11
|
-
--sg-rcal-conflict-color: var(--sg-color-error);
|
|
12
|
-
--sg-rcal-conflict-bg: var(--sg-color-error-bg);
|
|
13
|
-
--sg-rcal-tentative-bg: var(--sg-color-primary-bg);
|
|
14
|
-
--sg-rcal-tentative-border: var(--sg-color-primary);
|
|
15
|
-
--sg-rcal-confirmed-bg: var(--sg-color-primary);
|
|
16
|
-
--sg-rcal-confirmed-text: var(--sg-color-white);
|
|
17
|
-
--sg-rcal-marker-size: 10px;
|
|
18
|
-
|
|
19
|
-
background: var(--sg-color-bg);
|
|
20
|
-
border: 1px solid var(--sg-color-border);
|
|
21
|
-
border-radius: var(--sg-border-radius);
|
|
22
|
-
font-size: var(--sg-font-size);
|
|
23
|
-
color: var(--sg-color-text);
|
|
24
|
-
font-family: inherit;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.sg-rcal-sidebar {
|
|
28
|
-
background: var(--sg-color-bg-container);
|
|
29
|
-
border-right: 1px solid var(--sg-color-border);
|
|
30
|
-
overflow: hidden;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.sg-rcal-sidebar-header {
|
|
34
|
-
border-bottom: 1px solid var(--sg-color-border);
|
|
35
|
-
background: var(--sg-color-bg-elevated);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
.sg-rcal-sidebar-row {
|
|
39
|
-
display: flex;
|
|
40
|
-
align-items: center;
|
|
41
|
-
gap: var(--sg-padding-sm);
|
|
42
|
-
padding: 0 var(--sg-padding-md);
|
|
43
|
-
border-bottom: 1px solid var(--sg-color-border-secondary);
|
|
44
|
-
color: var(--sg-color-text);
|
|
45
|
-
font-size: var(--sg-font-size-sm);
|
|
46
|
-
white-space: nowrap;
|
|
47
|
-
overflow: hidden;
|
|
48
|
-
text-overflow: ellipsis;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.sg-rcal-sidebar-marker {
|
|
52
|
-
display: inline-block;
|
|
53
|
-
flex-shrink: 0;
|
|
54
|
-
width: var(--sg-rcal-marker-size);
|
|
55
|
-
height: var(--sg-rcal-marker-size);
|
|
56
|
-
border-radius: 50%;
|
|
57
|
-
background: var(--sg-color-primary);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.sg-rcal-sidebar-name {
|
|
61
|
-
flex: 1;
|
|
62
|
-
overflow: hidden;
|
|
63
|
-
text-overflow: ellipsis;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.sg-rcal-sidebar-capacity {
|
|
67
|
-
color: var(--sg-color-text-tertiary);
|
|
68
|
-
font-size: var(--sg-font-size-sm);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
.sg-rcal-main {
|
|
72
|
-
background: var(--sg-color-bg);
|
|
73
|
-
position: relative;
|
|
74
|
-
/* Clip absolutely positioned blocks (assignments / ticks) so they
|
|
75
|
-
* can't bleed onto the sidebar when their dates fall outside the
|
|
76
|
-
* visible `range`. Interactive drag also clamps to range, so this
|
|
77
|
-
* is a safety net for props-supplied out-of-range assignments. */
|
|
78
|
-
overflow: hidden;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.sg-rcal-header {
|
|
82
|
-
background: var(--sg-color-bg-elevated);
|
|
83
|
-
border-bottom: 1px solid var(--sg-color-border);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
.sg-rcal-tick {
|
|
87
|
-
display: flex;
|
|
88
|
-
align-items: center;
|
|
89
|
-
justify-content: flex-start;
|
|
90
|
-
padding: 0 var(--sg-padding-xs);
|
|
91
|
-
font-size: var(--sg-font-size-sm);
|
|
92
|
-
color: var(--sg-color-text-secondary);
|
|
93
|
-
border-right: 1px solid var(--sg-color-border-secondary);
|
|
94
|
-
box-sizing: border-box;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
.sg-rcal-row {
|
|
98
|
-
/* Lane separators are rendered via the new `--sg-rcal-lane-divider`
|
|
99
|
-
* token, which is currently aliased to `--sg-color-border-secondary`
|
|
100
|
-
* but lets a theme dial it down independently when bookings get
|
|
101
|
-
* dense. */
|
|
102
|
-
border-bottom: 1px solid var(--sg-rcal-lane-divider);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
.sg-rcal-row:nth-child(even) {
|
|
106
|
-
background: var(--sg-color-bg-secondary);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
.sg-rcal-slot {
|
|
110
|
-
/* Vertical divider — kept softer than the row separator so the
|
|
111
|
-
* grid feels horizontal-first (booking rows read left-to-right). */
|
|
112
|
-
border-right: 1px solid var(--sg-rcal-lane-divider);
|
|
113
|
-
box-sizing: border-box;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
.sg-rcal-availability-off {
|
|
117
|
-
background-color: var(--sg-rcal-availability-off-bg);
|
|
118
|
-
background-image: repeating-linear-gradient(
|
|
119
|
-
45deg,
|
|
120
|
-
transparent,
|
|
121
|
-
transparent 6px,
|
|
122
|
-
var(--sg-color-border-secondary) 6px,
|
|
123
|
-
var(--sg-color-border-secondary) 7px
|
|
124
|
-
);
|
|
125
|
-
opacity: 0.55;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
.sg-rcal-assignment {
|
|
129
|
-
background: var(--sg-rcal-tentative-bg);
|
|
130
|
-
border: 1px solid var(--sg-rcal-tentative-border);
|
|
131
|
-
color: var(--sg-color-text);
|
|
132
|
-
border-radius: var(--sg-border-radius-sm);
|
|
133
|
-
display: flex;
|
|
134
|
-
align-items: center;
|
|
135
|
-
padding: 0 var(--sg-padding-xs);
|
|
136
|
-
font-size: var(--sg-font-size-sm);
|
|
137
|
-
white-space: nowrap;
|
|
138
|
-
overflow: hidden;
|
|
139
|
-
/* Reuse the gantt-bar shadow so resource bookings and gantt task bars
|
|
140
|
-
* feel like the same primitive rendered in two contexts. */
|
|
141
|
-
box-shadow: var(--sg-gantt-bar-shadow);
|
|
142
|
-
box-sizing: border-box;
|
|
143
|
-
transition:
|
|
144
|
-
box-shadow var(--sg-transition-medium),
|
|
145
|
-
transform var(--sg-transition-medium),
|
|
146
|
-
filter var(--sg-transition-fast);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
.sg-rcal-assignment:hover {
|
|
150
|
-
box-shadow: var(--sg-gantt-bar-shadow-hover);
|
|
151
|
-
transform: translateY(-1px);
|
|
152
|
-
filter: brightness(1.04);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
.sg-rcal-assignment-tentative {
|
|
156
|
-
background: var(--sg-rcal-tentative-bg);
|
|
157
|
-
border-color: var(--sg-rcal-tentative-border);
|
|
158
|
-
border-style: dashed;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
.sg-rcal-assignment-confirmed {
|
|
162
|
-
background: var(--sg-rcal-confirmed-bg);
|
|
163
|
-
border-color: var(--sg-rcal-confirmed-bg);
|
|
164
|
-
color: var(--sg-rcal-confirmed-text);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
.sg-rcal-assignment-conflict {
|
|
168
|
-
/* The conflict overlay now layers a flat tint underneath the diagonal
|
|
169
|
-
* stripes (via `--sg-rcal-conflict-overlay-bg`) so the warning reads
|
|
170
|
-
* even on small bookings where the stripe pattern barely shows. */
|
|
171
|
-
background-color: var(--sg-rcal-conflict-overlay-bg);
|
|
172
|
-
background-image: repeating-linear-gradient(
|
|
173
|
-
45deg,
|
|
174
|
-
transparent,
|
|
175
|
-
transparent 5px,
|
|
176
|
-
var(--sg-rcal-conflict-color) 5px,
|
|
177
|
-
var(--sg-rcal-conflict-color) 6px
|
|
178
|
-
);
|
|
179
|
-
border: 2px solid var(--sg-rcal-conflict-color);
|
|
180
|
-
color: var(--sg-color-text);
|
|
181
|
-
/* Conflict bookings should never feel "promoted" by hover lift,
|
|
182
|
-
* so we suppress the parent transform. The brightness boost still
|
|
183
|
-
* communicates interactivity. */
|
|
184
|
-
box-shadow: 0 0 0 1px var(--sg-rcal-conflict-color);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
.sg-rcal-assignment-conflict:hover {
|
|
188
|
-
transform: none;
|
|
189
|
-
box-shadow:
|
|
190
|
-
0 0 0 1px var(--sg-rcal-conflict-color),
|
|
191
|
-
0 2px 6px rgba(245, 34, 45, 0.2);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
.sg-rcal-assignment-draggable {
|
|
195
|
-
cursor: grab;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
.sg-rcal-assignment-draggable:active {
|
|
199
|
-
cursor: grabbing;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
.sg-rcal-assignment-title {
|
|
203
|
-
text-overflow: ellipsis;
|
|
204
|
-
overflow: hidden;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
.sg-rcal-assignment-resize-start,
|
|
208
|
-
.sg-rcal-assignment-resize-end {
|
|
209
|
-
background: transparent;
|
|
210
|
-
opacity: 0;
|
|
211
|
-
transition: opacity 120ms ease;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
.sg-rcal-assignment:hover .sg-rcal-assignment-resize-start,
|
|
215
|
-
.sg-rcal-assignment:hover .sg-rcal-assignment-resize-end {
|
|
216
|
-
opacity: 0.6;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
.sg-rcal-assignment-resize-start:hover,
|
|
220
|
-
.sg-rcal-assignment-resize-end:hover,
|
|
221
|
-
.sg-rcal-assignment-resize-start:focus-visible,
|
|
222
|
-
.sg-rcal-assignment-resize-end:focus-visible {
|
|
223
|
-
opacity: 1;
|
|
224
|
-
}
|
|
1
|
+
/* Resource Calendar — shifts / bookings per resource lane.
|
|
2
|
+
*
|
|
3
|
+
* All colours route through `--sg-*` global tokens. Component-local
|
|
4
|
+
* variables are scoped under `.sg-rcal` so external themes can
|
|
5
|
+
* override them per-instance without bleeding to other components.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
.sg-rcal {
|
|
9
|
+
/* Component-local tokens — derived from global ones, redirect freely. */
|
|
10
|
+
--sg-rcal-availability-off-bg: var(--sg-color-bg-disabled);
|
|
11
|
+
--sg-rcal-conflict-color: var(--sg-color-error);
|
|
12
|
+
--sg-rcal-conflict-bg: var(--sg-color-error-bg);
|
|
13
|
+
--sg-rcal-tentative-bg: var(--sg-color-primary-bg);
|
|
14
|
+
--sg-rcal-tentative-border: var(--sg-color-primary);
|
|
15
|
+
--sg-rcal-confirmed-bg: var(--sg-color-primary);
|
|
16
|
+
--sg-rcal-confirmed-text: var(--sg-color-white);
|
|
17
|
+
--sg-rcal-marker-size: 10px;
|
|
18
|
+
|
|
19
|
+
background: var(--sg-color-bg);
|
|
20
|
+
border: 1px solid var(--sg-color-border);
|
|
21
|
+
border-radius: var(--sg-border-radius);
|
|
22
|
+
font-size: var(--sg-font-size);
|
|
23
|
+
color: var(--sg-color-text);
|
|
24
|
+
font-family: inherit;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.sg-rcal-sidebar {
|
|
28
|
+
background: var(--sg-color-bg-container);
|
|
29
|
+
border-right: 1px solid var(--sg-color-border);
|
|
30
|
+
overflow: hidden;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.sg-rcal-sidebar-header {
|
|
34
|
+
border-bottom: 1px solid var(--sg-color-border);
|
|
35
|
+
background: var(--sg-color-bg-elevated);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.sg-rcal-sidebar-row {
|
|
39
|
+
display: flex;
|
|
40
|
+
align-items: center;
|
|
41
|
+
gap: var(--sg-padding-sm);
|
|
42
|
+
padding: 0 var(--sg-padding-md);
|
|
43
|
+
border-bottom: 1px solid var(--sg-color-border-secondary);
|
|
44
|
+
color: var(--sg-color-text);
|
|
45
|
+
font-size: var(--sg-font-size-sm);
|
|
46
|
+
white-space: nowrap;
|
|
47
|
+
overflow: hidden;
|
|
48
|
+
text-overflow: ellipsis;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.sg-rcal-sidebar-marker {
|
|
52
|
+
display: inline-block;
|
|
53
|
+
flex-shrink: 0;
|
|
54
|
+
width: var(--sg-rcal-marker-size);
|
|
55
|
+
height: var(--sg-rcal-marker-size);
|
|
56
|
+
border-radius: 50%;
|
|
57
|
+
background: var(--sg-color-primary);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.sg-rcal-sidebar-name {
|
|
61
|
+
flex: 1;
|
|
62
|
+
overflow: hidden;
|
|
63
|
+
text-overflow: ellipsis;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.sg-rcal-sidebar-capacity {
|
|
67
|
+
color: var(--sg-color-text-tertiary);
|
|
68
|
+
font-size: var(--sg-font-size-sm);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.sg-rcal-main {
|
|
72
|
+
background: var(--sg-color-bg);
|
|
73
|
+
position: relative;
|
|
74
|
+
/* Clip absolutely positioned blocks (assignments / ticks) so they
|
|
75
|
+
* can't bleed onto the sidebar when their dates fall outside the
|
|
76
|
+
* visible `range`. Interactive drag also clamps to range, so this
|
|
77
|
+
* is a safety net for props-supplied out-of-range assignments. */
|
|
78
|
+
overflow: hidden;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.sg-rcal-header {
|
|
82
|
+
background: var(--sg-color-bg-elevated);
|
|
83
|
+
border-bottom: 1px solid var(--sg-color-border);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.sg-rcal-tick {
|
|
87
|
+
display: flex;
|
|
88
|
+
align-items: center;
|
|
89
|
+
justify-content: flex-start;
|
|
90
|
+
padding: 0 var(--sg-padding-xs);
|
|
91
|
+
font-size: var(--sg-font-size-sm);
|
|
92
|
+
color: var(--sg-color-text-secondary);
|
|
93
|
+
border-right: 1px solid var(--sg-color-border-secondary);
|
|
94
|
+
box-sizing: border-box;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.sg-rcal-row {
|
|
98
|
+
/* Lane separators are rendered via the new `--sg-rcal-lane-divider`
|
|
99
|
+
* token, which is currently aliased to `--sg-color-border-secondary`
|
|
100
|
+
* but lets a theme dial it down independently when bookings get
|
|
101
|
+
* dense. */
|
|
102
|
+
border-bottom: 1px solid var(--sg-rcal-lane-divider);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.sg-rcal-row:nth-child(even) {
|
|
106
|
+
background: var(--sg-color-bg-secondary);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.sg-rcal-slot {
|
|
110
|
+
/* Vertical divider — kept softer than the row separator so the
|
|
111
|
+
* grid feels horizontal-first (booking rows read left-to-right). */
|
|
112
|
+
border-right: 1px solid var(--sg-rcal-lane-divider);
|
|
113
|
+
box-sizing: border-box;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.sg-rcal-availability-off {
|
|
117
|
+
background-color: var(--sg-rcal-availability-off-bg);
|
|
118
|
+
background-image: repeating-linear-gradient(
|
|
119
|
+
45deg,
|
|
120
|
+
transparent,
|
|
121
|
+
transparent 6px,
|
|
122
|
+
var(--sg-color-border-secondary) 6px,
|
|
123
|
+
var(--sg-color-border-secondary) 7px
|
|
124
|
+
);
|
|
125
|
+
opacity: 0.55;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.sg-rcal-assignment {
|
|
129
|
+
background: var(--sg-rcal-tentative-bg);
|
|
130
|
+
border: 1px solid var(--sg-rcal-tentative-border);
|
|
131
|
+
color: var(--sg-color-text);
|
|
132
|
+
border-radius: var(--sg-border-radius-sm);
|
|
133
|
+
display: flex;
|
|
134
|
+
align-items: center;
|
|
135
|
+
padding: 0 var(--sg-padding-xs);
|
|
136
|
+
font-size: var(--sg-font-size-sm);
|
|
137
|
+
white-space: nowrap;
|
|
138
|
+
overflow: hidden;
|
|
139
|
+
/* Reuse the gantt-bar shadow so resource bookings and gantt task bars
|
|
140
|
+
* feel like the same primitive rendered in two contexts. */
|
|
141
|
+
box-shadow: var(--sg-gantt-bar-shadow);
|
|
142
|
+
box-sizing: border-box;
|
|
143
|
+
transition:
|
|
144
|
+
box-shadow var(--sg-transition-medium),
|
|
145
|
+
transform var(--sg-transition-medium),
|
|
146
|
+
filter var(--sg-transition-fast);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.sg-rcal-assignment:hover {
|
|
150
|
+
box-shadow: var(--sg-gantt-bar-shadow-hover);
|
|
151
|
+
transform: translateY(-1px);
|
|
152
|
+
filter: brightness(1.04);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.sg-rcal-assignment-tentative {
|
|
156
|
+
background: var(--sg-rcal-tentative-bg);
|
|
157
|
+
border-color: var(--sg-rcal-tentative-border);
|
|
158
|
+
border-style: dashed;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.sg-rcal-assignment-confirmed {
|
|
162
|
+
background: var(--sg-rcal-confirmed-bg);
|
|
163
|
+
border-color: var(--sg-rcal-confirmed-bg);
|
|
164
|
+
color: var(--sg-rcal-confirmed-text);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.sg-rcal-assignment-conflict {
|
|
168
|
+
/* The conflict overlay now layers a flat tint underneath the diagonal
|
|
169
|
+
* stripes (via `--sg-rcal-conflict-overlay-bg`) so the warning reads
|
|
170
|
+
* even on small bookings where the stripe pattern barely shows. */
|
|
171
|
+
background-color: var(--sg-rcal-conflict-overlay-bg);
|
|
172
|
+
background-image: repeating-linear-gradient(
|
|
173
|
+
45deg,
|
|
174
|
+
transparent,
|
|
175
|
+
transparent 5px,
|
|
176
|
+
var(--sg-rcal-conflict-color) 5px,
|
|
177
|
+
var(--sg-rcal-conflict-color) 6px
|
|
178
|
+
);
|
|
179
|
+
border: 2px solid var(--sg-rcal-conflict-color);
|
|
180
|
+
color: var(--sg-color-text);
|
|
181
|
+
/* Conflict bookings should never feel "promoted" by hover lift,
|
|
182
|
+
* so we suppress the parent transform. The brightness boost still
|
|
183
|
+
* communicates interactivity. */
|
|
184
|
+
box-shadow: 0 0 0 1px var(--sg-rcal-conflict-color);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.sg-rcal-assignment-conflict:hover {
|
|
188
|
+
transform: none;
|
|
189
|
+
box-shadow:
|
|
190
|
+
0 0 0 1px var(--sg-rcal-conflict-color),
|
|
191
|
+
0 2px 6px rgba(245, 34, 45, 0.2);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.sg-rcal-assignment-draggable {
|
|
195
|
+
cursor: grab;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.sg-rcal-assignment-draggable:active {
|
|
199
|
+
cursor: grabbing;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.sg-rcal-assignment-title {
|
|
203
|
+
text-overflow: ellipsis;
|
|
204
|
+
overflow: hidden;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.sg-rcal-assignment-resize-start,
|
|
208
|
+
.sg-rcal-assignment-resize-end {
|
|
209
|
+
background: transparent;
|
|
210
|
+
opacity: 0;
|
|
211
|
+
transition: opacity 120ms ease;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.sg-rcal-assignment:hover .sg-rcal-assignment-resize-start,
|
|
215
|
+
.sg-rcal-assignment:hover .sg-rcal-assignment-resize-end {
|
|
216
|
+
opacity: 0.6;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.sg-rcal-assignment-resize-start:hover,
|
|
220
|
+
.sg-rcal-assignment-resize-end:hover,
|
|
221
|
+
.sg-rcal-assignment-resize-start:focus-visible,
|
|
222
|
+
.sg-rcal-assignment-resize-end:focus-visible {
|
|
223
|
+
opacity: 1;
|
|
224
|
+
}
|
package/components/result.css
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
.sg-result {
|
|
2
|
-
display: flex;
|
|
3
|
-
flex-direction: column;
|
|
4
|
-
align-items: center;
|
|
5
|
-
padding: var(--sg-padding-xl) var(--sg-padding-lg);
|
|
6
|
-
text-align: center;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
.sg-result-icon {
|
|
10
|
-
margin-bottom: var(--sg-margin-lg);
|
|
11
|
-
line-height: 1;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
.sg-result-icon svg {
|
|
15
|
-
display: block;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.sg-result-title {
|
|
19
|
-
font-size: var(--sg-font-size-xl);
|
|
20
|
-
font-weight: 600;
|
|
21
|
-
color: var(--sg-color-text);
|
|
22
|
-
line-height: 1.4;
|
|
23
|
-
margin-bottom: var(--sg-margin-sm);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.sg-result-subtitle {
|
|
27
|
-
font-size: var(--sg-font-size);
|
|
28
|
-
color: var(--sg-color-text-secondary);
|
|
29
|
-
line-height: var(--sg-line-height);
|
|
30
|
-
margin-bottom: var(--sg-margin-lg);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.sg-result-extra {
|
|
34
|
-
display: flex;
|
|
35
|
-
gap: var(--sg-padding-sm);
|
|
36
|
-
justify-content: center;
|
|
37
|
-
margin-bottom: var(--sg-margin-lg);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.sg-result-content {
|
|
41
|
-
width: 100%;
|
|
42
|
-
padding: var(--sg-padding-lg);
|
|
43
|
-
background: var(--sg-color-bg-secondary);
|
|
44
|
-
border-radius: var(--sg-border-radius);
|
|
45
|
-
}
|
|
1
|
+
.sg-result {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
align-items: center;
|
|
5
|
+
padding: var(--sg-padding-xl) var(--sg-padding-lg);
|
|
6
|
+
text-align: center;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.sg-result-icon {
|
|
10
|
+
margin-bottom: var(--sg-margin-lg);
|
|
11
|
+
line-height: 1;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.sg-result-icon svg {
|
|
15
|
+
display: block;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.sg-result-title {
|
|
19
|
+
font-size: var(--sg-font-size-xl);
|
|
20
|
+
font-weight: 600;
|
|
21
|
+
color: var(--sg-color-text);
|
|
22
|
+
line-height: 1.4;
|
|
23
|
+
margin-bottom: var(--sg-margin-sm);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.sg-result-subtitle {
|
|
27
|
+
font-size: var(--sg-font-size);
|
|
28
|
+
color: var(--sg-color-text-secondary);
|
|
29
|
+
line-height: var(--sg-line-height);
|
|
30
|
+
margin-bottom: var(--sg-margin-lg);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.sg-result-extra {
|
|
34
|
+
display: flex;
|
|
35
|
+
gap: var(--sg-padding-sm);
|
|
36
|
+
justify-content: center;
|
|
37
|
+
margin-bottom: var(--sg-margin-lg);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.sg-result-content {
|
|
41
|
+
width: 100%;
|
|
42
|
+
padding: var(--sg-padding-lg);
|
|
43
|
+
background: var(--sg-color-bg-secondary);
|
|
44
|
+
border-radius: var(--sg-border-radius);
|
|
45
|
+
}
|