@eeennsu/tokens 0.1.0
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/dist/brands/bakery.d.ts +56 -0
- package/dist/brands/bakery.d.ts.map +1 -0
- package/dist/brands/bakery.js +57 -0
- package/dist/brands/bakery.js.map +1 -0
- package/dist/brands/base.d.ts +56 -0
- package/dist/brands/base.d.ts.map +1 -0
- package/dist/brands/base.js +57 -0
- package/dist/brands/base.js.map +1 -0
- package/dist/contracts.d.ts +167 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +26 -0
- package/dist/contracts.js.map +1 -0
- package/dist/generated/values.d.ts +192 -0
- package/dist/generated/values.d.ts.map +1 -0
- package/dist/generated/values.js +237 -0
- package/dist/generated/values.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/package.json +46 -0
- package/themes/bakery.css +183 -0
- package/themes/base.css +183 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 브랜드 bakery 의 semantic 색 해석값 (RN 런타임용, AC-4).
|
|
3
|
+
* 별칭(fg.danger · border.focus)도 여기서는 해석값이다 — RN 은 var() 를 쓸 수 없다.
|
|
4
|
+
* 소비자 로컬 오버라이드(C-5b)는 이 객체에 닿지 않는다(알려진 동작 11).
|
|
5
|
+
*/
|
|
6
|
+
export declare const colors: {
|
|
7
|
+
readonly light: {
|
|
8
|
+
readonly bg: {
|
|
9
|
+
readonly canvas: "oklch(98.7% 0.022 95.277)";
|
|
10
|
+
readonly surface: "oklch(100% 0 0)";
|
|
11
|
+
readonly "surface-muted": "oklch(96.2% 0.059 95.617)";
|
|
12
|
+
readonly "surface-hover": "oklch(92.4% 0.12 95.746)";
|
|
13
|
+
readonly brand: "oklch(66.6% 0.179 58.318)";
|
|
14
|
+
readonly "brand-hover": "oklch(55.5% 0.163 48.998)";
|
|
15
|
+
readonly danger: "oklch(57.7% 0.245 27.325)";
|
|
16
|
+
readonly "danger-hover": "oklch(50.5% 0.213 27.518)";
|
|
17
|
+
readonly overlay: "oklch(0% 0 0 / 0.5)";
|
|
18
|
+
};
|
|
19
|
+
readonly fg: {
|
|
20
|
+
readonly default: "oklch(21% 0.034 264.665)";
|
|
21
|
+
readonly muted: "oklch(44.6% 0.03 256.802)";
|
|
22
|
+
readonly danger: "oklch(57.7% 0.245 27.325)";
|
|
23
|
+
readonly "on-brand": "oklch(100% 0 0)";
|
|
24
|
+
readonly "on-danger": "oklch(100% 0 0)";
|
|
25
|
+
};
|
|
26
|
+
readonly border: {
|
|
27
|
+
readonly default: "oklch(87.9% 0.169 91.605)";
|
|
28
|
+
readonly focus: "oklch(66.6% 0.179 58.318)";
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
readonly dark: {
|
|
32
|
+
readonly bg: {
|
|
33
|
+
readonly canvas: "oklch(13% 0.028 261.692)";
|
|
34
|
+
readonly surface: "oklch(21% 0.034 264.665)";
|
|
35
|
+
readonly "surface-muted": "oklch(27.8% 0.033 256.848)";
|
|
36
|
+
readonly "surface-hover": "oklch(37.3% 0.034 259.733)";
|
|
37
|
+
readonly brand: "oklch(76.9% 0.188 70.08)";
|
|
38
|
+
readonly "brand-hover": "oklch(82.8% 0.189 84.429)";
|
|
39
|
+
readonly danger: "oklch(63.7% 0.237 25.331)";
|
|
40
|
+
readonly "danger-hover": "oklch(70.4% 0.191 22.216)";
|
|
41
|
+
readonly overlay: "oklch(0% 0 0 / 0.6)";
|
|
42
|
+
};
|
|
43
|
+
readonly fg: {
|
|
44
|
+
readonly default: "oklch(98.5% 0.002 247.839)";
|
|
45
|
+
readonly muted: "oklch(70.7% 0.022 261.325)";
|
|
46
|
+
readonly danger: "oklch(63.7% 0.237 25.331)";
|
|
47
|
+
readonly "on-brand": "oklch(13% 0.028 261.692)";
|
|
48
|
+
readonly "on-danger": "oklch(100% 0 0)";
|
|
49
|
+
};
|
|
50
|
+
readonly border: {
|
|
51
|
+
readonly default: "oklch(37.3% 0.034 259.733)";
|
|
52
|
+
readonly focus: "oklch(76.9% 0.188 70.08)";
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=bakery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bakery.d.ts","sourceRoot":"","sources":["../../src/brands/bakery.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDT,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// 생성 파일. packages/tokens/scripts/build.ts 가 만든다. 직접 수정하지 않는다.
|
|
2
|
+
/**
|
|
3
|
+
* 브랜드 bakery 의 semantic 색 해석값 (RN 런타임용, AC-4).
|
|
4
|
+
* 별칭(fg.danger · border.focus)도 여기서는 해석값이다 — RN 은 var() 를 쓸 수 없다.
|
|
5
|
+
* 소비자 로컬 오버라이드(C-5b)는 이 객체에 닿지 않는다(알려진 동작 11).
|
|
6
|
+
*/
|
|
7
|
+
export const colors = {
|
|
8
|
+
"light": {
|
|
9
|
+
"bg": {
|
|
10
|
+
"canvas": "oklch(98.7% 0.022 95.277)",
|
|
11
|
+
"surface": "oklch(100% 0 0)",
|
|
12
|
+
"surface-muted": "oklch(96.2% 0.059 95.617)",
|
|
13
|
+
"surface-hover": "oklch(92.4% 0.12 95.746)",
|
|
14
|
+
"brand": "oklch(66.6% 0.179 58.318)",
|
|
15
|
+
"brand-hover": "oklch(55.5% 0.163 48.998)",
|
|
16
|
+
"danger": "oklch(57.7% 0.245 27.325)",
|
|
17
|
+
"danger-hover": "oklch(50.5% 0.213 27.518)",
|
|
18
|
+
"overlay": "oklch(0% 0 0 / 0.5)"
|
|
19
|
+
},
|
|
20
|
+
"fg": {
|
|
21
|
+
"default": "oklch(21% 0.034 264.665)",
|
|
22
|
+
"muted": "oklch(44.6% 0.03 256.802)",
|
|
23
|
+
"danger": "oklch(57.7% 0.245 27.325)",
|
|
24
|
+
"on-brand": "oklch(100% 0 0)",
|
|
25
|
+
"on-danger": "oklch(100% 0 0)"
|
|
26
|
+
},
|
|
27
|
+
"border": {
|
|
28
|
+
"default": "oklch(87.9% 0.169 91.605)",
|
|
29
|
+
"focus": "oklch(66.6% 0.179 58.318)"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"dark": {
|
|
33
|
+
"bg": {
|
|
34
|
+
"canvas": "oklch(13% 0.028 261.692)",
|
|
35
|
+
"surface": "oklch(21% 0.034 264.665)",
|
|
36
|
+
"surface-muted": "oklch(27.8% 0.033 256.848)",
|
|
37
|
+
"surface-hover": "oklch(37.3% 0.034 259.733)",
|
|
38
|
+
"brand": "oklch(76.9% 0.188 70.08)",
|
|
39
|
+
"brand-hover": "oklch(82.8% 0.189 84.429)",
|
|
40
|
+
"danger": "oklch(63.7% 0.237 25.331)",
|
|
41
|
+
"danger-hover": "oklch(70.4% 0.191 22.216)",
|
|
42
|
+
"overlay": "oklch(0% 0 0 / 0.6)"
|
|
43
|
+
},
|
|
44
|
+
"fg": {
|
|
45
|
+
"default": "oklch(98.5% 0.002 247.839)",
|
|
46
|
+
"muted": "oklch(70.7% 0.022 261.325)",
|
|
47
|
+
"danger": "oklch(63.7% 0.237 25.331)",
|
|
48
|
+
"on-brand": "oklch(13% 0.028 261.692)",
|
|
49
|
+
"on-danger": "oklch(100% 0 0)"
|
|
50
|
+
},
|
|
51
|
+
"border": {
|
|
52
|
+
"default": "oklch(37.3% 0.034 259.733)",
|
|
53
|
+
"focus": "oklch(76.9% 0.188 70.08)"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=bakery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bakery.js","sourceRoot":"","sources":["../../src/brands/bakery.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAE9D;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,OAAO,EAAE;QACP,IAAI,EAAE;YACJ,QAAQ,EAAE,2BAA2B;YACrC,SAAS,EAAE,iBAAiB;YAC5B,eAAe,EAAE,2BAA2B;YAC5C,eAAe,EAAE,0BAA0B;YAC3C,OAAO,EAAE,2BAA2B;YACpC,aAAa,EAAE,2BAA2B;YAC1C,QAAQ,EAAE,2BAA2B;YACrC,cAAc,EAAE,2BAA2B;YAC3C,SAAS,EAAE,qBAAqB;SACjC;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,0BAA0B;YACrC,OAAO,EAAE,2BAA2B;YACpC,QAAQ,EAAE,2BAA2B;YACrC,UAAU,EAAE,iBAAiB;YAC7B,WAAW,EAAE,iBAAiB;SAC/B;QACD,QAAQ,EAAE;YACR,SAAS,EAAE,2BAA2B;YACtC,OAAO,EAAE,2BAA2B;SACrC;KACF;IACD,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,QAAQ,EAAE,0BAA0B;YACpC,SAAS,EAAE,0BAA0B;YACrC,eAAe,EAAE,4BAA4B;YAC7C,eAAe,EAAE,4BAA4B;YAC7C,OAAO,EAAE,0BAA0B;YACnC,aAAa,EAAE,2BAA2B;YAC1C,QAAQ,EAAE,2BAA2B;YACrC,cAAc,EAAE,2BAA2B;YAC3C,SAAS,EAAE,qBAAqB;SACjC;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,4BAA4B;YACvC,OAAO,EAAE,4BAA4B;YACrC,QAAQ,EAAE,2BAA2B;YACrC,UAAU,EAAE,0BAA0B;YACtC,WAAW,EAAE,iBAAiB;SAC/B;QACD,QAAQ,EAAE;YACR,SAAS,EAAE,4BAA4B;YACvC,OAAO,EAAE,0BAA0B;SACpC;KACF;CACO,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 브랜드 base 의 semantic 색 해석값 (RN 런타임용, AC-4).
|
|
3
|
+
* 별칭(fg.danger · border.focus)도 여기서는 해석값이다 — RN 은 var() 를 쓸 수 없다.
|
|
4
|
+
* 소비자 로컬 오버라이드(C-5b)는 이 객체에 닿지 않는다(알려진 동작 11).
|
|
5
|
+
*/
|
|
6
|
+
export declare const colors: {
|
|
7
|
+
readonly light: {
|
|
8
|
+
readonly bg: {
|
|
9
|
+
readonly canvas: "oklch(100% 0 0)";
|
|
10
|
+
readonly surface: "oklch(100% 0 0)";
|
|
11
|
+
readonly "surface-muted": "oklch(96.7% 0.003 264.542)";
|
|
12
|
+
readonly "surface-hover": "oklch(92.8% 0.006 264.531)";
|
|
13
|
+
readonly brand: "oklch(54.6% 0.245 262.881)";
|
|
14
|
+
readonly "brand-hover": "oklch(48.8% 0.243 264.376)";
|
|
15
|
+
readonly danger: "oklch(57.7% 0.245 27.325)";
|
|
16
|
+
readonly "danger-hover": "oklch(50.5% 0.213 27.518)";
|
|
17
|
+
readonly overlay: "oklch(0% 0 0 / 0.5)";
|
|
18
|
+
};
|
|
19
|
+
readonly fg: {
|
|
20
|
+
readonly default: "oklch(21% 0.034 264.665)";
|
|
21
|
+
readonly muted: "oklch(55.1% 0.027 264.364)";
|
|
22
|
+
readonly danger: "oklch(57.7% 0.245 27.325)";
|
|
23
|
+
readonly "on-brand": "oklch(100% 0 0)";
|
|
24
|
+
readonly "on-danger": "oklch(100% 0 0)";
|
|
25
|
+
};
|
|
26
|
+
readonly border: {
|
|
27
|
+
readonly default: "oklch(87.2% 0.01 258.338)";
|
|
28
|
+
readonly focus: "oklch(54.6% 0.245 262.881)";
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
readonly dark: {
|
|
32
|
+
readonly bg: {
|
|
33
|
+
readonly canvas: "oklch(13% 0.028 261.692)";
|
|
34
|
+
readonly surface: "oklch(21% 0.034 264.665)";
|
|
35
|
+
readonly "surface-muted": "oklch(27.8% 0.033 256.848)";
|
|
36
|
+
readonly "surface-hover": "oklch(37.3% 0.034 259.733)";
|
|
37
|
+
readonly brand: "oklch(62.3% 0.214 259.815)";
|
|
38
|
+
readonly "brand-hover": "oklch(70.7% 0.165 254.624)";
|
|
39
|
+
readonly danger: "oklch(63.7% 0.237 25.331)";
|
|
40
|
+
readonly "danger-hover": "oklch(70.4% 0.191 22.216)";
|
|
41
|
+
readonly overlay: "oklch(0% 0 0 / 0.6)";
|
|
42
|
+
};
|
|
43
|
+
readonly fg: {
|
|
44
|
+
readonly default: "oklch(98.5% 0.002 247.839)";
|
|
45
|
+
readonly muted: "oklch(70.7% 0.022 261.325)";
|
|
46
|
+
readonly danger: "oklch(63.7% 0.237 25.331)";
|
|
47
|
+
readonly "on-brand": "oklch(100% 0 0)";
|
|
48
|
+
readonly "on-danger": "oklch(100% 0 0)";
|
|
49
|
+
};
|
|
50
|
+
readonly border: {
|
|
51
|
+
readonly default: "oklch(37.3% 0.034 259.733)";
|
|
52
|
+
readonly focus: "oklch(62.3% 0.214 259.815)";
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/brands/base.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDT,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// 생성 파일. packages/tokens/scripts/build.ts 가 만든다. 직접 수정하지 않는다.
|
|
2
|
+
/**
|
|
3
|
+
* 브랜드 base 의 semantic 색 해석값 (RN 런타임용, AC-4).
|
|
4
|
+
* 별칭(fg.danger · border.focus)도 여기서는 해석값이다 — RN 은 var() 를 쓸 수 없다.
|
|
5
|
+
* 소비자 로컬 오버라이드(C-5b)는 이 객체에 닿지 않는다(알려진 동작 11).
|
|
6
|
+
*/
|
|
7
|
+
export const colors = {
|
|
8
|
+
"light": {
|
|
9
|
+
"bg": {
|
|
10
|
+
"canvas": "oklch(100% 0 0)",
|
|
11
|
+
"surface": "oklch(100% 0 0)",
|
|
12
|
+
"surface-muted": "oklch(96.7% 0.003 264.542)",
|
|
13
|
+
"surface-hover": "oklch(92.8% 0.006 264.531)",
|
|
14
|
+
"brand": "oklch(54.6% 0.245 262.881)",
|
|
15
|
+
"brand-hover": "oklch(48.8% 0.243 264.376)",
|
|
16
|
+
"danger": "oklch(57.7% 0.245 27.325)",
|
|
17
|
+
"danger-hover": "oklch(50.5% 0.213 27.518)",
|
|
18
|
+
"overlay": "oklch(0% 0 0 / 0.5)"
|
|
19
|
+
},
|
|
20
|
+
"fg": {
|
|
21
|
+
"default": "oklch(21% 0.034 264.665)",
|
|
22
|
+
"muted": "oklch(55.1% 0.027 264.364)",
|
|
23
|
+
"danger": "oklch(57.7% 0.245 27.325)",
|
|
24
|
+
"on-brand": "oklch(100% 0 0)",
|
|
25
|
+
"on-danger": "oklch(100% 0 0)"
|
|
26
|
+
},
|
|
27
|
+
"border": {
|
|
28
|
+
"default": "oklch(87.2% 0.01 258.338)",
|
|
29
|
+
"focus": "oklch(54.6% 0.245 262.881)"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"dark": {
|
|
33
|
+
"bg": {
|
|
34
|
+
"canvas": "oklch(13% 0.028 261.692)",
|
|
35
|
+
"surface": "oklch(21% 0.034 264.665)",
|
|
36
|
+
"surface-muted": "oklch(27.8% 0.033 256.848)",
|
|
37
|
+
"surface-hover": "oklch(37.3% 0.034 259.733)",
|
|
38
|
+
"brand": "oklch(62.3% 0.214 259.815)",
|
|
39
|
+
"brand-hover": "oklch(70.7% 0.165 254.624)",
|
|
40
|
+
"danger": "oklch(63.7% 0.237 25.331)",
|
|
41
|
+
"danger-hover": "oklch(70.4% 0.191 22.216)",
|
|
42
|
+
"overlay": "oklch(0% 0 0 / 0.6)"
|
|
43
|
+
},
|
|
44
|
+
"fg": {
|
|
45
|
+
"default": "oklch(98.5% 0.002 247.839)",
|
|
46
|
+
"muted": "oklch(70.7% 0.022 261.325)",
|
|
47
|
+
"danger": "oklch(63.7% 0.237 25.331)",
|
|
48
|
+
"on-brand": "oklch(100% 0 0)",
|
|
49
|
+
"on-danger": "oklch(100% 0 0)"
|
|
50
|
+
},
|
|
51
|
+
"border": {
|
|
52
|
+
"default": "oklch(37.3% 0.034 259.733)",
|
|
53
|
+
"focus": "oklch(62.3% 0.214 259.815)"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/brands/base.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAE9D;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,OAAO,EAAE;QACP,IAAI,EAAE;YACJ,QAAQ,EAAE,iBAAiB;YAC3B,SAAS,EAAE,iBAAiB;YAC5B,eAAe,EAAE,4BAA4B;YAC7C,eAAe,EAAE,4BAA4B;YAC7C,OAAO,EAAE,4BAA4B;YACrC,aAAa,EAAE,4BAA4B;YAC3C,QAAQ,EAAE,2BAA2B;YACrC,cAAc,EAAE,2BAA2B;YAC3C,SAAS,EAAE,qBAAqB;SACjC;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,0BAA0B;YACrC,OAAO,EAAE,4BAA4B;YACrC,QAAQ,EAAE,2BAA2B;YACrC,UAAU,EAAE,iBAAiB;YAC7B,WAAW,EAAE,iBAAiB;SAC/B;QACD,QAAQ,EAAE;YACR,SAAS,EAAE,2BAA2B;YACtC,OAAO,EAAE,4BAA4B;SACtC;KACF;IACD,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,QAAQ,EAAE,0BAA0B;YACpC,SAAS,EAAE,0BAA0B;YACrC,eAAe,EAAE,4BAA4B;YAC7C,eAAe,EAAE,4BAA4B;YAC7C,OAAO,EAAE,4BAA4B;YACrC,aAAa,EAAE,4BAA4B;YAC3C,QAAQ,EAAE,2BAA2B;YACrC,cAAc,EAAE,2BAA2B;YAC3C,SAAS,EAAE,qBAAqB;SACjC;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,4BAA4B;YACvC,OAAO,EAAE,4BAA4B;YACrC,QAAQ,EAAE,2BAA2B;YACrC,UAAU,EAAE,iBAAiB;YAC7B,WAAW,EAAE,iBAAiB;SAC/B;QACD,QAAQ,EAAE;YACR,SAAS,EAAE,4BAA4B;YACvC,OAAO,EAAE,4BAA4B;SACtC;KACF;CACO,CAAC"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import type { ReactElement, ReactNode, Ref } from "react";
|
|
2
|
+
/** 구현 플랫폼. 계약 하나를 두 플랫폼이 각자 구현한다(C-17). */
|
|
3
|
+
export type Platform = "web" | "native";
|
|
4
|
+
/** 전역 축 1 — 의도 4개 고정(C-8). 컴포넌트별 부분집합은 Extract 로 좁힌다. */
|
|
5
|
+
export type Variant = "primary" | "secondary" | "ghost" | "danger";
|
|
6
|
+
/** 전역 축 2 — t-shirt 5단(C-7a). 간격 어휘(숫자 키)와 의도적으로 분리한다. */
|
|
7
|
+
export type Size = "sm" | "md" | "lg" | "xl" | "2xl";
|
|
8
|
+
/**
|
|
9
|
+
* 글자 크기 · 행간 · 무게를 함께 바꾸는 타이포 스텝. `Size` 5단 전부를 쓰며
|
|
10
|
+
* Text 전용 의미다(C-7b). 유틸리티 하나(`text-lg`)가 세 속성을 적용한다.
|
|
11
|
+
*/
|
|
12
|
+
export type TypographyStep = Size;
|
|
13
|
+
/** 컨트롤(Button · Input · Textarea)이 쓰는 `Size` 부분집합(C-7a). */
|
|
14
|
+
export type ControlSize = Extract<Size, "sm" | "md" | "lg">;
|
|
15
|
+
/** Badge 가 쓰는 `Size` 부분집합. lg 이상은 Badge 용도 밖(plan D-15). */
|
|
16
|
+
export type BadgeSize = Extract<Size, "sm" | "md">;
|
|
17
|
+
/** 전역 축 3 — 글자색 의도(C-8). danger 는 variant 의 danger 와 같은 semantic 색이다. */
|
|
18
|
+
export type Tone = "default" | "muted" | "danger";
|
|
19
|
+
/** Input 의 입력 종류. type · inputMode · autoComplete 매핑의 단일 입력이다(C-11). */
|
|
20
|
+
export type InputKind = "text" | "password" | "email" | "number";
|
|
21
|
+
/** ref 로 노출하는 명령형 핸들. DOM 노드·RN 인스턴스를 그대로 열지 않는다(C-17). */
|
|
22
|
+
export type FocusHandle = {
|
|
23
|
+
focus(): void;
|
|
24
|
+
blur(): void;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* 컨테이너 children — 문자열을 제외한 엘리먼트 노드(C-17).
|
|
28
|
+
* 컨테이너에 raw 문자열을 넣으면 RN 에서 Text 밖 문자열이 되어 깨진다.
|
|
29
|
+
*/
|
|
30
|
+
export type ElementChildren = ReactElement | boolean | null | undefined | ElementChildren[];
|
|
31
|
+
/**
|
|
32
|
+
* 누름 이벤트는 플랫폼마다 이름이 다르므로 계약을 갈래로 둔다(C-12 · C-13).
|
|
33
|
+
* 웹에 `onPress` 가, RN 에 `onClick` 이 생기지 않는 것을 AC-13 이 타입으로 검사한다.
|
|
34
|
+
*/
|
|
35
|
+
type Press<P extends Platform> = P extends "web" ? {
|
|
36
|
+
onClick?: () => void;
|
|
37
|
+
} : {
|
|
38
|
+
onPress?: () => void;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* 아이콘 이름 — tokens 가 소유한 큐레이션 유니온 24개(plan D-8).
|
|
42
|
+
* lucide 전체 이름에서 파생하지 않는다: 계약이 tokens 에 있어 lucide 에 의존할 수 없고,
|
|
43
|
+
* 웹·RN lucide 버전이 어긋나면 이름이 갈린다. 이름 추가는 tokens + 양쪽 맵 3곳이며
|
|
44
|
+
* 한쪽만 고치면 `Record<IconName, LucideIcon>` 이 컴파일 에러를 낸다.
|
|
45
|
+
*/
|
|
46
|
+
export type IconName = "check" | "x" | "plus" | "minus" | "trash" | "pencil" | "search" | "chevron-down" | "chevron-up" | "chevron-left" | "chevron-right" | "arrow-left" | "arrow-right" | "menu" | "settings" | "user" | "mail" | "lock" | "eye" | "eye-off" | "info" | "alert-circle" | "loader" | "external-link";
|
|
47
|
+
/**
|
|
48
|
+
* 컴포넌트 prop 계약. 웹·RN 구현이 이 맵을 그대로 만족해야 한다(C-17, AC-21).
|
|
49
|
+
* 닫힌 type 리터럴로 두는 이유: AC-11a · AC-15 의 mapped type 테스트가
|
|
50
|
+
* "선언된 키 전부"를 순회할 수 있어야 한다.
|
|
51
|
+
*/
|
|
52
|
+
export type Contracts<P extends Platform> = {
|
|
53
|
+
Button: {
|
|
54
|
+
label: string;
|
|
55
|
+
variant?: Variant;
|
|
56
|
+
size?: ControlSize;
|
|
57
|
+
icon?: IconName;
|
|
58
|
+
loading?: boolean;
|
|
59
|
+
disabled?: boolean;
|
|
60
|
+
className?: string;
|
|
61
|
+
ref?: Ref<FocusHandle>;
|
|
62
|
+
} & Press<P>;
|
|
63
|
+
ButtonGroup: {
|
|
64
|
+
label: string;
|
|
65
|
+
children: ReactElement | ReactElement[];
|
|
66
|
+
className?: string;
|
|
67
|
+
};
|
|
68
|
+
Input: {
|
|
69
|
+
label: string;
|
|
70
|
+
kind?: InputKind;
|
|
71
|
+
size?: ControlSize;
|
|
72
|
+
id?: string;
|
|
73
|
+
placeholder?: string;
|
|
74
|
+
disabled?: boolean;
|
|
75
|
+
invalid?: boolean;
|
|
76
|
+
value?: string;
|
|
77
|
+
defaultValue?: string;
|
|
78
|
+
onValueChange?: (value: string) => void;
|
|
79
|
+
className?: string;
|
|
80
|
+
ref?: Ref<FocusHandle>;
|
|
81
|
+
};
|
|
82
|
+
Textarea: {
|
|
83
|
+
label: string;
|
|
84
|
+
size?: ControlSize;
|
|
85
|
+
id?: string;
|
|
86
|
+
placeholder?: string;
|
|
87
|
+
disabled?: boolean;
|
|
88
|
+
invalid?: boolean;
|
|
89
|
+
value?: string;
|
|
90
|
+
defaultValue?: string;
|
|
91
|
+
onValueChange?: (value: string) => void;
|
|
92
|
+
className?: string;
|
|
93
|
+
ref?: Ref<FocusHandle>;
|
|
94
|
+
};
|
|
95
|
+
Label: {
|
|
96
|
+
children: string | string[];
|
|
97
|
+
htmlFor?: string;
|
|
98
|
+
className?: string;
|
|
99
|
+
};
|
|
100
|
+
Card: {
|
|
101
|
+
children: ElementChildren;
|
|
102
|
+
className?: string;
|
|
103
|
+
};
|
|
104
|
+
Badge: {
|
|
105
|
+
children: string | string[];
|
|
106
|
+
variant?: Extract<Variant, "primary" | "secondary" | "danger">;
|
|
107
|
+
size?: BadgeSize;
|
|
108
|
+
className?: string;
|
|
109
|
+
};
|
|
110
|
+
Text: {
|
|
111
|
+
children: string | string[];
|
|
112
|
+
tone?: Tone;
|
|
113
|
+
size?: TypographyStep;
|
|
114
|
+
heading?: "1" | "2" | "3";
|
|
115
|
+
className?: string;
|
|
116
|
+
};
|
|
117
|
+
Stack: {
|
|
118
|
+
children: ElementChildren;
|
|
119
|
+
direction?: "row" | "column";
|
|
120
|
+
align?: "start" | "center" | "end" | "stretch";
|
|
121
|
+
justify?: "start" | "center" | "end" | "between";
|
|
122
|
+
wrap?: boolean;
|
|
123
|
+
className?: string;
|
|
124
|
+
};
|
|
125
|
+
Box: {
|
|
126
|
+
children: ElementChildren;
|
|
127
|
+
className?: string;
|
|
128
|
+
};
|
|
129
|
+
Tooltip: {
|
|
130
|
+
label: string;
|
|
131
|
+
children: ReactElement;
|
|
132
|
+
side?: "top" | "bottom" | "left" | "right";
|
|
133
|
+
open?: boolean;
|
|
134
|
+
defaultOpen?: boolean;
|
|
135
|
+
onOpenChange?: (open: boolean) => void;
|
|
136
|
+
className?: string;
|
|
137
|
+
};
|
|
138
|
+
Dialog: {
|
|
139
|
+
label: string;
|
|
140
|
+
children: ReactNode;
|
|
141
|
+
open?: boolean;
|
|
142
|
+
defaultOpen?: boolean;
|
|
143
|
+
onOpenChange?: (open: boolean) => void;
|
|
144
|
+
className?: string;
|
|
145
|
+
};
|
|
146
|
+
Drawer: {
|
|
147
|
+
label: string;
|
|
148
|
+
children: ReactNode;
|
|
149
|
+
side?: "left" | "right" | "bottom";
|
|
150
|
+
open?: boolean;
|
|
151
|
+
defaultOpen?: boolean;
|
|
152
|
+
onOpenChange?: (open: boolean) => void;
|
|
153
|
+
className?: string;
|
|
154
|
+
};
|
|
155
|
+
Form: {
|
|
156
|
+
children: ReactNode;
|
|
157
|
+
className?: string;
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
/** v1 웹 구현 12개 + Text · Box 를 포함한 전체 목록(AC-7). */
|
|
161
|
+
export declare const webComponents: readonly ["Button", "ButtonGroup", "Input", "Textarea", "Label", "Card", "Badge", "Text", "Stack", "Box", "Tooltip", "Dialog", "Drawer", "Form"];
|
|
162
|
+
/** v1 RN 구현 5개(AC-20). 오버레이·Box 는 v2. */
|
|
163
|
+
export declare const nativeComponents: readonly ["Button", "Input", "Card", "Stack", "Text"];
|
|
164
|
+
export type WebKey = (typeof webComponents)[number];
|
|
165
|
+
export type NativeKey = (typeof nativeComponents)[number];
|
|
166
|
+
export {};
|
|
167
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** v1 웹 구현 12개 + Text · Box 를 포함한 전체 목록(AC-7). */
|
|
2
|
+
export const webComponents = [
|
|
3
|
+
"Button",
|
|
4
|
+
"ButtonGroup",
|
|
5
|
+
"Input",
|
|
6
|
+
"Textarea",
|
|
7
|
+
"Label",
|
|
8
|
+
"Card",
|
|
9
|
+
"Badge",
|
|
10
|
+
"Text",
|
|
11
|
+
"Stack",
|
|
12
|
+
"Box",
|
|
13
|
+
"Tooltip",
|
|
14
|
+
"Dialog",
|
|
15
|
+
"Drawer",
|
|
16
|
+
"Form",
|
|
17
|
+
];
|
|
18
|
+
/** v1 RN 구현 5개(AC-20). 오버레이·Box 는 v2. */
|
|
19
|
+
export const nativeComponents = [
|
|
20
|
+
"Button",
|
|
21
|
+
"Input",
|
|
22
|
+
"Card",
|
|
23
|
+
"Stack",
|
|
24
|
+
"Text",
|
|
25
|
+
];
|
|
26
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AA8LA,kDAAkD;AAClD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,QAAQ;IACR,aAAa;IACb,OAAO;IACP,UAAU;IACV,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,KAAK;IACL,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,MAAM;CACgD,CAAC;AAEzD,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;CACmD,CAAC"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/** 간격 스케일. 희소 열거이며 열거 밖 키는 클래스가 없다(C-7a). */
|
|
2
|
+
export declare const spacing: {
|
|
3
|
+
readonly "0": "0px";
|
|
4
|
+
readonly "1": "4px";
|
|
5
|
+
readonly "2": "8px";
|
|
6
|
+
readonly "3": "12px";
|
|
7
|
+
readonly "4": "16px";
|
|
8
|
+
readonly "6": "24px";
|
|
9
|
+
readonly "8": "32px";
|
|
10
|
+
readonly "12": "48px";
|
|
11
|
+
readonly "16": "64px";
|
|
12
|
+
readonly "20": "80px";
|
|
13
|
+
readonly "24": "96px";
|
|
14
|
+
};
|
|
15
|
+
/** 모서리 반경 스케일. */
|
|
16
|
+
export declare const radius: {
|
|
17
|
+
readonly sm: "4px";
|
|
18
|
+
readonly md: "8px";
|
|
19
|
+
readonly lg: "12px";
|
|
20
|
+
readonly full: "9999px";
|
|
21
|
+
};
|
|
22
|
+
/** 그림자 스케일. */
|
|
23
|
+
export declare const shadow: {
|
|
24
|
+
readonly sm: "0 1px 2px oklch(0% 0 0 / 0.05)";
|
|
25
|
+
readonly md: "0 4px 8px oklch(0% 0 0 / 0.08)";
|
|
26
|
+
readonly lg: "0 12px 24px oklch(0% 0 0 / 0.12)";
|
|
27
|
+
};
|
|
28
|
+
/** 타이포 스텝 해석값. RN Text 가 클래스 대신 style 로 넣어야 할 때 읽는다(C-19 (5) 분기). */
|
|
29
|
+
export declare const text: {
|
|
30
|
+
readonly sm: {
|
|
31
|
+
readonly fontSize: "14px";
|
|
32
|
+
readonly lineHeight: "20px";
|
|
33
|
+
readonly fontWeight: 400;
|
|
34
|
+
};
|
|
35
|
+
readonly md: {
|
|
36
|
+
readonly fontSize: "16px";
|
|
37
|
+
readonly lineHeight: "24px";
|
|
38
|
+
readonly fontWeight: 400;
|
|
39
|
+
};
|
|
40
|
+
readonly lg: {
|
|
41
|
+
readonly fontSize: "18px";
|
|
42
|
+
readonly lineHeight: "28px";
|
|
43
|
+
readonly fontWeight: 500;
|
|
44
|
+
};
|
|
45
|
+
readonly xl: {
|
|
46
|
+
readonly fontSize: "20px";
|
|
47
|
+
readonly lineHeight: "28px";
|
|
48
|
+
readonly fontWeight: 600;
|
|
49
|
+
};
|
|
50
|
+
readonly "2xl": {
|
|
51
|
+
readonly fontSize: "24px";
|
|
52
|
+
readonly lineHeight: "32px";
|
|
53
|
+
readonly fontWeight: 700;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
/** 폰트 패밀리. 폰트 파일은 동봉하지 않는다 — 로딩은 소비 프로젝트 책임(C-7b, AC-6c). */
|
|
57
|
+
export declare const fontFamily: {
|
|
58
|
+
readonly sans: {
|
|
59
|
+
readonly web: "\"Pretendard Variable\", Pretendard, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif";
|
|
60
|
+
readonly native: "Pretendard";
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* tailwind-merge 설정. 웹·RN 이 extendTailwindMerge({ override: { theme: twMergeConfig } }) 로 쓴다.
|
|
65
|
+
* override 여야 한다 — extend 는 기본 검증자에 concat 이라 spacing 의 기본 isNumber 가 남아
|
|
66
|
+
* cn("mt-4", "mt-5") 가 mt-5 로 접히고 DS 기본 여백이 사라진다(plan v2 F-4).
|
|
67
|
+
*/
|
|
68
|
+
export declare const twMergeConfig: {
|
|
69
|
+
color: string[];
|
|
70
|
+
spacing: string[];
|
|
71
|
+
radius: string[];
|
|
72
|
+
shadow: string[];
|
|
73
|
+
text: string[];
|
|
74
|
+
};
|
|
75
|
+
/** @theme inline 색 키 → :root 변수 이름. C-5b 공개 계약의 실체다. */
|
|
76
|
+
export declare const semanticVariables: {
|
|
77
|
+
readonly canvas: "--bg-canvas";
|
|
78
|
+
readonly surface: "--bg-surface";
|
|
79
|
+
readonly "surface-muted": "--bg-surface-muted";
|
|
80
|
+
readonly "surface-hover": "--bg-surface-hover";
|
|
81
|
+
readonly brand: "--bg-brand";
|
|
82
|
+
readonly "brand-hover": "--bg-brand-hover";
|
|
83
|
+
readonly danger: "--bg-danger";
|
|
84
|
+
readonly "danger-hover": "--bg-danger-hover";
|
|
85
|
+
readonly overlay: "--bg-overlay";
|
|
86
|
+
readonly fg: "--fg-default";
|
|
87
|
+
readonly "fg-muted": "--fg-muted";
|
|
88
|
+
readonly "fg-danger": "--fg-danger";
|
|
89
|
+
readonly "fg-on-brand": "--fg-on-brand";
|
|
90
|
+
readonly "fg-on-danger": "--fg-on-danger";
|
|
91
|
+
readonly border: "--border-default";
|
|
92
|
+
readonly "border-focus": "--border-focus";
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* component 계층 recipe. 값은 스케일 키이며 클래스 조립은 컴포넌트 구현이 한다
|
|
96
|
+
* (정적 리터럴이어야 @source 스캔이 잡는다 — C-4 (2)).
|
|
97
|
+
*/
|
|
98
|
+
export declare const component: {
|
|
99
|
+
readonly badge: {
|
|
100
|
+
readonly sm: {
|
|
101
|
+
readonly paddingX: "2";
|
|
102
|
+
readonly paddingY: "0";
|
|
103
|
+
readonly text: "sm";
|
|
104
|
+
readonly radius: "full";
|
|
105
|
+
};
|
|
106
|
+
readonly md: {
|
|
107
|
+
readonly paddingX: "3";
|
|
108
|
+
readonly paddingY: "1";
|
|
109
|
+
readonly text: "sm";
|
|
110
|
+
readonly radius: "full";
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
readonly button: {
|
|
114
|
+
readonly sm: {
|
|
115
|
+
readonly paddingX: "3";
|
|
116
|
+
readonly paddingY: "1";
|
|
117
|
+
readonly text: "sm";
|
|
118
|
+
readonly radius: "md";
|
|
119
|
+
readonly gap: "1";
|
|
120
|
+
};
|
|
121
|
+
readonly md: {
|
|
122
|
+
readonly paddingX: "4";
|
|
123
|
+
readonly paddingY: "2";
|
|
124
|
+
readonly text: "md";
|
|
125
|
+
readonly radius: "md";
|
|
126
|
+
readonly gap: "2";
|
|
127
|
+
};
|
|
128
|
+
readonly lg: {
|
|
129
|
+
readonly paddingX: "6";
|
|
130
|
+
readonly paddingY: "3";
|
|
131
|
+
readonly text: "lg";
|
|
132
|
+
readonly radius: "lg";
|
|
133
|
+
readonly gap: "2";
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
readonly card: {
|
|
137
|
+
readonly padding: "4";
|
|
138
|
+
readonly radius: "lg";
|
|
139
|
+
readonly shadow: "sm";
|
|
140
|
+
};
|
|
141
|
+
readonly dialog: {
|
|
142
|
+
readonly padding: "6";
|
|
143
|
+
readonly radius: "lg";
|
|
144
|
+
readonly shadow: "lg";
|
|
145
|
+
readonly maxWidth: "max-w-md";
|
|
146
|
+
};
|
|
147
|
+
readonly drawer: {
|
|
148
|
+
readonly padding: "6";
|
|
149
|
+
readonly width: "max-w-sm w-full";
|
|
150
|
+
};
|
|
151
|
+
readonly icon: {
|
|
152
|
+
readonly size: {
|
|
153
|
+
readonly sm: 16;
|
|
154
|
+
readonly md: 20;
|
|
155
|
+
readonly lg: 24;
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
readonly input: {
|
|
159
|
+
readonly sm: {
|
|
160
|
+
readonly paddingX: "3";
|
|
161
|
+
readonly paddingY: "1";
|
|
162
|
+
readonly text: "sm";
|
|
163
|
+
readonly radius: "md";
|
|
164
|
+
};
|
|
165
|
+
readonly md: {
|
|
166
|
+
readonly paddingX: "3";
|
|
167
|
+
readonly paddingY: "2";
|
|
168
|
+
readonly text: "md";
|
|
169
|
+
readonly radius: "md";
|
|
170
|
+
};
|
|
171
|
+
readonly lg: {
|
|
172
|
+
readonly paddingX: "4";
|
|
173
|
+
readonly paddingY: "3";
|
|
174
|
+
readonly text: "lg";
|
|
175
|
+
readonly radius: "md";
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
readonly textarea: {
|
|
179
|
+
readonly rows: {
|
|
180
|
+
readonly sm: 3;
|
|
181
|
+
readonly md: 5;
|
|
182
|
+
readonly lg: 8;
|
|
183
|
+
};
|
|
184
|
+
};
|
|
185
|
+
readonly tooltip: {
|
|
186
|
+
readonly paddingX: "2";
|
|
187
|
+
readonly paddingY: "1";
|
|
188
|
+
readonly text: "sm";
|
|
189
|
+
readonly radius: "sm";
|
|
190
|
+
};
|
|
191
|
+
};
|
|
192
|
+
//# sourceMappingURL=values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/generated/values.ts"],"names":[],"mappings":"AAEA,6CAA6C;AAC7C,eAAO,MAAM,OAAO;;;;;;;;;;;;CAYV,CAAC;AAEX,kBAAkB;AAClB,eAAO,MAAM,MAAM;;;;;CAKT,CAAC;AAEX,eAAe;AACf,eAAO,MAAM,MAAM;;;;CAIT,CAAC;AAEX,qEAAqE;AACrE,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BP,CAAC;AAEX,6DAA6D;AAC7D,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;CAkDzB,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;CAiBpB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6FZ,CAAC"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
// 생성 파일. packages/tokens/scripts/build.ts 가 만든다. 직접 수정하지 않는다.
|
|
2
|
+
/** 간격 스케일. 희소 열거이며 열거 밖 키는 클래스가 없다(C-7a). */
|
|
3
|
+
export const spacing = {
|
|
4
|
+
"0": "0px",
|
|
5
|
+
"1": "4px",
|
|
6
|
+
"2": "8px",
|
|
7
|
+
"3": "12px",
|
|
8
|
+
"4": "16px",
|
|
9
|
+
"6": "24px",
|
|
10
|
+
"8": "32px",
|
|
11
|
+
"12": "48px",
|
|
12
|
+
"16": "64px",
|
|
13
|
+
"20": "80px",
|
|
14
|
+
"24": "96px"
|
|
15
|
+
};
|
|
16
|
+
/** 모서리 반경 스케일. */
|
|
17
|
+
export const radius = {
|
|
18
|
+
"sm": "4px",
|
|
19
|
+
"md": "8px",
|
|
20
|
+
"lg": "12px",
|
|
21
|
+
"full": "9999px"
|
|
22
|
+
};
|
|
23
|
+
/** 그림자 스케일. */
|
|
24
|
+
export const shadow = {
|
|
25
|
+
"sm": "0 1px 2px oklch(0% 0 0 / 0.05)",
|
|
26
|
+
"md": "0 4px 8px oklch(0% 0 0 / 0.08)",
|
|
27
|
+
"lg": "0 12px 24px oklch(0% 0 0 / 0.12)"
|
|
28
|
+
};
|
|
29
|
+
/** 타이포 스텝 해석값. RN Text 가 클래스 대신 style 로 넣어야 할 때 읽는다(C-19 (5) 분기). */
|
|
30
|
+
export const text = {
|
|
31
|
+
"sm": {
|
|
32
|
+
"fontSize": "14px",
|
|
33
|
+
"lineHeight": "20px",
|
|
34
|
+
"fontWeight": 400
|
|
35
|
+
},
|
|
36
|
+
"md": {
|
|
37
|
+
"fontSize": "16px",
|
|
38
|
+
"lineHeight": "24px",
|
|
39
|
+
"fontWeight": 400
|
|
40
|
+
},
|
|
41
|
+
"lg": {
|
|
42
|
+
"fontSize": "18px",
|
|
43
|
+
"lineHeight": "28px",
|
|
44
|
+
"fontWeight": 500
|
|
45
|
+
},
|
|
46
|
+
"xl": {
|
|
47
|
+
"fontSize": "20px",
|
|
48
|
+
"lineHeight": "28px",
|
|
49
|
+
"fontWeight": 600
|
|
50
|
+
},
|
|
51
|
+
"2xl": {
|
|
52
|
+
"fontSize": "24px",
|
|
53
|
+
"lineHeight": "32px",
|
|
54
|
+
"fontWeight": 700
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
/** 폰트 패밀리. 폰트 파일은 동봉하지 않는다 — 로딩은 소비 프로젝트 책임(C-7b, AC-6c). */
|
|
58
|
+
export const fontFamily = {
|
|
59
|
+
"sans": {
|
|
60
|
+
"web": "\"Pretendard Variable\", Pretendard, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif",
|
|
61
|
+
"native": "Pretendard"
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* tailwind-merge 설정. 웹·RN 이 extendTailwindMerge({ override: { theme: twMergeConfig } }) 로 쓴다.
|
|
66
|
+
* override 여야 한다 — extend 는 기본 검증자에 concat 이라 spacing 의 기본 isNumber 가 남아
|
|
67
|
+
* cn("mt-4", "mt-5") 가 mt-5 로 접히고 DS 기본 여백이 사라진다(plan v2 F-4).
|
|
68
|
+
*/
|
|
69
|
+
export const twMergeConfig = {
|
|
70
|
+
"color": [
|
|
71
|
+
"canvas",
|
|
72
|
+
"surface",
|
|
73
|
+
"surface-muted",
|
|
74
|
+
"surface-hover",
|
|
75
|
+
"brand",
|
|
76
|
+
"brand-hover",
|
|
77
|
+
"danger",
|
|
78
|
+
"danger-hover",
|
|
79
|
+
"overlay",
|
|
80
|
+
"fg",
|
|
81
|
+
"fg-muted",
|
|
82
|
+
"fg-danger",
|
|
83
|
+
"fg-on-brand",
|
|
84
|
+
"fg-on-danger",
|
|
85
|
+
"border",
|
|
86
|
+
"border-focus"
|
|
87
|
+
],
|
|
88
|
+
"spacing": [
|
|
89
|
+
"0",
|
|
90
|
+
"1",
|
|
91
|
+
"2",
|
|
92
|
+
"3",
|
|
93
|
+
"4",
|
|
94
|
+
"6",
|
|
95
|
+
"8",
|
|
96
|
+
"12",
|
|
97
|
+
"16",
|
|
98
|
+
"20",
|
|
99
|
+
"24"
|
|
100
|
+
],
|
|
101
|
+
"radius": [
|
|
102
|
+
"sm",
|
|
103
|
+
"md",
|
|
104
|
+
"lg",
|
|
105
|
+
"full"
|
|
106
|
+
],
|
|
107
|
+
"shadow": [
|
|
108
|
+
"sm",
|
|
109
|
+
"md",
|
|
110
|
+
"lg"
|
|
111
|
+
],
|
|
112
|
+
"text": [
|
|
113
|
+
"sm",
|
|
114
|
+
"md",
|
|
115
|
+
"lg",
|
|
116
|
+
"xl",
|
|
117
|
+
"2xl"
|
|
118
|
+
]
|
|
119
|
+
};
|
|
120
|
+
/** @theme inline 색 키 → :root 변수 이름. C-5b 공개 계약의 실체다. */
|
|
121
|
+
export const semanticVariables = {
|
|
122
|
+
"canvas": "--bg-canvas",
|
|
123
|
+
"surface": "--bg-surface",
|
|
124
|
+
"surface-muted": "--bg-surface-muted",
|
|
125
|
+
"surface-hover": "--bg-surface-hover",
|
|
126
|
+
"brand": "--bg-brand",
|
|
127
|
+
"brand-hover": "--bg-brand-hover",
|
|
128
|
+
"danger": "--bg-danger",
|
|
129
|
+
"danger-hover": "--bg-danger-hover",
|
|
130
|
+
"overlay": "--bg-overlay",
|
|
131
|
+
"fg": "--fg-default",
|
|
132
|
+
"fg-muted": "--fg-muted",
|
|
133
|
+
"fg-danger": "--fg-danger",
|
|
134
|
+
"fg-on-brand": "--fg-on-brand",
|
|
135
|
+
"fg-on-danger": "--fg-on-danger",
|
|
136
|
+
"border": "--border-default",
|
|
137
|
+
"border-focus": "--border-focus"
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* component 계층 recipe. 값은 스케일 키이며 클래스 조립은 컴포넌트 구현이 한다
|
|
141
|
+
* (정적 리터럴이어야 @source 스캔이 잡는다 — C-4 (2)).
|
|
142
|
+
*/
|
|
143
|
+
export const component = {
|
|
144
|
+
"badge": {
|
|
145
|
+
"sm": {
|
|
146
|
+
"paddingX": "2",
|
|
147
|
+
"paddingY": "0",
|
|
148
|
+
"text": "sm",
|
|
149
|
+
"radius": "full"
|
|
150
|
+
},
|
|
151
|
+
"md": {
|
|
152
|
+
"paddingX": "3",
|
|
153
|
+
"paddingY": "1",
|
|
154
|
+
"text": "sm",
|
|
155
|
+
"radius": "full"
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
"button": {
|
|
159
|
+
"sm": {
|
|
160
|
+
"paddingX": "3",
|
|
161
|
+
"paddingY": "1",
|
|
162
|
+
"text": "sm",
|
|
163
|
+
"radius": "md",
|
|
164
|
+
"gap": "1"
|
|
165
|
+
},
|
|
166
|
+
"md": {
|
|
167
|
+
"paddingX": "4",
|
|
168
|
+
"paddingY": "2",
|
|
169
|
+
"text": "md",
|
|
170
|
+
"radius": "md",
|
|
171
|
+
"gap": "2"
|
|
172
|
+
},
|
|
173
|
+
"lg": {
|
|
174
|
+
"paddingX": "6",
|
|
175
|
+
"paddingY": "3",
|
|
176
|
+
"text": "lg",
|
|
177
|
+
"radius": "lg",
|
|
178
|
+
"gap": "2"
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
"card": {
|
|
182
|
+
"padding": "4",
|
|
183
|
+
"radius": "lg",
|
|
184
|
+
"shadow": "sm"
|
|
185
|
+
},
|
|
186
|
+
"dialog": {
|
|
187
|
+
"padding": "6",
|
|
188
|
+
"radius": "lg",
|
|
189
|
+
"shadow": "lg",
|
|
190
|
+
"maxWidth": "max-w-md"
|
|
191
|
+
},
|
|
192
|
+
"drawer": {
|
|
193
|
+
"padding": "6",
|
|
194
|
+
"width": "max-w-sm w-full"
|
|
195
|
+
},
|
|
196
|
+
"icon": {
|
|
197
|
+
"size": {
|
|
198
|
+
"sm": 16,
|
|
199
|
+
"md": 20,
|
|
200
|
+
"lg": 24
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
"input": {
|
|
204
|
+
"sm": {
|
|
205
|
+
"paddingX": "3",
|
|
206
|
+
"paddingY": "1",
|
|
207
|
+
"text": "sm",
|
|
208
|
+
"radius": "md"
|
|
209
|
+
},
|
|
210
|
+
"md": {
|
|
211
|
+
"paddingX": "3",
|
|
212
|
+
"paddingY": "2",
|
|
213
|
+
"text": "md",
|
|
214
|
+
"radius": "md"
|
|
215
|
+
},
|
|
216
|
+
"lg": {
|
|
217
|
+
"paddingX": "4",
|
|
218
|
+
"paddingY": "3",
|
|
219
|
+
"text": "lg",
|
|
220
|
+
"radius": "md"
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
"textarea": {
|
|
224
|
+
"rows": {
|
|
225
|
+
"sm": 3,
|
|
226
|
+
"md": 5,
|
|
227
|
+
"lg": 8
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
"tooltip": {
|
|
231
|
+
"paddingX": "2",
|
|
232
|
+
"paddingY": "1",
|
|
233
|
+
"text": "sm",
|
|
234
|
+
"radius": "sm"
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
//# sourceMappingURL=values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/generated/values.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@eeennsu/tokens",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "디자인 시스템 토큰 · 컴포넌트 계약 타입 (웹 · React Native 공용)",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"themes"
|
|
11
|
+
],
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"default": "./dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./brands/base": {
|
|
18
|
+
"types": "./dist/brands/base.d.ts",
|
|
19
|
+
"default": "./dist/brands/base.js"
|
|
20
|
+
},
|
|
21
|
+
"./brands/bakery": {
|
|
22
|
+
"types": "./dist/brands/bakery.d.ts",
|
|
23
|
+
"default": "./dist/brands/bakery.js"
|
|
24
|
+
},
|
|
25
|
+
"./themes/*.css": "./themes/*.css"
|
|
26
|
+
},
|
|
27
|
+
"peerDependencies": {
|
|
28
|
+
"@types/react": "*"
|
|
29
|
+
},
|
|
30
|
+
"peerDependenciesMeta": {
|
|
31
|
+
"@types/react": {
|
|
32
|
+
"optional": true
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@tailwindcss/node": "^4.3.3",
|
|
37
|
+
"@types/react": "^19.2.2",
|
|
38
|
+
"tailwind-merge": "^3.6.0",
|
|
39
|
+
"tailwindcss": "^4.3.3",
|
|
40
|
+
"tsx": "^4.23.13"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "tsx scripts/build.ts && tsc -p tsconfig.json",
|
|
44
|
+
"test": "vitest run --typecheck --passWithNoTests"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/* 생성 파일. packages/tokens/scripts/build.ts 가 만든다. 직접 수정하지 않는다. */
|
|
2
|
+
/* @eeennsu/tokens — brand: bakery. 내부 산출물이며 소비자는 플랫폼 래퍼를 import 한다(C-3). */
|
|
3
|
+
|
|
4
|
+
:root {
|
|
5
|
+
/* primitive — 공개 계약이 아니다. 이름 안정성을 보장하지 않는다(알려진 동작 13). */
|
|
6
|
+
--ds-gray-50: oklch(98.5% 0.002 247.839);
|
|
7
|
+
--ds-gray-100: oklch(96.7% 0.003 264.542);
|
|
8
|
+
--ds-gray-200: oklch(92.8% 0.006 264.531);
|
|
9
|
+
--ds-gray-300: oklch(87.2% 0.01 258.338);
|
|
10
|
+
--ds-gray-400: oklch(70.7% 0.022 261.325);
|
|
11
|
+
--ds-gray-500: oklch(55.1% 0.027 264.364);
|
|
12
|
+
--ds-gray-600: oklch(44.6% 0.03 256.802);
|
|
13
|
+
--ds-gray-700: oklch(37.3% 0.034 259.733);
|
|
14
|
+
--ds-gray-800: oklch(27.8% 0.033 256.848);
|
|
15
|
+
--ds-gray-900: oklch(21% 0.034 264.665);
|
|
16
|
+
--ds-gray-950: oklch(13% 0.028 261.692);
|
|
17
|
+
--ds-blue-50: oklch(97% 0.014 254.604);
|
|
18
|
+
--ds-blue-100: oklch(93.2% 0.032 255.585);
|
|
19
|
+
--ds-blue-200: oklch(88.2% 0.059 254.128);
|
|
20
|
+
--ds-blue-300: oklch(80.9% 0.105 251.813);
|
|
21
|
+
--ds-blue-400: oklch(70.7% 0.165 254.624);
|
|
22
|
+
--ds-blue-500: oklch(62.3% 0.214 259.815);
|
|
23
|
+
--ds-blue-600: oklch(54.6% 0.245 262.881);
|
|
24
|
+
--ds-blue-700: oklch(48.8% 0.243 264.376);
|
|
25
|
+
--ds-blue-800: oklch(42.4% 0.199 265.638);
|
|
26
|
+
--ds-blue-900: oklch(37.9% 0.146 265.522);
|
|
27
|
+
--ds-blue-950: oklch(28.2% 0.091 267.935);
|
|
28
|
+
--ds-red-50: oklch(97.1% 0.013 17.38);
|
|
29
|
+
--ds-red-100: oklch(93.6% 0.032 17.717);
|
|
30
|
+
--ds-red-200: oklch(88.5% 0.062 18.334);
|
|
31
|
+
--ds-red-300: oklch(80.8% 0.114 19.571);
|
|
32
|
+
--ds-red-400: oklch(70.4% 0.191 22.216);
|
|
33
|
+
--ds-red-500: oklch(63.7% 0.237 25.331);
|
|
34
|
+
--ds-red-600: oklch(57.7% 0.245 27.325);
|
|
35
|
+
--ds-red-700: oklch(50.5% 0.213 27.518);
|
|
36
|
+
--ds-red-800: oklch(44.4% 0.177 26.899);
|
|
37
|
+
--ds-red-900: oklch(39.6% 0.141 25.723);
|
|
38
|
+
--ds-red-950: oklch(25.8% 0.092 26.042);
|
|
39
|
+
--ds-amber-50: oklch(98.7% 0.022 95.277);
|
|
40
|
+
--ds-amber-100: oklch(96.2% 0.059 95.617);
|
|
41
|
+
--ds-amber-200: oklch(92.4% 0.12 95.746);
|
|
42
|
+
--ds-amber-300: oklch(87.9% 0.169 91.605);
|
|
43
|
+
--ds-amber-400: oklch(82.8% 0.189 84.429);
|
|
44
|
+
--ds-amber-500: oklch(76.9% 0.188 70.08);
|
|
45
|
+
--ds-amber-600: oklch(66.6% 0.179 58.318);
|
|
46
|
+
--ds-amber-700: oklch(55.5% 0.163 48.998);
|
|
47
|
+
--ds-amber-800: oklch(47.3% 0.137 46.201);
|
|
48
|
+
--ds-amber-900: oklch(41.4% 0.112 45.904);
|
|
49
|
+
--ds-amber-950: oklch(27.9% 0.077 45.635);
|
|
50
|
+
--ds-white: oklch(100% 0 0);
|
|
51
|
+
--ds-black: oklch(0% 0 0);
|
|
52
|
+
--ds-black-alpha-50: oklch(0% 0 0 / 0.5);
|
|
53
|
+
--ds-black-alpha-60: oklch(0% 0 0 / 0.6);
|
|
54
|
+
|
|
55
|
+
/* semantic (light) — 이 변수 이름이 공개 계약이다(C-5b). */
|
|
56
|
+
--bg-canvas: oklch(98.7% 0.022 95.277);
|
|
57
|
+
--bg-surface: oklch(100% 0 0);
|
|
58
|
+
--bg-surface-muted: oklch(96.2% 0.059 95.617);
|
|
59
|
+
--bg-surface-hover: oklch(92.4% 0.12 95.746);
|
|
60
|
+
--bg-brand: oklch(66.6% 0.179 58.318);
|
|
61
|
+
--bg-brand-hover: oklch(55.5% 0.163 48.998);
|
|
62
|
+
--bg-danger: oklch(57.7% 0.245 27.325);
|
|
63
|
+
--bg-danger-hover: oklch(50.5% 0.213 27.518);
|
|
64
|
+
--bg-overlay: oklch(0% 0 0 / 0.5);
|
|
65
|
+
--fg-default: oklch(21% 0.034 264.665);
|
|
66
|
+
--fg-muted: oklch(44.6% 0.03 256.802);
|
|
67
|
+
--fg-danger: var(--bg-danger);
|
|
68
|
+
--fg-on-brand: oklch(100% 0 0);
|
|
69
|
+
--fg-on-danger: oklch(100% 0 0);
|
|
70
|
+
--border-default: oklch(87.9% 0.169 91.605);
|
|
71
|
+
--border-focus: var(--bg-brand);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* 다크는 두 셀렉터에 같은 값을 낸다(C-20). */
|
|
75
|
+
.dark {
|
|
76
|
+
--bg-canvas: oklch(13% 0.028 261.692);
|
|
77
|
+
--bg-surface: oklch(21% 0.034 264.665);
|
|
78
|
+
--bg-surface-muted: oklch(27.8% 0.033 256.848);
|
|
79
|
+
--bg-surface-hover: oklch(37.3% 0.034 259.733);
|
|
80
|
+
--bg-brand: oklch(76.9% 0.188 70.08);
|
|
81
|
+
--bg-brand-hover: oklch(82.8% 0.189 84.429);
|
|
82
|
+
--bg-danger: oklch(63.7% 0.237 25.331);
|
|
83
|
+
--bg-danger-hover: oklch(70.4% 0.191 22.216);
|
|
84
|
+
--bg-overlay: oklch(0% 0 0 / 0.6);
|
|
85
|
+
--fg-default: oklch(98.5% 0.002 247.839);
|
|
86
|
+
--fg-muted: oklch(70.7% 0.022 261.325);
|
|
87
|
+
--fg-danger: var(--bg-danger);
|
|
88
|
+
--fg-on-brand: oklch(13% 0.028 261.692);
|
|
89
|
+
--fg-on-danger: oklch(100% 0 0);
|
|
90
|
+
--border-default: oklch(37.3% 0.034 259.733);
|
|
91
|
+
--border-focus: var(--bg-brand);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@media (prefers-color-scheme: dark) {
|
|
95
|
+
:root:not(.light) {
|
|
96
|
+
--bg-canvas: oklch(13% 0.028 261.692);
|
|
97
|
+
--bg-surface: oklch(21% 0.034 264.665);
|
|
98
|
+
--bg-surface-muted: oklch(27.8% 0.033 256.848);
|
|
99
|
+
--bg-surface-hover: oklch(37.3% 0.034 259.733);
|
|
100
|
+
--bg-brand: oklch(76.9% 0.188 70.08);
|
|
101
|
+
--bg-brand-hover: oklch(82.8% 0.189 84.429);
|
|
102
|
+
--bg-danger: oklch(63.7% 0.237 25.331);
|
|
103
|
+
--bg-danger-hover: oklch(70.4% 0.191 22.216);
|
|
104
|
+
--bg-overlay: oklch(0% 0 0 / 0.6);
|
|
105
|
+
--fg-default: oklch(98.5% 0.002 247.839);
|
|
106
|
+
--fg-muted: oklch(70.7% 0.022 261.325);
|
|
107
|
+
--fg-danger: var(--bg-danger);
|
|
108
|
+
--fg-on-brand: oklch(13% 0.028 261.692);
|
|
109
|
+
--fg-on-danger: oklch(100% 0 0);
|
|
110
|
+
--border-default: oklch(37.3% 0.034 259.733);
|
|
111
|
+
--border-focus: var(--bg-brand);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
@theme {
|
|
116
|
+
/* 네임스페이스 리셋 — DS 어휘 밖 클래스는 생성되지 않는다(C-6, 알려진 동작 1). */
|
|
117
|
+
--color-*: initial;
|
|
118
|
+
--spacing-*: initial;
|
|
119
|
+
--spacing: initial;
|
|
120
|
+
--radius-*: initial;
|
|
121
|
+
--shadow-*: initial;
|
|
122
|
+
--text-*: initial;
|
|
123
|
+
--font-weight-*: initial;
|
|
124
|
+
|
|
125
|
+
--spacing-0: 0px;
|
|
126
|
+
--spacing-1: 4px;
|
|
127
|
+
--spacing-2: 8px;
|
|
128
|
+
--spacing-3: 12px;
|
|
129
|
+
--spacing-4: 16px;
|
|
130
|
+
--spacing-6: 24px;
|
|
131
|
+
--spacing-8: 32px;
|
|
132
|
+
--spacing-12: 48px;
|
|
133
|
+
--spacing-16: 64px;
|
|
134
|
+
--spacing-20: 80px;
|
|
135
|
+
--spacing-24: 96px;
|
|
136
|
+
|
|
137
|
+
--radius-sm: 4px;
|
|
138
|
+
--radius-md: 8px;
|
|
139
|
+
--radius-lg: 12px;
|
|
140
|
+
--radius-full: 9999px;
|
|
141
|
+
|
|
142
|
+
--shadow-sm: 0 1px 2px oklch(0% 0 0 / 0.05);
|
|
143
|
+
--shadow-md: 0 4px 8px oklch(0% 0 0 / 0.08);
|
|
144
|
+
--shadow-lg: 0 12px 24px oklch(0% 0 0 / 0.12);
|
|
145
|
+
|
|
146
|
+
--text-sm: 14px;
|
|
147
|
+
--text-sm--line-height: 20px;
|
|
148
|
+
--text-sm--font-weight: 400;
|
|
149
|
+
--text-md: 16px;
|
|
150
|
+
--text-md--line-height: 24px;
|
|
151
|
+
--text-md--font-weight: 400;
|
|
152
|
+
--text-lg: 18px;
|
|
153
|
+
--text-lg--line-height: 28px;
|
|
154
|
+
--text-lg--font-weight: 500;
|
|
155
|
+
--text-xl: 20px;
|
|
156
|
+
--text-xl--line-height: 28px;
|
|
157
|
+
--text-xl--font-weight: 600;
|
|
158
|
+
--text-2xl: 24px;
|
|
159
|
+
--text-2xl--line-height: 32px;
|
|
160
|
+
--text-2xl--font-weight: 700;
|
|
161
|
+
|
|
162
|
+
--font-sans: "Pretendard Variable", Pretendard, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/* inline 은 색만 — var() 참조여야 :root 재선언이 클래스까지 전파된다(C-5b). */
|
|
166
|
+
@theme inline {
|
|
167
|
+
--color-canvas: var(--bg-canvas);
|
|
168
|
+
--color-surface: var(--bg-surface);
|
|
169
|
+
--color-surface-muted: var(--bg-surface-muted);
|
|
170
|
+
--color-surface-hover: var(--bg-surface-hover);
|
|
171
|
+
--color-brand: var(--bg-brand);
|
|
172
|
+
--color-brand-hover: var(--bg-brand-hover);
|
|
173
|
+
--color-danger: var(--bg-danger);
|
|
174
|
+
--color-danger-hover: var(--bg-danger-hover);
|
|
175
|
+
--color-overlay: var(--bg-overlay);
|
|
176
|
+
--color-fg: var(--fg-default);
|
|
177
|
+
--color-fg-muted: var(--fg-muted);
|
|
178
|
+
--color-fg-danger: var(--fg-danger);
|
|
179
|
+
--color-fg-on-brand: var(--fg-on-brand);
|
|
180
|
+
--color-fg-on-danger: var(--fg-on-danger);
|
|
181
|
+
--color-border: var(--border-default);
|
|
182
|
+
--color-border-focus: var(--border-focus);
|
|
183
|
+
}
|
package/themes/base.css
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/* 생성 파일. packages/tokens/scripts/build.ts 가 만든다. 직접 수정하지 않는다. */
|
|
2
|
+
/* @eeennsu/tokens — brand: base. 내부 산출물이며 소비자는 플랫폼 래퍼를 import 한다(C-3). */
|
|
3
|
+
|
|
4
|
+
:root {
|
|
5
|
+
/* primitive — 공개 계약이 아니다. 이름 안정성을 보장하지 않는다(알려진 동작 13). */
|
|
6
|
+
--ds-gray-50: oklch(98.5% 0.002 247.839);
|
|
7
|
+
--ds-gray-100: oklch(96.7% 0.003 264.542);
|
|
8
|
+
--ds-gray-200: oklch(92.8% 0.006 264.531);
|
|
9
|
+
--ds-gray-300: oklch(87.2% 0.01 258.338);
|
|
10
|
+
--ds-gray-400: oklch(70.7% 0.022 261.325);
|
|
11
|
+
--ds-gray-500: oklch(55.1% 0.027 264.364);
|
|
12
|
+
--ds-gray-600: oklch(44.6% 0.03 256.802);
|
|
13
|
+
--ds-gray-700: oklch(37.3% 0.034 259.733);
|
|
14
|
+
--ds-gray-800: oklch(27.8% 0.033 256.848);
|
|
15
|
+
--ds-gray-900: oklch(21% 0.034 264.665);
|
|
16
|
+
--ds-gray-950: oklch(13% 0.028 261.692);
|
|
17
|
+
--ds-blue-50: oklch(97% 0.014 254.604);
|
|
18
|
+
--ds-blue-100: oklch(93.2% 0.032 255.585);
|
|
19
|
+
--ds-blue-200: oklch(88.2% 0.059 254.128);
|
|
20
|
+
--ds-blue-300: oklch(80.9% 0.105 251.813);
|
|
21
|
+
--ds-blue-400: oklch(70.7% 0.165 254.624);
|
|
22
|
+
--ds-blue-500: oklch(62.3% 0.214 259.815);
|
|
23
|
+
--ds-blue-600: oklch(54.6% 0.245 262.881);
|
|
24
|
+
--ds-blue-700: oklch(48.8% 0.243 264.376);
|
|
25
|
+
--ds-blue-800: oklch(42.4% 0.199 265.638);
|
|
26
|
+
--ds-blue-900: oklch(37.9% 0.146 265.522);
|
|
27
|
+
--ds-blue-950: oklch(28.2% 0.091 267.935);
|
|
28
|
+
--ds-red-50: oklch(97.1% 0.013 17.38);
|
|
29
|
+
--ds-red-100: oklch(93.6% 0.032 17.717);
|
|
30
|
+
--ds-red-200: oklch(88.5% 0.062 18.334);
|
|
31
|
+
--ds-red-300: oklch(80.8% 0.114 19.571);
|
|
32
|
+
--ds-red-400: oklch(70.4% 0.191 22.216);
|
|
33
|
+
--ds-red-500: oklch(63.7% 0.237 25.331);
|
|
34
|
+
--ds-red-600: oklch(57.7% 0.245 27.325);
|
|
35
|
+
--ds-red-700: oklch(50.5% 0.213 27.518);
|
|
36
|
+
--ds-red-800: oklch(44.4% 0.177 26.899);
|
|
37
|
+
--ds-red-900: oklch(39.6% 0.141 25.723);
|
|
38
|
+
--ds-red-950: oklch(25.8% 0.092 26.042);
|
|
39
|
+
--ds-amber-50: oklch(98.7% 0.022 95.277);
|
|
40
|
+
--ds-amber-100: oklch(96.2% 0.059 95.617);
|
|
41
|
+
--ds-amber-200: oklch(92.4% 0.12 95.746);
|
|
42
|
+
--ds-amber-300: oklch(87.9% 0.169 91.605);
|
|
43
|
+
--ds-amber-400: oklch(82.8% 0.189 84.429);
|
|
44
|
+
--ds-amber-500: oklch(76.9% 0.188 70.08);
|
|
45
|
+
--ds-amber-600: oklch(66.6% 0.179 58.318);
|
|
46
|
+
--ds-amber-700: oklch(55.5% 0.163 48.998);
|
|
47
|
+
--ds-amber-800: oklch(47.3% 0.137 46.201);
|
|
48
|
+
--ds-amber-900: oklch(41.4% 0.112 45.904);
|
|
49
|
+
--ds-amber-950: oklch(27.9% 0.077 45.635);
|
|
50
|
+
--ds-white: oklch(100% 0 0);
|
|
51
|
+
--ds-black: oklch(0% 0 0);
|
|
52
|
+
--ds-black-alpha-50: oklch(0% 0 0 / 0.5);
|
|
53
|
+
--ds-black-alpha-60: oklch(0% 0 0 / 0.6);
|
|
54
|
+
|
|
55
|
+
/* semantic (light) — 이 변수 이름이 공개 계약이다(C-5b). */
|
|
56
|
+
--bg-canvas: oklch(100% 0 0);
|
|
57
|
+
--bg-surface: oklch(100% 0 0);
|
|
58
|
+
--bg-surface-muted: oklch(96.7% 0.003 264.542);
|
|
59
|
+
--bg-surface-hover: oklch(92.8% 0.006 264.531);
|
|
60
|
+
--bg-brand: oklch(54.6% 0.245 262.881);
|
|
61
|
+
--bg-brand-hover: oklch(48.8% 0.243 264.376);
|
|
62
|
+
--bg-danger: oklch(57.7% 0.245 27.325);
|
|
63
|
+
--bg-danger-hover: oklch(50.5% 0.213 27.518);
|
|
64
|
+
--bg-overlay: oklch(0% 0 0 / 0.5);
|
|
65
|
+
--fg-default: oklch(21% 0.034 264.665);
|
|
66
|
+
--fg-muted: oklch(55.1% 0.027 264.364);
|
|
67
|
+
--fg-danger: var(--bg-danger);
|
|
68
|
+
--fg-on-brand: oklch(100% 0 0);
|
|
69
|
+
--fg-on-danger: oklch(100% 0 0);
|
|
70
|
+
--border-default: oklch(87.2% 0.01 258.338);
|
|
71
|
+
--border-focus: var(--bg-brand);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* 다크는 두 셀렉터에 같은 값을 낸다(C-20). */
|
|
75
|
+
.dark {
|
|
76
|
+
--bg-canvas: oklch(13% 0.028 261.692);
|
|
77
|
+
--bg-surface: oklch(21% 0.034 264.665);
|
|
78
|
+
--bg-surface-muted: oklch(27.8% 0.033 256.848);
|
|
79
|
+
--bg-surface-hover: oklch(37.3% 0.034 259.733);
|
|
80
|
+
--bg-brand: oklch(62.3% 0.214 259.815);
|
|
81
|
+
--bg-brand-hover: oklch(70.7% 0.165 254.624);
|
|
82
|
+
--bg-danger: oklch(63.7% 0.237 25.331);
|
|
83
|
+
--bg-danger-hover: oklch(70.4% 0.191 22.216);
|
|
84
|
+
--bg-overlay: oklch(0% 0 0 / 0.6);
|
|
85
|
+
--fg-default: oklch(98.5% 0.002 247.839);
|
|
86
|
+
--fg-muted: oklch(70.7% 0.022 261.325);
|
|
87
|
+
--fg-danger: var(--bg-danger);
|
|
88
|
+
--fg-on-brand: oklch(100% 0 0);
|
|
89
|
+
--fg-on-danger: oklch(100% 0 0);
|
|
90
|
+
--border-default: oklch(37.3% 0.034 259.733);
|
|
91
|
+
--border-focus: var(--bg-brand);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@media (prefers-color-scheme: dark) {
|
|
95
|
+
:root:not(.light) {
|
|
96
|
+
--bg-canvas: oklch(13% 0.028 261.692);
|
|
97
|
+
--bg-surface: oklch(21% 0.034 264.665);
|
|
98
|
+
--bg-surface-muted: oklch(27.8% 0.033 256.848);
|
|
99
|
+
--bg-surface-hover: oklch(37.3% 0.034 259.733);
|
|
100
|
+
--bg-brand: oklch(62.3% 0.214 259.815);
|
|
101
|
+
--bg-brand-hover: oklch(70.7% 0.165 254.624);
|
|
102
|
+
--bg-danger: oklch(63.7% 0.237 25.331);
|
|
103
|
+
--bg-danger-hover: oklch(70.4% 0.191 22.216);
|
|
104
|
+
--bg-overlay: oklch(0% 0 0 / 0.6);
|
|
105
|
+
--fg-default: oklch(98.5% 0.002 247.839);
|
|
106
|
+
--fg-muted: oklch(70.7% 0.022 261.325);
|
|
107
|
+
--fg-danger: var(--bg-danger);
|
|
108
|
+
--fg-on-brand: oklch(100% 0 0);
|
|
109
|
+
--fg-on-danger: oklch(100% 0 0);
|
|
110
|
+
--border-default: oklch(37.3% 0.034 259.733);
|
|
111
|
+
--border-focus: var(--bg-brand);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
@theme {
|
|
116
|
+
/* 네임스페이스 리셋 — DS 어휘 밖 클래스는 생성되지 않는다(C-6, 알려진 동작 1). */
|
|
117
|
+
--color-*: initial;
|
|
118
|
+
--spacing-*: initial;
|
|
119
|
+
--spacing: initial;
|
|
120
|
+
--radius-*: initial;
|
|
121
|
+
--shadow-*: initial;
|
|
122
|
+
--text-*: initial;
|
|
123
|
+
--font-weight-*: initial;
|
|
124
|
+
|
|
125
|
+
--spacing-0: 0px;
|
|
126
|
+
--spacing-1: 4px;
|
|
127
|
+
--spacing-2: 8px;
|
|
128
|
+
--spacing-3: 12px;
|
|
129
|
+
--spacing-4: 16px;
|
|
130
|
+
--spacing-6: 24px;
|
|
131
|
+
--spacing-8: 32px;
|
|
132
|
+
--spacing-12: 48px;
|
|
133
|
+
--spacing-16: 64px;
|
|
134
|
+
--spacing-20: 80px;
|
|
135
|
+
--spacing-24: 96px;
|
|
136
|
+
|
|
137
|
+
--radius-sm: 4px;
|
|
138
|
+
--radius-md: 8px;
|
|
139
|
+
--radius-lg: 12px;
|
|
140
|
+
--radius-full: 9999px;
|
|
141
|
+
|
|
142
|
+
--shadow-sm: 0 1px 2px oklch(0% 0 0 / 0.05);
|
|
143
|
+
--shadow-md: 0 4px 8px oklch(0% 0 0 / 0.08);
|
|
144
|
+
--shadow-lg: 0 12px 24px oklch(0% 0 0 / 0.12);
|
|
145
|
+
|
|
146
|
+
--text-sm: 14px;
|
|
147
|
+
--text-sm--line-height: 20px;
|
|
148
|
+
--text-sm--font-weight: 400;
|
|
149
|
+
--text-md: 16px;
|
|
150
|
+
--text-md--line-height: 24px;
|
|
151
|
+
--text-md--font-weight: 400;
|
|
152
|
+
--text-lg: 18px;
|
|
153
|
+
--text-lg--line-height: 28px;
|
|
154
|
+
--text-lg--font-weight: 500;
|
|
155
|
+
--text-xl: 20px;
|
|
156
|
+
--text-xl--line-height: 28px;
|
|
157
|
+
--text-xl--font-weight: 600;
|
|
158
|
+
--text-2xl: 24px;
|
|
159
|
+
--text-2xl--line-height: 32px;
|
|
160
|
+
--text-2xl--font-weight: 700;
|
|
161
|
+
|
|
162
|
+
--font-sans: "Pretendard Variable", Pretendard, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/* inline 은 색만 — var() 참조여야 :root 재선언이 클래스까지 전파된다(C-5b). */
|
|
166
|
+
@theme inline {
|
|
167
|
+
--color-canvas: var(--bg-canvas);
|
|
168
|
+
--color-surface: var(--bg-surface);
|
|
169
|
+
--color-surface-muted: var(--bg-surface-muted);
|
|
170
|
+
--color-surface-hover: var(--bg-surface-hover);
|
|
171
|
+
--color-brand: var(--bg-brand);
|
|
172
|
+
--color-brand-hover: var(--bg-brand-hover);
|
|
173
|
+
--color-danger: var(--bg-danger);
|
|
174
|
+
--color-danger-hover: var(--bg-danger-hover);
|
|
175
|
+
--color-overlay: var(--bg-overlay);
|
|
176
|
+
--color-fg: var(--fg-default);
|
|
177
|
+
--color-fg-muted: var(--fg-muted);
|
|
178
|
+
--color-fg-danger: var(--fg-danger);
|
|
179
|
+
--color-fg-on-brand: var(--fg-on-brand);
|
|
180
|
+
--color-fg-on-danger: var(--fg-on-danger);
|
|
181
|
+
--color-border: var(--border-default);
|
|
182
|
+
--color-border-focus: var(--border-focus);
|
|
183
|
+
}
|