Skip to content

Feat/devtools#24

Merged
J-Ben merged 31 commits into
mainfrom
feat/devtools
Jun 23, 2026
Merged

Feat/devtools#24
J-Ben merged 31 commits into
mainfrom
feat/devtools

Conversation

@J-Ben

@J-Ben J-Ben commented Jun 23, 2026

Copy link
Copy Markdown
Owner

Summary

What does this PR do?

Type of change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation update

Checklist

  • npm run build passes
  • npm run typecheck passes
  • npm test passes
  • Changeset added (npx changeset)

J-Ben and others added 30 commits June 1, 2026 00:02
Add cascade?: number to SkeletonConfig. Each bone's animation is delayed
by bone.y × cascade ms, creating a top-to-bottom sequential wave effect.

- Web: animationDelay applied to animated element for all modes
  (pulse, slide, beat on outer div; wave/shiver on inner shimmer div;
  shatter adds cascade offset on top of each cell's existing delay;
  drip uses cascade as the ms/px rate, replacing the hardcoded 3ms)
- Native: per-bone Animated.Value driven with Animated.delay(bone.y × cascade)
  for pulse/slide/beat and wave/shiver; drip uses cascade as phase offset rate
- Exposed on SkeletonTheme and skeletonConfig (per-component)
- Default: 0 (all bones animate simultaneously, no behaviour change)
- shaker animation: rapid horizontal vibration burst then long rest
- SkeletonBox: container rendered as semi-transparent bone (opacity 0.25, static) with children on top
- SkeletonIgnore: elements always visible during skeleton, skipped from measurement entirely
- cascade: bones now fade in progressively in addition to staggering their animation
- fix: removed opacity:0 from hidden wrapper so SkeletonIgnore punches through overlay
- feat: Bone.isStatic flag — SkeletonBox bones never animate
- web/native: measureLayout detects __skl_box__ and __skl_ignore__ via data-testid/testID
- native: nestLayouts builds nested BoneTree for SkeletonBox by geometric containment
- Apply animation delay directly to bones instead of fade-in wrapper
- Cascade now staggers bone animations sequentially from top to bottom
- Matches mobile cascade behavior for consistent UX across platforms

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove wrapper div approach, let SkeletonBone handle cascade delay
- SkeletonBone already applies animationDelay based on config.cascade
- Each bone now starts animation with correct staggered delay
- Matches mobile behavior exactly

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add an image and enhance the introduction section.
Wrap a block of text so it skeletons into several lines instead of one
solid block: ragged line widths, shortened last line.

- size presets (sm=2, md=3, lg=5) or explicit lines={n}
- align (left/center/right), inherited from the component's textAlign
- mode="words": each line split into word-sized bones
- deterministic widths (no flicker); web + React Native (iOS/Android)
feat: SkeletonParagraph : multi-line text skeletons
Skelter detects nothing itself. The consumer provides live signals
(network, battery, saveData, deviceTier, custom…) and a policy
(when→use matrix or function). The resolver picks the animation;
reduced-motion accessibility still forces none.

- types: SkeletonConditions, AdaptiveRule, Adaptive, NetworkType, DeviceTier
- SkeletonConfig: conditions + adaptive fields
- core/adaptive.ts: pure resolver, zero deps
- useSkeleton (web + native): resolved animation replaces animation in merge
- 12 tests
chore: expand npm keywords for discoverability
…olish

- bonesCount and x-ray overlay now derive from the measured boneTree
  directly instead of a visibility-gated bones cache, fixing components
  that mount already-loaded (e.g. list items with changed keys)
- panel opens anchored to the bottom of the screen instead of mid-screen
- panel pops open/closed from/to the floating button (scale+translate+fade)
- per-component x-ray toggle from the devtools panel list (click row, not
  just the score badge)
- light/dark theme toggle for the panel, default dark, slightly transparent
- replaced emoji glyphs with vector icons (graceful text fallback if
  react-native-svg is absent)
- shadow on the panel (was clipped by the sheet's overflow:hidden)
- bounce/scale animation on the floating devtools button press
…dd global score to FAB, fix score chip shape

- web scoring effect, hover x-ray overlay, and click-to-inspect overlay now
  use boneTree-derived bones instead of the visibility-gated cache, fixing
  components that mount already-loaded (matches the native fix)
- web FAB badge now shows the average match score (like native), not just
  a mounted-component count
- score/force badges use inline-flex + line-height:1 to render as proper
  pill chips instead of circles (was a monospace line-height quirk)
…nt, remove buggy per-component force toggle

The legend/tooltip in InspectionOverlay was positioned relative to the
skeleton's estimated height instead of the real rendered component's
height, causing it to overlap card content when the real component was
taller than its skeleton estimate.

The per-component force-load button caused the devtools panel list to
reorder and silently fail to trigger loading on the targeted instance;
removed until the underlying registration timing issue is root-caused.

Bumps the devtools-panel changeset to major (2.0.0): the per-component
force capability advertised in that changeset no longer exists.
@J-Ben J-Ben merged commit edbf520 into main Jun 23, 2026
0 of 3 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.

1 participant