Skip to content

feat(registry): seed components — grain-overlay, shimmer-sweep, grid-pixelate-wipe#260

Merged
jrusso1020 merged 1 commit into
mainfrom
04-14-feat_registry_seed_components_grain-overlay_shimmer-sweep_grid-pixelate-wipe
Apr 14, 2026
Merged

feat(registry): seed components — grain-overlay, shimmer-sweep, grid-pixelate-wipe#260
jrusso1020 merged 1 commit into
mainfrom
04-14-feat_registry_seed_components_grain-overlay_shimmer-sweep_grid-pixelate-wipe

Conversation

@jrusso1020

@jrusso1020 jrusso1020 commented Apr 14, 2026

Copy link
Copy Markdown
Collaborator

What

Three reusable effect components for the registry, each with a snippet HTML and companion demo.html:

Component Description
grain-overlay Animated film grain texture overlay (CSS keyframes, extracted from warm-grain example)
shimmer-sweep CSS gradient light sweep across text/elements, driven by GSAP custom property animation
grid-pixelate-wipe Grid-based dissolve transition — screen breaks into 16×9 squares that scale in/out with stagger

Establishes the demo.html convention in CONTRIBUTING.md.

Why

Phase B of the catalog plan — seed the first components in the registry. Components are effect snippets that get merged into existing compositions (vs. blocks which are standalone sub-compositions).

How

  • grain-overlay: Extracted the grain texture pattern from the warm-grain example. Uses a 200% oversized tiled texture with steps(1) keyframe animation for the random-noise effect.
  • shimmer-sweep: Original implementation using CSS custom properties (--shimmer-pos) animated by GSAP. The gradient mask uses mix-blend-mode: overlay for a natural light sweep. Auto-injects .shimmer-mask elements into .shimmer-sweep-target wrappers.
  • grid-pixelate-wipe: Creates a 16×9 CSS Grid of cells, animated with GSAP stagger. Users drive .grid-cell scale directly in their timeline.

Simplify review addressed: scoped .grain-texture under #grain-overlay, scoped .grid-cell under #grid-pixelate-overlay, removed window.gridPixelateIn/Out globals in favor of direct GSAP patterns.

Each component ships a demo.html — a standalone composition that previews the effect and doubles as a fixture for the CI preview pipeline (PR 8).

Test plan

  • hyperframes add grain-overlay installs to compositions/components/grain-overlay.html
  • hyperframes add shimmer-sweep installs to compositions/components/shimmer-sweep.html
  • hyperframes add grid-pixelate-wipe installs to compositions/components/grid-pixelate-wipe.html
  • All three return correct --json output with snippet and type info
  • registry-item.json files validate against the JSON Schema
  • demo.html files are self-contained with correct data-composition-id and window.__timelines registration
  • oxfmt --check and oxlint pass on all files
  • CONTRIBUTING.md documents the demo.html convention and registry item checklist

@jrusso1020
jrusso1020 changed the base branch from main to graphite-base/260 April 14, 2026 05:13
@jrusso1020
jrusso1020 force-pushed the 04-14-feat_registry_seed_components_grain-overlay_shimmer-sweep_grid-pixelate-wipe branch from 9d414cd to 7c0c1d5 Compare April 14, 2026 05:13
@jrusso1020
jrusso1020 changed the base branch from graphite-base/260 to 04-14-feat_registry_seed_blocks_data-chart_flowchart_logo-outro April 14, 2026 05:13

@miguel-heygen miguel-heygen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review: seed components — grain-overlay, shimmer-sweep, grid-pixelate-wipe

Solid first batch of components. The snippet/demo convention is well-established, the registry-item.json manifests validate against the schema, and the CONTRIBUTING.md additions give clear guidance for future contributors. The extraction of grain-overlay from warm-grain is a clean decomposition.

Approving with a few non-blocking suggestions below.


What works well

  • CSS scoping is correct. #grain-overlay .grain-texture and #grid-pixelate-overlay .grid-cell scope selectors under their respective ID roots — no collision risk when merged into a host composition.
  • Schema compliance. All three registry-item.json files use type: "hyperframes:component" with no dimensions/duration (matching the allOf conditional in the schema). File types are hyperframes:snippet as expected.
  • demo.html convention. Each demo is a valid standalone composition with data-composition-id, data-width/height/duration, and window.__timelines registration. The IDs use <name>-demo suffix to avoid collisions with the snippet itself.
  • GSAP patterns. No deprecated APIs. Timelines are paused: true, registered on window.__timelines, and use standard IIFE isolation. The fromTo in shimmer-sweep for custom property animation is the correct approach for deterministic frame rendering.
  • grid-pixelate-wipe snippet includes a guard. The if (!overlay) return; in the snippet script is good defensive practice for a mergeable snippet.
  • CONTRIBUTING.md. The checklist and directory structure docs are clear and actionable.

Suggestions (non-blocking)

1. @keyframes grain-noise name collision risk

The @keyframes grain-noise name is global to the document. If a user independently defines @keyframes grain-noise (or if warm-grain example uses the same name — which it does), they'll collide silently. Consider namespacing: @keyframes hf-grain-noise or @keyframes grain-overlay-noise. Same consideration for the selector reference in the animation property.

This isn't a blocker since components are paste-once snippets and the warm-grain example won't be merged alongside the component, but it's worth establishing a naming convention early — especially before other components ship with their own keyframes.

2. External dependency on transparenttextures.com

Both grain-overlay.html and its demo.html load a texture from https://www.transparenttextures.com/patterns/natural-paper.png. If this CDN goes down or blocks hotlinking, the grain effect breaks silently (just an invisible overlay). Consider:

  • Documenting this dependency in the snippet comment header
  • Or noting in the customization section that users should self-host the texture for production

3. shimmer-sweep: mask injection timing

The auto-injection script in shimmer-sweep.html runs at parse time (IIFE), which works correctly when the snippet <script> appears after the .shimmer-sweep-target elements in the DOM. The comment header says "paste this snippet into your composition" but doesn't specify that it must go after the target elements. A one-liner in the usage docs would prevent a subtle ordering bug for users.

4. grid-pixelate-wipe demo: .grid-cell selector is unscoped in timeline

In the demo's GSAP timeline, .grid-cell is used as a bare class selector. This works in the demo because it's the only composition, but the snippet comment example also uses .grid-cell unscoped. For consistency with the scoping done in CSS (#grid-pixelate-overlay .grid-cell), the timeline integration example in the comment block could use the scoped selector #grid-pixelate-overlay .grid-cell to reinforce the pattern.

5. Minor: demo.html boilerplate could reference a shared base

All three demos repeat the same <head> boilerplate (reset CSS, GSAP CDN, viewport meta). Not actionable now, but as the component count grows, a shared demo-base.html template or a demo-template in CONTRIBUTING.md would reduce drift between demos.


All of these are suggestions for future iteration, not blockers. The components are clean, correctly scoped, and ready for the registry.

@jrusso1020
jrusso1020 force-pushed the 04-14-feat_registry_seed_components_grain-overlay_shimmer-sweep_grid-pixelate-wipe branch from 7c0c1d5 to f805fc8 Compare April 14, 2026 23:14
@jrusso1020
jrusso1020 force-pushed the 04-14-feat_registry_seed_blocks_data-chart_flowchart_logo-outro branch from aa0efe5 to 15fc98d Compare April 14, 2026 23:14

jrusso1020 commented Apr 14, 2026

Copy link
Copy Markdown
Collaborator Author

Merge activity

  • Apr 14, 11:16 PM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Apr 14, 11:17 PM UTC: Graphite rebased this pull request as part of a merge.
  • Apr 14, 11:18 PM UTC: @jrusso1020 merged this pull request with Graphite.

@jrusso1020
jrusso1020 changed the base branch from 04-14-feat_registry_seed_blocks_data-chart_flowchart_logo-outro to main April 14, 2026 23:16
…pixelate-wipe

Three reusable effect components for the registry:

- grain-overlay: Animated film grain texture overlay (extracted from warm-grain example)
- shimmer-sweep: CSS gradient light sweep across text/elements (AI accent effect)
- grid-pixelate-wipe: Grid-based dissolve transition between scenes

Each component includes a snippet HTML for embedding and a demo.html for
previewing. Establishes the demo.html convention in CONTRIBUTING.md.
@jrusso1020
jrusso1020 force-pushed the 04-14-feat_registry_seed_components_grain-overlay_shimmer-sweep_grid-pixelate-wipe branch from f805fc8 to a8595ca Compare April 14, 2026 23:17
@jrusso1020
jrusso1020 merged commit b0f754a into main Apr 14, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants