@reforgium/data-grid 1.0.2 → 1.1.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/README.md
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# @reforgium/data-grid
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/@reforgium/data-grid)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
3
6
|
**High-performance data grid for Angular (20+).**
|
|
4
7
|
|
|
5
8
|
`@reforgium/data-grid` provides a flexible and performant component for displaying large tabular datasets.
|
|
@@ -19,9 +22,10 @@ Designed for **real-world datasets**, not demo tables.
|
|
|
19
22
|
- Column expanders (hidden columns via toggler)
|
|
20
23
|
- Scrollable overlay scrollbar
|
|
21
24
|
- Pinned rows (top and bottom)
|
|
22
|
-
- Custom templates for headers, cells, pinned rows
|
|
25
|
+
- Custom templates for headers, cells, pinned rows, icons
|
|
23
26
|
- Row selection (single / multi)
|
|
24
27
|
- Signals-based API (`signal()` first)
|
|
28
|
+
- Paginator component *[NEW in 1.1.0]*
|
|
25
29
|
|
|
26
30
|
---
|
|
27
31
|
|
|
@@ -40,11 +44,12 @@ export class SomeComponent {}
|
|
|
40
44
|
|
|
41
45
|
```html
|
|
42
46
|
<re-data-grid
|
|
47
|
+
mode="infinity"
|
|
43
48
|
[data]="users"
|
|
44
49
|
[columns]="columns"
|
|
45
50
|
[pageSize]="50"
|
|
46
51
|
[loading]="loading"
|
|
47
|
-
(
|
|
52
|
+
(pageChange)="loadMore($event)"
|
|
48
53
|
/>
|
|
49
54
|
```
|
|
50
55
|
|
|
@@ -54,19 +59,23 @@ export class SomeComponent {}
|
|
|
54
59
|
|
|
55
60
|
### Inputs
|
|
56
61
|
|
|
57
|
-
| Parameter | Type
|
|
58
|
-
|
|
59
|
-
| data | `T[]`
|
|
60
|
-
| columns | `
|
|
61
|
-
| pinnedRows | `
|
|
62
|
-
| mode | `'
|
|
63
|
-
| pageSize | `number`
|
|
64
|
-
| pageStartFromZero | `boolean`
|
|
65
|
-
| hasIndexColumn | `boolean`
|
|
66
|
-
| selection | `{ mode: '
|
|
67
|
-
|
|
|
68
|
-
|
|
|
69
|
-
|
|
|
62
|
+
| Parameter | Type | Default | Description | |
|
|
63
|
+
|-------------------|-------------------------------------------------|--------------------|-------------------------------------|------------------|
|
|
64
|
+
| data | `T[]` | `[]` | Data array to render | |
|
|
65
|
+
| columns | `GridColumn<T>[]` | `[]` | Column configuration | |
|
|
66
|
+
| pinnedRows | `GridPinnedRow<T>[]` | `[]` | Top / bottom pinned rows | |
|
|
67
|
+
| mode | `'none' \| 'pagination' \| 'infinity'` | `'none'` | Grid operation mode | |
|
|
68
|
+
| pageSize | `number` | `20` | Page size | |
|
|
69
|
+
| pageStartFromZero | `boolean` | `true` | Start page index from 0 | |
|
|
70
|
+
| hasIndexColumn | `boolean` | `false` | Show index column | |
|
|
71
|
+
| selection | `GridSelection<T>` | `{ mode: 'none' }` | Row selection configuration | |
|
|
72
|
+
| rowHeight | `number` | `40` | Row height (px) | *[FIX in 1.1.0]* |
|
|
73
|
+
| virtualBuffer | `number` | `6` | Extra rows above/below viewport | |
|
|
74
|
+
| height | `number \| 'full' \| 'default'` | `'full'` | Grid height | |
|
|
75
|
+
| loading | `boolean` | `false` | Loading state | |
|
|
76
|
+
| rowKey | `DataKey<T> \| ((item: T) => string \| number)` | `undefined` | Unique row key resolver | |
|
|
77
|
+
|
|
78
|
+
When selection mode is `'single'` or `'multi'`, provide a `key` (data property) and optionally `defaultSelected`.
|
|
70
79
|
|
|
71
80
|
### Outputs
|
|
72
81
|
|
|
@@ -80,24 +89,29 @@ export class SomeComponent {}
|
|
|
80
89
|
|
|
81
90
|
### Templates
|
|
82
91
|
|
|
83
|
-
| Directive
|
|
84
|
-
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
92
|
+
| Directive | Parameters | Description | |
|
|
93
|
+
|------------------------|------------------------------------|----------------------------------------|------------------|
|
|
94
|
+
| reDataGridHeader | key: string | Column header template | |
|
|
95
|
+
| reDataGridCell | key: string | Cell template for specific column key | *[NEW in 1.1.0]* |
|
|
96
|
+
| reDataGridTypeCell | type: string | Cell template for specific column type | |
|
|
97
|
+
| reDataGridEmpty | - | Empty state template | |
|
|
98
|
+
| reDataGridLoading | - | Loading state template | |
|
|
99
|
+
| reDataGridSortIcon | order: GridSortOrder \| undefined | Sort icon template | *[NEW in 1.1.0]* |
|
|
100
|
+
| reDataGridExpanderIcon | expanded: boolean | Expander icon template | *[NEW in 1.1.0]* |
|
|
89
101
|
|
|
90
102
|
|
|
91
103
|
### CSS Variables
|
|
92
104
|
|
|
93
105
|
Layout / Appearance:
|
|
94
|
-
- `--re-data-grid-height` — component
|
|
106
|
+
- `--re-data-grid-min-height` — component min height (`200px`). *[NEW in 1.1.0]*
|
|
107
|
+
- `--re-data-grid-height` — component height (`400px`). *[UPDATED in 1.1.0]*
|
|
95
108
|
- `--re-data-grid-rounded` — border radius (`var(--radius-md, 6px)`).
|
|
96
109
|
- `--re-data-grid-surface` — table background (`#fff`).
|
|
97
110
|
- `--re-data-grid-active` — active color (`#2a90f4`).
|
|
98
111
|
|
|
99
112
|
Empty / Loading States:
|
|
100
113
|
- `--re-data-grid-empty-color` — empty text color (`#777`)
|
|
114
|
+
- `--re-data-grid-empty-surface` — empty text background (`transparent`) *[NEW in 1.1.0]*
|
|
101
115
|
- `--re-data-grid-loading-color` — loading indicator color (`#444`)
|
|
102
116
|
- `--re-data-grid-loading-surface` — loading overlay (`rgba(255,255,255,0.5)`)
|
|
103
117
|
|
|
@@ -111,58 +125,104 @@ Scrollbar:
|
|
|
111
125
|
Header:
|
|
112
126
|
- `--re-data-grid-header-height` — header row height (`40px`)
|
|
113
127
|
- `--re-data-grid-header-separator-color` — separator color (`#ccc`)
|
|
114
|
-
- `--re-data-grid-header-separator` — separator line
|
|
128
|
+
- `--re-data-grid-header-separator` — separator line (`1px solid var(--re-data-grid-header-separator-color)`)
|
|
115
129
|
- `--re-data-grid-header-surface` — header background (`#fff`)
|
|
116
130
|
|
|
117
131
|
Header Cells:
|
|
118
132
|
|
|
119
|
-
- `--re-data-grid-header-cell-font-weight` — font weight
|
|
120
|
-
- `--re-data-grid-header-cell-font-size` — font size
|
|
121
|
-
- `--re-data-grid-header-cell-color` — text color
|
|
122
|
-
- `--re-data-grid-header-cell-surface` — cell background
|
|
133
|
+
- `--re-data-grid-header-cell-font-weight` — font weight (`600`)
|
|
134
|
+
- `--re-data-grid-header-cell-font-size` — font size (`0.8rem`)
|
|
135
|
+
- `--re-data-grid-header-cell-color` — text color (`#000`)
|
|
136
|
+
- `--re-data-grid-header-cell-surface` — cell background (`#fafafa`)
|
|
123
137
|
|
|
124
138
|
Footer:
|
|
125
139
|
|
|
126
|
-
- `--re-data-grid-footer-separator-color` — separator color
|
|
127
|
-
- `--re-data-grid-footer-separator` — separator line
|
|
128
|
-
- `--re-data-grid-footer-surface` — footer background
|
|
140
|
+
- `--re-data-grid-footer-separator-color` — separator color (`#ccc`)
|
|
141
|
+
- `--re-data-grid-footer-separator` — separator line (`1px solid var(--re-data-grid-footer-separator-color)`)
|
|
142
|
+
- `--re-data-grid-footer-surface` — footer background (`#fff`)
|
|
129
143
|
|
|
130
144
|
Rows:
|
|
131
145
|
|
|
132
|
-
- `--re-data-grid-row-separator-color` — row separator color
|
|
133
|
-
- `--re-data-grid-row-separator` — separator line
|
|
134
|
-
- `--re-data-grid-row-odd-surface` — odd rows background
|
|
146
|
+
- `--re-data-grid-row-separator-color` — row separator color (`#bbb`)
|
|
147
|
+
- `--re-data-grid-row-separator` — separator line (`1px solid var(--re-data-grid-row-separator-color)`)
|
|
148
|
+
- `--re-data-grid-row-odd-surface` — odd rows background (`var(--re-data-grid-cell-surface)`)
|
|
135
149
|
|
|
136
150
|
Columns:
|
|
137
|
-
- `--re-data-grid-column-separator-color` — column divider color `transparent
|
|
138
|
-
- `--re-data-grid-column-separator` — column divider `1px solid var(--re-data-grid-column-separator-color)
|
|
139
|
-
- `--re-data-grid-column-odd-surface` — odd column background `var(--re-data-grid-cell-surface)
|
|
151
|
+
- `--re-data-grid-column-separator-color` — column divider color (`transparent`)
|
|
152
|
+
- `--re-data-grid-column-separator` — column divider (`1px solid var(--re-data-grid-column-separator-color)`)
|
|
153
|
+
- `--re-data-grid-column-odd-surface` — odd column background (`var(--re-data-grid-cell-surface)`)
|
|
140
154
|
|
|
141
155
|
Cells:
|
|
142
156
|
|
|
143
|
-
- `--re-data-grid-cell-paddings` — inner paddings
|
|
144
|
-
- `--re-data-grid-cell-font-weight` — font weight
|
|
145
|
-
- `--re-data-grid-cell-font-size` — font size
|
|
146
|
-
- `--re-data-grid-cell-color` — text color
|
|
147
|
-
- `--re-data-grid-cell-surface` — cell background
|
|
157
|
+
- `--re-data-grid-cell-paddings` — inner paddings (`0.4rem 0.625rem`)
|
|
158
|
+
- `--re-data-grid-cell-font-weight` — font weight (`400`)
|
|
159
|
+
- `--re-data-grid-cell-font-size` — font size (`0.75rem`)
|
|
160
|
+
- `--re-data-grid-cell-color` — text color (`#000`)
|
|
161
|
+
- `--re-data-grid-cell-surface` — cell background (`#fff`)
|
|
148
162
|
|
|
149
163
|
Sticky Cells:
|
|
150
164
|
|
|
151
|
-
- `--re-data-grid-sticky-cell-surface` — sticky cells background
|
|
152
|
-
- `--re-data-grid-sticky-cell-left-shadow` — left shadow
|
|
153
|
-
- `--re-data-grid-sticky-cell-right-shadow` — right shadow
|
|
165
|
+
- `--re-data-grid-sticky-cell-surface` — sticky cells background (`#fdfdfd`)
|
|
166
|
+
- `--re-data-grid-sticky-cell-left-shadow` — left shadow (`2px 0 2px rgba(0, 0, 0, 0.03)`)
|
|
167
|
+
- `--re-data-grid-sticky-cell-right-shadow` — right shadow (`-2px 0 2px rgba(0, 0, 0, 0.03)`)
|
|
154
168
|
|
|
155
169
|
Pinned Sections:
|
|
156
170
|
|
|
157
|
-
- `--re-data-grid-pinned-surface` — pinned sections background
|
|
158
|
-
- `--re-data-grid-pinned-separator-color` — separator color
|
|
159
|
-
- `--re-data-grid-pinned-separator` — separator line
|
|
171
|
+
- `--re-data-grid-pinned-surface` — pinned sections background (`#fcfcfc`)
|
|
172
|
+
- `--re-data-grid-pinned-separator-color` — separator color (`#eee`)
|
|
173
|
+
- `--re-data-grid-pinned-separator` — separator line (`1px solid var(--re-data-grid-pinned-separator-color)`)
|
|
160
174
|
|
|
161
175
|
Misc:
|
|
162
176
|
|
|
163
|
-
- `--re-data-grid-expander-color` — expander indicator color
|
|
177
|
+
- `--re-data-grid-expander-color` — expander indicator color (`var(--primary-color, currentColor)`)
|
|
178
|
+
- `--re-data-grid-expanded-color` — expanded column color (`var(--re-data-grid-cell-color, #000)`) *[NEW in 1.1.0]*
|
|
179
|
+
- `--re-data-grid-expanded-surface` — expanded column background(`var(--re-data-grid-cell-surface, #fff)`) *[NEW in 1.1.0]*
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Paginator *[NEW in 1.1.0]*
|
|
184
|
+
The paginator component is used to display a page selector and total count.
|
|
185
|
+
|
|
186
|
+
### Inputs
|
|
187
|
+
|
|
188
|
+
| Parameter | Type | Default | Description |
|
|
189
|
+
|----------------|------------|-----------|--------------------------|
|
|
190
|
+
| current | `number` | 0 | Current page |
|
|
191
|
+
| pageSize | `number` | 0 | |
|
|
192
|
+
| totalElements | `number` | 0 | Total number of elements |
|
|
193
|
+
| maxShowPages | `number` | 7 | |
|
|
194
|
+
|
|
195
|
+
### Outputs
|
|
196
|
+
|
|
197
|
+
| Event | Type | Description |
|
|
198
|
+
|--------------|-----------|-------------|
|
|
199
|
+
| pageChange | `number` | |
|
|
200
|
+
|
|
201
|
+
### CSS Variables
|
|
202
|
+
|
|
203
|
+
Layout:
|
|
204
|
+
- `--re-data-grid-paginator-gap` — gap (`0.5rem`)
|
|
205
|
+
|
|
206
|
+
Page:
|
|
207
|
+
- `--re-data-grid-paginator-page-size` — (`1.75rem`)
|
|
208
|
+
- `--re-data-grid-paginator-page-border` — (`1px solid var(--re-data-grid-paginator-separator-color, #e2e8f0)`)
|
|
209
|
+
- `--re-data-grid-paginator-page-separator-color` — (`var(--re-data-grid-separator-color, --border-color)`)
|
|
210
|
+
- `--re-data-grid-paginator-page-rounded` — (`var(--re-data-grid-rounded, --radius-md)`)
|
|
211
|
+
- `--re-data-grid-paginator-page-surface` — (`var(--re-data-grid-surface, white)`)
|
|
212
|
+
- `--re-data-grid-paginator-page-color` — (`var(--text-primary, #1e293b)`)
|
|
213
|
+
- `--re-data-grid-paginator-page-font-size` — (`0.875rem`)
|
|
164
214
|
|
|
165
|
-
|
|
215
|
+
Active Page:
|
|
216
|
+
- `--re-data-grid-paginator-page-active-surface` — (`var(--re-data-grid-active, #3b82f6)`)
|
|
217
|
+
- `--re-data-grid-paginator-page-active-color` — (`white`)
|
|
218
|
+
|
|
219
|
+
Hover Page:
|
|
220
|
+
- `--re-data-grid-paginator-page-hover-surface` — (`var(--re-data-grid-active, #3b82f6)`)
|
|
221
|
+
- `--re-data-grid-paginator-page-hover-color` — (`white`)
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
### Theming via CSS Variables
|
|
166
226
|
|
|
167
227
|
Variables can be overridden globally (`:root`) or per grid container.
|
|
168
228
|
|
|
@@ -188,20 +248,27 @@ Compact Mode Example:
|
|
|
188
248
|
}
|
|
189
249
|
```
|
|
190
250
|
|
|
191
|
-
|
|
251
|
+
### Custom Template Examples
|
|
192
252
|
|
|
193
253
|
Cell Template by Type
|
|
194
254
|
```html
|
|
195
|
-
<ng-template
|
|
255
|
+
<ng-template reDataGridTypeCell="link" let-value let-row="row">
|
|
196
256
|
<a [href]="value" target="_blank">{{ value }}</a>
|
|
197
257
|
</ng-template>
|
|
198
258
|
```
|
|
199
259
|
|
|
260
|
+
Cell Template *[NEW in 1.1.0]*
|
|
261
|
+
```html
|
|
262
|
+
<ng-template reDataGridCell="fullName" let-value let-row="row">
|
|
263
|
+
<span><b>{{ row.firstName }}</b> {{ row.lastName }}</span>
|
|
264
|
+
</ng-template>
|
|
265
|
+
```
|
|
266
|
+
|
|
200
267
|
Custom Header Template:
|
|
201
268
|
```html
|
|
202
|
-
<ng-template
|
|
269
|
+
<ng-template reDataGridHeader key="name" let-value>
|
|
203
270
|
<span class="header-with-icon">
|
|
204
|
-
<
|
|
271
|
+
<icon name="user" size="20" />
|
|
205
272
|
{{ value }}
|
|
206
273
|
</span>
|
|
207
274
|
</ng-template>
|