@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.
@@ -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":"AAYA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE7D;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAgB,EAAE,EAAuB;IACjE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEpC,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1C,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,MAAM,CAAA;QACtB,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAA;QAC1D,KAAK,KAAK;YACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;QAC5B,KAAK,KAAK;YACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;QAC5B,KAAK,eAAe;YAClB,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAA;QAC7B;YACE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAoB,EAAE,EAAuB;IACjF,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,GAAG,CAAA;IAE9B,IAAI,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,eAAe,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,CAAA;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,OAAO,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAA;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAuB;IACzD,MAAM,MAAM,GAAwC;QAClD,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,KAAK;QACV,aAAa,EAAE,gBAAgB;KAChC,CAAA;IACD,OAAO,MAAM,CAAC,EAAE,CAAC,CAAA;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAuB;IAC1D,MAAM,OAAO,GAAwC;QACnD,GAAG,EAAE,GAAG;QACR,KAAK,EAAE,GAAG;QACV,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,aAAa,EAAE,GAAG;KACnB,CAAA;IACD,OAAO,OAAO,CAAC,EAAE,CAAC,CAAA;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAI3B;IACH,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;IAC3C,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;IAC/C,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAC5C,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;IAC3C,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;IAC3C,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE;CACzD,CAAA;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAA+B;IACpE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEhC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACjC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,eAA6B,EAC7B,SAAmB,EACnB,YAAsB,EACtB,WAA8B;IAE9B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;QACvB,GAAG,SAAS;QACZ,GAAG,YAAY;QACf,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;KACjC,CAAC,CAAA;IACF,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAA;AACzG,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAA+B,EAC/B,MAAmB;IAEnB,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAA;IAExF,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAA;IAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAElC,qCAAqC;IACrC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IACnC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IAEnC,oCAAoC;IACpC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmC,CAAA;IAE1D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACzE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAE/E,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACrB,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAErB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QAChC,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;QAEnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC/C,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;QAEvC,sCAAsC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;YACzB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;gBACpD,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC1E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC1B,CAAC;qBAAM,IAAI,EAAE,CAAC,WAAW,KAAK,OAAO,IAAI,EAAE,CAAC,WAAW,KAAK,eAAe,EAAE,CAAC;oBAC5E,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,YAAY;IACZ,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAA;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAA;IAE5C,uBAAuB;IACvB,MAAM,OAAO,GAAe,EAAE,CAAA;IAC9B,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACzD,MAAM,SAAS,GAAa,EAAE,CAAA;YAC9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;gBAC9B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;YACpC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,MAAM,WAAW,GAAa,EAAE,CAAA;QAChC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;gBAC7B,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,KAAK,mBAAmB,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;YACtF,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACrD,OAAO,CAAC,IAAI,CACV,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,KAAK,mBAAmB,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAC1F,CAAA;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,UAAU,GAAe,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC/C,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,oBAAoB;IACpB,MAAM,SAAS,GAAkB,EAAE,CAAA;IACnC,MAAM,SAAS,GAAgB,EAAE,CAAA;IACjC,MAAM,eAAe,GAA4B,IAAI,GAAG,EAAE,CAAA;IAE1D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAgB,EAAE,CAAA;QAC/B,MAAM,cAAc,GAAe,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QAE5D,IAAI,QAAQ,GAAG,CAAC,CAAA;QAChB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAClC,MAAM,WAAW,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;YAEpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;gBACzB,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;gBAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,CAAA;gBAElD,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,QAAQ;oBACf,KAAK,EAAE,MAAM,CAAC,MAAM;oBACpB,cAAc,EAAE,qBAAqB,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC;iBAChE,CAAC,CAAA;gBAEF,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAA;gBAEjC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACnC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC1D,CAAC;gBACD,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAA;gBAEjD,QAAQ,EAAE,CAAA;YACZ,CAAC;QACH,CAAC;QAED,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEvB,IAAI,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,SAAS,GAAc;gBAC3B,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,CAAC;gBACR,cAAc,EAAE,GAAG;aACpB,CAAA;YAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;gBACzB,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,CAAA;gBACrD,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAA;gBAC1B,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAA;gBAClC,SAAS,CAAC,cAAc,GAAG,qBAAqB,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,CAAA;YAC5E,CAAC;YAED,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,YAAY,GAAgB,EAAE,CAAA;IACpC,IAAI,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;YAC5E,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC,MAAM,CAAA;YAC5C,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;YAEhC,MAAM,YAAY,GAAa,EAAE,CAAA;YACjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBAClC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;gBAC/D,MAAM,WAAW,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;gBACpE,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC7C,CAAC;YAED,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,WAAW,CAAC,CAAA;YACxD,YAAY,CAAC,IAAI,CAAC;gBAChB,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,YAAY,CAAC,MAAM;gBAC1B,cAAc,EAAE,qBAAqB,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC;aAChE,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,cAAc;IACd,MAAM,UAAU,GAAc,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,CAAA;IAC5E,IAAI,aAAa,IAAI,gBAAgB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChE,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QACzB,MAAM,SAAS,GAAa,EAAE,CAAA;QAE9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;YACzB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;gBACpD,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC1E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACrB,CAAC;qBAAM,IAAI,EAAE,CAAC,WAAW,KAAK,OAAO,IAAI,EAAE,CAAC,WAAW,KAAK,eAAe,EAAE,CAAC;oBAC5E,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,CAAA;QACrD,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAA;QAC3B,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAA;QACnC,UAAU,CAAC,cAAc,GAAG,qBAAqB,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,CAAA;IAC7E,CAAC;IAED,OAAO;QACL,OAAO;QACP,UAAU;QACV,IAAI,EAAE,SAAS;QACf,SAAS;QACT,YAAY;QACZ,UAAU;KACX,CAAA;AACH,CAAC;AAED,+CAA+C;AAC/C,MAAM,kBAAkB,GAAG,YAAY,CAAA;AAEvC;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAiB;IAClD,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;IAClC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC/C,OAAO,GAAG,kBAAkB,GAAG,IAAI,EAAE,CAAA;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,MAAmB;IAC9D,IAAI,CAAC;QACH,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAgB,CAAA;QAC1C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAmB,EAAE,mBAA6B;IACvF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAC9C,MAAM,mBAAmB,GAAG;QAC1B,GAAG,MAAM,CAAC,SAAS;QACnB,GAAG,MAAM,CAAC,YAAY;QACtB,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;KACxC,CAAA;IACD,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AACzD,CAAC"}
@@ -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,6 @@
1
+ /**
2
+ * TinyPivot Core - Type Definitions
3
+ * Framework-agnostic types used across Vue and React packages
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=index.js.map
@@ -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"}