Skip to content

feat: +24 hooks (41 → 65) — Tiers 1–3, refreshed meta & banner - #6

Merged
devsaifmohamed merged 6 commits into
mainfrom
feat/hooks-tier-1
Jul 20, 2026
Merged

feat: +24 hooks (41 → 65) — Tiers 1–3, refreshed meta & banner#6
devsaifmohamed merged 6 commits into
mainfrom
feat/hooks-tier-1

Conversation

@devsaifmohamed

Copy link
Copy Markdown
Owner

Grows the catalog from 41 → 65 hooks across three tiers, all SSR-safe, typed, and tested.

Tier 1 — expected-pair gaps (8)

useThrottle · usePrevious · useUpdateEffect · useEffectOnce · useList · useSet · useKeyPress · useWindowScroll

Tier 2 — fills the thin data category, 2 → 8 (6)

useAsync · useMutation · usePagination · useNetworkState · usePageVisibility · useIdle

Tier 3 — rounding-out (10)

useQueue · useDefault · useRafState · useDeepCompareEffect · useTextSelection · useLongPress · useHotkeys · useFullscreen · useBattery · usePermission

Also

  • npm meta — sharper description + expanded keywords (react, typescript, ssr, nextjs, tree-shakable, esm, popular hook names) for discoverability
  • Banner — regenerated "wall of hooks" now reads 65 React hooks. One import. (count + names live from the manifest)
  • packages/hookli/ROADMAP.md — tracks the tiers; all three lib tracks ✅, per-hook docs demos the remaining open track (new hooks currently render minimal auto-pages that degrade gracefully)

Quality

  • 196 tests passing (was 143) · tsc --noEmit clean · tsup build clean · docs site builds (65 pages)
  • Experimental-API hooks (fullscreen/battery/permission) guard for unavailability & SSR

Backward-compatible → next publish is a minor (1.5.0 → 1.6.0).

🤖 Generated with Claude Code

devsaifmohamed and others added 6 commits July 20, 2026 18:52
…st/set, keypress, scroll

Eight commonly-expected hooks (41 → 49), each with a colocated vitest test:
- useThrottle    — twin of useDebounce (value throttled to one update/interval)
- usePrevious    — previous render's value
- useUpdateEffect — useEffect that skips the initial mount
- useEffectOnce  — run-once effect
- useList        — array state (push/insertAt/updateAt/removeAt/clear/reset)
- useSet         — Set state (add/remove/toggle/has/clear/reset)
- useKeyPress    — true while a key is held (window listeners, SSR-safe)
- useWindowScroll — reactive { x, y } scroll position

All SSR-safe, typed public APIs, registered in the barrel + manifest; README
regenerated (49 hooks). Adds ROADMAP.md to track Tiers 1–2 + DX enhancements.
Library gate green (163 tests); docs build green (new hooks render gracefully).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replaces the static code-window banner with a "wall of hooks" composition:
every hook name tiled as a chip, the well-known ones highlighted in cyan, with
the message "49 React hooks. One import." cutting through on the left. Reads the
count + names live from the manifest. Mirrored to apps/docs/public/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Tier 2 — fills the thin `data` category (2 → 8):
  useAsync, useMutation, usePagination, useNetworkState, usePageVisibility, useIdle
Tier 3 — rounding-out:
  useQueue, useDefault, useRafState, useDeepCompareEffect, useTextSelection,
  useLongPress, useHotkeys, useFullscreen, useBattery, usePermission

All SSR-safe, typed public APIs, colocated vitest tests (196 total), registered
in the barrel + manifest; README regenerated (65 hooks). Experimental-API hooks
(fullscreen/battery/permission) guard for unavailability. ROADMAP updated —
all three tiers' lib track ✅; per-hook docs demos remain the open track.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sharper description (typed, zero-dep, tree-shakable, SSR-safe, ESM+CJS) and
expanded keywords (react, typescript, ssr, nextjs, tree-shakable, esm, plus
popular hook names) for npm discoverability ahead of the next publish.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The wall-of-hooks banner reads the count + names live from the manifest;
regenerated so it reads "65 React hooks. One import." Mirrored to public/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
hookli Ready Ready Preview, Comment Jul 20, 2026 4:37pm

@ecc-tools

ecc-tools Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@saifmohamedsv, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 57 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6a850646-7708-45ef-932a-b222f847d40b

📥 Commits

Reviewing files that changed from the base of the PR and between 5b58b8c and 3faf1ef.

⛔ Files ignored due to path filters (4)
  • apps/docs/public/hookli-banner.png is excluded by !**/*.png
  • apps/docs/public/hookli-banner.svg is excluded by !**/*.svg
  • assets/hookli-banner.png is excluded by !**/*.png
  • assets/hookli-banner.svg is excluded by !**/*.svg
📒 Files selected for processing (78)
  • README.md
  • packages/hookli/README.md
  • packages/hookli/ROADMAP.md
  • packages/hookli/hooks.manifest.json
  • packages/hookli/package.json
  • packages/hookli/src/hooks/index.ts
  • packages/hookli/src/hooks/use-async/index.ts
  • packages/hookli/src/hooks/use-async/use-async.test.ts
  • packages/hookli/src/hooks/use-async/use-async.ts
  • packages/hookli/src/hooks/use-battery/index.ts
  • packages/hookli/src/hooks/use-battery/use-battery.test.ts
  • packages/hookli/src/hooks/use-battery/use-battery.ts
  • packages/hookli/src/hooks/use-deep-compare-effect/index.ts
  • packages/hookli/src/hooks/use-deep-compare-effect/use-deep-compare-effect.test.ts
  • packages/hookli/src/hooks/use-deep-compare-effect/use-deep-compare-effect.ts
  • packages/hookli/src/hooks/use-default/index.ts
  • packages/hookli/src/hooks/use-default/use-default.test.ts
  • packages/hookli/src/hooks/use-default/use-default.ts
  • packages/hookli/src/hooks/use-effect-once/index.ts
  • packages/hookli/src/hooks/use-effect-once/use-effect-once.test.ts
  • packages/hookli/src/hooks/use-effect-once/use-effect-once.ts
  • packages/hookli/src/hooks/use-fullscreen/index.ts
  • packages/hookli/src/hooks/use-fullscreen/use-fullscreen.test.ts
  • packages/hookli/src/hooks/use-fullscreen/use-fullscreen.ts
  • packages/hookli/src/hooks/use-hotkeys/index.ts
  • packages/hookli/src/hooks/use-hotkeys/use-hotkeys.test.ts
  • packages/hookli/src/hooks/use-hotkeys/use-hotkeys.ts
  • packages/hookli/src/hooks/use-idle/index.ts
  • packages/hookli/src/hooks/use-idle/use-idle.test.ts
  • packages/hookli/src/hooks/use-idle/use-idle.ts
  • packages/hookli/src/hooks/use-key-press/index.ts
  • packages/hookli/src/hooks/use-key-press/use-key-press.test.ts
  • packages/hookli/src/hooks/use-key-press/use-key-press.ts
  • packages/hookli/src/hooks/use-list/index.ts
  • packages/hookli/src/hooks/use-list/use-list.test.ts
  • packages/hookli/src/hooks/use-list/use-list.ts
  • packages/hookli/src/hooks/use-long-press/index.ts
  • packages/hookli/src/hooks/use-long-press/use-long-press.test.ts
  • packages/hookli/src/hooks/use-long-press/use-long-press.ts
  • packages/hookli/src/hooks/use-mutation/index.ts
  • packages/hookli/src/hooks/use-mutation/use-mutation.test.ts
  • packages/hookli/src/hooks/use-mutation/use-mutation.ts
  • packages/hookli/src/hooks/use-network-state/index.ts
  • packages/hookli/src/hooks/use-network-state/use-network-state.test.ts
  • packages/hookli/src/hooks/use-network-state/use-network-state.ts
  • packages/hookli/src/hooks/use-page-visibility/index.ts
  • packages/hookli/src/hooks/use-page-visibility/use-page-visibility.test.ts
  • packages/hookli/src/hooks/use-page-visibility/use-page-visibility.ts
  • packages/hookli/src/hooks/use-pagination/index.ts
  • packages/hookli/src/hooks/use-pagination/use-pagination.test.ts
  • packages/hookli/src/hooks/use-pagination/use-pagination.ts
  • packages/hookli/src/hooks/use-permission/index.ts
  • packages/hookli/src/hooks/use-permission/use-permission.test.ts
  • packages/hookli/src/hooks/use-permission/use-permission.ts
  • packages/hookli/src/hooks/use-previous/index.ts
  • packages/hookli/src/hooks/use-previous/use-previous.test.ts
  • packages/hookli/src/hooks/use-previous/use-previous.ts
  • packages/hookli/src/hooks/use-queue/index.ts
  • packages/hookli/src/hooks/use-queue/use-queue.test.ts
  • packages/hookli/src/hooks/use-queue/use-queue.ts
  • packages/hookli/src/hooks/use-raf-state/index.ts
  • packages/hookli/src/hooks/use-raf-state/use-raf-state.test.ts
  • packages/hookli/src/hooks/use-raf-state/use-raf-state.ts
  • packages/hookli/src/hooks/use-set/index.ts
  • packages/hookli/src/hooks/use-set/use-set.test.ts
  • packages/hookli/src/hooks/use-set/use-set.ts
  • packages/hookli/src/hooks/use-text-selection/index.ts
  • packages/hookli/src/hooks/use-text-selection/use-text-selection.test.ts
  • packages/hookli/src/hooks/use-text-selection/use-text-selection.ts
  • packages/hookli/src/hooks/use-throttle/index.ts
  • packages/hookli/src/hooks/use-throttle/use-throttle.test.ts
  • packages/hookli/src/hooks/use-throttle/use-throttle.ts
  • packages/hookli/src/hooks/use-update-effect/index.ts
  • packages/hookli/src/hooks/use-update-effect/use-update-effect.test.ts
  • packages/hookli/src/hooks/use-update-effect/use-update-effect.ts
  • packages/hookli/src/hooks/use-window-scroll/index.ts
  • packages/hookli/src/hooks/use-window-scroll/use-window-scroll.test.ts
  • packages/hookli/src/hooks/use-window-scroll/use-window-scroll.ts
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/hooks-tier-1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ecc-tools

ecc-tools Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@devsaifmohamed
devsaifmohamed merged commit 7b5fdba into main Jul 20, 2026
4 checks passed
@devsaifmohamed
devsaifmohamed deleted the feat/hooks-tier-1 branch July 20, 2026 16:53
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