Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions CONTRIBUTING.ko.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# DDS 기여 안내

DDS (DevsLab Design System)는 **source-available이며 오픈소스가 아닙니다**.
코드는 공개되어 있고 열람·이슈 제보·변경 제안은 환영하지만, 모든 사용은
[DevsLab Source-Available License 1.0](./LICENSE)을 따릅니다 — 수정·재배포,
경쟁 디자인 시스템 제작은 허용되지 않습니다.

## 기여 라이선스 귀속

이 저장소에 기여물(풀 리퀘스트, 패치, 이슈 본문 등)을 제출하면 다음에
동의하는 것으로 간주합니다:

- 제출할 권리가 있는 본인의 작업물(또는 제출을 허락받은 작업물)입니다;
- DevsLab에 기여물을 Software의 일부로 사용·수정·재라이선스·배포할 수 있는
영구적·전세계적·취소 불가·무상·서브라이선스 가능한 권리를 부여하며,
추가 의무는 없습니다;
- 기여물은 LICENSE 3조의 피드백 조항과 동일하게 취급되며, 커밋 히스토리
이상의 보상이나 저작자 표시 의무는 발생하지 않습니다.

동의하기 어렵다면 코드 대신 문제를 설명하는 이슈를 열어 주세요.

## 받는 기여

- 버그 리포트와 재현 케이스 — 언제나 환영합니다.
- 결함 수정(깨진 토큰, 대비 미달, 접근성 문제, 빌드/테스트 문제).
- 문서 교정 — 영/한 쌍 동기화 유지 포함.

새 컴포넌트·새 토큰·파운데이션(§3) 변경은 DevsLab 제품 필요와 결정 로그가
주도합니다. 코드를 쓰기 전에 이슈로 먼저 논의해 주세요.

## 기본 규칙 (스펙 요약)

- 토큰이 유일한 진실 — 컴포넌트·예제에 hex/px 하드코딩 금지. 컴포넌트는
시맨틱 토큰만 참조합니다.
- 라이트가 기본 테마, 다크는 시맨틱 매핑 교체 — `if (dark)` 분기 금지.
- cyan 면 위 텍스트는 흰색 금지, `zinc.950` 사용.
- 접근성 최소선: 텍스트 대비 4.5:1, focus-visible 링, 아이콘 단독 버튼
라벨 필수, 모션 감소 설정 존중.
- 문서는 영/한 쌍(`*.md` + `*.ko.md`) — 양쪽을 함께 수정합니다.
- 문서 표와 `tokens/*.json`이 어긋나면 같은 변경에서 양쪽을 고칩니다.

## 개발

```bash
pnpm install --frozen-lockfile
pnpm run build # 전체 패키지 빌드
pnpm run check # 패키지 체크 + 문서/토큰 동기화
pnpm run verify # build + check (CI가 먼저 도는 것)
```

파운데이션에 영향을 주는 변경은 `docs/decisions.md`에 기록이 필요합니다.
릴리스는 DevsLab이 `dds-v*` 태그로만 수행하며, 기여자는 발행하지 않습니다.
61 changes: 61 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Contributing to DDS

DDS (DevsLab Design System) is **source-available, not open source**. The
code is public and you are welcome to read it, report issues, and propose
changes, but the [DevsLab Source-Available License 1.0](./LICENSE) governs
all use — it does not permit modification, redistribution, or building a
competing design system.

## Contribution license grant

By submitting a contribution (a pull request, patch, issue text, or any
other material) to this repository, you agree that:

- you have the right to submit it, and it is your own work or work you are
authorized to submit;
- you grant DevsLab a perpetual, worldwide, irrevocable, royalty-free,
sublicensable license to use, modify, relicense, and distribute your
contribution as part of the Software, without further obligation to you;
- your contribution is provided under the same feedback terms as Section 3
of the LICENSE, and no compensation or attribution is owed beyond the
repository's commit history.

If you cannot agree to this, please open an issue describing the problem
instead of sending code.

## What we accept

- Bug reports and reproduction cases — always welcome.
- Fixes for defects (broken tokens, contrast failures, a11y issues,
build/test problems).
- Documentation corrections, including keeping the English/Korean pairs in
sync.

New components, new tokens, and foundation (§3) changes are driven by
DevsLab product needs and the decision log; open an issue to discuss before
writing code.

## Ground rules (from the spec)

- Tokens are the single source of truth — no hardcoded hex/px in components
or examples. Components reference semantic tokens only.
- Light is the default theme; dark is a semantic remapping, never an
`if (dark)` branch.
- Text on cyan surfaces uses `zinc.950`, never white.
- Accessibility floor: 4.5:1 text contrast, focus-visible rings, labels on
icon-only buttons, reduced-motion respected.
- Docs ship in English/Korean pairs (`*.md` + `*.ko.md`) — edit both.
- If the docs table and `tokens/*.json` disagree, fix both sides in the
same change.

## Development

```bash
pnpm install --frozen-lockfile
pnpm run build # build all packages
pnpm run check # package checks + docs/token sync
pnpm run verify # build + check (what CI runs first)
```

Foundation-affecting changes need an entry in `docs/decisions.md`.
Releases are cut by DevsLab via `dds-v*` tags; contributors never publish.
4 changes: 2 additions & 2 deletions brand/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -485,10 +485,10 @@ <h3>공식 OSS 브랜드 규칙</h3>
<p><a href="https://devslab.kr/brand/open-source/">devslab.kr/brand/open-source/</a></p>
</div>
<div class="card">
<p class="idx mono">asset source · v0.2.0</p>
<p class="idx mono">asset source · v0.3.0</p>
<h3>버전이 고정된 원본 자산</h3>
<p class="cap">사이트와 README에는 중앙 생성물의 버전 URL을 사용합니다. DDS는 프로젝트별 경로를 복제하지 않습니다.</p>
<p><a href="https://github.com/devslab-kr/oss-brand/releases/tag/v0.2.0">oss-brand v0.2.0</a></p>
<p><a href="https://github.com/devslab-kr/oss-brand/releases/tag/v0.3.0">oss-brand v0.3.0</a></p>
</div>
</div>
</section>
Expand Down
6 changes: 4 additions & 2 deletions docs/backlog.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,10 @@ Geist/Geist Mono 셀프호스팅 여부, Pretendard 서브셋, RN 번들 전략.

- **로고 스토리**: `brand/index.html`의 마크 해석("코드 블록 + 아키텍처
설계")은 형태를 보고 붙인 것. 실제 제작 의도가 따로 있으면 교체.
- **DDS 공개 여부**: 레포/패키지를 공개(오픈소스)할지, npm 스코프 배포
방식(공개 vs GitHub Packages)을 어떻게 할지.
- ~~**DDS 공개 여부**~~: **해소 (2026-08-31, D-015)** — 레포 공개 + 공개 npm
`@devslab/*` 배포, DevsLab Source-Available License 1.0 적용(오픈소스 아님).
남은 오너 액션: ① GitHub 레포 Public 전환, ② 레포 시크릿 `NPM_TOKEN` 확인,
③ `dds-v*` 태그 푸시로 릴리스 워크플로 가동.
- **브랜드 페이지 i18n 범위**: devslab.kr의 14개 로케일을 /brand에도 전부
적용할지, ko/en만 유지할지.

Expand Down
15 changes: 13 additions & 2 deletions packages/dds-css/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@devslab/dds-css",
"version": "0.3.0",
"version": "0.3.1",
"description": "DDS CSS component layer — class-based, framework-neutral, semantic-token-only (spec §4.3 v1 inventory, 20 components)",
"type": "module",
"license": "SEE LICENSE IN LICENSE",
Expand All @@ -24,5 +24,16 @@
"scripts": {
"build": "node build.mjs",
"check": "node scripts/check-css.mjs"
}
},
"homepage": "https://devslab.kr/brand/",
"bugs": {
"url": "https://github.com/devslab-kr/dds/issues"
},
"keywords": [
"design-system",
"css",
"components",
"framework-neutral",
"devslab"
]
}
15 changes: 13 additions & 2 deletions packages/dds-icons/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@devslab/dds-icons",
"version": "0.3.0",
"version": "0.3.1",
"description": "DDS icon set — one SVG source (24 grid, currentColor), shipped as files, a sprite and a path-data map",
"type": "module",
"license": "SEE LICENSE IN LICENSE",
Expand Down Expand Up @@ -32,5 +32,16 @@
"scripts": {
"build": "node build.mjs",
"check": "node scripts/check-icons.mjs"
}
},
"homepage": "https://devslab.kr/brand/",
"bugs": {
"url": "https://github.com/devslab-kr/dds/issues"
},
"keywords": [
"icons",
"svg",
"sprite",
"design-system",
"devslab"
]
}
21 changes: 16 additions & 5 deletions packages/dds-solid/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@devslab/dds-solid",
"version": "0.3.0",
"version": "0.3.1",
"description": "Accessible SolidJS primitives for the DevsLab Design System",
"type": "module",
"license": "SEE LICENSE IN LICENSE",
Expand Down Expand Up @@ -43,9 +43,9 @@
"test:a11y": "vitest run --config vitest.config.ts src/__tests__/a11y.test.tsx"
},
"dependencies": {
"@devslab/dds-css": "workspace:0.3.0",
"@devslab/dds-icons": "workspace:0.3.0",
"@devslab/dds-tokens": "workspace:0.3.0"
"@devslab/dds-css": "workspace:0.3.1",
"@devslab/dds-icons": "workspace:0.3.1",
"@devslab/dds-tokens": "workspace:0.3.1"
},
"peerDependencies": {
"solid-js": "1.9.15"
Expand All @@ -60,5 +60,16 @@
"vite": "8.2.1",
"vite-plugin-solid": "2.11.14",
"vitest": "4.1.1"
}
},
"homepage": "https://devslab.kr/brand/",
"bugs": {
"url": "https://github.com/devslab-kr/dds/issues"
},
"keywords": [
"solidjs",
"components",
"accessibility",
"design-system",
"devslab"
]
}
15 changes: 13 additions & 2 deletions packages/dds-tokens/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@devslab/dds-tokens",
"version": "0.3.0",
"version": "0.3.1",
"description": "DDS (DevsLab Design System) design tokens — one JSON source, built for CSS, Tailwind, TypeScript/RN and Ionic",
"type": "module",
"license": "SEE LICENSE IN LICENSE",
Expand Down Expand Up @@ -37,5 +37,16 @@
},
"devDependencies": {
"typescript": "7.0.2"
}
},
"homepage": "https://devslab.kr/brand/",
"bugs": {
"url": "https://github.com/devslab-kr/dds/issues"
},
"keywords": [
"design-tokens",
"design-system",
"css-variables",
"tailwind",
"devslab"
]
}
17 changes: 14 additions & 3 deletions packages/site-kit/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@devslab/site-kit",
"version": "0.3.0",
"version": "0.3.1",
"description": "Strict i18n, SEO/GEO, and Solid public-site shells for DevsLab products",
"type": "module",
"license": "SEE LICENSE IN LICENSE",
Expand Down Expand Up @@ -55,7 +55,7 @@
"test:worker": "wrangler deploy --dry-run --config fixtures/worker/wrangler.jsonc --outdir dist-worker"
},
"dependencies": {
"@devslab/dds-solid": "workspace:0.3.0"
"@devslab/dds-solid": "workspace:0.3.1"
},
"peerDependencies": {
"@tanstack/solid-router": "1.170.30",
Expand Down Expand Up @@ -83,5 +83,16 @@
"vite-plugin-solid": "2.11.14",
"vitest": "4.1.1",
"wrangler": "4.127.1"
}
},
"homepage": "https://devslab.kr/brand/",
"bugs": {
"url": "https://github.com/devslab-kr/dds/issues"
},
"keywords": [
"solidjs",
"i18n",
"seo",
"design-system",
"devslab"
]
}
8 changes: 4 additions & 4 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions tests/foundation-contracts.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ test("public foundation packages use the @devslab scope, source-available licens
for (const [path, name] of Object.entries(expected)) {
const manifest = await json(path);
assert.equal(manifest.name, name);
assert.equal(manifest.version, "0.3.0");
assert.equal(manifest.version, "0.3.1");
assert.equal(manifest.license, "SEE LICENSE IN LICENSE");
assert.equal(manifest.publishConfig?.registry, "https://registry.npmjs.org");
assert.equal(manifest.publishConfig?.access, "public");
Expand Down Expand Up @@ -58,7 +58,7 @@ test("unpublished DDS packages bootstrap from this workspace", async () => {
for (const name of names) {
assert.equal(
manifest.dependencies?.[name],
"workspace:0.3.0",
"workspace:0.3.1",
`${path} must resolve unpublished ${name} from the local release workspace`,
);
}
Expand Down
2 changes: 1 addition & 1 deletion tests/site-kit-contracts.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ test("OSS product marks remain caller-supplied and reference the canonical brand
assert.match(styles, /block-size/);
assert.doesNotMatch(styles, /\.oss-product-mark[^}]*animation\s*:/s);
assert.match(await read("brand/index.html"), /https:\/\/devslab\.kr\/brand\/open-source\//);
assert.match(await read("brand/index.html"), /oss-brand\/releases\/tag\/v0\.2\.0/);
assert.match(await read("brand/index.html"), /oss-brand\/releases\/tag\/v0\.3\.0/);
});

test("public chrome requires injected copy and keeps forms native", async () => {
Expand Down