@bsuite/theme 0.8.0 → 0.10.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.
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  /*
3
3
  * Role-bound, not palette-bound. Until 0.7.0 these were raw Tailwind palette
4
- * classes (`bg-emerald-50`, `bg-red-50`, …), which meant the design-system
4
+ * theme-audit-ok: prose. classes (`bg-emerald-50`, `bg-red-50`, …), which meant the design-system
5
5
  * component every app imports was invisible to tenant white-labelling —
6
6
  * BrandingProvider mutates the role layer, and these bound below it.
7
7
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsuite/theme",
3
- "version": "0.8.0",
3
+ "version": "0.10.0",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "publishConfig": {
@@ -281,3 +281,17 @@
281
281
  --dot-color: oklch(0.72 0.060 90 / 0.16);
282
282
  --grid-color: oklch(0.82 0.020 250 / 0.055);
283
283
  }
284
+
285
+ /* ============================================================
286
+ BASE — the heading ramp, APPLIED. The tokens existed and nothing bound
287
+ them to an actual h1..h6, so every level rendered as flat body colour.
288
+ Contract values, verbatim.
289
+ ============================================================ */
290
+ @layer base {
291
+ h1 { font-family: var(--font-display); color: var(--role-h1); font-size: 25px; font-weight: 600; letter-spacing: var(--track-display); }
292
+ h2 { font-family: var(--font-heading); color: var(--role-h2); font-size: 19px; font-weight: 700; }
293
+ h3 { font-family: var(--font-heading); color: var(--role-h3); font-size: 16px; font-weight: 700; }
294
+ h4 { font-family: var(--font-heading); color: var(--role-h4); font-size: 14px; font-weight: 700; }
295
+ h5 { font-family: var(--font-heading); color: var(--role-h5); font-size: 13px; font-weight: 700; }
296
+ h6 { font-family: var(--font-heading); color: var(--role-h6); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: var(--track-eyebrow); }
297
+ }
package/src/css/vars.css CHANGED
@@ -127,6 +127,19 @@
127
127
  --role-success: var(--neon-electric-teal); /* was green — 0.043 from red */
128
128
  --role-info: var(--neon-electric-cyan); /* oklch(0.769 0.132 191.7) */
129
129
 
130
+ /* ═══ TYPE ═══ Lifted from the D2C contract, which specified a font
131
+ stack this package never shipped. Apps were left to pick their own, so
132
+ the estate ran system-ui, Inter and JetBrains Mono simultaneously while
133
+ the contract asked for one family. Same shape of gap as the heading
134
+ ramp: written down, never implemented. */
135
+ --font-display: 'Geist Variable', Geist, system-ui, sans-serif;
136
+ --font-body: 'Geist Variable', Geist, system-ui, sans-serif;
137
+ --font-mono: 'Geist Mono Variable', 'Geist Mono', ui-monospace, monospace;
138
+ --track-display: -0.028em;
139
+ --track-heading: -0.018em;
140
+ --track-body: 0em;
141
+ --track-eyebrow: 0.09em;
142
+
130
143
  /* ═══ INFORMATIONAL SCALE — categorical, NOT semantic ═══
131
144
  Added 2026-08-03 by operator ruling: "informational hues might be handy
132
145
  to stand out against the style colour palette."
@@ -469,3 +482,37 @@
469
482
 
470
483
  /* Shadcn bridge picks up rebindings automatically via var() chain */
471
484
  }
485
+
486
+ /* ============================================================
487
+ BASE — the heading ramp, APPLIED.
488
+ ============================================================
489
+ Added 2026-08-03 after operator review: "borders and heading levels
490
+ unstyled" (conduit) and "Document Management looks all black" (BSU).
491
+
492
+ Both were the same omission. --role-h1..h6 existed as tokens and NOTHING
493
+ bound them to an actual h1..h6, so every heading fell through to
494
+ --role-text-body — one flat near-black for all six levels. A ramp nobody
495
+ applies is not a ramp, it is six unused variables, and that is exactly what
496
+ an operator sees as "unstyled".
497
+
498
+ Values are the contract's, verbatim (d2c-theme-source-of-truth.html and the
499
+ Corporate equivalent). Each level shifts HUE as well as lightness, so the
500
+ hierarchy survives greyscale and both dichromacies rather than relying on
501
+ size alone.
502
+
503
+ Scoped to @layer base so any component class still wins — this sets the
504
+ floor, it does not fight Tailwind utilities. */
505
+ @layer base {
506
+ h1 { color: var(--role-h1); font-size: 25px; font-weight: 700; letter-spacing: var(--track-display); }
507
+ h2 { color: var(--role-h2); font-size: 19px; }
508
+ h3 { color: var(--role-h3); font-size: 16px; }
509
+ h4 { color: var(--role-h4); font-size: 14px; }
510
+ h5 { color: var(--role-h5); font-size: 13px; }
511
+ h6 {
512
+ color: var(--role-h6);
513
+ font-size: 11px;
514
+ text-transform: uppercase;
515
+ letter-spacing: var(--track-eyebrow);
516
+ font-weight: 700;
517
+ }
518
+ }
package/src/preset-v4.css CHANGED
@@ -168,6 +168,17 @@
168
168
  --color-text-on-success: var(--text-on-success);
169
169
  --color-text-on-warning: var(--text-on-warning);
170
170
 
171
+ /* ============================================================
172
+ TYPE — the contract's stack, bridged to Tailwind's font-* utilities.
173
+ `font-sans` and `font-mono` are what components actually write, so
174
+ without this bridge the tokens exist and nothing uses them. Every D2C
175
+ app had been declaring its own --font-sans locally instead, which is how
176
+ the estate came to run system-ui, Inter and JetBrains Mono at once.
177
+ ============================================================ */
178
+ --font-sans: var(--font-body);
179
+ --font-display: var(--font-display);
180
+ --font-mono: var(--font-mono);
181
+
171
182
  /* ============================================================
172
183
  ANIMATIONS
173
184
  ============================================================ */