@fieldia/code 0.14.0 → 0.15.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/package.json +3 -3
- package/src/lib/code.js +69 -8
- package/src/lib/code.js.map +1 -1
- package/src/lib/code.mjs +72 -11
- package/src/lib/code.mjs.map +1 -1
- package/src/lib/palette.d.mts +6 -6
- package/src/lib/palette.d.ts +6 -6
- package/src/lib/palette.js +6 -3
- package/src/lib/palette.js.map +1 -1
- package/src/lib/palette.mjs +6 -3
- package/src/lib/palette.mjs.map +1 -1
- package/src/lib/styles.js +5 -1
- package/src/lib/styles.js.map +1 -1
- package/src/lib/styles.mjs +5 -1
- package/src/lib/styles.mjs.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fieldia/code",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Fieldia fields in a code editor: JSON, and text in 44 languages from Python to SQL. CodeMirror 6, each grammar loaded only when a field uses it.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://fieldia.dev",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"@codemirror/lint": "^6.9.7",
|
|
42
42
|
"@codemirror/state": "^6.7.6",
|
|
43
43
|
"@codemirror/view": "^6.43.13",
|
|
44
|
-
"@fieldia/core": "0.
|
|
45
|
-
"@fieldia/widgets": "0.
|
|
44
|
+
"@fieldia/core": "0.15.0",
|
|
45
|
+
"@fieldia/widgets": "0.15.0",
|
|
46
46
|
"@lezer/highlight": "^1.2.5",
|
|
47
47
|
"tslib": "^2.8.1"
|
|
48
48
|
},
|
package/src/lib/code.js
CHANGED
|
@@ -31,6 +31,32 @@ function read(text) {
|
|
|
31
31
|
return undefined;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
+
/** Where the JSON went wrong, marked: its line shaded, the character that cannot be there underlined. Null takes the marks away. */
|
|
35
|
+
const markProblem = state_1.StateEffect.define();
|
|
36
|
+
const problemMarks = state_1.StateField.define({
|
|
37
|
+
create: () => view_1.Decoration.none,
|
|
38
|
+
update(marks, tr) {
|
|
39
|
+
let next = marks.map(tr.changes);
|
|
40
|
+
for (const effect of tr.effects) {
|
|
41
|
+
if (!effect.is(markProblem))
|
|
42
|
+
continue;
|
|
43
|
+
if (effect.value === null) {
|
|
44
|
+
next = view_1.Decoration.none;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const at = Math.min(effect.value, tr.state.doc.length);
|
|
48
|
+
const line = tr.state.doc.lineAt(at);
|
|
49
|
+
const ranges = [view_1.Decoration.line({ class: 'fd-code-bad-line' }).range(line.from)];
|
|
50
|
+
if (at < line.to)
|
|
51
|
+
ranges.push(view_1.Decoration.mark({ class: 'fd-code-bad-spot' }).range(at, at + 1));
|
|
52
|
+
next = view_1.Decoration.set(ranges, true);
|
|
53
|
+
}
|
|
54
|
+
return next;
|
|
55
|
+
},
|
|
56
|
+
provide: (field) => view_1.EditorView.decorations.from(field),
|
|
57
|
+
});
|
|
58
|
+
/** How long typing pauses before a problem is said: not at every key of a word half typed. */
|
|
59
|
+
const SETTLE_MS = 500;
|
|
34
60
|
const codeWidget = ({ form, name, id, document, labels = widgets_1.WIDGET_LABELS.en }) => {
|
|
35
61
|
(0, styles_1.installCodeStyles)(document);
|
|
36
62
|
const element = document.createElement('div');
|
|
@@ -39,9 +65,16 @@ const codeWidget = ({ form, name, id, document, labels = widgets_1.WIDGET_LABELS
|
|
|
39
65
|
element.dir = 'ltr';
|
|
40
66
|
const error = document.createElement('div');
|
|
41
67
|
error.className = 'fd-error fd-code-error';
|
|
68
|
+
error.id = `${id}-json-problem`;
|
|
69
|
+
// In the page's language, though the code above it reads left to right: an Arabic message reads right to left.
|
|
70
|
+
error.dir = 'auto';
|
|
42
71
|
error.setAttribute('role', 'alert');
|
|
43
72
|
error.textContent = labels.invalidJson;
|
|
44
73
|
error.hidden = true;
|
|
74
|
+
/** The field's own help and error, from the form. */
|
|
75
|
+
let described = '';
|
|
76
|
+
let invalidByForm = false;
|
|
77
|
+
let saying;
|
|
45
78
|
const editable = new state_1.Compartment();
|
|
46
79
|
/** What the form holds, as last written or shown: an echo of it is not a change. */
|
|
47
80
|
let known = JSON.stringify(form.getState().values[name] ?? null);
|
|
@@ -58,6 +91,7 @@ const codeWidget = ({ form, name, id, document, labels = widgets_1.WIDGET_LABELS
|
|
|
58
91
|
// The code colours, light or dark with the page: CodeMirror's own are for light pages only.
|
|
59
92
|
(0, language_1.syntaxHighlighting)(palette_1.codeHighlightStyle),
|
|
60
93
|
(0, lang_json_1.json)(),
|
|
94
|
+
problemMarks,
|
|
61
95
|
view_1.keymap.of([...commands_1.defaultKeymap, ...commands_1.historyKeymap]),
|
|
62
96
|
editable.of([view_1.EditorView.editable.of(true), state_1.EditorState.readOnly.of(false)]),
|
|
63
97
|
// Named by the field's label, like every other field.
|
|
@@ -65,12 +99,15 @@ const codeWidget = ({ form, name, id, document, labels = widgets_1.WIDGET_LABELS
|
|
|
65
99
|
view_1.EditorView.updateListener.of((update) => {
|
|
66
100
|
if (!update.docChanged || writing)
|
|
67
101
|
return;
|
|
68
|
-
const
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
102
|
+
const text = update.state.doc.toString();
|
|
103
|
+
const parsed = read(text);
|
|
104
|
+
clearTimeout(saying);
|
|
105
|
+
if (parsed === undefined) {
|
|
106
|
+
// Said, and marked where it breaks, once typing pauses.
|
|
107
|
+
saying = setTimeout(() => say((0, widgets_1.jsonProblem)(text)), SETTLE_MS);
|
|
73
108
|
return;
|
|
109
|
+
}
|
|
110
|
+
queueMicrotask(() => say(null));
|
|
74
111
|
known = JSON.stringify(parsed);
|
|
75
112
|
form.setValue(name, parsed);
|
|
76
113
|
}),
|
|
@@ -78,14 +115,38 @@ const codeWidget = ({ form, name, id, document, labels = widgets_1.WIDGET_LABELS
|
|
|
78
115
|
}),
|
|
79
116
|
});
|
|
80
117
|
element.append(error);
|
|
118
|
+
/** Says where the JSON goes wrong, or that nothing does: under the editor, in it, and to assistive technology. */
|
|
119
|
+
function say(problem) {
|
|
120
|
+
error.hidden = !problem;
|
|
121
|
+
if (problem)
|
|
122
|
+
error.textContent = labels.invalidJsonAt.replace('{line}', String(problem.line)).replace('{column}', String(problem.column));
|
|
123
|
+
view.dispatch({ effects: markProblem.of(problem ? problem.offset : null) });
|
|
124
|
+
describe();
|
|
125
|
+
}
|
|
126
|
+
function describe() {
|
|
127
|
+
const content = view.contentDOM;
|
|
128
|
+
content.setAttribute('aria-invalid', String(invalidByForm || !error.hidden));
|
|
129
|
+
const ids = [described, error.hidden ? '' : error.id].filter(Boolean).join(' ');
|
|
130
|
+
if (ids)
|
|
131
|
+
content.setAttribute('aria-describedby', ids);
|
|
132
|
+
else
|
|
133
|
+
content.removeAttribute('aria-describedby');
|
|
134
|
+
}
|
|
81
135
|
return {
|
|
82
136
|
element,
|
|
83
137
|
focus: () => view.focus(),
|
|
84
|
-
destroy: () =>
|
|
138
|
+
destroy: () => {
|
|
139
|
+
clearTimeout(saying);
|
|
140
|
+
view.destroy();
|
|
141
|
+
},
|
|
85
142
|
update(state) {
|
|
86
143
|
view.dispatch({
|
|
87
144
|
effects: editable.reconfigure([view_1.EditorView.editable.of(!state.readonly), state_1.EditorState.readOnly.of(state.readonly)]),
|
|
88
145
|
});
|
|
146
|
+
described = state.describedBy ?? '';
|
|
147
|
+
invalidByForm = state.invalid;
|
|
148
|
+
view.contentDOM.setAttribute('aria-required', String(state.required));
|
|
149
|
+
describe();
|
|
89
150
|
// A value from elsewhere (loaded, discarded) replaces the text; the echo of what was typed does not.
|
|
90
151
|
const incoming = JSON.stringify(state.value ?? null);
|
|
91
152
|
if (incoming === known)
|
|
@@ -94,8 +155,8 @@ const codeWidget = ({ form, name, id, document, labels = widgets_1.WIDGET_LABELS
|
|
|
94
155
|
writing = true;
|
|
95
156
|
view.dispatch({ changes: { from: 0, to: view.state.doc.length, insert: show(state.value) } });
|
|
96
157
|
writing = false;
|
|
97
|
-
|
|
98
|
-
|
|
158
|
+
clearTimeout(saying);
|
|
159
|
+
say(null);
|
|
99
160
|
},
|
|
100
161
|
};
|
|
101
162
|
};
|
package/src/lib/code.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code.js","sourceRoot":"","sources":["../../../../../libs/code/src/lib/code.ts"],"names":[],"mappings":";;;AAAA,mDAA6E;AAC7E,qDAA6C;AAC7C,mDAA0F;AAC1F,
|
|
1
|
+
{"version":3,"file":"code.js","sourceRoot":"","sources":["../../../../../libs/code/src/lib/code.ts"],"names":[],"mappings":"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"}
|
package/src/lib/code.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { defaultKeymap, history, historyKeymap } from '@codemirror/commands';
|
|
2
2
|
import { json } from '@codemirror/lang-json';
|
|
3
3
|
import { bracketMatching, indentOnInput, syntaxHighlighting } from '@codemirror/language';
|
|
4
|
-
import { Compartment, EditorState } from '@codemirror/state';
|
|
5
|
-
import { EditorView, keymap, lineNumbers } from '@codemirror/view';
|
|
6
|
-
import { WIDGET_LABELS } from '@fieldia/widgets';
|
|
4
|
+
import { Compartment, EditorState, StateEffect, StateField } from '@codemirror/state';
|
|
5
|
+
import { Decoration, EditorView, keymap, lineNumbers } from '@codemirror/view';
|
|
6
|
+
import { jsonProblem, WIDGET_LABELS } from '@fieldia/widgets';
|
|
7
7
|
import { codeHighlightStyle } from './palette.mjs';
|
|
8
8
|
import { installCodeStyles } from './styles.mjs';
|
|
9
9
|
import { textCodeWidget } from './text-code.mjs';
|
|
@@ -27,6 +27,32 @@ function read(text) {
|
|
|
27
27
|
return undefined;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
+
/** Where the JSON went wrong, marked: its line shaded, the character that cannot be there underlined. Null takes the marks away. */
|
|
31
|
+
const markProblem = StateEffect.define();
|
|
32
|
+
const problemMarks = StateField.define({
|
|
33
|
+
create: () => Decoration.none,
|
|
34
|
+
update(marks, tr) {
|
|
35
|
+
let next = marks.map(tr.changes);
|
|
36
|
+
for (const effect of tr.effects) {
|
|
37
|
+
if (!effect.is(markProblem))
|
|
38
|
+
continue;
|
|
39
|
+
if (effect.value === null) {
|
|
40
|
+
next = Decoration.none;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const at = Math.min(effect.value, tr.state.doc.length);
|
|
44
|
+
const line = tr.state.doc.lineAt(at);
|
|
45
|
+
const ranges = [Decoration.line({ class: 'fd-code-bad-line' }).range(line.from)];
|
|
46
|
+
if (at < line.to)
|
|
47
|
+
ranges.push(Decoration.mark({ class: 'fd-code-bad-spot' }).range(at, at + 1));
|
|
48
|
+
next = Decoration.set(ranges, true);
|
|
49
|
+
}
|
|
50
|
+
return next;
|
|
51
|
+
},
|
|
52
|
+
provide: (field) => EditorView.decorations.from(field),
|
|
53
|
+
});
|
|
54
|
+
/** How long typing pauses before a problem is said: not at every key of a word half typed. */
|
|
55
|
+
const SETTLE_MS = 500;
|
|
30
56
|
export const codeWidget = ({ form, name, id, document, labels = WIDGET_LABELS.en }) => {
|
|
31
57
|
installCodeStyles(document);
|
|
32
58
|
const element = document.createElement('div');
|
|
@@ -35,9 +61,16 @@ export const codeWidget = ({ form, name, id, document, labels = WIDGET_LABELS.en
|
|
|
35
61
|
element.dir = 'ltr';
|
|
36
62
|
const error = document.createElement('div');
|
|
37
63
|
error.className = 'fd-error fd-code-error';
|
|
64
|
+
error.id = `${id}-json-problem`;
|
|
65
|
+
// In the page's language, though the code above it reads left to right: an Arabic message reads right to left.
|
|
66
|
+
error.dir = 'auto';
|
|
38
67
|
error.setAttribute('role', 'alert');
|
|
39
68
|
error.textContent = labels.invalidJson;
|
|
40
69
|
error.hidden = true;
|
|
70
|
+
/** The field's own help and error, from the form. */
|
|
71
|
+
let described = '';
|
|
72
|
+
let invalidByForm = false;
|
|
73
|
+
let saying;
|
|
41
74
|
const editable = new Compartment();
|
|
42
75
|
/** What the form holds, as last written or shown: an echo of it is not a change. */
|
|
43
76
|
let known = JSON.stringify(form.getState().values[name] ?? null);
|
|
@@ -54,6 +87,7 @@ export const codeWidget = ({ form, name, id, document, labels = WIDGET_LABELS.en
|
|
|
54
87
|
// The code colours, light or dark with the page: CodeMirror's own are for light pages only.
|
|
55
88
|
syntaxHighlighting(codeHighlightStyle),
|
|
56
89
|
json(),
|
|
90
|
+
problemMarks,
|
|
57
91
|
keymap.of([...defaultKeymap, ...historyKeymap]),
|
|
58
92
|
editable.of([EditorView.editable.of(true), EditorState.readOnly.of(false)]),
|
|
59
93
|
// Named by the field's label, like every other field.
|
|
@@ -61,12 +95,15 @@ export const codeWidget = ({ form, name, id, document, labels = WIDGET_LABELS.en
|
|
|
61
95
|
EditorView.updateListener.of((update) => {
|
|
62
96
|
if (!update.docChanged || writing)
|
|
63
97
|
return;
|
|
64
|
-
const
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
98
|
+
const text = update.state.doc.toString();
|
|
99
|
+
const parsed = read(text);
|
|
100
|
+
clearTimeout(saying);
|
|
101
|
+
if (parsed === undefined) {
|
|
102
|
+
// Said, and marked where it breaks, once typing pauses.
|
|
103
|
+
saying = setTimeout(() => say(jsonProblem(text)), SETTLE_MS);
|
|
69
104
|
return;
|
|
105
|
+
}
|
|
106
|
+
queueMicrotask(() => say(null));
|
|
70
107
|
known = JSON.stringify(parsed);
|
|
71
108
|
form.setValue(name, parsed);
|
|
72
109
|
}),
|
|
@@ -74,14 +111,38 @@ export const codeWidget = ({ form, name, id, document, labels = WIDGET_LABELS.en
|
|
|
74
111
|
}),
|
|
75
112
|
});
|
|
76
113
|
element.append(error);
|
|
114
|
+
/** Says where the JSON goes wrong, or that nothing does: under the editor, in it, and to assistive technology. */
|
|
115
|
+
function say(problem) {
|
|
116
|
+
error.hidden = !problem;
|
|
117
|
+
if (problem)
|
|
118
|
+
error.textContent = labels.invalidJsonAt.replace('{line}', String(problem.line)).replace('{column}', String(problem.column));
|
|
119
|
+
view.dispatch({ effects: markProblem.of(problem ? problem.offset : null) });
|
|
120
|
+
describe();
|
|
121
|
+
}
|
|
122
|
+
function describe() {
|
|
123
|
+
const content = view.contentDOM;
|
|
124
|
+
content.setAttribute('aria-invalid', String(invalidByForm || !error.hidden));
|
|
125
|
+
const ids = [described, error.hidden ? '' : error.id].filter(Boolean).join(' ');
|
|
126
|
+
if (ids)
|
|
127
|
+
content.setAttribute('aria-describedby', ids);
|
|
128
|
+
else
|
|
129
|
+
content.removeAttribute('aria-describedby');
|
|
130
|
+
}
|
|
77
131
|
return {
|
|
78
132
|
element,
|
|
79
133
|
focus: () => view.focus(),
|
|
80
|
-
destroy: () =>
|
|
134
|
+
destroy: () => {
|
|
135
|
+
clearTimeout(saying);
|
|
136
|
+
view.destroy();
|
|
137
|
+
},
|
|
81
138
|
update(state) {
|
|
82
139
|
view.dispatch({
|
|
83
140
|
effects: editable.reconfigure([EditorView.editable.of(!state.readonly), EditorState.readOnly.of(state.readonly)]),
|
|
84
141
|
});
|
|
142
|
+
described = state.describedBy ?? '';
|
|
143
|
+
invalidByForm = state.invalid;
|
|
144
|
+
view.contentDOM.setAttribute('aria-required', String(state.required));
|
|
145
|
+
describe();
|
|
85
146
|
// A value from elsewhere (loaded, discarded) replaces the text; the echo of what was typed does not.
|
|
86
147
|
const incoming = JSON.stringify(state.value ?? null);
|
|
87
148
|
if (incoming === known)
|
|
@@ -90,8 +151,8 @@ export const codeWidget = ({ form, name, id, document, labels = WIDGET_LABELS.en
|
|
|
90
151
|
writing = true;
|
|
91
152
|
view.dispatch({ changes: { from: 0, to: view.state.doc.length, insert: show(state.value) } });
|
|
92
153
|
writing = false;
|
|
93
|
-
|
|
94
|
-
|
|
154
|
+
clearTimeout(saying);
|
|
155
|
+
say(null);
|
|
95
156
|
},
|
|
96
157
|
};
|
|
97
158
|
};
|
package/src/lib/code.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code.mjs","sourceRoot":"","sources":["../../../../../libs/code/src/lib/code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"code.mjs","sourceRoot":"","sources":["../../../../../libs/code/src/lib/code.ts"],"names":[],"mappings":"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"}
|
package/src/lib/palette.d.mts
CHANGED
|
@@ -13,20 +13,20 @@ export declare const CODE_COLOURS: {
|
|
|
13
13
|
readonly light: {
|
|
14
14
|
readonly keyword: "#cf222e";
|
|
15
15
|
readonly string: "#0a3069";
|
|
16
|
-
readonly literal: "#
|
|
16
|
+
readonly literal: "#953800";
|
|
17
17
|
readonly function: "#6639ba";
|
|
18
|
-
readonly type: "#
|
|
18
|
+
readonly type: "#8250df";
|
|
19
19
|
readonly tag: "#116329";
|
|
20
|
-
readonly property: "#
|
|
20
|
+
readonly property: "#116329";
|
|
21
21
|
};
|
|
22
22
|
readonly dark: {
|
|
23
23
|
readonly keyword: "#ff7b72";
|
|
24
24
|
readonly string: "#a5d6ff";
|
|
25
|
-
readonly literal: "#
|
|
25
|
+
readonly literal: "#ffa657";
|
|
26
26
|
readonly function: "#d2a8ff";
|
|
27
|
-
readonly type: "#
|
|
27
|
+
readonly type: "#f2cc60";
|
|
28
28
|
readonly tag: "#7ee787";
|
|
29
|
-
readonly property: "#
|
|
29
|
+
readonly property: "#7ee787";
|
|
30
30
|
};
|
|
31
31
|
};
|
|
32
32
|
export type CodeRole = keyof (typeof CODE_COLOURS)['light'];
|
package/src/lib/palette.d.ts
CHANGED
|
@@ -13,20 +13,20 @@ export declare const CODE_COLOURS: {
|
|
|
13
13
|
readonly light: {
|
|
14
14
|
readonly keyword: "#cf222e";
|
|
15
15
|
readonly string: "#0a3069";
|
|
16
|
-
readonly literal: "#
|
|
16
|
+
readonly literal: "#953800";
|
|
17
17
|
readonly function: "#6639ba";
|
|
18
|
-
readonly type: "#
|
|
18
|
+
readonly type: "#8250df";
|
|
19
19
|
readonly tag: "#116329";
|
|
20
|
-
readonly property: "#
|
|
20
|
+
readonly property: "#116329";
|
|
21
21
|
};
|
|
22
22
|
readonly dark: {
|
|
23
23
|
readonly keyword: "#ff7b72";
|
|
24
24
|
readonly string: "#a5d6ff";
|
|
25
|
-
readonly literal: "#
|
|
25
|
+
readonly literal: "#ffa657";
|
|
26
26
|
readonly function: "#d2a8ff";
|
|
27
|
-
readonly type: "#
|
|
27
|
+
readonly type: "#f2cc60";
|
|
28
28
|
readonly tag: "#7ee787";
|
|
29
|
-
readonly property: "#
|
|
29
|
+
readonly property: "#7ee787";
|
|
30
30
|
};
|
|
31
31
|
};
|
|
32
32
|
export type CodeRole = keyof (typeof CODE_COLOURS)['light'];
|
package/src/lib/palette.js
CHANGED
|
@@ -14,8 +14,9 @@ const highlight_1 = require("@lezer/highlight");
|
|
|
14
14
|
* tokens' layer: a host sets its own over them as it sets any token.
|
|
15
15
|
*/
|
|
16
16
|
exports.CODE_COLOURS = {
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
// JSON's three parts in three families, so it reads at a glance: a key (YAML's, a CSS property) green, a string blue, a number orange.
|
|
18
|
+
light: { keyword: '#cf222e', string: '#0a3069', literal: '#953800', function: '#6639ba', type: '#8250df', tag: '#116329', property: '#116329' },
|
|
19
|
+
dark: { keyword: '#ff7b72', string: '#a5d6ff', literal: '#ffa657', function: '#d2a8ff', type: '#f2cc60', tag: '#7ee787', property: '#7ee787' },
|
|
19
20
|
};
|
|
20
21
|
const declare = (scheme) => Object.entries(exports.CODE_COLOURS[scheme])
|
|
21
22
|
.map(([role, colour]) => `--fd-code-${role}: ${colour};`)
|
|
@@ -35,7 +36,9 @@ exports.codeHighlightStyle = language_1.HighlightStyle.define([
|
|
|
35
36
|
{ tag: [highlight_1.tags.function(highlight_1.tags.variableName), highlight_1.tags.function(highlight_1.tags.propertyName), highlight_1.tags.function(highlight_1.tags.definition(highlight_1.tags.variableName)), highlight_1.tags.macroName], color: v('function') },
|
|
36
37
|
{ tag: [highlight_1.tags.typeName, highlight_1.tags.className, highlight_1.tags.namespace, highlight_1.tags.labelName], color: v('type') },
|
|
37
38
|
{ tag: [highlight_1.tags.tagName, highlight_1.tags.angleBracket], color: v('tag') },
|
|
38
|
-
{ tag:
|
|
39
|
+
{ tag: highlight_1.tags.propertyName, color: v('property') },
|
|
40
|
+
// An HTML attribute in the numbers' colour, apart from its tag's green.
|
|
41
|
+
{ tag: highlight_1.tags.attributeName, color: v('literal') },
|
|
39
42
|
{ tag: [highlight_1.tags.comment, highlight_1.tags.lineComment, highlight_1.tags.blockComment, highlight_1.tags.docComment, highlight_1.tags.meta, highlight_1.tags.processingInstruction, highlight_1.tags.documentMeta], color: 'var(--fd-muted)', fontStyle: 'italic' },
|
|
40
43
|
{ tag: highlight_1.tags.heading, color: v('keyword'), fontWeight: 'bold' },
|
|
41
44
|
{ tag: highlight_1.tags.strong, fontWeight: 'bold' },
|
package/src/lib/palette.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"palette.js","sourceRoot":"","sources":["../../../../../libs/code/src/lib/palette.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"palette.js","sourceRoot":"","sources":["../../../../../libs/code/src/lib/palette.ts"],"names":[],"mappings":";;;AAAA,mDAAsD;AACtD,gDAA6C;AAE7C;;;;;;;;;GASG;AACU,QAAA,YAAY,GAAG;IAC1B,uIAAuI;IACvI,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE;IAC/I,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE;CACtI,CAAC;AAIX,MAAM,OAAO,GAAG,CAAC,MAAwB,EAAE,EAAE,CAC3C,MAAM,CAAC,OAAO,CAAC,oBAAY,CAAC,MAAM,CAAC,CAAC;KACjC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,aAAa,IAAI,KAAK,MAAM,GAAG,CAAC;KACxD,IAAI,CAAC,GAAG,CAAC,CAAC;AAEf,iHAAiH;AACpG,QAAA,gBAAgB,GAAG;aACnB,OAAO,CAAC,OAAO,CAAC;2EAC8C,OAAO,CAAC,MAAM,CAAC;iHACuB,OAAO,CAAC,MAAM,CAAC;EAC9H,CAAC;AAEH,MAAM,CAAC,GAAG,CAAC,IAAc,EAAE,EAAE,CAAC,iBAAiB,IAAI,GAAG,CAAC;AAEvD,6EAA6E;AAChE,QAAA,kBAAkB,GAAG,yBAAc,CAAC,MAAM,CAAC;IACtD,EAAE,GAAG,EAAE,CAAC,gBAAC,CAAC,OAAO,EAAE,gBAAC,CAAC,QAAQ,EAAE,gBAAC,CAAC,eAAe,EAAE,gBAAC,CAAC,cAAc,EAAE,gBAAC,CAAC,iBAAiB,EAAE,gBAAC,CAAC,aAAa,EAAE,gBAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE;IACxI,EAAE,GAAG,EAAE,CAAC,gBAAC,CAAC,MAAM,EAAE,gBAAC,CAAC,OAAO,CAAC,gBAAC,CAAC,MAAM,CAAC,EAAE,gBAAC,CAAC,SAAS,EAAE,gBAAC,CAAC,MAAM,EAAE,gBAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE;IAC7F,EAAE,GAAG,EAAE,CAAC,gBAAC,CAAC,MAAM,EAAE,gBAAC,CAAC,IAAI,EAAE,gBAAC,CAAC,IAAI,EAAE,gBAAC,CAAC,IAAI,EAAE,gBAAC,CAAC,IAAI,EAAE,gBAAC,CAAC,QAAQ,CAAC,gBAAC,CAAC,IAAI,CAAC,EAAE,gBAAC,CAAC,QAAQ,CAAC,gBAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE;IAChH,EAAE,GAAG,EAAE,CAAC,gBAAC,CAAC,QAAQ,CAAC,gBAAC,CAAC,YAAY,CAAC,EAAE,gBAAC,CAAC,QAAQ,CAAC,gBAAC,CAAC,YAAY,CAAC,EAAE,gBAAC,CAAC,QAAQ,CAAC,gBAAC,CAAC,UAAU,CAAC,gBAAC,CAAC,YAAY,CAAC,CAAC,EAAE,gBAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE;IAC9I,EAAE,GAAG,EAAE,CAAC,gBAAC,CAAC,QAAQ,EAAE,gBAAC,CAAC,SAAS,EAAE,gBAAC,CAAC,SAAS,EAAE,gBAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE;IAC9E,EAAE,GAAG,EAAE,CAAC,gBAAC,CAAC,OAAO,EAAE,gBAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;IACrD,EAAE,GAAG,EAAE,gBAAC,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE;IAC7C,wEAAwE;IACxE,EAAE,GAAG,EAAE,gBAAC,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE;IAC7C,EAAE,GAAG,EAAE,CAAC,gBAAC,CAAC,OAAO,EAAE,gBAAC,CAAC,WAAW,EAAE,gBAAC,CAAC,YAAY,EAAE,gBAAC,CAAC,UAAU,EAAE,gBAAC,CAAC,IAAI,EAAE,gBAAC,CAAC,qBAAqB,EAAE,gBAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE;IACjK,EAAE,GAAG,EAAE,gBAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;IAC3D,EAAE,GAAG,EAAE,gBAAC,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE;IACrC,EAAE,GAAG,EAAE,gBAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;IACxC,EAAE,GAAG,EAAE,gBAAC,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE;IACxD,EAAE,GAAG,EAAE,CAAC,gBAAC,CAAC,IAAI,EAAE,gBAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE;IACzE,EAAE,GAAG,EAAE,gBAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;IACpC,EAAE,GAAG,EAAE,gBAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE;IACvC,EAAE,GAAG,EAAE,gBAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE;IACpC,EAAE,GAAG,EAAE,gBAAC,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE;CAC7C,CAAC,CAAC"}
|
package/src/lib/palette.mjs
CHANGED
|
@@ -11,8 +11,9 @@ import { tags as t } from '@lezer/highlight';
|
|
|
11
11
|
* tokens' layer: a host sets its own over them as it sets any token.
|
|
12
12
|
*/
|
|
13
13
|
export const CODE_COLOURS = {
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
// JSON's three parts in three families, so it reads at a glance: a key (YAML's, a CSS property) green, a string blue, a number orange.
|
|
15
|
+
light: { keyword: '#cf222e', string: '#0a3069', literal: '#953800', function: '#6639ba', type: '#8250df', tag: '#116329', property: '#116329' },
|
|
16
|
+
dark: { keyword: '#ff7b72', string: '#a5d6ff', literal: '#ffa657', function: '#d2a8ff', type: '#f2cc60', tag: '#7ee787', property: '#7ee787' },
|
|
16
17
|
};
|
|
17
18
|
const declare = (scheme) => Object.entries(CODE_COLOURS[scheme])
|
|
18
19
|
.map(([role, colour]) => `--fd-code-${role}: ${colour};`)
|
|
@@ -32,7 +33,9 @@ export const codeHighlightStyle = HighlightStyle.define([
|
|
|
32
33
|
{ tag: [t.function(t.variableName), t.function(t.propertyName), t.function(t.definition(t.variableName)), t.macroName], color: v('function') },
|
|
33
34
|
{ tag: [t.typeName, t.className, t.namespace, t.labelName], color: v('type') },
|
|
34
35
|
{ tag: [t.tagName, t.angleBracket], color: v('tag') },
|
|
35
|
-
{ tag:
|
|
36
|
+
{ tag: t.propertyName, color: v('property') },
|
|
37
|
+
// An HTML attribute in the numbers' colour, apart from its tag's green.
|
|
38
|
+
{ tag: t.attributeName, color: v('literal') },
|
|
36
39
|
{ tag: [t.comment, t.lineComment, t.blockComment, t.docComment, t.meta, t.processingInstruction, t.documentMeta], color: 'var(--fd-muted)', fontStyle: 'italic' },
|
|
37
40
|
{ tag: t.heading, color: v('keyword'), fontWeight: 'bold' },
|
|
38
41
|
{ tag: t.strong, fontWeight: 'bold' },
|
package/src/lib/palette.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"palette.mjs","sourceRoot":"","sources":["../../../../../libs/code/src/lib/palette.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"palette.mjs","sourceRoot":"","sources":["../../../../../libs/code/src/lib/palette.ts"],"names":[],"mappings":"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"}
|
package/src/lib/styles.js
CHANGED
|
@@ -14,7 +14,11 @@ exports.CODE_CSS = `
|
|
|
14
14
|
.fd-code .cm-editor.cm-focused { outline: 2px solid var(--fd-focus); outline-offset: 1px; }
|
|
15
15
|
.fd-code .cm-scroller { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; line-height: 1.5; }
|
|
16
16
|
.fd-code .cm-gutters { background: var(--fd-page); color: var(--fd-muted); border-inline-end: 1px solid var(--fd-border); }
|
|
17
|
-
|
|
17
|
+
/* JSON that does not read: the box's edge in the error colour, the line where it breaks shaded, the character that cannot be there underlined. */
|
|
18
|
+
.fd-code .cm-editor:has(.cm-content[aria-invalid="true"]) { border-color: var(--fd-error); }
|
|
19
|
+
.fd-code .fd-code-bad-line { background: var(--fd-error-soft); }
|
|
20
|
+
.fd-code .fd-code-bad-spot { text-decoration: wavy underline var(--fd-error); text-decoration-skip-ink: none; text-underline-offset: 3px; }
|
|
21
|
+
.fd-code-error { font-family: var(--fd-font); }
|
|
18
22
|
/* Code in a language: its words in the code colours, the box shaded when it is only to be read. */
|
|
19
23
|
.fd-code-text .cm-editor { color: var(--fd-text); }
|
|
20
24
|
.fd-code-text[data-readonly] .cm-editor { background: color-mix(in srgb, var(--fd-text) 4%, var(--fd-surface)); }
|
package/src/lib/styles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../libs/code/src/lib/styles.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../libs/code/src/lib/styles.ts"],"names":[],"mappings":";;;AA6BA,8CAMC;AAnCD,uCAA6C;AAE7C,uGAAuG;AAC1F,QAAA,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;EAuBtB,0BAAgB;CACjB,CAAC;AAEF,SAAgB,iBAAiB,CAAC,GAAa;IAC7C,IAAI,GAAG,CAAC,cAAc,CAAC,qBAAqB,CAAC;QAAE,OAAO;IACtD,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,GAAG,qBAAqB,CAAC;IACjC,KAAK,CAAC,WAAW,GAAG,gBAAQ,CAAC;IAC7B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC"}
|
package/src/lib/styles.mjs
CHANGED
|
@@ -10,7 +10,11 @@ export const CODE_CSS = `
|
|
|
10
10
|
.fd-code .cm-editor.cm-focused { outline: 2px solid var(--fd-focus); outline-offset: 1px; }
|
|
11
11
|
.fd-code .cm-scroller { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; line-height: 1.5; }
|
|
12
12
|
.fd-code .cm-gutters { background: var(--fd-page); color: var(--fd-muted); border-inline-end: 1px solid var(--fd-border); }
|
|
13
|
-
|
|
13
|
+
/* JSON that does not read: the box's edge in the error colour, the line where it breaks shaded, the character that cannot be there underlined. */
|
|
14
|
+
.fd-code .cm-editor:has(.cm-content[aria-invalid="true"]) { border-color: var(--fd-error); }
|
|
15
|
+
.fd-code .fd-code-bad-line { background: var(--fd-error-soft); }
|
|
16
|
+
.fd-code .fd-code-bad-spot { text-decoration: wavy underline var(--fd-error); text-decoration-skip-ink: none; text-underline-offset: 3px; }
|
|
17
|
+
.fd-code-error { font-family: var(--fd-font); }
|
|
14
18
|
/* Code in a language: its words in the code colours, the box shaded when it is only to be read. */
|
|
15
19
|
.fd-code-text .cm-editor { color: var(--fd-text); }
|
|
16
20
|
.fd-code-text[data-readonly] .cm-editor { background: color-mix(in srgb, var(--fd-text) 4%, var(--fd-surface)); }
|
package/src/lib/styles.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.mjs","sourceRoot":"","sources":["../../../../../libs/code/src/lib/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,uGAAuG;AACvG,MAAM,CAAC,MAAM,QAAQ,GAAG
|
|
1
|
+
{"version":3,"file":"styles.mjs","sourceRoot":"","sources":["../../../../../libs/code/src/lib/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,uGAAuG;AACvG,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;EAuBtB,gBAAgB;CACjB,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,GAAa;IAC7C,IAAI,GAAG,CAAC,cAAc,CAAC,qBAAqB,CAAC;QAAE,OAAO;IACtD,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,GAAG,qBAAqB,CAAC;IACjC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;IAC7B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC"}
|