@refrakt-md/highlight 0.3.0 → 0.5.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.
@@ -7,14 +7,29 @@ export interface HighlightOptions {
7
7
  /** Custom highlight function. Receives raw code + language, returns HTML string.
8
8
  * Default: Shiki with css-variables theme. */
9
9
  highlight?: (code: string, lang: string) => string;
10
+ /** Shiki theme — a built-in theme name, or { light, dark } pair for dual themes.
11
+ * Default: CSS variables theme (--shiki-token-* custom properties). */
12
+ theme?: string | {
13
+ light: string;
14
+ dark: string;
15
+ };
10
16
  }
17
+ /** A highlight transform function with an attached `.css` property containing
18
+ * any CSS needed for the selected theme (background overrides, dual-theme toggle). */
19
+ export type HighlightTransform = ((tree: RendererNode) => RendererNode) & {
20
+ css: string;
21
+ };
11
22
  /**
12
23
  * Create a syntax highlight transform that walks the serialized tree,
13
24
  * finds elements with `data-language` + text children, highlights them,
14
25
  * and sets `data-codeblock: true` for raw HTML injection by the Renderer.
15
26
  *
16
- * Uses Shiki with a CSS variables theme by default. Pass a custom
17
- * `highlight` function to use a different highlighter.
27
+ * Uses Shiki with a CSS variables theme by default. Pass a `theme` option
28
+ * to use any built-in Shiki theme, or a `{ light, dark }` pair for
29
+ * dual-theme support that switches with the site's light/dark mode.
30
+ *
31
+ * The returned function has a `.css` property containing any CSS needed
32
+ * for the selected theme (background color overrides, dual-theme toggle rules).
18
33
  */
19
- export declare function createHighlightTransform(options?: HighlightOptions): Promise<(tree: RendererNode) => RendererNode>;
34
+ export declare function createHighlightTransform(options?: HighlightOptions): Promise<HighlightTransform>;
20
35
  //# sourceMappingURL=highlight.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../src/highlight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,mBAAmB,CAAC;AAKrE,MAAM,WAAW,gBAAgB;IAChC;iFAC6E;IAC7E,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,oBAAoB,CAAC,EAAE,CAAC;IAC1C;mDAC+C;IAC/C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD;AAUD;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC7C,OAAO,GAAE,gBAAqB,GAC5B,OAAO,CAAC,CAAC,IAAI,EAAE,YAAY,KAAK,YAAY,CAAC,CAmB/C"}
1
+ {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../src/highlight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAqD,MAAM,OAAO,CAAC;AAErG,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,mBAAmB,CAAC;AAKrE,MAAM,WAAW,gBAAgB;IAChC;iFAC6E;IAC7E,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,oBAAoB,CAAC,EAAE,CAAC;IAC1C;mDAC+C;IAC/C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACnD;4EACwE;IACxE,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACjD;AAED;uFACuF;AACvF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,EAAE,YAAY,KAAK,YAAY,CAAC,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAU1F;;;;;;;;;;;GAWG;AACH,wBAAsB,wBAAwB,CAC7C,OAAO,GAAE,gBAAqB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAiD7B"}
package/dist/highlight.js CHANGED
@@ -14,16 +14,50 @@ const DEFAULT_LANGS = [
14
14
  * finds elements with `data-language` + text children, highlights them,
15
15
  * and sets `data-codeblock: true` for raw HTML injection by the Renderer.
16
16
  *
17
- * Uses Shiki with a CSS variables theme by default. Pass a custom
18
- * `highlight` function to use a different highlighter.
17
+ * Uses Shiki with a CSS variables theme by default. Pass a `theme` option
18
+ * to use any built-in Shiki theme, or a `{ light, dark }` pair for
19
+ * dual-theme support that switches with the site's light/dark mode.
20
+ *
21
+ * The returned function has a `.css` property containing any CSS needed
22
+ * for the selected theme (background color overrides, dual-theme toggle rules).
19
23
  */
20
24
  export async function createHighlightTransform(options = {}) {
21
- const { langs = DEFAULT_LANGS, highlight: customHighlight } = options;
25
+ const { langs = DEFAULT_LANGS, highlight: customHighlight, theme } = options;
22
26
  let highlightFn;
27
+ let css = '';
23
28
  if (customHighlight) {
24
29
  highlightFn = customHighlight;
25
30
  }
31
+ else if (theme && typeof theme === 'object') {
32
+ // Dual theme: { light, dark }
33
+ const highlighter = await createHighlighter({
34
+ themes: [theme.light, theme.dark],
35
+ langs,
36
+ });
37
+ highlightFn = (code, lang) => {
38
+ const html = highlighter.codeToHtml(code, {
39
+ lang,
40
+ themes: { light: theme.light, dark: theme.dark },
41
+ defaultColor: 'light',
42
+ });
43
+ return extractInnerHtml(html);
44
+ };
45
+ css = buildDualThemeCss(highlighter, theme.light, theme.dark);
46
+ }
47
+ else if (theme && typeof theme === 'string') {
48
+ // Single named theme
49
+ const highlighter = await createHighlighter({
50
+ themes: [theme],
51
+ langs,
52
+ });
53
+ highlightFn = (code, lang) => {
54
+ const html = highlighter.codeToHtml(code, { lang, theme });
55
+ return extractInnerHtml(html);
56
+ };
57
+ css = buildSingleThemeCss(highlighter, theme);
58
+ }
26
59
  else {
60
+ // Default: CSS variables theme
27
61
  const highlighter = await createHighlighter({
28
62
  themes: [cssVarsTheme],
29
63
  langs,
@@ -33,7 +67,55 @@ export async function createHighlightTransform(options = {}) {
33
67
  return extractInnerHtml(html);
34
68
  };
35
69
  }
36
- return (tree) => walk(tree, highlightFn);
70
+ const transform = ((tree) => walk(tree, highlightFn));
71
+ transform.css = css;
72
+ return transform;
73
+ }
74
+ /** Build CSS for a single named theme — overrides code block bg/fg. */
75
+ function buildSingleThemeCss(highlighter, themeName) {
76
+ const theme = highlighter.getTheme(themeName);
77
+ const bg = theme.bg;
78
+ const fg = theme.fg;
79
+ return `:root {\n\t--rf-color-code-bg: ${bg};\n\t--rf-color-code-text: ${fg};\n}\n`;
80
+ }
81
+ /** Build CSS for dual themes — bg/fg overrides + dark mode span toggle.
82
+ * Uses `defaultColor: 'light'` so light colors are inline on spans.
83
+ * Dark mode uses `!important` to override inline styles (standard Shiki pattern). */
84
+ function buildDualThemeCss(highlighter, lightName, darkName) {
85
+ const light = highlighter.getTheme(lightName);
86
+ const dark = highlighter.getTheme(darkName);
87
+ return `/* Highlight theme: ${lightName} / ${darkName} */
88
+ pre[data-language] {
89
+ \tbackground-color: ${light.bg};
90
+ \tcolor: ${light.fg};
91
+ }
92
+ [data-theme="dark"] pre[data-language] {
93
+ \tbackground-color: ${dark.bg};
94
+ \tcolor: ${dark.fg};
95
+ }
96
+ @media (prefers-color-scheme: dark) {
97
+ \t:root:not([data-theme="light"]) pre[data-language] {
98
+ \t\tbackground-color: ${dark.bg};
99
+ \t\tcolor: ${dark.fg};
100
+ \t}
101
+ }
102
+ [data-theme="dark"] [data-codeblock] span {
103
+ \tcolor: var(--shiki-dark) !important;
104
+ \tbackground-color: var(--shiki-dark-bg) !important;
105
+ \tfont-style: var(--shiki-dark-font-style) !important;
106
+ \tfont-weight: var(--shiki-dark-font-weight) !important;
107
+ \ttext-decoration: var(--shiki-dark-text-decoration) !important;
108
+ }
109
+ @media (prefers-color-scheme: dark) {
110
+ \t:root:not([data-theme="light"]) [data-codeblock] span {
111
+ \t\tcolor: var(--shiki-dark) !important;
112
+ \t\tbackground-color: var(--shiki-dark-bg) !important;
113
+ \t\tfont-style: var(--shiki-dark-font-style) !important;
114
+ \t\tfont-weight: var(--shiki-dark-font-weight) !important;
115
+ \t\ttext-decoration: var(--shiki-dark-text-decoration) !important;
116
+ \t}
117
+ }
118
+ `;
37
119
  }
38
120
  /** Walk the serialized tree, highlighting elements with `data-language`. */
39
121
  function walk(node, highlightFn) {
@@ -74,11 +156,9 @@ function highlightNode(node, lang, highlightFn) {
74
156
  }
75
157
  /** Strip Shiki's <pre><code> wrapper to get just the highlighted spans. */
76
158
  function extractInnerHtml(html) {
77
- const codeStart = html.indexOf('<code>');
78
- const codeEnd = html.lastIndexOf('</code>');
79
- if (codeStart !== -1 && codeEnd !== -1) {
80
- return html.slice(codeStart + '<code>'.length, codeEnd);
81
- }
159
+ const match = html.match(/<code[^>]*>([\s\S]*)<\/code>/);
160
+ if (match)
161
+ return match[1];
82
162
  return html;
83
163
  }
84
164
  //# sourceMappingURL=highlight.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../src/highlight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../src/highlight.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { createHighlightTransform } from './highlight.js';
2
- export type { HighlightOptions } from './highlight.js';
2
+ export type { HighlightOptions, HighlightTransform } from './highlight.js';
3
3
  export { markdocLanguage } from './langs/markdoc.js';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"markdoc.d.ts","sourceRoot":"","sources":["../../src/langs/markdoc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,oBAmD7B,CAAC"}
1
+ {"version":3,"file":"markdoc.d.ts","sourceRoot":"","sources":["../../src/langs/markdoc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,oBAwE7B,CAAC"}
@@ -10,12 +10,33 @@ export const markdocLanguage = {
10
10
  name: 'markdoc',
11
11
  scopeName: 'text.html.markdoc',
12
12
  displayName: 'Markdoc',
13
- embeddedLangs: ['markdown'],
13
+ embeddedLangs: ['markdown', 'html'],
14
14
  patterns: [
15
+ { include: '#sandbox-block' },
15
16
  { include: '#markdoc-tag' },
16
17
  { include: 'text.html.markdown' },
17
18
  ],
18
19
  repository: {
20
+ 'sandbox-block': {
21
+ name: 'meta.block.sandbox.markdoc',
22
+ contentName: 'meta.embedded.block.html',
23
+ begin: '(\\{%)(\\s*sandbox)((?:\\s+[^%]*)?)(%\\})',
24
+ end: '(\\{%)(\\s*/sandbox\\s*)(%\\})',
25
+ beginCaptures: {
26
+ 1: { name: 'punctuation.definition.tag.begin.markdoc' },
27
+ 2: { name: 'entity.name.tag.markdoc' },
28
+ 3: { patterns: [{ include: '#tag-attributes' }] },
29
+ 4: { name: 'punctuation.definition.tag.end.markdoc' },
30
+ },
31
+ endCaptures: {
32
+ 1: { name: 'punctuation.definition.tag.begin.markdoc' },
33
+ 2: { name: 'entity.name.tag.markdoc' },
34
+ 3: { name: 'punctuation.definition.tag.end.markdoc' },
35
+ },
36
+ patterns: [
37
+ { include: 'text.html.basic' },
38
+ ],
39
+ },
19
40
  'markdoc-tag': {
20
41
  name: 'meta.tag.markdoc',
21
42
  begin: '(\\{%)(\\s*\\/?\\s*[a-z][a-z0-9-]*)',
@@ -1 +1 @@
1
- {"version":3,"file":"markdoc.js","sourceRoot":"","sources":["../../src/langs/markdoc.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAyB;IACpD,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,mBAAmB;IAC9B,WAAW,EAAE,SAAS;IACtB,aAAa,EAAE,CAAC,UAAU,CAAC;IAC3B,QAAQ,EAAE;QACT,EAAE,OAAO,EAAE,cAAc,EAAE;QAC3B,EAAE,OAAO,EAAE,oBAAoB,EAAE;KACjC;IACD,UAAU,EAAE;QACX,aAAa,EAAE;YACd,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,qCAAqC;YAC5C,GAAG,EAAE,QAAQ;YACb,aAAa,EAAE;gBACd,CAAC,EAAE,EAAE,IAAI,EAAE,0CAA0C,EAAE;gBACvD,CAAC,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE;aACtC;YACD,WAAW,EAAE;gBACZ,CAAC,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE;aACrD;YACD,QAAQ,EAAE;gBACT,EAAE,OAAO,EAAE,iBAAiB,EAAE;aAC9B;SACD;QACD,gBAAgB,EAAE;YACjB,QAAQ,EAAE;gBACT,EAAE,OAAO,EAAE,iBAAiB,EAAE;gBAC9B,EAAE,OAAO,EAAE,yBAAyB,EAAE;gBACtC,EAAE,OAAO,EAAE,yBAAyB,EAAE;gBACtC,EAAE,OAAO,EAAE,0BAA0B,EAAE;aACvC;SACD;QACD,gBAAgB,EAAE;YACjB,IAAI,EAAE,qCAAqC;YAC3C,KAAK,EAAE,kCAAkC;SACzC;QACD,wBAAwB,EAAE;YACzB,IAAI,EAAE,8BAA8B;YACpC,KAAK,EAAE,GAAG;YACV,GAAG,EAAE,GAAG;SACR;QACD,wBAAwB,EAAE;YACzB,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE,YAAY;SACnB;QACD,yBAAyB,EAAE;YAC1B,IAAI,EAAE,2BAA2B;YACjC,KAAK,EAAE,oBAAoB;SAC3B;KACD;CACD,CAAC"}
1
+ {"version":3,"file":"markdoc.js","sourceRoot":"","sources":["../../src/langs/markdoc.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAyB;IACpD,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,mBAAmB;IAC9B,WAAW,EAAE,SAAS;IACtB,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC;IACnC,QAAQ,EAAE;QACT,EAAE,OAAO,EAAE,gBAAgB,EAAE;QAC7B,EAAE,OAAO,EAAE,cAAc,EAAE;QAC3B,EAAE,OAAO,EAAE,oBAAoB,EAAE;KACjC;IACD,UAAU,EAAE;QACX,eAAe,EAAE;YAChB,IAAI,EAAE,4BAA4B;YAClC,WAAW,EAAE,0BAA0B;YACvC,KAAK,EAAE,2CAA2C;YAClD,GAAG,EAAE,gCAAgC;YACrC,aAAa,EAAE;gBACd,CAAC,EAAE,EAAE,IAAI,EAAE,0CAA0C,EAAE;gBACvD,CAAC,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE;gBACtC,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE;gBACjD,CAAC,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE;aACrD;YACD,WAAW,EAAE;gBACZ,CAAC,EAAE,EAAE,IAAI,EAAE,0CAA0C,EAAE;gBACvD,CAAC,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE;gBACtC,CAAC,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE;aACrD;YACD,QAAQ,EAAE;gBACT,EAAE,OAAO,EAAE,iBAAiB,EAAE;aAC9B;SACD;QACD,aAAa,EAAE;YACd,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,qCAAqC;YAC5C,GAAG,EAAE,QAAQ;YACb,aAAa,EAAE;gBACd,CAAC,EAAE,EAAE,IAAI,EAAE,0CAA0C,EAAE;gBACvD,CAAC,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE;aACtC;YACD,WAAW,EAAE;gBACZ,CAAC,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE;aACrD;YACD,QAAQ,EAAE;gBACT,EAAE,OAAO,EAAE,iBAAiB,EAAE;aAC9B;SACD;QACD,gBAAgB,EAAE;YACjB,QAAQ,EAAE;gBACT,EAAE,OAAO,EAAE,iBAAiB,EAAE;gBAC9B,EAAE,OAAO,EAAE,yBAAyB,EAAE;gBACtC,EAAE,OAAO,EAAE,yBAAyB,EAAE;gBACtC,EAAE,OAAO,EAAE,0BAA0B,EAAE;aACvC;SACD;QACD,gBAAgB,EAAE;YACjB,IAAI,EAAE,qCAAqC;YAC3C,KAAK,EAAE,kCAAkC;SACzC;QACD,wBAAwB,EAAE;YACzB,IAAI,EAAE,8BAA8B;YACpC,KAAK,EAAE,GAAG;YACV,GAAG,EAAE,GAAG;SACR;QACD,wBAAwB,EAAE;YACzB,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE,YAAY;SACnB;QACD,yBAAyB,EAAE;YAC1B,IAAI,EAAE,2BAA2B;YACjC,KAAK,EAAE,oBAAoB;SAC3B;KACD;CACD,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@refrakt-md/highlight",
3
3
  "description": "Syntax highlighting transform for refrakt.md — Shiki-based tree walker with pluggable highlighter",
4
- "version": "0.3.0",
4
+ "version": "0.5.0",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -29,8 +29,8 @@
29
29
  "build": "tsc"
30
30
  },
31
31
  "dependencies": {
32
- "@refrakt-md/types": "0.3.0",
33
- "@refrakt-md/transform": "0.3.0",
32
+ "@refrakt-md/types": "0.5.0",
33
+ "@refrakt-md/transform": "0.5.0",
34
34
  "shiki": "^3.0.0"
35
35
  }
36
36
  }