react-codemirror-editor 0.2.0 → 0.3.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 CHANGED
@@ -1,6 +1,10 @@
1
1
  # React Code Editor
2
2
 
3
- A modern, extensible **CodeMirror 6–based React code editor** featuring first-class TypeScript support, language-aware configuration, optional diagnostics, and search/validation support.
3
+ ![npm](https://img.shields.io/npm/v/react-code-editor)
4
+ ![downloads](https://img.shields.io/npm/dw/react-code-editor)
5
+ ![license](https://img.shields.io/npm/l/react-code-editor)
6
+
7
+ A modern, extensible **CodeMirror 6–based React code editor** featuring first-class TypeScript support, language-aware configuration, optional diagnostics, search, and validation support.
4
8
 
5
9
  This library is designed to scale from a simple embedded editor to a **multi-language, schema-aware editing platform**.
6
10
 
@@ -101,6 +105,7 @@ This keeps the editor **language-agnostic** and flexible.
101
105
  - `findPrev()`
102
106
  - `replace(replacement: string)`
103
107
  - `replaceAll(replacement: string)`
108
+ - `getValidationState()`
104
109
 
105
110
  ### 🧠 Format API (Callback-Based)
106
111
 
@@ -153,9 +158,7 @@ controllerRef.current?.format((code) =>
153
158
  );
154
159
  ```
155
160
 
156
- ---
157
-
158
- ## 📋 Why Callback-Based Formatting?
161
+ ### 📋 Why Callback-Based Formatting?
159
162
 
160
163
  - Keeps core editor **small**
161
164
  - Avoids hard dependency on Prettier
@@ -164,9 +167,7 @@ controllerRef.current?.format((code) =>
164
167
 
165
168
  This is a library-level design decision, not a limitation.
166
169
 
167
- ---
168
-
169
- ## 🔍 Search & Replace
170
+ ### 🔍 Search & Replace
170
171
 
171
172
  The editor includes **search & replace functionality** via a controller API:
172
173
 
@@ -189,27 +190,20 @@ You can pass **search configuration**:
189
190
  />
190
191
  ```
191
192
 
192
- ---
193
-
194
- ## ✅ JSON Validation State
193
+ ### ✅ Validation State
195
194
 
196
- You can track JSON validity and react to changes in real-time via `onValidationChange`:
195
+ ```ts
196
+ const state: {
197
+ is_valid: boolean;
198
+ error_count: number;
199
+ warning_count: number;
200
+ } | null = controllerRef.current?.getValidationState();
197
201
 
198
- ```tsx
199
- <CodeEditor
200
- language="json"
201
- languageOptions={{
202
- json: {
203
- schema: myJsonSchema,
204
- onValidationChange: (isValid) => console.log('Valid:', isValid),
205
- },
206
- }}
207
- />
202
+ if (state) {
203
+ const { is_valid, error_count, warning_count } = state;
204
+ }
208
205
  ```
209
206
 
210
- - `isValid` is `true` if there are no syntax or schema errors
211
- - Useful for enabling/disabling Save buttons or warnings in your UI
212
-
213
207
  ---
214
208
 
215
209
  ## 🌍 Languages
@@ -1,2 +1,5 @@
1
1
  export { jsonDiagnosticsExtension } from './jsonDiagnostics';
2
+ export { safeJsonCompletion } from './safeJsonCompletion';
3
+ export { jsonValidationState, computeValidationState, dispatchValidationState, } from './jsonValidationState';
4
+ export { jsonValidationLinter } from './jsonValidationLinter';
2
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/diagnostics/json/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/diagnostics/json/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACH,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -1 +1,4 @@
1
1
  export { jsonDiagnosticsExtension } from './jsonDiagnostics';
2
+ export { safeJsonCompletion } from './safeJsonCompletion';
3
+ export { jsonValidationState, computeValidationState, dispatchValidationState, } from './jsonValidationState';
4
+ export { jsonValidationLinter } from './jsonValidationLinter';
@@ -1 +1 @@
1
- {"version":3,"file":"jsonDiagnostics.d.ts","sourceRoot":"","sources":["../../../../src/core/diagnostics/json/jsonDiagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAa9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,eAAO,MAAM,wBAAwB,aACxB,gBAAgB,KAC1B,SA4CF,CAAC"}
1
+ {"version":3,"file":"jsonDiagnostics.d.ts","sourceRoot":"","sources":["../../../../src/core/diagnostics/json/jsonDiagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAY9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,eAAO,MAAM,wBAAwB,aACxB,gBAAgB,KAC1B,SA0CF,CAAC"}
@@ -2,14 +2,13 @@ import { hoverTooltip } from '@codemirror/view';
2
2
  import { linter, lintGutter } from '@codemirror/lint';
3
3
  import { autocompletion } from '@codemirror/autocomplete';
4
4
  import { jsonSchemaLinter, jsonSchemaHover, stateExtensions, } from 'codemirror-json-schema';
5
- import { validation } from './jsonValidation';
6
5
  import { jsonLinter } from './jsonLinter';
7
- import { safeJsonCompletion } from './safeJsonCompletion';
6
+ import { safeJsonCompletion, jsonValidationLinter } from './';
8
7
  export const jsonDiagnosticsExtension = (options = {}) => {
9
- const { diagnostics = true, gutter = true, schema, schemaLint = !!schema, hover = !!schema, autocomplete = !!schema, onValidationChange, } = options;
8
+ const { diagnostics = true, gutter = true, schema, schemaLint = !!schema, hover = !!schema, autocomplete = !!schema, } = options;
10
9
  const extensions = [];
11
10
  if (diagnostics) {
12
- extensions.push(linter(validation(jsonLinter, onValidationChange)));
11
+ extensions.push(linter(jsonValidationLinter(jsonLinter)));
13
12
  if (gutter) {
14
13
  extensions.push(lintGutter());
15
14
  }
@@ -17,7 +16,7 @@ export const jsonDiagnosticsExtension = (options = {}) => {
17
16
  if (schema) {
18
17
  extensions.push(stateExtensions(schema));
19
18
  if (schemaLint) {
20
- extensions.push(linter(validation(jsonSchemaLinter(schema), onValidationChange)));
19
+ extensions.push(linter(jsonValidationLinter(jsonSchemaLinter(schema))));
21
20
  }
22
21
  if (hover) {
23
22
  extensions.push(hoverTooltip(jsonSchemaHover(schema)));
@@ -0,0 +1,4 @@
1
+ import { EditorView } from '@codemirror/view';
2
+ import type { Diagnostic } from '@codemirror/lint';
3
+ export declare const jsonValidationLinter: (linterFn: (view: EditorView) => Diagnostic[]) => (view: EditorView) => Diagnostic[];
4
+ //# sourceMappingURL=jsonValidationLinter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonValidationLinter.d.ts","sourceRoot":"","sources":["../../../../src/core/diagnostics/json/jsonValidationLinter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,eAAO,MAAM,oBAAoB,aAClB,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,EAAE,YACtC,UAAU,KAAG,UAAU,EAQ7B,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { dispatchValidationState } from './';
2
+ export const jsonValidationLinter = (linterFn) => (view) => {
3
+ const diagnostics = linterFn(view);
4
+ view.dispatch({
5
+ effects: dispatchValidationState(diagnostics),
6
+ });
7
+ return diagnostics;
8
+ };
@@ -0,0 +1,12 @@
1
+ import { StateEffect, StateField } from '@codemirror/state';
2
+ import type { Diagnostic } from '@codemirror/lint';
3
+ export interface ValidationState {
4
+ is_valid: boolean;
5
+ error_count: number;
6
+ warning_count: number;
7
+ }
8
+ export declare const setValidationState: import("@codemirror/state").StateEffectType<ValidationState>;
9
+ export declare function computeValidationState(diagnostics: readonly Diagnostic[]): ValidationState;
10
+ export declare function dispatchValidationState(diagnostics: readonly Diagnostic[]): StateEffect<ValidationState>;
11
+ export declare const jsonValidationState: StateField<ValidationState>;
12
+ //# sourceMappingURL=jsonValidationState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonValidationState.d.ts","sourceRoot":"","sources":["../../../../src/core/diagnostics/json/jsonValidationState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,kBAAkB,8DAAwC,CAAC;AAExE,wBAAgB,sBAAsB,CAClC,WAAW,EAAE,SAAS,UAAU,EAAE,GACnC,eAAe,CAcjB;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,gCAEzE;AAED,eAAO,MAAM,mBAAmB,6BAgB9B,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { StateEffect, StateField } from '@codemirror/state';
2
+ export const setValidationState = StateEffect.define();
3
+ export function computeValidationState(diagnostics) {
4
+ let error_count = 0;
5
+ let warning_count = 0;
6
+ for (const d of diagnostics) {
7
+ if (d.severity === 'error')
8
+ error_count++;
9
+ else if (d.severity === 'warning')
10
+ warning_count++;
11
+ }
12
+ return {
13
+ is_valid: error_count === 0,
14
+ error_count,
15
+ warning_count,
16
+ };
17
+ }
18
+ export function dispatchValidationState(diagnostics) {
19
+ return setValidationState.of(computeValidationState(diagnostics));
20
+ }
21
+ export const jsonValidationState = StateField.define({
22
+ create() {
23
+ return {
24
+ is_valid: true,
25
+ error_count: 0,
26
+ warning_count: 0,
27
+ };
28
+ },
29
+ update(value, tr) {
30
+ for (const e of tr.effects) {
31
+ if (e.is(setValidationState)) {
32
+ return e.value;
33
+ }
34
+ }
35
+ return value;
36
+ },
37
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"editorController.d.ts","sourceRoot":"","sources":["../../../src/core/editor/editorController.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,sBAAsB,IAAI,gBAAgB,CAyCzD"}
1
+ {"version":3,"file":"editorController.d.ts","sourceRoot":"","sources":["../../../src/core/editor/editorController.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,sBAAsB,IAAI,gBAAgB,CAoDzD"}
@@ -1,4 +1,5 @@
1
1
  import { copyToClipboard, foldAllCode, unfoldAllCode, formatCode, openSearch, closeSearch, replace, replaceAllOccurrences, searchNext, searchPrevious, } from '../extensions';
2
+ import { jsonValidationState } from '../diagnostics/json';
2
3
  export function createEditorController() {
3
4
  let view = null;
4
5
  return {
@@ -38,5 +39,14 @@ export function createEditorController() {
38
39
  replaceAll() {
39
40
  replaceAllOccurrences(view);
40
41
  },
42
+ getValidationState() {
43
+ if (!view)
44
+ return null;
45
+ return (view.state.field(jsonValidationState, false) ?? {
46
+ is_valid: true,
47
+ error_count: 0,
48
+ warning_count: 0,
49
+ });
50
+ },
41
51
  };
42
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"buildExtensions.d.ts","sourceRoot":"","sources":["../../../src/core/languages/buildExtensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK9D,eAAO,MAAM,uBAAuB,aACtB,cAAc,WACf,eAAe,GAAG,SAAS,KACrC,SAAS,EAUX,CAAC"}
1
+ {"version":3,"file":"buildExtensions.d.ts","sourceRoot":"","sources":["../../../src/core/languages/buildExtensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQ9D,eAAO,MAAM,uBAAuB,aACtB,cAAc,WACf,eAAe,GAAG,SAAS,KACrC,SAAS,EAWX,CAAC"}
@@ -1,10 +1,11 @@
1
1
  import { jsonLanguage } from '.';
2
- import { jsonDiagnosticsExtension } from '../diagnostics/json';
2
+ import { jsonDiagnosticsExtension, jsonValidationState, } from '../diagnostics/json';
3
3
  export const buildLanguageExtensions = (language, options) => {
4
4
  switch (language) {
5
5
  case 'json':
6
6
  return [
7
7
  jsonLanguage(),
8
+ jsonValidationState,
8
9
  jsonDiagnosticsExtension(options?.[language] ?? {}),
9
10
  ];
10
11
  default:
@@ -17,6 +17,11 @@ export interface EditorController {
17
17
  searchPrevious(): void;
18
18
  replace(): void;
19
19
  replaceAll(): void;
20
+ getValidationState(): {
21
+ is_valid: boolean;
22
+ error_count: number;
23
+ warning_count: number;
24
+ } | null;
20
25
  }
21
26
  export interface CreateEditorOptions {
22
27
  parent: HTMLElement;
@@ -68,7 +73,6 @@ export interface JsonEditorConfig {
68
73
  schemaLint?: boolean;
69
74
  hover?: boolean;
70
75
  autocomplete?: boolean;
71
- onValidationChange?: (isValid: boolean) => void;
72
76
  }
73
77
  export interface SearchOptions {
74
78
  enabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/types/editor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/types/editor.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,55 +1,63 @@
1
- {
2
- "name": "react-codemirror-editor",
3
- "version": "0.2.0",
4
- "private": false,
5
- "description": "A modular, extensible React code editor built on CodeMirror 6 with first-class JSON support.",
6
- "type": "module",
7
- "main": "dist/index.js",
8
- "module": "dist/index.js",
9
- "types": "dist/index.d.ts",
10
- "files": [
11
- "dist"
12
- ],
13
- "sideEffects": false,
14
- "scripts": {
15
- "build": "tsc",
16
- "lint": "eslint .",
17
- "prepublishOnly": "npm run build"
18
- },
19
- "peerDependencies": {
20
- "react": ">=18",
21
- "react-dom": ">=18"
22
- },
23
- "dependencies": {
24
- "@codemirror/lang-json": "^6.0.2",
25
- "@codemirror/state": "^6.5.3",
26
- "@codemirror/view": "^6.39.8",
27
- "codemirror": "^6.0.2",
28
- "codemirror-json-schema": "^0.8.1"
29
- },
30
- "devDependencies": {
31
- "@eslint/js": "^9.17.0",
32
- "@types/node": "^20.0.0",
33
- "@types/react": "^19.0.0",
34
- "@types/react-dom": "^19.0.0",
35
- "eslint": "^9.17.0",
36
- "eslint-plugin-react-hooks": "^5.0.0",
37
- "eslint-plugin-react-refresh": "^0.4.16",
38
- "globals": "^15.14.0",
39
- "react": "^19.0.0",
40
- "react-dom": "^19.0.0",
41
- "typescript": "~5.7.2",
42
- "typescript-eslint": "^8.18.2"
43
- },
44
- "keywords": [
45
- "react",
46
- "codemirror",
47
- "codemirror6",
48
- "editor",
49
- "code-editor",
50
- "react-editor",
51
- "react-codemirror",
52
- "ide"
53
- ],
54
- "license": "MIT"
55
- }
1
+ {
2
+ "name": "react-codemirror-editor",
3
+ "version": "0.3.0",
4
+ "private": false,
5
+ "description": "A modular, extensible React code editor built on CodeMirror 6 with first-class JSON support.",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "module": "dist/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "sideEffects": false,
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/mihirmistry2/react-code-editor.git"
17
+ },
18
+ "homepage": "https://github.com/mihirmistry2/react-code-editor#readme",
19
+ "bugs": {
20
+ "url": "https://github.com/mihirmistry2/react-code-editor/issues"
21
+ },
22
+ "scripts": {
23
+ "build": "tsc",
24
+ "lint": "eslint .",
25
+ "prepublishOnly": "npm run build"
26
+ },
27
+ "peerDependencies": {
28
+ "react": ">=18",
29
+ "react-dom": ">=18"
30
+ },
31
+ "dependencies": {
32
+ "@codemirror/lang-json": "^6.0.2",
33
+ "@codemirror/state": "^6.5.3",
34
+ "@codemirror/view": "^6.39.8",
35
+ "codemirror": "^6.0.2",
36
+ "codemirror-json-schema": "^0.8.1"
37
+ },
38
+ "devDependencies": {
39
+ "@eslint/js": "^9.17.0",
40
+ "@types/node": "^20.0.0",
41
+ "@types/react": "^19.0.0",
42
+ "@types/react-dom": "^19.0.0",
43
+ "eslint": "^9.17.0",
44
+ "eslint-plugin-react-hooks": "^5.0.0",
45
+ "eslint-plugin-react-refresh": "^0.4.16",
46
+ "globals": "^15.14.0",
47
+ "react": "^19.0.0",
48
+ "react-dom": "^19.0.0",
49
+ "typescript": "~5.7.2",
50
+ "typescript-eslint": "^8.18.2"
51
+ },
52
+ "keywords": [
53
+ "react",
54
+ "codemirror",
55
+ "codemirror6",
56
+ "editor",
57
+ "code-editor",
58
+ "react-editor",
59
+ "react-codemirror",
60
+ "ide"
61
+ ],
62
+ "license": "MIT"
63
+ }
@@ -1,4 +0,0 @@
1
- import { EditorView } from '@codemirror/view';
2
- import { Diagnostic } from '@codemirror/lint';
3
- export declare const validation: (linterFn: (view: EditorView) => Diagnostic[], onValidationChange?: (isValid: boolean) => void) => (view: EditorView) => Diagnostic[];
4
- //# sourceMappingURL=jsonValidation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsonValidation.d.ts","sourceRoot":"","sources":["../../../../src/core/diagnostics/json/jsonValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,UAAU,aAEL,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,EAAE,uBACvB,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,YAE5C,UAAU,KAAG,UAAU,EAS7B,CAAC"}
@@ -1,8 +0,0 @@
1
- export const validation = (linterFn, onValidationChange) => (view) => {
2
- const diagnostics = linterFn(view);
3
- if (onValidationChange) {
4
- const isValid = diagnostics.every((d) => d.severity !== 'error');
5
- onValidationChange(isValid);
6
- }
7
- return diagnostics;
8
- };