diff --git a/README.md b/README.md
index 12b3ae42..745232f2 100644
--- a/README.md
+++ b/README.md
@@ -205,6 +205,23 @@ const editor = new JSONEditor({
- `onChangeMode(mode: string)`. Invoked when the mode is changed.
- `onClassName(path: Path, value: any): string | undefined`.
Add a custom class name to specific nodes, based on their path and/or value.
+- `onRenderValue(props: RenderValueProps) : RenderValueConstructor[]`
+
+ _EXPERIMENTAL! This API will most likely change in future versions._
+
+ Customize rendering of the values. By default, `renderValue` is used, which renders a value as an editable div and depending on the value can also render a boolean toggle, a color picker, and a timestamp tag. Multiple components can be rendered alongside each other, like the boolean toggle and color picker being rendered left from the editable div. Built in value renderer components: `EditableValue`, `ReadonlyValue`, `BooleanToggle`, `ColorPicker`, `TimestampTag`, `EnumValue`.
+
+ For JSON Schema enums, there is a value renderer `renderJSONSchemaEnum` which renders enums using the `EnumValue` component. This can be used like:
+
+ ```js
+ import { renderJSONSchemaEnum, renderValue } from 'svelte-jsoneditor'
+
+ function onRenderValue(props) {
+ // use the enum renderer, and fallback on the default renderer
+ return renderJSONSchemaEnum(props, schema, schemaRefs) || renderValue(props)
+ }
+ ```
+
- `onRenderMenu(mode: string, items: Array) : Array | undefined`.
Callback which can be used to make changes to the menu items. New items can
be added, or existing items can be removed or reorganized. When the function
@@ -341,6 +358,24 @@ type QueryLanguageOptions = {
paths?: string[][]
}
}
+
+type RenderValueProps = {
+ path: Path
+ value: JSON
+ readOnly: boolean
+ selection?: Selection
+ isSelected: boolean
+ isEditing: boolean
+ searchResult?: SearchResultItem
+ onPatch: (patch: JSONPatchDocument, newSelection: Selection | null) => void
+ onPasteJson: (pastedJson: { path: Path; contents: JSON }) => void
+ onSelect: (selection: Selection) => void
+}
+
+type RenderValueConstructor = {
+ component: SvelteComponentConstructor
+ props: Object
+}
```
## Develop
diff --git a/package-lock.json b/package-lock.json
index 92bb2a28..705b4587 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,16 +14,16 @@
"ace-builds": "^1.4.13",
"ajv": "^8.8.2",
"classnames": "^2.3.1",
- "diff-sequences": "^27.0.6",
+ "diff-sequences": "^27.4.0",
"immutable-json-patch": "^1.1.2",
"jmespath": "^0.15.0",
"json-source-map": "^0.6.1",
"jsonrepair": "^2.2.1",
"lodash-es": "^4.17.21",
"natural-compare-lite": "^1.4.0",
- "sass": "^1.43.4",
+ "sass": "^1.44.0",
"svelte-awesome": "^2.4.2",
- "svelte-select": "^4.4.5",
+ "svelte-select": "^4.4.6",
"svelte-simple-modal": "^1.1.1",
"vanilla-picker": "^2.12.1"
},
@@ -34,20 +34,20 @@
"@rollup/plugin-json": "4.1.0",
"@rollup/plugin-node-resolve": "13.0.6",
"@rollup/plugin-typescript": "8.3.0",
- "@sveltejs/kit": "1.0.0-next.199",
+ "@sveltejs/kit": "1.0.0-next.201",
"@types/cookie": "0.4.1",
"@types/lodash-es": "4.17.5",
"@types/mocha": "9.0.0",
- "@typescript-eslint/eslint-plugin": "5.4.0",
- "@typescript-eslint/parser": "5.4.0",
+ "@typescript-eslint/eslint-plugin": "5.5.0",
+ "@typescript-eslint/parser": "5.5.0",
"eslint": "8.3.0",
"eslint-config-prettier": "8.3.0",
"eslint-plugin-svelte3": "3.2.1",
"husky": "7.0.4",
"mocha": "9.1.3",
- "prettier": "2.4.1",
+ "prettier": "2.5.0",
"prettier-plugin-svelte": "2.5.0",
- "rollup": "2.59.0",
+ "rollup": "2.60.2",
"rollup-plugin-svelte": "7.1.0",
"rollup-plugin-terser": "7.0.2",
"standard-version": "9.3.2",
@@ -705,9 +705,9 @@
"integrity": "sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw=="
},
"node_modules/@sveltejs/kit": {
- "version": "1.0.0-next.199",
- "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.199.tgz",
- "integrity": "sha512-dJGmXUf5zchMvwrCfQfHOwxXOruMQHlL4DhXU5ZtB5ccZtU9OlQBcJU0xoa/mDrF5zndPRJUuVjz2ivdD+1cPw==",
+ "version": "1.0.0-next.201",
+ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.201.tgz",
+ "integrity": "sha512-WcYexOEPWgDWOk0oOteTU5QwWykdIcOFJig+akeHqwE/jVtPURLZFtTNx0ymUWXN4S+dUXf60KF6HEMv74FHpA==",
"dev": true,
"dependencies": {
"@sveltejs/vite-plugin-svelte": "^1.0.0-next.30",
@@ -877,13 +877,13 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.4.0.tgz",
- "integrity": "sha512-9/yPSBlwzsetCsGEn9j24D8vGQgJkOTr4oMLas/w886ZtzKIs1iyoqFrwsX2fqYEeUwsdBpC21gcjRGo57u0eg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.5.0.tgz",
+ "integrity": "sha512-4bV6fulqbuaO9UMXU0Ia0o6z6if+kmMRW8rMRyfqXj/eGrZZRGedS4n0adeGNnjr8LKAM495hrQ7Tea52UWmQA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/experimental-utils": "5.4.0",
- "@typescript-eslint/scope-manager": "5.4.0",
+ "@typescript-eslint/experimental-utils": "5.5.0",
+ "@typescript-eslint/scope-manager": "5.5.0",
"debug": "^4.3.2",
"functional-red-black-tree": "^1.0.1",
"ignore": "^5.1.8",
@@ -909,15 +909,15 @@
}
},
"node_modules/@typescript-eslint/experimental-utils": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.4.0.tgz",
- "integrity": "sha512-Nz2JDIQUdmIGd6p33A+naQmwfkU5KVTLb/5lTk+tLVTDacZKoGQisj8UCxk7onJcrgjIvr8xWqkYI+DbI3TfXg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.5.0.tgz",
+ "integrity": "sha512-kjWeeVU+4lQ1SLYErRKV5yDXbWDPkpbzTUUlfAUifPYvpX0qZlrcCZ96/6oWxt3QxtK5WVhXz+KsnwW9cIW+3A==",
"dev": true,
"dependencies": {
"@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.4.0",
- "@typescript-eslint/types": "5.4.0",
- "@typescript-eslint/typescript-estree": "5.4.0",
+ "@typescript-eslint/scope-manager": "5.5.0",
+ "@typescript-eslint/types": "5.5.0",
+ "@typescript-eslint/typescript-estree": "5.5.0",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
},
@@ -933,14 +933,14 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.4.0.tgz",
- "integrity": "sha512-JoB41EmxiYpaEsRwpZEYAJ9XQURPFer8hpkIW9GiaspVLX8oqbqNM8P4EP8HOZg96yaALiLEVWllA2E8vwsIKw==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.5.0.tgz",
+ "integrity": "sha512-JsXBU+kgQOAgzUn2jPrLA+Rd0Y1dswOlX3hp8MuRO1hQDs6xgHtbCXEiAu7bz5hyVURxbXcA2draasMbNqrhmg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "5.4.0",
- "@typescript-eslint/types": "5.4.0",
- "@typescript-eslint/typescript-estree": "5.4.0",
+ "@typescript-eslint/scope-manager": "5.5.0",
+ "@typescript-eslint/types": "5.5.0",
+ "@typescript-eslint/typescript-estree": "5.5.0",
"debug": "^4.3.2"
},
"engines": {
@@ -960,13 +960,13 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.4.0.tgz",
- "integrity": "sha512-pRxFjYwoi8R+n+sibjgF9iUiAELU9ihPBtHzocyW8v8D8G8KeQvXTsW7+CBYIyTYsmhtNk50QPGLE3vrvhM5KA==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.5.0.tgz",
+ "integrity": "sha512-0/r656RmRLo7CbN4Mdd+xZyPJ/fPCKhYdU6mnZx+8msAD8nJSP8EyCFkzbd6vNVZzZvWlMYrSNekqGrCBqFQhg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.4.0",
- "@typescript-eslint/visitor-keys": "5.4.0"
+ "@typescript-eslint/types": "5.5.0",
+ "@typescript-eslint/visitor-keys": "5.5.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -977,9 +977,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.4.0.tgz",
- "integrity": "sha512-GjXNpmn+n1LvnttarX+sPD6+S7giO+9LxDIGlRl4wK3a7qMWALOHYuVSZpPTfEIklYjaWuMtfKdeByx0AcaThA==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.5.0.tgz",
+ "integrity": "sha512-OaYTqkW3GnuHxqsxxJ6KypIKd5Uw7bFiQJZRyNi1jbMJnK3Hc/DR4KwB6KJj6PBRkJJoaNwzMNv9vtTk87JhOg==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -990,13 +990,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.4.0.tgz",
- "integrity": "sha512-nhlNoBdhKuwiLMx6GrybPT3SFILm5Gij2YBdPEPFlYNFAXUJWX6QRgvi/lwVoadaQEFsizohs6aFRMqsXI2ewA==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.5.0.tgz",
+ "integrity": "sha512-pVn8btYUiYrjonhMAO0yG8lm7RApzy2L4RC7Td/mC/qFkyf6vRbGyZozoA94+w6D2Y2GRqpMoCWcwx/EUOzyoQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.4.0",
- "@typescript-eslint/visitor-keys": "5.4.0",
+ "@typescript-eslint/types": "5.5.0",
+ "@typescript-eslint/visitor-keys": "5.5.0",
"debug": "^4.3.2",
"globby": "^11.0.4",
"is-glob": "^4.0.3",
@@ -1017,12 +1017,12 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.4.0.tgz",
- "integrity": "sha512-PVbax7MeE7tdLfW5SA0fs8NGVVr+buMPrcj+CWYWPXsZCH8qZ1THufDzbXm1xrZ2b2PA1iENJ0sRq5fuUtvsJg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.5.0.tgz",
+ "integrity": "sha512-4GzJ1kRtsWzHhdM40tv0ZKHNSbkDhF0Woi/TDwVJX6UICwJItvP7ZTXbjTkCdrors7ww0sYe0t+cIKDAJwZ7Kw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.4.0",
+ "@typescript-eslint/types": "5.5.0",
"eslint-visitor-keys": "^3.0.0"
},
"engines": {
@@ -1952,9 +1952,9 @@
}
},
"node_modules/diff-sequences": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz",
- "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==",
+ "version": "27.4.0",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz",
+ "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==",
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
@@ -3289,6 +3289,11 @@
"node": ">= 4"
}
},
+ "node_modules/immutable": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz",
+ "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw=="
+ },
"node_modules/immutable-json-patch": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/immutable-json-patch/-/immutable-json-patch-1.1.2.tgz",
@@ -4359,9 +4364,9 @@
}
},
"node_modules/prettier": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz",
- "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz",
+ "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==",
"dev": true,
"bin": {
"prettier": "bin-prettier.js"
@@ -4722,9 +4727,9 @@
}
},
"node_modules/rollup": {
- "version": "2.59.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.59.0.tgz",
- "integrity": "sha512-l7s90JQhCQ6JyZjKgo7Lq1dKh2RxatOM+Jr6a9F7WbS9WgKbocyUSeLmZl8evAse7y96Ae98L2k1cBOwWD8nHw==",
+ "version": "2.60.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.2.tgz",
+ "integrity": "sha512-1Bgjpq61sPjgoZzuiDSGvbI1tD91giZABgjCQBKM5aYLnzjq52GoDuWVwT/cm/MCxCMPU8gqQvkj8doQ5C8Oqw==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
@@ -4872,11 +4877,12 @@
}
},
"node_modules/sass": {
- "version": "1.43.4",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.4.tgz",
- "integrity": "sha512-/ptG7KE9lxpGSYiXn7Ar+lKOv37xfWsZRtFYal2QHNigyVQDx685VFT/h7ejVr+R8w7H4tmUgtulsKl5YpveOg==",
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.44.0.tgz",
+ "integrity": "sha512-0hLREbHFXGQqls/K8X+koeP+ogFRPF4ZqetVB19b7Cst9Er8cOR0rc6RU7MaI4W1JmUShd1BPgPoeqmmgMMYFw==",
"dependencies": {
- "chokidar": ">=3.0.0 <4.0.0"
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0"
},
"bin": {
"sass": "sass.js"
@@ -5384,9 +5390,9 @@
}
},
"node_modules/svelte-select": {
- "version": "4.4.5",
- "resolved": "https://registry.npmjs.org/svelte-select/-/svelte-select-4.4.5.tgz",
- "integrity": "sha512-TvBA5ZHY8ULaiwCgXGpslf/3iSfGOsyGEFDjIUefSnwD6I+rKwoBKfMRAN34G1oaLD/vUHV1lhUWDhMlomTHjQ=="
+ "version": "4.4.6",
+ "resolved": "https://registry.npmjs.org/svelte-select/-/svelte-select-4.4.6.tgz",
+ "integrity": "sha512-AcWNfakmr8dBFH77MSlTskfrYGYP6BRBv/QpPb+59Tag8OQ6/JBXf0r0S0+U18/1JNXtXHJUMaQqRSLfaOtyIA=="
},
"node_modules/svelte-simple-modal": {
"version": "1.1.1",
@@ -6381,9 +6387,9 @@
"integrity": "sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw=="
},
"@sveltejs/kit": {
- "version": "1.0.0-next.199",
- "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.199.tgz",
- "integrity": "sha512-dJGmXUf5zchMvwrCfQfHOwxXOruMQHlL4DhXU5ZtB5ccZtU9OlQBcJU0xoa/mDrF5zndPRJUuVjz2ivdD+1cPw==",
+ "version": "1.0.0-next.201",
+ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.201.tgz",
+ "integrity": "sha512-WcYexOEPWgDWOk0oOteTU5QwWykdIcOFJig+akeHqwE/jVtPURLZFtTNx0ymUWXN4S+dUXf60KF6HEMv74FHpA==",
"dev": true,
"requires": {
"@sveltejs/vite-plugin-svelte": "^1.0.0-next.30",
@@ -6530,13 +6536,13 @@
}
},
"@typescript-eslint/eslint-plugin": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.4.0.tgz",
- "integrity": "sha512-9/yPSBlwzsetCsGEn9j24D8vGQgJkOTr4oMLas/w886ZtzKIs1iyoqFrwsX2fqYEeUwsdBpC21gcjRGo57u0eg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.5.0.tgz",
+ "integrity": "sha512-4bV6fulqbuaO9UMXU0Ia0o6z6if+kmMRW8rMRyfqXj/eGrZZRGedS4n0adeGNnjr8LKAM495hrQ7Tea52UWmQA==",
"dev": true,
"requires": {
- "@typescript-eslint/experimental-utils": "5.4.0",
- "@typescript-eslint/scope-manager": "5.4.0",
+ "@typescript-eslint/experimental-utils": "5.5.0",
+ "@typescript-eslint/scope-manager": "5.5.0",
"debug": "^4.3.2",
"functional-red-black-tree": "^1.0.1",
"ignore": "^5.1.8",
@@ -6546,55 +6552,55 @@
}
},
"@typescript-eslint/experimental-utils": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.4.0.tgz",
- "integrity": "sha512-Nz2JDIQUdmIGd6p33A+naQmwfkU5KVTLb/5lTk+tLVTDacZKoGQisj8UCxk7onJcrgjIvr8xWqkYI+DbI3TfXg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.5.0.tgz",
+ "integrity": "sha512-kjWeeVU+4lQ1SLYErRKV5yDXbWDPkpbzTUUlfAUifPYvpX0qZlrcCZ96/6oWxt3QxtK5WVhXz+KsnwW9cIW+3A==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.4.0",
- "@typescript-eslint/types": "5.4.0",
- "@typescript-eslint/typescript-estree": "5.4.0",
+ "@typescript-eslint/scope-manager": "5.5.0",
+ "@typescript-eslint/types": "5.5.0",
+ "@typescript-eslint/typescript-estree": "5.5.0",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
}
},
"@typescript-eslint/parser": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.4.0.tgz",
- "integrity": "sha512-JoB41EmxiYpaEsRwpZEYAJ9XQURPFer8hpkIW9GiaspVLX8oqbqNM8P4EP8HOZg96yaALiLEVWllA2E8vwsIKw==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.5.0.tgz",
+ "integrity": "sha512-JsXBU+kgQOAgzUn2jPrLA+Rd0Y1dswOlX3hp8MuRO1hQDs6xgHtbCXEiAu7bz5hyVURxbXcA2draasMbNqrhmg==",
"dev": true,
"requires": {
- "@typescript-eslint/scope-manager": "5.4.0",
- "@typescript-eslint/types": "5.4.0",
- "@typescript-eslint/typescript-estree": "5.4.0",
+ "@typescript-eslint/scope-manager": "5.5.0",
+ "@typescript-eslint/types": "5.5.0",
+ "@typescript-eslint/typescript-estree": "5.5.0",
"debug": "^4.3.2"
}
},
"@typescript-eslint/scope-manager": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.4.0.tgz",
- "integrity": "sha512-pRxFjYwoi8R+n+sibjgF9iUiAELU9ihPBtHzocyW8v8D8G8KeQvXTsW7+CBYIyTYsmhtNk50QPGLE3vrvhM5KA==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.5.0.tgz",
+ "integrity": "sha512-0/r656RmRLo7CbN4Mdd+xZyPJ/fPCKhYdU6mnZx+8msAD8nJSP8EyCFkzbd6vNVZzZvWlMYrSNekqGrCBqFQhg==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.4.0",
- "@typescript-eslint/visitor-keys": "5.4.0"
+ "@typescript-eslint/types": "5.5.0",
+ "@typescript-eslint/visitor-keys": "5.5.0"
}
},
"@typescript-eslint/types": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.4.0.tgz",
- "integrity": "sha512-GjXNpmn+n1LvnttarX+sPD6+S7giO+9LxDIGlRl4wK3a7qMWALOHYuVSZpPTfEIklYjaWuMtfKdeByx0AcaThA==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.5.0.tgz",
+ "integrity": "sha512-OaYTqkW3GnuHxqsxxJ6KypIKd5Uw7bFiQJZRyNi1jbMJnK3Hc/DR4KwB6KJj6PBRkJJoaNwzMNv9vtTk87JhOg==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.4.0.tgz",
- "integrity": "sha512-nhlNoBdhKuwiLMx6GrybPT3SFILm5Gij2YBdPEPFlYNFAXUJWX6QRgvi/lwVoadaQEFsizohs6aFRMqsXI2ewA==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.5.0.tgz",
+ "integrity": "sha512-pVn8btYUiYrjonhMAO0yG8lm7RApzy2L4RC7Td/mC/qFkyf6vRbGyZozoA94+w6D2Y2GRqpMoCWcwx/EUOzyoQ==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.4.0",
- "@typescript-eslint/visitor-keys": "5.4.0",
+ "@typescript-eslint/types": "5.5.0",
+ "@typescript-eslint/visitor-keys": "5.5.0",
"debug": "^4.3.2",
"globby": "^11.0.4",
"is-glob": "^4.0.3",
@@ -6603,12 +6609,12 @@
}
},
"@typescript-eslint/visitor-keys": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.4.0.tgz",
- "integrity": "sha512-PVbax7MeE7tdLfW5SA0fs8NGVVr+buMPrcj+CWYWPXsZCH8qZ1THufDzbXm1xrZ2b2PA1iENJ0sRq5fuUtvsJg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.5.0.tgz",
+ "integrity": "sha512-4GzJ1kRtsWzHhdM40tv0ZKHNSbkDhF0Woi/TDwVJX6UICwJItvP7ZTXbjTkCdrors7ww0sYe0t+cIKDAJwZ7Kw==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.4.0",
+ "@typescript-eslint/types": "5.5.0",
"eslint-visitor-keys": "^3.0.0"
}
},
@@ -7325,9 +7331,9 @@
"dev": true
},
"diff-sequences": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz",
- "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ=="
+ "version": "27.4.0",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz",
+ "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww=="
},
"dir-glob": {
"version": "3.0.1",
@@ -8286,6 +8292,11 @@
"integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==",
"dev": true
},
+ "immutable": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz",
+ "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw=="
+ },
"immutable-json-patch": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/immutable-json-patch/-/immutable-json-patch-1.1.2.tgz",
@@ -9100,9 +9111,9 @@
"dev": true
},
"prettier": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz",
- "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz",
+ "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==",
"dev": true
},
"prettier-plugin-svelte": {
@@ -9355,9 +9366,9 @@
}
},
"rollup": {
- "version": "2.59.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.59.0.tgz",
- "integrity": "sha512-l7s90JQhCQ6JyZjKgo7Lq1dKh2RxatOM+Jr6a9F7WbS9WgKbocyUSeLmZl8evAse7y96Ae98L2k1cBOwWD8nHw==",
+ "version": "2.60.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.2.tgz",
+ "integrity": "sha512-1Bgjpq61sPjgoZzuiDSGvbI1tD91giZABgjCQBKM5aYLnzjq52GoDuWVwT/cm/MCxCMPU8gqQvkj8doQ5C8Oqw==",
"dev": true,
"requires": {
"fsevents": "~2.3.2"
@@ -9461,11 +9472,12 @@
}
},
"sass": {
- "version": "1.43.4",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.4.tgz",
- "integrity": "sha512-/ptG7KE9lxpGSYiXn7Ar+lKOv37xfWsZRtFYal2QHNigyVQDx685VFT/h7ejVr+R8w7H4tmUgtulsKl5YpveOg==",
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.44.0.tgz",
+ "integrity": "sha512-0hLREbHFXGQqls/K8X+koeP+ogFRPF4ZqetVB19b7Cst9Er8cOR0rc6RU7MaI4W1JmUShd1BPgPoeqmmgMMYFw==",
"requires": {
- "chokidar": ">=3.0.0 <4.0.0"
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0"
}
},
"semver": {
@@ -9828,9 +9840,9 @@
}
},
"svelte-select": {
- "version": "4.4.5",
- "resolved": "https://registry.npmjs.org/svelte-select/-/svelte-select-4.4.5.tgz",
- "integrity": "sha512-TvBA5ZHY8ULaiwCgXGpslf/3iSfGOsyGEFDjIUefSnwD6I+rKwoBKfMRAN34G1oaLD/vUHV1lhUWDhMlomTHjQ=="
+ "version": "4.4.6",
+ "resolved": "https://registry.npmjs.org/svelte-select/-/svelte-select-4.4.6.tgz",
+ "integrity": "sha512-AcWNfakmr8dBFH77MSlTskfrYGYP6BRBv/QpPb+59Tag8OQ6/JBXf0r0S0+U18/1JNXtXHJUMaQqRSLfaOtyIA=="
},
"svelte-simple-modal": {
"version": "1.1.1",
diff --git a/package.json b/package.json
index f8d9e972..1644056d 100644
--- a/package.json
+++ b/package.json
@@ -32,16 +32,16 @@
"ace-builds": "^1.4.13",
"ajv": "^8.8.2",
"classnames": "^2.3.1",
- "diff-sequences": "^27.0.6",
+ "diff-sequences": "^27.4.0",
"immutable-json-patch": "^1.1.2",
"jmespath": "^0.15.0",
"json-source-map": "^0.6.1",
"jsonrepair": "^2.2.1",
"lodash-es": "^4.17.21",
"natural-compare-lite": "^1.4.0",
- "sass": "^1.43.4",
+ "sass": "^1.44.0",
"svelte-awesome": "^2.4.2",
- "svelte-select": "^4.4.5",
+ "svelte-select": "^4.4.6",
"svelte-simple-modal": "^1.1.1",
"vanilla-picker": "^2.12.1"
},
@@ -52,20 +52,20 @@
"@rollup/plugin-json": "4.1.0",
"@rollup/plugin-node-resolve": "13.0.6",
"@rollup/plugin-typescript": "8.3.0",
- "@sveltejs/kit": "1.0.0-next.199",
+ "@sveltejs/kit": "1.0.0-next.201",
"@types/cookie": "0.4.1",
"@types/lodash-es": "4.17.5",
"@types/mocha": "9.0.0",
- "@typescript-eslint/eslint-plugin": "5.4.0",
- "@typescript-eslint/parser": "5.4.0",
+ "@typescript-eslint/eslint-plugin": "5.5.0",
+ "@typescript-eslint/parser": "5.5.0",
"eslint": "8.3.0",
"eslint-config-prettier": "8.3.0",
"eslint-plugin-svelte3": "3.2.1",
"husky": "7.0.4",
"mocha": "9.1.3",
- "prettier": "2.4.1",
+ "prettier": "2.5.0",
"prettier-plugin-svelte": "2.5.0",
- "rollup": "2.59.0",
+ "rollup": "2.60.2",
"rollup-plugin-svelte": "7.1.0",
"rollup-plugin-terser": "7.0.2",
"standard-version": "9.3.2",
diff --git a/src/lib/components/JSONEditor.svelte b/src/lib/components/JSONEditor.svelte
index b4f1e866..d573a47e 100644
--- a/src/lib/components/JSONEditor.svelte
+++ b/src/lib/components/JSONEditor.svelte
@@ -11,6 +11,7 @@
import CodeMode from './modes/codemode/CodeMode.svelte'
import TreeMode from './modes/treemode/TreeMode.svelte'
import { javascriptQueryLanguage } from '../plugins/query/javascriptQueryLanguage.js'
+ import { renderValue } from '$lib/plugins/value/renderValue'
// TODO: document how to enable debugging in the readme: localStorage.debug="jsoneditor:*", then reload
const debug = createDebug('jsoneditor:Main')
@@ -46,6 +47,9 @@
/** @type {((content: Content, previousContent: Content, patchResult: JSONPatchResult | null) => void) | null} */
export let onChange = null
+ /** @type {(props: RenderValueProps) => RenderValueConstructor[]} */
+ export let onRenderValue = renderValue
+
export let onClassName = () => {
// no op by default
}
@@ -297,7 +301,6 @@
{readOnly}
{indentation}
{mainMenuBar}
- {navigationBar}
{validator}
{queryLanguages}
{queryLanguageId}
@@ -325,6 +328,7 @@
{onError}
onChange={handleChange}
onRequestRepair={handleRequestRepair}
+ {onRenderValue}
{onClassName}
onFocus={handleFocus}
onBlur={handleBlur}
diff --git a/src/lib/components/modes/treemode/value/EditableDiv.scss b/src/lib/components/controls/EditableDiv.scss
similarity index 89%
rename from src/lib/components/modes/treemode/value/EditableDiv.scss
rename to src/lib/components/controls/EditableDiv.scss
index 1ee3070b..381e4fdd 100644
--- a/src/lib/components/modes/treemode/value/EditableDiv.scss
+++ b/src/lib/components/controls/EditableDiv.scss
@@ -1,5 +1,5 @@
-@import '../../../../styles';
-@import '../shared.scss';
+@import '../../styles';
+@import './EditableDivShared';
// for key and value
div.jse-editable-div {
@@ -11,6 +11,7 @@ div.jse-editable-div {
outline: none;
border-radius: 1px;
vertical-align: top;
+ overflow-wrap: anywhere;
&[contenteditable='true'] {
outline: 2px solid $edit-border-color;
diff --git a/src/lib/components/modes/treemode/value/EditableDiv.svelte b/src/lib/components/controls/EditableDiv.svelte
similarity index 94%
rename from src/lib/components/modes/treemode/value/EditableDiv.svelte
rename to src/lib/components/controls/EditableDiv.svelte
index dba57b38..ff3f718b 100644
--- a/src/lib/components/modes/treemode/value/EditableDiv.svelte
+++ b/src/lib/components/controls/EditableDiv.svelte
@@ -4,10 +4,10 @@
import { onDestroy, onMount } from 'svelte'
import { getPlainText, setCursorToEnd, setPlainText } from '$lib/utils/domUtils'
import { keyComboFromEvent } from '$lib/utils/keyBindings'
- import { createDebug } from '../../../../utils/debug'
+ import { createDebug } from '$lib/utils/debug'
import { noop } from 'lodash-es'
- const debug = createDebug('jsoneditor:ValueEditor')
+ const debug = createDebug('jsoneditor:EditableDiv')
export let value
export let onChange
diff --git a/src/lib/components/modes/treemode/shared.scss b/src/lib/components/controls/EditableDivShared.scss
similarity index 93%
rename from src/lib/components/modes/treemode/shared.scss
rename to src/lib/components/controls/EditableDivShared.scss
index 982f96f2..f4141f7b 100644
--- a/src/lib/components/modes/treemode/shared.scss
+++ b/src/lib/components/controls/EditableDivShared.scss
@@ -1,4 +1,4 @@
-@import '../../../styles';
+@import '../../styles';
.value {
&.string {
diff --git a/src/lib/components/modals/Header.scss b/src/lib/components/modals/Header.scss
index 537cd3de..5dd81129 100644
--- a/src/lib/components/modals/Header.scss
+++ b/src/lib/components/modals/Header.scss
@@ -11,8 +11,7 @@
vertical-align: middle;
}
- button.config,
- button.close {
+ button {
border: none;
background: transparent;
min-width: 32px;
diff --git a/src/lib/components/modes/treemode/JSONKey.scss b/src/lib/components/modes/treemode/JSONKey.scss
index abd91072..b4d2fc97 100644
--- a/src/lib/components/modes/treemode/JSONKey.scss
+++ b/src/lib/components/modes/treemode/JSONKey.scss
@@ -1,5 +1,4 @@
@import '../../../styles';
-@import 'shared';
.key {
display: inline-block;
diff --git a/src/lib/components/modes/treemode/JSONKey.svelte b/src/lib/components/modes/treemode/JSONKey.svelte
index 1e1922d9..6f930ccf 100644
--- a/src/lib/components/modes/treemode/JSONKey.svelte
+++ b/src/lib/components/modes/treemode/JSONKey.svelte
@@ -2,10 +2,10 @@
-{#if editValue}
-