-
-
Notifications
You must be signed in to change notification settings - Fork 55
Expand file tree
/
Copy pathpresets.js
More file actions
54 lines (52 loc) · 2.32 KB
/
presets.js
File metadata and controls
54 lines (52 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
const jsdelivr = (/** @type {string} */ repo) => `https://cdn.jsdelivr.net/npm/${repo}`
const link = (/** @type {string} */ href, /** @type {string|undefined} */ attrs) =>
`<link rel="stylesheet" href="${href}"${attrs ? ` ${attrs}` : ''}>`
const load = async (/** @type {string} */ url, name = 'default') =>
(await import(/* @vite-ignore */ url))[name]
export const STYLES = {
HOST: '<style>:host{display:block;position:relative;contain:content;}:host([hidden]){display:none;}</style>',
MARKDOWN: link(jsdelivr('github-markdown-css@5/github-markdown.min.css')),
MARKDOWN_LIGHT: link(jsdelivr('github-markdown-css@5/github-markdown-light.min.css')),
MARKDOWN_DARK: link(jsdelivr('github-markdown-css@5/github-markdown-dark.min.css')),
HIGHLIGHT_LIGHT: link(jsdelivr('@highlightjs/cdn-assets@11/styles/github.min.css')),
HIGHLIGHT_DARK: link(jsdelivr('@highlightjs/cdn-assets@11/styles/github-dark.min.css')),
HIGHLIGHT_PREFERS_DARK: link(
jsdelivr('@highlightjs/cdn-assets@11/styles/github-dark.min.css'),
`media="(prefers-color-scheme:dark)"`
),
KATEX: link(jsdelivr('katex@0/dist/katex.min.css')),
preset(theme = '') {
const {
HOST,
MARKDOWN,
MARKDOWN_LIGHT,
MARKDOWN_DARK,
HIGHLIGHT_LIGHT,
HIGHLIGHT_DARK,
HIGHLIGHT_PREFERS_DARK,
KATEX
} = this
const get = (/** @type {string} */ sheets) => `${HOST}${sheets}${KATEX}`
switch (theme) {
case 'light':
return get(MARKDOWN_LIGHT + HIGHLIGHT_LIGHT)
case 'dark':
return get(MARKDOWN_DARK + HIGHLIGHT_DARK)
default:
return get(MARKDOWN + HIGHLIGHT_LIGHT + HIGHLIGHT_PREFERS_DARK)
}
}
}
export const LOADERS = {
marked: async () => {
const Marked = await load(jsdelivr('marked@15/lib/marked.esm.min.js'), 'Marked')
return new Marked({ async: true })
},
markedBaseUrl: () => load(jsdelivr('marked-base-url@1/+esm'), 'baseUrl'),
markedHighlight: () => load(jsdelivr('marked-highlight@2/+esm'), 'markedHighlight'),
markedGfmHeadingId: () => load(jsdelivr('marked-gfm-heading-id@4/+esm'), 'gfmHeadingId'),
markedAlert: () => load(jsdelivr('marked-alert@2/+esm')),
hljs: () => load(jsdelivr('@highlightjs/cdn-assets@11/es/highlight.min.js')),
mermaid: () => load(jsdelivr('mermaid@11/dist/mermaid.esm.min.mjs')),
katex: () => load(jsdelivr('katex@0/dist/katex.mjs'))
}