Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
117b8d9
docs: document supported syntax, override rules and limitations
owjs3901 Oct 3, 2026
80fb7c3
chore: satisfy clippy assert_is_empty lint on Rust 1.99
owjs3901 Oct 3, 2026
5162032
docs: link the build-error reference from READMEs
owjs3901 Oct 4, 2026
617fce2
docs: add the build-error reference page
owjs3901 Oct 4, 2026
bb9db74
docs: list the build-error reference in the docs menu
owjs3901 Oct 4, 2026
b2248ed
docs: link the build-error reference from the limitations page
owjs3901 Oct 4, 2026
2b6c03e
docs: link the build-error reference from package READMEs
owjs3901 Oct 4, 2026
575884a
docs: correct Button and optimization output examples
owjs3901 Oct 5, 2026
2a1548f
docs: update legacy theme schema and declaration paths
owjs3901 Oct 5, 2026
783f1c8
docs: clarify vanilla-extract ordinary-module support
owjs3901 Oct 5, 2026
cef0c83
docs: refresh extractor guide with actual probe output
owjs3901 Oct 5, 2026
b11bb0e
docs: lock breakpoint tables and complete verified stylesheet examples
owjs3901 Oct 5, 2026
d1dd51d
docs: synchronize root README examples with actual output
owjs3901 Oct 5, 2026
5a7e28d
Merge main a935315c prerequisite into docs/known-limitations
owjs3901 Oct 8, 2026
3b4e741
Merge main b711ed1f into docs/known-limitations
owjs3901 Oct 8, 2026
087b7f6
Merge main 9a953607 into docs/known-limitations
owjs3901 Oct 8, 2026
8c0429e
Merge main db631c6c into docs/known-limitations
owjs3901 Oct 8, 2026
f07dcfc
Merge main 11790bef into docs/known-limitations
owjs3901 Oct 8, 2026
c55acbe
Merge updated #732 into docs/build-errors
owjs3901 Oct 8, 2026
ac658f1
Merge updated #753 into docs/accuracy
owjs3901 Oct 8, 2026
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
8 changes: 8 additions & 0 deletions .changepacks/changepack_log_build_error_docs.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"changes": {
"packages/eslint-plugin/package.json": "Patch",
"packages/react/package.json": "Patch"
},
"note": "The @devup-ui/react README and the css-utils-literal-only rule docs link their mention of build errors to the new Build Errors reference (https://devup-ui.com/docs/build-errors), which lists the build errors grouped by API; the docs sidebar lists the page after Supported Syntax & Limitations, whose Build errors section links to it. Documentation only: no new build errors",
"date": "2026-10-01T00:00:00.000Z"
}
7 changes: 7 additions & 0 deletions .changepacks/changepack_log_docs_accuracy.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"changes": {
"apps/landing/package.json": "Patch"
},
"note": "Documentation examples now preserve Button event handlers and show the CSS actually emitted for values, colors, keyframes, fonts and atomic rule reuse. Documentation only: no new build errors.",
"date": "2026-10-01T00:00:00.000Z"
}
8 changes: 8 additions & 0 deletions .changepacks/changepack_log_docs_breakpoints.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch",
"apps/landing/package.json": "Patch"
},
"note": "Typography documents the emitted default breakpoints, and source-backed integration tests keep the public breakpoint lists and range bounds synchronized with the production defaults. No runtime changes or new build errors.",
"date": "2026-10-01T00:00:00.000Z"
}
7 changes: 7 additions & 0 deletions .changepacks/changepack_log_extractor_docs.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"changes": {
"bindings/devup-ui-wasm/package.json": "Patch"
},
"note": "The extractor guide shows reproducible native-element output, generated CSS-variable bindings, and actual atomic CSS rather than obsolete class names. Documentation only: no new build errors.",
"date": "2026-10-01T00:00:00.000Z"
}
7 changes: 7 additions & 0 deletions .changepacks/changepack_log_known_limitations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"changes": {
"packages/react/package.json": "Patch"
},
"note": "The README no longer claims every CSS-in-JS pattern compiles: it describes what the build compiles and that anything it cannot know is a CSS variable or a located build error, and links the new Supported Syntax & Limitations page, which lists what compiles, the style override rules (where a later part wins and where the CSS cascade decides), Baseline 2024 browser support, that a component taking the css prop must pass className and style on, the runtime-only APIs and how each is handled, and the known limitations",
"date": "2026-10-01T00:00:00.000Z"
}
76 changes: 51 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
</h3>

<p align="center">
<strong>Zero Config · Zero FOUC · Zero Runtime · Complete CSS-in-JS Syntax Coverage</strong>
<strong>Zero Config · Zero FOUC · Zero Runtime · Build-Time CSS-in-JS</strong>
</p>

---
Expand Down Expand Up @@ -41,7 +41,7 @@ English | [한국어](README_ko.md)

Traditional CSS-in-JS solutions force you to choose between developer experience and performance. Devup UI eliminates this trade-off entirely by processing all styles at build time using a Rust-powered preprocessor.

- **Complete Syntax Coverage**: Every CSS-in-JS pattern you know — variables, conditionals, responsive arrays, pseudo-selectors — all fully supported
- **Broad Syntax Coverage**: Variables, conditionals, responsive arrays, pseudo-selectors, `styled()`, Emotion's `css` prop and more compile at build time; anything the build cannot know is a [located build error](https://devup-ui.com/docs/build-errors), never a silent miss ([supported syntax & limitations](https://devup-ui.com/docs/limitations))
- **Familiar API**: `styled()` API compatible with styled-components and Emotion patterns
- **True Zero Runtime**: No JavaScript execution for styling at runtime. Period.
- **Smallest Bundle Size**: Optimized class names (`a`, `b`, ... `aa`, `ab`) minimize CSS output
Expand Down Expand Up @@ -111,47 +111,73 @@ Devup UI transforms your components at build time. Class names are generated usi

**Basic transformation:**

Generated class and CSS variable names may change between versions, build state, and prefix settings; do not manually reuse them.

You write:

```tsx
// You write:
const variable = <Box _hover={{ bg: 'blue' }} bg="red" p={4} />
import { Box } from '@devup-ui/react'

const example = <Box _hover={{ bg: 'blue' }} bg="red" p={4} />
```

// Devup UI generates:
const variable = <div className="a b c" />
Devup UI generates:

// With CSS:
// .a { background-color: red; }
// .b { padding: 1rem; }
// .c:hover { background-color: blue; }
```tsx
import "@devup-ui/react/devup-ui.css";
const example = <div className="a b c" />;
```

With CSS:

```css
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.b{background:red}.c{padding:16px}.a:hover{background:blue}
```

**Dynamic values become CSS variables:**

You write:

```tsx
// You write:
import { Box } from '@devup-ui/react'

const example = <Box bg={colorVariable} />
```

// Devup UI generates:
const example = <div className="a" style={{ '--a': colorVariable }} />
Devup UI generates:

// With CSS:
// .a { background-color: var(--a); }
```tsx
import "@devup-ui/react/devup-ui.css";
const example = <div className="a" style={{ "--b": colorVariable }} />;
```

With CSS:

```css
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.a{background:var(--b)}
```

**Complex expressions and responsive arrays — fully supported:**
**Complex expressions and responsive arrays:**

You write:

```tsx
// You write:
import { Box } from '@devup-ui/react'

const example = <Box bg={['red', 'blue', isActive ? 'green' : dynamicColor]} />
```

Devup UI generates:

```tsx
import "@devup-ui/react/devup-ui.css";
const example = <div className={`a b ${isActive ? "c" : "d"}`} style={{ "--e": dynamicColor }} />;
```

// Devup UI generates:
const example = (
<div
className={`a b ${isActive ? 'c' : 'd'}`}
style={{ '--d': dynamicColor }}
/>
)
With responsive CSS for each breakpoint:

// With responsive CSS for each breakpoint
```css
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.a{background:red}@media(min-width:480px){.b{background:blue}}@media(min-width:768px){.c{background:green}.d{background:var(--e)}}
```

**Type-safe theming:**
Expand Down
74 changes: 50 additions & 24 deletions README_ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
</h3>

<p align="center">
<strong>Zero Config · Zero FOUC · Zero Runtime · 모든 CSS-in-JS 문법 완벽 지원</strong>
<strong>Zero Config · Zero FOUC · Zero Runtime · 빌드 타임 CSS-in-JS</strong>
</p>

---
Expand Down Expand Up @@ -41,7 +41,7 @@

기존 CSS-in-JS 솔루션들은 개발자 경험과 성능 사이에서 타협을 강요했습니다. Devup UI는 Rust 기반 전처리기를 통해 모든 스타일을 빌드 타임에 처리함으로써 이 트레이드오프를 완전히 제거합니다.

- **완전한 문법 지원**: 변수, 조건문, 반응형 배열, 가상 선택자 등 모든 CSS-in-JS 패턴을 완벽하게 지원
- **폭넓은 문법 지원**: 변수, 조건문, 반응형 배열, 가상 선택자, `styled()`, Emotion `css` prop 등을 빌드 타임에 컴파일합니다. 빌드가 알 수 없는 것은 조용히 빠지지 않고 [위치가 표시된 빌드 오류](https://devup-ui.com/docs/build-errors)가 됩니다 ([지원 문법과 한계](https://devup-ui.com/docs/limitations))
- **익숙한 API**: styled-components, Emotion과 호환되는 `styled()` API 제공
- **진정한 제로 런타임**: 런타임에서 스타일링을 위한 JavaScript 실행이 전혀 없습니다
- **가장 작은 번들 크기**: 최적화된 클래스명(`a`, `b`, ... `aa`, `ab`)으로 CSS 출력 최소화
Expand Down Expand Up @@ -111,47 +111,73 @@ Devup UI는 빌드 타임에 컴포넌트를 변환합니다. 클래스명은 CS

**기본 변환:**

생성된 클래스명과 CSS 변수명은 버전, 빌드 상태, 접두사 설정에 따라 달라질 수 있으므로 직접 재사용하지 마세요.

개발자가 작성:

```tsx
// 개발자가 작성:
import { Box } from '@devup-ui/react'

const example = <Box _hover={{ bg: 'blue' }} bg="red" p={4} />
```

// Devup UI가 생성:
const generated = <div className="a b c" />
Devup UI가 생성:

// CSS:
// .a { background-color: red; }
// .b { padding: 1rem; }
// .c:hover { background-color: blue; }
```tsx
import "@devup-ui/react/devup-ui.css";
const example = <div className="a b c" />;
```

CSS:

```css
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.b{background:red}.c{padding:16px}.a:hover{background:blue}
```

**동적 값은 CSS 변수로 변환:**

개발자가 작성:

```tsx
// 개발자가 작성:
import { Box } from '@devup-ui/react'

const example = <Box bg={colorVariable} />
```

// Devup UI가 생성:
const generated = <div className="a" style={{ '--a': colorVariable }} />
Devup UI가 생성:

// CSS:
// .a { background-color: var(--a); }
```tsx
import "@devup-ui/react/devup-ui.css";
const example = <div className="a" style={{ "--b": colorVariable }} />;
```

CSS:

```css
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.a{background:var(--b)}
```

**복잡한 표현식과 반응형 배열 — 완벽 지원:**
**복잡한 표현식과 반응형 배열:**

개발자가 작성:

```tsx
// 개발자가 작성:
import { Box } from '@devup-ui/react'

const example = <Box bg={['red', 'blue', isActive ? 'green' : dynamicColor]} />
```

Devup UI가 생성:

```tsx
import "@devup-ui/react/devup-ui.css";
const example = <div className={`a b ${isActive ? "c" : "d"}`} style={{ "--e": dynamicColor }} />;
```

// Devup UI가 생성:
const generated = (
<div
className={`a b ${isActive ? 'c' : 'd'}`}
style={{ '--d': dynamicColor }}
/>
)
각 브레이크포인트에 대한 반응형 CSS:

// 각 브레이크포인트에 대한 반응형 CSS 생성
```css
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.a{background:red}@media(min-width:480px){.b{background:blue}}@media(min-width:768px){.c{background:green}.d{background:var(--e)}}
```

**타입 세이프 테마:**
Expand Down
2 changes: 2 additions & 0 deletions apps/landing/src/app/(detail)/docs/LeftMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ export function LeftMenu() {
Core Concepts
</MenuItem>
<MenuItem to="/docs/features">Features</MenuItem>
<MenuItem to="/docs/limitations">Supported Syntax & Limitations</MenuItem>
<MenuItem to="/docs/build-errors">Build Errors</MenuItem>
<MenuItem
subMenu={[
{
Expand Down
26 changes: 10 additions & 16 deletions apps/landing/src/app/(detail)/docs/api/button/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -24,28 +24,22 @@ function App() {
}
```

The Button component defined above will render like this:
With the build plugin configured, the Button component is transformed into a native
`button`. The React event handler remains a function expression, not a string
attribute. This is the extracted code and CSS from an isolated run with an empty
theme and the default prefix; generated names depend on extraction state and prefix.

```tsx
```text
import "@devup-ui/react/devup-ui.css";
function App() {
return (
<button className="a b c" onClick="alert('clicked!!')">
return <button onClick={() => alert("clicked!!")} className="a b c">
click me
</button>
)
</button>;
}
```

```css
.a {
background: red;
}
.b {
width: 100px;
}
.c {
height: 100px;
}
```text
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.a{background:red}.b{height:100px}.c{width:100px}
```

If you pass a number without a unit to a style property, it will be automatically scaled by 4.
Expand Down
Loading
Loading