basalt-ui 1.38.0 → 1.38.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/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [1.38.1](https://github.com/jkrumm/basalt-ui/compare/v1.38.0...v1.38.1) (2026-10-04)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * take the page content inset one step down, 20/12 to 16/8 from sm up ([cf61c05](https://github.com/jkrumm/basalt-ui/commit/cf61c05410df114d5c6182ed4a8c5ed38b308a56))
7
+
1
8
  # [1.38.0](https://github.com/jkrumm/basalt-ui/compare/v1.37.1...v1.38.0) (2026-10-04)
2
9
 
3
10
 
package/MIGRATING.md CHANGED
@@ -66,18 +66,18 @@ There is one row per SURFACE, not per export, and a surface earns a row once any
66
66
  shipped lefthook preset both changed in 1.30.0 with no row that owned them — which is how a
67
67
  consumer read this index, found nothing, and diffed a KPI row that had silently gone 4-up → 2-up.
68
68
 
69
- | Surface | 1.27.0 | 1.28.0 | 1.29.0 | 1.30.0 | 1.30.1 | 1.30.2 | 1.31.0 | 1.32.0 | 1.32.1 | 1.33.0 | 1.34.0 | 1.34.1 | 1.35.0 | 1.36.0 | 1.36.1 | 1.37.0 | 1.37.1 | 1.38.0 | Unreleased |
70
- | ----------------------------- | ------------------------------------------------------------ | -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ---------------------------------- | ------ | ------ | -------------------------------------------------------------------------------------------- | ------ | ------ | ------ | ------ | ---------- |
71
- | **tokens** (`./tokens`) | — | `--vx-divider` → `rgba()` on both schemes (§ Shell) | `--vx-space-touch-target` added (§ Additions) | eight spacing numbers (§ Chrome) | — | — | `--vx-hit` replaces the touch vars; `SIZE_CLASSES` (§ 1.31.0) | — | `SIZE_CLASSES`/`CONTAINER_CLASSES` actually exported (§ Fixes) | `CONTAINER_GRID_BREAKPOINTS`; `raw-breakpoint` trusts it (§ 1.33.0) | `CONTAINER_KEYS` (§ 1.34.0) | — | — | — | — | — | — | — | — |
72
- | **charts** (`./charts`) | — | phone tier, `curve`, formatters, `state`, log axis (§ preamble) | `ChartState.empty: string`, `AxisBottomNumeric` (§ Additions) | responsive `height`, `legend.maxRows` (§ Charts) | `height` reaches the kinds; `maxRows` beats the `fill` fit (§ Charts) | — | container-class tier + `height` keys (§ 1.31.0) | — | `ResponsiveChartHeight` `sm` → key (§ Container recipes) | — | — | — | — | — | — | — | — | — | — |
73
- | **shell** (`.`) | — | scrollport, region seams, **the brand left the sidebar** (§§ scrollport, brand, Shell) | `PageTitle`, `BasaltDevDock`, `useBreakpoint` (§ Additions) | More popover, aside pill, the responsive gutter, `useBasaltSpacing` (§ Chrome) | — | — | `theme.breakpoints` derived, `useSizeClass`, `data-basalt-host`, `useBreakpoint` on notice (§ 1.31.0) | `useBreakpoint` removal → 1.33.0; `useSizeClass` is shell-only (§ 1.32.0) | shell-less `shell/` gutter, `AppShell` breakpoints, `useSizeClass` for overlays (§§ Shell-less, `useSizeClass`) | — | `useBreakpoint` removed (§ 1.34.0) | — | — | `useCoarsePointer()` (§ `useCoarsePointer()`) | — | — | — | — | — |
74
- | **controls** (`./controls`) | `NumberFilter`, `field.number` (§ Controls) | sheet renders panel rows; `PanelRow`, `SliderControl` (§ `basalt-ui/controls`) | — | — | — | — | — | — | — | `NumberFilter clearable`; `createSearchStore` `resets` (§ State and controls) | — | — | — | `FormSection`/`FormRow`/`FormGroup`/`FormActions` move here (§ The form layout moves) | — | — | — | — | — |
75
- | **forms** (`./forms`) | — | `field` → `inputProps`, **`inputProps` drops `key`**, the layout tier (§ `inputProps`) | `field` DELETED — and the `--fix` recipe no longer works (§ Consolidation) | — | — | — | — | — | `FormGroup` row no longer stretches (§ Fixes) | — | — | — | — | the layout + `useForm`/`schemaResolver` deprecated, removed 1.37.0 (§ The form layout moves) | — | — | — | — | — |
76
- | **data** (`./data/table`) | — | root is a `<div>`, row selection, `getItemKey` required (§ `basalt-ui/data`) | `./data` + `./query` + `./connectivity` dropped (§ Consolidation) | — | — | — | — | — | `renderCard` documented (§ `renderCard`) | — | — | — | — | — | — | — | — | — | — |
77
- | **dashboard** (`.`) | `StatCard`: `unit`, `breakdown`, delta format (§ `StatCard`) | `StatGroup`, `WidgetGrid`, query-aware `StatCard` — additive | — | **the column law keys on the CONTAINER; `cols={4}` is 2-up at `sm`** (§ Dashboard) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
78
- | **toolchain** (`./configs/*`) | — | — | the shipped lefthook preset's `check-theme` BROKE — the CLI resolver stopped ascending (§ CLI) | the preset's default bin, and the `root:` recipe (§ Toolchain) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
79
- | **CLI** (`basalt-ui`) | — | — | **resolver stops relocating; `doctor` loses 6 of 10 checks** (§ CLI) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
80
- | **guards** | five rules → `error` (§ Guards) | six new ids at `warn` (§ preamble) | `query-dual-import` retired in 1.29.1 (§ Guards) | four rules → `error` (§ Guards) | — | — | — | `raw-breakpoint`: the container-grid answer, `error` at 1.33.0 (§ 1.32.0) | `FormRow`/`FormGroup` homes in both lanes; `basalt-main` dropped (§ Fixes) | C1 + breakpoint pairs → `error`; `unknown-vx-token` `warn` (§ Guards) | — | — | — | `unknown-vx-token` → `error`; the token factories throw (§ Guards) | — | — | — | — | — |
69
+ | Surface | 1.27.0 | 1.28.0 | 1.29.0 | 1.30.0 | 1.30.1 | 1.30.2 | 1.31.0 | 1.32.0 | 1.32.1 | 1.33.0 | 1.34.0 | 1.34.1 | 1.35.0 | 1.36.0 | 1.36.1 | 1.37.0 | 1.37.1 | 1.38.0 | 1.38.1 | Unreleased |
70
+ | ----------------------------- | ------------------------------------------------------------ | -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ---------------------------------- | ------ | ------ | -------------------------------------------------------------------------------------------- | ------ | ------ | ------ | ------ | ------ | ----------------------------------------------- | --- |
71
+ | **tokens** (`./tokens`) | — | `--vx-divider` → `rgba()` on both schemes (§ Shell) | `--vx-space-touch-target` added (§ Additions) | eight spacing numbers (§ Chrome) | — | — | `--vx-hit` replaces the touch vars; `SIZE_CLASSES` (§ 1.31.0) | — | `SIZE_CLASSES`/`CONTAINER_CLASSES` actually exported (§ Fixes) | `CONTAINER_GRID_BREAKPOINTS`; `raw-breakpoint` trusts it (§ 1.33.0) | `CONTAINER_KEYS` (§ 1.34.0) | — | — | — | — | — | — | — | | `appShellInset` 20 → 16 (§ 1.38.1) | — |
72
+ | **charts** (`./charts`) | — | phone tier, `curve`, formatters, `state`, log axis (§ preamble) | `ChartState.empty: string`, `AxisBottomNumeric` (§ Additions) | responsive `height`, `legend.maxRows` (§ Charts) | `height` reaches the kinds; `maxRows` beats the `fill` fit (§ Charts) | — | container-class tier + `height` keys (§ 1.31.0) | — | `ResponsiveChartHeight` `sm` → key (§ Container recipes) | — | — | — | — | — | — | — | — | — | — | — |
73
+ | **shell** (`.`) | — | scrollport, region seams, **the brand left the sidebar** (§§ scrollport, brand, Shell) | `PageTitle`, `BasaltDevDock`, `useBreakpoint` (§ Additions) | More popover, aside pill, the responsive gutter, `useBasaltSpacing` (§ Chrome) | — | — | `theme.breakpoints` derived, `useSizeClass`, `data-basalt-host`, `useBreakpoint` on notice (§ 1.31.0) | `useBreakpoint` removal → 1.33.0; `useSizeClass` is shell-only (§ 1.32.0) | shell-less `shell/` gutter, `AppShell` breakpoints, `useSizeClass` for overlays (§§ Shell-less, `useSizeClass`) | — | `useBreakpoint` removed (§ 1.34.0) | — | — | `useCoarsePointer()` (§ `useCoarsePointer()`) | — | — | — | — | | content gutter 16, block 8 from `sm` (§ 1.38.1) | — |
74
+ | **controls** (`./controls`) | `NumberFilter`, `field.number` (§ Controls) | sheet renders panel rows; `PanelRow`, `SliderControl` (§ `basalt-ui/controls`) | — | — | — | — | — | — | — | `NumberFilter clearable`; `createSearchStore` `resets` (§ State and controls) | — | — | — | `FormSection`/`FormRow`/`FormGroup`/`FormActions` move here (§ The form layout moves) | — | — | — | — | — | — |
75
+ | **forms** (`./forms`) | — | `field` → `inputProps`, **`inputProps` drops `key`**, the layout tier (§ `inputProps`) | `field` DELETED — and the `--fix` recipe no longer works (§ Consolidation) | — | — | — | — | — | `FormGroup` row no longer stretches (§ Fixes) | — | — | — | — | the layout + `useForm`/`schemaResolver` deprecated, removed 1.37.0 (§ The form layout moves) | — | — | — | — | — | — |
76
+ | **data** (`./data/table`) | — | root is a `<div>`, row selection, `getItemKey` required (§ `basalt-ui/data`) | `./data` + `./query` + `./connectivity` dropped (§ Consolidation) | — | — | — | — | — | `renderCard` documented (§ `renderCard`) | — | — | — | — | — | — | — | — | — | — | — |
77
+ | **dashboard** (`.`) | `StatCard`: `unit`, `breakdown`, delta format (§ `StatCard`) | `StatGroup`, `WidgetGrid`, query-aware `StatCard` — additive | — | **the column law keys on the CONTAINER; `cols={4}` is 2-up at `sm`** (§ Dashboard) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
78
+ | **toolchain** (`./configs/*`) | — | — | the shipped lefthook preset's `check-theme` BROKE — the CLI resolver stopped ascending (§ CLI) | the preset's default bin, and the `root:` recipe (§ Toolchain) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
79
+ | **CLI** (`basalt-ui`) | — | — | **resolver stops relocating; `doctor` loses 6 of 10 checks** (§ CLI) | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
80
+ | **guards** | five rules → `error` (§ Guards) | six new ids at `warn` (§ preamble) | `query-dual-import` retired in 1.29.1 (§ Guards) | four rules → `error` (§ Guards) | — | — | — | `raw-breakpoint`: the container-grid answer, `error` at 1.33.0 (§ 1.32.0) | `FormRow`/`FormGroup` homes in both lanes; `basalt-main` dropped (§ Fixes) | C1 + breakpoint pairs → `error`; `unknown-vx-token` `warn` (§ Guards) | — | — | — | `unknown-vx-token` → `error`; the token factories throw (§ Guards) | — | — | — | — | — | — |
81
81
 
82
82
  ---
83
83
 
@@ -86,6 +86,23 @@ consumer read this index, found nothing, and diffed a KPI row that had silently
86
86
  _Nothing yet. Author the next section under this heading as `## Unreleased — <title>`; the
87
87
  release renames it and opens a new one here._
88
88
 
89
+ ## 1.38.1 — the content inset
90
+
91
+ No export changed. Two default numbers moved, both from `sm` up (the phone gutter is untouched):
92
+
93
+ | Measured, 1440px desktop | Before | After |
94
+ | --------------------------------------------------------- | -------- | -------- |
95
+ | Main's inner box, from the sidebar seam (`appShellInset`) | 20px | 16px |
96
+ | Main's inner box, under the header / page-bar band | 12px | 8px |
97
+ | Header breadcrumb x, expanded / rail | 269 / 61 | 272 / 64 |
98
+ | Brand mark x (the sidebar's nav-icon column) | 20px | 20px |
99
+
100
+ The block inset is `stack-sm` from `sm` up and stays `stack-md` (12) on a phone. The breadcrumb
101
+ now sits exactly on Main's content edge (it was 7px short of it); the brand mark no longer borrows
102
+ the page gutter for its x — it is the nav-icon column (`row-inset-x` twice) on its own, so it stays
103
+ at 20 while the gutter is 16. A consumer that wants the old numbers has no knob for them: the gutter
104
+ is a `SPACE_STEP` entry, so retune it through the density level or accept the new default.
105
+
89
106
  ## 1.38.0
90
107
 
91
108
  _Nothing to migrate in this release._
@@ -8,13 +8,15 @@
8
8
  *
9
9
  * The zone's WIDTH is `--app-shell-navbar-offset`, so it tracks the rail collapse with no React
10
10
  * state and lands its trailing edge exactly on the sidebar|main seam. The negative
11
- * `margin-inline-start` cancels `AppShell.Header`'s own `px` inset so the zone starts at the
12
- * viewport edge and re-applies that inset as padding — which is what puts the brand lead on the
13
- * same x as the sidebar's nav ICON column below it. The arithmetic, now that the page gutter is
14
- * `SPACE.appShellInset`: the zone re-applies `--app-shell-padding` = 20, and a nav icon sits at
15
- * 10px of `.root` frame inset plus 10px of NavLink inset (`rowInsetX`) = 20. One vertical line
16
- * across the seam — a claim this comment used to make while the gutter was 13, and that the
17
- * 13 -> 20 move made true.
11
+ * `margin-inline-start` cancels `AppShell.Header`'s own `px` inset (the page gutter,
12
+ * `--app-shell-padding`) so the zone starts at the viewport edge, and the zone's OWN inline padding
13
+ * is the sidebar's nav-icon column — 10px of `.root` frame inset plus 10px of NavLink inset, i.e.
14
+ * `row-inset-x` twice — which is what puts the brand lead on the same x as the nav ICON column below
15
+ * it. That padding used to BE the page gutter (`--app-shell-padding`, 20, the same number by
16
+ * coincidence); the gutter is 16 now, and the two are different claims, so each is stated on its
17
+ * own. The breadcrumb lands on Main's content edge: the zone's trailing margin is the gutter minus
18
+ * the header row's flex gap (`app-header.module.css`'s `--basalt-header-gap`), so zone end + margin
19
+ * + gap = seam + gutter.
18
20
  *
19
21
  * `--basalt-shell-lead-inset` (default 0px, set by the consumer on `:root`) is the opt-in native
20
22
  * title-bar contract: a macOS overlay title bar paints its traffic lights ON TOP of this zone, so a
@@ -30,6 +32,8 @@
30
32
  * `--ai-size-md` (1.75rem). Mantine defines that var on the ActionIcon, not on `:root`, so the
31
33
  * zone restates the same arithmetic; `app-brand.module.css.test.ts` pins the two together. */
32
34
  --basalt-shell-toggle-size: calc(1.75rem * var(--mantine-scale, 1));
35
+ /* The sidebar's nav-icon column: `.root` inset + NavLink inset, both `row-inset-x`. */
36
+ --basalt-nav-icon-x: calc(2 * var(--vx-space-row-inset-x));
33
37
  --basalt-shell-zone-width: max(
34
38
  var(--app-shell-navbar-offset, 0rem),
35
39
  calc(var(--basalt-shell-lead-inset, 0px) + var(--basalt-shell-toggle-size))
@@ -43,8 +47,9 @@
43
47
  * like, and the rail's centred toggle centres against the whole row. */
44
48
  align-self: stretch;
45
49
  margin-inline-start: calc(-1 * var(--app-shell-padding, 0px));
46
- padding-inline: var(--app-shell-padding, 0px);
47
- padding-inline-start: calc(var(--app-shell-padding, 0px) + var(--basalt-shell-lead-inset, 0px));
50
+ margin-inline-end: calc(var(--app-shell-padding, 0px) - var(--basalt-header-gap, 0px));
51
+ padding-inline: var(--basalt-nav-icon-x);
52
+ padding-inline-start: calc(var(--basalt-nav-icon-x) + var(--basalt-shell-lead-inset, 0px));
48
53
  overflow: hidden;
49
54
  /* Mantine's own AppShell timing, so the zone and the navbar under it move as one box. */
50
55
  transition-property: flex-basis, width;
@@ -17,9 +17,12 @@
17
17
  * `alt` — never a border in this module.
18
18
  */
19
19
  .bar {
20
+ /* Named so the leading zone (`app-brand.module.css`) can offset its trailing margin by exactly
21
+ * this gap and land the breadcrumb on Main's content edge. */
22
+ --basalt-header-gap: var(--mantine-spacing-sm);
20
23
  display: flex;
21
24
  align-items: center;
22
- gap: var(--mantine-spacing-sm);
25
+ gap: var(--basalt-header-gap);
23
26
  width: 100%;
24
27
  height: 100%;
25
28
  }
@@ -97,13 +97,13 @@
97
97
  * value rather than an offset, because Mantine owns the responsive switch (`shell/index.tsx`
98
98
  * hands `AppShell` the `appShellInset`/`appShellInsetMobile` pair) and the header, the band and
99
99
  * Main all have to land on the SAME number — re-deriving it here would fork it. It is an
100
- * ALIGNMENT constraint: 20 at `sm`+ puts the page's first column on the sidebar nav icon
101
- * column's x across the seam (`app-brand.module.css` states that arithmetic).
100
+ * ALIGNMENT constraint: the header's breadcrumb and globals land on the same edges as the
101
+ * content (`app-brand.module.css` states the arithmetic).
102
102
  *
103
- * Block is `stack-md` and is only breathing room under the band's single `--vx-divider` line —
104
- * nothing aligns to it, so it has no business tracking a gutter that grew for an alignment
105
- * reason. Holding it at 12 keeps the total chrome above the first card at ~97px (44 header + 40
106
- * band + 1 seam + 12) — DOWN from 100 — even though the inline gutter grew 13 -> 20.
103
+ * Block is breathing room under the band's single `--vx-divider` line — nothing aligns to it.
104
+ * `stack-md` (12) on a phone, one rung down (`stack-sm`, 8) from `sm` up where the inline gutter
105
+ * is 16: the page then sits 16 from the seam and 8 under the header, rather than the 20/12 it
106
+ * used to.
107
107
  */
108
108
  padding: var(--vx-space-stack-md) var(--app-shell-padding);
109
109
  /* Without this a wide flex/grid child (a bare table, a nowrap control row) sizes Main to ITSELF. */
@@ -122,11 +122,17 @@
122
122
  transition-property: margin;
123
123
  }
124
124
 
125
+ @media (min-width: 52.5em) {
126
+ .main {
127
+ padding-block: var(--vx-space-stack-sm);
128
+ }
129
+ }
130
+
125
131
  /* Installed PWA (C5 consolidation, seeded from argo's `styles/native.css`): clear the landscape
126
132
  * notch on the side Main touches. `max()` is a FLOOR over the INLINE value of `.main`'s `padding`
127
133
  * shorthand above — same mechanism as `app-sidebar.module.css`'s left counterpart, and it still
128
134
  * floors correctly now that the shorthand is two axes and the inline one is responsive: this rule
129
- * reads the same `--app-shell-padding`, so the floor is against whichever of 20/8 is live, and on
135
+ * reads the same `--app-shell-padding`, so the floor is against whichever of 16/8 is live, and on
130
136
  * the phone half (8) it is doing MORE work than before, not less. It overrides only
131
137
  * `padding-right`; the block padding keeps coming from the shorthand. The bottom inset already
132
138
  * rides `margin-bottom` above (`env(safe-area-inset-bottom)`); the PWA's top inset needs no rule here
@@ -541,13 +541,13 @@ declare const SPACE_STEP_BASE: {
541
541
  * `tokens/index.ts` for why), because it is the single most visible spacing number the framework
542
542
  * ships and a consumer retuning its identity has to be able to reach it.
543
543
  *
544
- * 20, up from the 13 (`SPACE_SCALE.sm`) the main column used to borrow. The sidebar's nav ICON
545
- * column already sits at x=20 — 10px of `.root` frame inset plus 10px of NavLink inset
546
- * (`rowInsetX`) — and the brand row claims to align with it while sitting at 13. 20 makes that
547
- * claim true across the seam: brand mark, nav icons and the page's first column all start on one
548
- * vertical line, and the content gets a seam-side gutter that reads deliberate instead of
549
- * incidental. */
550
- readonly appShellInset: 20;
544
+ * 16, down from 20 (and from the 13 `SPACE_SCALE.sm` the main column borrowed before that): at 20
545
+ * the content read as pushed away from the seam. 16 sits on the 4px grid. It is NOT the sidebar's
546
+ * nav-icon column any more (x=20: 10px of `.root` frame inset plus 10px of NavLink inset,
547
+ * `rowInsetX` twice) — the header's brand zone aligns to that column on its own
548
+ * (`shell/app-brand.module.css`), so the page gutter is free to be a gutter. The header's
549
+ * breadcrumb, the page-bar band and Main all land on this one number. */
550
+ readonly appShellInset: 16;
551
551
  /** The page gutter BELOW `sm` — the phone half of `appShellInset` above. A separate entry rather
552
552
  * than one responsive value for the same reason `appShellNavbarWidth` is one: there is no sidebar
553
553
  * seam to align to on a phone, so the number is answering a different question (how much of a
@@ -1 +1 @@
1
- {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/tokens/palette.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/tokens/palette.ts"],"names":[],"mappings":"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"}
@@ -453,13 +453,13 @@ const SPACE_STEP_BASE = {
453
453
  * `tokens/index.ts` for why), because it is the single most visible spacing number the framework
454
454
  * ships and a consumer retuning its identity has to be able to reach it.
455
455
  *
456
- * 20, up from the 13 (`SPACE_SCALE.sm`) the main column used to borrow. The sidebar's nav ICON
457
- * column already sits at x=20 — 10px of `.root` frame inset plus 10px of NavLink inset
458
- * (`rowInsetX`) — and the brand row claims to align with it while sitting at 13. 20 makes that
459
- * claim true across the seam: brand mark, nav icons and the page's first column all start on one
460
- * vertical line, and the content gets a seam-side gutter that reads deliberate instead of
461
- * incidental. */
462
- appShellInset: 20,
456
+ * 16, down from 20 (and from the 13 `SPACE_SCALE.sm` the main column borrowed before that): at 20
457
+ * the content read as pushed away from the seam. 16 sits on the 4px grid. It is NOT the sidebar's
458
+ * nav-icon column any more (x=20: 10px of `.root` frame inset plus 10px of NavLink inset,
459
+ * `rowInsetX` twice) — the header's brand zone aligns to that column on its own
460
+ * (`shell/app-brand.module.css`), so the page gutter is free to be a gutter. The header's
461
+ * breadcrumb, the page-bar band and Main all land on this one number. */
462
+ appShellInset: 16,
463
463
  /** The page gutter BELOW `sm` — the phone half of `appShellInset` above. A separate entry rather
464
464
  * than one responsive value for the same reason `appShellNavbarWidth` is one: there is no sidebar
465
465
  * seam to align to on a phone, so the number is answering a different question (how much of a
package/dist/tokens.css CHANGED
@@ -95,7 +95,7 @@
95
95
  --vx-space-sidebar-child-list-indent: 15px;
96
96
  --vx-space-sidebar-child-row-inset-y: 4px;
97
97
  --vx-space-sidebar-child-row-indent: 12px;
98
- --vx-space-app-shell-inset: 20px;
98
+ --vx-space-app-shell-inset: 16px;
99
99
  --vx-space-app-shell-inset-mobile: 8px;
100
100
  --vx-space-app-shell-header-lead-min: 96px;
101
101
  --vx-space-mobile-nav-tab-gap: 3px;
package/llms.txt CHANGED
@@ -1,4 +1,4 @@
1
- # basalt-ui v1.38.0
1
+ # basalt-ui v1.38.1
2
2
  # Opinionated framework for Mantine-based React apps — theme, app shell, visx charts, toolchain presets
3
3
  #
4
4
  # basalt-ui is an opinionated framework for Mantine-based React apps.
@@ -19,7 +19,7 @@
19
19
  # ./tokens.css subpath. Guide: docs/FRAMEWORK-FREE.md in the repo.
20
20
 
21
21
  Package: basalt-ui
22
- Version: 1.38.0
22
+ Version: 1.38.1
23
23
 
24
24
  ## basalt-ui
25
25
  Import: import { ... } from 'basalt-ui'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "basalt-ui",
3
- "version": "1.38.0",
3
+ "version": "1.38.1",
4
4
  "description": "Opinionated framework for Mantine-based React apps — theme, app shell, visx charts, toolchain presets",
5
5
  "keywords": [
6
6
  "charts",
@@ -8,13 +8,15 @@
8
8
  *
9
9
  * The zone's WIDTH is `--app-shell-navbar-offset`, so it tracks the rail collapse with no React
10
10
  * state and lands its trailing edge exactly on the sidebar|main seam. The negative
11
- * `margin-inline-start` cancels `AppShell.Header`'s own `px` inset so the zone starts at the
12
- * viewport edge and re-applies that inset as padding — which is what puts the brand lead on the
13
- * same x as the sidebar's nav ICON column below it. The arithmetic, now that the page gutter is
14
- * `SPACE.appShellInset`: the zone re-applies `--app-shell-padding` = 20, and a nav icon sits at
15
- * 10px of `.root` frame inset plus 10px of NavLink inset (`rowInsetX`) = 20. One vertical line
16
- * across the seam — a claim this comment used to make while the gutter was 13, and that the
17
- * 13 -> 20 move made true.
11
+ * `margin-inline-start` cancels `AppShell.Header`'s own `px` inset (the page gutter,
12
+ * `--app-shell-padding`) so the zone starts at the viewport edge, and the zone's OWN inline padding
13
+ * is the sidebar's nav-icon column — 10px of `.root` frame inset plus 10px of NavLink inset, i.e.
14
+ * `row-inset-x` twice — which is what puts the brand lead on the same x as the nav ICON column below
15
+ * it. That padding used to BE the page gutter (`--app-shell-padding`, 20, the same number by
16
+ * coincidence); the gutter is 16 now, and the two are different claims, so each is stated on its
17
+ * own. The breadcrumb lands on Main's content edge: the zone's trailing margin is the gutter minus
18
+ * the header row's flex gap (`app-header.module.css`'s `--basalt-header-gap`), so zone end + margin
19
+ * + gap = seam + gutter.
18
20
  *
19
21
  * `--basalt-shell-lead-inset` (default 0px, set by the consumer on `:root`) is the opt-in native
20
22
  * title-bar contract: a macOS overlay title bar paints its traffic lights ON TOP of this zone, so a
@@ -30,6 +32,8 @@
30
32
  * `--ai-size-md` (1.75rem). Mantine defines that var on the ActionIcon, not on `:root`, so the
31
33
  * zone restates the same arithmetic; `app-brand.module.css.test.ts` pins the two together. */
32
34
  --basalt-shell-toggle-size: calc(1.75rem * var(--mantine-scale, 1));
35
+ /* The sidebar's nav-icon column: `.root` inset + NavLink inset, both `row-inset-x`. */
36
+ --basalt-nav-icon-x: calc(2 * var(--vx-space-row-inset-x));
33
37
  --basalt-shell-zone-width: max(
34
38
  var(--app-shell-navbar-offset, 0rem),
35
39
  calc(var(--basalt-shell-lead-inset, 0px) + var(--basalt-shell-toggle-size))
@@ -43,8 +47,9 @@
43
47
  * like, and the rail's centred toggle centres against the whole row. */
44
48
  align-self: stretch;
45
49
  margin-inline-start: calc(-1 * var(--app-shell-padding, 0px));
46
- padding-inline: var(--app-shell-padding, 0px);
47
- padding-inline-start: calc(var(--app-shell-padding, 0px) + var(--basalt-shell-lead-inset, 0px));
50
+ margin-inline-end: calc(var(--app-shell-padding, 0px) - var(--basalt-header-gap, 0px));
51
+ padding-inline: var(--basalt-nav-icon-x);
52
+ padding-inline-start: calc(var(--basalt-nav-icon-x) + var(--basalt-shell-lead-inset, 0px));
48
53
  overflow: hidden;
49
54
  /* Mantine's own AppShell timing, so the zone and the navbar under it move as one box. */
50
55
  transition-property: flex-basis, width;
@@ -17,9 +17,12 @@
17
17
  * `alt` — never a border in this module.
18
18
  */
19
19
  .bar {
20
+ /* Named so the leading zone (`app-brand.module.css`) can offset its trailing margin by exactly
21
+ * this gap and land the breadcrumb on Main's content edge. */
22
+ --basalt-header-gap: var(--mantine-spacing-sm);
20
23
  display: flex;
21
24
  align-items: center;
22
- gap: var(--mantine-spacing-sm);
25
+ gap: var(--basalt-header-gap);
23
26
  width: 100%;
24
27
  height: 100%;
25
28
  }
@@ -97,13 +97,13 @@
97
97
  * value rather than an offset, because Mantine owns the responsive switch (`shell/index.tsx`
98
98
  * hands `AppShell` the `appShellInset`/`appShellInsetMobile` pair) and the header, the band and
99
99
  * Main all have to land on the SAME number — re-deriving it here would fork it. It is an
100
- * ALIGNMENT constraint: 20 at `sm`+ puts the page's first column on the sidebar nav icon
101
- * column's x across the seam (`app-brand.module.css` states that arithmetic).
100
+ * ALIGNMENT constraint: the header's breadcrumb and globals land on the same edges as the
101
+ * content (`app-brand.module.css` states the arithmetic).
102
102
  *
103
- * Block is `stack-md` and is only breathing room under the band's single `--vx-divider` line —
104
- * nothing aligns to it, so it has no business tracking a gutter that grew for an alignment
105
- * reason. Holding it at 12 keeps the total chrome above the first card at ~97px (44 header + 40
106
- * band + 1 seam + 12) — DOWN from 100 — even though the inline gutter grew 13 -> 20.
103
+ * Block is breathing room under the band's single `--vx-divider` line — nothing aligns to it.
104
+ * `stack-md` (12) on a phone, one rung down (`stack-sm`, 8) from `sm` up where the inline gutter
105
+ * is 16: the page then sits 16 from the seam and 8 under the header, rather than the 20/12 it
106
+ * used to.
107
107
  */
108
108
  padding: var(--vx-space-stack-md) var(--app-shell-padding);
109
109
  /* Without this a wide flex/grid child (a bare table, a nowrap control row) sizes Main to ITSELF. */
@@ -122,11 +122,17 @@
122
122
  transition-property: margin;
123
123
  }
124
124
 
125
+ @media (min-width: 52.5em) {
126
+ .main {
127
+ padding-block: var(--vx-space-stack-sm);
128
+ }
129
+ }
130
+
125
131
  /* Installed PWA (C5 consolidation, seeded from argo's `styles/native.css`): clear the landscape
126
132
  * notch on the side Main touches. `max()` is a FLOOR over the INLINE value of `.main`'s `padding`
127
133
  * shorthand above — same mechanism as `app-sidebar.module.css`'s left counterpart, and it still
128
134
  * floors correctly now that the shorthand is two axes and the inline one is responsive: this rule
129
- * reads the same `--app-shell-padding`, so the floor is against whichever of 20/8 is live, and on
135
+ * reads the same `--app-shell-padding`, so the floor is against whichever of 16/8 is live, and on
130
136
  * the phone half (8) it is doing MORE work than before, not less. It overrides only
131
137
  * `padding-right`; the block padding keeps coming from the shorthand. The bottom inset already
132
138
  * rides `margin-bottom` above (`env(safe-area-inset-bottom)`); the PWA's top inset needs no rule here
@@ -650,13 +650,13 @@ const SPACE_STEP_BASE = {
650
650
  * `tokens/index.ts` for why), because it is the single most visible spacing number the framework
651
651
  * ships and a consumer retuning its identity has to be able to reach it.
652
652
  *
653
- * 20, up from the 13 (`SPACE_SCALE.sm`) the main column used to borrow. The sidebar's nav ICON
654
- * column already sits at x=20 — 10px of `.root` frame inset plus 10px of NavLink inset
655
- * (`rowInsetX`) — and the brand row claims to align with it while sitting at 13. 20 makes that
656
- * claim true across the seam: brand mark, nav icons and the page's first column all start on one
657
- * vertical line, and the content gets a seam-side gutter that reads deliberate instead of
658
- * incidental. */
659
- appShellInset: 20,
653
+ * 16, down from 20 (and from the 13 `SPACE_SCALE.sm` the main column borrowed before that): at 20
654
+ * the content read as pushed away from the seam. 16 sits on the 4px grid. It is NOT the sidebar's
655
+ * nav-icon column any more (x=20: 10px of `.root` frame inset plus 10px of NavLink inset,
656
+ * `rowInsetX` twice) — the header's brand zone aligns to that column on its own
657
+ * (`shell/app-brand.module.css`), so the page gutter is free to be a gutter. The header's
658
+ * breadcrumb, the page-bar band and Main all land on this one number. */
659
+ appShellInset: 16,
660
660
  /** The page gutter BELOW `sm` — the phone half of `appShellInset` above. A separate entry rather
661
661
  * than one responsive value for the same reason `appShellNavbarWidth` is one: there is no sidebar
662
662
  * seam to align to on a phone, so the number is answering a different question (how much of a