Compare commits

3 Commits

Author SHA1 Message Date
2a89d52634 merge: 인스타 슬레이트 패키지 다운로드 버튼
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 13:39:49 +09:00
6958714021 fix: 다운로드 버튼 hover 색상 일관성 (a.ic-btn color inherit)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 13:06:52 +09:00
52677c606a feat: 인스타 슬레이트 패키지 다운로드 버튼
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 13:03:43 +09:00
3 changed files with 8 additions and 0 deletions

View File

@@ -548,6 +548,8 @@ export function getInstaAssetUrl(slateId, page) {
return `/api/insta/slates/${slateId}/assets/${page}`; return `/api/insta/slates/${slateId}/assets/${page}`;
} }
export const instaPackageUrl = (slateId) => `/api/insta/slates/${slateId}/package`;
export function getInstaTask(taskId) { export function getInstaTask(taskId) {
return apiGet(`/api/insta/tasks/${encodeURIComponent(taskId)}`); return apiGet(`/api/insta/tasks/${encodeURIComponent(taskId)}`);
} }

View File

@@ -23,6 +23,8 @@
.ic-btn--danger { background: rgba(239,68,68,.15); color: #ef4444; } .ic-btn--danger { background: rgba(239,68,68,.15); color: #ef4444; }
.ic-btn--danger:hover { background: rgba(239,68,68,.25); } .ic-btn--danger:hover { background: rgba(239,68,68,.25); }
.ic-btn--sm { padding: 4px 10px; font-size: 0.75rem; } .ic-btn--sm { padding: 4px 10px; font-size: 0.75rem; }
a.ic-btn { color: inherit; }
a.ic-btn:hover { color: inherit; }
.ic-spinner { width: 14px; height: 14px; border: 2px solid rgba(255,255,255,.3); border-top-color: #fff; border-radius: 50%; animation: ic-spin .6s linear infinite; display: inline-block; } .ic-spinner { width: 14px; height: 14px; border: 2px solid rgba(255,255,255,.3); border-top-color: #fff; border-radius: 50%; animation: ic-spin .6s linear infinite; display: inline-block; }
@keyframes ic-spin { to { transform: rotate(360deg); } } @keyframes ic-spin { to { transform: rotate(360deg); } }

View File

@@ -11,6 +11,7 @@ import {
renderInstaSlate, renderInstaSlate,
deleteInstaSlate, deleteInstaSlate,
getInstaAssetUrl, getInstaAssetUrl,
instaPackageUrl,
getInstaTask, getInstaTask,
getInstaPrompt, getInstaPrompt,
putInstaPrompt, putInstaPrompt,
@@ -832,6 +833,9 @@ function SlateDetail({ slate, onDelete, onRender }) {
</div> </div>
<div className="ic-detail__actions"> <div className="ic-detail__actions">
<button className="ic-btn ic-btn--secondary ic-btn--sm" onClick={onRender}>재렌더</button> <button className="ic-btn ic-btn--secondary ic-btn--sm" onClick={onRender}>재렌더</button>
<a className="ic-btn ic-btn--secondary ic-btn--sm" href={instaPackageUrl(slate.id)} download>
📦 패키지 다운로드 (10 + 캡션)
</a>
<button className="ic-btn ic-btn--danger ic-btn--sm" onClick={onDelete}>삭제</button> <button className="ic-btn ic-btn--danger ic-btn--sm" onClick={onDelete}>삭제</button>
</div> </div>
</div> </div>