@dataimago/tokens-neutral 0.1.0-alpha.6
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 +67 -0
- package/dist/index.cjs +439 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.mjs +438 -0
- package/dist/tokens.css +196 -0
- package/dist/tokens.scss +196 -0
- package/package.json +52 -0
- package/src/colors.json +44 -0
- package/src/theme-colors.json +76 -0
- package/src/typography.json +78 -0
package/README.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# @dataimago/tokens-neutral
|
|
2
|
+
|
|
3
|
+
Neutral-identity design tokens — sensible defaults for externally-owned consumers (Level-3 user apps generated by `apps/template/` in `dataimago-ai`; future third-party Level-2 hubs).
|
|
4
|
+
|
|
5
|
+
**Identity:** Noto Sans throughout (no Josefin Sans). Neutral palette (ink, stone, paper, functional only — no forest, copper, accent, or presentation-blue). Interactive accent role maps to a quiet ink-700/ink-200 by default; owners customize from there.
|
|
6
|
+
|
|
7
|
+
**Non-identity tokens** (spacing, radius, motion, shadows, ethical thresholds) are read from `@dataimago/tokens` at build time and stay in lockstep — no duplication, no drift.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
pnpm add @dataimago/tokens-neutral
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
```css
|
|
18
|
+
/* globals.css — import CSS custom properties */
|
|
19
|
+
@import '@dataimago/tokens-neutral/css';
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
```js
|
|
23
|
+
// Tailwind: pair with @dataimago/css-neutral preset
|
|
24
|
+
module.exports = {
|
|
25
|
+
presets: [require('@dataimago/css-neutral/tailwind-preset')],
|
|
26
|
+
content: [/* your app */],
|
|
27
|
+
};
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
// JS/TS: typed runtime access
|
|
32
|
+
import { color, font } from '@dataimago/tokens-neutral';
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## When to use this vs `@dataimago/tokens`
|
|
36
|
+
|
|
37
|
+
| Consumer | Use |
|
|
38
|
+
|---|---|
|
|
39
|
+
| `dataimago.ai` (Level-1 hub) | `@dataimago/tokens` (dataimago house identity) |
|
|
40
|
+
| `dissertation.ai`, `sgpc.ai`, `rpkg.ai` (Level-2 hubs — dataimago-owned) | `@dataimago/tokens` (dataimago house identity) |
|
|
41
|
+
| `apps/template/` (per-user Level-3 apps generated by the framework) | `@dataimago/tokens-neutral` |
|
|
42
|
+
| Third-party Level-2 hubs (future) | `@dataimago/tokens-neutral` as the starting point; owner customizes |
|
|
43
|
+
|
|
44
|
+
## Architectural notes
|
|
45
|
+
|
|
46
|
+
This package implements **Variant A** of the two-tier identity pattern proposed during the iteration-3 scope-contraction amendment (2026-05-14):
|
|
47
|
+
|
|
48
|
+
- **Variant A (current):** additive neutral sibling. `@dataimago/tokens` keeps the dataimago house identity; `@dataimago/tokens-neutral` ships sensible neutral defaults. Non-breaking.
|
|
49
|
+
- **Variant B (iteration-4 target):** neutral-as-base. `@dataimago/tokens` would be refactored to ship the neutral foundation; the dataimago house identity would move into a new `@dataimago/dataimago-theme` overlay package. Breaking change; deferred until dissertation-ai (iteration-3 D.1+) validates the framework.
|
|
50
|
+
|
|
51
|
+
See [`wiki/decisions/tokens-neutral-sibling.md`](../../wiki/decisions/tokens-neutral-sibling.md) for the full rationale + deprecation path.
|
|
52
|
+
|
|
53
|
+
## Build
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
pnpm --filter @dataimago/tokens-neutral build
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Emits:
|
|
60
|
+
- `dist/tokens.css` — CSS custom properties (light + dark theme variants)
|
|
61
|
+
- `dist/tokens.scss` — same, as SCSS
|
|
62
|
+
- `dist/index.{mjs,cjs,d.ts}` — typed JS modules
|
|
63
|
+
|
|
64
|
+
## Related
|
|
65
|
+
|
|
66
|
+
- [`@dataimago/tokens`](../tokens) — dataimago house identity
|
|
67
|
+
- [`@dataimago/css-neutral`](../css-neutral) — compiled CSS + Tailwind preset built from this package
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
// Auto-generated by packages/tokens-neutral/build.mjs — do not edit.
|
|
2
|
+
const tokens = {
|
|
3
|
+
"color": {
|
|
4
|
+
"surface": {
|
|
5
|
+
"page": {
|
|
6
|
+
"light": "#ededeb",
|
|
7
|
+
"dark": "#141410",
|
|
8
|
+
"description": "Main page background — stone-100 (light) / stone-900 (dark)"
|
|
9
|
+
},
|
|
10
|
+
"page-scrolled": {
|
|
11
|
+
"light": "#ededeb",
|
|
12
|
+
"dark": "#141410",
|
|
13
|
+
"description": "Page background when navbar shrinks — matches page"
|
|
14
|
+
},
|
|
15
|
+
"elevated": {
|
|
16
|
+
"light": "#f7f7f6",
|
|
17
|
+
"dark": "#1c1917",
|
|
18
|
+
"description": "Cards, modals, dropdowns — one step above page (stone-50 / ink-800)"
|
|
19
|
+
},
|
|
20
|
+
"sunken": {
|
|
21
|
+
"light": "#faf2e3",
|
|
22
|
+
"dark": "#0c0a09",
|
|
23
|
+
"description": "Input fields, code blocks — below page level (paper-200 light / ink-900 dark)"
|
|
24
|
+
},
|
|
25
|
+
"navbar": {
|
|
26
|
+
"light": "#ededeb",
|
|
27
|
+
"dark": "#141410",
|
|
28
|
+
"description": "Navbar background — matches page in both themes"
|
|
29
|
+
},
|
|
30
|
+
"navbar-scrolled": {
|
|
31
|
+
"light": "#ededeb",
|
|
32
|
+
"dark": "#141410",
|
|
33
|
+
"description": "Navbar when scrolled/shrunk — matches page-scrolled"
|
|
34
|
+
},
|
|
35
|
+
"code": {
|
|
36
|
+
"light": "#faf2e3",
|
|
37
|
+
"dark": "#1c1917",
|
|
38
|
+
"description": "Code block and inline code background"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"border": {
|
|
42
|
+
"subtle": {
|
|
43
|
+
"light": "rgba(12, 10, 9, 0.08)",
|
|
44
|
+
"dark": "rgba(253, 249, 242, 0.08)",
|
|
45
|
+
"description": "Subtle borders — element separation"
|
|
46
|
+
},
|
|
47
|
+
"moderate": {
|
|
48
|
+
"light": "rgba(12, 10, 9, 0.15)",
|
|
49
|
+
"dark": "rgba(253, 249, 242, 0.15)",
|
|
50
|
+
"description": "Moderate borders — defined boundaries"
|
|
51
|
+
},
|
|
52
|
+
"strong": {
|
|
53
|
+
"light": "rgba(12, 10, 9, 0.25)",
|
|
54
|
+
"dark": "rgba(253, 249, 242, 0.25)",
|
|
55
|
+
"description": "Strong borders — prominent separation"
|
|
56
|
+
},
|
|
57
|
+
"card": {
|
|
58
|
+
"light": "rgba(12, 10, 9, 0.15)",
|
|
59
|
+
"dark": "rgba(253, 249, 242, 0.15)",
|
|
60
|
+
"description": "Card border color with transparency for subtle definition"
|
|
61
|
+
},
|
|
62
|
+
"code": {
|
|
63
|
+
"light": "#d6d3d1",
|
|
64
|
+
"dark": "#292524",
|
|
65
|
+
"description": "Code block border"
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"content": {
|
|
69
|
+
"primary": {
|
|
70
|
+
"light": "#14140f",
|
|
71
|
+
"dark": "#fdf9f2",
|
|
72
|
+
"description": "Primary text — stone-900 on stone-100 (light) / paper-100 on dark surface"
|
|
73
|
+
},
|
|
74
|
+
"secondary": {
|
|
75
|
+
"light": "#7c7c7c",
|
|
76
|
+
"dark": "#a8a29e",
|
|
77
|
+
"description": "Secondary text — stone-500 (light) / ink-300 (dark)"
|
|
78
|
+
},
|
|
79
|
+
"muted": {
|
|
80
|
+
"light": "#78716c",
|
|
81
|
+
"dark": "#78716c",
|
|
82
|
+
"description": "Muted text — captions, meta info"
|
|
83
|
+
},
|
|
84
|
+
"inverse": {
|
|
85
|
+
"light": "#fdf9f2",
|
|
86
|
+
"dark": "#0c0a09",
|
|
87
|
+
"description": "Inverse text — for contrasting backgrounds"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"interactive": {
|
|
91
|
+
"primary": {
|
|
92
|
+
"light": "#292524",
|
|
93
|
+
"dark": "#d6d3d1",
|
|
94
|
+
"description": "Primary interactive — ink-700 on light (15:1 on stone-100, AAA) / ink-200 on dark (high contrast quiet voice). Neutral default; @dataimago/tokens uses forest-700/forest-300 for dataimago house identity. Owners customize by overriding."
|
|
95
|
+
},
|
|
96
|
+
"hover": {
|
|
97
|
+
"light": "#1c1917",
|
|
98
|
+
"dark": "#a8a29e",
|
|
99
|
+
"description": "Hover state — ink-800 on light (one step deeper) / ink-300 on dark"
|
|
100
|
+
},
|
|
101
|
+
"accent": {
|
|
102
|
+
"light": "#292524",
|
|
103
|
+
"dark": "#d6d3d1",
|
|
104
|
+
"description": "Accent — neutral default mirrors interactive.primary (ink-700 / ink-200). The neutral package intentionally ships without a brand-color accent role; consumers that want a sky-blue, copper, forest, or other distinctive accent override this token. @dataimago/tokens maps this role to mode-aware presentation-blue per iteration-2."
|
|
105
|
+
},
|
|
106
|
+
"focus": {
|
|
107
|
+
"light": "#292524",
|
|
108
|
+
"dark": "#d6d3d1",
|
|
109
|
+
"description": "Focus indicators — mirrors interactive.primary"
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"spacing": {
|
|
114
|
+
"xs": {
|
|
115
|
+
"value": "0.25rem"
|
|
116
|
+
},
|
|
117
|
+
"sm": {
|
|
118
|
+
"value": "0.5rem"
|
|
119
|
+
},
|
|
120
|
+
"md": {
|
|
121
|
+
"value": "1rem"
|
|
122
|
+
},
|
|
123
|
+
"lg": {
|
|
124
|
+
"value": "1.5rem"
|
|
125
|
+
},
|
|
126
|
+
"xl": {
|
|
127
|
+
"value": "2rem"
|
|
128
|
+
},
|
|
129
|
+
"2xl": {
|
|
130
|
+
"value": "3rem"
|
|
131
|
+
},
|
|
132
|
+
"3xl": {
|
|
133
|
+
"value": "4rem"
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"radius": {
|
|
137
|
+
"sm": {
|
|
138
|
+
"value": "0.25rem"
|
|
139
|
+
},
|
|
140
|
+
"md": {
|
|
141
|
+
"value": "0.5rem"
|
|
142
|
+
},
|
|
143
|
+
"lg": {
|
|
144
|
+
"value": "0.75rem"
|
|
145
|
+
},
|
|
146
|
+
"xl": {
|
|
147
|
+
"value": "1rem"
|
|
148
|
+
},
|
|
149
|
+
"full": {
|
|
150
|
+
"value": "9999px"
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
"contrast": {
|
|
154
|
+
"high": {
|
|
155
|
+
"light": "rgb(20, 20, 16)",
|
|
156
|
+
"dark": "rgb(237, 237, 235)",
|
|
157
|
+
"description": "Maximum contrast text - accessibility focus"
|
|
158
|
+
},
|
|
159
|
+
"readable": {
|
|
160
|
+
"light": "rgb(20, 20, 16)",
|
|
161
|
+
"dark": "rgb(237, 237, 235)",
|
|
162
|
+
"description": "Comfortable reading contrast - primary text"
|
|
163
|
+
},
|
|
164
|
+
"medium": {
|
|
165
|
+
"light": "#7c7c7c",
|
|
166
|
+
"dark": "#83838f",
|
|
167
|
+
"description": "Medium emphasis - secondary information"
|
|
168
|
+
},
|
|
169
|
+
"subtle": {
|
|
170
|
+
"light": "#7c7c7c",
|
|
171
|
+
"dark": "#83838f",
|
|
172
|
+
"description": "De-emphasized text - captions, meta info"
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
"shadow": {
|
|
176
|
+
"sm": {
|
|
177
|
+
"value": "0 1px 2px 0 rgb(0 0 0 / 0.05)"
|
|
178
|
+
},
|
|
179
|
+
"md": {
|
|
180
|
+
"value": "0 4px 6px -1px rgb(0 0 0 / 0.1)"
|
|
181
|
+
},
|
|
182
|
+
"lg": {
|
|
183
|
+
"value": "0 10px 15px -3px rgb(0 0 0 / 0.1)"
|
|
184
|
+
},
|
|
185
|
+
"xl": {
|
|
186
|
+
"value": "0 20px 25px -5px rgb(0 0 0 / 0.1)"
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
"border": {
|
|
190
|
+
"subtle": {
|
|
191
|
+
"light": "rgba(20, 20, 16, 0.1)",
|
|
192
|
+
"dark": "rgba(237, 237, 235, 0.1)",
|
|
193
|
+
"description": "Subtle borders - element separation"
|
|
194
|
+
},
|
|
195
|
+
"moderate": {
|
|
196
|
+
"light": "rgba(20, 20, 16, 0.15)",
|
|
197
|
+
"dark": "rgba(237, 237, 235, 0.15)",
|
|
198
|
+
"description": "Moderate borders - defined boundaries"
|
|
199
|
+
},
|
|
200
|
+
"focus": {
|
|
201
|
+
"light": "#3498DB",
|
|
202
|
+
"dark": "#4FC3F7",
|
|
203
|
+
"description": "Focus indicators - accessibility"
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
"transition": {
|
|
207
|
+
"quick": {
|
|
208
|
+
"value": "0.15s ease",
|
|
209
|
+
"description": "Snap-fast micro-interactions — hover lifts, focus rings, immediate-feedback affordances"
|
|
210
|
+
},
|
|
211
|
+
"standard": {
|
|
212
|
+
"value": "0.25s ease-in-out",
|
|
213
|
+
"description": "Default for most state changes — toggles, button states, card hovers"
|
|
214
|
+
},
|
|
215
|
+
"smooth": {
|
|
216
|
+
"value": "0.35s ease",
|
|
217
|
+
"description": "Theme transitions, navbar collapse/expand, layout shifts that should feel deliberate"
|
|
218
|
+
},
|
|
219
|
+
"logo": {
|
|
220
|
+
"value": "0.3s",
|
|
221
|
+
"description": "Reserved for the dataimago wordmark / brand-mark transitions; do not borrow for general UI"
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
"card": {
|
|
225
|
+
"background": "surface.elevated",
|
|
226
|
+
"padding": "spacing.component.padding",
|
|
227
|
+
"radius": "radius.component",
|
|
228
|
+
"shadow": "shadow.moderate",
|
|
229
|
+
"border": "border.subtle",
|
|
230
|
+
"description": "Card component tokens - references semantic tokens"
|
|
231
|
+
},
|
|
232
|
+
"button": {
|
|
233
|
+
"padding-x": "spacing.component.padding",
|
|
234
|
+
"padding-y": "spacing.micro.normal",
|
|
235
|
+
"radius": "radius.component",
|
|
236
|
+
"font-weight": "typography.weight.medium",
|
|
237
|
+
"primary": {
|
|
238
|
+
"background": "interactive.primary",
|
|
239
|
+
"text": "content.inverse",
|
|
240
|
+
"hover": "interactive.hover"
|
|
241
|
+
},
|
|
242
|
+
"secondary": {
|
|
243
|
+
"background": "surface.elevated",
|
|
244
|
+
"text": "content.primary",
|
|
245
|
+
"hover": "surface.page"
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
"navbar": {
|
|
249
|
+
"background": "surface.navbar",
|
|
250
|
+
"background-scrolled": "surface.navbar-scrolled",
|
|
251
|
+
"text": "content.secondary",
|
|
252
|
+
"text-hover": "interactive.accent",
|
|
253
|
+
"transition": "transition.smooth"
|
|
254
|
+
},
|
|
255
|
+
"navigation": {
|
|
256
|
+
"item-spacing": "spacing.micro.loose",
|
|
257
|
+
"hover-background": {
|
|
258
|
+
"light": "rgba(20, 20, 16, 0.05)",
|
|
259
|
+
"dark": "rgba(237, 237, 235, 0.05)"
|
|
260
|
+
},
|
|
261
|
+
"active-background": {
|
|
262
|
+
"light": "rgba(20, 20, 16, 0.1)",
|
|
263
|
+
"dark": "rgba(237, 237, 235, 0.1)"
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
"font": {
|
|
267
|
+
"family": {
|
|
268
|
+
"sans": {
|
|
269
|
+
"value": "Noto Sans, Fira Sans, system-ui, sans-serif",
|
|
270
|
+
"description": "Primary sans-serif font - body text. Same as @dataimago/tokens (Noto Sans is neutral)."
|
|
271
|
+
},
|
|
272
|
+
"mono": {
|
|
273
|
+
"value": "JetBrains Mono, SF Mono, Monaco, Inconsolata, monospace",
|
|
274
|
+
"description": "Monospace font - code blocks and technical content. Same as @dataimago/tokens."
|
|
275
|
+
},
|
|
276
|
+
"display": {
|
|
277
|
+
"value": "var(--font-family-display-editorial)",
|
|
278
|
+
"description": "Alias of display-editorial. Preserved for naming-parity with @dataimago/tokens; consumers writing `var(--font-family-display)` get sensible neutral output."
|
|
279
|
+
},
|
|
280
|
+
"display-editorial": {
|
|
281
|
+
"value": "Noto Sans, system-ui, sans-serif",
|
|
282
|
+
"description": "Editorial display family — neutral default. @dataimago/tokens uses Josefin Sans here; @dataimago/tokens-neutral substitutes Noto Sans so externally-owned consumers (Level-3 user apps, third-party Level-2 hubs) ship without inheriting the dataimago house typographic identity. Owners may override by extending the Tailwind preset or redeclaring the CSS variable."
|
|
283
|
+
},
|
|
284
|
+
"display-documentation": {
|
|
285
|
+
"value": "Noto Sans, system-ui, sans-serif",
|
|
286
|
+
"description": "Documentation display family — Noto Sans. Identical to @dataimago/tokens (this family was already Noto Sans in the house package)."
|
|
287
|
+
},
|
|
288
|
+
"brand": {
|
|
289
|
+
"value": "Noto Sans, system-ui, sans-serif",
|
|
290
|
+
"description": "Brand font — neutral default. @dataimago/tokens uses Futura for the dataimago navbar wordmark; @dataimago/tokens-neutral substitutes Noto Sans. Owners customize by extending the Tailwind preset."
|
|
291
|
+
},
|
|
292
|
+
"math": {
|
|
293
|
+
"value": "Noto Sans Math, Noto Sans, system-ui, sans-serif",
|
|
294
|
+
"description": "Mathematical notation font — Noto Sans Math. Same as @dataimago/tokens (neutral by virtue of Noto's broad coverage)."
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
"size": {
|
|
298
|
+
"micro": {
|
|
299
|
+
"value": "0.75rem",
|
|
300
|
+
"description": "Micro text - captions, metadata"
|
|
301
|
+
},
|
|
302
|
+
"small": {
|
|
303
|
+
"value": "0.875rem",
|
|
304
|
+
"description": "Small text - secondary information"
|
|
305
|
+
},
|
|
306
|
+
"base": {
|
|
307
|
+
"value": "1rem",
|
|
308
|
+
"description": "Base text size - body content"
|
|
309
|
+
},
|
|
310
|
+
"readable": {
|
|
311
|
+
"value": "1.125rem",
|
|
312
|
+
"description": "Comfortable reading size - main content"
|
|
313
|
+
},
|
|
314
|
+
"emphasis": {
|
|
315
|
+
"value": "1.25rem",
|
|
316
|
+
"description": "Emphasized text - call-outs"
|
|
317
|
+
},
|
|
318
|
+
"heading-small": {
|
|
319
|
+
"value": "1.5rem",
|
|
320
|
+
"description": "Small headings - H4, H5"
|
|
321
|
+
},
|
|
322
|
+
"heading-medium": {
|
|
323
|
+
"value": "1.875rem",
|
|
324
|
+
"description": "Medium headings - H3"
|
|
325
|
+
},
|
|
326
|
+
"heading-large": {
|
|
327
|
+
"value": "2.25rem",
|
|
328
|
+
"description": "Large headings - H2"
|
|
329
|
+
},
|
|
330
|
+
"heading-xl": {
|
|
331
|
+
"value": "3rem",
|
|
332
|
+
"description": "Extra large headings - H1"
|
|
333
|
+
}
|
|
334
|
+
},
|
|
335
|
+
"weight": {
|
|
336
|
+
"extralight": {
|
|
337
|
+
"value": "200",
|
|
338
|
+
"description": "Extra-light weight — reserved for display-scale refinements (subtitles, oversized numerals)"
|
|
339
|
+
},
|
|
340
|
+
"light": {
|
|
341
|
+
"value": "300",
|
|
342
|
+
"description": "Light weight — minor headings (h4–h6), large display at small sizes"
|
|
343
|
+
},
|
|
344
|
+
"normal": {
|
|
345
|
+
"value": "400",
|
|
346
|
+
"description": "Normal text weight — body content"
|
|
347
|
+
},
|
|
348
|
+
"medium": {
|
|
349
|
+
"value": "500",
|
|
350
|
+
"description": "Medium weight — emphasis within text"
|
|
351
|
+
},
|
|
352
|
+
"semibold": {
|
|
353
|
+
"value": "600",
|
|
354
|
+
"description": "Semi-bold — subtitles, important text, default h1/h2 in the neutral stack"
|
|
355
|
+
},
|
|
356
|
+
"bold": {
|
|
357
|
+
"value": "700",
|
|
358
|
+
"description": "Bold — strong emphasis"
|
|
359
|
+
},
|
|
360
|
+
"heading": {
|
|
361
|
+
"_invariant": "Heading-weight cluster — neutral default uses semibold (600) for h1/h2 because Noto Sans's medium (500) feels light at hero scale where Josefin's medium has geometric character. Owners may override per-heading by extending the Tailwind preset.",
|
|
362
|
+
"h1": {
|
|
363
|
+
"value": "var(--font-weight-semibold)",
|
|
364
|
+
"description": "Heading h1 weight — semibold (600). Neutral default; @dataimago/tokens uses medium (500) tuned for Josefin Sans's geometric voice."
|
|
365
|
+
},
|
|
366
|
+
"h2": {
|
|
367
|
+
"value": "var(--font-weight-semibold)",
|
|
368
|
+
"description": "Heading h2 weight — semibold (600). Neutral default; @dataimago/tokens uses medium (500)."
|
|
369
|
+
},
|
|
370
|
+
"h3": {
|
|
371
|
+
"value": "var(--font-weight-medium)",
|
|
372
|
+
"description": "Heading h3 weight — medium (500). Same hierarchy logic as the house package; sized differentiation does the rest."
|
|
373
|
+
},
|
|
374
|
+
"h4": {
|
|
375
|
+
"value": "var(--font-weight-normal)",
|
|
376
|
+
"description": "Heading h4 weight — normal (400). Minor heading."
|
|
377
|
+
},
|
|
378
|
+
"h5": {
|
|
379
|
+
"value": "var(--font-weight-normal)",
|
|
380
|
+
"description": "Heading h5 weight — normal (400). Minor heading."
|
|
381
|
+
},
|
|
382
|
+
"h6": {
|
|
383
|
+
"value": "var(--font-weight-normal)",
|
|
384
|
+
"description": "Heading h6 weight — normal (400). Minor heading."
|
|
385
|
+
},
|
|
386
|
+
"subtitle": {
|
|
387
|
+
"value": "var(--font-weight-semibold)",
|
|
388
|
+
"description": "Subtitle weight — semibold (600)."
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
},
|
|
392
|
+
"style": {
|
|
393
|
+
"normal": {
|
|
394
|
+
"value": "normal",
|
|
395
|
+
"description": "Normal font style - upright text"
|
|
396
|
+
},
|
|
397
|
+
"italic": {
|
|
398
|
+
"value": "italic",
|
|
399
|
+
"description": "Italic style - sloped text with true italic glyphs"
|
|
400
|
+
},
|
|
401
|
+
"oblique": {
|
|
402
|
+
"value": "oblique",
|
|
403
|
+
"description": "Oblique style - sloped text without true italic design"
|
|
404
|
+
}
|
|
405
|
+
},
|
|
406
|
+
"lineHeight": {
|
|
407
|
+
"tight": {
|
|
408
|
+
"value": "1.25",
|
|
409
|
+
"description": "Tight line height - headings"
|
|
410
|
+
},
|
|
411
|
+
"normal": {
|
|
412
|
+
"value": "1.5",
|
|
413
|
+
"description": "Normal line height - body text"
|
|
414
|
+
},
|
|
415
|
+
"relaxed": {
|
|
416
|
+
"value": "1.625",
|
|
417
|
+
"description": "Relaxed line height - long-form content"
|
|
418
|
+
}
|
|
419
|
+
},
|
|
420
|
+
"feature-settings": {
|
|
421
|
+
"_invariant": "OpenType feature settings — neutral defaults. @dataimago/tokens applies lining figures (lnum) to display headings to correct Josefin Sans's old-style default figures; Noto Sans uses uniform-baseline figures natively, so the neutral package emits `normal` for both display and body.",
|
|
422
|
+
"display": {
|
|
423
|
+
"value": "\"normal\"",
|
|
424
|
+
"description": "Default figure style for display headings (neutral default). Noto Sans's native figures are uniform-baseline; no lnum override needed."
|
|
425
|
+
},
|
|
426
|
+
"body": {
|
|
427
|
+
"value": "\"normal\"",
|
|
428
|
+
"description": "Default figure style for body text (neutral default)."
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
};
|
|
433
|
+
module.exports = tokens;
|
|
434
|
+
module.exports.default = tokens;
|
|
435
|
+
module.exports.color = tokens.color;
|
|
436
|
+
module.exports.font = tokens.font;
|
|
437
|
+
module.exports.spacing = tokens.spacing;
|
|
438
|
+
module.exports.radius = tokens.radius;
|
|
439
|
+
module.exports.shadow = tokens.shadow;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Auto-generated by packages/tokens-neutral/build.mjs — do not edit.
|
|
2
|
+
declare const tokens: {
|
|
3
|
+
color?: Record<string, any>;
|
|
4
|
+
font?: Record<string, any>;
|
|
5
|
+
spacing?: Record<string, any>;
|
|
6
|
+
radius?: Record<string, any>;
|
|
7
|
+
shadow?: Record<string, any>;
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
};
|
|
10
|
+
export default tokens;
|
|
11
|
+
export declare const color: typeof tokens.color;
|
|
12
|
+
export declare const font: typeof tokens.font;
|
|
13
|
+
export declare const spacing: typeof tokens.spacing;
|
|
14
|
+
export declare const radius: typeof tokens.radius;
|
|
15
|
+
export declare const shadow: typeof tokens.shadow;
|