@exem-ui/core 0.1.0-next.bf3c711
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.en.md +98 -0
- package/README.md +98 -0
- package/dist/chunk-5FZNP5G5.js +26 -0
- package/dist/chunk-5FZNP5G5.js.map +1 -0
- package/dist/chunk-6HPRWOQ2.js +47 -0
- package/dist/chunk-6HPRWOQ2.js.map +1 -0
- package/dist/chunk-GFGH6GWQ.mjs +3 -0
- package/dist/chunk-GFGH6GWQ.mjs.map +1 -0
- package/dist/chunk-HM4HRGV5.mjs +20 -0
- package/dist/chunk-HM4HRGV5.mjs.map +1 -0
- package/dist/chunk-HWX4WC5U.js +655 -0
- package/dist/chunk-HWX4WC5U.js.map +1 -0
- package/dist/chunk-KI6ZGM2N.mjs +652 -0
- package/dist/chunk-KI6ZGM2N.mjs.map +1 -0
- package/dist/chunk-P6WYAG3B.js +337 -0
- package/dist/chunk-P6WYAG3B.js.map +1 -0
- package/dist/chunk-R3J2LRVQ.mjs +42 -0
- package/dist/chunk-R3J2LRVQ.mjs.map +1 -0
- package/dist/chunk-SQRMQS2Y.mjs +334 -0
- package/dist/chunk-SQRMQS2Y.mjs.map +1 -0
- package/dist/chunk-UQZ434PE.js +4 -0
- package/dist/chunk-UQZ434PE.js.map +1 -0
- package/dist/chunk-XTSIZ7P3.js +33 -0
- package/dist/chunk-XTSIZ7P3.js.map +1 -0
- package/dist/chunk-Y64GSCMG.mjs +29 -0
- package/dist/chunk-Y64GSCMG.mjs.map +1 -0
- package/dist/colorTokens-DZNM_EDj.d.mts +651 -0
- package/dist/colorTokens-DZNM_EDj.d.ts +651 -0
- package/dist/global.css +480 -0
- package/dist/icon/index.d.mts +39 -0
- package/dist/icon/index.d.ts +39 -0
- package/dist/icon/index.js +4 -0
- package/dist/icon/index.js.map +1 -0
- package/dist/icon/index.mjs +3 -0
- package/dist/icon/index.mjs.map +1 -0
- package/dist/index.d.mts +353 -0
- package/dist/index.d.ts +353 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +15 -0
- package/dist/index.mjs.map +1 -0
- package/dist/shadowTokens-Dnk7nrgI.d.mts +27 -0
- package/dist/shadowTokens-Dnk7nrgI.d.ts +27 -0
- package/dist/tailwindcss/index.d.mts +90 -0
- package/dist/tailwindcss/index.d.ts +90 -0
- package/dist/tailwindcss/index.js +46 -0
- package/dist/tailwindcss/index.js.map +1 -0
- package/dist/tailwindcss/index.mjs +5 -0
- package/dist/tailwindcss/index.mjs.map +1 -0
- package/dist/tokens/color.d.mts +697 -0
- package/dist/tokens/color.d.ts +697 -0
- package/dist/tokens/color.js +21 -0
- package/dist/tokens/color.js.map +1 -0
- package/dist/tokens/color.mjs +4 -0
- package/dist/tokens/color.mjs.map +1 -0
- package/dist/tokens/index.d.mts +3 -0
- package/dist/tokens/index.d.ts +3 -0
- package/dist/tokens/index.js +39 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/tokens/index.mjs +6 -0
- package/dist/tokens/index.mjs.map +1 -0
- package/dist/utils/index.d.mts +22 -0
- package/dist/utils/index.d.ts +22 -0
- package/dist/utils/index.js +21 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +8 -0
- package/dist/utils/index.mjs.map +1 -0
- package/package.json +91 -0
package/README.en.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<h1 align="center">@exem-ui/core</h1>
|
|
3
|
+
<p align="center">Core foundation of the EXEM Design System</p>
|
|
4
|
+
</p>
|
|
5
|
+
|
|
6
|
+
<p align="center">
|
|
7
|
+
<a href="https://www.npmjs.com/package/@exem-ui/core"><img src="https://img.shields.io/npm/v/@exem-ui/core?style=flat-square&color=blue" alt="npm version" /></a>
|
|
8
|
+
<a href="https://www.npmjs.com/package/@exem-ui/core"><img src="https://img.shields.io/npm/dm/@exem-ui/core?style=flat-square" alt="npm downloads" /></a>
|
|
9
|
+
<img src="https://img.shields.io/badge/TypeScript-5.3-3178C6?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript" />
|
|
10
|
+
<a href="https://github.com/CloudMOA/exem-ui/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-green?style=flat-square" alt="license" /></a>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
English | <a href="./README.md">한국어</a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Introduction
|
|
20
|
+
|
|
21
|
+
`@exem-ui/core` is the shared foundation for all EXEM Design System packages. It provides CSS variable-based design tokens, utility functions, TypeScript type definitions, and original SVG icons.
|
|
22
|
+
|
|
23
|
+
## Key Features
|
|
24
|
+
|
|
25
|
+
- **450+ CSS Variables** — 442 color tokens + radius/shadow/breakpoint tokens defined as CSS custom properties
|
|
26
|
+
- **366 SVG Icons** — Original SVG sources with Lucide-compatible metadata
|
|
27
|
+
- **Utility Functions** — `cn()` (clsx + tailwind-merge), CVA-based variant styling
|
|
28
|
+
- **Auto-generated Tokens** — Script-based TypeScript type generation ensuring design-development sync
|
|
29
|
+
- **Dual Output** — CJS + ESM support with complete type definitions
|
|
30
|
+
- **Tree-shakeable** — Subpath exports for selective module imports
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# npm
|
|
36
|
+
npm install @exem-ui/core
|
|
37
|
+
|
|
38
|
+
# pnpm
|
|
39
|
+
pnpm add @exem-ui/core
|
|
40
|
+
|
|
41
|
+
# yarn
|
|
42
|
+
yarn add @exem-ui/core
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Usage
|
|
46
|
+
|
|
47
|
+
### CSS Variables (Global Styles)
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
import '@exem-ui/core/css';
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Utility Functions
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import { cn } from '@exem-ui/core/utils';
|
|
57
|
+
|
|
58
|
+
const className = cn('px-4 py-2', isActive && 'bg-primary text-white');
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Design Tokens
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
import { colorTokens } from '@exem-ui/core/tokens';
|
|
65
|
+
import { colorTokens as colors } from '@exem-ui/core/tokens/color';
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Tailwind CSS Integration
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
import { exemColors, exemPlugin } from '@exem-ui/core/tailwindcss';
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Export Map
|
|
75
|
+
|
|
76
|
+
| Path | Description |
|
|
77
|
+
|------|-------------|
|
|
78
|
+
| `@exem-ui/core` | Main entry (types, constants) |
|
|
79
|
+
| `@exem-ui/core/css` | Global CSS variables |
|
|
80
|
+
| `@exem-ui/core/utils` | `cn()`, utility functions |
|
|
81
|
+
| `@exem-ui/core/icon` | Icon metadata types |
|
|
82
|
+
| `@exem-ui/core/tokens` | Design tokens |
|
|
83
|
+
| `@exem-ui/core/tokens/color` | Detailed color tokens |
|
|
84
|
+
| `@exem-ui/core/tailwindcss` | Tailwind CSS plugin/colors |
|
|
85
|
+
|
|
86
|
+
## Related Packages
|
|
87
|
+
|
|
88
|
+
| Package | Description |
|
|
89
|
+
|---------|-------------|
|
|
90
|
+
| [@exem-ui/react](https://www.npmjs.com/package/@exem-ui/react) | React UI components |
|
|
91
|
+
| [@exem-ui/tailwindcss3](https://www.npmjs.com/package/@exem-ui/tailwindcss3) | Tailwind CSS v3 plugin |
|
|
92
|
+
| [@exem-ui/tailwindcss4](https://www.npmjs.com/package/@exem-ui/tailwindcss4) | Tailwind CSS v4 theme |
|
|
93
|
+
|
|
94
|
+
## License
|
|
95
|
+
|
|
96
|
+
Apache License 2.0 - Copyright 2026 Exem Co., Ltd.
|
|
97
|
+
|
|
98
|
+
See [LICENSE](https://github.com/CloudMOA/exem-ui/blob/main/LICENSE) for details.
|
package/README.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<h1 align="center">@exem-ui/core</h1>
|
|
3
|
+
<p align="center">EXEM 디자인 시스템의 핵심 기반 패키지</p>
|
|
4
|
+
</p>
|
|
5
|
+
|
|
6
|
+
<p align="center">
|
|
7
|
+
<a href="https://www.npmjs.com/package/@exem-ui/core"><img src="https://img.shields.io/npm/v/@exem-ui/core?style=flat-square&color=blue" alt="npm version" /></a>
|
|
8
|
+
<a href="https://www.npmjs.com/package/@exem-ui/core"><img src="https://img.shields.io/npm/dm/@exem-ui/core?style=flat-square" alt="npm downloads" /></a>
|
|
9
|
+
<img src="https://img.shields.io/badge/TypeScript-5.3-3178C6?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript" />
|
|
10
|
+
<a href="https://github.com/CloudMOA/exem-ui/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-green?style=flat-square" alt="license" /></a>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="./README.en.md">English</a> | 한국어
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 소개
|
|
20
|
+
|
|
21
|
+
`@exem-ui/core`는 EXEM 디자인 시스템의 모든 패키지가 공유하는 핵심 기반입니다. CSS 변수 기반 디자인 토큰, 유틸리티 함수, TypeScript 타입 정의, SVG 아이콘 원본을 제공합니다.
|
|
22
|
+
|
|
23
|
+
## 주요 특징
|
|
24
|
+
|
|
25
|
+
- **450+ CSS 변수** — 442개 색상 토큰 + 반경/그림자/브레이크포인트 토큰을 CSS 커스텀 프로퍼티로 정의
|
|
26
|
+
- **366개 SVG 아이콘** — Lucide 호환 메타데이터와 함께 원본 SVG 제공
|
|
27
|
+
- **유틸리티 함수** — `cn()` (clsx + tailwind-merge), CVA 기반 variant 스타일링
|
|
28
|
+
- **자동 생성 토큰** — 스크립트 기반 TypeScript 타입 자동 생성으로 디자인-개발 동기화 보장
|
|
29
|
+
- **듀얼 출력** — CJS + ESM 동시 지원, 완전한 타입 정의 포함
|
|
30
|
+
- **트리 셰이킹** — 서브패스 export로 필요한 모듈만 선택적 임포트
|
|
31
|
+
|
|
32
|
+
## 설치
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# npm
|
|
36
|
+
npm install @exem-ui/core
|
|
37
|
+
|
|
38
|
+
# pnpm
|
|
39
|
+
pnpm add @exem-ui/core
|
|
40
|
+
|
|
41
|
+
# yarn
|
|
42
|
+
yarn add @exem-ui/core
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 사용법
|
|
46
|
+
|
|
47
|
+
### CSS 변수 (글로벌 스타일)
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
import '@exem-ui/core/css';
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 유틸리티 함수
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import { cn } from '@exem-ui/core/utils';
|
|
57
|
+
|
|
58
|
+
const className = cn('px-4 py-2', isActive && 'bg-primary text-white');
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 디자인 토큰
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
import { colorTokens } from '@exem-ui/core/tokens';
|
|
65
|
+
import { colorTokens as colors } from '@exem-ui/core/tokens/color';
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Tailwind CSS 통합
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
import { exemColors, exemPlugin } from '@exem-ui/core/tailwindcss';
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Export Map
|
|
75
|
+
|
|
76
|
+
| 경로 | 설명 |
|
|
77
|
+
|------|------|
|
|
78
|
+
| `@exem-ui/core` | 메인 엔트리 (타입, 상수) |
|
|
79
|
+
| `@exem-ui/core/css` | 글로벌 CSS 변수 |
|
|
80
|
+
| `@exem-ui/core/utils` | `cn()`, 유틸리티 함수 |
|
|
81
|
+
| `@exem-ui/core/icon` | 아이콘 메타데이터 타입 |
|
|
82
|
+
| `@exem-ui/core/tokens` | 디자인 토큰 |
|
|
83
|
+
| `@exem-ui/core/tokens/color` | 색상 토큰 상세 |
|
|
84
|
+
| `@exem-ui/core/tailwindcss` | Tailwind CSS 플러그인/색상 |
|
|
85
|
+
|
|
86
|
+
## 관련 패키지
|
|
87
|
+
|
|
88
|
+
| 패키지 | 설명 |
|
|
89
|
+
|--------|------|
|
|
90
|
+
| [@exem-ui/react](https://www.npmjs.com/package/@exem-ui/react) | React UI 컴포넌트 |
|
|
91
|
+
| [@exem-ui/tailwindcss3](https://www.npmjs.com/package/@exem-ui/tailwindcss3) | Tailwind CSS v3 플러그인 |
|
|
92
|
+
| [@exem-ui/tailwindcss4](https://www.npmjs.com/package/@exem-ui/tailwindcss4) | Tailwind CSS v4 테마 |
|
|
93
|
+
|
|
94
|
+
## 라이선스
|
|
95
|
+
|
|
96
|
+
Apache License 2.0 - Copyright 2026 Exem Co., Ltd.
|
|
97
|
+
|
|
98
|
+
자세한 내용은 [LICENSE](https://github.com/CloudMOA/exem-ui/blob/main/LICENSE)를 참조하세요.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk6HPRWOQ2_js = require('./chunk-6HPRWOQ2.js');
|
|
4
|
+
var chunkXTSIZ7P3_js = require('./chunk-XTSIZ7P3.js');
|
|
5
|
+
var clsx = require('clsx');
|
|
6
|
+
var tailwindMerge = require('tailwind-merge');
|
|
7
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
8
|
+
|
|
9
|
+
var customTwMerge = tailwindMerge.extendTailwindMerge({
|
|
10
|
+
extend: {
|
|
11
|
+
classGroups: {
|
|
12
|
+
"font-size": Object.keys(chunk6HPRWOQ2_js.textPreset_default).map((k) => `text-${k}`),
|
|
13
|
+
"font-style": Object.keys(chunk6HPRWOQ2_js.fontPreset_default).map((k) => `font-${k}`),
|
|
14
|
+
rounded: Object.keys(chunkXTSIZ7P3_js.radiusTokens_default).map((k) => `rounded-${k}`)
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
var cn = (...inputs) => customTwMerge(clsx.clsx(inputs));
|
|
19
|
+
|
|
20
|
+
Object.defineProperty(exports, "cva", {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: function () { return classVarianceAuthority.cva; }
|
|
23
|
+
});
|
|
24
|
+
exports.cn = cn;
|
|
25
|
+
//# sourceMappingURL=chunk-5FZNP5G5.js.map
|
|
26
|
+
//# sourceMappingURL=chunk-5FZNP5G5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/cn.ts"],"names":["extendTailwindMerge","textPreset_default","fontPreset_default","radiusTokens_default","clsx"],"mappings":";;;;;;;;AAKA,IAAM,gBAAgBA,iCAAA,CAAoB;AAAA,EACxC,MAAA,EAAQ;AAAA,IACN,WAAA,EAAa;AAAA,MACX,WAAA,EAAa,MAAA,CAAO,IAAA,CAAKC,mCAAU,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,MAC3D,YAAA,EAAc,MAAA,CAAO,IAAA,CAAKC,mCAAU,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,MAC5D,OAAA,EAAS,MAAA,CAAO,IAAA,CAAKC,qCAAM,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,QAAA,EAAW,CAAC,CAAA,CAAE;AAAA;AACxD;AAEJ,CAAC,CAAA;AAkBM,IAAM,KAAK,CAAA,GAAI,MAAA,KAAiC,aAAA,CAAcC,SAAA,CAAK,MAAM,CAAC","file":"chunk-5FZNP5G5.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\nimport { radius } from '../generated';\nimport { fontPreset, textPreset } from '../tailwindcss';\n\nconst customTwMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n 'font-size': Object.keys(textPreset).map((k) => `text-${k}`),\n 'font-style': Object.keys(fontPreset).map((k) => `font-${k}`),\n rounded: Object.keys(radius).map((k) => `rounded-${k}`),\n },\n },\n});\n\n/**\n * Tailwind CSS 클래스를 조건부로 병합합니다.\n * EXEM UI 커스텀 토큰(rounded, font-size, font-style) 간 충돌을 자동 해소합니다.\n *\n * @param inputs - 병합할 클래스 값 (문자열, 객체, 배열)\n * @returns 병합된 클래스 문자열\n *\n * @example\n * ```ts\n * cn('bg-primary', isActive && 'bg-secondary')\n * // → 'bg-secondary' (isActive가 true일 때)\n *\n * cn('rounded-weak', 'rounded-strong')\n * // → 'rounded-strong' (커스텀 radius 충돌 해소)\n * ```\n */\nexport const cn = (...inputs: ClassValue[]): string => customTwMerge(clsx(inputs));\n"]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/tailwindcss/fontPreset.ts
|
|
4
|
+
var fontPreset = {
|
|
5
|
+
regular: { fontWeight: "400", lineHeight: "140%" },
|
|
6
|
+
medium: { fontWeight: "500", lineHeight: "140%" },
|
|
7
|
+
semibold: { fontWeight: "600", lineHeight: "140%" },
|
|
8
|
+
bold: { fontWeight: "700", lineHeight: "140%" },
|
|
9
|
+
readable: { fontWeight: "400", lineHeight: "160%" }
|
|
10
|
+
};
|
|
11
|
+
var fontPreset_default = fontPreset;
|
|
12
|
+
|
|
13
|
+
// src/tailwindcss/gradient.ts
|
|
14
|
+
var gradientTokens = {
|
|
15
|
+
"exem-logo": "#FF470E 0%, #3E81F6 50%, #FFE100 100%"
|
|
16
|
+
};
|
|
17
|
+
var gradientDirections = {
|
|
18
|
+
"to-right": "to right",
|
|
19
|
+
"to-left": "to left",
|
|
20
|
+
"to-top": "to top",
|
|
21
|
+
"to-bottom": "to bottom",
|
|
22
|
+
"to-top-right": "to top right",
|
|
23
|
+
"to-top-left": "to top left",
|
|
24
|
+
"to-bottom-right": "to bottom right",
|
|
25
|
+
"to-bottom-left": "to bottom left"
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// src/tailwindcss/textPreset.ts
|
|
29
|
+
var textPreset = {
|
|
30
|
+
"header-1": "28px",
|
|
31
|
+
"header-2": "24px",
|
|
32
|
+
"title-1": "20px",
|
|
33
|
+
"title-2": "18px",
|
|
34
|
+
"body-1": "16px",
|
|
35
|
+
"body-2": "14px",
|
|
36
|
+
"body-3": "12px",
|
|
37
|
+
caption: "11px",
|
|
38
|
+
code: "14px"
|
|
39
|
+
};
|
|
40
|
+
var textPreset_default = textPreset;
|
|
41
|
+
|
|
42
|
+
exports.fontPreset_default = fontPreset_default;
|
|
43
|
+
exports.gradientDirections = gradientDirections;
|
|
44
|
+
exports.gradientTokens = gradientTokens;
|
|
45
|
+
exports.textPreset_default = textPreset_default;
|
|
46
|
+
//# sourceMappingURL=chunk-6HPRWOQ2.js.map
|
|
47
|
+
//# sourceMappingURL=chunk-6HPRWOQ2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tailwindcss/fontPreset.ts","../src/tailwindcss/gradient.ts","../src/tailwindcss/textPreset.ts"],"names":[],"mappings":";;;AAcA,IAAM,UAAA,GAAa;AAAA,EACjB,OAAA,EAAS,EAAE,UAAA,EAAY,KAAA,EAAO,YAAY,MAAA,EAAO;AAAA,EACjD,MAAA,EAAQ,EAAE,UAAA,EAAY,KAAA,EAAO,YAAY,MAAA,EAAO;AAAA,EAChD,QAAA,EAAU,EAAE,UAAA,EAAY,KAAA,EAAO,YAAY,MAAA,EAAO;AAAA,EAClD,IAAA,EAAM,EAAE,UAAA,EAAY,KAAA,EAAO,YAAY,MAAA,EAAO;AAAA,EAC9C,QAAA,EAAU,EAAE,UAAA,EAAY,KAAA,EAAO,YAAY,MAAA;AAC7C,CAAA;AAEA,IAAO,kBAAA,GAAQ;;;ACVf,IAAM,cAAA,GAAiB;AAAA,EACrB,WAAA,EAAa;AACf;AAGA,IAAM,kBAAA,GAAqB;AAAA,EACzB,UAAA,EAAY,UAAA;AAAA,EACZ,SAAA,EAAW,SAAA;AAAA,EACX,QAAA,EAAU,QAAA;AAAA,EACV,WAAA,EAAa,WAAA;AAAA,EACb,cAAA,EAAgB,cAAA;AAAA,EAChB,aAAA,EAAe,aAAA;AAAA,EACf,iBAAA,EAAmB,iBAAA;AAAA,EACnB,gBAAA,EAAkB;AACpB;;;ACZA,IAAM,UAAA,GAAqC;AAAA,EACzC,UAAA,EAAY,MAAA;AAAA,EACZ,UAAA,EAAY,MAAA;AAAA,EACZ,SAAA,EAAW,MAAA;AAAA,EACX,SAAA,EAAW,MAAA;AAAA,EACX,QAAA,EAAU,MAAA;AAAA,EACV,QAAA,EAAU,MAAA;AAAA,EACV,QAAA,EAAU,MAAA;AAAA,EACV,OAAA,EAAS,MAAA;AAAA,EACT,IAAA,EAAM;AACR,CAAA;AAEA,IAAO,kBAAA,GAAQ","file":"chunk-6HPRWOQ2.js","sourcesContent":["/**\n * `font-*` 유틸리티 프리셋 토큰.\n * 각 키는 Tailwind `font-{key}` 클래스로 매핑되며,\n * fontWeight와 lineHeight를 함께 지정합니다.\n *\n * text-* 유틸리티는 font-size만 담당하므로,\n * line-height는 font-* 유틸리티가 단독으로 관리합니다.\n *\n * @example\n * ```\n * text-body-2 font-regular → 14px, weight 400, lh 140%\n * text-body-2 font-readable → 14px, weight 400, lh 160%\n * ```\n */\nconst fontPreset = {\n regular: { fontWeight: '400', lineHeight: '140%' },\n medium: { fontWeight: '500', lineHeight: '140%' },\n semibold: { fontWeight: '600', lineHeight: '140%' },\n bold: { fontWeight: '700', lineHeight: '140%' },\n readable: { fontWeight: '400', lineHeight: '160%' },\n} as const;\n\nexport default fontPreset;\nexport type FontPresetKeys = keyof typeof fontPreset;\n","/**\n * 그라데이션 정의.\n * 이름별 색상 스톱과 방향 값을 제공합니다.\n *\n * @example\n * ```\n * bg-gradient-exem-logo-to-right\n * → linear-gradient(to right, #FF470E 0%, #3E81F6 50%, #FFE100 100%)\n * ```\n */\n\n/** 그라데이션 이름별 색상 스톱 */\nconst gradientTokens = {\n 'exem-logo': '#FF470E 0%, #3E81F6 50%, #FFE100 100%',\n} as const;\n\n/** 그라데이션 방향 값 */\nconst gradientDirections = {\n 'to-right': 'to right',\n 'to-left': 'to left',\n 'to-top': 'to top',\n 'to-bottom': 'to bottom',\n 'to-top-right': 'to top right',\n 'to-top-left': 'to top left',\n 'to-bottom-right': 'to bottom right',\n 'to-bottom-left': 'to bottom left',\n} as const;\n\nexport { gradientDirections, gradientTokens };\nexport type gradientDirectionKeys = keyof typeof gradientDirections;\nexport type gradientTokenKeys = keyof typeof gradientTokens;\n","/**\n * `text-*` 유틸리티 프리셋 토큰.\n * 각 키는 Tailwind `text-{key}` 클래스로 매핑되며, font-size를 설정합니다.\n * `code`는 플러그인에서 font-family를 추가로 주입합니다.\n *\n * line-height는 `font-*` 유틸리티(fontPreset 토큰)에서 관리합니다.\n *\n * @example\n * ```\n * text-header-1 font-regular → 28px, weight 400, lh 140%\n * text-body-2 font-readable → 14px, weight 400, lh 160%\n * text-code font-regular → 14px, JetBrains Mono, weight 400, lh 140%\n * ```\n */\nconst textPreset: Record<string, string> = {\n 'header-1': '28px',\n 'header-2': '24px',\n 'title-1': '20px',\n 'title-2': '18px',\n 'body-1': '16px',\n 'body-2': '14px',\n 'body-3': '12px',\n caption: '11px',\n code: '14px',\n};\n\nexport default textPreset;\nexport type TextPresetKeys =\n | 'header-1'\n | 'header-2'\n | 'title-1'\n | 'title-2'\n | 'body-1'\n | 'body-2'\n | 'body-3'\n | 'caption'\n | 'code';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-GFGH6GWQ.mjs"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { fontPreset_default, textPreset_default } from './chunk-R3J2LRVQ.mjs';
|
|
2
|
+
import { radiusTokens_default } from './chunk-Y64GSCMG.mjs';
|
|
3
|
+
import { clsx } from 'clsx';
|
|
4
|
+
import { extendTailwindMerge } from 'tailwind-merge';
|
|
5
|
+
export { cva } from 'class-variance-authority';
|
|
6
|
+
|
|
7
|
+
var customTwMerge = extendTailwindMerge({
|
|
8
|
+
extend: {
|
|
9
|
+
classGroups: {
|
|
10
|
+
"font-size": Object.keys(textPreset_default).map((k) => `text-${k}`),
|
|
11
|
+
"font-style": Object.keys(fontPreset_default).map((k) => `font-${k}`),
|
|
12
|
+
rounded: Object.keys(radiusTokens_default).map((k) => `rounded-${k}`)
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
var cn = (...inputs) => customTwMerge(clsx(inputs));
|
|
17
|
+
|
|
18
|
+
export { cn };
|
|
19
|
+
//# sourceMappingURL=chunk-HM4HRGV5.mjs.map
|
|
20
|
+
//# sourceMappingURL=chunk-HM4HRGV5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/cn.ts"],"names":[],"mappings":";;;;;;AAKA,IAAM,gBAAgB,mBAAA,CAAoB;AAAA,EACxC,MAAA,EAAQ;AAAA,IACN,WAAA,EAAa;AAAA,MACX,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,kBAAU,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,MAC3D,YAAA,EAAc,MAAA,CAAO,IAAA,CAAK,kBAAU,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,MAC5D,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,oBAAM,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,QAAA,EAAW,CAAC,CAAA,CAAE;AAAA;AACxD;AAEJ,CAAC,CAAA;AAkBM,IAAM,KAAK,CAAA,GAAI,MAAA,KAAiC,aAAA,CAAc,IAAA,CAAK,MAAM,CAAC","file":"chunk-HM4HRGV5.mjs","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\nimport { radius } from '../generated';\nimport { fontPreset, textPreset } from '../tailwindcss';\n\nconst customTwMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n 'font-size': Object.keys(textPreset).map((k) => `text-${k}`),\n 'font-style': Object.keys(fontPreset).map((k) => `font-${k}`),\n rounded: Object.keys(radius).map((k) => `rounded-${k}`),\n },\n },\n});\n\n/**\n * Tailwind CSS 클래스를 조건부로 병합합니다.\n * EXEM UI 커스텀 토큰(rounded, font-size, font-style) 간 충돌을 자동 해소합니다.\n *\n * @param inputs - 병합할 클래스 값 (문자열, 객체, 배열)\n * @returns 병합된 클래스 문자열\n *\n * @example\n * ```ts\n * cn('bg-primary', isActive && 'bg-secondary')\n * // → 'bg-secondary' (isActive가 true일 때)\n *\n * cn('rounded-weak', 'rounded-strong')\n * // → 'rounded-strong' (커스텀 radius 충돌 해소)\n * ```\n */\nexport const cn = (...inputs: ClassValue[]): string => customTwMerge(clsx(inputs));\n"]}
|