@kolkrabbi/kol-shell 0.39.0 → 0.40.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 +3 -3
- package/src/AppShell.jsx +13 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolkrabbi/kol-shell",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.40.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "KOL application shell — fixed 48px NavRail + AppShell layout root, PageShell/PageHeader scaffolds, ContentFilters catalog organism, GridCard, SettingsScaffold, WalkthroughPanel, ShortcutsOverlay. App chrome (kol-framework owns site chrome). Nav items, content, shortcuts and settings are consumer-injected. Sits above @kolkrabbi/kol-{theme,component,framework}.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"react-dom": "^18.3.0 || ^19.0.0"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@kolkrabbi/kol-component": "^0.
|
|
24
|
-
"@kolkrabbi/kol-framework": "^0.36.0",
|
|
23
|
+
"@kolkrabbi/kol-component": "^0.162.0",
|
|
25
24
|
"@kolkrabbi/kol-icons": "^0.25.0",
|
|
25
|
+
"@kolkrabbi/kol-framework": "^0.36.0",
|
|
26
26
|
"@kolkrabbi/kol-theme": "^0.128.0"
|
|
27
27
|
},
|
|
28
28
|
"files": [
|
package/src/AppShell.jsx
CHANGED
|
@@ -194,13 +194,23 @@ export default function AppShell({
|
|
|
194
194
|
return () => window.removeEventListener('keydown', onKey)
|
|
195
195
|
}, [settingsKey, settingsPath, toggleSettings])
|
|
196
196
|
|
|
197
|
-
/* the
|
|
197
|
+
/* the drawer's rule for a path — matched like the rail's active row */
|
|
198
|
+
const opensOn = (p) => drawerOpenOn.some((x) => (x === '/' ? p === '/' : p.startsWith(x)))
|
|
199
|
+
|
|
200
|
+
/* the rail row for that path toggles too — one gesture, two ways to reach it.
|
|
201
|
+
* THE TAP DECIDES THE DRAWER, not only the route change
|
|
202
|
+
* (ShellDrawerCloseOnSamePath, kol-monitor 2026-09-02): a rung whose path is
|
|
203
|
+
* the one already shown — Create tapped on /create, "new case" — changes no
|
|
204
|
+
* pathname, so the route effect below never fires and the drawer stayed open
|
|
205
|
+
* over the page. The tap itself now sets the drawer to that path's rule;
|
|
206
|
+
* `drawerOpenOn` rungs stay open, every other rung closes it, same path or not. */
|
|
198
207
|
const navigate = useCallback(
|
|
199
208
|
(path, ...rest) => {
|
|
209
|
+
if (drawer) setDrawerOpen(opensOn(path))
|
|
200
210
|
if (settingsPath && path === settingsPath) return toggleSettings()
|
|
201
211
|
return onNavigate?.(path, ...rest)
|
|
202
212
|
},
|
|
203
|
-
[settingsPath, toggleSettings, onNavigate],
|
|
213
|
+
[settingsPath, toggleSettings, onNavigate, drawer, drawerOpenOn], // eslint-disable-line react-hooks/exhaustive-deps
|
|
204
214
|
)
|
|
205
215
|
|
|
206
216
|
/* THE ROUTE CHANGE MEANS THE OPPOSITE IN EACH MODE. For `railToggleKey` the
|
|
@@ -215,7 +225,7 @@ export default function AppShell({
|
|
|
215
225
|
/* Keyed on the BOOLEAN, not the array: a consumer's inline `['/']` is a new
|
|
216
226
|
* identity every render too (the showcase set passes one), and the effect
|
|
217
227
|
* must fire on route entry only — never on a re-render, or it undoes the tap. */
|
|
218
|
-
const opensHere =
|
|
228
|
+
const opensHere = opensOn(currentPath)
|
|
219
229
|
useEffect(() => {
|
|
220
230
|
if (drawer) setDrawerOpen(opensHere)
|
|
221
231
|
else setNavHidden(false)
|