@loke/design-system
Version:
A design system with individually importable components
66 lines (63 loc) • 2.65 kB
JavaScript
module.exports=`<h1>hooks</h1>
<!-- Parent: ../CLAUDE.md -->
<!-- Generated: 2026-04-07 | Updated: 2026-04-07 -->
<h2>Purpose</h2>
<p>Custom React hooks for the design system. These hooks are shared utilities used in 2+ places across components and applications.</p>
<h2>For AI Agents</h2>
<h3>Hook Organization</h3>
<p>Hooks are organized in subdirectories by purpose, one hook per directory:</p>
<pre><code>hooks/
├── use-mobile/
│ ├── index.ts (export)
│ └── useMobile.ts (implementation)
└── AGENTS.md
</code></pre>
<h3>Creating a New Hook</h3>
<ol>
<li>Create a new subdirectory: <code>hooks/use-name/</code></li>
<li>Implement in <code>useName.ts</code></li>
<li>Export from <code>index.ts</code></li>
<li>Add types and documentation</li>
</ol>
<p>Example:</p>
<pre><code class="language-ts">// hooks/use-name/useName.ts
export function useName(): ReturnType {
// Implementation
}
// hooks/use-name/index.ts
export { useName } from "./useName";
</code></pre>
<h2>Existing Hooks</h2>
<h3>useIsMobile</h3>
<p>Detects if the viewport is mobile (< 768px width) using the MediaQueryList API.</p>
<p><strong>Location</strong>: <code>use-mobile/</code></p>
<p><strong>Usage</strong>:</p>
<pre><code class="language-ts">import { useIsMobile } from "@loke/design-system/use-mobile";
function MyComponent() {
const isMobile = useIsMobile();
return <div>{isMobile ? "Mobile" : "Desktop"}</div>;
}
</code></pre>
<p><strong>Behavior</strong>:</p>
<ul>
<li>Returns <code>boolean</code> (initial: <code>false</code>, updates on viewport change)</li>
<li>Uses <code>window.matchMedia("(max-width: 767px)")</code> to detect breakpoint changes</li>
<li>Updates state on <code>change</code> event</li>
<li>Breakpoint: 768px (Tailwind's <code>md</code> breakpoint)</li>
</ul>
<p><strong>Implementation Notes</strong>:</p>
<ul>
<li>Initializes state as <code>undefined</code>, returns <code>!!isMobile</code> (converts to boolean)</li>
<li>Listener cleanup on unmount</li>
<li>No dependencies</li>
</ul>
<h2>MANUAL</h2>
<p><strong>Design System Hook Patterns</strong></p>
<ul>
<li>Hooks deduplicate complexity used in 2+ places</li>
<li>One-off hooks should live in the component using them (not here)</li>
<li>All hooks are exported from design system subpaths (e.g., <code>@loke/design-system/use-mobile</code>)</li>
<li>Add types, JSDoc comments, and implementation notes for future maintainers</li>
</ul>
<p><strong>Export entries</strong> for hooks are defined in <code>packages/design-system/package.json</code> <code>exports</code>.</p>
`;