@coreui/data-grid 0.1.0-rc.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.
- package/LICENSE +3 -0
- package/README.md +37 -0
- package/dist/css/data-grid.css +444 -0
- package/dist/css/data-grid.css.map +1 -0
- package/dist/css/data-grid.min.css +5 -0
- package/dist/css/data-grid.min.css.map +1 -0
- package/dist/js/csv.cjs +68 -0
- package/dist/js/csv.cjs.map +1 -0
- package/dist/js/csv.mjs +63 -0
- package/dist/js/csv.mjs.map +1 -0
- package/dist/js/data-grid.esm.js +9618 -0
- package/dist/js/data-grid.esm.js.map +1 -0
- package/dist/js/data-grid.esm.min.js +8 -0
- package/dist/js/data-grid.esm.min.js.map +1 -0
- package/dist/js/data-grid.js +9635 -0
- package/dist/js/data-grid.js.map +1 -0
- package/dist/js/data-grid.min.js +8 -0
- package/dist/js/data-grid.min.js.map +1 -0
- package/dist/js/data-grid.mjs +9618 -0
- package/dist/js/data-grid.mjs.map +1 -0
- package/dist/js/filters.cjs +143 -0
- package/dist/js/filters.cjs.map +1 -0
- package/dist/js/filters.mjs +137 -0
- package/dist/js/filters.mjs.map +1 -0
- package/dist/js/labels.cjs +76 -0
- package/dist/js/labels.cjs.map +1 -0
- package/dist/js/labels.mjs +71 -0
- package/dist/js/labels.mjs.map +1 -0
- package/dist/types/base-component.d.ts +19 -0
- package/dist/types/data-grid.d.ts +128 -0
- package/dist/types/dom/event-handler.d.ts +11 -0
- package/dist/types/dom/manipulator.d.ts +9 -0
- package/dist/types/engine/active-cell.d.ts +32 -0
- package/dist/types/engine/data-source.d.ts +19 -0
- package/dist/types/engine/scheduler.d.ts +11 -0
- package/dist/types/engine/table.d.ts +9 -0
- package/dist/types/engine/virtualizer.d.ts +21 -0
- package/dist/types/filters.d.mts +1 -0
- package/dist/types/filters.d.ts +13 -0
- package/dist/types/icons.d.ts +21 -0
- package/dist/types/index.d.mts +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/labels.d.mts +1 -0
- package/dist/types/labels.d.ts +9 -0
- package/dist/types/types.d.ts +262 -0
- package/dist/types/ui/body.d.ts +34 -0
- package/dist/types/ui/column-chooser.d.ts +27 -0
- package/dist/types/ui/editor.d.ts +8 -0
- package/dist/types/ui/filter-menu.d.ts +21 -0
- package/dist/types/ui/header.d.ts +50 -0
- package/dist/types/ui/loading.d.ts +12 -0
- package/dist/types/ui/menu.d.ts +17 -0
- package/dist/types/ui/pagination.d.ts +17 -0
- package/dist/types/ui/pinning.d.ts +17 -0
- package/dist/types/ui/toolbar.d.ts +34 -0
- package/dist/types/ui/tooltip.d.ts +10 -0
- package/dist/types/util/config.d.ts +11 -0
- package/dist/types/util/csv.d.mts +1 -0
- package/dist/types/util/csv.d.ts +19 -0
- package/dist/types/util/debounce.d.ts +7 -0
- package/dist/types/util/index.d.ts +10 -0
- package/dist/types/util/sanitizer.d.ts +11 -0
- package/package.json +147 -0
- package/scss/data-grid.scss +559 -0
- package/src/base-component.d.ts +19 -0
- package/src/base-component.js +90 -0
- package/src/data-grid.ts +2208 -0
- package/src/dom/data.js +59 -0
- package/src/dom/event-handler.d.ts +11 -0
- package/src/dom/event-handler.js +331 -0
- package/src/dom/manipulator.d.ts +9 -0
- package/src/dom/manipulator.js +75 -0
- package/src/engine/active-cell.ts +195 -0
- package/src/engine/data-source.ts +63 -0
- package/src/engine/scheduler.ts +42 -0
- package/src/engine/table.ts +122 -0
- package/src/engine/virtualizer.ts +57 -0
- package/src/filters.ts +176 -0
- package/src/icons.ts +60 -0
- package/src/index.ts +56 -0
- package/src/labels.ts +70 -0
- package/src/types.ts +334 -0
- package/src/ui/body.ts +348 -0
- package/src/ui/column-chooser.ts +183 -0
- package/src/ui/editor.ts +98 -0
- package/src/ui/filter-menu.ts +398 -0
- package/src/ui/header.ts +441 -0
- package/src/ui/loading.ts +39 -0
- package/src/ui/menu.ts +218 -0
- package/src/ui/pagination.ts +150 -0
- package/src/ui/pinning.ts +53 -0
- package/src/ui/toolbar.ts +144 -0
- package/src/ui/tooltip.ts +113 -0
- package/src/util/config.d.ts +11 -0
- package/src/util/config.js +69 -0
- package/src/util/csv.ts +85 -0
- package/src/util/debounce.ts +18 -0
- package/src/util/index.d.ts +10 -0
- package/src/util/index.js +310 -0
- package/src/util/sanitizer.d.ts +11 -0
- package/src/util/sanitizer.js +162 -0
package/LICENSE
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# @coreui/data-grid
|
|
2
|
+
|
|
3
|
+
High-performance vanilla JavaScript data grid for CoreUI, built on
|
|
4
|
+
`@tanstack/table-core` and `@tanstack/virtual-core` (bundled, no extra setup).
|
|
5
|
+
|
|
6
|
+
Requires the CoreUI stylesheet (`@coreui/coreui` or `@coreui/coreui-pro` ≥ 5)
|
|
7
|
+
for the base `.table` styles.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<div id="grid"></div>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```js
|
|
16
|
+
import { DataGrid } from '@coreui/data-grid'
|
|
17
|
+
import '@coreui/data-grid/dist/css/data-grid.css'
|
|
18
|
+
|
|
19
|
+
new DataGrid(document.getElementById('grid'), {
|
|
20
|
+
columns: [
|
|
21
|
+
{ key: 'name', label: 'Name' },
|
|
22
|
+
{ key: 'role', label: 'Role' }
|
|
23
|
+
],
|
|
24
|
+
items: [
|
|
25
|
+
{ name: 'Alice', role: 'admin' },
|
|
26
|
+
{ name: 'Bob', role: 'user' }
|
|
27
|
+
],
|
|
28
|
+
itemKey: item => item.name
|
|
29
|
+
})
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Or with the UMD bundle: `new coreui.DataGrid(element, options)`.
|
|
33
|
+
|
|
34
|
+
## License
|
|
35
|
+
|
|
36
|
+
Commercial — see [LICENSE](LICENSE). Bundles TanStack Table and TanStack
|
|
37
|
+
Virtual (MIT).
|
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* CoreUI PRO data-grid.scss v0.1.0
|
|
3
|
+
* License (https://coreui.io/pro/license/)
|
|
4
|
+
*/
|
|
5
|
+
.data-grid {
|
|
6
|
+
position: relative;
|
|
7
|
+
--cui-data-grid-viewport-max-height: 30rem;
|
|
8
|
+
--cui-data-grid-header-bg: var(--cui-body-bg, #fff);
|
|
9
|
+
--cui-data-grid-header-shadow: inset 0 calc(-1 * var(--cui-border-width, 1px)) 0 var(--cui-border-color, #dee2e6);
|
|
10
|
+
--cui-data-grid-select-cell-width: 2.5rem;
|
|
11
|
+
--cui-data-grid-sorter-margin: .25rem;
|
|
12
|
+
--cui-data-grid-sorter-opacity: .3;
|
|
13
|
+
--cui-data-grid-spacing: .5rem;
|
|
14
|
+
--cui-data-grid-resizer-width: .625rem;
|
|
15
|
+
--cui-data-grid-resizer-grip-height: 60%;
|
|
16
|
+
--cui-data-grid-resizer-grip-color: var(--cui-border-color, #dee2e6);
|
|
17
|
+
--cui-data-grid-resizer-grip-color-hover: var(--cui-secondary-color, #6c757d);
|
|
18
|
+
--cui-data-grid-pinned-border-width: var(--cui-border-width);
|
|
19
|
+
--cui-data-grid-pinned-border-color: var(--cui-border-color, #dee2e6);
|
|
20
|
+
--cui-data-grid-drop-indicator: var(--cui-primary, #321fdb);
|
|
21
|
+
--cui-data-grid-menu-bg: var(--cui-body-bg, #fff);
|
|
22
|
+
--cui-data-grid-menu-border-color: var(--cui-border-color, #dee2e6);
|
|
23
|
+
--cui-data-grid-menu-shadow: var(--cui-box-shadow, 0 .5rem 1rem rgba(0, 0, 0, .15));
|
|
24
|
+
--cui-data-grid-menu-min-width: 10rem;
|
|
25
|
+
--cui-data-grid-menu-item-hover-bg: var(--cui-tertiary-bg, #f8f9fa);
|
|
26
|
+
--cui-data-grid-loading-bg: rgba(var(--cui-body-bg-rgb, 255, 255, 255), .6);
|
|
27
|
+
--cui-data-grid-pinned-bg: var(--cui-body-bg, #fff);
|
|
28
|
+
--cui-data-grid-focus-ring-width: 2px;
|
|
29
|
+
--cui-data-grid-focus-ring-color: var(--cui-primary, #321fdb);
|
|
30
|
+
}
|
|
31
|
+
.data-grid .data-grid-toolbar {
|
|
32
|
+
display: flex;
|
|
33
|
+
flex-wrap: wrap;
|
|
34
|
+
gap: var(--cui-data-grid-spacing);
|
|
35
|
+
align-items: center;
|
|
36
|
+
min-height: 48px;
|
|
37
|
+
padding: var(--cui-data-grid-spacing);
|
|
38
|
+
border-bottom: var(--cui-border-width, 1px) solid var(--cui-border-color, #dee2e6);
|
|
39
|
+
}
|
|
40
|
+
.data-grid .data-grid-toolbar-actions {
|
|
41
|
+
display: flex;
|
|
42
|
+
gap: 0.25rem;
|
|
43
|
+
align-items: center;
|
|
44
|
+
}
|
|
45
|
+
.data-grid .data-grid-toolbar-search {
|
|
46
|
+
-webkit-margin-start: auto;
|
|
47
|
+
margin-inline-start: auto;
|
|
48
|
+
}
|
|
49
|
+
.data-grid .data-grid-viewport {
|
|
50
|
+
position: relative;
|
|
51
|
+
max-height: var(--cui-data-grid-viewport-max-height);
|
|
52
|
+
overflow-y: auto;
|
|
53
|
+
overflow-anchor: none;
|
|
54
|
+
}
|
|
55
|
+
.data-grid .data-grid-cell-editor {
|
|
56
|
+
width: 100%;
|
|
57
|
+
min-width: 4rem;
|
|
58
|
+
}
|
|
59
|
+
.data-grid .data-grid-editor-popup {
|
|
60
|
+
position: absolute;
|
|
61
|
+
z-index: 4;
|
|
62
|
+
padding: 0.25rem;
|
|
63
|
+
background-color: var(--cui-data-grid-menu-bg);
|
|
64
|
+
border: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);
|
|
65
|
+
border-radius: var(--cui-border-radius, 0.375rem);
|
|
66
|
+
box-shadow: var(--cui-data-grid-menu-shadow);
|
|
67
|
+
}
|
|
68
|
+
.data-grid [role=grid] :is(td, th):focus-visible {
|
|
69
|
+
outline: var(--cui-data-grid-focus-ring-width) solid var(--cui-data-grid-focus-ring-color);
|
|
70
|
+
outline-offset: calc(-1 * var(--cui-data-grid-focus-ring-width));
|
|
71
|
+
}
|
|
72
|
+
.data-grid .data-grid-viewport:focus-visible {
|
|
73
|
+
outline: 0;
|
|
74
|
+
}
|
|
75
|
+
.data-grid .data-grid-header {
|
|
76
|
+
position: -webkit-sticky;
|
|
77
|
+
position: sticky;
|
|
78
|
+
top: 0;
|
|
79
|
+
z-index: 2;
|
|
80
|
+
background-color: var(--cui-data-grid-header-bg);
|
|
81
|
+
box-shadow: var(--cui-data-grid-header-shadow);
|
|
82
|
+
}
|
|
83
|
+
.data-grid .data-grid-header tr:not(.data-grid-filter-row) > th {
|
|
84
|
+
height: 48px;
|
|
85
|
+
vertical-align: middle;
|
|
86
|
+
}
|
|
87
|
+
.data-grid .data-grid-filter-row > th {
|
|
88
|
+
padding-top: 0;
|
|
89
|
+
font-weight: normal;
|
|
90
|
+
}
|
|
91
|
+
.data-grid .data-grid-header th[data-coreui-draggable] {
|
|
92
|
+
cursor: -webkit-grab;
|
|
93
|
+
cursor: grab;
|
|
94
|
+
}
|
|
95
|
+
.data-grid .data-grid-header-cell {
|
|
96
|
+
display: flex;
|
|
97
|
+
align-items: center;
|
|
98
|
+
gap: 0.25rem;
|
|
99
|
+
}
|
|
100
|
+
.data-grid .data-grid-header-label {
|
|
101
|
+
overflow: hidden;
|
|
102
|
+
text-overflow: ellipsis;
|
|
103
|
+
white-space: nowrap;
|
|
104
|
+
}
|
|
105
|
+
.data-grid .btn-ghost {
|
|
106
|
+
--cui-btn-padding-x: var(--cui-btn-padding-y);
|
|
107
|
+
--cui-btn-line-height: 1;
|
|
108
|
+
}
|
|
109
|
+
.data-grid .data-grid-menu-button {
|
|
110
|
+
-webkit-margin-start: auto;
|
|
111
|
+
margin-inline-start: auto;
|
|
112
|
+
}
|
|
113
|
+
.data-grid .data-grid-menu {
|
|
114
|
+
position: absolute;
|
|
115
|
+
z-index: 4;
|
|
116
|
+
min-width: var(--cui-data-grid-menu-min-width);
|
|
117
|
+
padding: 0.25rem 0;
|
|
118
|
+
background-color: var(--cui-data-grid-menu-bg);
|
|
119
|
+
border: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);
|
|
120
|
+
border-radius: var(--cui-border-radius, 0.375rem);
|
|
121
|
+
box-shadow: var(--cui-data-grid-menu-shadow);
|
|
122
|
+
}
|
|
123
|
+
.data-grid .data-grid-menu-item {
|
|
124
|
+
display: flex;
|
|
125
|
+
align-items: center;
|
|
126
|
+
gap: 0.5rem;
|
|
127
|
+
width: 100%;
|
|
128
|
+
padding: 0.25rem 0.75rem;
|
|
129
|
+
font: inherit;
|
|
130
|
+
color: inherit;
|
|
131
|
+
text-align: start;
|
|
132
|
+
cursor: pointer;
|
|
133
|
+
background: none;
|
|
134
|
+
border: 0;
|
|
135
|
+
}
|
|
136
|
+
.data-grid .data-grid-menu-item:hover, .data-grid .data-grid-menu-item:focus-visible {
|
|
137
|
+
background-color: var(--cui-data-grid-menu-item-hover-bg);
|
|
138
|
+
}
|
|
139
|
+
.data-grid .data-grid-menu-item[aria-disabled=true] {
|
|
140
|
+
color: var(--cui-secondary-color, #6c757d);
|
|
141
|
+
cursor: default;
|
|
142
|
+
background: none;
|
|
143
|
+
}
|
|
144
|
+
.data-grid .data-grid-filter-menu {
|
|
145
|
+
position: absolute;
|
|
146
|
+
z-index: 4;
|
|
147
|
+
display: flex;
|
|
148
|
+
flex-direction: column;
|
|
149
|
+
gap: 0.5rem;
|
|
150
|
+
min-width: var(--cui-data-grid-menu-min-width);
|
|
151
|
+
max-width: 18rem;
|
|
152
|
+
padding: 0.75rem;
|
|
153
|
+
background-color: var(--cui-data-grid-menu-bg);
|
|
154
|
+
border: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);
|
|
155
|
+
border-radius: var(--cui-border-radius, 0.375rem);
|
|
156
|
+
box-shadow: var(--cui-data-grid-menu-shadow);
|
|
157
|
+
}
|
|
158
|
+
.data-grid .data-grid-filter-menu > div {
|
|
159
|
+
display: flex;
|
|
160
|
+
flex-direction: column;
|
|
161
|
+
gap: 0.5rem;
|
|
162
|
+
}
|
|
163
|
+
.data-grid .data-grid-filter-menu-condition {
|
|
164
|
+
display: flex;
|
|
165
|
+
flex-direction: column;
|
|
166
|
+
gap: 0.25rem;
|
|
167
|
+
}
|
|
168
|
+
.data-grid .data-grid-filter-menu-join {
|
|
169
|
+
display: flex;
|
|
170
|
+
gap: 1rem;
|
|
171
|
+
}
|
|
172
|
+
.data-grid .data-grid-filter-menu-join label {
|
|
173
|
+
display: flex;
|
|
174
|
+
gap: 0.375rem;
|
|
175
|
+
align-items: center;
|
|
176
|
+
}
|
|
177
|
+
.data-grid .data-grid-filter-menu-values {
|
|
178
|
+
display: flex;
|
|
179
|
+
flex-direction: column;
|
|
180
|
+
gap: 0.25rem;
|
|
181
|
+
max-height: 14rem;
|
|
182
|
+
overflow-y: auto;
|
|
183
|
+
}
|
|
184
|
+
.data-grid .data-grid-filter-menu-footer {
|
|
185
|
+
display: flex;
|
|
186
|
+
gap: 0.5rem;
|
|
187
|
+
justify-content: flex-end;
|
|
188
|
+
}
|
|
189
|
+
.data-grid .data-grid-column-chooser {
|
|
190
|
+
position: absolute;
|
|
191
|
+
z-index: 4;
|
|
192
|
+
display: flex;
|
|
193
|
+
flex-direction: column;
|
|
194
|
+
gap: 0.5rem;
|
|
195
|
+
min-width: var(--cui-data-grid-menu-min-width);
|
|
196
|
+
max-width: 18rem;
|
|
197
|
+
max-height: 20rem;
|
|
198
|
+
padding: 0.75rem;
|
|
199
|
+
overflow-y: auto;
|
|
200
|
+
background-color: var(--cui-data-grid-menu-bg);
|
|
201
|
+
border: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);
|
|
202
|
+
border-radius: var(--cui-border-radius, 0.375rem);
|
|
203
|
+
box-shadow: var(--cui-data-grid-menu-shadow);
|
|
204
|
+
}
|
|
205
|
+
.data-grid .data-grid-column-chooser-option {
|
|
206
|
+
display: flex;
|
|
207
|
+
gap: 0.375rem;
|
|
208
|
+
align-items: center;
|
|
209
|
+
margin-bottom: 0;
|
|
210
|
+
}
|
|
211
|
+
.data-grid .data-grid-column-chooser-footer {
|
|
212
|
+
display: flex;
|
|
213
|
+
gap: 0.5rem;
|
|
214
|
+
justify-content: flex-end;
|
|
215
|
+
padding-top: 0.25rem;
|
|
216
|
+
margin-top: 0.25rem;
|
|
217
|
+
border-top: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);
|
|
218
|
+
}
|
|
219
|
+
.data-grid .data-grid-filter-button {
|
|
220
|
+
position: relative;
|
|
221
|
+
-webkit-margin-start: auto;
|
|
222
|
+
margin-inline-start: auto;
|
|
223
|
+
}
|
|
224
|
+
.data-grid .data-grid-filter-button ~ .data-grid-menu-button {
|
|
225
|
+
-webkit-margin-start: 0;
|
|
226
|
+
margin-inline-start: 0;
|
|
227
|
+
}
|
|
228
|
+
.data-grid .data-grid-filter-button-filtered::after {
|
|
229
|
+
position: absolute;
|
|
230
|
+
inset-block-start: 0.125rem;
|
|
231
|
+
inset-inline-end: 0.125rem;
|
|
232
|
+
width: 0.375rem;
|
|
233
|
+
height: 0.375rem;
|
|
234
|
+
content: "";
|
|
235
|
+
background-color: var(--cui-primary, #321fdb);
|
|
236
|
+
border-radius: 50%;
|
|
237
|
+
}
|
|
238
|
+
.data-grid .data-grid-menu-item-icon {
|
|
239
|
+
display: inline-flex;
|
|
240
|
+
opacity: 0.75;
|
|
241
|
+
}
|
|
242
|
+
.data-grid .data-grid-menu-item-icon svg {
|
|
243
|
+
width: 1em;
|
|
244
|
+
height: 1em;
|
|
245
|
+
}
|
|
246
|
+
.data-grid .data-grid-menu-divider {
|
|
247
|
+
height: var(--cui-border-width, 1px);
|
|
248
|
+
margin: 0.25rem 0;
|
|
249
|
+
background-color: var(--cui-data-grid-menu-border-color);
|
|
250
|
+
}
|
|
251
|
+
.data-grid .data-grid-header .data-grid-dragging {
|
|
252
|
+
opacity: 0.5;
|
|
253
|
+
}
|
|
254
|
+
.data-grid .data-grid-header .data-grid-drop-target {
|
|
255
|
+
box-shadow: inset 0.125rem 0 0 var(--cui-data-grid-drop-indicator);
|
|
256
|
+
}
|
|
257
|
+
.data-grid .data-grid-select-cell {
|
|
258
|
+
width: var(--cui-data-grid-select-cell-width);
|
|
259
|
+
text-align: center;
|
|
260
|
+
}
|
|
261
|
+
.data-grid .data-grid-sort-button {
|
|
262
|
+
display: inline-flex;
|
|
263
|
+
align-items: center;
|
|
264
|
+
gap: var(--cui-data-grid-sorter-margin);
|
|
265
|
+
padding: 0;
|
|
266
|
+
font: inherit;
|
|
267
|
+
color: inherit;
|
|
268
|
+
cursor: pointer;
|
|
269
|
+
-webkit-user-select: none;
|
|
270
|
+
-moz-user-select: none;
|
|
271
|
+
user-select: none;
|
|
272
|
+
background: none;
|
|
273
|
+
border: 0;
|
|
274
|
+
}
|
|
275
|
+
.data-grid .data-grid-sort-icon {
|
|
276
|
+
display: inline-flex;
|
|
277
|
+
font-size: 0.875em;
|
|
278
|
+
opacity: 0;
|
|
279
|
+
}
|
|
280
|
+
.data-grid .data-grid-sort-icon svg {
|
|
281
|
+
width: 1em;
|
|
282
|
+
height: 1em;
|
|
283
|
+
}
|
|
284
|
+
.data-grid .data-grid-sortable[aria-sort] .data-grid-sort-icon {
|
|
285
|
+
opacity: 1;
|
|
286
|
+
}
|
|
287
|
+
.data-grid[data-coreui-sorter-visibility=always] .data-grid-sortable:not([aria-sort]) .data-grid-sort-icon {
|
|
288
|
+
opacity: var(--cui-data-grid-sorter-opacity);
|
|
289
|
+
}
|
|
290
|
+
.data-grid[data-coreui-sorter-visibility=hover] .data-grid-sortable:not([aria-sort]):hover .data-grid-sort-icon, .data-grid[data-coreui-sorter-visibility=hover] .data-grid-sortable:not([aria-sort]):focus-within .data-grid-sort-icon {
|
|
291
|
+
opacity: var(--cui-data-grid-sorter-opacity);
|
|
292
|
+
}
|
|
293
|
+
.data-grid .data-grid-viewport > .table {
|
|
294
|
+
margin-bottom: 0;
|
|
295
|
+
table-layout: fixed;
|
|
296
|
+
}
|
|
297
|
+
.data-grid .data-grid-viewport > .table > tbody > tr:not(.data-grid-empty) > td:not(.data-grid-select-cell):not(.data-grid-cell-pinned-left):not(.data-grid-cell-pinned-right) {
|
|
298
|
+
overflow: hidden;
|
|
299
|
+
text-overflow: ellipsis;
|
|
300
|
+
white-space: nowrap;
|
|
301
|
+
}
|
|
302
|
+
.data-grid.data-grid-resizable .data-grid-viewport, .data-grid.data-grid-pinned .data-grid-viewport {
|
|
303
|
+
overflow-x: auto;
|
|
304
|
+
}
|
|
305
|
+
.data-grid.data-grid-resizable .table, .data-grid.data-grid-pinned .table {
|
|
306
|
+
width: -webkit-max-content;
|
|
307
|
+
width: -moz-max-content;
|
|
308
|
+
width: max-content;
|
|
309
|
+
min-width: 100%;
|
|
310
|
+
}
|
|
311
|
+
.data-grid.data-grid-resizable .data-grid-header th:not(.data-grid-cell-pinned-left):not(.data-grid-cell-pinned-right) {
|
|
312
|
+
position: relative;
|
|
313
|
+
}
|
|
314
|
+
.data-grid.data-grid-pinned .table {
|
|
315
|
+
border-collapse: separate;
|
|
316
|
+
border-spacing: 0;
|
|
317
|
+
}
|
|
318
|
+
.data-grid .data-grid-cell-pinned-left,
|
|
319
|
+
.data-grid .data-grid-cell-pinned-right {
|
|
320
|
+
position: -webkit-sticky;
|
|
321
|
+
position: sticky;
|
|
322
|
+
z-index: 1;
|
|
323
|
+
background-color: var(--cui-data-grid-pinned-bg);
|
|
324
|
+
}
|
|
325
|
+
.data-grid .data-grid-header .data-grid-cell-pinned-left,
|
|
326
|
+
.data-grid .data-grid-header .data-grid-cell-pinned-right {
|
|
327
|
+
z-index: 3;
|
|
328
|
+
}
|
|
329
|
+
.data-grid .data-grid-cell-pinned-left-last,
|
|
330
|
+
.data-grid .data-grid-cell-pinned-right-first {
|
|
331
|
+
position: -webkit-sticky;
|
|
332
|
+
position: sticky;
|
|
333
|
+
}
|
|
334
|
+
.data-grid .data-grid-cell-pinned-left-last::after,
|
|
335
|
+
.data-grid .data-grid-cell-pinned-right-first::after {
|
|
336
|
+
position: absolute;
|
|
337
|
+
top: 0;
|
|
338
|
+
bottom: 0;
|
|
339
|
+
width: var(--cui-data-grid-pinned-border-width);
|
|
340
|
+
pointer-events: none;
|
|
341
|
+
content: "";
|
|
342
|
+
}
|
|
343
|
+
.data-grid .data-grid-cell-pinned-left-last::after {
|
|
344
|
+
right: 0;
|
|
345
|
+
background: var(--cui-data-grid-pinned-border-color);
|
|
346
|
+
}
|
|
347
|
+
.data-grid .data-grid-cell-pinned-right-first::after {
|
|
348
|
+
left: 0;
|
|
349
|
+
background: var(--cui-data-grid-pinned-border-color);
|
|
350
|
+
}
|
|
351
|
+
.data-grid .data-grid-resizer {
|
|
352
|
+
position: absolute;
|
|
353
|
+
top: 0;
|
|
354
|
+
right: calc(-0.5 * var(--cui-data-grid-resizer-width));
|
|
355
|
+
z-index: 1;
|
|
356
|
+
display: flex;
|
|
357
|
+
align-items: center;
|
|
358
|
+
justify-content: center;
|
|
359
|
+
width: var(--cui-data-grid-resizer-width);
|
|
360
|
+
height: 100%;
|
|
361
|
+
cursor: col-resize;
|
|
362
|
+
touch-action: none;
|
|
363
|
+
-webkit-user-select: none;
|
|
364
|
+
-moz-user-select: none;
|
|
365
|
+
user-select: none;
|
|
366
|
+
}
|
|
367
|
+
.data-grid .data-grid-resizer::after {
|
|
368
|
+
width: 2px;
|
|
369
|
+
height: var(--cui-data-grid-resizer-grip-height);
|
|
370
|
+
content: "";
|
|
371
|
+
background-color: var(--cui-data-grid-resizer-grip-color);
|
|
372
|
+
transition: background-color 0.15s ease;
|
|
373
|
+
}
|
|
374
|
+
.data-grid .data-grid-resizer:hover::after, .data-grid .data-grid-resizer.data-grid-resizer-active::after {
|
|
375
|
+
background-color: var(--cui-data-grid-resizer-grip-color-hover);
|
|
376
|
+
}
|
|
377
|
+
.data-grid .data-grid-spacer > td {
|
|
378
|
+
padding: 0;
|
|
379
|
+
border: 0;
|
|
380
|
+
}
|
|
381
|
+
.data-grid .data-grid-viewport > .table-striped > tbody > tr:nth-of-type(odd) > * {
|
|
382
|
+
--cui-table-color-type: initial;
|
|
383
|
+
--cui-table-bg-type: initial;
|
|
384
|
+
}
|
|
385
|
+
.data-grid .data-grid-viewport > .table-striped > tbody > tr.data-grid-row-odd > * {
|
|
386
|
+
--cui-table-color-type: var(--cui-table-striped-color);
|
|
387
|
+
--cui-table-bg-type: var(--cui-table-striped-bg);
|
|
388
|
+
}
|
|
389
|
+
.data-grid .data-grid-viewport > .table > tbody > tr:last-child > * {
|
|
390
|
+
border-bottom-width: 0;
|
|
391
|
+
}
|
|
392
|
+
.data-grid .data-grid-loading {
|
|
393
|
+
position: absolute;
|
|
394
|
+
inset: 0;
|
|
395
|
+
z-index: 3;
|
|
396
|
+
display: flex;
|
|
397
|
+
align-items: center;
|
|
398
|
+
justify-content: center;
|
|
399
|
+
background-color: var(--cui-data-grid-loading-bg);
|
|
400
|
+
}
|
|
401
|
+
.data-grid .data-grid-tooltip {
|
|
402
|
+
position: fixed;
|
|
403
|
+
z-index: 1080;
|
|
404
|
+
max-width: 12rem;
|
|
405
|
+
padding: 0.25rem 0.5rem;
|
|
406
|
+
font-size: 0.875rem;
|
|
407
|
+
line-height: 1.4;
|
|
408
|
+
color: var(--cui-body-bg, #fff);
|
|
409
|
+
text-align: center;
|
|
410
|
+
pointer-events: none;
|
|
411
|
+
background-color: var(--cui-emphasis-color, #000);
|
|
412
|
+
border-radius: var(--cui-border-radius, 0.375rem);
|
|
413
|
+
}
|
|
414
|
+
.data-grid .data-grid-empty > td {
|
|
415
|
+
padding: 2rem 1rem;
|
|
416
|
+
color: var(--cui-secondary-color, #6c757d);
|
|
417
|
+
text-align: center;
|
|
418
|
+
}
|
|
419
|
+
.data-grid .data-grid-pagination {
|
|
420
|
+
display: flex;
|
|
421
|
+
flex-wrap: wrap;
|
|
422
|
+
gap: var(--cui-data-grid-spacing);
|
|
423
|
+
align-items: center;
|
|
424
|
+
min-height: 48px;
|
|
425
|
+
padding: var(--cui-data-grid-spacing);
|
|
426
|
+
border-top: var(--cui-border-width, 1px) solid var(--cui-border-color, #dee2e6);
|
|
427
|
+
}
|
|
428
|
+
.data-grid .data-grid-pagination.data-grid-pagination-top {
|
|
429
|
+
border-top: 0;
|
|
430
|
+
border-bottom: var(--cui-border-width, 1px) solid var(--cui-border-color, #dee2e6);
|
|
431
|
+
}
|
|
432
|
+
.data-grid .data-grid-pagination .pagination {
|
|
433
|
+
margin-bottom: 0;
|
|
434
|
+
}
|
|
435
|
+
.data-grid .data-grid-pagination .data-grid-pagination-info {
|
|
436
|
+
-webkit-margin-start: auto;
|
|
437
|
+
margin-inline-start: auto;
|
|
438
|
+
color: var(--cui-secondary-color, #6c757d);
|
|
439
|
+
}
|
|
440
|
+
.data-grid .data-grid-pagination .form-select {
|
|
441
|
+
width: auto;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/*# sourceMappingURL=data-grid.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../scss/data-grid.scss","data-grid.css"],"names":[],"mappings":"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","file":"data-grid.css","sourcesContent":["/*!\n * CoreUI PRO data-grid.scss v0.1.0\n * License (https://coreui.io/pro/license/)\n */\n\n.data-grid {\n // The column menu is positioned against the grid root (it must escape the\n // viewport's overflow while staying inside the token scope).\n position: relative;\n\n // Component tokens. Everything resolves through CoreUI semantic variables,\n // so light/dark theming via [data-coreui-theme] works with no extra rules.\n --cui-data-grid-viewport-max-height: 30rem;\n --cui-data-grid-header-bg: var(--cui-body-bg, #fff);\n --cui-data-grid-header-shadow: inset 0 calc(-1 * var(--cui-border-width, 1px)) 0 var(--cui-border-color, #dee2e6);\n --cui-data-grid-select-cell-width: 2.5rem;\n --cui-data-grid-sorter-margin: .25rem;\n --cui-data-grid-sorter-opacity: .3;\n --cui-data-grid-spacing: .5rem;\n --cui-data-grid-resizer-width: .625rem;\n --cui-data-grid-resizer-grip-height: 60%;\n --cui-data-grid-resizer-grip-color: var(--cui-border-color, #dee2e6);\n --cui-data-grid-resizer-grip-color-hover: var(--cui-secondary-color, #6c757d);\n --cui-data-grid-pinned-border-width: var(--cui-border-width);\n --cui-data-grid-pinned-border-color: var(--cui-border-color, #dee2e6);\n --cui-data-grid-drop-indicator: var(--cui-primary, #321fdb);\n --cui-data-grid-menu-bg: var(--cui-body-bg, #fff);\n --cui-data-grid-menu-border-color: var(--cui-border-color, #dee2e6);\n --cui-data-grid-menu-shadow: var(--cui-box-shadow, 0 .5rem 1rem rgba(0, 0, 0, .15));\n --cui-data-grid-menu-min-width: 10rem;\n --cui-data-grid-menu-item-hover-bg: var(--cui-tertiary-bg, #f8f9fa);\n --cui-data-grid-loading-bg: rgba(var(--cui-body-bg-rgb, 255, 255, 255), .6);\n --cui-data-grid-pinned-bg: var(--cui-body-bg, #fff);\n --cui-data-grid-focus-ring-width: 2px;\n --cui-data-grid-focus-ring-color: var(--cui-primary, #321fdb);\n\n .data-grid-toolbar {\n display: flex;\n flex-wrap: wrap;\n gap: var(--cui-data-grid-spacing);\n align-items: center;\n min-height: 48px;\n padding: var(--cui-data-grid-spacing);\n border-bottom: var(--cui-border-width, 1px) solid var(--cui-border-color, #dee2e6);\n }\n\n .data-grid-toolbar-actions {\n display: flex;\n gap: .25rem;\n align-items: center;\n }\n\n .data-grid-toolbar-search {\n margin-inline-start: auto;\n }\n\n .data-grid-viewport {\n position: relative;\n max-height: var(--cui-data-grid-viewport-max-height);\n overflow-y: auto;\n // Windowed rendering resizes the spacer rows and recycles row elements on\n // every frame; browser scroll anchoring chases those mutations and keeps\n // adjusting scrollTop, which turns wheel scrolling into a feedback loop.\n overflow-anchor: none;\n }\n\n // Inline editing: the in-cell editor fills the cell; the popup layer hosts\n // rich editors (date pickers, selects) anchored over the cell.\n .data-grid-cell-editor {\n width: 100%;\n min-width: 4rem;\n }\n\n .data-grid-editor-popup {\n position: absolute;\n z-index: 4;\n padding: .25rem;\n background-color: var(--cui-data-grid-menu-bg);\n border: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);\n border-radius: var(--cui-border-radius, .375rem);\n box-shadow: var(--cui-data-grid-menu-shadow);\n }\n\n // cellNavigation: the roving-tabindex active cell. The ring is inset so the\n // sticky header and pinned columns don't clip it.\n [role=\"grid\"] :is(td, th):focus-visible {\n outline: var(--cui-data-grid-focus-ring-width) solid var(--cui-data-grid-focus-ring-color);\n outline-offset: calc(-1 * var(--cui-data-grid-focus-ring-width));\n }\n\n .data-grid-viewport:focus-visible {\n outline: 0;\n }\n\n .data-grid-header {\n position: sticky;\n top: 0;\n z-index: 2;\n background-color: var(--cui-data-grid-header-bg);\n box-shadow: var(--cui-data-grid-header-shadow);\n }\n\n // Header label row: fixed 48px with vertically centered content (height on a\n // table cell acts as a min; min-height is ignored on table-cell).\n .data-grid-header tr:not(.data-grid-filter-row) > th {\n height: 48px;\n vertical-align: middle;\n }\n\n .data-grid-filter-row > th {\n padding-top: 0;\n font-weight: normal;\n }\n\n .data-grid-header th[data-coreui-draggable] {\n cursor: grab;\n }\n\n .data-grid-header-cell {\n display: flex;\n align-items: center;\n gap: .25rem;\n }\n\n .data-grid-header-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n // Icon-only ghost buttons: square them by matching horizontal padding to\n // vertical (follows .btn / .btn-sm automatically) and collapsing the text\n // line-height so height follows the icon, not a 1.5em text line.\n .btn-ghost {\n --cui-btn-padding-x: var(--cui-btn-padding-y);\n --cui-btn-line-height: 1;\n }\n\n .data-grid-menu-button {\n margin-inline-start: auto;\n }\n\n .data-grid-menu {\n position: absolute;\n z-index: 4;\n min-width: var(--cui-data-grid-menu-min-width);\n padding: .25rem 0;\n background-color: var(--cui-data-grid-menu-bg);\n border: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);\n border-radius: var(--cui-border-radius, .375rem);\n box-shadow: var(--cui-data-grid-menu-shadow);\n }\n\n .data-grid-menu-item {\n display: flex;\n align-items: center;\n gap: .5rem;\n width: 100%;\n padding: .25rem .75rem;\n font: inherit;\n color: inherit;\n text-align: start;\n cursor: pointer;\n background: none;\n border: 0;\n\n &:hover,\n &:focus-visible {\n background-color: var(--cui-data-grid-menu-item-hover-bg);\n }\n\n // Disabled items stay focusable (aria-disabled, APG menu pattern) so the\n // roving arrow cycle can reach them.\n &[aria-disabled=\"true\"] {\n color: var(--cui-secondary-color, #6c757d);\n cursor: default;\n background: none;\n }\n }\n\n .data-grid-filter-menu {\n position: absolute;\n z-index: 4;\n display: flex;\n flex-direction: column;\n gap: .5rem;\n min-width: var(--cui-data-grid-menu-min-width);\n max-width: 18rem;\n padding: .75rem;\n background-color: var(--cui-data-grid-menu-bg);\n border: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);\n border-radius: var(--cui-border-radius, .375rem);\n box-shadow: var(--cui-data-grid-menu-shadow);\n\n > div {\n display: flex;\n flex-direction: column;\n gap: .5rem;\n }\n }\n\n .data-grid-filter-menu-condition {\n display: flex;\n flex-direction: column;\n gap: .25rem;\n }\n\n .data-grid-filter-menu-join {\n display: flex;\n gap: 1rem;\n\n label {\n display: flex;\n gap: .375rem;\n align-items: center;\n }\n }\n\n .data-grid-filter-menu-values {\n display: flex;\n flex-direction: column;\n gap: .25rem;\n max-height: 14rem;\n overflow-y: auto;\n }\n\n .data-grid-filter-menu-footer {\n display: flex;\n gap: .5rem;\n justify-content: flex-end;\n }\n\n .data-grid-column-chooser {\n position: absolute;\n z-index: 4;\n display: flex;\n flex-direction: column;\n gap: .5rem;\n min-width: var(--cui-data-grid-menu-min-width);\n max-width: 18rem;\n max-height: 20rem;\n padding: .75rem;\n overflow-y: auto;\n background-color: var(--cui-data-grid-menu-bg);\n border: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);\n border-radius: var(--cui-border-radius, .375rem);\n box-shadow: var(--cui-data-grid-menu-shadow);\n }\n\n .data-grid-column-chooser-option {\n display: flex;\n gap: .375rem;\n align-items: center;\n margin-bottom: 0;\n }\n\n .data-grid-column-chooser-footer {\n display: flex;\n gap: .5rem;\n justify-content: flex-end;\n padding-top: .25rem;\n margin-top: .25rem;\n border-top: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);\n }\n\n .data-grid-filter-button {\n position: relative;\n // Right-align the trailing controls as a group: the filter button takes the\n // auto margin (menu drops its own below) so filter and menu sit together at\n // the end, matching a menu-only header.\n margin-inline-start: auto;\n\n ~ .data-grid-menu-button {\n margin-inline-start: 0;\n }\n }\n\n // Active-filter indicator dot on the filter button.\n .data-grid-filter-button-filtered::after {\n position: absolute;\n inset-block-start: .125rem;\n inset-inline-end: .125rem;\n width: .375rem;\n height: .375rem;\n content: \"\";\n background-color: var(--cui-primary, #321fdb);\n border-radius: 50%;\n }\n\n .data-grid-menu-item-icon {\n display: inline-flex;\n opacity: .75;\n\n svg {\n width: 1em;\n height: 1em;\n }\n }\n\n .data-grid-menu-divider {\n height: var(--cui-border-width, 1px);\n margin: .25rem 0;\n background-color: var(--cui-data-grid-menu-border-color);\n }\n\n .data-grid-header .data-grid-dragging {\n opacity: .5;\n }\n\n .data-grid-header .data-grid-drop-target {\n box-shadow: inset .125rem 0 0 var(--cui-data-grid-drop-indicator);\n }\n\n .data-grid-select-cell {\n width: var(--cui-data-grid-select-cell-width);\n text-align: center;\n }\n\n .data-grid-sort-button {\n display: inline-flex;\n align-items: center;\n gap: var(--cui-data-grid-sorter-margin);\n padding: 0;\n font: inherit;\n color: inherit;\n cursor: pointer;\n user-select: none;\n background: none;\n border: 0;\n }\n\n .data-grid-sort-icon {\n display: inline-flex;\n font-size: .875em;\n opacity: 0;\n\n svg {\n width: 1em;\n height: 1em;\n }\n }\n\n // The active sort direction is always visible; the neutral (unsorted) icon is\n // hidden unless `sorterVisibility` opts it in (steadily via \"always\", or on\n // header hover/focus via \"hover\").\n .data-grid-sortable[aria-sort] .data-grid-sort-icon {\n opacity: 1;\n }\n\n &[data-coreui-sorter-visibility=\"always\"] .data-grid-sortable:not([aria-sort]) .data-grid-sort-icon {\n opacity: var(--cui-data-grid-sorter-opacity);\n }\n\n &[data-coreui-sorter-visibility=\"hover\"] .data-grid-sortable:not([aria-sort]):hover .data-grid-sort-icon,\n &[data-coreui-sorter-visibility=\"hover\"] .data-grid-sortable:not([aria-sort]):focus-within .data-grid-sort-icon {\n opacity: var(--cui-data-grid-sorter-opacity);\n }\n\n .data-grid-viewport > .table {\n margin-bottom: 0;\n table-layout: fixed;\n }\n\n // Body cells render on a single line and truncate with an ellipsis instead of\n // spilling their content across the fixed-layout column boundary onto the next\n // column. Matches the default of AG Grid / MUI X Data Grid and TanStack's\n // virtualized-table guidance, and keeps every row a uniform height for the\n // fixed-height virtualizer (wrapping would desync `estimateSize`). Pinned cells\n // are excluded so their shadow pseudo-element (painted outside the box via a\n // translate) isn't clipped; the select cell holds only a checkbox.\n .data-grid-viewport > .table > tbody > tr:not(.data-grid-empty) > td:not(.data-grid-select-cell):not(.data-grid-cell-pinned-left):not(.data-grid-cell-pinned-right) {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n // Widths applied to each header cell drive the column layout; letting the\n // table grow to its content (min-width keeps it filling a wide viewport)\n // turns a resize or a pin into horizontal scroll rather than squeezing\n // neighbours. Both features share this layout mode.\n &.data-grid-resizable,\n &.data-grid-pinned {\n .data-grid-viewport {\n overflow-x: auto;\n }\n\n .table {\n width: max-content;\n min-width: 100%;\n }\n }\n\n // A pinned th is already sticky (a positioned containing block for the\n // resizer), so only non-pinned header cells need explicit relative here.\n &.data-grid-resizable .data-grid-header th:not(.data-grid-cell-pinned-left):not(.data-grid-cell-pinned-right) {\n position: relative;\n }\n\n &.data-grid-pinned .table {\n // position: sticky is unreliable on collapsed-border tables; the grid opts\n // into separate borders so pinned cells stay put on horizontal scroll.\n border-collapse: separate;\n border-spacing: 0;\n }\n\n .data-grid-cell-pinned-left,\n .data-grid-cell-pinned-right {\n position: sticky;\n z-index: 1;\n background-color: var(--cui-data-grid-pinned-bg);\n }\n\n .data-grid-header .data-grid-cell-pinned-left,\n .data-grid-header .data-grid-cell-pinned-right {\n z-index: 3;\n }\n\n // Edge cells cast a shadow over the scrolling content. A pseudo-element is\n // used because the cell's own box-shadow carries the table striping accent.\n .data-grid-cell-pinned-left-last,\n .data-grid-cell-pinned-right-first {\n position: sticky;\n\n &::after {\n position: absolute;\n top: 0;\n bottom: 0;\n width: var(--cui-data-grid-pinned-border-width);\n pointer-events: none;\n content: \"\";\n }\n }\n\n .data-grid-cell-pinned-left-last::after {\n right: 0;\n background: var(--cui-data-grid-pinned-border-color);\n }\n\n .data-grid-cell-pinned-right-first::after {\n left: 0;\n background: var(--cui-data-grid-pinned-border-color);\n }\n\n .data-grid-resizer {\n position: absolute;\n top: 0;\n right: calc(-.5 * var(--cui-data-grid-resizer-width));\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--cui-data-grid-resizer-width);\n height: 100%;\n cursor: col-resize;\n touch-action: none;\n user-select: none;\n\n // Always-visible grip so the resizable edge is discoverable, not just a\n // bare hover target.\n &::after {\n width: 2px;\n height: var(--cui-data-grid-resizer-grip-height);\n content: \"\";\n background-color: var(--cui-data-grid-resizer-grip-color);\n transition: background-color .15s ease;\n }\n\n &:hover::after,\n &.data-grid-resizer-active::after {\n background-color: var(--cui-data-grid-resizer-grip-color-hover);\n }\n }\n\n .data-grid-spacer > td {\n padding: 0;\n border: 0;\n }\n\n // Spacer rows break `nth-of-type` striping, so striping inside the grid is\n // driven by the absolute row index (.data-grid-row-odd) instead.\n .data-grid-viewport > .table-striped > tbody > tr:nth-of-type(odd) > * {\n --cui-table-color-type: initial;\n --cui-table-bg-type: initial;\n }\n\n .data-grid-viewport > .table-striped > tbody > tr.data-grid-row-odd > * {\n --cui-table-color-type: var(--cui-table-striped-color);\n --cui-table-bg-type: var(--cui-table-striped-bg);\n }\n\n // The last row closes on the viewport edge (or the pagination border), so it\n // doesn't need its own separator line.\n .data-grid-viewport > .table > tbody > tr:last-child > * {\n border-bottom-width: 0;\n }\n\n .data-grid-loading {\n position: absolute;\n inset: 0;\n z-index: 3;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--cui-data-grid-loading-bg);\n }\n\n // Shared icon-button tooltip. position: fixed (set in JS) so it escapes the\n // viewport overflow; theme-inverted like CoreUI's own tooltip.\n .data-grid-tooltip {\n position: fixed;\n z-index: 1080;\n max-width: 12rem;\n padding: .25rem .5rem;\n font-size: .875rem;\n line-height: 1.4;\n color: var(--cui-body-bg, #fff);\n text-align: center;\n pointer-events: none;\n background-color: var(--cui-emphasis-color, #000);\n border-radius: var(--cui-border-radius, .375rem);\n }\n\n .data-grid-empty > td {\n padding: 2rem 1rem;\n color: var(--cui-secondary-color, #6c757d);\n text-align: center;\n }\n\n .data-grid-pagination {\n display: flex;\n // Wrap the page controls, count and page-size select onto multiple rows on\n // narrow viewports; without this the fixed row overflows and scrolls the page\n // instead of staying inside the grid.\n flex-wrap: wrap;\n gap: var(--cui-data-grid-spacing);\n align-items: center;\n min-height: 48px;\n padding: var(--cui-data-grid-spacing);\n border-top: var(--cui-border-width, 1px) solid var(--cui-border-color, #dee2e6);\n\n &.data-grid-pagination-top {\n border-top: 0;\n border-bottom: var(--cui-border-width, 1px) solid var(--cui-border-color, #dee2e6);\n }\n\n .pagination {\n margin-bottom: 0;\n }\n\n .data-grid-pagination-info {\n margin-inline-start: auto;\n color: var(--cui-secondary-color, #6c757d);\n }\n\n .form-select {\n width: auto;\n }\n }\n}\n","/*!\n * CoreUI PRO data-grid.scss v0.1.0\n * License (https://coreui.io/pro/license/)\n */\n.data-grid {\n position: relative;\n --cui-data-grid-viewport-max-height: 30rem;\n --cui-data-grid-header-bg: var(--cui-body-bg, #fff);\n --cui-data-grid-header-shadow: inset 0 calc(-1 * var(--cui-border-width, 1px)) 0 var(--cui-border-color, #dee2e6);\n --cui-data-grid-select-cell-width: 2.5rem;\n --cui-data-grid-sorter-margin: .25rem;\n --cui-data-grid-sorter-opacity: .3;\n --cui-data-grid-spacing: .5rem;\n --cui-data-grid-resizer-width: .625rem;\n --cui-data-grid-resizer-grip-height: 60%;\n --cui-data-grid-resizer-grip-color: var(--cui-border-color, #dee2e6);\n --cui-data-grid-resizer-grip-color-hover: var(--cui-secondary-color, #6c757d);\n --cui-data-grid-pinned-border-width: var(--cui-border-width);\n --cui-data-grid-pinned-border-color: var(--cui-border-color, #dee2e6);\n --cui-data-grid-drop-indicator: var(--cui-primary, #321fdb);\n --cui-data-grid-menu-bg: var(--cui-body-bg, #fff);\n --cui-data-grid-menu-border-color: var(--cui-border-color, #dee2e6);\n --cui-data-grid-menu-shadow: var(--cui-box-shadow, 0 .5rem 1rem rgba(0, 0, 0, .15));\n --cui-data-grid-menu-min-width: 10rem;\n --cui-data-grid-menu-item-hover-bg: var(--cui-tertiary-bg, #f8f9fa);\n --cui-data-grid-loading-bg: rgba(var(--cui-body-bg-rgb, 255, 255, 255), .6);\n --cui-data-grid-pinned-bg: var(--cui-body-bg, #fff);\n --cui-data-grid-focus-ring-width: 2px;\n --cui-data-grid-focus-ring-color: var(--cui-primary, #321fdb);\n}\n.data-grid .data-grid-toolbar {\n display: flex;\n flex-wrap: wrap;\n gap: var(--cui-data-grid-spacing);\n align-items: center;\n min-height: 48px;\n padding: var(--cui-data-grid-spacing);\n border-bottom: var(--cui-border-width, 1px) solid var(--cui-border-color, #dee2e6);\n}\n.data-grid .data-grid-toolbar-actions {\n display: flex;\n gap: 0.25rem;\n align-items: center;\n}\n.data-grid .data-grid-toolbar-search {\n margin-inline-start: auto;\n}\n.data-grid .data-grid-viewport {\n position: relative;\n max-height: var(--cui-data-grid-viewport-max-height);\n overflow-y: auto;\n overflow-anchor: none;\n}\n.data-grid .data-grid-cell-editor {\n width: 100%;\n min-width: 4rem;\n}\n.data-grid .data-grid-editor-popup {\n position: absolute;\n z-index: 4;\n padding: 0.25rem;\n background-color: var(--cui-data-grid-menu-bg);\n border: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);\n border-radius: var(--cui-border-radius, 0.375rem);\n box-shadow: var(--cui-data-grid-menu-shadow);\n}\n.data-grid [role=grid] :is(td, th):focus-visible {\n outline: var(--cui-data-grid-focus-ring-width) solid var(--cui-data-grid-focus-ring-color);\n outline-offset: calc(-1 * var(--cui-data-grid-focus-ring-width));\n}\n.data-grid .data-grid-viewport:focus-visible {\n outline: 0;\n}\n.data-grid .data-grid-header {\n position: sticky;\n top: 0;\n z-index: 2;\n background-color: var(--cui-data-grid-header-bg);\n box-shadow: var(--cui-data-grid-header-shadow);\n}\n.data-grid .data-grid-header tr:not(.data-grid-filter-row) > th {\n height: 48px;\n vertical-align: middle;\n}\n.data-grid .data-grid-filter-row > th {\n padding-top: 0;\n font-weight: normal;\n}\n.data-grid .data-grid-header th[data-coreui-draggable] {\n cursor: grab;\n}\n.data-grid .data-grid-header-cell {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n.data-grid .data-grid-header-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.data-grid .btn-ghost {\n --cui-btn-padding-x: var(--cui-btn-padding-y);\n --cui-btn-line-height: 1;\n}\n.data-grid .data-grid-menu-button {\n margin-inline-start: auto;\n}\n.data-grid .data-grid-menu {\n position: absolute;\n z-index: 4;\n min-width: var(--cui-data-grid-menu-min-width);\n padding: 0.25rem 0;\n background-color: var(--cui-data-grid-menu-bg);\n border: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);\n border-radius: var(--cui-border-radius, 0.375rem);\n box-shadow: var(--cui-data-grid-menu-shadow);\n}\n.data-grid .data-grid-menu-item {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n width: 100%;\n padding: 0.25rem 0.75rem;\n font: inherit;\n color: inherit;\n text-align: start;\n cursor: pointer;\n background: none;\n border: 0;\n}\n.data-grid .data-grid-menu-item:hover, .data-grid .data-grid-menu-item:focus-visible {\n background-color: var(--cui-data-grid-menu-item-hover-bg);\n}\n.data-grid .data-grid-menu-item[aria-disabled=true] {\n color: var(--cui-secondary-color, #6c757d);\n cursor: default;\n background: none;\n}\n.data-grid .data-grid-filter-menu {\n position: absolute;\n z-index: 4;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n min-width: var(--cui-data-grid-menu-min-width);\n max-width: 18rem;\n padding: 0.75rem;\n background-color: var(--cui-data-grid-menu-bg);\n border: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);\n border-radius: var(--cui-border-radius, 0.375rem);\n box-shadow: var(--cui-data-grid-menu-shadow);\n}\n.data-grid .data-grid-filter-menu > div {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n.data-grid .data-grid-filter-menu-condition {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n.data-grid .data-grid-filter-menu-join {\n display: flex;\n gap: 1rem;\n}\n.data-grid .data-grid-filter-menu-join label {\n display: flex;\n gap: 0.375rem;\n align-items: center;\n}\n.data-grid .data-grid-filter-menu-values {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n max-height: 14rem;\n overflow-y: auto;\n}\n.data-grid .data-grid-filter-menu-footer {\n display: flex;\n gap: 0.5rem;\n justify-content: flex-end;\n}\n.data-grid .data-grid-column-chooser {\n position: absolute;\n z-index: 4;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n min-width: var(--cui-data-grid-menu-min-width);\n max-width: 18rem;\n max-height: 20rem;\n padding: 0.75rem;\n overflow-y: auto;\n background-color: var(--cui-data-grid-menu-bg);\n border: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);\n border-radius: var(--cui-border-radius, 0.375rem);\n box-shadow: var(--cui-data-grid-menu-shadow);\n}\n.data-grid .data-grid-column-chooser-option {\n display: flex;\n gap: 0.375rem;\n align-items: center;\n margin-bottom: 0;\n}\n.data-grid .data-grid-column-chooser-footer {\n display: flex;\n gap: 0.5rem;\n justify-content: flex-end;\n padding-top: 0.25rem;\n margin-top: 0.25rem;\n border-top: var(--cui-border-width, 1px) solid var(--cui-data-grid-menu-border-color);\n}\n.data-grid .data-grid-filter-button {\n position: relative;\n margin-inline-start: auto;\n}\n.data-grid .data-grid-filter-button ~ .data-grid-menu-button {\n margin-inline-start: 0;\n}\n.data-grid .data-grid-filter-button-filtered::after {\n position: absolute;\n inset-block-start: 0.125rem;\n inset-inline-end: 0.125rem;\n width: 0.375rem;\n height: 0.375rem;\n content: \"\";\n background-color: var(--cui-primary, #321fdb);\n border-radius: 50%;\n}\n.data-grid .data-grid-menu-item-icon {\n display: inline-flex;\n opacity: 0.75;\n}\n.data-grid .data-grid-menu-item-icon svg {\n width: 1em;\n height: 1em;\n}\n.data-grid .data-grid-menu-divider {\n height: var(--cui-border-width, 1px);\n margin: 0.25rem 0;\n background-color: var(--cui-data-grid-menu-border-color);\n}\n.data-grid .data-grid-header .data-grid-dragging {\n opacity: 0.5;\n}\n.data-grid .data-grid-header .data-grid-drop-target {\n box-shadow: inset 0.125rem 0 0 var(--cui-data-grid-drop-indicator);\n}\n.data-grid .data-grid-select-cell {\n width: var(--cui-data-grid-select-cell-width);\n text-align: center;\n}\n.data-grid .data-grid-sort-button {\n display: inline-flex;\n align-items: center;\n gap: var(--cui-data-grid-sorter-margin);\n padding: 0;\n font: inherit;\n color: inherit;\n cursor: pointer;\n user-select: none;\n background: none;\n border: 0;\n}\n.data-grid .data-grid-sort-icon {\n display: inline-flex;\n font-size: 0.875em;\n opacity: 0;\n}\n.data-grid .data-grid-sort-icon svg {\n width: 1em;\n height: 1em;\n}\n.data-grid .data-grid-sortable[aria-sort] .data-grid-sort-icon {\n opacity: 1;\n}\n.data-grid[data-coreui-sorter-visibility=always] .data-grid-sortable:not([aria-sort]) .data-grid-sort-icon {\n opacity: var(--cui-data-grid-sorter-opacity);\n}\n.data-grid[data-coreui-sorter-visibility=hover] .data-grid-sortable:not([aria-sort]):hover .data-grid-sort-icon, .data-grid[data-coreui-sorter-visibility=hover] .data-grid-sortable:not([aria-sort]):focus-within .data-grid-sort-icon {\n opacity: var(--cui-data-grid-sorter-opacity);\n}\n.data-grid .data-grid-viewport > .table {\n margin-bottom: 0;\n table-layout: fixed;\n}\n.data-grid .data-grid-viewport > .table > tbody > tr:not(.data-grid-empty) > td:not(.data-grid-select-cell):not(.data-grid-cell-pinned-left):not(.data-grid-cell-pinned-right) {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.data-grid.data-grid-resizable .data-grid-viewport, .data-grid.data-grid-pinned .data-grid-viewport {\n overflow-x: auto;\n}\n.data-grid.data-grid-resizable .table, .data-grid.data-grid-pinned .table {\n width: max-content;\n min-width: 100%;\n}\n.data-grid.data-grid-resizable .data-grid-header th:not(.data-grid-cell-pinned-left):not(.data-grid-cell-pinned-right) {\n position: relative;\n}\n.data-grid.data-grid-pinned .table {\n border-collapse: separate;\n border-spacing: 0;\n}\n.data-grid .data-grid-cell-pinned-left,\n.data-grid .data-grid-cell-pinned-right {\n position: sticky;\n z-index: 1;\n background-color: var(--cui-data-grid-pinned-bg);\n}\n.data-grid .data-grid-header .data-grid-cell-pinned-left,\n.data-grid .data-grid-header .data-grid-cell-pinned-right {\n z-index: 3;\n}\n.data-grid .data-grid-cell-pinned-left-last,\n.data-grid .data-grid-cell-pinned-right-first {\n position: sticky;\n}\n.data-grid .data-grid-cell-pinned-left-last::after,\n.data-grid .data-grid-cell-pinned-right-first::after {\n position: absolute;\n top: 0;\n bottom: 0;\n width: var(--cui-data-grid-pinned-border-width);\n pointer-events: none;\n content: \"\";\n}\n.data-grid .data-grid-cell-pinned-left-last::after {\n right: 0;\n background: var(--cui-data-grid-pinned-border-color);\n}\n.data-grid .data-grid-cell-pinned-right-first::after {\n left: 0;\n background: var(--cui-data-grid-pinned-border-color);\n}\n.data-grid .data-grid-resizer {\n position: absolute;\n top: 0;\n right: calc(-0.5 * var(--cui-data-grid-resizer-width));\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--cui-data-grid-resizer-width);\n height: 100%;\n cursor: col-resize;\n touch-action: none;\n user-select: none;\n}\n.data-grid .data-grid-resizer::after {\n width: 2px;\n height: var(--cui-data-grid-resizer-grip-height);\n content: \"\";\n background-color: var(--cui-data-grid-resizer-grip-color);\n transition: background-color 0.15s ease;\n}\n.data-grid .data-grid-resizer:hover::after, .data-grid .data-grid-resizer.data-grid-resizer-active::after {\n background-color: var(--cui-data-grid-resizer-grip-color-hover);\n}\n.data-grid .data-grid-spacer > td {\n padding: 0;\n border: 0;\n}\n.data-grid .data-grid-viewport > .table-striped > tbody > tr:nth-of-type(odd) > * {\n --cui-table-color-type: initial;\n --cui-table-bg-type: initial;\n}\n.data-grid .data-grid-viewport > .table-striped > tbody > tr.data-grid-row-odd > * {\n --cui-table-color-type: var(--cui-table-striped-color);\n --cui-table-bg-type: var(--cui-table-striped-bg);\n}\n.data-grid .data-grid-viewport > .table > tbody > tr:last-child > * {\n border-bottom-width: 0;\n}\n.data-grid .data-grid-loading {\n position: absolute;\n inset: 0;\n z-index: 3;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--cui-data-grid-loading-bg);\n}\n.data-grid .data-grid-tooltip {\n position: fixed;\n z-index: 1080;\n max-width: 12rem;\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.4;\n color: var(--cui-body-bg, #fff);\n text-align: center;\n pointer-events: none;\n background-color: var(--cui-emphasis-color, #000);\n border-radius: var(--cui-border-radius, 0.375rem);\n}\n.data-grid .data-grid-empty > td {\n padding: 2rem 1rem;\n color: var(--cui-secondary-color, #6c757d);\n text-align: center;\n}\n.data-grid .data-grid-pagination {\n display: flex;\n flex-wrap: wrap;\n gap: var(--cui-data-grid-spacing);\n align-items: center;\n min-height: 48px;\n padding: var(--cui-data-grid-spacing);\n border-top: var(--cui-border-width, 1px) solid var(--cui-border-color, #dee2e6);\n}\n.data-grid .data-grid-pagination.data-grid-pagination-top {\n border-top: 0;\n border-bottom: var(--cui-border-width, 1px) solid var(--cui-border-color, #dee2e6);\n}\n.data-grid .data-grid-pagination .pagination {\n margin-bottom: 0;\n}\n.data-grid .data-grid-pagination .data-grid-pagination-info {\n margin-inline-start: auto;\n color: var(--cui-secondary-color, #6c757d);\n}\n.data-grid .data-grid-pagination .form-select {\n width: auto;\n}\n\n/*# sourceMappingURL=data-grid.css.map */\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* CoreUI PRO data-grid.scss v0.1.0
|
|
3
|
+
* License (https://coreui.io/pro/license/)
|
|
4
|
+
*/.data-grid{position:relative;--cui-data-grid-viewport-max-height:30rem;--cui-data-grid-header-bg:var(--cui-body-bg, #fff);--cui-data-grid-header-shadow:inset 0 calc(-1 * var(--cui-border-width, 1px)) 0 var(--cui-border-color, #dee2e6);--cui-data-grid-select-cell-width:2.5rem;--cui-data-grid-sorter-margin:.25rem;--cui-data-grid-sorter-opacity:.3;--cui-data-grid-spacing:.5rem;--cui-data-grid-resizer-width:.625rem;--cui-data-grid-resizer-grip-height:60%;--cui-data-grid-resizer-grip-color:var(--cui-border-color, #dee2e6);--cui-data-grid-resizer-grip-color-hover:var(--cui-secondary-color, #6c757d);--cui-data-grid-pinned-border-width:var(--cui-border-width);--cui-data-grid-pinned-border-color:var(--cui-border-color, #dee2e6);--cui-data-grid-drop-indicator:var(--cui-primary, #321fdb);--cui-data-grid-menu-bg:var(--cui-body-bg, #fff);--cui-data-grid-menu-border-color:var(--cui-border-color, #dee2e6);--cui-data-grid-menu-shadow:var(--cui-box-shadow, 0 .5rem 1rem rgba(0, 0, 0, .15));--cui-data-grid-menu-min-width:10rem;--cui-data-grid-menu-item-hover-bg:var(--cui-tertiary-bg, #f8f9fa);--cui-data-grid-loading-bg:rgba(var(--cui-body-bg-rgb, 255, 255, 255), .6);--cui-data-grid-pinned-bg:var(--cui-body-bg, #fff);--cui-data-grid-focus-ring-width:2px;--cui-data-grid-focus-ring-color:var(--cui-primary, #321fdb)}.data-grid .data-grid-toolbar{display:flex;flex-wrap:wrap;gap:var(--cui-data-grid-spacing);align-items:center;min-height:48px;padding:var(--cui-data-grid-spacing);border-bottom:var(--cui-border-width,1px) solid var(--cui-border-color,#dee2e6)}.data-grid .data-grid-toolbar-actions{display:flex;gap:.25rem;align-items:center}.data-grid .data-grid-toolbar-search{-webkit-margin-start:auto;margin-inline-start:auto}.data-grid .data-grid-viewport{position:relative;max-height:var(--cui-data-grid-viewport-max-height);overflow-y:auto;overflow-anchor:none}.data-grid .data-grid-cell-editor{width:100%;min-width:4rem}.data-grid .data-grid-editor-popup{position:absolute;z-index:4;padding:.25rem;background-color:var(--cui-data-grid-menu-bg);border:var(--cui-border-width,1px) solid var(--cui-data-grid-menu-border-color);border-radius:var(--cui-border-radius,.375rem);box-shadow:var(--cui-data-grid-menu-shadow)}.data-grid [role=grid] :is(td,th):focus-visible{outline:var(--cui-data-grid-focus-ring-width) solid var(--cui-data-grid-focus-ring-color);outline-offset:calc(-1 * var(--cui-data-grid-focus-ring-width))}.data-grid .data-grid-viewport:focus-visible{outline:0}.data-grid .data-grid-header{position:-webkit-sticky;position:sticky;top:0;z-index:2;background-color:var(--cui-data-grid-header-bg);box-shadow:var(--cui-data-grid-header-shadow)}.data-grid .data-grid-header tr:not(.data-grid-filter-row)>th{height:48px;vertical-align:middle}.data-grid .data-grid-filter-row>th{padding-top:0;font-weight:400}.data-grid .data-grid-header th[data-coreui-draggable]{cursor:-webkit-grab;cursor:grab}.data-grid .data-grid-header-cell{display:flex;align-items:center;gap:.25rem}.data-grid .data-grid-header-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.data-grid .btn-ghost{--cui-btn-padding-x:var(--cui-btn-padding-y);--cui-btn-line-height:1}.data-grid .data-grid-menu-button{-webkit-margin-start:auto;margin-inline-start:auto}.data-grid .data-grid-menu{position:absolute;z-index:4;min-width:var(--cui-data-grid-menu-min-width);padding:.25rem 0;background-color:var(--cui-data-grid-menu-bg);border:var(--cui-border-width,1px) solid var(--cui-data-grid-menu-border-color);border-radius:var(--cui-border-radius,.375rem);box-shadow:var(--cui-data-grid-menu-shadow)}.data-grid .data-grid-menu-item{display:flex;align-items:center;gap:.5rem;width:100%;padding:.25rem .75rem;font:inherit;color:inherit;text-align:start;cursor:pointer;background:0 0;border:0}.data-grid .data-grid-menu-item:focus-visible,.data-grid .data-grid-menu-item:hover{background-color:var(--cui-data-grid-menu-item-hover-bg)}.data-grid .data-grid-menu-item[aria-disabled=true]{color:var(--cui-secondary-color,#6c757d);cursor:default;background:0 0}.data-grid .data-grid-filter-menu{position:absolute;z-index:4;display:flex;flex-direction:column;gap:.5rem;min-width:var(--cui-data-grid-menu-min-width);max-width:18rem;padding:.75rem;background-color:var(--cui-data-grid-menu-bg);border:var(--cui-border-width,1px) solid var(--cui-data-grid-menu-border-color);border-radius:var(--cui-border-radius,.375rem);box-shadow:var(--cui-data-grid-menu-shadow)}.data-grid .data-grid-filter-menu>div{display:flex;flex-direction:column;gap:.5rem}.data-grid .data-grid-filter-menu-condition{display:flex;flex-direction:column;gap:.25rem}.data-grid .data-grid-filter-menu-join{display:flex;gap:1rem}.data-grid .data-grid-filter-menu-join label{display:flex;gap:.375rem;align-items:center}.data-grid .data-grid-filter-menu-values{display:flex;flex-direction:column;gap:.25rem;max-height:14rem;overflow-y:auto}.data-grid .data-grid-filter-menu-footer{display:flex;gap:.5rem;justify-content:flex-end}.data-grid .data-grid-column-chooser{position:absolute;z-index:4;display:flex;flex-direction:column;gap:.5rem;min-width:var(--cui-data-grid-menu-min-width);max-width:18rem;max-height:20rem;padding:.75rem;overflow-y:auto;background-color:var(--cui-data-grid-menu-bg);border:var(--cui-border-width,1px) solid var(--cui-data-grid-menu-border-color);border-radius:var(--cui-border-radius,.375rem);box-shadow:var(--cui-data-grid-menu-shadow)}.data-grid .data-grid-column-chooser-option{display:flex;gap:.375rem;align-items:center;margin-bottom:0}.data-grid .data-grid-column-chooser-footer{display:flex;gap:.5rem;justify-content:flex-end;padding-top:.25rem;margin-top:.25rem;border-top:var(--cui-border-width,1px) solid var(--cui-data-grid-menu-border-color)}.data-grid .data-grid-filter-button{position:relative;-webkit-margin-start:auto;margin-inline-start:auto}.data-grid .data-grid-filter-button~.data-grid-menu-button{-webkit-margin-start:0;margin-inline-start:0}.data-grid .data-grid-filter-button-filtered::after{position:absolute;inset-block-start:0.125rem;inset-inline-end:0.125rem;width:.375rem;height:.375rem;content:"";background-color:var(--cui-primary,#321fdb);border-radius:50%}.data-grid .data-grid-menu-item-icon{display:inline-flex;opacity:.75}.data-grid .data-grid-menu-item-icon svg{width:1em;height:1em}.data-grid .data-grid-menu-divider{height:var(--cui-border-width,1px);margin:.25rem 0;background-color:var(--cui-data-grid-menu-border-color)}.data-grid .data-grid-header .data-grid-dragging{opacity:.5}.data-grid .data-grid-header .data-grid-drop-target{box-shadow:inset .125rem 0 0 var(--cui-data-grid-drop-indicator)}.data-grid .data-grid-select-cell{width:var(--cui-data-grid-select-cell-width);text-align:center}.data-grid .data-grid-sort-button{display:inline-flex;align-items:center;gap:var(--cui-data-grid-sorter-margin);padding:0;font:inherit;color:inherit;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background:0 0;border:0}.data-grid .data-grid-sort-icon{display:inline-flex;font-size:.875em;opacity:0}.data-grid .data-grid-sort-icon svg{width:1em;height:1em}.data-grid .data-grid-sortable[aria-sort] .data-grid-sort-icon{opacity:1}.data-grid[data-coreui-sorter-visibility=always] .data-grid-sortable:not([aria-sort]) .data-grid-sort-icon{opacity:var(--cui-data-grid-sorter-opacity)}.data-grid[data-coreui-sorter-visibility=hover] .data-grid-sortable:not([aria-sort]):focus-within .data-grid-sort-icon,.data-grid[data-coreui-sorter-visibility=hover] .data-grid-sortable:not([aria-sort]):hover .data-grid-sort-icon{opacity:var(--cui-data-grid-sorter-opacity)}.data-grid .data-grid-viewport>.table{margin-bottom:0;table-layout:fixed}.data-grid .data-grid-viewport>.table>tbody>tr:not(.data-grid-empty)>td:not(.data-grid-select-cell):not(.data-grid-cell-pinned-left):not(.data-grid-cell-pinned-right){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.data-grid.data-grid-pinned .data-grid-viewport,.data-grid.data-grid-resizable .data-grid-viewport{overflow-x:auto}.data-grid.data-grid-pinned .table,.data-grid.data-grid-resizable .table{width:-webkit-max-content;width:-moz-max-content;width:max-content;min-width:100%}.data-grid.data-grid-resizable .data-grid-header th:not(.data-grid-cell-pinned-left):not(.data-grid-cell-pinned-right){position:relative}.data-grid.data-grid-pinned .table{border-collapse:separate;border-spacing:0}.data-grid .data-grid-cell-pinned-left,.data-grid .data-grid-cell-pinned-right{position:-webkit-sticky;position:sticky;z-index:1;background-color:var(--cui-data-grid-pinned-bg)}.data-grid .data-grid-header .data-grid-cell-pinned-left,.data-grid .data-grid-header .data-grid-cell-pinned-right{z-index:3}.data-grid .data-grid-cell-pinned-left-last,.data-grid .data-grid-cell-pinned-right-first{position:-webkit-sticky;position:sticky}.data-grid .data-grid-cell-pinned-left-last::after,.data-grid .data-grid-cell-pinned-right-first::after{position:absolute;top:0;bottom:0;width:var(--cui-data-grid-pinned-border-width);pointer-events:none;content:""}.data-grid .data-grid-cell-pinned-left-last::after{right:0;background:var(--cui-data-grid-pinned-border-color)}.data-grid .data-grid-cell-pinned-right-first::after{left:0;background:var(--cui-data-grid-pinned-border-color)}.data-grid .data-grid-resizer{position:absolute;top:0;right:calc(-.5 * var(--cui-data-grid-resizer-width));z-index:1;display:flex;align-items:center;justify-content:center;width:var(--cui-data-grid-resizer-width);height:100%;cursor:col-resize;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.data-grid .data-grid-resizer::after{width:2px;height:var(--cui-data-grid-resizer-grip-height);content:"";background-color:var(--cui-data-grid-resizer-grip-color);transition:background-color .15s ease}.data-grid .data-grid-resizer.data-grid-resizer-active::after,.data-grid .data-grid-resizer:hover::after{background-color:var(--cui-data-grid-resizer-grip-color-hover)}.data-grid .data-grid-spacer>td{padding:0;border:0}.data-grid .data-grid-viewport>.table-striped>tbody>tr:nth-of-type(odd)>*{--cui-table-color-type:initial;--cui-table-bg-type:initial}.data-grid .data-grid-viewport>.table-striped>tbody>tr.data-grid-row-odd>*{--cui-table-color-type:var(--cui-table-striped-color);--cui-table-bg-type:var(--cui-table-striped-bg)}.data-grid .data-grid-viewport>.table>tbody>tr:last-child>*{border-bottom-width:0}.data-grid .data-grid-loading{position:absolute;inset:0;z-index:3;display:flex;align-items:center;justify-content:center;background-color:var(--cui-data-grid-loading-bg)}.data-grid .data-grid-tooltip{position:fixed;z-index:1080;max-width:12rem;padding:.25rem .5rem;font-size:.875rem;line-height:1.4;color:var(--cui-body-bg,#fff);text-align:center;pointer-events:none;background-color:var(--cui-emphasis-color,#000);border-radius:var(--cui-border-radius,.375rem)}.data-grid .data-grid-empty>td{padding:2rem 1rem;color:var(--cui-secondary-color,#6c757d);text-align:center}.data-grid .data-grid-pagination{display:flex;flex-wrap:wrap;gap:var(--cui-data-grid-spacing);align-items:center;min-height:48px;padding:var(--cui-data-grid-spacing);border-top:var(--cui-border-width,1px) solid var(--cui-border-color,#dee2e6)}.data-grid .data-grid-pagination.data-grid-pagination-top{border-top:0;border-bottom:var(--cui-border-width,1px) solid var(--cui-border-color,#dee2e6)}.data-grid .data-grid-pagination .pagination{margin-bottom:0}.data-grid .data-grid-pagination .data-grid-pagination-info{-webkit-margin-start:auto;margin-inline-start:auto;color:var(--cui-secondary-color,#6c757d)}.data-grid .data-grid-pagination .form-select{width:auto}
|
|
5
|
+
/*# sourceMappingURL=data-grid.min.css.map */
|