@revolist/revogrid 4.25.0 → 4.25.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.
@@ -1,4 +1,5 @@
1
- revo-grid[data-rg-theme-base=default] {
1
+ revo-grid:is([theme=default], [theme=dark]),
2
+ revo-grid:not([theme]) {
2
3
  --rg-theme-font-family: var(
3
4
  --revo-grid-font-family,
4
5
  Helvetica,
@@ -21,80 +22,111 @@ revo-grid[data-rg-theme-base=default] {
21
22
  border: 1px solid var(--rg-theme-header-border);
22
23
  font-size: var(--rg-theme-font-size);
23
24
  }
24
- revo-grid[data-rg-theme-base=default] .rowHeaders revogr-header {
25
+ revo-grid:is([theme=default], [theme=dark]) .rowHeaders revogr-header,
26
+ revo-grid:not([theme]) .rowHeaders revogr-header {
25
27
  box-shadow: -1px 0 0 0 var(--rg-theme-header-border) inset;
26
28
  }
27
- revo-grid[data-rg-theme-base=default] revogr-header {
29
+ revo-grid:is([theme=default], [theme=dark]) revogr-header,
30
+ revo-grid:not([theme]) revogr-header {
28
31
  text-align: var(--rg-theme-header-text-align);
29
32
  line-height: var(--rg-theme-header-height);
30
33
  background-color: var(--rg-theme-header-bg);
31
34
  }
32
- revo-grid[data-rg-theme-base=default] revogr-header .group-rgRow {
35
+ revo-grid:is([theme=default], [theme=dark]) revogr-header .group-rgRow,
36
+ revo-grid:not([theme]) revogr-header .group-rgRow {
33
37
  box-shadow: none;
34
38
  }
35
- revo-grid[data-rg-theme-base=default] revogr-header .group-rgRow .rgHeaderCell {
39
+ revo-grid:is([theme=default], [theme=dark]) revogr-header .group-rgRow .rgHeaderCell,
40
+ revo-grid:not([theme]) revogr-header .group-rgRow .rgHeaderCell {
36
41
  box-shadow: -1px 0 0 0 var(--rg-theme-header-border), -1px 0 0 0 var(--rg-theme-header-border) inset, 0 -1px 0 0 var(--rg-theme-header-border), 0 -1px 0 0 var(--rg-theme-header-border) inset;
37
42
  }
38
- revo-grid[data-rg-theme-base=default] revogr-header .header-rgRow,
39
- revo-grid[data-rg-theme-base=default] revogr-header .group-rgRow {
43
+ revo-grid:is([theme=default], [theme=dark]) revogr-header .header-rgRow,
44
+ revo-grid:is([theme=default], [theme=dark]) revogr-header .group-rgRow,
45
+ revo-grid:not([theme]) revogr-header .header-rgRow,
46
+ revo-grid:not([theme]) revogr-header .group-rgRow {
40
47
  text-transform: var(--rg-theme-header-text-transform);
41
48
  font-size: var(--rg-theme-header-font-size);
42
49
  font-weight: var(--rg-theme-header-font-weight);
43
50
  color: var(--rg-theme-header-color);
44
51
  }
45
- revo-grid[data-rg-theme-base=default] revogr-header .header-rgRow {
52
+ revo-grid:is([theme=default], [theme=dark]) revogr-header .header-rgRow,
53
+ revo-grid:not([theme]) revogr-header .header-rgRow {
46
54
  height: var(--rg-theme-header-height);
47
55
  box-shadow: 0 -1px 0 0 var(--rg-theme-header-border) inset;
48
56
  }
49
- revo-grid[data-rg-theme-base=default] revogr-header .rgHeaderCell {
57
+ revo-grid:is([theme=default], [theme=dark]) revogr-header .rgHeaderCell,
58
+ revo-grid:not([theme]) revogr-header .rgHeaderCell {
50
59
  box-shadow: -1px 0 0 0 var(--rg-theme-header-border) inset, 0 -1px 0 0 var(--rg-theme-header-border), 0 -1px 0 0 var(--rg-theme-header-border) inset;
51
60
  }
52
- revo-grid[data-rg-theme-base=default] .rowHeaders {
61
+ revo-grid:is([theme=default], [theme=dark]) .rowHeaders,
62
+ revo-grid:not([theme]) .rowHeaders {
53
63
  background-color: var(--rg-theme-row-headers-bg);
54
64
  }
55
- revo-grid[data-rg-theme-base=default] .rowHeaders revogr-data .rgCell {
65
+ revo-grid:is([theme=default], [theme=dark]) .rowHeaders revogr-data .rgCell,
66
+ revo-grid:not([theme]) .rowHeaders revogr-data .rgCell {
56
67
  color: var(--rg-theme-row-headers-color);
57
68
  }
58
- revo-grid[data-rg-theme-base=default] .rowHeaders revogr-data .rgCell:first-child {
69
+ revo-grid:is([theme=default], [theme=dark]) .rowHeaders revogr-data .rgCell:first-child,
70
+ revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:first-child {
59
71
  box-shadow: 0 -1px 0 0 var(--rg-theme-header-border) inset;
60
72
  }
61
- revo-grid[data-rg-theme-base=default] .rowHeaders revogr-data .rgCell:not(:first-child) {
73
+ revo-grid:is([theme=default], [theme=dark]) .rowHeaders revogr-data .rgCell:not(:first-child),
74
+ revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:not(:first-child) {
62
75
  box-shadow: 0 -1px 0 0 var(--rg-theme-header-border) inset, -1px 0 0 0 var(--rg-theme-header-border) inset;
63
76
  }
64
- revo-grid[data-rg-theme-base=default] .rowHeaders revogr-data .rgCell:last-child {
77
+ revo-grid:is([theme=default], [theme=dark]) .rowHeaders revogr-data .rgCell:last-child,
78
+ revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:last-child {
65
79
  border-right: 1px solid var(--rg-theme-header-border);
66
80
  }
67
- revo-grid[data-rg-theme-base=default] .rowHeaders revogr-data revogr-header {
81
+ revo-grid:is([theme=default], [theme=dark]) .rowHeaders revogr-data revogr-header,
82
+ revo-grid:not([theme]) .rowHeaders revogr-data revogr-header {
68
83
  box-shadow: 0 -1px 0 0 var(--rg-theme-header-border) inset;
69
84
  }
70
- revo-grid[data-rg-theme-base=default] revogr-viewport-scroll.colPinStart revogr-data .rgRow .rgCell:last-child {
85
+ revo-grid:is([theme=default], [theme=dark]) revogr-viewport-scroll.colPinStart revogr-data .rgRow .rgCell:last-child,
86
+ revo-grid:not([theme]) revogr-viewport-scroll.colPinStart revogr-data .rgRow .rgCell:last-child {
71
87
  box-shadow: 0 -1px 0 0 var(--rg-theme-cell-border) inset, -1px 0 0 0 var(--rg-theme-header-border) inset;
72
88
  }
73
- revo-grid[data-rg-theme-base=default] revogr-viewport-scroll.colPinStart .footer-wrapper revogr-data .rgRow:first-child .rgCell {
89
+ revo-grid:is([theme=default], [theme=dark]) revogr-viewport-scroll.colPinStart .footer-wrapper revogr-data .rgRow:first-child .rgCell,
90
+ revo-grid:not([theme]) revogr-viewport-scroll.colPinStart .footer-wrapper revogr-data .rgRow:first-child .rgCell {
74
91
  box-shadow: 0 1px 0 0 var(--rg-theme-header-border) inset, -1px 0 0 0 var(--rg-theme-header-border) inset;
75
92
  }
76
- revo-grid[data-rg-theme-base=default] revogr-viewport-scroll.colPinEnd,
77
- revo-grid[data-rg-theme-base=default] revogr-viewport-scroll.colPinEnd revogr-header {
93
+ revo-grid:is([theme=default], [theme=dark]) revogr-viewport-scroll.colPinEnd,
94
+ revo-grid:is([theme=default], [theme=dark]) revogr-viewport-scroll.colPinEnd revogr-header,
95
+ revo-grid:not([theme]) revogr-viewport-scroll.colPinEnd,
96
+ revo-grid:not([theme]) revogr-viewport-scroll.colPinEnd revogr-header {
78
97
  box-shadow: 1px 0 0 var(--rg-theme-header-border) inset;
79
98
  }
80
- revo-grid[data-rg-theme-base=default] .footer-wrapper revogr-data .rgRow:first-child .rgCell {
99
+ revo-grid:is([theme=default], [theme=dark]) .footer-wrapper revogr-data .rgRow:first-child .rgCell,
100
+ revo-grid:not([theme]) .footer-wrapper revogr-data .rgRow:first-child .rgCell {
81
101
  box-shadow: 0 1px 0 0 var(--rg-theme-cell-border) inset, -1px 0 0 0 var(--rg-theme-cell-border) inset, 0 -1px 0 0 var(--rg-theme-cell-border) inset;
82
102
  }
83
- revo-grid[data-rg-theme-base=default] revogr-data {
103
+ revo-grid:is([theme=default], [theme=dark]) revogr-data,
104
+ revo-grid:not([theme]) revogr-data {
84
105
  text-align: var(--rg-theme-cell-text-align);
85
106
  }
86
- revo-grid[data-rg-theme-base=default] revogr-data .revo-draggable {
107
+ revo-grid:is([theme=default], [theme=dark]) revogr-data .revo-draggable,
108
+ revo-grid:not([theme]) revogr-data .revo-draggable {
87
109
  float: left;
88
110
  }
89
- revo-grid[data-rg-theme-base=default] revogr-data .rgRow {
111
+ revo-grid:is([theme=default], [theme=dark]) revogr-data .rgRow,
112
+ revo-grid:not([theme]) revogr-data .rgRow {
90
113
  line-height: var(--rg-theme-row-size, 27px);
91
114
  }
92
- revo-grid[data-rg-theme-base=default] revogr-data .rgCell {
115
+ revo-grid:is([theme=default], [theme=dark]) revogr-data .rgCell,
116
+ revo-grid:not([theme]) revogr-data .rgCell {
93
117
  padding: var(--rg-theme-cell-padding);
94
118
  box-shadow: 0 -1px 0 0 var(--rg-theme-cell-border) inset, -1px 0 0 0 var(--rg-theme-cell-border) inset;
95
119
  }
96
120
 
97
- revo-grid[data-rg-theme-base=material] {
121
+ /*
122
+ * Material built-ins and standalone custom themes share the common tokenized
123
+ * structure. A custom theme remains identified only by its own `theme` value.
124
+ */
125
+ revo-grid:is([theme=material], [theme=darkMaterial]),
126
+ revo-grid[theme]:not([theme=default],
127
+ [theme=dark],
128
+ [theme=compact],
129
+ [theme=darkCompact]) {
98
130
  --rg-theme-font-family: var(
99
131
  --revo-grid-font-family,
100
132
  Nunito,
@@ -125,7 +157,11 @@ revo-grid[data-rg-theme-base=material] {
125
157
  --rg-theme-cell-padding: var(--revo-grid-cell-padding, 0 15px);
126
158
  font-family: var(--rg-theme-font-family);
127
159
  }
128
- revo-grid[data-rg-theme-base=material] revogr-header {
160
+ revo-grid:is([theme=material], [theme=darkMaterial]) revogr-header,
161
+ revo-grid[theme]:not([theme=default],
162
+ [theme=dark],
163
+ [theme=compact],
164
+ [theme=darkCompact]) revogr-header {
129
165
  color: var(--rg-theme-header-color);
130
166
  background-color: var(--rg-theme-header-bg);
131
167
  line-height: var(--rg-theme-header-height);
@@ -134,32 +170,60 @@ revo-grid[data-rg-theme-base=material] revogr-header {
134
170
  text-transform: var(--rg-theme-header-text-transform);
135
171
  text-align: var(--rg-theme-header-text-align);
136
172
  }
137
- revo-grid[data-rg-theme-base=material] revogr-header .rgHeaderCell {
173
+ revo-grid:is([theme=material], [theme=darkMaterial]) revogr-header .rgHeaderCell,
174
+ revo-grid[theme]:not([theme=default],
175
+ [theme=dark],
176
+ [theme=compact],
177
+ [theme=darkCompact]) revogr-header .rgHeaderCell {
138
178
  padding: var(--rg-theme-header-padding);
139
179
  text-overflow: ellipsis;
140
180
  }
141
- revo-grid[data-rg-theme-base=material] revogr-header .header-rgRow {
181
+ revo-grid:is([theme=material], [theme=darkMaterial]) revogr-header .header-rgRow,
182
+ revo-grid[theme]:not([theme=default],
183
+ [theme=dark],
184
+ [theme=compact],
185
+ [theme=darkCompact]) revogr-header .header-rgRow {
142
186
  height: var(--rg-theme-header-height);
143
187
  }
144
- revo-grid[data-rg-theme-base=material] .rowHeaders {
188
+ revo-grid:is([theme=material], [theme=darkMaterial]) .rowHeaders,
189
+ revo-grid[theme]:not([theme=default],
190
+ [theme=dark],
191
+ [theme=compact],
192
+ [theme=darkCompact]) .rowHeaders {
145
193
  color: var(--rg-theme-row-headers-color);
146
194
  background-color: var(--rg-theme-row-headers-bg);
147
195
  }
148
- revo-grid[data-rg-theme-base=material] .rowHeaders revogr-data .rgCell {
196
+ revo-grid:is([theme=material], [theme=darkMaterial]) .rowHeaders revogr-data .rgCell,
197
+ revo-grid[theme]:not([theme=default],
198
+ [theme=dark],
199
+ [theme=compact],
200
+ [theme=darkCompact]) .rowHeaders revogr-data .rgCell {
149
201
  color: var(--rg-theme-row-headers-color);
150
202
  }
151
- revo-grid[data-rg-theme-base=material] revogr-data {
203
+ revo-grid:is([theme=material], [theme=darkMaterial]) revogr-data,
204
+ revo-grid[theme]:not([theme=default],
205
+ [theme=dark],
206
+ [theme=compact],
207
+ [theme=darkCompact]) revogr-data {
152
208
  text-align: var(--rg-theme-cell-text-align);
153
209
  }
154
- revo-grid[data-rg-theme-base=material] revogr-data .rgRow {
210
+ revo-grid:is([theme=material], [theme=darkMaterial]) revogr-data .rgRow,
211
+ revo-grid[theme]:not([theme=default],
212
+ [theme=dark],
213
+ [theme=compact],
214
+ [theme=darkCompact]) revogr-data .rgRow {
155
215
  line-height: var(--rg-theme-row-size, 42px);
156
216
  }
157
- revo-grid[data-rg-theme-base=material] revogr-data .rgCell {
217
+ revo-grid:is([theme=material], [theme=darkMaterial]) revogr-data .rgCell,
218
+ revo-grid[theme]:not([theme=default],
219
+ [theme=dark],
220
+ [theme=compact],
221
+ [theme=darkCompact]) revogr-data .rgCell {
158
222
  padding: var(--rg-theme-cell-padding);
159
223
  box-shadow: -1px 0 0 0 var(--rg-theme-cell-vertical-border) inset;
160
224
  }
161
225
 
162
- revo-grid[data-rg-theme-base=compact] {
226
+ revo-grid:is([theme=compact], [theme=darkCompact]) {
163
227
  --rg-theme-font-family: var(
164
228
  --revo-grid-font-family,
165
229
  Nunito,
@@ -190,7 +254,7 @@ revo-grid[data-rg-theme-base=compact] {
190
254
  --rg-theme-cell-padding: var(--revo-grid-cell-padding, 0 15px);
191
255
  font-family: var(--rg-theme-font-family);
192
256
  }
193
- revo-grid[data-rg-theme-base=compact] revogr-header {
257
+ revo-grid:is([theme=compact], [theme=darkCompact]) revogr-header {
194
258
  color: var(--rg-theme-header-color);
195
259
  background-color: var(--rg-theme-header-bg);
196
260
  line-height: var(--rg-theme-header-height);
@@ -199,31 +263,31 @@ revo-grid[data-rg-theme-base=compact] revogr-header {
199
263
  text-transform: var(--rg-theme-header-text-transform);
200
264
  text-align: var(--rg-theme-header-text-align);
201
265
  }
202
- revo-grid[data-rg-theme-base=compact] revogr-header .rgHeaderCell {
266
+ revo-grid:is([theme=compact], [theme=darkCompact]) revogr-header .rgHeaderCell {
203
267
  padding: var(--rg-theme-header-padding);
204
268
  text-overflow: ellipsis;
205
269
  }
206
- revo-grid[data-rg-theme-base=compact] revogr-header .header-rgRow {
270
+ revo-grid:is([theme=compact], [theme=darkCompact]) revogr-header .header-rgRow {
207
271
  height: var(--rg-theme-header-height);
208
272
  }
209
- revo-grid[data-rg-theme-base=compact] .rowHeaders {
273
+ revo-grid:is([theme=compact], [theme=darkCompact]) .rowHeaders {
210
274
  color: var(--rg-theme-row-headers-color);
211
275
  background-color: var(--rg-theme-row-headers-bg);
212
276
  }
213
- revo-grid[data-rg-theme-base=compact] .rowHeaders revogr-data .rgCell {
277
+ revo-grid:is([theme=compact], [theme=darkCompact]) .rowHeaders revogr-data .rgCell {
214
278
  color: var(--rg-theme-row-headers-color);
215
279
  }
216
- revo-grid[data-rg-theme-base=compact] revogr-data {
280
+ revo-grid:is([theme=compact], [theme=darkCompact]) revogr-data {
217
281
  text-align: var(--rg-theme-cell-text-align);
218
282
  }
219
- revo-grid[data-rg-theme-base=compact] revogr-data .rgRow {
283
+ revo-grid:is([theme=compact], [theme=darkCompact]) revogr-data .rgRow {
220
284
  line-height: var(--rg-theme-row-size, 32px);
221
285
  }
222
- revo-grid[data-rg-theme-base=compact] revogr-data .rgCell {
286
+ revo-grid:is([theme=compact], [theme=darkCompact]) revogr-data .rgCell {
223
287
  padding: var(--rg-theme-cell-padding);
224
288
  box-shadow: -1px 0 0 0 var(--rg-theme-cell-vertical-border) inset;
225
289
  }
226
- revo-grid[data-rg-theme-base=compact] revo-dropdown .rv-dr-root {
290
+ revo-grid:is([theme=compact], [theme=darkCompact]) revo-dropdown .rv-dr-root {
227
291
  padding: 0px 9px;
228
292
  }
229
293
 
@@ -308,41 +372,33 @@ revo-grid[dir=rtl] revogr-edit {
308
372
  revo-grid[dir=rtl] .rgHeaderCell {
309
373
  direction: rtl;
310
374
  }
311
- revo-grid[dir=rtl][data-rg-theme-base=material] revogr-header {
375
+ revo-grid[dir=rtl] revogr-header,
376
+ revo-grid[dir=rtl] revogr-data {
312
377
  text-align: right;
313
378
  }
314
- revo-grid[dir=rtl][data-rg-theme-base=material] revogr-data {
315
- text-align: right;
316
- }
317
- revo-grid[dir=rtl][data-rg-theme-base=default] .rowHeaders {
379
+ revo-grid[dir=rtl]:is([theme=default], [theme=dark]) .rowHeaders, revo-grid[dir=rtl]:not([theme]) .rowHeaders {
318
380
  background-color: var(--rg-theme-row-headers-bg);
319
381
  }
320
- revo-grid[dir=rtl][data-rg-theme-base=default] .rowHeaders revogr-data .rgCell {
382
+ revo-grid[dir=rtl]:is([theme=default], [theme=dark]) .rowHeaders revogr-data .rgCell, revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data .rgCell {
321
383
  color: var(--rg-theme-row-headers-color);
322
384
  }
323
- revo-grid[dir=rtl][data-rg-theme-base=default] .rowHeaders revogr-data .rgCell:first-child {
385
+ revo-grid[dir=rtl]:is([theme=default], [theme=dark]) .rowHeaders revogr-data .rgCell:first-child, revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data .rgCell:first-child {
324
386
  box-shadow: 0 -1px 0 0 var(--rg-theme-header-border) inset;
325
387
  }
326
- revo-grid[dir=rtl][data-rg-theme-base=default] .rowHeaders revogr-data .rgCell:not(:first-child) {
388
+ revo-grid[dir=rtl]:is([theme=default], [theme=dark]) .rowHeaders revogr-data .rgCell:not(:first-child), revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data .rgCell:not(:first-child) {
327
389
  box-shadow: 0 -1px 0 0 var(--rg-theme-header-border) inset, 1px 0 0 0 var(--rg-theme-header-border) inset;
328
390
  }
329
- revo-grid[dir=rtl][data-rg-theme-base=default] .rowHeaders revogr-data .rgCell:last-child {
391
+ revo-grid[dir=rtl]:is([theme=default], [theme=dark]) .rowHeaders revogr-data .rgCell:last-child, revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data .rgCell:last-child {
330
392
  border-left: 1px solid var(--rg-theme-header-border);
331
393
  border-right: none;
332
394
  }
333
- revo-grid[dir=rtl][data-rg-theme-base=default] .rowHeaders revogr-data revogr-header {
395
+ revo-grid[dir=rtl]:is([theme=default], [theme=dark]) .rowHeaders revogr-data revogr-header, revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data revogr-header {
334
396
  box-shadow: 0 -1px 0 0 var(--rg-theme-header-border) inset;
335
397
  }
336
- revo-grid[dir=rtl][data-rg-theme-base=default] revogr-header {
337
- text-align: right;
338
- }
339
- revo-grid[dir=rtl][data-rg-theme-base=default] revogr-data {
340
- text-align: right;
341
- }
342
- revo-grid[dir=rtl][data-rg-theme-base=compact] revogr-header {
398
+ revo-grid[dir=rtl]:is([theme=default], [theme=dark]) revogr-header, revo-grid[dir=rtl]:not([theme]) revogr-header {
343
399
  text-align: right;
344
400
  }
345
- revo-grid[dir=rtl][data-rg-theme-base=compact] revogr-data {
401
+ revo-grid[dir=rtl]:is([theme=default], [theme=dark]) revogr-data, revo-grid[dir=rtl]:not([theme]) revogr-data {
346
402
  text-align: right;
347
403
  }
348
404
 
@@ -382,8 +438,33 @@ revo-grid[dir=rtl][data-rg-theme-base=compact] revogr-data {
382
438
  text-overflow: ellipsis;
383
439
  }
384
440
 
441
+ /* Built-in Material and Compact themes historically inherited their surfaces. */
442
+ revo-grid[theme]:is([theme=compact],
443
+ [theme=darkCompact],
444
+ [theme=material],
445
+ [theme=darkMaterial]) {
446
+ background-color: transparent;
447
+ }
448
+ revo-grid[theme]:is([theme=compact],
449
+ [theme=darkCompact],
450
+ [theme=material],
451
+ [theme=darkMaterial]) revogr-header,
452
+ revo-grid[theme]:is([theme=compact],
453
+ [theme=darkCompact],
454
+ [theme=material],
455
+ [theme=darkMaterial]) .rowHeaders {
456
+ background-color: transparent;
457
+ color: inherit;
458
+ }
459
+ revo-grid[theme]:is([theme=compact],
460
+ [theme=darkCompact],
461
+ [theme=material],
462
+ [theme=darkMaterial]) .rowHeaders revogr-data .rgCell {
463
+ color: inherit;
464
+ }
465
+
385
466
  revo-grid {
386
- /* Internal fallbacks keep public --revo-grid-* variables inheritable. */
467
+ /* Internal defaults preserve inherited legacy public values. */
387
468
  --rg-theme-primary: var(--revo-grid-primary, #266ae8);
388
469
  --rg-theme-primary-transparent: var(
389
470
  --revo-grid-primary-transparent,
@@ -533,7 +614,10 @@ revo-grid[data-rg-theme-scheme=dark] {
533
614
  --rg-theme-foreground: var(--revo-grid-foreground, #fff);
534
615
  --rg-theme-text: var(--revo-grid-text, rgba(255, 255, 255, 0.9));
535
616
  --rg-theme-divider: var(--revo-grid-divider, #505050);
536
- --rg-theme-border: var(--revo-grid-border, rgba(255, 255, 255, 0.2));
617
+ --rg-theme-border: var(
618
+ --revo-grid-border,
619
+ rgba(255, 255, 255, 0.2)
620
+ );
537
621
  --rg-theme-filter-panel-bg: var(--revo-grid-filter-panel-bg, #212529);
538
622
  --rg-theme-filter-panel-border: var(
539
623
  --revo-grid-filter-panel-border,
@@ -555,8 +639,22 @@ revo-grid[data-rg-theme-scheme=dark] {
555
639
  --rg-theme-header-color: var(--revo-grid-header-color, #fff);
556
640
  --rg-theme-header-border: var(--revo-grid-header-border, #505050);
557
641
  --rg-theme-cell-border: var(--revo-grid-cell-border, #424242);
558
- --rg-theme-focused-bg: var(--revo-grid-focused-bg, rgba(52, 58, 64, 0.5));
559
- --rg-theme-row-hover: var(--revo-grid-row-hover, rgba(80, 80, 80, 0.5));
642
+ --rg-theme-focused-bg: var(
643
+ --revo-grid-focused-bg,
644
+ rgba(52, 58, 64, 0.5)
645
+ );
646
+ --rg-theme-row-hover: var(
647
+ --revo-grid-row-hover,
648
+ rgba(80, 80, 80, 0.5)
649
+ );
650
+ --rg-theme-row-headers-bg: var(
651
+ --revo-grid-row-headers-bg,
652
+ rgba(52, 58, 64, 0.8)
653
+ );
654
+ --rg-theme-row-headers-color: var(
655
+ --revo-grid-row-headers-color,
656
+ rgba(255, 255, 255, 0.8)
657
+ );
560
658
  --rg-theme-cell-disabled-bg: var(
561
659
  --revo-grid-cell-disabled-bg,
562
660
  rgba(255, 255, 255, 0.07)
@@ -573,6 +671,69 @@ revo-grid[data-rg-theme-scheme=dark] {
573
671
  revo-grid[data-rg-theme-scheme=light] {
574
672
  color-scheme: light;
575
673
  }
674
+ revo-grid {
675
+ /* Keep existing descendant integrations on the legacy public contract. */
676
+ }
677
+ revo-grid > * {
678
+ --revo-grid-primary: var(--rg-theme-primary);
679
+ --revo-grid-primary-transparent: var(--rg-theme-primary-transparent);
680
+ --revo-grid-background: var(--rg-theme-background);
681
+ --revo-grid-foreground: var(--rg-theme-foreground);
682
+ --revo-grid-divider: var(--rg-theme-divider);
683
+ --revo-grid-shadow: var(--rg-theme-shadow);
684
+ --revo-grid-text: var(--rg-theme-text);
685
+ --revo-grid-border: var(--rg-theme-border);
686
+ --revo-grid-header-bg: var(--rg-theme-header-bg);
687
+ --revo-grid-header-color: var(--rg-theme-header-color);
688
+ --revo-grid-header-border: var(--rg-theme-header-border);
689
+ --revo-grid-header-focused-bg: var(--rg-theme-header-focused-bg);
690
+ --revo-grid-header-hover-bg: var(--rg-theme-header-hover-bg);
691
+ --revo-grid-cell-border: var(--rg-theme-cell-border);
692
+ --revo-grid-cell-vertical-border: var(--rg-theme-cell-vertical-border);
693
+ --revo-grid-focused-bg: var(--rg-theme-focused-bg);
694
+ --revo-grid-row-hover: var(--rg-theme-row-hover);
695
+ --revo-grid-row-headers-bg: var(--rg-theme-row-headers-bg);
696
+ --revo-grid-row-headers-color: var(--rg-theme-row-headers-color);
697
+ --revo-grid-cell-disabled-bg: var(--rg-theme-cell-disabled-bg);
698
+ --revo-grid-filter-panel-bg: var(--rg-theme-filter-panel-bg);
699
+ --revo-grid-filter-panel-border: var(--rg-theme-filter-panel-border);
700
+ --revo-grid-filter-panel-shadow: var(--rg-theme-filter-panel-shadow);
701
+ --revo-grid-filter-panel-input-bg: var(--rg-theme-filter-panel-input-bg);
702
+ --revo-grid-filter-panel-divider: var(--rg-theme-filter-panel-divider);
703
+ --revo-grid-filter-panel-select-border: var(--rg-theme-filter-panel-select-border);
704
+ --revo-grid-filter-panel-select-border-hover: var(--rg-theme-filter-panel-select-border-hover);
705
+ --revo-grid-filter-panel-reorder-accent: var(--rg-theme-filter-panel-reorder-accent);
706
+ --revo-grid-filter-panel-reorder-color: var(--rg-theme-filter-panel-reorder-color);
707
+ --revo-grid-filter-panel-text: var(--rg-theme-filter-panel-text);
708
+ --revo-grid-filter-panel-muted-text: var(--rg-theme-filter-panel-muted-text);
709
+ --revo-grid-filter-panel-focus-ring: var(--rg-theme-filter-panel-focus-ring);
710
+ --revo-grid-filter-panel-icon: var(--rg-theme-filter-panel-icon);
711
+ --revo-grid-filter-panel-icon-active: var(--rg-theme-filter-panel-icon-active);
712
+ --revo-grid-font-family: var(--rg-theme-font-family);
713
+ --revo-grid-font-size: var(--rg-theme-font-size);
714
+ --revo-grid-header-height: var(--rg-theme-header-height);
715
+ --revo-grid-header-font-size: var(--rg-theme-header-font-size);
716
+ --revo-grid-header-font-weight: var(--rg-theme-header-font-weight);
717
+ --revo-grid-header-text-transform: var(--rg-theme-header-text-transform);
718
+ --revo-grid-header-text-align: var(--rg-theme-header-text-align);
719
+ --revo-grid-cell-text-align: var(--rg-theme-cell-text-align);
720
+ --revo-grid-header-padding: var(--rg-theme-header-padding);
721
+ --revo-grid-cell-padding: var(--rg-theme-cell-padding);
722
+ --revo-grid-selection-border: var(--rg-theme-selection-border);
723
+ --revo-grid-selection-bg: var(--rg-theme-selection-bg);
724
+ --revo-grid-autofill-handle-bg: var(--rg-theme-autofill-handle-bg);
725
+ --revo-grid-autofill-handle-border: var(--rg-theme-autofill-handle-border);
726
+ --revo-grid-range-handle-bg: var(--rg-theme-range-handle-bg);
727
+ --revo-grid-temporary-range-border: var(--rg-theme-temporary-range-border);
728
+ --revo-grid-temporary-selection-border: var(--rg-theme-temporary-selection-border);
729
+ --revo-grid-header-resize-hover: var(--rg-theme-header-resize-hover);
730
+ --revo-grid-button-text: var(--rg-theme-button-text);
731
+ --revo-grid-button-bg: var(--rg-theme-button-bg);
732
+ --revo-grid-button-success-bg: var(--rg-theme-button-success-bg);
733
+ --revo-grid-button-danger-bg: var(--rg-theme-button-danger-bg);
734
+ --revo-grid-button-outline-border: var(--rg-theme-button-outline-border);
735
+ --revo-grid-button-outline-text: var(--rg-theme-button-outline-text);
736
+ }
576
737
  revo-grid {
577
738
  direction: ltr !important;
578
739
  }
@@ -1149,7 +1149,7 @@ export class RevoGridComponent {
1149
1149
  const dimensions = this.dimensionProvider.stores;
1150
1150
  const verticalScroll = (h("revogr-scroll-virtual", { class: "vertical", dimension: typeRow, clientSize: viewports[typeRow].store.get('clientSize'), virtualSize: viewports[typeRow].store.get('virtualSize'), realSize: dimensions[typeRow].store.get('realSize'), ref: el => this.scrollingService.registerElement(el, 'rowScroll'), onScrollvirtual: e => this.scrollingService.proxyScroll(e.detail) }));
1151
1151
  const horizontalScroll = (h("revogr-scroll-virtual", { class: "horizontal", dimension: typeCol, clientSize: viewports[typeCol].store.get('clientSize'), virtualSize: viewports[typeCol].store.get('virtualSize'), realSize: dimensions[typeCol].store.get('realSize'), ref: el => this.scrollingService.registerElement(el, 'colScroll'), onScrollvirtual: e => this.scrollingService.proxyScroll(e.detail) }));
1152
- return (h(Host, { dir: this.rtl ? 'rtl' : 'ltr', "data-rg-theme-base": this.themeService.theme.base, "data-rg-theme-scheme": this.themeService.theme.colorScheme, style: this.themeStyles }, this.hideAttribution ? null : (h("revogr-attribution", { class: "attribution" })), h("slot", { name: "header" }), h("div", { class: "main-viewport", onClick: (e) => {
1152
+ return (h(Host, { dir: this.rtl ? 'rtl' : 'ltr', "data-rg-theme-scheme": this.themeService.theme.colorScheme, style: this.themeStyles }, this.hideAttribution ? null : (h("revogr-attribution", { class: "attribution" })), h("slot", { name: "header" }), h("div", { class: "main-viewport", onClick: (e) => {
1153
1153
  var _a;
1154
1154
  if (e.currentTarget === e.target) {
1155
1155
  (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.clearEdit();
@@ -75,7 +75,6 @@ const auroraButtons = [
75
75
  /** Compact graphite and evergreen preset with luminous emerald states. */
76
76
  export const auroraTheme = defineTheme({
77
77
  name: 'aurora',
78
- extends: 'darkCompact',
79
78
  colorScheme: 'dark',
80
79
  defaultRowSize: 34,
81
80
  tokens: createPresetTokens({
@@ -75,7 +75,6 @@ const highContrastDarkButtons = [
75
75
  /** High-contrast dark preset with luminous yellow and cyan interaction states. */
76
76
  export const highContrastDarkTheme = defineTheme({
77
77
  name: 'highContrastDark',
78
- extends: 'darkMaterial',
79
78
  colorScheme: 'dark',
80
79
  defaultRowSize: 40,
81
80
  tokens: createPresetTokens({
@@ -75,7 +75,6 @@ const highContrastButtons = [
75
75
  /** High-contrast light preset with dark structure and vivid blue focus states. */
76
76
  export const highContrastTheme = defineTheme({
77
77
  name: 'highContrast',
78
- extends: 'material',
79
78
  colorScheme: 'light',
80
79
  defaultRowSize: 40,
81
80
  tokens: createPresetTokens({
@@ -75,7 +75,6 @@ const midnightButtons = [
75
75
  /** Deep navy preset with cyan selection and violet action accents. */
76
76
  export const midnightTheme = defineTheme({
77
77
  name: 'midnight',
78
- extends: 'darkMaterial',
79
78
  colorScheme: 'dark',
80
79
  defaultRowSize: 40,
81
80
  tokens: createPresetTokens({
@@ -75,7 +75,6 @@ const oceanButtons = [
75
75
  /** Bright blue and slate preset for data-heavy daytime interfaces. */
76
76
  export const oceanTheme = defineTheme({
77
77
  name: 'ocean',
78
- extends: 'material',
79
78
  colorScheme: 'light',
80
79
  defaultRowSize: 38,
81
80
  tokens: createPresetTokens({
@@ -14,7 +14,6 @@ const builtInThemeNames = new Set(allowedThemes);
14
14
  const builtInThemes = Object.freeze({
15
15
  default: Object.freeze({
16
16
  name: 'default',
17
- base: 'default',
18
17
  colorScheme: 'light',
19
18
  defaultRowSize: 27,
20
19
  tokens: Object.freeze({}),
@@ -22,7 +21,6 @@ const builtInThemes = Object.freeze({
22
21
  }),
23
22
  material: Object.freeze({
24
23
  name: 'material',
25
- base: 'material',
26
24
  colorScheme: 'light',
27
25
  defaultRowSize: 42,
28
26
  tokens: Object.freeze({}),
@@ -30,7 +28,6 @@ const builtInThemes = Object.freeze({
30
28
  }),
31
29
  compact: Object.freeze({
32
30
  name: 'compact',
33
- base: 'compact',
34
31
  colorScheme: 'light',
35
32
  defaultRowSize: 32,
36
33
  tokens: Object.freeze({}),
@@ -38,7 +35,6 @@ const builtInThemes = Object.freeze({
38
35
  }),
39
36
  darkMaterial: Object.freeze({
40
37
  name: 'darkMaterial',
41
- base: 'material',
42
38
  colorScheme: 'dark',
43
39
  defaultRowSize: 42,
44
40
  tokens: Object.freeze({}),
@@ -46,7 +42,6 @@ const builtInThemes = Object.freeze({
46
42
  }),
47
43
  darkCompact: Object.freeze({
48
44
  name: 'darkCompact',
49
- base: 'compact',
50
45
  colorScheme: 'dark',
51
46
  defaultRowSize: 32,
52
47
  tokens: Object.freeze({}),
@@ -62,6 +57,11 @@ function isPositiveSize(size) {
62
57
  function getColorScheme(scheme, fallback) {
63
58
  return scheme === 'light' || scheme === 'dark' ? scheme : fallback;
64
59
  }
60
+ function getCssOnlyThemeColorScheme(theme) {
61
+ // Before resolved theme metadata existed, the dark defaults were selected by
62
+ // the case-sensitive CSS selector `[theme*='dark']`.
63
+ return theme.includes('dark') ? 'dark' : 'light';
64
+ }
65
65
  function getThemeTokens(tokens) {
66
66
  if (!tokens || typeof tokens !== 'object') {
67
67
  return {};
@@ -120,7 +120,7 @@ export default class ThemeService {
120
120
  }
121
121
  const definition = this.customThemes.get(name);
122
122
  if (!definition) {
123
- this.currentTheme = Object.assign(Object.assign({}, builtInThemes.default), { name, tokens: {}, custom: true });
123
+ this.currentTheme = Object.assign(Object.assign({}, builtInThemes.default), { name, colorScheme: getCssOnlyThemeColorScheme(name), tokens: {}, custom: true });
124
124
  return this.currentTheme;
125
125
  }
126
126
  this.currentTheme = this.resolveDefinition(name);
@@ -155,7 +155,6 @@ export default class ThemeService {
155
155
  for (const definition of definitions) {
156
156
  resolved = {
157
157
  name: definition.name,
158
- base: resolved.base,
159
158
  colorScheme: getColorScheme(definition.colorScheme, resolved.colorScheme),
160
159
  defaultRowSize: isPositiveSize(definition.defaultRowSize)
161
160
  ? definition.defaultRowSize
package/dist/esm/index.js CHANGED
@@ -266,7 +266,6 @@ const oceanButtons = [
266
266
  /** Bright blue and slate preset for data-heavy daytime interfaces. */
267
267
  const oceanTheme = defineTheme({
268
268
  name: 'ocean',
269
- extends: 'material',
270
269
  colorScheme: 'light',
271
270
  defaultRowSize: 38,
272
271
  tokens: createPresetTokens({
@@ -351,7 +350,6 @@ const midnightButtons = [
351
350
  /** Deep navy preset with cyan selection and violet action accents. */
352
351
  const midnightTheme = defineTheme({
353
352
  name: 'midnight',
354
- extends: 'darkMaterial',
355
353
  colorScheme: 'dark',
356
354
  defaultRowSize: 40,
357
355
  tokens: createPresetTokens({
@@ -436,7 +434,6 @@ const auroraButtons = [
436
434
  /** Compact graphite and evergreen preset with luminous emerald states. */
437
435
  const auroraTheme = defineTheme({
438
436
  name: 'aurora',
439
- extends: 'darkCompact',
440
437
  colorScheme: 'dark',
441
438
  defaultRowSize: 34,
442
439
  tokens: createPresetTokens({
@@ -521,7 +518,6 @@ const highContrastButtons = [
521
518
  /** High-contrast light preset with dark structure and vivid blue focus states. */
522
519
  const highContrastTheme = defineTheme({
523
520
  name: 'highContrast',
524
- extends: 'material',
525
521
  colorScheme: 'light',
526
522
  defaultRowSize: 40,
527
523
  tokens: createPresetTokens({
@@ -606,7 +602,6 @@ const highContrastDarkButtons = [
606
602
  /** High-contrast dark preset with luminous yellow and cyan interaction states. */
607
603
  const highContrastDarkTheme = defineTheme({
608
604
  name: 'highContrastDark',
609
- extends: 'darkMaterial',
610
605
  colorScheme: 'dark',
611
606
  defaultRowSize: 40,
612
607
  tokens: createPresetTokens({