@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.
Files changed (68) hide show
  1. package/README.md +98 -98
  2. package/components/autocomplete.css +35 -35
  3. package/components/autofield.css +67 -67
  4. package/components/avatar.css +37 -37
  5. package/components/badge.css +102 -102
  6. package/components/breadcrumb.css +29 -29
  7. package/components/button.css +181 -181
  8. package/components/calendar.css +408 -408
  9. package/components/carousel.css +102 -102
  10. package/components/cascader.css +380 -380
  11. package/components/charts.css +408 -408
  12. package/components/checkbox.css +114 -114
  13. package/components/collapse.css +166 -166
  14. package/components/colorpicker.css +252 -252
  15. package/components/context-menu.css +95 -95
  16. package/components/descriptions.css +82 -82
  17. package/components/diagram.css +435 -435
  18. package/components/drawer.css +124 -124
  19. package/components/dropdown.css +110 -110
  20. package/components/empty.css +25 -25
  21. package/components/event-timeline.css +134 -134
  22. package/components/field.css +35 -35
  23. package/components/form.css +115 -115
  24. package/components/gantt.css +166 -166
  25. package/components/input-number.css +76 -76
  26. package/components/input-password.css +104 -104
  27. package/components/input.css +211 -211
  28. package/components/list.css +366 -366
  29. package/components/mentions.css +54 -54
  30. package/components/menu.css +326 -326
  31. package/components/modal.css +1 -0
  32. package/components/notification.css +128 -128
  33. package/components/pagination.css +162 -162
  34. package/components/popconfirm.css +95 -95
  35. package/components/progress.css +116 -116
  36. package/components/radio.css +95 -95
  37. package/components/rate.css +48 -48
  38. package/components/resource-calendar.css +224 -224
  39. package/components/result.css +45 -45
  40. package/components/schema-form-editor.css +433 -433
  41. package/components/search-input.css +112 -112
  42. package/components/segmented.css +76 -76
  43. package/components/select.css +181 -181
  44. package/components/skeleton.css +72 -72
  45. package/components/slider.css +51 -51
  46. package/components/spin.css +102 -102
  47. package/components/steps.css +194 -194
  48. package/components/switch.css +75 -75
  49. package/components/table.css +9 -1
  50. package/components/tabs.css +137 -137
  51. package/components/tag.css +61 -61
  52. package/components/textarea.css +22 -22
  53. package/components/timeline.css +169 -169
  54. package/components/timepicker.css +224 -224
  55. package/components/tooltip.css +91 -91
  56. package/components/transfer.css +140 -140
  57. package/components/tree.css +601 -601
  58. package/components/treeselect.css +221 -221
  59. package/components/upload.css +124 -124
  60. package/index.css +70 -70
  61. package/index.d.ts +9 -9
  62. package/package.json +1 -1
  63. package/print.css +88 -88
  64. package/reset.css +17 -17
  65. package/themes/dark.css +17 -17
  66. package/themes/default.css +14 -14
  67. package/tokens.css +310 -310
  68. package/transitions.css +158 -158
@@ -1,252 +1,252 @@
1
- /* === ColorPicker === */
2
-
3
- .sg-colorpicker-wrapper {
4
- position: relative;
5
- display: inline-block;
6
- font-size: var(--sg-font-size);
7
- color: var(--sg-color-text);
8
- }
9
-
10
- .sg-colorpicker-disabled {
11
- opacity: 0.5;
12
- pointer-events: none;
13
- }
14
-
15
- /* --- Sizes --- */
16
-
17
- .sg-colorpicker-small .sg-colorpicker-trigger {
18
- height: var(--sg-height-sm);
19
- padding: 2px var(--sg-padding-xs);
20
- }
21
-
22
- .sg-colorpicker-small .sg-colorpicker-swatch {
23
- width: 16px;
24
- height: 16px;
25
- }
26
-
27
- .sg-colorpicker-middle .sg-colorpicker-trigger {
28
- height: var(--sg-height-md);
29
- padding: var(--sg-padding-xs) var(--sg-padding-sm);
30
- }
31
-
32
- .sg-colorpicker-middle .sg-colorpicker-swatch {
33
- width: 20px;
34
- height: 20px;
35
- }
36
-
37
- .sg-colorpicker-large .sg-colorpicker-trigger {
38
- height: var(--sg-height-lg);
39
- padding: var(--sg-padding-xs) var(--sg-padding-md);
40
- }
41
-
42
- .sg-colorpicker-large .sg-colorpicker-swatch {
43
- width: 24px;
44
- height: 24px;
45
- }
46
-
47
- /* --- Trigger --- */
48
-
49
- .sg-colorpicker-trigger {
50
- display: inline-flex;
51
- align-items: center;
52
- gap: var(--sg-padding-sm);
53
- border: 1px solid var(--sg-color-border);
54
- border-radius: var(--sg-border-radius);
55
- background: var(--sg-color-bg-container);
56
- color: inherit;
57
- font: inherit;
58
- cursor: pointer;
59
- transition:
60
- border-color var(--sg-transition-duration) var(--sg-transition-timing),
61
- box-shadow var(--sg-transition-duration) var(--sg-transition-timing);
62
- }
63
-
64
- .sg-colorpicker-trigger:disabled {
65
- cursor: not-allowed;
66
- }
67
-
68
- .sg-colorpicker-trigger:hover {
69
- border-color: var(--sg-color-primary-hover);
70
- }
71
-
72
- .sg-colorpicker-trigger:focus-visible {
73
- outline: none;
74
- border-color: var(--sg-color-primary);
75
- box-shadow: 0 0 0 2px var(--sg-color-primary-bg);
76
- }
77
-
78
- /* --- Swatch --- */
79
-
80
- .sg-colorpicker-swatch {
81
- display: inline-block;
82
- border-radius: var(--sg-border-radius-sm);
83
- border: 1px solid var(--sg-color-border-secondary);
84
- flex-shrink: 0;
85
- }
86
-
87
- .sg-colorpicker-text {
88
- font-size: var(--sg-font-size-sm);
89
- color: var(--sg-color-text-secondary);
90
- font-family: monospace;
91
- }
92
-
93
- /* --- Dropdown --- */
94
-
95
- .sg-colorpicker-dropdown {
96
- position: absolute;
97
- z-index: var(--sg-z-dropdown);
98
- top: calc(100% + 4px);
99
- left: 0;
100
- width: 240px;
101
- padding: var(--sg-padding-md);
102
- background: var(--sg-color-bg-elevated);
103
- border-radius: var(--sg-border-radius-lg);
104
- box-shadow: var(--sg-shadow-lg);
105
- border: 1px solid var(--sg-color-border-secondary);
106
- display: flex;
107
- flex-direction: column;
108
- gap: var(--sg-padding-sm);
109
- animation: sg-colorpicker-in var(--sg-transition-duration) var(--sg-transition-timing);
110
- }
111
-
112
- @keyframes sg-colorpicker-in {
113
- from {
114
- opacity: 0;
115
- transform: scaleY(0.9);
116
- }
117
- to {
118
- opacity: 1;
119
- transform: scaleY(1);
120
- }
121
- }
122
-
123
- /* --- Saturation panel --- */
124
-
125
- .sg-colorpicker-saturation {
126
- position: relative;
127
- width: 100%;
128
- height: 150px;
129
- border-radius: var(--sg-border-radius-sm);
130
- cursor: crosshair;
131
- touch-action: none;
132
- user-select: none;
133
- }
134
-
135
- .sg-colorpicker-cursor {
136
- position: absolute;
137
- width: 12px;
138
- height: 12px;
139
- border: 2px solid var(--sg-color-white, #fff);
140
- border-radius: 50%;
141
- box-shadow: 0 0 2px rgba(0, 0, 0, 0.4);
142
- transform: translate(-50%, -50%);
143
- pointer-events: none;
144
- }
145
-
146
- /* --- Hue bar --- */
147
-
148
- .sg-colorpicker-hue {
149
- position: relative;
150
- width: 100%;
151
- height: 12px;
152
- border-radius: 6px;
153
- background: linear-gradient(
154
- to right,
155
- #f00 0%,
156
- #ff0 17%,
157
- #0f0 33%,
158
- #0ff 50%,
159
- #00f 67%,
160
- #f0f 83%,
161
- #f00 100%
162
- );
163
- cursor: pointer;
164
- touch-action: none;
165
- user-select: none;
166
- }
167
-
168
- .sg-colorpicker-hue-cursor {
169
- position: absolute;
170
- top: 50%;
171
- width: 14px;
172
- height: 14px;
173
- border: 2px solid var(--sg-color-white, #fff);
174
- border-radius: 50%;
175
- box-shadow: 0 0 2px rgba(0, 0, 0, 0.4);
176
- background: transparent;
177
- transform: translate(-50%, -50%);
178
- pointer-events: none;
179
- }
180
-
181
- /* --- Input row --- */
182
-
183
- .sg-colorpicker-input-row {
184
- display: flex;
185
- align-items: center;
186
- gap: var(--sg-padding-sm);
187
- }
188
-
189
- .sg-colorpicker-preview {
190
- display: inline-block;
191
- width: 24px;
192
- height: 24px;
193
- border-radius: var(--sg-border-radius-sm);
194
- border: 1px solid var(--sg-color-border-secondary);
195
- flex-shrink: 0;
196
- }
197
-
198
- .sg-colorpicker-input {
199
- flex: 1;
200
- min-width: 0;
201
- height: var(--sg-height-sm);
202
- padding: 0 var(--sg-padding-sm);
203
- font-size: var(--sg-font-size-sm);
204
- font-family: monospace;
205
- color: var(--sg-color-text);
206
- background: var(--sg-color-bg-container);
207
- border: 1px solid var(--sg-color-border);
208
- border-radius: var(--sg-border-radius-sm);
209
- outline: none;
210
- transition: border-color var(--sg-transition-duration) var(--sg-transition-timing);
211
- }
212
-
213
- .sg-colorpicker-input:focus {
214
- border-color: var(--sg-color-primary);
215
- box-shadow: 0 0 0 2px var(--sg-color-primary-bg);
216
- }
217
-
218
- /* --- Presets --- */
219
-
220
- .sg-colorpicker-preset-group {
221
- display: flex;
222
- flex-direction: column;
223
- gap: var(--sg-padding-xs);
224
- }
225
-
226
- .sg-colorpicker-preset-label {
227
- font-size: var(--sg-font-size-sm);
228
- color: var(--sg-color-text-tertiary);
229
- }
230
-
231
- .sg-colorpicker-preset-grid {
232
- display: flex;
233
- flex-wrap: wrap;
234
- gap: var(--sg-padding-xs);
235
- }
236
-
237
- .sg-colorpicker-preset-color {
238
- width: 20px;
239
- height: 20px;
240
- border-radius: var(--sg-border-radius-sm);
241
- border: 1px solid var(--sg-color-border-secondary);
242
- cursor: pointer;
243
- padding: 0;
244
- transition:
245
- transform var(--sg-transition-duration) var(--sg-transition-timing),
246
- box-shadow var(--sg-transition-duration) var(--sg-transition-timing);
247
- }
248
-
249
- .sg-colorpicker-preset-color:hover {
250
- transform: scale(1.2);
251
- box-shadow: 0 0 0 2px var(--sg-color-primary-bg);
252
- }
1
+ /* === ColorPicker === */
2
+
3
+ .sg-colorpicker-wrapper {
4
+ position: relative;
5
+ display: inline-block;
6
+ font-size: var(--sg-font-size);
7
+ color: var(--sg-color-text);
8
+ }
9
+
10
+ .sg-colorpicker-disabled {
11
+ opacity: 0.5;
12
+ pointer-events: none;
13
+ }
14
+
15
+ /* --- Sizes --- */
16
+
17
+ .sg-colorpicker-small .sg-colorpicker-trigger {
18
+ height: var(--sg-height-sm);
19
+ padding: 2px var(--sg-padding-xs);
20
+ }
21
+
22
+ .sg-colorpicker-small .sg-colorpicker-swatch {
23
+ width: 16px;
24
+ height: 16px;
25
+ }
26
+
27
+ .sg-colorpicker-middle .sg-colorpicker-trigger {
28
+ height: var(--sg-height-md);
29
+ padding: var(--sg-padding-xs) var(--sg-padding-sm);
30
+ }
31
+
32
+ .sg-colorpicker-middle .sg-colorpicker-swatch {
33
+ width: 20px;
34
+ height: 20px;
35
+ }
36
+
37
+ .sg-colorpicker-large .sg-colorpicker-trigger {
38
+ height: var(--sg-height-lg);
39
+ padding: var(--sg-padding-xs) var(--sg-padding-md);
40
+ }
41
+
42
+ .sg-colorpicker-large .sg-colorpicker-swatch {
43
+ width: 24px;
44
+ height: 24px;
45
+ }
46
+
47
+ /* --- Trigger --- */
48
+
49
+ .sg-colorpicker-trigger {
50
+ display: inline-flex;
51
+ align-items: center;
52
+ gap: var(--sg-padding-sm);
53
+ border: 1px solid var(--sg-color-border);
54
+ border-radius: var(--sg-border-radius);
55
+ background: var(--sg-color-bg-container);
56
+ color: inherit;
57
+ font: inherit;
58
+ cursor: pointer;
59
+ transition:
60
+ border-color var(--sg-transition-duration) var(--sg-transition-timing),
61
+ box-shadow var(--sg-transition-duration) var(--sg-transition-timing);
62
+ }
63
+
64
+ .sg-colorpicker-trigger:disabled {
65
+ cursor: not-allowed;
66
+ }
67
+
68
+ .sg-colorpicker-trigger:hover {
69
+ border-color: var(--sg-color-primary-hover);
70
+ }
71
+
72
+ .sg-colorpicker-trigger:focus-visible {
73
+ outline: none;
74
+ border-color: var(--sg-color-primary);
75
+ box-shadow: 0 0 0 2px var(--sg-color-primary-bg);
76
+ }
77
+
78
+ /* --- Swatch --- */
79
+
80
+ .sg-colorpicker-swatch {
81
+ display: inline-block;
82
+ border-radius: var(--sg-border-radius-sm);
83
+ border: 1px solid var(--sg-color-border-secondary);
84
+ flex-shrink: 0;
85
+ }
86
+
87
+ .sg-colorpicker-text {
88
+ font-size: var(--sg-font-size-sm);
89
+ color: var(--sg-color-text-secondary);
90
+ font-family: monospace;
91
+ }
92
+
93
+ /* --- Dropdown --- */
94
+
95
+ .sg-colorpicker-dropdown {
96
+ position: absolute;
97
+ z-index: var(--sg-z-dropdown);
98
+ top: calc(100% + 4px);
99
+ left: 0;
100
+ width: 240px;
101
+ padding: var(--sg-padding-md);
102
+ background: var(--sg-color-bg-elevated);
103
+ border-radius: var(--sg-border-radius-lg);
104
+ box-shadow: var(--sg-shadow-lg);
105
+ border: 1px solid var(--sg-color-border-secondary);
106
+ display: flex;
107
+ flex-direction: column;
108
+ gap: var(--sg-padding-sm);
109
+ animation: sg-colorpicker-in var(--sg-transition-duration) var(--sg-transition-timing);
110
+ }
111
+
112
+ @keyframes sg-colorpicker-in {
113
+ from {
114
+ opacity: 0;
115
+ transform: scaleY(0.9);
116
+ }
117
+ to {
118
+ opacity: 1;
119
+ transform: scaleY(1);
120
+ }
121
+ }
122
+
123
+ /* --- Saturation panel --- */
124
+
125
+ .sg-colorpicker-saturation {
126
+ position: relative;
127
+ width: 100%;
128
+ height: 150px;
129
+ border-radius: var(--sg-border-radius-sm);
130
+ cursor: crosshair;
131
+ touch-action: none;
132
+ user-select: none;
133
+ }
134
+
135
+ .sg-colorpicker-cursor {
136
+ position: absolute;
137
+ width: 12px;
138
+ height: 12px;
139
+ border: 2px solid var(--sg-color-white, #fff);
140
+ border-radius: 50%;
141
+ box-shadow: 0 0 2px rgba(0, 0, 0, 0.4);
142
+ transform: translate(-50%, -50%);
143
+ pointer-events: none;
144
+ }
145
+
146
+ /* --- Hue bar --- */
147
+
148
+ .sg-colorpicker-hue {
149
+ position: relative;
150
+ width: 100%;
151
+ height: 12px;
152
+ border-radius: 6px;
153
+ background: linear-gradient(
154
+ to right,
155
+ #f00 0%,
156
+ #ff0 17%,
157
+ #0f0 33%,
158
+ #0ff 50%,
159
+ #00f 67%,
160
+ #f0f 83%,
161
+ #f00 100%
162
+ );
163
+ cursor: pointer;
164
+ touch-action: none;
165
+ user-select: none;
166
+ }
167
+
168
+ .sg-colorpicker-hue-cursor {
169
+ position: absolute;
170
+ top: 50%;
171
+ width: 14px;
172
+ height: 14px;
173
+ border: 2px solid var(--sg-color-white, #fff);
174
+ border-radius: 50%;
175
+ box-shadow: 0 0 2px rgba(0, 0, 0, 0.4);
176
+ background: transparent;
177
+ transform: translate(-50%, -50%);
178
+ pointer-events: none;
179
+ }
180
+
181
+ /* --- Input row --- */
182
+
183
+ .sg-colorpicker-input-row {
184
+ display: flex;
185
+ align-items: center;
186
+ gap: var(--sg-padding-sm);
187
+ }
188
+
189
+ .sg-colorpicker-preview {
190
+ display: inline-block;
191
+ width: 24px;
192
+ height: 24px;
193
+ border-radius: var(--sg-border-radius-sm);
194
+ border: 1px solid var(--sg-color-border-secondary);
195
+ flex-shrink: 0;
196
+ }
197
+
198
+ .sg-colorpicker-input {
199
+ flex: 1;
200
+ min-width: 0;
201
+ height: var(--sg-height-sm);
202
+ padding: 0 var(--sg-padding-sm);
203
+ font-size: var(--sg-font-size-sm);
204
+ font-family: monospace;
205
+ color: var(--sg-color-text);
206
+ background: var(--sg-color-bg-container);
207
+ border: 1px solid var(--sg-color-border);
208
+ border-radius: var(--sg-border-radius-sm);
209
+ outline: none;
210
+ transition: border-color var(--sg-transition-duration) var(--sg-transition-timing);
211
+ }
212
+
213
+ .sg-colorpicker-input:focus {
214
+ border-color: var(--sg-color-primary);
215
+ box-shadow: 0 0 0 2px var(--sg-color-primary-bg);
216
+ }
217
+
218
+ /* --- Presets --- */
219
+
220
+ .sg-colorpicker-preset-group {
221
+ display: flex;
222
+ flex-direction: column;
223
+ gap: var(--sg-padding-xs);
224
+ }
225
+
226
+ .sg-colorpicker-preset-label {
227
+ font-size: var(--sg-font-size-sm);
228
+ color: var(--sg-color-text-tertiary);
229
+ }
230
+
231
+ .sg-colorpicker-preset-grid {
232
+ display: flex;
233
+ flex-wrap: wrap;
234
+ gap: var(--sg-padding-xs);
235
+ }
236
+
237
+ .sg-colorpicker-preset-color {
238
+ width: 20px;
239
+ height: 20px;
240
+ border-radius: var(--sg-border-radius-sm);
241
+ border: 1px solid var(--sg-color-border-secondary);
242
+ cursor: pointer;
243
+ padding: 0;
244
+ transition:
245
+ transform var(--sg-transition-duration) var(--sg-transition-timing),
246
+ box-shadow var(--sg-transition-duration) var(--sg-transition-timing);
247
+ }
248
+
249
+ .sg-colorpicker-preset-color:hover {
250
+ transform: scale(1.2);
251
+ box-shadow: 0 0 0 2px var(--sg-color-primary-bg);
252
+ }
@@ -1,95 +1,95 @@
1
- /* SkyGraph -- Context Menu
2
- *
3
- * Floating menu used by Table cell/header right-click and DataGrid
4
- * context-menu. Both share visual structure (background, border, shadow,
5
- * padding, hover state) but live in separate class namespaces:
6
- *
7
- * - `.sg-context-menu*` — Table ContextMenu (packages/react/src/
8
- * components/complex/Table/ContextMenu.tsx)
9
- * - `.sg-datagrid-context-menu*` — DataGrid ContextMenuPopup (DataGrid.tsx)
10
- *
11
- * Position (top/left) and submenu offset (`top:0; left:100%`) stay inline in
12
- * TSX because they are computed at runtime from the click coordinates. Every
13
- * other visual property (background, colour, border, shadow, paddings,
14
- * font-size, hover state, danger state, disabled state) lives here and is
15
- * driven by tokens — no hard-coded hex / px values.
16
- */
17
-
18
- /* ── Base shape, shared between Table and DataGrid via :is() group ── */
19
- .sg-context-menu,
20
- .sg-datagrid-context-menu {
21
- z-index: var(--sg-z-dropdown);
22
- min-width: 160px;
23
- padding: var(--sg-padding-xs) 0;
24
- background: var(--sg-color-bg-elevated);
25
- border: 1px solid var(--sg-color-border-secondary);
26
- border-radius: var(--sg-border-radius);
27
- box-shadow: var(--sg-shadow-lg);
28
- font-size: var(--sg-font-size);
29
- color: var(--sg-color-text);
30
- }
31
-
32
- /* ── Items ── */
33
- .sg-context-menu-item,
34
- .sg-datagrid-context-menu-item {
35
- display: flex;
36
- align-items: center;
37
- gap: var(--sg-padding-sm);
38
- padding: var(--sg-padding-xs) var(--sg-padding-md);
39
- cursor: pointer;
40
- line-height: var(--sg-line-height);
41
- transition: background var(--sg-transition-duration) var(--sg-transition-timing);
42
- }
43
-
44
- .sg-context-menu-item:hover,
45
- .sg-datagrid-context-menu-item:hover {
46
- background: var(--sg-color-bg-hover);
47
- }
48
-
49
- /* ── Modifiers ── */
50
- .sg-context-menu-item--danger,
51
- .sg-datagrid-context-menu-item--danger {
52
- color: var(--sg-color-error);
53
- }
54
-
55
- .sg-context-menu-item--disabled,
56
- .sg-datagrid-context-menu-item--disabled {
57
- color: var(--sg-color-text-disabled);
58
- cursor: not-allowed;
59
- }
60
-
61
- .sg-context-menu-item--disabled:hover,
62
- .sg-datagrid-context-menu-item--disabled:hover {
63
- background: transparent;
64
- }
65
-
66
- /* ── Label (Table only — DataGrid uses plain text inside item div) ── */
67
- .sg-context-menu-label {
68
- flex: 1;
69
- min-width: 0;
70
- }
71
-
72
- /* ── Submenu indicator (Table only) ── */
73
- .sg-context-menu-submenu-arrow {
74
- margin-left: var(--sg-padding-sm);
75
- color: var(--sg-color-text-tertiary);
76
- }
77
-
78
- /* ── Icon slot ── */
79
- .sg-context-menu-icon {
80
- display: inline-flex;
81
- align-items: center;
82
- justify-content: center;
83
- flex-shrink: 0;
84
- width: 16px;
85
- height: 16px;
86
- color: var(--sg-color-text-secondary);
87
- }
88
-
89
- /* ── Divider ── */
90
- .sg-context-menu-divider,
91
- .sg-datagrid-context-menu-divider {
92
- height: 1px;
93
- margin: var(--sg-padding-xs) 0;
94
- background: var(--sg-color-border-secondary);
95
- }
1
+ /* SkyGraph -- Context Menu
2
+ *
3
+ * Floating menu used by Table cell/header right-click and DataGrid
4
+ * context-menu. Both share visual structure (background, border, shadow,
5
+ * padding, hover state) but live in separate class namespaces:
6
+ *
7
+ * - `.sg-context-menu*` — Table ContextMenu (packages/react/src/
8
+ * components/complex/Table/ContextMenu.tsx)
9
+ * - `.sg-datagrid-context-menu*` — DataGrid ContextMenuPopup (DataGrid.tsx)
10
+ *
11
+ * Position (top/left) and submenu offset (`top:0; left:100%`) stay inline in
12
+ * TSX because they are computed at runtime from the click coordinates. Every
13
+ * other visual property (background, colour, border, shadow, paddings,
14
+ * font-size, hover state, danger state, disabled state) lives here and is
15
+ * driven by tokens — no hard-coded hex / px values.
16
+ */
17
+
18
+ /* ── Base shape, shared between Table and DataGrid via :is() group ── */
19
+ .sg-context-menu,
20
+ .sg-datagrid-context-menu {
21
+ z-index: var(--sg-z-dropdown);
22
+ min-width: 160px;
23
+ padding: var(--sg-padding-xs) 0;
24
+ background: var(--sg-color-bg-elevated);
25
+ border: 1px solid var(--sg-color-border-secondary);
26
+ border-radius: var(--sg-border-radius);
27
+ box-shadow: var(--sg-shadow-lg);
28
+ font-size: var(--sg-font-size);
29
+ color: var(--sg-color-text);
30
+ }
31
+
32
+ /* ── Items ── */
33
+ .sg-context-menu-item,
34
+ .sg-datagrid-context-menu-item {
35
+ display: flex;
36
+ align-items: center;
37
+ gap: var(--sg-padding-sm);
38
+ padding: var(--sg-padding-xs) var(--sg-padding-md);
39
+ cursor: pointer;
40
+ line-height: var(--sg-line-height);
41
+ transition: background var(--sg-transition-duration) var(--sg-transition-timing);
42
+ }
43
+
44
+ .sg-context-menu-item:hover,
45
+ .sg-datagrid-context-menu-item:hover {
46
+ background: var(--sg-color-bg-hover);
47
+ }
48
+
49
+ /* ── Modifiers ── */
50
+ .sg-context-menu-item--danger,
51
+ .sg-datagrid-context-menu-item--danger {
52
+ color: var(--sg-color-error);
53
+ }
54
+
55
+ .sg-context-menu-item--disabled,
56
+ .sg-datagrid-context-menu-item--disabled {
57
+ color: var(--sg-color-text-disabled);
58
+ cursor: not-allowed;
59
+ }
60
+
61
+ .sg-context-menu-item--disabled:hover,
62
+ .sg-datagrid-context-menu-item--disabled:hover {
63
+ background: transparent;
64
+ }
65
+
66
+ /* ── Label (Table only — DataGrid uses plain text inside item div) ── */
67
+ .sg-context-menu-label {
68
+ flex: 1;
69
+ min-width: 0;
70
+ }
71
+
72
+ /* ── Submenu indicator (Table only) ── */
73
+ .sg-context-menu-submenu-arrow {
74
+ margin-left: var(--sg-padding-sm);
75
+ color: var(--sg-color-text-tertiary);
76
+ }
77
+
78
+ /* ── Icon slot ── */
79
+ .sg-context-menu-icon {
80
+ display: inline-flex;
81
+ align-items: center;
82
+ justify-content: center;
83
+ flex-shrink: 0;
84
+ width: 16px;
85
+ height: 16px;
86
+ color: var(--sg-color-text-secondary);
87
+ }
88
+
89
+ /* ── Divider ── */
90
+ .sg-context-menu-divider,
91
+ .sg-datagrid-context-menu-divider {
92
+ height: 1px;
93
+ margin: var(--sg-padding-xs) 0;
94
+ background: var(--sg-color-border-secondary);
95
+ }