exploreda 0.0.6 → 0.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 +144 -0
- package/dist/ExplorEda.cjs +4608 -11288
- package/dist/ExplorEda.cjs.map +1 -1
- package/dist/ExplorEda.css +2282 -1689
- package/dist/ExplorEda.css.map +1 -1
- package/dist/ExplorEda.d.cts +124 -278
- package/dist/ExplorEda.d.ts +124 -278
- package/dist/ExplorEda.js +4479 -11166
- package/dist/ExplorEda.js.map +1 -1
- package/dist/calculations.cjs +18 -0
- package/dist/calculations.cjs.map +1 -0
- package/dist/calculations.d.cts +63 -0
- package/dist/calculations.d.ts +63 -0
- package/dist/calculations.js +3 -0
- package/dist/calculations.js.map +1 -0
- package/dist/charts/bar.cjs +27 -0
- package/dist/charts/bar.cjs.map +1 -0
- package/dist/charts/bar.d.cts +2 -0
- package/dist/charts/bar.d.ts +2 -0
- package/dist/charts/bar.js +18 -0
- package/dist/charts/bar.js.map +1 -0
- package/dist/charts/box-plot.cjs +26 -0
- package/dist/charts/box-plot.cjs.map +1 -0
- package/dist/charts/box-plot.d.cts +2 -0
- package/dist/charts/box-plot.d.ts +2 -0
- package/dist/charts/box-plot.js +17 -0
- package/dist/charts/box-plot.js.map +1 -0
- package/dist/charts/color-legend.cjs +22 -0
- package/dist/charts/color-legend.cjs.map +1 -0
- package/dist/charts/color-legend.d.cts +2 -0
- package/dist/charts/color-legend.d.ts +2 -0
- package/dist/charts/color-legend.js +13 -0
- package/dist/charts/color-legend.js.map +1 -0
- package/dist/charts/data-table.cjs +22 -0
- package/dist/charts/data-table.cjs.map +1 -0
- package/dist/charts/data-table.d.cts +2 -0
- package/dist/charts/data-table.d.ts +2 -0
- package/dist/charts/data-table.js +13 -0
- package/dist/charts/data-table.js.map +1 -0
- package/dist/charts/line.cjs +30 -0
- package/dist/charts/line.cjs.map +1 -0
- package/dist/charts/line.d.cts +2 -0
- package/dist/charts/line.d.ts +2 -0
- package/dist/charts/line.js +17 -0
- package/dist/charts/line.js.map +1 -0
- package/dist/charts/markdown.cjs +16 -0
- package/dist/charts/markdown.cjs.map +1 -0
- package/dist/charts/markdown.css +77 -0
- package/dist/charts/markdown.css.map +1 -0
- package/dist/charts/markdown.d.cts +2 -0
- package/dist/charts/markdown.d.ts +2 -0
- package/dist/charts/markdown.js +7 -0
- package/dist/charts/markdown.js.map +1 -0
- package/dist/charts/pivot-table.cjs +23 -0
- package/dist/charts/pivot-table.cjs.map +1 -0
- package/dist/charts/pivot-table.d.cts +2 -0
- package/dist/charts/pivot-table.d.ts +2 -0
- package/dist/charts/pivot-table.js +14 -0
- package/dist/charts/pivot-table.js.map +1 -0
- package/dist/charts/row.cjs +27 -0
- package/dist/charts/row.cjs.map +1 -0
- package/dist/charts/row.d.cts +6 -0
- package/dist/charts/row.d.ts +6 -0
- package/dist/charts/row.js +18 -0
- package/dist/charts/row.js.map +1 -0
- package/dist/charts/scatter.cjs +24 -0
- package/dist/charts/scatter.cjs.map +1 -0
- package/dist/charts/scatter.d.cts +2 -0
- package/dist/charts/scatter.d.ts +2 -0
- package/dist/charts/scatter.js +15 -0
- package/dist/charts/scatter.js.map +1 -0
- package/dist/charts/summary-table.cjs +19 -0
- package/dist/charts/summary-table.cjs.map +1 -0
- package/dist/charts/summary-table.d.cts +2 -0
- package/dist/charts/summary-table.d.ts +2 -0
- package/dist/charts/summary-table.js +10 -0
- package/dist/charts/summary-table.js.map +1 -0
- package/dist/charts/three-d-scatter.cjs +24 -0
- package/dist/charts/three-d-scatter.cjs.map +1 -0
- package/dist/charts/three-d-scatter.d.cts +6 -0
- package/dist/charts/three-d-scatter.d.ts +6 -0
- package/dist/charts/three-d-scatter.js +15 -0
- package/dist/charts/three-d-scatter.js.map +1 -0
- package/dist/chunk-3PGYFLE3.cjs +499 -0
- package/dist/chunk-3PGYFLE3.cjs.map +1 -0
- package/dist/chunk-4HNDKMWF.js +167 -0
- package/dist/chunk-4HNDKMWF.js.map +1 -0
- package/dist/chunk-4QNENKTV.cjs +1214 -0
- package/dist/chunk-4QNENKTV.cjs.map +1 -0
- package/dist/chunk-54M32JJB.js +132 -0
- package/dist/chunk-54M32JJB.js.map +1 -0
- package/dist/chunk-5B23JVH3.cjs +2238 -0
- package/dist/chunk-5B23JVH3.cjs.map +1 -0
- package/dist/chunk-5LH6NSNL.js +456 -0
- package/dist/chunk-5LH6NSNL.js.map +1 -0
- package/dist/chunk-6DOKKCJ5.cjs +313 -0
- package/dist/chunk-6DOKKCJ5.cjs.map +1 -0
- package/dist/chunk-6HZX5CBT.cjs +1074 -0
- package/dist/chunk-6HZX5CBT.cjs.map +1 -0
- package/dist/chunk-6U5DOIQM.js +1071 -0
- package/dist/chunk-6U5DOIQM.js.map +1 -0
- package/dist/chunk-7GBZIK2R.cjs +80 -0
- package/dist/chunk-7GBZIK2R.cjs.map +1 -0
- package/dist/chunk-7PTJNIOD.js +520 -0
- package/dist/chunk-7PTJNIOD.js.map +1 -0
- package/dist/chunk-AHZYQ7FN.js +319 -0
- package/dist/chunk-AHZYQ7FN.js.map +1 -0
- package/dist/chunk-AOODAOL4.cjs +55 -0
- package/dist/chunk-AOODAOL4.cjs.map +1 -0
- package/dist/chunk-ASKFIRMC.cjs +165 -0
- package/dist/chunk-ASKFIRMC.cjs.map +1 -0
- package/dist/chunk-B7OQUBH4.cjs +171 -0
- package/dist/chunk-B7OQUBH4.cjs.map +1 -0
- package/dist/chunk-BIMEHDLB.js +72 -0
- package/dist/chunk-BIMEHDLB.js.map +1 -0
- package/dist/chunk-C62KHV7S.js +1225 -0
- package/dist/chunk-C62KHV7S.js.map +1 -0
- package/dist/chunk-C7GQT65O.cjs +1119 -0
- package/dist/chunk-C7GQT65O.cjs.map +1 -0
- package/dist/chunk-CGDWDV4Z.js +1211 -0
- package/dist/chunk-CGDWDV4Z.js.map +1 -0
- package/dist/chunk-CJQQFNEY.js +69 -0
- package/dist/chunk-CJQQFNEY.js.map +1 -0
- package/dist/chunk-DHYLSXNR.js +964 -0
- package/dist/chunk-DHYLSXNR.js.map +1 -0
- package/dist/chunk-DKFA4KOJ.cjs +87 -0
- package/dist/chunk-DKFA4KOJ.cjs.map +1 -0
- package/dist/chunk-DS5BS7PP.cjs +357 -0
- package/dist/chunk-DS5BS7PP.cjs.map +1 -0
- package/dist/chunk-EGMFQSGK.js +909 -0
- package/dist/chunk-EGMFQSGK.js.map +1 -0
- package/dist/chunk-EU5EFHO5.cjs +53 -0
- package/dist/chunk-EU5EFHO5.cjs.map +1 -0
- package/dist/chunk-FM46QSDM.js +837 -0
- package/dist/chunk-FM46QSDM.js.map +1 -0
- package/dist/chunk-GV2LRR32.cjs +843 -0
- package/dist/chunk-GV2LRR32.cjs.map +1 -0
- package/dist/chunk-H3XKFSA5.cjs +322 -0
- package/dist/chunk-H3XKFSA5.cjs.map +1 -0
- package/dist/chunk-H5AVMMCE.js +347 -0
- package/dist/chunk-H5AVMMCE.js.map +1 -0
- package/dist/chunk-JDMUN4VK.cjs +986 -0
- package/dist/chunk-JDMUN4VK.cjs.map +1 -0
- package/dist/chunk-JNO7OXCC.js +2171 -0
- package/dist/chunk-JNO7OXCC.js.map +1 -0
- package/dist/chunk-JQMG4ZR7.js +111 -0
- package/dist/chunk-JQMG4ZR7.js.map +1 -0
- package/dist/chunk-L2Q2R43U.cjs +118 -0
- package/dist/chunk-L2Q2R43U.cjs.map +1 -0
- package/dist/chunk-LBTZVERO.js +466 -0
- package/dist/chunk-LBTZVERO.js.map +1 -0
- package/dist/chunk-LUUGGTTK.cjs +1227 -0
- package/dist/chunk-LUUGGTTK.cjs.map +1 -0
- package/dist/chunk-MEEPH7ZC.cjs +911 -0
- package/dist/chunk-MEEPH7ZC.cjs.map +1 -0
- package/dist/chunk-MJPDJ5AS.js +184 -0
- package/dist/chunk-MJPDJ5AS.js.map +1 -0
- package/dist/chunk-MJROUIDZ.cjs +219 -0
- package/dist/chunk-MJROUIDZ.cjs.map +1 -0
- package/dist/chunk-MUWSBYJS.js +528 -0
- package/dist/chunk-MUWSBYJS.js.map +1 -0
- package/dist/chunk-NDF5LCST.js +1088 -0
- package/dist/chunk-NDF5LCST.js.map +1 -0
- package/dist/chunk-NGWTPED4.js +311 -0
- package/dist/chunk-NGWTPED4.js.map +1 -0
- package/dist/chunk-PP4VCONW.js +739 -0
- package/dist/chunk-PP4VCONW.js.map +1 -0
- package/dist/chunk-PRMC2A6P.cjs +488 -0
- package/dist/chunk-PRMC2A6P.cjs.map +1 -0
- package/dist/chunk-PST6UU6S.cjs +742 -0
- package/dist/chunk-PST6UU6S.cjs.map +1 -0
- package/dist/chunk-Q7LK2UWH.js +33 -0
- package/dist/chunk-Q7LK2UWH.js.map +1 -0
- package/dist/chunk-SFV5LZPD.js +162 -0
- package/dist/chunk-SFV5LZPD.js.map +1 -0
- package/dist/chunk-SKXGYJJG.cjs +370 -0
- package/dist/chunk-SKXGYJJG.cjs.map +1 -0
- package/dist/chunk-SWLNKY6R.js +477 -0
- package/dist/chunk-SWLNKY6R.js.map +1 -0
- package/dist/chunk-TGVLNHUB.cjs +483 -0
- package/dist/chunk-TGVLNHUB.cjs.map +1 -0
- package/dist/chunk-TLLRW6S3.js +74 -0
- package/dist/chunk-TLLRW6S3.js.map +1 -0
- package/dist/chunk-TRAIXZ6M.cjs +140 -0
- package/dist/chunk-TRAIXZ6M.cjs.map +1 -0
- package/dist/chunk-U74A5VK5.cjs +74 -0
- package/dist/chunk-U74A5VK5.cjs.map +1 -0
- package/dist/chunk-UAVDLBTA.cjs +74 -0
- package/dist/chunk-UAVDLBTA.cjs.map +1 -0
- package/dist/chunk-UJWS6TRV.js +354 -0
- package/dist/chunk-UJWS6TRV.js.map +1 -0
- package/dist/chunk-UUJMUPB3.cjs +531 -0
- package/dist/chunk-UUJMUPB3.cjs.map +1 -0
- package/dist/chunk-VTKHZIJB.cjs +549 -0
- package/dist/chunk-VTKHZIJB.cjs.map +1 -0
- package/dist/chunk-YXPAWUXO.js +51 -0
- package/dist/chunk-YXPAWUXO.js.map +1 -0
- package/dist/chunk-ZD64SCZB.js +80 -0
- package/dist/chunk-ZD64SCZB.js.map +1 -0
- package/dist/core.cjs +28 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.cts +22 -0
- package/dist/core.d.ts +22 -0
- package/dist/core.js +3 -0
- package/dist/core.js.map +1 -0
- package/dist/dataLayerState-B4XmQjQN.d.cts +258 -0
- package/dist/dataLayerState-B4XmQjQN.d.ts +258 -0
- package/package.json +30 -52
package/README.md
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# explorEDA
|
|
2
|
+
|
|
3
|
+
React components for interactive exploratory data analysis.
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import {
|
|
7
|
+
ExplorEda,
|
|
8
|
+
stringifySavedData,
|
|
9
|
+
type SavedDataStructure,
|
|
10
|
+
} from "exploreda";
|
|
11
|
+
import "exploreda/dist/ExplorEda.css";
|
|
12
|
+
|
|
13
|
+
const data = [{ category: "A", value: 1 }];
|
|
14
|
+
// Paste the copied settings JSON here.
|
|
15
|
+
const savedData: SavedDataStructure = {
|
|
16
|
+
"charts": [],
|
|
17
|
+
"calculations": [],
|
|
18
|
+
"gridSettings": {"columnCount": 1, "rowHeight": 300, "containerPadding": 10, "showBackgroundMarkers": false},
|
|
19
|
+
"metadata": {"name": "Embedded view", "version": 1, "createdAt": "2026-01-01T00:00:00.000Z", "modifiedAt": "2026-01-01T00:00:00.000Z"},
|
|
20
|
+
"colorScales": []
|
|
21
|
+
};
|
|
22
|
+
const handleStateChange = (next: SavedDataStructure) => {
|
|
23
|
+
console.log(stringifySavedData(next));
|
|
24
|
+
// Copy this JSON into source or store it in the host.
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
<ExplorEda
|
|
28
|
+
data={data}
|
|
29
|
+
savedData={savedData}
|
|
30
|
+
onStateChange={handleStateChange}
|
|
31
|
+
/>;
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The package entry point exports `ExplorEda` and the `SavedDataStructure` type.
|
|
35
|
+
The CSS file is available at `exploreda/dist/ExplorEda.css`.
|
|
36
|
+
|
|
37
|
+
`onStateChange` runs after meaningful workspace changes. It does not run on
|
|
38
|
+
initial mount, and replacing `data` or `savedData` does not echo a callback.
|
|
39
|
+
`savedData` is an input for initial or replacement restore, not a controlled
|
|
40
|
+
value; do not feed every callback result back into it. Callback snapshots are
|
|
41
|
+
storage-neutral JSON settings. They include Rows filters, search, sort, column
|
|
42
|
+
order, widths, field settings, and grouped summary definitions, but do not
|
|
43
|
+
include raw data rows.
|
|
44
|
+
|
|
45
|
+
Native settings JSON rejects nonfinite filter values during validation. Draft
|
|
46
|
+
calculations remain session-local. `modifiedAt` records the snapshot time.
|
|
47
|
+
|
|
48
|
+
For a smaller custom integration, import the registry and only the charts you
|
|
49
|
+
need. Registration is explicit, so unused charts and their dependencies stay
|
|
50
|
+
out of the consumer bundle.
|
|
51
|
+
|
|
52
|
+
```tsx
|
|
53
|
+
import { chartRegistry } from "exploreda/core";
|
|
54
|
+
import { barChartDefinition } from "exploreda/charts/bar";
|
|
55
|
+
|
|
56
|
+
chartRegistry.register(barChartDefinition);
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
`data` supplies the rows. `savedData` optionally restores chart, calculation,
|
|
60
|
+
Rows, grid, metadata, color-scale, field-settings, and grouped-summary state.
|
|
61
|
+
Pass new references when either value changes; in-place mutations are not
|
|
62
|
+
observed.
|
|
63
|
+
|
|
64
|
+
React and ReactDOM are peer dependencies.
|
|
65
|
+
|
|
66
|
+
## Browser requirements
|
|
67
|
+
|
|
68
|
+
The package runs in a browser with DOM, Canvas 2D, `ResizeObserver`,
|
|
69
|
+
`matchMedia`, `requestAnimationFrame`, and `URL.createObjectURL` support. The
|
|
70
|
+
3D scatter chart also requires WebGL. Copy actions use the browser Clipboard
|
|
71
|
+
API.
|
|
72
|
+
|
|
73
|
+
explorEDA supports desktop viewports of 1024 CSS pixels or more. Narrow and
|
|
74
|
+
mobile layouts are outside the supported product scope. Hosts should provide a
|
|
75
|
+
desktop-sized workspace instead of depending on the library to adapt dense
|
|
76
|
+
charts and settings to a narrow screen.
|
|
77
|
+
|
|
78
|
+
## Saved data shape
|
|
79
|
+
|
|
80
|
+
`SavedDataStructure` stores primary workspace settings:
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
interface SavedDataStructure {
|
|
84
|
+
charts: SavedChartSettings[];
|
|
85
|
+
calculations: SavedCalculation[];
|
|
86
|
+
gridSettings: GridSettings;
|
|
87
|
+
metadata: ViewMetadata;
|
|
88
|
+
colorScales: SerializedColorScale[];
|
|
89
|
+
rowsSettings?: SavedRowsSettings;
|
|
90
|
+
fieldSettings?: FieldSettingsMap;
|
|
91
|
+
aggregates?: AggregateSpec[];
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
interface SavedCalculation {
|
|
95
|
+
resultColumnName: string;
|
|
96
|
+
expression: string;
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
The `expression` value is formula text. Runtime code parses and validates it
|
|
101
|
+
when it restores the settings. The settings JSON does not store an AST and no
|
|
102
|
+
AST compatibility layer is provided.
|
|
103
|
+
|
|
104
|
+
`fieldSettings` keeps canonical source names separate from display labels and aliases. It
|
|
105
|
+
can store type overrides, null tokens, date input presets, units, currencies,
|
|
106
|
+
formats, and precision. A field inspector previews raw and effective values
|
|
107
|
+
before applying a change.
|
|
108
|
+
Valid conversions apply to runtime values. Failed conversions become missing;
|
|
109
|
+
the original rows remain unchanged.
|
|
110
|
+
|
|
111
|
+
`aggregates` stores named grouped definitions. Each definition uses one group
|
|
112
|
+
field and count, sum, or average. Read-only bar and data-table views can reuse
|
|
113
|
+
the definition by ID and inspect exact source contributors.
|
|
114
|
+
|
|
115
|
+
For a self-contained analysis, use the secondary full bundle:
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
import { parseSavedAnalysis, type SavedAnalysisStructure } from "exploreda";
|
|
119
|
+
|
|
120
|
+
const analysis: SavedAnalysisStructure = parseSavedAnalysis(text);
|
|
121
|
+
// analysis.data contains rows; analysis.settings contains SavedDataStructure.
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Use the full bundle when imported rows must reopen with the analysis. Durable
|
|
125
|
+
storage and named saves remain host responsibilities. The full analysis codec
|
|
126
|
+
preserves `undefined`, `NaN`, `Infinity`, and `-Infinity` raw row values with
|
|
127
|
+
tagged special values.
|
|
128
|
+
|
|
129
|
+
## Calculated fields
|
|
130
|
+
|
|
131
|
+
Use the ƒx markers in charts and tables to inspect formulas and their dependency chains. The editor previews drafts before Apply. Field and function insertion uses the current cursor position.
|
|
132
|
+
|
|
133
|
+
Saved calculation definitions use formula text at the persistence boundary:
|
|
134
|
+
|
|
135
|
+
```ts
|
|
136
|
+
import type { SavedCalculation } from "exploreda";
|
|
137
|
+
|
|
138
|
+
const calculation: SavedCalculation = {
|
|
139
|
+
resultColumnName: "Net sales",
|
|
140
|
+
expression: '["Gross sales"] - ["Discount amount"]',
|
|
141
|
+
};
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
See [the calculation workflow](../../docs/calculation-workflow.md) and the demo's `calculated-orders` example.
|