boottent-design 0.1.256 → 0.1.258
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -1
- package/bin/sync-docs.mjs +179 -0
- package/dist/article-asset-card-CGSemovn.cjs +1 -0
- package/dist/{article-asset-card-lw8aNjSM.js → article-asset-card-D1Ipe86b.js} +3 -2
- package/dist/camp-card-BRs3koNF.cjs +1 -0
- package/dist/{camp-card-7lzkmQep.js → camp-card-Bi7Li0p5.js} +3 -2
- package/dist/company-info-card-C00gMHAv.cjs +1 -0
- package/dist/{company-info-card-BVCaYbYN.js → company-info-card-D1U_poOk.js} +3 -2
- package/dist/components/article-asset-card.cjs.js +1 -1
- package/dist/components/article-asset-card.es.js +1 -1
- package/dist/components/camp-card.cjs.js +1 -1
- package/dist/components/camp-card.es.js +1 -1
- package/dist/components/company-info-card.cjs.js +1 -1
- package/dist/components/company-info-card.es.js +1 -1
- package/dist/components/event-card.cjs.js +1 -1
- package/dist/components/event-card.es.js +1 -1
- package/dist/components/lecturer-card.cjs.js +1 -1
- package/dist/components/lecturer-card.es.js +1 -1
- package/dist/components/main-banner-image.cjs.js +1 -1
- package/dist/components/main-banner-image.es.js +1 -1
- package/dist/components/mobile-camp-card.cjs.js +1 -1
- package/dist/components/mobile-camp-card.es.js +1 -1
- package/dist/components/portfolio-asset-card.cjs.js +1 -1
- package/dist/components/portfolio-asset-card.es.js +1 -1
- package/dist/components/premium-card.cjs.js +1 -1
- package/dist/components/premium-card.es.js +1 -1
- package/dist/components/title-tag-card.cjs.js +1 -1
- package/dist/components/title-tag-card.es.js +1 -1
- package/dist/components/youtube-video-modal.cjs.js +1 -1
- package/dist/components/youtube-video-modal.es.js +1 -1
- package/dist/components.cjs.js +1 -1
- package/dist/components.es.js +11 -11
- package/dist/design-system/components/article-asset-card.md +30 -0
- package/dist/design-system/components/blog-review-card.md +29 -0
- package/dist/design-system/components/camp-card.md +58 -0
- package/dist/design-system/components/company-info-card.md +31 -0
- package/dist/design-system/components/environment-asset-photo.md +31 -0
- package/dist/design-system/components/event-asset-banner.md +30 -0
- package/dist/design-system/components/event-card.md +39 -0
- package/dist/design-system/components/lecturer-card.md +37 -0
- package/dist/design-system/components/main-banner-image.md +40 -0
- package/dist/design-system/components/mobile-camp-card.md +60 -0
- package/dist/design-system/components/partner-list-card.md +31 -0
- package/dist/design-system/components/portfolio-asset-card.md +30 -0
- package/dist/design-system/components/premium-card.md +39 -0
- package/dist/design-system/components/title-tag-card.md +38 -0
- package/dist/design-system/components/youtube-video-modal.md +34 -0
- package/dist/design-system/design-system.md +138 -0
- package/dist/design-system/tokens.md +113 -0
- package/dist/design-system/ui/accordion.md +42 -0
- package/dist/design-system/ui/alert-dialog.md +53 -0
- package/dist/design-system/ui/anchor.md +48 -0
- package/dist/design-system/ui/aspect-ratio.md +36 -0
- package/dist/design-system/ui/avatar.md +35 -0
- package/dist/design-system/ui/badge.md +57 -0
- package/dist/design-system/ui/button.md +79 -0
- package/dist/design-system/ui/calendar.md +47 -0
- package/dist/design-system/ui/callout.md +42 -0
- package/dist/design-system/ui/card.md +41 -0
- package/dist/design-system/ui/checkbox.md +38 -0
- package/dist/design-system/ui/circled-check-button.md +33 -0
- package/dist/design-system/ui/command.md +50 -0
- package/dist/design-system/ui/dialog.md +44 -0
- package/dist/design-system/ui/dropdown-menu.md +44 -0
- package/dist/design-system/ui/file-uploader.md +49 -0
- package/dist/design-system/ui/form.md +52 -0
- package/dist/design-system/ui/highlight-text.md +30 -0
- package/dist/design-system/ui/icons.md +17 -0
- package/dist/design-system/ui/image.md +44 -0
- package/dist/design-system/ui/input.md +50 -0
- package/dist/design-system/ui/label.md +38 -0
- package/dist/design-system/ui/month-picker.md +44 -0
- package/dist/design-system/ui/multi-select.md +49 -0
- package/dist/design-system/ui/navigation-menu.md +42 -0
- package/dist/design-system/ui/popover.md +43 -0
- package/dist/design-system/ui/progress.md +45 -0
- package/dist/design-system/ui/radio-group.md +40 -0
- package/dist/design-system/ui/scroll-area.md +32 -0
- package/dist/design-system/ui/select.md +46 -0
- package/dist/design-system/ui/separator.md +32 -0
- package/dist/design-system/ui/simple-table.md +34 -0
- package/dist/design-system/ui/skeleton.md +43 -0
- package/dist/design-system/ui/slider.md +30 -0
- package/dist/design-system/ui/switch.md +30 -0
- package/dist/design-system/ui/symbols.md +17 -0
- package/dist/design-system/ui/tabs.md +44 -0
- package/dist/design-system/ui/tag.md +79 -0
- package/dist/design-system/ui/text.md +50 -0
- package/dist/design-system/ui/textarea.md +45 -0
- package/dist/design-system/ui/toast.md +66 -0
- package/dist/design-system/ui/toggle-group.md +50 -0
- package/dist/design-system/ui/toggle.md +68 -0
- package/dist/design-system/ui/tooltip.md +55 -0
- package/dist/design-system/usage.md +79 -0
- package/dist/design-system/when-to-use.md +127 -0
- package/dist/{event-card-DoePuHu8.js → event-card-C1mSACOR.js} +3 -2
- package/dist/event-card-DebLbRKd.cjs +1 -0
- package/dist/{lecturer-card-B80BJVu3.js → lecturer-card-BlzA-YP6.js} +3 -2
- package/dist/lecturer-card-CgSWLJ8r.cjs +1 -0
- package/dist/{main-banner-image-DoYpMy7T.js → main-banner-image-BRLhiQJZ.js} +8 -7
- package/dist/main-banner-image-Bh3AZqac.cjs +1 -0
- package/dist/mobile-camp-card-B4L0Eq0v.cjs +1 -0
- package/dist/{mobile-camp-card-S0gvQ6bD.js → mobile-camp-card-B8rTQeTh.js} +20 -19
- package/dist/portfolio-asset-card-BdS7kkkT.cjs +1 -0
- package/dist/{portfolio-asset-card-C_opxeH0.js → portfolio-asset-card-DEMARh53.js} +5 -4
- package/dist/premium-card-1vtWPIUr.cjs +1 -0
- package/dist/{premium-card-BzFA2A5p.js → premium-card-CFQKDWqN.js} +14 -13
- package/dist/styles.css +1 -1
- package/dist/{title-tag-card-CEjHX43m.js → title-tag-card-Iowzns_v.js} +3 -2
- package/dist/title-tag-card-MFpE2-Nb.cjs +1 -0
- package/dist/types/progress.d.ts +13 -0
- package/dist/types/ui/progress.d.ts +2 -0
- package/dist/types/ui.d.ts +10 -0
- package/dist/ui/progress.cjs.js +1 -0
- package/dist/ui/progress.es.js +35 -0
- package/dist/ui.cjs.js +1 -1
- package/dist/ui.es.js +101 -99
- package/dist/{youtube-video-modal-CENnr9lf.js → youtube-video-modal-B_vy97Tt.js} +11 -10
- package/dist/youtube-video-modal-C4a0lovb.cjs +1 -0
- package/package.json +14 -4
- package/dist/DESIGN.md +0 -1963
- package/dist/article-asset-card-CM_WiHYI.cjs +0 -1
- package/dist/camp-card-Dr0h_TPh.cjs +0 -1
- package/dist/company-info-card-H1BDbRoL.cjs +0 -1
- package/dist/event-card-B7TYQ2do.cjs +0 -1
- package/dist/lecturer-card-CGPXVDdx.cjs +0 -1
- package/dist/main-banner-image-DdV4qseq.cjs +0 -1
- package/dist/mobile-camp-card-DJPf2Efp.cjs +0 -1
- package/dist/portfolio-asset-card-BlgNFtHc.cjs +0 -1
- package/dist/premium-card-Diea6qG_.cjs +0 -1
- package/dist/title-tag-card-Cn0V-8Ga.cjs +0 -1
- package/dist/youtube-video-modal-pooOcDO1.cjs +0 -1
package/README.md
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
## 목차
|
|
4
4
|
|
|
5
5
|
- [소개](#소개)
|
|
6
|
-
- [특징](#특징)
|
|
7
6
|
- [시작하기](#시작하기)
|
|
7
|
+
- [문서](#문서)
|
|
8
8
|
- [설치](#설치)
|
|
9
9
|
- [빠른 사용법 (Tailwind 설정 불필요)](#빠른-사용법-tailwind-설정-불필요)
|
|
10
10
|
- [Tailwind 앱 권장 사용법](#tailwind-앱-권장-사용법)
|
|
@@ -250,3 +250,52 @@ npm 인증 토큰은 레포 파일에 커밋하지 않고 환경변수로만 주
|
|
|
250
250
|
- Yarn 설정: `.yarnrc.yml`에서 `npmAuthToken: "${NPM_AUTH_TOKEN:-}"` 사용
|
|
251
251
|
|
|
252
252
|
기존에 파일에 들어가 있던 토큰은 즉시 폐기(rotate/revoke) 후 새 토큰으로 교체해야 합니다.
|
|
253
|
+
|
|
254
|
+
## 문서
|
|
255
|
+
|
|
256
|
+
### 레포 문서 (직접 작성)
|
|
257
|
+
|
|
258
|
+
| 문서 | 설명 |
|
|
259
|
+
|------|------|
|
|
260
|
+
| [docs/PRD.md](docs/PRD.md) | 이 라이브러리의 존재 이유, 이해관계자, 목표, 성공 지표 |
|
|
261
|
+
| [docs/Architecture.md](docs/Architecture.md) | 레이어 구조, 빌드 시스템, CSS 모드 2종, CI/CD 파이프라인 |
|
|
262
|
+
| [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) | 컴포넌트 추가 절차, 브랜치 전략, 버전 bump, npm publish |
|
|
263
|
+
| [docs/COMPONENT-GUIDELINES.md](docs/COMPONENT-GUIDELINES.md) | 컴포넌트 설계 원칙, presentational 철학, props 패턴, anti-pattern |
|
|
264
|
+
| [docs/DESIGN-TOKENS.md](docs/DESIGN-TOKENS.md) | 색상 팔레트, 타이포 스케일, camps/ads 토큰 전체 레퍼런스 |
|
|
265
|
+
| [docs/STORYBOOK.md](docs/STORYBOOK.md) | 스토리 작성 가이드, JSDoc 자동 문서화, Chromatic 회귀 테스트 |
|
|
266
|
+
| [docs/SSOT-INTEGRATION.md](docs/SSOT-INTEGRATION.md) | 소비 레포(frontend/partner)가 DS 문서를 SSOT로 동기화하는 절차 |
|
|
267
|
+
|
|
268
|
+
### 자동 생성 문서 (SSOT, 허브 & 스포크)
|
|
269
|
+
|
|
270
|
+
소스(JSDoc·토큰·컴포넌트·결정 매트릭스)에서 **기계 생성**된다. 큰 문서를 통째로 읽지 않고 **필요한 스포크만** 열어보도록 허브 1개 + 작은 스포크 다수로 구성된다. 직접 수정하지 말 것 — 소스를 고치고 `yarn docs:gen`으로 재생성한다.
|
|
271
|
+
|
|
272
|
+
흐름: **추적 소스 → 빌드 시 dist로 스탬프 → 소비처가 dist 스탬프본을 sync**
|
|
273
|
+
|
|
274
|
+
- `docs/design-system/**` — **git 추적·커밋**되는 클린 소스(GitHub에서 바로 열람). 출력은 **결정적**(버전·날짜 없음)이라 버전 bump·재생성에도 소스 내용이 같으면 diff가 없다.
|
|
275
|
+
- `dist/design-system/**` — `yarn build`(`stamp:design-docs`)가 위를 복사하면서 **버전 + 빌드 날짜를 주입**한 배포본. `files: ["dist", "bin"]`로 npm 배포되는 정본.
|
|
276
|
+
|
|
277
|
+
| 문서 | 경로(추적 소스) | 설명 |
|
|
278
|
+
|------|------|------|
|
|
279
|
+
| 허브 | `docs/design-system/design-system.md` | 원칙(DS-first) · 네비게이션 가이드 · 인벤토리(링크) · import 맵 |
|
|
280
|
+
| 결정 가이드 | `docs/design-system/when-to-use.md` | 어떤 상황에 어떤 컴포넌트를 쓰는가 |
|
|
281
|
+
| 사용법 | `docs/design-system/usage.md` | 설치 · CSS 배포 모드 · presentational 소비 규칙 |
|
|
282
|
+
| 토큰 | `docs/design-system/tokens.md` | 색상 · 타이포 · 기타 토큰 |
|
|
283
|
+
| UI 스포크 | `docs/design-system/ui/<name>.md` | UI 프리미티브당 1파일 |
|
|
284
|
+
| 조합형 스포크 | `docs/design-system/components/<name>.md` | 조합형 컴포넌트당 1파일 |
|
|
285
|
+
|
|
286
|
+
**문서 sync 도구** (이 레포에서):
|
|
287
|
+
- `yarn docs:gen` — 추적 문서 재생성 · `yarn docs:check` — 소스와 sync 검사(deep-entry·토큰·결정 매트릭스·freshness).
|
|
288
|
+
- `/ds-docs-check` (slash) — 읽기전용 sync 리포트 · `/ds-docs-sync` (slash) — 재생성 + 누락 JSDoc·결정 엔트리 초안 작성.
|
|
289
|
+
- husky `pre-commit`이 커밋 시 문서를 자동 재생성·stage 한다.
|
|
290
|
+
|
|
291
|
+
**소비 레포**는 동봉된 `boottent-design-docs` CLI로 dist 스탬프본을 자기 레포로 동기화한다.
|
|
292
|
+
|
|
293
|
+
```sh
|
|
294
|
+
# 소비 레포(boottent-frontend 등)에서
|
|
295
|
+
boottent-design-docs sync # docs/ds/ 로 미러 복사 + docs/design.md scaffold(없을 때만)
|
|
296
|
+
boottent-design-docs sync --out docs/design # 미러 경로 변경
|
|
297
|
+
boottent-design-docs sync --no-scaffold # design.md 자동 생성 비활성화
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
소비처는 자체 `docs/design.md`(허브로 연결, 앱 전용 확장 기록)를 소유하고, `docs/ds/`는 sync가 덮어쓰는 SSOT 미러다.
|
|
301
|
+
자세한 연동/업그레이드 루프는 [docs/SSOT-INTEGRATION.md](docs/SSOT-INTEGRATION.md)를 참조하세요.
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* boottent-design-docs — 소비 레포가 DS의 자동 생성 문서를 SSOT로 동기화하는 CLI.
|
|
4
|
+
*
|
|
5
|
+
* 설치된 boottent-design 패키지의 dist/design-system/ (버전·날짜 스탬프본) 허브+스포크 트리를
|
|
6
|
+
* 소비 레포의 문서 디렉터리(기본 docs/ds/)로 재귀 복사한다.
|
|
7
|
+
* 또한 소비 레포가 자체 확장을 적을 design.md(기본 docs/design.md)를 없을 때만 scaffold 한다.
|
|
8
|
+
*
|
|
9
|
+
* 사용법:
|
|
10
|
+
* boottent-design-docs sync [--out <dir>] [--design-doc <path>] [--no-scaffold]
|
|
11
|
+
*
|
|
12
|
+
* 옵션:
|
|
13
|
+
* --out <dir> SSOT 미러 출력 디렉터리 (기본: docs/ds)
|
|
14
|
+
* --design-doc <path> 소비처 소유 design.md 경로 (기본: docs/design.md). 없을 때만 생성.
|
|
15
|
+
* --no-scaffold design.md scaffold 비활성화
|
|
16
|
+
* --help 이 도움말
|
|
17
|
+
*/
|
|
18
|
+
import fs from "node:fs";
|
|
19
|
+
import path from "node:path";
|
|
20
|
+
import { fileURLToPath } from "node:url";
|
|
21
|
+
|
|
22
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
23
|
+
const __dirname = path.dirname(__filename);
|
|
24
|
+
|
|
25
|
+
// CLI 파일은 <pkg>/bin/sync-docs.mjs → 패키지 루트는 한 단계 위
|
|
26
|
+
const PKG_ROOT = path.join(__dirname, "..");
|
|
27
|
+
const SRC_DOCS = path.join(PKG_ROOT, "dist", "design-system");
|
|
28
|
+
|
|
29
|
+
const DEFAULT_OUT = "docs/ds";
|
|
30
|
+
const DEFAULT_DESIGN_DOC = "docs/design.md";
|
|
31
|
+
|
|
32
|
+
function printHelp() {
|
|
33
|
+
console.log(`boottent-design-docs — DS 문서 SSOT 동기화
|
|
34
|
+
|
|
35
|
+
사용법:
|
|
36
|
+
boottent-design-docs sync [--out <dir>] [--design-doc <path>] [--no-scaffold]
|
|
37
|
+
|
|
38
|
+
옵션:
|
|
39
|
+
--out <dir> SSOT 미러 출력 디렉터리 (기본: ${DEFAULT_OUT})
|
|
40
|
+
--design-doc <path> 소비처 소유 design.md 경로 (기본: ${DEFAULT_DESIGN_DOC}). 없을 때만 생성.
|
|
41
|
+
--no-scaffold design.md scaffold 비활성화
|
|
42
|
+
--help 이 도움말
|
|
43
|
+
|
|
44
|
+
동작:
|
|
45
|
+
설치된 boottent-design 의 dist/design-system/ (허브 + 스포크 스탬프본)를 <dir> 로 재귀 복사하고,
|
|
46
|
+
소비처 design.md 가 없으면 허브로 연결되는 시작 템플릿을 생성합니다.`);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function getPkgVersion() {
|
|
50
|
+
try {
|
|
51
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(PKG_ROOT, "package.json"), "utf-8"));
|
|
52
|
+
return pkg.version ?? "unknown";
|
|
53
|
+
} catch {
|
|
54
|
+
return "unknown";
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function parseArgs(argv) {
|
|
59
|
+
const args = {
|
|
60
|
+
command: undefined,
|
|
61
|
+
out: DEFAULT_OUT,
|
|
62
|
+
designDoc: DEFAULT_DESIGN_DOC,
|
|
63
|
+
scaffold: true,
|
|
64
|
+
help: false,
|
|
65
|
+
};
|
|
66
|
+
for (let i = 0; i < argv.length; i++) {
|
|
67
|
+
const arg = argv[i];
|
|
68
|
+
if (arg === "--help" || arg === "-h") args.help = true;
|
|
69
|
+
else if (arg === "--out" || arg === "-o") args.out = argv[++i];
|
|
70
|
+
else if (arg === "--design-doc") args.designDoc = argv[++i];
|
|
71
|
+
else if (arg === "--no-scaffold") args.scaffold = false;
|
|
72
|
+
else if (!arg.startsWith("-") && !args.command) args.command = arg;
|
|
73
|
+
}
|
|
74
|
+
return args;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function fail(message) {
|
|
78
|
+
console.error(`✗ ${message}`);
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** 디렉터리 트리를 재귀 복사한다. */
|
|
83
|
+
function copyTree(srcDir, destDir) {
|
|
84
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
85
|
+
let count = 0;
|
|
86
|
+
for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {
|
|
87
|
+
const srcPath = path.join(srcDir, entry.name);
|
|
88
|
+
const destPath = path.join(destDir, entry.name);
|
|
89
|
+
if (entry.isDirectory()) {
|
|
90
|
+
count += copyTree(srcPath, destPath);
|
|
91
|
+
} else if (entry.isFile()) {
|
|
92
|
+
fs.copyFileSync(srcPath, destPath);
|
|
93
|
+
count += 1;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return count;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** 소비처가 소유하는 design.md 시작 템플릿. */
|
|
100
|
+
function designDocTemplate(version, outRel, generatedAt) {
|
|
101
|
+
const hub = path.posix.join(outRel, "design-system.md");
|
|
102
|
+
const whenToUse = path.posix.join(outRel, "when-to-use.md");
|
|
103
|
+
return `# 디자인 가이드 (이 앱)
|
|
104
|
+
|
|
105
|
+
> 이 파일은 **이 앱이 소유**합니다. 자유롭게 편집하세요.
|
|
106
|
+
> 디자인 시스템 정본(SSOT)은 \`${outRel}/\` 아래에 자동 동기화됩니다. (boottent-design v${version}, ${generatedAt})
|
|
107
|
+
|
|
108
|
+
## 원칙
|
|
109
|
+
|
|
110
|
+
UI는 [boottent-design](https://boottent.com)을 **단일 진실 원천(SSOT)** 으로 사용합니다.
|
|
111
|
+
|
|
112
|
+
- 새 UI는 먼저 [디자인 시스템 허브](${hub})의 인벤토리에서 찾고, 없을 때만 조합/확장합니다.
|
|
113
|
+
- 어떤 컴포넌트를 쓸지 모르겠으면 [언제 무엇을 쓰나](${whenToUse})를 봅니다.
|
|
114
|
+
- 색·타이포·간격은 DS 토큰만 사용하고, 임의의 hex·px를 직접 쓰지 않습니다.
|
|
115
|
+
|
|
116
|
+
## 이 앱의 디자인 확장
|
|
117
|
+
|
|
118
|
+
> DS를 기본으로 두고, 이 앱에서만 추가로 지키는 규칙·패턴·컴포넌트를 여기에 적습니다.
|
|
119
|
+
> (예: 앱 전용 레이아웃, 라우팅 래퍼, 도메인 위젯, 색/간격 추가 규칙 등)
|
|
120
|
+
|
|
121
|
+
- (여기에 작성)
|
|
122
|
+
`;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function sync(args) {
|
|
126
|
+
if (!fs.existsSync(SRC_DOCS)) {
|
|
127
|
+
fail(
|
|
128
|
+
`boottent-design 문서를 찾을 수 없습니다: ${SRC_DOCS}\n` +
|
|
129
|
+
` 설치된 boottent-design 버전이 문서 자동 생성을 지원하는지 확인하세요. (로컬 file: 링크라면 'yarn build' 후 재시도)`,
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const version = getPkgVersion();
|
|
134
|
+
const generatedAt = new Date().toLocaleString("ko-KR");
|
|
135
|
+
const absOut = path.resolve(process.cwd(), args.out);
|
|
136
|
+
|
|
137
|
+
const count = copyTree(SRC_DOCS, absOut);
|
|
138
|
+
const outRel = path.relative(process.cwd(), absOut) || ".";
|
|
139
|
+
|
|
140
|
+
console.log(`✓ boottent-design v${version} 문서 동기화 완료`);
|
|
141
|
+
console.log(` 미러: ${outRel}/ (${count} files)`);
|
|
142
|
+
|
|
143
|
+
// design.md scaffold (없을 때만)
|
|
144
|
+
if (args.scaffold) {
|
|
145
|
+
const absDesign = path.resolve(process.cwd(), args.designDoc);
|
|
146
|
+
if (fs.existsSync(absDesign)) {
|
|
147
|
+
console.log(` design.md: 이미 존재 — 건너뜀 (${path.relative(process.cwd(), absDesign)})`);
|
|
148
|
+
} else {
|
|
149
|
+
fs.mkdirSync(path.dirname(absDesign), { recursive: true });
|
|
150
|
+
// design.md 위치에서 미러 디렉터리로 가는 상대경로
|
|
151
|
+
const relToOut = path.posix.relative(
|
|
152
|
+
path.dirname(absDesign).split(path.sep).join("/"),
|
|
153
|
+
absOut.split(path.sep).join("/"),
|
|
154
|
+
);
|
|
155
|
+
fs.writeFileSync(absDesign, designDocTemplate(version, relToOut || ".", generatedAt));
|
|
156
|
+
console.log(` design.md: 생성 (${path.relative(process.cwd(), absDesign)})`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function main() {
|
|
162
|
+
const args = parseArgs(process.argv.slice(2));
|
|
163
|
+
|
|
164
|
+
if (args.help || !args.command) {
|
|
165
|
+
printHelp();
|
|
166
|
+
process.exit(args.help ? 0 : 1);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (args.command === "sync") {
|
|
170
|
+
sync(args);
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
console.error(`알 수 없는 명령: ${args.command}\n`);
|
|
175
|
+
printHelp();
|
|
176
|
+
process.exit(1);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
main();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const e=require("react/jsx-runtime"),i=require("./index-DKCqkplO.cjs");require("./ui/accordion.cjs.js");require("./ui/alert-dialog.cjs.js");require("@radix-ui/react-aspect-ratio");require("./ui/avatar.cjs.js");require("./ui/badge.cjs.js");require("./ui/button.cjs.js");require("./ui/calendar.cjs.js");require("./ui/callout.cjs.js");require("./ui/card.cjs.js");require("./ui/checkbox.cjs.js");require("lucide-react");require("./ui/command.cjs.js");require("./ui/dialog.cjs.js");require("./ui/dropdown-menu.cjs.js");require("./ui/file-uploader.cjs.js");require("./ui/form.cjs.js");const q=require("./ui/icons.cjs.js");require("./ui/input.cjs.js");require("./ui/label.cjs.js");require("./ui/month-picker.cjs.js");require("./ui/multi-select.cjs.js");require("./ui/navigation-menu.cjs.js");require("./ui/popover.cjs.js");require("./ui/progress.cjs.js");require("./ui/radio-group.cjs.js");require("./ui/scroll-area.cjs.js");require("./ui/select.cjs.js");require("./ui/separator.cjs.js");require("@radix-ui/react-slider");require("react");require("./ui/switch.cjs.js");require("./ui/tabs.cjs.js");require("./ui/tag.cjs.js");require("./ui/text.cjs.js");require("./ui/textarea.cjs.js");require("./ui/toast.cjs.js");require("./ui/toggle.cjs.js");require("./ui/toggle-group.cjs.js");require("./ui/tooltip.cjs.js");const m=require("./image-loading-DZFBFoVv.cjs"),b={bootcamp:{text:"부트캠프",color:i.colors.main[600],background:i.colors.main[50]},job:{text:"취업꿀팁",color:i.colors.brown[500],background:i.colors.brown[50]},study:{text:"개념정리",color:i.colors.lime[500],background:i.colors.lime[50]},insight:{text:"인사이트",color:i.colors.blue[500],background:i.colors.blue[50]},webtoon:{text:"개발자툰",color:i.colors.pink[500],background:i.colors.pink[50]}};function u({children:r,backgroundColor:l,color:o}){return e.jsx("div",{style:{backgroundColor:l,color:o},className:"whitespace-nowrap break-keep rounded bg-grey-100 px-2 py-0.5 text-regular13 text-grey-600 xs:text-regular14",children:r})}function f({article:r,isYoutube:l=!1,imagePriority:o,imageLoading:c,imageFetchPriority:n,imageDecoding:d}){const s=r.category?b[r.category]:void 0,t=!s&&r.tags?r.tags.slice(0,3):[],x=m.getImageLoadingAttributes({imagePriority:o,imageLoading:c,imageFetchPriority:n,imageDecoding:d});return e.jsx("div",{className:"bt-ds-surface bt-ds-radius-10 h-full w-full max-w-[320px] list-none overflow-hidden rounded-[10px] border border-grey-200 bg-background","data-asset-id":r.assetId,children:e.jsxs("div",{className:"flex h-full w-full flex-col",children:[e.jsxs("div",{className:"relative w-full shrink-0 overflow-hidden",children:[e.jsx("img",{src:r.imageUrl,alt:"image",className:"aspect-video w-full object-cover",...x}),l&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-white/30",children:e.jsx(q.Icon.Play,{size:"40"})})]}),e.jsxs("div",{className:"flex flex-col items-start gap-2 p-4",children:[s?e.jsx(u,{backgroundColor:s.background||"",color:s.color||"",children:s.text}):t.length>0?e.jsx("div",{className:"flex flex-wrap items-start gap-1",children:t.map((a,g)=>e.jsx(u,{children:a},`${a}-${g}`))}):null,e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("p",{className:"line-clamp-2 text-semibold14 xs:text-semibold16",children:r.title}),e.jsx("p",{className:"line-clamp-3 text-regular13 text-grey-500 xs:text-regular14",children:r.description})]})]})]})})}exports.ArticleAssetCard=f;
|
|
@@ -23,6 +23,7 @@ import "./ui/month-picker.es.js";
|
|
|
23
23
|
import "./ui/multi-select.es.js";
|
|
24
24
|
import "./ui/navigation-menu.es.js";
|
|
25
25
|
import "./ui/popover.es.js";
|
|
26
|
+
import "./ui/progress.es.js";
|
|
26
27
|
import "./ui/radio-group.es.js";
|
|
27
28
|
import "./ui/scroll-area.es.js";
|
|
28
29
|
import "./ui/select.es.js";
|
|
@@ -56,7 +57,7 @@ function p({ children: t, backgroundColor: l, color: a }) {
|
|
|
56
57
|
}
|
|
57
58
|
);
|
|
58
59
|
}
|
|
59
|
-
function
|
|
60
|
+
function at({
|
|
60
61
|
article: t,
|
|
61
62
|
isYoutube: l = !1,
|
|
62
63
|
imagePriority: a,
|
|
@@ -92,5 +93,5 @@ function lt({
|
|
|
92
93
|
);
|
|
93
94
|
}
|
|
94
95
|
export {
|
|
95
|
-
|
|
96
|
+
at as A
|
|
96
97
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const e=require("react/jsx-runtime");require("./ui/accordion.cjs.js");require("./ui/alert-dialog.cjs.js");const m=require("./common-Ds1lanOg.cjs");require("@radix-ui/react-aspect-ratio");require("./ui/avatar.cjs.js");require("./ui/badge.cjs.js");require("./ui/button.cjs.js");require("./ui/calendar.cjs.js");require("./ui/callout.cjs.js");require("./ui/card.cjs.js");require("./ui/checkbox.cjs.js");require("lucide-react");require("./ui/command.cjs.js");require("./ui/dialog.cjs.js");require("./ui/dropdown-menu.cjs.js");require("./ui/file-uploader.cjs.js");require("./ui/form.cjs.js");require("./ui/input.cjs.js");require("./ui/label.cjs.js");require("./ui/month-picker.cjs.js");require("./ui/multi-select.cjs.js");require("./ui/navigation-menu.cjs.js");require("./ui/popover.cjs.js");require("./ui/progress.cjs.js");require("./ui/radio-group.cjs.js");require("./ui/scroll-area.cjs.js");require("./ui/select.cjs.js");require("./ui/separator.cjs.js");require("@radix-ui/react-slider");require("react");require("./ui/switch.cjs.js");require("./ui/tabs.cjs.js");const O=require("./ui/tag.cjs.js");require("./ui/text.cjs.js");require("./ui/textarea.cjs.js");require("./ui/toast.cjs.js");require("./ui/toggle.cjs.js");require("./ui/toggle-group.cjs.js");require("./ui/tooltip.cjs.js");const P=require("./image-loading-DZFBFoVv.cjs"),s=require("./camp-card-format-rjZZu4G6.cjs");function Q({tag:r}){return e.jsx("li",{className:"rounded",children:e.jsx("div",{style:{color:r.color,backgroundColor:r.background,border:`1px solid ${r.border??"transparent"}`},className:m.cn("inline-block whitespace-nowrap rounded px-1 py-0.5 text-regular13",r.className),children:r.text})})}function x(r,i="sm"){return e.jsx(O.Tag,{style:{background:r.background,color:r.color,border:`1px solid ${r.border??r.background??"transparent"}`},size:i,variant:i==="ad"?"ad":void 0,className:r.className,children:r.text})}function V({brandName:r,title:i,batchName:f="",imageUrl:a,imageAlt:q="header image",tuitionText:h,locationText:p,scheduleText:v,startDate:w,endDate:g,period:j,tuition:b,earlyBirdTuition:N,earlyBirdEndDate:C,isFree:y,onoffText:k,cityLabels:T,costOptionText:L,tags:t=[],statusBadge:n,adBadge:o,adTitle:u,isAd:$=!1,className:S,style:A,bookmarkSlot:B,latestBatchSlot:D,imageOverlaySlot:E,imageWrapper:c,imagePriority:F,imageLoading:I,imageFetchPriority:R,imageDecoding:_}){const z=P.getImageLoadingAttributes({imagePriority:F,imageLoading:I,imageFetchPriority:R,imageDecoding:_}),G=`${i} ${f||""}`.trim(),H=h??L??s.formatCampCardTuitionText({tuition:b??void 0,isFree:y,earlyBirdTuition:N??void 0,earlyBirdEndDate:C??void 0}),J=p??s.formatCampCardLocationText({onoffText:k,cityLabels:T,format:"desktop"}),K=v??s.formatCampCardScheduleText({startDate:w,endDate:g,period:j}),l=a?e.jsx("button",{type:"button",className:"absolute inset-0",children:e.jsx("img",{src:a,alt:q,className:"h-full w-full object-cover transition-all hover:scale-110",...z})}):null;return e.jsxs("div",{className:m.cn("bt-ds-surface bt-ds-text-reset relative flex h-full w-full flex-col overflow-hidden rounded-lg border border-grey-200 bg-white",S),style:A,children:[e.jsxs("div",{className:"relative aspect-[9/5] w-full shrink-0",children:[e.jsxs("div",{className:"absolute inset-0 z-0 flex items-center justify-center overflow-hidden",children:[l?c?c(l):l:null,E,e.jsxs("div",{className:"absolute bottom-2 right-2 flex flex-col items-end gap-1",children:[n?x(n,"sm"):null,D]})]}),o?x(o,"ad"):null,B]}),e.jsxs("div",{className:"flex flex-col gap-2 p-4 text-regular14",children:[e.jsx("div",{children:r}),e.jsxs("div",{className:"flex w-full flex-col gap-3",children:[e.jsx("div",{className:"line-clamp-3 w-full text-semibold16 font-medium",children:G}),$&&u?e.jsx("div",{className:"line-clamp-2 break-keep rounded-md bg-yellow-400/50 px-2 py-1 text-grey-800",children:u}):null,t.length>0?e.jsx("ul",{className:"flex w-full max-w-full shrink-0 grow-0 flex-wrap justify-start gap-[5px] overflow-x-hidden whitespace-normal",children:t.map((d,M)=>e.jsx(Q,{tag:d},`${String(d.text)}-${M}`))}):null]}),e.jsxs("div",{className:"flex w-full flex-col gap-2 text-regular13",children:[e.jsxs("p",{className:"w-full overflow-hidden truncate whitespace-nowrap",children:[e.jsx("span",{children:H})," · ",e.jsx("span",{children:J})]}),e.jsx("p",{className:"w-full overflow-hidden truncate whitespace-nowrap",children:K})]})]})]})}exports.CampCard=V;
|
|
@@ -22,6 +22,7 @@ import "./ui/month-picker.es.js";
|
|
|
22
22
|
import "./ui/multi-select.es.js";
|
|
23
23
|
import "./ui/navigation-menu.es.js";
|
|
24
24
|
import "./ui/popover.es.js";
|
|
25
|
+
import "./ui/progress.es.js";
|
|
25
26
|
import "./ui/radio-group.es.js";
|
|
26
27
|
import "./ui/scroll-area.es.js";
|
|
27
28
|
import "./ui/select.es.js";
|
|
@@ -69,7 +70,7 @@ function p(e, o = "sm") {
|
|
|
69
70
|
}
|
|
70
71
|
);
|
|
71
72
|
}
|
|
72
|
-
function
|
|
73
|
+
function He({
|
|
73
74
|
brandName: e,
|
|
74
75
|
title: o,
|
|
75
76
|
batchName: f = "",
|
|
@@ -173,5 +174,5 @@ function Ge({
|
|
|
173
174
|
);
|
|
174
175
|
}
|
|
175
176
|
export {
|
|
176
|
-
|
|
177
|
+
He as C
|
|
177
178
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const e=require("react/jsx-runtime");require("./ui/accordion.cjs.js");require("./ui/alert-dialog.cjs.js");const q=require("./common-Ds1lanOg.cjs");require("@radix-ui/react-aspect-ratio");require("./ui/avatar.cjs.js");require("./ui/badge.cjs.js");const h=require("./ui/button.cjs.js");require("./ui/calendar.cjs.js");const x=require("./ui/callout.cjs.js");require("./ui/card.cjs.js");require("./ui/checkbox.cjs.js");require("lucide-react");require("./ui/command.cjs.js");require("./ui/dialog.cjs.js");require("./ui/dropdown-menu.cjs.js");require("./ui/file-uploader.cjs.js");require("./ui/form.cjs.js");require("./ui/input.cjs.js");require("./ui/label.cjs.js");require("./ui/month-picker.cjs.js");require("./ui/multi-select.cjs.js");require("./ui/navigation-menu.cjs.js");require("./ui/popover.cjs.js");require("./ui/progress.cjs.js");require("./ui/radio-group.cjs.js");require("./ui/scroll-area.cjs.js");require("./ui/select.cjs.js");require("./ui/separator.cjs.js");require("@radix-ui/react-slider");require("react");require("./ui/switch.cjs.js");require("./ui/tabs.cjs.js");require("./ui/tag.cjs.js");const a=require("./ui/text.cjs.js");require("./ui/textarea.cjs.js");require("./ui/toast.cjs.js");require("./ui/toggle.cjs.js");require("./ui/toggle-group.cjs.js");require("./ui/tooltip.cjs.js");const f=require("./image-loading-DZFBFoVv.cjs");function g({intro:i,roleText:s="운영",descriptionId:t,imagePriority:n,imageLoading:u,imageFetchPriority:l,imageDecoding:c}){const{introductionData:r,companyId:o}=i;if(!r)return null;const d=t??`company-info-${o}`,m=f.getImageLoadingAttributes({imagePriority:n,imageLoading:u,imageFetchPriority:l,imageDecoding:c});return e.jsxs(x.Callout.Outline,{size:"lg",className:"bt-ds-surface bt-ds-radius-12 flex max-h-44 min-h-24 w-full max-w-[975px] shrink-0 items-stretch justify-between gap-4 bg-background md:gap-5 xl:max-w-[815px]",children:[e.jsxs("span",{id:d,className:"sr-only",children:[i.companyName,"은(는) 본 부트캠프의 ",s,"사로, 상세 소개 페이지로 이동할 수 있다."]}),e.jsx("div",{className:"bt-ds-surface bt-ds-surface-white bt-ds-radius-full flex aspect-square w-16 shrink-0 items-center justify-center self-start overflow-hidden rounded-full border border-grey-200 bg-white",children:e.jsx("img",{src:r.logo,alt:`${i.companyName} 로고`,width:100,height:100,className:"object-contain",...m})}),e.jsx("div",{className:"min-h-0 flex-1 self-stretch",children:e.jsxs("div",{className:"flex h-full min-h-0 flex-col items-start gap-1 overflow-y-auto pr-1",children:[e.jsxs("div",{className:"flex w-full shrink-0 items-center gap-[5px]",children:[e.jsx(a.Text,{className:"line-clamp-1 font-semibold",children:r.companyName}),e.jsx("span",{"aria-label":"회사 역할",children:s})]}),e.jsx(a.Text,{className:"whitespace-pre-wrap text-start text-grey-600",children:r.title})]})}),e.jsx("span",{className:q.cn(h.buttonVariants({variant:"outline",theme:"secondary"}),"hidden self-center md:inline-flex"),"aria-hidden":"true",children:"자세히 보기"})]})}exports.CompanyInfoCard=g;
|
|
@@ -22,6 +22,7 @@ import "./ui/month-picker.es.js";
|
|
|
22
22
|
import "./ui/multi-select.es.js";
|
|
23
23
|
import "./ui/navigation-menu.es.js";
|
|
24
24
|
import "./ui/popover.es.js";
|
|
25
|
+
import "./ui/progress.es.js";
|
|
25
26
|
import "./ui/radio-group.es.js";
|
|
26
27
|
import "./ui/scroll-area.es.js";
|
|
27
28
|
import "./ui/select.es.js";
|
|
@@ -38,7 +39,7 @@ import "./ui/toggle.es.js";
|
|
|
38
39
|
import "./ui/toggle-group.es.js";
|
|
39
40
|
import "./ui/tooltip.es.js";
|
|
40
41
|
import { g as x } from "./image-loading-BX5rKZfC.js";
|
|
41
|
-
function
|
|
42
|
+
function ot({
|
|
42
43
|
intro: e,
|
|
43
44
|
roleText: m = "운영",
|
|
44
45
|
descriptionId: a,
|
|
@@ -98,5 +99,5 @@ function mt({
|
|
|
98
99
|
);
|
|
99
100
|
}
|
|
100
101
|
export {
|
|
101
|
-
|
|
102
|
+
ot as C
|
|
102
103
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../article-asset-card-
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../article-asset-card-CGSemovn.cjs");exports.ArticleAssetCard=e.ArticleAssetCard;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../camp-card-
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../camp-card-BRs3koNF.cjs"),a=require("../camp-card-format-rjZZu4G6.cjs");exports.CampCard=t.CampCard;exports.formatCampCardDateText=a.formatCampCardDateText;exports.formatCampCardLocationText=a.formatCampCardLocationText;exports.formatCampCardPeriodText=a.formatCampCardPeriodText;exports.formatCampCardScheduleText=a.formatCampCardScheduleText;exports.formatCampCardTuitionText=a.formatCampCardTuitionText;exports.formatTuitionAmountText=a.formatTuitionAmountText;exports.isEarlyBirdApplied=a.isEarlyBirdApplied;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../company-info-card-
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../company-info-card-C00gMHAv.cjs");exports.CompanyInfoCard=e.CompanyInfoCard;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../event-card-
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../event-card-DebLbRKd.cjs");exports.EventCard=e.EventCard;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../lecturer-card-
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../lecturer-card-CgSWLJ8r.cjs");exports.LecturerCard=e.LecturerCard;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../main-banner-image-
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../main-banner-image-Bh3AZqac.cjs");exports.MainBannerImage=e.MainBannerImage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../mobile-camp-card-
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../mobile-camp-card-B4L0Eq0v.cjs");exports.MobileCampCard=e.MobileCampCard;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../portfolio-asset-card-
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../portfolio-asset-card-BdS7kkkT.cjs");exports.PortfolioAssetCard=o.PortfolioAssetCard;exports.PortfolioAssetFooter=o.PortfolioAssetFooter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../premium-card-
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../premium-card-1vtWPIUr.cjs");exports.PremiumCard=e.PremiumCard;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../title-tag-card-
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../title-tag-card-MFpE2-Nb.cjs");exports.TitleTagCard=e.TitleTagCard;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../youtube-video-modal-
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../youtube-video-modal-C4a0lovb.cjs");exports.YoutubeVideoModal=e.YoutubeVideoModal;
|
package/dist/components.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./event-card-
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./event-card-DebLbRKd.cjs"),a=require("./main-banner-image-Bh3AZqac.cjs"),o=require("./premium-card-1vtWPIUr.cjs"),i=require("./title-tag-card-MFpE2-Nb.cjs"),n=require("./article-asset-card-CGSemovn.cjs"),C=require("./blog-review-card-OX6KhSpS.cjs"),d=require("./camp-card-BRs3koNF.cjs"),e=require("./camp-card-format-rjZZu4G6.cjs"),s=require("./company-info-card-C00gMHAv.cjs"),m=require("./environment-asset-photo-CXxtAAax.cjs"),u=require("./event-asset-banner-BRsgu3Hc.cjs"),c=require("./lecturer-card-CgSWLJ8r.cjs"),l=require("./partner-list-card-DL_omz4v.cjs"),p=require("./mobile-camp-card-B4L0Eq0v.cjs"),r=require("./portfolio-asset-card-BdS7kkkT.cjs"),T=require("./youtube-video-modal-C4a0lovb.cjs");exports.EventCard=t.EventCard;exports.MainBannerImage=a.MainBannerImage;exports.PremiumCard=o.PremiumCard;exports.TitleTagCard=i.TitleTagCard;exports.ArticleAssetCard=n.ArticleAssetCard;exports.BlogReviewCard=C.BlogReviewCard;exports.CampCard=d.CampCard;exports.formatCampCardDateText=e.formatCampCardDateText;exports.formatCampCardLocationText=e.formatCampCardLocationText;exports.formatCampCardPeriodText=e.formatCampCardPeriodText;exports.formatCampCardScheduleText=e.formatCampCardScheduleText;exports.formatCampCardTuitionText=e.formatCampCardTuitionText;exports.formatTuitionAmountText=e.formatTuitionAmountText;exports.isEarlyBirdApplied=e.isEarlyBirdApplied;exports.CompanyInfoCard=s.CompanyInfoCard;exports.EnvironmentAssetPhoto=m.EnvironmentAssetPhoto;exports.EventAssetBanner=u.EventAssetBanner;exports.LecturerCard=c.LecturerCard;exports.PartnerListCard=l.PartnerListCard;exports.MobileCampCard=p.MobileCampCard;exports.PortfolioAssetCard=r.PortfolioAssetCard;exports.PortfolioAssetFooter=r.PortfolioAssetFooter;exports.YoutubeVideoModal=T.YoutubeVideoModal;
|
package/dist/components.es.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { E as o } from "./event-card-
|
|
3
|
-
import { M as t } from "./main-banner-image-
|
|
4
|
-
import { P as m } from "./premium-card-
|
|
5
|
-
import { T as p } from "./title-tag-card-
|
|
6
|
-
import { A as d } from "./article-asset-card-
|
|
2
|
+
import { E as o } from "./event-card-C1mSACOR.js";
|
|
3
|
+
import { M as t } from "./main-banner-image-BRLhiQJZ.js";
|
|
4
|
+
import { P as m } from "./premium-card-CFQKDWqN.js";
|
|
5
|
+
import { T as p } from "./title-tag-card-Iowzns_v.js";
|
|
6
|
+
import { A as d } from "./article-asset-card-D1Ipe86b.js";
|
|
7
7
|
import { B as x } from "./blog-review-card-DTM0poKi.js";
|
|
8
|
-
import { C as l } from "./camp-card-
|
|
8
|
+
import { C as l } from "./camp-card-Bi7Li0p5.js";
|
|
9
9
|
import { f as u, a as A, b as P, c as E, d as c, e as B, i as M } from "./camp-card-format-QrakDFC6.js";
|
|
10
|
-
import { C as L } from "./company-info-card-
|
|
10
|
+
import { C as L } from "./company-info-card-D1U_poOk.js";
|
|
11
11
|
import { E as g } from "./environment-asset-photo-BCR9v2we.js";
|
|
12
12
|
import { E as y } from "./event-asset-banner-CbhdfmpK.js";
|
|
13
|
-
import { L as Y } from "./lecturer-card-
|
|
13
|
+
import { L as Y } from "./lecturer-card-BlzA-YP6.js";
|
|
14
14
|
import { P as D } from "./partner-list-card-Bx-UZxGG.js";
|
|
15
|
-
import { M as R } from "./mobile-camp-card-
|
|
16
|
-
import { P as V, a as j } from "./portfolio-asset-card-
|
|
17
|
-
import { Y as q } from "./youtube-video-modal-
|
|
15
|
+
import { M as R } from "./mobile-camp-card-B8rTQeTh.js";
|
|
16
|
+
import { P as V, a as j } from "./portfolio-asset-card-DEMARh53.js";
|
|
17
|
+
import { Y as q } from "./youtube-video-modal-B_vy97Tt.js";
|
|
18
18
|
export {
|
|
19
19
|
d as ArticleAssetCard,
|
|
20
20
|
x as BlogReviewCard,
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# components/article-asset-card.md — boottent-design
|
|
2
|
+
|
|
3
|
+
> [!WARNING]
|
|
4
|
+
> **자동 생성된 파일 — 직접 수정 금지** (`yarn docs:gen` 으로 재생성)
|
|
5
|
+
> 조합형 컴포넌트 — article-asset-card.
|
|
6
|
+
> 버전: boottent-design v0.1.257 · 생성: 2026. 6. 11. 오후 4:37:12
|
|
7
|
+
|
|
8
|
+
[← 허브](../design-system.md) · [언제 무엇을 쓰나](../when-to-use.md)
|
|
9
|
+
|
|
10
|
+
## article-asset-card
|
|
11
|
+
|
|
12
|
+
> article-asset-card 조합형 컴포넌트입니다.
|
|
13
|
+
|
|
14
|
+
- **분류**: assets
|
|
15
|
+
- **성격**: presentational (내비게이션·모달 상태·DTO는 소비자가 소유 — [usage.md](../usage.md) §5)
|
|
16
|
+
|
|
17
|
+
### Import
|
|
18
|
+
```tsx
|
|
19
|
+
import { /* ... */ } from "boottent-design/components/article-asset-card";
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Props
|
|
23
|
+
```typescript
|
|
24
|
+
export type ArticleAssetCardProps = ImageLoadingProps & {
|
|
25
|
+
article: ArticleAssetCardData;
|
|
26
|
+
isYoutube?: boolean;
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
> 시각 예시는 Storybook(`article-asset-card.stories.tsx`)을 참고하세요.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# components/blog-review-card.md — boottent-design
|
|
2
|
+
|
|
3
|
+
> [!WARNING]
|
|
4
|
+
> **자동 생성된 파일 — 직접 수정 금지** (`yarn docs:gen` 으로 재생성)
|
|
5
|
+
> 조합형 컴포넌트 — blog-review-card.
|
|
6
|
+
> 버전: boottent-design v0.1.257 · 생성: 2026. 6. 11. 오후 4:37:12
|
|
7
|
+
|
|
8
|
+
[← 허브](../design-system.md) · [언제 무엇을 쓰나](../when-to-use.md)
|
|
9
|
+
|
|
10
|
+
## blog-review-card
|
|
11
|
+
|
|
12
|
+
> blog-review-card 조합형 컴포넌트입니다.
|
|
13
|
+
|
|
14
|
+
- **분류**: assets
|
|
15
|
+
- **성격**: presentational (내비게이션·모달 상태·DTO는 소비자가 소유 — [usage.md](../usage.md) §5)
|
|
16
|
+
|
|
17
|
+
### Import
|
|
18
|
+
```tsx
|
|
19
|
+
import { /* ... */ } from "boottent-design/components/blog-review-card";
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Props
|
|
23
|
+
```typescript
|
|
24
|
+
export type BlogReviewCardProps = ImageLoadingProps & {
|
|
25
|
+
review: BlogReviewCardData;
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
> 시각 예시는 Storybook(`blog-review-card.stories.tsx`)을 참고하세요.
|