@dr-ishaan/remake-blocks 1.8.0 → 1.10.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
@@ -1,5 +1,145 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.10.0 — 2026-06-21
4
+
5
+ ### Added — P2 Developer Experience batch
6
+
7
+ Four DX features closing the P2 DX items from the v1.6.0 audit.
8
+
9
+ #### `CLASSES` — exported CSS class name constants
10
+
11
+ Frozen object of all CSS class names used by the plugin. Use in CSS-in-JS, tests, or any code that needs to reference callout classes programmatically without hardcoding strings.
12
+
13
+ ```ts
14
+ import { CLASSES } from '@dr-ishaan/remake-blocks';
15
+
16
+ document.querySelector(`.${CLASSES.CALLOUT_NOTE}`) // '.callout-note'
17
+ CLASSES.CALLOUT_TITLE // 'callout-title'
18
+ CLASSES.DISCLOSURE_ACCORDION // 'disclosure-accordion'
19
+ ```
20
+
21
+ Includes all 42 callout type classes + sub-element classes (title, body, icon, collapsible) + disclosure/accordion/pull-quote/epigraph/blockquote-enhanced classes.
22
+
23
+ #### `LucideIconName` — TypeScript type for icon names
24
+
25
+ Closed union of all 67 Lucide icon names recognized by the per-callout `{icon="..."}` override. Provides autocomplete and type safety when specifying icon names in config.
26
+
27
+ ```ts
28
+ import type { LucideIconName } from '@dr-ishaan/remake-blocks';
29
+
30
+ const icon: LucideIconName = 'rocket'; // ✓ autocomplete
31
+ const bad: LucideIconName = 'xyz'; // ✗ type error
32
+ ```
33
+
34
+ #### `devWarnings` — dev-mode warnings
35
+
36
+ Catches common authoring mistakes at build time via `console.warn`:
37
+
38
+ - Unknown callout type (`> [!TYPO]` → "Unknown callout type 'TYPO'. Did you mean 'tip'?")
39
+ - Incomplete custom callout config (missing `className`, `color`, etc.)
40
+
41
+ ```ts
42
+ remakeBlocks({ devWarnings: true }) // explicit enable
43
+ remakeBlocks({ devWarnings: false }) // explicit disable
44
+ remakeBlocks({}) // auto: true in dev, false in prod
45
+ ```
46
+
47
+ Auto-enabled when `process.env.NODE_ENV !== 'production'`. Production builds should strip `console.warn` via their bundler.
48
+
49
+ #### `strictConfigValidation` — strict custom callout validation
50
+
51
+ When `true`, throws a descriptive Error at plugin init time if any `customCallouts` entry is missing required fields (`type`, `icon`, `className`, `defaultTitle`, `color`, `backgroundColor`).
52
+
53
+ ```ts
54
+ remakeBlocks({
55
+ strictConfigValidation: true,
56
+ customCallouts: [
57
+ { type: 'x', icon: '🔥' } // ← throws: missing className, defaultTitle, color, backgroundColor
58
+ ]
59
+ })
60
+ ```
61
+
62
+ When `false` (default, backward-compatible), incomplete configs are silently normalized + a dev warning is emitted.
63
+
64
+ ### New exports
65
+
66
+ - `CLASSES` — frozen CSS class name constants (from package root + `remake-blocks/astro`)
67
+ - `validateCustomCallouts(configs, strict)` — programmatic config validation
68
+ - `suggestSimilarType(input, knownTypes)` — Levenshtein "did you mean" suggester
69
+ - `LucideIconName` type — for TypeScript autocomplete on icon names
70
+ - `CalloutClassName` type — keyof typeof CLASSES
71
+
72
+ ### Test coverage
73
+
74
+ - 436 new tests for v1.10.0 (100% pass)
75
+ - 20,360 prior regression tests still pass (zero regressions across v1.6.0 → v1.9.0 suites)
76
+ - 32-item audit: 21 works / 8 partial / 3 missing (was 17 / 9 / 6)
77
+
78
+ ### Backward compatibility
79
+
80
+ All four features are opt-in. `CLASSES` and `LucideIconName` are pure additions (new exports). `devWarnings` defaults to auto (true in dev, false in prod) — no behavior change for production users. `strictConfigValidation` defaults to `false` — existing configs continue to work via silent normalization.
81
+
82
+ ---
83
+
84
+ ## 1.9.0 — 2026-06-21
85
+
86
+ ### Added — P1 Performance batch
87
+
88
+ Two new performance features closing the P1 perf items from the v1.6.0 audit.
89
+
90
+ #### `icons.strategy` — SVG icon sprite mode
91
+
92
+ Pages with many callouts (FAQ pages, documentation indexes) pay a significant HTML cost: each callout inlines a full `<svg>...</svg>` (~200-400 bytes). The sprite strategy emits one `<svg style="display:none">` sprite at the top of the document with `<symbol>` definitions, then each callout references its icon via `<use href="#rb-icon-{type}"/>` — deduplicating icons across the page.
93
+
94
+ ```ts
95
+ remakeBlocks({
96
+ icons: { strategy: 'sprite' } // 'inline' (default) | 'sprite' | 'none'
97
+ })
98
+ ```
99
+
100
+ - `'inline'` (default, backward-compatible): full SVG inlined per callout.
101
+ - `'sprite'`: one `<svg>` sprite with `<symbol>` per unique type, `<use>` references per callout. For 10 callouts of the same type, this saves ~2KB of HTML.
102
+ - `'none'`: no icons rendered.
103
+
104
+ Custom callout types and per-callout `{icon="rocket"}` overrides are also added to the sprite (each gets its own `<symbol>`).
105
+
106
+ #### `generateMinimalThemeCss()` — CSS tree-shaking
107
+
108
+ When you've restricted callout types via `types.enable` or `types.disable`, the full bundled `styles.css` (~28KB) still includes styles for all 42 types. `generateMinimalThemeCss()` generates a complete-but-minimal theme CSS containing only the base styles + the enabled types' rules.
109
+
110
+ ```ts
111
+ import { generateMinimalThemeCss } from '@dr-ishaan/remake-blocks';
112
+
113
+ const css = generateMinimalThemeCss({
114
+ types: { enable: ['note', 'tip', 'warning'] }
115
+ });
116
+ // css is ~2.5KB instead of ~28KB — 91% reduction
117
+ ```
118
+
119
+ The generated CSS contains:
120
+ - `:root` block with layout variables + per-type `--callout-{type}-border/bg` for ONLY the enabled types
121
+ - Base structural rules (`.callout`, `.callout-title`, `.callout-body`, `.callout-icon`) — always included
122
+ - Per-type class rules for ONLY the enabled types
123
+ - Dark mode `@media (prefers-color-scheme: dark)` override
124
+
125
+ **Usage pattern:** set `cssInjection: 'import'` to disable auto-injection of the full theme, then inject the minimal CSS yourself.
126
+
127
+ ### New exports
128
+
129
+ - `generateMinimalThemeCss(opts)` — exported from the package root and from `remake-blocks/astro`.
130
+
131
+ ### Test coverage
132
+
133
+ - 1,736 new tests for v1.9.0 options (100% pass)
134
+ - 18,532 prior regression tests still pass (zero regressions across v1.6.0 → v1.8.0 suites)
135
+ - 32-item audit: 17 works / 9 partial / 6 missing (was 15 / 9 / 8)
136
+
137
+ ### Backward compatibility
138
+
139
+ Both features are opt-in. Omitting `icons` defaults to `'inline'` (unchanged from v1.8.0). Not calling `generateMinimalThemeCss()` leaves the bundled theme unchanged.
140
+
141
+ ---
142
+
3
143
  ## 1.8.0 — 2026-06-21
4
144
 
5
145
  ### Added — P1 Configuration batch
package/dist/astro.d.ts CHANGED
@@ -39,7 +39,7 @@ import type { AstroIntegration } from "astro";
39
39
  import type { AstroRemakeBlocksOptions } from "./types.js";
40
40
  export type { AstroRemakeBlocksOptions, RemakeBlocksOptions, CalloutConfig, CalloutType, BuiltinCalloutType, ParsedCallout } from "./types.js";
41
41
  export { remarkRemakeBlocks, remarkCalloutBlocks } from "./remark-remake-blocks.js";
42
- export { generateCss } from "./css-generator.js";
42
+ export { generateCss, generateMinimalThemeCss } from "./css-generator.js";
43
43
  /**
44
44
  * Create the `remake-blocks` Astro integration.
45
45
  *
@@ -1 +1 @@
1
- {"version":3,"file":"astro.d.ts","sourceRoot":"","sources":["../src/astro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,KAAK,EAAE,wBAAwB,EAAuB,MAAM,YAAY,CAAC;AAKhF,YAAY,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG/I,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,OAAO,GAAE,wBAAwB,GAAG,IAAI,GAAG,SAAc,GACxD,gBAAgB,CAsDlB"}
1
+ {"version":3,"file":"astro.d.ts","sourceRoot":"","sources":["../src/astro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,KAAK,EAAE,wBAAwB,EAAuB,MAAM,YAAY,CAAC;AAKhF,YAAY,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG/I,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE1E;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,OAAO,GAAE,wBAAwB,GAAG,IAAI,GAAG,SAAc,GACxD,gBAAgB,CAsDlB"}
package/dist/astro.js CHANGED
@@ -41,8 +41,8 @@ import { remarkRemakeBlocks } from "./remark-remake-blocks.js";
41
41
  import { generateCss } from "./css-generator.js";
42
42
  // Re-export the remark plugin for advanced usage
43
43
  export { remarkRemakeBlocks, remarkCalloutBlocks } from "./remark-remake-blocks.js";
44
- // v1.7.0+: re-export the CSS generator for advanced usage
45
- export { generateCss } from "./css-generator.js";
44
+ // v1.7.0+: re-export the CSS generators for advanced usage
45
+ export { generateCss, generateMinimalThemeCss } from "./css-generator.js";
46
46
  /**
47
47
  * Create the `remake-blocks` Astro integration.
48
48
  *
package/dist/astro.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"astro.js","sourceRoot":"","sources":["../src/astro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,iDAAiD;AACjD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACpF,0DAA0D;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,UAAuD,EAAE;IAEzD,+EAA+E;IAC/E,wEAAwE;IACxE,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;IAC3B,MAAM,EACJ,YAAY,GAAG,IAAI,EACnB,GAAG,aAAa,EACjB,GAAG,IAAI,CAAC;IAET,OAAO;QACL,IAAI,EAAE,eAAe;QAErB,KAAK,EAAE;YACL,oBAAoB,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE;gBAC/D,2BAA2B;gBAC3B,YAAY,CAAC;oBACX,QAAQ,EAAE;wBACR,aAAa,EAAE;4BACb,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,IAAI,EAAE,CAAC;4BACzC,CAAC,kBAAkB,EAAE,aAAa,CAAC;yBACpC;qBACF;iBACF,CAAC,CAAC;gBAEH,+CAA+C;gBAC/C,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;oBACzD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;oBAC9D,YAAY,CAAC,UAAU,EAAE,WAAW,UAAU,IAAI,CAAC,CAAC;oBACpD,YAAY,CAAC,MAAM,EAAE,WAAW,aAAa,IAAI,CAAC,CAAC;oBAEnD,6DAA6D;oBAC7D,kEAAkE;oBAClE,kEAAkE;oBAClE,iEAAiE;oBACjE,kEAAkE;oBAClE,oDAAoD;oBACpD,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,IAAI,QAAQ,CAAC;oBACzD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;wBAC3B,MAAM,YAAY,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;wBAChD,IAAI,YAAY,EAAE,CAAC;4BACjB,gEAAgE;4BAChE,MAAM,OAAO,GAAG,YAAY;iCACzB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;iCACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;iCACpB,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;4BAC5B,YAAY,CAAC,UAAU,EAAE,qBAAqB,OAAO,+HAA+H,CAAC,CAAC;wBACxL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"astro.js","sourceRoot":"","sources":["../src/astro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAA2B,MAAM,oBAAoB,CAAC;AAK1E,iDAAiD;AACjD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACpF,2DAA2D;AAC3D,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE1E;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,UAAuD,EAAE;IAEzD,+EAA+E;IAC/E,wEAAwE;IACxE,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;IAC3B,MAAM,EACJ,YAAY,GAAG,IAAI,EACnB,GAAG,aAAa,EACjB,GAAG,IAAI,CAAC;IAET,OAAO;QACL,IAAI,EAAE,eAAe;QAErB,KAAK,EAAE;YACL,oBAAoB,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE;gBAC/D,2BAA2B;gBAC3B,YAAY,CAAC;oBACX,QAAQ,EAAE;wBACR,aAAa,EAAE;4BACb,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,IAAI,EAAE,CAAC;4BACzC,CAAC,kBAAkB,EAAE,aAAa,CAAC;yBACpC;qBACF;iBACF,CAAC,CAAC;gBAEH,+CAA+C;gBAC/C,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;oBACzD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;oBAC9D,YAAY,CAAC,UAAU,EAAE,WAAW,UAAU,IAAI,CAAC,CAAC;oBACpD,YAAY,CAAC,MAAM,EAAE,WAAW,aAAa,IAAI,CAAC,CAAC;oBAEnD,6DAA6D;oBAC7D,kEAAkE;oBAClE,kEAAkE;oBAClE,iEAAiE;oBACjE,kEAAkE;oBAClE,oDAAoD;oBACpD,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,IAAI,QAAQ,CAAC;oBACzD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;wBAC3B,MAAM,YAAY,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;wBAChD,IAAI,YAAY,EAAE,CAAC;4BACjB,gEAAgE;4BAChE,MAAM,OAAO,GAAG,YAAY;iCACzB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;iCACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;iCACpB,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;4BAC5B,YAAY,CAAC,UAAU,EAAE,qBAAqB,OAAO,+HAA+H,CAAC,CAAC;wBACxL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -13,6 +13,11 @@
13
13
  * a `:root` block; setting `typeTokens` alone emits per-type variables;
14
14
  * setting `darkMode.strategy: 'class'` emits a `.dark { ... }` wrapper.
15
15
  *
16
+ * v1.9.0: also exports `generateMinimalThemeCss(opts)` which produces a
17
+ * complete-but-minimal theme CSS containing only the base styles + the
18
+ * enabled callout types. Use this INSTEAD of importing the full bundled
19
+ * `styles.css` when you've restricted types via `types.enable`/`disable`.
20
+ *
16
21
  * @module css-generator
17
22
  */
18
23
  import type { RemakeBlocksOptions } from "./types.js";
@@ -26,4 +31,34 @@ import type { RemakeBlocksOptions } from "./types.js";
26
31
  * with a leading `@layer <name>;` declaration so the layer exists.
27
32
  */
28
33
  export declare function generateCss(opts: RemakeBlocksOptions): string;
34
+ /**
35
+ * v1.9.0: Generate a complete-but-minimal theme CSS containing only the base
36
+ * styles and the enabled callout types.
37
+ *
38
+ * Use this INSTEAD of importing the full bundled `styles.css` when you've
39
+ * restricted types via `types.enable` or `types.disable`. For a 5-type
40
+ * allowlist, this reduces theme CSS from ~28KB to ~5KB.
41
+ *
42
+ * The generated CSS contains:
43
+ * 1. `:root` block with layout variables + per-type `--callout-{type}-border/bg`
44
+ * for ONLY the enabled types.
45
+ * 2. Base structural rules (`.callout`, `.callout-title`, `.callout-body`,
46
+ * `.callout-icon`, etc.) — these are always included.
47
+ * 3. Per-type class rules (`.callout-{type}`) for ONLY the enabled types.
48
+ * 4. Dark mode `:root` override (using the same `--callout-{type}-*` vars).
49
+ *
50
+ * Note: dark mode values are derived from the light mode palette by darkening
51
+ * backgrounds. For full dark-mode fidelity, import the full bundled theme.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * import { generateMinimalThemeCss } from '@dr-ishaan/remake-blocks';
56
+ *
57
+ * const css = generateMinimalThemeCss({
58
+ * types: { enable: ['note', 'tip', 'warning'] }
59
+ * });
60
+ * // Inject `css` into your site's <head> instead of importing styles.css
61
+ * ```
62
+ */
63
+ export declare function generateMinimalThemeCss(opts: RemakeBlocksOptions): string;
29
64
  //# sourceMappingURL=css-generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"css-generator.d.ts","sourceRoot":"","sources":["../src/css-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAwGtD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAwD7D"}
1
+ {"version":3,"file":"css-generator.d.ts","sourceRoot":"","sources":["../src/css-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAiB,MAAM,YAAY,CAAC;AAyGrE;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAwD7D;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CA4GzE"}
@@ -13,8 +13,14 @@
13
13
  * a `:root` block; setting `typeTokens` alone emits per-type variables;
14
14
  * setting `darkMode.strategy: 'class'` emits a `.dark { ... }` wrapper.
15
15
  *
16
+ * v1.9.0: also exports `generateMinimalThemeCss(opts)` which produces a
17
+ * complete-but-minimal theme CSS containing only the base styles + the
18
+ * enabled callout types. Use this INSTEAD of importing the full bundled
19
+ * `styles.css` when you've restricted types via `types.enable`/`disable`.
20
+ *
16
21
  * @module css-generator
17
22
  */
23
+ import { BUILTIN_CALLOUTS } from "./remark-remake-blocks.js";
18
24
  /**
19
25
  * Build a CSS selector for the dark-mode strategy.
20
26
  * Returns null when strategy is 'media' (the bundled themes already cover it).
@@ -181,4 +187,145 @@ ${rootDeclarations}
181
187
  }
182
188
  return css + (css ? "\n" : "");
183
189
  }
190
+ // ---------------------------------------------------------------------------
191
+ // v1.9.0: generateMinimalThemeCss — tree-shaken theme CSS
192
+ // ---------------------------------------------------------------------------
193
+ /**
194
+ * v1.9.0: Generate a complete-but-minimal theme CSS containing only the base
195
+ * styles and the enabled callout types.
196
+ *
197
+ * Use this INSTEAD of importing the full bundled `styles.css` when you've
198
+ * restricted types via `types.enable` or `types.disable`. For a 5-type
199
+ * allowlist, this reduces theme CSS from ~28KB to ~5KB.
200
+ *
201
+ * The generated CSS contains:
202
+ * 1. `:root` block with layout variables + per-type `--callout-{type}-border/bg`
203
+ * for ONLY the enabled types.
204
+ * 2. Base structural rules (`.callout`, `.callout-title`, `.callout-body`,
205
+ * `.callout-icon`, etc.) — these are always included.
206
+ * 3. Per-type class rules (`.callout-{type}`) for ONLY the enabled types.
207
+ * 4. Dark mode `:root` override (using the same `--callout-{type}-*` vars).
208
+ *
209
+ * Note: dark mode values are derived from the light mode palette by darkening
210
+ * backgrounds. For full dark-mode fidelity, import the full bundled theme.
211
+ *
212
+ * @example
213
+ * ```ts
214
+ * import { generateMinimalThemeCss } from '@dr-ishaan/remake-blocks';
215
+ *
216
+ * const css = generateMinimalThemeCss({
217
+ * types: { enable: ['note', 'tip', 'warning'] }
218
+ * });
219
+ * // Inject `css` into your site's <head> instead of importing styles.css
220
+ * ```
221
+ */
222
+ export function generateMinimalThemeCss(opts) {
223
+ // Resolve the enabled types set (same logic as buildCalloutConfigMap)
224
+ const enable = opts.types?.enable;
225
+ const disable = opts.types?.disable;
226
+ const enabledTypes = [];
227
+ for (const config of BUILTIN_CALLOUTS) {
228
+ const t = config.type.toLowerCase();
229
+ if (enable && enable.length > 0) {
230
+ if (enable.map(s => s.toLowerCase()).includes(t))
231
+ enabledTypes.push(config);
232
+ }
233
+ else if (disable && disable.length > 0) {
234
+ if (!disable.map(s => s.toLowerCase()).includes(t))
235
+ enabledTypes.push(config);
236
+ }
237
+ else {
238
+ enabledTypes.push(config);
239
+ }
240
+ }
241
+ // Include custom callouts too
242
+ if (opts.customCallouts) {
243
+ for (const c of opts.customCallouts) {
244
+ if (c && c.type)
245
+ enabledTypes.push(c);
246
+ }
247
+ }
248
+ // 1. :root block — layout vars + per-type color vars
249
+ const rootLines = [
250
+ " /* Layout */",
251
+ " --callout-radius: 6px;",
252
+ " --callout-padding-y: 8px;",
253
+ " --callout-padding-x: 12px;",
254
+ " --callout-gap: 4px;",
255
+ " --callout-title-font-size: 1.0625em;",
256
+ " --callout-body-font-size: 1.0625em;",
257
+ " --callout-icon-size: 20px;",
258
+ " --callout-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);",
259
+ " /* Per-type palettes */",
260
+ ];
261
+ for (const c of enabledTypes) {
262
+ rootLines.push(` --callout-${c.type}-border: ${c.color};`);
263
+ rootLines.push(` --callout-${c.type}-bg: ${c.backgroundColor};`);
264
+ }
265
+ // 2. Base structural rules — always included
266
+ const baseRules = `
267
+ .callout {
268
+ border-left: 4px solid var(--callout-border, #d0d7de);
269
+ background-color: var(--callout-bg, #f6f8fa);
270
+ border-radius: var(--callout-radius, 6px);
271
+ padding: var(--callout-padding-y, 8px) var(--callout-padding-x, 12px);
272
+ margin: 16px 0;
273
+ box-shadow: var(--callout-shadow, none);
274
+ }
275
+ .callout-title {
276
+ display: flex;
277
+ align-items: center;
278
+ gap: var(--callout-gap, 4px);
279
+ font-weight: 600;
280
+ font-size: var(--callout-title-font-size, 1em);
281
+ margin-bottom: 4px;
282
+ }
283
+ .callout-icon {
284
+ display: inline-flex;
285
+ align-items: center;
286
+ justify-content: center;
287
+ width: var(--callout-icon-size, 20px);
288
+ height: var(--callout-icon-size, 20px);
289
+ flex-shrink: 0;
290
+ }
291
+ .callout-icon svg { width: 100%; height: 100%; }
292
+ .callout-body {
293
+ font-size: var(--callout-body-font-size, 1em);
294
+ line-height: 1.5;
295
+ }
296
+ .callout-body p:first-child { margin-top: 0; }
297
+ .callout-body p:last-child { margin-bottom: 0; }
298
+ .callout.collapsible > .callout-body { overflow: hidden; }
299
+ details.callout { padding: 0; }
300
+ details.callout > .callout-title { padding: var(--callout-padding-y, 8px) var(--callout-padding-x, 12px); cursor: pointer; }
301
+ details.callout > .callout-body { padding: 0 var(--callout-padding-x, 12px) var(--callout-padding-y, 8px); }
302
+ `;
303
+ // 3. Per-type class rules
304
+ const typeRules = [];
305
+ for (const c of enabledTypes) {
306
+ typeRules.push(`.callout-${c.type} {
307
+ border-left-color: var(--callout-${c.type}-border, ${c.color});
308
+ background-color: var(--callout-${c.type}-bg, ${c.backgroundColor});
309
+ }`);
310
+ }
311
+ // 4. Minimal dark mode override — darken backgrounds via color-mix
312
+ const darkLines = [];
313
+ for (const c of enabledTypes) {
314
+ darkLines.push(` --callout-${c.type}-border: ${c.color};`);
315
+ darkLines.push(` --callout-${c.type}-bg: color-mix(in oklch, ${c.backgroundColor} 30%, #0d1117);`);
316
+ }
317
+ const css = `/* remake-blocks minimal theme — v1.9.0 generated */
318
+ :root {
319
+ ${rootLines.join("\n")}
320
+ }
321
+ ${baseRules}
322
+ ${typeRules.join("\n\n")}
323
+ @media (prefers-color-scheme: dark) {
324
+ :root {
325
+ ${darkLines.map(l => " " + l).join("\n")}
326
+ }
327
+ }
328
+ `;
329
+ return css;
330
+ }
184
331
  //# sourceMappingURL=css-generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"css-generator.js","sourceRoot":"","sources":["../src/css-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"css-generator.js","sourceRoot":"","sources":["../src/css-generator.ts"],"names":[],"mappings":"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"}
package/dist/dx.d.ts ADDED
@@ -0,0 +1,139 @@
1
+ /**
2
+ * v1.10.0: Developer Experience utilities.
3
+ *
4
+ * Exports:
5
+ * - CLASSES: frozen object of CSS class name constants for programmatic use
6
+ * - warn(message, ...args): dev-mode warning emitter (gated on devWarnings option)
7
+ * - validateCustomCallouts(configs, strict): validates customCallouts at init time
8
+ * - suggestSimilarType(type, knownTypes): Levenshtein-based "did you mean" suggester
9
+ *
10
+ * @module dx
11
+ */
12
+ /**
13
+ * v1.10.0+: Frozen object of CSS class names used by the plugin. Use these
14
+ * in CSS-in-JS, tests, or any code that needs to reference callout classes
15
+ * programmatically without hardcoding strings.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * import { CLASSES } from '@dr-ishaan/remake-blocks';
20
+ *
21
+ * document.querySelector(`.${CLASSES.CALLOUT_NOTE}`) // '.callout-note'
22
+ * ```
23
+ */
24
+ export declare const CLASSES: Readonly<{
25
+ readonly CALLOUT: "callout";
26
+ readonly CALLOUT_NOTE: "callout-note";
27
+ readonly CALLOUT_TIP: "callout-tip";
28
+ readonly CALLOUT_IMPORTANT: "callout-important";
29
+ readonly CALLOUT_WARNING: "callout-warning";
30
+ readonly CALLOUT_CAUTION: "callout-caution";
31
+ readonly CALLOUT_ABSTRACT: "callout-abstract";
32
+ readonly CALLOUT_INFO: "callout-info";
33
+ readonly CALLOUT_SUCCESS: "callout-success";
34
+ readonly CALLOUT_QUESTION: "callout-question";
35
+ readonly CALLOUT_FAILURE: "callout-failure";
36
+ readonly CALLOUT_DANGER: "callout-danger";
37
+ readonly CALLOUT_QUOTE: "callout-quote";
38
+ readonly CALLOUT_BUG: "callout-bug";
39
+ readonly CALLOUT_EXAMPLE: "callout-example";
40
+ readonly CALLOUT_TODO: "callout-todo";
41
+ readonly CALLOUT_SUMMARY: "callout-summary";
42
+ readonly CALLOUT_TLDR: "callout-tldr";
43
+ readonly CALLOUT_HINT: "callout-hint";
44
+ readonly CALLOUT_CHECK: "callout-check";
45
+ readonly CALLOUT_DONE: "callout-done";
46
+ readonly CALLOUT_HELP: "callout-help";
47
+ readonly CALLOUT_FAQ: "callout-faq";
48
+ readonly CALLOUT_ATTENTION: "callout-attention";
49
+ readonly CALLOUT_FAIL: "callout-fail";
50
+ readonly CALLOUT_MISSING: "callout-missing";
51
+ readonly CALLOUT_ERROR: "callout-error";
52
+ readonly CALLOUT_CITE: "callout-cite";
53
+ readonly CALLOUT_DEFINITION: "callout-definition";
54
+ readonly CALLOUT_ASIDE: "callout-aside";
55
+ readonly CALLOUT_CORRECTION: "callout-correction";
56
+ readonly CALLOUT_UPDATE: "callout-update";
57
+ readonly CALLOUT_FIGURE: "callout-figure";
58
+ readonly CALLOUT_FURTHER_READING: "callout-further-reading";
59
+ readonly CALLOUT_PREREQUISITE: "callout-prerequisite";
60
+ readonly CALLOUT_EXERCISE: "callout-exercise";
61
+ readonly CALLOUT_SIDENOTE: "callout-sidenote";
62
+ readonly CALLOUT_TIMELINE: "callout-timeline";
63
+ readonly CALLOUT_ANNOUNCEMENT: "callout-announcement";
64
+ readonly CALLOUT_BIBLIOGRAPHY: "callout-bibliography";
65
+ readonly CALLOUT_DRAFT: "callout-draft";
66
+ readonly CALLOUT_TRANSLATION: "callout-translation";
67
+ readonly CALLOUT_DISCUSSION: "callout-discussion";
68
+ readonly CALLOUT_RETRO: "callout-retro";
69
+ readonly CALLOUT_TITLE: "callout-title";
70
+ readonly CALLOUT_TITLE_TEXT: "callout-title-text";
71
+ readonly CALLOUT_ICON: "callout-icon";
72
+ readonly CALLOUT_BODY: "callout-body";
73
+ readonly CALLOUT_COLLAPSIBLE: "collapsible";
74
+ readonly DISCLOSURE: "disclosure";
75
+ readonly DISCLOSURE_TITLE: "disclosure-title";
76
+ readonly DISCLOSURE_BODY: "disclosure-body";
77
+ readonly DISCLOSURE_ACCORDION: "disclosure-accordion";
78
+ readonly DISCLOSURE_TREE: "disclosure-tree";
79
+ readonly PULL_QUOTE: "pull-quote";
80
+ readonly PULL_QUOTE_TEXT: "pull-quote-text";
81
+ readonly PULL_QUOTE_ATTRIBUTION: "pull-quote-attribution";
82
+ readonly EPIGRAPH: "epigraph";
83
+ readonly EPIGRAPH_TEXT: "epigraph-text";
84
+ readonly EPIGRAPH_ATTRIBUTION: "epigraph-attribution";
85
+ readonly BLOCKQUOTE_ENHANCED: "blockquote-enhanced";
86
+ }>;
87
+ export type CalloutClassName = keyof typeof CLASSES;
88
+ /**
89
+ * v1.10.0+: Emit a developer-mode warning via `console.warn`.
90
+ *
91
+ * The warning is prefixed with `[remake-blocks]` for easy identification
92
+ * and filtering. No-op when `devWarnings` is false OR when running in
93
+ * production (`process.env.NODE_ENV === 'production'`).
94
+ *
95
+ * @param enabled — whether devWarnings is enabled (from plugin options)
96
+ * @param message — warning message (without prefix)
97
+ * @param args — additional context args
98
+ */
99
+ export declare function warn(enabled: boolean, message: string, ...args: unknown[]): void;
100
+ /**
101
+ * Find the closest matching type from a list of known types.
102
+ * Returns the best match if its edit distance is ≤ 3 (reasonable threshold
103
+ * for typo detection), or null if no close match exists.
104
+ *
105
+ * @example
106
+ * ```ts
107
+ * suggestSimilarType('TYPO', ['note', 'tip', 'warning']) // → 'tip'
108
+ * suggestSimilarType('XYZ', ['note', 'tip']) // → null
109
+ * ```
110
+ */
111
+ export declare function suggestSimilarType(input: string, knownTypes: string[]): string | null;
112
+ /**
113
+ * v1.10.0+: Validate `customCallouts` config entries.
114
+ *
115
+ * When `strict` is true, throws a descriptive Error for the first config
116
+ * entry that's missing a required field. When `strict` is false, returns
117
+ * an array of validation errors without throwing (caller decides what to do).
118
+ *
119
+ * Required fields per CalloutConfig:
120
+ * - type (non-empty string)
121
+ * - icon (string, may be empty for icon-less callouts)
122
+ * - className (non-empty string, used for CSS targeting)
123
+ * - defaultTitle (non-empty string)
124
+ * - color (valid CSS color)
125
+ * - backgroundColor (valid CSS color)
126
+ *
127
+ * @example
128
+ * ```ts
129
+ * validateCustomCallouts([
130
+ * { type: 'x', icon: '🔥', className: 'callout-x', defaultTitle: 'X', color: '#f00', backgroundColor: '#fee' }
131
+ * ], true); // OK — no throw
132
+ *
133
+ * validateCustomCallouts([
134
+ * { type: 'x', icon: '🔥' /* missing className, defaultTitle, color, backgroundColor *\/ }
135
+ * ], true); // throws: "Custom callout config[0] ('x') is missing required fields: className, defaultTitle, color, backgroundColor"
136
+ * ```
137
+ */
138
+ export declare function validateCustomCallouts(configs: unknown[], strict: boolean): string[];
139
+ //# sourceMappingURL=dx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dx.d.ts","sourceRoot":"","sources":["../src/dx.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoET,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,OAAO,CAAC;AAMpD;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAOhF;AA+BD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAcrF;AAQD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAAE,EAClB,MAAM,EAAE,OAAO,GACd,MAAM,EAAE,CAyBV"}