feat(COMPT-34): README, v0.1.0 version bump, publish preparation#11
feat(COMPT-34): README, v0.1.0 version bump, publish preparation#11
Conversation
- Full README with installation, SSR note, 12 hook examples with types - Remove __hooks_placeholder from hooks barrel - Fix COMPT-30 changeset package name (reactts-developerkit -> hooks-kit) - Apply changeset version bump: 0.0.0 -> 0.1.0 - Remove duplicate root-level test files (already in __tests__/) - Update copilot-instructions.md with COMPT-34 status
|
There was a problem hiding this comment.
Pull request overview
Prepares @ciscode/hooks-kit for an initial public release by updating documentation, removing placeholder exports, and applying the Changesets-driven version/changelog updates.
Changes:
- Replaced the template README with full package documentation (installation, SSR notes, and examples for each hook).
- Bumped package version to
0.1.0and added a generatedCHANGELOG.md. - Cleaned up publishing metadata by removing the placeholder hook export and consuming/removing prior changeset files.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
src/hooks/index.ts |
Removes the placeholder export from the hook barrel. |
README.md |
Adds full consumer-facing documentation and examples for the hooks. |
package.json |
Bumps version from 0.0.0 to 0.1.0. |
CHANGELOG.md |
Introduces a changelog for 0.1.0 aggregating prior work. |
.github/instructions/copilot-instructions.md |
Marks COMPT-34 as completed in internal module instructions. |
.changeset/COMPT-30-state-storage-hooks.md |
Removed after versioning/changelog generation. |
.changeset/COMPT-31-dom-event-hooks.md |
Removed after versioning/changelog generation. |
.changeset/COMPT-32-async-lifecycle-hooks.md |
Removed after versioning/changelog generation. |
.changeset/COMPT-33-test-suite.md |
Removed after versioning/changelog generation. |
| import { useDebounce } from '@ciscode/hooks-kit'; | ||
|
|
||
| function SearchInput() { | ||
| const [query, setQuery] = useState(''); | ||
| const debouncedQuery = useDebounce(query, 300); |
There was a problem hiding this comment.
In the useDebounce example, useState/useEffect are used but not imported. As written, the snippet won’t compile when copy/pasted; add the relevant React imports (or qualify with React.useState/React.useEffect).
| import { usePrevious } from '@ciscode/hooks-kit'; | ||
|
|
||
| function Counter() { | ||
| const [count, setCount] = useState(0); | ||
| const prevCount = usePrevious(count); |
There was a problem hiding this comment.
In the usePrevious example, useState is used but not imported from React. This makes the example invalid when copy/pasted; import useState (or use React.useState).
| MIT — see [LICENSE](./LICENSE). | ||
|
|
||
| - `npm run lint` – ESLint | ||
| - `npm run format` / `npm run format:write` – Prettier | ||
| - `npx changeset` – create a changeset |
There was a problem hiding this comment.
These script bullets appear under the ## License section, which breaks the README structure and duplicates the earlier ## Scripts section. Move these items into the Scripts section (or remove them if redundant) so License contains only licensing information.
|
|
||
| Template repository for building reusable React TypeScript **npm libraries** | ||
| (components + hooks + utilities). | ||
| 12 production-ready React hooks. Zero runtime dependencies. SSR-safe. |
There was a problem hiding this comment.
The README claims the package provides "12" hooks, but the public hook barrel currently exports useNoop in addition to the 12 documented hooks (so consumers see 13 exports from @ciscode/hooks-kit). Either document useNoop/update the count, or stop exporting it publicly to keep the README accurate.
| - **DOM & Events** (COMPT-31 ✅) — `useMediaQuery`, `useWindowSize`, `useClickOutside`, `useIntersectionObserver` | ||
| - **Async & Lifecycle** (COMPT-32 ✅) — `usePrevious`, `useToggle`, `useInterval`, `useTimeout`, `useIsFirstRender` | ||
| - **Test Suite** (COMPT-33 ✅) — Full coverage for all 12 hooks, all tests in `src/hooks/__tests__/` | ||
| - **README & Publish** (COMPT-34 ✅) — Full README with usage examples, v0.1.0 published to `@ciscode/hooks-kit` |
There was a problem hiding this comment.
This line states that v0.1.0 is already "published" to npm, but the PR title/description indicate this is publish preparation. Consider rewording to avoid asserting the release has happened (e.g., "ready to publish" / "v0.1.0 prepared").
* initiated dev environment * ops: updated SOnar name * ops (ci): standardize publish validation and dependabot across all packages - Replace git tag --list strategy with package.json-driven tag validation in all 16 publish workflows; use git rev-parse to verify the exact tag exists rather than guessing the latest repo-wide tag - Update error guidance to reflect feat/** → develop → master flow - Standardize dependabot to npm-only, grouped, monthly cadence across all 16 packages; remove github-actions ecosystem updates - Add missing dependabot.yml to AuthKit-UI, ChartKit-UI, HealthKit, HooksKit, paymentkit, StorageKit * chore(COMPT-138): apply repository-wide prettier baseline (#4) - Run prettier --write across repository - No logic/behavior changes - Unblocks CI PR Validation format gate for feature PRs - verify passes: lint + typecheck + tests * Feat/compt 30 state storage hooks (#6) * feat(COMPT-30): add useDebounce, useLocalStorage, useSessionStorage hooks - useDebounce<T>(value, delay): returns debounced value, resets timer on value/delay change - useLocalStorage<T>(key, initial): syncs with localStorage, SSR-safe, JSON serialization - useSessionStorage<T>(key, initial): same pattern for sessionStorage - Shared storage.ts helper with readStorageValue/writeStorageValue (SSR guard + parse fallback) - All three exported from src/hooks/index.ts -> src/index.ts - Full test coverage: timer reset, JSON sync, parse error fallback, SSR guard - tsc --noEmit passes, lint passes (0 warnings), 13/13 tests pass * chore(COMPT-30): add changeset, update copilot-instructions, fix husky pre-commit - .changeset/COMPT-30-state-storage-hooks.md: minor bump summary for 0.0.1 release - .github/instructions/copilot-instructions.md: updated to HooksKit package identity, real src structure with COMPT-30 hooks marked, COMPT-XX branch naming convention - .husky/pre-commit: removed deprecated husky v9 shebang lines (breaks in v10) * Feat/compt 31 dom event hooks (#8) * feat(COMPT-31): add useMediaQuery, useWindowSize, useClickOutside, useIntersectionObserver - useMediaQuery(query): tracks matchMedia via useSyncExternalStore, SSR-safe (server snapshot false) - useWindowSize(): returns {width, height}, debounced 100ms on resize, SSR-safe ({0,0}) - useClickOutside(ref, handler): fires on mousedown/touchstart outside ref; handler via ref pattern - useIntersectionObserver(ref, options?): IntersectionObserverEntry|null, disconnects on unmount - All listeners registered in useEffect with cleanup return - All SSR-safe: typeof window === undefined guards - Zero runtime dependencies - tsc --noEmit passes, lint passes (0 warnings), 26/26 tests pass, coverage >= 95% - All four exported from src/hooks/index.ts -> src/index.ts - Changeset added, copilot-instructions.md updated for epic COMPT-2 * test(COMPT-31): reduce duplicated test blocks for Sonar quality gate - remove accidental duplicated useMediaQuery suite block - extract shared viewport setup in useWindowSize tests - extract shared mount helper in useClickOutside tests - keep behavior coverage unchanged * Feat/compt 32 async lifecycle hooks (#9) * feat(COMPT-32): add usePrevious, useToggle, useInterval, useTimeout, useIsFirstRender - usePrevious<T>(value): previous render value via state-derivation; undefined on first render - useToggle(initial?): boolean toggle with stable useCallback reference - useInterval(callback, delay|null): fires at cadence, stops on null, latest callback via ref - useTimeout(callback, delay|null): fires once, cancels on null or unmount, latest callback via ref - useIsFirstRender(): true only on first render (scoped eslint-disable for intentional ref access) - All timer cleanup in useEffect return — StrictMode safe - Zero runtime deps; tsc --noEmit passes, lint passes, 25/25 tests, hooks coverage >= 98% - All five exported from src/hooks/index.ts -> src/index.ts - Changeset added, copilot-instructions.md updated with all three COMPT groups complete * refactor(COMPT-32): move hook tests to src/hooks/__tests__/ - Moved all 5 hook test files from src/hooks/ to src/hooks/__tests__/ - Updated relative imports from ./hook to ../hook - No logic changes; all 25 tests still pass * test(COMPT-33): consolidate all hook tests into src/hooks/__tests__/ (#10) - Move useDebounce, useLocalStorage, useSessionStorage, useMediaQuery, useWindowSize, useClickOutside, useIntersectionObserver tests to __tests__/ - Update relative imports from ./ to ../ - All 12 hooks covered: fake timers for debounce/interval/timeout/windowSize, mock matchMedia, mock IntersectionObserver, storage parse-error guards - 55 tests passing, 97.44% line coverage (>= 85% AC) * security: added CODEOWNER file for branches security * ops: updated release check workflow * ops: updated relese check workflow# * feat(COMPT-34): README, v0.1.0 version bump, publish preparation (#11) - Full README with installation, SSR note, 12 hook examples with types - Remove __hooks_placeholder from hooks barrel - Fix COMPT-30 changeset package name (reactts-developerkit -> hooks-kit) - Apply changeset version bump: 0.0.0 -> 0.1.0 - Remove duplicate root-level test files (already in __tests__/) - Update copilot-instructions.md with COMPT-34 status Co-authored-by: a-elkhiraooui-ciscode <a.elkhiraoui@ciscod.com> * ci: update release check workflow * ops: updated release check jobs. * v0.1.0 * fix(ci): correct sonar test directory and inclusion patterns --------- Co-authored-by: Zaiidmo <zaiidmoumnii@gmail.com> Co-authored-by: Zaiid Moumni <141942826+Zaiidmo@users.noreply.github.com>



Summary
Why
Checklist
npm run lintpassesnpm run typecheckpassesnpm testpassesnpm run buildpassesnpx changeset) if this affects consumersNotes