@rebasepro/ui 0.15.0 → 0.16.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.
@@ -37,28 +37,28 @@ html.dark {
37
37
  and holding 600 all the way down to text-sm made every heading shout equally
38
38
  — a heading stops being a headline somewhere, and the scale should say where.
39
39
 
40
- The ladder now spans three weights rather than two. 600 everywhere at the top
41
- meant a page title and the section heading inside it were the same voice at
42
- two sizes, so a screen had no clear first thing to read. 700 is the *display*
43
- tier only h1 and h2, page titles and stat numbers — and nothing in the UI
44
- chrome (nav, labels, buttons, table headers) goes above 600.
45
-
46
- This costs nothing on the wire: both faces are loaded as VARIABLE fonts
47
- (@fontsource-variable/inter, @fontsource-variable/instrument-sans), so the
48
- whole weight axis is already in the file that ships. The earlier "never above
49
- 600" rule was written when static weights meant every step was another
50
- download; that constraint no longer exists.
40
+ The ladder spans three weights 400/500/600 and 600 is the ceiling. No
41
+ tier goes to 700: the display end separates itself by SIZE and tracking, not
42
+ by weight, and a 30px 700 next to a 30px 500 elsewhere on the same product
43
+ reads as two different type systems rather than one ladder.
44
+
45
+ Both faces load as VARIABLE fonts (@fontsource-variable/inter,
46
+ @fontsource-variable/instrument-sans), so the whole axis ships either way
47
+ the 600 ceiling is a design decision, not a payload one.
51
48
 
52
49
  With a single face carrying both headings and body, weight and tracking are
53
50
  the only things separating a heading from the copy around it — so the tiers
54
51
  have to actually differ, rather than all sitting at 600. */
55
52
 
53
+ /* 500, not 700. This reverses the 2026-08 "700 for display" decision on
54
+ purpose: the marketing site and the panel were running different display
55
+ weights, which is the single most visible incoherence between them. */
56
56
  .typography-h1 {
57
- @apply text-4xl font-headers font-bold tracking-display;
57
+ @apply text-4xl font-headers font-medium tracking-display;
58
58
  }
59
59
 
60
60
  .typography-h2 {
61
- @apply text-3xl font-headers font-bold tracking-display;
61
+ @apply text-3xl font-headers font-medium tracking-display;
62
62
  }
63
63
 
64
64
  .typography-h3 {
@@ -144,10 +144,11 @@ html.dark {
144
144
  @apply font-mono tabular-nums;
145
145
  }
146
146
 
147
- /* The headline number on a stat tile. Display weight, display tracking, and
148
- tabular figures so a row of tiles shares a baseline grid. */
147
+ /* The headline number on a stat tile. Display tracking and tabular figures so a
148
+ row of tiles shares a baseline grid. Semibold, not bold: the number is
149
+ already the largest thing on the tile, and 600 is the system ceiling. */
149
150
  .typography-stat {
150
- @apply text-3xl font-headers font-bold tracking-display tabular-nums;
151
+ @apply text-3xl font-headers font-semibold tracking-display tabular-nums;
151
152
  }
152
153
 
153
154
  :focus-visible {
@@ -26,7 +26,7 @@
26
26
  console and the marketing site all spell the same intent the same way
27
27
  instead of each hardcoding its own em value. Pair display/title with
28
28
  font-semibold and heading with font-medium. */
29
- --tracking-display: -0.025em; /* >= 30px — the headline tier */
29
+ --tracking-display: -0.022em; /* >= 30px — the headline tier; matches the marketing site */
30
30
  --tracking-title: -0.018em; /* 20-24px — section titles */
31
31
  --tracking-heading: -0.01em; /* <= 18px — labels; still a heading, not a headline */
32
32
 
package/dist/theme.css CHANGED
@@ -26,7 +26,7 @@
26
26
  console and the marketing site all spell the same intent the same way
27
27
  instead of each hardcoding its own em value. Pair display/title with
28
28
  font-semibold and heading with font-medium. */
29
- --tracking-display: -0.025em; /* >= 30px — the headline tier */
29
+ --tracking-display: -0.022em; /* >= 30px — the headline tier; matches the marketing site */
30
30
  --tracking-title: -0.018em; /* 20-24px — section titles */
31
31
  --tracking-heading: -0.01em; /* <= 18px — labels; still a heading, not a headline */
32
32
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@rebasepro/ui",
3
3
  "type": "module",
4
- "version": "0.15.0",
4
+ "version": "0.16.0",
5
5
  "description": "Rebase design system — React components and design tokens built on Radix UI, Tailwind CSS and lucide-react",
6
6
  "funding": {
7
7
  "url": "https://github.com/sponsors/rebaseco"
@@ -304,7 +304,7 @@ export const SelectGroup = React.memo(function SelectGroup({
304
304
  return <>
305
305
  <SelectPrimitive.Group
306
306
  className={cls(
307
- "text-xs text-surface-accent-900 dark:text-white uppercase tracking-wider font-bold mt-6 first:mt-2",
307
+ "text-xs text-surface-accent-900 dark:text-white uppercase tracking-wider font-semibold mt-6 first:mt-2",
308
308
  "px-2 py-2",
309
309
  className
310
310
  )}>
@@ -99,8 +99,16 @@ export const Sheet: React.FC<SheetProps> = ({
99
99
  "outline-none",
100
100
  borderClass[side],
101
101
  defaultBorderMixin,
102
- "transform-gpu",
103
- "will-change-transform",
102
+ // No `will-change: transform` / `transform-gpu` here, however
103
+ // tempting the layer hint is on a panel this size. Either one
104
+ // makes this element a *containing block* for its
105
+ // `position: fixed` descendants, and everything portaled into
106
+ // the panel below — a Select dropdown, above all — is fixed and
107
+ // positioned in viewport coordinates. Inside a containing block
108
+ // those coordinates are resolved against the panel instead, so
109
+ // every popup was displaced by the panel's own offset and a
110
+ // right-hand Select opened its list off the edge of the screen:
111
+ // the dropdown was open, just nowhere anyone could see it.
104
112
  "text-surface-accent-900 dark:text-white",
105
113
  "fixed transform z-50 transition-[transform,opacity] ease-in-out",
106
114
  !displayed ? "duration-150" : "duration-100",
@@ -194,7 +194,7 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<Record<stri
194
194
  and nothing about which one decides. */}
195
195
  {sort && sortPosition !== undefined && (
196
196
  <span
197
- className="flex-shrink-0 -ml-0.5 mr-0.5 text-[10px] font-bold leading-none tabular-nums text-text-secondary dark:text-text-secondary-dark"
197
+ className="flex-shrink-0 -ml-0.5 mr-0.5 text-[10px] font-semibold leading-none tabular-nums text-text-secondary dark:text-text-secondary-dark"
198
198
  aria-hidden={true}
199
199
  >
200
200
  {sortPosition + 1}
package/src/index.css CHANGED
@@ -37,28 +37,28 @@ html.dark {
37
37
  and holding 600 all the way down to text-sm made every heading shout equally
38
38
  — a heading stops being a headline somewhere, and the scale should say where.
39
39
 
40
- The ladder now spans three weights rather than two. 600 everywhere at the top
41
- meant a page title and the section heading inside it were the same voice at
42
- two sizes, so a screen had no clear first thing to read. 700 is the *display*
43
- tier only h1 and h2, page titles and stat numbers — and nothing in the UI
44
- chrome (nav, labels, buttons, table headers) goes above 600.
45
-
46
- This costs nothing on the wire: both faces are loaded as VARIABLE fonts
47
- (@fontsource-variable/inter, @fontsource-variable/instrument-sans), so the
48
- whole weight axis is already in the file that ships. The earlier "never above
49
- 600" rule was written when static weights meant every step was another
50
- download; that constraint no longer exists.
40
+ The ladder spans three weights 400/500/600 and 600 is the ceiling. No
41
+ tier goes to 700: the display end separates itself by SIZE and tracking, not
42
+ by weight, and a 30px 700 next to a 30px 500 elsewhere on the same product
43
+ reads as two different type systems rather than one ladder.
44
+
45
+ Both faces load as VARIABLE fonts (@fontsource-variable/inter,
46
+ @fontsource-variable/instrument-sans), so the whole axis ships either way
47
+ the 600 ceiling is a design decision, not a payload one.
51
48
 
52
49
  With a single face carrying both headings and body, weight and tracking are
53
50
  the only things separating a heading from the copy around it — so the tiers
54
51
  have to actually differ, rather than all sitting at 600. */
55
52
 
53
+ /* 500, not 700. This reverses the 2026-08 "700 for display" decision on
54
+ purpose: the marketing site and the panel were running different display
55
+ weights, which is the single most visible incoherence between them. */
56
56
  .typography-h1 {
57
- @apply text-4xl font-headers font-bold tracking-display;
57
+ @apply text-4xl font-headers font-medium tracking-display;
58
58
  }
59
59
 
60
60
  .typography-h2 {
61
- @apply text-3xl font-headers font-bold tracking-display;
61
+ @apply text-3xl font-headers font-medium tracking-display;
62
62
  }
63
63
 
64
64
  .typography-h3 {
@@ -144,10 +144,11 @@ html.dark {
144
144
  @apply font-mono tabular-nums;
145
145
  }
146
146
 
147
- /* The headline number on a stat tile. Display weight, display tracking, and
148
- tabular figures so a row of tiles shares a baseline grid. */
147
+ /* The headline number on a stat tile. Display tracking and tabular figures so a
148
+ row of tiles shares a baseline grid. Semibold, not bold: the number is
149
+ already the largest thing on the tile, and 600 is the system ceiling. */
149
150
  .typography-stat {
150
- @apply text-3xl font-headers font-bold tracking-display tabular-nums;
151
+ @apply text-3xl font-headers font-semibold tracking-display tabular-nums;
151
152
  }
152
153
 
153
154
  :focus-visible {
package/src/theme.css CHANGED
@@ -26,7 +26,7 @@
26
26
  console and the marketing site all spell the same intent the same way
27
27
  instead of each hardcoding its own em value. Pair display/title with
28
28
  font-semibold and heading with font-medium. */
29
- --tracking-display: -0.025em; /* >= 30px — the headline tier */
29
+ --tracking-display: -0.022em; /* >= 30px — the headline tier; matches the marketing site */
30
30
  --tracking-title: -0.018em; /* 20-24px — section titles */
31
31
  --tracking-heading: -0.01em; /* <= 18px — labels; still a heading, not a headline */
32
32