vgapp 1.2.5 → 1.3.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 (48) hide show
  1. package/README.md +131 -20
  2. package/app/modules/base-module.js +111 -17
  3. package/app/modules/vgalert/js/vgalert.js +3 -3
  4. package/app/modules/vgdynamictable/index.js +5 -0
  5. package/app/modules/vgdynamictable/js/editable.js +438 -0
  6. package/app/modules/vgdynamictable/js/expandable.js +248 -0
  7. package/app/modules/vgdynamictable/js/filters.js +450 -0
  8. package/app/modules/vgdynamictable/js/fixed.js +566 -0
  9. package/app/modules/vgdynamictable/js/options.js +646 -0
  10. package/app/modules/vgdynamictable/js/pagination.js +623 -0
  11. package/app/modules/vgdynamictable/js/search.js +82 -0
  12. package/app/modules/vgdynamictable/js/skeleton.js +136 -0
  13. package/app/modules/vgdynamictable/js/sortable.js +442 -0
  14. package/app/modules/vgdynamictable/js/summary-footer.js +284 -0
  15. package/app/modules/vgdynamictable/js/table-remote.js +821 -0
  16. package/app/modules/vgdynamictable/js/table-state.js +243 -0
  17. package/app/modules/vgdynamictable/js/table-url-state.js +444 -0
  18. package/app/modules/vgdynamictable/js/utils/common.js +48 -0
  19. package/app/modules/vgdynamictable/js/vgdynamictable.js +3829 -0
  20. package/app/modules/vgdynamictable/js/viewport.js +322 -0
  21. package/app/modules/vgdynamictable/readme.md +251 -0
  22. package/app/modules/vgdynamictable/scss/_actions.scss +193 -0
  23. package/app/modules/vgdynamictable/scss/_pagination.scss +183 -0
  24. package/app/modules/vgdynamictable/scss/_skeleton.scss +60 -0
  25. package/app/modules/vgdynamictable/scss/_sortable.scss +63 -0
  26. package/app/modules/vgdynamictable/scss/_table.scss +157 -0
  27. package/app/modules/vgdynamictable/scss/_variables.scss +130 -0
  28. package/app/modules/vgdynamictable/scss/vgdynamictable.scss +267 -0
  29. package/app/modules/vgrangeslider/index.js +3 -0
  30. package/app/modules/vgrangeslider/js/skins.js +222 -0
  31. package/app/modules/vgrangeslider/js/vgrangeslider.js +704 -0
  32. package/app/modules/vgrangeslider/readme.md +523 -0
  33. package/app/modules/vgrangeslider/scss/_variables.scss +53 -0
  34. package/app/modules/vgrangeslider/scss/vgrangeslider.scss +240 -0
  35. package/app/utils/js/components/ajax.js +116 -7
  36. package/app/vgapp.js +107 -0
  37. package/build/vgapp.css +2 -3246
  38. package/build/vgapp.css.map +1 -1
  39. package/build/vgapp.js +3 -30
  40. package/build/vgapp.js.LICENSE.txt +1 -0
  41. package/build/vgapp.js.map +1 -1
  42. package/index.js +15 -8
  43. package/index.scss +6 -0
  44. package/package.json +21 -1
  45. package/.gitattributes +0 -1
  46. package/CHANGELOG.md +0 -369
  47. package/agents.md +0 -14
  48. package/webpack.config.js +0 -63
@@ -0,0 +1,193 @@
1
+ [data-table-state] {
2
+ text-align: center;
3
+ padding: 18px 14px;
4
+ vertical-align: middle;
5
+ }
6
+
7
+ .vgdt-state {
8
+ display: flex;
9
+ flex-direction: column;
10
+ align-items: center;
11
+ justify-content: center;
12
+ gap: 10px;
13
+ width: min(100%, 520px);
14
+ margin: 0 auto;
15
+ }
16
+
17
+ .vgdt-state-text {
18
+ font-size: 14px;
19
+ line-height: 1.4;
20
+ color: var(--vg-dynamic-table-cell-text-color);
21
+ }
22
+
23
+ .vgdt-state-illustration {
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: center;
27
+ width: 100%;
28
+ max-width: 240px;
29
+ min-height: 84px;
30
+ margin: 0 auto;
31
+ }
32
+
33
+ .vgdt-state-illustration img {
34
+ display: block;
35
+ max-width: 100%;
36
+ max-height: 160px;
37
+ width: auto;
38
+ height: auto;
39
+ }
40
+
41
+ .vgdt-state-actions {
42
+ margin-top: 10px;
43
+ }
44
+
45
+ .vgdt-state-reset {
46
+ border: 1px solid currentColor;
47
+ background: transparent;
48
+ color: inherit;
49
+ border-radius: 999px;
50
+ padding: 6px 12px;
51
+ font-size: 13px;
52
+ cursor: pointer;
53
+ }
54
+
55
+ .vgdt-row-select {
56
+ width: 16px;
57
+ height: 16px;
58
+ cursor: pointer;
59
+ }
60
+
61
+ tbody tr[data-row-reorder="1"][data-row-reorder-mode="row"] td {
62
+ cursor: grab;
63
+ }
64
+
65
+ tbody tr[data-row-dragging="1"] {
66
+ opacity: 0.55;
67
+ }
68
+
69
+ tbody tr[data-row-drag-over="before"] {
70
+ box-shadow: inset 0 2px 0 #3f8cff;
71
+ }
72
+
73
+ tbody tr[data-row-drag-over="after"] {
74
+ box-shadow: inset 0 -2px 0 #3f8cff;
75
+ }
76
+
77
+ .vgdt-row-reorder-cell {
78
+ width: 32px;
79
+ min-width: 32px;
80
+ text-align: center;
81
+ }
82
+
83
+ .vgdt-row-reorder-handle {
84
+ display: inline-flex;
85
+ align-items: center;
86
+ justify-content: center;
87
+ width: 22px;
88
+ height: 22px;
89
+ border: 0;
90
+ background: transparent;
91
+ color: var(--vg-dynamic-table-cell-text-color);
92
+ cursor: grab;
93
+ opacity: 0.75;
94
+ padding: 0;
95
+ }
96
+
97
+ .vgdt-row-reorder-handle:hover {
98
+ opacity: 1;
99
+ }
100
+
101
+ .vgdt-row-actions {
102
+ display: inline-flex;
103
+ gap: 6px;
104
+ }
105
+
106
+ .vgdt-row-action {
107
+ border: 1px solid #a22929;
108
+ background: transparent;
109
+ color: #a22929;
110
+ border-radius: 8px;
111
+ padding: 5px 10px;
112
+ font-size: 12px;
113
+ cursor: pointer;
114
+ }
115
+
116
+ .vgdt-row-action:hover {
117
+ background: #a22929;
118
+ color: #fff;
119
+ }
120
+
121
+ .vgdt-pan-hint {
122
+ margin: 0 0 8px;
123
+ padding: 6px 10px;
124
+ font-size: 12px;
125
+ line-height: 1.35;
126
+ border: 1px dashed var(--vg-dynamic-table-cell-border-color);
127
+ border-radius: 10px;
128
+ color: var(--vg-dynamic-table-cell-text-color);
129
+ background: var(--vg-dynamic-table-header-background);
130
+ display: flex;
131
+ align-items: center;
132
+ justify-content: space-between;
133
+ gap: 8px;
134
+ }
135
+
136
+ .vgdt-pan-hint[hidden] {
137
+ display: none !important;
138
+ }
139
+
140
+ .vgdt-pan-hint__text {
141
+ flex: 1 1 auto;
142
+ text-align: left;
143
+ }
144
+
145
+ .vgdt-pan-hint__close {
146
+ border: 0;
147
+ background: transparent;
148
+ color: inherit;
149
+ cursor: pointer;
150
+ line-height: 1;
151
+ font-size: 16px;
152
+ padding: 0 2px;
153
+ opacity: 0.8;
154
+ }
155
+
156
+ .vgdt-pan-hint__close:hover {
157
+ opacity: 1;
158
+ }
159
+
160
+ @media (max-width: 768px) {
161
+ [data-table-state] {
162
+ padding: 12px 10px;
163
+ }
164
+
165
+ .vgdt-state {
166
+ width: 100%;
167
+ }
168
+
169
+ .vgdt-state-illustration {
170
+ max-width: 180px;
171
+ min-height: 70px;
172
+ }
173
+
174
+ &[data-state-mode] {
175
+ [data-table-state] {
176
+ text-align: left;
177
+ }
178
+
179
+ .vgdt-state {
180
+ margin-left: 0;
181
+ margin-right: 0;
182
+ max-width: min(100%, calc(100vw - 32px));
183
+ }
184
+ }
185
+ }
186
+
187
+ @media (hover: none), (pointer: coarse), (any-pointer: coarse), (any-hover: none) {
188
+ .vgdt-pan-hint {
189
+ display: none !important;
190
+ }
191
+ }
192
+
193
+
@@ -0,0 +1,183 @@
1
+ &.table-pagination {
2
+ .vgdt-pagination {
3
+ padding: var(--vg-dynamic-table-pagination-padding-y) var(--vg-dynamic-table-pagination-padding-x);
4
+ border-top: 1px solid var(--vg-dynamic-table-pagination-border-color);
5
+ }
6
+
7
+ .vgdt-pagination--top {
8
+ border-top: 0;
9
+ border-bottom: 1px solid var(--vg-dynamic-table-pagination-border-color);
10
+ }
11
+
12
+ .vgdt-pagination__inner {
13
+ background: var(--vg-dynamic-table-pagination-toolbar-bg);
14
+ border-radius: var(--vg-dynamic-table-pagination-toolbar-radius);
15
+ padding: var(--vg-dynamic-table-pagination-toolbar-padding-y) var(--vg-dynamic-table-pagination-toolbar-padding-x);
16
+ gap: var(--vg-dynamic-table-pagination-gap);
17
+ }
18
+
19
+ .vgdt-pagination__per-page {
20
+ display: inline-flex;
21
+ align-items: center;
22
+ gap: var(--vg-dynamic-table-pagination-per-page-gap);
23
+ color: var(--vg-dynamic-table-pagination-label-color);
24
+ font-size: var(--vg-dynamic-table-pagination-label-size);
25
+ }
26
+
27
+ .vgdt-pagination__per-page [data-per-page] {
28
+ min-width: 80px;
29
+ height: var(--vg-dynamic-table-pagination-per-page-height);
30
+ padding: 0 calc(var(--vg-dynamic-table-pagination-per-page-padding-x) + 18px) 0 var(--vg-dynamic-table-pagination-per-page-padding-x);
31
+ border-radius: var(--vg-dynamic-table-pagination-per-page-radius);
32
+ border: 1px solid var(--vg-dynamic-table-pagination-per-page-border-color);
33
+ background: var(--vg-dynamic-table-pagination-per-page-bg);
34
+ color: var(--vg-dynamic-table-pagination-per-page-text);
35
+ font: inherit;
36
+ }
37
+
38
+ .vgdt-pagination__per-page [data-per-page]:focus,
39
+ .vgdt-pagination__per-page [data-per-page]:focus-visible,
40
+ .vgdt-pagination__per-page [data-per-page]:active {
41
+ outline: none;
42
+ box-shadow: none;
43
+ }
44
+
45
+ .vgdt-pagination__per-page-control {
46
+ position: relative;
47
+ display: inline-flex;
48
+ align-items: center;
49
+ }
50
+
51
+ .vgdt-pagination__per-page-chevron {
52
+ position: absolute;
53
+ right: 10px;
54
+ top: 50%;
55
+ transform: translateY(-50%);
56
+ pointer-events: none;
57
+ opacity: .85;
58
+ color: var(--vg-dynamic-table-pagination-button-text);
59
+ transition: transform .16s ease, opacity .16s ease, color .16s ease;
60
+ }
61
+
62
+ .vgdt-pagination__per-page-chevron svg {
63
+ display: block;
64
+ width: 14px;
65
+ height: 14px;
66
+ }
67
+
68
+ .vgdt-pagination__per-page-chevron path {
69
+ fill: none;
70
+ stroke: currentColor;
71
+ stroke-width: 1.9;
72
+ stroke-linecap: round;
73
+ stroke-linejoin: round;
74
+ }
75
+
76
+ .vgdt-pagination__per-page-control [data-per-page]:focus + .vgdt-pagination__per-page-chevron {
77
+ opacity: 1;
78
+ }
79
+
80
+ .vgdt-pagination__per-page-control [data-toggle="dropdown"].show + .vgdt-pagination__per-page-chevron {
81
+ transform: translateY(-50%) rotate(180deg);
82
+ opacity: 1;
83
+ }
84
+
85
+ .vgdt-pagination__per-page-dropdown {
86
+ min-width: 170px;
87
+ }
88
+
89
+ .vgdt-pagination__per-page-option {
90
+ display: block;
91
+ width: 100%;
92
+ padding: 8px 10px;
93
+ border: 0;
94
+ background: transparent;
95
+ color: var(--vg-dynamic-table-pagination-button-text);
96
+ text-align: left;
97
+ cursor: pointer;
98
+ }
99
+
100
+ .vgdt-pagination__per-page-option:hover {
101
+ background: var(--vg-dynamic-table-pagination-button-hover-bg);
102
+ }
103
+
104
+ .vgdt-pagination__pages {
105
+ display: inline-flex;
106
+ align-items: center;
107
+ gap: var(--vg-dynamic-table-pagination-pages-gap);
108
+ }
109
+
110
+ .vgdt-pagination__jump {
111
+ display: inline-flex;
112
+ align-items: center;
113
+ gap: var(--vg-dynamic-table-pagination-jump-gap);
114
+ }
115
+
116
+ .vgdt-pagination__jump [data-page-jump-input] {
117
+ width: var(--vg-dynamic-table-pagination-jump-width);
118
+ height: var(--vg-dynamic-table-pagination-button-size);
119
+ padding: 0 var(--vg-dynamic-table-pagination-per-page-padding-x);
120
+ border-radius: var(--vg-dynamic-table-pagination-per-page-radius);
121
+ border: 1px solid var(--vg-dynamic-table-pagination-per-page-border-color);
122
+ background: var(--vg-dynamic-table-pagination-per-page-bg);
123
+ color: var(--vg-dynamic-table-pagination-per-page-text);
124
+ font: inherit;
125
+ }
126
+
127
+ .vgdt-page {
128
+ min-width: var(--vg-dynamic-table-pagination-button-size);
129
+ height: var(--vg-dynamic-table-pagination-button-size);
130
+ padding: var(--vg-dynamic-table-pagination-button-padding);
131
+ border-radius: var(--vg-dynamic-table-pagination-button-radius);
132
+ border: var(--vg-dynamic-table-pagination-button-border);
133
+ background: var(--vg-dynamic-table-pagination-button-bg);
134
+ color: var(--vg-dynamic-table-pagination-button-text);
135
+ font-size: var(--vg-dynamic-table-pagination-button-font-size);
136
+ line-height: var(--vg-dynamic-table-pagination-button-line-height);
137
+ cursor: pointer;
138
+ transition: background-color .15s ease, border-color .15s ease, color .15s ease, opacity .15s ease;
139
+ }
140
+
141
+ .vgdt-page--jump {
142
+ min-width: var(--vg-dynamic-table-pagination-jump-button-min-width);
143
+ }
144
+
145
+ .vgdt-page:hover:not(:disabled):not(.is-active) {
146
+ background: var(--vg-dynamic-table-pagination-button-hover-bg);
147
+ border-color: var(--vg-dynamic-table-pagination-button-hover-border);
148
+ }
149
+
150
+ .vgdt-page.is-active {
151
+ background: var(--vg-dynamic-table-pagination-button-active-bg);
152
+ color: var(--vg-dynamic-table-pagination-button-active-text);
153
+ border-color: var(--vg-dynamic-table-pagination-button-active-border);
154
+ }
155
+
156
+ .vgdt-page:disabled {
157
+ opacity: var(--vg-dynamic-table-pagination-button-disabled-opacity);
158
+ cursor: not-allowed;
159
+ }
160
+
161
+ .vgdt-page--ellipsis {
162
+ display: inline-flex;
163
+ align-items: center;
164
+ justify-content: center;
165
+ gap: 0;
166
+ min-width: var(--vg-dynamic-table-pagination-button-size);
167
+ }
168
+
169
+ .vgdt-ellipsis-chevron {
170
+ display: none;
171
+ font-size: 14px;
172
+ line-height: 1;
173
+ }
174
+
175
+ .vgdt-page--ellipsis:hover .vgdt-ellipsis-dots {
176
+ display: none;
177
+ }
178
+
179
+ .vgdt-page--ellipsis:hover .vgdt-ellipsis-chevron {
180
+ display: inline;
181
+ }
182
+ }
183
+
@@ -0,0 +1,60 @@
1
+ .skeleton-row td {
2
+ padding: var(--vg-dynamic-table-skeleton-padding);
3
+ background: var(--vg-dynamic-table-skeleton-row-bg);
4
+ border-bottom-color: var(--vg-dynamic-table-skeleton-border-color);
5
+ height: var(--vgdt-skeleton-row-height, auto);
6
+ }
7
+
8
+ .skeleton-cell {
9
+ display: flex;
10
+ align-items: center;
11
+ min-height: var(--vg-dynamic-table-cell-row-content-height);
12
+ width: 100%;
13
+ }
14
+
15
+ .skeleton-line {
16
+ width: 100%;
17
+ height: var(--vg-dynamic-table-skeleton-line-height);
18
+ border-radius: var(--vg-dynamic-table-skeleton-radius);
19
+ position: relative;
20
+ overflow: hidden;
21
+ background: linear-gradient(
22
+ 90deg,
23
+ var(--vg-dynamic-table-skeleton-gradient-1) 25%,
24
+ var(--vg-dynamic-table-skeleton-gradient-2) 50%,
25
+ var(--vg-dynamic-table-skeleton-gradient-1) 75%
26
+ );
27
+ background-size: 160% 100%;
28
+ animation: skeleton-shimmer var(--vg-dynamic-table-skeleton-duration) ease-in-out infinite;
29
+ animation-delay: var(--skeleton-delay, 0s);
30
+ }
31
+
32
+ .skeleton-line::after {
33
+ content: '';
34
+ position: absolute;
35
+ inset: 0;
36
+ background: linear-gradient(
37
+ 110deg,
38
+ transparent 0%,
39
+ var(--vg-dynamic-table-skeleton-glow) 45%,
40
+ transparent 100%
41
+ );
42
+ transform: translateX(-120%);
43
+ animation: skeleton-glow calc(var(--vg-dynamic-table-skeleton-duration) * 1.15) linear infinite;
44
+ animation-delay: var(--skeleton-delay, 0s);
45
+ }
46
+
47
+ @keyframes skeleton-shimmer {
48
+ 0% {
49
+ background-position: 160% 0;
50
+ }
51
+ 100% {
52
+ background-position: -160% 0;
53
+ }
54
+ }
55
+
56
+ @keyframes skeleton-glow {
57
+ 100% {
58
+ transform: translateX(120%);
59
+ }
60
+ }
@@ -0,0 +1,63 @@
1
+ &.table-sortable {
2
+ &[data-sort-hide-unsorted-arrows="1"] {
3
+ th[data-sortable="1"]:not([data-sort-direction]) {
4
+ .vgdt-sort-controls {
5
+ display: none;
6
+ }
7
+ }
8
+ }
9
+
10
+ th[data-sortable="1"] {
11
+ position: relative;
12
+ cursor: pointer;
13
+
14
+ .vgdt-sort-label {
15
+ display: inline-flex;
16
+ align-items: center;
17
+ }
18
+
19
+ .vgdt-sort-controls {
20
+ display: flex;
21
+ flex-direction: column;
22
+ margin-left: var(--vg-dynamic-table-sortable-controls-right);
23
+ gap: var(--vg-dynamic-table-sortable-controls-gap);
24
+
25
+ &[hidden] {
26
+ display: none !important;
27
+ }
28
+ }
29
+
30
+ .vgdt-sort-arrow {
31
+ border: 0;
32
+ padding: 0;
33
+ width: var(--vg-dynamic-table-sortable-arrow-width);
34
+ height: var(--vg-dynamic-table-sortable-arrow-height);
35
+ line-height: var(--vg-dynamic-table-sortable-arrow-line-height);
36
+ background: transparent;
37
+ cursor: pointer;
38
+ opacity: var(--vg-dynamic-table-sortable-arrow-opacity);
39
+ font-size: var(--vg-dynamic-table-sortable-arrow-font-size);
40
+ color: var(--vg-dynamic-table-sortable-arrow-color);
41
+ }
42
+
43
+ .vgdt-sort-arrow[aria-pressed="true"] {
44
+ opacity: var(--vg-dynamic-table-sortable-arrow-active-opacity);
45
+ }
46
+ }
47
+
48
+ th[data-sorted-column="1"],
49
+ td[data-sorted-column="1"] {
50
+ background: var(--vg-dynamic-table-sortable-column-highlight-background);
51
+ }
52
+
53
+ &.table-sticky-head {
54
+ th[data-sortable="1"] {
55
+ position: sticky;
56
+ top: var(--vgdt-sticky-top, 0px);
57
+ z-index: 3;
58
+ background: var(--vg-dynamic-table-header-background);
59
+ box-shadow: 0 1px 0 var(--vg-dynamic-table-cell-border-color);
60
+ }
61
+ }
62
+ }
63
+
@@ -0,0 +1,157 @@
1
+ & table {
2
+ width: 100%;
3
+ border-collapse: separate;
4
+ border-spacing: 0;
5
+ min-width: var(--vg-dynamic-table-table-min-width);
6
+ border-radius: var(--vg-dynamic-table-wrap-border-radius);
7
+ overflow: hidden;
8
+
9
+ th,
10
+ td {
11
+ text-align: left;
12
+ padding: var(--vg-dynamic-table-cell-padding);
13
+ border-bottom: 1px solid var(--vg-dynamic-table-cell-border-color);
14
+ font-size: var(--vg-dynamic-table-cell-font-size);
15
+ line-height: var(--vg-dynamic-table-cell-row-content-height);
16
+ color: var(--vg-dynamic-table-cell-text-color);
17
+ }
18
+
19
+ th {
20
+ background: var(--vg-dynamic-table-header-background);
21
+ font-weight: var(--vg-dynamic-table-header-font-weight);
22
+ color: var(--vg-dynamic-table-header-text-color);
23
+ }
24
+
25
+ th[data-col-reorder="1"] {
26
+ cursor: grab;
27
+ user-select: none;
28
+ }
29
+
30
+ th[data-col-reorder="1"][data-col-dragging="1"] {
31
+ cursor: grabbing;
32
+ opacity: 0.75;
33
+ }
34
+
35
+ th[data-col-reorder="1"][data-col-drag-over="1"] {
36
+ outline: 2px dashed var(--vg-dynamic-table-header-text-color);
37
+ outline-offset: -2px;
38
+ }
39
+
40
+ th[data-col-resize="1"] {
41
+ position: relative;
42
+ }
43
+
44
+ .vgdt-col-resize-handle {
45
+ position: absolute;
46
+ top: 0;
47
+ right: -2px;
48
+ width: 8px;
49
+ height: 100%;
50
+ cursor: col-resize;
51
+ }
52
+
53
+ &.is-col-resizing {
54
+ cursor: col-resize;
55
+ user-select: none;
56
+ }
57
+
58
+ th[data-fixed-side],
59
+ td[data-fixed-side] {
60
+ position: relative;
61
+ z-index: 2;
62
+ will-change: transform;
63
+ }
64
+
65
+ th[data-fixed-side] {
66
+ z-index: 6;
67
+ background: var(--vg-dynamic-table-header-background);
68
+ }
69
+
70
+ td[data-fixed-side] {
71
+ background: transparent;
72
+ }
73
+
74
+ td[data-fixed-side][data-fixed-overlap="1"] {
75
+ background: var(--vg-dynamic-table-fixed-cell-background);
76
+ }
77
+
78
+ tbody tr[data-expand-depth] td:first-child::before {
79
+ content: '';
80
+ display: inline-block;
81
+ width: calc(var(--vgdt-expand-depth, 0) * 16px);
82
+ height: 1px;
83
+ vertical-align: middle;
84
+ }
85
+
86
+ .vgdt-expand-toggle {
87
+ display: inline-flex;
88
+ align-items: center;
89
+ justify-content: center;
90
+ border: 1px solid var(--vg-dynamic-table-cell-border-color);
91
+ background: transparent;
92
+ color: inherit;
93
+ width: 18px;
94
+ height: 18px;
95
+ line-height: 16px;
96
+ font-size: 12px;
97
+ padding: 0;
98
+ cursor: pointer;
99
+ border-radius: 4px;
100
+ margin-right: 10px;
101
+ text-align: center;
102
+ }
103
+
104
+ th[data-fixed-edge],
105
+ td[data-fixed-edge] {
106
+ position: relative;
107
+ }
108
+
109
+ th[data-fixed-edge="right"][data-fixed-shadow="1"]::after,
110
+ td[data-fixed-edge="right"][data-fixed-shadow="1"]::after,
111
+ th[data-fixed-edge="left"][data-fixed-shadow="1"]::before,
112
+ td[data-fixed-edge="left"][data-fixed-shadow="1"]::before {
113
+ content: '';
114
+ position: absolute;
115
+ top: 0;
116
+ bottom: -1px;
117
+ width: var(--vg-dynamic-table-fixed-shadow-width);
118
+ pointer-events: none;
119
+ }
120
+
121
+ th[data-fixed-edge="right"][data-fixed-shadow="1"]::after,
122
+ td[data-fixed-edge="right"][data-fixed-shadow="1"]::after {
123
+ right: calc(-1 * var(--vg-dynamic-table-fixed-shadow-width));
124
+ background: linear-gradient(to right, var(--vg-dynamic-table-fixed-shadow-color), transparent);
125
+ }
126
+
127
+ th[data-fixed-edge="left"][data-fixed-shadow="1"]::before,
128
+ td[data-fixed-edge="left"][data-fixed-shadow="1"]::before {
129
+ left: calc(-1 * var(--vg-dynamic-table-fixed-shadow-width));
130
+ background: linear-gradient(to left, var(--vg-dynamic-table-fixed-shadow-color), transparent);
131
+ }
132
+
133
+ thead tr:first-child th:first-child {
134
+ border-top-left-radius: var(--vg-dynamic-table-wrap-border-radius);
135
+ }
136
+
137
+ thead tr:first-child th:last-child {
138
+ border-top-right-radius: var(--vg-dynamic-table-wrap-border-radius);
139
+ }
140
+
141
+ tbody tr:last-child td:first-child {
142
+ border-bottom-left-radius: var(--vg-dynamic-table-wrap-border-radius);
143
+ }
144
+
145
+ tbody tr:last-child td:last-child {
146
+ border-bottom-right-radius: var(--vg-dynamic-table-wrap-border-radius);
147
+ }
148
+
149
+ tfoot tr:last-child td:first-child {
150
+ border-bottom-left-radius: var(--vg-dynamic-table-wrap-border-radius);
151
+ }
152
+
153
+ tfoot tr:last-child td:last-child {
154
+ border-bottom-right-radius: var(--vg-dynamic-table-wrap-border-radius);
155
+ }
156
+ }
157
+