rj-grid 0.1.0

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 (45) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +92 -0
  3. package/dist/rj-grid.js +14074 -0
  4. package/dist/style.css +2050 -0
  5. package/dist/types/index.d.ts +13 -0
  6. package/dist/types/src/RjAdvGroup.vue.d.ts +32 -0
  7. package/dist/types/src/RjAdvancedFilterDialog.vue.d.ts +38 -0
  8. package/dist/types/src/RjCell.vue.d.ts +82 -0
  9. package/dist/types/src/RjChartDialog.vue.d.ts +22 -0
  10. package/dist/types/src/RjColumnMenu.vue.d.ts +109 -0
  11. package/dist/types/src/RjConfirmDialog.vue.d.ts +23 -0
  12. package/dist/types/src/RjContextMenu.vue.d.ts +26 -0
  13. package/dist/types/src/RjEditor.vue.d.ts +28 -0
  14. package/dist/types/src/RjFilterMenu.vue.d.ts +58 -0
  15. package/dist/types/src/RjGrid.vue.d.ts +1046 -0
  16. package/dist/types/src/RjHeader.vue.d.ts +80 -0
  17. package/dist/types/src/RjImgList.vue.d.ts +29 -0
  18. package/dist/types/src/RjPager.vue.d.ts +41 -0
  19. package/dist/types/src/RjQueryBar.vue.d.ts +47 -0
  20. package/dist/types/src/RjRowFormDialog.vue.d.ts +50 -0
  21. package/dist/types/src/RjSlotRender.d.ts +56 -0
  22. package/dist/types/src/RjSparkline.vue.d.ts +43 -0
  23. package/dist/types/src/RjToolPanel.vue.d.ts +103 -0
  24. package/dist/types/src/RjViewManager.vue.d.ts +28 -0
  25. package/dist/types/src/editHistory.d.ts +27 -0
  26. package/dist/types/src/export.d.ts +24 -0
  27. package/dist/types/src/expression.d.ts +19 -0
  28. package/dist/types/src/filtering.d.ts +29 -0
  29. package/dist/types/src/formula.d.ts +88 -0
  30. package/dist/types/src/icons.d.ts +35 -0
  31. package/dist/types/src/locale.d.ts +21 -0
  32. package/dist/types/src/nlq.d.ts +51 -0
  33. package/dist/types/src/print.d.ts +37 -0
  34. package/dist/types/src/query.d.ts +28 -0
  35. package/dist/types/src/rowForm.d.ts +41 -0
  36. package/dist/types/src/serverGroups.d.ts +52 -0
  37. package/dist/types/src/ssrm.d.ts +102 -0
  38. package/dist/types/src/theme.d.ts +33 -0
  39. package/dist/types/src/types.d.ts +624 -0
  40. package/dist/types/src/useColumnState.d.ts +70 -0
  41. package/dist/types/src/useInteraction.d.ts +150 -0
  42. package/dist/types/src/useQueryViews.d.ts +16 -0
  43. package/dist/types/src/useRowModel.d.ts +225 -0
  44. package/dist/types/src/utils.d.ts +130 -0
  45. package/package.json +90 -0
package/dist/style.css ADDED
@@ -0,0 +1,2050 @@
1
+ .rj-grid {
2
+ --rj-font-size: 13px;
3
+ --rj-border: #e4e7ed;
4
+ --rj-border-strong: #c9ced6;
5
+ --rj-bg: #ffffff;
6
+ --rj-bg-alt: #fafbfc;
7
+ --rj-header-bg: #f4f6f8;
8
+ --rj-header-hover: #ebeef2;
9
+ --rj-text: #303133;
10
+ --rj-text-secondary: #909399;
11
+ --rj-primary: #3b76f6;
12
+ --rj-primary-bg: #eaf1fe;
13
+ --rj-hover-bg: #f2f6fd;
14
+ --rj-selected-bg: #e2edfd;
15
+ --rj-range-bg: rgba(59, 118, 246, 0.1);
16
+ --rj-fill-bg: rgba(59, 118, 246, 0.16);
17
+ --rj-flash-bg: #fff3cf;
18
+ --rj-mask: rgba(255, 255, 255, 0.75);
19
+ --rj-shadow: 0 2px 12px rgba(0, 0, 0, 0.12);
20
+ --rj-find-bg: #ffd04d;
21
+ --rj-find-active-bg: #ff9600;
22
+ --rj-danger: #f56c6c;
23
+ --rj-radius: 4px;
24
+ --rj-group-guide: #d3d7de;
25
+ --rj-ui-h: 26px;
26
+ --rj-ui-font: 12px;
27
+ --rj-ui-gap: 8px;
28
+ --rj-ui-pad: 6px 10px;
29
+ position: relative;
30
+ display: flex;
31
+ flex-direction: column;
32
+ font-size: var(--rj-font-size);
33
+ color: var(--rj-text);
34
+ background: var(--rj-bg);
35
+ border: 1px solid var(--rj-border);
36
+ border-radius: var(--rj-radius);
37
+ overflow: hidden;
38
+ outline: none;
39
+ box-sizing: border-box;
40
+ }
41
+ .rj-grid * {
42
+ box-sizing: border-box;
43
+ }
44
+ .rj-grid.rj--dark {
45
+ --rj-border: #3a3f4b;
46
+ --rj-border-strong: #4b5160;
47
+ --rj-bg: #1e222a;
48
+ --rj-bg-alt: #232831;
49
+ --rj-header-bg: #262b36;
50
+ --rj-header-hover: #2e3441;
51
+ --rj-text: #dfe3ea;
52
+ --rj-text-secondary: #8a919f;
53
+ --rj-primary: #5c8dfb;
54
+ --rj-primary-bg: #24324d;
55
+ --rj-hover-bg: #272d3a;
56
+ --rj-selected-bg: #2a3a5c;
57
+ --rj-mask: rgba(30, 34, 42, 0.75);
58
+ --rj-flash-bg: #5a4c1e;
59
+ --rj-group-guide: #3a3f4b;
60
+ }
61
+ .rj-grid.rj--small {
62
+ --rj-font-size: 12px;
63
+ --rj-ui-h: 22px;
64
+ --rj-ui-font: 11px;
65
+ --rj-ui-gap: 6px;
66
+ --rj-ui-pad: 4px 8px;
67
+ }
68
+ .rj-grid.rj--large {
69
+ --rj-font-size: 14px;
70
+ --rj-ui-h: 32px;
71
+ --rj-ui-font: 13px;
72
+ --rj-ui-gap: 10px;
73
+ --rj-ui-pad: 8px 12px;
74
+ }
75
+
76
+ .rj-toolbar {
77
+ display: flex;
78
+ align-items: center;
79
+ flex-wrap: wrap;
80
+ gap: var(--rj-ui-gap, 8px);
81
+ padding: var(--rj-ui-pad, 6px 10px);
82
+ border-bottom: 1px solid var(--rj-border);
83
+ background: var(--rj-bg);
84
+ flex-shrink: 0;
85
+ }
86
+ .rj-toolbar .rj-toolbar-left,
87
+ .rj-toolbar .rj-toolbar-right {
88
+ display: flex;
89
+ align-items: center;
90
+ flex-wrap: wrap;
91
+ min-width: 0;
92
+ gap: var(--rj-ui-gap, 8px);
93
+ }
94
+ .rj-toolbar .rj-toolbar-right {
95
+ margin-left: auto;
96
+ }
97
+
98
+ .rj-second-bar {
99
+ display: flex;
100
+ align-items: center;
101
+ flex-wrap: nowrap;
102
+ gap: var(--rj-ui-gap, 8px);
103
+ padding: 4px 10px;
104
+ border-bottom: 1px solid var(--rj-border);
105
+ background: var(--rj-bg-alt);
106
+ flex-shrink: 0;
107
+ }
108
+ .rj-second-bar .rj-drop-banner {
109
+ flex: 0 1 auto;
110
+ min-width: 0;
111
+ overflow: hidden;
112
+ text-overflow: ellipsis;
113
+ white-space: nowrap;
114
+ padding: 0;
115
+ border-bottom: none;
116
+ background: transparent;
117
+ font-size: var(--rj-ui-font, 12px);
118
+ }
119
+ .rj-second-bar .rj-toolbar-right {
120
+ display: flex;
121
+ align-items: center;
122
+ flex-wrap: nowrap;
123
+ flex-shrink: 0;
124
+ min-width: 0;
125
+ gap: var(--rj-ui-gap, 8px);
126
+ margin-left: auto;
127
+ overflow-x: auto;
128
+ scrollbar-width: none;
129
+ }
130
+
131
+ .rj-btn {
132
+ display: inline-flex;
133
+ align-items: center;
134
+ gap: 4px;
135
+ height: var(--rj-ui-h, 26px);
136
+ padding: 0 calc(var(--rj-ui-h, 26px) * 0.35);
137
+ font-size: var(--rj-ui-font, 12px);
138
+ color: var(--rj-text);
139
+ background: var(--rj-bg);
140
+ border: 1px solid var(--rj-border-strong);
141
+ border-radius: var(--rj-radius);
142
+ cursor: pointer;
143
+ user-select: none;
144
+ white-space: nowrap;
145
+ }
146
+ .rj-btn:hover {
147
+ color: var(--rj-primary);
148
+ border-color: var(--rj-primary);
149
+ }
150
+ .rj-btn.is-active {
151
+ color: #fff;
152
+ background: var(--rj-primary);
153
+ border-color: var(--rj-primary);
154
+ }
155
+
156
+ .rj-input {
157
+ height: var(--rj-ui-h, 26px);
158
+ padding: 0 8px;
159
+ font-size: var(--rj-ui-font, 12px);
160
+ color: var(--rj-text);
161
+ background: var(--rj-bg);
162
+ border: 1px solid var(--rj-border-strong);
163
+ border-radius: var(--rj-radius);
164
+ outline: none;
165
+ }
166
+ .rj-input:focus {
167
+ border-color: var(--rj-primary);
168
+ }
169
+
170
+ .rj-btn-primary {
171
+ color: #fff;
172
+ background: var(--rj-primary);
173
+ border-color: var(--rj-primary);
174
+ }
175
+ .rj-btn-primary:hover {
176
+ color: #fff;
177
+ filter: brightness(1.06);
178
+ }
179
+
180
+ .rj-btn-danger {
181
+ color: var(--rj-danger, #e54d42);
182
+ border-color: currentcolor;
183
+ }
184
+ .rj-btn-danger:hover {
185
+ color: #fff;
186
+ background: var(--rj-danger, #e54d42);
187
+ }
188
+
189
+ .rj-btn[disabled] {
190
+ color: var(--rj-text-secondary);
191
+ opacity: 0.6;
192
+ cursor: not-allowed;
193
+ }
194
+ .rj-btn[disabled]:hover {
195
+ color: var(--rj-text-secondary);
196
+ border-color: var(--rj-border-strong);
197
+ }
198
+
199
+ .rj-btn-primary[disabled],
200
+ .rj-btn-primary[disabled]:hover {
201
+ color: var(--rj-bg);
202
+ background: var(--rj-border-strong);
203
+ border-color: var(--rj-border-strong);
204
+ opacity: 1;
205
+ }
206
+
207
+ .rj-query-bar {
208
+ display: inline-flex;
209
+ flex-wrap: wrap;
210
+ gap: var(--rj-ui-gap, 8px);
211
+ align-items: center;
212
+ min-width: 0;
213
+ font-size: var(--rj-ui-font, 12px);
214
+ }
215
+
216
+ .rj-query-item {
217
+ display: inline-flex;
218
+ gap: 4px;
219
+ align-items: center;
220
+ padding: 2px 4px 2px 8px;
221
+ background: var(--rj-bg);
222
+ border: 1px solid var(--rj-border-strong);
223
+ border-radius: 14px;
224
+ }
225
+
226
+ .rj-query-label {
227
+ font-weight: 600;
228
+ color: var(--rj-text);
229
+ white-space: nowrap;
230
+ }
231
+
232
+ .rj-query-op,
233
+ .rj-query-val,
234
+ .rj-query-add {
235
+ height: calc(var(--rj-ui-h, 26px) - 2px);
236
+ padding: 0 6px;
237
+ font-size: var(--rj-ui-font, 12px);
238
+ color: var(--rj-text);
239
+ background: var(--rj-bg);
240
+ border: 1px solid var(--rj-border-strong);
241
+ border-radius: var(--rj-radius);
242
+ outline: none;
243
+ }
244
+ .rj-query-op:focus,
245
+ .rj-query-val:focus,
246
+ .rj-query-add:focus {
247
+ border-color: var(--rj-primary);
248
+ }
249
+
250
+ .rj-query-val {
251
+ min-width: 120px;
252
+ }
253
+ .rj-query-val.sm {
254
+ min-width: 96px;
255
+ width: 120px;
256
+ }
257
+ .rj-query-val[multiple] {
258
+ height: auto;
259
+ min-height: calc(var(--rj-ui-h, 26px) - 2px);
260
+ max-height: 72px;
261
+ padding: 2px;
262
+ }
263
+
264
+ .rj-query-add {
265
+ border-style: dashed;
266
+ }
267
+
268
+ .rj-query-tilde {
269
+ color: var(--rj-text-secondary);
270
+ }
271
+
272
+ .rj-query-del {
273
+ padding: 0 3px;
274
+ font-size: 13px;
275
+ line-height: 1;
276
+ color: var(--rj-text-secondary);
277
+ cursor: pointer;
278
+ }
279
+ .rj-query-del:hover {
280
+ color: var(--rj-danger, #f56c6c);
281
+ }
282
+
283
+ .rj-query-actions {
284
+ display: inline-flex;
285
+ align-items: center;
286
+ gap: 8px;
287
+ }
288
+
289
+ .rj-query-core {
290
+ display: inline-flex;
291
+ gap: 6px;
292
+ }
293
+
294
+ .rj-query-sep {
295
+ width: 1px;
296
+ height: 18px;
297
+ background: var(--rj-border-strong);
298
+ opacity: 0.65;
299
+ }
300
+
301
+ .rj-query-action-btns,
302
+ .rj-query-slot-btns {
303
+ display: inline-flex;
304
+ flex-wrap: wrap;
305
+ gap: 8px;
306
+ }
307
+
308
+ .rj-tool-btn {
309
+ justify-content: center;
310
+ width: var(--rj-ui-h, 26px);
311
+ flex-shrink: 0;
312
+ padding: 0;
313
+ font-size: calc(var(--rj-ui-font, 12px) + 2px);
314
+ }
315
+
316
+ .rj-quick-pop {
317
+ display: flex;
318
+ gap: 6px;
319
+ align-items: center;
320
+ width: 240px;
321
+ }
322
+
323
+ .rj-quick-ico {
324
+ flex-shrink: 0;
325
+ color: var(--rj-text-secondary);
326
+ }
327
+
328
+ .rj-quick-input {
329
+ flex: 1 1 auto;
330
+ min-width: 0;
331
+ }
332
+
333
+ .rj-quick-clear {
334
+ flex-shrink: 0;
335
+ padding: 0 3px;
336
+ font-size: 13px;
337
+ line-height: 1;
338
+ color: var(--rj-text-secondary);
339
+ cursor: pointer;
340
+ }
341
+ .rj-quick-clear:hover {
342
+ color: var(--rj-danger, #f56c6c);
343
+ }
344
+
345
+ .rj-view-mask {
346
+ position: fixed;
347
+ inset: 0;
348
+ z-index: 1000;
349
+ display: flex;
350
+ align-items: center;
351
+ justify-content: center;
352
+ background: rgba(0, 0, 0, 0.35);
353
+ }
354
+
355
+ .rj-view-dlg {
356
+ display: flex;
357
+ flex-direction: column;
358
+ gap: 8px;
359
+ width: 340px;
360
+ padding: 16px 18px;
361
+ background: var(--rj-bg);
362
+ border: 1px solid var(--rj-border-strong);
363
+ border-radius: calc(var(--rj-radius) + 2px);
364
+ box-shadow: 0 8px 30px rgba(0, 0, 0, 0.2);
365
+ }
366
+
367
+ .rj-view-dlg-title {
368
+ font-size: 14px;
369
+ font-weight: 600;
370
+ color: var(--rj-text);
371
+ }
372
+
373
+ .rj-view-dlg-label {
374
+ font-size: 12px;
375
+ color: var(--rj-text-secondary);
376
+ }
377
+
378
+ .rj-view-dlg-tip {
379
+ font-size: 12px;
380
+ line-height: 1.6;
381
+ color: var(--rj-text-secondary);
382
+ }
383
+
384
+ .rj-view-dlg-foot {
385
+ display: flex;
386
+ gap: 8px;
387
+ justify-content: flex-end;
388
+ margin-top: 4px;
389
+ }
390
+
391
+ .rj-export-group {
392
+ display: inline-flex;
393
+ align-items: center;
394
+ gap: 6px;
395
+ padding-left: 8px;
396
+ border-left: 1px solid var(--rj-border);
397
+ }
398
+
399
+ .rj-btn-export {
400
+ height: var(--rj-ui-h, 26px);
401
+ flex-shrink: 0;
402
+ padding: 0 calc(var(--rj-ui-h, 26px) * 0.3);
403
+ font-size: var(--rj-ui-font, 12px);
404
+ font-weight: 500;
405
+ }
406
+
407
+ .rj-pager {
408
+ display: flex;
409
+ align-items: center;
410
+ gap: var(--rj-ui-gap, 8px);
411
+ padding: var(--rj-ui-pad, 6px 10px);
412
+ font-size: var(--rj-ui-font, 12px);
413
+ }
414
+
415
+ .rj-pager-inline {
416
+ margin-left: auto;
417
+ padding: 0;
418
+ flex-shrink: 1;
419
+ min-width: 0;
420
+ }
421
+
422
+ .rj-pager .rj-pager-nav {
423
+ margin-left: auto;
424
+ display: flex;
425
+ align-items: center;
426
+ gap: var(--rj-pager-nav-gap, 6px);
427
+ flex-shrink: 0;
428
+ }
429
+
430
+ @media (max-width: 1199px) {
431
+ .rj-toolbar {
432
+ --rj-pager-nav-gap: 4px;
433
+ gap: 4px var(--rj-ui-gap, 8px);
434
+ }
435
+ .rj-toolbar .rj-toolbar-left,
436
+ .rj-toolbar .rj-toolbar-right {
437
+ gap: 4px;
438
+ }
439
+ .rj-toolbar .rj-query-bar {
440
+ gap: 4px;
441
+ }
442
+ .rj-toolbar .rj-query-actions {
443
+ gap: 6px;
444
+ }
445
+ .rj-toolbar .rj-query-action-btns,
446
+ .rj-toolbar .rj-query-slot-btns {
447
+ gap: 4px;
448
+ }
449
+ .rj-toolbar .rj-pager-inline .rj-pager-opt {
450
+ display: none;
451
+ }
452
+ .rj-toolbar .rj-pager-inline {
453
+ gap: 4px;
454
+ }
455
+ }
456
+ .rj-pager-bar {
457
+ display: flex;
458
+ flex-shrink: 0;
459
+ background: var(--rj-bg);
460
+ border-top: 1px solid var(--rj-border);
461
+ }
462
+ .rj-pager-bar .rj-pager {
463
+ flex: 1;
464
+ }
465
+
466
+ .rj-header {
467
+ position: relative;
468
+ flex-shrink: 0;
469
+ background: var(--rj-header-bg);
470
+ border-bottom: 1px solid var(--rj-border);
471
+ overflow: hidden;
472
+ user-select: none;
473
+ }
474
+ .rj-header .rj-header-main {
475
+ position: relative;
476
+ overflow: hidden;
477
+ }
478
+ .rj-header .rj-header-clip {
479
+ position: absolute;
480
+ top: 0;
481
+ height: 100%;
482
+ overflow: hidden;
483
+ z-index: 3;
484
+ background: var(--rj-header-bg);
485
+ }
486
+ .rj-header .rj-hrow {
487
+ display: flex;
488
+ width: 100%;
489
+ }
490
+ .rj-header .rj-hcell {
491
+ position: relative;
492
+ display: flex;
493
+ align-items: center;
494
+ gap: 2px;
495
+ padding: 0 10px;
496
+ height: 100%;
497
+ font-weight: 600;
498
+ border-right: 1px solid var(--rj-border);
499
+ cursor: default;
500
+ overflow: hidden;
501
+ flex-shrink: 0;
502
+ }
503
+ .rj-header .rj-hcell.is-sortable {
504
+ cursor: pointer;
505
+ }
506
+ .rj-header .rj-hcell:hover {
507
+ background: var(--rj-header-hover);
508
+ }
509
+ .rj-header .rj-hcell.is-dragging {
510
+ opacity: 0.4;
511
+ }
512
+ .rj-header .rj-hcell.is-dragover {
513
+ box-shadow: inset 2px 0 0 var(--rj-primary);
514
+ }
515
+ .rj-header .rj-hcell.rj-hcell-ctl {
516
+ padding: 0 8px;
517
+ }
518
+ .rj-header .rj-hcell.rj-hcell-ctl .rj-hcell-title {
519
+ display: flex;
520
+ align-items: center;
521
+ }
522
+ .rj-header .rj-hcell .rj-hcell-title {
523
+ min-width: 0;
524
+ overflow: hidden;
525
+ text-overflow: ellipsis;
526
+ white-space: nowrap;
527
+ }
528
+ .rj-header .rj-hcell .rj-hcell-icons {
529
+ display: inline-flex;
530
+ align-items: center;
531
+ gap: 3px;
532
+ flex-shrink: 0;
533
+ margin-left: auto;
534
+ }
535
+ .rj-header .rj-resize-handle {
536
+ position: absolute;
537
+ right: -3px;
538
+ top: 0;
539
+ bottom: 0;
540
+ width: 7px;
541
+ cursor: col-resize;
542
+ z-index: 3;
543
+ }
544
+ .rj-header .rj-resize-handle:hover::after {
545
+ content: "";
546
+ position: absolute;
547
+ left: 3px;
548
+ top: 15%;
549
+ bottom: 15%;
550
+ width: 2px;
551
+ background: var(--rj-primary);
552
+ }
553
+ .rj-header .rj-sort-icon,
554
+ .rj-header .rj-filter-icon,
555
+ .rj-header .rj-menu-btn {
556
+ display: inline-flex;
557
+ align-items: center;
558
+ justify-content: center;
559
+ flex-shrink: 0;
560
+ font-size: 11px;
561
+ color: var(--rj-text-secondary);
562
+ cursor: pointer;
563
+ border-radius: 3px;
564
+ }
565
+ .rj-header .rj-sort-icon.is-active,
566
+ .rj-header .rj-filter-icon.is-active,
567
+ .rj-header .rj-menu-btn.is-active {
568
+ color: var(--rj-primary);
569
+ }
570
+ .rj-header .rj-menu-btn {
571
+ width: 16px;
572
+ height: 16px;
573
+ font-size: 14px;
574
+ line-height: 1;
575
+ font-weight: 700;
576
+ }
577
+ .rj-header .rj-menu-btn:hover {
578
+ background: var(--rj-hover-bg);
579
+ color: var(--rj-text);
580
+ }
581
+ .rj-header .rj-group-chip {
582
+ display: inline-flex;
583
+ align-items: center;
584
+ gap: 4px;
585
+ padding: 1px 6px;
586
+ margin: 0 2px;
587
+ font-size: 12px;
588
+ font-weight: 400;
589
+ background: var(--rj-primary-bg);
590
+ color: var(--rj-primary);
591
+ border-radius: 10px;
592
+ cursor: grab;
593
+ }
594
+ .rj-header .rj-group-chip .rj-group-chip-close {
595
+ cursor: pointer;
596
+ }
597
+ .rj-header .rj-group-chip .rj-group-chip-close:hover {
598
+ color: var(--rj-danger);
599
+ }
600
+
601
+ .rj-frow {
602
+ border-top: 1px solid var(--rj-border);
603
+ background: var(--rj-bg-alt);
604
+ }
605
+
606
+ .rj-fcell {
607
+ position: absolute;
608
+ top: 0;
609
+ bottom: 0;
610
+ display: flex;
611
+ align-items: center;
612
+ padding: 0 4px;
613
+ border-right: 1px solid var(--rj-border);
614
+ overflow: hidden;
615
+ }
616
+
617
+ .rj-finput {
618
+ width: 100%;
619
+ height: 22px;
620
+ padding: 0 6px;
621
+ font-size: 12px;
622
+ font-weight: 400;
623
+ background: var(--rj-bg);
624
+ }
625
+
626
+ .rj-drop-banner {
627
+ min-height: 26px;
628
+ display: flex;
629
+ align-items: center;
630
+ padding: 0 10px;
631
+ font-size: 12px;
632
+ color: var(--rj-text-secondary);
633
+ border-bottom: 1px solid var(--rj-border);
634
+ background: var(--rj-bg-alt);
635
+ gap: 4px;
636
+ flex-wrap: wrap;
637
+ }
638
+ .rj-drop-banner.is-over {
639
+ color: var(--rj-primary);
640
+ background: var(--rj-primary-bg);
641
+ }
642
+
643
+ .rj-body-wrap {
644
+ position: relative;
645
+ flex: 1;
646
+ min-height: 0;
647
+ display: flex;
648
+ }
649
+
650
+ .rj-status {
651
+ flex: none;
652
+ display: flex;
653
+ align-items: center;
654
+ justify-content: space-between;
655
+ gap: 12px;
656
+ height: 28px;
657
+ padding: 0 12px;
658
+ font-size: 12px;
659
+ line-height: 1;
660
+ color: var(--rj-text-secondary);
661
+ background: var(--rj-header-bg);
662
+ border-top: 1px solid var(--rj-border);
663
+ user-select: none;
664
+ overflow: hidden;
665
+ }
666
+
667
+ .rj-status-left {
668
+ display: flex;
669
+ align-items: center;
670
+ gap: 6px;
671
+ white-space: nowrap;
672
+ flex: none;
673
+ }
674
+
675
+ .rj-status-dirty {
676
+ color: #e6a23c;
677
+ font-weight: 600;
678
+ }
679
+
680
+ .rj-status-right {
681
+ display: flex;
682
+ align-items: center;
683
+ gap: 16px;
684
+ overflow: hidden;
685
+ }
686
+
687
+ .rj-status-agg {
688
+ display: inline-flex;
689
+ align-items: center;
690
+ gap: 8px;
691
+ white-space: nowrap;
692
+ }
693
+
694
+ .rj-status-agg b {
695
+ color: var(--rj-text);
696
+ font-weight: 600;
697
+ }
698
+
699
+ .rj-status-agg i {
700
+ font-style: normal;
701
+ color: var(--rj-primary);
702
+ }
703
+
704
+ .rj-status-more {
705
+ color: var(--rj-text-secondary);
706
+ white-space: nowrap;
707
+ }
708
+
709
+ .rj-scroller {
710
+ position: relative;
711
+ flex: 1;
712
+ overflow: auto;
713
+ overscroll-behavior: contain;
714
+ }
715
+ .rj-scroller::-webkit-scrollbar {
716
+ width: 10px;
717
+ height: 10px;
718
+ }
719
+ .rj-scroller::-webkit-scrollbar-thumb {
720
+ background: var(--rj-border-strong);
721
+ border-radius: 5px;
722
+ }
723
+ .rj-scroller::-webkit-scrollbar-track {
724
+ background: transparent;
725
+ }
726
+
727
+ .rj-canvas {
728
+ position: relative;
729
+ }
730
+
731
+ .rj-rows {
732
+ position: absolute;
733
+ left: 0;
734
+ top: 0;
735
+ }
736
+
737
+ .rj-fixed-layer {
738
+ position: sticky;
739
+ top: 0;
740
+ left: 0;
741
+ z-index: 6;
742
+ pointer-events: none;
743
+ background: transparent;
744
+ }
745
+ .rj-fixed-layer .rj-fixed-canvas {
746
+ position: absolute;
747
+ top: 0;
748
+ left: 0;
749
+ will-change: transform;
750
+ }
751
+ .rj-fixed-layer .rj-row,
752
+ .rj-fixed-layer .rj-hrow {
753
+ pointer-events: auto;
754
+ }
755
+
756
+ .rj-row {
757
+ position: absolute;
758
+ left: 0;
759
+ display: flex;
760
+ border-bottom: 1px solid var(--rj-border);
761
+ background: var(--rj-bg);
762
+ transition: background-color 0.16s ease;
763
+ }
764
+ .rj-row .rj-hover-brush {
765
+ position: absolute;
766
+ left: 0;
767
+ top: 0;
768
+ bottom: -1px;
769
+ width: 4px;
770
+ z-index: 3;
771
+ pointer-events: none;
772
+ background: linear-gradient(90deg, var(--rj-primary), transparent);
773
+ transform-origin: left center;
774
+ opacity: 0;
775
+ transform: scaleX(0);
776
+ transition: opacity 0.18s ease, transform 0.18s ease;
777
+ }
778
+ .rj-row.rj-odd {
779
+ background: var(--rj-bg-alt);
780
+ }
781
+ .rj-row.is-hover.rj-row {
782
+ background: var(--rj-hover-bg);
783
+ }
784
+ .rj-row.is-hover.rj-row .rj-hover-brush {
785
+ width: 8px;
786
+ opacity: 1;
787
+ transform: scaleX(1);
788
+ animation: rj-brush-in 0.22s ease;
789
+ }
790
+ .rj-row.is-selected {
791
+ background: var(--rj-selected-bg);
792
+ }
793
+ .rj-row.is-flash {
794
+ animation: rj-flash 0.9s ease;
795
+ }
796
+ .rj-row.rj-group-row {
797
+ background: var(--rj-bg-alt);
798
+ font-weight: 500;
799
+ }
800
+ .rj-row.rj-group-footer {
801
+ background: var(--rj-primary-bg);
802
+ font-weight: 500;
803
+ font-style: italic;
804
+ border-top: 1px dashed var(--rj-border-strong);
805
+ color: var(--rj-primary);
806
+ }
807
+ .rj-row.rj-detail-row, .rj-row.rj-fullwidth-row {
808
+ background: var(--rj-bg);
809
+ }
810
+
811
+ @keyframes rj-flash {
812
+ 0% {
813
+ background: var(--rj-flash-bg);
814
+ }
815
+ 100% {
816
+ background: transparent;
817
+ }
818
+ }
819
+ @keyframes rj-brush-in {
820
+ 0% {
821
+ transform: scaleX(0);
822
+ }
823
+ 100% {
824
+ transform: scaleX(1);
825
+ }
826
+ }
827
+ .rj-cell {
828
+ position: absolute;
829
+ top: 0;
830
+ display: flex;
831
+ align-items: center;
832
+ padding: 0 8px;
833
+ border-right: 1px solid var(--rj-border);
834
+ overflow: hidden;
835
+ background: inherit;
836
+ }
837
+ .rj-cell.is-dirty::before {
838
+ content: "";
839
+ position: absolute;
840
+ top: 0;
841
+ left: 0;
842
+ width: 0;
843
+ height: 0;
844
+ border-style: solid;
845
+ border-width: 7px 7px 0 0;
846
+ border-color: #e6a23c transparent transparent transparent;
847
+ z-index: 2;
848
+ animation: rj-dirty-pop 0.18s ease-out;
849
+ }
850
+ .rj-cell.is-fx-err {
851
+ color: #d93025;
852
+ font-weight: 600;
853
+ }
854
+ .rj-cell .rj-cell-inner {
855
+ overflow: hidden;
856
+ text-overflow: ellipsis;
857
+ white-space: nowrap;
858
+ width: 100%;
859
+ }
860
+ .rj-cell .rj-cell-inner.wrap {
861
+ white-space: normal;
862
+ word-break: break-all;
863
+ }
864
+ .rj-cell.is-editing {
865
+ padding: 0;
866
+ overflow: visible;
867
+ z-index: 5;
868
+ box-shadow: inset 0 0 0 2px var(--rj-primary);
869
+ }
870
+ .rj-cell.rj-cell-center {
871
+ justify-content: center;
872
+ }
873
+ .rj-cell.rj-cell-right {
874
+ justify-content: flex-end;
875
+ }
876
+ .rj-cell.rj-cell-link a {
877
+ color: var(--rj-primary);
878
+ text-decoration: none;
879
+ }
880
+ .rj-cell.rj-cell-link a:hover {
881
+ text-decoration: underline;
882
+ }
883
+ .rj-cell.rj-cell-img {
884
+ gap: 4px;
885
+ }
886
+ .rj-cell .rj-cell-img-el {
887
+ flex-shrink: 0;
888
+ object-fit: cover;
889
+ vertical-align: middle;
890
+ background: var(--rj-bg-alt);
891
+ cursor: zoom-in;
892
+ transition: box-shadow 0.15s ease, transform 0.15s ease;
893
+ }
894
+ .rj-cell .rj-cell-img-el:hover {
895
+ box-shadow: 0 0 0 2px var(--rj-primary), var(--rj-shadow);
896
+ }
897
+ .rj-cell .rj-img--square {
898
+ border-radius: 0;
899
+ }
900
+ .rj-cell .rj-img--rounded {
901
+ border-radius: var(--rj-radius);
902
+ }
903
+ .rj-cell .rj-img--circle {
904
+ border-radius: 50%;
905
+ }
906
+ .rj-cell .rj-cell-img-fallback {
907
+ color: var(--rj-text-secondary);
908
+ font-style: italic;
909
+ }
910
+
911
+ .rj-indent {
912
+ display: inline-flex;
913
+ align-items: center;
914
+ flex-shrink: 0;
915
+ }
916
+
917
+ .rj-expand-icon {
918
+ display: inline-flex;
919
+ align-items: center;
920
+ justify-content: center;
921
+ width: 18px;
922
+ height: 18px;
923
+ margin-right: 2px;
924
+ border-radius: 3px;
925
+ cursor: pointer;
926
+ color: var(--rj-text-secondary);
927
+ flex-shrink: 0;
928
+ }
929
+ .rj-expand-icon:hover {
930
+ background: var(--rj-primary-bg);
931
+ color: var(--rj-primary);
932
+ }
933
+
934
+ .rj-checkbox {
935
+ display: inline-flex;
936
+ align-items: center;
937
+ justify-content: center;
938
+ width: 15px;
939
+ height: 15px;
940
+ border: 1px solid var(--rj-border-strong);
941
+ border-radius: 3px;
942
+ cursor: pointer;
943
+ background: var(--rj-bg);
944
+ flex-shrink: 0;
945
+ color: #fff;
946
+ font-size: 10px;
947
+ }
948
+ .rj-checkbox.is-checked, .rj-checkbox.is-indeterminate {
949
+ background: var(--rj-primary);
950
+ border-color: var(--rj-primary);
951
+ }
952
+
953
+ .rj-row-drag-handle {
954
+ flex: 1 1 auto;
955
+ align-self: stretch;
956
+ display: flex;
957
+ align-items: center;
958
+ justify-content: center;
959
+ cursor: grab;
960
+ color: var(--rj-text-secondary);
961
+ touch-action: none;
962
+ user-select: none;
963
+ }
964
+ .rj-row-drag-handle:active {
965
+ cursor: grabbing;
966
+ }
967
+
968
+ .rj-cell.rj-cell-drag {
969
+ padding: 0;
970
+ }
971
+
972
+ .rj-row-indicator {
973
+ position: absolute;
974
+ left: 0;
975
+ right: 0;
976
+ height: 2px;
977
+ background: var(--rj-primary);
978
+ z-index: 9;
979
+ pointer-events: none;
980
+ }
981
+
982
+ .rj-drag-ghost {
983
+ position: fixed;
984
+ left: 0;
985
+ top: 0;
986
+ z-index: 4000;
987
+ pointer-events: none;
988
+ display: flex;
989
+ align-items: stretch;
990
+ max-width: 560px;
991
+ padding: 0;
992
+ border-radius: 6px;
993
+ background: var(--rj-bg);
994
+ color: var(--rj-text);
995
+ font-size: 13px;
996
+ line-height: 1.4;
997
+ border: 1px solid var(--rj-primary);
998
+ box-shadow: 0 8px 22px rgba(0, 0, 0, 0.28);
999
+ opacity: 0.96;
1000
+ overflow: hidden;
1001
+ transform-origin: left center;
1002
+ will-change: transform;
1003
+ }
1004
+ .rj-drag-ghost .rj-drag-ghost-cell {
1005
+ display: flex;
1006
+ align-items: center;
1007
+ box-sizing: border-box;
1008
+ flex: 0 0 auto;
1009
+ padding: 0 10px;
1010
+ white-space: nowrap;
1011
+ overflow: hidden;
1012
+ text-overflow: ellipsis;
1013
+ border-right: 1px solid var(--rj-border);
1014
+ }
1015
+ .rj-drag-ghost .rj-drag-ghost-cell:last-of-type {
1016
+ border-right: none;
1017
+ }
1018
+ .rj-drag-ghost .rj-drag-ghost-cell.is-img .rj-drag-ghost-img {
1019
+ display: block;
1020
+ width: 22px;
1021
+ height: 22px;
1022
+ border-radius: 4px;
1023
+ background: var(--rj-border);
1024
+ }
1025
+ .rj-drag-ghost .rj-drag-ghost-cell.is-spark .rj-drag-ghost-spark {
1026
+ display: block;
1027
+ width: 72%;
1028
+ height: 12px;
1029
+ opacity: 0.6;
1030
+ background: repeating-linear-gradient(90deg, var(--rj-primary) 0 3px, transparent 3px 7px);
1031
+ }
1032
+ .rj-drag-ghost .rj-drag-ghost-empty {
1033
+ display: flex;
1034
+ align-items: center;
1035
+ padding: 0 12px;
1036
+ color: var(--rj-text-secondary);
1037
+ }
1038
+
1039
+ .rj-range-rect {
1040
+ position: absolute;
1041
+ background: var(--rj-range-bg);
1042
+ border: 1px solid var(--rj-primary);
1043
+ pointer-events: none;
1044
+ z-index: 4;
1045
+ }
1046
+ .rj-range-rect.is-fill {
1047
+ background: var(--rj-fill-bg);
1048
+ border-style: dashed;
1049
+ }
1050
+
1051
+ .rj-active-rect {
1052
+ position: absolute;
1053
+ border: 2px solid var(--rj-primary);
1054
+ pointer-events: none;
1055
+ z-index: 5;
1056
+ }
1057
+
1058
+ .rj-extra-rect {
1059
+ position: absolute;
1060
+ background: var(--rj-range-bg);
1061
+ border: 1px solid var(--rj-primary);
1062
+ pointer-events: none;
1063
+ z-index: 4;
1064
+ }
1065
+
1066
+ .rj-fill-handle {
1067
+ position: absolute;
1068
+ width: 7px;
1069
+ height: 7px;
1070
+ background: var(--rj-primary);
1071
+ border: 1px solid #fff;
1072
+ cursor: crosshair;
1073
+ z-index: 7;
1074
+ }
1075
+
1076
+ .rj-find-hit {
1077
+ background: var(--rj-find-bg);
1078
+ border-radius: 2px;
1079
+ }
1080
+
1081
+ .rj-find-current {
1082
+ background: var(--rj-find-active-bg);
1083
+ }
1084
+
1085
+ .rj-editor {
1086
+ width: 100%;
1087
+ height: 100%;
1088
+ display: flex;
1089
+ }
1090
+ .rj-editor input,
1091
+ .rj-editor select,
1092
+ .rj-editor textarea {
1093
+ flex: 1;
1094
+ min-width: 0;
1095
+ height: 100%;
1096
+ border: none;
1097
+ outline: none;
1098
+ padding: 0 6px;
1099
+ font-size: inherit;
1100
+ font-family: inherit;
1101
+ color: var(--rj-text);
1102
+ background: color-mix(in srgb, var(--rj-primary) 6%, var(--rj-bg));
1103
+ }
1104
+ .rj-editor .rj-editor-textarea {
1105
+ padding: 4px 6px;
1106
+ line-height: 1.4;
1107
+ height: 100%;
1108
+ resize: none;
1109
+ outline: none;
1110
+ }
1111
+ .rj-editor .rj-editor-select {
1112
+ position: relative;
1113
+ flex: 1;
1114
+ display: flex;
1115
+ }
1116
+ .rj-editor .rj-editor-select .rj-editor-dropdown {
1117
+ position: absolute;
1118
+ top: 100%;
1119
+ left: 0;
1120
+ right: 0;
1121
+ max-height: 200px;
1122
+ overflow: auto;
1123
+ z-index: 30;
1124
+ background: var(--rj-bg);
1125
+ border: 1px solid var(--rj-border);
1126
+ box-shadow: var(--rj-shadow);
1127
+ }
1128
+ .rj-editor .rj-editor-select .rj-editor-dropdown .rj-editor-option {
1129
+ padding: 4px 8px;
1130
+ cursor: pointer;
1131
+ line-height: 1.5;
1132
+ }
1133
+ .rj-editor .rj-editor-select .rj-editor-dropdown .rj-editor-option:hover, .rj-editor .rj-editor-select .rj-editor-dropdown .rj-editor-option.is-active {
1134
+ background: var(--rj-primary-bg);
1135
+ color: var(--rj-primary);
1136
+ }
1137
+ .rj-editor .rj-editor-select .rj-editor-dropdown .rj-editor-option.is-selected {
1138
+ font-weight: 600;
1139
+ color: var(--rj-primary);
1140
+ }
1141
+
1142
+ .rj-editor-error {
1143
+ position: absolute;
1144
+ top: 100%;
1145
+ left: 0;
1146
+ margin-top: 2px;
1147
+ padding: 2px 8px;
1148
+ font-size: 12px;
1149
+ color: #fff;
1150
+ background: var(--rj-danger);
1151
+ border-radius: 3px;
1152
+ white-space: nowrap;
1153
+ z-index: 40;
1154
+ }
1155
+
1156
+ .rj-grid-toast {
1157
+ position: absolute;
1158
+ left: 50%;
1159
+ top: 16px;
1160
+ transform: translateX(-50%);
1161
+ padding: 6px 14px;
1162
+ font-size: 12px;
1163
+ color: #fff;
1164
+ background: rgba(0, 0, 0, 0.72);
1165
+ border-radius: var(--rj-radius);
1166
+ white-space: nowrap;
1167
+ pointer-events: none;
1168
+ z-index: 45;
1169
+ }
1170
+
1171
+ .rj-summary {
1172
+ position: relative;
1173
+ flex-shrink: 0;
1174
+ border-top: 2px solid var(--rj-border);
1175
+ background: var(--rj-header-bg);
1176
+ overflow: hidden;
1177
+ }
1178
+ .rj-summary .rj-summary-row {
1179
+ display: flex;
1180
+ position: relative;
1181
+ font-weight: 600;
1182
+ }
1183
+ .rj-summary .rj-summary-clip {
1184
+ position: absolute;
1185
+ top: 0;
1186
+ height: 100%;
1187
+ overflow: hidden;
1188
+ background: var(--rj-header-bg);
1189
+ z-index: 2;
1190
+ }
1191
+
1192
+ .rj-overlay {
1193
+ position: absolute;
1194
+ inset: 0;
1195
+ display: flex;
1196
+ align-items: center;
1197
+ justify-content: center;
1198
+ flex-direction: column;
1199
+ gap: 8px;
1200
+ background: var(--rj-mask);
1201
+ z-index: 20;
1202
+ color: var(--rj-text-secondary);
1203
+ }
1204
+ .rj-overlay .rj-spinner {
1205
+ width: 28px;
1206
+ height: 28px;
1207
+ border: 3px solid var(--rj-border-strong);
1208
+ border-top-color: var(--rj-primary);
1209
+ border-radius: 50%;
1210
+ animation: rj-spin 0.8s linear infinite;
1211
+ }
1212
+
1213
+ @keyframes rj-spin {
1214
+ to {
1215
+ transform: rotate(360deg);
1216
+ }
1217
+ }
1218
+ .rj-load-more {
1219
+ padding: 6px;
1220
+ text-align: center;
1221
+ color: var(--rj-text-secondary);
1222
+ font-size: 12px;
1223
+ }
1224
+
1225
+ .rj-menu {
1226
+ position: fixed;
1227
+ min-width: 160px;
1228
+ max-width: 320px;
1229
+ padding: 4px 0;
1230
+ background: var(--rj-bg);
1231
+ border: 1px solid var(--rj-border);
1232
+ border-radius: var(--rj-radius);
1233
+ box-shadow: var(--rj-shadow);
1234
+ z-index: 3000;
1235
+ font-size: 13px;
1236
+ box-sizing: border-box;
1237
+ }
1238
+ .rj-menu .rj-menu-item {
1239
+ position: relative;
1240
+ display: flex;
1241
+ align-items: center;
1242
+ gap: 8px;
1243
+ padding: 6px 14px;
1244
+ cursor: pointer;
1245
+ white-space: nowrap;
1246
+ line-height: 1.5;
1247
+ }
1248
+ .rj-menu .rj-menu-item:hover {
1249
+ background: var(--rj-hover-bg);
1250
+ }
1251
+ .rj-menu .rj-menu-item.is-disabled {
1252
+ color: var(--rj-text-secondary);
1253
+ cursor: not-allowed;
1254
+ }
1255
+ .rj-menu .rj-menu-item-label {
1256
+ flex: 1 1 auto;
1257
+ min-width: 0;
1258
+ overflow: hidden;
1259
+ text-overflow: ellipsis;
1260
+ }
1261
+ .rj-menu .rj-menu-divider {
1262
+ height: 1px;
1263
+ margin: 4px 0;
1264
+ background: var(--rj-border);
1265
+ }
1266
+ .rj-menu .rj-menu-sub-arrow {
1267
+ flex-shrink: 0;
1268
+ margin-left: auto;
1269
+ color: var(--rj-text-secondary);
1270
+ }
1271
+
1272
+ .rj-menu-sub {
1273
+ position: absolute;
1274
+ left: 100%;
1275
+ top: -5px;
1276
+ margin-left: 2px;
1277
+ z-index: 3100;
1278
+ }
1279
+
1280
+ .rj-colmenu {
1281
+ position: fixed;
1282
+ z-index: 3000;
1283
+ width: 260px;
1284
+ background: var(--rj-bg);
1285
+ border: 1px solid var(--rj-border);
1286
+ border-radius: var(--rj-radius);
1287
+ box-shadow: var(--rj-shadow);
1288
+ font-size: 13px;
1289
+ box-sizing: border-box;
1290
+ overflow: hidden;
1291
+ }
1292
+ .rj-colmenu .rj-colmenu-tabs {
1293
+ display: flex;
1294
+ border-bottom: 1px solid var(--rj-border);
1295
+ background: var(--rj-header-bg, var(--rj-bg));
1296
+ }
1297
+ .rj-colmenu .rj-colmenu-tab {
1298
+ flex: 1 1 auto;
1299
+ display: flex;
1300
+ align-items: center;
1301
+ justify-content: center;
1302
+ gap: 4px;
1303
+ padding: 8px 4px;
1304
+ cursor: pointer;
1305
+ color: var(--rj-text-secondary);
1306
+ border-bottom: 2px solid transparent;
1307
+ white-space: nowrap;
1308
+ }
1309
+ .rj-colmenu .rj-colmenu-tab:hover {
1310
+ color: var(--rj-text);
1311
+ }
1312
+ .rj-colmenu .rj-colmenu-tab.is-active {
1313
+ color: var(--rj-primary);
1314
+ border-bottom-color: var(--rj-primary);
1315
+ font-weight: 600;
1316
+ }
1317
+ .rj-colmenu .rj-colmenu-tab-ic {
1318
+ font-size: 12px;
1319
+ }
1320
+ .rj-colmenu .rj-colmenu-body {
1321
+ padding: 8px 0;
1322
+ max-height: 360px;
1323
+ overflow: auto;
1324
+ }
1325
+ .rj-colmenu .rj-colmenu-body:has(.rj-popup.is-inline) {
1326
+ padding: 10px;
1327
+ }
1328
+ .rj-colmenu .rj-colmenu-title {
1329
+ padding: 4px 14px 8px;
1330
+ font-weight: 600;
1331
+ color: var(--rj-text);
1332
+ }
1333
+ .rj-colmenu .rj-colmenu-item {
1334
+ display: flex;
1335
+ align-items: center;
1336
+ gap: 8px;
1337
+ padding: 6px 14px;
1338
+ cursor: pointer;
1339
+ line-height: 1.5;
1340
+ white-space: nowrap;
1341
+ }
1342
+ .rj-colmenu .rj-colmenu-item.is-active {
1343
+ background: var(--rj-primary-bg);
1344
+ box-shadow: inset 2px 0 0 var(--rj-primary);
1345
+ }
1346
+ .rj-colmenu .rj-colmenu-item.is-active .rj-colmenu-ic {
1347
+ filter: grayscale(1);
1348
+ opacity: 0.8;
1349
+ }
1350
+ .rj-colmenu .rj-colmenu-item:hover {
1351
+ background: var(--rj-hover-bg);
1352
+ }
1353
+ .rj-colmenu .rj-colmenu-ic {
1354
+ width: 16px;
1355
+ text-align: center;
1356
+ color: var(--rj-text-secondary);
1357
+ flex-shrink: 0;
1358
+ }
1359
+ .rj-colmenu .rj-colmenu-cur {
1360
+ margin-left: auto;
1361
+ color: var(--rj-primary);
1362
+ }
1363
+ .rj-colmenu .rj-colmenu-divider {
1364
+ height: 1px;
1365
+ margin: 4px 0;
1366
+ background: var(--rj-border);
1367
+ }
1368
+ .rj-colmenu .rj-colmenu-list {
1369
+ max-height: 260px;
1370
+ overflow: auto;
1371
+ }
1372
+ .rj-colmenu .rj-colmenu-draghint {
1373
+ padding: 0 14px 6px;
1374
+ font-size: 11px;
1375
+ color: var(--rj-text-secondary);
1376
+ }
1377
+ .rj-colmenu .rj-colmenu-col {
1378
+ display: flex;
1379
+ align-items: center;
1380
+ gap: 8px;
1381
+ padding: 5px 14px;
1382
+ cursor: grab;
1383
+ }
1384
+ .rj-colmenu .rj-colmenu-col.is-pinned {
1385
+ background: var(--rj-primary-bg);
1386
+ box-shadow: inset 2px 0 0 var(--rj-primary);
1387
+ }
1388
+ .rj-colmenu .rj-colmenu-col:hover {
1389
+ background: var(--rj-hover-bg);
1390
+ }
1391
+ .rj-colmenu .rj-colmenu-col.is-dragover {
1392
+ box-shadow: inset 0 2px 0 0 var(--rj-primary);
1393
+ background: var(--rj-hover-bg);
1394
+ }
1395
+ .rj-colmenu .rj-colmenu-grip {
1396
+ flex-shrink: 0;
1397
+ width: 12px;
1398
+ text-align: center;
1399
+ color: var(--rj-text-secondary);
1400
+ cursor: grab;
1401
+ user-select: none;
1402
+ }
1403
+ .rj-colmenu .rj-colmenu-eye,
1404
+ .rj-colmenu .rj-colmenu-pin {
1405
+ cursor: pointer;
1406
+ flex-shrink: 0;
1407
+ width: 18px;
1408
+ text-align: center;
1409
+ color: var(--rj-text-secondary);
1410
+ }
1411
+ .rj-colmenu .rj-colmenu-eye:hover,
1412
+ .rj-colmenu .rj-colmenu-pin:hover {
1413
+ color: var(--rj-primary);
1414
+ }
1415
+ .rj-colmenu .rj-colmenu-pin.is-on {
1416
+ color: var(--rj-text-secondary);
1417
+ filter: grayscale(1);
1418
+ opacity: 0.8;
1419
+ }
1420
+ .rj-colmenu .rj-colmenu-pin.is-on:hover {
1421
+ filter: none;
1422
+ color: var(--rj-primary);
1423
+ opacity: 1;
1424
+ }
1425
+ .rj-colmenu .rj-colmenu-pin-tag {
1426
+ flex-shrink: 0;
1427
+ padding: 0 4px;
1428
+ font-size: 10px;
1429
+ line-height: 14px;
1430
+ color: var(--rj-primary);
1431
+ border: 1px solid currentColor;
1432
+ border-radius: 4px;
1433
+ }
1434
+ .rj-colmenu .rj-colmenu-col-name {
1435
+ flex: 1 1 auto;
1436
+ min-width: 0;
1437
+ overflow: hidden;
1438
+ text-overflow: ellipsis;
1439
+ white-space: nowrap;
1440
+ }
1441
+ .rj-colmenu .rj-colmenu-foot {
1442
+ display: flex;
1443
+ gap: 14px;
1444
+ padding: 8px 14px 2px;
1445
+ border-top: 1px solid var(--rj-border);
1446
+ margin-top: 4px;
1447
+ }
1448
+ .rj-colmenu .rj-colmenu-foot a {
1449
+ color: var(--rj-primary);
1450
+ cursor: pointer;
1451
+ font-size: 12px;
1452
+ }
1453
+ .rj-colmenu .rj-colmenu-foot a:hover {
1454
+ text-decoration: underline;
1455
+ }
1456
+
1457
+ .rj-popup {
1458
+ position: fixed;
1459
+ z-index: 2900;
1460
+ background: var(--rj-bg);
1461
+ border: 1px solid var(--rj-border);
1462
+ border-radius: var(--rj-radius);
1463
+ box-shadow: var(--rj-shadow);
1464
+ padding: 10px;
1465
+ font-size: 13px;
1466
+ }
1467
+ .rj-popup.is-inline {
1468
+ position: static;
1469
+ padding: 0;
1470
+ border: none;
1471
+ border-radius: 0;
1472
+ box-shadow: none;
1473
+ z-index: auto;
1474
+ width: 100%;
1475
+ }
1476
+ .rj-popup .rj-popup-row {
1477
+ display: flex;
1478
+ align-items: center;
1479
+ gap: 6px;
1480
+ margin-bottom: 8px;
1481
+ }
1482
+ .rj-popup .rj-cond-del {
1483
+ width: 18px;
1484
+ height: 18px;
1485
+ line-height: 16px;
1486
+ text-align: center;
1487
+ border-radius: 50%;
1488
+ color: var(--rj-text-secondary, #909399);
1489
+ cursor: pointer;
1490
+ flex-shrink: 0;
1491
+ }
1492
+ .rj-popup .rj-cond-del:hover {
1493
+ color: #fff;
1494
+ background: #e54d42;
1495
+ }
1496
+ .rj-popup .rj-adv-link {
1497
+ font-size: 12px;
1498
+ color: var(--rj-primary, #3b76f6);
1499
+ cursor: pointer;
1500
+ }
1501
+ .rj-popup .rj-adv-link:hover {
1502
+ text-decoration: underline;
1503
+ }
1504
+ .rj-popup .rj-popup-footer {
1505
+ display: flex;
1506
+ justify-content: space-between;
1507
+ margin-top: 4px;
1508
+ }
1509
+ .rj-popup .rj-adv-dialog {
1510
+ width: 440px;
1511
+ max-width: calc(100% - 16px);
1512
+ max-height: 70vh;
1513
+ overflow: auto;
1514
+ }
1515
+ .rj-popup .rj-adv-title {
1516
+ display: flex;
1517
+ align-items: center;
1518
+ justify-content: space-between;
1519
+ font-weight: 600;
1520
+ margin-bottom: 8px;
1521
+ }
1522
+ .rj-popup .rj-adv-group {
1523
+ border: 1px dashed transparent;
1524
+ padding: 4px 0;
1525
+ }
1526
+ .rj-popup .rj-adv-group.is-nested {
1527
+ margin: 4px 0 4px 12px;
1528
+ padding: 6px;
1529
+ border-color: var(--rj-border, #dcdfe6);
1530
+ border-radius: var(--rj-radius, 4px);
1531
+ background: var(--rj-hover-bg, rgba(0, 0, 0, 0.02));
1532
+ }
1533
+ .rj-popup .rj-adv-head {
1534
+ display: flex;
1535
+ align-items: center;
1536
+ justify-content: space-between;
1537
+ margin-bottom: 6px;
1538
+ }
1539
+ .rj-popup .rj-adv-item {
1540
+ margin-bottom: 6px;
1541
+ }
1542
+ .rj-popup .rj-adv-cond {
1543
+ display: flex;
1544
+ align-items: center;
1545
+ gap: 6px;
1546
+ }
1547
+ .rj-popup .rj-adv-actions {
1548
+ display: flex;
1549
+ gap: 12px;
1550
+ margin-top: 4px;
1551
+ }
1552
+ .rj-popup .rj-adv-actions a {
1553
+ font-size: 12px;
1554
+ color: var(--rj-primary, #3b76f6);
1555
+ cursor: pointer;
1556
+ }
1557
+ .rj-popup .rj-adv-actions a:hover {
1558
+ text-decoration: underline;
1559
+ }
1560
+ .rj-popup .rj-adv-remove {
1561
+ display: inline-flex;
1562
+ align-items: center;
1563
+ justify-content: center;
1564
+ width: 18px;
1565
+ height: 18px;
1566
+ border-radius: 50%;
1567
+ color: var(--rj-text-secondary, #909399);
1568
+ cursor: pointer;
1569
+ flex-shrink: 0;
1570
+ }
1571
+ .rj-popup .rj-adv-remove:hover {
1572
+ color: #fff;
1573
+ background: #e54d42;
1574
+ }
1575
+ .rj-popup .rj-check-list {
1576
+ max-height: 220px;
1577
+ overflow: auto;
1578
+ border: 1px solid var(--rj-border);
1579
+ border-radius: var(--rj-radius);
1580
+ padding: 4px;
1581
+ }
1582
+ .rj-popup .rj-check-list .rj-check-item {
1583
+ display: flex;
1584
+ align-items: center;
1585
+ gap: 6px;
1586
+ padding: 2px 4px;
1587
+ cursor: pointer;
1588
+ }
1589
+ .rj-popup .rj-check-list .rj-check-item:hover {
1590
+ background: var(--rj-hover-bg);
1591
+ }
1592
+
1593
+ .rj-radio-tabs {
1594
+ display: inline-flex;
1595
+ border: 1px solid var(--rj-border-strong);
1596
+ border-radius: var(--rj-radius);
1597
+ overflow: hidden;
1598
+ }
1599
+ .rj-radio-tabs span {
1600
+ padding: 2px 8px;
1601
+ cursor: pointer;
1602
+ font-size: 12px;
1603
+ }
1604
+ .rj-radio-tabs span.is-active {
1605
+ background: var(--rj-primary);
1606
+ color: #fff;
1607
+ }
1608
+
1609
+ .rj-panel {
1610
+ width: 230px;
1611
+ flex-shrink: 0;
1612
+ border-left: 1px solid var(--rj-border);
1613
+ background: var(--rj-bg);
1614
+ display: flex;
1615
+ flex-direction: column;
1616
+ overflow: hidden;
1617
+ }
1618
+ .rj-panel .rj-panel-tabs {
1619
+ display: flex;
1620
+ border-bottom: 1px solid var(--rj-border);
1621
+ }
1622
+ .rj-panel .rj-panel-tabs .rj-panel-tab {
1623
+ flex: 1;
1624
+ text-align: center;
1625
+ padding: 8px 0;
1626
+ cursor: pointer;
1627
+ font-size: 13px;
1628
+ }
1629
+ .rj-panel .rj-panel-tabs .rj-panel-tab.is-active {
1630
+ color: var(--rj-primary);
1631
+ box-shadow: inset 0 -2px 0 var(--rj-primary);
1632
+ }
1633
+ .rj-panel .rj-panel-body {
1634
+ flex: 1;
1635
+ overflow: auto;
1636
+ padding: 8px;
1637
+ }
1638
+ .rj-panel .rj-panel-section {
1639
+ font-size: 12px;
1640
+ color: var(--rj-text-secondary);
1641
+ margin: 6px 0 4px;
1642
+ }
1643
+ .rj-panel .rj-panel-item {
1644
+ display: flex;
1645
+ align-items: center;
1646
+ gap: 6px;
1647
+ padding: 4px 6px;
1648
+ border-radius: 3px;
1649
+ cursor: grab;
1650
+ }
1651
+ .rj-panel .rj-panel-item.is-check {
1652
+ cursor: pointer;
1653
+ }
1654
+ .rj-panel .rj-panel-item.is-check input[type=checkbox] {
1655
+ pointer-events: none;
1656
+ }
1657
+ .rj-panel .rj-panel-item.is-pinned {
1658
+ background: var(--rj-primary-bg);
1659
+ box-shadow: inset 2px 0 0 var(--rj-primary);
1660
+ }
1661
+ .rj-panel .rj-panel-item:hover {
1662
+ background: var(--rj-hover-bg);
1663
+ }
1664
+ .rj-panel .rj-panel-item .rj-panel-item-title {
1665
+ flex: 1;
1666
+ overflow: hidden;
1667
+ text-overflow: ellipsis;
1668
+ white-space: nowrap;
1669
+ }
1670
+ .rj-panel .rj-panel-item .rj-panel-item-ops {
1671
+ display: inline-flex;
1672
+ gap: 4px;
1673
+ color: var(--rj-text-secondary);
1674
+ }
1675
+ .rj-panel .rj-panel-item .rj-panel-item-ops span {
1676
+ cursor: pointer;
1677
+ }
1678
+ .rj-panel .rj-panel-item .rj-panel-item-ops span:hover {
1679
+ color: var(--rj-primary);
1680
+ }
1681
+ .rj-panel .rj-panel-item .rj-panel-item-ops .rj-panel-pin.is-on {
1682
+ filter: grayscale(1);
1683
+ opacity: 0.8;
1684
+ }
1685
+ .rj-panel .rj-panel-item .rj-panel-item-ops .rj-panel-pin.is-on:hover {
1686
+ filter: none;
1687
+ opacity: 1;
1688
+ }
1689
+ .rj-panel .rj-panel-item .rj-panel-item-ops .rj-panel-pin-tag {
1690
+ padding: 0 4px;
1691
+ font-size: 10px;
1692
+ line-height: 14px;
1693
+ color: var(--rj-primary);
1694
+ border: 1px solid currentColor;
1695
+ border-radius: 4px;
1696
+ }
1697
+
1698
+ .rj-find-bar {
1699
+ position: absolute;
1700
+ top: 8px;
1701
+ right: 16px;
1702
+ display: flex;
1703
+ align-items: center;
1704
+ gap: 6px;
1705
+ padding: 6px 10px;
1706
+ background: var(--rj-bg);
1707
+ border: 1px solid var(--rj-border);
1708
+ border-radius: var(--rj-radius);
1709
+ box-shadow: var(--rj-shadow);
1710
+ z-index: 50;
1711
+ }
1712
+
1713
+ .rj-sparkline canvas {
1714
+ display: block;
1715
+ vertical-align: middle;
1716
+ }
1717
+
1718
+ .rj-img-viewer {
1719
+ position: fixed;
1720
+ inset: 0;
1721
+ z-index: 4200;
1722
+ display: flex;
1723
+ align-items: center;
1724
+ justify-content: center;
1725
+ background: rgba(0, 0, 0, 0.55);
1726
+ cursor: zoom-out;
1727
+ animation: rj-img-fade 0.16s ease-out;
1728
+ }
1729
+ .rj-img-viewer img {
1730
+ min-width: min(45vw, 420px);
1731
+ min-height: min(45vh, 420px);
1732
+ max-width: 86vw;
1733
+ max-height: 86vh;
1734
+ object-fit: contain;
1735
+ border-radius: var(--rj-radius);
1736
+ background: var(--rj-bg);
1737
+ box-shadow: var(--rj-shadow);
1738
+ cursor: default;
1739
+ }
1740
+ .rj-img-viewer .rj-img-viewer-close {
1741
+ position: absolute;
1742
+ top: 18px;
1743
+ right: 24px;
1744
+ padding: 4px 10px;
1745
+ font-size: 20px;
1746
+ line-height: 1;
1747
+ color: #fff;
1748
+ opacity: 0.85;
1749
+ cursor: pointer;
1750
+ user-select: none;
1751
+ }
1752
+ .rj-img-viewer .rj-img-viewer-close:hover {
1753
+ opacity: 1;
1754
+ }
1755
+
1756
+ @keyframes rj-img-fade {
1757
+ from {
1758
+ opacity: 0;
1759
+ }
1760
+ to {
1761
+ opacity: 1;
1762
+ }
1763
+ }
1764
+ .rj-chart-mask {
1765
+ position: fixed;
1766
+ inset: 0;
1767
+ background: rgba(0, 0, 0, 0.45);
1768
+ z-index: 4000;
1769
+ display: flex;
1770
+ align-items: center;
1771
+ justify-content: center;
1772
+ }
1773
+ .rj-chart-mask .rj-chart-dialog {
1774
+ width: 720px;
1775
+ max-width: 92vw;
1776
+ background: var(--rj-bg);
1777
+ border-radius: 6px;
1778
+ box-shadow: var(--rj-shadow);
1779
+ display: flex;
1780
+ flex-direction: column;
1781
+ overflow: hidden;
1782
+ color: var(--rj-text);
1783
+ }
1784
+ .rj-chart-mask .rj-chart-dialog .rj-chart-header {
1785
+ display: flex;
1786
+ align-items: center;
1787
+ padding: 10px 14px;
1788
+ border-bottom: 1px solid var(--rj-border);
1789
+ font-weight: 600;
1790
+ }
1791
+ .rj-chart-mask .rj-chart-dialog .rj-chart-header .rj-chart-close {
1792
+ margin-left: auto;
1793
+ cursor: pointer;
1794
+ color: var(--rj-text-secondary);
1795
+ }
1796
+ .rj-chart-mask .rj-chart-dialog .rj-chart-header .rj-chart-close:hover {
1797
+ color: var(--rj-danger);
1798
+ }
1799
+ .rj-chart-mask .rj-chart-dialog .rj-chart-body {
1800
+ padding: 10px 14px;
1801
+ display: flex;
1802
+ flex-direction: column;
1803
+ gap: 8px;
1804
+ }
1805
+ .rj-chart-mask .rj-chart-dialog .rj-chart-canvas {
1806
+ height: 360px;
1807
+ }
1808
+ .rj-chart-mask .rj-chart-dialog .rj-chart-warn {
1809
+ padding: 8px 0;
1810
+ font-size: 12px;
1811
+ color: var(--rj-danger);
1812
+ }
1813
+
1814
+ .rj-form-mask {
1815
+ position: fixed;
1816
+ inset: 0;
1817
+ background: rgba(15, 20, 30, 0.45);
1818
+ backdrop-filter: blur(2px);
1819
+ z-index: 4000;
1820
+ display: flex;
1821
+ align-items: center;
1822
+ justify-content: center;
1823
+ animation: rj-form-fade 0.16s ease-out;
1824
+ }
1825
+
1826
+ .rj-row-form-dialog {
1827
+ max-width: 92vw;
1828
+ max-height: 82vh;
1829
+ background: var(--rj-bg);
1830
+ border: 1px solid var(--rj-border);
1831
+ border-radius: 10px;
1832
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.18);
1833
+ display: flex;
1834
+ flex-direction: column;
1835
+ overflow: hidden;
1836
+ color: var(--rj-text);
1837
+ animation: rj-form-pop 0.18s ease-out;
1838
+ }
1839
+
1840
+ .rj-confirm-dialog {
1841
+ width: 380px;
1842
+ max-width: 92vw;
1843
+ background: var(--rj-bg);
1844
+ border: 1px solid var(--rj-border);
1845
+ border-radius: 10px;
1846
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.18);
1847
+ color: var(--rj-text);
1848
+ padding-bottom: 16px;
1849
+ animation: rj-form-pop 0.18s ease-out;
1850
+ }
1851
+
1852
+ .rj-form-header {
1853
+ display: flex;
1854
+ align-items: center;
1855
+ padding: 14px 20px;
1856
+ border-bottom: 1px solid var(--rj-border);
1857
+ font-size: 14px;
1858
+ font-weight: 600;
1859
+ }
1860
+ .rj-form-header .rj-form-close {
1861
+ margin-left: auto;
1862
+ display: inline-flex;
1863
+ align-items: center;
1864
+ justify-content: center;
1865
+ width: 24px;
1866
+ height: 24px;
1867
+ border-radius: 6px;
1868
+ cursor: pointer;
1869
+ color: var(--rj-text-secondary);
1870
+ }
1871
+ .rj-form-header .rj-form-close:hover {
1872
+ color: var(--rj-danger);
1873
+ background: var(--rj-hover-bg);
1874
+ }
1875
+
1876
+ .rj-form-hint {
1877
+ margin: 12px 20px 0;
1878
+ padding: 7px 10px;
1879
+ border-radius: 6px;
1880
+ background: var(--rj-primary-bg);
1881
+ color: var(--rj-text);
1882
+ font-size: 12px;
1883
+ line-height: 1.5;
1884
+ }
1885
+
1886
+ .rj-form-body {
1887
+ flex: 1;
1888
+ overflow: auto;
1889
+ padding: 14px 20px 18px;
1890
+ display: grid;
1891
+ grid-template-columns: 1fr 1fr;
1892
+ gap: 14px 18px;
1893
+ }
1894
+ .rj-form-body .rj-form-empty {
1895
+ grid-column: 1/-1;
1896
+ padding: 24px 0;
1897
+ text-align: center;
1898
+ font-size: 12px;
1899
+ color: var(--rj-text-secondary);
1900
+ }
1901
+
1902
+ .rj-form-field {
1903
+ display: flex;
1904
+ flex-direction: column;
1905
+ gap: 6px;
1906
+ min-width: 0;
1907
+ }
1908
+ .rj-form-field.is-off .rj-form-label,
1909
+ .rj-form-field.is-off .rj-form-input,
1910
+ .rj-form-field.is-off .rj-form-check {
1911
+ opacity: 0.5;
1912
+ filter: saturate(0.4);
1913
+ }
1914
+ .rj-form-field .rj-form-label {
1915
+ display: flex;
1916
+ align-items: center;
1917
+ gap: 6px;
1918
+ font-size: 12px;
1919
+ font-weight: 500;
1920
+ color: var(--rj-text);
1921
+ }
1922
+ .rj-form-field .rj-form-batch {
1923
+ position: relative;
1924
+ align-self: flex-end;
1925
+ display: inline-flex;
1926
+ align-items: center;
1927
+ height: 18px;
1928
+ margin-top: -2px;
1929
+ padding: 0 8px;
1930
+ border: 1px solid var(--rj-border-strong);
1931
+ border-radius: 9px;
1932
+ font-size: 11px;
1933
+ line-height: 1;
1934
+ color: var(--rj-text-secondary);
1935
+ cursor: pointer;
1936
+ user-select: none;
1937
+ white-space: nowrap;
1938
+ }
1939
+ .rj-form-field .rj-form-batch input {
1940
+ position: absolute;
1941
+ width: 0;
1942
+ height: 0;
1943
+ opacity: 0;
1944
+ }
1945
+ .rj-form-field .rj-form-batch:has(input:checked) {
1946
+ color: var(--rj-bg);
1947
+ background: var(--rj-primary);
1948
+ border-color: var(--rj-primary);
1949
+ }
1950
+ .rj-form-field .rj-form-input {
1951
+ width: 100%;
1952
+ height: 30px;
1953
+ padding: 0 10px;
1954
+ border: 1px solid var(--rj-border-strong);
1955
+ border-radius: 6px;
1956
+ font-size: 13px;
1957
+ color: var(--rj-text);
1958
+ background: var(--rj-bg);
1959
+ box-sizing: border-box;
1960
+ }
1961
+ .rj-form-field .rj-form-input:focus {
1962
+ outline: none;
1963
+ border-color: var(--rj-primary);
1964
+ box-shadow: 0 0 0 2px var(--rj-range-bg);
1965
+ }
1966
+ .rj-form-field select.rj-form-input {
1967
+ cursor: pointer;
1968
+ }
1969
+ .rj-form-field textarea.rj-form-input {
1970
+ height: auto;
1971
+ padding: 8px 10px;
1972
+ resize: vertical;
1973
+ line-height: 1.5;
1974
+ font-family: inherit;
1975
+ }
1976
+ .rj-form-field .rj-form-check {
1977
+ align-self: flex-start;
1978
+ width: 16px;
1979
+ height: 16px;
1980
+ accent-color: var(--rj-primary);
1981
+ }
1982
+ .rj-form-field .rj-form-error {
1983
+ font-size: 12px;
1984
+ color: var(--rj-danger);
1985
+ }
1986
+
1987
+ .rj-confirm-msg {
1988
+ padding: 18px 20px;
1989
+ font-size: 13px;
1990
+ line-height: 1.6;
1991
+ }
1992
+
1993
+ .rj-row-form-dialog > .rj-popup-footer,
1994
+ .rj-confirm-dialog > .rj-popup-footer {
1995
+ display: flex;
1996
+ align-items: center;
1997
+ justify-content: flex-end;
1998
+ gap: 12px;
1999
+ padding: 0 20px 18px;
2000
+ }
2001
+ .rj-row-form-dialog > .rj-popup-footer .rj-btn,
2002
+ .rj-confirm-dialog > .rj-popup-footer .rj-btn {
2003
+ height: 30px;
2004
+ min-width: 76px;
2005
+ justify-content: center;
2006
+ padding: 0 16px;
2007
+ border-radius: 6px;
2008
+ font-size: 13px;
2009
+ }
2010
+ .rj-row-form-dialog > .rj-popup-footer .rj-btn[disabled],
2011
+ .rj-confirm-dialog > .rj-popup-footer .rj-btn[disabled] {
2012
+ opacity: 1;
2013
+ }
2014
+ .rj-row-form-dialog > .rj-popup-footer .rj-btn-primary[disabled],
2015
+ .rj-row-form-dialog > .rj-popup-footer .rj-btn-primary[disabled]:hover,
2016
+ .rj-confirm-dialog > .rj-popup-footer .rj-btn-primary[disabled],
2017
+ .rj-confirm-dialog > .rj-popup-footer .rj-btn-primary[disabled]:hover {
2018
+ color: var(--rj-text-secondary);
2019
+ background: var(--rj-bg-alt);
2020
+ border-color: var(--rj-border-strong);
2021
+ }
2022
+
2023
+ @keyframes rj-form-fade {
2024
+ from {
2025
+ opacity: 0;
2026
+ }
2027
+ to {
2028
+ opacity: 1;
2029
+ }
2030
+ }
2031
+ @keyframes rj-form-pop {
2032
+ from {
2033
+ transform: translateY(8px) scale(0.98);
2034
+ opacity: 0;
2035
+ }
2036
+ to {
2037
+ transform: none;
2038
+ opacity: 1;
2039
+ }
2040
+ }
2041
+ @keyframes rj-dirty-pop {
2042
+ from {
2043
+ transform: scale(0);
2044
+ opacity: 0;
2045
+ }
2046
+ to {
2047
+ transform: scale(1);
2048
+ opacity: 1;
2049
+ }
2050
+ }