@updog/data-editor 0.1.11 → 0.1.12
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/LICENSE +2 -2
- package/README.md +24 -2
- package/index.d.ts +4 -4
- package/index.js +8 -8
- package/package.json +10 -3
package/LICENSE
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Copyright (c) 2026
|
|
1
|
+
Copyright (c) 2026 Updog Software Solutions FZCO. All rights reserved.
|
|
2
2
|
|
|
3
3
|
================================================================================
|
|
4
4
|
UPDOG SDK — COMMERCIAL LICENSE
|
|
@@ -9,7 +9,7 @@ Copyright (c) 2026 Mikhail Kutateladze. All rights reserved.
|
|
|
9
9
|
1. DEFINITIONS
|
|
10
10
|
--------------------------------------------------------------------------------
|
|
11
11
|
|
|
12
|
-
"Licensor"
|
|
12
|
+
"Licensor" Updog Software Solutions FZCO, the copyright holder of the Software.
|
|
13
13
|
|
|
14
14
|
"Software" The Updog SDK, including all source code, compiled artifacts,
|
|
15
15
|
documentation, and associated files distributed as an npm
|
package/README.md
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
# @updog/data-editor
|
|
2
2
|
|
|
3
|
-
Client-side
|
|
3
|
+
Client-side CSV importer and spreadsheet editor SDK for React. Your users import files, match columns to your schema, fix errors, and submit clean data. Edits happen inline, in the browser, at 1M+ rows.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## What is @updog/data-editor
|
|
6
|
+
|
|
7
|
+
@updog/data-editor is a commercial React SDK that embeds a complete data import wizard and spreadsheet editor into your application.
|
|
8
|
+
|
|
9
|
+
- **Import** CSV, Excel (XLSX), TSV, JSON, and XML — column auto-matching, value mapping, multi-source merging, validation
|
|
10
|
+
- **Edit** 1M+ rows with undo/redo, find & replace, copy/paste, fill handle, sorting, filtering, and bulk transforms
|
|
11
|
+
- **Submit** clean data through a single onComplete callback, classified into insert / update / delete
|
|
12
|
+
|
|
13
|
+
Everything runs client-side. Files are parsed, validated, and edited in the user's browser — no upload server, no data residency, no DPA required.
|
|
14
|
+
|
|
15
|
+
> **Not on React?** The same SDK ships as a framework-agnostic Web Component — [`@updog/data-editor-wc`](https://www.npmjs.com/package/@updog/data-editor-wc) — for Vue, Angular, Svelte, or vanilla JS.
|
|
6
16
|
|
|
7
17
|
## Requirements
|
|
8
18
|
|
|
@@ -388,6 +398,18 @@ npm install @updog/data-editor-wc
|
|
|
388
398
|
|
|
389
399
|
See [@updog/data-editor-wc](https://www.npmjs.com/package/@updog/data-editor-wc).
|
|
390
400
|
|
|
401
|
+
## FAQ
|
|
402
|
+
|
|
403
|
+
**Does my user's data leave the browser?** No. Parsing, validation, mapping, and editing all run client-side. Your code controls when (and whether) data is submitted to your own backend.
|
|
404
|
+
|
|
405
|
+
**Is there a row limit?** No hard cap. The grid is engineered for 1M+ rows using canvas rendering and virtual scrolling.
|
|
406
|
+
|
|
407
|
+
**Are there per-import or per-row fees?** No. Pricing is flat per production domain. See [updog.tech/#pricing](https://updog.tech/#pricing).
|
|
408
|
+
|
|
409
|
+
**Can I white-label?** Yes, on every plan including the free tier. Strip all Updog branding via CSS theming.
|
|
410
|
+
|
|
411
|
+
**Which file formats are supported?** CSV, Excel (XLSX), TSV, JSON, and XML on both import and export.
|
|
412
|
+
|
|
391
413
|
## License
|
|
392
414
|
|
|
393
415
|
Commercial — see [LICENSE](./LICENSE) for the full terms of the Updog SDK Commercial License v1.0. Contact `admin@updog.tech` for enterprise licensing. Third-party dependencies are listed in `THIRD_PARTY_NOTICES.txt`.
|
package/index.d.ts
CHANGED
|
@@ -3005,10 +3005,10 @@ type DataEditorCommonProps<TRow extends DataEditorRow = DataEditorRow> = DataEdi
|
|
|
3005
3005
|
/** Your Updog license key. Validated on each open. */
|
|
3006
3006
|
apiKey: string;
|
|
3007
3007
|
/**
|
|
3008
|
-
*
|
|
3009
|
-
*
|
|
3008
|
+
* @internal
|
|
3009
|
+
* Reserved for future server-delegated mode. Not part of the public API.
|
|
3010
3010
|
*/
|
|
3011
|
-
|
|
3011
|
+
__server?: ScaleServerConfig;
|
|
3012
3012
|
/**
|
|
3013
3013
|
* Controls what the editor stores in `localStorage`. Set to `false` to
|
|
3014
3014
|
* disable all local storage usage.
|
|
@@ -3140,4 +3140,4 @@ declare function exportDataEditor<TRow extends DataEditorRow>(params: ExportPara
|
|
|
3140
3140
|
declare function DataEditor<TRow extends DataEditorRow = DataEditorRow>(allProps: DataEditorProps<TRow>): react_jsx_runtime.JSX.Element;
|
|
3141
3141
|
|
|
3142
3142
|
export { DataEditor, downloadExampleFile, exportDataEditor };
|
|
3143
|
-
export type { CellValidator, ChatContext, ChatErrorSummary, ChatResponseChunk, ChatRow, ChatRowStatus, ChunkSourceOptions, DataEditorChat, DataEditorColumn, DataEditorFormat, DataEditorInlineProps, DataEditorLocalStorage, DataEditorModalProps, DataEditorMode, DataEditorProps, DataEditorResult, DataEditorRow, DataEditorSourceResult, DataEditorTranslations, DataEditorVariant, RemoteSource, ResultRow,
|
|
3143
|
+
export type { CellValidator, ChatContext, ChatErrorSummary, ChatResponseChunk, ChatRow, ChatRowStatus, ChunkSourceOptions, DataEditorChat, DataEditorColumn, DataEditorFormat, DataEditorInlineProps, DataEditorLocalStorage, DataEditorModalProps, DataEditorMode, DataEditorProps, DataEditorResult, DataEditorRow, DataEditorSourceResult, DataEditorTranslations, DataEditorVariant, RemoteSource, ResultRow, UpdogError, UpdogErrorCode, ValidationError, ValueMatchInput, ValueMatchOutput };
|
package/index.js
CHANGED
|
@@ -4123,12 +4123,12 @@ var ys = "backend", bs = "manual", xs = class {
|
|
|
4123
4123
|
_finalize(e, t, n, r) {
|
|
4124
4124
|
let i = this._host;
|
|
4125
4125
|
this._validateFields(e, 0, () => {
|
|
4126
|
-
i.setBulkMode(!1)
|
|
4126
|
+
i.setBulkMode(!1);
|
|
4127
4127
|
for (let t of e) if (t.newValues.size === 0 && t.oldValues.size > 0) for (let e of t.oldValues.keys()) {
|
|
4128
4128
|
let n = i.getRowById(e);
|
|
4129
4129
|
n && t.newValues.set(e, n[t.field]);
|
|
4130
4130
|
}
|
|
4131
|
-
if (e.length === 0) {
|
|
4131
|
+
if (i.flushBulkMode(e), i.skipNotify(!1), e.length === 0) {
|
|
4132
4132
|
i.setPhase("idle"), i.notify(), this._activeDeltas = null;
|
|
4133
4133
|
return;
|
|
4134
4134
|
}
|
|
@@ -13018,7 +13018,7 @@ async function Lh(e) {
|
|
|
13018
13018
|
//#endregion
|
|
13019
13019
|
//#region src/components/DataEditor/ConfirmCompleteDialog/index.tsx
|
|
13020
13020
|
var Rh = ({ open: e, onClose: t, onConfirm: n }) => {
|
|
13021
|
-
let { store: r } = X(), { t: i } = q(), { newRowCount: a,
|
|
13021
|
+
let { store: r } = X(), { t: i } = q(), { newRowCount: a, dirtyRowCount: o, deletedRowCount: s, errorCount: c } = Mo(r), l = o - a, u = c > 0;
|
|
13022
13022
|
return /* @__PURE__ */ w(Vi, {
|
|
13023
13023
|
open: e,
|
|
13024
13024
|
onOpenChange: t,
|
|
@@ -13035,9 +13035,9 @@ var Rh = ({ open: e, onClose: t, onConfirm: n }) => {
|
|
|
13035
13035
|
as: "li",
|
|
13036
13036
|
children: i("dataEditor.confirmSubmit.createRows", { count: a })
|
|
13037
13037
|
}),
|
|
13038
|
-
|
|
13038
|
+
l > 0 && /* @__PURE__ */ C(J, {
|
|
13039
13039
|
as: "li",
|
|
13040
|
-
children: i("dataEditor.confirmSubmit.updateRows", { count:
|
|
13040
|
+
children: i("dataEditor.confirmSubmit.updateRows", { count: l })
|
|
13041
13041
|
}),
|
|
13042
13042
|
s > 0 && /* @__PURE__ */ C(J, {
|
|
13043
13043
|
as: "li",
|
|
@@ -13045,7 +13045,7 @@ var Rh = ({ open: e, onClose: t, onConfirm: n }) => {
|
|
|
13045
13045
|
})
|
|
13046
13046
|
]
|
|
13047
13047
|
}),
|
|
13048
|
-
|
|
13048
|
+
u && /* @__PURE__ */ C(ti, {
|
|
13049
13049
|
color: "yellow",
|
|
13050
13050
|
text: i("dataEditor.confirmSubmit.bannerTitle", { count: c })
|
|
13051
13051
|
})
|
|
@@ -25456,9 +25456,9 @@ function RT(e) {
|
|
|
25456
25456
|
});
|
|
25457
25457
|
}
|
|
25458
25458
|
function zT(e) {
|
|
25459
|
-
let t = e.mode ?? "modal", { t: n, rtl: r } = q(), i = r ? "rtl" : "ltr", a = LT(e.localStorage), o = t === "modal" ? e.open : !0, { isValidating: s, isValid: c, errorCode: l } = wT(e.apiKey, t === "modal" ? o : !0, a.licenseGrant), u = e.
|
|
25459
|
+
let t = e.mode ?? "modal", { t: n, rtl: r } = q(), i = r ? "rtl" : "ltr", a = LT(e.localStorage), o = t === "modal" ? e.open : !0, { isValidating: s, isValid: c, errorCode: l } = wT(e.apiKey, t === "modal" ? o : !0, a.licenseGrant), u = e.__server != null, d = PT({
|
|
25460
25460
|
enabled: !s && c && u,
|
|
25461
|
-
url: e.
|
|
25461
|
+
url: e.__server?.url ?? "",
|
|
25462
25462
|
apiKey: e.apiKey,
|
|
25463
25463
|
primaryKey: e.primaryKey,
|
|
25464
25464
|
columns: e.columns
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@updog/data-editor",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.1.12",
|
|
4
|
+
"description": "Client-side CSV importer and spreadsheet editor SDK for React. Import CSV, Excel, JSON, TSV, and XML, match columns, validate, and edit 1M+ rows entirely in the browser.",
|
|
5
5
|
"author": "Mikhail Kutateladze <admin@updog.tech>",
|
|
6
6
|
"homepage": "https://updog.tech",
|
|
7
7
|
"bugs": {
|
|
@@ -50,8 +50,15 @@
|
|
|
50
50
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
51
51
|
},
|
|
52
52
|
"keywords": [
|
|
53
|
+
"csv-importer",
|
|
54
|
+
"csv-import",
|
|
55
|
+
"data-import",
|
|
56
|
+
"data-import-sdk",
|
|
57
|
+
"spreadsheet-editor",
|
|
53
58
|
"react",
|
|
54
|
-
"
|
|
59
|
+
"react-csv",
|
|
60
|
+
"react-csv-importer",
|
|
61
|
+
"client-side",
|
|
55
62
|
"data-editor",
|
|
56
63
|
"csv",
|
|
57
64
|
"xlsx",
|