vgapp 1.4.7 → 1.4.9

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 (85) hide show
  1. package/README.md +24 -2
  2. package/app/modules/base-module.js +14 -2
  3. package/app/modules/module-fn.js +5 -4
  4. package/app/modules/vgalert/js/vgalert.js +21 -1
  5. package/app/modules/vgalert/scss/vgalert.scss +48 -0
  6. package/app/modules/vgdropdown/js/vgdropdown.js +58 -27
  7. package/app/modules/vgfilepreview/js/renderers/video-modal.js +5 -1
  8. package/app/modules/vgfilepreview/js/renderers/video.js +6 -1
  9. package/app/modules/vgfilepreview/js/vgfilepreview.js +5 -1
  10. package/app/modules/vgfiles/js/base.js +14 -5
  11. package/app/modules/vgfiles/js/droppable.js +37 -31
  12. package/app/modules/vgfiles/js/vgfiles.js +5 -2
  13. package/app/modules/vgfiles/scss/_variables.scss +3 -1
  14. package/app/modules/vgfiles/scss/vgfiles.scss +55 -10
  15. package/app/modules/vgformsender/js/vgformsender.js +5 -2
  16. package/app/modules/vgloadmore/js/vgloadmore.js +35 -7
  17. package/app/modules/vgnestable/js/vgnestable.js +140 -0
  18. package/app/modules/vgnestable/scss/_variables.scss +16 -9
  19. package/app/modules/vgnestable/scss/vgnestable.scss +35 -2
  20. package/app/modules/vgtable/index.js +3 -0
  21. package/app/modules/vgtable/js/_columns.js +567 -0
  22. package/app/modules/vgtable/js/_expandable.js +242 -0
  23. package/app/modules/vgtable/js/_filters.js +264 -0
  24. package/app/modules/vgtable/js/_fixed-columns.js +249 -0
  25. package/app/modules/vgtable/js/_i18n.js +75 -0
  26. package/app/modules/vgtable/js/_options.js +428 -0
  27. package/app/modules/vgtable/js/_pagination.js +491 -0
  28. package/app/modules/vgtable/js/_panning.js +124 -0
  29. package/app/modules/vgtable/js/_params-groups.js +21 -0
  30. package/app/modules/vgtable/js/_remote.js +395 -0
  31. package/app/modules/vgtable/js/_row-reorder.js +268 -0
  32. package/app/modules/vgtable/js/_search.js +134 -0
  33. package/app/modules/vgtable/js/_selection.js +113 -0
  34. package/app/modules/vgtable/js/_skeleton.js +123 -0
  35. package/app/modules/vgtable/js/_sorting.js +340 -0
  36. package/app/modules/vgtable/js/_states.js +143 -0
  37. package/app/modules/vgtable/js/_sticky-header.js +193 -0
  38. package/app/modules/vgtable/js/_url-state.js +178 -0
  39. package/app/modules/vgtable/js/vgtable.js +1444 -0
  40. package/app/modules/vgtable/readme.md +922 -0
  41. package/app/modules/vgtable/scss/_columns.scss +52 -0
  42. package/app/modules/vgtable/scss/_expandable.scss +54 -0
  43. package/app/modules/vgtable/scss/_fixed-columns.scss +117 -0
  44. package/app/modules/vgtable/scss/_pagination.scss +191 -0
  45. package/app/modules/vgtable/scss/_row-reorder.scss +45 -0
  46. package/app/modules/vgtable/scss/_skeleton.scss +65 -0
  47. package/app/modules/vgtable/scss/_sorting.scss +89 -0
  48. package/app/modules/vgtable/scss/_states.scss +70 -0
  49. package/app/modules/vgtable/scss/_sticky-header.scss +121 -0
  50. package/app/modules/vgtable/scss/_variables.scss +296 -0
  51. package/app/modules/vgtable/scss/vgtable.scss +206 -0
  52. package/app/utils/js/components/placement.js +64 -10
  53. package/app/vgapp.js +3 -3
  54. package/build/vgapp.css +1 -1
  55. package/build/vgapp.css.map +1 -1
  56. package/build/vgapp.js +1 -1
  57. package/build/vgapp.js.map +1 -1
  58. package/index.js +1 -1
  59. package/index.scss +3 -3
  60. package/package.json +5 -5
  61. package/app/modules/vgdynamictable/index.js +0 -4
  62. package/app/modules/vgdynamictable/js/editable.js +0 -438
  63. package/app/modules/vgdynamictable/js/expandable.js +0 -248
  64. package/app/modules/vgdynamictable/js/filters.js +0 -450
  65. package/app/modules/vgdynamictable/js/fixed.js +0 -566
  66. package/app/modules/vgdynamictable/js/options.js +0 -650
  67. package/app/modules/vgdynamictable/js/pagination.js +0 -623
  68. package/app/modules/vgdynamictable/js/search.js +0 -82
  69. package/app/modules/vgdynamictable/js/skeleton.js +0 -144
  70. package/app/modules/vgdynamictable/js/sortable.js +0 -442
  71. package/app/modules/vgdynamictable/js/summary-footer.js +0 -284
  72. package/app/modules/vgdynamictable/js/table-remote.js +0 -821
  73. package/app/modules/vgdynamictable/js/table-state.js +0 -243
  74. package/app/modules/vgdynamictable/js/table-url-state.js +0 -444
  75. package/app/modules/vgdynamictable/js/utils/common.js +0 -48
  76. package/app/modules/vgdynamictable/js/vgdynamictable.js +0 -3870
  77. package/app/modules/vgdynamictable/js/viewport.js +0 -322
  78. package/app/modules/vgdynamictable/readme.md +0 -251
  79. package/app/modules/vgdynamictable/scss/_actions.scss +0 -196
  80. package/app/modules/vgdynamictable/scss/_pagination.scss +0 -186
  81. package/app/modules/vgdynamictable/scss/_skeleton.scss +0 -63
  82. package/app/modules/vgdynamictable/scss/_sortable.scss +0 -66
  83. package/app/modules/vgdynamictable/scss/_table.scss +0 -137
  84. package/app/modules/vgdynamictable/scss/_variables.scss +0 -138
  85. package/app/modules/vgdynamictable/scss/vgdynamictable.scss +0 -264
@@ -0,0 +1,52 @@
1
+ @mixin styles {
2
+ .vg-table-column-resize-handle {
3
+ position: absolute;
4
+ z-index: var(--vg-table-columns-resize-z-index);
5
+ inset-block: 0;
6
+ inset-inline-end: calc(var(--vg-table-columns-resize-hit-area) / -2);
7
+ width: var(--vg-table-columns-resize-hit-area);
8
+ cursor: col-resize;
9
+ touch-action: none;
10
+ }
11
+
12
+ .vg-table-column-resize-handle::after {
13
+ content: "";
14
+ position: absolute;
15
+ inset-block: var(--vg-table-columns-resize-line-inset);
16
+ inset-inline-start: 50%;
17
+ width: var(--vg-table-columns-resize-line-width);
18
+ background: var(--vg-table-columns-resize-line-color);
19
+ opacity: 0;
20
+ transform: translateX(-50%);
21
+ transition: opacity var(--vg-table-transition);
22
+ }
23
+
24
+ .vg-table th:hover > .vg-table-column-resize-handle::after,
25
+ &--column-resizing .vg-table-column-resize-handle::after {
26
+ opacity: 1;
27
+ }
28
+
29
+ .vg-table [data-vg-table-column-reorder="enabled"] {
30
+ cursor: grab;
31
+ }
32
+
33
+ .vg-table [data-vg-table-column-reorder="locked"] {
34
+ cursor: default;
35
+ }
36
+
37
+ .vg-table [data-vg-table-column-dragging] {
38
+ opacity: var(--vg-table-columns-drag-opacity);
39
+ cursor: grabbing;
40
+ }
41
+
42
+ .vg-table [data-vg-table-column-drag-over] {
43
+ outline: var(--vg-table-columns-drag-outline-width) dashed var(--vg-table-columns-drag-outline-color);
44
+ outline-offset: calc(var(--vg-table-columns-drag-outline-width) * -1);
45
+ }
46
+
47
+ &--column-resizing,
48
+ &--column-resizing * {
49
+ cursor: col-resize !important;
50
+ user-select: none !important;
51
+ }
52
+ }
@@ -0,0 +1,54 @@
1
+ @mixin styles {
2
+ &.vg-table-expandable {
3
+ tbody tr[data-expand-depth] > td:first-child::before {
4
+ content: '';
5
+ display: inline-block;
6
+ width: calc(var(--vg-table-expandable-depth, 0) * var(--vg-table-expandable-indent));
7
+ height: 1px;
8
+ vertical-align: middle;
9
+ }
10
+ }
11
+
12
+ .vg-table-expandable__toggle {
13
+ position: relative;
14
+ display: inline-flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ width: var(--vg-table-expandable-toggle-size);
18
+ height: var(--vg-table-expandable-toggle-size);
19
+ margin-inline-end: var(--vg-table-expandable-toggle-margin-inline-end);
20
+ padding: 0;
21
+ border: var(--vg-table-expandable-toggle-border-width) var(--vg-table-expandable-toggle-border-style) var(--vg-table-expandable-toggle-border-color);
22
+ border-radius: var(--vg-table-expandable-toggle-radius);
23
+ background: var(--vg-table-expandable-toggle-bg);
24
+ color: var(--vg-table-expandable-toggle-color);
25
+ vertical-align: middle;
26
+ cursor: pointer;
27
+
28
+ &::before,
29
+ &::after {
30
+ content: '';
31
+ position: absolute;
32
+ width: var(--vg-table-expandable-toggle-icon-size);
33
+ height: var(--vg-table-expandable-toggle-icon-width);
34
+ background: currentColor;
35
+ }
36
+
37
+ &::after {
38
+ transform: rotate(90deg);
39
+ }
40
+
41
+ &[aria-expanded='true']::after {
42
+ display: none;
43
+ }
44
+
45
+ &:focus-visible {
46
+ outline: var(--vg-table-expandable-toggle-focus-outline);
47
+ outline-offset: var(--vg-table-expandable-toggle-focus-outline-offset);
48
+ }
49
+
50
+ &[hidden] {
51
+ display: none;
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,117 @@
1
+ @mixin styles {
2
+ // У обычной таблицы внешний clip принадлежит обязательному container.
3
+ // Fixed Header исключён: его углы формируют отдельные header/body слои.
4
+ &.vg-table-wrapper--fixed-columns:not(.vg-table-wrapper--sticky-container):not(.vg-table-wrapper--sticky-page) {
5
+ // Реальный внешний clip нужен, иначе под радиусом перемещённого th
6
+ // продолжает просвечивать прямоугольный фон широкой таблицы.
7
+ > .vg-table-container {
8
+ border-radius: var(--vg-table-fixed-radius);
9
+
10
+ > .vg-table {
11
+ --vg-table-fixed-inner-radius: max(0px, calc(var(--vg-table-radius) - var(--vg-table-border-width)));
12
+
13
+ thead > tr:first-child {
14
+ > th:first-child {
15
+ border-start-start-radius: var(--vg-table-fixed-inner-radius);
16
+ }
17
+
18
+ > th:last-child {
19
+ border-start-end-radius: var(--vg-table-fixed-inner-radius);
20
+ }
21
+ }
22
+ }
23
+ }
24
+ }
25
+
26
+ [data-vg-table-fixed-side] {
27
+ position: sticky;
28
+ z-index: var(--vg-table-fixed-z-index);
29
+ opacity: 1;
30
+ background-color: var(--vg-table-fixed-cell-bg);
31
+ background-image: none;
32
+ background-clip: padding-box;
33
+ transition: none;
34
+ }
35
+
36
+ // Перекрывает базовый position: relative у th, сохраняя positioned-контекст разделителя.
37
+ thead tr > [data-vg-table-fixed-side],
38
+ tfoot tr > [data-vg-table-fixed-side] {
39
+ position: sticky;
40
+ }
41
+
42
+ thead tr > [data-vg-table-fixed-side] {
43
+ z-index: var(--vg-table-fixed-header-z-index);
44
+ opacity: 1;
45
+ background-color: var(--vg-table-fixed-header-bg);
46
+ background-image: none;
47
+ }
48
+
49
+ [data-vg-table-fixed-side="left"] {
50
+ inset-inline-start: var(--vg-table-fixed-offset);
51
+ }
52
+
53
+ [data-vg-table-fixed-side="right"] {
54
+ inset-inline-end: var(--vg-table-fixed-offset);
55
+ }
56
+
57
+ tbody tr > [data-vg-table-fixed-side],
58
+ tfoot tr > [data-vg-table-fixed-side] {
59
+ background-color: var(--vg-table-fixed-cell-bg);
60
+ background-image: none;
61
+ }
62
+
63
+ .vg-table-striped tbody tr:nth-child(even) > [data-vg-table-fixed-side] {
64
+ background-color: var(--vg-table-fixed-cell-bg);
65
+ background-image: linear-gradient(var(--vg-table-tbody-bg-striped), var(--vg-table-tbody-bg-striped));
66
+ }
67
+
68
+ .vg-table-hovered tbody tr:hover > [data-vg-table-fixed-side] {
69
+ background-color: var(--vg-table-fixed-cell-bg);
70
+ background-image: linear-gradient(var(--vg-table-tbody-bg-hovered), var(--vg-table-tbody-bg-hovered));
71
+ }
72
+
73
+ tbody tr.vg-table-row-selected > [data-vg-table-fixed-side] {
74
+ background-color: var(--vg-table-fixed-cell-bg);
75
+ background-image: linear-gradient(var(--vg-table-selection-row-background), var(--vg-table-selection-row-background));
76
+ }
77
+
78
+ tbody tr.vg-table-row-selected:hover > [data-vg-table-fixed-side] {
79
+ background-color: var(--vg-table-fixed-cell-bg);
80
+ background-image: linear-gradient(var(--vg-table-selection-row-background-hovered), var(--vg-table-selection-row-background-hovered));
81
+ }
82
+
83
+ [data-vg-table-fixed-edge]::after {
84
+ content: "";
85
+ position: absolute;
86
+ top: 0;
87
+ bottom: calc(var(--vg-table-border-width) * -1);
88
+ width: var(--vg-table-fixed-shadow-size);
89
+ pointer-events: none;
90
+ opacity: 0;
91
+ }
92
+
93
+ [data-vg-table-fixed-edge="left"]::after {
94
+ inset-inline-end: calc(var(--vg-table-fixed-shadow-size) * -1);
95
+ box-shadow: inset var(--vg-table-fixed-shadow-size) 0 var(--vg-table-fixed-shadow-blur) calc(var(--vg-table-fixed-shadow-spread) * -1) var(--vg-table-fixed-shadow-color);
96
+ }
97
+
98
+ [data-vg-table-fixed-edge="right"]::after {
99
+ inset-inline-start: calc(var(--vg-table-fixed-shadow-size) * -1);
100
+ box-shadow: inset calc(var(--vg-table-fixed-shadow-size) * -1) 0 var(--vg-table-fixed-shadow-blur) calc(var(--vg-table-fixed-shadow-spread) * -1) var(--vg-table-fixed-shadow-color);
101
+ }
102
+
103
+ &.is-vg-table-fixed-scrolled-start [data-vg-table-fixed-edge="left"]::after,
104
+ &.is-vg-table-fixed-scrolled-end [data-vg-table-fixed-edge="right"]::after {
105
+ opacity: 1;
106
+ }
107
+
108
+ // Радиус принадлежит настоящему краю таблицы и не должен ехать вместе
109
+ // с fixed-ячейкой, пока горизонтальная прокрутка не достигла этого края.
110
+ &.is-vg-table-fixed-scrolled-start {
111
+ --vg-table-sticky-edge-start-radius: 0px;
112
+ }
113
+
114
+ &.is-vg-table-fixed-scrolled-end {
115
+ --vg-table-sticky-edge-end-radius: 0px;
116
+ }
117
+ }
@@ -0,0 +1,191 @@
1
+ @mixin styles {
2
+ .vg-table-pagination {
3
+ padding: var(--vg-table-pagination-padding-block) var(--vg-table-pagination-padding-inline);
4
+
5
+ &--top {
6
+ border-top: 0;
7
+ border-bottom: var(--vg-table-pagination-border-width) var(--vg-table-pagination-border-style) var(--vg-table-pagination-border-color);
8
+ }
9
+
10
+ &__inner {
11
+ display: flex;
12
+ align-items: center;
13
+ gap: var(--vg-table-pagination-gap);
14
+ flex-wrap: wrap;
15
+
16
+ &--center { justify-content: center; }
17
+ &--right { justify-content: flex-end; }
18
+ &--between { justify-content: space-between; }
19
+ }
20
+
21
+ &__size,
22
+ &__quick,
23
+ &__pages {
24
+ display: inline-flex;
25
+ align-items: center;
26
+ gap: var(--vg-table-pagination-control-gap);
27
+ }
28
+
29
+ &__size {
30
+ color: var(--vg-table-pagination-text);
31
+ font-size: var(--vg-table-pagination-font-size);
32
+ }
33
+
34
+ &__size-heading {
35
+ color: var(--vg-table-pagination-heading-color);
36
+ font-size: var(--vg-table-pagination-heading-font-size);
37
+ font-weight: var(--vg-table-pagination-heading-font-weight);
38
+ line-height: var(--vg-table-pagination-heading-line-height);
39
+ white-space: nowrap;
40
+ }
41
+
42
+ input {
43
+ height: var(--vg-table-pagination-control-size);
44
+ padding-inline: var(--vg-table-pagination-control-padding-inline);
45
+ border: var(--vg-table-pagination-border-width) var(--vg-table-pagination-border-style) var(--vg-table-pagination-border-color);
46
+ border-radius: var(--vg-table-pagination-radius);
47
+ background: var(--vg-table-bg);
48
+ color: var(--vg-table-pagination-text);
49
+ font: inherit;
50
+ }
51
+
52
+
53
+ &__quick input { width: var(--vg-table-pagination-quick-width); }
54
+
55
+ &__size-control {
56
+ position: relative;
57
+ display: inline-flex;
58
+ align-items: center;
59
+ }
60
+
61
+ &__size-control [data-pagination-per-page] {
62
+ min-width: var(--vg-table-pagination-size-width);
63
+ padding-inline-end: calc(var(--vg-table-pagination-control-padding-inline) + 1.25rem);
64
+ }
65
+
66
+ &__size-chevron {
67
+ position: absolute;
68
+ inset-inline-end: .625rem;
69
+ top: 50%;
70
+ transform: translateY(-50%);
71
+ pointer-events: none;
72
+ transition: transform var(--vg-table-transition);
73
+
74
+ svg {
75
+ display: block;
76
+ width: .875rem;
77
+ height: .875rem;
78
+ }
79
+
80
+ path {
81
+ fill: none;
82
+ stroke: currentColor;
83
+ stroke-width: 1.9;
84
+ stroke-linecap: round;
85
+ stroke-linejoin: round;
86
+ }
87
+ }
88
+
89
+ &__size-control [data-pagination-per-page].show + &__size-chevron {
90
+ transform: translateY(-50%) rotate(180deg);
91
+ }
92
+
93
+ &__size-dropdown { min-width: var(--vg-table-pagination-size-dropdown-width); }
94
+
95
+ &__size-option {
96
+ display: block;
97
+ width: 100%;
98
+ padding: .5rem .625rem;
99
+ border: 0;
100
+ background: transparent;
101
+ color: var(--vg-table-pagination-text);
102
+ text-align: start;
103
+ cursor: pointer;
104
+
105
+ &:hover { background: var(--vg-table-pagination-option-hover-bg); }
106
+ }
107
+
108
+ &__sr-only {
109
+ position: absolute;
110
+ width: 1px;
111
+ height: 1px;
112
+ padding: 0;
113
+ margin: -1px;
114
+ overflow: hidden;
115
+ clip: rect(0, 0, 0, 0);
116
+ white-space: nowrap;
117
+ border: 0;
118
+ }
119
+ }
120
+
121
+ .vg-table-page {
122
+ min-width: var(--vg-table-pagination-control-size);
123
+ height: var(--vg-table-pagination-control-size);
124
+ padding-inline: var(--vg-table-pagination-button-padding-inline);
125
+ border: var(--vg-table-pagination-border-width) var(--vg-table-pagination-border-style) var(--vg-table-pagination-border-color);
126
+ border-radius: var(--vg-table-pagination-radius);
127
+ background: var(--vg-table-bg);
128
+ color: var(--vg-table-pagination-text);
129
+ font: inherit;
130
+ cursor: pointer;
131
+ transition: var(--vg-table-transition);
132
+
133
+ &:hover:not(:disabled):not(.is-active) {
134
+ border-color: var(--vg-table-pagination-active-bg);
135
+ color: var(--vg-table-pagination-active-bg);
136
+ }
137
+
138
+ &.is-active {
139
+ border-color: var(--vg-table-pagination-active-bg);
140
+ background: var(--vg-table-pagination-active-bg);
141
+ color: var(--vg-table-pagination-active-text);
142
+ }
143
+
144
+ &:disabled {
145
+ opacity: var(--vg-table-pagination-disabled-opacity);
146
+ cursor: not-allowed;
147
+ }
148
+
149
+ &--quick { min-width: auto; }
150
+
151
+ &__chevron {
152
+ display: block;
153
+ width: var(--vg-table-pagination-chevron-size);
154
+ height: var(--vg-table-pagination-chevron-size);
155
+ margin-inline: auto;
156
+
157
+ path {
158
+ fill: none;
159
+ stroke: currentColor;
160
+ stroke-width: var(--vg-table-pagination-chevron-stroke-width);
161
+ stroke-linecap: round;
162
+ stroke-linejoin: round;
163
+ }
164
+ }
165
+
166
+ &__ellipsis-chevron {
167
+ display: none;
168
+ width: var(--vg-table-pagination-chevron-size);
169
+ height: var(--vg-table-pagination-chevron-size);
170
+ margin-inline: auto;
171
+
172
+ path {
173
+ fill: none;
174
+ stroke: currentColor;
175
+ stroke-width: var(--vg-table-pagination-chevron-stroke-width);
176
+ stroke-linecap: round;
177
+ stroke-linejoin: round;
178
+ }
179
+ }
180
+
181
+ &--ellipsis-hover:hover &__ellipsis-dots,
182
+ &--ellipsis-hover:focus-visible &__ellipsis-dots {
183
+ display: none;
184
+ }
185
+
186
+ &--ellipsis-hover:hover &__ellipsis-chevron,
187
+ &--ellipsis-hover:focus-visible &__ellipsis-chevron {
188
+ display: block;
189
+ }
190
+ }
191
+ }
@@ -0,0 +1,45 @@
1
+ @mixin styles {
2
+ .vg-table-row-reorder-handle,
3
+ [data-row-reorder-handle] {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ inline-size: var(--vg-table-row-reorder-handle-size);
8
+ block-size: var(--vg-table-row-reorder-handle-size);
9
+ cursor: grab;
10
+ user-select: none;
11
+ touch-action: none;
12
+
13
+ &:focus-visible {
14
+ outline: var(--vg-table-row-reorder-focus-outline);
15
+ outline-offset: var(--vg-table-row-reorder-focus-outline-offset);
16
+ }
17
+ }
18
+
19
+ tr[data-vg-table-row-reorder="row"] {
20
+ cursor: grab;
21
+ }
22
+
23
+ tr[data-vg-table-row-reorder="disabled"] [data-row-reorder-handle] {
24
+ cursor: not-allowed;
25
+ opacity: var(--vg-table-row-reorder-disabled-opacity);
26
+ }
27
+
28
+ tr[data-vg-table-row-dragging] > * {
29
+ opacity: var(--vg-table-row-reorder-drag-opacity);
30
+ }
31
+
32
+ tr[data-vg-table-row-drag-over="before"] > * {
33
+ box-shadow: inset 0 var(--vg-table-row-reorder-indicator-width) 0 var(--vg-table-row-reorder-indicator-color);
34
+ }
35
+
36
+ tr[data-vg-table-row-drag-over="after"] > * {
37
+ box-shadow: inset 0 calc(var(--vg-table-row-reorder-indicator-width) * -1) 0 var(--vg-table-row-reorder-indicator-color);
38
+ }
39
+
40
+ &.vg-table-wrapper--row-dragging,
41
+ &.vg-table-wrapper--row-dragging * {
42
+ cursor: grabbing;
43
+ user-select: none;
44
+ }
45
+ }
@@ -0,0 +1,65 @@
1
+ @mixin styles {
2
+ .vg-table-skeleton-row {
3
+ height: var(--vg-table-skeleton-row-height, auto);
4
+ background: var(--vg-table-skeleton-row-bg);
5
+ transition: none;
6
+
7
+ > td {
8
+ height: var(--vg-table-skeleton-row-height, auto);
9
+ padding: var(--vg-table-skeleton-padding-block) var(--vg-table-skeleton-padding-inline);
10
+ border-bottom-color: var(--vg-table-skeleton-border-color);
11
+ background: var(--vg-table-skeleton-row-bg);
12
+ }
13
+ }
14
+
15
+ .vg-table-skeleton-cell {
16
+ display: flex;
17
+ width: 100%;
18
+ min-height: var(--vg-table-skeleton-content-height);
19
+ align-items: center;
20
+ }
21
+
22
+ .vg-table-skeleton-line {
23
+ position: relative;
24
+ display: block;
25
+ width: 100%;
26
+ height: var(--vg-table-skeleton-line-height);
27
+ overflow: hidden;
28
+ border-radius: var(--vg-table-skeleton-radius);
29
+ background: linear-gradient(
30
+ 90deg,
31
+ var(--vg-table-skeleton-gradient-1) 25%,
32
+ var(--vg-table-skeleton-gradient-2) 50%,
33
+ var(--vg-table-skeleton-gradient-1) 75%
34
+ );
35
+ background-size: 160% 100%;
36
+ animation: vg-table-skeleton-shimmer var(--vg-table-skeleton-duration) ease-in-out infinite;
37
+ animation-delay: var(--vg-table-skeleton-delay, 0s);
38
+
39
+ &::after {
40
+ position: absolute;
41
+ inset: 0;
42
+ background: linear-gradient(110deg, transparent 0%, var(--vg-table-skeleton-glow) 45%, transparent 100%);
43
+ content: '';
44
+ transform: translateX(-120%);
45
+ animation: vg-table-skeleton-glow calc(var(--vg-table-skeleton-duration) * 1.15) linear infinite;
46
+ animation-delay: var(--vg-table-skeleton-delay, 0s);
47
+ }
48
+ }
49
+
50
+ @media (prefers-reduced-motion: reduce) {
51
+ .vg-table-skeleton-line,
52
+ .vg-table-skeleton-line::after {
53
+ animation: none;
54
+ }
55
+ }
56
+ }
57
+
58
+ @keyframes vg-table-skeleton-shimmer {
59
+ 0% { background-position: 160% 0; }
60
+ 100% { background-position: -160% 0; }
61
+ }
62
+
63
+ @keyframes vg-table-skeleton-glow {
64
+ 100% { transform: translateX(120%); }
65
+ }
@@ -0,0 +1,89 @@
1
+ @mixin styles {
2
+ tr {
3
+ > th.vg-table-sortable {
4
+ padding-inline-end: var(--vg-table-sort-padding-inline-end);
5
+ cursor: var(--vg-table-sort-cursor);
6
+ user-select: var(--vg-table-sort-user-select);
7
+
8
+ .vg-table-sort-controls {
9
+ position: var(--vg-table-sort-controls-position);
10
+ inset-inline-end: var(--vg-table-sort-controls-inset-inline-end);
11
+ top: var(--vg-table-sort-controls-top);
12
+ display: var(--vg-table-sort-controls-display);
13
+ flex-direction: var(--vg-table-sort-controls-flex-direction);
14
+ gap: var(--vg-table-sort-controls-gap);
15
+ transform: var(--vg-table-sort-controls-transform);
16
+ pointer-events: var(--vg-table-sort-controls-pointer-events);
17
+ transition: var(--vg-table-sort-controls-transition);
18
+ }
19
+
20
+ .vg-table-sort-chevron {
21
+ display: var(--vg-table-sort-chevron-display);
22
+ width: var(--vg-table-sort-chevron-width);
23
+ height: var(--vg-table-sort-chevron-height);
24
+ border-inline-end: var(--vg-table-sort-chevron-border-width) var(--vg-table-sort-chevron-border-style) var(--vg-table-sort-chevron-border-color);
25
+ border-block-end: var(--vg-table-sort-chevron-border-width) var(--vg-table-sort-chevron-border-style) var(--vg-table-sort-chevron-border-color);
26
+ opacity: var(--vg-table-sort-chevron-opacity);
27
+ transition: var(--vg-table-sort-chevron-transition);
28
+ }
29
+
30
+ .vg-table-sort-priority {
31
+ position: var(--vg-table-sort-priority-position);
32
+ inset-inline-end: var(--vg-table-sort-priority-inset-inline-end);
33
+ top: var(--vg-table-sort-priority-top);
34
+ min-width: var(--vg-table-sort-priority-min-width);
35
+ height: var(--vg-table-sort-priority-height);
36
+ padding-inline: var(--vg-table-sort-priority-padding-inline);
37
+ border-radius: var(--vg-table-sort-priority-radius);
38
+ background: var(--vg-table-sort-priority-bg);
39
+ color: var(--vg-table-sort-priority-color);
40
+ font-size: var(--vg-table-sort-priority-font-size);
41
+ font-weight: var(--vg-table-sort-priority-font-weight);
42
+ line-height: var(--vg-table-sort-priority-height);
43
+ text-align: center;
44
+ transform: var(--vg-table-sort-priority-transform);
45
+ }
46
+
47
+ .vg-table-sort-chevron-asc {
48
+ transform: var(--vg-table-sort-chevron-asc-transform);
49
+ }
50
+
51
+ .vg-table-sort-chevron-desc {
52
+ transform: var(--vg-table-sort-chevron-desc-transform);
53
+ }
54
+
55
+ &[data-sort-direction="asc"] .vg-table-sort-chevron-asc,
56
+ &[data-sort-direction="desc"] .vg-table-sort-chevron-desc {
57
+ opacity: var(--vg-table-sort-chevron-active-opacity);
58
+ }
59
+
60
+ &:focus-visible {
61
+ outline: var(--vg-table-sort-focus-outline);
62
+ outline-offset: var(--vg-table-sort-focus-outline-offset);
63
+ }
64
+ }
65
+
66
+ > [data-sorted-column="1"] {
67
+ background-color: var(--vg-table-sort-column-background);
68
+ }
69
+ }
70
+
71
+ &.vg-table-sort-multiple tr > th.vg-table-sortable {
72
+ padding-inline-end: var(--vg-table-sort-multiple-padding-inline-end);
73
+ }
74
+
75
+ &.vg-table-sort-hover {
76
+ .vg-table-sortable:not([data-sort-direction]) {
77
+ .vg-table-sort-controls {
78
+ opacity: var(--vg-table-sort-controls-hidden-opacity);
79
+ }
80
+
81
+ &:hover,
82
+ &:focus-visible {
83
+ .vg-table-sort-controls {
84
+ opacity: var(--vg-table-sort-controls-visible-opacity);
85
+ }
86
+ }
87
+ }
88
+ }
89
+ }
@@ -0,0 +1,70 @@
1
+ @mixin styles {
2
+ tbody tr[data-vg-table-state-row] {
3
+ background: var(--vg-table-state-bg);
4
+
5
+ > td[data-vg-table-state] {
6
+ padding: var(--vg-table-state-padding-block) var(--vg-table-state-padding-inline);
7
+ min-height: var(--vg-table-state-min-height);
8
+ border-bottom: 0;
9
+ color: var(--vg-table-state-text);
10
+ text-align: center;
11
+ }
12
+ }
13
+
14
+ .vg-table-state {
15
+ display: flex;
16
+ min-height: var(--vg-table-state-min-height);
17
+ align-items: center;
18
+ justify-content: center;
19
+ flex-direction: column;
20
+ gap: var(--vg-table-state-gap);
21
+ }
22
+
23
+ .vg-table-state__icon {
24
+ display: grid;
25
+ width: var(--vg-table-state-icon-size);
26
+ height: var(--vg-table-state-icon-size);
27
+ place-items: center;
28
+ border: var(--vg-table-state-icon-border-width) solid currentColor;
29
+ border-radius: 50%;
30
+ color: var(--vg-table-state-icon-color);
31
+ opacity: var(--vg-table-state-icon-opacity);
32
+
33
+ &::before {
34
+ content: "—";
35
+ font-weight: 700;
36
+ }
37
+
38
+ &--filtered-empty::before {
39
+ content: "×";
40
+ }
41
+
42
+ &--error::before {
43
+ content: "!";
44
+ }
45
+ }
46
+
47
+ .vg-table-state__text {
48
+ font-size: var(--vg-table-state-font-size);
49
+ font-weight: var(--vg-table-state-font-weight);
50
+ }
51
+
52
+ .vg-table-state__actions {
53
+ display: flex;
54
+ justify-content: center;
55
+ }
56
+
57
+ .vg-table-state__action {
58
+ padding: var(--vg-table-state-action-padding-block) var(--vg-table-state-action-padding-inline);
59
+ border: var(--vg-table-state-action-border-width) solid var(--vg-table-state-action-border-color);
60
+ border-radius: var(--vg-table-state-action-radius);
61
+ background: var(--vg-table-state-action-bg);
62
+ color: var(--vg-table-state-action-text);
63
+ cursor: pointer;
64
+
65
+ &:hover,
66
+ &:focus-visible {
67
+ background: var(--vg-table-state-action-bg-hover);
68
+ }
69
+ }
70
+ }