@fieldia/monaco 0.0.0-stage → 0.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +94 -2
- package/package.json +37 -3
- package/src/index.d.mts +7 -0
- package/src/index.d.ts +7 -0
- package/src/index.js +14 -0
- package/src/index.js.map +1 -0
- package/src/index.mjs +7 -0
- package/src/index.mjs.map +1 -0
- package/src/lib/json.d.mts +30 -0
- package/src/lib/json.d.ts +30 -0
- package/src/lib/json.js +55 -0
- package/src/lib/json.js.map +1 -0
- package/src/lib/json.mjs +51 -0
- package/src/lib/json.mjs.map +1 -0
- package/src/lib/languages.d.mts +28 -0
- package/src/lib/languages.d.ts +28 -0
- package/src/lib/languages.js +112 -0
- package/src/lib/languages.js.map +1 -0
- package/src/lib/languages.mjs +107 -0
- package/src/lib/languages.mjs.map +1 -0
- package/src/lib/loader.d.mts +19 -0
- package/src/lib/loader.d.ts +19 -0
- package/src/lib/loader.js +164 -0
- package/src/lib/loader.js.map +1 -0
- package/src/lib/loader.mjs +161 -0
- package/src/lib/loader.mjs.map +1 -0
- package/src/lib/monaco.d.mts +38 -0
- package/src/lib/monaco.d.ts +38 -0
- package/src/lib/monaco.js +271 -0
- package/src/lib/monaco.js.map +1 -0
- package/src/lib/monaco.mjs +267 -0
- package/src/lib/monaco.mjs.map +1 -0
- package/src/lib/styles.d.mts +8 -0
- package/src/lib/styles.d.ts +8 -0
- package/src/lib/styles.js +40 -0
- package/src/lib/styles.js.map +1 -0
- package/src/lib/styles.mjs +36 -0
- package/src/lib/styles.mjs.map +1 -0
- package/src/lib/theme.d.mts +48 -0
- package/src/lib/theme.d.ts +48 -0
- package/src/lib/theme.js +154 -0
- package/src/lib/theme.js.map +1 -0
- package/src/lib/theme.mjs +148 -0
- package/src/lib/theme.mjs.map +1 -0
- package/src/lib/types.d.mts +72 -0
- package/src/lib/types.d.ts +72 -0
- package/src/lib/types.js +9 -0
- package/src/lib/types.js.map +1 -0
- package/src/lib/types.mjs +8 -0
- package/src/lib/types.mjs.map +1 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { CODE_COLOURS } from './theme.mjs';
|
|
2
|
+
const declare = (scheme) => Object.entries(CODE_COLOURS[scheme])
|
|
3
|
+
.map(([role, colour]) => `--fd-code-${role}: ${colour};`)
|
|
4
|
+
.join(' ');
|
|
5
|
+
/**
|
|
6
|
+
* The editor's frame in Fieldia's colours, so it sits among the other
|
|
7
|
+
* fields, and the code colours the theme is read from: light, dark where the
|
|
8
|
+
* page is dark, in Fieldia's tokens' layer so a host sets its own over them.
|
|
9
|
+
* Installed once per document.
|
|
10
|
+
*/
|
|
11
|
+
export const MONACO_CSS = `
|
|
12
|
+
.fd-monaco { display: grid; gap: 4px; min-width: 0; }
|
|
13
|
+
.fd-monaco-box {
|
|
14
|
+
box-sizing: border-box; height: 96px; min-width: 0; overflow: hidden;
|
|
15
|
+
border: 1px solid var(--fd-border); border-radius: var(--fd-control-radius); background: var(--fd-surface);
|
|
16
|
+
}
|
|
17
|
+
.fd-monaco-box:focus-within { outline: 2px solid var(--fd-focus); outline-offset: 1px; }
|
|
18
|
+
.fd-monaco[data-invalid] .fd-monaco-box { border-color: var(--fd-error); }
|
|
19
|
+
.fd-monaco-plain { min-height: 96px; }
|
|
20
|
+
/* Only to be read: shaded as Fieldia shades such a box, over the colours Monaco's theme gives it. */
|
|
21
|
+
.fd-monaco[data-readonly] .monaco-editor { --vscode-editor-background: color-mix(in srgb, var(--fd-text) 4%, var(--fd-surface)); }
|
|
22
|
+
@layer fieldia-tokens {
|
|
23
|
+
.fd-monaco { ${declare('light')} }
|
|
24
|
+
:is(.fd-form, .fd-form-dialog, .fd-theme)[data-scheme="dark"] .fd-monaco { ${declare('dark')} }
|
|
25
|
+
@media (prefers-color-scheme: dark) { :is(.fd-form, .fd-form-dialog, .fd-theme)[data-scheme="auto"] .fd-monaco { ${declare('dark')} } }
|
|
26
|
+
}
|
|
27
|
+
`;
|
|
28
|
+
export function installMonacoStyles(doc) {
|
|
29
|
+
if (doc.getElementById('fieldia-monaco-styles'))
|
|
30
|
+
return;
|
|
31
|
+
const style = doc.createElement('style');
|
|
32
|
+
style.id = 'fieldia-monaco-styles';
|
|
33
|
+
style.textContent = MONACO_CSS;
|
|
34
|
+
doc.head.append(style);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=styles.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.mjs","sourceRoot":"","sources":["../../../../../libs/monaco/src/lib/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,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;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;eAYX,OAAO,CAAC,OAAO,CAAC;6EAC8C,OAAO,CAAC,MAAM,CAAC;mHACuB,OAAO,CAAC,MAAM,CAAC;;CAEjI,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,GAAa;IAC/C,IAAI,GAAG,CAAC,cAAc,CAAC,uBAAuB,CAAC;QAAE,OAAO;IACxD,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,GAAG,uBAAuB,CAAC;IACnC,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC;IAC/B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { MonacoThemeData } from './types.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* Monaco's theme, made from Fieldia's tokens as the page has them: the code
|
|
4
|
+
* box on the form's surface, in its words, its gutter on the page, the chosen
|
|
5
|
+
* text in its accent; the code itself in the same colours as @fieldia/code's
|
|
6
|
+
* editor, light or dark with the page's scheme. Read again when the page's
|
|
7
|
+
* look or scheme changes.
|
|
8
|
+
*/
|
|
9
|
+
/** The colours code is drawn in, by what a word is: @fieldia/code's (a spec holds the two together). */
|
|
10
|
+
export declare const CODE_COLOURS: {
|
|
11
|
+
readonly light: {
|
|
12
|
+
readonly keyword: "#cf222e";
|
|
13
|
+
readonly string: "#0a3069";
|
|
14
|
+
readonly literal: "#953800";
|
|
15
|
+
readonly function: "#6639ba";
|
|
16
|
+
readonly type: "#8250df";
|
|
17
|
+
readonly tag: "#116329";
|
|
18
|
+
readonly property: "#116329";
|
|
19
|
+
};
|
|
20
|
+
readonly dark: {
|
|
21
|
+
readonly keyword: "#ff7b72";
|
|
22
|
+
readonly string: "#a5d6ff";
|
|
23
|
+
readonly literal: "#ffa657";
|
|
24
|
+
readonly function: "#d2a8ff";
|
|
25
|
+
readonly type: "#f2cc60";
|
|
26
|
+
readonly tag: "#7ee787";
|
|
27
|
+
readonly property: "#7ee787";
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export type CodeRole = keyof (typeof CODE_COLOURS)['light'];
|
|
31
|
+
type PageRole = 'text' | 'muted' | 'surface' | 'page' | 'border' | 'accent' | 'focus' | 'error';
|
|
32
|
+
/** The colours a theme is made of, each #rrggbb or #rrggbbaa. */
|
|
33
|
+
export type FieldiaColours = Record<PageRole | CodeRole, string>;
|
|
34
|
+
/**
|
|
35
|
+
* A colour as the browser computes it — #rgb, #rrggbb(aa), rgb(), rgba() or
|
|
36
|
+
* color(srgb …) — as Monaco takes one: #rrggbb, or #rrggbbaa when it is see-through.
|
|
37
|
+
* Null for anything else.
|
|
38
|
+
*/
|
|
39
|
+
export declare function hexOf(css: string): string | null;
|
|
40
|
+
/** Monaco's theme in these colours. */
|
|
41
|
+
export declare function monacoTheme(given: FieldiaColours): MonacoThemeData;
|
|
42
|
+
/**
|
|
43
|
+
* The colours the page gives an element: each of Fieldia's tokens as the
|
|
44
|
+
* browser resolves it there (through the theme, the scheme and the page's
|
|
45
|
+
* look), the ones it does not give from Fieldia's own light tokens.
|
|
46
|
+
*/
|
|
47
|
+
export declare function readColours(element: HTMLElement): FieldiaColours;
|
|
48
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { MonacoThemeData } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Monaco's theme, made from Fieldia's tokens as the page has them: the code
|
|
4
|
+
* box on the form's surface, in its words, its gutter on the page, the chosen
|
|
5
|
+
* text in its accent; the code itself in the same colours as @fieldia/code's
|
|
6
|
+
* editor, light or dark with the page's scheme. Read again when the page's
|
|
7
|
+
* look or scheme changes.
|
|
8
|
+
*/
|
|
9
|
+
/** The colours code is drawn in, by what a word is: @fieldia/code's (a spec holds the two together). */
|
|
10
|
+
export declare const CODE_COLOURS: {
|
|
11
|
+
readonly light: {
|
|
12
|
+
readonly keyword: "#cf222e";
|
|
13
|
+
readonly string: "#0a3069";
|
|
14
|
+
readonly literal: "#953800";
|
|
15
|
+
readonly function: "#6639ba";
|
|
16
|
+
readonly type: "#8250df";
|
|
17
|
+
readonly tag: "#116329";
|
|
18
|
+
readonly property: "#116329";
|
|
19
|
+
};
|
|
20
|
+
readonly dark: {
|
|
21
|
+
readonly keyword: "#ff7b72";
|
|
22
|
+
readonly string: "#a5d6ff";
|
|
23
|
+
readonly literal: "#ffa657";
|
|
24
|
+
readonly function: "#d2a8ff";
|
|
25
|
+
readonly type: "#f2cc60";
|
|
26
|
+
readonly tag: "#7ee787";
|
|
27
|
+
readonly property: "#7ee787";
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export type CodeRole = keyof (typeof CODE_COLOURS)['light'];
|
|
31
|
+
type PageRole = 'text' | 'muted' | 'surface' | 'page' | 'border' | 'accent' | 'focus' | 'error';
|
|
32
|
+
/** The colours a theme is made of, each #rrggbb or #rrggbbaa. */
|
|
33
|
+
export type FieldiaColours = Record<PageRole | CodeRole, string>;
|
|
34
|
+
/**
|
|
35
|
+
* A colour as the browser computes it — #rgb, #rrggbb(aa), rgb(), rgba() or
|
|
36
|
+
* color(srgb …) — as Monaco takes one: #rrggbb, or #rrggbbaa when it is see-through.
|
|
37
|
+
* Null for anything else.
|
|
38
|
+
*/
|
|
39
|
+
export declare function hexOf(css: string): string | null;
|
|
40
|
+
/** Monaco's theme in these colours. */
|
|
41
|
+
export declare function monacoTheme(given: FieldiaColours): MonacoThemeData;
|
|
42
|
+
/**
|
|
43
|
+
* The colours the page gives an element: each of Fieldia's tokens as the
|
|
44
|
+
* browser resolves it there (through the theme, the scheme and the page's
|
|
45
|
+
* look), the ones it does not give from Fieldia's own light tokens.
|
|
46
|
+
*/
|
|
47
|
+
export declare function readColours(element: HTMLElement): FieldiaColours;
|
|
48
|
+
export {};
|
package/src/lib/theme.js
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CODE_COLOURS = void 0;
|
|
4
|
+
exports.hexOf = hexOf;
|
|
5
|
+
exports.monacoTheme = monacoTheme;
|
|
6
|
+
exports.readColours = readColours;
|
|
7
|
+
/**
|
|
8
|
+
* Monaco's theme, made from Fieldia's tokens as the page has them: the code
|
|
9
|
+
* box on the form's surface, in its words, its gutter on the page, the chosen
|
|
10
|
+
* text in its accent; the code itself in the same colours as @fieldia/code's
|
|
11
|
+
* editor, light or dark with the page's scheme. Read again when the page's
|
|
12
|
+
* look or scheme changes.
|
|
13
|
+
*/
|
|
14
|
+
/** The colours code is drawn in, by what a word is: @fieldia/code's (a spec holds the two together). */
|
|
15
|
+
exports.CODE_COLOURS = {
|
|
16
|
+
light: { keyword: '#cf222e', string: '#0a3069', literal: '#953800', function: '#6639ba', type: '#8250df', tag: '#116329', property: '#116329' },
|
|
17
|
+
dark: { keyword: '#ff7b72', string: '#a5d6ff', literal: '#ffa657', function: '#d2a8ff', type: '#f2cc60', tag: '#7ee787', property: '#7ee787' },
|
|
18
|
+
};
|
|
19
|
+
/** Fieldia's own light tokens: what a colour the page does not give falls back to. */
|
|
20
|
+
const FALLBACK = {
|
|
21
|
+
text: '#212529', muted: '#636976', surface: '#ffffff', page: '#f2f3f5', border: '#cfd4da', accent: '#002855', focus: '#002855', error: '#c62828',
|
|
22
|
+
...exports.CODE_COLOURS.light,
|
|
23
|
+
};
|
|
24
|
+
const PAGE_ROLES = ['text', 'muted', 'surface', 'page', 'border', 'accent', 'focus', 'error'];
|
|
25
|
+
const CODE_ROLES = Object.keys(exports.CODE_COLOURS.light);
|
|
26
|
+
const variable = (role) => (CODE_ROLES.includes(role) ? `--fd-code-${role}` : `--fd-${role}`);
|
|
27
|
+
const byte = (n) => Math.round(Math.min(255, Math.max(0, n))).toString(16).padStart(2, '0');
|
|
28
|
+
const alphaOf = (given) => (given === undefined ? 1 : given.endsWith('%') ? Number(given.slice(0, -1)) / 100 : Number(given));
|
|
29
|
+
/**
|
|
30
|
+
* A colour as the browser computes it — #rgb, #rrggbb(aa), rgb(), rgba() or
|
|
31
|
+
* color(srgb …) — as Monaco takes one: #rrggbb, or #rrggbbaa when it is see-through.
|
|
32
|
+
* Null for anything else.
|
|
33
|
+
*/
|
|
34
|
+
function hexOf(css) {
|
|
35
|
+
const text = css.trim().toLowerCase();
|
|
36
|
+
const short = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(text);
|
|
37
|
+
if (short)
|
|
38
|
+
return `#${short[1]}${short[1]}${short[2]}${short[2]}${short[3]}${short[3]}`;
|
|
39
|
+
if (/^#([0-9a-f]{6}|[0-9a-f]{8})$/.test(text))
|
|
40
|
+
return text;
|
|
41
|
+
const number = '([\\d.]+)';
|
|
42
|
+
const rgb = new RegExp(`^rgba?\\(\\s*${number}[\\s,]+${number}[\\s,]+${number}(?:\\s*[,/]\\s*([\\d.]+%?))?\\s*\\)$`).exec(text);
|
|
43
|
+
const srgb = new RegExp(`^color\\(srgb\\s+${number}\\s+${number}\\s+${number}(?:\\s*/\\s*([\\d.]+%?))?\\s*\\)$`).exec(text);
|
|
44
|
+
const found = rgb ?? srgb;
|
|
45
|
+
if (!found)
|
|
46
|
+
return null;
|
|
47
|
+
const scale = rgb ? 1 : 255;
|
|
48
|
+
const [r, g, b] = [found[1], found[2], found[3]].map((n) => Number(n) * scale);
|
|
49
|
+
const alpha = alphaOf(found[4]);
|
|
50
|
+
return `#${byte(r)}${byte(g)}${byte(b)}${alpha >= 1 ? '' : byte(alpha * 255)}`;
|
|
51
|
+
}
|
|
52
|
+
const channels = (hex) => [1, 3, 5].map((i) => parseInt(hex.slice(i, i + 2), 16));
|
|
53
|
+
const alpha = (hex) => (hex.length === 9 ? parseInt(hex.slice(7), 16) / 255 : 1);
|
|
54
|
+
/** A see-through colour laid over its ground, as the browser paints it: #rrggbb. */
|
|
55
|
+
function solid(colour, ground) {
|
|
56
|
+
const a = alpha(colour);
|
|
57
|
+
const over = channels(ground);
|
|
58
|
+
return `#${channels(colour).map((c, i) => byte(c * a + over[i] * (1 - a))).join('')}`;
|
|
59
|
+
}
|
|
60
|
+
const luminance = (hex) => channels(hex)
|
|
61
|
+
.map((c) => c / 255)
|
|
62
|
+
.map((s) => (s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4))
|
|
63
|
+
.reduce((sum, s, i) => sum + s * [0.2126, 0.7152, 0.0722][i], 0);
|
|
64
|
+
/** Monaco's theme in these colours. */
|
|
65
|
+
function monacoTheme(given) {
|
|
66
|
+
const surface = solid(given.surface, '#ffffff');
|
|
67
|
+
const on = (colour) => solid(colour, surface);
|
|
68
|
+
const c = Object.fromEntries(Object.entries(given).map(([role, colour]) => [role, role === 'surface' ? surface : on(colour)]));
|
|
69
|
+
/** Monaco takes a rule's colour without its #. */
|
|
70
|
+
const fg = (role) => c[role].slice(1);
|
|
71
|
+
const see = (role, opacity) => `${c[role]}${opacity}`;
|
|
72
|
+
const roles = [
|
|
73
|
+
[['keyword', 'keyword.flow', 'keyword.control', 'storage'], 'keyword'],
|
|
74
|
+
[['string', 'string.escape', 'string.value.json', 'regexp', 'attribute.value'], 'string'],
|
|
75
|
+
[['number', 'number.hex', 'number.float', 'constant', 'variable.predefined', 'attribute.name'], 'literal'],
|
|
76
|
+
[['predefined', 'function'], 'function'],
|
|
77
|
+
[['type', 'type.identifier', 'namespace', 'annotation'], 'type'],
|
|
78
|
+
[['tag', 'metatag'], 'tag'],
|
|
79
|
+
[['string.key.json', 'key', 'variable.name'], 'property'],
|
|
80
|
+
[['delimiter', 'operator', 'identifier', 'variable'], 'text'],
|
|
81
|
+
];
|
|
82
|
+
return {
|
|
83
|
+
base: luminance(surface) < 0.4 ? 'vs-dark' : 'vs',
|
|
84
|
+
inherit: true,
|
|
85
|
+
rules: [
|
|
86
|
+
{ token: '', foreground: fg('text') },
|
|
87
|
+
...roles.flatMap(([tokens, role]) => tokens.map((token) => ({ token, foreground: fg(role) }))),
|
|
88
|
+
{ token: 'comment', foreground: fg('muted'), fontStyle: 'italic' },
|
|
89
|
+
{ token: 'comment.doc', foreground: fg('muted'), fontStyle: 'italic' },
|
|
90
|
+
{ token: 'invalid', foreground: fg('error') },
|
|
91
|
+
{ token: 'emphasis', fontStyle: 'italic' },
|
|
92
|
+
{ token: 'strong', fontStyle: 'bold' },
|
|
93
|
+
],
|
|
94
|
+
colors: {
|
|
95
|
+
'editor.background': surface,
|
|
96
|
+
'editor.foreground': c.text,
|
|
97
|
+
'editorGutter.background': solid(given.page, surface),
|
|
98
|
+
'editorLineNumber.foreground': c.muted,
|
|
99
|
+
'editorLineNumber.activeForeground': c.text,
|
|
100
|
+
'editorCursor.foreground': c.text,
|
|
101
|
+
'editor.selectionBackground': see('accent', '40'),
|
|
102
|
+
'editor.inactiveSelectionBackground': see('accent', '26'),
|
|
103
|
+
'editor.selectionHighlightBackground': see('accent', '1f'),
|
|
104
|
+
'editor.wordHighlightBackground': see('accent', '1a'),
|
|
105
|
+
'editor.findMatchBackground': see('accent', '59'),
|
|
106
|
+
'editor.findMatchHighlightBackground': see('accent', '2e'),
|
|
107
|
+
'editor.rangeHighlightBackground': see('accent', '14'),
|
|
108
|
+
'editor.lineHighlightBackground': see('text', '0a'),
|
|
109
|
+
'editor.lineHighlightBorder': '#00000000',
|
|
110
|
+
'editorIndentGuide.background1': c.border,
|
|
111
|
+
'editorIndentGuide.activeBackground1': c.muted,
|
|
112
|
+
'editorWhitespace.foreground': c.border,
|
|
113
|
+
'editorBracketMatch.background': see('accent', '1f'),
|
|
114
|
+
'editorBracketMatch.border': c.muted,
|
|
115
|
+
'editorError.foreground': c.error,
|
|
116
|
+
'editorOverviewRuler.border': '#00000000',
|
|
117
|
+
focusBorder: c.focus,
|
|
118
|
+
'editorWidget.background': surface,
|
|
119
|
+
'editorWidget.foreground': c.text,
|
|
120
|
+
'editorWidget.border': c.border,
|
|
121
|
+
'input.background': surface,
|
|
122
|
+
'input.foreground': c.text,
|
|
123
|
+
'input.border': c.border,
|
|
124
|
+
'scrollbarSlider.background': see('muted', '40'),
|
|
125
|
+
'scrollbarSlider.hoverBackground': see('muted', '66'),
|
|
126
|
+
'scrollbarSlider.activeBackground': see('muted', '80'),
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* The colours the page gives an element: each of Fieldia's tokens as the
|
|
132
|
+
* browser resolves it there (through the theme, the scheme and the page's
|
|
133
|
+
* look), the ones it does not give from Fieldia's own light tokens.
|
|
134
|
+
*/
|
|
135
|
+
function readColours(element) {
|
|
136
|
+
const view = element.ownerDocument.defaultView;
|
|
137
|
+
if (!view)
|
|
138
|
+
return { ...FALLBACK };
|
|
139
|
+
const probe = element.ownerDocument.createElement('span');
|
|
140
|
+
probe.hidden = true;
|
|
141
|
+
element.append(probe);
|
|
142
|
+
const declared = view.getComputedStyle(element);
|
|
143
|
+
const colours = { ...FALLBACK };
|
|
144
|
+
for (const role of [...PAGE_ROLES, ...CODE_ROLES]) {
|
|
145
|
+
const name = variable(role);
|
|
146
|
+
if (declared.getPropertyValue(name).trim() === '')
|
|
147
|
+
continue;
|
|
148
|
+
probe.style.color = `var(${name})`;
|
|
149
|
+
colours[role] = hexOf(view.getComputedStyle(probe).color) ?? colours[role];
|
|
150
|
+
}
|
|
151
|
+
probe.remove();
|
|
152
|
+
return colours;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../../../libs/monaco/src/lib/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Monaco's theme, made from Fieldia's tokens as the page has them: the code
|
|
3
|
+
* box on the form's surface, in its words, its gutter on the page, the chosen
|
|
4
|
+
* text in its accent; the code itself in the same colours as @fieldia/code's
|
|
5
|
+
* editor, light or dark with the page's scheme. Read again when the page's
|
|
6
|
+
* look or scheme changes.
|
|
7
|
+
*/
|
|
8
|
+
/** The colours code is drawn in, by what a word is: @fieldia/code's (a spec holds the two together). */
|
|
9
|
+
export const CODE_COLOURS = {
|
|
10
|
+
light: { keyword: '#cf222e', string: '#0a3069', literal: '#953800', function: '#6639ba', type: '#8250df', tag: '#116329', property: '#116329' },
|
|
11
|
+
dark: { keyword: '#ff7b72', string: '#a5d6ff', literal: '#ffa657', function: '#d2a8ff', type: '#f2cc60', tag: '#7ee787', property: '#7ee787' },
|
|
12
|
+
};
|
|
13
|
+
/** Fieldia's own light tokens: what a colour the page does not give falls back to. */
|
|
14
|
+
const FALLBACK = {
|
|
15
|
+
text: '#212529', muted: '#636976', surface: '#ffffff', page: '#f2f3f5', border: '#cfd4da', accent: '#002855', focus: '#002855', error: '#c62828',
|
|
16
|
+
...CODE_COLOURS.light,
|
|
17
|
+
};
|
|
18
|
+
const PAGE_ROLES = ['text', 'muted', 'surface', 'page', 'border', 'accent', 'focus', 'error'];
|
|
19
|
+
const CODE_ROLES = Object.keys(CODE_COLOURS.light);
|
|
20
|
+
const variable = (role) => (CODE_ROLES.includes(role) ? `--fd-code-${role}` : `--fd-${role}`);
|
|
21
|
+
const byte = (n) => Math.round(Math.min(255, Math.max(0, n))).toString(16).padStart(2, '0');
|
|
22
|
+
const alphaOf = (given) => (given === undefined ? 1 : given.endsWith('%') ? Number(given.slice(0, -1)) / 100 : Number(given));
|
|
23
|
+
/**
|
|
24
|
+
* A colour as the browser computes it — #rgb, #rrggbb(aa), rgb(), rgba() or
|
|
25
|
+
* color(srgb …) — as Monaco takes one: #rrggbb, or #rrggbbaa when it is see-through.
|
|
26
|
+
* Null for anything else.
|
|
27
|
+
*/
|
|
28
|
+
export function hexOf(css) {
|
|
29
|
+
const text = css.trim().toLowerCase();
|
|
30
|
+
const short = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(text);
|
|
31
|
+
if (short)
|
|
32
|
+
return `#${short[1]}${short[1]}${short[2]}${short[2]}${short[3]}${short[3]}`;
|
|
33
|
+
if (/^#([0-9a-f]{6}|[0-9a-f]{8})$/.test(text))
|
|
34
|
+
return text;
|
|
35
|
+
const number = '([\\d.]+)';
|
|
36
|
+
const rgb = new RegExp(`^rgba?\\(\\s*${number}[\\s,]+${number}[\\s,]+${number}(?:\\s*[,/]\\s*([\\d.]+%?))?\\s*\\)$`).exec(text);
|
|
37
|
+
const srgb = new RegExp(`^color\\(srgb\\s+${number}\\s+${number}\\s+${number}(?:\\s*/\\s*([\\d.]+%?))?\\s*\\)$`).exec(text);
|
|
38
|
+
const found = rgb ?? srgb;
|
|
39
|
+
if (!found)
|
|
40
|
+
return null;
|
|
41
|
+
const scale = rgb ? 1 : 255;
|
|
42
|
+
const [r, g, b] = [found[1], found[2], found[3]].map((n) => Number(n) * scale);
|
|
43
|
+
const alpha = alphaOf(found[4]);
|
|
44
|
+
return `#${byte(r)}${byte(g)}${byte(b)}${alpha >= 1 ? '' : byte(alpha * 255)}`;
|
|
45
|
+
}
|
|
46
|
+
const channels = (hex) => [1, 3, 5].map((i) => parseInt(hex.slice(i, i + 2), 16));
|
|
47
|
+
const alpha = (hex) => (hex.length === 9 ? parseInt(hex.slice(7), 16) / 255 : 1);
|
|
48
|
+
/** A see-through colour laid over its ground, as the browser paints it: #rrggbb. */
|
|
49
|
+
function solid(colour, ground) {
|
|
50
|
+
const a = alpha(colour);
|
|
51
|
+
const over = channels(ground);
|
|
52
|
+
return `#${channels(colour).map((c, i) => byte(c * a + over[i] * (1 - a))).join('')}`;
|
|
53
|
+
}
|
|
54
|
+
const luminance = (hex) => channels(hex)
|
|
55
|
+
.map((c) => c / 255)
|
|
56
|
+
.map((s) => (s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4))
|
|
57
|
+
.reduce((sum, s, i) => sum + s * [0.2126, 0.7152, 0.0722][i], 0);
|
|
58
|
+
/** Monaco's theme in these colours. */
|
|
59
|
+
export function monacoTheme(given) {
|
|
60
|
+
const surface = solid(given.surface, '#ffffff');
|
|
61
|
+
const on = (colour) => solid(colour, surface);
|
|
62
|
+
const c = Object.fromEntries(Object.entries(given).map(([role, colour]) => [role, role === 'surface' ? surface : on(colour)]));
|
|
63
|
+
/** Monaco takes a rule's colour without its #. */
|
|
64
|
+
const fg = (role) => c[role].slice(1);
|
|
65
|
+
const see = (role, opacity) => `${c[role]}${opacity}`;
|
|
66
|
+
const roles = [
|
|
67
|
+
[['keyword', 'keyword.flow', 'keyword.control', 'storage'], 'keyword'],
|
|
68
|
+
[['string', 'string.escape', 'string.value.json', 'regexp', 'attribute.value'], 'string'],
|
|
69
|
+
[['number', 'number.hex', 'number.float', 'constant', 'variable.predefined', 'attribute.name'], 'literal'],
|
|
70
|
+
[['predefined', 'function'], 'function'],
|
|
71
|
+
[['type', 'type.identifier', 'namespace', 'annotation'], 'type'],
|
|
72
|
+
[['tag', 'metatag'], 'tag'],
|
|
73
|
+
[['string.key.json', 'key', 'variable.name'], 'property'],
|
|
74
|
+
[['delimiter', 'operator', 'identifier', 'variable'], 'text'],
|
|
75
|
+
];
|
|
76
|
+
return {
|
|
77
|
+
base: luminance(surface) < 0.4 ? 'vs-dark' : 'vs',
|
|
78
|
+
inherit: true,
|
|
79
|
+
rules: [
|
|
80
|
+
{ token: '', foreground: fg('text') },
|
|
81
|
+
...roles.flatMap(([tokens, role]) => tokens.map((token) => ({ token, foreground: fg(role) }))),
|
|
82
|
+
{ token: 'comment', foreground: fg('muted'), fontStyle: 'italic' },
|
|
83
|
+
{ token: 'comment.doc', foreground: fg('muted'), fontStyle: 'italic' },
|
|
84
|
+
{ token: 'invalid', foreground: fg('error') },
|
|
85
|
+
{ token: 'emphasis', fontStyle: 'italic' },
|
|
86
|
+
{ token: 'strong', fontStyle: 'bold' },
|
|
87
|
+
],
|
|
88
|
+
colors: {
|
|
89
|
+
'editor.background': surface,
|
|
90
|
+
'editor.foreground': c.text,
|
|
91
|
+
'editorGutter.background': solid(given.page, surface),
|
|
92
|
+
'editorLineNumber.foreground': c.muted,
|
|
93
|
+
'editorLineNumber.activeForeground': c.text,
|
|
94
|
+
'editorCursor.foreground': c.text,
|
|
95
|
+
'editor.selectionBackground': see('accent', '40'),
|
|
96
|
+
'editor.inactiveSelectionBackground': see('accent', '26'),
|
|
97
|
+
'editor.selectionHighlightBackground': see('accent', '1f'),
|
|
98
|
+
'editor.wordHighlightBackground': see('accent', '1a'),
|
|
99
|
+
'editor.findMatchBackground': see('accent', '59'),
|
|
100
|
+
'editor.findMatchHighlightBackground': see('accent', '2e'),
|
|
101
|
+
'editor.rangeHighlightBackground': see('accent', '14'),
|
|
102
|
+
'editor.lineHighlightBackground': see('text', '0a'),
|
|
103
|
+
'editor.lineHighlightBorder': '#00000000',
|
|
104
|
+
'editorIndentGuide.background1': c.border,
|
|
105
|
+
'editorIndentGuide.activeBackground1': c.muted,
|
|
106
|
+
'editorWhitespace.foreground': c.border,
|
|
107
|
+
'editorBracketMatch.background': see('accent', '1f'),
|
|
108
|
+
'editorBracketMatch.border': c.muted,
|
|
109
|
+
'editorError.foreground': c.error,
|
|
110
|
+
'editorOverviewRuler.border': '#00000000',
|
|
111
|
+
focusBorder: c.focus,
|
|
112
|
+
'editorWidget.background': surface,
|
|
113
|
+
'editorWidget.foreground': c.text,
|
|
114
|
+
'editorWidget.border': c.border,
|
|
115
|
+
'input.background': surface,
|
|
116
|
+
'input.foreground': c.text,
|
|
117
|
+
'input.border': c.border,
|
|
118
|
+
'scrollbarSlider.background': see('muted', '40'),
|
|
119
|
+
'scrollbarSlider.hoverBackground': see('muted', '66'),
|
|
120
|
+
'scrollbarSlider.activeBackground': see('muted', '80'),
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* The colours the page gives an element: each of Fieldia's tokens as the
|
|
126
|
+
* browser resolves it there (through the theme, the scheme and the page's
|
|
127
|
+
* look), the ones it does not give from Fieldia's own light tokens.
|
|
128
|
+
*/
|
|
129
|
+
export function readColours(element) {
|
|
130
|
+
const view = element.ownerDocument.defaultView;
|
|
131
|
+
if (!view)
|
|
132
|
+
return { ...FALLBACK };
|
|
133
|
+
const probe = element.ownerDocument.createElement('span');
|
|
134
|
+
probe.hidden = true;
|
|
135
|
+
element.append(probe);
|
|
136
|
+
const declared = view.getComputedStyle(element);
|
|
137
|
+
const colours = { ...FALLBACK };
|
|
138
|
+
for (const role of [...PAGE_ROLES, ...CODE_ROLES]) {
|
|
139
|
+
const name = variable(role);
|
|
140
|
+
if (declared.getPropertyValue(name).trim() === '')
|
|
141
|
+
continue;
|
|
142
|
+
probe.style.color = `var(${name})`;
|
|
143
|
+
colours[role] = hexOf(view.getComputedStyle(probe).color) ?? colours[role];
|
|
144
|
+
}
|
|
145
|
+
probe.remove();
|
|
146
|
+
return colours;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=theme.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.mjs","sourceRoot":"","sources":["../../../../../libs/monaco/src/lib/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The part of Monaco's API the widgets use, written out here: the package
|
|
3
|
+
* names no type of monaco-editor's in what it exports, so an app's types
|
|
4
|
+
* check whichever way it resolves modules, and a test's stand-in can
|
|
5
|
+
* implement all of it.
|
|
6
|
+
*/
|
|
7
|
+
export interface MonacoDisposable {
|
|
8
|
+
dispose(): void;
|
|
9
|
+
}
|
|
10
|
+
export interface MonacoModel extends MonacoDisposable {
|
|
11
|
+
getValue(): string;
|
|
12
|
+
setValue(value: string): void;
|
|
13
|
+
getLanguageId(): string;
|
|
14
|
+
}
|
|
15
|
+
export interface MonacoEditor extends MonacoDisposable {
|
|
16
|
+
getModel(): MonacoModel | null;
|
|
17
|
+
updateOptions(options: Record<string, unknown>): void;
|
|
18
|
+
focus(): void;
|
|
19
|
+
hasTextFocus(): boolean;
|
|
20
|
+
layout(): void;
|
|
21
|
+
getContentHeight(): number;
|
|
22
|
+
onDidChangeModelContent(listener: () => void): MonacoDisposable;
|
|
23
|
+
onDidContentSizeChange(listener: (event: {
|
|
24
|
+
contentHeight: number;
|
|
25
|
+
}) => void): MonacoDisposable;
|
|
26
|
+
}
|
|
27
|
+
/** A theme as Monaco defines one: its base, rules for tokens and colours for the editor's parts. */
|
|
28
|
+
export interface MonacoThemeData {
|
|
29
|
+
base: 'vs' | 'vs-dark';
|
|
30
|
+
inherit: boolean;
|
|
31
|
+
rules: {
|
|
32
|
+
token: string;
|
|
33
|
+
foreground?: string;
|
|
34
|
+
fontStyle?: string;
|
|
35
|
+
}[];
|
|
36
|
+
colors: Record<string, string>;
|
|
37
|
+
}
|
|
38
|
+
export interface MonacoApi {
|
|
39
|
+
editor: {
|
|
40
|
+
create(element: HTMLElement, options: Record<string, unknown>): MonacoEditor;
|
|
41
|
+
createModel(value: string, language?: string): MonacoModel;
|
|
42
|
+
defineTheme(name: string, theme: MonacoThemeData): void;
|
|
43
|
+
setTheme(name: string): void;
|
|
44
|
+
};
|
|
45
|
+
languages: {
|
|
46
|
+
register(language: {
|
|
47
|
+
id: string;
|
|
48
|
+
extensions?: string[];
|
|
49
|
+
aliases?: string[];
|
|
50
|
+
}): void;
|
|
51
|
+
getLanguages(): {
|
|
52
|
+
id: string;
|
|
53
|
+
}[];
|
|
54
|
+
setMonarchTokensProvider(id: string, language: unknown): MonacoDisposable;
|
|
55
|
+
setLanguageConfiguration(id: string, configuration: unknown): MonacoDisposable;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* How the widgets get Monaco and a language's tokenizer. The default imports
|
|
60
|
+
* monaco-editor's own modules, each when first needed; an app that loads
|
|
61
|
+
* Monaco its own way, or a test, hands its own.
|
|
62
|
+
*/
|
|
63
|
+
export interface MonacoLoader {
|
|
64
|
+
/** Monaco, with the editing features the widgets use; with `services`, the features language services need too. */
|
|
65
|
+
monaco(services: boolean): Promise<MonacoApi>;
|
|
66
|
+
/**
|
|
67
|
+
* Monaco's id for the language a page names, its tokenizer registered — with
|
|
68
|
+
* `services`, its language service where Monaco has one. `plaintext` for a
|
|
69
|
+
* language Monaco has none for.
|
|
70
|
+
*/
|
|
71
|
+
language(monaco: MonacoApi, name: unknown, services: boolean): Promise<string>;
|
|
72
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The part of Monaco's API the widgets use, written out here: the package
|
|
3
|
+
* names no type of monaco-editor's in what it exports, so an app's types
|
|
4
|
+
* check whichever way it resolves modules, and a test's stand-in can
|
|
5
|
+
* implement all of it.
|
|
6
|
+
*/
|
|
7
|
+
export interface MonacoDisposable {
|
|
8
|
+
dispose(): void;
|
|
9
|
+
}
|
|
10
|
+
export interface MonacoModel extends MonacoDisposable {
|
|
11
|
+
getValue(): string;
|
|
12
|
+
setValue(value: string): void;
|
|
13
|
+
getLanguageId(): string;
|
|
14
|
+
}
|
|
15
|
+
export interface MonacoEditor extends MonacoDisposable {
|
|
16
|
+
getModel(): MonacoModel | null;
|
|
17
|
+
updateOptions(options: Record<string, unknown>): void;
|
|
18
|
+
focus(): void;
|
|
19
|
+
hasTextFocus(): boolean;
|
|
20
|
+
layout(): void;
|
|
21
|
+
getContentHeight(): number;
|
|
22
|
+
onDidChangeModelContent(listener: () => void): MonacoDisposable;
|
|
23
|
+
onDidContentSizeChange(listener: (event: {
|
|
24
|
+
contentHeight: number;
|
|
25
|
+
}) => void): MonacoDisposable;
|
|
26
|
+
}
|
|
27
|
+
/** A theme as Monaco defines one: its base, rules for tokens and colours for the editor's parts. */
|
|
28
|
+
export interface MonacoThemeData {
|
|
29
|
+
base: 'vs' | 'vs-dark';
|
|
30
|
+
inherit: boolean;
|
|
31
|
+
rules: {
|
|
32
|
+
token: string;
|
|
33
|
+
foreground?: string;
|
|
34
|
+
fontStyle?: string;
|
|
35
|
+
}[];
|
|
36
|
+
colors: Record<string, string>;
|
|
37
|
+
}
|
|
38
|
+
export interface MonacoApi {
|
|
39
|
+
editor: {
|
|
40
|
+
create(element: HTMLElement, options: Record<string, unknown>): MonacoEditor;
|
|
41
|
+
createModel(value: string, language?: string): MonacoModel;
|
|
42
|
+
defineTheme(name: string, theme: MonacoThemeData): void;
|
|
43
|
+
setTheme(name: string): void;
|
|
44
|
+
};
|
|
45
|
+
languages: {
|
|
46
|
+
register(language: {
|
|
47
|
+
id: string;
|
|
48
|
+
extensions?: string[];
|
|
49
|
+
aliases?: string[];
|
|
50
|
+
}): void;
|
|
51
|
+
getLanguages(): {
|
|
52
|
+
id: string;
|
|
53
|
+
}[];
|
|
54
|
+
setMonarchTokensProvider(id: string, language: unknown): MonacoDisposable;
|
|
55
|
+
setLanguageConfiguration(id: string, configuration: unknown): MonacoDisposable;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* How the widgets get Monaco and a language's tokenizer. The default imports
|
|
60
|
+
* monaco-editor's own modules, each when first needed; an app that loads
|
|
61
|
+
* Monaco its own way, or a test, hands its own.
|
|
62
|
+
*/
|
|
63
|
+
export interface MonacoLoader {
|
|
64
|
+
/** Monaco, with the editing features the widgets use; with `services`, the features language services need too. */
|
|
65
|
+
monaco(services: boolean): Promise<MonacoApi>;
|
|
66
|
+
/**
|
|
67
|
+
* Monaco's id for the language a page names, its tokenizer registered — with
|
|
68
|
+
* `services`, its language service where Monaco has one. `plaintext` for a
|
|
69
|
+
* language Monaco has none for.
|
|
70
|
+
*/
|
|
71
|
+
language(monaco: MonacoApi, name: unknown, services: boolean): Promise<string>;
|
|
72
|
+
}
|
package/src/lib/types.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The part of Monaco's API the widgets use, written out here: the package
|
|
4
|
+
* names no type of monaco-editor's in what it exports, so an app's types
|
|
5
|
+
* check whichever way it resolves modules, and a test's stand-in can
|
|
6
|
+
* implement all of it.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../libs/monaco/src/lib/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The part of Monaco's API the widgets use, written out here: the package
|
|
3
|
+
* names no type of monaco-editor's in what it exports, so an app's types
|
|
4
|
+
* check whichever way it resolves modules, and a test's stand-in can
|
|
5
|
+
* implement all of it.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=types.mjs.map
|