공개 문서
docs/reference/omni-command-palette/PROMPT-USER-ORIGINAL-OMNI.md
아래는 docs/reference/omni-command-palette/PROMPT-USER-ORIGINAL-OMNI.md 와 동일한 원문입니다. Markdown과 HTML 변환 결과를 각각 복사할 수 있습니다.
공개 문서 원문 (Markdown)
# Omni Command Palette — 요약·주의사항
> 사용자·기획 관점 메모 (구현 시 준수)
## 의도
- **한 곳에서** 명령·문서·링크를 검색해 이동 (Spotlight / VS Code Command Palette 유사).
- 허브마다 **데이터 소스(`OmniSource`)만 교체**하고 UI 셸은 공유.
- **⌘K (macOS) / Ctrl+K (Windows)** 를 기본 단축키로 고정.
## UX 주의
1. **포커스 트랩** — Dialog 안에서만 키보드 탐색; Esc 로 닫기.
2. **debounce** — 원격 `fetch` 소스는 기본 120ms 디바운스 (`debounceMs`).
3. **최근 항목** — `storageKey` 별로 localStorage; 민감 URL은 저장하지 않도록 `onItemExecuted` 에서 필터.
4. **외부 링크** — `href` 가 있으면 `next/link` 또는 `router.push` 정책에 맞게 처리 (전체 새로고침 남용 금지).
5. **접근성** — 활성 항목 시각·키보드(↑↓ Enter) 지원 유지.
## 구현 위치
| 항목 | 경로 |
|------|------|
| 코어 UI | `components/ui/omni-command-palette.tsx` |
| 데모 | `components/ui/omni-command-palette-demo.tsx`, `app/omni-demo/page.tsx` |
| 허브 통합 예 | `components/detailpage-hub/hub-command-palette.tsx` (프로젝트별 인덱스) |
## 하지 말 것
- 존재하지 않는 `@/components/ui` 배럴 export 가정 (대부분 **서브경로 import**).
- 팔레트 없이 허브마다 **일회성 검색 UI** 를 새로 만들기.
- 프로덕션 URL 을 deploy-preview 임시 도메인으로 문서화하기 (`https://saas-engine-xi.vercel.app` 고정).
## 더 보기
- [README](./README.md) — API·props 상세
- [frontend-section-conventions.md](../frontend-section-conventions.md)
공개 문서 변환 코드 (HTML)
<h1>Omni Command Palette — 요약·주의사항</h1>
<blockquote>
<p>사용자·기획 관점 메모 (구현 시 준수)</p>
</blockquote>
<h2>의도</h2>
<ul>
<li><strong>한 곳에서</strong> 명령·문서·링크를 검색해 이동 (Spotlight / VS Code Command Palette 유사).</li>
<li>허브마다 <strong>데이터 소스(<code>OmniSource</code>)만 교체</strong>하고 UI 셸은 공유.</li>
<li><strong>⌘K (macOS) / Ctrl+K (Windows)</strong> 를 기본 단축키로 고정.</li>
</ul>
<h2>UX 주의</h2>
<ol>
<li><strong>포커스 트랩</strong> — Dialog 안에서만 키보드 탐색; Esc 로 닫기.</li>
<li><strong>debounce</strong> — 원격 <code>fetch</code> 소스는 기본 120ms 디바운스 (<code>debounceMs</code>).</li>
<li><strong>최근 항목</strong> — <code>storageKey</code> 별로 localStorage; 민감 URL은 저장하지 않도록 <code>onItemExecuted</code> 에서 필터.</li>
<li><strong>외부 링크</strong> — <code>href</code> 가 있으면 <code>next/link</code> 또는 <code>router.push</code> 정책에 맞게 처리 (전체 새로고침 남용 금지).</li>
<li><strong>접근성</strong> — 활성 항목 시각·키보드(↑↓ Enter) 지원 유지.</li>
</ol>
<h2>구현 위치</h2>
<table>
<thead>
<tr>
<th>항목</th>
<th>경로</th>
</tr>
</thead>
<tbody><tr>
<td>코어 UI</td>
<td><code>components/ui/omni-command-palette.tsx</code></td>
</tr>
<tr>
<td>데모</td>
<td><code>components/ui/omni-command-palette-demo.tsx</code>, <code>app/omni-demo/page.tsx</code></td>
</tr>
<tr>
<td>허브 통합 예</td>
<td><code>components/detailpage-hub/hub-command-palette.tsx</code> (프로젝트별 인덱스)</td>
</tr>
</tbody></table>
<h2>하지 말 것</h2>
<ul>
<li>존재하지 않는 <code>@/components/ui</code> 배럴 export 가정 (대부분 <strong>서브경로 import</strong>).</li>
<li>팔레트 없이 허브마다 <strong>일회성 검색 UI</strong> 를 새로 만들기.</li>
<li>프로덕션 URL 을 deploy-preview 임시 도메인으로 문서화하기 (<code>https://saas-engine-xi.vercel.app</code> 고정).</li>
</ul>
<h2>더 보기</h2>
<ul>
<li><a href="./README.md">README</a> — API·props 상세</li>
<li><a href="../frontend-section-conventions.md">frontend-section-conventions.md</a></li>
</ul>