@smallwebco/tinypivot-core 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.
- package/dist/export/index.d.ts +43 -0
- package/dist/export/index.d.ts.map +1 -0
- package/dist/export/index.js +164 -0
- package/dist/export/index.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/license/index.d.ts +38 -0
- package/dist/license/index.d.ts.map +1 -0
- package/dist/license/index.js +159 -0
- package/dist/license/index.js.map +1 -0
- package/dist/pivot/index.d.ts +62 -0
- package/dist/pivot/index.d.ts.map +1 -0
- package/dist/pivot/index.js +328 -0
- package/dist/pivot/index.js.map +1 -0
- package/dist/types/index.d.ts +154 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +48 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +176 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +25 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import { detectFieldType, makeKey, parseKey } from '../utils';
|
|
2
|
+
/**
|
|
3
|
+
* Aggregate values based on function type
|
|
4
|
+
*/
|
|
5
|
+
export function aggregate(values, fn) {
|
|
6
|
+
if (values.length === 0)
|
|
7
|
+
return null;
|
|
8
|
+
switch (fn) {
|
|
9
|
+
case 'sum':
|
|
10
|
+
return values.reduce((a, b) => a + b, 0);
|
|
11
|
+
case 'count':
|
|
12
|
+
return values.length;
|
|
13
|
+
case 'avg':
|
|
14
|
+
return values.reduce((a, b) => a + b, 0) / values.length;
|
|
15
|
+
case 'min':
|
|
16
|
+
return Math.min(...values);
|
|
17
|
+
case 'max':
|
|
18
|
+
return Math.max(...values);
|
|
19
|
+
case 'countDistinct':
|
|
20
|
+
return new Set(values).size;
|
|
21
|
+
default:
|
|
22
|
+
return values.reduce((a, b) => a + b, 0);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Format aggregated value for display
|
|
27
|
+
*/
|
|
28
|
+
export function formatAggregatedValue(value, fn) {
|
|
29
|
+
if (value === null)
|
|
30
|
+
return '-';
|
|
31
|
+
if (fn === 'count' || fn === 'countDistinct') {
|
|
32
|
+
return Math.round(value).toLocaleString();
|
|
33
|
+
}
|
|
34
|
+
if (Math.abs(value) >= 1000) {
|
|
35
|
+
return value.toLocaleString('en-US', { maximumFractionDigits: 2 });
|
|
36
|
+
}
|
|
37
|
+
return value.toLocaleString('en-US', { maximumFractionDigits: 4 });
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get aggregation function display label
|
|
41
|
+
*/
|
|
42
|
+
export function getAggregationLabel(fn) {
|
|
43
|
+
const labels = {
|
|
44
|
+
sum: 'Sum',
|
|
45
|
+
count: 'Count',
|
|
46
|
+
avg: 'Average',
|
|
47
|
+
min: 'Min',
|
|
48
|
+
max: 'Max',
|
|
49
|
+
countDistinct: 'Count Distinct',
|
|
50
|
+
};
|
|
51
|
+
return labels[fn];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get aggregation function symbol
|
|
55
|
+
*/
|
|
56
|
+
export function getAggregationSymbol(fn) {
|
|
57
|
+
const symbols = {
|
|
58
|
+
sum: 'Σ',
|
|
59
|
+
count: '#',
|
|
60
|
+
avg: 'x̄',
|
|
61
|
+
min: '↓',
|
|
62
|
+
max: '↑',
|
|
63
|
+
countDistinct: '◇',
|
|
64
|
+
};
|
|
65
|
+
return symbols[fn];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Aggregation options for UI
|
|
69
|
+
*/
|
|
70
|
+
export const AGGREGATION_OPTIONS = [
|
|
71
|
+
{ value: 'sum', label: 'Sum', symbol: 'Σ' },
|
|
72
|
+
{ value: 'count', label: 'Count', symbol: '#' },
|
|
73
|
+
{ value: 'avg', label: 'Avg', symbol: 'x̄' },
|
|
74
|
+
{ value: 'min', label: 'Min', symbol: '↓' },
|
|
75
|
+
{ value: 'max', label: 'Max', symbol: '↑' },
|
|
76
|
+
{ value: 'countDistinct', label: 'Unique', symbol: '◇' },
|
|
77
|
+
];
|
|
78
|
+
/**
|
|
79
|
+
* Compute available fields from data
|
|
80
|
+
*/
|
|
81
|
+
export function computeAvailableFields(data) {
|
|
82
|
+
if (data.length === 0)
|
|
83
|
+
return [];
|
|
84
|
+
const keys = Object.keys(data[0]);
|
|
85
|
+
return keys.map(field => detectFieldType(data, field));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get unassigned fields (not in row, column, or value fields)
|
|
89
|
+
*/
|
|
90
|
+
export function getUnassignedFields(availableFields, rowFields, columnFields, valueFields) {
|
|
91
|
+
const assigned = new Set([
|
|
92
|
+
...rowFields,
|
|
93
|
+
...columnFields,
|
|
94
|
+
...valueFields.map(v => v.field),
|
|
95
|
+
]);
|
|
96
|
+
return availableFields.filter(f => !assigned.has(f.field));
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if pivot is configured
|
|
100
|
+
*/
|
|
101
|
+
export function isPivotConfigured(config) {
|
|
102
|
+
return (config.rowFields.length > 0 || config.columnFields.length > 0) && config.valueFields.length > 0;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Build pivot result from data and config
|
|
106
|
+
*/
|
|
107
|
+
export function computePivotResult(data, config) {
|
|
108
|
+
const { rowFields, columnFields, valueFields, showRowTotals, showColumnTotals } = config;
|
|
109
|
+
if (!isPivotConfigured(config))
|
|
110
|
+
return null;
|
|
111
|
+
if (data.length === 0)
|
|
112
|
+
return null;
|
|
113
|
+
// Collect unique row and column keys
|
|
114
|
+
const rowKeySet = new Set();
|
|
115
|
+
const colKeySet = new Set();
|
|
116
|
+
// Group data by row and column keys
|
|
117
|
+
const dataMap = new Map();
|
|
118
|
+
for (const row of data) {
|
|
119
|
+
const rowKey = rowFields.length > 0 ? makeKey(row, rowFields) : '__all__';
|
|
120
|
+
const colKey = columnFields.length > 0 ? makeKey(row, columnFields) : '__all__';
|
|
121
|
+
rowKeySet.add(rowKey);
|
|
122
|
+
colKeySet.add(colKey);
|
|
123
|
+
if (!dataMap.has(rowKey)) {
|
|
124
|
+
dataMap.set(rowKey, new Map());
|
|
125
|
+
}
|
|
126
|
+
const colMap = dataMap.get(rowKey);
|
|
127
|
+
if (!colMap.has(colKey)) {
|
|
128
|
+
colMap.set(colKey, valueFields.map(() => []));
|
|
129
|
+
}
|
|
130
|
+
const valueArrays = colMap.get(colKey);
|
|
131
|
+
// Collect values for each value field
|
|
132
|
+
for (let i = 0; i < valueFields.length; i++) {
|
|
133
|
+
const vf = valueFields[i];
|
|
134
|
+
const val = row[vf.field];
|
|
135
|
+
if (val !== null && val !== undefined && val !== '') {
|
|
136
|
+
const num = typeof val === 'number' ? val : Number.parseFloat(String(val));
|
|
137
|
+
if (!Number.isNaN(num)) {
|
|
138
|
+
valueArrays[i].push(num);
|
|
139
|
+
}
|
|
140
|
+
else if (vf.aggregation === 'count' || vf.aggregation === 'countDistinct') {
|
|
141
|
+
valueArrays[i].push(1);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Sort keys
|
|
147
|
+
const rowKeys = Array.from(rowKeySet).sort();
|
|
148
|
+
const colKeys = Array.from(colKeySet).sort();
|
|
149
|
+
// Build column headers
|
|
150
|
+
const headers = [];
|
|
151
|
+
if (columnFields.length > 0) {
|
|
152
|
+
for (let level = 0; level < columnFields.length; level++) {
|
|
153
|
+
const headerRow = [];
|
|
154
|
+
for (const colKey of colKeys) {
|
|
155
|
+
const parts = parseKey(colKey);
|
|
156
|
+
headerRow.push(parts[level] || '');
|
|
157
|
+
}
|
|
158
|
+
headers.push(headerRow);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// If multiple value fields, add value field labels as last header row
|
|
162
|
+
if (valueFields.length > 1 || headers.length === 0) {
|
|
163
|
+
const valueLabels = [];
|
|
164
|
+
for (const colKey of colKeys) {
|
|
165
|
+
for (const vf of valueFields) {
|
|
166
|
+
valueLabels.push(`${vf.label || vf.field} (${getAggregationLabel(vf.aggregation)})`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (colKeys.length === 1 && colKeys[0] === '__all__') {
|
|
170
|
+
headers.push(valueFields.map(vf => `${vf.label || vf.field} (${getAggregationLabel(vf.aggregation)})`));
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
headers.push(valueLabels);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// Build row headers
|
|
177
|
+
const rowHeaders = rowKeys.map(key => {
|
|
178
|
+
if (key === '__all__')
|
|
179
|
+
return ['Total'];
|
|
180
|
+
return parseKey(key);
|
|
181
|
+
});
|
|
182
|
+
// Build data matrix
|
|
183
|
+
const pivotData = [];
|
|
184
|
+
const rowTotals = [];
|
|
185
|
+
const columnTotalsMap = new Map();
|
|
186
|
+
for (const rowKey of rowKeys) {
|
|
187
|
+
const rowData = [];
|
|
188
|
+
const rowTotalValues = valueFields.map(() => []);
|
|
189
|
+
let colIndex = 0;
|
|
190
|
+
for (const colKey of colKeys) {
|
|
191
|
+
const colMap = dataMap.get(rowKey);
|
|
192
|
+
const valueArrays = colMap?.get(colKey) || valueFields.map(() => []);
|
|
193
|
+
for (let i = 0; i < valueFields.length; i++) {
|
|
194
|
+
const vf = valueFields[i];
|
|
195
|
+
const values = valueArrays[i];
|
|
196
|
+
const aggValue = aggregate(values, vf.aggregation);
|
|
197
|
+
rowData.push({
|
|
198
|
+
value: aggValue,
|
|
199
|
+
count: values.length,
|
|
200
|
+
formattedValue: formatAggregatedValue(aggValue, vf.aggregation),
|
|
201
|
+
});
|
|
202
|
+
rowTotalValues[i].push(...values);
|
|
203
|
+
if (!columnTotalsMap.has(colIndex)) {
|
|
204
|
+
columnTotalsMap.set(colIndex, valueFields.map(() => []));
|
|
205
|
+
}
|
|
206
|
+
columnTotalsMap.get(colIndex)[i].push(...values);
|
|
207
|
+
colIndex++;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
pivotData.push(rowData);
|
|
211
|
+
if (showRowTotals && colKeys.length > 1) {
|
|
212
|
+
const totalCell = {
|
|
213
|
+
value: null,
|
|
214
|
+
count: 0,
|
|
215
|
+
formattedValue: '-',
|
|
216
|
+
};
|
|
217
|
+
if (valueFields.length > 0) {
|
|
218
|
+
const vf = valueFields[0];
|
|
219
|
+
const allValues = rowTotalValues[0];
|
|
220
|
+
const aggValue = aggregate(allValues, vf.aggregation);
|
|
221
|
+
totalCell.value = aggValue;
|
|
222
|
+
totalCell.count = allValues.length;
|
|
223
|
+
totalCell.formattedValue = formatAggregatedValue(aggValue, vf.aggregation);
|
|
224
|
+
}
|
|
225
|
+
rowTotals.push(totalCell);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Calculate column totals
|
|
229
|
+
const columnTotals = [];
|
|
230
|
+
if (showColumnTotals && rowKeys.length > 1) {
|
|
231
|
+
for (let colIdx = 0; colIdx < colKeys.length * valueFields.length; colIdx++) {
|
|
232
|
+
const valueIdx = colIdx % valueFields.length;
|
|
233
|
+
const vf = valueFields[valueIdx];
|
|
234
|
+
const allColValues = [];
|
|
235
|
+
for (const rowKey of rowKeys) {
|
|
236
|
+
const colMap = dataMap.get(rowKey);
|
|
237
|
+
const colKey = colKeys[Math.floor(colIdx / valueFields.length)];
|
|
238
|
+
const valueArrays = colMap?.get(colKey) || valueFields.map(() => []);
|
|
239
|
+
allColValues.push(...valueArrays[valueIdx]);
|
|
240
|
+
}
|
|
241
|
+
const aggValue = aggregate(allColValues, vf.aggregation);
|
|
242
|
+
columnTotals.push({
|
|
243
|
+
value: aggValue,
|
|
244
|
+
count: allColValues.length,
|
|
245
|
+
formattedValue: formatAggregatedValue(aggValue, vf.aggregation),
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// Grand total
|
|
250
|
+
const grandTotal = { value: null, count: 0, formattedValue: '-' };
|
|
251
|
+
if (showRowTotals && showColumnTotals && valueFields.length > 0) {
|
|
252
|
+
const vf = valueFields[0];
|
|
253
|
+
const allValues = [];
|
|
254
|
+
for (const row of data) {
|
|
255
|
+
const val = row[vf.field];
|
|
256
|
+
if (val !== null && val !== undefined && val !== '') {
|
|
257
|
+
const num = typeof val === 'number' ? val : Number.parseFloat(String(val));
|
|
258
|
+
if (!Number.isNaN(num)) {
|
|
259
|
+
allValues.push(num);
|
|
260
|
+
}
|
|
261
|
+
else if (vf.aggregation === 'count' || vf.aggregation === 'countDistinct') {
|
|
262
|
+
allValues.push(1);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
const aggValue = aggregate(allValues, vf.aggregation);
|
|
267
|
+
grandTotal.value = aggValue;
|
|
268
|
+
grandTotal.count = allValues.length;
|
|
269
|
+
grandTotal.formattedValue = formatAggregatedValue(aggValue, vf.aggregation);
|
|
270
|
+
}
|
|
271
|
+
return {
|
|
272
|
+
headers,
|
|
273
|
+
rowHeaders,
|
|
274
|
+
data: pivotData,
|
|
275
|
+
rowTotals,
|
|
276
|
+
columnTotals,
|
|
277
|
+
grandTotal,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
// Storage helpers for pivot config persistence
|
|
281
|
+
const STORAGE_KEY_PREFIX = 'vpg-pivot-';
|
|
282
|
+
/**
|
|
283
|
+
* Generate a storage key based on column names
|
|
284
|
+
*/
|
|
285
|
+
export function generateStorageKey(columns) {
|
|
286
|
+
const sorted = [...columns].sort();
|
|
287
|
+
const hash = sorted.join('|').substring(0, 100);
|
|
288
|
+
return `${STORAGE_KEY_PREFIX}${hash}`;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Save pivot config to sessionStorage
|
|
292
|
+
*/
|
|
293
|
+
export function savePivotConfig(key, config) {
|
|
294
|
+
try {
|
|
295
|
+
sessionStorage.setItem(key, JSON.stringify(config));
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
// Ignore storage errors
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Load pivot config from sessionStorage
|
|
303
|
+
*/
|
|
304
|
+
export function loadPivotConfig(key) {
|
|
305
|
+
try {
|
|
306
|
+
const stored = sessionStorage.getItem(key);
|
|
307
|
+
if (stored) {
|
|
308
|
+
return JSON.parse(stored);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
// Ignore parse errors
|
|
313
|
+
}
|
|
314
|
+
return null;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Check if config fields exist in available fields
|
|
318
|
+
*/
|
|
319
|
+
export function isConfigValidForFields(config, availableFieldNames) {
|
|
320
|
+
const available = new Set(availableFieldNames);
|
|
321
|
+
const allConfiguredFields = [
|
|
322
|
+
...config.rowFields,
|
|
323
|
+
...config.columnFields,
|
|
324
|
+
...config.valueFields.map(v => v.field),
|
|
325
|
+
];
|
|
326
|
+
return allConfiguredFields.every(f => available.has(f));
|
|
327
|
+
}
|
|
328
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pivot/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TinyPivot Core - Type Definitions
|
|
3
|
+
* Framework-agnostic types used across Vue and React packages
|
|
4
|
+
*/
|
|
5
|
+
export interface ColumnStats {
|
|
6
|
+
uniqueValues: string[];
|
|
7
|
+
totalCount: number;
|
|
8
|
+
nullCount: number;
|
|
9
|
+
type: 'string' | 'number' | 'date' | 'boolean' | 'mixed';
|
|
10
|
+
}
|
|
11
|
+
export interface GridOptions<T = Record<string, unknown>> {
|
|
12
|
+
data: T[];
|
|
13
|
+
columns?: string[];
|
|
14
|
+
enableSorting?: boolean;
|
|
15
|
+
enableFiltering?: boolean;
|
|
16
|
+
pageSize?: number;
|
|
17
|
+
}
|
|
18
|
+
export type AggregationFunction = 'sum' | 'count' | 'avg' | 'min' | 'max' | 'countDistinct';
|
|
19
|
+
export interface PivotField {
|
|
20
|
+
field: string;
|
|
21
|
+
label?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface PivotValueField extends PivotField {
|
|
24
|
+
aggregation: AggregationFunction;
|
|
25
|
+
}
|
|
26
|
+
export interface PivotConfig {
|
|
27
|
+
rowFields: string[];
|
|
28
|
+
columnFields: string[];
|
|
29
|
+
valueFields: PivotValueField[];
|
|
30
|
+
showRowTotals: boolean;
|
|
31
|
+
showColumnTotals: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface PivotCell {
|
|
34
|
+
value: number | null;
|
|
35
|
+
count: number;
|
|
36
|
+
formattedValue: string;
|
|
37
|
+
}
|
|
38
|
+
export interface PivotResult {
|
|
39
|
+
headers: string[][];
|
|
40
|
+
rowHeaders: string[][];
|
|
41
|
+
data: PivotCell[][];
|
|
42
|
+
rowTotals: PivotCell[];
|
|
43
|
+
columnTotals: PivotCell[];
|
|
44
|
+
grandTotal: PivotCell;
|
|
45
|
+
}
|
|
46
|
+
export interface FieldStats {
|
|
47
|
+
field: string;
|
|
48
|
+
type: 'string' | 'number' | 'date' | 'boolean' | 'mixed';
|
|
49
|
+
uniqueCount: number;
|
|
50
|
+
isNumeric: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface DataGridProps {
|
|
53
|
+
data: Record<string, unknown>[];
|
|
54
|
+
loading?: boolean;
|
|
55
|
+
rowHeight?: number;
|
|
56
|
+
headerHeight?: number;
|
|
57
|
+
fontSize?: 'xs' | 'sm' | 'base';
|
|
58
|
+
licenseKey?: string;
|
|
59
|
+
showPivot?: boolean;
|
|
60
|
+
enableExport?: boolean;
|
|
61
|
+
enableSearch?: boolean;
|
|
62
|
+
enablePagination?: boolean;
|
|
63
|
+
pageSize?: number;
|
|
64
|
+
enableRowSelection?: boolean;
|
|
65
|
+
enableColumnResize?: boolean;
|
|
66
|
+
enableClipboard?: boolean;
|
|
67
|
+
theme?: 'light' | 'dark' | 'auto';
|
|
68
|
+
stripedRows?: boolean;
|
|
69
|
+
exportFilename?: string;
|
|
70
|
+
enableVerticalResize?: boolean;
|
|
71
|
+
initialHeight?: number;
|
|
72
|
+
minHeight?: number;
|
|
73
|
+
maxHeight?: number;
|
|
74
|
+
}
|
|
75
|
+
export interface PivotTableProps {
|
|
76
|
+
result: PivotResult;
|
|
77
|
+
rowFields: string[];
|
|
78
|
+
columnFields: string[];
|
|
79
|
+
valueFields: PivotValueField[];
|
|
80
|
+
showRowTotals: boolean;
|
|
81
|
+
showColumnTotals: boolean;
|
|
82
|
+
fontSize?: 'xs' | 'sm' | 'base';
|
|
83
|
+
}
|
|
84
|
+
export type LicenseType = 'free' | 'pro-single' | 'pro-unlimited' | 'pro-team';
|
|
85
|
+
export interface LicenseFeatures {
|
|
86
|
+
pivot: boolean;
|
|
87
|
+
advancedAggregations: boolean;
|
|
88
|
+
percentageMode: boolean;
|
|
89
|
+
sessionPersistence: boolean;
|
|
90
|
+
noWatermark: boolean;
|
|
91
|
+
}
|
|
92
|
+
export interface LicenseInfo {
|
|
93
|
+
type: LicenseType;
|
|
94
|
+
isValid: boolean;
|
|
95
|
+
expiresAt?: Date;
|
|
96
|
+
features: LicenseFeatures;
|
|
97
|
+
}
|
|
98
|
+
export interface FilterEvent {
|
|
99
|
+
columnId: string;
|
|
100
|
+
values: string[];
|
|
101
|
+
}
|
|
102
|
+
export interface SortEvent {
|
|
103
|
+
columnId: string;
|
|
104
|
+
direction: 'asc' | 'desc' | null;
|
|
105
|
+
}
|
|
106
|
+
export interface CellClickEvent {
|
|
107
|
+
rowIndex: number;
|
|
108
|
+
colIndex: number;
|
|
109
|
+
value: unknown;
|
|
110
|
+
rowData: Record<string, unknown>;
|
|
111
|
+
}
|
|
112
|
+
export interface SelectionChangeEvent {
|
|
113
|
+
cells: Array<{
|
|
114
|
+
row: number;
|
|
115
|
+
col: number;
|
|
116
|
+
}>;
|
|
117
|
+
values: unknown[];
|
|
118
|
+
}
|
|
119
|
+
export interface RowSelectionChangeEvent {
|
|
120
|
+
selectedIndices: number[];
|
|
121
|
+
selectedRows: Record<string, unknown>[];
|
|
122
|
+
}
|
|
123
|
+
export interface ExportEvent {
|
|
124
|
+
rowCount: number;
|
|
125
|
+
filename: string;
|
|
126
|
+
}
|
|
127
|
+
export interface CopyEvent {
|
|
128
|
+
text: string;
|
|
129
|
+
cellCount: number;
|
|
130
|
+
}
|
|
131
|
+
export interface PaginationOptions {
|
|
132
|
+
pageSize?: number;
|
|
133
|
+
currentPage?: number;
|
|
134
|
+
}
|
|
135
|
+
export interface ExportOptions {
|
|
136
|
+
filename?: string;
|
|
137
|
+
includeHeaders?: boolean;
|
|
138
|
+
delimiter?: string;
|
|
139
|
+
}
|
|
140
|
+
export interface SelectionBounds {
|
|
141
|
+
minRow: number;
|
|
142
|
+
maxRow: number;
|
|
143
|
+
minCol: number;
|
|
144
|
+
maxCol: number;
|
|
145
|
+
}
|
|
146
|
+
export interface ColumnFilter {
|
|
147
|
+
id: string;
|
|
148
|
+
value: string[];
|
|
149
|
+
}
|
|
150
|
+
export interface ActiveFilter {
|
|
151
|
+
column: string;
|
|
152
|
+
values: string[];
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TinyPivot Core - Utility Functions
|
|
3
|
+
* Pure utility functions with no framework dependencies
|
|
4
|
+
*/
|
|
5
|
+
import type { ColumnStats, FieldStats } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* Detect column data type from values
|
|
8
|
+
*/
|
|
9
|
+
export declare function detectColumnType(values: unknown[]): ColumnStats['type'];
|
|
10
|
+
/**
|
|
11
|
+
* Detect field type from sample data (for pivot)
|
|
12
|
+
*/
|
|
13
|
+
export declare function detectFieldType(data: Record<string, unknown>[], field: string): FieldStats;
|
|
14
|
+
/**
|
|
15
|
+
* Get unique values for a column (for Excel-style filter dropdown)
|
|
16
|
+
*/
|
|
17
|
+
export declare function getColumnUniqueValues<T>(data: T[], columnKey: string, maxValues?: number): ColumnStats;
|
|
18
|
+
/**
|
|
19
|
+
* Format cell value for display
|
|
20
|
+
*/
|
|
21
|
+
export declare function formatCellValue(value: unknown, type: ColumnStats['type']): string;
|
|
22
|
+
/**
|
|
23
|
+
* Format number for display with appropriate precision
|
|
24
|
+
*/
|
|
25
|
+
export declare function formatNumber(value: number | null, options?: {
|
|
26
|
+
maximumFractionDigits?: number;
|
|
27
|
+
}): string;
|
|
28
|
+
/**
|
|
29
|
+
* Create a composite key from field values (for pivot grouping)
|
|
30
|
+
*/
|
|
31
|
+
export declare function makeKey(row: Record<string, unknown>, fields: string[]): string;
|
|
32
|
+
/**
|
|
33
|
+
* Parse composite key back to values
|
|
34
|
+
*/
|
|
35
|
+
export declare function parseKey(key: string): string[];
|
|
36
|
+
/**
|
|
37
|
+
* Natural sort comparator
|
|
38
|
+
*/
|
|
39
|
+
export declare function naturalSort(a: string, b: string): number;
|
|
40
|
+
/**
|
|
41
|
+
* Debounce function
|
|
42
|
+
*/
|
|
43
|
+
export declare function debounce<T extends (...args: unknown[]) => unknown>(fn: T, delay: number): (...args: Parameters<T>) => void;
|
|
44
|
+
/**
|
|
45
|
+
* Clamp a number between min and max
|
|
46
|
+
*/
|
|
47
|
+
export declare function clamp(value: number, min: number, max: number): number;
|
|
48
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAEvD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAwBvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAsB1F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,IAAI,EAAE,CAAC,EAAE,EACT,SAAS,EAAE,MAAM,EACjB,SAAS,SAAM,GACd,WAAW,CAoCb;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CA4BjF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE;IAAE,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAMvG;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAE9E;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAChE,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,MAAM,GACZ,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAOlC;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE"}
|