@skygraph/styles 0.2.0 → 0.2.2

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.
@@ -136,7 +136,7 @@
136
136
  position: absolute;
137
137
  width: 12px;
138
138
  height: 12px;
139
- border: 2px solid #fff;
139
+ border: 2px solid var(--sg-color-white, #fff);
140
140
  border-radius: 50%;
141
141
  box-shadow: 0 0 2px rgba(0, 0, 0, 0.4);
142
142
  transform: translate(-50%, -50%);
@@ -170,7 +170,7 @@
170
170
  top: 50%;
171
171
  width: 14px;
172
172
  height: 14px;
173
- border: 2px solid #fff;
173
+ border: 2px solid var(--sg-color-white, #fff);
174
174
  border-radius: 50%;
175
175
  box-shadow: 0 0 2px rgba(0, 0, 0, 0.4);
176
176
  background: transparent;
@@ -20,8 +20,14 @@
20
20
  }
21
21
 
22
22
  @keyframes sg-dropdown-in {
23
- from { opacity: 0; transform: scaleY(0.8); }
24
- to { opacity: 1; transform: scaleY(1); }
23
+ from {
24
+ opacity: 0;
25
+ transform: scaleY(0.8);
26
+ }
27
+ to {
28
+ opacity: 1;
29
+ transform: scaleY(1);
30
+ }
25
31
  }
26
32
 
27
33
  /* Placement variants — both camelCase (legacy, generated as
@@ -69,6 +75,12 @@
69
75
  background: var(--sg-color-bg-hover);
70
76
  }
71
77
 
78
+ .sg-dropdown-item-focused {
79
+ background: var(--sg-color-bg-hover);
80
+ outline: 2px solid var(--sg-color-primary);
81
+ outline-offset: -2px;
82
+ }
83
+
72
84
  .sg-dropdown-item-disabled {
73
85
  color: var(--sg-color-text-disabled);
74
86
  cursor: not-allowed;
@@ -82,10 +94,15 @@
82
94
  color: var(--sg-color-error);
83
95
  }
84
96
 
85
- .sg-dropdown-item-danger:hover {
97
+ .sg-dropdown-item-danger:hover,
98
+ .sg-dropdown-item-danger.sg-dropdown-item-focused {
86
99
  background: var(--sg-color-error-bg);
87
100
  }
88
101
 
102
+ .sg-dropdown-item-danger.sg-dropdown-item-focused {
103
+ outline-color: var(--sg-color-error);
104
+ }
105
+
89
106
  .sg-dropdown-divider {
90
107
  height: 1px;
91
108
  margin: var(--sg-margin-xs) 0;
@@ -161,7 +161,7 @@
161
161
  margin: 0;
162
162
  border: none;
163
163
  border-radius: 50%;
164
- background: var(--sg-color-fill-tertiary, rgba(0, 0, 0, 0.06));
164
+ background: var(--sg-color-fill-tertiary);
165
165
  color: var(--sg-color-text-secondary);
166
166
  font-size: 14px;
167
167
  line-height: 1;
@@ -174,7 +174,7 @@
174
174
  }
175
175
 
176
176
  .sg-input-clear:hover {
177
- background: var(--sg-color-fill, rgba(0, 0, 0, 0.15));
177
+ background: var(--sg-color-fill);
178
178
  color: var(--sg-color-text);
179
179
  opacity: 1;
180
180
  }
@@ -64,7 +64,7 @@
64
64
 
65
65
  .sg-menu-dark .sg-menu-item-selected,
66
66
  .sg-menu-dark .sg-menu-item-selected:hover {
67
- color: #fff;
67
+ color: var(--sg-color-white, #fff);
68
68
  background: var(--sg-color-primary);
69
69
  }
70
70
 
@@ -10,7 +10,7 @@
10
10
 
11
11
  .sg-skeleton-avatar {
12
12
  display: block;
13
- background: var(--sg-color-bg-hover);
13
+ background: var(--sg-skeleton-bg, var(--sg-color-bg-hover));
14
14
  }
15
15
 
16
16
  .sg-skeleton-avatar-circle {
@@ -29,7 +29,7 @@
29
29
  .sg-skeleton-title {
30
30
  height: 16px;
31
31
  margin-bottom: var(--sg-margin-md);
32
- background: var(--sg-color-bg-hover);
32
+ background: var(--sg-skeleton-bg, var(--sg-color-bg-hover));
33
33
  border-radius: var(--sg-border-radius-sm);
34
34
  }
35
35
 
@@ -44,25 +44,29 @@
44
44
 
45
45
  .sg-skeleton-paragraph li {
46
46
  height: 16px;
47
- background: var(--sg-color-bg-hover);
47
+ background: var(--sg-skeleton-bg, var(--sg-color-bg-hover));
48
48
  border-radius: var(--sg-border-radius-sm);
49
49
  }
50
50
 
51
- /* Pulse animation */
51
+ /* Pulse animation — gradient sweeps the shimmer highlight across the bar. */
52
52
  .sg-skeleton-active .sg-skeleton-avatar,
53
53
  .sg-skeleton-active .sg-skeleton-title,
54
54
  .sg-skeleton-active .sg-skeleton-paragraph li {
55
55
  animation: sg-skeleton-pulse 1.5s ease-in-out infinite;
56
56
  background: linear-gradient(
57
57
  90deg,
58
- var(--sg-color-bg-hover) 25%,
59
- var(--sg-color-bg-secondary) 37%,
60
- var(--sg-color-bg-hover) 63%
58
+ var(--sg-skeleton-bg, var(--sg-color-bg-hover)) 25%,
59
+ var(--sg-skeleton-shimmer, var(--sg-color-bg-secondary)) 37%,
60
+ var(--sg-skeleton-bg, var(--sg-color-bg-hover)) 63%
61
61
  );
62
62
  background-size: 400% 100%;
63
63
  }
64
64
 
65
65
  @keyframes sg-skeleton-pulse {
66
- 0% { background-position: 100% 50%; }
67
- 100% { background-position: 0 50%; }
66
+ 0% {
67
+ background-position: 100% 50%;
68
+ }
69
+ 100% {
70
+ background-position: 0 50%;
71
+ }
68
72
  }
@@ -3,7 +3,7 @@
3
3
  * touching `--sg-color-text-disabled` (which is also used by the
4
4
  * disabled visual state — overriding it makes every control look
5
5
  * disabled). */
6
- --sg-switch-bg: var(--sg-color-fill, rgba(0, 0, 0, 0.25));
6
+ --sg-switch-bg: color-mix(in srgb, var(--sg-color-text) 25%, transparent);
7
7
  --sg-switch-bg-checked: var(--sg-color-primary);
8
8
  position: relative;
9
9
  display: inline-flex;
@@ -643,6 +643,11 @@
643
643
  * changes — that drift is what shows up as the scrollbar thumb lagging
644
644
  * behind the cursor while the user drags it. Locking visible row cells to
645
645
  * the configured `rowHeight` removes the mismatch entirely. */
646
+ .sg-table-grid-virtual-fixed {
647
+ /* Overridden inline by Table when `rowHeight` is set */
648
+ --sg-virtual-row-height: var(--sg-height-md);
649
+ }
650
+
646
651
  .sg-table-grid-virtual-fixed .sg-table-row[data-sg-virtual-row-index] > .sg-table-td {
647
652
  height: var(--sg-virtual-row-height);
648
653
  min-height: 0;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@skygraph/styles",
3
- "version": "0.2.0",
4
- "description": "SkyGraph framework-agnostic CSS tokens, themes, transitions, print and 60+ component stylesheets",
3
+ "version": "0.2.2",
4
+ "description": "SkyGraph framework-agnostic CSS — tokens, themes, transitions, print and 60+ component stylesheets",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "sideEffects": [
package/tokens.css CHANGED
@@ -91,7 +91,7 @@
91
91
 
92
92
  /* === Semantic tokens — Light theme (default) === */
93
93
  :root,
94
- [data-sg-theme="light"] {
94
+ [data-sg-theme='light'] {
95
95
  --sg-color-bg: var(--sg-gray-1);
96
96
  --sg-color-bg-secondary: var(--sg-gray-2);
97
97
  --sg-color-bg-elevated: var(--sg-gray-1);
@@ -109,6 +109,12 @@
109
109
  --sg-color-border: var(--sg-gray-5);
110
110
  --sg-color-border-secondary: var(--sg-gray-4);
111
111
 
112
+ /* Subtle fills (tracks, clear buttons, skeletons) */
113
+ --sg-color-fill: rgba(0, 0, 0, 0.15);
114
+ --sg-color-fill-secondary: rgba(0, 0, 0, 0.06);
115
+ --sg-color-fill-tertiary: rgba(0, 0, 0, 0.06);
116
+ --sg-color-fill-quaternary: rgba(0, 0, 0, 0.02);
117
+
112
118
  --sg-color-primary: var(--sg-blue-6);
113
119
  --sg-color-primary-hover: var(--sg-blue-5);
114
120
  --sg-color-primary-active: var(--sg-blue-7);
@@ -130,6 +136,12 @@
130
136
  --sg-color-tooltip-bg: rgba(0, 0, 0, 0.85);
131
137
  --sg-color-tooltip-text: #ffffff;
132
138
 
139
+ /* Skeleton — base bar fill + shimmer highlight (light theme).
140
+ * Kept distinct from --sg-color-bg-hover so loading placeholders stay
141
+ * clearly visible on white surfaces and don't fight the hover palette. */
142
+ --sg-skeleton-bg: #e2e8f0;
143
+ --sg-skeleton-shimmer: #f8fafc;
144
+
133
145
  /* === Visualization layer (light) ===
134
146
  * Re-mappable per theme. Components use these via `var(--sg-*)` so
135
147
  * dark theme overrides cascade automatically. */
@@ -138,19 +150,12 @@
138
150
  --sg-diagram-canvas-bg: var(--sg-color-bg);
139
151
  --sg-diagram-grid-line-color: rgba(0, 0, 0, 0.04);
140
152
  --sg-diagram-grid-line-color-strong: rgba(0, 0, 0, 0.08);
141
- --sg-diagram-node-shadow:
142
- 0 1px 2px rgba(0, 0, 0, 0.06),
143
- 0 0 0 1px rgba(0, 0, 0, 0.04);
144
- --sg-diagram-node-shadow-hover:
145
- 0 4px 12px rgba(0, 0, 0, 0.10),
146
- 0 1px 3px rgba(0, 0, 0, 0.06);
153
+ --sg-diagram-node-shadow: 0 1px 2px rgba(0, 0, 0, 0.06), 0 0 0 1px rgba(0, 0, 0, 0.04);
154
+ --sg-diagram-node-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.06);
147
155
  --sg-diagram-node-shadow-selected:
148
- 0 0 0 2px var(--sg-color-primary-bg),
149
- 0 6px 16px rgba(22, 119, 255, 0.18),
156
+ 0 0 0 2px var(--sg-color-primary-bg), 0 6px 16px rgba(22, 119, 255, 0.18),
150
157
  0 1px 3px rgba(0, 0, 0, 0.08);
151
- --sg-diagram-node-shadow-dragging:
152
- 0 12px 28px rgba(0, 0, 0, 0.20),
153
- 0 2px 6px rgba(0, 0, 0, 0.10);
158
+ --sg-diagram-node-shadow-dragging: 0 12px 28px rgba(0, 0, 0, 0.2), 0 2px 6px rgba(0, 0, 0, 0.1);
154
159
  --sg-diagram-edge-color: var(--sg-gray-6);
155
160
  --sg-diagram-edge-color-hover: var(--sg-color-text-secondary);
156
161
  --sg-diagram-edge-color-selected: var(--sg-color-primary);
@@ -159,53 +164,43 @@
159
164
 
160
165
  /* Charts — tooltip, crosshair, brush, legend */
161
166
  --sg-chart-tooltip-bg: var(--sg-color-bg-elevated);
162
- --sg-chart-tooltip-shadow:
163
- 0 6px 20px rgba(0, 0, 0, 0.12),
164
- 0 1px 3px rgba(0, 0, 0, 0.06);
167
+ --sg-chart-tooltip-shadow: 0 6px 20px rgba(0, 0, 0, 0.12), 0 1px 3px rgba(0, 0, 0, 0.06);
165
168
  --sg-chart-crosshair-color: rgba(0, 0, 0, 0.32);
166
- --sg-chart-brush-fill: rgba(22, 119, 255, 0.10);
169
+ --sg-chart-brush-fill: rgba(22, 119, 255, 0.1);
167
170
  --sg-chart-brush-stroke: var(--sg-color-primary);
168
171
  --sg-chart-legend-hover-bg: var(--sg-color-bg-hover);
169
172
 
170
173
  /* Dashboard — widget elevation, editor affordances */
171
174
  --sg-dashboard-widget-shadow: var(--sg-shadow-sm);
172
- --sg-dashboard-widget-shadow-hover:
173
- 0 4px 12px rgba(0, 0, 0, 0.08),
174
- 0 1px 3px rgba(0, 0, 0, 0.04);
175
+ --sg-dashboard-widget-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.08), 0 1px 3px rgba(0, 0, 0, 0.04);
175
176
  --sg-dashboard-editor-grid-color: rgba(22, 119, 255, 0.06);
176
177
  --sg-dashboard-editor-widget-border: var(--sg-color-primary);
177
178
  --sg-dashboard-editor-drop-zone-bg: rgba(22, 119, 255, 0.06);
178
179
  --sg-dashboard-editor-drop-zone-border: var(--sg-color-primary);
179
180
 
180
181
  /* Gantt — bars, today marker, dependency arrows */
181
- --sg-gantt-bar-shadow:
182
- 0 1px 2px rgba(0, 0, 0, 0.10),
183
- inset 0 1px 0 rgba(255, 255, 255, 0.18);
182
+ --sg-gantt-bar-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.18);
184
183
  --sg-gantt-bar-shadow-hover:
185
- 0 3px 8px rgba(0, 0, 0, 0.14),
186
- inset 0 1px 0 rgba(255, 255, 255, 0.22);
184
+ 0 3px 8px rgba(0, 0, 0, 0.14), inset 0 1px 0 rgba(255, 255, 255, 0.22);
187
185
  --sg-gantt-today-marker-color: var(--sg-color-error);
188
186
  --sg-gantt-today-marker-bg: rgba(245, 34, 45, 0.06);
189
187
  --sg-gantt-dep-color: var(--sg-color-text-tertiary);
190
188
 
191
189
  /* Timeline / EventTimeline — connector + event dot */
192
190
  --sg-timeline-tail-color: var(--sg-color-border-secondary);
193
- --sg-event-timeline-dot-shadow:
194
- 0 0 0 3px var(--sg-color-bg),
195
- 0 1px 3px rgba(22, 119, 255, 0.30);
191
+ --sg-event-timeline-dot-shadow: 0 0 0 3px var(--sg-color-bg), 0 1px 3px rgba(22, 119, 255, 0.3);
196
192
  --sg-event-timeline-dot-shadow-hover:
197
- 0 0 0 3px var(--sg-color-bg),
198
- 0 2px 8px rgba(22, 119, 255, 0.45);
193
+ 0 0 0 3px var(--sg-color-bg), 0 2px 8px rgba(22, 119, 255, 0.45);
199
194
 
200
195
  /* ResourceCalendar — today, lane separators, conflict overlay */
201
196
  --sg-rcal-today-bg: rgba(22, 119, 255, 0.05);
202
197
  --sg-rcal-today-marker-color: var(--sg-color-primary);
203
198
  --sg-rcal-lane-divider: var(--sg-color-border-secondary);
204
- --sg-rcal-conflict-overlay-bg: rgba(245, 34, 45, 0.10);
199
+ --sg-rcal-conflict-overlay-bg: rgba(245, 34, 45, 0.1);
205
200
  }
206
201
 
207
202
  /* === Semantic tokens — Dark theme === */
208
- [data-sg-theme="dark"] {
203
+ [data-sg-theme='dark'] {
209
204
  --sg-color-bg: var(--sg-gray-10);
210
205
  --sg-color-bg-secondary: #1f1f1f;
211
206
  --sg-color-bg-elevated: #1f1f1f;
@@ -223,6 +218,11 @@
223
218
  --sg-color-border: #424242;
224
219
  --sg-color-border-secondary: #303030;
225
220
 
221
+ --sg-color-fill: rgba(255, 255, 255, 0.15);
222
+ --sg-color-fill-secondary: rgba(255, 255, 255, 0.08);
223
+ --sg-color-fill-tertiary: rgba(255, 255, 255, 0.06);
224
+ --sg-color-fill-quaternary: rgba(255, 255, 255, 0.04);
225
+
226
226
  --sg-color-primary: var(--sg-blue-5);
227
227
  --sg-color-primary-hover: var(--sg-blue-6);
228
228
  --sg-color-primary-active: var(--sg-blue-7);
@@ -243,6 +243,10 @@
243
243
  --sg-color-tooltip-bg: #434343;
244
244
  --sg-color-tooltip-text: #ffffff;
245
245
 
246
+ /* Skeleton — dark theme bars need brighter fills to stay readable. */
247
+ --sg-skeleton-bg: rgba(255, 255, 255, 0.08);
248
+ --sg-skeleton-shimmer: rgba(255, 255, 255, 0.18);
249
+
246
250
  /* === Visualization layer (dark) ===
247
251
  * Shadows are stronger and use lower-alpha bright tints; canvas grid
248
252
  * lines use white-alpha so they read against dark bg. */
@@ -250,19 +254,12 @@
250
254
  --sg-diagram-canvas-bg: var(--sg-color-bg);
251
255
  --sg-diagram-grid-line-color: rgba(255, 255, 255, 0.04);
252
256
  --sg-diagram-grid-line-color-strong: rgba(255, 255, 255, 0.08);
253
- --sg-diagram-node-shadow:
254
- 0 1px 2px rgba(0, 0, 0, 0.40),
255
- 0 0 0 1px rgba(255, 255, 255, 0.04);
256
- --sg-diagram-node-shadow-hover:
257
- 0 4px 12px rgba(0, 0, 0, 0.50),
258
- 0 1px 3px rgba(0, 0, 0, 0.40);
257
+ --sg-diagram-node-shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.04);
258
+ --sg-diagram-node-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.5), 0 1px 3px rgba(0, 0, 0, 0.4);
259
259
  --sg-diagram-node-shadow-selected:
260
- 0 0 0 2px var(--sg-color-primary-bg),
261
- 0 6px 16px rgba(64, 150, 255, 0.30),
262
- 0 1px 3px rgba(0, 0, 0, 0.40);
263
- --sg-diagram-node-shadow-dragging:
264
- 0 12px 28px rgba(0, 0, 0, 0.60),
265
- 0 2px 6px rgba(0, 0, 0, 0.40);
260
+ 0 0 0 2px var(--sg-color-primary-bg), 0 6px 16px rgba(64, 150, 255, 0.3),
261
+ 0 1px 3px rgba(0, 0, 0, 0.4);
262
+ --sg-diagram-node-shadow-dragging: 0 12px 28px rgba(0, 0, 0, 0.6), 0 2px 6px rgba(0, 0, 0, 0.4);
266
263
  --sg-diagram-edge-color: var(--sg-gray-7);
267
264
  --sg-diagram-edge-color-hover: var(--sg-color-text-secondary);
268
265
  --sg-diagram-edge-color-selected: var(--sg-color-primary);
@@ -270,40 +267,30 @@
270
267
  --sg-diagram-lasso-fill: rgba(64, 150, 255, 0.12);
271
268
 
272
269
  --sg-chart-tooltip-bg: var(--sg-color-bg-elevated);
273
- --sg-chart-tooltip-shadow:
274
- 0 6px 20px rgba(0, 0, 0, 0.50),
275
- 0 1px 3px rgba(0, 0, 0, 0.30);
276
- --sg-chart-crosshair-color: rgba(255, 255, 255, 0.40);
270
+ --sg-chart-tooltip-shadow: 0 6px 20px rgba(0, 0, 0, 0.5), 0 1px 3px rgba(0, 0, 0, 0.3);
271
+ --sg-chart-crosshair-color: rgba(255, 255, 255, 0.4);
277
272
  --sg-chart-brush-fill: rgba(64, 150, 255, 0.16);
278
273
  --sg-chart-brush-stroke: var(--sg-color-primary);
279
274
  --sg-chart-legend-hover-bg: var(--sg-color-bg-hover);
280
275
 
281
276
  --sg-dashboard-widget-shadow: var(--sg-shadow-sm);
282
- --sg-dashboard-widget-shadow-hover:
283
- 0 4px 12px rgba(0, 0, 0, 0.40),
284
- 0 1px 3px rgba(0, 0, 0, 0.30);
277
+ --sg-dashboard-widget-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.4), 0 1px 3px rgba(0, 0, 0, 0.3);
285
278
  --sg-dashboard-editor-grid-color: rgba(64, 150, 255, 0.08);
286
279
  --sg-dashboard-editor-widget-border: var(--sg-color-primary);
287
- --sg-dashboard-editor-drop-zone-bg: rgba(64, 150, 255, 0.10);
280
+ --sg-dashboard-editor-drop-zone-bg: rgba(64, 150, 255, 0.1);
288
281
  --sg-dashboard-editor-drop-zone-border: var(--sg-color-primary);
289
282
 
290
- --sg-gantt-bar-shadow:
291
- 0 1px 2px rgba(0, 0, 0, 0.40),
292
- inset 0 1px 0 rgba(255, 255, 255, 0.10);
283
+ --sg-gantt-bar-shadow: 0 1px 2px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.1);
293
284
  --sg-gantt-bar-shadow-hover:
294
- 0 3px 8px rgba(0, 0, 0, 0.50),
295
- inset 0 1px 0 rgba(255, 255, 255, 0.14);
285
+ 0 3px 8px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.14);
296
286
  --sg-gantt-today-marker-color: var(--sg-color-error);
297
- --sg-gantt-today-marker-bg: rgba(220, 68, 70, 0.10);
287
+ --sg-gantt-today-marker-bg: rgba(220, 68, 70, 0.1);
298
288
  --sg-gantt-dep-color: var(--sg-color-text-tertiary);
299
289
 
300
290
  --sg-timeline-tail-color: var(--sg-color-border-secondary);
301
- --sg-event-timeline-dot-shadow:
302
- 0 0 0 3px var(--sg-color-bg),
303
- 0 1px 3px rgba(64, 150, 255, 0.45);
291
+ --sg-event-timeline-dot-shadow: 0 0 0 3px var(--sg-color-bg), 0 1px 3px rgba(64, 150, 255, 0.45);
304
292
  --sg-event-timeline-dot-shadow-hover:
305
- 0 0 0 3px var(--sg-color-bg),
306
- 0 2px 10px rgba(64, 150, 255, 0.65);
293
+ 0 0 0 3px var(--sg-color-bg), 0 2px 10px rgba(64, 150, 255, 0.65);
307
294
 
308
295
  --sg-rcal-today-bg: rgba(64, 150, 255, 0.08);
309
296
  --sg-rcal-today-marker-color: var(--sg-color-primary);