Conversation
✅ Deploy Preview for svelteplot ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
📦 Preview package for this PR is published! Version: Install it with: npm install svelteplot@pr-555
# or install the specific version
npm install svelteplot@0.14.2-pr-555.0 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e21aa48faf
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| function toggle_solution() { | ||
| const target = solved ? data.exercise.a : data.exercise.b; | ||
| workspace.set(make_items({ ...data.exercise.a, ...target })); | ||
| solved = !solved; |
There was a problem hiding this comment.
Set solved state from intent instead of toggling it
workspace.set(...) calls the configured onreset handler synchronously, and that handler already assigns solved = false. The subsequent solved = !solved therefore computes from a mutated value, so clicking Reset (while currently solved) immediately flips solved back to true, leaving the UI stuck in the solved state and preventing the Solve/Reset toggle from behaving correctly. Set solved explicitly from the chosen target (solution vs starter) rather than negating the current flag.
Useful? React with 👍 / 👎.
|
📦 Preview package for this PR is published! Version: Install it with: npm install svelteplot@pr-555
# or install the specific version
npm install svelteplot@0.14.2-pr-555.1 |
|
📦 Preview package for this PR is published! Version: Install it with: npm install svelteplot@pr-555
# or install the specific version
npm install svelteplot@0.14.2-pr-555.2 |
|
📦 Preview package for this PR is published! Version: Install it with: npm install svelteplot@pr-555
# or install the specific version
npm install svelteplot@0.14.2-pr-555.3 |
|
📦 Preview package for this PR is published! Version: Install it with: npm install svelteplot@pr-555
# or install the specific version
npm install svelteplot@0.14.2-pr-555.4 |
|
📦 Preview package for this PR is published! Version: Install it with: npm install svelteplot@pr-555
# or install the specific version
npm install svelteplot@0.14.2-pr-555.5 |
|
📦 Preview package for this PR is published! Version: Install it with: npm install svelteplot@pr-555
# or install the specific version
npm install svelteplot@0.14.2-pr-555.6 |
|
📦 Preview package for this PR is published! Version: Install it with: npm install svelteplot@pr-555
# or install the specific version
npm install svelteplot@0.14.2-pr-555.7 |
Integrates an interactive tutorial into svelteplot.dev using a local copy of @sveltejs/repl with a minimal site-kit shim, tutorial content from the svelteplot workshop, and a full-width SvelteKit layout that reuses the global navbar. - packages/repl/: local copy of @sveltejs/repl with embedded site-kit shim (Checkbox, Dropdown, ScreenToggle, Toolbox, HoverMenu, codemirror, polyfills) - src/content/tutorial/02-svelteplot/: tutorial exercises (6 chapters) - src/lib/server/tutorial.ts: import.meta.glob-based exercise loader - src/routes/tutorial/[...slug]/: SplitPane layout with Editor + Viewer - Vite/SvelteKit aliases for @sveltejs/repl/* and @sveltejs/site-kit/* shims - tsconfig.json excludes tutorial content files from type checking Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The condition `parts[2] !== 'index.md'` excluded all exercise paths since every exercise's markdown is named index.md. Changed to check that neither the chapter nor exercise segment is `+assets`. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…h resolution
@rollup/plugin-alias uses prefix matching for string aliases, so
{ find: '@sveltejs/repl', ... } was matching @sveltejs/repl/editor and
replacing only the prefix, producing a non-existent path. The base package
now resolves via the workspace symlink in node_modules.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Content was reorganized from 02-svelteplot/ to 01-basics/, 02-marks/, 03-transforms/. The loader now discovers groups dynamically from /src/content/tutorial/ and threads groupAssetPrefix through for shared assets, keeping slugs as chapter/exercise. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Set \$sidebar = false in the tutorial layout using the theme's writable
store, which GlobalLayout reads with {#if \$sidebar}. Restore on destroy
so navigating away from /tutorial re-shows the sidebar.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
tailwindcss v4 uses a Rust/WASM backend. When Vite pre-bundles it, the .wasm file ends up misplaced in .vite/deps/ and the browser gets a 404. Since init_tailwind() is only called with tailwind:true (never in this tutorial), excluding the package prevents the WASM from being loaded at all. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@rollup/browser loads bindings_wasm_bg.wasm via new URL(..., import.meta.url). When Vite pre-bundles it into .vite/deps/, the .wasm file is left behind in node_modules, so the browser gets a 404. Excluding it keeps import.meta.url pointing at the real package location where the WASM file exists. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ntax highlighting - Add shikiDiffNotation transformer with inline +++/--- marker support via Shiki decorations API - Add shikiFileHeader transformer for /// file: comment styling - Fix CodeMirror syntax highlighting by defining --shiki-token-* CSS variables - Add file tabs above CodeMirror editor, hiding SvelteKit +-prefixed files - Make tutorial Viewer respect prefers-color-scheme dark mode - Configure Prettier: 2-space indent for tutorial .svelte files Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ffd211664d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| d={path} | ||
| class={styleClass} | ||
| {style} | ||
| filter={resolveProp(args.svgFilter, datum, undefined) as string | undefined} /> |
There was a problem hiding this comment.
Pass original datum to svgFilter accessors
For PathGroup-backed marks such as Hull, DelaunayMesh, and VoronoiMesh, datum here is the scaled wrapper ({ datum, x, y, ... }), while resolveProp accessors are expected to run against the original data row (as the style code and other svgFilter call sites do with datum.datum). If a caller uses svgFilter={(d) => ...} or a column-backed filter, it receives the wrapper or cannot find the column, so per-datum filters are silently omitted or computed from the wrong object.
Useful? React with 👍 / 👎.
…at tutorial markdown
isNaN('A') === true in JS, so the NaN-filtering guard on custom axis tick data was
incorrectly dropping all string ticks on ordinal scales. Now only filters values that
are numeric NaN.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…/prefer-svelte-reactivity SvelteSet is already reactive so $state wrappers are not needed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4f9790fe63
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (parts.length >= 2 && parts[0] !== '+assets' && parts[0] !== 'index.md') { | ||
| if (!acc.includes(parts[0])) acc.push(parts[0]); |
There was a problem hiding this comment.
Include nested tutorial lesson directories
For lessons nested below a section directory, this only records parts[0] as the exercise. In the added content, paths like src/content/tutorial/01-basics/02-marks/01-dot/01-symbol/index.md therefore become only the slug 02-marks/01-dot; load_exercise then looks for 01-dot/index.md and never exposes the actual 01-symbol, 02-dotx-doty, line, etc. lessons in entries() or the nav, so large parts of the new tutorial are omitted from the built site.
Useful? React with 👍 / 👎.
…f resolve() - toggle_group/toggle_chapter and afterNavigate now mutate open_groups/open_chapters in place instead of reassigning, resolving the non_reactive_update warning without needing $state() wrappers that ESLint flags as unnecessary - InlineExamplesGrid: replace resolve(dynamicString) with base+url since resolve() only accepts typed SvelteKit routes, not plain strings Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…Lint and svelte-check The svelte/no-navigation-without-resolve ESLint rule requires resolve(), but resolve() is typed to only accept known SvelteKit routes — not dynamic strings. Using `as any` (same pattern as ExamplesPagePreview) satisfies both. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 95c38c28cf
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| ...options | ||
| }: RasterMarkProps = $derived({ ...DEFAULTS, ...markProps }); | ||
|
|
||
| const svgFilter = $derived((markProps as any).svgFilter as string | undefined); |
There was a problem hiding this comment.
Resolve raster filter accessors before rendering
When svgFilter is supplied as an accessor, this stores the function itself and the <image> later receives that function as its filter value instead of the resolved URL. Other marks resolve svgFilter through resolveProp, and the shared mark type allows accessors, so Raster svgFilter={() => 'url(#blur)'} silently renders without the filter; resolve the prop once for the generated raster image or narrow the prop to a string-only API.
Useful? React with 👍 / 👎.
| x="bill_length_mm" | ||
| y="bill_depth_mm" | ||
| fill="species" | ||
| fy="species" /> |
There was a problem hiding this comment.
Keep the faceting solution on islands
This lesson text and code block instruct users to keep fy="island" so each panel represents an island, but the provided solved state switches the mark to fy="species". Clicking Solve therefore produces species panels instead of the island panels described by the exercise, making the tutorial answer inconsistent with the lesson; keep the solution's facet channel aligned with the markdown.
Useful? React with 👍 / 👎.
Summary
Interactive Tutorial (
/tutorial)Custom REPL package (
packages/repl/)New library features
Bug fixes
Docs & Examples
Build & CI
Test plan
🤖 Generated with Claude Code