blume 2.1.1 → 2.1.2
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 +16 -0
- package/dist/cli/{chunk-ncj7w596.js → chunk-0pmb4tr4.js} +22 -18
- package/dist/cli/{chunk-ncj7w596.js.map → chunk-0pmb4tr4.js.map} +3 -3
- package/dist/cli/{chunk-nq1d20w2.js → chunk-0w6hs479.js} +15 -15
- package/dist/cli/{chunk-ehweg4fr.js → chunk-124fvmzq.js} +1031 -903
- package/dist/cli/{chunk-ehweg4fr.js.map → chunk-124fvmzq.js.map} +20 -18
- package/dist/cli/{chunk-kma9f6sf.js → chunk-1f882900.js} +2 -2
- package/dist/cli/{chunk-e8xw9qkh.js → chunk-297ajdcv.js} +4 -4
- package/dist/cli/{chunk-e6atmn4h.js → chunk-32khwcb6.js} +7 -7
- package/dist/cli/{chunk-073rdvgb.js → chunk-36bxs9c7.js} +16 -16
- package/dist/cli/{chunk-mrcccgnh.js → chunk-53jqw8z0.js} +3 -3
- package/dist/cli/{chunk-ft9vfys6.js → chunk-58bt3hag.js} +4 -4
- package/dist/cli/{chunk-sds923fa.js → chunk-5cmts6dv.js} +3 -3
- package/dist/cli/{chunk-cfyg47zg.js → chunk-60hz265r.js} +4 -4
- package/dist/cli/{chunk-j134vrp2.js → chunk-74wfhv79.js} +1 -1
- package/dist/cli/{chunk-nrns10mj.js → chunk-9qzgg6mj.js} +3 -3
- package/dist/cli/{chunk-tphac74f.js → chunk-a57yh0h9.js} +5 -5
- package/dist/cli/{chunk-hebn0tpx.js → chunk-ave1wcbr.js} +1 -1
- package/dist/cli/{chunk-htrwgabr.js → chunk-bqxaqn5p.js} +6 -6
- package/dist/cli/{chunk-5vjtgs6e.js → chunk-bxwhtvw8.js} +5 -5
- package/dist/cli/{chunk-66w9j7p6.js → chunk-ckrcm08h.js} +5 -3
- package/dist/cli/{chunk-66w9j7p6.js.map → chunk-ckrcm08h.js.map} +3 -3
- package/dist/cli/{chunk-n0v7m8ry.js → chunk-desvm72z.js} +3 -3
- package/dist/cli/{chunk-3v3ffbrj.js → chunk-dhwtqnnd.js} +2 -2
- package/dist/cli/{chunk-gb420vvz.js → chunk-dpy8qdjf.js} +7 -4
- package/dist/cli/chunk-dpy8qdjf.js.map +17 -0
- package/dist/cli/{chunk-c1y538kd.js → chunk-dqhg54mr.js} +1 -1
- package/dist/cli/{chunk-42t4jxdx.js → chunk-dv2z0rzf.js} +1 -1
- package/dist/cli/{chunk-cm89scdv.js → chunk-es8h0v3j.js} +9 -11
- package/dist/cli/{chunk-cm89scdv.js.map → chunk-es8h0v3j.js.map} +3 -3
- package/dist/cli/{chunk-hx3xqnk9.js → chunk-gfc5fqvf.js} +14 -14
- package/dist/cli/{chunk-7ppf1rva.js → chunk-gxtg6ed2.js} +16 -16
- package/dist/cli/{chunk-8y2kmjv8.js → chunk-hvcxng5f.js} +6 -6
- package/dist/cli/{chunk-54ztw1nj.js → chunk-j1x92mx9.js} +1 -1
- package/dist/cli/{chunk-313vnn40.js → chunk-k3gr1nm9.js} +11 -9
- package/dist/cli/chunk-k3gr1nm9.js.map +10 -0
- package/dist/cli/{chunk-c887fj0s.js → chunk-kdpzw38a.js} +2 -2
- package/dist/cli/{chunk-t2m5j4pr.js → chunk-ms9z66nz.js} +2 -2
- package/dist/cli/{chunk-t2m5j4pr.js.map → chunk-ms9z66nz.js.map} +2 -2
- package/dist/cli/{chunk-ep6nd0rn.js → chunk-nbyvgnnm.js} +26 -14
- package/dist/cli/{chunk-ep6nd0rn.js.map → chunk-nbyvgnnm.js.map} +7 -7
- package/dist/cli/{chunk-w1r4vase.js → chunk-s0bdnc7v.js} +2 -2
- package/dist/cli/{chunk-fdrkhpjy.js → chunk-sc93apfs.js} +14 -14
- package/dist/cli/{chunk-dzwehpy7.js → chunk-tfycddbt.js} +2 -2
- package/dist/cli/{chunk-3x6x3pph.js → chunk-twy7psdz.js} +7 -7
- package/dist/cli/{chunk-e9q7a2ak.js → chunk-y4msrwm9.js} +15 -15
- package/dist/cli/{chunk-tdqhyxfz.js → chunk-ydp3065p.js} +5 -5
- package/dist/cli/index.js +18 -18
- package/dist/types/ai/ask.d.ts +24 -5
- package/dist/types/analytics/clics.d.ts +37 -0
- package/dist/types/analytics/index.d.ts +2 -0
- package/dist/types/analytics/schema.d.ts +18 -0
- package/dist/types/astro/integration.d.ts +6 -0
- package/dist/types/core/config-input.d.ts +7 -3
- package/dist/types/core/powered-by.d.ts +12 -0
- package/dist/types/core/schema.d.ts +109 -3
- package/dist/types/core/sources/lower.d.ts +10 -2
- package/dist/types/core/sources/notion.d.ts +8 -0
- package/dist/types/deploy/cloudflare-negotiation.d.ts +5 -2
- package/dist/types/deploy/node-headers.d.ts +12 -4
- package/dist/types/deploy/platforms/vercel.d.ts +2 -2
- package/dist/types/deploy/vercel-negotiation.d.ts +4 -2
- package/dist/types/narration/build.d.ts +34 -12
- package/dist/types/narration/provider.d.ts +96 -8
- package/dist/types/openapi/sentence.d.ts +11 -1
- package/dist/types/seo/jsonld.d.ts +11 -6
- package/dist/types/sources/notion.d.ts +8 -0
- package/dist/types/sources/registry.d.ts +9 -0
- package/docs/02-deployment.mdx +29 -1
- package/docs/03-upgrading.mdx +2 -1
- package/docs/04-migrating.mdx +9 -9
- package/docs/08-faq.mdx +12 -12
- package/docs/advanced/changelog.mdx +19 -2
- package/docs/advanced/custom-pages.mdx +1 -1
- package/docs/cli/doctor.mdx +1 -1
- package/docs/configuration/analytics.mdx +19 -1
- package/docs/configuration/index.mdx +1 -0
- package/docs/configuration/narration.mdx +43 -6
- package/docs/content/navigation.mdx +4 -2
- package/docs/content/sources/contentful.mdx +2 -0
- package/docs/content/sources/github-releases.mdx +2 -0
- package/docs/content/sources/notion.mdx +16 -1
- package/docs/content/sources/obsidian.mdx +2 -0
- package/docs/content/sources/payload.mdx +2 -0
- package/docs/content/sources/remote-mdx.mdx +2 -0
- package/docs/content/sources/sanity.mdx +2 -0
- package/docs/content/sources/strapi.mdx +2 -0
- package/docs/discoverability/mcp.mdx +2 -0
- package/docs/discoverability/structured-data.mdx +8 -6
- package/docs/references/asyncapi.mdx +2 -0
- package/docs/references/graphql.mdx +2 -0
- package/docs/references/openapi.mdx +14 -0
- package/package.json +1 -1
- package/skills/blume/SKILL.md +1 -1
- package/skills/blume-migrate/SKILL.md +1 -1
- package/skills/blume-migrate/assets/{oxfmt@0.67.0.patch → oxfmt@0.71.0.patch} +7 -7
- package/skills/blume-migrate/references/monorepo.md +5 -5
- package/src/ai/ask.ts +24 -6
- package/src/analytics/clics.ts +58 -0
- package/src/analytics/head.ts +5 -0
- package/src/analytics/index.ts +2 -0
- package/src/analytics/schema.ts +2 -0
- package/src/astro/generate.ts +13 -8
- package/src/astro/integration.ts +56 -9
- package/src/astro/render-deps.ts +10 -5
- package/src/astro/runtime-deps.ts +23 -2
- package/src/astro/templates.ts +4 -1
- package/src/cli/init/scaffold.ts +6 -3
- package/src/cli/required-secrets.ts +2 -1
- package/src/components/content/view-switcher.ts +7 -4
- package/src/components/layout/NavTree.astro +49 -5
- package/src/components/layout/NavTreeScript.astro +18 -0
- package/src/components/layout/PageLayout.astro +13 -3
- package/src/components/layout/RootLayout.astro +17 -12
- package/src/components/layout/analytics-client.ts +8 -8
- package/src/components/openapi/playground-client.ts +53 -53
- package/src/components/powered-by-middleware.ts +33 -0
- package/src/core/config-input.ts +11 -3
- package/src/core/powered-by.ts +12 -0
- package/src/core/schema.ts +5 -4
- package/src/core/sources/lower.ts +19 -3
- package/src/core/sources/notion.ts +27 -9
- package/src/deploy/cloudflare-negotiation.ts +36 -7
- package/src/deploy/headers.ts +15 -1
- package/src/deploy/node-headers.ts +32 -20
- package/src/deploy/platforms/cloudflare.ts +1 -0
- package/src/deploy/platforms/vercel.ts +4 -3
- package/src/deploy/vercel-negotiation.ts +38 -4
- package/src/markdown/base-links.ts +15 -14
- package/src/markdown/package-commands.ts +9 -8
- package/src/narration/build.ts +218 -40
- package/src/narration/provider.ts +89 -9
- package/src/openapi/render-mdx.ts +68 -8
- package/src/openapi/sentence.ts +29 -2
- package/src/registry/eject.ts +5 -1
- package/src/seo/jsonld.ts +38 -20
- package/src/sources/notion.ts +7 -0
- package/src/theme/color.ts +9 -10
- package/src/theme/entry.ts +14 -3
- package/dist/cli/chunk-313vnn40.js.map +0 -10
- package/dist/cli/chunk-gb420vvz.js.map +0 -17
- /package/dist/cli/{chunk-nq1d20w2.js.map → chunk-0w6hs479.js.map} +0 -0
- /package/dist/cli/{chunk-kma9f6sf.js.map → chunk-1f882900.js.map} +0 -0
- /package/dist/cli/{chunk-e8xw9qkh.js.map → chunk-297ajdcv.js.map} +0 -0
- /package/dist/cli/{chunk-e6atmn4h.js.map → chunk-32khwcb6.js.map} +0 -0
- /package/dist/cli/{chunk-073rdvgb.js.map → chunk-36bxs9c7.js.map} +0 -0
- /package/dist/cli/{chunk-mrcccgnh.js.map → chunk-53jqw8z0.js.map} +0 -0
- /package/dist/cli/{chunk-ft9vfys6.js.map → chunk-58bt3hag.js.map} +0 -0
- /package/dist/cli/{chunk-sds923fa.js.map → chunk-5cmts6dv.js.map} +0 -0
- /package/dist/cli/{chunk-cfyg47zg.js.map → chunk-60hz265r.js.map} +0 -0
- /package/dist/cli/{chunk-j134vrp2.js.map → chunk-74wfhv79.js.map} +0 -0
- /package/dist/cli/{chunk-nrns10mj.js.map → chunk-9qzgg6mj.js.map} +0 -0
- /package/dist/cli/{chunk-tphac74f.js.map → chunk-a57yh0h9.js.map} +0 -0
- /package/dist/cli/{chunk-hebn0tpx.js.map → chunk-ave1wcbr.js.map} +0 -0
- /package/dist/cli/{chunk-htrwgabr.js.map → chunk-bqxaqn5p.js.map} +0 -0
- /package/dist/cli/{chunk-5vjtgs6e.js.map → chunk-bxwhtvw8.js.map} +0 -0
- /package/dist/cli/{chunk-n0v7m8ry.js.map → chunk-desvm72z.js.map} +0 -0
- /package/dist/cli/{chunk-3v3ffbrj.js.map → chunk-dhwtqnnd.js.map} +0 -0
- /package/dist/cli/{chunk-c1y538kd.js.map → chunk-dqhg54mr.js.map} +0 -0
- /package/dist/cli/{chunk-42t4jxdx.js.map → chunk-dv2z0rzf.js.map} +0 -0
- /package/dist/cli/{chunk-hx3xqnk9.js.map → chunk-gfc5fqvf.js.map} +0 -0
- /package/dist/cli/{chunk-7ppf1rva.js.map → chunk-gxtg6ed2.js.map} +0 -0
- /package/dist/cli/{chunk-8y2kmjv8.js.map → chunk-hvcxng5f.js.map} +0 -0
- /package/dist/cli/{chunk-54ztw1nj.js.map → chunk-j1x92mx9.js.map} +0 -0
- /package/dist/cli/{chunk-c887fj0s.js.map → chunk-kdpzw38a.js.map} +0 -0
- /package/dist/cli/{chunk-w1r4vase.js.map → chunk-s0bdnc7v.js.map} +0 -0
- /package/dist/cli/{chunk-fdrkhpjy.js.map → chunk-sc93apfs.js.map} +0 -0
- /package/dist/cli/{chunk-dzwehpy7.js.map → chunk-tfycddbt.js.map} +0 -0
- /package/dist/cli/{chunk-3x6x3pph.js.map → chunk-twy7psdz.js.map} +0 -0
- /package/dist/cli/{chunk-e9q7a2ak.js.map → chunk-y4msrwm9.js.map} +0 -0
- /package/dist/cli/{chunk-tdqhyxfz.js.map → chunk-ydp3065p.js.map} +0 -0
|
@@ -1010,4 +1010,4 @@ var launchInstalledAgent = async (bin, prompt, platform = process.platform) => {
|
|
|
1010
1010
|
export { CHECKS, finding, formatReport, reportJson, formatCatalog, AGENTS, writeAgentReport, fixPrompt, launchAgent, launchInstalledAgent };
|
|
1011
1011
|
|
|
1012
1012
|
//# debugId=5656C1323785977064756E2164756E21
|
|
1013
|
-
//# sourceMappingURL=chunk-
|
|
1013
|
+
//# sourceMappingURL=chunk-dv2z0rzf.js.map
|
|
@@ -270,15 +270,13 @@ var rectangular = (lightness, chroma, hue) => {
|
|
|
270
270
|
chroma * Math.sin(radians)
|
|
271
271
|
];
|
|
272
272
|
};
|
|
273
|
-
var
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
};
|
|
281
|
-
};
|
|
273
|
+
var rgbChannel = (component) => clamp(scaled(component, 255) / 255);
|
|
274
|
+
var rgb = ([red, green, blue], alpha) => ({
|
|
275
|
+
alpha,
|
|
276
|
+
blue: rgbChannel(blue),
|
|
277
|
+
green: rgbChannel(green),
|
|
278
|
+
red: rgbChannel(red)
|
|
279
|
+
});
|
|
282
280
|
var cylindrical = (convert) => ([hue, x, y], alpha) => {
|
|
283
281
|
const [red = 0, green = 0, blue = 0] = convert(hueDegrees(hue), clamp(scaled(x, 100) / 100), clamp(scaled(y, 100) / 100));
|
|
284
282
|
return { alpha, blue: clamp(blue), green: clamp(green), red: clamp(red) };
|
|
@@ -439,5 +437,5 @@ ${dark}`;
|
|
|
439
437
|
|
|
440
438
|
export { parseColor, composite, contrastRatio, MIN_TEXT_CONTRAST, themeInk, labelOn, resolveAccent, resolveAction, resolveRadius, buildThemeCss };
|
|
441
439
|
|
|
442
|
-
//# debugId=
|
|
443
|
-
//# sourceMappingURL=chunk-
|
|
440
|
+
//# debugId=5C70C668C91C92AB64756E2164756E21
|
|
441
|
+
//# sourceMappingURL=chunk-es8h0v3j.js.map
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/theme/color.ts", "../src/theme/palette.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Just enough CSS color math to check contrast at build time: parse the color\n * syntaxes a theme config takes (hex, `rgb()`, `hsl()`, `hwb()`, `lab()`,\n * `lch()`, `oklab()`, `oklch()`, and named colors) to sRGB, then measure WCAG\n * 2 relative luminance and contrast. A color outside sRGB is clipped to it,\n * which is what a browser shows on an sRGB display. Anything else — `var()`,\n * `color-mix()`, `color()` — parses to `null`, and the caller says it couldn't\n * check it rather than guessing.\n */\n\n/** An sRGB color: gamma-encoded channels and alpha, each 0–1. */\nexport interface Rgba {\n alpha: number;\n blue: number;\n green: number;\n red: number;\n}\n\n/** One parsed function argument. */\ninterface Component {\n /** `\"%\"`, an angle unit, or `\"\"` for a bare number. */\n unit: string;\n value: number;\n}\n\n/** A color function's three channel arguments. */\ntype Channels = readonly [Component, Component, Component];\n\n/** A parsed color function: its name and its channel and alpha arguments. */\ninterface ColorFunction {\n alpha?: Component;\n channels: Channels;\n name: string;\n}\n\n/** The CSS named colors, as hex. A `Map`, so `constructor` names nothing. */\nconst NAMED = new Map(\n Object.entries({\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"00ffff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000000\",\n blanchedalmond: \"ffebcd\",\n blue: \"0000ff\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"00ffff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"ff00ff\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"778899\",\n lightslategrey: \"778899\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"00ff00\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"ff00ff\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"ff0000\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n transparent: \"00000000\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"ffffff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ffff00\",\n yellowgreen: \"9acd32\",\n })\n);\n\nconst HEX = /^#(?<digits>[\\da-f]{3,4}|[\\da-f]{6}|[\\da-f]{8})$/iu;\nconst FUNCTION = /^(?<name>[a-z]+)\\((?<args>[^()]*)\\)$/iu;\nconst COMPONENT =\n /^(?<value>[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?)(?<unit>%|deg|grad|rad|turn)?$/iu;\n\n/** Turns per angle unit; a bare hue is in degrees. */\nconst TURNS_PER_UNIT = new Map([\n [\"\", 1 / 360],\n [\"deg\", 1 / 360],\n [\"grad\", 1 / 400],\n [\"rad\", 1 / (2 * Math.PI)],\n [\"turn\", 1],\n]);\n\nconst clamp = (value: number): number => Math.min(1, Math.max(0, value));\n\nconst fromHex = (digits: string): Rgba => {\n const full =\n digits.length <= 4\n ? [...digits].map((digit) => `${digit}${digit}`).join(\"\")\n : digits;\n const channel = (index: number): number =>\n Number.parseInt(full.slice(index * 2, index * 2 + 2), 16) / 255;\n return {\n alpha: full.length === 8 ? channel(3) : 1,\n blue: channel(2),\n green: channel(1),\n red: channel(0),\n };\n};\n\nconst parseComponent = (token: string): Component | null => {\n if (token.toLowerCase() === \"none\") {\n return { unit: \"\", value: 0 };\n }\n const match = COMPONENT.exec(token)?.groups;\n return match?.value === undefined\n ? null\n : { unit: (match.unit ?? \"\").toLowerCase(), value: Number(match.value) };\n};\n\n/** Split a function's arguments: commas or spaces, with `/` before alpha. */\nconst parseFunction = (value: string): ColorFunction | null => {\n const match = FUNCTION.exec(value)?.groups;\n if (match?.name === undefined || match.args === undefined) {\n return null;\n }\n const [channelText = \"\", alphaText, extra] = match.args.split(\"/\");\n const tokens = channelText\n .split(/[\\s,]+/u)\n .filter(Boolean)\n .map(parseComponent);\n // The legacy comma syntax (`rgba(0, 0, 0, 0.5)`) puts alpha fourth.\n const legacyAlpha =\n alphaText === undefined && tokens.length === 4 ? tokens.pop() : undefined;\n const alpha =\n alphaText === undefined ? legacyAlpha : parseComponent(alphaText.trim());\n const [first, second, third, ...rest] = tokens;\n if (\n extra !== undefined ||\n alpha === null ||\n rest.length > 0 ||\n !first ||\n !second ||\n !third\n ) {\n return null;\n }\n return {\n alpha,\n channels: [first, second, third],\n name: match.name.toLowerCase(),\n };\n};\n\n/** A number, or a percentage of `full`. */\nconst scaled = (component: Component, full: number): number =>\n component.unit === \"%\" ? (component.value / 100) * full : component.value;\n\n/** A hue in degrees (0–360), from any angle unit. */\nconst hueDegrees = (component: Component): number => {\n const degrees =\n component.value * (TURNS_PER_UNIT.get(component.unit) ?? 0) * 360;\n return ((degrees % 360) + 360) % 360;\n};\n\n/** An sRGB channel from its linear-light value. */\nconst encode = (linear: number): number =>\n clamp(\n linear <= 0.0031308 ? 12.92 * linear : 1.055 * linear ** (1 / 2.4) - 0.055\n );\n\n/** A linear-light value from its sRGB channel. */\nconst decode = (channel: number): number =>\n channel <= 0.04045 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4;\n\nconst fromLinear = (\n [red, green, blue]: readonly [number, number, number],\n alpha: number\n): Rgba => ({\n alpha,\n blue: encode(blue),\n green: encode(green),\n red: encode(red),\n});\n\nconst fromHsl = (hue: number, saturation: number, lightness: number) => {\n const chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;\n const channel = (offset: number): number => {\n const k = (offset + hue / 30) % 12;\n return lightness - (chroma / 2) * Math.max(-1, Math.min(k - 3, 9 - k, 1));\n };\n return [channel(0), channel(8), channel(4)] as const;\n};\n\nconst fromHwb = (hue: number, white: number, black: number) => {\n if (white + black >= 1) {\n const gray = white / (white + black);\n return [gray, gray, gray] as const;\n }\n const [red, green, blue] = fromHsl(hue, 1, 0.5);\n const scale = 1 - white - black;\n return [\n red * scale + white,\n green * scale + white,\n blue * scale + white,\n ] as const;\n};\n\n/** Linear sRGB from OKLab (Björn Ottosson's matrices). */\nconst fromOklab = (lightness: number, a: number, b: number) => {\n const l = (lightness + 0.3963377774 * a + 0.2158037573 * b) ** 3;\n const m = (lightness - 0.1055613458 * a - 0.0638541728 * b) ** 3;\n const s = (lightness - 0.0894841775 * a - 1.291485548 * b) ** 3;\n return [\n 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,\n ] as const;\n};\n\n/** Linear sRGB from CIE Lab (D50), through XYZ and a Bradford adaptation. */\nconst fromLab = (lightness: number, a: number, b: number) => {\n const epsilon = 216 / 24_389;\n const kappa = 24_389 / 27;\n const fy = (lightness + 16) / 116;\n const fx = fy + a / 500;\n const fz = fy - b / 200;\n const cube = (f: number): number =>\n f ** 3 > epsilon ? f ** 3 : (116 * f - 16) / kappa;\n const x = cube(fx) * 0.96422;\n const y = lightness > kappa * epsilon ? fy ** 3 : lightness / kappa;\n const z = cube(fz) * 0.82521;\n // D50 to D65.\n const x65 =\n 0.955473421488075 * x - 0.02309845494876471 * y + 0.06325924320057072 * z;\n const y65 =\n -0.0283697093338637 * x + 1.0099953980813041 * y + 0.021041441191917323 * z;\n const z65 =\n 0.012314014864481998 * x - 0.020507649298898964 * y + 1.330365926242124 * z;\n return [\n 3.2409699419045226 * x65 -\n 1.537383177570094 * y65 -\n 0.4986107602930034 * z65,\n -0.9692436362808796 * x65 +\n 1.8759675015077202 * y65 +\n 0.04155505740717559 * z65,\n 0.05563007969699366 * x65 -\n 0.20397695888897652 * y65 +\n 1.0569715142428786 * z65,\n ] as const;\n};\n\n/** Polar (lightness, chroma, hue) to rectangular (lightness, a, b). */\nconst rectangular = (lightness: number, chroma: number, hue: number) => {\n const radians = (hue * Math.PI) / 180;\n return [\n lightness,\n chroma * Math.cos(radians),\n chroma * Math.sin(radians),\n ] as const;\n};\n\n/** A color function's channels, converted to sRGB with `alpha`. */\ntype Converter = (channels: Channels, alpha: number) => Rgba;\n\nconst rgb: Converter = ([red, green, blue], alpha) => {\n const channel = (component: Component): number =>\n clamp(scaled(component, 255) / 255);\n return {\n alpha,\n blue: channel(blue),\n green: channel(green),\n red: channel(red),\n };\n};\n\n/** A converter for a hue-and-two-percentages function (`hsl()`, `hwb()`). */\nconst cylindrical =\n (\n convert: (hue: number, x: number, y: number) => readonly number[]\n ): Converter =>\n ([hue, x, y], alpha) => {\n const [red = 0, green = 0, blue = 0] = convert(\n hueDegrees(hue),\n clamp(scaled(x, 100) / 100),\n clamp(scaled(y, 100) / 100)\n );\n return { alpha, blue: clamp(blue), green: clamp(green), red: clamp(red) };\n };\n\nconst hsl = cylindrical(fromHsl);\n\n/** The color functions this module reads, by name. */\nconst CONVERTERS = new Map<string, Converter>([\n [\"hsl\", hsl],\n [\"hsla\", hsl],\n [\"hwb\", cylindrical(fromHwb)],\n [\n \"lab\",\n ([lightness, a, b], alpha) =>\n fromLinear(\n fromLab(scaled(lightness, 100), scaled(a, 125), scaled(b, 125)),\n alpha\n ),\n ],\n [\n \"lch\",\n ([lightness, chroma, hue], alpha) =>\n fromLinear(\n fromLab(\n ...rectangular(\n scaled(lightness, 100),\n scaled(chroma, 150),\n hueDegrees(hue)\n )\n ),\n alpha\n ),\n ],\n [\n \"oklab\",\n ([lightness, a, b], alpha) =>\n fromLinear(\n fromOklab(scaled(lightness, 1), scaled(a, 0.4), scaled(b, 0.4)),\n alpha\n ),\n ],\n [\n \"oklch\",\n ([lightness, chroma, hue], alpha) =>\n fromLinear(\n fromOklab(\n ...rectangular(\n scaled(lightness, 1),\n scaled(chroma, 0.4),\n hueDegrees(hue)\n )\n ),\n alpha\n ),\n ],\n [\"rgb\", rgb],\n [\"rgba\", rgb],\n]);\n\n/** Parse a CSS color to sRGB, or `null` for syntax this module doesn't read. */\nexport const parseColor = (value: string): Rgba | null => {\n const color = value.trim().toLowerCase();\n const hex = NAMED.get(color) ?? HEX.exec(color)?.groups?.digits;\n if (hex !== undefined) {\n return fromHex(hex);\n }\n const parsed = parseFunction(color);\n const convert = parsed && CONVERTERS.get(parsed.name);\n return parsed && convert\n ? convert(\n parsed.channels,\n parsed.alpha === undefined ? 1 : clamp(scaled(parsed.alpha, 1))\n )\n : null;\n};\n\n/** `color` painted over an opaque `backdrop`. */\nexport const composite = (color: Rgba, backdrop: Rgba): Rgba => {\n const mix = (top: number, bottom: number): number =>\n top * color.alpha + bottom * (1 - color.alpha);\n return {\n alpha: 1,\n blue: mix(color.blue, backdrop.blue),\n green: mix(color.green, backdrop.green),\n red: mix(color.red, backdrop.red),\n };\n};\n\n/** WCAG 2 relative luminance of an opaque color. */\nexport const luminance = (color: Rgba): number =>\n 0.2126 * decode(color.red) +\n 0.7152 * decode(color.green) +\n 0.0722 * decode(color.blue);\n\n/**\n * WCAG 2 contrast ratio of `foreground` on an opaque `background`, from 1 to\n * 21. A translucent foreground is painted over the background first.\n */\nexport const contrastRatio = (foreground: Rgba, background: Rgba): number => {\n const top = luminance(composite(foreground, background));\n const bottom = luminance(background);\n return (Math.max(top, bottom) + 0.05) / (Math.min(top, bottom) + 0.05);\n};\n",
|
|
5
|
+
"/**\n * Just enough CSS color math to check contrast at build time: parse the color\n * syntaxes a theme config takes (hex, `rgb()`, `hsl()`, `hwb()`, `lab()`,\n * `lch()`, `oklab()`, `oklch()`, and named colors) to sRGB, then measure WCAG\n * 2 relative luminance and contrast. A color outside sRGB is clipped to it,\n * which is what a browser shows on an sRGB display. Anything else — `var()`,\n * `color-mix()`, `color()` — parses to `null`, and the caller says it couldn't\n * check it rather than guessing.\n */\n\n/** An sRGB color: gamma-encoded channels and alpha, each 0–1. */\nexport interface Rgba {\n alpha: number;\n blue: number;\n green: number;\n red: number;\n}\n\n/** One parsed function argument. */\ninterface Component {\n /** `\"%\"`, an angle unit, or `\"\"` for a bare number. */\n unit: string;\n value: number;\n}\n\n/** A color function's three channel arguments. */\ntype Channels = readonly [Component, Component, Component];\n\n/** A parsed color function: its name and its channel and alpha arguments. */\ninterface ColorFunction {\n alpha?: Component;\n channels: Channels;\n name: string;\n}\n\n/** The CSS named colors, as hex. A `Map`, so `constructor` names nothing. */\nconst NAMED = new Map(\n Object.entries({\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"00ffff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000000\",\n blanchedalmond: \"ffebcd\",\n blue: \"0000ff\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"00ffff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"ff00ff\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"778899\",\n lightslategrey: \"778899\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"00ff00\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"ff00ff\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"ff0000\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n transparent: \"00000000\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"ffffff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ffff00\",\n yellowgreen: \"9acd32\",\n })\n);\n\nconst HEX = /^#(?<digits>[\\da-f]{3,4}|[\\da-f]{6}|[\\da-f]{8})$/iu;\nconst FUNCTION = /^(?<name>[a-z]+)\\((?<args>[^()]*)\\)$/iu;\nconst COMPONENT =\n /^(?<value>[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?)(?<unit>%|deg|grad|rad|turn)?$/iu;\n\n/** Turns per angle unit; a bare hue is in degrees. */\nconst TURNS_PER_UNIT = new Map([\n [\"\", 1 / 360],\n [\"deg\", 1 / 360],\n [\"grad\", 1 / 400],\n [\"rad\", 1 / (2 * Math.PI)],\n [\"turn\", 1],\n]);\n\nconst clamp = (value: number): number => Math.min(1, Math.max(0, value));\n\nconst fromHex = (digits: string): Rgba => {\n const full =\n digits.length <= 4\n ? [...digits].map((digit) => `${digit}${digit}`).join(\"\")\n : digits;\n const channel = (index: number): number =>\n Number.parseInt(full.slice(index * 2, index * 2 + 2), 16) / 255;\n return {\n alpha: full.length === 8 ? channel(3) : 1,\n blue: channel(2),\n green: channel(1),\n red: channel(0),\n };\n};\n\nconst parseComponent = (token: string): Component | null => {\n if (token.toLowerCase() === \"none\") {\n return { unit: \"\", value: 0 };\n }\n const match = COMPONENT.exec(token)?.groups;\n return match?.value === undefined\n ? null\n : { unit: (match.unit ?? \"\").toLowerCase(), value: Number(match.value) };\n};\n\n/** Split a function's arguments: commas or spaces, with `/` before alpha. */\nconst parseFunction = (value: string): ColorFunction | null => {\n const match = FUNCTION.exec(value)?.groups;\n if (match?.name === undefined || match.args === undefined) {\n return null;\n }\n const [channelText = \"\", alphaText, extra] = match.args.split(\"/\");\n const tokens = channelText\n .split(/[\\s,]+/u)\n .filter(Boolean)\n .map(parseComponent);\n // The legacy comma syntax (`rgba(0, 0, 0, 0.5)`) puts alpha fourth.\n const legacyAlpha =\n alphaText === undefined && tokens.length === 4 ? tokens.pop() : undefined;\n const alpha =\n alphaText === undefined ? legacyAlpha : parseComponent(alphaText.trim());\n const [first, second, third, ...rest] = tokens;\n if (\n extra !== undefined ||\n alpha === null ||\n rest.length > 0 ||\n !first ||\n !second ||\n !third\n ) {\n return null;\n }\n return {\n alpha,\n channels: [first, second, third],\n name: match.name.toLowerCase(),\n };\n};\n\n/** A number, or a percentage of `full`. */\nconst scaled = (component: Component, full: number): number =>\n component.unit === \"%\" ? (component.value / 100) * full : component.value;\n\n/** A hue in degrees (0–360), from any angle unit. */\nconst hueDegrees = (component: Component): number => {\n const degrees =\n component.value * (TURNS_PER_UNIT.get(component.unit) ?? 0) * 360;\n return ((degrees % 360) + 360) % 360;\n};\n\n/** An sRGB channel from its linear-light value. */\nconst encode = (linear: number): number =>\n clamp(\n linear <= 0.0031308 ? 12.92 * linear : 1.055 * linear ** (1 / 2.4) - 0.055\n );\n\n/** A linear-light value from its sRGB channel. */\nconst decode = (channel: number): number =>\n channel <= 0.04045 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4;\n\nconst fromLinear = (\n [red, green, blue]: readonly [number, number, number],\n alpha: number\n): Rgba => ({\n alpha,\n blue: encode(blue),\n green: encode(green),\n red: encode(red),\n});\n\nconst fromHsl = (hue: number, saturation: number, lightness: number) => {\n const chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;\n const channel = (offset: number): number => {\n const k = (offset + hue / 30) % 12;\n return lightness - (chroma / 2) * Math.max(-1, Math.min(k - 3, 9 - k, 1));\n };\n return [channel(0), channel(8), channel(4)] as const;\n};\n\nconst fromHwb = (hue: number, white: number, black: number) => {\n if (white + black >= 1) {\n const gray = white / (white + black);\n return [gray, gray, gray] as const;\n }\n const [red, green, blue] = fromHsl(hue, 1, 0.5);\n const scale = 1 - white - black;\n return [\n red * scale + white,\n green * scale + white,\n blue * scale + white,\n ] as const;\n};\n\n/** Linear sRGB from OKLab (Björn Ottosson's matrices). */\nconst fromOklab = (lightness: number, a: number, b: number) => {\n const l = (lightness + 0.3963377774 * a + 0.2158037573 * b) ** 3;\n const m = (lightness - 0.1055613458 * a - 0.0638541728 * b) ** 3;\n const s = (lightness - 0.0894841775 * a - 1.291485548 * b) ** 3;\n return [\n 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,\n ] as const;\n};\n\n/** Linear sRGB from CIE Lab (D50), through XYZ and a Bradford adaptation. */\nconst fromLab = (lightness: number, a: number, b: number) => {\n const epsilon = 216 / 24_389;\n const kappa = 24_389 / 27;\n const fy = (lightness + 16) / 116;\n const fx = fy + a / 500;\n const fz = fy - b / 200;\n const cube = (f: number): number =>\n f ** 3 > epsilon ? f ** 3 : (116 * f - 16) / kappa;\n const x = cube(fx) * 0.96422;\n const y = lightness > kappa * epsilon ? fy ** 3 : lightness / kappa;\n const z = cube(fz) * 0.82521;\n // D50 to D65.\n const x65 =\n 0.955473421488075 * x - 0.02309845494876471 * y + 0.06325924320057072 * z;\n const y65 =\n -0.0283697093338637 * x + 1.0099953980813041 * y + 0.021041441191917323 * z;\n const z65 =\n 0.012314014864481998 * x - 0.020507649298898964 * y + 1.330365926242124 * z;\n return [\n 3.2409699419045226 * x65 -\n 1.537383177570094 * y65 -\n 0.4986107602930034 * z65,\n -0.9692436362808796 * x65 +\n 1.8759675015077202 * y65 +\n 0.04155505740717559 * z65,\n 0.05563007969699366 * x65 -\n 0.20397695888897652 * y65 +\n 1.0569715142428786 * z65,\n ] as const;\n};\n\n/** Polar (lightness, chroma, hue) to rectangular (lightness, a, b). */\nconst rectangular = (lightness: number, chroma: number, hue: number) => {\n const radians = (hue * Math.PI) / 180;\n return [\n lightness,\n chroma * Math.cos(radians),\n chroma * Math.sin(radians),\n ] as const;\n};\n\n/** A color function's channels, converted to sRGB with `alpha`. */\ntype Converter = (channels: Channels, alpha: number) => Rgba;\n\nconst rgbChannel = (component: Component): number =>\n clamp(scaled(component, 255) / 255);\n\nconst rgb: Converter = ([red, green, blue], alpha) => ({\n alpha,\n blue: rgbChannel(blue),\n green: rgbChannel(green),\n red: rgbChannel(red),\n});\n\n/** A converter for a hue-and-two-percentages function (`hsl()`, `hwb()`). */\nconst cylindrical =\n (\n convert: (hue: number, x: number, y: number) => readonly number[]\n ): Converter =>\n ([hue, x, y], alpha) => {\n const [red = 0, green = 0, blue = 0] = convert(\n hueDegrees(hue),\n clamp(scaled(x, 100) / 100),\n clamp(scaled(y, 100) / 100)\n );\n return { alpha, blue: clamp(blue), green: clamp(green), red: clamp(red) };\n };\n\nconst hsl = cylindrical(fromHsl);\n\n/** The color functions this module reads, by name. */\nconst CONVERTERS = new Map<string, Converter>([\n [\"hsl\", hsl],\n [\"hsla\", hsl],\n [\"hwb\", cylindrical(fromHwb)],\n [\n \"lab\",\n ([lightness, a, b], alpha) =>\n fromLinear(\n fromLab(scaled(lightness, 100), scaled(a, 125), scaled(b, 125)),\n alpha\n ),\n ],\n [\n \"lch\",\n ([lightness, chroma, hue], alpha) =>\n fromLinear(\n fromLab(\n ...rectangular(\n scaled(lightness, 100),\n scaled(chroma, 150),\n hueDegrees(hue)\n )\n ),\n alpha\n ),\n ],\n [\n \"oklab\",\n ([lightness, a, b], alpha) =>\n fromLinear(\n fromOklab(scaled(lightness, 1), scaled(a, 0.4), scaled(b, 0.4)),\n alpha\n ),\n ],\n [\n \"oklch\",\n ([lightness, chroma, hue], alpha) =>\n fromLinear(\n fromOklab(\n ...rectangular(\n scaled(lightness, 1),\n scaled(chroma, 0.4),\n hueDegrees(hue)\n )\n ),\n alpha\n ),\n ],\n [\"rgb\", rgb],\n [\"rgba\", rgb],\n]);\n\n/** Parse a CSS color to sRGB, or `null` for syntax this module doesn't read. */\nexport const parseColor = (value: string): Rgba | null => {\n const color = value.trim().toLowerCase();\n const hex = NAMED.get(color) ?? HEX.exec(color)?.groups?.digits;\n if (hex !== undefined) {\n return fromHex(hex);\n }\n const parsed = parseFunction(color);\n const convert = parsed && CONVERTERS.get(parsed.name);\n return parsed && convert\n ? convert(\n parsed.channels,\n parsed.alpha === undefined ? 1 : clamp(scaled(parsed.alpha, 1))\n )\n : null;\n};\n\n/** `color` painted over an opaque `backdrop`. */\nexport const composite = (color: Rgba, backdrop: Rgba): Rgba => {\n const mix = (top: number, bottom: number): number =>\n top * color.alpha + bottom * (1 - color.alpha);\n return {\n alpha: 1,\n blue: mix(color.blue, backdrop.blue),\n green: mix(color.green, backdrop.green),\n red: mix(color.red, backdrop.red),\n };\n};\n\n/** WCAG 2 relative luminance of an opaque color. */\nexport const luminance = (color: Rgba): number =>\n 0.2126 * decode(color.red) +\n 0.7152 * decode(color.green) +\n 0.0722 * decode(color.blue);\n\n/**\n * WCAG 2 contrast ratio of `foreground` on an opaque `background`, from 1 to\n * 21. A translucent foreground is painted over the background first.\n */\nexport const contrastRatio = (foreground: Rgba, background: Rgba): number => {\n const top = luminance(composite(foreground, background));\n const bottom = luminance(background);\n return (Math.max(top, bottom) + 0.05) / (Math.min(top, bottom) + 0.05);\n};\n",
|
|
6
6
|
"import type { ResolvedConfig } from \"../core/schema.ts\";\nimport { composite, contrastRatio, parseColor } from \"./color.ts\";\nimport type { Rgba } from \"./color.ts\";\n\n/** Per-mode CSS colors. */\nexport interface AccentColors {\n dark: string;\n light: string;\n}\n\n/** A color mode. */\nexport type ColorMode = keyof AccentColors;\n\n/**\n * Named accent presets mapped to OKLCH values, per mode. The single source of\n * truth for preset colors: the theme CSS and the OG card (og/card.ts) both\n * resolve from this table, so a site and its social cards can't disagree\n * about \"blue\". Each clears WCAG AA (4.5:1) as text on its mode's page and\n * under its button label ({@link readableOn}), with room to spare on the\n * tinted surfaces accent text also sits on: the light shades are dark enough\n * for white labels, the dark shades light enough to read on the dark page.\n */\nexport const ACCENTS = {\n blue: { dark: \"oklch(0.62 0.16 250)\", light: \"oklch(0.55 0.16 250)\" },\n green: { dark: \"oklch(0.6 0.16 150)\", light: \"oklch(0.53 0.16 150)\" },\n orange: { dark: \"oklch(0.68 0.17 50)\", light: \"oklch(0.56 0.17 50)\" },\n pink: { dark: \"oklch(0.65 0.2 350)\", light: \"oklch(0.58 0.2 350)\" },\n purple: { dark: \"oklch(0.6 0.2 290)\", light: \"oklch(0.57 0.2 290)\" },\n red: { dark: \"oklch(0.61 0.22 25)\", light: \"oklch(0.58 0.22 25)\" },\n teal: { dark: \"oklch(0.6 0.12 195)\", light: \"oklch(0.53 0.12 195)\" },\n} satisfies Record<string, AccentColors>;\n\n/** The contrast WCAG AA asks of body-size text. */\nexport const MIN_TEXT_CONTRAST = 4.5;\n\n/**\n * The theme's own colors a configured accent is drawn against: each mode's\n * page background and text, and the dark ink a filled accent can carry.\n * Mirrors the defaults in `entry.ts`.\n */\nexport const THEME_INKS = {\n dark: {\n background: \"oklch(0.085 0 0)\",\n foreground: \"oklch(0.96 0 0)\",\n ink: \"oklch(0.085 0 0)\",\n mutedForeground: \"oklch(0.68 0 0)\",\n },\n light: {\n background: \"oklch(1 0 0)\",\n foreground: \"oklch(0.145 0 0)\",\n ink: \"oklch(0.145 0 0)\",\n mutedForeground: \"oklch(0.53 0 0)\",\n },\n} satisfies Record<ColorMode, Record<string, string>>;\n\nconst WHITE = \"oklch(1 0 0)\";\n\n/** A color this module writes itself, parsed (they all parse). */\nconst own = (value: string): Rgba =>\n parseColor(value) ?? { alpha: 1, blue: 0, green: 0, red: 0 };\n\n/** {@link THEME_INKS}, parsed, for contrast math. */\nexport const themeInk = (\n mode: ColorMode,\n name: keyof (typeof THEME_INKS)[ColorMode]\n): Rgba => own(THEME_INKS[mode][name]);\n\n/**\n * The label color for text on a filled `fill` (a button, a step number): white\n * while it reaches AA, else the mode's dark ink when that reads better, so a\n * light accent (every dark-mode preset) gets dark text instead of white text\n * nobody can read.\n */\nexport const labelOn = (fill: Rgba, mode: ColorMode): string => {\n const opaque = composite(fill, themeInk(mode, \"background\"));\n const onWhite = contrastRatio(own(WHITE), opaque);\n return onWhite >= MIN_TEXT_CONTRAST ||\n onWhite >= contrastRatio(themeInk(mode, \"ink\"), opaque)\n ? WHITE\n : THEME_INKS[mode].ink;\n};\n\n/** {@link labelOn} for a CSS color; one this module can't parse keeps white. */\nexport const readableOn = (fill: string, mode: ColorMode): string => {\n const color = parseColor(fill);\n return color ? labelOn(color, mode) : WHITE;\n};\n\n/**\n * Whether a raw config value names an accent preset. `hasOwn` keeps a value\n * like \"constructor\" from resolving an Object.prototype member — which would\n * stringify a function into the generated CSS, breaking the rule (the exact\n * breakout {@link safeColor} exists to prevent).\n */\nexport const isAccentPreset = (value: string): value is keyof typeof ACCENTS =>\n Object.hasOwn(ACCENTS, value);\n\n// Characters valid in a CSS color value (hex, rgb/hsl/oklch functions, named\n// colors). Anything else — notably `;`, `{`, `}` — could break out of the\n// declaration and inject rules, so such a value is rejected.\nconst CSS_COLOR = /^[\\w\\s#%.,()/+-]+$/u;\n\n/** Pass a raw color through only if it can't break out of a CSS declaration. */\nconst safeColor = (value: string, fallback: string): string =>\n CSS_COLOR.test(value.trim()) ? value.trim() : fallback;\n\n/** Resolve a named preset in `mode`, or fall back to {@link safeColor}. */\nconst presetOrColor = (value: string, mode: ColorMode): string =>\n isAccentPreset(value)\n ? ACCENTS[value][mode]\n : safeColor(value, ACCENTS.blue[mode]);\n\n/** Like {@link safeColor} but drops an unsafe/absent value to `null`. */\nconst safeColorOrNull = (value: string | undefined): string | null =>\n value && CSS_COLOR.test(value.trim()) ? value.trim() : null;\n\nconst RADII = {\n lg: \"0.75rem\",\n md: \"0.5rem\",\n none: \"0\",\n sm: \"0.25rem\",\n} satisfies Record<ResolvedConfig[\"theme\"][\"radius\"], string>;\n\nconst cssString = (value: string): string => JSON.stringify(value);\n\nconst backgroundImageCss = (image: string): string =>\n `url(${cssString(image)})`;\n\nconst cssToken = (name: string, value?: string | null): string[] =>\n value ? [` ${name}: ${value};`] : [];\n\n/** One mode's resolved accent and action fills. */\ninterface ModeFills {\n accent: string;\n action: string | null;\n}\n\nconst themeRootCss = (\n theme: ResolvedConfig[\"theme\"],\n options: ModeFills & { radius: string }\n): string =>\n [\n ` --blume-accent: ${options.accent};`,\n ` --blume-accent-foreground: ${readableOn(options.accent, \"light\")};`,\n ...cssToken(\"--blume-action\", options.action),\n ...cssToken(\n \"--blume-action-foreground\",\n options.action ? readableOn(options.action, \"light\") : null\n ),\n ...cssToken(\"--blume-background\", safeColorOrNull(theme.background?.light)),\n ...cssToken(\n \"--blume-background-image\",\n theme.backgroundImage?.light\n ? backgroundImageCss(theme.backgroundImage.light)\n : null\n ),\n ` --blume-radius: ${options.radius};`,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\nconst themeDarkCss = (\n theme: ResolvedConfig[\"theme\"],\n options: ModeFills\n): string => {\n // Mode-shared tokens (accent, action) must be re-declared here: the base\n // stylesheet's own `:root[data-theme=\"dark\"]` block outranks the `:root`\n // config tokens on specificity, so without this block dark mode would\n // silently keep its neutral defaults and ignore the config.\n const tokens = [\n ` --blume-accent: ${options.accent};`,\n ` --blume-accent-foreground: ${readableOn(options.accent, \"dark\")};`,\n ...cssToken(\"--blume-action\", options.action),\n ...cssToken(\n \"--blume-action-foreground\",\n options.action ? readableOn(options.action, \"dark\") : null\n ),\n ...cssToken(\"--blume-background\", safeColorOrNull(theme.background?.dark)),\n ...cssToken(\n \"--blume-background-image\",\n theme.backgroundImage?.dark\n ? backgroundImageCss(theme.backgroundImage.dark)\n : null\n ),\n ].filter(Boolean);\n return `:root[data-theme=\"dark\"] {\n${tokens.join(\"\\n\")}\n}\n`;\n};\n\n/**\n * Resolve the configured accent to per-mode CSS colors. A named accent\n * resolves to its preset's shade for each mode; any other value is treated as\n * a raw CSS color so users can pass arbitrary colors without a config change.\n * A string accent has already been normalized by the config schema to the\n * same value for both modes.\n */\nexport const resolveAccent = (\n theme: ResolvedConfig[\"theme\"]\n): AccentColors => ({\n dark: presetOrColor(theme.accent.dark, \"dark\"),\n light: presetOrColor(theme.accent.light, \"light\"),\n});\n\n/** Resolve the configured `action` fill per mode, or `null` when unset. */\nexport const resolveAction = (\n theme: ResolvedConfig[\"theme\"]\n): AccentColors | null =>\n theme.action\n ? {\n dark: presetOrColor(theme.action, \"dark\"),\n light: presetOrColor(theme.action, \"light\"),\n }\n : null;\n\n/** Resolve the configured radius preset to a CSS length. */\nexport const resolveRadius = (theme: ResolvedConfig[\"theme\"]): string =>\n RADII[theme.radius];\n\n/**\n * Compile theme config into CSS custom properties. A named accent resolves to\n * its preset; any other value is treated as a raw CSS color so users can pass\n * arbitrary colors without a config change. Labels on accent and action fills\n * take whichever of white or dark ink reads ({@link readableOn}).\n */\nexport const buildThemeCss = (theme: ResolvedConfig[\"theme\"]): string => {\n const accent = resolveAccent(theme);\n const action = resolveAction(theme);\n const root = themeRootCss(theme, {\n accent: accent.light,\n action: action?.light ?? null,\n radius: RADII[theme.radius],\n });\n const dark = themeDarkCss(theme, {\n accent: accent.dark,\n action: action?.dark ?? null,\n });\n\n return `/* Generated by Blume from theme config. */\n:root {\n${root}\n}\n${dark}`;\n};\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": "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",
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": ";;;AAoCA,IAAM,QAAQ,IAAI,IAChB,OAAO,QAAQ;AAAA,EACb,WAAW;AAAA,EACX,cAAc;AAAA,EACd,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AAAA,EACV,eAAe;AAAA,EACf,UAAU;AAAA,EACV,WAAW;AAAA,EACX,UAAU;AAAA,EACV,WAAW;AAAA,EACX,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,aAAa;AAAA,EACb,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa;AAAA,EACb,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,MAAM;AAAA,EACN,OAAO;AAAA,EACP,aAAa;AAAA,EACb,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AAAA,EACV,eAAe;AAAA,EACf,WAAW;AAAA,EACX,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,sBAAsB;AAAA,EACtB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,eAAe;AAAA,EACf,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AAAA,EACV,aAAa;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,WAAW;AAAA,EACX,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,KAAK;AAAA,EACL,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW;AAAA,EACX,KAAK;AAAA,EACL,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,aAAa;AACf,CAAC,CACH;AAEA,IAAM,MAAM;AACZ,IAAM,WAAW;AACjB,IAAM,YACJ;AAGF,IAAM,iBAAiB,IAAI,IAAI;AAAA,EAC7B,CAAC,IAAI,IAAI,GAAG;AAAA,EACZ,CAAC,OAAO,IAAI,GAAG;AAAA,EACf,CAAC,QAAQ,IAAI,GAAG;AAAA,EAChB,CAAC,OAAO,KAAK,IAAI,KAAK,GAAG;AAAA,EACzB,CAAC,QAAQ,CAAC;AACZ,CAAC;AAED,IAAM,QAAQ,CAAC,UAA0B,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC;AAEvE,IAAM,UAAU,CAAC,WAAyB;AAAA,EACxC,MAAM,OACJ,OAAO,UAAU,IACb,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,QAAQ,OAAO,EAAE,KAAK,EAAE,IACtD;AAAA,EACN,MAAM,UAAU,CAAC,UACf,OAAO,SAAS,KAAK,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI;AAAA,EAC9D,OAAO;AAAA,IACL,OAAO,KAAK,WAAW,IAAI,QAAQ,CAAC,IAAI;AAAA,IACxC,MAAM,QAAQ,CAAC;AAAA,IACf,OAAO,QAAQ,CAAC;AAAA,IAChB,KAAK,QAAQ,CAAC;AAAA,EAChB;AAAA;AAGF,IAAM,iBAAiB,CAAC,UAAoC;AAAA,EAC1D,IAAI,MAAM,YAAY,MAAM,QAAQ;AAAA,IAClC,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE;AAAA,EAC9B;AAAA,EACA,MAAM,QAAQ,UAAU,KAAK,KAAK,GAAG;AAAA,EACrC,OAAO,OAAO,UAAU,YACpB,OACA,EAAE,OAAO,MAAM,QAAQ,IAAI,YAAY,GAAG,OAAO,OAAO,MAAM,KAAK,EAAE;AAAA;AAI3E,IAAM,gBAAgB,CAAC,UAAwC;AAAA,EAC7D,MAAM,QAAQ,SAAS,KAAK,KAAK,GAAG;AAAA,EACpC,IAAI,OAAO,SAAS,aAAa,MAAM,SAAS,WAAW;AAAA,IACzD,OAAO;AAAA,EACT;AAAA,EACA,OAAO,cAAc,IAAI,WAAW,SAAS,MAAM,KAAK,MAAM,GAAG;AAAA,EACjE,MAAM,SAAS,YACZ,MAAM,SAAS,EACf,OAAO,OAAO,EACd,IAAI,cAAc;AAAA,EAErB,MAAM,cACJ,cAAc,aAAa,OAAO,WAAW,IAAI,OAAO,IAAI,IAAI;AAAA,EAClE,MAAM,QACJ,cAAc,YAAY,cAAc,eAAe,UAAU,KAAK,CAAC;AAAA,EACzE,OAAO,OAAO,QAAQ,UAAU,QAAQ;AAAA,EACxC,IACE,UAAU,aACV,UAAU,QACV,KAAK,SAAS,KACd,CAAC,SACD,CAAC,UACD,CAAC,OACD;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA,UAAU,CAAC,OAAO,QAAQ,KAAK;AAAA,IAC/B,MAAM,MAAM,KAAK,YAAY;AAAA,EAC/B;AAAA;AAIF,IAAM,SAAS,CAAC,WAAsB,SACpC,UAAU,SAAS,MAAO,UAAU,QAAQ,MAAO,OAAO,UAAU;AAGtE,IAAM,aAAa,CAAC,cAAiC;AAAA,EACnD,MAAM,UACJ,UAAU,SAAS,eAAe,IAAI,UAAU,IAAI,KAAK,KAAK;AAAA,EAChE,QAAS,UAAU,MAAO,OAAO;AAAA;AAInC,IAAM,SAAS,CAAC,WACd,MACE,UAAU,YAAY,QAAQ,SAAS,QAAQ,WAAW,IAAI,OAAO,KACvE;AAGF,IAAM,SAAS,CAAC,YACd,WAAW,UAAU,UAAU,UAAU,UAAU,SAAS,UAAU;AAExE,IAAM,aAAa,EAChB,KAAK,OAAO,OACb,WACU;AAAA,EACV;AAAA,EACA,MAAM,OAAO,IAAI;AAAA,EACjB,OAAO,OAAO,KAAK;AAAA,EACnB,KAAK,OAAO,GAAG;AACjB;AAEA,IAAM,UAAU,CAAC,KAAa,YAAoB,cAAsB;AAAA,EACtE,MAAM,UAAU,IAAI,KAAK,IAAI,IAAI,YAAY,CAAC,KAAK;AAAA,EACnD,MAAM,UAAU,CAAC,WAA2B;AAAA,IAC1C,MAAM,KAAK,SAAS,MAAM,MAAM;AAAA,IAChC,OAAO,YAAa,SAAS,IAAK,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;AAAA;AAAA,EAE1E,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;AAAA;AAG5C,IAAM,UAAU,CAAC,KAAa,OAAe,UAAkB;AAAA,EAC7D,IAAI,QAAQ,SAAS,GAAG;AAAA,IACtB,MAAM,OAAO,SAAS,QAAQ;AAAA,IAC9B,OAAO,CAAC,MAAM,MAAM,IAAI;AAAA,EAC1B;AAAA,EACA,OAAO,KAAK,OAAO,QAAQ,QAAQ,KAAK,GAAG,GAAG;AAAA,EAC9C,MAAM,QAAQ,IAAI,QAAQ;AAAA,EAC1B,OAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,QAAQ,QAAQ;AAAA,IAChB,OAAO,QAAQ;AAAA,EACjB;AAAA;AAIF,IAAM,YAAY,CAAC,WAAmB,GAAW,MAAc;AAAA,EAC7D,MAAM,KAAK,YAAY,eAAe,IAAI,eAAe,MAAM;AAAA,EAC/D,MAAM,KAAK,YAAY,eAAe,IAAI,eAAe,MAAM;AAAA,EAC/D,MAAM,KAAK,YAAY,eAAe,IAAI,cAAc,MAAM;AAAA,EAC9D,OAAO;AAAA,IACL,eAAe,IAAI,eAAe,IAAI,eAAe;AAAA,IACrD,gBAAgB,IAAI,eAAe,IAAI,eAAe;AAAA,IACtD,gBAAgB,IAAI,eAAe,IAAI,cAAc;AAAA,EACvD;AAAA;AAIF,IAAM,UAAU,CAAC,WAAmB,GAAW,MAAc;AAAA,EAC3D,MAAM,UAAU,MAAM;AAAA,EACtB,MAAM,QAAQ,QAAS;AAAA,EACvB,MAAM,MAAM,YAAY,MAAM;AAAA,EAC9B,MAAM,KAAK,KAAK,IAAI;AAAA,EACpB,MAAM,KAAK,KAAK,IAAI;AAAA,EACpB,MAAM,OAAO,CAAC,MACZ,KAAK,IAAI,UAAU,KAAK,KAAK,MAAM,IAAI,MAAM;AAAA,EAC/C,MAAM,IAAI,KAAK,EAAE,IAAI;AAAA,EACrB,MAAM,IAAI,YAAY,QAAQ,UAAU,MAAM,IAAI,YAAY;AAAA,EAC9D,MAAM,IAAI,KAAK,EAAE,IAAI;AAAA,EAErB,MAAM,MACJ,oBAAoB,IAAI,sBAAsB,IAAI,sBAAsB;AAAA,EAC1E,MAAM,MACJ,sBAAsB,IAAI,qBAAqB,IAAI,uBAAuB;AAAA,EAC5E,MAAM,MACJ,uBAAuB,IAAI,uBAAuB,IAAI,oBAAoB;AAAA,EAC5E,OAAO;AAAA,IACL,qBAAqB,MACnB,oBAAoB,MACpB,qBAAqB;AAAA,IACvB,sBAAsB,MACpB,qBAAqB,MACrB,sBAAsB;AAAA,IACxB,sBAAsB,MACpB,sBAAsB,MACtB,qBAAqB;AAAA,EACzB;AAAA;AAIF,IAAM,cAAc,CAAC,WAAmB,QAAgB,QAAgB;AAAA,EACtE,MAAM,UAAW,MAAM,KAAK,KAAM;AAAA,EAClC,OAAO;AAAA,IACL;AAAA,IACA,SAAS,KAAK,IAAI,OAAO;AAAA,IACzB,SAAS,KAAK,IAAI,OAAO;AAAA,EAC3B;AAAA;AAMF,IAAM,aAAa,CAAC,cAClB,MAAM,OAAO,WAAW,GAAG,IAAI,GAAG;AAEpC,IAAM,MAAiB,EAAE,KAAK,OAAO,OAAO,WAAW;AAAA,EACrD;AAAA,EACA,MAAM,WAAW,IAAI;AAAA,EACrB,OAAO,WAAW,KAAK;AAAA,EACvB,KAAK,WAAW,GAAG;AACrB;AAGA,IAAM,cACJ,CACE,YAEF,EAAE,KAAK,GAAG,IAAI,UAAU;AAAA,EACtB,OAAO,MAAM,GAAG,QAAQ,GAAG,OAAO,KAAK,QACrC,WAAW,GAAG,GACd,MAAM,OAAO,GAAG,GAAG,IAAI,GAAG,GAC1B,MAAM,OAAO,GAAG,GAAG,IAAI,GAAG,CAC5B;AAAA,EACA,OAAO,EAAE,OAAO,MAAM,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,GAAG,KAAK,MAAM,GAAG,EAAE;AAAA;AAG5E,IAAM,MAAM,YAAY,OAAO;AAG/B,IAAM,aAAa,IAAI,IAAuB;AAAA,EAC5C,CAAC,OAAO,GAAG;AAAA,EACX,CAAC,QAAQ,GAAG;AAAA,EACZ,CAAC,OAAO,YAAY,OAAO,CAAC;AAAA,EAC5B;AAAA,IACE;AAAA,IACA,EAAE,WAAW,GAAG,IAAI,UAClB,WACE,QAAQ,OAAO,WAAW,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC,GAC9D,KACF;AAAA,EACJ;AAAA,EACA;AAAA,IACE;AAAA,IACA,EAAE,WAAW,QAAQ,MAAM,UACzB,WACE,QACE,GAAG,YACD,OAAO,WAAW,GAAG,GACrB,OAAO,QAAQ,GAAG,GAClB,WAAW,GAAG,CAChB,CACF,GACA,KACF;AAAA,EACJ;AAAA,EACA;AAAA,IACE;AAAA,IACA,EAAE,WAAW,GAAG,IAAI,UAClB,WACE,UAAU,OAAO,WAAW,CAAC,GAAG,OAAO,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC,GAC9D,KACF;AAAA,EACJ;AAAA,EACA;AAAA,IACE;AAAA,IACA,EAAE,WAAW,QAAQ,MAAM,UACzB,WACE,UACE,GAAG,YACD,OAAO,WAAW,CAAC,GACnB,OAAO,QAAQ,GAAG,GAClB,WAAW,GAAG,CAChB,CACF,GACA,KACF;AAAA,EACJ;AAAA,EACA,CAAC,OAAO,GAAG;AAAA,EACX,CAAC,QAAQ,GAAG;AACd,CAAC;AAGM,IAAM,aAAa,CAAC,UAA+B;AAAA,EACxD,MAAM,QAAQ,MAAM,KAAK,EAAE,YAAY;AAAA,EACvC,MAAM,MAAM,MAAM,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,GAAG,QAAQ;AAAA,EACzD,IAAI,QAAQ,WAAW;AAAA,IACrB,OAAO,QAAQ,GAAG;AAAA,EACpB;AAAA,EACA,MAAM,SAAS,cAAc,KAAK;AAAA,EAClC,MAAM,UAAU,UAAU,WAAW,IAAI,OAAO,IAAI;AAAA,EACpD,OAAO,UAAU,UACb,QACE,OAAO,UACP,OAAO,UAAU,YAAY,IAAI,MAAM,OAAO,OAAO,OAAO,CAAC,CAAC,CAChE,IACA;AAAA;AAIC,IAAM,YAAY,CAAC,OAAa,aAAyB;AAAA,EAC9D,MAAM,MAAM,CAAC,KAAa,WACxB,MAAM,MAAM,QAAQ,UAAU,IAAI,MAAM;AAAA,EAC1C,OAAO;AAAA,IACL,OAAO;AAAA,IACP,MAAM,IAAI,MAAM,MAAM,SAAS,IAAI;AAAA,IACnC,OAAO,IAAI,MAAM,OAAO,SAAS,KAAK;AAAA,IACtC,KAAK,IAAI,MAAM,KAAK,SAAS,GAAG;AAAA,EAClC;AAAA;AAIK,IAAM,YAAY,CAAC,UACxB,SAAS,OAAO,MAAM,GAAG,IACzB,SAAS,OAAO,MAAM,KAAK,IAC3B,SAAS,OAAO,MAAM,IAAI;AAMrB,IAAM,gBAAgB,CAAC,YAAkB,eAA6B;AAAA,EAC3E,MAAM,MAAM,UAAU,UAAU,YAAY,UAAU,CAAC;AAAA,EACvD,MAAM,SAAS,UAAU,UAAU;AAAA,EACnC,QAAQ,KAAK,IAAI,KAAK,MAAM,IAAI,SAAS,KAAK,IAAI,KAAK,MAAM,IAAI;AAAA;;;AC3d5D,IAAM,UAAU;AAAA,EACrB,MAAM,EAAE,MAAM,wBAAwB,OAAO,uBAAuB;AAAA,EACpE,OAAO,EAAE,MAAM,uBAAuB,OAAO,uBAAuB;AAAA,EACpE,QAAQ,EAAE,MAAM,uBAAuB,OAAO,sBAAsB;AAAA,EACpE,MAAM,EAAE,MAAM,uBAAuB,OAAO,sBAAsB;AAAA,EAClE,QAAQ,EAAE,MAAM,sBAAsB,OAAO,sBAAsB;AAAA,EACnE,KAAK,EAAE,MAAM,uBAAuB,OAAO,sBAAsB;AAAA,EACjE,MAAM,EAAE,MAAM,uBAAuB,OAAO,uBAAuB;AACrE;AAGO,IAAM,oBAAoB;AAO1B,IAAM,aAAa;AAAA,EACxB,MAAM;AAAA,IACJ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,iBAAiB;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,IACL,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,iBAAiB;AAAA,EACnB;AACF;AAEA,IAAM,QAAQ;AAGd,IAAM,MAAM,CAAC,UACX,WAAW,KAAK,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,EAAE;AAGtD,IAAM,WAAW,CACtB,MACA,SACS,IAAI,WAAW,MAAM,KAAK;AAQ9B,IAAM,UAAU,CAAC,MAAY,SAA4B;AAAA,EAC9D,MAAM,SAAS,UAAU,MAAM,SAAS,MAAM,YAAY,CAAC;AAAA,EAC3D,MAAM,UAAU,cAAc,IAAI,KAAK,GAAG,MAAM;AAAA,EAChD,OAAO,WAAW,qBAChB,WAAW,cAAc,SAAS,MAAM,KAAK,GAAG,MAAM,IACpD,QACA,WAAW,MAAM;AAAA;AAIhB,IAAM,aAAa,CAAC,MAAc,SAA4B;AAAA,EACnE,MAAM,QAAQ,WAAW,IAAI;AAAA,EAC7B,OAAO,QAAQ,QAAQ,OAAO,IAAI,IAAI;AAAA;AASjC,IAAM,iBAAiB,CAAC,UAC7B,OAAO,OAAO,SAAS,KAAK;AAK9B,IAAM,YAAY;AAGlB,IAAM,YAAY,CAAC,OAAe,aAChC,UAAU,KAAK,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,IAAI;AAGhD,IAAM,gBAAgB,CAAC,OAAe,SACpC,eAAe,KAAK,IAChB,QAAQ,OAAO,QACf,UAAU,OAAO,QAAQ,KAAK,KAAK;AAGzC,IAAM,kBAAkB,CAAC,UACvB,SAAS,UAAU,KAAK,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,IAAI;AAEzD,IAAM,QAAQ;AAAA,EACZ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,IAAI;AACN;AAEA,IAAM,YAAY,CAAC,UAA0B,KAAK,UAAU,KAAK;AAEjE,IAAM,qBAAqB,CAAC,UAC1B,OAAO,UAAU,KAAK;AAExB,IAAM,WAAW,CAAC,MAAc,UAC9B,QAAQ,CAAC,KAAK,SAAS,QAAQ,IAAI,CAAC;AAQtC,IAAM,eAAe,CACnB,OACA,YAEA;AAAA,EACE,qBAAqB,QAAQ;AAAA,EAC7B,gCAAgC,WAAW,QAAQ,QAAQ,OAAO;AAAA,EAClE,GAAG,SAAS,kBAAkB,QAAQ,MAAM;AAAA,EAC5C,GAAG,SACD,6BACA,QAAQ,SAAS,WAAW,QAAQ,QAAQ,OAAO,IAAI,IACzD;AAAA,EACA,GAAG,SAAS,sBAAsB,gBAAgB,MAAM,YAAY,KAAK,CAAC;AAAA,EAC1E,GAAG,SACD,4BACA,MAAM,iBAAiB,QACnB,mBAAmB,MAAM,gBAAgB,KAAK,IAC9C,IACN;AAAA,EACA,qBAAqB,QAAQ;AAC/B,EACG,OAAO,OAAO,EACd,KAAK;AAAA,CAAI;AAEd,IAAM,eAAe,CACnB,OACA,YACW;AAAA,EAKX,MAAM,SAAS;AAAA,IACb,qBAAqB,QAAQ;AAAA,IAC7B,gCAAgC,WAAW,QAAQ,QAAQ,MAAM;AAAA,IACjE,GAAG,SAAS,kBAAkB,QAAQ,MAAM;AAAA,IAC5C,GAAG,SACD,6BACA,QAAQ,SAAS,WAAW,QAAQ,QAAQ,MAAM,IAAI,IACxD;AAAA,IACA,GAAG,SAAS,sBAAsB,gBAAgB,MAAM,YAAY,IAAI,CAAC;AAAA,IACzE,GAAG,SACD,4BACA,MAAM,iBAAiB,OACnB,mBAAmB,MAAM,gBAAgB,IAAI,IAC7C,IACN;AAAA,EACF,EAAE,OAAO,OAAO;AAAA,EAChB,OAAO;AAAA,EACP,OAAO,KAAK;AAAA,CAAI;AAAA;AAAA;AAAA;AAYX,IAAM,gBAAgB,CAC3B,WACkB;AAAA,EAClB,MAAM,cAAc,MAAM,OAAO,MAAM,MAAM;AAAA,EAC7C,OAAO,cAAc,MAAM,OAAO,OAAO,OAAO;AAClD;AAGO,IAAM,gBAAgB,CAC3B,UAEA,MAAM,SACF;AAAA,EACE,MAAM,cAAc,MAAM,QAAQ,MAAM;AAAA,EACxC,OAAO,cAAc,MAAM,QAAQ,OAAO;AAC5C,IACA;AAGC,IAAM,gBAAgB,CAAC,UAC5B,MAAM,MAAM;AAQP,IAAM,gBAAgB,CAAC,UAA2C;AAAA,EACvE,MAAM,SAAS,cAAc,KAAK;AAAA,EAClC,MAAM,SAAS,cAAc,KAAK;AAAA,EAClC,MAAM,OAAO,aAAa,OAAO;AAAA,IAC/B,QAAQ,OAAO;AAAA,IACf,QAAQ,QAAQ,SAAS;AAAA,IACzB,QAAQ,MAAM,MAAM;AAAA,EACtB,CAAC;AAAA,EACD,MAAM,OAAO,aAAa,OAAO;AAAA,IAC/B,QAAQ,OAAO;AAAA,IACf,QAAQ,QAAQ,QAAQ;AAAA,EAC1B,CAAC;AAAA,EAED,OAAO;AAAA;AAAA,EAEP;AAAA;AAAA,EAEA;AAAA;",
|
|
9
|
+
"debugId": "5C70C668C91C92AB64756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -8,28 +8,28 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
commandsFor,
|
|
10
10
|
detectProjectPackageManager
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-124fvmzq.js";
|
|
12
12
|
import"./chunk-zccbjcj0.js";
|
|
13
|
-
import"./chunk-
|
|
14
|
-
import"./chunk-
|
|
15
|
-
import"./chunk-
|
|
16
|
-
import"./chunk-
|
|
17
|
-
import"./chunk-
|
|
18
|
-
import"./chunk-
|
|
13
|
+
import"./chunk-nbyvgnnm.js";
|
|
14
|
+
import"./chunk-desvm72z.js";
|
|
15
|
+
import"./chunk-0pmb4tr4.js";
|
|
16
|
+
import"./chunk-dpy8qdjf.js";
|
|
17
|
+
import"./chunk-ckrcm08h.js";
|
|
18
|
+
import"./chunk-j1x92mx9.js";
|
|
19
19
|
import"./chunk-jq5n4avg.js";
|
|
20
|
-
import"./chunk-
|
|
21
|
-
import"./chunk-
|
|
20
|
+
import"./chunk-es8h0v3j.js";
|
|
21
|
+
import"./chunk-dqhg54mr.js";
|
|
22
22
|
import {
|
|
23
23
|
eject
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-k3gr1nm9.js";
|
|
25
25
|
import {
|
|
26
26
|
refuseIfDevRunning
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-tfycddbt.js";
|
|
28
28
|
import {
|
|
29
29
|
updatePackageScripts,
|
|
30
30
|
isEjectedProject
|
|
31
|
-
} from "./chunk-
|
|
32
|
-
import"./chunk-
|
|
31
|
+
} from "./chunk-53jqw8z0.js";
|
|
32
|
+
import"./chunk-s0bdnc7v.js";
|
|
33
33
|
|
|
34
34
|
// src/cli/commands/eject.ts
|
|
35
35
|
import { defineCommand } from "citty";
|
|
@@ -95,4 +95,4 @@ export {
|
|
|
95
95
|
};
|
|
96
96
|
|
|
97
97
|
//# debugId=31B30D27F177D0A364756E2164756E21
|
|
98
|
-
//# sourceMappingURL=chunk-
|
|
98
|
+
//# sourceMappingURL=chunk-gfc5fqvf.js.map
|
|
@@ -3,12 +3,12 @@ import"./chunk-zccbjcj0.js";
|
|
|
3
3
|
import {
|
|
4
4
|
referenceSpecFiles,
|
|
5
5
|
resolveRuntimeDir
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-124fvmzq.js";
|
|
7
7
|
import {
|
|
8
8
|
refreshBlumeContent,
|
|
9
9
|
showBlumeErrorOverlay,
|
|
10
10
|
generateRuntime
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-nbyvgnnm.js";
|
|
12
12
|
import {
|
|
13
13
|
commandMeta,
|
|
14
14
|
normalizeHost,
|
|
@@ -16,19 +16,19 @@ import {
|
|
|
16
16
|
logger,
|
|
17
17
|
reportDiagnostics
|
|
18
18
|
} from "./index.js";
|
|
19
|
-
import"./chunk-
|
|
19
|
+
import"./chunk-desvm72z.js";
|
|
20
20
|
import {
|
|
21
21
|
scanProject
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import"./chunk-
|
|
24
|
-
import"./chunk-
|
|
22
|
+
} from "./chunk-0pmb4tr4.js";
|
|
23
|
+
import"./chunk-ckrcm08h.js";
|
|
24
|
+
import"./chunk-j1x92mx9.js";
|
|
25
25
|
import"./chunk-jq5n4avg.js";
|
|
26
|
-
import"./chunk-
|
|
27
|
-
import"./chunk-
|
|
28
|
-
import"./chunk-
|
|
26
|
+
import"./chunk-dpy8qdjf.js";
|
|
27
|
+
import"./chunk-es8h0v3j.js";
|
|
28
|
+
import"./chunk-dqhg54mr.js";
|
|
29
29
|
import {
|
|
30
30
|
parsePort
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-74wfhv79.js";
|
|
32
32
|
import {
|
|
33
33
|
astroBuildDiagnostics
|
|
34
34
|
} from "./chunk-150jk7km.js";
|
|
@@ -37,15 +37,15 @@ import {
|
|
|
37
37
|
acquireDevLock,
|
|
38
38
|
updateDevLockPort,
|
|
39
39
|
describeDevLock
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-tfycddbt.js";
|
|
41
41
|
import {
|
|
42
42
|
refuseIfEjected
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-53jqw8z0.js";
|
|
44
44
|
import {
|
|
45
45
|
prepareProject
|
|
46
|
-
} from "./chunk-
|
|
47
|
-
import"./chunk-
|
|
48
|
-
import"./chunk-
|
|
46
|
+
} from "./chunk-297ajdcv.js";
|
|
47
|
+
import"./chunk-ms9z66nz.js";
|
|
48
|
+
import"./chunk-s0bdnc7v.js";
|
|
49
49
|
|
|
50
50
|
// src/cli/commands/dev.ts
|
|
51
51
|
import { dev } from "astro";
|
|
@@ -200,4 +200,4 @@ export {
|
|
|
200
200
|
};
|
|
201
201
|
|
|
202
202
|
//# debugId=A412AE4087B70D2F64756E2164756E21
|
|
203
|
-
//# sourceMappingURL=chunk-
|
|
203
|
+
//# sourceMappingURL=chunk-gxtg6ed2.js.map
|
|
@@ -10,12 +10,12 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
AGENTS,
|
|
12
12
|
launchInstalledAgent
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import"./chunk-
|
|
13
|
+
} from "./chunk-dv2z0rzf.js";
|
|
14
|
+
import"./chunk-j1x92mx9.js";
|
|
15
15
|
import {
|
|
16
16
|
commandsFor,
|
|
17
17
|
detectProjectPackageManager
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-124fvmzq.js";
|
|
19
19
|
import"./chunk-zccbjcj0.js";
|
|
20
20
|
import {
|
|
21
21
|
UPGRADE_GUIDE_URL,
|
|
@@ -25,10 +25,10 @@ import {
|
|
|
25
25
|
isOutsideBlumeProject,
|
|
26
26
|
collectUpgradeFindings,
|
|
27
27
|
upgradePrompt
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-9qzgg6mj.js";
|
|
29
29
|
import {
|
|
30
30
|
installDependencies
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-dhwtqnnd.js";
|
|
32
32
|
|
|
33
33
|
// src/cli/commands/upgrade.ts
|
|
34
34
|
import { defineCommand } from "citty";
|
|
@@ -138,4 +138,4 @@ export {
|
|
|
138
138
|
};
|
|
139
139
|
|
|
140
140
|
//# debugId=38BC7BC8832D718964756E2164756E21
|
|
141
|
-
//# sourceMappingURL=chunk-
|
|
141
|
+
//# sourceMappingURL=chunk-hvcxng5f.js.map
|
|
@@ -390,4 +390,4 @@ var analyzeComponentOverrides = (source, filePath) => {
|
|
|
390
390
|
export { emptyComponentOverrides, ComponentOverridesError, analyzeComponentOverrides };
|
|
391
391
|
|
|
392
392
|
//# debugId=59653B23465A56F364756E2164756E21
|
|
393
|
-
//# sourceMappingURL=chunk-
|
|
393
|
+
//# sourceMappingURL=chunk-j1x92mx9.js.map
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
renderRssFeed,
|
|
19
19
|
isOpenApiSource,
|
|
20
20
|
buildRawMarkdown
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-124fvmzq.js";
|
|
22
22
|
import {
|
|
23
23
|
buildApiSpec,
|
|
24
24
|
buildAskData,
|
|
@@ -40,17 +40,17 @@ import {
|
|
|
40
40
|
analyzeComponentsFile,
|
|
41
41
|
languageIconCssFor,
|
|
42
42
|
clientFeaturesFor
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-nbyvgnnm.js";
|
|
44
44
|
import {
|
|
45
45
|
packageRoot
|
|
46
46
|
} from "./index.js";
|
|
47
47
|
import {
|
|
48
48
|
buildSearchDocuments,
|
|
49
49
|
buildMcpData
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-desvm72z.js";
|
|
51
51
|
import {
|
|
52
52
|
scanProject
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-0pmb4tr4.js";
|
|
54
54
|
import {
|
|
55
55
|
planComponentSlots,
|
|
56
56
|
runtimeDependencies,
|
|
@@ -86,17 +86,17 @@ import {
|
|
|
86
86
|
exampleMapTemplate,
|
|
87
87
|
examplesPageTemplate,
|
|
88
88
|
runtimeTsconfigTemplate
|
|
89
|
-
} from "./chunk-
|
|
89
|
+
} from "./chunk-dpy8qdjf.js";
|
|
90
90
|
import {
|
|
91
91
|
discoverIslands,
|
|
92
92
|
EXAMPLE_SCAN_GLOB,
|
|
93
93
|
exampleScanRoots,
|
|
94
94
|
discoverExamples,
|
|
95
95
|
exampleMarkdownLookup
|
|
96
|
-
} from "./chunk-
|
|
96
|
+
} from "./chunk-ckrcm08h.js";
|
|
97
97
|
import {
|
|
98
98
|
buildThemeCss
|
|
99
|
-
} from "./chunk-
|
|
99
|
+
} from "./chunk-es8h0v3j.js";
|
|
100
100
|
|
|
101
101
|
// src/registry/eject.ts
|
|
102
102
|
import { existsSync } from "node:fs";
|
|
@@ -309,6 +309,7 @@ var examplesPreviewFiles = (srcDir, basePath, hasExamples) => hasExamples ? [
|
|
|
309
309
|
] : [];
|
|
310
310
|
var ejectDependencies = (options) => {
|
|
311
311
|
const { assistant } = options.config.ai;
|
|
312
|
+
const { narration } = options.config;
|
|
312
313
|
return [
|
|
313
314
|
...new Set([
|
|
314
315
|
"astro",
|
|
@@ -319,6 +320,7 @@ var ejectDependencies = (options) => {
|
|
|
319
320
|
...runtimeDependencies(options),
|
|
320
321
|
...options.needsReact ? ["react", "react-dom"] : [],
|
|
321
322
|
...assistant?.enabled && !assistant.endpoint ? ["ai"] : [],
|
|
323
|
+
...narration.enabled ? narration.provider?.runtimeDeps ?? [] : [],
|
|
322
324
|
...options.config.export.epub ? ["epub-gen-memory"] : []
|
|
323
325
|
])
|
|
324
326
|
];
|
|
@@ -635,5 +637,5 @@ var eject = async (root) => {
|
|
|
635
637
|
|
|
636
638
|
export { eject };
|
|
637
639
|
|
|
638
|
-
//# debugId=
|
|
639
|
-
//# sourceMappingURL=chunk-
|
|
640
|
+
//# debugId=3ADA68C08F37DC4A64756E2164756E21
|
|
641
|
+
//# sourceMappingURL=chunk-k3gr1nm9.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/registry/eject.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { existsSync } from \"node:fs\";\nimport { cp, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\n\nimport { join, relative } from \"pathe\";\n\nimport { OPENAPI_PATH } from \"../ai/api/paths.ts\";\nimport { buildApiSpec } from \"../ai/api/spec.ts\";\nimport { buildAskData } from \"../ai/ask-data.ts\";\nimport { resolveAskBackend } from \"../ai/ask.ts\";\nimport { buildRawMarkdown } from \"../ai/markdown.ts\";\nimport { buildMcpData } from \"../ai/mcp/data.ts\";\nimport type { McpData } from \"../ai/mcp/data.ts\";\nimport { buildMcpDiscovery, buildMcpServerCard } from \"../ai/mcp/discovery.ts\";\nimport { planComponentSlots } from \"../astro/component-slots.ts\";\nimport {\n EXAMPLE_SCAN_GLOB,\n discoverExamples,\n exampleMarkdownLookup,\n exampleScanRoots,\n} from \"../astro/examples.ts\";\nimport {\n analyzeComponentsFile,\n buildRuntimeData,\n clientFeaturesFor,\n collectStaged,\n detectNeedsReact,\n detectUsesMath,\n languageIconCssFor,\n PLAYGROUND_PROXY_ENTRY,\n playgroundProxyPattern,\n proxyAllowlistWarnings,\n specOrigins,\n} from \"../astro/generate.ts\";\nimport { discoverIslands } from \"../astro/islands.ts\";\nimport { customOgRoutes, discoverPages, routeIsTaken } from \"../astro/pages.ts\";\nimport {\n apiNavigationTemplate,\n apiNotFoundTemplate,\n apiPagesIndexTemplate,\n apiPageTemplate,\n apiSearchTemplate,\n askComponentTemplate,\n askEndpointTemplate,\n astroConfigTemplate,\n catchAllPageTemplate,\n changelogIndexTemplate,\n contentAssetsEndpointTemplate,\n contentConfigTemplate,\n exampleMapTemplate,\n exampleSlug,\n examplesPageTemplate,\n exampleWrapperTemplate,\n featuresTemplate,\n mcpEndpointTemplate,\n mcpPageFile,\n mixedbreadSearchEndpointTemplate,\n notFoundJsonTemplate,\n notFoundMarkdownTemplate,\n notFoundPageTemplate,\n ogEndpointTemplate,\n playgroundProxyTemplate,\n rawMarkdownEndpointTemplate,\n rssEndpointTemplate,\n runtimeDependencies,\n runtimeTsconfigTemplate,\n consentClientTemplate,\n searchClientTemplate,\n searchEndpointTemplate,\n staticJsonEndpointTemplate,\n} from \"../astro/templates.ts\";\nimport { collectContentAssets } from \"../core/content-assets.ts\";\nimport { buildIncludeGraph } from \"../core/includes.ts\";\nimport { packageRoot } from \"../core/package-root.ts\";\nimport { scanProject } from \"../core/project-graph.ts\";\nimport type { BlumeProject } from \"../core/project-graph.ts\";\nimport {\n resolveDocsCollection,\n sourcesOfKind,\n} from \"../core/sources/collection.ts\";\nimport type { ProjectContext } from \"../core/types.ts\";\nimport { buildRssFeeds, renderRssFeed } from \"../deploy/rss.ts\";\nimport { resolveOgFonts } from \"../og/derive.ts\";\nimport type { OpenApiData } from \"../openapi/model.ts\";\nimport {\n hasScalarReferences,\n needsPlaygroundProxy,\n} from \"../openapi/references.ts\";\nimport { buildReferenceFiles } from \"../openapi/scalar.ts\";\nimport { isOpenApiSource } from \"../openapi/source.ts\";\nimport { buildSearchDocuments } from \"../search/documents.ts\";\nimport { sourcePages } from \"../search/source-pages.ts\";\nimport {\n examplesEntryTemplate,\n tailwindEntryTemplate,\n} from \"../theme/entry.ts\";\nimport { fontLocaleCodes } from \"../theme/fonts.ts\";\nimport { buildThemeCss } from \"../theme/palette.ts\";\nimport { rebaseSourceDirectives } from \"../theme/sources.ts\";\nimport { twoslashCss } from \"../theme/twoslash.ts\";\n\nconst toPosix = (path: string): string => path.split(\"\\\\\").join(\"/\");\n\n/** The portable `@source` guess: blume in the project's own node_modules. */\nconst LOCAL_BLUME_SOURCE = \"../../node_modules/blume/src/**/*.{astro,ts,tsx}\";\n\n/**\n * The `@source` glob pointing Tailwind at Blume's own source, relative to the\n * ejected `src/generated/app.css`. The project-local `node_modules/blume` is\n * preferred (portable, and under pnpm the symlink survives version bumps), but\n * hoisted installs (npm/yarn workspaces lift blume into the workspace root's\n * node_modules) would make that guess match nothing and silently drop utility\n * classes — so fall back to the package's real installed location, and when\n * even that fails, warn instead of failing silently.\n *\n * Exported for testing.\n */\nexport const blumeSourceGlob = (\n root: string,\n genDir: string,\n resolveBlumeRoot: () => string = packageRoot\n): string => {\n if (existsSync(join(root, \"node_modules\", \"blume\"))) {\n return LOCAL_BLUME_SOURCE;\n }\n try {\n const src = join(resolveBlumeRoot(), \"src\");\n return `${toPosix(relative(genDir, src))}/**/*.{astro,ts,tsx}`;\n } catch {\n console.warn(\n 'blume: could not locate the installed blume package; src/generated/app.css keeps its default `@source \"../../node_modules/blume/...\"` glob. If blume is hoisted elsewhere, point that glob at its install location or Blume\\'s utility classes will be missing.'\n );\n return LOCAL_BLUME_SOURCE;\n }\n};\n\n/** The `blume:openapi` payload for the ejected app (`{}` when none). */\nconst ejectOpenApiData = (project: BlumeProject): OpenApiData => {\n const source = project.sources.find(isOpenApiSource);\n return source ? source.openApiData() : {};\n};\n\n/**\n * The assistant endpoint plus, unless the backend runs its own retrieval (Inkeep),\n * its grounding snapshot. Empty when the assistant is disabled.\n */\nconst askFiles = async (\n project: BlumeProject,\n srcDir: string,\n genDir: string\n): Promise<{ content: string; path: string }[]> => {\n const { assistant } = project.config.ai;\n if (!(assistant?.enabled && !assistant.endpoint)) {\n const endpointPath = join(srcDir, \"pages\", \"api\", \"ask.ts\");\n if (existsSync(endpointPath)) {\n const content = await readFile(endpointPath, \"utf-8\");\n if (content.startsWith(\"// Generated by Blume. Do not edit.\")) {\n await rm(endpointPath, { force: true });\n }\n }\n await rm(join(genDir, \"ask-data.json\"), { force: true });\n return [];\n }\n const backend = resolveAskBackend(assistant.provider);\n const files = [\n {\n content: askEndpointTemplate(backend, {\n captcha: assistant.captcha,\n cors: assistant.cors,\n instructions: assistant.instructions,\n rateLimit: project.config.rateLimit,\n retrieval: assistant.retrieval,\n tools: assistant.tools ?? backend.toolsByDefault,\n }),\n path: join(srcDir, \"pages\", \"api\", \"ask.ts\"),\n },\n ];\n if (backend.grounded) {\n files.push({\n content: `${JSON.stringify(await buildAskData(project))}\\n`,\n path: join(genDir, \"ask-data.json\"),\n });\n }\n return files;\n};\n\n/** Whether the ejected app hosts the MCP server (enabled and route free). */\nconst hostsMcp = (\n project: BlumeProject,\n userPages: { pattern: string }[]\n): boolean =>\n project.config.agents.mcp.enabled &&\n !routeIsTaken(\n userPages,\n project.graph.pages,\n project.config.agents.mcp.route\n );\n\n/**\n * The `.well-known` MCP discovery routes, injected as prerendered pages\n * alongside the user's own so the ejected Astro config wires them in. Empty\n * when the server is disabled or its route is already owned by a page.\n */\nconst mcpDiscoveryPages = (\n project: BlumeProject,\n userPages: { pattern: string }[]\n): { entrypoint: string; pattern: string }[] =>\n hostsMcp(project, userPages)\n ? [\n {\n entrypoint: \"src/blume-mcp/discovery.ts\",\n pattern: \"/.well-known/mcp.json\",\n },\n {\n entrypoint: \"src/blume-mcp/server-card.ts\",\n pattern: \"/.well-known/mcp/server-card.json\",\n },\n ]\n : [];\n\n/**\n * The playground's built-in CORS proxy route (`playground: { proxy: true }`),\n * mirroring `planPlaygroundProxy` in generate.ts: injected like the MCP\n * discovery routes, because Astro treats a `_`-prefixed page file as private,\n * and mounted under `basePath` at the URL the playground sends to. Empty when\n * no reference routes its playground through it.\n */\nconst playgroundProxyPages = (\n config: BlumeProject[\"config\"]\n): { entrypoint: string; pattern: string }[] =>\n needsPlaygroundProxy(config)\n ? [\n {\n entrypoint: toPosix(join(\"src\", PLAYGROUND_PROXY_ENTRY)),\n pattern: playgroundProxyPattern(config),\n },\n ]\n : [];\n\n/**\n * The proxy endpoint behind {@link playgroundProxyPages}, with the origin\n * allowlist baked in from the same parsed specs the reference pages render.\n */\nconst playgroundProxyFiles = (\n config: BlumeProject[\"config\"],\n openApiData: OpenApiData,\n srcDir: string\n): { content: string; path: string }[] =>\n needsPlaygroundProxy(config)\n ? [\n {\n content: playgroundProxyTemplate(\n specOrigins(openApiData),\n config.rateLimit\n ),\n path: join(srcDir, PLAYGROUND_PROXY_ENTRY),\n },\n ]\n : [];\n\n/**\n * The agent data snapshot (`blume:mcp-data`) behind the MCP server and the\n * JSON docs API, mirroring `publishAgentData` in generate.ts: built when\n * either is on, null when neither needs it.\n */\nconst ejectAgentData = async (\n project: BlumeProject,\n userPages: { pattern: string }[]\n): Promise<McpData | null> =>\n hostsMcp(project, userPages) || project.config.agents.api\n ? await buildMcpData(project)\n : null;\n\n/**\n * The MCP server endpoint and `.well-known` discovery documents, mirroring\n * `writeMcpFiles` in generate.ts. Empty when the server is disabled or its\n * route is already owned by a page.\n */\nconst mcpFiles = (\n project: BlumeProject,\n userPages: { pattern: string }[],\n srcDir: string,\n data: McpData | null\n): { content: string; path: string }[] => {\n if (!(data && hostsMcp(project, userPages))) {\n return [];\n }\n const { route } = project.config.agents.mcp;\n const discoveryInput = {\n base: data.base,\n name: data.name,\n route,\n site: data.site,\n version: data.version,\n };\n return [\n {\n content: mcpEndpointTemplate(),\n path: join(srcDir, \"pages\", mcpPageFile(route)),\n },\n {\n content: staticJsonEndpointTemplate(buildMcpDiscovery(discoveryInput)),\n path: join(srcDir, \"blume-mcp\", \"discovery.ts\"),\n },\n {\n content: staticJsonEndpointTemplate(buildMcpServerCard(discoveryInput)),\n path: join(srcDir, \"blume-mcp\", \"server-card.ts\"),\n },\n ];\n};\n\n/**\n * The JSON docs API, mirroring `planApi` and `writeApiFiles` in generate.ts:\n * the prerendered page index, per-page documents, and navigation; on server\n * output the search endpoint and, unless a user page or a content page already\n * lives under `/api/`, the JSON 404 catch-all; and `/openapi.json`, unless a\n * `public/openapi.json` or a page owns that route. The ejected `llms.txt`,\n * homepage `Link` header, and 404 page advertise these routes, so the ejected\n * app serves them. Empty when `agents.api` is off.\n */\nconst apiFiles = (\n project: BlumeProject,\n userPages: { pattern: string }[],\n root: string,\n srcDir: string,\n data: McpData | null\n): { content: string; path: string }[] => {\n const { config } = project;\n if (!(data && config.agents.api)) {\n return [];\n }\n const server = config.deployment.options.output === \"server\";\n const apiDir = join(srcDir, \"pages\", \"api\");\n const files = [\n {\n content: apiPagesIndexTemplate(),\n path: join(apiDir, \"docs\", \"pages.json.ts\"),\n },\n {\n content: apiPageTemplate(),\n path: join(apiDir, \"docs\", \"pages\", \"[...route].json.ts\"),\n },\n {\n content: apiNavigationTemplate(),\n path: join(apiDir, \"docs\", \"navigation.json.ts\"),\n },\n ];\n if (server) {\n files.push({\n content: apiSearchTemplate(),\n path: join(apiDir, \"docs\", \"search.ts\"),\n });\n }\n const apiOwned =\n userPages.some((page) => page.pattern.startsWith(\"/api/[\")) ||\n project.graph.pages.some(\n (page) => page.route === \"/api\" || page.route.startsWith(\"/api/\")\n );\n if (server && !apiOwned) {\n files.push({\n content: apiNotFoundTemplate({ base: data.base, site: data.site }),\n path: join(apiDir, \"[...path].ts\"),\n });\n }\n if (\n !(\n routeIsTaken(userPages, project.graph.pages, OPENAPI_PATH) ||\n existsSync(join(root, \"public\", \"openapi.json\"))\n )\n ) {\n files.push({\n content: staticJsonEndpointTemplate(\n buildApiSpec({\n agentReadability: config.agents.agentReadability,\n base: data.base,\n description: config.description,\n llmsTxt: config.agents.llmsTxt.enabled,\n mcpRoute: hostsMcp(project, userPages)\n ? config.agents.mcp.route\n : null,\n name: config.title,\n search: server,\n site: data.site,\n version: data.version,\n })\n ),\n path: join(srcDir, \"pages\", \"openapi.json.ts\"),\n });\n }\n return files;\n};\n\n/**\n * The `/changelog` index page, mirroring `shouldGenerateChangelog` in\n * generate.ts: emitted when `type: changelog` entries or a release-backed\n * changelog source exist, unless a user page already owns the route.\n */\nconst changelogFiles = (\n project: BlumeProject,\n userPages: { pattern: string }[],\n srcDir: string,\n options: Parameters<typeof changelogIndexTemplate>[0]\n): { content: string; path: string }[] => {\n const hasChangelog = project.graph.pages.some(\n (page) =>\n page.contentType === \"changelog\" &&\n !(page.meta.draft || page.meta.sidebar.hidden)\n );\n const hasChangelogSource =\n sourcesOfKind(project.config, \"github-releases\").length > 0;\n if (\n !(hasChangelog || hasChangelogSource) ||\n routeIsTaken(userPages, project.graph.pages, \"/changelog\")\n ) {\n return [];\n }\n return [\n {\n content: changelogIndexTemplate(options),\n path: join(srcDir, \"pages\", \"changelog.astro\"),\n },\n ];\n};\n\n/**\n * The colocated-image map and the `/blume-assets/[...asset]` endpoint that\n * serves it, mirroring generate.ts: the ejected raw Markdown points\n * `` at `/blume-assets/content/…`, and the config aliases\n * `blume:content-assets` to the map. Each original's path is written relative\n * to the project root (the directory `astro dev`/`astro build` run from), so\n * the ejected app builds from any checkout. Remote-source images need no\n * endpoint: eject copies them into the project's own `public/blume-assets`.\n */\nconst contentAssetFiles = async (\n project: BlumeProject,\n root: string,\n srcDir: string,\n genDir: string\n): Promise<{ content: string; path: string }[]> => {\n const assets = await collectContentAssets(project);\n const portable = Object.fromEntries(\n Object.entries(assets).map(([param, abs]) => [\n param,\n toPosix(relative(root, abs)),\n ])\n );\n return [\n {\n content: `${JSON.stringify(portable)}\\n`,\n path: join(genDir, \"content-assets.json\"),\n },\n {\n content: contentAssetsEndpointTemplate(null),\n path: join(srcDir, \"pages\", \"blume-assets\", \"[...asset].ts\"),\n },\n ];\n};\n\n/**\n * The partial → including-pages map with every path relative to the project\n * root, like every other path in the ejected app, so it holds in any checkout.\n * Its readers (`includeHmrPlugin`, `withIncludeRefresh`) resolve each path\n * against the app's root, which after eject is the project itself.\n */\nconst portableIncludeGraph = (\n project: BlumeProject,\n root: string\n): Record<string, string[]> =>\n Object.fromEntries(\n Object.entries(buildIncludeGraph(project.graph.pages)).map(\n ([partial, includers]) => [\n toPosix(relative(root, partial)),\n includers.map((page) => toPosix(relative(root, page))),\n ]\n )\n );\n\n/** Contents of the configured `examples.css`, or `\"\"` when unset/absent. */\n/**\n * Read a user stylesheet that eject inlines into a generated entry under\n * `genDir`, re-rooting its relative `@source` paths from the user's file.\n * Resolves to an empty string when the file is unset or absent.\n */\nconst readUserCss = async (\n file: string | null,\n genDir: string\n): Promise<string> => {\n if (!(file && existsSync(file))) {\n return \"\";\n }\n const css = await readFile(file, \"utf-8\");\n return rebaseSourceDirectives(css, { from: file, to: genDir });\n};\n\n/**\n * The per-example preview route `<Component />` iframes embed, nested under\n * `basePath` so it stays reachable behind a proxy that only forwards the\n * base. Empty when the project has no examples.\n */\nconst examplesPreviewFiles = (\n srcDir: string,\n basePath: string,\n hasExamples: boolean\n): { content: string; path: string }[] =>\n hasExamples\n ? [\n {\n content: examplesPageTemplate(),\n path: join(\n srcDir,\n \"pages\",\n ...basePath.split(\"/\").filter(Boolean),\n \"blume-examples\",\n \"[...path].astro\"\n ),\n },\n ]\n : [];\n\n/**\n * The packages the ejected app imports by bare name: Astro, Tailwind's Vite\n * plugin, Tailwind and its typography plugin (which the generated `app.css`\n * and `examples.css` import by name), `blume` itself, the integrations the\n * config wires in, whatever the configured adapters declare, and React when\n * islands, examples, or the assistant render with it (Blume ships React, so\n * projects rarely list it). They have to be the project's own dependencies\n * after eject — under a strict linker such as pnpm nothing else makes them\n * resolvable, and `astro build` fails. The hidden runtime reaches the same\n * packages through its `node_modules` junction into Blume's own, so only\n * eject declares the ones its generated files import directly: the AI SDK the\n * assistant route streams through (unless `ai.assistant.endpoint` points\n * elsewhere, when no route is written) and the EPUB generator's browser bundle\n * `features.ts` loads (only named there when `export.epub` is on). The\n * narration provider's SDK (`openai()`'s `@ai-sdk/openai`) is no runtime\n * import, but the ejected app's `astro build` loads it to generate the clips.\n */\nconst ejectDependencies = (\n options: Parameters<typeof runtimeDependencies>[0]\n): string[] => {\n const { assistant } = options.config.ai;\n const { narration } = options.config;\n return [\n ...new Set([\n \"astro\",\n \"@tailwindcss/vite\",\n \"tailwindcss\",\n \"@tailwindcss/typography\",\n \"blume\",\n ...runtimeDependencies(options),\n ...(options.needsReact ? [\"react\", \"react-dom\"] : []),\n ...(assistant?.enabled && !assistant.endpoint ? [\"ai\"] : []),\n ...(narration.enabled ? (narration.provider?.runtimeDeps ?? []) : []),\n ...(options.config.export.epub ? [\"epub-gen-memory\"] : []),\n ]),\n ];\n};\n\nconst ejectIntegrationBridge = (\n config: BlumeProject[\"config\"],\n root: string,\n configFile: string | null\n): Parameters<typeof astroConfigTemplate>[0][\"integrationBridge\"] =>\n config.integrations.length > 0 && configFile\n ? { configFile: toPosix(relative(root, configFile)) }\n : undefined;\n\n/**\n * Promote the generated runtime into the project as an owned Astro app. After\n * eject the project has a normal `astro.config.mjs` and `src/`, the `blume` CLI\n * is no longer required, and the `blume` package remains importable.\n *\n * Returns the written files plus non-fatal warnings, mirroring the generated\n * runtime (e.g. a Scalar reference spec that wasn't found, or a reference\n * route colliding with a content page), and the packages the ejected app\n * imports by bare name, for the caller to add to package.json.\n */\nexport const eject = async (\n root: string\n): Promise<{ dependencies: string[]; files: string[]; warnings: string[] }> => {\n const project = await scanProject(root, { mode: \"build\" });\n const { context, config } = project;\n\n const srcDir = join(root, \"src\");\n const genDir = join(srcDir, \"generated\");\n const assistantEnabled = config.ai.assistant?.enabled ?? false;\n const exportPdf = config.export.pdf;\n const exportEpub = config.export.epub;\n\n // Discover examples first and expose them on the project, so the agent-facing\n // Markdown built below (raw `.md`, MCP) downlevels `<Component>` to its source.\n const examples = await discoverExamples(root, config.examples.source);\n project.examples = exampleMarkdownLookup(examples.examples);\n\n const [\n pages,\n needsReactRaw,\n usesMath,\n userTheme,\n userExamplesCss,\n rawMarkdown,\n islands,\n overrideAnalysis,\n ] = await Promise.all([\n context.pagesRoot ? discoverPages(context.pagesRoot) : Promise.resolve([]),\n detectNeedsReact(root),\n detectUsesMath(root),\n readUserCss(context.themeFile, genDir),\n readUserCss(\n config.examples.css ? join(root, config.examples.css) : null,\n genDir\n ),\n buildRawMarkdown(project),\n discoverIslands(root),\n analyzeComponentsFile(context.componentsFile),\n ]);\n // The `islands/` convention and `components.ts` share the same static plan\n // the CLI uses, with every import written relative to its generated file so\n // the ejected app builds from any checkout (like the example wrappers below).\n const slotPlan = planComponentSlots(islands.islands, overrideAnalysis, {\n relativeTo: genDir,\n });\n // Island/example/override frameworks drive which Astro renderers the ejected\n // config wires in; React also switches on for project `.tsx`/`.jsx` and the assistant.\n const frameworks = new Set<string>([\n ...islands.islands.map((island) => island.framework),\n ...examples.examples.map((example) => example.framework),\n ...slotPlan.frameworks,\n ]);\n const needsReact =\n needsReactRaw || assistantEnabled || frameworks.has(\"react\");\n const needsVue = frameworks.has(\"vue\");\n const needsSvelte = frameworks.has(\"svelte\");\n\n // A project-relative context so generated files use portable paths.\n const relContext: ProjectContext = {\n ...context,\n contentRoot: toPosix(relative(root, context.contentRoot)),\n distDir: \"./dist\",\n outDir: \".\",\n pagesRoot: context.pagesRoot\n ? `./${toPosix(relative(root, context.pagesRoot))}`\n : null,\n root: \".\",\n };\n // The `docs` collection resolves its base against the real project root and\n // is then relativized like everything else, so the ejected content config\n // never bakes in the absolute path `eject` happened to run from.\n const docsCollection = resolveDocsCollection(config, root);\n const relCollection = {\n ...docsCollection,\n base: toPosix(relative(root, docsCollection.base)),\n };\n\n const relPages = [\n ...pages.map((page) => ({\n entrypoint: toPosix(relative(root, page.entrypoint)),\n pattern: page.pattern,\n })),\n ...mcpDiscoveryPages(project, pages),\n ...playgroundProxyPages(config),\n ];\n const openApiData = ejectOpenApiData(project);\n\n // Non-filesystem sources eject their materialized MDX into `<root>/blume-staged`\n // (a dedicated dir so it never clashes with a content root literally named\n // `content`; the relative `staged` collection points there).\n const staged = collectStaged(project);\n const hasStaged = staged.size > 0;\n const stagedDir = \"blume-staged\";\n const features = await clientFeaturesFor(project);\n const languageIcons = await languageIconCssFor(project);\n\n const files: {\n path: string;\n content: string;\n /** Don't overwrite a file the user already owns (e.g. a tuned tsconfig). */\n skipIfExists?: boolean;\n }[] = [\n {\n content: astroConfigTemplate({\n askPath: \"./src/generated/Ask.astro\",\n config,\n consentClientPath: \"./src/generated/consent-client.ts\",\n contentRoot: relContext.contentRoot,\n contentRoutes: project.manifest.routes.map((route) => route.path),\n context: relContext,\n examplesPath: \"./src/generated/examples.ts\",\n examplesThemePath: \"./src/generated/examples.css\",\n features,\n featuresPath: \"./src/generated/features.ts\",\n // No CLI publishes the runtime data modules in memory after eject, so\n // the config aliases each to the JSON snapshot written below.\n generatedModulesDir: \"./src/generated\",\n integrationBridge: ejectIntegrationBridge(\n config,\n root,\n context.configFile\n ),\n needsReact,\n needsSvelte,\n needsVue,\n pages: relPages,\n searchClientPath: \"./src/generated/search-client.ts\",\n themePath: \"./src/generated/app.css\",\n }),\n path: join(root, \"astro.config.mjs\"),\n },\n {\n content: runtimeTsconfigTemplate(),\n path: join(root, \"tsconfig.json\"),\n // Never clobber a hand-tuned tsconfig; only write ours if none exists.\n skipIfExists: true,\n },\n {\n content: contentConfigTemplate({\n collection: relCollection,\n config,\n context: relContext,\n staged: hasStaged,\n stagedBase: stagedDir,\n }),\n path: join(srcDir, \"content.config.ts\"),\n },\n {\n content: catchAllPageTemplate({\n exportEpub,\n exportPdf,\n mathEnabled: usesMath,\n needsReact,\n }),\n path: join(srcDir, \"pages\", \"[...slug].astro\"),\n },\n {\n content: slotPlan.module,\n path: join(genDir, \"components.ts\"),\n },\n // The example map the catch-all imports; written even when empty so the\n // `blume:examples` alias always resolves.\n {\n content: exampleMapTemplate(examples.examples, config.basePath),\n path: join(genDir, \"examples.ts\"),\n },\n {\n // The isolated Tailwind entry for `<Component />` preview frames.\n // Relative sources keep the ejected app portable.\n content: examplesEntryTemplate({\n configTokens: buildThemeCss(config.theme),\n sources: exampleScanRoots(root, examples.dir).map(\n (dir) => `${relative(genDir, dir)}/${EXAMPLE_SCAN_GLOB}`\n ),\n userCss: userExamplesCss,\n }),\n path: join(genDir, \"examples.css\"),\n },\n {\n content: tailwindEntryTemplate({\n configTokens: buildThemeCss(config.theme),\n languageIcons,\n // Relative paths from src/generated/app.css keep the ejected app\n // portable; the blume glob resolves the real install location when\n // the package is hoisted out of the project's own node_modules.\n sources: [\n blumeSourceGlob(root, genDir),\n \"../../**/*.{astro,jsx,mdx,ts,tsx}\",\n ],\n twoslashCss: twoslashCss(),\n userTheme,\n }),\n path: join(genDir, \"app.css\"),\n },\n { content: buildRuntimeData(project), path: join(genDir, \"data.json\") },\n // The header's Ask trigger behind the `blume:ask` alias. Always written — it\n // renders nothing when Ask is off — so the alias always resolves.\n {\n content: askComponentTemplate(assistantEnabled),\n path: join(genDir, \"Ask.astro\"),\n },\n {\n content: `${JSON.stringify(openApiData)}\\n`,\n path: join(genDir, \"openapi.json\"),\n },\n {\n content: `${JSON.stringify(rawMarkdown)}\\n`,\n path: join(genDir, \"raw-markdown.json\"),\n },\n {\n // The partial → including-pages map behind `includeHmrPlugin`, which the\n // ejected astro.config wires at this exact path — without the file every\n // hot update's read would silently no-op and partial edits would serve\n // stale pages. A snapshot like the rest of `src/generated`: the ejected\n // app owns (and may regenerate or prune) it.\n content: `${JSON.stringify(portableIncludeGraph(project, root))}\\n`,\n path: join(genDir, \"includes.json\"),\n },\n {\n content: rawMarkdownEndpointTemplate(\"md\"),\n path: join(srcDir, \"pages\", \"[...slug].md.ts\"),\n },\n {\n content: rawMarkdownEndpointTemplate(\"mdx\"),\n path: join(srcDir, \"pages\", \"[...slug].mdx.ts\"),\n },\n ];\n\n files.push(...(await contentAssetFiles(project, root, srcDir, genDir)));\n\n if (assistantEnabled) {\n files.push(...(await askFiles(project, srcDir, genDir)));\n }\n\n // The `/changelog` index, mirrored from the generated runtime (`[]` when\n // the project has no changelog). The OG endpoint below adds its card.\n const changelog = changelogFiles(project, pages, srcDir, {\n exportEpub,\n exportPdf,\n needsReact,\n staged: hasStaged,\n });\n\n if (config.seo.og.enabled) {\n // The default script fallbacks ride along (Google family names, nothing\n // machine-specific), so a non-Latin card still renders after eject. An\n // explicit seo.og.fonts replaces them, and isn't carried over.\n const { fallbacks, families } = resolveOgFonts(\n {\n locales: fontLocaleCodes(config.i18n),\n ogFonts: config.seo.og.fonts,\n themeFonts: config.theme.fonts,\n themeFontsConfigured: false,\n },\n root\n );\n files.push({\n content: ogEndpointTemplate(\n customOgRoutes(pages, config.title, config.seo.og.titles),\n {\n fallbacks,\n families,\n pageDescriptions: config.seo.og.description !== false,\n },\n changelog.length > 0\n ),\n path: join(srcDir, \"pages\", \"og\", \"[...slug].png.ts\"),\n });\n }\n\n // The hosted MCP server, the JSON docs API, and the playground's built-in\n // proxy, mirrored from the generated runtime (`[]` when each is off). The\n // server and the API share one agent data snapshot.\n const agentData = await ejectAgentData(project, pages);\n if (agentData) {\n files.push({\n content: `${JSON.stringify(agentData)}\\n`,\n path: join(genDir, \"mcp-data.json\"),\n });\n }\n files.push(\n ...mcpFiles(project, pages, srcDir, agentData),\n ...apiFiles(project, pages, root, srcDir, agentData),\n ...changelog,\n ...playgroundProxyFiles(config, openApiData, srcDir)\n );\n\n // Default 404 page and its Markdown (`/404.md`) and JSON (`/404.json`)\n // twins, mirroring `writeNotFoundPage` in generate.ts: all three are skipped\n // when the project already owns `/404` (a custom `pages/404.astro` or a\n // `404.md` content page). The ejected project owns the files afterwards and\n // can edit or remove them.\n if (!routeIsTaken(pages, project.graph.pages, \"/404\")) {\n files.push(\n {\n content: notFoundPageTemplate(),\n path: join(srcDir, \"pages\", \"404.astro\"),\n },\n {\n content: notFoundMarkdownTemplate(),\n path: join(srcDir, \"pages\", \"404.md.ts\"),\n },\n {\n content: notFoundJsonTemplate(),\n path: join(srcDir, \"pages\", \"404.json.ts\"),\n }\n );\n }\n\n // The client-feature loaders behind the `blume:features` alias, the\n // provider-specific client loader behind `blume:search-client`, and the\n // consent adapter's browser module behind `blume:consent-client`.\n files.push(\n {\n content: featuresTemplate(features),\n path: join(genDir, \"features.ts\"),\n },\n {\n content: searchClientTemplate(config),\n path: join(genDir, \"search-client.ts\"),\n },\n {\n content: consentClientTemplate(config.consent),\n path: join(genDir, \"consent-client.ts\"),\n }\n );\n\n const searchAdapter = config.search.provider;\n if (searchAdapter.mode === \"static\") {\n const documents = await buildSearchDocuments(project);\n files.push(\n {\n content: `${JSON.stringify(documents)}\\n`,\n path: join(genDir, \"search.json\"),\n },\n {\n content: searchEndpointTemplate(),\n path: join(srcDir, \"pages\", \"blume-search.json.ts\"),\n }\n );\n }\n\n if (searchAdapter.kind === \"mixedbread\") {\n files.push({\n content: mixedbreadSearchEndpointTemplate(\n searchAdapter.options,\n sourcePages(project),\n config.rateLimit\n ),\n path: join(srcDir, \"pages\", \"api\", \"search.ts\"),\n });\n }\n\n const feeds = buildRssFeeds(project);\n if (feeds.length > 0) {\n const feedXml = Object.fromEntries(\n feeds.map((feed) => [feed.type, renderRssFeed(feed)])\n );\n files.push(\n {\n content: `${JSON.stringify(feedXml)}\\n`,\n path: join(genDir, \"rss.json\"),\n },\n {\n content: rssEndpointTemplate(),\n path: join(srcDir, \"pages\", \"[section]\", \"rss.xml.ts\"),\n }\n );\n }\n\n // Scalar API/AsyncAPI reference pages, mirrored from the generated runtime so\n // the ejected app keeps its reference routes — including the warnings (a\n // missing spec file, a route collision), which the caller surfaces exactly\n // like the generated-runtime path does.\n // A proxied spec with no origin to allow gets the generated runtime's\n // diagnostic too.\n const warnings: string[] = proxyAllowlistWarnings(config, openApiData);\n if (hasScalarReferences(config)) {\n const references = await buildReferenceFiles({\n config,\n contentRoutes: new Set(project.graph.pages.map((page) => page.route)),\n root,\n });\n warnings.push(...references.warnings);\n for (const file of references.files) {\n files.push({\n content: file.content,\n path: join(srcDir, \"pages\", file.pagePath),\n });\n }\n }\n\n // Per-override and per-example live wrappers referenced by the maps above.\n files.push(\n ...slotPlan.wrappers.map((wrapper) => ({\n content: wrapper.content,\n path: join(genDir, \"component-slots\", `${wrapper.name}.astro`),\n })),\n ...examples.examples.map((example) => ({\n content: exampleWrapperTemplate(example, join(genDir, \"examples\")),\n path: join(genDir, \"examples\", `${exampleSlug(example.path)}.astro`),\n })),\n ...examplesPreviewFiles(\n srcDir,\n config.basePath,\n examples.examples.length > 0\n )\n );\n\n // Materialize staged source bodies under `<root>/blume-staged/<source>/<ref>`,\n // matching the relative `staged` collection base in the ejected config.\n for (const [entryId, content] of staged) {\n files.push({ content, path: join(root, stagedDir, entryId) });\n }\n\n const written = files.filter(\n (file) => !(file.skipIfExists && existsSync(file.path))\n );\n await Promise.all(\n written.map(async (file) => {\n await mkdir(join(file.path, \"..\"), { recursive: true });\n await writeFile(file.path, file.content, \"utf-8\");\n })\n );\n\n // Materialized source assets (e.g. downloaded Notion images) live under the\n // hidden runtime's public dir; copy them into the owned project's `public/`\n // so the staged content's `/blume-assets/…` references still resolve.\n const assetsSrc = join(context.outDir, \"public\", \"blume-assets\");\n if (existsSync(assetsSrc)) {\n await cp(assetsSrc, join(root, \"public\", \"blume-assets\"), {\n recursive: true,\n });\n }\n\n // The hidden runtime is no longer the source of truth.\n await rm(context.outDir, { force: true, recursive: true });\n\n return {\n dependencies: ejectDependencies({\n config,\n needsReact,\n needsSvelte,\n needsVue,\n }),\n files: written.map((file) => file.path),\n warnings,\n };\n};\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "3ADA68C08F37DC4A64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
import {
|
|
10
10
|
AGENTS,
|
|
11
11
|
launchInstalledAgent
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-dv2z0rzf.js";
|
|
13
13
|
|
|
14
14
|
// src/cli/commands/migrate.ts
|
|
15
15
|
import { defineCommand } from "citty";
|
|
@@ -173,4 +173,4 @@ export {
|
|
|
173
173
|
};
|
|
174
174
|
|
|
175
175
|
//# debugId=A9196D6CE8B0C0B464756E2164756E21
|
|
176
|
-
//# sourceMappingURL=chunk-
|
|
176
|
+
//# sourceMappingURL=chunk-kdpzw38a.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
needsPlaygroundProxy,
|
|
4
4
|
resolveAskBackend
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-124fvmzq.js";
|
|
6
6
|
|
|
7
7
|
// src/core/server-features.ts
|
|
8
8
|
var serverFeatures = (config) => {
|
|
@@ -101,4 +101,4 @@ var checkRequiredSecrets = (config) => {
|
|
|
101
101
|
export { serverFeatures, checkRequiredSecrets };
|
|
102
102
|
|
|
103
103
|
//# debugId=D62D6223654FF46464756E2164756E21
|
|
104
|
-
//# sourceMappingURL=chunk-
|
|
104
|
+
//# sourceMappingURL=chunk-ms9z66nz.js.map
|