@dr-ishaan/rehype-perfect-code-blocks 1.3.3 → 2.0.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/CHANGELOG.md CHANGED
@@ -5,6 +5,95 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.0.0] — 2026-06-20
9
+
10
+ ### Summary
11
+
12
+ **Major release** implementing the four P0 CSS architecture items from the v2.0.0 roadmap. These are the foundational cascade-control features that every production site needs to adopt the plugin without fighting the CSS cascade. No breaking changes — all new features are opt-in with backward-compatible defaults.
13
+
14
+ ### Features
15
+
16
+ #### P0-1: `@layer` CSS injection support
17
+
18
+ New `cssInjection` and `cssLayer` options:
19
+
20
+ - `cssInjection: 'inline'` (default, backward-compatible) — injects CSS in a `<style>` tag as before
21
+ - `cssInjection: 'layer'` — wraps CSS in `@layer <cssLayer> { ... }` so it sits in the correct cascade layer on sites using `@layer` (Tailwind v3+, daisyUI, etc.)
22
+ - `cssInjection: 'import'` — does NOT inject CSS; user imports manually via `import '@dr-ishaan/rehype-perfect-code-blocks/styles.css'`
23
+ - `cssLayer: 'pcb'` (default) — the layer name to use when `cssInjection: 'layer'`
24
+
25
+ Example:
26
+ ```js
27
+ perfectCode({
28
+ cssInjection: 'layer',
29
+ cssLayer: 'components',
30
+ })
31
+ // User's CSS: @layer base, components, utilities;
32
+ ```
33
+
34
+ #### P0-2: Design-token bridge
35
+
36
+ New `tokens` option — provide 5 core values and the plugin auto-derives 20+ `--pcb-*` variables using `color-mix(in oklch, ...)`:
37
+
38
+ ```js
39
+ perfectCode({
40
+ tokens: {
41
+ bg: 'var(--bg-subtle)',
42
+ fg: 'var(--ink)',
43
+ border: 'var(--rule)',
44
+ radius: 'var(--radius-card)',
45
+ monoFont: 'var(--font-mono)',
46
+ },
47
+ })
48
+ ```
49
+
50
+ The plugin generates `--pcb-ln-fg`, `--pcb-bg-header`, `--pcb-line-highlight`, `--pcb-line-add`, `--pcb-line-del`, `--pcb-line-focus`, `--pcb-copy-hover-bg`, `--pcb-word-bg`, and more — all derived from the 5 core tokens. Applied via `:where(.pcb)` (zero specificity) so user CSS still wins.
51
+
52
+ Uses `color-mix(in oklch, ...)` (Chrome 111+, Safari 16.4+, Firefox 113+). For older browsers, the v1.3.0 theme-aware defaults from Shiki still apply.
53
+
54
+ #### P0-3: Dark mode strategy options
55
+
56
+ New `darkMode` option — controls how the plugin switches between light and dark themes:
57
+
58
+ - `strategy: 'media'` (default, backward-compatible) — uses `@media (prefers-color-scheme: dark)`
59
+ - `strategy: 'attribute'` — switches on `html[data-theme="dark"]` (configurable attribute + value)
60
+ - `strategy: 'class'` — switches on `html.dark` (configurable class name)
61
+ - `strategy: 'custom'` — switches on a user-provided CSS selector
62
+
63
+ Example:
64
+ ```js
65
+ perfectCode({
66
+ darkMode: { strategy: 'class', class: 'dark' },
67
+ })
68
+ ```
69
+
70
+ #### P0-4: CSS containment scope
71
+
72
+ New `scope` option — prefixes all generated CSS selectors with the given scope:
73
+
74
+ ```js
75
+ perfectCode({
76
+ scope: '.prose',
77
+ })
78
+ // All selectors become: .prose .pcb { ... }, .prose .pcb__copy { ... }, etc.
79
+ ```
80
+
81
+ Applied to ALL generated CSS including the framework-reset overrides, token-bridge CSS, and dark-mode selectors.
82
+
83
+ ### New exports
84
+
85
+ - `generateTokenStyles(tokens, scope?)` — generates the derived `--pcb-*` CSS
86
+ - `applyScopeToCss(css, scope)` — prefixes all selectors in a CSS string
87
+ - `generateDarkModeSelector(darkMode, scope?)` — generates the dark-mode CSS selector
88
+ - `generateLightModeSelector(darkMode, scope?)` — generates the light-mode CSS selector
89
+ - `DesignTokens` type — the token bridge input interface
90
+
91
+ ### Verification
92
+
93
+ - All 1134 pre-existing tests pass (no regressions).
94
+ - New `test-v2-css-architecture.mjs` adds 43 regression tests covering all 4 P0 features.
95
+ - Total: 1177/1177 tests passing.
96
+
8
97
  ## [1.3.3] — 2026-06-20
9
98
 
10
99
  ### Summary
@@ -1 +1 @@
1
- {"version":3,"file":"astro.d.ts","sourceRoot":"","sources":["../src/astro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAI9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAyDrD,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,OAAO,GAAE,kBAAuB,GAC/B,gBAAgB,CAwGlB"}
1
+ {"version":3,"file":"astro.d.ts","sourceRoot":"","sources":["../src/astro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAI9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA0DrD,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,OAAO,GAAE,kBAAuB,GAC/B,gBAAgB,CAyHlB"}
package/dist/astro.js CHANGED
@@ -19,6 +19,7 @@
19
19
  import { rehypePerfectCodeBlocks } from './index.js';
20
20
  import { remarkPreserveCodeMeta } from './remark.js';
21
21
  import { COPY_SCRIPT } from './copy-script.js';
22
+ import { generateTokenStyles, applyScopeToCss } from './tokens.js';
22
23
  import { readFileSync } from 'node:fs';
23
24
  import { readdirSync, writeFileSync, readFileSync as readFile } from 'node:fs';
24
25
  import { fileURLToPath } from 'node:url';
@@ -112,9 +113,23 @@ export default function perfectCode(options = {}) {
112
113
  // so they pass a strict Content-Security-Policy.
113
114
  const nonceAttr = options.cspNonce ? ` nonce="${escapeAttr(options.cspNonce)}"` : '';
114
115
  // CSS
115
- if (options.injectStyles !== false) {
116
- const css = loadCss();
116
+ if (options.injectStyles !== false && options.cssInjection !== 'import') {
117
+ let css = loadCss();
117
118
  if (css) {
119
+ // v2.0.0: Apply CSS scope if configured
120
+ if (options.scope) {
121
+ css = applyScopeToCss(css, options.scope);
122
+ }
123
+ // v2.0.0: Generate token-bridge CSS (derived --pcb-* variables)
124
+ const tokenCss = generateTokenStyles(options.tokens ?? {}, options.scope);
125
+ if (tokenCss) {
126
+ css = css + '\n' + tokenCss;
127
+ }
128
+ // v2.0.0: Wrap in @layer if configured
129
+ const layerName = options.cssLayer ?? 'pcb';
130
+ if (options.cssInjection === 'layer') {
131
+ css = `@layer ${layerName} {\n${css}\n}`;
132
+ }
118
133
  injections.push(`<style data-pcb${nonceAttr}>${css}</style>`);
119
134
  }
120
135
  }
package/dist/astro.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"astro.js","sourceRoot":"","sources":["../src/astro.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"astro.js","sourceRoot":"","sources":["../src/astro.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
package/dist/index.d.ts CHANGED
@@ -22,11 +22,14 @@ import { disposeHighlighter, runHighlighterTask } from './shiki.js';
22
22
  import { remarkPreserveCodeMeta } from './remark.js';
23
23
  import { wordDiff, hasChanges } from './word-diff.js';
24
24
  import type { DiffToken } from './word-diff.js';
25
+ import { generateTokenStyles, applyScopeToCss, generateDarkModeSelector, generateLightModeSelector } from './tokens.js';
26
+ import type { DesignTokens } from './tokens.js';
25
27
  import type { PerfectCodeOptions } from './types.js';
26
28
  export { remarkPreserveCodeMeta };
27
29
  export { disposeHighlighter, runHighlighterTask };
28
30
  export { wordDiff, hasChanges };
29
- export type { DiffToken };
31
+ export { generateTokenStyles, applyScopeToCss, generateDarkModeSelector, generateLightModeSelector };
32
+ export type { DiffToken, DesignTokens };
30
33
  export declare const rehypePerfectCodeBlocks: Plugin<[PerfectCodeOptions?], Root>;
31
34
  export default rehypePerfectCodeBlocks;
32
35
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAuB,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAChC,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAmBrE,CAAC;AAEJ,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAuB,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,CAAC;AACrG,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AAExC,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAmBrE,CAAC;AAEJ,eAAe,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -20,9 +20,11 @@ import { rehypePerfectCodeBlocks as transformer } from './transformer.js';
20
20
  import { runShikiOnRawBlocks, disposeHighlighter, runHighlighterTask } from './shiki.js';
21
21
  import { remarkPreserveCodeMeta } from './remark.js';
22
22
  import { wordDiff, hasChanges } from './word-diff.js';
23
+ import { generateTokenStyles, applyScopeToCss, generateDarkModeSelector, generateLightModeSelector } from './tokens.js';
23
24
  export { remarkPreserveCodeMeta };
24
25
  export { disposeHighlighter, runHighlighterTask };
25
26
  export { wordDiff, hasChanges };
27
+ export { generateTokenStyles, applyScopeToCss, generateDarkModeSelector, generateLightModeSelector };
26
28
  export const rehypePerfectCodeBlocks = (options = {}) => {
27
29
  const engine = options.engine ?? 'auto';
28
30
  const opts = options;
@@ -143,6 +145,12 @@ function resolveDefaults(opts) {
143
145
  preset: opts.preset ?? 'default',
144
146
  injectStyles: opts.injectStyles ?? true,
145
147
  theme: opts.theme ?? 'auto',
148
+ // v2.0.0: CSS Architecture options
149
+ cssInjection: opts.cssInjection ?? 'inline',
150
+ cssLayer: opts.cssLayer ?? 'pcb',
151
+ tokens: opts.tokens ?? undefined,
152
+ darkMode: opts.darkMode ?? undefined,
153
+ scope: opts.scope ?? undefined,
146
154
  inline: opts.inline ?? false,
147
155
  };
148
156
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/styles.css CHANGED
File without changes
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Design-token bridge — derives 20+ --pcb-* variables from 5 core values.
3
+ *
4
+ * v2.0.0 feature. Uses `color-mix(in oklch, ...)` for automatic color
5
+ * derivation, which is supported in all modern browsers (Chrome 111+,
6
+ * Safari 16.4+, Firefox 113+). For older browsers, the fallback values
7
+ * from the Shiki theme (Pattern 2, v1.3.0) still apply on the <pre> element.
8
+ */
9
+ export interface DesignTokens {
10
+ bg?: string;
11
+ fg?: string;
12
+ border?: string;
13
+ radius?: string;
14
+ monoFont?: string;
15
+ }
16
+ /**
17
+ * Generate a CSS style string containing all derived --pcb-* variables
18
+ * from the 5 core token values. Returns an empty string if no tokens
19
+ * are provided.
20
+ *
21
+ * The generated CSS is applied to `:where(.pcb)` so it has zero
22
+ * specificity — user CSS always wins.
23
+ */
24
+ export declare function generateTokenStyles(tokens: DesignTokens, scope?: string): string;
25
+ /**
26
+ * Generate the dark-mode CSS selector based on the user's dark mode strategy.
27
+ *
28
+ * Returns the selector prefix that should be placed before `.pcb` in CSS rules.
29
+ * For 'media' strategy, returns empty string (the rules are wrapped in @media).
30
+ */
31
+ export declare function generateDarkModeSelector(darkMode?: {
32
+ strategy?: 'media' | 'attribute' | 'class' | 'custom';
33
+ attribute?: string;
34
+ attributeValue?: string;
35
+ class?: string;
36
+ customSelector?: string;
37
+ }, scope?: string): {
38
+ selector: string;
39
+ mediaQuery: string | null;
40
+ };
41
+ /**
42
+ * Generate the light-mode CSS selector (the inverse of dark mode).
43
+ * When dark mode is NOT active, light mode defaults apply.
44
+ */
45
+ export declare function generateLightModeSelector(darkMode?: {
46
+ strategy?: 'media' | 'attribute' | 'class' | 'custom';
47
+ attribute?: string;
48
+ attributeValue?: string;
49
+ class?: string;
50
+ customSelector?: string;
51
+ }, scope?: string): {
52
+ selector: string;
53
+ mediaQuery: string | null;
54
+ };
55
+ /**
56
+ * Apply a scope prefix to all CSS selectors in a stylesheet.
57
+ * This is a simple regex-based approach that handles the plugin's CSS
58
+ * structure. It prefixes every selector that starts with `.pcb` or
59
+ * `:where(.pcb` or `html` with the scope.
60
+ */
61
+ export declare function applyScopeToCss(css: string, scope: string): string;
62
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CA+DhF;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,CAAC,EAAE;IACT,QAAQ,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,EACD,KAAK,CAAC,EAAE,MAAM,GACb;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAkCjD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,CAAC,EAAE;IACT,QAAQ,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,EACD,KAAK,CAAC,EAAE,MAAM,GACb;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAiCjD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA2BlE"}
package/dist/tokens.js ADDED
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Design-token bridge — derives 20+ --pcb-* variables from 5 core values.
3
+ *
4
+ * v2.0.0 feature. Uses `color-mix(in oklch, ...)` for automatic color
5
+ * derivation, which is supported in all modern browsers (Chrome 111+,
6
+ * Safari 16.4+, Firefox 113+). For older browsers, the fallback values
7
+ * from the Shiki theme (Pattern 2, v1.3.0) still apply on the <pre> element.
8
+ */
9
+ /**
10
+ * Generate a CSS style string containing all derived --pcb-* variables
11
+ * from the 5 core token values. Returns an empty string if no tokens
12
+ * are provided.
13
+ *
14
+ * The generated CSS is applied to `:where(.pcb)` so it has zero
15
+ * specificity — user CSS always wins.
16
+ */
17
+ export function generateTokenStyles(tokens, scope) {
18
+ if (!tokens || Object.keys(tokens).length === 0)
19
+ return '';
20
+ const { bg, fg, border, radius, monoFont } = tokens;
21
+ if (!bg && !fg && !border && !radius && !monoFont)
22
+ return '';
23
+ const scopePrefix = scope ? `${scope} ` : '';
24
+ const lines = [];
25
+ // Direct mappings (1:1)
26
+ if (bg)
27
+ lines.push(` --pcb-bg: ${bg};`);
28
+ if (fg)
29
+ lines.push(` --pcb-fg: ${fg};`);
30
+ if (border)
31
+ lines.push(` --pcb-border: ${border};`);
32
+ if (radius)
33
+ lines.push(` --pcb-radius: ${radius};`);
34
+ if (monoFont)
35
+ lines.push(` --pcb-font-mono: ${monoFont};`);
36
+ // Derived mappings (auto-computed from core values via color-mix)
37
+ // Only derive if BOTH bg and fg are available (needed for color-mix)
38
+ if (bg && fg) {
39
+ // Line numbers: muted (50% mix of fg over bg)
40
+ lines.push(` --pcb-text-muted: color-mix(in oklch, ${fg}, ${bg} 50%);`);
41
+ lines.push(` --pcb-ln-fg: color-mix(in oklch, ${fg}, ${bg} 50%);`);
42
+ // Header bar background: slightly different from body (5% fg over bg)
43
+ lines.push(` --pcb-bg-header: color-mix(in oklch, ${fg} 5%, ${bg});`);
44
+ // Header text: muted (30% fg mixed toward bg)
45
+ lines.push(` --pcb-text-bar: color-mix(in oklch, ${fg}, ${bg} 30%);`);
46
+ // Line highlight: subtle tint (12% fg over bg)
47
+ lines.push(` --pcb-line-highlight: color-mix(in oklch, ${fg} 12%, ${bg});`);
48
+ // Diff add: green tint (18% green over bg)
49
+ lines.push(` --pcb-line-add: color-mix(in oklch, #2ea043 18%, ${bg});`);
50
+ // Diff del: red tint (18% red over bg)
51
+ lines.push(` --pcb-line-del: color-mix(in oklch, #f85149 18%, ${bg});`);
52
+ // Focus: blue tint (18% blue over bg)
53
+ lines.push(` --pcb-line-focus: color-mix(in oklch, #58a6ff 18%, ${bg});`);
54
+ // Copy button hover background: subtle (8% fg over bg)
55
+ lines.push(` --pcb-copy-hover-bg: color-mix(in oklch, ${fg} 8%, ${bg});`);
56
+ // Gutter background: same as bg by default
57
+ lines.push(` --pcb-bg-gutter: ${bg};`);
58
+ // Caption background: slightly different (like header)
59
+ lines.push(` --pcb-caption-bg: color-mix(in oklch, ${fg} 5%, ${bg});`);
60
+ // Caption color: muted (like header text)
61
+ lines.push(` --pcb-caption-color: color-mix(in oklch, ${fg}, ${bg} 30%);`);
62
+ // Word highlight: gold tint (30% gold over bg)
63
+ lines.push(` --pcb-word-bg: color-mix(in oklch, #bb8009 30%, ${bg});`);
64
+ // Word highlight (id): blue tint (30% blue over bg)
65
+ lines.push(` --pcb-word-bg-id: color-mix(in oklch, #58a6ff 30%, ${bg});`);
66
+ }
67
+ if (lines.length === 0)
68
+ return '';
69
+ return `:where(${scopePrefix}.pcb) {\n${lines.join('\n')}\n}`;
70
+ }
71
+ /**
72
+ * Generate the dark-mode CSS selector based on the user's dark mode strategy.
73
+ *
74
+ * Returns the selector prefix that should be placed before `.pcb` in CSS rules.
75
+ * For 'media' strategy, returns empty string (the rules are wrapped in @media).
76
+ */
77
+ export function generateDarkModeSelector(darkMode, scope) {
78
+ const scopePrefix = scope ? `${scope} ` : '';
79
+ if (!darkMode || darkMode.strategy === 'media' || !darkMode.strategy) {
80
+ // Default: prefers-color-scheme media query
81
+ return { selector: '', mediaQuery: 'prefers-color-scheme: dark' };
82
+ }
83
+ if (darkMode.strategy === 'attribute') {
84
+ const attr = darkMode.attribute ?? 'data-theme';
85
+ const val = darkMode.attributeValue ?? 'dark';
86
+ return {
87
+ selector: `html[${attr}="${val}"] ${scopePrefix}`.trim(),
88
+ mediaQuery: null,
89
+ };
90
+ }
91
+ if (darkMode.strategy === 'class') {
92
+ const cls = darkMode.class ?? 'dark';
93
+ return {
94
+ selector: `html.${cls} ${scopePrefix}`.trim(),
95
+ mediaQuery: null,
96
+ };
97
+ }
98
+ if (darkMode.strategy === 'custom') {
99
+ const sel = darkMode.customSelector ?? ':root';
100
+ return {
101
+ selector: `${sel} ${scopePrefix}`.trim(),
102
+ mediaQuery: null,
103
+ };
104
+ }
105
+ return { selector: '', mediaQuery: 'prefers-color-scheme: dark' };
106
+ }
107
+ /**
108
+ * Generate the light-mode CSS selector (the inverse of dark mode).
109
+ * When dark mode is NOT active, light mode defaults apply.
110
+ */
111
+ export function generateLightModeSelector(darkMode, scope) {
112
+ const scopePrefix = scope ? `${scope} ` : '';
113
+ if (!darkMode || darkMode.strategy === 'media' || !darkMode.strategy) {
114
+ return { selector: '', mediaQuery: 'prefers-color-scheme: light' };
115
+ }
116
+ if (darkMode.strategy === 'attribute') {
117
+ const attr = darkMode.attribute ?? 'data-theme';
118
+ const val = darkMode.attributeValue ?? 'dark';
119
+ // Light = when the attribute is NOT the dark value
120
+ return {
121
+ selector: `html:not([${attr}="${val}"]) ${scopePrefix}`.trim(),
122
+ mediaQuery: null,
123
+ };
124
+ }
125
+ if (darkMode.strategy === 'class') {
126
+ const cls = darkMode.class ?? 'dark';
127
+ return {
128
+ selector: `html:not(.${cls}) ${scopePrefix}`.trim(),
129
+ mediaQuery: null,
130
+ };
131
+ }
132
+ if (darkMode.strategy === 'custom') {
133
+ // For custom, light = when the custom selector does NOT match
134
+ // This is tricky — we can't easily negate an arbitrary selector.
135
+ // Fall back to media query for the light case.
136
+ return { selector: '', mediaQuery: 'prefers-color-scheme: light' };
137
+ }
138
+ return { selector: '', mediaQuery: 'prefers-color-scheme: light' };
139
+ }
140
+ /**
141
+ * Apply a scope prefix to all CSS selectors in a stylesheet.
142
+ * This is a simple regex-based approach that handles the plugin's CSS
143
+ * structure. It prefixes every selector that starts with `.pcb` or
144
+ * `:where(.pcb` or `html` with the scope.
145
+ */
146
+ export function applyScopeToCss(css, scope) {
147
+ if (!scope)
148
+ return css;
149
+ // Don't double-prefix if the scope is already present
150
+ if (css.includes(`${scope} .pcb`) || css.includes(`${scope}.pcb`))
151
+ return css;
152
+ // Prefix selectors that target .pcb or html.no-js
153
+ let result = css;
154
+ // :where(.pcb) → :where(scope .pcb)
155
+ result = result.replace(/:where\(\.pcb\)/g, `:where(${scope} .pcb)`);
156
+ // :where(html:not(...)) :where(.pcb:not(...)) → :where(scope html:not(...)) :where(scope .pcb:not(...))
157
+ // This is complex — for nested :where() with html, just prefix the whole compound
158
+ result = result.replace(/:where\(html/g, `:where(${scope} html`);
159
+ // .pcb pre → scope .pcb pre (the framework-reset overrides)
160
+ result = result.replace(/^(\.pcb\s)/gm, `${scope} $1`);
161
+ // .pcb__copy → scope .pcb__copy (note: .pcb__ starts with a dot, don't add another)
162
+ result = result.replace(/^(\.pcb__)/gm, `${scope} $1`);
163
+ // html.no-js .pcb__copy → scope html.no-js scope .pcb__copy
164
+ // (This is an edge case — the no-js rule needs both html and .pcb scoped)
165
+ result = result.replace(/html\.no-js\s+\.pcb/g, `${scope} html.no-js ${scope} .pcb`);
166
+ return result;
167
+ }
168
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../src/transformer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAuC,IAAI,EAAQ,MAAM,MAAM,CAAC;AAI5E,OAAO,KAAK,EAAE,kBAAkB,EAA2C,MAAM,YAAY,CAAC;AA+C9F;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAMzE;AAoFD,wBAAgB,uBAAuB,CAAC,WAAW,GAAE,kBAAuB,IAyE5D,MAAM,IAAI,mBAqCzB"}
1
+ {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../src/transformer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAuC,IAAI,EAAQ,MAAM,MAAM,CAAC;AAI5E,OAAO,KAAK,EAAE,kBAAkB,EAA2C,MAAM,YAAY,CAAC;AA+C9F;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAMzE;AAoFD,wBAAgB,uBAAuB,CAAC,WAAW,GAAE,kBAAuB,IA8E5D,MAAM,IAAI,mBAqCzB"}
@@ -229,6 +229,11 @@ export function rehypePerfectCodeBlocks(userOptions = {}) {
229
229
  preset: 'default',
230
230
  injectStyles: true,
231
231
  theme: 'auto',
232
+ cssInjection: 'inline',
233
+ cssLayer: 'pcb',
234
+ tokens: undefined,
235
+ darkMode: undefined,
236
+ scope: undefined,
232
237
  inline: false,
233
238
  ...rest,
234
239
  };