@coreui/data-grid 0.2.0-rc.0 → 0.4.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 (143) hide show
  1. package/README.md +4 -2
  2. package/dist/css/data-grid.css +11 -11
  3. package/dist/css/data-grid.css.map +1 -1
  4. package/dist/css/data-grid.min.css +2 -2
  5. package/dist/css/data-grid.min.css.map +1 -1
  6. package/dist/css/data-grid.standalone.css +1066 -0
  7. package/dist/css/data-grid.standalone.css.map +1 -0
  8. package/dist/css/data-grid.standalone.min.css +5 -0
  9. package/dist/css/data-grid.standalone.min.css.map +1 -0
  10. package/dist/js/clipboard.cjs +2 -3
  11. package/dist/js/clipboard.mjs +2 -3
  12. package/dist/js/csv.cjs +5 -6
  13. package/dist/js/csv.cjs.map +1 -1
  14. package/dist/js/csv.mjs +5 -6
  15. package/dist/js/csv.mjs.map +1 -1
  16. package/dist/js/data-grid.esm.js +5685 -5422
  17. package/dist/js/data-grid.esm.js.map +1 -1
  18. package/dist/js/data-grid.esm.min.js +2 -2
  19. package/dist/js/data-grid.esm.min.js.map +1 -1
  20. package/dist/js/data-grid.js +5685 -5423
  21. package/dist/js/data-grid.js.map +1 -1
  22. package/dist/js/data-grid.lite.esm.js +2707 -2629
  23. package/dist/js/data-grid.lite.esm.js.map +1 -1
  24. package/dist/js/data-grid.lite.esm.min.js +2 -2
  25. package/dist/js/data-grid.lite.esm.min.js.map +1 -1
  26. package/dist/js/data-grid.lite.js +2707 -2630
  27. package/dist/js/data-grid.lite.js.map +1 -1
  28. package/dist/js/data-grid.lite.min.js +2 -2
  29. package/dist/js/data-grid.lite.min.js.map +1 -1
  30. package/dist/js/data-grid.lite.mjs +2707 -2629
  31. package/dist/js/data-grid.lite.mjs.map +1 -1
  32. package/dist/js/data-grid.min.js +2 -2
  33. package/dist/js/data-grid.min.js.map +1 -1
  34. package/dist/js/data-grid.mjs +5685 -5422
  35. package/dist/js/data-grid.mjs.map +1 -1
  36. package/dist/js/direction.cjs +25 -0
  37. package/dist/js/direction.cjs.map +1 -0
  38. package/dist/js/direction.mjs +23 -0
  39. package/dist/js/direction.mjs.map +1 -0
  40. package/dist/js/drag.cjs +20 -12
  41. package/dist/js/drag.cjs.map +1 -1
  42. package/dist/js/drag.mjs +20 -12
  43. package/dist/js/drag.mjs.map +1 -1
  44. package/dist/js/{export-table-CNAKStzj.mjs → export-table-BggGRmzQ.mjs} +3 -4
  45. package/dist/js/{export-table-CNAKStzj.mjs.map → export-table-BggGRmzQ.mjs.map} +1 -1
  46. package/dist/js/{export-table-doIwvE5U.cjs → export-table-BiB3_lVo.cjs} +3 -4
  47. package/dist/js/{export-table-doIwvE5U.cjs.map → export-table-BiB3_lVo.cjs.map} +1 -1
  48. package/dist/js/filters.cjs +2 -3
  49. package/dist/js/filters.mjs +2 -3
  50. package/dist/js/labels.cjs +2 -3
  51. package/dist/js/labels.mjs +2 -3
  52. package/dist/js/print.cjs +2 -3
  53. package/dist/js/print.mjs +2 -3
  54. package/dist/js/selector.cjs +22 -0
  55. package/dist/js/selector.cjs.map +1 -0
  56. package/dist/js/selector.mjs +21 -0
  57. package/dist/js/selector.mjs.map +1 -0
  58. package/dist/js/validate.cjs +2 -3
  59. package/dist/js/validate.mjs +2 -3
  60. package/dist/js/xlsx.cjs +5 -7
  61. package/dist/js/xlsx.cjs.map +1 -1
  62. package/dist/js/xlsx.mjs +5 -7
  63. package/dist/js/xlsx.mjs.map +1 -1
  64. package/dist/types/base-component.d.mts +29 -0
  65. package/dist/types/data-grid.d.mts +141 -0
  66. package/dist/types/dom/data.d.mts +15 -0
  67. package/dist/types/dom/event-handler.d.mts +22 -0
  68. package/dist/types/dom/manipulator.d.mts +16 -0
  69. package/dist/types/engine/active-cell.d.mts +33 -0
  70. package/dist/types/engine/active-cell.d.ts +1 -0
  71. package/dist/types/engine/data-source.d.mts +19 -0
  72. package/dist/types/engine/features-lite.d.mts +25 -0
  73. package/dist/types/engine/features.d.mts +35 -0
  74. package/dist/types/engine/scheduler.d.mts +11 -0
  75. package/dist/types/engine/table.d.mts +9 -0
  76. package/dist/types/engine/table.d.ts +1 -1
  77. package/dist/types/engine/validate.d.mts +20 -1
  78. package/dist/types/engine/virtualizer.d.mts +23 -0
  79. package/dist/types/filters.d.mts +13 -1
  80. package/dist/types/icons.d.mts +23 -0
  81. package/dist/types/index-lite.d.mts +19 -1
  82. package/dist/types/index.d.mts +21 -1
  83. package/dist/types/labels.d.mts +9 -1
  84. package/dist/types/types.d.mts +284 -0
  85. package/dist/types/ui/body.d.mts +37 -0
  86. package/dist/types/ui/column-chooser.d.mts +27 -0
  87. package/dist/types/ui/editor.d.mts +8 -0
  88. package/dist/types/ui/filter-menu.d.mts +21 -0
  89. package/dist/types/ui/header.d.mts +51 -0
  90. package/dist/types/ui/loading.d.mts +12 -0
  91. package/dist/types/ui/menu.d.mts +17 -0
  92. package/dist/types/ui/pagination.d.mts +17 -0
  93. package/dist/types/ui/pinning.d.mts +17 -0
  94. package/dist/types/ui/toolbar.d.mts +42 -0
  95. package/dist/types/ui/tooltip.d.mts +10 -0
  96. package/dist/types/util/clipboard.d.mts +29 -1
  97. package/dist/types/util/config.d.mts +28 -0
  98. package/dist/types/util/csv.d.mts +19 -1
  99. package/dist/types/util/debounce.d.mts +7 -0
  100. package/dist/types/util/direction.d.mts +17 -0
  101. package/dist/types/util/direction.d.ts +17 -0
  102. package/dist/types/util/drag.d.mts +48 -1
  103. package/dist/types/util/export-table.d.mts +47 -0
  104. package/dist/types/util/index.d.mts +66 -0
  105. package/dist/types/util/print.d.mts +32 -1
  106. package/dist/types/util/sanitizer.d.mts +15 -0
  107. package/dist/types/util/selector.d.mts +12 -0
  108. package/dist/types/util/selector.d.ts +12 -0
  109. package/dist/types/util/xlsx.d.mts +17 -1
  110. package/dist/types/util/zip.d.mts +11 -0
  111. package/package.json +42 -16
  112. package/scss/_base.scss +13 -0
  113. package/scss/_config.scss +14 -0
  114. package/scss/_functions.scss +1 -0
  115. package/scss/_mixins.scss +1 -0
  116. package/scss/base/_buttons.scss +113 -0
  117. package/scss/base/_forms.scss +157 -0
  118. package/scss/base/_helpers.scss +24 -0
  119. package/scss/base/_pagination.scss +100 -0
  120. package/scss/base/_reboot.scss +93 -0
  121. package/scss/base/_root.scss +85 -0
  122. package/scss/base/_spinner.scss +45 -0
  123. package/scss/base/_table.scss +78 -0
  124. package/scss/components/_data-grid.scss +807 -0
  125. package/scss/data-grid.scss +7 -743
  126. package/scss/data-grid.standalone.scss +16 -0
  127. package/scss/functions/_defaults.scss +25 -0
  128. package/scss/mixins/_tokens.scss +12 -0
  129. package/src/data-grid.ts +22 -6
  130. package/src/engine/active-cell.ts +6 -3
  131. package/src/engine/table.ts +9 -1
  132. package/src/index-lite.ts +1 -1
  133. package/src/index.ts +1 -1
  134. package/src/ui/column-chooser.ts +4 -4
  135. package/src/ui/filter-menu.ts +5 -5
  136. package/src/ui/menu.ts +4 -4
  137. package/src/ui/pagination.ts +1 -1
  138. package/src/ui/tooltip.ts +2 -2
  139. package/src/util/csv.ts +2 -2
  140. package/src/util/direction.ts +38 -0
  141. package/src/util/drag.ts +45 -9
  142. package/src/util/selector.ts +16 -0
  143. package/src/util/xlsx.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../scss/data-grid.scss","dist/css/data-grid.css"],"names":[],"mappings":"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","sourcesContent":["/*!\n * CoreUI PRO data-grid.scss v0.2.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 // A column so that a root given an explicit height actually constrains the\n // scroller: the viewport takes what the toolbar and pagination leave, and\n // min-height: 0 lets it shrink below its content instead of overflowing the\n // root. With no height set, this changes nothing — the viewport is sized by\n // its content up to the max-height token.\n display: flex;\n flex-direction: column;\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-cell-selected-bg: rgba(var(--cui-primary-rgb, 50, 31, 219), .12);\n --cui-data-grid-cell-selected-border-color: var(--cui-primary, #321fdb);\n --cui-data-grid-cell-selected-border-width: 1px;\n --cui-data-grid-row-handle-width: 2rem;\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-drag-transition: .15s ease;\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 flex: 1 1 auto;\n min-height: 0;\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-dragging {\n opacity: .5;\n }\n\n // While a drag is live the whole grid keeps the grabbing cursor and stops\n // painting a text selection under the pointer.\n &.data-grid-drag-active {\n cursor: grabbing;\n user-select: none;\n }\n\n // Both overlays are position: fixed (placed from viewport coordinates in JS)\n // so they escape the viewport's overflow, like the tooltip.\n .data-grid-drag-ghost {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1080;\n display: flex;\n align-items: center;\n max-width: 16rem;\n padding: 0 var(--cui-data-grid-cell-padding-x, .5rem);\n overflow: hidden;\n font-weight: 600;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n background-color: var(--cui-data-grid-pinned-bg);\n border: var(--cui-border-width, 1px) solid var(--cui-data-grid-drop-indicator);\n border-radius: var(--cui-border-radius, .375rem);\n box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15);\n transform: translate(-9999px, -9999px);\n opacity: .9;\n }\n\n // The settling ghost: on release it flies from the pointer to the slot the\n // item landed in (or back home on cancel) and fades out there.\n .data-grid-drag-ghost-settle {\n transition: transform var(--cui-data-grid-drag-transition), opacity var(--cui-data-grid-drag-transition);\n }\n\n .data-grid-drop-indicator {\n position: fixed;\n z-index: 1080;\n pointer-events: none;\n background-color: var(--cui-data-grid-drop-indicator);\n transition: top var(--cui-data-grid-drag-transition), left var(--cui-data-grid-drag-transition);\n }\n\n // The live reorder preview: cells slide to the layout the drop will produce.\n // Transform only, so nothing reflows and the real order still changes once.\n .data-grid-drag-preview {\n transition: transform var(--cui-data-grid-drag-transition);\n }\n\n // Someone who asked the OS to stop moving things still gets the preview —\n // it snaps to the final layout instead of gliding there.\n @media (prefers-reduced-motion: reduce) {\n :is(.data-grid-drop-indicator, .data-grid-drag-preview, .data-grid-drag-ghost-settle) {\n transition: none;\n }\n }\n\n // The line is 2px across its short axis and spans the grid along the other;\n // JS sets the spanning size, the axis class sets the thickness.\n .data-grid-drop-indicator-x {\n width: .125rem;\n }\n\n .data-grid-drop-indicator-y {\n height: .125rem;\n }\n\n // Cell selection: a tinted fill on every selected cell, plus an outline\n // drawn only on the sides that sit on the selection's boundary — so a\n // rectangle reads as one region instead of a grid of boxes. The outline is\n // an overlay rather than a border: a border on a table cell would shift the\n // whole row's layout the moment a range is selected.\n .data-grid-cell-selected {\n position: relative;\n background-color: var(--cui-data-grid-cell-selected-bg);\n }\n\n .data-grid-cell-selected::after {\n position: absolute;\n inset: 0;\n pointer-events: none;\n content: \"\";\n border: 0 solid var(--cui-data-grid-cell-selected-border-color);\n }\n\n .data-grid-cell-selected-top::after {\n border-top-width: var(--cui-data-grid-cell-selected-border-width);\n }\n\n .data-grid-cell-selected-right::after {\n border-right-width: var(--cui-data-grid-cell-selected-border-width);\n }\n\n .data-grid-cell-selected-bottom::after {\n border-bottom-width: var(--cui-data-grid-cell-selected-border-width);\n }\n\n .data-grid-cell-selected-left::after {\n border-left-width: var(--cui-data-grid-cell-selected-border-width);\n }\n\n // The reorder column: as narrow as the grip, and the grip itself is the only\n // thing that starts a row drag (a row is full of interactive content that a\n // whole-row handle would swallow).\n .data-grid-row-handle-cell {\n width: var(--cui-data-grid-row-handle-width);\n padding-inline: 0;\n text-align: center;\n }\n\n .data-grid-row-handle {\n display: inline-flex;\n color: var(--cui-data-grid-resizer-grip-color-hover);\n cursor: grab;\n touch-action: none;\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 //\n // Auto row height is the deliberate exception: there the virtualizer measures\n // each row, so cells are free to wrap. Scoping the rule out is what keeps the\n // two modes from fighting over specificity.\n &:not(.data-grid-auto-row-height) .data-grid-viewport > .table > tbody > tr:not(.data-grid-empty) > td:not(.data-grid-select-cell):not(.data-grid-cell-pinned-start):not(.data-grid-cell-pinned-end) {\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-start):not(.data-grid-cell-pinned-end) {\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-start,\n .data-grid-cell-pinned-end {\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-start,\n .data-grid-header .data-grid-cell-pinned-end {\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-start-last,\n .data-grid-cell-pinned-end-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-start-last::after {\n inset-inline-end: 0;\n background: var(--cui-data-grid-pinned-border-color);\n }\n\n .data-grid-cell-pinned-end-first::after {\n inset-inline-start: 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 // Infinite scroll's \"next page arriving\" strip. Sticky, not an overlay: the\n // rows already loaded stay readable while the grid appends to them.\n .data-grid-loading-more {\n position: sticky;\n inset-inline: 0;\n bottom: 0;\n z-index: 3;\n display: flex;\n justify-content: center;\n padding: var(--cui-data-grid-spacing);\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// Print: the grid renders a plain, complete table into the document (see\n// util/print.ts) and hides everything else, so a virtualized grid prints all\n// its rows instead of the twenty in the window.\n@media print {\n .data-grid-print-root {\n position: absolute;\n inset: 0 0 auto;\n z-index: 2000;\n background-color: #fff;\n\n h1 {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n }\n\n table {\n width: 100%;\n border-collapse: collapse;\n }\n\n :is(th, td) {\n padding: .25rem .5rem;\n text-align: start;\n border: 1px solid #000;\n }\n\n thead {\n display: table-header-group;\n }\n\n tr {\n break-inside: avoid;\n }\n }\n\n // :has() is inside the browser floor (.browserslistrc), and scoping to the\n // body's own children keeps the clone's ancestors from being hidden.\n body:has(.data-grid-print-root) > :not(.data-grid-print-root) {\n display: none !important;\n }\n}\n","/*!\n * CoreUI PRO data-grid.scss v0.2.0\n * License (https://coreui.io/pro/license/)\n */\n.data-grid {\n position: relative;\n display: flex;\n flex-direction: column;\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-cell-selected-bg: rgba(var(--cui-primary-rgb, 50, 31, 219), .12);\n --cui-data-grid-cell-selected-border-color: var(--cui-primary, #321fdb);\n --cui-data-grid-cell-selected-border-width: 1px;\n --cui-data-grid-row-handle-width: 2rem;\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-drag-transition: .15s ease;\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 flex: 1 1 auto;\n min-height: 0;\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-dragging {\n opacity: 0.5;\n}\n.data-grid.data-grid-drag-active {\n cursor: grabbing;\n -webkit-user-select: none;\n user-select: none;\n}\n.data-grid .data-grid-drag-ghost {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1080;\n display: flex;\n align-items: center;\n max-width: 16rem;\n padding: 0 var(--cui-data-grid-cell-padding-x, 0.5rem);\n overflow: hidden;\n font-weight: 600;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n background-color: var(--cui-data-grid-pinned-bg);\n border: var(--cui-border-width, 1px) solid var(--cui-data-grid-drop-indicator);\n border-radius: var(--cui-border-radius, 0.375rem);\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n transform: translate(-9999px, -9999px);\n opacity: 0.9;\n}\n.data-grid .data-grid-drag-ghost-settle {\n transition: transform var(--cui-data-grid-drag-transition), opacity var(--cui-data-grid-drag-transition);\n}\n.data-grid .data-grid-drop-indicator {\n position: fixed;\n z-index: 1080;\n pointer-events: none;\n background-color: var(--cui-data-grid-drop-indicator);\n transition: top var(--cui-data-grid-drag-transition), left var(--cui-data-grid-drag-transition);\n}\n.data-grid .data-grid-drag-preview {\n transition: transform var(--cui-data-grid-drag-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .data-grid :is(.data-grid-drop-indicator, .data-grid-drag-preview, .data-grid-drag-ghost-settle) {\n transition: none;\n }\n}\n.data-grid .data-grid-drop-indicator-x {\n width: 0.125rem;\n}\n.data-grid .data-grid-drop-indicator-y {\n height: 0.125rem;\n}\n.data-grid .data-grid-cell-selected {\n position: relative;\n background-color: var(--cui-data-grid-cell-selected-bg);\n}\n.data-grid .data-grid-cell-selected::after {\n position: absolute;\n inset: 0;\n pointer-events: none;\n content: \"\";\n border: 0 solid var(--cui-data-grid-cell-selected-border-color);\n}\n.data-grid .data-grid-cell-selected-top::after {\n border-top-width: var(--cui-data-grid-cell-selected-border-width);\n}\n.data-grid .data-grid-cell-selected-right::after {\n border-right-width: var(--cui-data-grid-cell-selected-border-width);\n}\n.data-grid .data-grid-cell-selected-bottom::after {\n border-bottom-width: var(--cui-data-grid-cell-selected-border-width);\n}\n.data-grid .data-grid-cell-selected-left::after {\n border-left-width: var(--cui-data-grid-cell-selected-border-width);\n}\n.data-grid .data-grid-row-handle-cell {\n width: var(--cui-data-grid-row-handle-width);\n padding-inline: 0;\n text-align: center;\n}\n.data-grid .data-grid-row-handle {\n display: inline-flex;\n color: var(--cui-data-grid-resizer-grip-color-hover);\n cursor: grab;\n touch-action: none;\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 -webkit-user-select: none;\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:not(.data-grid-auto-row-height) .data-grid-viewport > .table > tbody > tr:not(.data-grid-empty) > td:not(.data-grid-select-cell):not(.data-grid-cell-pinned-start):not(.data-grid-cell-pinned-end) {\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-start):not(.data-grid-cell-pinned-end) {\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-start,\n.data-grid .data-grid-cell-pinned-end {\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-start,\n.data-grid .data-grid-header .data-grid-cell-pinned-end {\n z-index: 3;\n}\n.data-grid .data-grid-cell-pinned-start-last,\n.data-grid .data-grid-cell-pinned-end-first {\n position: sticky;\n}\n.data-grid .data-grid-cell-pinned-start-last::after,\n.data-grid .data-grid-cell-pinned-end-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-start-last::after {\n inset-inline-end: 0;\n background: var(--cui-data-grid-pinned-border-color);\n}\n.data-grid .data-grid-cell-pinned-end-first::after {\n inset-inline-start: 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 -webkit-user-select: 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-loading-more {\n position: sticky;\n inset-inline: 0;\n bottom: 0;\n z-index: 3;\n display: flex;\n justify-content: center;\n padding: var(--cui-data-grid-spacing);\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@media print {\n .data-grid-print-root {\n position: absolute;\n inset: 0 0 auto;\n z-index: 2000;\n background-color: #fff;\n }\n .data-grid-print-root h1 {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n }\n .data-grid-print-root table {\n width: 100%;\n border-collapse: collapse;\n }\n .data-grid-print-root :is(th, td) {\n padding: 0.25rem 0.5rem;\n text-align: start;\n border: 1px solid #000;\n }\n .data-grid-print-root thead {\n display: table-header-group;\n }\n .data-grid-print-root tr {\n break-inside: avoid;\n }\n body:has(.data-grid-print-root) > :not(.data-grid-print-root) {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=data-grid.css.map */"]}
1
+ {"version":3,"sources":["../../scss/data-grid.scss","../../scss/components/_data-grid.scss","../../scss/mixins/_tokens.scss","dist/css/data-grid.css"],"names":[],"mappings":"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","sourcesContent":["/*!\n * CoreUI PRO data-grid.scss v0.4.0\n * License (https://coreui.io/pro/license/)\n */\n\n// scss-docs-start import-stack\n@forward \"config\";\n@forward \"functions\";\n@forward \"mixins\";\n@forward \"components/data-grid\";\n// scss-docs-end import-stack\n","@use \"../functions/defaults\" as *;\n@use \"../mixins/tokens\" as *;\n@use \"../config\" as *;\n\n// stylelint-disable custom-property-no-missing-var-function\n\n// Everything resolves through CoreUI semantic variables, so light/dark theming\n// via [data-coreui-theme] works with no extra rules. The fallbacks keep the grid\n// legible when the CoreUI stylesheet is absent; `data-grid.standalone.css` fills\n// the rest in.\n\n// scss-docs-start data-grid-variables\n$data-grid-viewport-max-height: 30rem !default;\n$data-grid-header-bg: var(--#{$prefix}body-bg, #fff) !default;\n$data-grid-header-shadow: inset 0 calc(-1 * var(--#{$prefix}border-width, 1px)) 0 var(--#{$prefix}border-color, #dee2e6) !default;\n$data-grid-cell-selected-bg: rgba(var(--#{$prefix}primary-rgb, 50, 31, 219), .12) !default;\n$data-grid-cell-selected-border-color: var(--#{$prefix}primary, #321fdb) !default;\n$data-grid-cell-selected-border-width: 1px !default;\n$data-grid-row-handle-width: 2rem !default;\n$data-grid-select-cell-width: 2.5rem !default;\n$data-grid-sorter-margin: .25rem !default;\n$data-grid-sorter-opacity: .3 !default;\n$data-grid-spacing: .5rem !default;\n$data-grid-resizer-width: .625rem !default;\n$data-grid-resizer-grip-height: 60% !default;\n$data-grid-resizer-grip-color: var(--#{$prefix}border-color, #dee2e6) !default;\n$data-grid-resizer-grip-color-hover: var(--#{$prefix}secondary-color, #6c757d) !default;\n$data-grid-pinned-border-width: var(--#{$prefix}border-width) !default;\n$data-grid-pinned-border-color: var(--#{$prefix}border-color, #dee2e6) !default;\n$data-grid-drop-indicator: var(--#{$prefix}primary, #321fdb) !default;\n$data-grid-drag-transition: .15s ease !default;\n$data-grid-menu-bg: var(--#{$prefix}body-bg, #fff) !default;\n$data-grid-menu-border-color: var(--#{$prefix}border-color, #dee2e6) !default;\n$data-grid-menu-shadow: var(--#{$prefix}box-shadow, 0 .5rem 1rem rgba(0, 0, 0, .15)) !default;\n$data-grid-menu-min-width: 10rem !default;\n$data-grid-menu-item-hover-bg: var(--#{$prefix}tertiary-bg, #f8f9fa) !default;\n$data-grid-loading-bg: rgba(var(--#{$prefix}body-bg-rgb, 255, 255, 255), .6) !default;\n$data-grid-pinned-bg: var(--#{$prefix}body-bg, #fff) !default;\n$data-grid-focus-ring-width: 2px !default;\n$data-grid-focus-ring-color: var(--#{$prefix}primary, #321fdb) !default;\n// scss-docs-end data-grid-variables\n\n// Values that shape the grid but have no runtime knob. Sass-only on purpose:\n// a token here would be a new public custom property, which is a separate call.\n// scss-docs-start data-grid-layout-variables\n$data-grid-bar-min-height: 48px !default;\n$data-grid-border-width: var(--#{$prefix}border-width, 1px) !default;\n$data-grid-border-color: var(--#{$prefix}border-color, #dee2e6) !default;\n$data-grid-border-radius: var(--#{$prefix}border-radius, .375rem) !default;\n$data-grid-muted-color: var(--#{$prefix}secondary-color, #6c757d) !default;\n$data-grid-popup-max-width: 18rem !default;\n$data-grid-gap-sm: .25rem !default;\n$data-grid-tooltip-z-index: 1080 !default;\n// scss-docs-end data-grid-layout-variables\n\n$data-grid-tokens: () !default;\n\n// scss-docs-start data-grid-css-vars\n// stylelint-disable-next-line scss/dollar-variable-default\n$data-grid-tokens: defaults(\n (\n --#{$prefix}data-grid-viewport-max-height: #{$data-grid-viewport-max-height},\n --#{$prefix}data-grid-header-bg: #{$data-grid-header-bg},\n --#{$prefix}data-grid-header-shadow: #{$data-grid-header-shadow},\n --#{$prefix}data-grid-cell-selected-bg: #{$data-grid-cell-selected-bg},\n --#{$prefix}data-grid-cell-selected-border-color: #{$data-grid-cell-selected-border-color},\n --#{$prefix}data-grid-cell-selected-border-width: #{$data-grid-cell-selected-border-width},\n --#{$prefix}data-grid-row-handle-width: #{$data-grid-row-handle-width},\n --#{$prefix}data-grid-select-cell-width: #{$data-grid-select-cell-width},\n --#{$prefix}data-grid-sorter-margin: #{$data-grid-sorter-margin},\n --#{$prefix}data-grid-sorter-opacity: #{$data-grid-sorter-opacity},\n --#{$prefix}data-grid-spacing: #{$data-grid-spacing},\n --#{$prefix}data-grid-resizer-width: #{$data-grid-resizer-width},\n --#{$prefix}data-grid-resizer-grip-height: #{$data-grid-resizer-grip-height},\n --#{$prefix}data-grid-resizer-grip-color: #{$data-grid-resizer-grip-color},\n --#{$prefix}data-grid-resizer-grip-color-hover: #{$data-grid-resizer-grip-color-hover},\n --#{$prefix}data-grid-pinned-border-width: #{$data-grid-pinned-border-width},\n --#{$prefix}data-grid-pinned-border-color: #{$data-grid-pinned-border-color},\n --#{$prefix}data-grid-drop-indicator: #{$data-grid-drop-indicator},\n --#{$prefix}data-grid-drag-transition: #{$data-grid-drag-transition},\n --#{$prefix}data-grid-menu-bg: #{$data-grid-menu-bg},\n --#{$prefix}data-grid-menu-border-color: #{$data-grid-menu-border-color},\n --#{$prefix}data-grid-menu-shadow: #{$data-grid-menu-shadow},\n --#{$prefix}data-grid-menu-min-width: #{$data-grid-menu-min-width},\n --#{$prefix}data-grid-menu-item-hover-bg: #{$data-grid-menu-item-hover-bg},\n --#{$prefix}data-grid-loading-bg: #{$data-grid-loading-bg},\n --#{$prefix}data-grid-pinned-bg: #{$data-grid-pinned-bg},\n --#{$prefix}data-grid-focus-ring-width: #{$data-grid-focus-ring-width},\n --#{$prefix}data-grid-focus-ring-color: #{$data-grid-focus-ring-color},\n ),\n $data-grid-tokens\n);\n// scss-docs-end data-grid-css-vars\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 // A column so that a root given an explicit height actually constrains the\n // scroller: the viewport takes what the toolbar and pagination leave, and\n // min-height: 0 lets it shrink below its content instead of overflowing the\n // root. With no height set, this changes nothing — the viewport is sized by\n // its content up to the max-height token.\n display: flex;\n flex-direction: column;\n\n @include tokens($data-grid-tokens);\n\n .data-grid-toolbar {\n display: flex;\n flex-wrap: wrap;\n gap: var(--#{$prefix}data-grid-spacing);\n align-items: center;\n min-height: $data-grid-bar-min-height;\n padding: var(--#{$prefix}data-grid-spacing);\n border-bottom: $data-grid-border-width solid $data-grid-border-color;\n }\n\n .data-grid-toolbar-actions {\n display: flex;\n gap: $data-grid-gap-sm;\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 flex: 1 1 auto;\n min-height: 0;\n max-height: var(--#{$prefix}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: $data-grid-gap-sm;\n background-color: var(--#{$prefix}data-grid-menu-bg);\n border: $data-grid-border-width solid var(--#{$prefix}data-grid-menu-border-color);\n border-radius: $data-grid-border-radius;\n box-shadow: var(--#{$prefix}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(--#{$prefix}data-grid-focus-ring-width) solid var(--#{$prefix}data-grid-focus-ring-color);\n outline-offset: calc(-1 * var(--#{$prefix}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(--#{$prefix}data-grid-header-bg);\n box-shadow: var(--#{$prefix}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: $data-grid-bar-min-height;\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: $data-grid-gap-sm;\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 --#{$prefix}btn-padding-x: var(--#{$prefix}btn-padding-y);\n --#{$prefix}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(--#{$prefix}data-grid-menu-min-width);\n padding: $data-grid-gap-sm 0;\n background-color: var(--#{$prefix}data-grid-menu-bg);\n border: $data-grid-border-width solid var(--#{$prefix}data-grid-menu-border-color);\n border-radius: $data-grid-border-radius;\n box-shadow: var(--#{$prefix}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: $data-grid-gap-sm .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(--#{$prefix}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: $data-grid-muted-color;\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(--#{$prefix}data-grid-menu-min-width);\n max-width: $data-grid-popup-max-width;\n padding: .75rem;\n background-color: var(--#{$prefix}data-grid-menu-bg);\n border: $data-grid-border-width solid var(--#{$prefix}data-grid-menu-border-color);\n border-radius: $data-grid-border-radius;\n box-shadow: var(--#{$prefix}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: $data-grid-gap-sm;\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: $data-grid-gap-sm;\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(--#{$prefix}data-grid-menu-min-width);\n max-width: $data-grid-popup-max-width;\n max-height: 20rem;\n padding: .75rem;\n overflow-y: auto;\n background-color: var(--#{$prefix}data-grid-menu-bg);\n border: $data-grid-border-width solid var(--#{$prefix}data-grid-menu-border-color);\n border-radius: $data-grid-border-radius;\n box-shadow: var(--#{$prefix}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: $data-grid-gap-sm;\n margin-top: $data-grid-gap-sm;\n border-top: $data-grid-border-width solid var(--#{$prefix}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(--#{$prefix}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: $data-grid-border-width;\n margin: $data-grid-gap-sm 0;\n background-color: var(--#{$prefix}data-grid-menu-border-color);\n }\n\n .data-grid-dragging {\n opacity: .5;\n }\n\n // While a drag is live the whole grid keeps the grabbing cursor and stops\n // painting a text selection under the pointer.\n &.data-grid-drag-active {\n cursor: grabbing;\n user-select: none;\n }\n\n // Both overlays are position: fixed (placed from viewport coordinates in JS)\n // so they escape the viewport's overflow, like the tooltip.\n .data-grid-drag-ghost {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $data-grid-tooltip-z-index;\n display: flex;\n align-items: center;\n max-width: 16rem;\n padding: 0 var(--#{$prefix}data-grid-cell-padding-x, .5rem);\n overflow: hidden;\n font-weight: 600;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n background-color: var(--#{$prefix}data-grid-pinned-bg);\n border: $data-grid-border-width solid var(--#{$prefix}data-grid-drop-indicator);\n border-radius: $data-grid-border-radius;\n box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15);\n transform: translate(-9999px, -9999px);\n opacity: .9;\n }\n\n // The settling ghost: on release it flies from the pointer to the slot the\n // item landed in (or back home on cancel) and fades out there.\n .data-grid-drag-ghost-settle {\n transition: transform var(--#{$prefix}data-grid-drag-transition), opacity var(--#{$prefix}data-grid-drag-transition);\n }\n\n .data-grid-drop-indicator {\n position: fixed;\n z-index: $data-grid-tooltip-z-index;\n pointer-events: none;\n background-color: var(--#{$prefix}data-grid-drop-indicator);\n transition: top var(--#{$prefix}data-grid-drag-transition), left var(--#{$prefix}data-grid-drag-transition);\n }\n\n // The live reorder preview: cells slide to the layout the drop will produce.\n // Transform only, so nothing reflows and the real order still changes once.\n .data-grid-drag-preview {\n transition: transform var(--#{$prefix}data-grid-drag-transition);\n }\n\n // Someone who asked the OS to stop moving things still gets the preview —\n // it snaps to the final layout instead of gliding there.\n @media (prefers-reduced-motion: reduce) {\n :is(.data-grid-drop-indicator, .data-grid-drag-preview, .data-grid-drag-ghost-settle) {\n transition: none;\n }\n }\n\n // The line is 2px across its short axis and spans the grid along the other;\n // JS sets the spanning size, the axis class sets the thickness.\n .data-grid-drop-indicator-x {\n width: .125rem;\n }\n\n .data-grid-drop-indicator-y {\n height: .125rem;\n }\n\n // Cell selection: a tinted fill on every selected cell, plus an outline\n // drawn only on the sides that sit on the selection's boundary — so a\n // rectangle reads as one region instead of a grid of boxes. The outline is\n // an overlay rather than a border: a border on a table cell would shift the\n // whole row's layout the moment a range is selected.\n .data-grid-cell-selected {\n position: relative;\n background-color: var(--#{$prefix}data-grid-cell-selected-bg);\n }\n\n .data-grid-cell-selected::after {\n position: absolute;\n inset: 0;\n pointer-events: none;\n content: \"\";\n border: 0 solid var(--#{$prefix}data-grid-cell-selected-border-color);\n }\n\n .data-grid-cell-selected-top::after {\n border-top-width: var(--#{$prefix}data-grid-cell-selected-border-width);\n }\n\n .data-grid-cell-selected-right::after {\n border-right-width: var(--#{$prefix}data-grid-cell-selected-border-width);\n }\n\n .data-grid-cell-selected-bottom::after {\n border-bottom-width: var(--#{$prefix}data-grid-cell-selected-border-width);\n }\n\n .data-grid-cell-selected-left::after {\n border-left-width: var(--#{$prefix}data-grid-cell-selected-border-width);\n }\n\n // The reorder column: as narrow as the grip, and the grip itself is the only\n // thing that starts a row drag (a row is full of interactive content that a\n // whole-row handle would swallow).\n .data-grid-row-handle-cell {\n width: var(--#{$prefix}data-grid-row-handle-width);\n padding-inline: 0;\n text-align: center;\n }\n\n .data-grid-row-handle {\n display: inline-flex;\n color: $data-grid-resizer-grip-color-hover;\n cursor: grab;\n touch-action: none;\n }\n\n .data-grid-select-cell {\n width: var(--#{$prefix}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(--#{$prefix}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(--#{$prefix}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(--#{$prefix}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 //\n // Auto row height is the deliberate exception: there the virtualizer measures\n // each row, so cells are free to wrap. Scoping the rule out is what keeps the\n // two modes from fighting over specificity.\n &:not(.data-grid-auto-row-height) .data-grid-viewport > .table > tbody > tr:not(.data-grid-empty) > td:not(.data-grid-select-cell):not(.data-grid-cell-pinned-start):not(.data-grid-cell-pinned-end) {\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-start):not(.data-grid-cell-pinned-end) {\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-start,\n .data-grid-cell-pinned-end {\n position: sticky;\n z-index: 1;\n background-color: var(--#{$prefix}data-grid-pinned-bg);\n }\n\n .data-grid-header .data-grid-cell-pinned-start,\n .data-grid-header .data-grid-cell-pinned-end {\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-start-last,\n .data-grid-cell-pinned-end-first {\n position: sticky;\n\n &::after {\n position: absolute;\n top: 0;\n bottom: 0;\n width: var(--#{$prefix}data-grid-pinned-border-width);\n pointer-events: none;\n content: \"\";\n }\n }\n\n .data-grid-cell-pinned-start-last::after {\n inset-inline-end: 0;\n background: var(--#{$prefix}data-grid-pinned-border-color);\n }\n\n .data-grid-cell-pinned-end-first::after {\n inset-inline-start: 0;\n background: var(--#{$prefix}data-grid-pinned-border-color);\n }\n\n .data-grid-resizer {\n position: absolute;\n top: 0;\n inset-inline-end: calc(-.5 * var(--#{$prefix}data-grid-resizer-width));\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--#{$prefix}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(--#{$prefix}data-grid-resizer-grip-height);\n content: \"\";\n background-color: var(--#{$prefix}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(--#{$prefix}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 --#{$prefix}table-color-type: initial;\n --#{$prefix}table-bg-type: initial;\n }\n\n .data-grid-viewport > .table-striped > tbody > tr.data-grid-row-odd > * {\n --#{$prefix}table-color-type: var(--#{$prefix}table-striped-color);\n --#{$prefix}table-bg-type: var(--#{$prefix}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(--#{$prefix}data-grid-loading-bg);\n }\n\n // Infinite scroll's \"next page arriving\" strip. Sticky, not an overlay: the\n // rows already loaded stay readable while the grid appends to them.\n .data-grid-loading-more {\n position: sticky;\n inset-inline: 0;\n bottom: 0;\n z-index: 3;\n display: flex;\n justify-content: center;\n padding: var(--#{$prefix}data-grid-spacing);\n background-color: var(--#{$prefix}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: $data-grid-tooltip-z-index;\n max-width: 12rem;\n padding: $data-grid-gap-sm .5rem;\n font-size: .875rem;\n line-height: 1.4;\n color: var(--#{$prefix}body-bg, #fff);\n text-align: center;\n pointer-events: none;\n background-color: var(--#{$prefix}emphasis-color, #000);\n border-radius: $data-grid-border-radius;\n }\n\n .data-grid-empty > td {\n padding: 2rem 1rem;\n color: $data-grid-muted-color;\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(--#{$prefix}data-grid-spacing);\n align-items: center;\n min-height: $data-grid-bar-min-height;\n padding: var(--#{$prefix}data-grid-spacing);\n border-top: $data-grid-border-width solid $data-grid-border-color;\n\n &.data-grid-pagination-top {\n border-top: 0;\n border-bottom: $data-grid-border-width solid $data-grid-border-color;\n }\n\n .pagination {\n margin-bottom: 0;\n }\n\n .data-grid-pagination-info {\n margin-inline-start: auto;\n color: $data-grid-muted-color;\n }\n\n .form-select {\n width: auto;\n }\n }\n}\n\n// Print: the grid renders a plain, complete table into the document (see\n// util/print.ts) and hides everything else, so a virtualized grid prints all\n// its rows instead of the twenty in the window.\n@media print {\n .data-grid-print-root {\n position: absolute;\n inset: 0 0 auto;\n z-index: 2000;\n background-color: #fff;\n\n h1 {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n }\n\n table {\n width: 100%;\n border-collapse: collapse;\n }\n\n :is(th, td) {\n padding: $data-grid-gap-sm .5rem;\n text-align: start;\n border: 1px solid #000;\n }\n\n thead {\n display: table-header-group;\n }\n\n tr {\n break-inside: avoid;\n }\n }\n\n // :has() is inside the browser floor (.browserslistrc), and scoping to the\n // body's own children keeps the clone's ancestors from being hidden.\n body:has(.data-grid-print-root) > :not(.data-grid-print-root) {\n display: none !important;\n }\n}\n","// Vendored from @coreui/coreui-pro (scss/mixins/_tokens.scss, v6 line).\n// Sync manually — do not diverge.\n\n// Output a token map as CSS custom properties\n\n// scss-docs-start mixin-tokens\n@mixin tokens($map) {\n @each $prop, $value in $map {\n #{$prop}: #{$value};\n }\n}\n// scss-docs-end mixin-tokens\n","/*!\n * CoreUI PRO data-grid.scss v0.4.0\n * License (https://coreui.io/pro/license/)\n */\n.data-grid {\n position: relative;\n display: flex;\n flex-direction: column;\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-cell-selected-bg: rgba(var(--cui-primary-rgb, 50, 31, 219), 0.12);\n --cui-data-grid-cell-selected-border-color: var(--cui-primary, #321fdb);\n --cui-data-grid-cell-selected-border-width: 1px;\n --cui-data-grid-row-handle-width: 2rem;\n --cui-data-grid-select-cell-width: 2.5rem;\n --cui-data-grid-sorter-margin: 0.25rem;\n --cui-data-grid-sorter-opacity: 0.3;\n --cui-data-grid-spacing: 0.5rem;\n --cui-data-grid-resizer-width: 0.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-drag-transition: 0.15s ease;\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 0.5rem 1rem rgba(0, 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), 0.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 flex: 1 1 auto;\n min-height: 0;\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-dragging {\n opacity: 0.5;\n}\n.data-grid.data-grid-drag-active {\n cursor: grabbing;\n -webkit-user-select: none;\n user-select: none;\n}\n.data-grid .data-grid-drag-ghost {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1080;\n display: flex;\n align-items: center;\n max-width: 16rem;\n padding: 0 var(--cui-data-grid-cell-padding-x, 0.5rem);\n overflow: hidden;\n font-weight: 600;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n background-color: var(--cui-data-grid-pinned-bg);\n border: var(--cui-border-width, 1px) solid var(--cui-data-grid-drop-indicator);\n border-radius: var(--cui-border-radius, 0.375rem);\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n transform: translate(-9999px, -9999px);\n opacity: 0.9;\n}\n.data-grid .data-grid-drag-ghost-settle {\n transition: transform var(--cui-data-grid-drag-transition), opacity var(--cui-data-grid-drag-transition);\n}\n.data-grid .data-grid-drop-indicator {\n position: fixed;\n z-index: 1080;\n pointer-events: none;\n background-color: var(--cui-data-grid-drop-indicator);\n transition: top var(--cui-data-grid-drag-transition), left var(--cui-data-grid-drag-transition);\n}\n.data-grid .data-grid-drag-preview {\n transition: transform var(--cui-data-grid-drag-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .data-grid :is(.data-grid-drop-indicator, .data-grid-drag-preview, .data-grid-drag-ghost-settle) {\n transition: none;\n }\n}\n.data-grid .data-grid-drop-indicator-x {\n width: 0.125rem;\n}\n.data-grid .data-grid-drop-indicator-y {\n height: 0.125rem;\n}\n.data-grid .data-grid-cell-selected {\n position: relative;\n background-color: var(--cui-data-grid-cell-selected-bg);\n}\n.data-grid .data-grid-cell-selected::after {\n position: absolute;\n inset: 0;\n pointer-events: none;\n content: \"\";\n border: 0 solid var(--cui-data-grid-cell-selected-border-color);\n}\n.data-grid .data-grid-cell-selected-top::after {\n border-top-width: var(--cui-data-grid-cell-selected-border-width);\n}\n.data-grid .data-grid-cell-selected-right::after {\n border-right-width: var(--cui-data-grid-cell-selected-border-width);\n}\n.data-grid .data-grid-cell-selected-bottom::after {\n border-bottom-width: var(--cui-data-grid-cell-selected-border-width);\n}\n.data-grid .data-grid-cell-selected-left::after {\n border-left-width: var(--cui-data-grid-cell-selected-border-width);\n}\n.data-grid .data-grid-row-handle-cell {\n width: var(--cui-data-grid-row-handle-width);\n padding-inline: 0;\n text-align: center;\n}\n.data-grid .data-grid-row-handle {\n display: inline-flex;\n color: var(--cui-secondary-color, #6c757d);\n cursor: grab;\n touch-action: none;\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 -webkit-user-select: none;\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:not(.data-grid-auto-row-height) .data-grid-viewport > .table > tbody > tr:not(.data-grid-empty) > td:not(.data-grid-select-cell):not(.data-grid-cell-pinned-start):not(.data-grid-cell-pinned-end) {\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-start):not(.data-grid-cell-pinned-end) {\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-start,\n.data-grid .data-grid-cell-pinned-end {\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-start,\n.data-grid .data-grid-header .data-grid-cell-pinned-end {\n z-index: 3;\n}\n.data-grid .data-grid-cell-pinned-start-last,\n.data-grid .data-grid-cell-pinned-end-first {\n position: sticky;\n}\n.data-grid .data-grid-cell-pinned-start-last::after,\n.data-grid .data-grid-cell-pinned-end-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-start-last::after {\n inset-inline-end: 0;\n background: var(--cui-data-grid-pinned-border-color);\n}\n.data-grid .data-grid-cell-pinned-end-first::after {\n inset-inline-start: 0;\n background: var(--cui-data-grid-pinned-border-color);\n}\n.data-grid .data-grid-resizer {\n position: absolute;\n top: 0;\n inset-inline-end: 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 -webkit-user-select: 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-loading-more {\n position: sticky;\n inset-inline: 0;\n bottom: 0;\n z-index: 3;\n display: flex;\n justify-content: center;\n padding: var(--cui-data-grid-spacing);\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@media print {\n .data-grid-print-root {\n position: absolute;\n inset: 0 0 auto;\n z-index: 2000;\n background-color: #fff;\n }\n .data-grid-print-root h1 {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n }\n .data-grid-print-root table {\n width: 100%;\n border-collapse: collapse;\n }\n .data-grid-print-root :is(th, td) {\n padding: 0.25rem 0.5rem;\n text-align: start;\n border: 1px solid #000;\n }\n .data-grid-print-root thead {\n display: table-header-group;\n }\n .data-grid-print-root tr {\n break-inside: avoid;\n }\n body:has(.data-grid-print-root) > :not(.data-grid-print-root) {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=data-grid.css.map */"]}