From b03a1e0112e0c8f153aba63caa7cef8434e8f202 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philippe=20Rivi=C3=A8re?= Date: Mon, 20 May 2024 19:57:17 +0200 Subject: [PATCH 1/4] Support remote and local assets in custom CSS (This includes images and fonts using url().) Using onResolve (as suggested in https://github.com/observablehq/framework/issues/786#issuecomment-2070227596) closes #786 supersedes #788 --- src/build.ts | 28 ++++++++++----- src/rollup.ts | 22 ++++++++++-- test/input/build/css-public/horse.jpg | Bin 0 -> 39663 bytes test/input/build/css-public/index.md | 12 +++++++ test/input/build/css-public/style.css | 20 +++++++++++ .../build/css-public/_file/horse.2d33a223.jpg | Bin 0 -> 39663 bytes .../css-public/_import/style.a31bcaf4.css | 1 + .../build/css-public/_observablehq/client.js | 0 .../build/css-public/_observablehq/runtime.js | 0 .../build/css-public/_observablehq/stdlib.js | 0 test/output/build/css-public/index.html | 34 ++++++++++++++++++ 11 files changed, 107 insertions(+), 10 deletions(-) create mode 100644 test/input/build/css-public/horse.jpg create mode 100644 test/input/build/css-public/index.md create mode 100644 test/input/build/css-public/style.css create mode 100644 test/output/build/css-public/_file/horse.2d33a223.jpg create mode 100644 test/output/build/css-public/_import/style.a31bcaf4.css create mode 100644 test/output/build/css-public/_observablehq/client.js create mode 100644 test/output/build/css-public/_observablehq/runtime.js create mode 100644 test/output/build/css-public/_observablehq/stdlib.js create mode 100644 test/output/build/css-public/index.html diff --git a/src/build.ts b/src/build.ts index 7e0af3ed3..f10fa40de 100644 --- a/src/build.ts +++ b/src/build.ts @@ -92,6 +92,7 @@ export async function build( // For cache-breaking we rename most assets to include content hashes. const aliases = new Map(); + const plainaliases = new Map(); // Add the search bundle and data, if needed. if (config.search) { @@ -106,6 +107,7 @@ export async function build( // Generate the client bundles (JavaScript and styles). TODO Use a content // hash, or perhaps the Framework version number for built-in modules. + const delayedStylesheets = new Set(); if (addPublic) { for (const path of globalImports) { if (path.startsWith("/_observablehq/") && path.endsWith(".js")) { @@ -136,14 +138,9 @@ export async function build( const sourcePath = await populateNpmCache(root, path); // TODO effects await effects.copyFile(sourcePath, path); } else if (!/^\w+:/.test(specifier)) { - const sourcePath = join(root, specifier); - effects.output.write(`${faint("build")} ${sourcePath} ${faint("→")} `); - const contents = await bundleStyles({path: sourcePath, minify: true}); - const hash = createHash("sha256").update(contents).digest("hex").slice(0, 8); - const ext = extname(specifier); - const alias = `/${join("_import", dirname(specifier), `${basename(specifier, ext)}.${hash}${ext}`)}`; - aliases.set(resolveStylesheetPath(root, specifier), alias); - await effects.writeFile(alias, contents); + // Uses a side effect to register file assets on custom stylesheets + delayedStylesheets.add(specifier); + await bundleStyles({path: join(root, specifier), files}); } } } @@ -170,9 +167,24 @@ export async function build( const ext = extname(file); const alias = `/${join("_file", dirname(file), `${basename(file, ext)}.${hash}${ext}`)}`; aliases.set(loaders.resolveFilePath(file), alias); + plainaliases.set(file, alias); await effects.writeFile(alias, contents); } + // Write delayed stylesheets + if (addPublic) { + for (const specifier of delayedStylesheets) { + const sourcePath = join(root, specifier); + effects.output.write(`${faint("build")} ${sourcePath} ${faint("→")} `); + const contents = await bundleStyles({path: sourcePath, minify: true, aliases: plainaliases}); + const hash = createHash("sha256").update(contents).digest("hex").slice(0, 8); + const ext = extname(specifier); + const alias = `/${join("_import", dirname(specifier), `${basename(specifier, ext)}.${hash}${ext}`)}`; + aliases.set(resolveStylesheetPath(root, specifier), alias); + await effects.writeFile(alias, contents); + } + } + // Download npm imports. TODO It might be nice to use content hashes for // these, too, but it would involve rewriting the files since populateNpmCache // doesn’t let you pass in a resolver. diff --git a/src/rollup.ts b/src/rollup.ts index 4a6544509..2d97557f6 100644 --- a/src/rollup.ts +++ b/src/rollup.ts @@ -1,7 +1,8 @@ -import {extname} from "node:path/posix"; +import {extname, join} from "node:path/posix"; import {nodeResolve} from "@rollup/plugin-node-resolve"; import type {CallExpression} from "acorn"; import {simple} from "acorn-walk"; +import type {PluginBuild} from "esbuild"; import {build} from "esbuild"; import type {AstNode, OutputChunk, Plugin, ResolveIdResult} from "rollup"; import {rollup} from "rollup"; @@ -36,16 +37,33 @@ function rewriteInputsNamespace(code: string) { export async function bundleStyles({ minify = false, path, - theme + theme, + files, + aliases }: { minify?: boolean; path?: string; theme?: string[]; + files?: Set; + aliases?: Map; }): Promise { + const assets = { + name: "resolve CSS assets", + setup(build: PluginBuild) { + build.onResolve({filter: /^\w+:\/\//}, (args) => ({path: args.path, external: true})); + build.onResolve({filter: /./}, (args) => { + if (args.path.endsWith(".css") || args.path.match(/^[#.]/)) return; + if (files) files.add(args.path); // /!\ modifies files as a side effect + const path = join("..", aliases?.get(args.path) ?? join("_file", args.path)); + return {path, external: true}; + }); + } + }; const result = await build({ bundle: true, ...(path ? {entryPoints: [path]} : {stdin: {contents: renderTheme(theme!), loader: "css"}}), write: false, + plugins: [assets], minify, alias: STYLE_MODULES }); diff --git a/test/input/build/css-public/horse.jpg b/test/input/build/css-public/horse.jpg new file mode 100644 index 0000000000000000000000000000000000000000..016b4a1cbed150e5a4117337670f6145b26115ff GIT binary patch literal 39663 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 UNqHQXxasKRaS|Ev;NPGB4=QY;82|tP literal 0 HcmV?d00001 diff --git a/test/input/build/css-public/index.md b/test/input/build/css-public/index.md new file mode 100644 index 000000000..2b352bccd --- /dev/null +++ b/test/input/build/css-public/index.md @@ -0,0 +1,12 @@ +--- +style: style.css +--- + +# CSS assets + +Atkinson Hyperlegible font is named after Braille Institute founder, J. Robert Atkinson. What makes it different from traditional typography design is that it focuses on letterform distinction to increase character recognition, ultimately improving readability. [We are making it free for anyone to use!](https://brailleinstitute.org/freefont) + +
+
+
This image is set with CSS.
+
diff --git a/test/input/build/css-public/style.css b/test/input/build/css-public/style.css new file mode 100644 index 000000000..e903661c3 --- /dev/null +++ b/test/input/build/css-public/style.css @@ -0,0 +1,20 @@ +@import url("observablehq:default.css"); +@import url("observablehq:theme-air.css"); + +:root { + --serif: "Atkinson Hyperlegible"; +} + +div.bg { + background-image: url("horse.jpg"); +} + +div.dont-break-hashes { + offset-path: url(#path); +} + +@font-face { + font-family: "Atkinson Hyperlegible"; + src: url(https://fonts.gstatic.com/s/atkinsonhyperlegible/v11/9Bt23C1KxNDXMspQ1lPyU89-1h6ONRlW45G04pIoWQeCbA.woff2) + format("woff2"); +} diff --git a/test/output/build/css-public/_file/horse.2d33a223.jpg b/test/output/build/css-public/_file/horse.2d33a223.jpg new file mode 100644 index 0000000000000000000000000000000000000000..016b4a1cbed150e5a4117337670f6145b26115ff GIT binary patch literal 39663 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 UNqHQXxasKRaS|Ev;NPGB4=QY;82|tP literal 0 HcmV?d00001 diff --git a/test/output/build/css-public/_import/style.a31bcaf4.css b/test/output/build/css-public/_import/style.a31bcaf4.css new file mode 100644 index 000000000..d843ac605 --- /dev/null +++ b/test/output/build/css-public/_import/style.a31bcaf4.css @@ -0,0 +1 @@ +:root{--monospace: Menlo, Consolas, monospace;--monospace-font: 14px/1.5 var(--monospace);--serif: "Source Serif Pro", "Iowan Old Style", "Apple Garamond", "Palatino Linotype", "Times New Roman", "Droid Serif", Times, serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--sans-serif: -apple-system, BlinkMacSystemFont, "avenir next", avenir, helvetica, "helvetica neue", ubuntu, roboto, noto, "segoe ui", arial, sans-serif;--theme-blue: #4269d0;--theme-green: #3ca951;--theme-red: #ff725c;--theme-yellow: #efb118}html{-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--theme-background);color:var(--theme-foreground)}body{font:17px/1.5 var(--serif);margin:0}a[href]{color:var(--theme-foreground-focus)}h1,h2,h3,h4,h5,h6{color:var(--theme-foreground-alt);font-weight:700;line-height:1.15;margin-top:0;margin-bottom:.25rem;scroll-margin-top:1rem;text-wrap:balance}h2+p,h3+p,h4+p,h2+table,h3+table,h4+table{margin-top:0}h1+h2{color:var(--theme-foreground);font-size:20px;font-style:italic;font-weight:400;margin-bottom:1rem}a[href]{text-decoration:none}a[href]:hover,a[href]:focus{text-decoration:underline}h1 code,h2 code,h3 code,h4 code,h5 code,h6 code{font-size:90%}pre{line-height:1.5}pre,code,tt{font-family:var(--monospace);font-size:14px}img{max-width:calc(100vw - 28px)}p,table,figure,figcaption,h1,h2,h3,h4,h5,h6,.katex-display{max-width:640px}blockquote,ol,ul{max-width:600px}blockquote{margin:1rem 1.5rem}ul ol{padding-left:28px}hr{height:1px;margin:1rem 0;padding:1rem 0;border:none;background:no-repeat center/100% 1px linear-gradient(to right,var(--theme-foreground-faintest),var(--theme-foreground-faintest))}pre{background-color:var(--theme-background-alt);border-radius:4px;margin:1rem -1rem;max-width:960px;min-height:1.5em;padding:.5rem 1rem;overflow-x:auto;box-sizing:border-box}input:not([type]),input[type=email],input[type=number],input[type=password],input[type=range],input[type=search],input[type=tel],input[type=text],input[type=url]{width:240px}input,canvas,button{vertical-align:middle}button,input,textarea{accent-color:var(--theme-blue)}table{width:100%;border-collapse:collapse;font:13px/1.2 var(--sans-serif)}table pre,table code,table tt{font-size:inherit;line-height:inherit}th>pre:only-child,td>pre:only-child{margin:0;padding:0}th{color:var(--theme-foreground);text-align:left;vertical-align:bottom}td{color:var(--theme-foreground-alt);vertical-align:top}th,td{padding:3px 6.5px 3px 0}th:last-child,td:last-child{padding-right:0}tr:not(:last-child){border-bottom:solid 1px var(--theme-foreground-faintest)}thead tr{border-bottom:solid 1px var(--theme-foreground-fainter)}figure,table{margin:1rem 0}figure img{max-width:100%}figure>h2,figure>h3{font-family:var(--sans-serif)}figure>h2{font-size:20px}figure>h3{font-size:16px;font-weight:400}figcaption{font:small var(--sans-serif);color:var(--theme-foreground-muted)}a[href].observablehq-header-anchor{color:inherit}:root{--font-big: 700 32px/1 var(--sans-serif);--font-small: 14px var(--sans-serif)}.big{font:var(--font-big)}.small{font:var(--font-small)}.red{color:var(--theme-red)}.yellow{color:var(--theme-yellow)}.green{color:var(--theme-green)}.blue{color:var(--theme-blue)}.muted{color:var(--theme-foreground-muted)}.observablehq--draft>h1:first-of-type:after{content:" [DRAFT]";color:var(--theme-foreground-muted)}:root{--theme-caret: url("../_file/data:image/svg+xml,%3Csvg xmlns='http:/www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='M5 7L8.125 9.5L11.25 7' stroke='black' stroke-width='1.5' stroke-linecap='round' fill='none'/%3E%3C/svg%3E");--theme-toggle: url("../_file/data:image/svg+xml,%3Csvg xmlns='http:/www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='m10.5,11 2.5-3-2.5-3 M6,8h7' fill='none' stroke='black' stroke-width='2'/%3E%3Crect x='2' y='2' fill='currentColor' height='12' rx='0.5' width='2'/%3E%3C/svg%3E");--theme-magnifier: url("../_file/data:image/svg+xml,%3Csvg xmlns='http:/www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath stroke='currentColor' stroke-width='2' fill='none' d='M15,15L10.5,10.5a3,3 0 1,0 -6 -6a3,3 0 1,0 6 6'%3E%3C/path%3E%3C/svg%3E")}#observablehq-main,#observablehq-header,#observablehq-footer{margin:1rem auto;max-width:1152px}#observablehq-main{min-height:calc(100vh - 20rem);position:relative;z-index:0}#observablehq-footer{display:block;margin-top:10rem;font:12px var(--sans-serif);color:var(--theme-foreground-faint)}#observablehq-footer nav{display:grid;max-width:640px;grid-template-columns:1fr 1fr;column-gap:1rem;margin-bottom:1rem}#observablehq-footer nav a{display:flex;flex-direction:column;border:1px solid var(--theme-foreground-fainter);border-radius:8px;padding:1rem;line-height:1rem;text-decoration:none}#observablehq-footer nav a span{font-size:14px}#observablehq-footer nav a:hover span{text-decoration:underline}#observablehq-footer nav a:hover{border-color:var(--theme-foreground-focus)}#observablehq-footer nav a[rel=prev]{grid-column:1;align-items:start}#observablehq-footer nav a[rel=next]{grid-column:2;align-items:end}#observablehq-footer nav a:before{color:var(--theme-foreground-faint)}#observablehq-footer nav a[rel=prev]:before{content:"Previous page"}#observablehq-footer nav a[rel=next]:before{content:"Next page"}#observablehq-center{margin:1rem 2rem}#observablehq-sidebar{position:fixed;background:var(--theme-background-alt);color:var(--theme-foreground-muted);font:14px var(--sans-serif);visibility:hidden;font-weight:500;width:272px;z-index:2;top:0;bottom:0;left:-272px;box-sizing:border-box;padding:0 .5rem 1rem;overflow-y:auto}#observablehq-sidebar ol,#observablehq-toc ol{list-style:none;margin:0;padding:0}#observablehq-sidebar>ol,#observablehq-sidebar>details,#observablehq-sidebar>section{position:relative;padding-bottom:.5rem;margin:.5rem 0;border-bottom:solid 1px var(--theme-foreground-faintest)}#observablehq-sidebar>ol:first-child{position:sticky;top:0;z-index:1;background:var(--theme-background-alt);font-size:16px;font-weight:700;padding-top:1rem;padding-left:.5rem;margin:0;margin-left:-.5rem;color:var(--theme-foreground)}#observablehq-sidebar>ol:last-child,#observablehq-sidebar>details:last-child,#observablehq-sidebar>section:last-child{border-bottom:none}#observablehq-sidebar summary{font-weight:700;color:var(--theme-foreground);cursor:default}#observablehq-sidebar summary::-webkit-details-marker,#observablehq-sidebar summary::marker{display:none}#observablehq-sidebar details summary:after{position:absolute;right:.5rem;width:1rem;height:1rem;background:var(--theme-foreground-muted);content:"";-webkit-mask:var(--theme-caret);mask:var(--theme-caret);transition:transform .25s ease;transform:rotate(-90deg);transform-origin:50% 50%}#observablehq-sidebar details summary:hover:after{color:var(--theme-foreground)}#observablehq-sidebar details[open] summary:after{transform:rotate(0)}#observablehq-sidebar-toggle{position:fixed;appearance:none;background:none;top:0;left:0;height:100%;width:2rem;display:flex;align-items:center;justify-content:center;cursor:e-resize;margin:0;color:var(--theme-foreground-muted);z-index:1}#observablehq-sidebar-close{position:absolute;top:1rem;right:0;width:2rem;height:2.2rem;display:flex;align-items:center;justify-content:center;color:var(--theme-foreground-muted);cursor:w-resize;z-index:2}#observablehq-sidebar-toggle:before,#observablehq-sidebar-close:before{content:"";width:1rem;height:1rem;background:currentColor;-webkit-mask:var(--theme-toggle);mask:var(--theme-toggle)}#observablehq-sidebar-close:before{transform:scaleX(-1)}#observablehq-sidebar summary,.observablehq-link a{display:flex;padding:.5rem 1rem .5rem 1.5rem;margin-left:-.5rem;align-items:center}#observablehq-sidebar details summary:hover,.observablehq-link-active a,.observablehq-link a:hover{background:var(--theme-background)}.observablehq-link a:hover{color:var(--theme-foreground-focus)}#observablehq-toc{display:none;position:fixed;color:var(--theme-foreground-muted);font:400 14px var(--sans-serif);z-index:1;top:0;right:0;bottom:0;overflow-y:auto}#observablehq-toc nav{width:192px;margin:2rem 0;padding:0 1rem;box-sizing:border-box;border-left:solid 1px var(--theme-foreground-faintest)}#observablehq-toc div{font-weight:700;color:var(--theme-foreground);margin-bottom:.5rem}.observablehq-secondary-link a{display:block;padding:.25rem 0}.observablehq-link:not(.observablehq-link-active) a[href]:not(:hover),.observablehq-secondary-link:not(.observablehq-secondary-link-active) a[href]:not(:hover){color:inherit}.observablehq-link-active,.observablehq-secondary-link-active{position:relative}.observablehq-link-active:before,.observablehq-secondary-link-highlight{content:"";position:absolute;width:3px;background:var(--theme-foreground-focus)}.observablehq-link-active:before{top:0;bottom:0;left:-.5rem}.observablehq-secondary-link-highlight{left:1px;top:2rem;height:0;transition:top .15s ease,height .15s ease}#observablehq-sidebar{transition:visibility .15s 0ms,left .15s 0ms ease}#observablehq-sidebar:focus-within,#observablehq-sidebar-toggle:checked~#observablehq-sidebar{left:0;visibility:initial;box-shadow:0 0 8px 4px #0000001a;transition:visibility 0ms 0ms,left .15s 0ms ease}#observablehq-sidebar-backdrop{display:none;position:fixed;inset:0;z-index:2}#observablehq-sidebar-backdrop:has(~#observablehq-sidebar:focus-within),#observablehq-sidebar-toggle:checked~#observablehq-sidebar-backdrop{display:initial}@media (prefers-color-scheme: dark){#observablehq-sidebar:focus-within,#observablehq-sidebar-toggle:checked~#observablehq-sidebar{box-shadow:0 0 8px 4px #00000080}}@media (min-width: calc(912px + 6rem)){#observablehq-sidebar{transition:none!important}#observablehq-sidebar-toggle:checked~#observablehq-sidebar-backdrop{display:none}#observablehq-sidebar-toggle:checked~#observablehq-sidebar,#observablehq-sidebar-toggle:indeterminate~#observablehq-sidebar{left:0;visibility:initial;box-shadow:none;border-right:solid 1px var(--theme-foreground-faintest)}#observablehq-sidebar-toggle:checked~#observablehq-center,#observablehq-sidebar-toggle:indeterminate~#observablehq-center{padding-left:calc(272px + 1rem);padding-right:1rem}}@media (min-width: calc(832px + 6rem)){#observablehq-toc~#observablehq-center{padding-right:calc(192px + 1rem)}#observablehq-toc{display:block}}@media (min-width: calc(912px + 6rem)){#observablehq-sidebar-toggle:checked~#observablehq-toc,#observablehq-sidebar-toggle:indeterminate~#observablehq-toc{display:none}}@media (min-width: calc(1104px + 6rem)){#observablehq-sidebar-toggle:checked~#observablehq-toc,#observablehq-sidebar-toggle:indeterminate~#observablehq-toc,#observablehq-toc{display:block}#observablehq-sidebar-toggle:checked~#observablehq-toc~#observablehq-center,#observablehq-sidebar-toggle:indeterminate~#observablehq-toc~#observablehq-center,#observablehq-toc~#observablehq-center{padding-right:calc(192px + 1rem)}}.observablehq-pre-container{position:relative;margin:1rem -1rem;max-width:960px}.observablehq-pre-container:after{position:absolute;top:0;right:0;height:21px;font:12px var(--sans-serif);color:var(--theme-foreground-muted);background:linear-gradient(to right,transparent,var(--theme-background-alt) 40%);padding:.5rem .5rem .5rem 1.5rem}.observablehq-pre-container[data-language]:after{content:attr(data-language)}.observablehq-pre-container pre{padding-right:4rem;margin:0;max-width:none}.observablehq-pre-copy{position:absolute;top:0;right:0;background:none;color:transparent;border:none;border-radius:4px;padding:0 8px;margin:4px;height:29px;cursor:pointer;z-index:1;display:flex;align-items:center}.observablehq-pre-copied:before{content:"Copied!";position:absolute;right:calc(100% + .25rem);background:linear-gradient(to right,transparent,var(--theme-background-alt) 10%);color:var(--theme-green);font:var(--font-small);padding:4px 8px 4px 16px;pointer-events:none;animation-name:observablehq-pre-copied;animation-duration:.25s;animation-direction:alternate;animation-iteration-count:2}@keyframes observablehq-pre-copied{0%{opacity:0;transform:translate(.5rem)}50%{opacity:1}to{transform:translate(0)}}.observablehq-pre-container[data-copy] .observablehq-pre-copy,.observablehq-pre-container:hover .observablehq-pre-copy,.observablehq-pre-container .observablehq-pre-copy:focus{background:var(--theme-background-alt);color:var(--theme-foreground-faint)}.observablehq-pre-container .observablehq-pre-copy:hover{color:var(--theme-foreground-muted)}.observablehq-pre-container .observablehq-pre-copy:active{color:var(--theme-foreground);background:var(--theme-foreground-faintest)}#observablehq-sidebar.observablehq-search-results>ol:not(:first-child),#observablehq-sidebar.observablehq-search-results>details,#observablehq-sidebar.observablehq-search-results>section{display:none}#observablehq-search{position:relative;padding:.5rem 0 0;display:flex;align-items:center}#observablehq-search input{padding:6px 4px 6px 2.2em;width:100%;border:none;border-radius:4px;background-color:var(--theme-background);font-size:13.3px;height:28px}#observablehq-search input::placeholder{color:var(--theme-foreground-faint)}#observablehq-search:before{position:absolute;left:.5rem;content:"";width:1rem;height:1rem;background:currentColor;-webkit-mask:var(--theme-magnifier);mask:var(--theme-magnifier);pointer-events:none}#observablehq-search:after{position:absolute;right:6px;content:attr(data-shortcut);pointer-events:none}#observablehq-search:focus-within:after{content:""}#observablehq-search-results{--relevance-width: 32px;position:absolute;overflow-y:auto;top:6.5rem;left:0;right:.5rem;bottom:0}#observablehq-search-results a span{max-width:184px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#observablehq-search-results div{text-align:right;font-size:10px;margin:.5em}#observablehq-search-results li{position:relative;display:flex;align-items:center}#observablehq-search-results a{flex-grow:1}#observablehq-search-results li:after,#observablehq-search-results a:after{content:"";width:var(--relevance-width);height:4px;position:absolute;right:.5em;border-radius:2px;background:var(--theme-foreground-muted)}#observablehq-search-results li.observablehq-link-active:after{background:var(--theme-foreground-focus)}#observablehq-search-results a:after{background:var(--theme-foreground-faintest)}#observablehq-search-results li[data-score="0"]:after{width:calc(var(--relevance-width) * .125)}#observablehq-search-results li[data-score="1"]:after{width:calc(var(--relevance-width) * .25)}#observablehq-search-results li[data-score="2"]:after{width:calc(var(--relevance-width) * .4375)}#observablehq-search-results li[data-score="3"]:after{width:calc(var(--relevance-width) * .625)}#observablehq-search-results li[data-score="4"]:after{width:calc(var(--relevance-width) * .8125)}@media print{#observablehq-center{padding-left:1em!important}#observablehq-sidebar,#observablehq-footer{display:none!important}}#observablehq-center{container-type:inline-size}.grid{margin:1rem 0;display:grid;gap:1rem;grid-auto-rows:1fr}.grid svg{overflow:visible}.grid figure{margin:0}.grid>*>p:first-child{margin-top:0}.grid>*>p:last-child{margin-bottom:0}@container (min-width: 640px){.grid-cols-2,.grid-cols-4{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-2 .grid-colspan-2,.grid-cols-2 .grid-colspan-3,.grid-cols-2 .grid-colspan-4,.grid-cols-4 .grid-colspan-2,.grid-cols-4 .grid-colspan-3,.grid-cols-4 .grid-colspan-4{grid-column:span 2}}@container (min-width: 720px){.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-3 .grid-colspan-2{grid-column:span 2}.grid-cols-3 .grid-colspan-3{grid-column:span 3}}@container (min-width: 1080px){.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-4 .grid-colspan-3{grid-column:span 3}.grid-cols-4 .grid-colspan-4{grid-column:span 4}}.grid-rowspan-2{grid-row:span 2}.grid-rowspan-3{grid-row:span 3}.grid-rowspan-4{grid-row:span 4}.note,.tip,.warning,.caution{border-left:solid 1px;border-radius:0 4px 4px 0;padding:1rem 2rem;margin:1rem 0;box-sizing:border-box;max-width:640px}.note:before,.tip:before,.warning:before,.caution:before{display:block;margin-bottom:1rem;font-weight:700}.note{border-left-color:var(--theme-foreground-fainter);background-color:var(--theme-background-alt)}.note:before{content:"Note";color:var(--theme-foreground-muted)}.tip{border-left-color:var(--theme-green);background-color:color-mix(in srgb,var(--theme-green),var(--theme-background) 90%)}.tip:before{content:"Tip";color:var(--theme-green)}.warning{border-left-color:var(--theme-yellow);background-color:color-mix(in srgb,var(--theme-yellow),var(--theme-background) 90%)}.warning:before{content:"Warning";color:var(--theme-yellow)}.caution{border-left-color:var(--theme-red);background-color:color-mix(in srgb,var(--theme-red),var(--theme-background) 90%)}.caution:before{content:"Caution";color:var(--theme-red)}.note[label]:before,.tip[label]:before,.warning[label]:before,.caution[label]:before{content:attr(label)}.note>:first-child,.tip>:first-child,.warning>:first-child,.caution>:first-child{margin-top:0}.note>:last-child,.tip>:last-child,.warning>:last-child,.caution>:last-child{margin-bottom:0}.card{background:var(--theme-background-alt);border:solid 1px var(--theme-foreground-faintest);border-radius:.75rem;padding:1rem;margin:1rem 0;font:14px var(--sans-serif)}.grid>.card,.card figure{margin:0}.card h2,.card h3{font-size:inherit}.card h2{font-weight:500;font-size:15px}.card h3{font-weight:400;color:var(--theme-foreground-muted)}.card h2~svg,.card h3~svg,.card h2~p,.card h3~p{margin-top:1rem}.observablehq--block:empty{margin:0}@keyframes observablehq-loading{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.observablehq-loading{font:var(--monospace-font);color:var(--theme-foreground-muted);display:inline-block;transform-origin:.32em 55%;animation-name:observablehq-loading;animation-timing-function:linear;animation-duration:1s;animation-iteration-count:infinite}.observablehq-loading:before{content:"\21bb"}.observablehq--block .observablehq-loading{display:block}.observablehq--block{margin:1rem 0}.observablehq--block .observablehq,.observablehq--block .observablehq--inspect{display:block}.observablehq--collapsed,.observablehq--expanded.observablehq--inspect a{cursor:pointer}.observablehq--caret{margin-right:4px;vertical-align:baseline}.observablehq--field{text-indent:-1rem;margin-left:1rem}.observablehq--inspect{font:var(--monospace-font);overflow-x:auto;white-space:pre}.observablehq--inspect.observablehq--import{white-space:normal}.observablehq--inspect::-webkit-scrollbar{display:none}.observablehq--error .observablehq--inspect{word-break:break-all;white-space:pre-wrap}.observablehq--string-expand{margin-left:6px;padding:2px 6px;border-radius:2px;font-size:80%;background:var(--theme-background-alt);cursor:pointer;vertical-align:middle}.observablehq--keyword,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:var(--syntax-keyword)}.observablehq--symbol,.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:var(--syntax-entity)}.observablehq--index,.observablehq--key,.hljs-attr,.hljs-attribute,.hljs-meta,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:var(--syntax-constant)}.observablehq--regexp,.observablehq--string,.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:var(--syntax-string)}.observablehq--null,.observablehq--undefined,.hljs-built_in,.hljs-literal,.hljs-symbol{color:var(--syntax-variable)}.observablehq--prototype-key,.observablehq--empty,.hljs-comment,.hljs-formula{color:var(--syntax-comment)}.observablehq--bigint,.observablehq--boolean,.observablehq--date,.observablehq--forbidden,.observablehq--number,.hljs-name,.hljs-number,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:var(--syntax-entity-tag)}.hljs-subst{color:var(--syntax-storage-modifier-import)}.hljs-section{color:var(--syntax-markup-heading);font-weight:700}.hljs-bullet{color:var(--syntax-markup-list)}.hljs-emphasis{color:var(--syntax-markup-italic);font-style:italic}.hljs-strong{color:var(--syntax-markup-bold);font-weight:700}.hljs-addition{color:var(--syntax-markup-inserted);background-color:var(--syntax-markup-inserted-background)}.hljs-deletion{color:var(--syntax-markup-deleted);background-color:var(--syntax-markup-deleted-background)}.observablehq--empty{font-style:oblique}.observablehq--error{color:var(--syntax-keyword)}.plot-d6a7b5{--plot-background: var(--theme-background)}p .plot-d6a7b5{display:inline-block}:root{--syntax-keyword: #d73a49;--syntax-entity: #6f42c1;--syntax-constant: #005cc5;--syntax-string: #032f62;--syntax-variable: #e36209;--syntax-comment: var(--theme-foreground-muted);--syntax-entity-tag: #22863a;--syntax-storage-modifier-import: #24292e;--syntax-markup-heading: #005cc5;--syntax-markup-list: #735c0f;--syntax-markup-italic: #24292e;--syntax-markup-bold: #24292e;--syntax-markup-inserted: #22863a;--syntax-markup-inserted-background: #f0fff4;--syntax-markup-deleted: #b31d28;--syntax-markup-deleted-background: #ffeef0}:root{--theme-background-b: color-mix(in srgb, var(--theme-foreground) 4%, var(--theme-background-a));--theme-background: var(--theme-background-a);--theme-background-alt: var(--theme-background-b);--theme-foreground-alt: color-mix(in srgb, var(--theme-foreground) 90%, var(--theme-background-a));--theme-foreground-muted: color-mix(in srgb, var(--theme-foreground) 60%, var(--theme-background-a));--theme-foreground-faint: color-mix(in srgb, var(--theme-foreground) 50%, var(--theme-background-a));--theme-foreground-fainter: color-mix(in srgb, var(--theme-foreground) 30%, var(--theme-background-a));--theme-foreground-faintest: color-mix(in srgb, var(--theme-foreground) 14%, var(--theme-background-a));color-scheme:light}:root{--theme-foreground: #1b1e23;--theme-foreground-focus: #3b5fc0;--theme-background-a: #ffffff}:root{--serif: "Atkinson Hyperlegible"}div.bg{background-image:url(../_file/horse.2d33a223.jpg)}div.dont-break-hashes{offset-path:url(#path)}@font-face{font-family:Atkinson Hyperlegible;src:url(https://fonts.gstatic.com/s/atkinsonhyperlegible/v11/9Bt23C1KxNDXMspQ1lPyU89-1h6ONRlW45G04pIoWQeCbA.woff2) format("woff2")} diff --git a/test/output/build/css-public/_observablehq/client.js b/test/output/build/css-public/_observablehq/client.js new file mode 100644 index 000000000..e69de29bb diff --git a/test/output/build/css-public/_observablehq/runtime.js b/test/output/build/css-public/_observablehq/runtime.js new file mode 100644 index 000000000..e69de29bb diff --git a/test/output/build/css-public/_observablehq/stdlib.js b/test/output/build/css-public/_observablehq/stdlib.js new file mode 100644 index 000000000..e69de29bb diff --git a/test/output/build/css-public/index.html b/test/output/build/css-public/index.html new file mode 100644 index 000000000..fc104aee8 --- /dev/null +++ b/test/output/build/css-public/index.html @@ -0,0 +1,34 @@ + + + +CSS assets + + + + + + + + + + +
+
+

CSS assets

+

Atkinson Hyperlegible font is named after Braille Institute founder, J. Robert Atkinson. What makes it different from traditional typography design is that it focuses on letterform distinction to increase character recognition, ultimately improving readability. We are making it free for anyone to use!

+
+
+
This image is set with CSS.
+
+
+ +
From 43ed43bffc55288bad4c83c69e43869708ce1013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philippe=20Rivi=C3=A8re?= Date: Mon, 20 May 2024 21:00:05 +0200 Subject: [PATCH 2/4] no side effects --- src/build.ts | 8 ++++---- src/preview.ts | 6 +++--- src/rollup.ts | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/build.ts b/src/build.ts index f10fa40de..d1d1bd429 100644 --- a/src/build.ts +++ b/src/build.ts @@ -125,11 +125,11 @@ export async function build( effects.output.write(`${faint("build")} ${specifier} ${faint("→")} `); if (specifier.startsWith("observablehq:theme-")) { const match = /^observablehq:theme-(?[\w-]+(,[\w-]+)*)?\.css$/.exec(specifier); - const contents = await bundleStyles({theme: match!.groups!.theme?.split(",") ?? [], minify: true}); + const {contents} = await bundleStyles({theme: match!.groups!.theme?.split(",") ?? [], minify: true}); await effects.writeFile(path, contents); } else { const clientPath = getClientPath(path.slice("/_observablehq/".length)); - const contents = await bundleStyles({path: clientPath, minify: true}); + const {contents} = await bundleStyles({path: clientPath, minify: true}); await effects.writeFile(`/_observablehq/${specifier.slice("observablehq:".length)}`, contents); } } else if (specifier.startsWith("npm:")) { @@ -140,7 +140,7 @@ export async function build( } else if (!/^\w+:/.test(specifier)) { // Uses a side effect to register file assets on custom stylesheets delayedStylesheets.add(specifier); - await bundleStyles({path: join(root, specifier), files}); + for (const file of (await bundleStyles({path: join(root, specifier)})).files) files.add(file); } } } @@ -176,7 +176,7 @@ export async function build( for (const specifier of delayedStylesheets) { const sourcePath = join(root, specifier); effects.output.write(`${faint("build")} ${sourcePath} ${faint("→")} `); - const contents = await bundleStyles({path: sourcePath, minify: true, aliases: plainaliases}); + const {contents} = await bundleStyles({path: sourcePath, minify: true, aliases: plainaliases}); const hash = createHash("sha256").update(contents).digest("hex").slice(0, 8); const ext = extname(specifier); const alias = `/${join("_import", dirname(specifier), `${basename(specifier, ext)}.${hash}${ext}`)}`; diff --git a/src/preview.ts b/src/preview.ts index 428869d8f..042a08dad 100644 --- a/src/preview.ts +++ b/src/preview.ts @@ -120,13 +120,13 @@ export class PreviewServer { } else if (pathname === "/_observablehq/minisearch.json") { end(req, res, await searchIndex(config), "application/json"); } else if ((match = /^\/_observablehq\/theme-(?[\w-]+(,[\w-]+)*)?\.css$/.exec(pathname))) { - end(req, res, await bundleStyles({theme: match.groups!.theme?.split(",") ?? []}), "text/css"); + end(req, res, (await bundleStyles({theme: match.groups!.theme?.split(",") ?? []})).contents, "text/css"); } else if (pathname.startsWith("/_observablehq/") && pathname.endsWith(".js")) { const path = getClientPath(pathname.slice("/_observablehq/".length)); end(req, res, await rollupClient(path, root, pathname), "text/javascript"); } else if (pathname.startsWith("/_observablehq/") && pathname.endsWith(".css")) { const path = getClientPath(pathname.slice("/_observablehq/".length)); - end(req, res, await bundleStyles({path}), "text/css"); + end(req, res, (await bundleStyles({path})).contents, "text/css"); } else if (pathname.startsWith("/_node/")) { send(req, pathname, {root: join(root, ".observablehq", "cache")}).pipe(res); } else if (pathname.startsWith("/_npm/")) { @@ -138,7 +138,7 @@ export class PreviewServer { try { if (pathname.endsWith(".css")) { await access(filepath, constants.R_OK); - end(req, res, await bundleStyles({path: filepath}), "text/css"); + end(req, res, (await bundleStyles({path: filepath})).contents, "text/css"); return; } else if (pathname.endsWith(".js")) { const input = await readFile(join(root, path), "utf-8"); diff --git a/src/rollup.ts b/src/rollup.ts index 2d97557f6..ff5253bb5 100644 --- a/src/rollup.ts +++ b/src/rollup.ts @@ -38,22 +38,21 @@ export async function bundleStyles({ minify = false, path, theme, - files, aliases }: { minify?: boolean; path?: string; theme?: string[]; - files?: Set; aliases?: Map; -}): Promise { +}): Promise<{contents: string; files: Set}> { + const files = new Set(); const assets = { name: "resolve CSS assets", setup(build: PluginBuild) { build.onResolve({filter: /^\w+:\/\//}, (args) => ({path: args.path, external: true})); build.onResolve({filter: /./}, (args) => { if (args.path.endsWith(".css") || args.path.match(/^[#.]/)) return; - if (files) files.add(args.path); // /!\ modifies files as a side effect + files.add(args.path); const path = join("..", aliases?.get(args.path) ?? join("_file", args.path)); return {path, external: true}; }); @@ -68,7 +67,8 @@ export async function bundleStyles({ alias: STYLE_MODULES }); const text = result.outputFiles[0].text; - return rewriteInputsNamespace(text); // TODO only for inputs + const contents = rewriteInputsNamespace(text); // TODO only for inputs + return {contents, files}; } export async function rollupClient( From bc8f05b7a23087d16f0b939a1bd1abcdf673d6ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philippe=20Rivi=C3=A8re?= Date: Mon, 20 May 2024 21:05:34 +0200 Subject: [PATCH 3/4] obsolete comment --- src/build.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/build.ts b/src/build.ts index d1d1bd429..fc45ed843 100644 --- a/src/build.ts +++ b/src/build.ts @@ -138,7 +138,6 @@ export async function build( const sourcePath = await populateNpmCache(root, path); // TODO effects await effects.copyFile(sourcePath, path); } else if (!/^\w+:/.test(specifier)) { - // Uses a side effect to register file assets on custom stylesheets delayedStylesheets.add(specifier); for (const file of (await bundleStyles({path: join(root, specifier)})).files) files.add(file); } From b77383315e7635f7dc63166a28b6e294ab7e6621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philippe=20Rivi=C3=A8re?= Date: Tue, 21 May 2024 16:02:41 +0200 Subject: [PATCH 4/4] pass a resolver to bundleStyles fix a bug where we would rewrite data: urls --- src/build.ts | 33 +++++++++++------ src/preview.ts | 18 ++++++++-- src/rollup.ts | 35 ++++++++----------- test/input/build/css-public/atkinson.css | 9 +++++ test/input/build/css-public/style.css | 11 +----- .../css-public/_import/style.538adc61.css | 1 + .../css-public/_import/style.a31bcaf4.css | 1 - test/output/build/css-public/index.html | 4 +-- 8 files changed, 65 insertions(+), 47 deletions(-) create mode 100644 test/input/build/css-public/atkinson.css create mode 100644 test/output/build/css-public/_import/style.538adc61.css delete mode 100644 test/output/build/css-public/_import/style.a31bcaf4.css diff --git a/src/build.ts b/src/build.ts index fc45ed843..97558cff7 100644 --- a/src/build.ts +++ b/src/build.ts @@ -92,7 +92,6 @@ export async function build( // For cache-breaking we rename most assets to include content hashes. const aliases = new Map(); - const plainaliases = new Map(); // Add the search bundle and data, if needed. if (config.search) { @@ -107,7 +106,7 @@ export async function build( // Generate the client bundles (JavaScript and styles). TODO Use a content // hash, or perhaps the Framework version number for built-in modules. - const delayedStylesheets = new Set(); + const localStylesheets = new Set(); if (addPublic) { for (const path of globalImports) { if (path.startsWith("/_observablehq/") && path.endsWith(".js")) { @@ -125,11 +124,11 @@ export async function build( effects.output.write(`${faint("build")} ${specifier} ${faint("→")} `); if (specifier.startsWith("observablehq:theme-")) { const match = /^observablehq:theme-(?[\w-]+(,[\w-]+)*)?\.css$/.exec(specifier); - const {contents} = await bundleStyles({theme: match!.groups!.theme?.split(",") ?? [], minify: true}); + const contents = await bundleStyles({theme: match!.groups!.theme?.split(",") ?? [], minify: true}); await effects.writeFile(path, contents); } else { const clientPath = getClientPath(path.slice("/_observablehq/".length)); - const {contents} = await bundleStyles({path: clientPath, minify: true}); + const contents = await bundleStyles({path: clientPath, minify: true}); await effects.writeFile(`/_observablehq/${specifier.slice("observablehq:".length)}`, contents); } } else if (specifier.startsWith("npm:")) { @@ -138,8 +137,16 @@ export async function build( const sourcePath = await populateNpmCache(root, path); // TODO effects await effects.copyFile(sourcePath, path); } else if (!/^\w+:/.test(specifier)) { - delayedStylesheets.add(specifier); - for (const file of (await bundleStyles({path: join(root, specifier)})).files) files.add(file); + localStylesheets.add(specifier); + await bundleStyles({ + path: join(root, specifier), + resolve(args) { + if (args.path.endsWith(".css") || args.path.match(/^[#?]/) || args.path.match(/^\w+:/)) return; + files.add(args.path); + loaders.resolveFilePath(args.path); + return {path: "(pending)", external: true}; + } + }); } } } @@ -166,16 +173,22 @@ export async function build( const ext = extname(file); const alias = `/${join("_file", dirname(file), `${basename(file, ext)}.${hash}${ext}`)}`; aliases.set(loaders.resolveFilePath(file), alias); - plainaliases.set(file, alias); await effects.writeFile(alias, contents); } - // Write delayed stylesheets + // Write local stylesheets. if (addPublic) { - for (const specifier of delayedStylesheets) { + for (const specifier of localStylesheets) { const sourcePath = join(root, specifier); effects.output.write(`${faint("build")} ${sourcePath} ${faint("→")} `); - const {contents} = await bundleStyles({path: sourcePath, minify: true, aliases: plainaliases}); + const contents = await bundleStyles({ + path: sourcePath, + minify: true, + resolve(args) { + if (args.path.endsWith(".css") || args.path.match(/^[#?]/) || args.path.match(/^\w+:/)) return; + return {path: join("..", aliases.get(loaders.resolveFilePath(args.path))!), external: true}; + } + }); const hash = createHash("sha256").update(contents).digest("hex").slice(0, 8); const ext = extname(specifier); const alias = `/${join("_import", dirname(specifier), `${basename(specifier, ext)}.${hash}${ext}`)}`; diff --git a/src/preview.ts b/src/preview.ts index 042a08dad..bc04346d1 100644 --- a/src/preview.ts +++ b/src/preview.ts @@ -120,13 +120,13 @@ export class PreviewServer { } else if (pathname === "/_observablehq/minisearch.json") { end(req, res, await searchIndex(config), "application/json"); } else if ((match = /^\/_observablehq\/theme-(?[\w-]+(,[\w-]+)*)?\.css$/.exec(pathname))) { - end(req, res, (await bundleStyles({theme: match.groups!.theme?.split(",") ?? []})).contents, "text/css"); + end(req, res, await bundleStyles({theme: match.groups!.theme?.split(",") ?? []}), "text/css"); } else if (pathname.startsWith("/_observablehq/") && pathname.endsWith(".js")) { const path = getClientPath(pathname.slice("/_observablehq/".length)); end(req, res, await rollupClient(path, root, pathname), "text/javascript"); } else if (pathname.startsWith("/_observablehq/") && pathname.endsWith(".css")) { const path = getClientPath(pathname.slice("/_observablehq/".length)); - end(req, res, (await bundleStyles({path})).contents, "text/css"); + end(req, res, await bundleStyles({path}), "text/css"); } else if (pathname.startsWith("/_node/")) { send(req, pathname, {root: join(root, ".observablehq", "cache")}).pipe(res); } else if (pathname.startsWith("/_npm/")) { @@ -138,7 +138,19 @@ export class PreviewServer { try { if (pathname.endsWith(".css")) { await access(filepath, constants.R_OK); - end(req, res, (await bundleStyles({path: filepath})).contents, "text/css"); + end( + req, + res, + await bundleStyles({ + path: filepath, + resolve(args) { + if (args.path.endsWith(".css") || args.path.match(/^[#?]/) || args.path.match(/^\w+:/)) return; + const path = loaders.resolveFilePath(args.path); + return {path, external: true}; + } + }), + "text/css" + ); return; } else if (pathname.endsWith(".js")) { const input = await readFile(join(root, path), "utf-8"); diff --git a/src/rollup.ts b/src/rollup.ts index ff5253bb5..8bf08a2a6 100644 --- a/src/rollup.ts +++ b/src/rollup.ts @@ -1,8 +1,7 @@ -import {extname, join} from "node:path/posix"; +import {extname} from "node:path/posix"; import {nodeResolve} from "@rollup/plugin-node-resolve"; import type {CallExpression} from "acorn"; import {simple} from "acorn-walk"; -import type {PluginBuild} from "esbuild"; import {build} from "esbuild"; import type {AstNode, OutputChunk, Plugin, ResolveIdResult} from "rollup"; import {rollup} from "rollup"; @@ -38,37 +37,31 @@ export async function bundleStyles({ minify = false, path, theme, - aliases + resolve }: { minify?: boolean; path?: string; theme?: string[]; - aliases?: Map; -}): Promise<{contents: string; files: Set}> { - const files = new Set(); - const assets = { - name: "resolve CSS assets", - setup(build: PluginBuild) { - build.onResolve({filter: /^\w+:\/\//}, (args) => ({path: args.path, external: true})); - build.onResolve({filter: /./}, (args) => { - if (args.path.endsWith(".css") || args.path.match(/^[#.]/)) return; - files.add(args.path); - const path = join("..", aliases?.get(args.path) ?? join("_file", args.path)); - return {path, external: true}; - }); - } - }; + resolve?: ({path}: {path: string}) => {path: string; external: true} | undefined; +}): Promise { const result = await build({ bundle: true, ...(path ? {entryPoints: [path]} : {stdin: {contents: renderTheme(theme!), loader: "css"}}), write: false, - plugins: [assets], + plugins: [ + { + name: "resolve CSS assets", + setup(build) { + build.onResolve({filter: /^\w+:\/\//}, ({path}) => ({path, external: true})); + if (resolve) build.onResolve({filter: /./}, resolve); + } + } + ], minify, alias: STYLE_MODULES }); const text = result.outputFiles[0].text; - const contents = rewriteInputsNamespace(text); // TODO only for inputs - return {contents, files}; + return rewriteInputsNamespace(text); // TODO only for inputs } export async function rollupClient( diff --git a/test/input/build/css-public/atkinson.css b/test/input/build/css-public/atkinson.css new file mode 100644 index 000000000..beb03f1fa --- /dev/null +++ b/test/input/build/css-public/atkinson.css @@ -0,0 +1,9 @@ +@font-face { + font-family: "Atkinson Hyperlegible"; + src: url(https://fonts.gstatic.com/s/atkinsonhyperlegible/v11/9Bt23C1KxNDXMspQ1lPyU89-1h6ONRlW45G04pIoWQeCbA.woff2) + format("woff2"); +} + +:root { + --serif: "Atkinson Hyperlegible"; +} diff --git a/test/input/build/css-public/style.css b/test/input/build/css-public/style.css index e903661c3..66596b33f 100644 --- a/test/input/build/css-public/style.css +++ b/test/input/build/css-public/style.css @@ -1,9 +1,6 @@ @import url("observablehq:default.css"); @import url("observablehq:theme-air.css"); - -:root { - --serif: "Atkinson Hyperlegible"; -} +@import url("atkinson.css"); div.bg { background-image: url("horse.jpg"); @@ -12,9 +9,3 @@ div.bg { div.dont-break-hashes { offset-path: url(#path); } - -@font-face { - font-family: "Atkinson Hyperlegible"; - src: url(https://fonts.gstatic.com/s/atkinsonhyperlegible/v11/9Bt23C1KxNDXMspQ1lPyU89-1h6ONRlW45G04pIoWQeCbA.woff2) - format("woff2"); -} diff --git a/test/output/build/css-public/_import/style.538adc61.css b/test/output/build/css-public/_import/style.538adc61.css new file mode 100644 index 000000000..bc063fdf3 --- /dev/null +++ b/test/output/build/css-public/_import/style.538adc61.css @@ -0,0 +1 @@ +:root{--monospace: Menlo, Consolas, monospace;--monospace-font: 14px/1.5 var(--monospace);--serif: "Source Serif Pro", "Iowan Old Style", "Apple Garamond", "Palatino Linotype", "Times New Roman", "Droid Serif", Times, serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--sans-serif: -apple-system, BlinkMacSystemFont, "avenir next", avenir, helvetica, "helvetica neue", ubuntu, roboto, noto, "segoe ui", arial, sans-serif;--theme-blue: #4269d0;--theme-green: #3ca951;--theme-red: #ff725c;--theme-yellow: #efb118}html{-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--theme-background);color:var(--theme-foreground)}body{font:17px/1.5 var(--serif);margin:0}a[href]{color:var(--theme-foreground-focus)}h1,h2,h3,h4,h5,h6{color:var(--theme-foreground-alt);font-weight:700;line-height:1.15;margin-top:0;margin-bottom:.25rem;scroll-margin-top:1rem;text-wrap:balance}h2+p,h3+p,h4+p,h2+table,h3+table,h4+table{margin-top:0}h1+h2{color:var(--theme-foreground);font-size:20px;font-style:italic;font-weight:400;margin-bottom:1rem}a[href]{text-decoration:none}a[href]:hover,a[href]:focus{text-decoration:underline}h1 code,h2 code,h3 code,h4 code,h5 code,h6 code{font-size:90%}pre{line-height:1.5}pre,code,tt{font-family:var(--monospace);font-size:14px}img{max-width:calc(100vw - 28px)}p,table,figure,figcaption,h1,h2,h3,h4,h5,h6,.katex-display{max-width:640px}blockquote,ol,ul{max-width:600px}blockquote{margin:1rem 1.5rem}ul ol{padding-left:28px}hr{height:1px;margin:1rem 0;padding:1rem 0;border:none;background:no-repeat center/100% 1px linear-gradient(to right,var(--theme-foreground-faintest),var(--theme-foreground-faintest))}pre{background-color:var(--theme-background-alt);border-radius:4px;margin:1rem -1rem;max-width:960px;min-height:1.5em;padding:.5rem 1rem;overflow-x:auto;box-sizing:border-box}input:not([type]),input[type=email],input[type=number],input[type=password],input[type=range],input[type=search],input[type=tel],input[type=text],input[type=url]{width:240px}input,canvas,button{vertical-align:middle}button,input,textarea{accent-color:var(--theme-blue)}table{width:100%;border-collapse:collapse;font:13px/1.2 var(--sans-serif)}table pre,table code,table tt{font-size:inherit;line-height:inherit}th>pre:only-child,td>pre:only-child{margin:0;padding:0}th{color:var(--theme-foreground);text-align:left;vertical-align:bottom}td{color:var(--theme-foreground-alt);vertical-align:top}th,td{padding:3px 6.5px 3px 0}th:last-child,td:last-child{padding-right:0}tr:not(:last-child){border-bottom:solid 1px var(--theme-foreground-faintest)}thead tr{border-bottom:solid 1px var(--theme-foreground-fainter)}figure,table{margin:1rem 0}figure img{max-width:100%}figure>h2,figure>h3{font-family:var(--sans-serif)}figure>h2{font-size:20px}figure>h3{font-size:16px;font-weight:400}figcaption{font:small var(--sans-serif);color:var(--theme-foreground-muted)}a[href].observablehq-header-anchor{color:inherit}:root{--font-big: 700 32px/1 var(--sans-serif);--font-small: 14px var(--sans-serif)}.big{font:var(--font-big)}.small{font:var(--font-small)}.red{color:var(--theme-red)}.yellow{color:var(--theme-yellow)}.green{color:var(--theme-green)}.blue{color:var(--theme-blue)}.muted{color:var(--theme-foreground-muted)}.observablehq--draft>h1:first-of-type:after{content:" [DRAFT]";color:var(--theme-foreground-muted)}:root{--theme-caret: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='M5 7L8.125 9.5L11.25 7' stroke='black' stroke-width='1.5' stroke-linecap='round' fill='none'/%3E%3C/svg%3E");--theme-toggle: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='m10.5,11 2.5-3-2.5-3 M6,8h7' fill='none' stroke='black' stroke-width='2'/%3E%3Crect x='2' y='2' fill='currentColor' height='12' rx='0.5' width='2'/%3E%3C/svg%3E");--theme-magnifier: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath stroke='currentColor' stroke-width='2' fill='none' d='M15,15L10.5,10.5a3,3 0 1,0 -6 -6a3,3 0 1,0 6 6'%3E%3C/path%3E%3C/svg%3E")}#observablehq-main,#observablehq-header,#observablehq-footer{margin:1rem auto;max-width:1152px}#observablehq-main{min-height:calc(100vh - 20rem);position:relative;z-index:0}#observablehq-footer{display:block;margin-top:10rem;font:12px var(--sans-serif);color:var(--theme-foreground-faint)}#observablehq-footer nav{display:grid;max-width:640px;grid-template-columns:1fr 1fr;column-gap:1rem;margin-bottom:1rem}#observablehq-footer nav a{display:flex;flex-direction:column;border:1px solid var(--theme-foreground-fainter);border-radius:8px;padding:1rem;line-height:1rem;text-decoration:none}#observablehq-footer nav a span{font-size:14px}#observablehq-footer nav a:hover span{text-decoration:underline}#observablehq-footer nav a:hover{border-color:var(--theme-foreground-focus)}#observablehq-footer nav a[rel=prev]{grid-column:1;align-items:start}#observablehq-footer nav a[rel=next]{grid-column:2;align-items:end}#observablehq-footer nav a:before{color:var(--theme-foreground-faint)}#observablehq-footer nav a[rel=prev]:before{content:"Previous page"}#observablehq-footer nav a[rel=next]:before{content:"Next page"}#observablehq-center{margin:1rem 2rem}#observablehq-sidebar{position:fixed;background:var(--theme-background-alt);color:var(--theme-foreground-muted);font:14px var(--sans-serif);visibility:hidden;font-weight:500;width:272px;z-index:2;top:0;bottom:0;left:-272px;box-sizing:border-box;padding:0 .5rem 1rem;overflow-y:auto}#observablehq-sidebar ol,#observablehq-toc ol{list-style:none;margin:0;padding:0}#observablehq-sidebar>ol,#observablehq-sidebar>details,#observablehq-sidebar>section{position:relative;padding-bottom:.5rem;margin:.5rem 0;border-bottom:solid 1px var(--theme-foreground-faintest)}#observablehq-sidebar>ol:first-child{position:sticky;top:0;z-index:1;background:var(--theme-background-alt);font-size:16px;font-weight:700;padding-top:1rem;padding-left:.5rem;margin:0;margin-left:-.5rem;color:var(--theme-foreground)}#observablehq-sidebar>ol:last-child,#observablehq-sidebar>details:last-child,#observablehq-sidebar>section:last-child{border-bottom:none}#observablehq-sidebar summary{font-weight:700;color:var(--theme-foreground);cursor:default}#observablehq-sidebar summary::-webkit-details-marker,#observablehq-sidebar summary::marker{display:none}#observablehq-sidebar details summary:after{position:absolute;right:.5rem;width:1rem;height:1rem;background:var(--theme-foreground-muted);content:"";-webkit-mask:var(--theme-caret);mask:var(--theme-caret);transition:transform .25s ease;transform:rotate(-90deg);transform-origin:50% 50%}#observablehq-sidebar details summary:hover:after{color:var(--theme-foreground)}#observablehq-sidebar details[open] summary:after{transform:rotate(0)}#observablehq-sidebar-toggle{position:fixed;appearance:none;background:none;top:0;left:0;height:100%;width:2rem;display:flex;align-items:center;justify-content:center;cursor:e-resize;margin:0;color:var(--theme-foreground-muted);z-index:1}#observablehq-sidebar-close{position:absolute;top:1rem;right:0;width:2rem;height:2.2rem;display:flex;align-items:center;justify-content:center;color:var(--theme-foreground-muted);cursor:w-resize;z-index:2}#observablehq-sidebar-toggle:before,#observablehq-sidebar-close:before{content:"";width:1rem;height:1rem;background:currentColor;-webkit-mask:var(--theme-toggle);mask:var(--theme-toggle)}#observablehq-sidebar-close:before{transform:scaleX(-1)}#observablehq-sidebar summary,.observablehq-link a{display:flex;padding:.5rem 1rem .5rem 1.5rem;margin-left:-.5rem;align-items:center}#observablehq-sidebar details summary:hover,.observablehq-link-active a,.observablehq-link a:hover{background:var(--theme-background)}.observablehq-link a:hover{color:var(--theme-foreground-focus)}#observablehq-toc{display:none;position:fixed;color:var(--theme-foreground-muted);font:400 14px var(--sans-serif);z-index:1;top:0;right:0;bottom:0;overflow-y:auto}#observablehq-toc nav{width:192px;margin:2rem 0;padding:0 1rem;box-sizing:border-box;border-left:solid 1px var(--theme-foreground-faintest)}#observablehq-toc div{font-weight:700;color:var(--theme-foreground);margin-bottom:.5rem}.observablehq-secondary-link a{display:block;padding:.25rem 0}.observablehq-link:not(.observablehq-link-active) a[href]:not(:hover),.observablehq-secondary-link:not(.observablehq-secondary-link-active) a[href]:not(:hover){color:inherit}.observablehq-link-active,.observablehq-secondary-link-active{position:relative}.observablehq-link-active:before,.observablehq-secondary-link-highlight{content:"";position:absolute;width:3px;background:var(--theme-foreground-focus)}.observablehq-link-active:before{top:0;bottom:0;left:-.5rem}.observablehq-secondary-link-highlight{left:1px;top:2rem;height:0;transition:top .15s ease,height .15s ease}#observablehq-sidebar{transition:visibility .15s 0ms,left .15s 0ms ease}#observablehq-sidebar:focus-within,#observablehq-sidebar-toggle:checked~#observablehq-sidebar{left:0;visibility:initial;box-shadow:0 0 8px 4px #0000001a;transition:visibility 0ms 0ms,left .15s 0ms ease}#observablehq-sidebar-backdrop{display:none;position:fixed;inset:0;z-index:2}#observablehq-sidebar-backdrop:has(~#observablehq-sidebar:focus-within),#observablehq-sidebar-toggle:checked~#observablehq-sidebar-backdrop{display:initial}@media (prefers-color-scheme: dark){#observablehq-sidebar:focus-within,#observablehq-sidebar-toggle:checked~#observablehq-sidebar{box-shadow:0 0 8px 4px #00000080}}@media (min-width: calc(912px + 6rem)){#observablehq-sidebar{transition:none!important}#observablehq-sidebar-toggle:checked~#observablehq-sidebar-backdrop{display:none}#observablehq-sidebar-toggle:checked~#observablehq-sidebar,#observablehq-sidebar-toggle:indeterminate~#observablehq-sidebar{left:0;visibility:initial;box-shadow:none;border-right:solid 1px var(--theme-foreground-faintest)}#observablehq-sidebar-toggle:checked~#observablehq-center,#observablehq-sidebar-toggle:indeterminate~#observablehq-center{padding-left:calc(272px + 1rem);padding-right:1rem}}@media (min-width: calc(832px + 6rem)){#observablehq-toc~#observablehq-center{padding-right:calc(192px + 1rem)}#observablehq-toc{display:block}}@media (min-width: calc(912px + 6rem)){#observablehq-sidebar-toggle:checked~#observablehq-toc,#observablehq-sidebar-toggle:indeterminate~#observablehq-toc{display:none}}@media (min-width: calc(1104px + 6rem)){#observablehq-sidebar-toggle:checked~#observablehq-toc,#observablehq-sidebar-toggle:indeterminate~#observablehq-toc,#observablehq-toc{display:block}#observablehq-sidebar-toggle:checked~#observablehq-toc~#observablehq-center,#observablehq-sidebar-toggle:indeterminate~#observablehq-toc~#observablehq-center,#observablehq-toc~#observablehq-center{padding-right:calc(192px + 1rem)}}.observablehq-pre-container{position:relative;margin:1rem -1rem;max-width:960px}.observablehq-pre-container:after{position:absolute;top:0;right:0;height:21px;font:12px var(--sans-serif);color:var(--theme-foreground-muted);background:linear-gradient(to right,transparent,var(--theme-background-alt) 40%);padding:.5rem .5rem .5rem 1.5rem}.observablehq-pre-container[data-language]:after{content:attr(data-language)}.observablehq-pre-container pre{padding-right:4rem;margin:0;max-width:none}.observablehq-pre-copy{position:absolute;top:0;right:0;background:none;color:transparent;border:none;border-radius:4px;padding:0 8px;margin:4px;height:29px;cursor:pointer;z-index:1;display:flex;align-items:center}.observablehq-pre-copied:before{content:"Copied!";position:absolute;right:calc(100% + .25rem);background:linear-gradient(to right,transparent,var(--theme-background-alt) 10%);color:var(--theme-green);font:var(--font-small);padding:4px 8px 4px 16px;pointer-events:none;animation-name:observablehq-pre-copied;animation-duration:.25s;animation-direction:alternate;animation-iteration-count:2}@keyframes observablehq-pre-copied{0%{opacity:0;transform:translate(.5rem)}50%{opacity:1}to{transform:translate(0)}}.observablehq-pre-container[data-copy] .observablehq-pre-copy,.observablehq-pre-container:hover .observablehq-pre-copy,.observablehq-pre-container .observablehq-pre-copy:focus{background:var(--theme-background-alt);color:var(--theme-foreground-faint)}.observablehq-pre-container .observablehq-pre-copy:hover{color:var(--theme-foreground-muted)}.observablehq-pre-container .observablehq-pre-copy:active{color:var(--theme-foreground);background:var(--theme-foreground-faintest)}#observablehq-sidebar.observablehq-search-results>ol:not(:first-child),#observablehq-sidebar.observablehq-search-results>details,#observablehq-sidebar.observablehq-search-results>section{display:none}#observablehq-search{position:relative;padding:.5rem 0 0;display:flex;align-items:center}#observablehq-search input{padding:6px 4px 6px 2.2em;width:100%;border:none;border-radius:4px;background-color:var(--theme-background);font-size:13.3px;height:28px}#observablehq-search input::placeholder{color:var(--theme-foreground-faint)}#observablehq-search:before{position:absolute;left:.5rem;content:"";width:1rem;height:1rem;background:currentColor;-webkit-mask:var(--theme-magnifier);mask:var(--theme-magnifier);pointer-events:none}#observablehq-search:after{position:absolute;right:6px;content:attr(data-shortcut);pointer-events:none}#observablehq-search:focus-within:after{content:""}#observablehq-search-results{--relevance-width: 32px;position:absolute;overflow-y:auto;top:6.5rem;left:0;right:.5rem;bottom:0}#observablehq-search-results a span{max-width:184px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#observablehq-search-results div{text-align:right;font-size:10px;margin:.5em}#observablehq-search-results li{position:relative;display:flex;align-items:center}#observablehq-search-results a{flex-grow:1}#observablehq-search-results li:after,#observablehq-search-results a:after{content:"";width:var(--relevance-width);height:4px;position:absolute;right:.5em;border-radius:2px;background:var(--theme-foreground-muted)}#observablehq-search-results li.observablehq-link-active:after{background:var(--theme-foreground-focus)}#observablehq-search-results a:after{background:var(--theme-foreground-faintest)}#observablehq-search-results li[data-score="0"]:after{width:calc(var(--relevance-width) * .125)}#observablehq-search-results li[data-score="1"]:after{width:calc(var(--relevance-width) * .25)}#observablehq-search-results li[data-score="2"]:after{width:calc(var(--relevance-width) * .4375)}#observablehq-search-results li[data-score="3"]:after{width:calc(var(--relevance-width) * .625)}#observablehq-search-results li[data-score="4"]:after{width:calc(var(--relevance-width) * .8125)}@media print{#observablehq-center{padding-left:1em!important}#observablehq-sidebar,#observablehq-footer{display:none!important}}#observablehq-center{container-type:inline-size}.grid{margin:1rem 0;display:grid;gap:1rem;grid-auto-rows:1fr}.grid svg{overflow:visible}.grid figure{margin:0}.grid>*>p:first-child{margin-top:0}.grid>*>p:last-child{margin-bottom:0}@container (min-width: 640px){.grid-cols-2,.grid-cols-4{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-2 .grid-colspan-2,.grid-cols-2 .grid-colspan-3,.grid-cols-2 .grid-colspan-4,.grid-cols-4 .grid-colspan-2,.grid-cols-4 .grid-colspan-3,.grid-cols-4 .grid-colspan-4{grid-column:span 2}}@container (min-width: 720px){.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-3 .grid-colspan-2{grid-column:span 2}.grid-cols-3 .grid-colspan-3{grid-column:span 3}}@container (min-width: 1080px){.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-4 .grid-colspan-3{grid-column:span 3}.grid-cols-4 .grid-colspan-4{grid-column:span 4}}.grid-rowspan-2{grid-row:span 2}.grid-rowspan-3{grid-row:span 3}.grid-rowspan-4{grid-row:span 4}.note,.tip,.warning,.caution{border-left:solid 1px;border-radius:0 4px 4px 0;padding:1rem 2rem;margin:1rem 0;box-sizing:border-box;max-width:640px}.note:before,.tip:before,.warning:before,.caution:before{display:block;margin-bottom:1rem;font-weight:700}.note{border-left-color:var(--theme-foreground-fainter);background-color:var(--theme-background-alt)}.note:before{content:"Note";color:var(--theme-foreground-muted)}.tip{border-left-color:var(--theme-green);background-color:color-mix(in srgb,var(--theme-green),var(--theme-background) 90%)}.tip:before{content:"Tip";color:var(--theme-green)}.warning{border-left-color:var(--theme-yellow);background-color:color-mix(in srgb,var(--theme-yellow),var(--theme-background) 90%)}.warning:before{content:"Warning";color:var(--theme-yellow)}.caution{border-left-color:var(--theme-red);background-color:color-mix(in srgb,var(--theme-red),var(--theme-background) 90%)}.caution:before{content:"Caution";color:var(--theme-red)}.note[label]:before,.tip[label]:before,.warning[label]:before,.caution[label]:before{content:attr(label)}.note>:first-child,.tip>:first-child,.warning>:first-child,.caution>:first-child{margin-top:0}.note>:last-child,.tip>:last-child,.warning>:last-child,.caution>:last-child{margin-bottom:0}.card{background:var(--theme-background-alt);border:solid 1px var(--theme-foreground-faintest);border-radius:.75rem;padding:1rem;margin:1rem 0;font:14px var(--sans-serif)}.grid>.card,.card figure{margin:0}.card h2,.card h3{font-size:inherit}.card h2{font-weight:500;font-size:15px}.card h3{font-weight:400;color:var(--theme-foreground-muted)}.card h2~svg,.card h3~svg,.card h2~p,.card h3~p{margin-top:1rem}.observablehq--block:empty{margin:0}@keyframes observablehq-loading{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.observablehq-loading{font:var(--monospace-font);color:var(--theme-foreground-muted);display:inline-block;transform-origin:.32em 55%;animation-name:observablehq-loading;animation-timing-function:linear;animation-duration:1s;animation-iteration-count:infinite}.observablehq-loading:before{content:"\21bb"}.observablehq--block .observablehq-loading{display:block}.observablehq--block{margin:1rem 0}.observablehq--block .observablehq,.observablehq--block .observablehq--inspect{display:block}.observablehq--collapsed,.observablehq--expanded.observablehq--inspect a{cursor:pointer}.observablehq--caret{margin-right:4px;vertical-align:baseline}.observablehq--field{text-indent:-1rem;margin-left:1rem}.observablehq--inspect{font:var(--monospace-font);overflow-x:auto;white-space:pre}.observablehq--inspect.observablehq--import{white-space:normal}.observablehq--inspect::-webkit-scrollbar{display:none}.observablehq--error .observablehq--inspect{word-break:break-all;white-space:pre-wrap}.observablehq--string-expand{margin-left:6px;padding:2px 6px;border-radius:2px;font-size:80%;background:var(--theme-background-alt);cursor:pointer;vertical-align:middle}.observablehq--keyword,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:var(--syntax-keyword)}.observablehq--symbol,.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:var(--syntax-entity)}.observablehq--index,.observablehq--key,.hljs-attr,.hljs-attribute,.hljs-meta,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:var(--syntax-constant)}.observablehq--regexp,.observablehq--string,.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:var(--syntax-string)}.observablehq--null,.observablehq--undefined,.hljs-built_in,.hljs-literal,.hljs-symbol{color:var(--syntax-variable)}.observablehq--prototype-key,.observablehq--empty,.hljs-comment,.hljs-formula{color:var(--syntax-comment)}.observablehq--bigint,.observablehq--boolean,.observablehq--date,.observablehq--forbidden,.observablehq--number,.hljs-name,.hljs-number,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:var(--syntax-entity-tag)}.hljs-subst{color:var(--syntax-storage-modifier-import)}.hljs-section{color:var(--syntax-markup-heading);font-weight:700}.hljs-bullet{color:var(--syntax-markup-list)}.hljs-emphasis{color:var(--syntax-markup-italic);font-style:italic}.hljs-strong{color:var(--syntax-markup-bold);font-weight:700}.hljs-addition{color:var(--syntax-markup-inserted);background-color:var(--syntax-markup-inserted-background)}.hljs-deletion{color:var(--syntax-markup-deleted);background-color:var(--syntax-markup-deleted-background)}.observablehq--empty{font-style:oblique}.observablehq--error{color:var(--syntax-keyword)}.plot-d6a7b5{--plot-background: var(--theme-background)}p .plot-d6a7b5{display:inline-block}:root{--syntax-keyword: #d73a49;--syntax-entity: #6f42c1;--syntax-constant: #005cc5;--syntax-string: #032f62;--syntax-variable: #e36209;--syntax-comment: var(--theme-foreground-muted);--syntax-entity-tag: #22863a;--syntax-storage-modifier-import: #24292e;--syntax-markup-heading: #005cc5;--syntax-markup-list: #735c0f;--syntax-markup-italic: #24292e;--syntax-markup-bold: #24292e;--syntax-markup-inserted: #22863a;--syntax-markup-inserted-background: #f0fff4;--syntax-markup-deleted: #b31d28;--syntax-markup-deleted-background: #ffeef0}:root{--theme-background-b: color-mix(in srgb, var(--theme-foreground) 4%, var(--theme-background-a));--theme-background: var(--theme-background-a);--theme-background-alt: var(--theme-background-b);--theme-foreground-alt: color-mix(in srgb, var(--theme-foreground) 90%, var(--theme-background-a));--theme-foreground-muted: color-mix(in srgb, var(--theme-foreground) 60%, var(--theme-background-a));--theme-foreground-faint: color-mix(in srgb, var(--theme-foreground) 50%, var(--theme-background-a));--theme-foreground-fainter: color-mix(in srgb, var(--theme-foreground) 30%, var(--theme-background-a));--theme-foreground-faintest: color-mix(in srgb, var(--theme-foreground) 14%, var(--theme-background-a));color-scheme:light}:root{--theme-foreground: #1b1e23;--theme-foreground-focus: #3b5fc0;--theme-background-a: #ffffff}@font-face{font-family:Atkinson Hyperlegible;src:url(https://fonts.gstatic.com/s/atkinsonhyperlegible/v11/9Bt23C1KxNDXMspQ1lPyU89-1h6ONRlW45G04pIoWQeCbA.woff2) format("woff2")}:root{--serif: "Atkinson Hyperlegible"}div.bg{background-image:url(../_file/horse.2d33a223.jpg)}div.dont-break-hashes{offset-path:url(#path)} diff --git a/test/output/build/css-public/_import/style.a31bcaf4.css b/test/output/build/css-public/_import/style.a31bcaf4.css deleted file mode 100644 index d843ac605..000000000 --- a/test/output/build/css-public/_import/style.a31bcaf4.css +++ /dev/null @@ -1 +0,0 @@ -:root{--monospace: Menlo, Consolas, monospace;--monospace-font: 14px/1.5 var(--monospace);--serif: "Source Serif Pro", "Iowan Old Style", "Apple Garamond", "Palatino Linotype", "Times New Roman", "Droid Serif", Times, serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--sans-serif: -apple-system, BlinkMacSystemFont, "avenir next", avenir, helvetica, "helvetica neue", ubuntu, roboto, noto, "segoe ui", arial, sans-serif;--theme-blue: #4269d0;--theme-green: #3ca951;--theme-red: #ff725c;--theme-yellow: #efb118}html{-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--theme-background);color:var(--theme-foreground)}body{font:17px/1.5 var(--serif);margin:0}a[href]{color:var(--theme-foreground-focus)}h1,h2,h3,h4,h5,h6{color:var(--theme-foreground-alt);font-weight:700;line-height:1.15;margin-top:0;margin-bottom:.25rem;scroll-margin-top:1rem;text-wrap:balance}h2+p,h3+p,h4+p,h2+table,h3+table,h4+table{margin-top:0}h1+h2{color:var(--theme-foreground);font-size:20px;font-style:italic;font-weight:400;margin-bottom:1rem}a[href]{text-decoration:none}a[href]:hover,a[href]:focus{text-decoration:underline}h1 code,h2 code,h3 code,h4 code,h5 code,h6 code{font-size:90%}pre{line-height:1.5}pre,code,tt{font-family:var(--monospace);font-size:14px}img{max-width:calc(100vw - 28px)}p,table,figure,figcaption,h1,h2,h3,h4,h5,h6,.katex-display{max-width:640px}blockquote,ol,ul{max-width:600px}blockquote{margin:1rem 1.5rem}ul ol{padding-left:28px}hr{height:1px;margin:1rem 0;padding:1rem 0;border:none;background:no-repeat center/100% 1px linear-gradient(to right,var(--theme-foreground-faintest),var(--theme-foreground-faintest))}pre{background-color:var(--theme-background-alt);border-radius:4px;margin:1rem -1rem;max-width:960px;min-height:1.5em;padding:.5rem 1rem;overflow-x:auto;box-sizing:border-box}input:not([type]),input[type=email],input[type=number],input[type=password],input[type=range],input[type=search],input[type=tel],input[type=text],input[type=url]{width:240px}input,canvas,button{vertical-align:middle}button,input,textarea{accent-color:var(--theme-blue)}table{width:100%;border-collapse:collapse;font:13px/1.2 var(--sans-serif)}table pre,table code,table tt{font-size:inherit;line-height:inherit}th>pre:only-child,td>pre:only-child{margin:0;padding:0}th{color:var(--theme-foreground);text-align:left;vertical-align:bottom}td{color:var(--theme-foreground-alt);vertical-align:top}th,td{padding:3px 6.5px 3px 0}th:last-child,td:last-child{padding-right:0}tr:not(:last-child){border-bottom:solid 1px var(--theme-foreground-faintest)}thead tr{border-bottom:solid 1px var(--theme-foreground-fainter)}figure,table{margin:1rem 0}figure img{max-width:100%}figure>h2,figure>h3{font-family:var(--sans-serif)}figure>h2{font-size:20px}figure>h3{font-size:16px;font-weight:400}figcaption{font:small var(--sans-serif);color:var(--theme-foreground-muted)}a[href].observablehq-header-anchor{color:inherit}:root{--font-big: 700 32px/1 var(--sans-serif);--font-small: 14px var(--sans-serif)}.big{font:var(--font-big)}.small{font:var(--font-small)}.red{color:var(--theme-red)}.yellow{color:var(--theme-yellow)}.green{color:var(--theme-green)}.blue{color:var(--theme-blue)}.muted{color:var(--theme-foreground-muted)}.observablehq--draft>h1:first-of-type:after{content:" [DRAFT]";color:var(--theme-foreground-muted)}:root{--theme-caret: url("../_file/data:image/svg+xml,%3Csvg xmlns='http:/www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='M5 7L8.125 9.5L11.25 7' stroke='black' stroke-width='1.5' stroke-linecap='round' fill='none'/%3E%3C/svg%3E");--theme-toggle: url("../_file/data:image/svg+xml,%3Csvg xmlns='http:/www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='m10.5,11 2.5-3-2.5-3 M6,8h7' fill='none' stroke='black' stroke-width='2'/%3E%3Crect x='2' y='2' fill='currentColor' height='12' rx='0.5' width='2'/%3E%3C/svg%3E");--theme-magnifier: url("../_file/data:image/svg+xml,%3Csvg xmlns='http:/www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath stroke='currentColor' stroke-width='2' fill='none' d='M15,15L10.5,10.5a3,3 0 1,0 -6 -6a3,3 0 1,0 6 6'%3E%3C/path%3E%3C/svg%3E")}#observablehq-main,#observablehq-header,#observablehq-footer{margin:1rem auto;max-width:1152px}#observablehq-main{min-height:calc(100vh - 20rem);position:relative;z-index:0}#observablehq-footer{display:block;margin-top:10rem;font:12px var(--sans-serif);color:var(--theme-foreground-faint)}#observablehq-footer nav{display:grid;max-width:640px;grid-template-columns:1fr 1fr;column-gap:1rem;margin-bottom:1rem}#observablehq-footer nav a{display:flex;flex-direction:column;border:1px solid var(--theme-foreground-fainter);border-radius:8px;padding:1rem;line-height:1rem;text-decoration:none}#observablehq-footer nav a span{font-size:14px}#observablehq-footer nav a:hover span{text-decoration:underline}#observablehq-footer nav a:hover{border-color:var(--theme-foreground-focus)}#observablehq-footer nav a[rel=prev]{grid-column:1;align-items:start}#observablehq-footer nav a[rel=next]{grid-column:2;align-items:end}#observablehq-footer nav a:before{color:var(--theme-foreground-faint)}#observablehq-footer nav a[rel=prev]:before{content:"Previous page"}#observablehq-footer nav a[rel=next]:before{content:"Next page"}#observablehq-center{margin:1rem 2rem}#observablehq-sidebar{position:fixed;background:var(--theme-background-alt);color:var(--theme-foreground-muted);font:14px var(--sans-serif);visibility:hidden;font-weight:500;width:272px;z-index:2;top:0;bottom:0;left:-272px;box-sizing:border-box;padding:0 .5rem 1rem;overflow-y:auto}#observablehq-sidebar ol,#observablehq-toc ol{list-style:none;margin:0;padding:0}#observablehq-sidebar>ol,#observablehq-sidebar>details,#observablehq-sidebar>section{position:relative;padding-bottom:.5rem;margin:.5rem 0;border-bottom:solid 1px var(--theme-foreground-faintest)}#observablehq-sidebar>ol:first-child{position:sticky;top:0;z-index:1;background:var(--theme-background-alt);font-size:16px;font-weight:700;padding-top:1rem;padding-left:.5rem;margin:0;margin-left:-.5rem;color:var(--theme-foreground)}#observablehq-sidebar>ol:last-child,#observablehq-sidebar>details:last-child,#observablehq-sidebar>section:last-child{border-bottom:none}#observablehq-sidebar summary{font-weight:700;color:var(--theme-foreground);cursor:default}#observablehq-sidebar summary::-webkit-details-marker,#observablehq-sidebar summary::marker{display:none}#observablehq-sidebar details summary:after{position:absolute;right:.5rem;width:1rem;height:1rem;background:var(--theme-foreground-muted);content:"";-webkit-mask:var(--theme-caret);mask:var(--theme-caret);transition:transform .25s ease;transform:rotate(-90deg);transform-origin:50% 50%}#observablehq-sidebar details summary:hover:after{color:var(--theme-foreground)}#observablehq-sidebar details[open] summary:after{transform:rotate(0)}#observablehq-sidebar-toggle{position:fixed;appearance:none;background:none;top:0;left:0;height:100%;width:2rem;display:flex;align-items:center;justify-content:center;cursor:e-resize;margin:0;color:var(--theme-foreground-muted);z-index:1}#observablehq-sidebar-close{position:absolute;top:1rem;right:0;width:2rem;height:2.2rem;display:flex;align-items:center;justify-content:center;color:var(--theme-foreground-muted);cursor:w-resize;z-index:2}#observablehq-sidebar-toggle:before,#observablehq-sidebar-close:before{content:"";width:1rem;height:1rem;background:currentColor;-webkit-mask:var(--theme-toggle);mask:var(--theme-toggle)}#observablehq-sidebar-close:before{transform:scaleX(-1)}#observablehq-sidebar summary,.observablehq-link a{display:flex;padding:.5rem 1rem .5rem 1.5rem;margin-left:-.5rem;align-items:center}#observablehq-sidebar details summary:hover,.observablehq-link-active a,.observablehq-link a:hover{background:var(--theme-background)}.observablehq-link a:hover{color:var(--theme-foreground-focus)}#observablehq-toc{display:none;position:fixed;color:var(--theme-foreground-muted);font:400 14px var(--sans-serif);z-index:1;top:0;right:0;bottom:0;overflow-y:auto}#observablehq-toc nav{width:192px;margin:2rem 0;padding:0 1rem;box-sizing:border-box;border-left:solid 1px var(--theme-foreground-faintest)}#observablehq-toc div{font-weight:700;color:var(--theme-foreground);margin-bottom:.5rem}.observablehq-secondary-link a{display:block;padding:.25rem 0}.observablehq-link:not(.observablehq-link-active) a[href]:not(:hover),.observablehq-secondary-link:not(.observablehq-secondary-link-active) a[href]:not(:hover){color:inherit}.observablehq-link-active,.observablehq-secondary-link-active{position:relative}.observablehq-link-active:before,.observablehq-secondary-link-highlight{content:"";position:absolute;width:3px;background:var(--theme-foreground-focus)}.observablehq-link-active:before{top:0;bottom:0;left:-.5rem}.observablehq-secondary-link-highlight{left:1px;top:2rem;height:0;transition:top .15s ease,height .15s ease}#observablehq-sidebar{transition:visibility .15s 0ms,left .15s 0ms ease}#observablehq-sidebar:focus-within,#observablehq-sidebar-toggle:checked~#observablehq-sidebar{left:0;visibility:initial;box-shadow:0 0 8px 4px #0000001a;transition:visibility 0ms 0ms,left .15s 0ms ease}#observablehq-sidebar-backdrop{display:none;position:fixed;inset:0;z-index:2}#observablehq-sidebar-backdrop:has(~#observablehq-sidebar:focus-within),#observablehq-sidebar-toggle:checked~#observablehq-sidebar-backdrop{display:initial}@media (prefers-color-scheme: dark){#observablehq-sidebar:focus-within,#observablehq-sidebar-toggle:checked~#observablehq-sidebar{box-shadow:0 0 8px 4px #00000080}}@media (min-width: calc(912px + 6rem)){#observablehq-sidebar{transition:none!important}#observablehq-sidebar-toggle:checked~#observablehq-sidebar-backdrop{display:none}#observablehq-sidebar-toggle:checked~#observablehq-sidebar,#observablehq-sidebar-toggle:indeterminate~#observablehq-sidebar{left:0;visibility:initial;box-shadow:none;border-right:solid 1px var(--theme-foreground-faintest)}#observablehq-sidebar-toggle:checked~#observablehq-center,#observablehq-sidebar-toggle:indeterminate~#observablehq-center{padding-left:calc(272px + 1rem);padding-right:1rem}}@media (min-width: calc(832px + 6rem)){#observablehq-toc~#observablehq-center{padding-right:calc(192px + 1rem)}#observablehq-toc{display:block}}@media (min-width: calc(912px + 6rem)){#observablehq-sidebar-toggle:checked~#observablehq-toc,#observablehq-sidebar-toggle:indeterminate~#observablehq-toc{display:none}}@media (min-width: calc(1104px + 6rem)){#observablehq-sidebar-toggle:checked~#observablehq-toc,#observablehq-sidebar-toggle:indeterminate~#observablehq-toc,#observablehq-toc{display:block}#observablehq-sidebar-toggle:checked~#observablehq-toc~#observablehq-center,#observablehq-sidebar-toggle:indeterminate~#observablehq-toc~#observablehq-center,#observablehq-toc~#observablehq-center{padding-right:calc(192px + 1rem)}}.observablehq-pre-container{position:relative;margin:1rem -1rem;max-width:960px}.observablehq-pre-container:after{position:absolute;top:0;right:0;height:21px;font:12px var(--sans-serif);color:var(--theme-foreground-muted);background:linear-gradient(to right,transparent,var(--theme-background-alt) 40%);padding:.5rem .5rem .5rem 1.5rem}.observablehq-pre-container[data-language]:after{content:attr(data-language)}.observablehq-pre-container pre{padding-right:4rem;margin:0;max-width:none}.observablehq-pre-copy{position:absolute;top:0;right:0;background:none;color:transparent;border:none;border-radius:4px;padding:0 8px;margin:4px;height:29px;cursor:pointer;z-index:1;display:flex;align-items:center}.observablehq-pre-copied:before{content:"Copied!";position:absolute;right:calc(100% + .25rem);background:linear-gradient(to right,transparent,var(--theme-background-alt) 10%);color:var(--theme-green);font:var(--font-small);padding:4px 8px 4px 16px;pointer-events:none;animation-name:observablehq-pre-copied;animation-duration:.25s;animation-direction:alternate;animation-iteration-count:2}@keyframes observablehq-pre-copied{0%{opacity:0;transform:translate(.5rem)}50%{opacity:1}to{transform:translate(0)}}.observablehq-pre-container[data-copy] .observablehq-pre-copy,.observablehq-pre-container:hover .observablehq-pre-copy,.observablehq-pre-container .observablehq-pre-copy:focus{background:var(--theme-background-alt);color:var(--theme-foreground-faint)}.observablehq-pre-container .observablehq-pre-copy:hover{color:var(--theme-foreground-muted)}.observablehq-pre-container .observablehq-pre-copy:active{color:var(--theme-foreground);background:var(--theme-foreground-faintest)}#observablehq-sidebar.observablehq-search-results>ol:not(:first-child),#observablehq-sidebar.observablehq-search-results>details,#observablehq-sidebar.observablehq-search-results>section{display:none}#observablehq-search{position:relative;padding:.5rem 0 0;display:flex;align-items:center}#observablehq-search input{padding:6px 4px 6px 2.2em;width:100%;border:none;border-radius:4px;background-color:var(--theme-background);font-size:13.3px;height:28px}#observablehq-search input::placeholder{color:var(--theme-foreground-faint)}#observablehq-search:before{position:absolute;left:.5rem;content:"";width:1rem;height:1rem;background:currentColor;-webkit-mask:var(--theme-magnifier);mask:var(--theme-magnifier);pointer-events:none}#observablehq-search:after{position:absolute;right:6px;content:attr(data-shortcut);pointer-events:none}#observablehq-search:focus-within:after{content:""}#observablehq-search-results{--relevance-width: 32px;position:absolute;overflow-y:auto;top:6.5rem;left:0;right:.5rem;bottom:0}#observablehq-search-results a span{max-width:184px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#observablehq-search-results div{text-align:right;font-size:10px;margin:.5em}#observablehq-search-results li{position:relative;display:flex;align-items:center}#observablehq-search-results a{flex-grow:1}#observablehq-search-results li:after,#observablehq-search-results a:after{content:"";width:var(--relevance-width);height:4px;position:absolute;right:.5em;border-radius:2px;background:var(--theme-foreground-muted)}#observablehq-search-results li.observablehq-link-active:after{background:var(--theme-foreground-focus)}#observablehq-search-results a:after{background:var(--theme-foreground-faintest)}#observablehq-search-results li[data-score="0"]:after{width:calc(var(--relevance-width) * .125)}#observablehq-search-results li[data-score="1"]:after{width:calc(var(--relevance-width) * .25)}#observablehq-search-results li[data-score="2"]:after{width:calc(var(--relevance-width) * .4375)}#observablehq-search-results li[data-score="3"]:after{width:calc(var(--relevance-width) * .625)}#observablehq-search-results li[data-score="4"]:after{width:calc(var(--relevance-width) * .8125)}@media print{#observablehq-center{padding-left:1em!important}#observablehq-sidebar,#observablehq-footer{display:none!important}}#observablehq-center{container-type:inline-size}.grid{margin:1rem 0;display:grid;gap:1rem;grid-auto-rows:1fr}.grid svg{overflow:visible}.grid figure{margin:0}.grid>*>p:first-child{margin-top:0}.grid>*>p:last-child{margin-bottom:0}@container (min-width: 640px){.grid-cols-2,.grid-cols-4{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-2 .grid-colspan-2,.grid-cols-2 .grid-colspan-3,.grid-cols-2 .grid-colspan-4,.grid-cols-4 .grid-colspan-2,.grid-cols-4 .grid-colspan-3,.grid-cols-4 .grid-colspan-4{grid-column:span 2}}@container (min-width: 720px){.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-3 .grid-colspan-2{grid-column:span 2}.grid-cols-3 .grid-colspan-3{grid-column:span 3}}@container (min-width: 1080px){.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-4 .grid-colspan-3{grid-column:span 3}.grid-cols-4 .grid-colspan-4{grid-column:span 4}}.grid-rowspan-2{grid-row:span 2}.grid-rowspan-3{grid-row:span 3}.grid-rowspan-4{grid-row:span 4}.note,.tip,.warning,.caution{border-left:solid 1px;border-radius:0 4px 4px 0;padding:1rem 2rem;margin:1rem 0;box-sizing:border-box;max-width:640px}.note:before,.tip:before,.warning:before,.caution:before{display:block;margin-bottom:1rem;font-weight:700}.note{border-left-color:var(--theme-foreground-fainter);background-color:var(--theme-background-alt)}.note:before{content:"Note";color:var(--theme-foreground-muted)}.tip{border-left-color:var(--theme-green);background-color:color-mix(in srgb,var(--theme-green),var(--theme-background) 90%)}.tip:before{content:"Tip";color:var(--theme-green)}.warning{border-left-color:var(--theme-yellow);background-color:color-mix(in srgb,var(--theme-yellow),var(--theme-background) 90%)}.warning:before{content:"Warning";color:var(--theme-yellow)}.caution{border-left-color:var(--theme-red);background-color:color-mix(in srgb,var(--theme-red),var(--theme-background) 90%)}.caution:before{content:"Caution";color:var(--theme-red)}.note[label]:before,.tip[label]:before,.warning[label]:before,.caution[label]:before{content:attr(label)}.note>:first-child,.tip>:first-child,.warning>:first-child,.caution>:first-child{margin-top:0}.note>:last-child,.tip>:last-child,.warning>:last-child,.caution>:last-child{margin-bottom:0}.card{background:var(--theme-background-alt);border:solid 1px var(--theme-foreground-faintest);border-radius:.75rem;padding:1rem;margin:1rem 0;font:14px var(--sans-serif)}.grid>.card,.card figure{margin:0}.card h2,.card h3{font-size:inherit}.card h2{font-weight:500;font-size:15px}.card h3{font-weight:400;color:var(--theme-foreground-muted)}.card h2~svg,.card h3~svg,.card h2~p,.card h3~p{margin-top:1rem}.observablehq--block:empty{margin:0}@keyframes observablehq-loading{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.observablehq-loading{font:var(--monospace-font);color:var(--theme-foreground-muted);display:inline-block;transform-origin:.32em 55%;animation-name:observablehq-loading;animation-timing-function:linear;animation-duration:1s;animation-iteration-count:infinite}.observablehq-loading:before{content:"\21bb"}.observablehq--block .observablehq-loading{display:block}.observablehq--block{margin:1rem 0}.observablehq--block .observablehq,.observablehq--block .observablehq--inspect{display:block}.observablehq--collapsed,.observablehq--expanded.observablehq--inspect a{cursor:pointer}.observablehq--caret{margin-right:4px;vertical-align:baseline}.observablehq--field{text-indent:-1rem;margin-left:1rem}.observablehq--inspect{font:var(--monospace-font);overflow-x:auto;white-space:pre}.observablehq--inspect.observablehq--import{white-space:normal}.observablehq--inspect::-webkit-scrollbar{display:none}.observablehq--error .observablehq--inspect{word-break:break-all;white-space:pre-wrap}.observablehq--string-expand{margin-left:6px;padding:2px 6px;border-radius:2px;font-size:80%;background:var(--theme-background-alt);cursor:pointer;vertical-align:middle}.observablehq--keyword,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:var(--syntax-keyword)}.observablehq--symbol,.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:var(--syntax-entity)}.observablehq--index,.observablehq--key,.hljs-attr,.hljs-attribute,.hljs-meta,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:var(--syntax-constant)}.observablehq--regexp,.observablehq--string,.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:var(--syntax-string)}.observablehq--null,.observablehq--undefined,.hljs-built_in,.hljs-literal,.hljs-symbol{color:var(--syntax-variable)}.observablehq--prototype-key,.observablehq--empty,.hljs-comment,.hljs-formula{color:var(--syntax-comment)}.observablehq--bigint,.observablehq--boolean,.observablehq--date,.observablehq--forbidden,.observablehq--number,.hljs-name,.hljs-number,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:var(--syntax-entity-tag)}.hljs-subst{color:var(--syntax-storage-modifier-import)}.hljs-section{color:var(--syntax-markup-heading);font-weight:700}.hljs-bullet{color:var(--syntax-markup-list)}.hljs-emphasis{color:var(--syntax-markup-italic);font-style:italic}.hljs-strong{color:var(--syntax-markup-bold);font-weight:700}.hljs-addition{color:var(--syntax-markup-inserted);background-color:var(--syntax-markup-inserted-background)}.hljs-deletion{color:var(--syntax-markup-deleted);background-color:var(--syntax-markup-deleted-background)}.observablehq--empty{font-style:oblique}.observablehq--error{color:var(--syntax-keyword)}.plot-d6a7b5{--plot-background: var(--theme-background)}p .plot-d6a7b5{display:inline-block}:root{--syntax-keyword: #d73a49;--syntax-entity: #6f42c1;--syntax-constant: #005cc5;--syntax-string: #032f62;--syntax-variable: #e36209;--syntax-comment: var(--theme-foreground-muted);--syntax-entity-tag: #22863a;--syntax-storage-modifier-import: #24292e;--syntax-markup-heading: #005cc5;--syntax-markup-list: #735c0f;--syntax-markup-italic: #24292e;--syntax-markup-bold: #24292e;--syntax-markup-inserted: #22863a;--syntax-markup-inserted-background: #f0fff4;--syntax-markup-deleted: #b31d28;--syntax-markup-deleted-background: #ffeef0}:root{--theme-background-b: color-mix(in srgb, var(--theme-foreground) 4%, var(--theme-background-a));--theme-background: var(--theme-background-a);--theme-background-alt: var(--theme-background-b);--theme-foreground-alt: color-mix(in srgb, var(--theme-foreground) 90%, var(--theme-background-a));--theme-foreground-muted: color-mix(in srgb, var(--theme-foreground) 60%, var(--theme-background-a));--theme-foreground-faint: color-mix(in srgb, var(--theme-foreground) 50%, var(--theme-background-a));--theme-foreground-fainter: color-mix(in srgb, var(--theme-foreground) 30%, var(--theme-background-a));--theme-foreground-faintest: color-mix(in srgb, var(--theme-foreground) 14%, var(--theme-background-a));color-scheme:light}:root{--theme-foreground: #1b1e23;--theme-foreground-focus: #3b5fc0;--theme-background-a: #ffffff}:root{--serif: "Atkinson Hyperlegible"}div.bg{background-image:url(../_file/horse.2d33a223.jpg)}div.dont-break-hashes{offset-path:url(#path)}@font-face{font-family:Atkinson Hyperlegible;src:url(https://fonts.gstatic.com/s/atkinsonhyperlegible/v11/9Bt23C1KxNDXMspQ1lPyU89-1h6ONRlW45G04pIoWQeCbA.woff2) format("woff2")} diff --git a/test/output/build/css-public/index.html b/test/output/build/css-public/index.html index fc104aee8..e97784e8d 100644 --- a/test/output/build/css-public/index.html +++ b/test/output/build/css-public/index.html @@ -4,9 +4,9 @@ CSS assets - + - +