@kolkrabbi/kol-shell 0.60.0 → 0.61.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-shell",
3
- "version": "0.60.0",
3
+ "version": "0.61.0",
4
4
  "private": false,
5
5
  "description": "The application shell",
6
6
  "license": "MIT",
@@ -14,16 +14,16 @@
14
14
  "peerDependencies": {
15
15
  "@kolkrabbi/kol-component": ">=0.229.0",
16
16
  "@kolkrabbi/kol-icons": ">=0.16.0",
17
- "@kolkrabbi/kol-theme": ">=0.156.0",
17
+ "@kolkrabbi/kol-theme": ">=0.165.0",
18
18
  "gsap": "^3.13.0",
19
19
  "react": "^18.3.0 || ^19.0.0",
20
20
  "react-dom": "^18.3.0 || ^19.0.0"
21
21
  },
22
22
  "devDependencies": {
23
- "@kolkrabbi/kol-component": "^0.237.0",
23
+ "@kolkrabbi/kol-component": "^0.239.0",
24
+ "@kolkrabbi/kol-framework": "^0.49.0",
24
25
  "@kolkrabbi/kol-icons": "^0.33.0",
25
- "@kolkrabbi/kol-framework": "^0.48.0",
26
- "@kolkrabbi/kol-theme": "^0.163.0"
26
+ "@kolkrabbi/kol-theme": "^0.165.0"
27
27
  },
28
28
  "files": [
29
29
  "src",
package/src/AppShell.jsx CHANGED
@@ -42,6 +42,7 @@ import { TABBAR_H, MastheadContext } from '@kolkrabbi/kol-component'
42
42
  * open/close is the consumer's `onNavigate` (kol-mirror's model: navigating to
43
43
  * `/settings` while already there returns to the last page), and the theme
44
44
  * toggle lives on the settings page, not in the rail (user, 2026-08-28).
45
+ * @param {boolean} [props.railFade=true] the rail's list fades out at its foot (`NavRail fade`); `false` opts out
45
46
  * @param {string} props.railToggleKey a key that toggles the rail (e.g. '\\') — ignored while typing in a field;
46
47
  * the rail comes back on every `currentPath` change (ShellHomeSystem, 2026-08-27)
47
48
  * @param {'shell'|'bare'|'overlay'|'drawer'|'bar'} props.touch the touch-primary policy (default 'shell' = the rail regardless):
@@ -130,6 +131,7 @@ export default function AppShell({
130
131
  onNavigate,
131
132
  iconComponent,
132
133
  railComponent: Rail = NavRail,
134
+ railFade = true,
133
135
  railToggleKey,
134
136
  touch = 'shell',
135
137
  appName,
@@ -370,6 +372,7 @@ export default function AppShell({
370
372
  onNavigate={navigate}
371
373
  iconComponent={iconComponent}
372
374
  drawer={drawer}
375
+ fade={railFade}
373
376
  />
374
377
  )}
375
378
  {/* THE BACK OF THE BACK — surface-primary, always, in every app; the
package/src/NavRail.jsx CHANGED
@@ -70,6 +70,10 @@ import Logomark from './Logomark.jsx'
70
70
  * @param {boolean} drawer off-canvas mode: no grab, no drag, no token writes, rows always
71
71
  * labelled, and the rail sizes itself from `--kol-shell-drawer-width` (default 240px).
72
72
  * AppShell sets this from `touch="drawer"` — see ShellRailNoDrawerOnMobile, 2026-08-31.
73
+ * @param {boolean} [fade=true] the list fades out at its foot — the workshop rail's fade
74
+ * (2026-10-01), here too on the user's word (2026-10-02). The rows sit in their own scroll
75
+ * region between the mark and the pinned bottom rows, so a list longer than the window scrolls
76
+ * and runs out under the fade instead of being cut by the edge. `false` draws the list plain.
73
77
  */
74
78
  const RAIL_W = '--kol-shell-rail-width'
75
79
  const CLOSED = 48
@@ -277,6 +281,7 @@ export default function NavRail({
277
281
  iconComponent,
278
282
  hidden = false,
279
283
  drawer = false,
284
+ fade = true,
280
285
  }) {
281
286
  const railRef = useRef(null)
282
287
  const grabRef = useRef(null)
@@ -340,9 +345,12 @@ export default function NavRail({
340
345
  </div>
341
346
  </Tooltip>
342
347
  )}
343
- {items.map(row)}
344
- {/* the spacer IS the layout */}
345
- <div className="flex-1" />
348
+ {/* THE LIST IS ITS OWN REGION (2026-10-02): it takes the room between the mark and the pinned
349
+ * bottom rows — what the bare spacer used to hold — scrolls when the rows outrun the window,
350
+ * and fades at its foot unless `fade={false}`. Same column, same gap, as the rail's own. */}
351
+ <div className={`kol-shell-rail-list flex min-h-0 w-full flex-1 flex-col items-start gap-2 overflow-y-auto overflow-x-hidden ${fade ? 'kol-shell-rail-list--fade' : ''}`.trim()}>
352
+ {items.map(row)}
353
+ </div>
346
354
  {/* the rule runs the full rail width, out past the px-2 */}
347
355
  {bottomItems.length > 0 && <div className="self-stretch -mx-2 border-t border-fg-08" />}
348
356
  {bottomItems.map(row)}