4탭 구성: Dashboard, Research, Write, Posts - BlogMarketing.jsx/css: 키워드 분석, AI 글 생성, 품질 리뷰, 발행 관리 - api.js: blog-marketing API 함수 15개 추가 - routes.jsx + Icons.jsx: Blog Lab 네비게이션 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
118 lines
3.4 KiB
JavaScript
118 lines
3.4 KiB
JavaScript
const S = {
|
|
fill: 'none',
|
|
stroke: 'currentColor',
|
|
strokeWidth: '1.6',
|
|
strokeLinecap: 'round',
|
|
strokeLinejoin: 'round',
|
|
};
|
|
|
|
const svg = (children) => (
|
|
<svg width="18" height="18" viewBox="0 0 24 24" {...S}>
|
|
{children}
|
|
</svg>
|
|
);
|
|
|
|
export const IconHome = () =>
|
|
svg(
|
|
<>
|
|
<path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" />
|
|
<polyline points="9,22 9,12 15,12 15,22" />
|
|
</>
|
|
);
|
|
|
|
export const IconBlog = () =>
|
|
svg(
|
|
<>
|
|
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" />
|
|
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" />
|
|
</>
|
|
);
|
|
|
|
export const IconLotto = () =>
|
|
svg(
|
|
<>
|
|
<circle cx="12" cy="12" r="10" />
|
|
<circle cx="8.5" cy="9.5" r="1.4" fill="currentColor" strokeWidth="0" />
|
|
<circle cx="15.5" cy="9.5" r="1.4" fill="currentColor" strokeWidth="0" />
|
|
<circle cx="8.5" cy="14.5" r="1.4" fill="currentColor" strokeWidth="0" />
|
|
<circle cx="15.5" cy="14.5" r="1.4" fill="currentColor" strokeWidth="0" />
|
|
<circle cx="12" cy="12" r="1.4" fill="currentColor" strokeWidth="0" />
|
|
</>
|
|
);
|
|
|
|
export const IconStock = () =>
|
|
svg(
|
|
<>
|
|
<polyline points="22,7 13.5,15.5 8.5,10.5 2,17" />
|
|
<polyline points="16,7 22,7 22,13" />
|
|
</>
|
|
);
|
|
|
|
export const IconTravel = () =>
|
|
svg(<polygon points="3,11 22,2 13,21 11,13 3,11" />);
|
|
|
|
export const IconMusic = () =>
|
|
svg(
|
|
<>
|
|
<path d="M9 18V5l12-2v13" />
|
|
<circle cx="6" cy="18" r="3" />
|
|
<circle cx="18" cy="16" r="3" />
|
|
</>
|
|
);
|
|
|
|
export const IconLab = () =>
|
|
svg(
|
|
<>
|
|
<line x1="9" y1="3" x2="15" y2="3" />
|
|
<path d="M10 3v6.5L5.5 17.5A2 2 0 0 0 7.3 20h9.4a2 2 0 0 0 1.8-2.5L14 9.5V3" />
|
|
<line x1="6.5" y1="15" x2="17.5" y2="15" />
|
|
</>
|
|
);
|
|
|
|
export const IconTodo = () =>
|
|
svg(
|
|
<>
|
|
<rect x="3" y="5" width="6" height="6" rx="1" />
|
|
<polyline points="9,8 11,10 15,6" />
|
|
<rect x="3" y="13" width="6" height="6" rx="1" />
|
|
<line x1="13" y1="16" x2="21" y2="16" />
|
|
<line x1="13" y1="8" x2="21" y2="8" />
|
|
<line x1="17" y1="12" x2="21" y2="12" />
|
|
</>
|
|
);
|
|
|
|
export const IconSubscription = () =>
|
|
svg(
|
|
<>
|
|
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" />
|
|
<polyline points="14,2 14,8 20,8" />
|
|
<polyline points="9,15 11,17 15,13" />
|
|
<line x1="9" y1="10" x2="15" y2="10" />
|
|
</>
|
|
);
|
|
|
|
export const IconBlogMarketing = () =>
|
|
svg(
|
|
<>
|
|
<path d="M4 4h16v16H4z" />
|
|
<path d="M8 8h8" />
|
|
<path d="M8 12h5" />
|
|
<circle cx="17" cy="15" r="2.5" fill="currentColor" strokeWidth="0" />
|
|
<path d="M15.5 13l3 4" />
|
|
</>
|
|
);
|
|
|
|
export const IconBuilding = () =>
|
|
svg(
|
|
<>
|
|
<rect x="3" y="3" width="18" height="18" rx="2" />
|
|
<path d="M9 21V9" />
|
|
<rect x="6" y="6" width="3" height="3" />
|
|
<rect x="11" y="6" width="3" height="3" />
|
|
<rect x="16" y="6" width="2" height="3" />
|
|
<rect x="11" y="11" width="3" height="3" />
|
|
<rect x="16" y="11" width="2" height="3" />
|
|
<rect x="11" y="16" width="3" height="3" />
|
|
</>
|
|
);
|