-
Notifications
You must be signed in to change notification settings - Fork 137
Open
Conversation
Introduce an experimental GoFish Frontend IR adapter and supporting UI/docs. Adds a new GoFishLayouts feature page, a blog draft (Making Better Custom Charts), nav entry, and route; links Custom Charts docs to the new page and documents recipe authoring, push semantics, and network diagrams. Implements adapter/runtime pieces under src/components/recipes (gofish interpreter, lambdas, examples, tests), exposes experimental APIs in semiotic-experimental, and updates semiotic-recipes usage. Adds integration tests and example pages for custom layout behavior, diagnostic helpers, and multiple stream/pipeline test updates. Also updates package/scripts and API surface docs to reflect the new experimental surface.
"Every charting library hits the wall where the catalog runs out. This is about what's on the other side of that wall in Semiotic — a custom-layout surface principled enough to host a domain pipeline's lineage DAG and to interpret another library's serialized grammar, escape hatches and all.",
}
const card = {
Contributor
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR introduces an experimental GoFish Frontend IR → Semiotic custom-layout adapter (exposed via semiotic/experimental) and a supporting documentation/demo surface, while also tightening core streaming/custom-layout behavior (responsive alignment, diagnostics, staleness semantics, and canvas alpha handling).
Changes:
- Add
semiotic/experimentalentry point plus GoFish IR adapter/runtime pieces (IR types, example fixtures, lambda registry, tests). - Improve streaming/custom-layout runtime correctness: recompute scenes on responsive resizes during transitions, warn on overlay-only/null-datum custom layouts, refresh staleness clock on
update()/remove(), and fix point renderer alpha composition. - Add docs + integration coverage: new GoFish feature page/route/nav, expanded Custom Charts docs, blog draft, and a Playwright regression suite for overlay alignment.
Reviewed changes
Copilot reviewed 45 out of 45 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| src/components/stream/StreamXYFrame.tsx | Re-solves scene on responsive size changes mid-transition; keeps overlays aligned; updates dirty/annotation rerender logic |
| src/components/stream/StreamOrdinalFrame.tsx | Mirrors XY resize/transition scene re-solve and state update behavior for ordinal streaming |
| src/components/stream/renderers/pointCanvasRenderer.ts | Fixes globalAlpha handling to multiply node opacity into any pre-existing chart alpha (e.g. staleness dim) |
| src/components/stream/renderers/pointCanvasRenderer.test.ts | Updates and expands tests to validate alpha multiplication and save/restore behavior |
| src/components/stream/PipelineStore.ts | Adds custom-layout diagnostics warnings; refreshes staleness clock on remove()/update() |
| src/components/stream/PipelineStore.customLayout.test.ts | Adds console warning coverage for custom layout diagnostics |
| src/components/stream/PipelineStore.cache.test.ts | Adds tests ensuring update()/remove() refresh lastIngestTime |
| src/components/stream/OrdinalPipelineStore.ts | Adds custom-layout diagnostics warnings; refreshes staleness clock on remove()/update() |
| src/components/stream/OrdinalPipelineStore.test.ts | Adds tests ensuring update()/remove() refresh lastIngestTime |
| src/components/stream/OrdinalPipelineStore.customLayout.test.ts | Adds console warning coverage for ordinal custom layout diagnostics |
| src/components/stream/NetworkPipelineStore.ts | Adds custom-layout diagnostics warnings; refreshes staleness clock on node/edge updates/removals |
| src/components/stream/NetworkPipelineStore.customLayout.test.ts | Adds console warning coverage for network custom layout diagnostics |
| src/components/stream/customLayoutDiagnostics.ts | New dev-only diagnostics helper for overlay-only / null-datum custom layouts |
| src/components/semiotic-recipes.ts | Exposes custom tooltip helpers from semiotic/recipes |
| src/components/semiotic-experimental.ts | New experimental entry point exporting GoFish adapter APIs and example IR docs |
| src/components/recipes/gofishLambdas.ts | Lambda registry + built-in derives (e.g. boba/bottle geometry) for GoFish IR escape hatches |
| src/components/recipes/gofishIRExamples.ts | Canonical IR example documents used by docs/demo and tests |
| src/components/recipes/gofishIR.ts | GoFish Frontend IR adapter (unstable_fromGofishIR) + IR type subset + family routing |
| src/components/recipes/gofishIR.test.ts | Interpreter/adapter behavior tests, including routing and example output sanity checks |
| src/components/recipes/gofishBoba.tsx | Ordinal custom layout for boba glyph rendering (scene-node + overlay split) |
| src/components/recipes/gofish.test.ts | Tests for GoFish-style recipe layouts and network/diagram output |
| src/components/recipes/customTooltip.ts | New tooltip datum extraction + entry building/formatting helpers for custom charts |
| src/components/recipes/customTooltip.test.ts | Unit tests for tooltip helpers |
| src/components/charts/shared/useCustomChartSetup.ts | Widens emptyContent typing to allow false (suppress empty UI) |
| src/components/charts/shared/useChartSetup.ts | Widens emptyContent typing to allow false (suppress empty UI) |
| scripts/sync-bundle-sizes.mjs | Excludes ./experimental from bundle-size table/gate inputs |
| scripts/prerender.mjs | Adds prerender metadata for the new GoFish feature route |
| scripts/generate-api-surface.mjs | Notes intentional omission of experimental entrypoint from stable API snapshots |
| scripts/check-context7.mjs | Ignores experimental subpath in Context7 subpath drift checks |
| scripts/build.mjs | Builds semiotic-experimental declarations and bundle artifacts |
| package.json | Adds ./experimental export + workspace alias + example-serve route for custom-layout tests |
| integration-tests/index.html | Adds navigation entry for custom layout regression tests |
| integration-tests/custom-layout.spec.ts | New Playwright spec to ensure custom-layout overlays stay aligned on resize/transition |
| integration-tests/custom-layout-examples/index.js | Fixture page rendering a responsive custom layout used by Playwright regression |
| integration-tests/custom-layout-examples/index.html | HTML harness for the custom layout regression fixture |
| etc/api-surface/semiotic-recipes.api.md | Updates semiotic/recipes API surface to include tooltip helpers |
| docs/src/pages/features/GoFishLayoutsPage.js | New docs feature page showcasing IR-driven charts + streaming + tooltip helpers |
| docs/src/pages/features/CustomChartsPage.js | Adds sections on recipe contracts, push semantics, network diagrams; links GoFish page |
| docs/src/components/navData.js | Adds nav item to the GoFish adapter feature page |
| docs/src/blog/entries/making-better-custom-charts.js | Adds draft blog entry describing custom charts + GoFish IR interpreter |
| docs/src/blog/entries.js | Registers the new blog entry |
| docs/src/blog/entries-meta.js | Registers the new blog entry metadata for previews/sync checks |
| docs/src/App.js | Adds route for /features/gofish-layouts |
Comment on lines
+1304
to
+1308
// If a prop/layout/size change arrives while a transition is active,
// computeScene is intentionally deferred. Keep the dirty flag set so
// the next non-transition frame applies the new responsive dimensions
// instead of leaving canvas scene nodes and SVG overlays out of sync.
dirtyRef.current = wasDirty && isTransitioning && !computedSceneThisFrame
Update docs to import experimental utilities from the local source so the documentation and examples use the current local implementation. Changed imports in docs/src/blog/entries/making-better-custom-charts.js and docs/src/pages/features/GoFishLayoutsPage.js to point to ../../../../src/components/semiotic-experimental instead of the published package.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.
Introduce an experimental GoFish Frontend IR adapter and supporting UI/docs. Adds a new GoFishLayouts feature page, a blog draft (Making Better Custom Charts), nav entry, and route; links Custom Charts docs to the new page and documents recipe authoring, push semantics, and network diagrams. Implements adapter/runtime pieces under src/components/recipes (gofish interpreter, lambdas, examples, tests), exposes experimental APIs in semiotic-experimental, and updates semiotic-recipes usage. Adds integration tests and example pages for custom layout behavior, diagnostic helpers, and multiple stream/pipeline test updates. Also updates package/scripts and API surface docs to reflect the new experimental surface.
This pull request adds a new draft blog entry, "Making Better Custom Charts," and introduces documentation and navigation updates to support new experimental features, particularly the GoFish IR interpreter and custom charting capabilities. It also enhances the documentation for custom chart authoring, including best practices and API usage.
Key changes:
New blog entry and content:
making-better-custom-charts.js, which discusses the evolution of Semiotic's custom chart surface, the scene-node/overlay contract, domain-driven layouts (with a Kafka Streams example), and the new GoFish IR interpreter that can execute foreign chart grammars. The post includes a live demo and detailed explanations of when and how to use custom charts.entries-meta.jsand included it in the blog entry list for drafts and previews. [1] [2] [3]Navigation and documentation updates:
/features/gofish-layouts, and registered the new route and page in the app. [1] [2] [3]Custom chart documentation enhancements:
Experimental features and API exposure:
buildTooltipEntriesfromsemiotic/recipesfor consistent tooltip payloads in custom charts.These changes collectively improve the documentation and developer experience for advanced chart customization and experimental grammar interpretation in Semiotic.