@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fieldia/code",
3
- "version": "0.14.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.14.0",
45
- "@fieldia/widgets": "0.14.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 parsed = read(update.state.doc.toString());
69
- const valid = parsed !== undefined;
70
- error.hidden = valid;
71
- view.contentDOM.setAttribute('aria-invalid', String(!valid));
72
- if (!valid)
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: () => view.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
- error.hidden = true;
98
- view.contentDOM.setAttribute('aria-invalid', 'false');
158
+ clearTimeout(saying);
159
+ say(null);
99
160
  },
100
161
  };
101
162
  };
@@ -1 +1 @@
1
- {"version":3,"file":"code.js","sourceRoot":"","sources":["../../../../../libs/code/src/lib/code.ts"],"names":[],"mappings":"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"}
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 parsed = read(update.state.doc.toString());
65
- const valid = parsed !== undefined;
66
- error.hidden = valid;
67
- view.contentDOM.setAttribute('aria-invalid', String(!valid));
68
- if (!valid)
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: () => view.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
- error.hidden = true;
94
- view.contentDOM.setAttribute('aria-invalid', 'false');
154
+ clearTimeout(saying);
155
+ say(null);
95
156
  },
96
157
  };
97
158
  };
@@ -1 +1 @@
1
- {"version":3,"file":"code.mjs","sourceRoot":"","sources":["../../../../../libs/code/src/lib/code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code.mjs","sourceRoot":"","sources":["../../../../../libs/code/src/lib/code.ts"],"names":[],"mappings":"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"}
@@ -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: "#0550ae";
16
+ readonly literal: "#953800";
17
17
  readonly function: "#6639ba";
18
- readonly type: "#953800";
18
+ readonly type: "#8250df";
19
19
  readonly tag: "#116329";
20
- readonly property: "#0550ae";
20
+ readonly property: "#116329";
21
21
  };
22
22
  readonly dark: {
23
23
  readonly keyword: "#ff7b72";
24
24
  readonly string: "#a5d6ff";
25
- readonly literal: "#79c0ff";
25
+ readonly literal: "#ffa657";
26
26
  readonly function: "#d2a8ff";
27
- readonly type: "#ffa657";
27
+ readonly type: "#f2cc60";
28
28
  readonly tag: "#7ee787";
29
- readonly property: "#79c0ff";
29
+ readonly property: "#7ee787";
30
30
  };
31
31
  };
32
32
  export type CodeRole = keyof (typeof CODE_COLOURS)['light'];
@@ -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: "#0550ae";
16
+ readonly literal: "#953800";
17
17
  readonly function: "#6639ba";
18
- readonly type: "#953800";
18
+ readonly type: "#8250df";
19
19
  readonly tag: "#116329";
20
- readonly property: "#0550ae";
20
+ readonly property: "#116329";
21
21
  };
22
22
  readonly dark: {
23
23
  readonly keyword: "#ff7b72";
24
24
  readonly string: "#a5d6ff";
25
- readonly literal: "#79c0ff";
25
+ readonly literal: "#ffa657";
26
26
  readonly function: "#d2a8ff";
27
- readonly type: "#ffa657";
27
+ readonly type: "#f2cc60";
28
28
  readonly tag: "#7ee787";
29
- readonly property: "#79c0ff";
29
+ readonly property: "#7ee787";
30
30
  };
31
31
  };
32
32
  export type CodeRole = keyof (typeof CODE_COLOURS)['light'];
@@ -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
- light: { keyword: '#cf222e', string: '#0a3069', literal: '#0550ae', function: '#6639ba', type: '#953800', tag: '#116329', property: '#0550ae' },
18
- dark: { keyword: '#ff7b72', string: '#a5d6ff', literal: '#79c0ff', function: '#d2a8ff', type: '#ffa657', tag: '#7ee787', property: '#79c0ff' },
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: [highlight_1.tags.attributeName, highlight_1.tags.propertyName], color: v('property') },
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' },
@@ -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":"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"}
@@ -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
- light: { keyword: '#cf222e', string: '#0a3069', literal: '#0550ae', function: '#6639ba', type: '#953800', tag: '#116329', property: '#0550ae' },
15
- dark: { keyword: '#ff7b72', string: '#a5d6ff', literal: '#79c0ff', function: '#d2a8ff', type: '#ffa657', tag: '#7ee787', property: '#79c0ff' },
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: [t.attributeName, t.propertyName], color: v('property') },
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' },
@@ -1 +1 @@
1
- {"version":3,"file":"palette.mjs","sourceRoot":"","sources":["../../../../../libs/code/src/lib/palette.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,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,YAAY,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;AACjH,MAAM,CAAC,MAAM,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;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC;IACtD,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE;IACxI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE;IAC7F,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE;IAChH,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE;IAC9I,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE;IAC9E,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;IACrD,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE;IAChE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE;IACjK,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;IAC3D,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE;IACrC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;IACxC,EAAE,GAAG,EAAE,CAAC,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE;IACxD,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE;IACzE,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;IACpC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE;IACvC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE;IACpC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE;CAC7C,CAAC,CAAC"}
1
+ {"version":3,"file":"palette.mjs","sourceRoot":"","sources":["../../../../../libs/code/src/lib/palette.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,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,YAAY,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;AACjH,MAAM,CAAC,MAAM,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;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC;IACtD,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE;IACxI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE;IAC7F,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE;IAChH,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE;IAC9I,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE;IAC9E,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;IACrD,EAAE,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE;IAC7C,wEAAwE;IACxE,EAAE,GAAG,EAAE,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE;IAC7C,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE;IACjK,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;IAC3D,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE;IACrC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;IACxC,EAAE,GAAG,EAAE,CAAC,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE;IACxD,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE;IACzE,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;IACpC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE;IACvC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE;IACpC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE;CAC7C,CAAC,CAAC"}
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
- .fd-code .cm-content[aria-invalid="true"] { background: var(--fd-error-soft); }
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)); }
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../libs/code/src/lib/styles.ts"],"names":[],"mappings":";;;AAyBA,8CAMC;AA/BD,uCAA6C;AAE7C,uGAAuG;AAC1F,QAAA,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;EAmBtB,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"}
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"}
@@ -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
- .fd-code .cm-content[aria-invalid="true"] { background: var(--fd-error-soft); }
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)); }
@@ -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;;;;;;;;;;;;;;;;;;;EAmBtB,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"}
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"}