@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.
Files changed (101) hide show
  1. package/LICENSE +3 -0
  2. package/README.md +37 -0
  3. package/dist/css/data-grid.css +444 -0
  4. package/dist/css/data-grid.css.map +1 -0
  5. package/dist/css/data-grid.min.css +5 -0
  6. package/dist/css/data-grid.min.css.map +1 -0
  7. package/dist/js/csv.cjs +68 -0
  8. package/dist/js/csv.cjs.map +1 -0
  9. package/dist/js/csv.mjs +63 -0
  10. package/dist/js/csv.mjs.map +1 -0
  11. package/dist/js/data-grid.esm.js +9618 -0
  12. package/dist/js/data-grid.esm.js.map +1 -0
  13. package/dist/js/data-grid.esm.min.js +8 -0
  14. package/dist/js/data-grid.esm.min.js.map +1 -0
  15. package/dist/js/data-grid.js +9635 -0
  16. package/dist/js/data-grid.js.map +1 -0
  17. package/dist/js/data-grid.min.js +8 -0
  18. package/dist/js/data-grid.min.js.map +1 -0
  19. package/dist/js/data-grid.mjs +9618 -0
  20. package/dist/js/data-grid.mjs.map +1 -0
  21. package/dist/js/filters.cjs +143 -0
  22. package/dist/js/filters.cjs.map +1 -0
  23. package/dist/js/filters.mjs +137 -0
  24. package/dist/js/filters.mjs.map +1 -0
  25. package/dist/js/labels.cjs +76 -0
  26. package/dist/js/labels.cjs.map +1 -0
  27. package/dist/js/labels.mjs +71 -0
  28. package/dist/js/labels.mjs.map +1 -0
  29. package/dist/types/base-component.d.ts +19 -0
  30. package/dist/types/data-grid.d.ts +128 -0
  31. package/dist/types/dom/event-handler.d.ts +11 -0
  32. package/dist/types/dom/manipulator.d.ts +9 -0
  33. package/dist/types/engine/active-cell.d.ts +32 -0
  34. package/dist/types/engine/data-source.d.ts +19 -0
  35. package/dist/types/engine/scheduler.d.ts +11 -0
  36. package/dist/types/engine/table.d.ts +9 -0
  37. package/dist/types/engine/virtualizer.d.ts +21 -0
  38. package/dist/types/filters.d.mts +1 -0
  39. package/dist/types/filters.d.ts +13 -0
  40. package/dist/types/icons.d.ts +21 -0
  41. package/dist/types/index.d.mts +1 -0
  42. package/dist/types/index.d.ts +12 -0
  43. package/dist/types/labels.d.mts +1 -0
  44. package/dist/types/labels.d.ts +9 -0
  45. package/dist/types/types.d.ts +262 -0
  46. package/dist/types/ui/body.d.ts +34 -0
  47. package/dist/types/ui/column-chooser.d.ts +27 -0
  48. package/dist/types/ui/editor.d.ts +8 -0
  49. package/dist/types/ui/filter-menu.d.ts +21 -0
  50. package/dist/types/ui/header.d.ts +50 -0
  51. package/dist/types/ui/loading.d.ts +12 -0
  52. package/dist/types/ui/menu.d.ts +17 -0
  53. package/dist/types/ui/pagination.d.ts +17 -0
  54. package/dist/types/ui/pinning.d.ts +17 -0
  55. package/dist/types/ui/toolbar.d.ts +34 -0
  56. package/dist/types/ui/tooltip.d.ts +10 -0
  57. package/dist/types/util/config.d.ts +11 -0
  58. package/dist/types/util/csv.d.mts +1 -0
  59. package/dist/types/util/csv.d.ts +19 -0
  60. package/dist/types/util/debounce.d.ts +7 -0
  61. package/dist/types/util/index.d.ts +10 -0
  62. package/dist/types/util/sanitizer.d.ts +11 -0
  63. package/package.json +147 -0
  64. package/scss/data-grid.scss +559 -0
  65. package/src/base-component.d.ts +19 -0
  66. package/src/base-component.js +90 -0
  67. package/src/data-grid.ts +2208 -0
  68. package/src/dom/data.js +59 -0
  69. package/src/dom/event-handler.d.ts +11 -0
  70. package/src/dom/event-handler.js +331 -0
  71. package/src/dom/manipulator.d.ts +9 -0
  72. package/src/dom/manipulator.js +75 -0
  73. package/src/engine/active-cell.ts +195 -0
  74. package/src/engine/data-source.ts +63 -0
  75. package/src/engine/scheduler.ts +42 -0
  76. package/src/engine/table.ts +122 -0
  77. package/src/engine/virtualizer.ts +57 -0
  78. package/src/filters.ts +176 -0
  79. package/src/icons.ts +60 -0
  80. package/src/index.ts +56 -0
  81. package/src/labels.ts +70 -0
  82. package/src/types.ts +334 -0
  83. package/src/ui/body.ts +348 -0
  84. package/src/ui/column-chooser.ts +183 -0
  85. package/src/ui/editor.ts +98 -0
  86. package/src/ui/filter-menu.ts +398 -0
  87. package/src/ui/header.ts +441 -0
  88. package/src/ui/loading.ts +39 -0
  89. package/src/ui/menu.ts +218 -0
  90. package/src/ui/pagination.ts +150 -0
  91. package/src/ui/pinning.ts +53 -0
  92. package/src/ui/toolbar.ts +144 -0
  93. package/src/ui/tooltip.ts +113 -0
  94. package/src/util/config.d.ts +11 -0
  95. package/src/util/config.js +69 -0
  96. package/src/util/csv.ts +85 -0
  97. package/src/util/debounce.ts +18 -0
  98. package/src/util/index.d.ts +10 -0
  99. package/src/util/index.js +310 -0
  100. package/src/util/sanitizer.d.ts +11 -0
  101. package/src/util/sanitizer.js +162 -0
package/LICENSE ADDED
@@ -0,0 +1,3 @@
1
+ Copyright (c) 2026 creativeLabs Łukasz Holeczek
2
+
3
+ This is commercial software. To use it, you have to own a commercial license.
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":"AAAA;;;EAAA;AAKA;EAGE,kBAAA;EAIA,0CAAA;EACA,mDAAA;EACA,iHAAA;EACA,yCAAA;EACA,qCAAA;EACA,kCAAA;EACA,8BAAA;EACA,sCAAA;EACA,wCAAA;EACA,oEAAA;EACA,6EAAA;EACA,4DAAA;EACA,qEAAA;EACA,2DAAA;EACA,iDAAA;EACA,mEAAA;EACA,mFAAA;EACA,qCAAA;EACA,mEAAA;EACA,2EAAA;EACA,mDAAA;EACA,qCAAA;EACA,6DAAA;ACLF;ADOE;EACE,aAAA;EACA,eAAA;EACA,iCAAA;EACA,mBAAA;EACA,gBAAA;EACA,qCAAA;EACA,kFAAA;ACLJ;ADQE;EACE,aAAA;EACA,YAAA;EACA,mBAAA;ACNJ;ADSE;EACE,0BAAA;EAAA,yBAAA;ACPJ;ADUE;EACE,kBAAA;EACA,oDAAA;EACA,gBAAA;EAIA,qBAAA;ACXJ;ADgBE;EACE,WAAA;EACA,eAAA;ACdJ;ADiBE;EACE,kBAAA;EACA,UAAA;EACA,gBAAA;EACA,8CAAA;EACA,iFAAA;EACA,iDAAA;EACA,4CAAA;ACfJ;ADoBE;EACE,0FAAA;EACA,gEAAA;AClBJ;ADqBE;EACE,UAAA;ACnBJ;ADsBE;EACE,wBAAA;EAAA,gBAAA;EACA,MAAA;EACA,UAAA;EACA,gDAAA;EACA,8CAAA;ACpBJ;ADyBE;EACE,YAAA;EACA,sBAAA;ACvBJ;AD0BE;EACE,cAAA;EACA,mBAAA;ACxBJ;AD2BE;EACE,oBAAA;EAAA,YAAA;ACzBJ;AD4BE;EACE,aAAA;EACA,mBAAA;EACA,YAAA;AC1BJ;AD6BE;EACE,gBAAA;EACA,uBAAA;EACA,mBAAA;AC3BJ;ADiCE;EACE,6CAAA;EACA,wBAAA;AC/BJ;ADkCE;EACE,0BAAA;EAAA,yBAAA;AChCJ;ADmCE;EACE,kBAAA;EACA,UAAA;EACA,8CAAA;EACA,kBAAA;EACA,8CAAA;EACA,iFAAA;EACA,iDAAA;EACA,4CAAA;ACjCJ;ADoCE;EACE,aAAA;EACA,mBAAA;EACA,WAAA;EACA,WAAA;EACA,wBAAA;EACA,aAAA;EACA,cAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,SAAA;AClCJ;ADoCI;EAEE,yDAAA;ACnCN;ADwCI;EACE,0CAAA;EACA,eAAA;EACA,gBAAA;ACtCN;AD0CE;EACE,kBAAA;EACA,UAAA;EACA,aAAA;EACA,sBAAA;EACA,WAAA;EACA,8CAAA;EACA,gBAAA;EACA,gBAAA;EACA,8CAAA;EACA,iFAAA;EACA,iDAAA;EACA,4CAAA;ACxCJ;AD0CI;EACE,aAAA;EACA,sBAAA;EACA,WAAA;ACxCN;AD4CE;EACE,aAAA;EACA,sBAAA;EACA,YAAA;AC1CJ;AD6CE;EACE,aAAA;EACA,SAAA;AC3CJ;AD6CI;EACE,aAAA;EACA,aAAA;EACA,mBAAA;AC3CN;AD+CE;EACE,aAAA;EACA,sBAAA;EACA,YAAA;EACA,iBAAA;EACA,gBAAA;AC7CJ;ADgDE;EACE,aAAA;EACA,WAAA;EACA,yBAAA;AC9CJ;ADiDE;EACE,kBAAA;EACA,UAAA;EACA,aAAA;EACA,sBAAA;EACA,WAAA;EACA,8CAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,gBAAA;EACA,8CAAA;EACA,iFAAA;EACA,iDAAA;EACA,4CAAA;AC/CJ;ADkDE;EACE,aAAA;EACA,aAAA;EACA,mBAAA;EACA,gBAAA;AChDJ;ADmDE;EACE,aAAA;EACA,WAAA;EACA,yBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qFAAA;ACjDJ;ADoDE;EACE,kBAAA;EAIA,0BAAA;EAAA,yBAAA;ACrDJ;ADuDI;EACE,uBAAA;EAAA,sBAAA;ACrDN;AD0DE;EACE,kBAAA;EACA,2BAAA;EACA,0BAAA;EACA,eAAA;EACA,gBAAA;EACA,WAAA;EACA,6CAAA;EACA,kBAAA;ACxDJ;AD2DE;EACE,oBAAA;EACA,aAAA;ACzDJ;AD2DI;EACE,UAAA;EACA,WAAA;ACzDN;AD6DE;EACE,oCAAA;EACA,iBAAA;EACA,wDAAA;AC3DJ;AD8DE;EACE,YAAA;AC5DJ;AD+DE;EACE,kEAAA;AC7DJ;ADgEE;EACE,6CAAA;EACA,kBAAA;AC9DJ;ADiEE;EACE,oBAAA;EACA,mBAAA;EACA,uCAAA;EACA,UAAA;EACA,aAAA;EACA,cAAA;EACA,eAAA;EACA,yBAAA;EAAA,sBAAA;EAAA,iBAAA;EACA,gBAAA;EACA,SAAA;AC/DJ;ADkEE;EACE,oBAAA;EACA,kBAAA;EACA,UAAA;AChEJ;ADkEI;EACE,UAAA;EACA,WAAA;AChEN;ADuEE;EACE,UAAA;ACrEJ;ADwEE;EACE,4CAAA;ACtEJ;ADyEE;EAEE,4CAAA;ACxEJ;AD2EE;EACE,gBAAA;EACA,mBAAA;ACzEJ;ADmFE;EACE,gBAAA;EACA,uBAAA;EACA,mBAAA;ACjFJ;AD0FI;EACE,gBAAA;ACxFN;AD2FI;EACE,0BAAA;EAAA,uBAAA;EAAA,kBAAA;EACA,eAAA;ACzFN;AD+FE;EACE,kBAAA;AC7FJ;ADgGE;EAGE,yBAAA;EACA,iBAAA;AChGJ;ADmGE;;EAEE,wBAAA;EAAA,gBAAA;EACA,UAAA;EACA,gDAAA;ACjGJ;ADoGE;;EAEE,UAAA;AClGJ;ADuGE;;EAEE,wBAAA;EAAA,gBAAA;ACrGJ;ADuGI;;EACE,kBAAA;EACA,MAAA;EACA,SAAA;EACA,+CAAA;EACA,oBAAA;EACA,WAAA;ACpGN;ADwGE;EACE,QAAA;EACA,oDAAA;ACtGJ;ADyGE;EACE,OAAA;EACA,oDAAA;ACvGJ;AD0GE;EACE,kBAAA;EACA,MAAA;EACA,sDAAA;EACA,UAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,yCAAA;EACA,YAAA;EACA,kBAAA;EACA,kBAAA;EACA,yBAAA;EAAA,sBAAA;EAAA,iBAAA;ACxGJ;AD4GI;EACE,UAAA;EACA,gDAAA;EACA,WAAA;EACA,yDAAA;EACA,uCAAA;AC1GN;AD6GI;EAEE,+DAAA;AC5GN;ADgHE;EACE,UAAA;EACA,SAAA;AC9GJ;ADmHE;EACE,+BAAA;EACA,4BAAA;ACjHJ;ADoHE;EACE,sDAAA;EACA,gDAAA;AClHJ;ADuHE;EACE,sBAAA;ACrHJ;ADwHE;EACE,kBAAA;EACA,QAAA;EACA,UAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,iDAAA;ACtHJ;AD2HE;EACE,eAAA;EACA,aAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;EACA,gBAAA;EACA,+BAAA;EACA,kBAAA;EACA,oBAAA;EACA,iDAAA;EACA,iDAAA;ACzHJ;AD4HE;EACE,kBAAA;EACA,0CAAA;EACA,kBAAA;AC1HJ;AD6HE;EACE,aAAA;EAIA,eAAA;EACA,iCAAA;EACA,mBAAA;EACA,gBAAA;EACA,qCAAA;EACA,+EAAA;AC9HJ;ADgII;EACE,aAAA;EACA,kFAAA;AC9HN;ADiII;EACE,gBAAA;AC/HN;ADkII;EACE,0BAAA;EAAA,yBAAA;EACA,0CAAA;AChIN;ADmII;EACE,WAAA;ACjIN","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 */