From a1d90d5a9804472f7124293343c84b86ff67c210 Mon Sep 17 00:00:00 2001 From: Sin-Kang Date: Mon, 31 Aug 2026 05:05:04 +0900 Subject: [PATCH] feat: publish DDS 0.3.0 with Q-line identity --- .changeset/config.json | 4 +- .github/workflows/release.yml | 24 ++---- .npmrc.example | 3 +- LICENSE | 74 +++++++++++++++++++ README.ko.md | 32 ++++---- README.md | 31 ++++---- brand/index.html | 25 +++++++ docs/backlog.md | 7 +- docs/components.ko.md | 6 +- docs/components.md | 4 +- docs/decisions.md | 24 ++++-- docs/design-system.ko.md | 19 ++--- docs/design-system.md | 18 ++--- docs/plans/2026-08-29-web-platform-7stage.md | 6 +- package.json | 10 +-- packages/dds-css/LICENSE | 74 +++++++++++++++++++ packages/dds-css/README.ko.md | 4 +- packages/dds-css/README.md | 4 +- packages/dds-css/build.mjs | 4 +- packages/dds-css/package.json | 12 +-- packages/dds-icons/LICENSE | 74 +++++++++++++++++++ packages/dds-icons/README.ko.md | 10 +-- packages/dds-icons/README.md | 10 +-- packages/dds-icons/build.mjs | 4 +- packages/dds-icons/package.json | 12 +-- packages/dds-solid/LICENSE | 74 +++++++++++++++++++ packages/dds-solid/README.ko.md | 8 +- packages/dds-solid/README.md | 6 +- packages/dds-solid/package.json | 18 ++--- packages/dds-solid/src/icon.tsx | 2 +- packages/dds-solid/styles.css | 4 +- packages/dds-solid/vite.config.ts | 2 +- packages/dds-solid/vite.server.config.ts | 2 +- packages/dds-tokens/LICENSE | 74 +++++++++++++++++++ packages/dds-tokens/README.ko.md | 12 +-- packages/dds-tokens/README.md | 12 +-- packages/dds-tokens/build.mjs | 4 +- packages/dds-tokens/package.json | 12 +-- packages/site-kit/LICENSE | 74 +++++++++++++++++++ packages/site-kit/README.ko.md | 12 +-- packages/site-kit/README.md | 12 +-- .../site-kit/fixtures/worker/src/index.tsx | 6 +- packages/site-kit/package.json | 14 ++-- .../solid/__tests__/oss-product-mark.test.tsx | 26 +++++++ packages/site-kit/src/solid/chrome.tsx | 2 +- packages/site-kit/src/solid/index.ts | 1 + packages/site-kit/src/solid/layouts.tsx | 2 +- .../site-kit/src/solid/oss-product-mark.tsx | 26 +++++++ .../site-kit/src/solid/request-access.tsx | 2 +- packages/site-kit/styles.css | 6 +- packages/site-kit/vite.config.ts | 2 +- packages/site-kit/vite.server.config.ts | 2 +- packages/site-kit/vitest.config.ts | 8 +- pnpm-lock.yaml | 16 ++-- preview/components.html | 2 +- preview/icons.html | 2 +- scripts/verify-package-names.mjs | 13 ++-- scripts/verify-release.mjs | 11 +-- scripts/verify-site-kit-release.mjs | 11 +-- scripts/verify-solid-release.mjs | 10 +-- tests/dds-solid-contracts.test.mjs | 13 ++-- tests/foundation-contracts.test.mjs | 34 +++++---- tests/site-kit-contracts.test.mjs | 25 ++++++- 63 files changed, 799 insertions(+), 258 deletions(-) create mode 100644 LICENSE create mode 100644 packages/dds-css/LICENSE create mode 100644 packages/dds-icons/LICENSE create mode 100644 packages/dds-solid/LICENSE create mode 100644 packages/dds-tokens/LICENSE create mode 100644 packages/site-kit/LICENSE create mode 100644 packages/site-kit/src/solid/__tests__/oss-product-mark.test.tsx create mode 100644 packages/site-kit/src/solid/oss-product-mark.tsx diff --git a/.changeset/config.json b/.changeset/config.json index 14a4764..ee41aa8 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -3,10 +3,10 @@ "changelog": false, "commit": false, "fixed": [ - ["@devslab-kr/dds-tokens", "@devslab-kr/dds-css", "@devslab-kr/dds-icons", "@devslab-kr/dds-solid", "@devslab-kr/site-kit"] + ["@devslab/dds-tokens", "@devslab/dds-css", "@devslab/dds-icons", "@devslab/dds-solid", "@devslab/site-kit"] ], "linked": [], - "access": "restricted", + "access": "public", "baseBranch": "main", "updateInternalDependencies": "patch", "ignore": ["@devslab/compatibility-canary"] diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1a5934a..559fa38 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: Release restricted packages +name: Release public packages on: push: @@ -7,7 +7,7 @@ on: permissions: contents: read - packages: write + id-token: write jobs: publish: @@ -18,8 +18,8 @@ jobs: - uses: actions/setup-node@v7 with: node-version: 24 - registry-url: https://npm.pkg.github.com - scope: "@devslab-kr" + registry-url: https://registry.npmjs.org + scope: "@devslab" cache: pnpm - run: pnpm install --frozen-lockfile - run: pnpm exec playwright install --with-deps chromium @@ -38,17 +38,5 @@ jobs: - run: pnpm run verify:site-kit:release - run: pnpm release env: - NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Check package visibility - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - shell: bash - run: | - packages=(dds-tokens dds-css dds-icons dds-solid site-kit) - for package in "${packages[@]}"; do - visibility="$(gh api "orgs/devslab-kr/packages/npm/${package}" --jq '.visibility')" - if [[ "${visibility}" != "internal" ]]; then - echo "::warning title=Package visibility::@devslab-kr/${package} is ${visibility}; change it to Internal in package settings." - echo "- [ ] Set \`@devslab-kr/${package}\` visibility to **Internal**: https://github.com/orgs/devslab-kr/packages/npm/${package}/settings" >> "$GITHUB_STEP_SUMMARY" - fi - done + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_CONFIG_PROVENANCE: true diff --git a/.npmrc.example b/.npmrc.example index b9d99b5..71b9bac 100644 --- a/.npmrc.example +++ b/.npmrc.example @@ -1,2 +1 @@ -@devslab-kr:registry=https://npm.pkg.github.com -//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN} +@devslab:registry=https://registry.npmjs.org diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6ee9f10 --- /dev/null +++ b/LICENSE @@ -0,0 +1,74 @@ +DevsLab Source-Available License 1.0 + +Copyright (c) 2026 DevsLab. All rights reserved. + +This license governs the DDS software, design tokens, components, icons, +documentation, and other materials distributed with this license (the +"Software"). + +1. Permitted use + +Subject to this license, DevsLab grants you a limited, worldwide, +non-exclusive, non-transferable, revocable, royalty-free right to: + +- download and install unmodified copies of the Software; +- use and execute the Software for internal or commercial applications; +- compile, minify, tree-shake, and bundle unmodified Software solely as a + technical part of building an application; and +- distribute the resulting object code only as an inseparable part of that + application and not as a standalone library, design system, component kit, + template, or asset collection. + +Normal application configuration through documented public APIs, design-token +overrides, CSS custom properties, and component properties is permitted and is +not considered modification of the Software. + +2. Restrictions + +Except where applicable law does not allow the restriction, you may not: + +- modify, adapt, translate, reverse engineer, or create derivative works of the + Software itself; +- publish, republish, sublicense, sell, rent, host, or redistribute the + Software or any modified version as a standalone package or downloadable + collection; +- use the Software or a substantial portion of it to create or operate a + competing general-purpose design system, UI kit, component library, icon + library, token library, template marketplace, or hosted equivalent; +- remove or alter copyright, license, attribution, or provenance notices; or +- use DevsLab names, logos, product marks, or trade dress except to make a + truthful statement that an application uses the Software. + +No patent, trademark, design, or branding rights are granted except the +copyright permissions stated in Section 1. + +3. Ownership and feedback + +The Software is licensed, not sold. DevsLab and its licensors retain all +right, title, and interest in the Software. You grant DevsLab a perpetual, +worldwide, irrevocable, royalty-free right to use feedback you voluntarily +provide about the Software. + +4. Termination + +This license terminates automatically if you breach it. Upon termination, you +must stop using and distributing the Software and delete all copies under your +control. Sections 2, 3, 5, and 6 survive termination. + +5. Disclaimer and limitation of liability + +THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE, TITLE, AND NON-INFRINGEMENT. TO THE MAXIMUM EXTENT PERMITTED BY LAW, +DEVSLAB WILL NOT BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, +CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES, OR FOR LOSS OF DATA, PROFITS, +REVENUE, OR BUSINESS, ARISING FROM OR RELATED TO THE SOFTWARE. + +6. Governing law + +This license is governed by the laws of the Republic of Korea, excluding +conflict-of-law rules. The Seoul Central District Court has exclusive +jurisdiction over disputes arising from this license. + +This is a source-available license, not an open-source license approved by the +Open Source Initiative. diff --git a/README.ko.md b/README.ko.md index 395584d..440c9a5 100644 --- a/README.ko.md +++ b/README.ko.md @@ -3,10 +3,8 @@ ๐ŸŒ [English](README.md) ๋ฐ๋ธŒ์Šค๋žฉ ์ œํ’ˆ๊ตฐ (devslab.kr, Linq ํŒจ๋ฐ€๋ฆฌ, ์ดํ›„์˜ ์•ฑ๋“ค) ์„ ์œ„ํ•œ ๋””์ž์ธ ์–ธ์–ด โ€” -์›น๊ณผ ๋ชจ๋ฐ”์ผ์ด ๊ณต์œ ํ•˜๋Š” ํ•˜๋‚˜์˜ ํ† ํฐยท๊ทœ์น™ ์„ธํŠธ. -๊ตฌ์กฐ๋Š” [ํ† ์Šค ๋””์ž์ธ ์‹œ์Šคํ…œ (TDS)](https://tossmini-docs.toss.im/tds-react-native/) -๋ฅผ ์ฐธ์กฐ ๋ชจ๋ธ๋กœ ํ•˜๋˜ ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘๋ฆฝ์ ์ด๋‹ค: ์ฝ”์–ด๋Š” ํ† ํฐ + CSS ์ด๊ณ  -React ยท Vue ยท Ionic ยท React Native ๋Š” ์†Œ๋น„์ž๋‹ค. +์›น๊ณผ ๋ชจ๋ฐ”์ผ์ด ๊ณต์œ ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘๋ฆฝ์  ํ† ํฐยท์ปดํฌ๋„ŒํŠธยท๊ทœ์น™ ์„ธํŠธ๋‹ค. +์ฝ”์–ด๋Š” ํ† ํฐ + CSS ์ด๊ณ  React ยท Vue ยท Ionic ยท React Native ๋Š” ์†Œ๋น„์ž๋‹ค. ## ๊ตฌ์„ฑ @@ -15,11 +13,11 @@ React ยท Vue ยท Ionic ยท React Native ๋Š” ์†Œ๋น„์ž๋‹ค. | [`docs/design-system.ko.md`](docs/design-system.ko.md) | ๊ทœ์น™ ๋ช…์„ธ (v0): ์›์น™, ์•„ํ‚คํ…์ฒ˜, ํŒŒ์šด๋ฐ์ด์…˜, ์ปดํฌ๋„ŒํŠธ ๊ณ„์•ฝ, ๊ฑฐ๋ฒ„๋„Œ์Šค | | [`docs/decisions.md`](docs/decisions.md) | ๊ฒฐ์ • ๋กœ๊ทธ โ€” ํŒŒ์šด๋ฐ์ด์…˜ยท์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ •๊ณผ ๊ทผ๊ฑฐ | | [`tokens/`](tokens/) | ๋””์ž์ธ ํ† ํฐ ์†Œ์Šค ([W3C ํฌ๋งท](https://design-tokens.github.io/community-group/format/)): ์›์‹œ ํŒ”๋ ˆํŠธ, ๋ผ์ดํŠธ/๋‹คํฌ ์‹œ๋งจํ‹ฑ ๋งคํ•‘, ํƒ€์ดํฌยท๊ฐ„๊ฒฉยท๋ผ์šด๋“œยท๊ทธ๋ฆผ์žยท๋ชจ์…˜ | -| [`packages/dds-tokens/`](packages/dds-tokens/) | `@devslab-kr/dds-tokens` โ€” ํ† ํฐ ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ: `tokens.css`, Tailwind v4 `@theme` + v3 preset, `tokens.ts` (RNยท๋Ÿฐํƒ€์ž„), `ionic.css` | -| [`packages/dds-css/`](packages/dds-css/) | `@devslab-kr/dds-css` โ€” CSS ์ปดํฌ๋„ŒํŠธ ๋ ˆ์ด์–ด, ์ŠคํŽ™ ยง4.3 v1 ์ธ๋ฒคํ† ๋ฆฌ (Button, IconButton, TextField, Textarea, Select, Checkbox/Radio, Switch, Badge, Chip, Avatar, Spinner/Skeleton, Divider, Card, ListRow, Tabs, Dialog, Toast, Tooltip, EmptyState); ๊ฐ€์ด๋“œ๋Š” [`docs/components.ko.md`](docs/components.ko.md) | -| [`packages/dds-icons/`](packages/dds-icons/) | `@devslab-kr/dds-icons` โ€” ์•„์ด์ฝ˜ ์„ธํŠธ: ์ฝ”์–ด 40์ข…(24 ๊ทธ๋ฆฌ๋“œยท1.6 ์ŠคํŠธ๋กœํฌ) + devslab.kr `site-` 7์ข…. SVG ํŒŒ์ผยท์Šคํ”„๋ผ์ดํŠธยทpath ๋ฐ์ดํ„ฐ ๋งต 3ํ˜•ํƒœ ์ถœํ•˜ | -| [`packages/dds-solid/`](packages/dds-solid/) | `@devslab-kr/dds-solid` โ€” controlled/uncontrolled ์ƒํƒœ, SSRยทhydration, ํ‚ค๋ณด๋“œ, ํฌ์ปค์Šค, ์ˆ˜๋ช…์ฃผ๊ธฐ ๊ณ„์•ฝ์„ ๊ฐ–์ถ˜ SolidJS ์ ‘๊ทผ์„ฑ primitive | -| [`packages/site-kit/`](packages/site-kit/) | `@devslab-kr/site-kit` โ€” ์—„๊ฒฉํ•œ 14๊ฐœ ๋กœ์ผ€์ผ i18n, SEO/GEO ์ƒ์„ฑ๊ธฐ, TanStack Start ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์–ด๋Œ‘ํ„ฐ, ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ SolidJS ๊ณตํ†ต ์…ธ์„ ๋‹ด์€ restricted ๋‚ด๋ถ€์šฉ ๊ณต๊ฐœ ์‚ฌ์ดํŠธ ์ธํ”„๋ผ | +| [`packages/dds-tokens/`](packages/dds-tokens/) | `@devslab/dds-tokens` โ€” ํ† ํฐ ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ: `tokens.css`, Tailwind v4 `@theme` + v3 preset, `tokens.ts` (RNยท๋Ÿฐํƒ€์ž„), `ionic.css` | +| [`packages/dds-css/`](packages/dds-css/) | `@devslab/dds-css` โ€” CSS ์ปดํฌ๋„ŒํŠธ ๋ ˆ์ด์–ด, ์ŠคํŽ™ ยง4.3 v1 ์ธ๋ฒคํ† ๋ฆฌ (Button, IconButton, TextField, Textarea, Select, Checkbox/Radio, Switch, Badge, Chip, Avatar, Spinner/Skeleton, Divider, Card, ListRow, Tabs, Dialog, Toast, Tooltip, EmptyState); ๊ฐ€์ด๋“œ๋Š” [`docs/components.ko.md`](docs/components.ko.md) | +| [`packages/dds-icons/`](packages/dds-icons/) | `@devslab/dds-icons` โ€” ์•„์ด์ฝ˜ ์„ธํŠธ: ์ฝ”์–ด 40์ข…(24 ๊ทธ๋ฆฌ๋“œยท1.6 ์ŠคํŠธ๋กœํฌ) + devslab.kr `site-` 7์ข…. SVG ํŒŒ์ผยท์Šคํ”„๋ผ์ดํŠธยทpath ๋ฐ์ดํ„ฐ ๋งต 3ํ˜•ํƒœ ์ถœํ•˜ | +| [`packages/dds-solid/`](packages/dds-solid/) | `@devslab/dds-solid` โ€” controlled/uncontrolled ์ƒํƒœ, SSRยทhydration, ํ‚ค๋ณด๋“œ, ํฌ์ปค์Šค, ์ˆ˜๋ช…์ฃผ๊ธฐ ๊ณ„์•ฝ์„ ๊ฐ–์ถ˜ SolidJS ์ ‘๊ทผ์„ฑ primitive | +| [`packages/site-kit/`](packages/site-kit/) | `@devslab/site-kit` โ€” ์—„๊ฒฉํ•œ 14๊ฐœ ๋กœ์ผ€์ผ i18n, SEO/GEO ์ƒ์„ฑ๊ธฐ, TanStack Start ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์–ด๋Œ‘ํ„ฐ, ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ SolidJS ๊ณตํ†ต ์…ธ์„ ๋‹ด์€ ๊ณต๊ฐœ ์ œํ’ˆ ์‚ฌ์ดํŠธ ์ธํ”„๋ผ | | [`preview/index.html`](preview/index.html) | ํŒŒ์šด๋ฐ์ด์…˜ยท์ปดํฌ๋„ŒํŠธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ (๋‹จ์ผ ํŒŒ์ผ, ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ”๋กœ ์—ด๋ฆผ โ€” `components.html`, `icons.html`๋„ ํ•จ๊ป˜) | | [`brand/index.html`](brand/index.html) | ๋ธŒ๋žœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ ๊ฐ€์ด๋“œ: ๋กœ๊ณ  ๊ทœ์ •, Electric Cyan, ๋ชจํ‹ฐํ”„, ๋ณด์ด์Šค & ํ†ค | @@ -39,7 +37,7 @@ pnpm ์›Œํฌ์ŠคํŽ˜์ด์Šค. `pnpm install` ํ›„: - `pnpm verify` โ€” ๋นŒ๋“œ + ํ† ํฐ ๊ฒ€์ฆ + ๋ฌธ์„œยทpreviewโ†”ํ† ํฐ ๋ถˆ์ผ์น˜ ๊ฒ€์‚ฌ (CI์™€ ๋™์ผ) - `pnpm storybook` โ€” ์ปดํฌ๋„ŒํŠธยทํŒŒ์šด๋ฐ์ด์…˜ ์Šคํ† ๋ฆฌ (:6006, ํˆด๋ฐ”์—์„œ ํ…Œ๋งˆ ์ „ํ™˜); ์ •์  ์‚ฌ์ดํŠธ๋Š” `pnpm build-storybook` (CI์—์„œ๋„ ๋นŒ๋“œ ๊ฒ€์ฆ) -- `pnpm verify:names` โ€” ๋น„๊ณต๊ฐœ `@devslab-kr/*` ์Šค์ฝ”ํ”„์—์„œ ๋ฒ—์–ด๋‚œ ํŒจํ‚ค์ง€๋ช…์„ ๊ฑฐ๋ถ€ +- `pnpm verify:names` โ€” ํŒจํ‚ค์ง€๋ช…ยท๋ผ์ด์„ ์Šคยท๊ณต๊ฐœ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์„ค์ • ๋“œ๋ฆฌํ”„ํŠธ๋ฅผ ๊ฑฐ๋ถ€ - `pnpm verify:foundation` โ€” ์ฝ”์–ด ๊ฒ€์‚ฌ์™€ Storybook ๋นŒ๋“œ, CJKยทRTLยทํ‚ค๋ณด๋“œ, 200% ํ™•๋Œ€, ๊ณ ๋Œ€๋น„ ๋ชจ๋“œ, ๋ชจ์…˜ ๊ฐ์†Œ, ํ„ฐ์น˜ ํƒ€๊นƒ, axe ๋ธŒ๋ผ์šฐ์ € ๊ฒ€์‚ฌ - `pnpm verify:release` โ€” ํŒจํ‚ค์ง€๋ฅผ ์‹ค์ œ๋กœ ๋ฌถ์–ด ์ž„์‹œ ์‹ ๊ทœ ์†Œ๋น„์ž์—์„œ ๋ถˆ๋Ÿฌ์˜ค๊ณ  @@ -50,20 +48,18 @@ pnpm ์›Œํฌ์ŠคํŽ˜์ด์Šค. `pnpm install` ํ›„: `verify:site-kit:release` โ€” ์ •ํ™•ํ•œ ๋กœ์ผ€์ผยท์นดํƒˆ๋กœ๊ทธ ๊ณ„์•ฝ, ๊ณตํ†ต UI ๋™์ž‘, ๋‹ค๊ตญ์–ด ๊ฒ€์ƒ‰ ๋ฌธ์„œ, ํŒจํ‚ค์ง•ยท์‹ ๊ทœ ์†Œ๋น„์žยทpublish dry-run ๊ฒŒ์ดํŠธ -๋‹ค์„ฏ internal ํŒจํ‚ค์ง€๋Š” restricted์ด๋ฉฐ Changesets์˜ lockstep ๊ทธ๋ฃน์œผ๋กœ ๋ฆด๋ฆฌ์Šคํ•œ๋‹ค. ๋ฐฉํ–ฅ์„ฑ +๋‹ค์„ฏ ๊ณต๊ฐœ ํŒจํ‚ค์ง€๋Š” Changesets์˜ lockstep ๊ทธ๋ฃน์œผ๋กœ ๋ฆด๋ฆฌ์Šคํ•œ๋‹ค. ๋ฐฉํ–ฅ์„ฑ ์•„์ด์ฝ˜์—๋Š” `dds-icon--directional`์„ ์‚ฌ์šฉํ•˜๋ฉฐ mirror/์œ ์ง€ ๋ชฉ๋ก์€ -`@devslab-kr/dds-icons/direction-policy.json`์œผ๋กœ ํ•จ๊ป˜ ๋ฐฐํฌํ•œ๋‹ค. +`@devslab/dds-icons/direction-policy.json`์œผ๋กœ ํ•จ๊ป˜ ๋ฐฐํฌํ•œ๋‹ค. -JavaScript ํŒจํ‚ค์ง€ ์ด๋ฆ„์€ ์กฐ์ง ๊ณตํ†ต ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค. ๊ณต๊ฐœ ํŒจํ‚ค์ง€๋Š” npmjs์˜ -`@devslab/*`, restricted ๋‚ด๋ถ€ ํŒจํ‚ค์ง€๋Š” GitHub Packages์˜ `@devslab-kr/*`๋ฅผ -์‚ฌ์šฉํ•œ๋‹ค. ๋กœ์ปฌ ์„ค์น˜๋Š” `.npmrc.example`์„ ๋ณต์‚ฌํ•˜๊ณ  `read:packages` ๊ถŒํ•œ์˜ -GitHub ํ† ํฐ์„ ์ œ๊ณตํ•œ๋‹ค. ๋ฆด๋ฆฌ์Šค ์›Œํฌํ”Œ๋กœ๋Š” ์ €์žฅ์†Œ `GITHUB_TOKEN`์„ ์‚ฌ์šฉํ•˜๋ฉฐ, -์ตœ์ดˆ ๋ฐฐํฌ ํ›„ GitHub ์„ค์ •์—์„œ ํŒจํ‚ค์ง€ ๊ฐ€์‹œ์„ฑ์„ Private์—์„œ Internal๋กœ ๋ฐ”๊พผ๋‹ค. +๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ DDS ํŒจํ‚ค์ง€๋Š” ๋ชจ๋‘ ๊ณต๊ฐœ npm์˜ `@devslab/*`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ DevsLab +Source-Available License 1.0์„ ๋”ฐ๋ฅธ๋‹ค. compatibility canary๋Š” ๋น„๊ณต๊ฐœยท๋ฏธ๋ฐฐํฌ๋กœ +์œ ์ง€ํ•œ๋‹ค. ๋ฆด๋ฆฌ์Šค๋Š” npm provenance์™€ ์ €์žฅ์†Œ `NPM_TOKEN` ์‹œํฌ๋ฆฟ์„ ์‚ฌ์šฉํ•œ๋‹ค. ## ๋กœ๋“œ๋งต ์šฐ์„ ์ˆœ์œ„๋Š” [`docs/backlog.md`](docs/backlog.md)์—. ํŒจํ‚ค์ง€๋Š” ์†Œ๋น„์ž๊ฐ€ ์ƒ๊ธธ ๋•Œ๋งŒ ๋งŒ๋“ ๋‹ค (๋ช…์„ธ ยง8): -`@devslab-kr/dds-tokens` (โœ… 2026-08-13) โ†’ `dds-css` v1 ์ธ๋ฒคํ† ๋ฆฌ (Core 6์ข… โœ… 2026-08-13, +13์ข… โœ… 2026-08-15) โ†’ +`@devslab/dds-tokens` (โœ… 2026-08-13) โ†’ `dds-css` v1 ์ธ๋ฒคํ† ๋ฆฌ (Core 6์ข… โœ… 2026-08-13, +13์ข… โœ… 2026-08-15) โ†’ AskLinq ์ ์šฉ โ†’ `dds-icons` (โœ… 2026-08-15) โ†’ `dds-solid` + `site-kit` โ†’ ๋ชจ๋ฐ”์ผ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ `dds-native` (RN) ๋˜๋Š” Ionic ํ…Œ๋งˆ ๋งคํ•‘. diff --git a/README.md b/README.md index 25bc9b5..b939c2f 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,8 @@ ๐ŸŒ [ํ•œ๊ตญ์–ด](README.ko.md) The design language for DevsLab products (devslab.kr, the Linq family, and -future apps): one set of tokens and rules shared by web and mobile. -Structurally modeled on [Toss Design System (TDS)](https://tossmini-docs.toss.im/tds-react-native/), -but framework-neutral โ€” the core is tokens + CSS; React, Vue, Ionic, and +future apps): one framework-neutral set of tokens, components, and rules +shared by web and mobile. The core is tokens + CSS; React, Vue, Ionic, and React Native are consumers. ## What's here @@ -15,11 +14,11 @@ React Native are consumers. | [`docs/design-system.md`](docs/design-system.md) | The rules spec (v0): principles, architecture, foundations, component contract, governance | | [`docs/decisions.md`](docs/decisions.md) | Decision log โ€” foundation/architecture decisions with rationale | | [`tokens/`](tokens/) | Design token source ([W3C format](https://design-tokens.github.io/community-group/format/)): raw palette, light/dark semantic mappings, typography/spacing/radius/elevation/motion | -| [`packages/dds-tokens/`](packages/dds-tokens/) | `@devslab-kr/dds-tokens` โ€” token build pipeline: `tokens.css`, Tailwind v4 `@theme` + v3 preset, `tokens.ts` (RN/runtime), `ionic.css` | -| [`packages/dds-css/`](packages/dds-css/) | `@devslab-kr/dds-css` โ€” CSS component layer, the spec ยง4.3 v1 inventory (Button, IconButton, TextField, Textarea, Select, Checkbox/Radio, Switch, Badge, Chip, Avatar, Spinner/Skeleton, Divider, Card, ListRow, Tabs, Dialog, Toast, Tooltip, EmptyState); guide in [`docs/components.md`](docs/components.md) | -| [`packages/dds-icons/`](packages/dds-icons/) | `@devslab-kr/dds-icons` โ€” the icon set: 40 core (24 grid, 1.6 stroke) + 7 devslab.kr `site-` icons, shipped as SVG files, a sprite and a path-data map | -| [`packages/dds-solid/`](packages/dds-solid/) | `@devslab-kr/dds-solid` โ€” SolidJS accessible primitives with controlled/uncontrolled state, SSR/hydration, keyboard, focus, and lifecycle contracts | -| [`packages/site-kit/`](packages/site-kit/) | `@devslab-kr/site-kit` โ€” restricted internal infrastructure for public sites: strict 14-locale i18n, SEO/GEO builders, TanStack Start metadata adapter, and accessible SolidJS shared shells | +| [`packages/dds-tokens/`](packages/dds-tokens/) | `@devslab/dds-tokens` โ€” token build pipeline: `tokens.css`, Tailwind v4 `@theme` + v3 preset, `tokens.ts` (RN/runtime), `ionic.css` | +| [`packages/dds-css/`](packages/dds-css/) | `@devslab/dds-css` โ€” CSS component layer, the spec ยง4.3 v1 inventory (Button, IconButton, TextField, Textarea, Select, Checkbox/Radio, Switch, Badge, Chip, Avatar, Spinner/Skeleton, Divider, Card, ListRow, Tabs, Dialog, Toast, Tooltip, EmptyState); guide in [`docs/components.md`](docs/components.md) | +| [`packages/dds-icons/`](packages/dds-icons/) | `@devslab/dds-icons` โ€” the icon set: 40 core (24 grid, 1.6 stroke) + 7 devslab.kr `site-` icons, shipped as SVG files, a sprite and a path-data map | +| [`packages/dds-solid/`](packages/dds-solid/) | `@devslab/dds-solid` โ€” SolidJS accessible primitives with controlled/uncontrolled state, SSR/hydration, keyboard, focus, and lifecycle contracts | +| [`packages/site-kit/`](packages/site-kit/) | `@devslab/site-kit` โ€” public infrastructure for product sites: strict 14-locale i18n, SEO/GEO builders, TanStack Start metadata adapter, and accessible SolidJS shared shells | | [`preview/index.html`](preview/index.html) | Self-contained foundations & components preview โ€” open in a browser (`components.html`, `icons.html` alongside) | | [`brand/index.html`](brand/index.html) | Brand identity guide: logo rules, Electric Cyan, motifs, voice & tone | @@ -40,7 +39,7 @@ pnpm workspace. `pnpm install`, then: (what CI runs) - `pnpm storybook` โ€” component/foundation stories at :6006 (theme switch in the toolbar); `pnpm build-storybook` for the static site (also CI-checked) -- `pnpm verify:names` โ€” reject package-name drift from the private `@devslab-kr/*` scope +- `pnpm verify:names` โ€” reject package-name, license, or public-registry drift - `pnpm verify:foundation` โ€” core checks, Storybook build, CJK/RTL/keyboard, 200% zoom, forced-colors, reduced-motion, touch-target, and axe browser checks - `pnpm verify:release` โ€” build artifacts are packed, exercised from a fresh @@ -51,20 +50,18 @@ pnpm workspace. `pnpm install`, then: `verify:site-kit:release` โ€” exact locale/catalog contracts, shared UI behavior, localized discovery documents, pack, fresh-consumer and publish dry-run gates -The five restricted internal packages release in lockstep through Changesets. Directional +The five public packages release in lockstep through Changesets. Directional icons use `dds-icon--directional`; the authoritative mirror/keep lists ship as -`@devslab-kr/dds-icons/direction-policy.json`. +`@devslab/dds-icons/direction-policy.json`. -JavaScript package naming follows one organization-wide rule: public packages use -`@devslab/*` on npmjs, while restricted internal packages use `@devslab-kr/*` on -GitHub Packages. Copy `.npmrc.example` and provide a GitHub token with `read:packages` -for local installation. Release workflows use the repository `GITHUB_TOKEN`; after a -first publish, package visibility is changed from Private to Internal in GitHub settings. +All distributable DDS packages use `@devslab/*` on the public npm registry under the +DevsLab Source-Available License 1.0. The compatibility canary remains private and +unpublished. Releases use npm provenance and the repository `NPM_TOKEN` secret. ## Roadmap Priorities live in [`docs/backlog.md`](docs/backlog.md). Packages are created only when a consumer exists (spec ยง8): -`@devslab-kr/dds-tokens` (โœ… 2026-08-13) โ†’ `dds-css` v1 inventory (Core 6 โœ… 2026-08-13, +13 โœ… 2026-08-15) โ†’ +`@devslab/dds-tokens` (โœ… 2026-08-13) โ†’ `dds-css` v1 inventory (Core 6 โœ… 2026-08-13, +13 โœ… 2026-08-15) โ†’ AskLinq adoption โ†’ `dds-icons` (โœ… 2026-08-15) โ†’ `dds-solid` + `site-kit` โ†’ `dds-native` (RN) or an Ionic theme mapping, depending on how mobile goes. diff --git a/brand/index.html b/brand/index.html index f23963d..0a0f43e 100644 --- a/brand/index.html +++ b/brand/index.html @@ -468,6 +468,31 @@

๋‹น์‹ ์˜ SaaS,
์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

+ +
+

[07] open source

+

Q-line์€ ๊ณต๊ฐœ ํ”„๋กœ์ ํŠธ์˜ ๊ณตํ†ต ์„œ๋ช…

+

+ DevsLab OSS๋Š” ์–ด๊ธ‹๋‚œ ๋‘ ์‚ฌ๊ฐํ˜•์˜ Q ํ”„๋ ˆ์ž„์„ ๊ณต์œ ํ•˜๊ณ , ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋Šฅ์„ + ๋‚ด๋ถ€ ํ•œ ์ค„๋กœ ๊ตฌ๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์˜ ๋น„๋ก€์™€ ์„  ๊ตต๊ธฐ๋Š” ๊ณ ์ •ํ•˜๋ฉฐ ์ œํ’ˆ๋ณ„ ๊ฒฝ๋กœ๋ฅผ + ์ž„์˜๋กœ ๋‹ค์‹œ ๊ทธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. +

+
+
+

canonical rules

+

๊ณต์‹ OSS ๋ธŒ๋žœ๋“œ ๊ทœ์น™

+

์ ‘๊ทผ์„ฑ, ์ž‘์€ ์•„์ด์ฝ˜, ๋ผ์ดํŠธยท๋‹คํฌ, ๊ธˆ์ง€ ์‚ฌ๋ก€์™€ ์ œํ’ˆ๋ณ„ ์ ์šฉ ๊ทœ์น™์€ ๊ณต์‹ ํŽ˜์ด์ง€๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

+

devslab.kr/brand/open-source/

+
+
+

asset source ยท v0.2.0

+

๋ฒ„์ „์ด ๊ณ ์ •๋œ ์›๋ณธ ์ž์‚ฐ

+

์‚ฌ์ดํŠธ์™€ README์—๋Š” ์ค‘์•™ ์ƒ์„ฑ๋ฌผ์˜ ๋ฒ„์ „ URL์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. DDS๋Š” ํ”„๋กœ์ ํŠธ๋ณ„ ๊ฒฝ๋กœ๋ฅผ ๋ณต์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

+

oss-brand v0.2.0

+
+
+
+