@react-native-rethemed/radix-ui-tokens 0.1.0 → 0.1.1
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.md +2 -0
- package/dist/index.cjs +8 -0
- package/dist/index.d.cts +3 -0
- package/dist/index.d.mts +3 -0
- package/dist/index.mjs +3 -0
- package/dist/theme.cjs +148 -0
- package/dist/{esm/theme.d.ts → theme.d.cts} +18 -16
- package/dist/{cjs/theme.d.ts → theme.d.mts} +18 -16
- package/dist/theme.mjs +146 -0
- package/dist/tokens.gen.cjs +3708 -0
- package/dist/tokens.gen.d.cts +3562 -0
- package/dist/tokens.gen.d.mts +3562 -0
- package/dist/tokens.gen.mjs +3696 -0
- package/package.json +13 -15
- package/dist/cjs/index.d.ts +0 -2
- package/dist/cjs/index.js +0 -10
- package/dist/cjs/package.json +0 -1
- package/dist/cjs/theme.js +0 -161
- package/dist/cjs/tokens.gen.d.ts +0 -3695
- package/dist/cjs/tokens.gen.js +0 -1056
- package/dist/esm/index.d.ts +0 -2
- package/dist/esm/index.js +0 -2
- package/dist/esm/package.json +0 -1
- package/dist/esm/theme.js +0 -156
- package/dist/esm/tokens.gen.d.ts +0 -3695
- package/dist/esm/tokens.gen.js +0 -1053
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native-rethemed/radix-ui-tokens",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Radix UI Themes tokens (Radix Colors scales, typography, radii, shadows) for React Native, ready for react-native-rethemed.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
@@ -21,18 +21,11 @@
|
|
|
21
21
|
"directory": "packages/react-native-rethemed/radix-ui"
|
|
22
22
|
},
|
|
23
23
|
"sideEffects": false,
|
|
24
|
-
"
|
|
25
|
-
"types": "./dist/cjs/index.d.ts",
|
|
24
|
+
"types": "./dist/index.d.cts",
|
|
26
25
|
"exports": {
|
|
27
26
|
".": {
|
|
28
|
-
"import":
|
|
29
|
-
|
|
30
|
-
"default": "./dist/esm/index.js"
|
|
31
|
-
},
|
|
32
|
-
"require": {
|
|
33
|
-
"types": "./dist/cjs/index.d.ts",
|
|
34
|
-
"default": "./dist/cjs/index.js"
|
|
35
|
-
}
|
|
27
|
+
"import": "./dist/index.mjs",
|
|
28
|
+
"require": "./dist/index.cjs"
|
|
36
29
|
},
|
|
37
30
|
"./package.json": "./package.json"
|
|
38
31
|
},
|
|
@@ -43,26 +36,30 @@
|
|
|
43
36
|
"access": "public"
|
|
44
37
|
},
|
|
45
38
|
"dependencies": {
|
|
46
|
-
"@react-native-rethemed/core": "^0.1.
|
|
39
|
+
"@react-native-rethemed/core": "^0.1.1"
|
|
47
40
|
},
|
|
48
41
|
"devDependencies": {
|
|
42
|
+
"@arethetypeswrong/core": "0.18.5",
|
|
49
43
|
"@biomejs/biome": "2.5.4",
|
|
50
44
|
"@radix-ui/themes": "3.3.0",
|
|
51
|
-
"@react-native-rethemed/cli": "0.1.
|
|
45
|
+
"@react-native-rethemed/cli": "0.1.1",
|
|
52
46
|
"@types/culori": "4.0.1",
|
|
53
47
|
"@types/node": "24.10.4",
|
|
54
48
|
"@types/react": "19.2.17",
|
|
55
49
|
"biome-config": "0.0.0",
|
|
56
50
|
"culori": "4.0.2",
|
|
57
51
|
"jiti": "2.7.0",
|
|
52
|
+
"publint": "0.3.25",
|
|
58
53
|
"react": "19.2.3",
|
|
59
54
|
"react-dom": "19.2.3",
|
|
60
55
|
"react-native": "0.86.2",
|
|
56
|
+
"tsdown": "0.23.0",
|
|
57
|
+
"tsdown-config": "0.0.0",
|
|
61
58
|
"typescript": "6.0.3",
|
|
62
59
|
"vitest": "4.1.10"
|
|
63
60
|
},
|
|
64
61
|
"scripts": {
|
|
65
|
-
"build": "
|
|
62
|
+
"build": "tsdown",
|
|
66
63
|
"generate": "jiti scripts/generate.ts",
|
|
67
64
|
"example:codegen": "react-native-rethemed codegen example/theme.ts --docs example/themed.md",
|
|
68
65
|
"lint": "biome check src scripts example",
|
|
@@ -70,5 +67,6 @@
|
|
|
70
67
|
"tsc": "tsc --noEmit",
|
|
71
68
|
"test": "vitest",
|
|
72
69
|
"test:ci": "vitest run"
|
|
73
|
-
}
|
|
70
|
+
},
|
|
71
|
+
"main": "./dist/index.cjs"
|
|
74
72
|
}
|
package/dist/cjs/index.d.ts
DELETED
package/dist/cjs/index.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.scales = exports.fontWeights = exports.radixUiTheme = exports.getMatchingGrayColor = exports.createRadixUiTheme = void 0;
|
|
4
|
-
var theme_1 = require("./theme");
|
|
5
|
-
Object.defineProperty(exports, "createRadixUiTheme", { enumerable: true, get: function () { return theme_1.createRadixUiTheme; } });
|
|
6
|
-
Object.defineProperty(exports, "getMatchingGrayColor", { enumerable: true, get: function () { return theme_1.getMatchingGrayColor; } });
|
|
7
|
-
Object.defineProperty(exports, "radixUiTheme", { enumerable: true, get: function () { return theme_1.radixUiTheme; } });
|
|
8
|
-
var tokens_gen_1 = require("./tokens.gen");
|
|
9
|
-
Object.defineProperty(exports, "fontWeights", { enumerable: true, get: function () { return tokens_gen_1.fontWeights; } });
|
|
10
|
-
Object.defineProperty(exports, "scales", { enumerable: true, get: function () { return tokens_gen_1.scales; } });
|
package/dist/cjs/package.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"type":"commonjs"}
|
package/dist/cjs/theme.js
DELETED
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.radixUiTheme = void 0;
|
|
4
|
-
exports.getMatchingGrayColor = getMatchingGrayColor;
|
|
5
|
-
exports.createRadixUiTheme = createRadixUiTheme;
|
|
6
|
-
const config_1 = require("@react-native-rethemed/core/config");
|
|
7
|
-
const tokens_gen_1 = require("./tokens.gen");
|
|
8
|
-
/**
|
|
9
|
-
* The gray `grayColor: 'auto'` picks for an accent, as Radix Themes'
|
|
10
|
-
* `getMatchingGrayColor` does.
|
|
11
|
-
*/
|
|
12
|
-
function getMatchingGrayColor(accentColor) {
|
|
13
|
-
switch (accentColor) {
|
|
14
|
-
case 'tomato':
|
|
15
|
-
case 'red':
|
|
16
|
-
case 'ruby':
|
|
17
|
-
case 'crimson':
|
|
18
|
-
case 'pink':
|
|
19
|
-
case 'plum':
|
|
20
|
-
case 'purple':
|
|
21
|
-
case 'violet':
|
|
22
|
-
return 'mauve';
|
|
23
|
-
case 'iris':
|
|
24
|
-
case 'indigo':
|
|
25
|
-
case 'blue':
|
|
26
|
-
case 'sky':
|
|
27
|
-
case 'cyan':
|
|
28
|
-
return 'slate';
|
|
29
|
-
case 'teal':
|
|
30
|
-
case 'jade':
|
|
31
|
-
case 'mint':
|
|
32
|
-
case 'green':
|
|
33
|
-
return 'sage';
|
|
34
|
-
case 'grass':
|
|
35
|
-
case 'lime':
|
|
36
|
-
return 'olive';
|
|
37
|
-
case 'yellow':
|
|
38
|
-
case 'amber':
|
|
39
|
-
case 'orange':
|
|
40
|
-
case 'brown':
|
|
41
|
-
case 'gold':
|
|
42
|
-
case 'bronze':
|
|
43
|
-
return 'sand';
|
|
44
|
-
case 'gray':
|
|
45
|
-
return 'gray';
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
const round = (n, digits = 2) => {
|
|
49
|
-
const factor = 10 ** digits;
|
|
50
|
-
return Math.round(n * factor) / factor;
|
|
51
|
-
};
|
|
52
|
-
const scaled = (table, factor) => Object.fromEntries(Object.entries(table).map(([key, value]) => [key, round(value * factor)]));
|
|
53
|
-
/** `'gray.a2'` → that step of the theme's gray in `scheme`; hex as-is. */
|
|
54
|
-
function grayRef(value, gray, scheme) {
|
|
55
|
-
return value.startsWith('gray.') ? gray[value.slice(5)][scheme] : value;
|
|
56
|
-
}
|
|
57
|
-
/** `#rrggbbaa` → `{ color: '#rrggbb', opacity }`. */
|
|
58
|
-
function splitAlpha(hex) {
|
|
59
|
-
if (hex.length !== 9)
|
|
60
|
-
return { color: hex, opacity: 1 };
|
|
61
|
-
return {
|
|
62
|
-
color: hex.slice(0, 7),
|
|
63
|
-
opacity: round(Number.parseInt(hex.slice(7), 16) / 255, 3),
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
/** Android elevation per shadow level; CSS has none, so picked by hand. */
|
|
67
|
-
const SHADOW_ELEVATIONS = {
|
|
68
|
-
2: 2,
|
|
69
|
-
3: 4,
|
|
70
|
-
4: 8,
|
|
71
|
-
5: 12,
|
|
72
|
-
6: 16,
|
|
73
|
-
};
|
|
74
|
-
/**
|
|
75
|
-
* A Radix Themes theme, configured like `<Theme>`:
|
|
76
|
-
*
|
|
77
|
-
* ```ts
|
|
78
|
-
* createRadixUiTheme({ accentColor: 'blue', radius: 'large', colors: ['red'] })
|
|
79
|
-
* ```
|
|
80
|
-
*
|
|
81
|
-
* - `semanticTokens.colors`: `accent` and `gray` (each `1`–`12`, `a1`–`a12`,
|
|
82
|
-
* `contrast`, `surface`, `indicator`, `track`), `color` (`background`,
|
|
83
|
-
* `panel-solid`, `panel-translucent`, `surface`, `overlay`), plus the
|
|
84
|
-
* scales in `colors`. Every one switches with light/dark.
|
|
85
|
-
* - `spacing` (`1`–`9`), `fontSizes` (`1`–`9`) and `radii` (`1`–`6`,
|
|
86
|
-
* `full`) follow `scaling` and `radius`.
|
|
87
|
-
* - Text presets: `themed.text.text[3]()` is `<Text size="3">` and
|
|
88
|
-
* `themed.text.heading[3]()` is `<Heading size="3">` (bold, tighter line
|
|
89
|
-
* height), both with Radix's letter spacing.
|
|
90
|
-
* - `shadows` `2`–`6`: one layer each, light-mode values; `1` is inset and
|
|
91
|
-
* left out.
|
|
92
|
-
*/
|
|
93
|
-
function createRadixUiTheme(options = {}) {
|
|
94
|
-
const { accentColor = 'indigo', grayColor = 'auto', radius = 'medium', scaling = '100%', colors = [], } = options;
|
|
95
|
-
const factor = tokens_gen_1.scalings[scaling];
|
|
96
|
-
const gray = tokens_gen_1.scales[grayColor === 'auto' ? getMatchingGrayColor(accentColor) : grayColor];
|
|
97
|
-
const sizes = tokens_gen_1.fontSizes;
|
|
98
|
-
const spacingsEm = tokens_gen_1.letterSpacings;
|
|
99
|
-
const preset = (size, lineHeight, extraEm = 0) => {
|
|
100
|
-
const fontSize = round(sizes[size] * factor);
|
|
101
|
-
return {
|
|
102
|
-
fontSize,
|
|
103
|
-
lineHeight: round(lineHeight * factor),
|
|
104
|
-
letterSpacing: round((spacingsEm[size] + extraEm) * fontSize, 3),
|
|
105
|
-
};
|
|
106
|
-
};
|
|
107
|
-
return (0, config_1.defineTheme)({
|
|
108
|
-
tokens: {
|
|
109
|
-
spacing: scaled(tokens_gen_1.space, factor),
|
|
110
|
-
radii: {
|
|
111
|
-
...scaled(tokens_gen_1.radii, factor * tokens_gen_1.radiusFactors[radius]),
|
|
112
|
-
full: tokens_gen_1.radiusFull[radius],
|
|
113
|
-
},
|
|
114
|
-
fontSizes: scaled(tokens_gen_1.fontSizes, factor),
|
|
115
|
-
fontWeights: tokens_gen_1.fontWeights,
|
|
116
|
-
shadows: Object.fromEntries(Object.entries(tokens_gen_1.shadows).map(([key, layer]) => {
|
|
117
|
-
const { color, opacity } = splitAlpha(grayRef(layer.color, gray, 'light'));
|
|
118
|
-
return [
|
|
119
|
-
key,
|
|
120
|
-
{
|
|
121
|
-
shadowColor: color,
|
|
122
|
-
shadowOffset: { width: layer.x, height: layer.y },
|
|
123
|
-
shadowOpacity: opacity,
|
|
124
|
-
shadowRadius: layer.blur / 2,
|
|
125
|
-
elevation: SHADOW_ELEVATIONS[key],
|
|
126
|
-
},
|
|
127
|
-
];
|
|
128
|
-
})),
|
|
129
|
-
},
|
|
130
|
-
semanticTokens: {
|
|
131
|
-
colors: {
|
|
132
|
-
accent: tokens_gen_1.scales[accentColor],
|
|
133
|
-
gray,
|
|
134
|
-
color: Object.fromEntries(Object.entries(tokens_gen_1.backgroundColors).map(([key, value]) => [
|
|
135
|
-
key,
|
|
136
|
-
{
|
|
137
|
-
light: grayRef(value.light, gray, 'light'),
|
|
138
|
-
dark: grayRef(value.dark, gray, 'dark'),
|
|
139
|
-
},
|
|
140
|
-
])),
|
|
141
|
-
...Object.fromEntries(colors.map((name) => [name, tokens_gen_1.scales[name]])),
|
|
142
|
-
},
|
|
143
|
-
text: {
|
|
144
|
-
text: Object.fromEntries(Object.entries(tokens_gen_1.lineHeights).map(([size, lineHeight]) => [
|
|
145
|
-
size,
|
|
146
|
-
preset(size, lineHeight),
|
|
147
|
-
])),
|
|
148
|
-
heading: Object.fromEntries(Object.entries(tokens_gen_1.headingLineHeights).map(([size, lineHeight]) => [
|
|
149
|
-
size,
|
|
150
|
-
{
|
|
151
|
-
...preset(size, lineHeight, tokens_gen_1.headingLetterSpacing),
|
|
152
|
-
fontWeight: 'bold',
|
|
153
|
-
},
|
|
154
|
-
])),
|
|
155
|
-
},
|
|
156
|
-
},
|
|
157
|
-
defaults: { fontSize: '3' },
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
/** Radix Themes' defaults: `indigo` accent, `slate` gray, `medium` radius, `100%` scaling. */
|
|
161
|
-
exports.radixUiTheme = createRadixUiTheme();
|