@budarin/use-route 1.3.3 → 1.3.5

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
@@ -5,6 +5,18 @@
5
5
  Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.1.0/),
6
6
  версионирование — [Semantic Versioning](https://semver.org/lang/ru/).
7
7
 
8
+ ## [1.3.4] - 2025-02-01
9
+
10
+ ### Изменено
11
+
12
+ - **Оптимизация производительности:** все методы навигации (`navigate`, `back`, `forward`, `go`, `replace`, `updateState`, `canGoBack`, `canGoForward`) теперь создаются **один раз глобально** вместо создания в каждом компоненте. При 50 компонентах с `useRoute()` экономия ~400 `useCallback` вызовов. Методы кэшируются по `effectiveBase` и переиспользуются между компонентами.
13
+ - **Глобальное хранилище состояния:** `sharedSnapshot` теперь всегда валиден и не очищается при отписке последнего подписчика. Методы читают актуальный snapshot без дополнительных вычислений (O(1)).
14
+ - **Упрощение кода:** удалён fallback на старое API (`window.location`, `window.history.pushState/replaceState`) для браузеров без Navigation API. Хук строго требует Navigation API в браузере; без него возвращает дефолтное состояние и методы работают в режиме no-op. SSR поддержка через `initialLocation` сохранена.
15
+
16
+ ### Удалено
17
+
18
+ - **Fallback на window.location/history:** в браузере без Navigation API хук больше не использует `window.location.href` для получения pathname и `window.history` для навигации. Вместо этого возвращается `DEFAULT_SNAPSHOT` (pathname: '/', searchParams: empty), методы навигации — no-op.
19
+
8
20
  ## [1.3.3] - 2025-02-01
9
21
 
10
22
  ### Изменено
@@ -3,7 +3,7 @@ import {
3
3
  require_react
4
4
  } from "./chunk-3SNVYWQ3.js";
5
5
 
6
- // ../node_modules/.pnpm/@budarin+use-route@1.3.2/node_modules/@budarin/use-route/dist/types.js
6
+ // ../node_modules/.pnpm/@budarin+use-route@1.3.4/node_modules/@budarin/use-route/dist/types.js
7
7
  var routerConfig = {
8
8
  urlCacheLimit: 50
9
9
  };
@@ -17,7 +17,7 @@ function getLogger() {
17
17
  return routerConfig.logger ?? console;
18
18
  }
19
19
 
20
- // ../node_modules/.pnpm/@budarin+use-route@1.3.2/node_modules/@budarin/use-route/dist/index.js
20
+ // ../node_modules/.pnpm/@budarin+use-route@1.3.4/node_modules/@budarin/use-route/dist/index.js
21
21
  var import_react = __toESM(require_react());
22
22
  var isBrowser = typeof window !== "undefined";
23
23
  function isValidUrl(url) {
@@ -95,8 +95,19 @@ function getNavigation() {
95
95
  return typeof window !== "undefined" && "navigation" in window ? window.navigation : void 0;
96
96
  }
97
97
  function computeNavigationSnapshot(nav) {
98
- if (!nav)
98
+ if (!nav) {
99
+ if (!isBrowser) {
100
+ const urlStr2 = getRouterConfig().initialLocation ?? "/";
101
+ const parsed2 = getCachedParsedUrl(urlStr2);
102
+ return {
103
+ ...DEFAULT_SNAPSHOT,
104
+ urlStr: urlStr2,
105
+ pathname: parsed2.pathname,
106
+ searchParams: parsed2.searchParams
107
+ };
108
+ }
99
109
  return DEFAULT_SNAPSHOT;
110
+ }
100
111
  const entry = nav.currentEntry;
101
112
  const urlStr = entry?.url ?? (isBrowser ? window.location.href : "/");
102
113
  const parsed = getCachedParsedUrl(urlStr);
@@ -112,7 +123,7 @@ function computeNavigationSnapshot(nav) {
112
123
  state
113
124
  };
114
125
  }
115
- var sharedSnapshot = null;
126
+ var sharedSnapshot = computeNavigationSnapshot(getNavigation());
116
127
  var storeCallbacks = /* @__PURE__ */ new Set();
117
128
  var unsubscribeNavigation = null;
118
129
  function subscribeToNavigation(callback) {
@@ -120,6 +131,7 @@ function subscribeToNavigation(callback) {
120
131
  if (storeCallbacks.size === 1) {
121
132
  const nav = getNavigation();
122
133
  if (nav) {
134
+ sharedSnapshot = computeNavigationSnapshot(nav);
123
135
  const interceptListener = (event) => {
124
136
  const navEvent = event;
125
137
  if (!navEvent.canIntercept || !isBrowser)
@@ -154,35 +166,18 @@ function subscribeToNavigation(callback) {
154
166
  unsubscribeNavigation();
155
167
  unsubscribeNavigation = null;
156
168
  }
157
- sharedSnapshot = null;
158
- noNavSnapshot = null;
159
- noNavSnapshotUrl = null;
160
169
  }
161
170
  };
162
171
  }
163
- var noNavSnapshot = null;
164
- var noNavSnapshotUrl = null;
165
172
  function getNavigationSnapshot() {
166
- if (sharedSnapshot !== null)
167
- return sharedSnapshot;
168
173
  const nav = getNavigation();
169
- if (nav) {
170
- sharedSnapshot = computeNavigationSnapshot(nav);
171
- return sharedSnapshot;
174
+ if (storeCallbacks.size === 0 && nav) {
175
+ const currentUrl = nav.currentEntry?.url ?? (isBrowser ? window.location.href : "/");
176
+ if (currentUrl !== sharedSnapshot.urlStr) {
177
+ sharedSnapshot = computeNavigationSnapshot(nav);
178
+ }
172
179
  }
173
- const urlStr = isBrowser ? window.location.href : getRouterConfig().initialLocation ?? "/";
174
- if (noNavSnapshot !== null && noNavSnapshotUrl === urlStr)
175
- return noNavSnapshot;
176
- const parsed = getCachedParsedUrl(urlStr);
177
- noNavSnapshotUrl = urlStr;
178
- noNavSnapshot = {
179
- ...DEFAULT_SNAPSHOT,
180
- urlStr,
181
- pathname: parsed.pathname,
182
- searchParams: parsed.searchParams,
183
- state: isBrowser ? window.history.state : void 0
184
- };
185
- return noNavSnapshot;
180
+ return sharedSnapshot;
186
181
  }
187
182
  var lastEntriesKeysRef = null;
188
183
  var lastKeyToIndexMap = null;
@@ -215,8 +210,159 @@ function clearRouterCaches() {
215
210
  URL_CACHE.clear();
216
211
  lastEntriesKeysRef = null;
217
212
  lastKeyToIndexMap = null;
218
- noNavSnapshot = null;
219
- noNavSnapshotUrl = null;
213
+ sharedSnapshot = computeNavigationSnapshot(getNavigation());
214
+ }
215
+ function globalBack() {
216
+ try {
217
+ const nav = getNavigation();
218
+ if (nav)
219
+ nav.back();
220
+ } catch (error) {
221
+ getLogger().error("[useRoute] Back navigation error:", error);
222
+ }
223
+ }
224
+ function globalForward() {
225
+ try {
226
+ const nav = getNavigation();
227
+ if (nav)
228
+ nav.forward();
229
+ } catch (error) {
230
+ getLogger().error("[useRoute] Forward navigation error:", error);
231
+ }
232
+ }
233
+ function globalUpdateState(state) {
234
+ try {
235
+ const nav = getNavigation();
236
+ if (nav) {
237
+ nav.updateCurrentEntry({ state });
238
+ sharedSnapshot = computeNavigationSnapshot(nav);
239
+ storeCallbacks.forEach((cb) => cb());
240
+ } else {
241
+ getLogger().warn("[useRoute] updateState requires Navigation API");
242
+ }
243
+ } catch (error) {
244
+ getLogger().error("[useRoute] updateState error:", error);
245
+ }
246
+ }
247
+ var navigateCache = /* @__PURE__ */ new Map();
248
+ function getNavigateForBase(effectiveBase) {
249
+ const cacheKey = effectiveBase ?? "__root__";
250
+ let cachedNavigate = navigateCache.get(cacheKey);
251
+ if (!cachedNavigate) {
252
+ cachedNavigate = async (to, navOptions = {}) => {
253
+ let targetUrl = typeof to === "string" ? to : to.toString();
254
+ let baseForCall;
255
+ if (navOptions.base !== void 0) {
256
+ baseForCall = navOptions.base === "" || navOptions.base === "/" ? void 0 : navOptions.base;
257
+ } else if (navOptions.section !== void 0) {
258
+ baseForCall = combineBases(getRouterConfig().base, navOptions.section);
259
+ } else {
260
+ baseForCall = effectiveBase;
261
+ }
262
+ if (baseForCall && baseForCall !== "/" && typeof to === "string" && to.startsWith("/") && !to.startsWith("//") && !to.includes(":")) {
263
+ targetUrl = baseForCall + (to === "/" ? "" : to);
264
+ }
265
+ if (!isValidUrl(targetUrl)) {
266
+ getLogger().warn("[useRoute] Invalid URL rejected:", targetUrl);
267
+ return;
268
+ }
269
+ const nav = getNavigation();
270
+ if (!nav) {
271
+ return;
272
+ }
273
+ const defaultHistory = getRouterConfig().defaultHistory ?? "auto";
274
+ const navigationOpts = {
275
+ state: navOptions.state,
276
+ history: navOptions.history ?? defaultHistory
277
+ };
278
+ try {
279
+ await nav.navigate(targetUrl, navigationOpts);
280
+ } catch (error) {
281
+ getLogger().error("[useRoute] Navigation error:", error);
282
+ }
283
+ };
284
+ navigateCache.set(cacheKey, cachedNavigate);
285
+ }
286
+ return cachedNavigate;
287
+ }
288
+ var replaceCache = /* @__PURE__ */ new Map();
289
+ function getReplaceForBase(effectiveBase) {
290
+ const cacheKey = effectiveBase ?? "__root__";
291
+ let cachedReplace = replaceCache.get(cacheKey);
292
+ if (!cachedReplace) {
293
+ const navigateFn = getNavigateForBase(effectiveBase);
294
+ cachedReplace = (to, options) => navigateFn(to, { ...options, history: "replace" });
295
+ replaceCache.set(cacheKey, cachedReplace);
296
+ }
297
+ return cachedReplace;
298
+ }
299
+ function globalGo(delta) {
300
+ if (delta === Infinity || delta === -Infinity) {
301
+ getLogger().warn("[useRoute] Delta value too large:", delta);
302
+ return;
303
+ }
304
+ if (!Number.isFinite(delta) || delta === 0)
305
+ return;
306
+ if (delta > Number.MAX_SAFE_INTEGER || delta < -Number.MAX_SAFE_INTEGER) {
307
+ getLogger().warn("[useRoute] Delta value too large:", delta);
308
+ return;
309
+ }
310
+ const nav = getNavigation();
311
+ if (!nav)
312
+ return;
313
+ try {
314
+ const snapshot = getNavigationSnapshot();
315
+ if (snapshot.entriesKeys.length === 0)
316
+ return;
317
+ const keyToIndexMap = getKeyToIndexMap(snapshot.entriesKeys);
318
+ const idx = keyToIndexMap.get(snapshot.currentKey) ?? -1;
319
+ if (idx === -1)
320
+ return;
321
+ const targetIdx = idx + delta;
322
+ if (targetIdx < 0 || targetIdx >= snapshot.entriesKeys.length) {
323
+ return;
324
+ }
325
+ const targetKey = snapshot.entriesKeys[targetIdx];
326
+ if (targetKey === void 0)
327
+ return;
328
+ nav.traverseTo(targetKey);
329
+ } catch (error) {
330
+ getLogger().error("[useRoute] Go navigation error:", error);
331
+ }
332
+ }
333
+ function globalCanGoBack(steps = 1) {
334
+ if (!Number.isFinite(steps) || steps < 0 || steps > Number.MAX_SAFE_INTEGER) {
335
+ return false;
336
+ }
337
+ const nav = getNavigation();
338
+ if (!nav)
339
+ return false;
340
+ const snapshot = getNavigationSnapshot();
341
+ if (snapshot.entriesKeys.length === 0) {
342
+ return false;
343
+ }
344
+ const keyToIndexMap = getKeyToIndexMap(snapshot.entriesKeys);
345
+ const idx = keyToIndexMap.get(snapshot.currentKey) ?? -1;
346
+ if (idx === -1)
347
+ return false;
348
+ return idx - steps >= 0;
349
+ }
350
+ function globalCanGoForward(steps = 1) {
351
+ if (!Number.isFinite(steps) || steps < 0 || steps > Number.MAX_SAFE_INTEGER) {
352
+ return false;
353
+ }
354
+ const nav = getNavigation();
355
+ if (!nav)
356
+ return false;
357
+ const snapshot = getNavigationSnapshot();
358
+ if (snapshot.entriesKeys.length === 0) {
359
+ return false;
360
+ }
361
+ const keyToIndexMap = getKeyToIndexMap(snapshot.entriesKeys);
362
+ const idx = keyToIndexMap.get(snapshot.currentKey) ?? -1;
363
+ if (idx === -1)
364
+ return false;
365
+ return idx + steps < snapshot.entriesKeys.length;
220
366
  }
221
367
  function useRoute(patternOrOptions, optionsParam) {
222
368
  let pattern;
@@ -228,7 +374,6 @@ function useRoute(patternOrOptions, optionsParam) {
228
374
  pattern = patternOrOptions;
229
375
  options = optionsParam;
230
376
  }
231
- const navigation = getNavigation();
232
377
  const rawState = (0, import_react.useSyncExternalStore)(subscribeToNavigation, getNavigationSnapshot, () => DEFAULT_SNAPSHOT);
233
378
  const keyToIndexMap = getKeyToIndexMap(rawState.entriesKeys);
234
379
  const effectiveBase = combineBases(getRouterConfig().base, options?.section);
@@ -257,8 +402,7 @@ function useRoute(patternOrOptions, optionsParam) {
257
402
  params,
258
403
  historyIndex,
259
404
  state: rawState.state,
260
- matched,
261
- _entriesKeys: rawState.entriesKeys
405
+ matched
262
406
  };
263
407
  }, [
264
408
  rawState.currentKey,
@@ -270,125 +414,15 @@ function useRoute(patternOrOptions, optionsParam) {
270
414
  pattern,
271
415
  effectiveBase
272
416
  ]);
273
- const navigate = (0, import_react.useCallback)(async (to, navOptions = {}) => {
274
- let targetUrl = typeof to === "string" ? to : to.toString();
275
- let baseForCall;
276
- if (navOptions.base !== void 0) {
277
- baseForCall = navOptions.base === "" || navOptions.base === "/" ? void 0 : navOptions.base;
278
- } else if (navOptions.section !== void 0) {
279
- baseForCall = combineBases(getRouterConfig().base, navOptions.section);
280
- } else {
281
- baseForCall = effectiveBase;
282
- }
283
- if (baseForCall && baseForCall !== "/" && typeof to === "string" && to.startsWith("/") && !to.startsWith("//") && !to.includes(":")) {
284
- targetUrl = baseForCall + (to === "/" ? "" : to);
285
- }
286
- if (!isValidUrl(targetUrl)) {
287
- getLogger().warn("[useRoute] Invalid URL rejected:", targetUrl);
288
- return;
289
- }
290
- if (!navigation) {
291
- return;
292
- }
293
- const defaultHistory = getRouterConfig().defaultHistory ?? "auto";
294
- const navigationOpts = {
295
- state: navOptions.state,
296
- history: navOptions.history ?? defaultHistory
297
- };
298
- try {
299
- await navigation.navigate(targetUrl, navigationOpts);
300
- } catch (error) {
301
- getLogger().error("[useRoute] Navigation error:", error);
302
- }
303
- }, [navigation, effectiveBase]);
304
- const back = (0, import_react.useCallback)(() => {
305
- try {
306
- if (navigation)
307
- navigation.back();
308
- } catch (error) {
309
- getLogger().error("[useRoute] Back navigation error:", error);
310
- }
311
- }, [navigation]);
312
- const forward = (0, import_react.useCallback)(() => {
313
- try {
314
- if (navigation)
315
- navigation.forward();
316
- } catch (error) {
317
- getLogger().error("[useRoute] Forward navigation error:", error);
318
- }
319
- }, [navigation]);
320
- const canGoBack = (0, import_react.useCallback)((steps = 1) => {
321
- if (!Number.isFinite(steps) || steps < 0 || steps > Number.MAX_SAFE_INTEGER) {
322
- return false;
323
- }
324
- if (!navigation || routerState._entriesKeys.length === 0) {
325
- return false;
326
- }
327
- const idx = routerState.historyIndex;
328
- if (idx === -1)
329
- return false;
330
- return idx - steps >= 0;
331
- }, [navigation, routerState._entriesKeys.length, routerState.historyIndex]);
332
- const canGoForward = (0, import_react.useCallback)((steps = 1) => {
333
- if (!Number.isFinite(steps) || steps < 0 || steps > Number.MAX_SAFE_INTEGER) {
334
- return false;
335
- }
336
- if (!navigation || routerState._entriesKeys.length === 0) {
337
- return false;
338
- }
339
- const idx = routerState.historyIndex;
340
- if (idx === -1)
341
- return false;
342
- return idx + steps < routerState._entriesKeys.length;
343
- }, [navigation, routerState._entriesKeys.length, routerState.historyIndex]);
344
- const go = (0, import_react.useCallback)((delta) => {
345
- if (delta === Infinity || delta === -Infinity) {
346
- getLogger().warn("[useRoute] Delta value too large:", delta);
347
- return;
348
- }
349
- if (!Number.isFinite(delta) || delta === 0)
350
- return;
351
- if (delta > Number.MAX_SAFE_INTEGER || delta < -Number.MAX_SAFE_INTEGER) {
352
- getLogger().warn("[useRoute] Delta value too large:", delta);
353
- return;
354
- }
355
- try {
356
- if (navigation && routerState._entriesKeys.length > 0) {
357
- const idx = routerState.historyIndex;
358
- if (idx === -1)
359
- return;
360
- const targetIdx = idx + delta;
361
- if (targetIdx < 0 || targetIdx >= routerState._entriesKeys.length) {
362
- return;
363
- }
364
- const targetKey = routerState._entriesKeys[targetIdx];
365
- if (targetKey === void 0)
366
- return;
367
- navigation.traverseTo(targetKey);
368
- }
369
- } catch (error) {
370
- getLogger().error("[useRoute] Go navigation error:", error);
371
- }
372
- }, [navigation, routerState._entriesKeys, routerState.historyIndex]);
373
- const replace = (0, import_react.useCallback)((to, options2) => navigate(to, { ...options2, history: "replace" }), [navigate]);
374
- const updateState = (0, import_react.useCallback)((state) => {
375
- try {
376
- if (navigation) {
377
- navigation.updateCurrentEntry({ state });
378
- sharedSnapshot = computeNavigationSnapshot(navigation);
379
- storeCallbacks.forEach((cb) => cb());
380
- } else if (isBrowser) {
381
- window.history.replaceState(state, "", window.location.href);
382
- if (noNavSnapshot !== null) {
383
- noNavSnapshot = { ...noNavSnapshot, state };
384
- }
385
- storeCallbacks.forEach((cb) => cb());
386
- }
387
- } catch (error) {
388
- getLogger().error("[useRoute] updateState error:", error);
389
- }
390
- }, [navigation]);
391
- return (0, import_react.useMemo)(() => ({
417
+ const navigate = getNavigateForBase(effectiveBase);
418
+ const replace = getReplaceForBase(effectiveBase);
419
+ const back = globalBack;
420
+ const forward = globalForward;
421
+ const go = globalGo;
422
+ const updateState = globalUpdateState;
423
+ const canGoBack = globalCanGoBack;
424
+ const canGoForward = globalCanGoForward;
425
+ return {
392
426
  navigate,
393
427
  back,
394
428
  forward,
@@ -404,23 +438,7 @@ function useRoute(patternOrOptions, optionsParam) {
404
438
  historyIndex: routerState.historyIndex,
405
439
  state: routerState.state,
406
440
  matched: routerState.matched
407
- }), [
408
- navigate,
409
- back,
410
- forward,
411
- go,
412
- replace,
413
- updateState,
414
- canGoBack,
415
- canGoForward,
416
- routerState.location,
417
- routerState.pathname,
418
- routerState.searchParams,
419
- routerState.params,
420
- routerState.historyIndex,
421
- routerState.state,
422
- routerState.matched
423
- ]);
441
+ };
424
442
  }
425
443
  export {
426
444
  clearRouterCaches,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../node_modules/.pnpm/@budarin+use-route@1.3.2/node_modules/@budarin/use-route/src/types.ts", "../../../../node_modules/.pnpm/@budarin+use-route@1.3.2/node_modules/@budarin/use-route/src/index.ts"],
3
+ "sources": ["../../../../node_modules/.pnpm/@budarin+use-route@1.3.4/node_modules/@budarin/use-route/src/types.ts", "../../../../node_modules/.pnpm/@budarin+use-route@1.3.4/node_modules/@budarin/use-route/src/index.ts"],
4
4
  "sourcesContent": [null, null],
5
- "mappings": "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",
6
- "names": ["options"]
5
+ "mappings": "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",
6
+ "names": ["urlStr", "parsed"]
7
7
  }
@@ -1,43 +1,43 @@
1
1
  {
2
- "hash": "d1957da2",
2
+ "hash": "e9f3058a",
3
3
  "configHash": "5d40f1b5",
4
- "lockfileHash": "fa7a6518",
5
- "browserHash": "56e18d6b",
4
+ "lockfileHash": "b110f999",
5
+ "browserHash": "77e455a2",
6
6
  "optimized": {
7
7
  "react": {
8
8
  "src": "../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/index.js",
9
9
  "file": "react.js",
10
- "fileHash": "4e693045",
10
+ "fileHash": "3427d084",
11
11
  "needsInterop": true
12
12
  },
13
13
  "react-dom": {
14
14
  "src": "../../../../node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/index.js",
15
15
  "file": "react-dom.js",
16
- "fileHash": "313ebe75",
16
+ "fileHash": "d9711b24",
17
17
  "needsInterop": true
18
18
  },
19
19
  "react/jsx-dev-runtime": {
20
20
  "src": "../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/jsx-dev-runtime.js",
21
21
  "file": "react_jsx-dev-runtime.js",
22
- "fileHash": "cbb78dd5",
22
+ "fileHash": "7b60a338",
23
23
  "needsInterop": true
24
24
  },
25
25
  "react/jsx-runtime": {
26
26
  "src": "../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/jsx-runtime.js",
27
27
  "file": "react_jsx-runtime.js",
28
- "fileHash": "7aab470f",
28
+ "fileHash": "2806e1e3",
29
29
  "needsInterop": true
30
30
  },
31
31
  "@budarin/use-route": {
32
- "src": "../../../../node_modules/.pnpm/@budarin+use-route@1.3.2/node_modules/@budarin/use-route/dist/index.js",
32
+ "src": "../../../../node_modules/.pnpm/@budarin+use-route@1.3.4/node_modules/@budarin/use-route/dist/index.js",
33
33
  "file": "@budarin_use-route.js",
34
- "fileHash": "72e3f85e",
34
+ "fileHash": "5b933597",
35
35
  "needsInterop": false
36
36
  },
37
37
  "react-dom/client": {
38
38
  "src": "../../../../node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/client.js",
39
39
  "file": "react-dom_client.js",
40
- "fileHash": "b284ce58",
40
+ "fileHash": "31004c82",
41
41
  "needsInterop": true
42
42
  }
43
43
  },
package/demo/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "dependencies": {
7
- "@budarin/use-route": "^1.3.2",
7
+ "@budarin/use-route": "^1.3.4",
8
8
  "react": "^19.0.0",
9
9
  "react-dom": "^19.0.0"
10
10
  },
package/demo/src/App.tsx CHANGED
@@ -35,7 +35,11 @@ function Nav() {
35
35
  <span style={{ width: '0.5rem' }} />
36
36
  <Link
37
37
  to={section || '/'}
38
- className={pathname === (section || '/') ? 'active' : ''}
38
+ className={
39
+ // Вне раздела: Главная активна на pathname === '/'
40
+ // В разделе: Главная не подсвечивается — активна «Выйти из раздела»
41
+ !section && pathname === '/' ? 'active' : ''
42
+ }
39
43
  title="Главная страница демо"
40
44
  >
41
45
  Главная
@@ -93,7 +97,13 @@ function Nav() {
93
97
  Раздел (section)
94
98
  </Link>
95
99
  ) : (
96
- <Link to="/">Выйти из раздела</Link>
100
+ <Link
101
+ to="/"
102
+ className={pathname.startsWith(section) ? 'active' : ''}
103
+ title="Выйти из раздела в корень приложения"
104
+ >
105
+ Выйти из раздела
106
+ </Link>
97
107
  )}
98
108
  </div>
99
109
  </nav>
@@ -137,7 +147,9 @@ function Router() {
137
147
  <p>
138
148
  Путь <code>{pathname}</code> не найден.
139
149
  </p>
140
- <Link to="/">На главную</Link>
150
+ <Link to="/" className="demo-link-btn">
151
+ На главную
152
+ </Link>
141
153
  </div>
142
154
  );
143
155
  }
@@ -158,3 +158,40 @@ button:disabled {
158
158
  gap: 0.5rem;
159
159
  margin: 0.75rem 0;
160
160
  }
161
+
162
+ /* Ссылки внутри блока кнопок — в одном стиле с кнопками */
163
+ .demo-buttons a {
164
+ display: inline-block;
165
+ font: inherit;
166
+ cursor: pointer;
167
+ padding: 0.4em 0.8em;
168
+ border: 1px solid #ccc;
169
+ border-radius: 4px;
170
+ background: #fff;
171
+ color: #1a1a1a;
172
+ text-decoration: none;
173
+ }
174
+
175
+ .demo-buttons a:hover {
176
+ background: #f0f0f0;
177
+ text-decoration: none;
178
+ }
179
+
180
+ /* Отдельные ссылки «назад» / «на главную» в контенте — тоже под кнопку */
181
+ .demo-content a.demo-link-btn {
182
+ display: inline-block;
183
+ font: inherit;
184
+ cursor: pointer;
185
+ padding: 0.4em 0.8em;
186
+ margin: 0.25rem 0;
187
+ border: 1px solid #ccc;
188
+ border-radius: 4px;
189
+ background: #fff;
190
+ color: #1a1a1a;
191
+ text-decoration: none;
192
+ }
193
+
194
+ .demo-content a.demo-link-btn:hover {
195
+ background: #f0f0f0;
196
+ text-decoration: none;
197
+ }