@swiftsolve/rove-tokens 1.0.0 → 1.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/DESIGN.md +8 -7
- package/README.md +3 -3
- package/package.json +1 -1
- package/src/code-tokens.json +1 -19
- package/src/figma/variables.json +170 -0
- package/text-styles.css +1 -1
- package/tokens/code.tokens.json +1 -81
- package/tokens/layout.tokens.json +67 -0
- package/tokens/motion.tokens.json +20 -0
- package/tokens/spacing.tokens.json +8 -0
- package/tokens/typography.tokens.json +14 -0
- package/tokens.css +20 -16
package/DESIGN.md
CHANGED
|
@@ -74,7 +74,7 @@ Disabled controls use `--opacity-disabled`.
|
|
|
74
74
|
|
|
75
75
|
## Changing the design
|
|
76
76
|
|
|
77
|
-
Figma is the source of truth. Change a token in the Rove Design System Figma file, export it with the plugin in `figma-plugin/` into `src/figma/`, then run `npm run build` (see the [README](README.md#update-the-tokens)). Don't edit `tokens.css`, `tokens/` or the values in `src/figma/` by hand. What Figma can't hold (shadows,
|
|
77
|
+
Figma is the source of truth. Change a token in the Rove Design System Figma file, export it with the plugin in `figma-plugin/` into `src/figma/`, then run `npm run build` (see the [README](README.md#update-the-tokens)). Don't edit `tokens.css`, `tokens/` or the values in `src/figma/` by hand. What Figma can't hold (shadows, easing curves, the focus outline) lives in `src/code-tokens.json`.
|
|
78
78
|
|
|
79
79
|
Everything below the next line is rewritten by `npm run build`; edit only above it.
|
|
80
80
|
|
|
@@ -101,8 +101,12 @@ Names and uses, from Figma. The values are in `tokens.css`; Dark and Light diffe
|
|
|
101
101
|
- **Radius:** `--radius-xs` 5px, `--radius-sm` 8px, `--radius-md` 10px, `--radius-lg` 13px, `--radius-full` 999px
|
|
102
102
|
- **Font sizes:** `--font-size-2xs` 10px, `--font-size-xs` 11px, `--font-size-sm` 12px, `--font-size-md` 13px, `--font-size-lg` 14px, `--font-size-xl` 15px (dialog titles), `--font-size-2xl` 17px, `--font-size-3xl` 28px
|
|
103
103
|
- **Font families:** `--font-family-sans` Inter, `--font-family-numeric` Questrial
|
|
104
|
-
- **Focus:** `--focus-offset` 2px (focus ring offset)
|
|
104
|
+
- **Focus:** `--focus-ring-width` 1px (focus ring stroke), `--focus-offset` 2px (focus ring offset)
|
|
105
105
|
- **Opacity:** `--opacity-tint-xs` 8% (faintest tint), `--opacity-tint-sm` 10% (light tint), `--opacity-tint-md` 14% (tint), `--opacity-tint-lg` 22% (strong tint), `--opacity-tint-xl` 28% (strongest tint), `--opacity-high` 80% (nearly opaque), `--opacity-disabled` 40% (disabled controls)
|
|
106
|
+
- **Layout:** `--rail-item-size` 38px (rail items), `--titlebar-height` 56px (title bar)
|
|
107
|
+
- **Cards:** `--card-padding` `var(--spacing-14)` (card inset), `--card-header-padding-y` `var(--card-padding)`, `--card-header-padding-x` `var(--card-padding)`, `--card-header-min-height` 42px (compact card header), `--card-header-height` 44px (card header), `--card-body-padding` `var(--card-padding)`, `--row-padding-y` 8px (data row, above and below)
|
|
108
|
+
- **Font weights:** `--weight-regular` 400, `--weight-medium` 500, `--weight-semibold` 600
|
|
109
|
+
- **Motion:** `--duration-fast` 140ms (hovers, small changes), `--duration-normal` 220ms (panels, page changes)
|
|
106
110
|
|
|
107
111
|
### Text styles
|
|
108
112
|
|
|
@@ -130,8 +134,5 @@ Apply a style with its class from `text-styles.css`. Each class reads four varia
|
|
|
130
134
|
What Figma variables can't hold, from `src/code-tokens.json`.
|
|
131
135
|
|
|
132
136
|
- **Shadows:** `--shadow-panel`, `--shadow-raised`, `--shadow-popover`
|
|
133
|
-
- **Focus:** `--focus-
|
|
134
|
-
- **
|
|
135
|
-
- **Cards:** `--card-padding` `var(--spacing-14)`, `--card-header-padding-y` `var(--card-padding)`, `--card-header-padding-x` `var(--card-padding)`, `--card-header-min-height` 42px, `--card-header-height` 44px, `--card-body-padding` `var(--card-padding)`, `--row-padding-y` 8px
|
|
136
|
-
- **Motion:** `--ease-out`, `--ease-in-out`, `--ease-pulse`, `--duration-fast` 140ms, `--duration-normal` 220ms
|
|
137
|
-
- **Font weights:** `--weight-regular` 400, `--weight-medium` 500, `--weight-semibold` 600
|
|
137
|
+
- **Focus:** `--focus-outline`, `--focus-inset`
|
|
138
|
+
- **Motion:** `--ease-out`, `--ease-in-out`, `--ease-pulse`
|
package/README.md
CHANGED
|
@@ -59,9 +59,9 @@ Each Figma text style becomes four tokens: `--type-<style>-size`, `-weight`, `-l
|
|
|
59
59
|
| --- | --- |
|
|
60
60
|
| `palette.tokens.json` | Every colour, once |
|
|
61
61
|
| `color.dark.tokens.json`, `color.light.tokens.json` | The Color tokens in each theme, pointing at the palette (`{neutral.850}`) |
|
|
62
|
-
| `spacing.tokens.json`, `typography.tokens.json`, `opacity.tokens.json` | The other Figma collections |
|
|
62
|
+
| `spacing.tokens.json`, `typography.tokens.json`, `opacity.tokens.json`, `layout.tokens.json`, `motion.tokens.json` | The other Figma collections |
|
|
63
63
|
| `text-styles.tokens.json` | Each text style as a `typography` token |
|
|
64
|
-
| `code.tokens.json` | The code-only tokens (shadows,
|
|
64
|
+
| `code.tokens.json` | The code-only tokens (shadows, easing curves, the focus outline) |
|
|
65
65
|
|
|
66
66
|
A theme is every file plus one of the two color files. Paths follow the Figma names (`bg/base` is `bg.base`). Tokens that other tokens point at but that aren't CSS variables (the palette, the shadow colours) are marked `"$extensions": { "net.swiftsolve.rove-tokens": { "css": false } }`. CSS-only expressions (`--focus-inset`, a `calc()`) aren't in them.
|
|
67
67
|
|
|
@@ -110,7 +110,7 @@ It opens on <http://localhost:6007>; the Theme menu in the toolbar switches Dark
|
|
|
110
110
|
| `src/figma/variables.json` | Raw Figma export. Every variable with a Web code syntax becomes that CSS variable. |
|
|
111
111
|
| `src/figma/text-styles.json` | Raw export of the local text styles: font, size, weight, line height, letter spacing, text case (when set) and the variables bound to them. Each style becomes a `--type-*` group. |
|
|
112
112
|
| `figma-plugin/` | The Figma plugin that writes the two exports. |
|
|
113
|
-
| `src/code-tokens.json` | What Figma variables can't hold: font stacks for the font-family variables, shadows,
|
|
113
|
+
| `src/code-tokens.json` | What Figma variables can't hold: font stacks for the font-family variables, shadows, easing curves and the CSS expressions built on variables (`--focus-outline`). `{figma/name}` pulls a Figma value in per theme. |
|
|
114
114
|
| `DESIGN.md` | How to build Rove UI with the tokens. The rules at the top are written by hand; the token reference below the marker line is generated by the build. |
|
|
115
115
|
| `scripts/tokens/build.mjs` | `npm run build`: runs the steps below and writes `tokens.css` and `text-styles.css` at the package root, where the import paths point. |
|
|
116
116
|
| `scripts/tokens/dtcg.mjs` | Figma export → the DTCG files in `tokens/`, checking that every reference resolves in both themes. |
|
package/package.json
CHANGED
package/src/code-tokens.json
CHANGED
|
@@ -9,29 +9,11 @@
|
|
|
9
9
|
"--shadow-raised": "0 12px 32px {shadow-color/raised}",
|
|
10
10
|
"--shadow-popover": "0 2px 6px {shadow-color/popover-1}, 0 6px 16px {shadow-color/popover-2}",
|
|
11
11
|
|
|
12
|
-
"--focus-ring-width": "1px",
|
|
13
12
|
"--focus-outline": "var(--focus-ring-width) solid var(--focus-ring)",
|
|
14
13
|
"--focus-inset": "calc(-1 * var(--focus-ring-width))",
|
|
15
14
|
|
|
16
|
-
"--titlebar-height": "56px",
|
|
17
|
-
"--rail-item-size": "38px",
|
|
18
|
-
|
|
19
|
-
"--card-padding": "var(--spacing-14)",
|
|
20
|
-
"--card-header-padding-y": "var(--card-padding)",
|
|
21
|
-
"--card-header-padding-x": "var(--card-padding)",
|
|
22
|
-
"--card-header-min-height": "42px",
|
|
23
|
-
"--card-header-height": "44px",
|
|
24
|
-
"--card-body-padding": "var(--card-padding)",
|
|
25
|
-
"--row-padding-y": "8px",
|
|
26
|
-
|
|
27
15
|
"--ease-out": "cubic-bezier(0.16, 1, 0.3, 1)",
|
|
28
16
|
"--ease-in-out": "cubic-bezier(0.4, 0, 0.2, 1)",
|
|
29
|
-
"--ease-pulse": "cubic-bezier(0.42, 0, 0.58, 1)"
|
|
30
|
-
"--duration-fast": "140ms",
|
|
31
|
-
"--duration-normal": "220ms",
|
|
32
|
-
|
|
33
|
-
"--weight-regular": "400",
|
|
34
|
-
"--weight-medium": "500",
|
|
35
|
-
"--weight-semibold": "600"
|
|
17
|
+
"--ease-pulse": "cubic-bezier(0.42, 0, 0.58, 1)"
|
|
36
18
|
}
|
|
37
19
|
}
|
package/src/figma/variables.json
CHANGED
|
@@ -56,6 +56,18 @@
|
|
|
56
56
|
"modes": [
|
|
57
57
|
"Value"
|
|
58
58
|
]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "Layout",
|
|
62
|
+
"modes": [
|
|
63
|
+
"Value"
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "Motion",
|
|
68
|
+
"modes": [
|
|
69
|
+
"Value"
|
|
70
|
+
]
|
|
59
71
|
}
|
|
60
72
|
],
|
|
61
73
|
"variables": [
|
|
@@ -1902,6 +1914,164 @@
|
|
|
1902
1914
|
"alias": "neutral/850-a2"
|
|
1903
1915
|
}
|
|
1904
1916
|
}
|
|
1917
|
+
},
|
|
1918
|
+
{
|
|
1919
|
+
"name": "titlebar/height",
|
|
1920
|
+
"collection": "Layout",
|
|
1921
|
+
"type": "FLOAT",
|
|
1922
|
+
"code": "var(--titlebar-height)",
|
|
1923
|
+
"description": "Title bar",
|
|
1924
|
+
"values": {
|
|
1925
|
+
"Value": 56
|
|
1926
|
+
}
|
|
1927
|
+
},
|
|
1928
|
+
{
|
|
1929
|
+
"name": "rail/item-size",
|
|
1930
|
+
"collection": "Layout",
|
|
1931
|
+
"type": "FLOAT",
|
|
1932
|
+
"code": "var(--rail-item-size)",
|
|
1933
|
+
"description": "Rail items",
|
|
1934
|
+
"values": {
|
|
1935
|
+
"Value": 38
|
|
1936
|
+
}
|
|
1937
|
+
},
|
|
1938
|
+
{
|
|
1939
|
+
"name": "card/padding",
|
|
1940
|
+
"collection": "Layout",
|
|
1941
|
+
"type": "FLOAT",
|
|
1942
|
+
"code": "var(--card-padding)",
|
|
1943
|
+
"description": "Card inset",
|
|
1944
|
+
"values": {
|
|
1945
|
+
"Value": {
|
|
1946
|
+
"alias": "spacing/14"
|
|
1947
|
+
}
|
|
1948
|
+
}
|
|
1949
|
+
},
|
|
1950
|
+
{
|
|
1951
|
+
"name": "card/header-padding-y",
|
|
1952
|
+
"collection": "Layout",
|
|
1953
|
+
"type": "FLOAT",
|
|
1954
|
+
"code": "var(--card-header-padding-y)",
|
|
1955
|
+
"description": "",
|
|
1956
|
+
"values": {
|
|
1957
|
+
"Value": {
|
|
1958
|
+
"alias": "card/padding"
|
|
1959
|
+
}
|
|
1960
|
+
}
|
|
1961
|
+
},
|
|
1962
|
+
{
|
|
1963
|
+
"name": "card/header-padding-x",
|
|
1964
|
+
"collection": "Layout",
|
|
1965
|
+
"type": "FLOAT",
|
|
1966
|
+
"code": "var(--card-header-padding-x)",
|
|
1967
|
+
"description": "",
|
|
1968
|
+
"values": {
|
|
1969
|
+
"Value": {
|
|
1970
|
+
"alias": "card/padding"
|
|
1971
|
+
}
|
|
1972
|
+
}
|
|
1973
|
+
},
|
|
1974
|
+
{
|
|
1975
|
+
"name": "card/header-min-height",
|
|
1976
|
+
"collection": "Layout",
|
|
1977
|
+
"type": "FLOAT",
|
|
1978
|
+
"code": "var(--card-header-min-height)",
|
|
1979
|
+
"description": "Compact card header",
|
|
1980
|
+
"values": {
|
|
1981
|
+
"Value": 42
|
|
1982
|
+
}
|
|
1983
|
+
},
|
|
1984
|
+
{
|
|
1985
|
+
"name": "card/header-height",
|
|
1986
|
+
"collection": "Layout",
|
|
1987
|
+
"type": "FLOAT",
|
|
1988
|
+
"code": "var(--card-header-height)",
|
|
1989
|
+
"description": "Card header",
|
|
1990
|
+
"values": {
|
|
1991
|
+
"Value": 44
|
|
1992
|
+
}
|
|
1993
|
+
},
|
|
1994
|
+
{
|
|
1995
|
+
"name": "card/body-padding",
|
|
1996
|
+
"collection": "Layout",
|
|
1997
|
+
"type": "FLOAT",
|
|
1998
|
+
"code": "var(--card-body-padding)",
|
|
1999
|
+
"description": "",
|
|
2000
|
+
"values": {
|
|
2001
|
+
"Value": {
|
|
2002
|
+
"alias": "card/padding"
|
|
2003
|
+
}
|
|
2004
|
+
}
|
|
2005
|
+
},
|
|
2006
|
+
{
|
|
2007
|
+
"name": "row/padding-y",
|
|
2008
|
+
"collection": "Layout",
|
|
2009
|
+
"type": "FLOAT",
|
|
2010
|
+
"code": "var(--row-padding-y)",
|
|
2011
|
+
"description": "Data row, above and below",
|
|
2012
|
+
"values": {
|
|
2013
|
+
"Value": 8
|
|
2014
|
+
}
|
|
2015
|
+
},
|
|
2016
|
+
{
|
|
2017
|
+
"name": "focus/ring-width",
|
|
2018
|
+
"collection": "Spacing",
|
|
2019
|
+
"type": "FLOAT",
|
|
2020
|
+
"code": "var(--focus-ring-width)",
|
|
2021
|
+
"description": "Focus ring stroke",
|
|
2022
|
+
"values": {
|
|
2023
|
+
"Value": 1
|
|
2024
|
+
}
|
|
2025
|
+
},
|
|
2026
|
+
{
|
|
2027
|
+
"name": "weight/regular",
|
|
2028
|
+
"collection": "Typography",
|
|
2029
|
+
"type": "FLOAT",
|
|
2030
|
+
"code": "var(--weight-regular)",
|
|
2031
|
+
"description": "",
|
|
2032
|
+
"values": {
|
|
2033
|
+
"Value": 400
|
|
2034
|
+
}
|
|
2035
|
+
},
|
|
2036
|
+
{
|
|
2037
|
+
"name": "weight/medium",
|
|
2038
|
+
"collection": "Typography",
|
|
2039
|
+
"type": "FLOAT",
|
|
2040
|
+
"code": "var(--weight-medium)",
|
|
2041
|
+
"description": "",
|
|
2042
|
+
"values": {
|
|
2043
|
+
"Value": 500
|
|
2044
|
+
}
|
|
2045
|
+
},
|
|
2046
|
+
{
|
|
2047
|
+
"name": "weight/semibold",
|
|
2048
|
+
"collection": "Typography",
|
|
2049
|
+
"type": "FLOAT",
|
|
2050
|
+
"code": "var(--weight-semibold)",
|
|
2051
|
+
"description": "",
|
|
2052
|
+
"values": {
|
|
2053
|
+
"Value": 600
|
|
2054
|
+
}
|
|
2055
|
+
},
|
|
2056
|
+
{
|
|
2057
|
+
"name": "duration/fast",
|
|
2058
|
+
"collection": "Motion",
|
|
2059
|
+
"type": "FLOAT",
|
|
2060
|
+
"code": "var(--duration-fast)",
|
|
2061
|
+
"description": "Hovers, small changes",
|
|
2062
|
+
"values": {
|
|
2063
|
+
"Value": 140
|
|
2064
|
+
}
|
|
2065
|
+
},
|
|
2066
|
+
{
|
|
2067
|
+
"name": "duration/normal",
|
|
2068
|
+
"collection": "Motion",
|
|
2069
|
+
"type": "FLOAT",
|
|
2070
|
+
"code": "var(--duration-normal)",
|
|
2071
|
+
"description": "Panels, page changes",
|
|
2072
|
+
"values": {
|
|
2073
|
+
"Value": 220
|
|
2074
|
+
}
|
|
1905
2075
|
}
|
|
1906
2076
|
]
|
|
1907
2077
|
}
|
package/text-styles.css
CHANGED
package/tokens/code.tokens.json
CHANGED
|
@@ -107,68 +107,14 @@
|
|
|
107
107
|
}
|
|
108
108
|
]
|
|
109
109
|
},
|
|
110
|
-
"focus-ring-width": {
|
|
111
|
-
"$type": "dimension",
|
|
112
|
-
"$value": {
|
|
113
|
-
"value": 1,
|
|
114
|
-
"unit": "px"
|
|
115
|
-
}
|
|
116
|
-
},
|
|
117
110
|
"focus-outline": {
|
|
118
111
|
"$type": "border",
|
|
119
112
|
"$value": {
|
|
120
|
-
"width": "{focus
|
|
113
|
+
"width": "{focus.ring-width}",
|
|
121
114
|
"style": "solid",
|
|
122
115
|
"color": "{focus.ring}"
|
|
123
116
|
}
|
|
124
117
|
},
|
|
125
|
-
"titlebar-height": {
|
|
126
|
-
"$type": "dimension",
|
|
127
|
-
"$value": {
|
|
128
|
-
"value": 56,
|
|
129
|
-
"unit": "px"
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
"rail-item-size": {
|
|
133
|
-
"$type": "dimension",
|
|
134
|
-
"$value": {
|
|
135
|
-
"value": 38,
|
|
136
|
-
"unit": "px"
|
|
137
|
-
}
|
|
138
|
-
},
|
|
139
|
-
"card-padding": {
|
|
140
|
-
"$value": "{spacing.14}"
|
|
141
|
-
},
|
|
142
|
-
"card-header-padding-y": {
|
|
143
|
-
"$value": "{card-padding}"
|
|
144
|
-
},
|
|
145
|
-
"card-header-padding-x": {
|
|
146
|
-
"$value": "{card-padding}"
|
|
147
|
-
},
|
|
148
|
-
"card-header-min-height": {
|
|
149
|
-
"$type": "dimension",
|
|
150
|
-
"$value": {
|
|
151
|
-
"value": 42,
|
|
152
|
-
"unit": "px"
|
|
153
|
-
}
|
|
154
|
-
},
|
|
155
|
-
"card-header-height": {
|
|
156
|
-
"$type": "dimension",
|
|
157
|
-
"$value": {
|
|
158
|
-
"value": 44,
|
|
159
|
-
"unit": "px"
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
"card-body-padding": {
|
|
163
|
-
"$value": "{card-padding}"
|
|
164
|
-
},
|
|
165
|
-
"row-padding-y": {
|
|
166
|
-
"$type": "dimension",
|
|
167
|
-
"$value": {
|
|
168
|
-
"value": 8,
|
|
169
|
-
"unit": "px"
|
|
170
|
-
}
|
|
171
|
-
},
|
|
172
118
|
"ease-out": {
|
|
173
119
|
"$type": "cubicBezier",
|
|
174
120
|
"$value": [
|
|
@@ -195,31 +141,5 @@
|
|
|
195
141
|
0.58,
|
|
196
142
|
1
|
|
197
143
|
]
|
|
198
|
-
},
|
|
199
|
-
"duration-fast": {
|
|
200
|
-
"$type": "duration",
|
|
201
|
-
"$value": {
|
|
202
|
-
"value": 140,
|
|
203
|
-
"unit": "ms"
|
|
204
|
-
}
|
|
205
|
-
},
|
|
206
|
-
"duration-normal": {
|
|
207
|
-
"$type": "duration",
|
|
208
|
-
"$value": {
|
|
209
|
-
"value": 220,
|
|
210
|
-
"unit": "ms"
|
|
211
|
-
}
|
|
212
|
-
},
|
|
213
|
-
"weight-regular": {
|
|
214
|
-
"$type": "fontWeight",
|
|
215
|
-
"$value": 400
|
|
216
|
-
},
|
|
217
|
-
"weight-medium": {
|
|
218
|
-
"$type": "fontWeight",
|
|
219
|
-
"$value": 500
|
|
220
|
-
},
|
|
221
|
-
"weight-semibold": {
|
|
222
|
-
"$type": "fontWeight",
|
|
223
|
-
"$value": 600
|
|
224
144
|
}
|
|
225
145
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"titlebar": {
|
|
3
|
+
"height": {
|
|
4
|
+
"$type": "dimension",
|
|
5
|
+
"$value": {
|
|
6
|
+
"value": 56,
|
|
7
|
+
"unit": "px"
|
|
8
|
+
},
|
|
9
|
+
"$description": "Title bar"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"rail": {
|
|
13
|
+
"item-size": {
|
|
14
|
+
"$type": "dimension",
|
|
15
|
+
"$value": {
|
|
16
|
+
"value": 38,
|
|
17
|
+
"unit": "px"
|
|
18
|
+
},
|
|
19
|
+
"$description": "Rail items"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"card": {
|
|
23
|
+
"padding": {
|
|
24
|
+
"$type": "dimension",
|
|
25
|
+
"$value": "{spacing.14}",
|
|
26
|
+
"$description": "Card inset"
|
|
27
|
+
},
|
|
28
|
+
"header-padding-y": {
|
|
29
|
+
"$type": "dimension",
|
|
30
|
+
"$value": "{card.padding}"
|
|
31
|
+
},
|
|
32
|
+
"header-padding-x": {
|
|
33
|
+
"$type": "dimension",
|
|
34
|
+
"$value": "{card.padding}"
|
|
35
|
+
},
|
|
36
|
+
"header-min-height": {
|
|
37
|
+
"$type": "dimension",
|
|
38
|
+
"$value": {
|
|
39
|
+
"value": 42,
|
|
40
|
+
"unit": "px"
|
|
41
|
+
},
|
|
42
|
+
"$description": "Compact card header"
|
|
43
|
+
},
|
|
44
|
+
"header-height": {
|
|
45
|
+
"$type": "dimension",
|
|
46
|
+
"$value": {
|
|
47
|
+
"value": 44,
|
|
48
|
+
"unit": "px"
|
|
49
|
+
},
|
|
50
|
+
"$description": "Card header"
|
|
51
|
+
},
|
|
52
|
+
"body-padding": {
|
|
53
|
+
"$type": "dimension",
|
|
54
|
+
"$value": "{card.padding}"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"row": {
|
|
58
|
+
"padding-y": {
|
|
59
|
+
"$type": "dimension",
|
|
60
|
+
"$value": {
|
|
61
|
+
"value": 8,
|
|
62
|
+
"unit": "px"
|
|
63
|
+
},
|
|
64
|
+
"$description": "Data row, above and below"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"duration": {
|
|
3
|
+
"fast": {
|
|
4
|
+
"$type": "duration",
|
|
5
|
+
"$value": {
|
|
6
|
+
"value": 140,
|
|
7
|
+
"unit": "ms"
|
|
8
|
+
},
|
|
9
|
+
"$description": "Hovers, small changes"
|
|
10
|
+
},
|
|
11
|
+
"normal": {
|
|
12
|
+
"$type": "duration",
|
|
13
|
+
"$value": {
|
|
14
|
+
"value": 220,
|
|
15
|
+
"unit": "ms"
|
|
16
|
+
},
|
|
17
|
+
"$description": "Panels, page changes"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -78,5 +78,19 @@
|
|
|
78
78
|
"sans-serif"
|
|
79
79
|
]
|
|
80
80
|
}
|
|
81
|
+
},
|
|
82
|
+
"weight": {
|
|
83
|
+
"regular": {
|
|
84
|
+
"$type": "fontWeight",
|
|
85
|
+
"$value": 400
|
|
86
|
+
},
|
|
87
|
+
"medium": {
|
|
88
|
+
"$type": "fontWeight",
|
|
89
|
+
"$value": 500
|
|
90
|
+
},
|
|
91
|
+
"semibold": {
|
|
92
|
+
"$type": "fontWeight",
|
|
93
|
+
"$value": 600
|
|
94
|
+
}
|
|
81
95
|
}
|
|
82
96
|
}
|
package/tokens.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* @swiftsolve/rove-tokens 1.
|
|
1
|
+
/* @swiftsolve/rove-tokens 1.1.0. Generated from Figma by scripts/tokens/build.mjs; do not edit. */
|
|
2
2
|
:root {
|
|
3
3
|
/* Color */
|
|
4
4
|
--bg-base: #0b0b0c; /* Backdrop */
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
|
|
45
45
|
/* Spacing */
|
|
46
46
|
--focus-offset: 2px; /* Focus ring offset */
|
|
47
|
+
--focus-ring-width: 1px; /* Focus ring stroke */
|
|
47
48
|
--spacing-2: 2px;
|
|
48
49
|
--spacing-4: 4px;
|
|
49
50
|
--spacing-6: 6px;
|
|
@@ -70,6 +71,9 @@
|
|
|
70
71
|
--font-size-3xl: 28px;
|
|
71
72
|
--font-family-sans: 'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
72
73
|
--font-family-numeric: 'Questrial', ui-sans-serif, system-ui, sans-serif;
|
|
74
|
+
--weight-regular: 400;
|
|
75
|
+
--weight-medium: 500;
|
|
76
|
+
--weight-semibold: 600;
|
|
73
77
|
|
|
74
78
|
/* Opacity */
|
|
75
79
|
--opacity-tint-xs: 8%; /* Faintest tint */
|
|
@@ -80,29 +84,29 @@
|
|
|
80
84
|
--opacity-high: 80%; /* Nearly opaque */
|
|
81
85
|
--opacity-disabled: 40%; /* Disabled controls */
|
|
82
86
|
|
|
87
|
+
/* Layout */
|
|
88
|
+
--titlebar-height: 56px; /* Title bar */
|
|
89
|
+
--rail-item-size: 38px; /* Rail items */
|
|
90
|
+
--card-padding: var(--spacing-14); /* Card inset */
|
|
91
|
+
--card-header-padding-y: var(--card-padding);
|
|
92
|
+
--card-header-padding-x: var(--card-padding);
|
|
93
|
+
--card-header-min-height: 42px; /* Compact card header */
|
|
94
|
+
--card-header-height: 44px; /* Card header */
|
|
95
|
+
--card-body-padding: var(--card-padding);
|
|
96
|
+
--row-padding-y: 8px; /* Data row, above and below */
|
|
97
|
+
|
|
98
|
+
/* Motion */
|
|
99
|
+
--duration-fast: 140ms; /* Hovers, small changes */
|
|
100
|
+
--duration-normal: 220ms; /* Panels, page changes */
|
|
101
|
+
|
|
83
102
|
/* Code-only */
|
|
84
103
|
--shadow-panel: 0 1px 2px rgba(0, 0, 0, 0.22), 0 4px 12px rgba(0, 0, 0, 0.1);
|
|
85
104
|
--shadow-raised: 0 12px 32px rgba(0, 0, 0, 0.22);
|
|
86
105
|
--shadow-popover: 0 2px 6px rgba(0, 0, 0, 0.22), 0 6px 16px rgba(0, 0, 0, 0.22);
|
|
87
|
-
--focus-ring-width: 1px;
|
|
88
106
|
--focus-outline: var(--focus-ring-width) solid var(--focus-ring);
|
|
89
|
-
--titlebar-height: 56px;
|
|
90
|
-
--rail-item-size: 38px;
|
|
91
|
-
--card-padding: var(--spacing-14);
|
|
92
|
-
--card-header-padding-y: var(--card-padding);
|
|
93
|
-
--card-header-padding-x: var(--card-padding);
|
|
94
|
-
--card-header-min-height: 42px;
|
|
95
|
-
--card-header-height: 44px;
|
|
96
|
-
--card-body-padding: var(--card-padding);
|
|
97
|
-
--row-padding-y: 8px;
|
|
98
107
|
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
|
|
99
108
|
--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
|
|
100
109
|
--ease-pulse: cubic-bezier(0.42, 0, 0.58, 1);
|
|
101
|
-
--duration-fast: 140ms;
|
|
102
|
-
--duration-normal: 220ms;
|
|
103
|
-
--weight-regular: 400;
|
|
104
|
-
--weight-medium: 500;
|
|
105
|
-
--weight-semibold: 600;
|
|
106
110
|
--focus-inset: calc(-1 * var(--focus-ring-width));
|
|
107
111
|
|
|
108
112
|
/* Type styles */
|