@opencorestack/opengridx 2.0.4 → 3.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.
- package/CHANGELOG.md +408 -3
- package/README.md +93 -72
- package/dist/index.d.ts +611 -121
- package/dist/opengridx.css +1 -1
- package/dist/opengridx.es.js +7992 -5650
- package/dist/opengridx.es.js.map +1 -1
- package/dist/opengridx.umd.js +17 -23
- package/dist/opengridx.umd.js.map +1 -1
- package/docs/API_REFERENCE.md +348 -161
- package/docs/README.md +6 -1
- package/docs/architecture/datagrid-orchestration.md +81 -0
- package/docs/architecture/grid-row-meta.md +102 -0
- package/docs/architecture/use-grid-columns.md +128 -0
- package/docs/architecture/use-grid-controlled-state.md +157 -0
- package/docs/architecture/use-grid-row-pipeline.md +120 -0
- package/docs/architecture/use-grid-scroll-sync.md +111 -0
- package/docs/architecture/use-grid-state-snapshot.md +90 -0
- package/docs/architecture/use-grid-virtualization.md +115 -0
- package/docs/architecture/use-grid-visible-rows.md +85 -0
- package/docs/assets/banner-alt.png +0 -0
- package/docs/assets/banner.png +0 -0
- package/docs/assets/hero.png +0 -0
- package/docs/assets/logo.png +0 -0
- package/docs/components/aggregation-footer.md +15 -10
- package/docs/components/cell.md +16 -6
- package/docs/components/column-group-header.md +55 -28
- package/docs/components/column-resize.md +17 -13
- package/docs/components/column-visibility.md +45 -22
- package/docs/components/datagrid.md +14 -12
- package/docs/components/empty-state.md +2 -1
- package/docs/components/error-overlay.md +12 -7
- package/docs/components/filter-panel.md +28 -8
- package/docs/components/header.md +28 -9
- package/docs/components/pagination.md +14 -8
- package/docs/components/row.md +21 -5
- package/docs/components/toolbar.md +27 -9
- package/docs/components/tooltip.md +16 -7
- package/docs/customization/slots-api.md +100 -36
- package/docs/customization/theming.md +66 -18
- package/docs/features/aggregation-pivot.md +75 -9
- package/docs/features/cell-spanning.md +80 -125
- package/docs/features/clipboard.md +41 -16
- package/docs/features/custom-pagination.md +38 -18
- package/docs/features/data-source.md +36 -13
- package/docs/features/editing-reordering.md +125 -16
- package/docs/features/export-guide.md +147 -41
- package/docs/features/filtering.md +44 -6
- package/docs/features/infinite-scroll.md +54 -46
- package/docs/features/keyboard-navigation.md +83 -0
- package/docs/features/list-view.md +58 -5
- package/docs/features/loading-states.md +18 -20
- package/docs/features/master-detail.md +18 -5
- package/docs/features/pdf-export.md +56 -19
- package/docs/features/pinning.md +23 -5
- package/docs/features/selection.md +50 -10
- package/docs/features/sorting-pagination.md +66 -14
- package/docs/features/state-persistence.md +78 -10
- package/docs/features/toolbar-customization.md +26 -17
- package/docs/features/tree-data-grouping.md +44 -9
- package/docs/features/virtualization.md +64 -15
- package/docs/migration/v1-to-v2.md +115 -0
- package/docs/migration/v2-to-v3.md +1222 -0
- package/docs/performance.md +124 -0
- package/docs/roadmap.md +16 -10
- package/lib/components/Cell/Cell.css +13 -1
- package/lib/components/Cell/Cell.tsx +130 -57
- package/lib/components/Cell/CellErrorBoundary.tsx +12 -6
- package/lib/components/Cell/GridEditInputCell.tsx +114 -41
- package/lib/components/ColumnGroupHeader/ColumnGroupHeader.css +7 -1
- package/lib/components/ColumnResizeHandle/ColumnResizeHandle.css +11 -0
- package/lib/components/ColumnResizeHandle/ColumnResizeHandle.tsx +104 -38
- package/lib/components/ColumnResizeHandle/clampResizeWidth.ts +13 -0
- package/lib/components/ColumnVisibilityPanel/ColumnVisibilityPanel.css +6 -0
- package/lib/components/ColumnVisibilityPanel/ColumnVisibilityPanel.tsx +21 -13
- package/lib/components/DataGrid/DataGrid.css +84 -12
- package/lib/components/DataGrid/DataGrid.tsx +606 -872
- package/lib/components/DataGrid/GridAggregationFooter.tsx +53 -17
- package/lib/components/DataGrid/GridEmptyState.tsx +7 -1
- package/lib/components/DataGrid/GridErrorOverlay.tsx +15 -12
- package/lib/components/DataGrid/GridListView.tsx +166 -23
- package/lib/components/DataGrid/GridLiveRegion.tsx +31 -0
- package/lib/components/DataGrid/GridLoadingOverlay.tsx +27 -0
- package/lib/components/DataGrid/GridPaginationArea.tsx +44 -0
- package/lib/components/DataGrid/GridPinnedRows.tsx +65 -11
- package/lib/components/DataGrid/GridStandaloneColumnPanel.tsx +40 -38
- package/lib/components/DataGrid/GridToolbarSlot.tsx +51 -0
- package/lib/components/DataGrid/GridVirtualRows.tsx +48 -25
- package/lib/components/DetailPanel/DetailPanel.css +0 -6
- package/lib/components/DetailPanel/DetailPanel.tsx +34 -5
- package/lib/components/DetailPanel/DetailPanelContent.tsx +17 -0
- package/lib/components/FilterPanel/FilterPanel.css +13 -2
- package/lib/components/FilterPanel/FilterPanel.tsx +272 -99
- package/lib/components/Header/ColumnMenu.tsx +91 -39
- package/lib/components/Header/Header.css +3 -3
- package/lib/components/Header/Header.tsx +179 -160
- package/lib/components/ListView/ListView.css +25 -0
- package/lib/components/ListView/ListViewRow.tsx +79 -10
- package/lib/components/Pagination/Pagination.tsx +15 -7
- package/lib/components/Row/Row.tsx +185 -75
- package/lib/components/Toolbar/GlobalSearch.css +6 -3
- package/lib/components/Toolbar/GlobalSearch.tsx +26 -27
- package/lib/components/Toolbar/GridToolbar.css +12 -11
- package/lib/components/Toolbar/GridToolbar.tsx +133 -89
- package/lib/components/Toolbar/PivotPanel.tsx +89 -49
- package/lib/components/Tooltip/Tooltip.css +20 -0
- package/lib/components/Tooltip/Tooltip.tsx +68 -35
- package/lib/components/ui/Button.tsx +3 -0
- package/lib/components/ui/Checkbox.tsx +2 -1
- package/lib/components/ui/ExpandIcon.css +0 -9
- package/lib/components/ui/ExpandIcon.tsx +4 -1
- package/lib/hooks/core/gridApiPlaceholder.ts +34 -0
- package/lib/hooks/core/gridToolbarHostContext.ts +14 -0
- package/lib/hooks/core/useDataGrid.ts +115 -173
- package/lib/hooks/core/useGridAggregationApi.ts +72 -0
- package/lib/hooks/core/useGridApiMethods.ts +115 -0
- package/lib/hooks/core/useGridApiRef.ts +15 -3
- package/lib/hooks/core/useGridApiRefBinding.ts +18 -0
- package/lib/hooks/core/useGridAriaRows.ts +38 -0
- package/lib/hooks/core/useGridClipboardApi.ts +38 -0
- package/lib/hooks/core/useGridColumnLookup.ts +30 -0
- package/lib/hooks/core/useGridColumns.tsx +284 -76
- package/lib/hooks/core/useGridColumnsPanel.ts +77 -0
- package/lib/hooks/core/useGridControlledState.ts +99 -6
- package/lib/hooks/core/useGridDetailPanel.ts +51 -0
- package/lib/hooks/core/useGridDevWarnings.ts +123 -0
- package/lib/hooks/core/useGridFocusHandlers.ts +50 -0
- package/lib/hooks/core/useGridGroupingColumn.ts +62 -0
- package/lib/hooks/core/useGridHeaderHandlers.ts +92 -0
- package/lib/hooks/core/useGridHierarchy.ts +81 -0
- package/lib/hooks/core/useGridKeyboardNavigation.ts +452 -250
- package/lib/hooks/core/useGridLiveRowSelection.ts +67 -0
- package/lib/hooks/core/useGridPageCorrection.ts +55 -0
- package/lib/hooks/core/useGridRowIdOf.ts +32 -0
- package/lib/hooks/core/useGridRowInteractions.ts +81 -0
- package/lib/hooks/core/useGridRowPipeline.ts +69 -39
- package/lib/hooks/core/useGridRowSelection.ts +91 -0
- package/lib/hooks/core/useGridScrollSync.ts +80 -32
- package/lib/hooks/core/useGridScrollToIndexesApi.ts +45 -0
- package/lib/hooks/core/useGridStateSnapshot.ts +40 -5
- package/lib/hooks/core/useGridThemeDimensions.ts +49 -0
- package/lib/hooks/core/useGridToolbarProps.ts +97 -0
- package/lib/hooks/core/useGridViewport.ts +38 -0
- package/lib/hooks/core/useGridViewportSize.ts +26 -0
- package/lib/hooks/core/useGridVisibleRows.ts +20 -7
- package/lib/hooks/core/useLayout.ts +215 -195
- package/lib/hooks/core/useRowsScrollEndLatch.ts +41 -0
- package/lib/hooks/core/useStableColumns.ts +34 -0
- package/lib/hooks/features/useAggregation.ts +86 -90
- package/lib/hooks/features/useColumnGroupReorderGuard.ts +34 -0
- package/lib/hooks/features/useDetailPanelHeights.ts +29 -0
- package/lib/hooks/features/useGridClipboard.ts +133 -73
- package/lib/hooks/features/useGridDataSource.ts +354 -128
- package/lib/hooks/features/useGridEditing.ts +211 -51
- package/lib/hooks/features/useGridPivot.ts +92 -0
- package/lib/hooks/features/useGridSpanRenderWindow.ts +104 -0
- package/lib/hooks/features/useGridSpanning.ts +410 -306
- package/lib/hooks/features/usePivot.ts +0 -0
- package/lib/hooks/features/useServerTreeChildren.ts +50 -0
- package/lib/hooks/useColumnReorder.ts +38 -44
- package/lib/hooks/useRowGrouping.ts +335 -214
- package/lib/hooks/useRowReorder.ts +62 -31
- package/lib/hooks/useTreeData.ts +330 -262
- package/lib/index.ts +30 -2
- package/lib/state/index.ts +1 -0
- package/lib/state/types.ts +7 -1
- package/lib/state/useGridStateStorage.ts +88 -29
- package/lib/theme/DataGridThemeProvider.tsx +143 -38
- package/lib/theme/gridThemeContext.ts +5 -0
- package/lib/theme/index.ts +5 -0
- package/lib/theme/presets.ts +5 -4
- package/lib/theme/types.ts +40 -2
- package/lib/types/index.ts +311 -108
- package/lib/utils/aggregation/index.ts +157 -0
- package/lib/utils/aria/index.ts +40 -0
- package/lib/utils/columnGroups.ts +110 -0
- package/lib/utils/columnLookup.ts +33 -0
- package/lib/utils/columnWidth.ts +22 -0
- package/lib/utils/dataSource/index.ts +46 -0
- package/lib/utils/detailPanel.ts +66 -0
- package/lib/utils/dragData.ts +44 -0
- package/lib/utils/editing/index.ts +30 -0
- package/lib/utils/export/exportShared.ts +197 -0
- package/lib/utils/export/exportToExcelAdvanced.ts +344 -121
- package/lib/utils/export/exportToPdf.ts +143 -92
- package/lib/utils/export/groupLabel.ts +14 -0
- package/lib/utils/export/index.ts +278 -272
- package/lib/utils/export/pdfText.ts +50 -0
- package/lib/utils/filtering/index.ts +277 -148
- package/lib/utils/focus/index.ts +115 -0
- package/lib/utils/gridApiRows.ts +35 -0
- package/lib/utils/gridModes.ts +77 -0
- package/lib/utils/grouping/groupedExportRows.ts +91 -0
- package/lib/utils/pagination/index.ts +56 -0
- package/lib/utils/pinning/index.ts +77 -33
- package/lib/utils/pivot/index.ts +368 -0
- package/lib/utils/scroll/index.ts +78 -0
- package/lib/utils/scroll/scrollEnd.ts +18 -0
- package/lib/utils/sorting/index.ts +154 -30
- package/lib/utils/syntheticRows.ts +12 -0
- package/lib/utils/values.ts +206 -0
- package/lib/utils/viewport.ts +14 -0
- package/llms.txt +272 -166
- package/package.json +18 -6
- package/lib/components/ColumnGroupHeader/ColumnGroupHeader.tsx +0 -220
- package/lib/components/ColumnVisibilityPanel/ColumnVisibilityPanel.test.tsx +0 -85
- package/lib/components/DataGrid/DataGrid.regression.test.tsx +0 -132
- package/lib/components/DataGrid/DataGrid.smoke.test.tsx +0 -58
- package/lib/components/DataGrid/DataGrid.v2.test.tsx +0 -127
- package/lib/components/Header/Header.test.tsx +0 -135
- package/lib/components/Pagination/Pagination.test.tsx +0 -64
- package/lib/hooks/core/useDataGrid.regression.test.ts +0 -66
- package/lib/hooks/core/useGridControlledState.test.ts +0 -86
- package/lib/hooks/core/useGridKeyboardNavigation.test.ts +0 -176
- package/lib/hooks/core/useGridRowPipeline.test.ts +0 -117
- package/lib/hooks/features/useAggregation.test.ts +0 -175
- package/lib/hooks/features/usePivot.test.ts +0 -202
- package/lib/hooks/useRowGrouping.test.ts +0 -137
- package/lib/utils/export/exportToPdf.test.ts +0 -120
- package/lib/utils/export/groupedExport.test.ts +0 -144
- package/lib/utils/filtering/filtering.test.ts +0 -178
- package/lib/utils/sorting/sorting.test.ts +0 -88
|
@@ -47,20 +47,28 @@
|
|
|
47
47
|
position: relative;
|
|
48
48
|
z-index: 3;
|
|
49
49
|
}
|
|
50
|
-
|
|
50
|
+
/* Header + top-pinned rows, and bottom-pinned rows + aggregation footer, each stick as one block,
|
|
51
|
+
so they stack instead of overlapping whatever their heights (column group rows, detail panels). */
|
|
52
|
+
.ogx__sticky-top {
|
|
51
53
|
position: sticky;
|
|
52
|
-
top:
|
|
53
|
-
z-index: 10;
|
|
54
|
-
|
|
55
|
-
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
|
|
54
|
+
top: 0;
|
|
55
|
+
z-index: 10;
|
|
56
|
+
flex-shrink: 0;
|
|
56
57
|
}
|
|
57
|
-
.
|
|
58
|
+
.ogx__sticky-bottom {
|
|
58
59
|
position: sticky;
|
|
59
60
|
bottom: 0;
|
|
60
61
|
z-index: 10;
|
|
62
|
+
flex-shrink: 0;
|
|
63
|
+
margin-top: auto;
|
|
64
|
+
}
|
|
65
|
+
.ogx__pinned-rows--top {
|
|
66
|
+
background: var(--ogx-grid-background);
|
|
67
|
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
|
|
68
|
+
}
|
|
69
|
+
.ogx__pinned-rows--bottom {
|
|
61
70
|
background: var(--ogx-grid-background);
|
|
62
71
|
box-shadow: 0 -4px 6px -1px rgba(0, 0, 0, 0.05);
|
|
63
|
-
margin-top: auto;
|
|
64
72
|
}
|
|
65
73
|
.ogx--loading {
|
|
66
74
|
opacity: 0.6;
|
|
@@ -87,14 +95,14 @@
|
|
|
87
95
|
overflow-y: visible;
|
|
88
96
|
}
|
|
89
97
|
.ogx__viewport::-webkit-scrollbar {
|
|
90
|
-
width: 8px;
|
|
91
|
-
height: 8px;
|
|
98
|
+
width: var(--ogx-scrollbar-size, 8px);
|
|
99
|
+
height: var(--ogx-scrollbar-size, 8px);
|
|
92
100
|
}
|
|
93
101
|
.ogx__viewport::-webkit-scrollbar-track {
|
|
94
|
-
background: transparent;
|
|
102
|
+
background: var(--ogx-scrollbar-track, transparent);
|
|
95
103
|
}
|
|
96
104
|
.ogx__viewport::-webkit-scrollbar-thumb {
|
|
97
|
-
background: var(--ogx-color-gray-300);
|
|
105
|
+
background: var(--ogx-scrollbar-thumb, var(--ogx-color-gray-300));
|
|
98
106
|
border-radius: 4px;
|
|
99
107
|
border: 2px solid transparent;
|
|
100
108
|
background-clip: content-box;
|
|
@@ -104,7 +112,7 @@
|
|
|
104
112
|
}
|
|
105
113
|
.ogx__viewport {
|
|
106
114
|
scrollbar-width: thin;
|
|
107
|
-
scrollbar-color: rgba(0, 0, 0, 0.2) transparent;
|
|
115
|
+
scrollbar-color: var(--ogx-scrollbar-thumb, rgba(0, 0, 0, 0.2)) var(--ogx-scrollbar-track, transparent);
|
|
108
116
|
}
|
|
109
117
|
.ogx__empty {
|
|
110
118
|
display: flex;
|
|
@@ -122,6 +130,58 @@
|
|
|
122
130
|
color: var(--ogx-color-gray-300);
|
|
123
131
|
}
|
|
124
132
|
|
|
133
|
+
.ogx__loading-overlay {
|
|
134
|
+
display: flex;
|
|
135
|
+
align-items: center;
|
|
136
|
+
justify-content: center;
|
|
137
|
+
min-height: 200px;
|
|
138
|
+
}
|
|
139
|
+
/* Loading while rows are already shown: the rows stay usable underneath. */
|
|
140
|
+
.ogx__loading-overlay--over-rows {
|
|
141
|
+
position: absolute;
|
|
142
|
+
inset: 0;
|
|
143
|
+
min-height: 0;
|
|
144
|
+
pointer-events: none;
|
|
145
|
+
z-index: var(--ogx-z-index-modal);
|
|
146
|
+
border-radius: var(--ogx-border-radius-lg);
|
|
147
|
+
overflow: hidden;
|
|
148
|
+
}
|
|
149
|
+
.ogx__loading-overlay--custom {
|
|
150
|
+
background: color-mix(in srgb, var(--ogx-grid-background) 50%, transparent);
|
|
151
|
+
}
|
|
152
|
+
.ogx__loading-overlay--custom > * {
|
|
153
|
+
pointer-events: auto;
|
|
154
|
+
}
|
|
155
|
+
.ogx__loading-bar {
|
|
156
|
+
position: absolute;
|
|
157
|
+
top: 0;
|
|
158
|
+
left: 0;
|
|
159
|
+
width: 100%;
|
|
160
|
+
height: 3px;
|
|
161
|
+
background: color-mix(in srgb, var(--ogx-color-primary) 25%, transparent);
|
|
162
|
+
overflow: hidden;
|
|
163
|
+
}
|
|
164
|
+
.ogx__loading-bar::after {
|
|
165
|
+
content: '';
|
|
166
|
+
position: absolute;
|
|
167
|
+
top: 0;
|
|
168
|
+
bottom: 0;
|
|
169
|
+
left: 0;
|
|
170
|
+
width: 40%;
|
|
171
|
+
background: var(--ogx-color-primary);
|
|
172
|
+
animation: ogx-loading-bar 1.2s ease-in-out infinite;
|
|
173
|
+
}
|
|
174
|
+
@keyframes ogx-loading-bar {
|
|
175
|
+
from { transform: translateX(-100%); }
|
|
176
|
+
to { transform: translateX(250%); }
|
|
177
|
+
}
|
|
178
|
+
@media (prefers-reduced-motion: reduce) {
|
|
179
|
+
.ogx__loading-bar::after {
|
|
180
|
+
animation: none;
|
|
181
|
+
width: 100%;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
125
185
|
.ogx-error-overlay {
|
|
126
186
|
position: absolute;
|
|
127
187
|
top: 0;
|
|
@@ -185,6 +245,18 @@
|
|
|
185
245
|
z-index: 3;
|
|
186
246
|
background: var(--ogx-grid-header-background);
|
|
187
247
|
}
|
|
248
|
+
/* Aligns with the row's drag-handle / expand / checkbox column. */
|
|
249
|
+
.ogx__aggregation-spacer {
|
|
250
|
+
width: 48px;
|
|
251
|
+
min-width: 48px;
|
|
252
|
+
flex-shrink: 0;
|
|
253
|
+
align-self: stretch;
|
|
254
|
+
}
|
|
255
|
+
.ogx__aggregation-spacer--pinned {
|
|
256
|
+
position: sticky;
|
|
257
|
+
z-index: 3;
|
|
258
|
+
background: var(--ogx-grid-header-background);
|
|
259
|
+
}
|
|
188
260
|
.ogx__aggregation-cell--pinned-right {
|
|
189
261
|
border-left: 1px solid var(--ogx-grid-border-color);
|
|
190
262
|
}
|