diff --git a/.vscode/settings.json b/.vscode/settings.json index 46d9035f..21800944 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,23 +13,13 @@ "[svelte]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "eslint.validate": [ - "javascript", - "javascriptreact", - "typescript", - "typescriptreact", - "svelte" - ], + "eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact", "svelte"], "prettier.useTabs": false, "prettier.singleQuote": true, "prettier.tabWidth": 4, "prettier.trailingComma": "none", "prettier.printWidth": 100, "svelte.plugin.svelte.format.enable": false, - "eslint.probe": [ - "javascript", - "typescript", - "svelte" - ], + "eslint.probe": ["javascript", "typescript", "svelte"], "eslint.experimental.useFlatConfig": true } diff --git a/package.json b/package.json index a3d2475a..1a977403 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "svelteplot", - "version": "0.2.7", + "version": "0.2.8", "license": "ISC", "author": { "name": "Gregor Aisch", diff --git a/src/lib/marks/ColorLegend.svelte b/src/lib/marks/ColorLegend.svelte index df69f520..75529dba 100644 --- a/src/lib/marks/ColorLegend.svelte +++ b/src/lib/marks/ColorLegend.svelte @@ -129,7 +129,7 @@ marginBottom={20} height={38} inset={0} - x={{ domain, tickSpacing, tickFormat }}> + x={{ domain, tickSpacing: 30, tickFormat }}> {#each ticks as t (t)} diff --git a/src/lib/marks/helpers/CanvasLayer.svelte b/src/lib/marks/helpers/CanvasLayer.svelte index 16431f13..9bbaf502 100644 --- a/src/lib/marks/helpers/CanvasLayer.svelte +++ b/src/lib/marks/helpers/CanvasLayer.svelte @@ -2,6 +2,27 @@ import { getContext } from 'svelte'; import type { PlotContext } from 'svelteplot/types'; import { devicePixelRatio } from 'svelte/reactivity/window'; + import { MediaQuery } from 'svelte/reactivity'; + import type { Attachment } from 'svelte/attachments'; + + const darkMode = new MediaQuery('prefers-color-scheme: dark'); + let colorScheme = $state(); + + /** + * we need to repaint on dark mode changes in case the user + * is using any css variables or currentColor that changes + * with the color scheme + */ + const watchColorScheme: Attachment = (element: Element) => { + const htmlElement = element.ownerDocument.documentElement; + const observer = new MutationObserver(() => { + colorScheme = getComputedStyle(htmlElement).colorScheme; + }); + observer.observe(htmlElement, { attributes: true }); + return () => { + observer.disconnect(); + }; + }; let restProps: {} = $props(); @@ -14,14 +35,15 @@ canvas element inside a foreignObject for use in a plot and takes care of scaling it to the device pixel ratio. --> - - - + + {#key [colorScheme, darkMode.current]} + + {/key}