@tinisoftin/tsdatagrid 1.0.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 (175) hide show
  1. package/README.md +1272 -0
  2. package/dist/components/TSDataGrid.vue.d.ts +1285 -0
  3. package/dist/components/TSDataGrid.vue.d.ts.map +1 -0
  4. package/dist/components/TSDataGridActiveFilters.vue.d.ts +24 -0
  5. package/dist/components/TSDataGridActiveFilters.vue.d.ts.map +1 -0
  6. package/dist/components/TSDataGridBody.vue.d.ts +259 -0
  7. package/dist/components/TSDataGridBody.vue.d.ts.map +1 -0
  8. package/dist/components/TSDataGridCell.vue.d.ts +83 -0
  9. package/dist/components/TSDataGridCell.vue.d.ts.map +1 -0
  10. package/dist/components/TSDataGridColumnChooser.vue.d.ts +56 -0
  11. package/dist/components/TSDataGridColumnChooser.vue.d.ts.map +1 -0
  12. package/dist/components/TSDataGridContextMenu.vue.d.ts +46 -0
  13. package/dist/components/TSDataGridContextMenu.vue.d.ts.map +1 -0
  14. package/dist/components/TSDataGridFilter.vue.d.ts +92 -0
  15. package/dist/components/TSDataGridFilter.vue.d.ts.map +1 -0
  16. package/dist/components/TSDataGridFooter.vue.d.ts +95 -0
  17. package/dist/components/TSDataGridFooter.vue.d.ts.map +1 -0
  18. package/dist/components/TSDataGridGroupPanel.vue.d.ts +47 -0
  19. package/dist/components/TSDataGridGroupPanel.vue.d.ts.map +1 -0
  20. package/dist/components/TSDataGridHeader.vue.d.ts +221 -0
  21. package/dist/components/TSDataGridHeader.vue.d.ts.map +1 -0
  22. package/dist/components/TSDataGridRow.vue.d.ts +83 -0
  23. package/dist/components/TSDataGridRow.vue.d.ts.map +1 -0
  24. package/dist/components/TSDataGridToolbar.vue.d.ts +139 -0
  25. package/dist/components/TSDataGridToolbar.vue.d.ts.map +1 -0
  26. package/dist/composables/index.d.ts +28 -0
  27. package/dist/composables/index.d.ts.map +1 -0
  28. package/dist/composables/useClipboard.d.ts +863 -0
  29. package/dist/composables/useClipboard.d.ts.map +1 -0
  30. package/dist/composables/useColumnChooser.d.ts +36 -0
  31. package/dist/composables/useColumnChooser.d.ts.map +1 -0
  32. package/dist/composables/useColumnReorder.d.ts +40 -0
  33. package/dist/composables/useColumnReorder.d.ts.map +1 -0
  34. package/dist/composables/useColumnResize.d.ts +36 -0
  35. package/dist/composables/useColumnResize.d.ts.map +1 -0
  36. package/dist/composables/useContextMenu.d.ts +55 -0
  37. package/dist/composables/useContextMenu.d.ts.map +1 -0
  38. package/dist/composables/useDataSource.d.ts +1770 -0
  39. package/dist/composables/useDataSource.d.ts.map +1 -0
  40. package/dist/composables/useEditing.d.ts +54 -0
  41. package/dist/composables/useEditing.d.ts.map +1 -0
  42. package/dist/composables/useExport.d.ts +72 -0
  43. package/dist/composables/useExport.d.ts.map +1 -0
  44. package/dist/composables/useFiltering.d.ts +42 -0
  45. package/dist/composables/useFiltering.d.ts.map +1 -0
  46. package/dist/composables/useGridApi.d.ts +85 -0
  47. package/dist/composables/useGridApi.d.ts.map +1 -0
  48. package/dist/composables/useGrouping.d.ts +879 -0
  49. package/dist/composables/useGrouping.d.ts.map +1 -0
  50. package/dist/composables/useInfiniteScroll.d.ts +49 -0
  51. package/dist/composables/useInfiniteScroll.d.ts.map +1 -0
  52. package/dist/composables/useKeyboardNavigation.d.ts +47 -0
  53. package/dist/composables/useKeyboardNavigation.d.ts.map +1 -0
  54. package/dist/composables/useLoadingState.d.ts +36 -0
  55. package/dist/composables/useLoadingState.d.ts.map +1 -0
  56. package/dist/composables/usePagination.d.ts +45 -0
  57. package/dist/composables/usePagination.d.ts.map +1 -0
  58. package/dist/composables/useRowExpansion.d.ts +47 -0
  59. package/dist/composables/useRowExpansion.d.ts.map +1 -0
  60. package/dist/composables/useSearch.d.ts +97 -0
  61. package/dist/composables/useSearch.d.ts.map +1 -0
  62. package/dist/composables/useSelection.d.ts +32 -0
  63. package/dist/composables/useSelection.d.ts.map +1 -0
  64. package/dist/composables/useSorting.d.ts +859 -0
  65. package/dist/composables/useSorting.d.ts.map +1 -0
  66. package/dist/composables/useStatePersistence.d.ts +26 -0
  67. package/dist/composables/useStatePersistence.d.ts.map +1 -0
  68. package/dist/composables/useSummary.d.ts +49 -0
  69. package/dist/composables/useSummary.d.ts.map +1 -0
  70. package/dist/composables/useUndo.d.ts +27 -0
  71. package/dist/composables/useUndo.d.ts.map +1 -0
  72. package/dist/composables/useVirtualization.d.ts +40 -0
  73. package/dist/composables/useVirtualization.d.ts.map +1 -0
  74. package/dist/html2canvas.esm-1a1724a1.js +4886 -0
  75. package/dist/index-541cb5f8.js +38398 -0
  76. package/dist/index.d.ts +108 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.es-713282db.js +5771 -0
  79. package/dist/plugin.d.ts +22 -0
  80. package/dist/plugin.d.ts.map +1 -0
  81. package/dist/purify.es-35a15df8.js +480 -0
  82. package/dist/style.css +1 -0
  83. package/dist/tsdatagrid.es.js +358 -0
  84. package/dist/tsdatagrid.umd.js +450 -0
  85. package/dist/types/core/base.d.ts +143 -0
  86. package/dist/types/core/base.d.ts.map +1 -0
  87. package/dist/types/core/column.d.ts +354 -0
  88. package/dist/types/core/column.d.ts.map +1 -0
  89. package/dist/types/core/datasource.d.ts +247 -0
  90. package/dist/types/core/datasource.d.ts.map +1 -0
  91. package/dist/types/core/events.d.ts +297 -0
  92. package/dist/types/core/events.d.ts.map +1 -0
  93. package/dist/types/core/models.d.ts +74 -0
  94. package/dist/types/core/models.d.ts.map +1 -0
  95. package/dist/types/features/accessibility.d.ts +75 -0
  96. package/dist/types/features/accessibility.d.ts.map +1 -0
  97. package/dist/types/features/editing.d.ts +185 -0
  98. package/dist/types/features/editing.d.ts.map +1 -0
  99. package/dist/types/features/export.d.ts +145 -0
  100. package/dist/types/features/export.d.ts.map +1 -0
  101. package/dist/types/features/filtering.d.ts +193 -0
  102. package/dist/types/features/filtering.d.ts.map +1 -0
  103. package/dist/types/features/grouping.d.ts +148 -0
  104. package/dist/types/features/grouping.d.ts.map +1 -0
  105. package/dist/types/features/keyboard.d.ts +126 -0
  106. package/dist/types/features/keyboard.d.ts.map +1 -0
  107. package/dist/types/features/pagination.d.ts +85 -0
  108. package/dist/types/features/pagination.d.ts.map +1 -0
  109. package/dist/types/features/searching.d.ts +90 -0
  110. package/dist/types/features/searching.d.ts.map +1 -0
  111. package/dist/types/features/selection.d.ts +99 -0
  112. package/dist/types/features/selection.d.ts.map +1 -0
  113. package/dist/types/features/sorting.d.ts +81 -0
  114. package/dist/types/features/sorting.d.ts.map +1 -0
  115. package/dist/types/features/summary.d.ts +99 -0
  116. package/dist/types/features/summary.d.ts.map +1 -0
  117. package/dist/types/features/virtualization.d.ts +88 -0
  118. package/dist/types/features/virtualization.d.ts.map +1 -0
  119. package/dist/types/index.d.ts +60 -0
  120. package/dist/types/index.d.ts.map +1 -0
  121. package/dist/types/state/grid-state.d.ts +70 -0
  122. package/dist/types/state/grid-state.d.ts.map +1 -0
  123. package/dist/types/state/persistence.d.ts +65 -0
  124. package/dist/types/state/persistence.d.ts.map +1 -0
  125. package/dist/types/ui/styling.d.ts +72 -0
  126. package/dist/types/ui/styling.d.ts.map +1 -0
  127. package/dist/types/ui/templates.d.ts +80 -0
  128. package/dist/types/ui/templates.d.ts.map +1 -0
  129. package/dist/types/ui/toolbar.d.ts +63 -0
  130. package/dist/types/ui/toolbar.d.ts.map +1 -0
  131. package/dist/types/validation/validators.d.ts +134 -0
  132. package/dist/types/validation/validators.d.ts.map +1 -0
  133. package/dist/utils/accessibility.d.ts +35 -0
  134. package/dist/utils/accessibility.d.ts.map +1 -0
  135. package/dist/utils/array.d.ts +88 -0
  136. package/dist/utils/array.d.ts.map +1 -0
  137. package/dist/utils/cache.d.ts +92 -0
  138. package/dist/utils/cache.d.ts.map +1 -0
  139. package/dist/utils/clipboard.d.ts +25 -0
  140. package/dist/utils/clipboard.d.ts.map +1 -0
  141. package/dist/utils/column-searcher.d.ts +44 -0
  142. package/dist/utils/column-searcher.d.ts.map +1 -0
  143. package/dist/utils/constants.d.ts +76 -0
  144. package/dist/utils/constants.d.ts.map +1 -0
  145. package/dist/utils/date.d.ts +101 -0
  146. package/dist/utils/date.d.ts.map +1 -0
  147. package/dist/utils/dom.d.ts +128 -0
  148. package/dist/utils/dom.d.ts.map +1 -0
  149. package/dist/utils/error-handling.d.ts +190 -0
  150. package/dist/utils/error-handling.d.ts.map +1 -0
  151. package/dist/utils/export.d.ts +37 -0
  152. package/dist/utils/export.d.ts.map +1 -0
  153. package/dist/utils/formatters.d.ts +60 -0
  154. package/dist/utils/formatters.d.ts.map +1 -0
  155. package/dist/utils/index.d.ts +25 -0
  156. package/dist/utils/index.d.ts.map +1 -0
  157. package/dist/utils/keyboard.d.ts +58 -0
  158. package/dist/utils/keyboard.d.ts.map +1 -0
  159. package/dist/utils/logger.d.ts +45 -0
  160. package/dist/utils/logger.d.ts.map +1 -0
  161. package/dist/utils/number.d.ts +77 -0
  162. package/dist/utils/number.d.ts.map +1 -0
  163. package/dist/utils/object.d.ts +101 -0
  164. package/dist/utils/object.d.ts.map +1 -0
  165. package/dist/utils/odata.d.ts +87 -0
  166. package/dist/utils/odata.d.ts.map +1 -0
  167. package/dist/utils/performance.d.ts +75 -0
  168. package/dist/utils/performance.d.ts.map +1 -0
  169. package/dist/utils/storage.d.ts +83 -0
  170. package/dist/utils/storage.d.ts.map +1 -0
  171. package/dist/utils/string.d.ts +105 -0
  172. package/dist/utils/string.d.ts.map +1 -0
  173. package/dist/utils/validators.d.ts +60 -0
  174. package/dist/utils/validators.d.ts.map +1 -0
  175. package/package.json +90 -0
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ @charset "UTF-8";.ts-datagrid-body[data-v-e676cb1d]{position:relative;width:100%}.ts-datagrid-body__loading[data-v-e676cb1d],.ts-datagrid-body__empty[data-v-e676cb1d]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:#6b7280}.ts-datagrid-body__spinner[data-v-e676cb1d]{width:40px;height:40px;border:3px solid #e5e7eb;border-top-color:#3b82f6;border-radius:50%;animation:spin-e676cb1d .8s linear infinite;margin-bottom:16px}@keyframes spin-e676cb1d{to{transform:rotate(360deg)}}.ts-datagrid-body__virtual-spacer[data-v-e676cb1d]{width:100%;flex-shrink:0;pointer-events:none}.ts-datagrid-body__row[data-v-e676cb1d]{display:flex;align-items:center;border-bottom:1px solid #e5e7eb;background:white;transition:background-color .15s ease}.ts-datagrid-body__row[data-v-e676cb1d]:hover{background:#f9fafb}.ts-datagrid-body__row--selected[data-v-e676cb1d]{background:#eff6ff!important}.ts-datagrid-body__row--focused[data-v-e676cb1d]{outline:2px solid #3b82f6;outline-offset:-2px}.ts-datagrid-body__scroll-sentinel[data-v-e676cb1d]{height:1px;width:100%;position:relative;pointer-events:none}.ts-datagrid-body__loading-more[data-v-e676cb1d]{display:flex;align-items:center;justify-content:center;gap:12px;padding:20px;font-size:14px;color:#6b7280}.ts-datagrid-body__spinner--small[data-v-e676cb1d]{width:20px;height:20px;border:2px solid #e5e7eb;border-top-color:#3b82f6;border-radius:50%;animation:spin-e676cb1d .8s linear infinite}.ts-datagrid-body__no-more[data-v-e676cb1d]{text-align:center;padding:16px;color:#6b7280;font-size:13px}.context-menu-enter-active{animation:context-menu-in .15s ease-out}.context-menu-leave-active{animation:context-menu-out .1s ease-in}@keyframes context-menu-in{0%{opacity:0;transform:scale(.95) translateY(-5px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes context-menu-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}.ts-datagrid-context-menu{background:white;border:1px solid #ddd;border-radius:6px;box-shadow:0 4px 12px #00000026;min-width:200px;padding:4px 0;transform-origin:top left}.ts-datagrid-context-menu__item{width:100%;padding:10px 14px;border:none;background:none;text-align:left;cursor:pointer;display:flex;align-items:center;gap:10px;font-size:14px;color:#333;transition:background .15s}.ts-datagrid-context-menu__item:hover:not(.ts-datagrid-context-menu__item--disabled){background:#f5f5f5}.ts-datagrid-context-menu__item:active:not(.ts-datagrid-context-menu__item--disabled){background:#e8e8e8}.ts-datagrid-context-menu__item--disabled{opacity:.5;cursor:not-allowed}.ts-datagrid-context-menu__item--has-submenu{padding-right:24px}.ts-datagrid-context-menu__icon{width:18px;height:18px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:16px}.ts-datagrid-context-menu__text{flex:1;font-weight:500}.ts-datagrid-context-menu__arrow{font-size:10px;opacity:.6;margin-left:auto}.ts-datagrid-context-menu__separator{height:1px;background:#e0e0e0;margin:4px 8px}:root{--tsdg-primary: #007bff;--tsdg-secondary: #6c757d;--tsdg-success: #28a745;--tsdg-danger: #dc3545;--tsdg-warning: #ffc107;--tsdg-info: #17a2b8;--tsdg-light: #f8f9fa;--tsdg-dark: #343a40;--tsdg-bg-primary: #ffffff;--tsdg-bg-secondary: #f8f9fa;--tsdg-bg-tertiary: #e9ecef;--tsdg-bg-hover: #f1f3f5;--tsdg-bg-selected: #e7f3ff;--tsdg-bg-active: #d0e8ff;--tsdg-text-primary: #212529;--tsdg-text-secondary: #6c757d;--tsdg-text-muted: #adb5bd;--tsdg-text-disabled: #ced4da;--tsdg-border-color: #dee2e6;--tsdg-border-color-light: #e9ecef;--tsdg-border-color-dark: #adb5bd;--tsdg-spacing-xs: 4px;--tsdg-spacing-sm: 8px;--tsdg-spacing-md: 12px;--tsdg-spacing-lg: 16px;--tsdg-spacing-xl: 24px;--tsdg-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--tsdg-font-size-xs: 11px;--tsdg-font-size-sm: 12px;--tsdg-font-size-base: 14px;--tsdg-font-size-lg: 16px;--tsdg-font-size-xl: 18px;--tsdg-font-weight-normal: 400;--tsdg-font-weight-medium: 500;--tsdg-font-weight-semibold: 600;--tsdg-font-weight-bold: 700;--tsdg-line-height: 1.5;--tsdg-shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--tsdg-shadow: 0 2px 4px rgba(0, 0, 0, .1);--tsdg-shadow-md: 0 4px 8px rgba(0, 0, 0, .12);--tsdg-shadow-lg: 0 8px 16px rgba(0, 0, 0, .15);--tsdg-shadow-xl: 0 12px 24px rgba(0, 0, 0, .18);--tsdg-border-radius-sm: 2px;--tsdg-border-radius: 4px;--tsdg-border-radius-md: 6px;--tsdg-border-radius-lg: 8px;--tsdg-transition-fast: .15s ease;--tsdg-transition: .25s ease;--tsdg-transition-slow: .35s ease;--tsdg-z-dropdown: 1000;--tsdg-z-sticky: 1020;--tsdg-z-fixed: 1030;--tsdg-z-modal-backdrop: 1040;--tsdg-z-modal: 1050;--tsdg-z-popover: 1060;--tsdg-z-tooltip: 1070;--tsdg-row-height: 40px;--tsdg-header-height: 48px;--tsdg-footer-height: 56px;--tsdg-toolbar-height: 48px;--tsdg-group-panel-height: 52px;--tsdg-cell-padding: 8px 12px}.tsdg-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.tsdg-text-left{text-align:left}.tsdg-text-center{text-align:center}.tsdg-text-right{text-align:right}.tsdg-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tsdg-no-select{-webkit-user-select:none;user-select:none}.ts-datagrid{display:flex;flex-direction:column;width:100%;height:100%;font-family:var(--tsdg-font-family);font-size:var(--tsdg-font-size-base);color:var(--tsdg-text-primary);background:var(--tsdg-bg-primary);border:1px solid var(--tsdg-border-color);border-radius:var(--tsdg-border-radius);overflow:hidden;position:relative}.ts-datagrid:focus{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid--loading{pointer-events:none}.ts-datagrid--grouped .ts-datagrid-body__row{padding-left:0}.ts-datagrid--batch-editing .ts-datagrid-body__row{background:#fffbf0}.ts-datagrid--virtualized .ts-datagrid-header{position:sticky;top:0;z-index:var(--tsdg-z-sticky);background:var(--tsdg-bg-primary)}.ts-datagrid--virtualized .ts-datagrid__summary{position:sticky;bottom:0;z-index:var(--tsdg-z-sticky);background:var(--tsdg-bg-secondary)}.ts-datagrid--virtualized .ts-datagrid__scrollable{overflow-y:auto!important;overflow-x:auto!important}.ts-datagrid--virtualized .ts-datagrid__scroll-content{will-change:transform}.ts-datagrid--virtualized .ts-datagrid-body__rows-container{contain:layout style paint}.ts-datagrid--paginated:not(.ts-datagrid--virtualized) .ts-datagrid__scrollable{overflow-y:visible}.ts-datagrid--paginated:not(.ts-datagrid--virtualized) .ts-datagrid__container{flex:1;overflow:visible}.ts-datagrid__container{flex:1;display:flex;flex-direction:column;position:relative;overflow:hidden;min-height:200px}.ts-datagrid__scrollable{flex:1;overflow:auto;position:relative}.ts-datagrid__scrollable::-webkit-scrollbar{width:8px;height:8px}.ts-datagrid__scrollable::-webkit-scrollbar-track{background:var(--tsdg-bg-secondary)}.ts-datagrid__scrollable::-webkit-scrollbar-thumb{background:var(--tsdg-border-color-dark);border-radius:var(--tsdg-border-radius)}.ts-datagrid__scrollable::-webkit-scrollbar-thumb:hover{background:var(--tsdg-text-secondary)}.ts-datagrid__scrollable{-webkit-overflow-scrolling:touch}.ts-datagrid__scrollable.ts-datagrid--virtualized{will-change:scroll-position}.ts-datagrid__scrollable::-webkit-scrollbar{width:12px;height:12px}.ts-datagrid__scrollable::-webkit-scrollbar-track{background:var(--tsdg-scrollbar-track, #f1f1f1)}.ts-datagrid__scrollable::-webkit-scrollbar-thumb{background:var(--tsdg-scrollbar-thumb, #888);border-radius:6px}.ts-datagrid__scrollable::-webkit-scrollbar-thumb:hover{background:var(--tsdg-scrollbar-thumb-hover, #555)}.ts-datagrid__scrollable{scrollbar-width:thin;scrollbar-color:var(--tsdg-scrollbar-thumb, #888) var(--tsdg-scrollbar-track, #f1f1f1)}.ts-datagrid__scroll-content{position:relative;min-width:100%;width:fit-content;display:flex;flex-direction:column}.ts-datagrid__virtual-spacer{width:100%;pointer-events:none;flex-shrink:0;will-change:height;contain:strict;display:block;margin:0;padding:0;border:none;background:transparent}.ts-datagrid__loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(255,255,255,.9);display:flex;align-items:center;justify-content:center;z-index:var(--tsdg-z-modal);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.ts-datagrid__loading-content{display:flex;align-items:center;justify-content:center;flex-direction:column;gap:var(--tsdg-spacing-md)}.ts-datagrid__loading-text{font-size:var(--tsdg-font-size-lg);color:var(--tsdg-text-secondary)}.ts-datagrid__loading-progress{width:300px;display:flex;align-items:center;justify-content:center;gap:var(--tsdg-spacing-sm)}.ts-datagrid__progress-bar{flex:1;height:8px;background:var(--tsdg-border-color);border-radius:4px;overflow:hidden}.ts-datagrid__progress-fill{height:100%;background:var(--tsdg-primary);transition:width .3s ease}.ts-datagrid__progress-text{font-size:var(--tsdg-font-size-sm);color:var(--tsdg-text-muted);min-width:40px;text-align:right}.ts-datagrid__loading-spinner{display:flex;align-items:center;justify-content:center;flex-direction:column;gap:var(--tsdg-spacing-md)}.ts-datagrid__spinner{width:48px;height:48px;border:4px solid var(--tsdg-border-color);border-top-color:var(--tsdg-primary);border-radius:50%;animation:tsdg-spin .8s linear infinite}.ts-datagrid__spinner--small{width:24px;height:24px;border-width:3px}.ts-datagrid__summary{border-top:2px solid var(--tsdg-border-color-dark);background:var(--tsdg-bg-secondary)}.ts-datagrid__summary--multi-row .ts-datagrid__summary-row--page{border-bottom:1px solid var(--tsdg-border-color)}.ts-datagrid__summary-row{display:flex;min-height:var(--tsdg-row-height);font-weight:var(--tsdg-font-weight-semibold)}.ts-datagrid__summary-row--page{background:var(--tsdg-bg-tertiary)}.ts-datagrid__summary-row--total{background:var(--tsdg-bg-secondary)}.ts-datagrid__summary-cell{padding:var(--tsdg-cell-padding);display:flex;align-items:center;border-right:1px solid var(--tsdg-border-color)}.ts-datagrid__summary-cell--selection{width:40px;min-width:40px;max-width:40px;flex:none;justify-content:center}.ts-datagrid__summary-cell--label{font-weight:var(--tsdg-font-weight-bold)}.ts-datagrid__summary-cell--number{justify-content:flex-end}.ts-datagrid__summary-label{font-size:var(--tsdg-font-size-sm);text-transform:uppercase;letter-spacing:.5px;color:var(--tsdg-text-secondary)}.ts-datagrid__empty-state{display:flex;align-items:center;justify-content:center;flex-direction:column;gap:var(--tsdg-spacing-lg);padding:var(--tsdg-spacing-xl);color:var(--tsdg-text-muted);min-height:300px}.ts-datagrid__empty-state svg{opacity:.3}.ts-datagrid__empty-state p{margin:0;font-size:var(--tsdg-font-size-lg)}.ts-datagrid__scroll-sentinel{position:absolute;bottom:0;left:0;right:0;height:1px;pointer-events:none;visibility:hidden}.ts-datagrid__loading-more{display:flex;align-items:center;justify-content:center;gap:var(--tsdg-spacing-sm);padding:var(--tsdg-spacing-md);color:var(--tsdg-text-secondary);font-size:var(--tsdg-font-size-sm)}.ts-datagrid--virtualized .ts-datagrid-body__row{transform:translateZ(0);backface-visibility:hidden}.ts-datagrid--virtualized .ts-datagrid__scrollable{transform:translateZ(0)}.ts-datagrid:focus{outline:none}.ts-datagrid--keyboard-nav .ts-datagrid-body__cell{position:relative}.ts-datagrid--keyboard-nav .ts-datagrid-body__cell--focused{outline:2px solid #3498db;outline-offset:-2px;z-index:2;box-shadow:0 0 0 3px #3498db1a}.ts-datagrid--keyboard-nav .ts-datagrid-body__row--focused{background-color:#3498db0d}.ts-datagrid-body__cell:focus-visible{outline:2px solid #3498db;outline-offset:-2px;z-index:2}.ts-datagrid-body__cell:focus{outline:none}.ts-datagrid-header{position:sticky;top:0;z-index:var(--tsdg-z-sticky);background:var(--tsdg-bg-secondary);border-bottom:2px solid var(--tsdg-border-color-dark);-webkit-user-select:none;user-select:none}.ts-datagrid-header__row{display:flex;min-height:var(--tsdg-header-height);width:100%;position:relative}.ts-datagrid-header__cell{padding:var(--tsdg-cell-padding);display:flex;align-items:center;border-right:1px solid var(--tsdg-border-color);font-weight:var(--tsdg-font-weight-semibold);position:relative;-webkit-user-select:none;user-select:none;background:var(--tsdg-bg-secondary);transition:background-color .15s ease}.ts-datagrid-header__cell:last-child{border-right:none}.ts-datagrid-header__cell--selection,.ts-datagrid-header__cell--expansion{width:48px;min-width:48px;max-width:48px;justify-content:center;flex-shrink:0;padding:.5rem}.ts-datagrid-header__cell--chooser{width:48px;justify-content:center;flex-shrink:0;border-left:1px solid var(--tsdg-border-color)}.ts-datagrid-header__cell--left{justify-content:flex-start;text-align:left}.ts-datagrid-header__cell--center{justify-content:center;text-align:center}.ts-datagrid-header__cell--right{justify-content:flex-end;text-align:right}.ts-datagrid-header__cell--sortable{cursor:pointer}.ts-datagrid-header__cell--sortable:hover{background:var(--tsdg-bg-hover)}.ts-datagrid-header__cell--sortable:active{background:var(--tsdg-bg-active)}.ts-datagrid-header__cell--sorted{background:var(--tsdg-bg-active);color:var(--tsdg-primary)}.ts-datagrid-header__cell--filtered{background:rgba(251,191,36,.1)}.ts-datagrid-header__cell--filtered .ts-datagrid-header__filter-button{color:var(--tsdg-primary);background:rgba(0,123,255,.1)}.ts-datagrid-header__cell--filtered .ts-datagrid-header__filter-button:hover{background:rgba(0,123,255,.2)}.ts-datagrid-header__cell--resizable .ts-datagrid-header__resize-handle{display:block;opacity:0;transition:opacity .2s ease}.ts-datagrid-header__cell--resizable:hover .ts-datagrid-header__resize-handle{opacity:1}.ts-datagrid-header__cell--resizing{background:rgba(59,130,246,.1);cursor:col-resize;-webkit-user-select:none;user-select:none}.ts-datagrid-header__cell--resizing *{cursor:col-resize!important;-webkit-user-select:none!important;user-select:none!important}.ts-datagrid-header__cell--resizing .ts-datagrid-header__resize-handle{opacity:1}.ts-datagrid-header__cell--resizing .ts-datagrid-header__resize-handle:after{background:var(--tsdg-primary);width:3px}.ts-datagrid-header__cell--groupable .ts-datagrid-header__drag-handle{cursor:grab;opacity:.6}.ts-datagrid-header__cell--groupable .ts-datagrid-header__drag-handle:hover{opacity:1;color:var(--tsdg-primary)}.ts-datagrid-header__cell--groupable .ts-datagrid-header__drag-handle:active{cursor:grabbing}.ts-datagrid-header__cell--groupable:hover .ts-datagrid-header__drag-handle{opacity:1}.ts-datagrid-header__cell--dragging{opacity:.5;background:rgba(59,130,246,.2);cursor:grabbing;z-index:100}.ts-datagrid-header__cell--dragging *{cursor:grabbing!important}.ts-datagrid-header__cell--drag-over{background:rgba(59,130,246,.1);position:relative}.ts-datagrid-header__cell--drag-over:before{content:"";position:absolute;left:-2px;top:0;bottom:0;width:4px;background:var(--tsdg-primary);z-index:10;animation:pulse-indicator 1.5s ease-in-out infinite}.ts-datagrid-header__cell-content{display:flex;align-items:center;gap:var(--tsdg-spacing-sm);width:100%;position:relative;min-width:0}.ts-datagrid-header__drag-handle{display:flex;align-items:center;justify-content:center;width:16px;height:16px;color:var(--tsdg-text-muted);flex-shrink:0;cursor:grab;opacity:.6;transition:all .2s ease;position:relative}.ts-datagrid-header__drag-handle:hover{color:var(--tsdg-primary);opacity:1}.ts-datagrid-header__drag-handle:active{cursor:grabbing}.ts-datagrid-header__drag-handle svg{pointer-events:none;width:12px;height:12px}.ts-datagrid-header__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;display:flex;align-items:center;gap:var(--tsdg-spacing-xs);min-width:0}.ts-datagrid-header__sort-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--tsdg-primary);gap:.25rem}.ts-datagrid-header__sort-icon svg{width:12px;height:12px;flex-shrink:0}.ts-datagrid-header__sort-index{font-size:var(--tsdg-font-size-xs);font-weight:var(--tsdg-font-weight-semibold);color:var(--tsdg-primary);background:rgba(59,130,246,.15);padding:.125rem .375rem;border-radius:var(--tsdg-border-radius-sm);line-height:1}.ts-datagrid-header__filter-button{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-header__filter-button:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-header__filter-button{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:var(--tsdg-border-radius-sm);color:var(--tsdg-text-secondary);flex-shrink:0;transition:all .15s ease}.ts-datagrid-header__filter-button:hover{background:var(--tsdg-bg-hover);color:var(--tsdg-text-primary)}.ts-datagrid-header__filter-button--active{color:#f59e0b;background:rgba(251,191,36,.15)}.ts-datagrid-header__filter-button--active:hover{background:rgba(251,191,36,.25)}.ts-datagrid-header__filter-button svg{width:14px;height:14px;pointer-events:none}.ts-datagrid-header__resize-handle{display:none;position:absolute;top:0;right:-4px;bottom:0;width:8px;cursor:col-resize;z-index:10;opacity:0;transition:opacity .2s ease}.ts-datagrid-header__resize-handle:before{content:"";position:absolute;top:0;bottom:0;left:3px;width:2px;background:transparent;transition:all .2s ease}.ts-datagrid-header__resize-handle:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:2px;height:50%;background:var(--tsdg-border-color-dark);transition:all .2s ease}.ts-datagrid-header__resize-handle:hover{opacity:1!important}.ts-datagrid-header__resize-handle:hover:after{background:var(--tsdg-primary);height:60%;width:3px}.ts-datagrid-header__resize-handle:active{opacity:1!important}.ts-datagrid-header__resize-handle:active:after{background:var(--tsdg-primary);height:80%;width:3px}.ts-datagrid-header__checkbox{cursor:pointer;width:16px;height:16px;margin:0;accent-color:var(--tsdg-primary)}.ts-datagrid-header__checkbox:indeterminate{opacity:.7}.ts-datagrid-header__chooser-button{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-header__chooser-button:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-header__chooser-button{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:var(--tsdg-text-secondary);transition:all .15s ease}.ts-datagrid-header__chooser-button:hover{color:var(--tsdg-text-primary);background:var(--tsdg-bg-hover)}.ts-datagrid-header__chooser-button svg{width:16px;height:16px}.ts-datagrid-header__cell--groupable:hover .ts-datagrid-header__drag-handle{color:var(--tsdg-primary)}.ts-datagrid__resize-line{position:fixed;top:0;bottom:0;width:2px;background:var(--tsdg-primary);pointer-events:none;z-index:9999;opacity:.8;box-shadow:0 0 4px #3b82f680}.ts-datagrid__resize-line:before{content:"";position:absolute;top:0;left:-2px;right:-2px;height:4px;background:var(--tsdg-primary);border-radius:2px}.ts-datagrid__resize-line:after{content:"";position:absolute;bottom:0;left:-2px;right:-2px;height:4px;background:var(--tsdg-primary);border-radius:2px}.ts-datagrid__drop-indicator{position:absolute;top:0;bottom:0;width:4px;background:var(--tsdg-primary);pointer-events:none;z-index:100;animation:pulse-indicator 1.5s ease-in-out infinite;box-shadow:0 0 8px #3b82f699}.ts-datagrid__drop-indicator:before{content:"";position:absolute;top:-6px;left:50%;transform:translate(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid var(--tsdg-primary)}.ts-datagrid__drop-indicator:after{content:"";position:absolute;bottom:-6px;left:50%;transform:translate(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid var(--tsdg-primary)}@keyframes pulse-indicator{0%,to{opacity:1;transform:scaleX(1)}50%{opacity:.7;transform:scaleX(.8)}}@media (max-width: 768px){.ts-datagrid-header__cell{padding:.5rem .75rem;font-size:var(--tsdg-font-size-sm)}.ts-datagrid-header__cell--selection,.ts-datagrid-header__cell--expansion{width:40px;min-width:40px;max-width:40px}.ts-datagrid-header__drag-handle{display:none}.ts-datagrid-header__resize-handle{width:12px;right:-6px}.ts-datagrid-header__resize-handle:after{width:3px}.ts-datagrid-header__filter-button{width:20px;height:20px}.ts-datagrid-header__filter-button svg{width:12px;height:12px}.ts-datagrid-header__sort-index{font-size:.625rem;padding:.0625rem .25rem}}@media print{.ts-datagrid-header{position:relative}.ts-datagrid-header__resize-handle,.ts-datagrid-header__drag-handle,.ts-datagrid-header__filter-button,.ts-datagrid-header__chooser-button{display:none!important}.ts-datagrid-header__cell--sortable{cursor:default}.ts-datagrid-header__cell--sortable:hover{background:var(--tsdg-bg-secondary)}.ts-datagrid-header__cell--dragging,.ts-datagrid-header__cell--drag-over,.ts-datagrid-header__cell--resizing{opacity:1;background:var(--tsdg-bg-secondary)}.ts-datagrid-header__cell--dragging:before,.ts-datagrid-header__cell--drag-over:before,.ts-datagrid-header__cell--resizing:before{display:none}.ts-datagrid__resize-line,.ts-datagrid__drop-indicator{display:none!important}}@media (prefers-reduced-motion: reduce){.ts-datagrid-header__cell,.ts-datagrid-header__resize-handle,.ts-datagrid-header__filter-button,.ts-datagrid-header__drag-handle{transition:none!important}.ts-datagrid__drop-indicator{animation:none!important}@keyframes pulse-indicator{0%,to{opacity:1;transform:none}}}@media (prefers-contrast: high){.ts-datagrid-header{border-bottom-width:3px}.ts-datagrid-header__cell{border-right-width:2px}.ts-datagrid-header__cell--sorted,.ts-datagrid-header__cell--filtered,.ts-datagrid-header__cell--dragging,.ts-datagrid-header__cell--drag-over{outline:2px solid var(--tsdg-primary);outline-offset:-2px}.ts-datagrid-header__resize-handle:after{background:currentColor;width:3px}.ts-datagrid__resize-line,.ts-datagrid__drop-indicator{width:4px;box-shadow:none}}.ts-datagrid-header__cell:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:-2px;z-index:1}.ts-datagrid-header__checkbox:focus-visible,.ts-datagrid-header__filter-button:focus-visible,.ts-datagrid-header__chooser-button:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px;border-radius:var(--tsdg-border-radius-sm)}.ts-datagrid-body{flex:1;min-height:0;position:relative;width:100%;overflow:hidden}.ts-datagrid-body__rows-container{position:relative;width:100%;display:flex;flex-direction:column}.ts-datagrid--virtualized .ts-datagrid-body__rows-container{contain:layout style paint;will-change:contents;transform:translateZ(0);backface-visibility:hidden}.ts-datagrid-body__virtual-spacer{width:100%;pointer-events:none;flex-shrink:0;will-change:height;contain:strict;display:block;margin:0;padding:0;border:none;background:transparent;min-height:0;transform:translateZ(0)}.ts-datagrid-body__virtual-spacer--top{order:-1}.ts-datagrid-body__virtual-spacer--bottom{order:9999}.ts-datagrid-body__scroll-sentinel{position:relative;height:1px;width:100%;pointer-events:none;visibility:hidden}.ts-datagrid-body__loading-more{display:flex;align-items:center;justify-content:center;padding:var(--tsdg-spacing-lg);gap:var(--tsdg-spacing-sm);color:var(--tsdg-text-secondary);font-size:var(--tsdg-font-size-sm);background:linear-gradient(to bottom,transparent,rgba(0,0,0,.02),transparent);border-top:1px solid var(--tsdg-border-color-light);border-bottom:1px solid var(--tsdg-border-color-light);animation:tsdg-pulse 1.5s ease-in-out infinite}.ts-datagrid-body__loading-more span{font-weight:var(--tsdg-font-weight-medium)}.ts-datagrid-body__no-more{display:flex;align-items:center;justify-content:center;padding:var(--tsdg-spacing-lg);color:var(--tsdg-text-muted);font-size:var(--tsdg-font-size-sm);border-top:2px solid var(--tsdg-border-color);background:var(--tsdg-bg-tertiary)}.ts-datagrid-body__no-more span{display:flex;align-items:center;gap:var(--tsdg-spacing-xs);font-weight:var(--tsdg-font-weight-medium)}.ts-datagrid-body__no-more span:before{content:"";display:inline-block;width:16px;height:16px;background:var(--tsdg-success);border-radius:50%;opacity:.6}.ts-datagrid-body__loading,.ts-datagrid-body__empty{display:flex;align-items:center;justify-content:center;min-height:300px;color:var(--tsdg-text-secondary);flex-direction:column;gap:var(--tsdg-spacing-lg);padding:var(--tsdg-spacing-xl)}.ts-datagrid-body__spinner{width:40px;height:40px;border:3px solid var(--tsdg-border-color);border-top-color:var(--tsdg-primary);border-radius:50%;animation:tsdg-spin .8s linear infinite}.ts-datagrid-body__spinner--small{width:24px;height:24px;border-width:2px}.ts-datagrid-body__empty-message{text-align:center}.ts-datagrid-body__empty-message svg{opacity:.3;margin-bottom:var(--tsdg-spacing-md)}.ts-datagrid-body__empty-message p{margin:0;font-size:var(--tsdg-font-size-lg);color:var(--tsdg-text-muted)}.ts-datagrid-body__row{display:flex;min-height:var(--tsdg-row-height);border-bottom:1px solid var(--tsdg-border-color-light);transition:background-color var(--tsdg-transition-fast);cursor:pointer}.ts-datagrid-body__row:focus{outline:none!important}.ts-datagrid-body__row:focus-visible{outline:none!important}.ts-datagrid-body__row:hover{background-color:var(--tsdg-bg-hover)}.ts-datagrid-body__row .ts-datagrid--keyboard-nav.ts-datagrid--has-keyboard-focus .ts-datagrid-body__row--focused{outline:2px solid var(--tsdg-primary)!important;outline-offset:-2px;z-index:1;background-color:#3498db0d}.ts-datagrid--virtualized .ts-datagrid-body__row{transform:translateZ(0);backface-visibility:hidden;contain:layout style paint}.ts-datagrid--infinite-scroll .ts-datagrid-body__row{animation:tsdg-slide-in .2s ease-out}.ts-datagrid-body__row--selected{background-color:var(--tsdg-bg-selected)}.ts-datagrid-body__row--selected:hover{background-color:var(--tsdg-bg-active)}.ts-datagrid-body__row--even{background:var(--tsdg-bg-primary)}.ts-datagrid-body__row--odd{background:var(--tsdg-bg-secondary)}.ts-datagrid-body__row--editing{background:#fff8e1;border-color:var(--tsdg-warning);box-shadow:inset 0 0 0 1px var(--tsdg-warning)}.ts-datagrid-body__row--batch-editing{background:#fffbf0}.ts-datagrid-body__row--focused{outline:2px solid var(--tsdg-primary);outline-offset:-2px;z-index:1}.ts-datagrid-body__group-row{display:flex;align-items:center;min-height:var(--tsdg-row-height);background:var(--tsdg-bg-tertiary);border-bottom:1px solid var(--tsdg-border-color);font-weight:var(--tsdg-font-weight-semibold);cursor:pointer;transition:background-color var(--tsdg-transition-fast)}.ts-datagrid-body__group-row:hover{background-color:var(--tsdg-bg-hover)}.ts-datagrid-body__group-row{position:sticky;top:var(--tsdg-header-height);z-index:calc(var(--tsdg-z-sticky) - 1)}.ts-datagrid-body__group-cell{padding:var(--tsdg-cell-padding);display:flex;align-items:center;gap:var(--tsdg-spacing-sm);width:100%}.ts-datagrid-body__group-toggle{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-body__group-toggle:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-body__group-toggle{display:flex;align-items:center;justify-content:center;width:20px;height:20px;transition:transform var(--tsdg-transition-fast);flex-shrink:0}.ts-datagrid-body__group-toggle--expanded{transform:rotate(90deg)}.ts-datagrid-body__group-toggle svg{display:block;fill:currentColor}.ts-datagrid-body__group-title{font-size:var(--tsdg-font-size-base);color:var(--tsdg-text-primary)}.ts-datagrid-body__group-count{color:var(--tsdg-text-secondary);font-size:var(--tsdg-font-size-sm);font-weight:var(--tsdg-font-weight-normal);margin-left:var(--tsdg-spacing-xs)}.ts-datagrid-body__group-footer{display:flex;min-height:calc(var(--tsdg-row-height) * .9);background:linear-gradient(to bottom,#f8f9fa 0%,#f0f2f5 100%);border-bottom:2px solid var(--tsdg-border-color);border-top:1px solid var(--tsdg-border-color-light);position:relative}.ts-datagrid-body__group-footer:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(to bottom,#1976d2,#1565c0)}.ts-datagrid-body__group-summary{display:flex;width:100%;align-items:center}.ts-datagrid-body__group-summary-cell{padding:var(--tsdg-cell-padding);display:flex;align-items:center;font-weight:var(--tsdg-font-weight-medium);font-size:var(--tsdg-font-size-sm);color:var(--tsdg-text-primary);border-right:1px solid var(--tsdg-border-color-light);min-height:inherit}.ts-datagrid-body__group-summary-cell:last-child{border-right:none}.ts-datagrid-body__group-summary-cell--number{font-family:SF Mono,Monaco,Inconsolata,Roboto Mono,monospace;color:#1976d2;font-weight:var(--tsdg-font-weight-semibold)}.ts-datagrid-body__group-summary-cell--left{justify-content:flex-start;text-align:left}.ts-datagrid-body__group-summary-cell--center{justify-content:center;text-align:center}.ts-datagrid-body__group-summary-cell--right{justify-content:flex-end;text-align:right}.ts-datagrid-body__group-summary-cell:empty:after{content:"—";color:var(--tsdg-text-muted);opacity:.5}.ts-datagrid-body__cell{padding:var(--tsdg-cell-padding);display:flex;align-items:center;border-right:1px solid var(--tsdg-border-color-light);position:relative;overflow:hidden}.ts-datagrid-body__cell:focus{outline:none!important}.ts-datagrid-body__cell:focus-visible{outline:none!important}.ts-datagrid-body__cell:last-child{border-right:none}.ts-datagrid-body__cell--selection{width:48px;justify-content:center;flex-shrink:0;padding:0}.ts-datagrid-body__cell--expansion{justify-content:center;flex-shrink:0;padding:0;cursor:pointer}.ts-datagrid-body__cell--expansion:hover{background:rgba(0,0,0,.04)}.ts-datagrid-body__expand-toggle{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-body__expand-toggle:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-body__expand-toggle{display:flex;align-items:center;justify-content:center;width:24px;height:24px;transition:transform var(--tsdg-transition-fast);border-radius:4px}.ts-datagrid-body__expand-toggle:hover{background:rgba(0,0,0,.08)}.ts-datagrid-body__expand-toggle--expanded{transform:rotate(90deg)}.ts-datagrid-body__expand-toggle svg{display:block;fill:currentColor}.ts-datagrid-body__detail-row{border-bottom:1px solid var(--tsdg-border-color);background:#fafafa;animation:tsdg-expand .2s ease-out}.ts-datagrid-body__detail-content{padding:var(--tsdg-spacing-md)}.ts-datagrid-body__checkbox{width:16px;height:16px;cursor:pointer}.ts-datagrid-row{display:contents}@keyframes tsdg-spin{to{transform:rotate(360deg)}}@keyframes tsdg-expand{0%{opacity:0;max-height:0}to{opacity:1;max-height:500px}}@keyframes tsdg-pulse{0%,to{opacity:1}50%{opacity:.6}}@keyframes tsdg-slide-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.ts-datagrid--virtualized .ts-datagrid-body__row{transform:translateZ(0);backface-visibility:hidden;contain:layout style paint;will-change:transform}.ts-datagrid--virtualized .ts-datagrid-body__virtual-spacer{content-visibility:auto;contain-intrinsic-size:auto 0px}.ts-datagrid--infinite-scroll .ts-datagrid-body__rows-container{will-change:transform}.ts-datagrid--infinite-scroll .ts-datagrid-body__row{contain:layout style}.ts-datagrid-body__row:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:-2px;z-index:1}@media (max-width: 768px){.ts-datagrid-body__loading-more,.ts-datagrid-body__no-more{padding:var(--tsdg-spacing-md);font-size:var(--tsdg-font-size-xs)}}.ts-datagrid-cell{padding:var(--tsdg-cell-padding);display:flex;align-items:center;border-right:1px solid var(--tsdg-border-color-light);position:relative;overflow:hidden;min-height:var(--tsdg-row-height);flex-shrink:0}.ts-datagrid-cell:focus{outline:none!important}.ts-datagrid-cell:focus-visible{outline:none!important}.ts-datagrid-cell:last-child{border-right:none}.ts-datagrid-cell--left{justify-content:flex-start;text-align:left}.ts-datagrid-cell--center{justify-content:center;text-align:center}.ts-datagrid-cell--right{justify-content:flex-end;text-align:right}.ts-datagrid-cell--number{font-variant-numeric:tabular-nums;justify-content:flex-end}.ts-datagrid-cell--boolean{justify-content:center}.ts-datagrid-cell--date,.ts-datagrid-cell--datetime{font-variant-numeric:tabular-nums}.ts-datagrid-cell--editing{padding:0;background:var(--tsdg-bg-primary);box-shadow:inset 0 0 0 2px var(--tsdg-primary);z-index:20;overflow:visible;outline:none!important}.ts-datagrid-cell--editable{cursor:text}.ts-datagrid-cell--editable:hover:not(.ts-datagrid-cell--editing) .ts-datagrid-cell__edit-icon{opacity:1}.ts-datagrid-cell--batch-editing{background:#fffbf0}.ts-datagrid-cell--batch-editing:hover{background:#fff8e1}.ts-datagrid-cell--modified{background:#e8f5e9;position:relative}.ts-datagrid-cell--modified:after{content:"";position:absolute;top:0;left:0;width:0;height:0;border-style:solid;border-width:8px 8px 0 0;border-color:var(--tsdg-success) transparent transparent transparent}.ts-datagrid-cell__display{display:flex;align-items:center;width:100%;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:24px}.ts-datagrid-cell__edit-icon{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-cell__edit-icon:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-cell__edit-icon{display:flex;align-items:center;justify-content:center;position:absolute;right:4px;top:50%;transform:translateY(-50%);width:20px;height:20px;border-radius:var(--tsdg-border-radius-sm);color:var(--tsdg-text-muted);opacity:0;transition:opacity var(--tsdg-transition-fast)}.ts-datagrid-cell__edit-icon:hover{background:var(--tsdg-bg-hover);color:var(--tsdg-text-primary);opacity:1}.ts-datagrid-cell__modified-indicator{position:absolute;top:4px;right:4px;color:var(--tsdg-success);font-weight:var(--tsdg-font-weight-bold);font-size:var(--tsdg-font-size-lg);line-height:1}.ts-datagrid-cell__edit{display:flex;align-items:center;width:100%;height:100%;gap:var(--tsdg-spacing-xs)}.ts-datagrid-cell__input,.ts-datagrid-cell__select,.ts-datagrid-cell__checkbox{background:var(--tsdg-bg-primary);border:1px solid var(--tsdg-border-color);border-radius:var(--tsdg-border-radius);padding:var(--tsdg-spacing-sm) var(--tsdg-spacing-md);font-family:var(--tsdg-font-family);font-size:var(--tsdg-font-size-base);line-height:var(--tsdg-line-height);color:var(--tsdg-text-primary);transition:border-color var(--tsdg-transition-fast)}.ts-datagrid-cell__input:focus,.ts-datagrid-cell__select:focus,.ts-datagrid-cell__checkbox:focus{outline:none;border-color:var(--tsdg-primary);box-shadow:0 0 0 3px #007bff1a}.ts-datagrid-cell__input:disabled,.ts-datagrid-cell__select:disabled,.ts-datagrid-cell__checkbox:disabled{background:var(--tsdg-bg-secondary);color:var(--tsdg-text-disabled);cursor:not-allowed}.ts-datagrid-cell__input:focus,.ts-datagrid-cell__select:focus,.ts-datagrid-cell__checkbox:focus{box-shadow:none;border-color:transparent;outline:none}.ts-datagrid-cell__input,.ts-datagrid-cell__select{flex:1;min-width:0;width:100%;height:100%;border:none;border-radius:0;padding:var(--tsdg-spacing-sm)}.ts-datagrid-cell__actions{display:flex;gap:4px;padding-right:var(--tsdg-spacing-sm);flex-shrink:0}.ts-datagrid-cell__action{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-cell__action:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-cell__action{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:var(--tsdg-border-radius-sm);transition:background-color var(--tsdg-transition-fast)}.ts-datagrid-cell__action--save{color:var(--tsdg-success)}.ts-datagrid-cell__action--save:hover{background:#e8f5e9}.ts-datagrid-cell__action--cancel{color:var(--tsdg-text-secondary)}.ts-datagrid-cell__action--cancel:hover{background:var(--tsdg-bg-hover)}.ts-datagrid-cell__error{display:flex;align-items:center;justify-content:center;position:absolute;top:4px;right:4px;width:18px;height:18px;background:var(--tsdg-danger);color:#fff;border-radius:50%;font-size:var(--tsdg-font-size-xs);font-weight:var(--tsdg-font-weight-bold);cursor:help;z-index:1}.ts-datagrid--keyboard-nav .ts-datagrid-cell--focused{outline:2px solid var(--tsdg-primary, #3498db)!important;outline-offset:-2px;z-index:2;box-shadow:0 0 0 3px #3498db1a}.ts-datagrid-footer{display:flex;align-items:center;justify-content:space-between;min-height:var(--tsdg-footer-height);padding:var(--tsdg-spacing-md) var(--tsdg-spacing-lg);background:var(--tsdg-bg-secondary);border-top:1px solid var(--tsdg-border-color);gap:var(--tsdg-spacing-lg);flex-wrap:wrap}.ts-datagrid-footer__info{display:flex;align-items:center;color:var(--tsdg-text-secondary);font-size:var(--tsdg-font-size-sm)}.ts-datagrid-footer__text{white-space:nowrap}.ts-datagrid-footer__pagination{display:flex;align-items:center;gap:var(--tsdg-spacing-xs)}.ts-datagrid-footer__button{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-footer__button:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-footer__button{display:flex;align-items:center;justify-content:center;min-width:32px;height:32px;padding:0 var(--tsdg-spacing-sm);border-radius:var(--tsdg-border-radius);color:var(--tsdg-text-primary);transition:all var(--tsdg-transition-fast)}.ts-datagrid-footer__button:hover:not(:disabled){background:var(--tsdg-bg-hover)}.ts-datagrid-footer__button:disabled{color:var(--tsdg-text-disabled);cursor:not-allowed;opacity:.5}.ts-datagrid-footer__button svg{display:block}.ts-datagrid-footer__pages{display:flex;align-items:center;gap:2px}.ts-datagrid-footer__page{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-footer__page:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-footer__page{display:flex;align-items:center;justify-content:center;min-width:32px;height:32px;padding:0 var(--tsdg-spacing-sm);border-radius:var(--tsdg-border-radius);font-size:var(--tsdg-font-size-sm);color:var(--tsdg-text-primary);transition:all var(--tsdg-transition-fast)}.ts-datagrid-footer__page:hover{background:var(--tsdg-bg-hover)}.ts-datagrid-footer__page--active{background:var(--tsdg-primary);color:#fff;font-weight:var(--tsdg-font-weight-semibold)}.ts-datagrid-footer__page--active:hover{background:var(--tsdg-primary)}.ts-datagrid-footer__page-size{display:flex;align-items:center;gap:var(--tsdg-spacing-sm);margin-left:auto}.ts-datagrid-footer__label{font-size:var(--tsdg-font-size-sm);color:var(--tsdg-text-secondary);white-space:nowrap}.ts-datagrid-footer__select{background:var(--tsdg-bg-primary);border:1px solid var(--tsdg-border-color);border-radius:var(--tsdg-border-radius);padding:var(--tsdg-spacing-sm) var(--tsdg-spacing-md);font-family:var(--tsdg-font-family);font-size:var(--tsdg-font-size-base);line-height:var(--tsdg-line-height);color:var(--tsdg-text-primary);transition:border-color var(--tsdg-transition-fast)}.ts-datagrid-footer__select:focus{outline:none;border-color:var(--tsdg-primary);box-shadow:0 0 0 3px #007bff1a}.ts-datagrid-footer__select:disabled{background:var(--tsdg-bg-secondary);color:var(--tsdg-text-disabled);cursor:not-allowed}.ts-datagrid-footer__select{min-width:80px;height:32px;padding:0 var(--tsdg-spacing-md);font-size:var(--tsdg-font-size-sm);cursor:pointer}.ts-datagrid-footer__summary{width:100%;padding-top:var(--tsdg-spacing-md);border-top:1px solid var(--tsdg-border-color)}.ts-datagrid-footer__summary-content{display:flex;gap:var(--tsdg-spacing-xl);flex-wrap:wrap}.ts-datagrid-footer__summary-item{font-size:var(--tsdg-font-size-sm);color:var(--tsdg-text-secondary)}.ts-datagrid-footer__summary-item strong{color:var(--tsdg-text-primary);font-weight:var(--tsdg-font-weight-semibold);margin-right:var(--tsdg-spacing-xs)}.ts-datagrid-toolbar{display:flex;align-items:center;justify-content:space-between;min-height:var(--tsdg-toolbar-height);padding:var(--tsdg-spacing-sm) var(--tsdg-spacing-lg);background:var(--tsdg-bg-secondary);border-bottom:1px solid var(--tsdg-border-color);gap:var(--tsdg-spacing-md)}.ts-datagrid-toolbar__left,.ts-datagrid-toolbar__center,.ts-datagrid-toolbar__right{display:flex;align-items:center;gap:var(--tsdg-spacing-sm)}.ts-datagrid-toolbar__left{flex:1}.ts-datagrid-toolbar__center{flex:1;justify-content:center}.ts-datagrid-toolbar__right{flex:1;justify-content:flex-end}.ts-datagrid-toolbar__button{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-toolbar__button:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-toolbar__button{display:inline-flex;align-items:center;gap:var(--tsdg-spacing-xs);height:32px;padding:0 var(--tsdg-spacing-md);border-radius:var(--tsdg-border-radius);font-size:var(--tsdg-font-size-sm);font-weight:var(--tsdg-font-weight-medium);color:var(--tsdg-text-primary);background:var(--tsdg-bg-primary);border:1px solid var(--tsdg-border-color);transition:all var(--tsdg-transition-fast);white-space:nowrap}.ts-datagrid-toolbar__button:hover:not(:disabled){background:var(--tsdg-bg-hover);border-color:var(--tsdg-border-color-dark)}.ts-datagrid-toolbar__button:active:not(:disabled){transform:translateY(1px)}.ts-datagrid-toolbar__button:disabled{opacity:.5;cursor:not-allowed}.ts-datagrid-toolbar__button svg{flex-shrink:0}.ts-datagrid-toolbar__button--primary{background:var(--tsdg-primary);color:#fff;border-color:var(--tsdg-primary)}.ts-datagrid-toolbar__button--primary:hover:not(:disabled){background:#0069d9;border-color:#0062cc}.ts-datagrid-toolbar__button--success{background:var(--tsdg-success);color:#fff;border-color:var(--tsdg-success)}.ts-datagrid-toolbar__button--success:hover:not(:disabled){background:#218838;border-color:#1e7e34}.ts-datagrid-toolbar__button--danger{background:var(--tsdg-danger);color:#fff;border-color:var(--tsdg-danger)}.ts-datagrid-toolbar__button--danger:hover:not(:disabled){background:#c82333;border-color:#bd2130}.ts-datagrid-toolbar__badge{display:inline-flex;align-items:center;height:24px;padding:0 var(--tsdg-spacing-sm);background:var(--tsdg-warning);color:var(--tsdg-text-primary);border-radius:var(--tsdg-border-radius-lg);font-size:var(--tsdg-font-size-xs);font-weight:var(--tsdg-font-weight-semibold)}.ts-datagrid-toolbar__search{position:relative;width:240px}.ts-datagrid-toolbar__search-input{background:var(--tsdg-bg-primary);border:1px solid var(--tsdg-border-color);border-radius:var(--tsdg-border-radius);padding:var(--tsdg-spacing-sm) var(--tsdg-spacing-md);font-family:var(--tsdg-font-family);font-size:var(--tsdg-font-size-base);line-height:var(--tsdg-line-height);color:var(--tsdg-text-primary);transition:border-color var(--tsdg-transition-fast)}.ts-datagrid-toolbar__search-input:focus{outline:none;border-color:var(--tsdg-primary);box-shadow:0 0 0 3px #007bff1a}.ts-datagrid-toolbar__search-input:disabled{background:var(--tsdg-bg-secondary);color:var(--tsdg-text-disabled);cursor:not-allowed}.ts-datagrid-toolbar__search-input{width:100%;height:32px;padding-left:32px;padding-right:32px;font-size:var(--tsdg-font-size-sm)}.ts-datagrid-toolbar__search-icon{position:absolute;left:8px;top:50%;transform:translateY(-50%);color:var(--tsdg-text-muted);pointer-events:none}.ts-datagrid-toolbar__search-clear{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-toolbar__search-clear:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-toolbar__search-clear{display:flex;align-items:center;justify-content:center;position:absolute;right:4px;top:50%;transform:translateY(-50%);width:24px;height:24px;border-radius:var(--tsdg-border-radius-sm);color:var(--tsdg-text-muted)}.ts-datagrid-toolbar__search-clear:hover{background:var(--tsdg-bg-hover);color:var(--tsdg-text-primary)}.ts-datagrid-toolbar__dropdown{position:relative}.ts-datagrid-toolbar__dropdown-menu{position:absolute;top:100%;right:0;margin-top:4px;min-width:180px;background:var(--tsdg-bg-primary);border:1px solid var(--tsdg-border-color);border-radius:var(--tsdg-border-radius);box-shadow:var(--tsdg-shadow-lg);z-index:var(--tsdg-z-dropdown);overflow:hidden}.ts-datagrid-toolbar__dropdown-item{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-toolbar__dropdown-item:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-toolbar__dropdown-item{display:block;width:100%;padding:var(--tsdg-spacing-sm) var(--tsdg-spacing-md);text-align:left;font-size:var(--tsdg-font-size-sm);color:var(--tsdg-text-primary);background:var(--tsdg-bg-primary);transition:background-color var(--tsdg-transition-fast)}.ts-datagrid-toolbar__dropdown-item:hover{background:var(--tsdg-bg-hover)}.ts-datagrid-toolbar__dropdown-item:not(:last-child){border-bottom:1px solid var(--tsdg-border-color-light)}.ts-datagrid-toolbar__caret{margin-left:4px}.ts-datagrid-toolbar__divider{width:1px;height:24px;background:var(--tsdg-border-color);margin:0 var(--tsdg-spacing-sm)}.ts-datagrid-group-panel{min-height:var(--tsdg-group-panel-height);padding:var(--tsdg-spacing-md);background:var(--tsdg-bg-secondary);border-bottom:1px solid var(--tsdg-border-color)}.ts-datagrid-group-panel__content{display:flex;align-items:center;gap:var(--tsdg-spacing-sm);min-height:32px}.ts-datagrid-group-panel__drop-zone{display:flex;align-items:center;justify-content:center;width:100%;gap:var(--tsdg-spacing-sm);padding:var(--tsdg-spacing-md);border:2px dashed var(--tsdg-border-color);border-radius:var(--tsdg-border-radius);background:var(--tsdg-bg-primary);color:var(--tsdg-text-muted)}.ts-datagrid-group-panel__icon{flex-shrink:0}.ts-datagrid-group-panel__hint{font-size:var(--tsdg-font-size-sm)}.ts-datagrid-group-panel__groups{display:flex;align-items:center;flex-wrap:wrap;gap:var(--tsdg-spacing-sm);width:100%}.ts-datagrid-group-panel__group{display:inline-flex;align-items:center;gap:var(--tsdg-spacing-xs);height:32px;padding:0 var(--tsdg-spacing-sm);background:var(--tsdg-bg-primary);border:1px solid var(--tsdg-border-color);border-radius:var(--tsdg-border-radius-lg);font-size:var(--tsdg-font-size-sm);cursor:move;-webkit-user-select:none;user-select:none;transition:all var(--tsdg-transition-fast)}.ts-datagrid-group-panel__group:hover{border-color:var(--tsdg-primary);box-shadow:var(--tsdg-shadow-sm)}.ts-datagrid-group-panel__drag-handle{display:flex;align-items:center;justify-content:center;color:var(--tsdg-text-muted);flex-shrink:0}.ts-datagrid-group-panel__name{font-weight:var(--tsdg-font-weight-medium);color:var(--tsdg-text-primary)}.ts-datagrid-group-panel__sort{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-group-panel__sort:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-group-panel__sort{display:flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:var(--tsdg-border-radius-sm);color:var(--tsdg-text-secondary)}.ts-datagrid-group-panel__sort:hover{background:var(--tsdg-bg-hover);color:var(--tsdg-text-primary)}.ts-datagrid-group-panel__remove{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-group-panel__remove:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-group-panel__remove{display:flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:var(--tsdg-border-radius-sm);color:var(--tsdg-text-secondary)}.ts-datagrid-group-panel__remove:hover{background:#ffebee;color:var(--tsdg-danger)}.ts-datagrid-group-panel__clear{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-group-panel__clear:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-group-panel__clear{display:inline-flex;align-items:center;gap:var(--tsdg-spacing-xs);height:28px;padding:0 var(--tsdg-spacing-md);margin-left:auto;border-radius:var(--tsdg-border-radius);font-size:var(--tsdg-font-size-sm);color:var(--tsdg-text-secondary);transition:all var(--tsdg-transition-fast)}.ts-datagrid-group-panel__clear:hover{background:var(--tsdg-bg-hover);color:var(--tsdg-text-primary)}.ts-datagrid-column-chooser{position:fixed;top:0;left:0;right:0;bottom:0;z-index:var(--tsdg-z-modal);display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.5);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.ts-datagrid-column-chooser__panel{position:relative;width:90%;max-width:400px;max-height:80vh;background:var(--tsdg-bg-primary);border-radius:var(--tsdg-border-radius-lg);box-shadow:var(--tsdg-shadow-xl);display:flex;flex-direction:column;overflow:hidden}.ts-datagrid-column-chooser__header{display:flex;align-items:center;justify-content:space-between;padding:var(--tsdg-spacing-lg);border-bottom:1px solid var(--tsdg-border-color)}.ts-datagrid-column-chooser__title{font-size:var(--tsdg-font-size-lg);font-weight:var(--tsdg-font-weight-semibold);color:var(--tsdg-text-primary);margin:0}.ts-datagrid-column-chooser__close{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-column-chooser__close:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-column-chooser__close{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--tsdg-border-radius);color:var(--tsdg-text-secondary)}.ts-datagrid-column-chooser__close:hover{background:var(--tsdg-bg-hover);color:var(--tsdg-text-primary)}.ts-datagrid-column-chooser__search{position:relative;padding:var(--tsdg-spacing-md) var(--tsdg-spacing-lg);border-bottom:1px solid var(--tsdg-border-color-light)}.ts-datagrid-column-chooser__search-input{background:var(--tsdg-bg-primary);border:1px solid var(--tsdg-border-color);border-radius:var(--tsdg-border-radius);padding:var(--tsdg-spacing-sm) var(--tsdg-spacing-md);font-family:var(--tsdg-font-family);font-size:var(--tsdg-font-size-base);line-height:var(--tsdg-line-height);color:var(--tsdg-text-primary);transition:border-color var(--tsdg-transition-fast)}.ts-datagrid-column-chooser__search-input:focus{outline:none;border-color:var(--tsdg-primary);box-shadow:0 0 0 3px #007bff1a}.ts-datagrid-column-chooser__search-input:disabled{background:var(--tsdg-bg-secondary);color:var(--tsdg-text-disabled);cursor:not-allowed}.ts-datagrid-column-chooser__search-input{width:100%;height:36px;padding-left:36px}.ts-datagrid-column-chooser__search-icon{position:absolute;left:calc(var(--tsdg-spacing-lg) + 8px);top:50%;transform:translateY(-50%);color:var(--tsdg-text-muted);pointer-events:none}.ts-datagrid-column-chooser__actions{display:flex;gap:var(--tsdg-spacing-sm);padding:var(--tsdg-spacing-md) var(--tsdg-spacing-lg);border-bottom:1px solid var(--tsdg-border-color-light)}.ts-datagrid-column-chooser__action{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-column-chooser__action:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-column-chooser__action{padding:var(--tsdg-spacing-xs) var(--tsdg-spacing-md);border-radius:var(--tsdg-border-radius);font-size:var(--tsdg-font-size-sm);color:var(--tsdg-primary);transition:all var(--tsdg-transition-fast)}.ts-datagrid-column-chooser__action:hover{background:rgba(0,123,255,.1)}.ts-datagrid-column-chooser__list{flex:1;overflow-y:auto;padding:var(--tsdg-spacing-sm)}.ts-datagrid-column-chooser__list::-webkit-scrollbar{width:8px;height:8px}.ts-datagrid-column-chooser__list::-webkit-scrollbar-track{background:var(--tsdg-bg-secondary)}.ts-datagrid-column-chooser__list::-webkit-scrollbar-thumb{background:var(--tsdg-border-color-dark);border-radius:var(--tsdg-border-radius)}.ts-datagrid-column-chooser__list::-webkit-scrollbar-thumb:hover{background:var(--tsdg-text-secondary)}.ts-datagrid-column-chooser__item{display:flex;align-items:center;gap:var(--tsdg-spacing-sm);padding:var(--tsdg-spacing-sm);margin-bottom:2px;border-radius:var(--tsdg-border-radius);cursor:move;-webkit-user-select:none;user-select:none;transition:background-color var(--tsdg-transition-fast);border:2px solid transparent}.ts-datagrid-column-chooser__item:hover{background:var(--tsdg-bg-hover)}.ts-datagrid-column-chooser__item--dragging{opacity:.5;background:var(--tsdg-bg-hover)}.ts-datagrid-column-chooser__item--drag-over{border-top:2px solid var(--tsdg-primary);margin-top:4px}.ts-datagrid-column-chooser__drag-handle{display:flex;align-items:center;justify-content:center;color:var(--tsdg-text-muted);flex-shrink:0;cursor:move;width:20px;height:20px}.ts-datagrid-column-chooser__drag-handle--disabled{opacity:.3;cursor:not-allowed}.ts-datagrid-column-chooser__drag-handle:hover:not(.ts-datagrid-column-chooser__drag-handle--disabled){color:var(--tsdg-text-primary)}.ts-datagrid-column-chooser__label{flex:1;display:flex;align-items:center;gap:var(--tsdg-spacing-sm);cursor:pointer;min-width:0}.ts-datagrid-column-chooser__checkbox{width:16px;height:16px;cursor:pointer;flex-shrink:0}.ts-datagrid-column-chooser__checkbox:disabled{cursor:not-allowed;opacity:.5}.ts-datagrid-column-chooser__name{font-size:var(--tsdg-font-size-sm);color:var(--tsdg-text-primary);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ts-datagrid-column-chooser__locked{display:flex;align-items:center;justify-content:center;margin-left:auto;color:var(--tsdg-text-muted);flex-shrink:0}.ts-datagrid-column-chooser__empty{display:flex;align-items:center;justify-content:center;padding:var(--tsdg-spacing-xl);color:var(--tsdg-text-muted);font-size:var(--tsdg-font-size-sm)}.ts-datagrid-column-chooser__empty p{margin:0}.ts-datagrid-column-chooser__footer{display:flex;align-items:center;justify-content:space-between;gap:var(--tsdg-spacing-md);padding:var(--tsdg-spacing-lg);border-top:1px solid var(--tsdg-border-color)}.ts-datagrid-column-chooser__info{font-size:var(--tsdg-font-size-sm);color:var(--tsdg-text-secondary)}.ts-datagrid-column-chooser__buttons{display:flex;gap:var(--tsdg-spacing-sm)}.ts-datagrid-column-chooser__button{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.ts-datagrid-column-chooser__button:focus-visible{outline:2px solid var(--tsdg-primary);outline-offset:2px}.ts-datagrid-column-chooser__button{height:36px;padding:0 var(--tsdg-spacing-lg);border-radius:var(--tsdg-border-radius);font-size:var(--tsdg-font-size-sm);font-weight:var(--tsdg-font-weight-medium);transition:all var(--tsdg-transition-fast)}.ts-datagrid-column-chooser__button--cancel{color:var(--tsdg-text-primary);border:1px solid var(--tsdg-border-color)}.ts-datagrid-column-chooser__button--cancel:hover{background:var(--tsdg-bg-hover)}.ts-datagrid-column-chooser__button--apply{background:var(--tsdg-primary);color:#fff}.ts-datagrid-column-chooser__button--apply:hover{background:#0069d9}.ts-datagrid-column-chooser__button--apply:active{background:#005cbf}.ts-datagrid-filter-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;z-index:1050;background:rgba(0,0,0,.1);animation:fadeIn .15s ease-out}.ts-datagrid-filter{background:white;border-radius:8px;box-shadow:0 4px 20px #00000026,0 0 3px #0000001a;width:280px;display:flex;flex-direction:column;z-index:1051;animation:slideDown .2s ease-out;overflow:hidden}.ts-datagrid-filter__header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:linear-gradient(to bottom,#fafafa,#f5f5f5);border-bottom:1px solid #e0e0e0;min-height:44px}.ts-datagrid-filter__title{margin:0;font-size:14px;font-weight:600;color:#1a1a1a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.ts-datagrid-filter__close{display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;background:transparent;color:#666;cursor:pointer;border-radius:4px;transition:all .15s}.ts-datagrid-filter__close:hover{background:rgba(0,0,0,.08);color:#333}.ts-datagrid-filter__close:active{background:rgba(0,0,0,.12)}.ts-datagrid-filter__search{position:relative;padding:12px 16px;background:white;border-bottom:1px solid #e8e8e8}.ts-datagrid-filter__search-icon{position:absolute;left:24px;top:50%;transform:translateY(-50%);color:#999;pointer-events:none}.ts-datagrid-filter__search-input{width:100%;padding:6px 32px;border:1px solid #d4d4d4;border-radius:4px;font-size:13px;background:white;transition:all .15s}.ts-datagrid-filter__search-input:hover{border-color:#b8b8b8}.ts-datagrid-filter__search-input:focus{outline:none;border-color:#1976d2;box-shadow:0 0 0 2px #1976d21a}.ts-datagrid-filter__search-input::placeholder{color:#999}.ts-datagrid-filter__search-clear{position:absolute;right:20px;top:50%;transform:translateY(-50%);width:20px;height:20px;padding:0;border:none;background:transparent;color:#999;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:all .15s}.ts-datagrid-filter__search-clear:hover{background:rgba(0,0,0,.08);color:#333}.ts-datagrid-filter__values-container{flex:1;display:flex;flex-direction:column;min-height:0;background:white}.ts-datagrid-filter__select-all{display:flex;align-items:center;padding:8px 16px;background:#f8f8f8;border-bottom:1px solid #e8e8e8;cursor:pointer;font-size:13px;font-weight:500;color:#333;transition:background .15s}.ts-datagrid-filter__select-all:hover{background:#f0f0f0}.ts-datagrid-filter__select-all input[type=checkbox]{margin-right:8px;cursor:pointer}.ts-datagrid-filter__select-all span{flex:1}.ts-datagrid-filter__values-list{flex:1;overflow-y:auto;overflow-x:hidden;max-height:250px}.ts-datagrid-filter__values-list::-webkit-scrollbar{width:6px}.ts-datagrid-filter__values-list::-webkit-scrollbar-track{background:transparent}.ts-datagrid-filter__values-list::-webkit-scrollbar-thumb{background:#ccc;border-radius:3px}.ts-datagrid-filter__values-list::-webkit-scrollbar-thumb:hover{background:#999}.ts-datagrid-filter__value-item{display:flex;align-items:center;padding:6px 16px;cursor:pointer;font-size:13px;transition:background .1s}.ts-datagrid-filter__value-item:hover{background:#f5f5f5}.ts-datagrid-filter__value-item input[type=checkbox]{margin-right:8px;cursor:pointer;flex-shrink:0}.ts-datagrid-filter__value-text{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333}.ts-datagrid-filter__value-text--blanks{font-style:italic;color:#666}.ts-datagrid-filter__count{margin-left:auto;padding-left:8px;color:#999;font-size:11px;flex-shrink:0}.ts-datagrid-filter__loading{display:flex;align-items:center;justify-content:center;gap:8px;padding:30px;color:#666;font-size:13px}.ts-datagrid-filter__spinner{width:16px;height:16px;border:2px solid #e0e0e0;border-top-color:#1976d2;border-radius:50%;animation:spin .6s linear infinite}.ts-datagrid-filter__empty{text-align:center;padding:30px;color:#999;font-size:13px}.ts-datagrid-filter__footer{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:linear-gradient(to top,#fafafa,#f5f5f5);border-top:1px solid #e0e0e0}.ts-datagrid-filter__footer-actions{display:flex;gap:8px}.ts-datagrid-filter__btn{padding:6px 14px;border:none;border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:all .15s}.ts-datagrid-filter__btn--text{background:transparent;color:#666}.ts-datagrid-filter__btn--text:hover:not(:disabled){color:#1976d2;background:rgba(25,118,210,.08)}.ts-datagrid-filter__btn--text:disabled{opacity:.5;cursor:not-allowed}.ts-datagrid-filter__btn--secondary{background:white;color:#333;border:1px solid #d4d4d4}.ts-datagrid-filter__btn--secondary:hover{background:#f5f5f5;border-color:#b8b8b8}.ts-datagrid-filter__btn--secondary:active{background:#ebebeb}.ts-datagrid-filter__btn--primary{background:#1976d2;color:#fff;border:1px solid #1976d2}.ts-datagrid-filter__btn--primary:hover{background:#1565c0;border-color:#1565c0}.ts-datagrid-filter__btn--primary:active{background:#0d47a1}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes spin{to{transform:rotate(360deg)}}.ts-datagrid-active-filters{background:var(--ts-grid-active-filters-bg, #f5f5f5);border:1px solid var(--ts-grid-border-color, #e0e0e0);border-radius:4px;padding:8px 12px}.ts-datagrid-active-filters__container{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.ts-datagrid-active-filters__label{display:flex;align-items:center;gap:6px;font-weight:500;color:var(--ts-grid-text-secondary, #666)}.ts-datagrid-active-filters__label svg{color:var(--ts-grid-primary-color, #1976d2)}.ts-datagrid-active-filters__list{display:flex;flex-wrap:wrap;gap:8px;flex:1}.ts-datagrid-active-filters__item{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;background:white;border:1px solid var(--ts-grid-border-color, #e0e0e0);border-radius:16px;font-size:13px}.ts-datagrid-active-filters__field{font-weight:500;color:var(--ts-grid-text-primary, #333)}.ts-datagrid-active-filters__operator{color:var(--ts-grid-text-secondary, #666)}.ts-datagrid-active-filters__remove{display:flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;border:none;background:transparent;color:var(--ts-grid-text-secondary, #666);cursor:pointer;transition:all .2s;border-radius:50%}.ts-datagrid-active-filters__remove:hover{background:var(--ts-grid-error-color, #f44336);color:#fff}.ts-datagrid-active-filters__clear-all{padding:4px 12px;border:1px solid var(--ts-grid-error-color, #f44336);background:white;color:var(--ts-grid-error-color, #f44336);border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:all .2s}.ts-datagrid-active-filters__clear-all:hover{background:var(--ts-grid-error-color, #f44336);color:#fff}.ts-datagrid-filter__section{margin-bottom:8px}.ts-datagrid-filter__section--selected{background:#e3f2fd;border:1px solid #2196f3;border-radius:4px;padding:4px;margin-bottom:12px}.ts-datagrid-filter__section-header{font-size:11px;font-weight:600;color:#666;text-transform:uppercase;padding:4px 8px;margin-bottom:4px;border-bottom:1px solid #ddd}.ts-datagrid-filter__section--selected .ts-datagrid-filter__section-header{color:#1565c0;border-bottom-color:#90caf9}.ts-datagrid-filter__value-item--selected{background:white;margin:2px 0;border-radius:3px}.ts-datagrid-filter__info{padding:8px;margin:8px 0;background:#e3f2fd;border:1px solid #2196f3;border-radius:4px;font-size:11px;color:#1565c0;text-align:center}.ts-datagrid-fixed-column{display:flex;flex-direction:column;background:var(--tsdg-bg-primary);position:relative}.ts-datagrid-fixed-column--left{border-right:2px solid var(--tsdg-border-color-dark);box-shadow:2px 0 4px #0000000d}.ts-datagrid-fixed-column--right{border-left:2px solid var(--tsdg-border-color-dark);box-shadow:-2px 0 4px #0000000d}.ts-datagrid-fixed-column__header{position:sticky;top:0;z-index:var(--tsdg-z-sticky);background:var(--tsdg-bg-secondary);border-bottom:2px solid var(--tsdg-border-color-dark)}.ts-datagrid-fixed-column__body{flex:1;position:relative;overflow:hidden}.ts-datagrid-fixed-column__row{display:flex;min-height:var(--tsdg-row-height);border-bottom:1px solid var(--tsdg-border-color-light);transition:background-color var(--tsdg-transition-fast)}.ts-datagrid-fixed-column__row:hover{background-color:var(--tsdg-bg-hover)}.ts-datagrid-fixed-column__row{cursor:pointer}.ts-datagrid-fixed-column__row--selected{background-color:var(--tsdg-bg-selected)}.ts-datagrid-fixed-column__row--selected:hover{background-color:var(--tsdg-bg-active)}.ts-datagrid-fixed-column__row--even{background:var(--tsdg-bg-primary)}.ts-datagrid-fixed-column__row--odd{background:var(--tsdg-bg-secondary)}.ts-datagrid-fixed-column__cell{padding:var(--tsdg-cell-padding);display:flex;align-items:center;border-right:1px solid var(--tsdg-border-color-light);position:relative;overflow:hidden}.ts-datagrid-fixed-column__cell:last-child{border-right:none}.ts-datagrid-fixed-column__cell--selection{width:48px;justify-content:center;flex-shrink:0}.ts-datagrid__summary{border-top:2px solid var(--tsdg-border-color-dark);background:var(--tsdg-bg-tertiary);position:sticky;bottom:0;z-index:calc(var(--tsdg-z-sticky) - 1)}.ts-datagrid__summary-row{display:flex;min-height:var(--tsdg-row-height);font-weight:var(--tsdg-font-weight-semibold);border-bottom:1px solid var(--tsdg-border-color)}.ts-datagrid__summary-row:last-child{border-bottom:none}.ts-datagrid__summary-row--group{background:#f8f9fa;font-weight:var(--tsdg-font-weight-medium);font-size:var(--tsdg-font-size-sm)}.ts-datagrid__summary-row--page{background:#fff3cd;border-top:1px dashed var(--tsdg-warning)}.ts-datagrid__summary-row--total{background:var(--tsdg-bg-tertiary);border-top:2px solid var(--tsdg-border-color-dark)}.ts-datagrid__summary-cell{padding:var(--tsdg-cell-padding);display:flex;align-items:center;border-right:1px solid var(--tsdg-border-color-light);position:relative}.ts-datagrid__summary-cell:last-child{border-right:none}.ts-datagrid__summary-cell--selection{width:48px;justify-content:center;flex-shrink:0;background:var(--tsdg-bg-secondary)}.ts-datagrid__summary-cell--label{font-weight:var(--tsdg-font-weight-bold);color:var(--tsdg-text-secondary);padding-left:var(--tsdg-spacing-md)}.ts-datagrid__summary-cell--number{justify-content:flex-end;font-variant-numeric:tabular-nums}.ts-datagrid__summary-cell--highlighted{background:rgba(var(--tsdg-success-rgb),.1);color:var(--tsdg-success);font-weight:var(--tsdg-font-weight-bold)}.ts-datagrid__summary-cell--warning{background:rgba(var(--tsdg-warning-rgb),.1);color:var(--tsdg-warning)}.ts-datagrid__summary-cell--danger{background:rgba(var(--tsdg-danger-rgb),.1);color:var(--tsdg-danger)}.ts-datagrid__summary-label{display:flex;align-items:center;gap:var(--tsdg-spacing-xs);font-size:var(--tsdg-font-size-sm);color:var(--tsdg-text-secondary);text-transform:uppercase;letter-spacing:.5px}.ts-datagrid__summary-value{display:flex;align-items:center;gap:var(--tsdg-spacing-xs)}.ts-datagrid__summary-value--large{font-size:var(--tsdg-font-size-lg)}.ts-datagrid__summary-value--small{font-size:var(--tsdg-font-size-sm)}.ts-datagrid__summary-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:12px;font-size:var(--tsdg-font-size-xs);font-weight:var(--tsdg-font-weight-semibold);background:var(--tsdg-bg-hover);color:var(--tsdg-text-primary);margin-left:var(--tsdg-spacing-xs)}.ts-datagrid__summary-icon{display:flex;align-items:center;justify-content:center;width:16px;height:16px;margin-right:var(--tsdg-spacing-xs);color:var(--tsdg-text-muted)}.ts-datagrid__summary--multi-row .ts-datagrid__summary-row:first-child{border-top:2px solid var(--tsdg-border-color-dark)}.ts-datagrid__summary--group{background:linear-gradient(to bottom,#f8f9fa,#e9ecef);border-top:1px solid var(--tsdg-border-color);border-bottom:1px solid var(--tsdg-border-color);margin-top:-1px}@keyframes summary-highlight{0%,to{background-color:transparent}50%{background-color:rgba(var(--tsdg-primary-rgb),.1)}}.ts-datagrid__summary-cell--animated{animation:summary-highlight .6s ease-in-out}.tsdatagrid-theme-default{--tsdg-primary: #007bff;--tsdg-primary-light: #4da3ff;--tsdg-primary-dark: #0056b3;--tsdg-bg-primary: #ffffff;--tsdg-bg-secondary: #f8f9fa;--tsdg-bg-tertiary: #e9ecef;--tsdg-bg-hover: #f1f3f5;--tsdg-bg-selected: #e7f3ff;--tsdg-bg-active: #d0e8ff;--tsdg-text-primary: #212529;--tsdg-text-secondary: #6c757d;--tsdg-text-muted: #adb5bd;--tsdg-border-color: #dee2e6;--tsdg-border-color-light: #e9ecef;--tsdg-border-color-dark: #adb5bd}.tsdatagrid-theme-material{--tsdg-primary: #1976d2;--tsdg-primary-light: #42a5f5;--tsdg-primary-dark: #1565c0;--tsdg-primary-contrast: #ffffff;--tsdg-secondary: #424242;--tsdg-secondary-light: #6d6d6d;--tsdg-secondary-dark: #1b1b1b;--tsdg-success: #4caf50;--tsdg-success-light: #81c784;--tsdg-success-dark: #388e3c;--tsdg-danger: #f44336;--tsdg-danger-light: #e57373;--tsdg-danger-dark: #d32f2f;--tsdg-warning: #ff9800;--tsdg-warning-light: #ffb74d;--tsdg-warning-dark: #f57c00;--tsdg-info: #2196f3;--tsdg-info-light: #64b5f6;--tsdg-info-dark: #1976d2;--tsdg-bg-primary: #ffffff;--tsdg-bg-secondary: #fafafa;--tsdg-bg-tertiary: #f5f5f5;--tsdg-bg-hover: #eeeeee;--tsdg-bg-selected: #e3f2fd;--tsdg-bg-active: #bbdefb;--tsdg-bg-disabled: #f5f5f5;--tsdg-text-primary: rgba(0, 0, 0, .87);--tsdg-text-secondary: rgba(0, 0, 0, .6);--tsdg-text-muted: rgba(0, 0, 0, .38);--tsdg-text-disabled: rgba(0, 0, 0, .26);--tsdg-border-color: rgba(0, 0, 0, .12);--tsdg-border-color-light: rgba(0, 0, 0, .06);--tsdg-border-color-dark: rgba(0, 0, 0, .24);--tsdg-shadow-xs: 0 1px 1px rgba(0, 0, 0, .12);--tsdg-shadow-sm: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);--tsdg-shadow: 0 3px 6px rgba(0, 0, 0, .15), 0 2px 4px rgba(0, 0, 0, .12);--tsdg-shadow-md: 0 10px 20px rgba(0, 0, 0, .15), 0 3px 6px rgba(0, 0, 0, .1);--tsdg-shadow-lg: 0 15px 25px rgba(0, 0, 0, .15), 0 5px 10px rgba(0, 0, 0, .05);--tsdg-shadow-xl: 0 20px 40px rgba(0, 0, 0, .2);--tsdg-shadow-focus: 0 0 0 3px rgba(25, 118, 210, .3);--tsdg-border-radius-sm: 2px;--tsdg-border-radius: 4px;--tsdg-border-radius-md: 4px;--tsdg-border-radius-lg: 4px;--tsdg-font-family: "Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif;--tsdg-font-weight-medium: 500;--tsdg-font-weight-semibold: 500;--tsdg-transition-fast: 195ms cubic-bezier(.4, 0, .6, 1);--tsdg-transition: 225ms cubic-bezier(.4, 0, .2, 1);--tsdg-transition-slow: .3s cubic-bezier(.4, 0, .2, 1)}.tsdatagrid-theme-material .ts-datagrid__header{box-shadow:var(--tsdg-shadow-sm)}.tsdatagrid-theme-material .ts-datagrid-footer{box-shadow:0 -1px 3px #0000000f}.tsdatagrid-theme-material button,.tsdatagrid-theme-material .ts-datagrid-footer__button,.tsdatagrid-theme-material .ts-datagrid-footer__page{text-transform:uppercase;letter-spacing:.5px;font-weight:var(--tsdg-font-weight-medium)}.tsdatagrid-theme-material button:active:not(:disabled),.tsdatagrid-theme-material .ts-datagrid-footer__button:active:not(:disabled),.tsdatagrid-theme-material .ts-datagrid-footer__page:active:not(:disabled){box-shadow:var(--tsdg-shadow)}.tsdatagrid-theme-dark{--tsdg-primary: #90caf9;--tsdg-primary-light: #bbdefb;--tsdg-primary-dark: #42a5f5;--tsdg-primary-contrast: rgba(0, 0, 0, .87);--tsdg-secondary: #bdbdbd;--tsdg-secondary-light: #e0e0e0;--tsdg-secondary-dark: #9e9e9e;--tsdg-success: #66bb6a;--tsdg-success-light: #81c784;--tsdg-success-dark: #4caf50;--tsdg-danger: #ef5350;--tsdg-danger-light: #e57373;--tsdg-danger-dark: #f44336;--tsdg-warning: #ffa726;--tsdg-warning-light: #ffb74d;--tsdg-warning-dark: #ff9800;--tsdg-info: #29b6f6;--tsdg-info-light: #4fc3f7;--tsdg-info-dark: #03a9f4;--tsdg-bg-primary: #1e1e1e;--tsdg-bg-secondary: #252526;--tsdg-bg-tertiary: #2d2d30;--tsdg-bg-hover: #333333;--tsdg-bg-selected: #264f78;--tsdg-bg-active: #094771;--tsdg-bg-disabled: #2d2d30;--tsdg-bg-overlay: rgba(0, 0, 0, .7);--tsdg-header-bg: #252526;--tsdg-body-bg: #1e1e1e;--tsdg-footer-bg: #252526;--tsdg-toolbar-bg: #2d2d30;--tsdg-group-panel-bg: #2d2d30;--tsdg-row-even-bg: #1e1e1e;--tsdg-row-odd-bg: #252526;--tsdg-row-hover-bg: #2d2d30;--tsdg-row-selected-bg: #264f78;--tsdg-cell-editing-bg: #3e2723;--tsdg-text-primary: #e0e0e0;--tsdg-text-secondary: #9e9e9e;--tsdg-text-muted: #757575;--tsdg-text-disabled: #616161;--tsdg-text-placeholder: #757575;--tsdg-border-color: #3e3e42;--tsdg-border-color-light: #2d2d30;--tsdg-border-color-dark: #555555;--tsdg-border-color-hover: #505050;--tsdg-shadow-xs: 0 1px 2px rgba(0, 0, 0, .3);--tsdg-shadow-sm: 0 1px 3px rgba(0, 0, 0, .4);--tsdg-shadow: 0 2px 4px rgba(0, 0, 0, .5);--tsdg-shadow-md: 0 4px 8px rgba(0, 0, 0, .6);--tsdg-shadow-lg: 0 8px 16px rgba(0, 0, 0, .7);--tsdg-shadow-xl: 0 12px 24px rgba(0, 0, 0, .8);--tsdg-shadow-focus: 0 0 0 3px rgba(144, 202, 249, .3);--tsdg-shadow-error: 0 0 0 3px rgba(239, 83, 80, .3);--tsdg-scrollbar-track: #2d2d30;--tsdg-scrollbar-thumb: #505050;--tsdg-scrollbar-thumb-hover: #616161}.tsdatagrid-theme-dark img,.tsdatagrid-theme-dark svg{filter:brightness(.9)}.tsdatagrid-theme-dark button:focus-visible,.tsdatagrid-theme-dark input:focus-visible,.tsdatagrid-theme-dark select:focus-visible,.tsdatagrid-theme-dark .ts-datagrid-footer__button:focus-visible,.tsdatagrid-theme-dark .ts-datagrid-footer__page:focus-visible{outline-color:var(--tsdg-primary)}.tsdatagrid-theme-dark ::selection{background:var(--tsdg-primary);color:var(--tsdg-primary-contrast)}.tsdatagrid-theme-compact{--tsdg-row-height: var(--tsdg-row-height-compact);--tsdg-header-height: var(--tsdg-header-height-compact);--tsdg-footer-height: var(--tsdg-footer-height-compact);--tsdg-cell-padding-x: var(--tsdg-spacing-sm);--tsdg-cell-padding-y: var(--tsdg-spacing-xs);--tsdg-font-size-base: var(--tsdg-font-size-sm)}.tsdatagrid-theme-comfortable{--tsdg-row-height: var(--tsdg-row-height-comfortable);--tsdg-header-height: var(--tsdg-header-height-comfortable);--tsdg-footer-height: var(--tsdg-footer-height-comfortable);--tsdg-cell-padding-x: var(--tsdg-spacing-lg);--tsdg-cell-padding-y: var(--tsdg-spacing-md);--tsdg-font-size-base: var(--tsdg-font-size-lg)}
@@ -0,0 +1,358 @@
1
+ import { P as t, A as r, a8 as o, bI as i, c0 as d, x as n, o as c, c4 as l, C as u, t as m, s as b, D as g, w as p, E as S, c2 as f, bO as y, Y as C, bC as D, Z as T, I as h, b$ as E, z as O, B as F, F as M, dQ as G, bP as v, bN as A, bQ as R, G as x, n as V, H as P, a4 as N, a5 as k, dN as L, dR as w, bp as B, bo as I, O as z, $ as K, a0 as H, X as j, bH as W, b_ as q, a7 as Y, W as J, R as Q, U, S as X, L as _, ey as Z, a9 as $, a3 as aa, a2 as ea, a1 as sa, a as ta, k as ra, T as oa, l as ia, h as da, i as na, j as ca, d as la, f as ua, b as ma, p as ba, m as ga, e as pa, aa as Sa, ac as fa, ab as ya, V as Ca, a6 as Da, cf as Ta, cy as ha, cz as Ea, eI as Oa, cA as Fa, aR as Ma, aP as Ga, eH as va, d6 as Aa, bU as Ra, et as xa, e0 as Va, aZ as Pa, bq as Na, bs as ka, br as La, dd as wa, bL as Ba, db as Ia, dP as za, dw as Ka, cX as Ha, dU as ja, bi as Wa, aV as qa, e9 as Ya, dt as Ja, dE as Qa, dB as Ua, dq as Xa, dO as _a, c5 as Za, aY as $a, bX as ae, bV as ee, co as se, cu as te, dM as re, dT as oe, bZ as ie, bY as de, eB as ne, bW as ce, aA as le, aU as ue, aO as me, bk as be, bE as ge, ea as pe, ec as Se, ex as fe, eb as ye, p as Ce, c3 as De, ew as Te, c_ as he, cJ as Ee, cK as Oe, cL as Fe, d9 as Me, da as Ge, aC as ve, cC as Ae, cG as Re, cE as xe, cI as Ve, ep as Pe, dm as Ne, bB as ke, bv as Le, bw as we, bA as Be, by as Ie, bx as ze, bz as Ke, dx as He, el as je, cZ as We, cW as qe, ei as Ye, eJ as Je, bb as Qe, b5 as Ue, b6 as Xe, dy as _e, b9 as Ze, a$ as $e, dW as as, b2 as es, cw as ss, b3 as ts, bc as rs, e8 as os, ba as is, b1 as ds, dz as ns, be as cs, b0 as ls, b7 as us, cT as ms, bd as bs, bg as gs, b8 as ps, b4 as Ss, bf as fs, eq as ys, eK as Cs, ck as Ds, eF as Ts, eG as hs, a_ as Es, c9 as Os, bm as Fs, bj as Ms, eD as Gs, ed as vs, cr as As, c7 as Rs, ce as xs, c8 as Vs, cs as Ps, eE as Ns, cc as ks, dK as Ls, cq as ws, cn as Bs, c1 as Is, bD as zs, cU as Ks, ci as Hs, bn as js, ev as Ws, bK as qs, e6 as Ys, c$ as Js, em as Qs, y as Us, dD as Xs, r as _s, q as Zs, v as $s, dI as at, ds as et, J as st, K as tt, Q as rt, ca as ot, dZ as it, dG as dt, dH as nt, dY as ct, u as lt, er as ut, eh as mt, es as bt, M as gt, cP as pt, cO as St, cQ as ft, cM as yt, cS as Ct, cR as Dt, cN as Tt, dg as ht, en as Et, e4 as Ot, ez as Ft, dS as Mt, e5 as Gt, ek as vt, dJ as At, aM as Rt, aF as xt, aJ as Vt, e1 as Pt, bG as Nt, aL as kt, aE as Lt, aI as wt, d1 as Bt, aQ as It, eg as zt, cv as Kt, dj as Ht, di as jt, cx as Wt, dF as qt, dX as Yt, bt as Jt, d4 as Qt, de as Ut, aG as Xt, d$ as _t, bM as Zt, aS as $t, ef as ar, dL as er, bJ as sr, d_ as tr, aH as rr, dC as or, bl as ir, cl as dr, cg as nr, cp as cr, dl as lr, du as ur, aB as mr, dr as br, dV as gr, bh as pr, d3 as Sr, cb as fr, eA as yr, cj as Cr, ee as Dr, cd as Tr, cm as hr, eu as Er, d2 as Or, dp as Fr, df as Mr, cY as Gr, e2 as vr, cB as Ar, cF as Rr, cD as xr, cH as Vr, d5 as Pr, eC as Nr, e3 as kr, d7 as Lr, d8 as wr, dA as Br, bF as Ir, dc as zr, e7 as Kr, ch as Hr, N as jr, dk as Wr, dh as qr, bR as Yr, bS as Jr, dn as Qr, ej as Ur, d0 as Xr, aN as _r, cV as Zr, aD as $r, ar as ao, am as eo, av as so, au as to, c6 as ro, at as oo, ad as io, al as no, ak as co, af as lo, ax as uo, ah as mo, az as bo, ap as go, ay as po, ag as So, aw as fo, ao as yo, ai as Co, ae as Do, aj as To, an as ho, as as Eo, aq as Oo, aK as Fo, aX as Mo, bu as Go, bT as vo, aW as Ao, eo as Ro, ct as xo, dv as Vo, aT as Po } from "./index-541cb5f8.js";
2
+ import "vue";
3
+ export {
4
+ t as AggregateFunction,
5
+ r as Alignment,
6
+ o as AriaRole,
7
+ i as BatchProcessor,
8
+ d as CacheStrategy,
9
+ n as ChangeType,
10
+ c as ColumnFormat,
11
+ l as ColumnSearcher,
12
+ u as ColumnType,
13
+ m as DataSourceMode,
14
+ b as DataSourceType,
15
+ g as DataType,
16
+ p as EditingMode,
17
+ S as EditorType,
18
+ f as ErrorBoundary,
19
+ y as ErrorSeverity,
20
+ C as ExportFormat,
21
+ D as ExportManager,
22
+ T as ExportScope,
23
+ h as FILTER_OPERATORS,
24
+ E as FallbackStrategy,
25
+ O as FilterLogic,
26
+ F as FilterMode,
27
+ M as FilterOperator,
28
+ G as GRID_CONSTANTS,
29
+ v as GridError,
30
+ A as GridErrorCode,
31
+ R as GridErrorHandler,
32
+ x as GridMode,
33
+ V as GridTheme,
34
+ P as HttpMethod,
35
+ N as Key,
36
+ k as KeyboardAction,
37
+ L as LRUCache,
38
+ w as Logger,
39
+ B as ODataDataSource,
40
+ I as ODataQueryBuilder,
41
+ z as ODataVersion,
42
+ K as PDFOrientation,
43
+ H as PDFPageSize,
44
+ j as PaginationMode,
45
+ W as PerformanceMonitor,
46
+ q as RetryStrategy,
47
+ Y as ScrollMode,
48
+ J as SearchMode,
49
+ Q as SelectionModeType,
50
+ U as SelectionPersistence,
51
+ X as SortDirection,
52
+ _ as SortMode,
53
+ Z as StorageManager,
54
+ $ as StorageType,
55
+ aa as SummaryPosition,
56
+ ea as SummaryScope,
57
+ sa as SummaryType,
58
+ ta as TSDataGrid,
59
+ ra as TSDataGridActiveFilters,
60
+ oa as TSDataGridBody,
61
+ ia as TSDataGridCell,
62
+ da as TSDataGridColumnChooser,
63
+ na as TSDataGridContextMenu,
64
+ ca as TSDataGridFilter,
65
+ la as TSDataGridFooter,
66
+ ua as TSDataGridGroupPanel,
67
+ ma as TSDataGridHeader,
68
+ ba as TSDataGridPlugin,
69
+ ga as TSDataGridRow,
70
+ pa as TSDataGridToolbar,
71
+ Sa as ToolbarLocation,
72
+ fa as VERSION,
73
+ ya as ValidationRuleType,
74
+ Ca as ValidationSeverity,
75
+ Da as VirtualizationMode,
76
+ Ta as addClass,
77
+ ha as addDays,
78
+ Ea as addMonths,
79
+ Oa as addSROnlyClass,
80
+ Fa as addYears,
81
+ Ma as alpha,
82
+ Ga as alphanumeric,
83
+ va as announceToScreenReader,
84
+ Aa as arrayRange,
85
+ Ra as assertNotNull,
86
+ xa as assign,
87
+ Va as average,
88
+ Pa as batchValidateRows,
89
+ Na as buildODataFilter,
90
+ ka as buildODataGroupBy,
91
+ La as buildODataOrderBy,
92
+ wa as camelCase,
93
+ Ba as cancelIdleCallback,
94
+ Ia as capitalize,
95
+ za as catchMemoize,
96
+ Ka as charCount,
97
+ Ha as chunk,
98
+ ja as clamp,
99
+ Wa as clearFormatterCache,
100
+ qa as combineValidators,
101
+ Ya as compoundInterest,
102
+ Ja as contains,
103
+ Qa as copyTableToClipboard,
104
+ Ua as copyToClipboard,
105
+ Xa as countOccurrences,
106
+ _a as createCache,
107
+ Za as createColumnSearcher,
108
+ $a as createColumnValidator,
109
+ ae as createConfigError,
110
+ ee as createDataLoadError,
111
+ se as createElement,
112
+ te as createFragment,
113
+ re as createKeyHandler,
114
+ oe as createLogger,
115
+ ie as createNetworkError,
116
+ de as createOperationError,
117
+ ne as createStorage,
118
+ ce as createValidationError,
119
+ le as createValidator,
120
+ ue as creditCard,
121
+ me as custom,
122
+ be as customFormatters,
123
+ ge as debounce,
124
+ pe as deepClone,
125
+ Se as deepEqual,
126
+ fe as deepFreeze,
127
+ ye as deepMerge,
128
+ Ce as default,
129
+ De as defaultErrorBoundary,
130
+ Te as diff,
131
+ he as difference,
132
+ Ee as differenceInDays,
133
+ Oe as differenceInHours,
134
+ Fe as differenceInMinutes,
135
+ Me as drop,
136
+ Ge as dropLast,
137
+ ve as email,
138
+ Ae as endOfDay,
139
+ Re as endOfMonth,
140
+ xe as endOfWeek,
141
+ Ve as endOfYear,
142
+ Pe as entries,
143
+ Ne as escapeHtml,
144
+ ke as exportGridData,
145
+ Le as exportToCSV,
146
+ we as exportToExcel,
147
+ Be as exportToHTML,
148
+ Ie as exportToJSON,
149
+ ze as exportToPDF,
150
+ Ke as exportToXML,
151
+ He as extractNumbers,
152
+ je as filterObject,
153
+ We as findDuplicates,
154
+ qe as flatten,
155
+ Ye as flattenObject,
156
+ Je as focusWithAnnouncement,
157
+ Qe as formatArray,
158
+ Ue as formatBoolean,
159
+ Xe as formatBytes,
160
+ _e as formatBytesString,
161
+ Ze as formatCreditCard,
162
+ $e as formatCurrency,
163
+ as as formatCurrencyString,
164
+ es as formatDate,
165
+ ss as formatDateString,
166
+ ts as formatDateTime,
167
+ rs as formatDuration,
168
+ os as formatFileSize,
169
+ is as formatLookup,
170
+ ds as formatNumber,
171
+ ns as formatNumberString,
172
+ cs as formatOrdinal,
173
+ ls as formatPercent,
174
+ us as formatPhone,
175
+ ms as formatRelative,
176
+ bs as formatRelativeTime,
177
+ gs as formatRowValues,
178
+ ps as formatSSN,
179
+ Ss as formatTime,
180
+ fs as formatValue,
181
+ ys as fromEntries,
182
+ Cs as getActionLabel,
183
+ Ds as getAttr,
184
+ Ts as getCellAriaAttributes,
185
+ hs as getColumnHeaderAriaAttributes,
186
+ Es as getDefaultErrorMessage,
187
+ Os as getDimensions,
188
+ Fs as getFormatter,
189
+ Ms as getFormatterCacheSize,
190
+ Gs as getGridAriaAttributes,
191
+ vs as getNestedValue,
192
+ As as getNextSibling,
193
+ Rs as getOffset,
194
+ xs as getParent,
195
+ Vs as getPosition,
196
+ Ps as getPreviousSibling,
197
+ Ns as getRowAriaAttributes,
198
+ ks as getScrollPosition,
199
+ Ls as getShortcutString,
200
+ ws as getSiblings,
201
+ Bs as getStyle,
202
+ Is as globalErrorHandler,
203
+ zs as globalExportManager,
204
+ Ks as groupBy,
205
+ Hs as hasClass,
206
+ js as hasFormatter,
207
+ Ws as hasSameKeys,
208
+ qs as idleCallback,
209
+ Ys as inRange,
210
+ Js as intersection,
211
+ Qs as invert,
212
+ Us as isChange,
213
+ Xs as isClipboardSupported,
214
+ _s as isColumnBand,
215
+ Zs as isColumnDefinition,
216
+ $s as isCustomStoreConfig,
217
+ at as isEditingKey,
218
+ et as isEmpty,
219
+ st as isFilterCondition,
220
+ tt as isFilterGroup,
221
+ rt as isGroupedRow,
222
+ ot as isInViewport,
223
+ it as isInteger,
224
+ dt as isModifierKey,
225
+ nt as isNavigationKey,
226
+ ct as isNumber,
227
+ lt as isODataConfig,
228
+ ut as isObject,
229
+ mt as isObjectEmpty,
230
+ bt as isPlainObject,
231
+ gt as isSortDescriptor,
232
+ pt as isThisMonth,
233
+ St as isThisWeek,
234
+ ft as isThisYear,
235
+ yt as isToday,
236
+ Ct as isValidDate,
237
+ Dt as isWeekend,
238
+ Tt as isYesterday,
239
+ ht as kebabCase,
240
+ Et as keys,
241
+ Ot as lerp,
242
+ Ft as localStorageManager,
243
+ Mt as logger,
244
+ Gt as mapRange,
245
+ vt as mapValues,
246
+ At as matchesKeyCombo,
247
+ Rt as maxDate,
248
+ xt as maxLength,
249
+ Vt as maxValue,
250
+ Pt as median,
251
+ Nt as memoize,
252
+ kt as minDate,
253
+ Lt as minLength,
254
+ wt as minValue,
255
+ Bt as move,
256
+ It as numeric,
257
+ zt as omit,
258
+ Kt as onClickOutside,
259
+ Ht as padEnd,
260
+ jt as padStart,
261
+ Wt as parseDate,
262
+ qt as parseKeyboardEvent,
263
+ Yt as parseNumber,
264
+ Jt as parseODataError,
265
+ Qt as partition,
266
+ Ut as pascalCase,
267
+ Xt as pattern,
268
+ _t as percentage,
269
+ Zt as perfMonitor,
270
+ $t as phone,
271
+ ar as pick,
272
+ er as preventDefaultKeys,
273
+ sr as rafThrottle,
274
+ tr as random,
275
+ rr as range,
276
+ or as readFromClipboard,
277
+ ir as registerFormatter,
278
+ dr as removeAttr,
279
+ nr as removeClass,
280
+ cr as removeElement,
281
+ lr as removeWhitespace,
282
+ ur as replaceAll,
283
+ mr as required,
284
+ br as reverse,
285
+ gr as round,
286
+ pr as safeFormatValue,
287
+ Sr as sample,
288
+ fr as scrollIntoViewIfNeeded,
289
+ yr as sessionStorageManager,
290
+ Cr as setAttr,
291
+ Dr as setNestedValue,
292
+ Tr as setScrollPosition,
293
+ hr as setStyle,
294
+ Er as shallowClone,
295
+ Or as shuffle,
296
+ Fr as slugify,
297
+ Mr as snakeCase,
298
+ Gr as sortBy,
299
+ vr as standardDeviation,
300
+ Ar as startOfDay,
301
+ Rr as startOfMonth,
302
+ xr as startOfWeek,
303
+ Vr as startOfYear,
304
+ Pr as stats,
305
+ Nr as storage,
306
+ kr as sum,
307
+ Lr as take,
308
+ wr as takeLast,
309
+ Br as template,
310
+ Ir as throttle,
311
+ zr as titleCase,
312
+ Kr as toOrdinal,
313
+ Hr as toggleClass,
314
+ jr as toggleSortDirection,
315
+ Wr as trim,
316
+ qr as truncate,
317
+ Yr as tryAsync,
318
+ Jr as trySync,
319
+ Qr as unescapeHtml,
320
+ Ur as unflatten,
321
+ Xr as union,
322
+ _r as unique,
323
+ Zr as uniqueArray,
324
+ $r as url,
325
+ ao as useClipboard,
326
+ eo as useColumnChooser,
327
+ so as useColumnReorder,
328
+ to as useColumnResize,
329
+ ro as useColumnSearch,
330
+ oo as useContextMenu,
331
+ io as useDataSource,
332
+ no as useEditing,
333
+ co as useExport,
334
+ lo as useFiltering,
335
+ uo as useGridApi,
336
+ mo as useGrouping,
337
+ bo as useInfiniteScroll,
338
+ go as useKeyboardNavigation,
339
+ po as useLoadingState,
340
+ So as usePagination,
341
+ fo as useRowExpansion,
342
+ yo as useSearch,
343
+ Co as useSelection,
344
+ Do as useSorting,
345
+ To as useStatePersistence,
346
+ ho as useSummary,
347
+ Eo as useUndo,
348
+ Oo as useVirtualization,
349
+ Fo as validDate,
350
+ Mo as validateField,
351
+ Go as validateODataQuery,
352
+ vo as validateOrThrow,
353
+ Ao as validateRow,
354
+ Ro as values,
355
+ xo as waitForElement,
356
+ Vo as wordCount,
357
+ Po as zipCode
358
+ };