@tramvai/module-router 3.5.0 → 3.9.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.
@@ -4,8 +4,8 @@ import { useNavigate } from '@tinkoff/router';
4
4
  import { usePrefetch } from '../hooks/usePrefetch.browser.browser.js';
5
5
 
6
6
  function Link(props) {
7
- const { children, onClick, url, query, replace, target, navigateOptions, prefetch = true, ...otherProps } = props;
8
- const navigate = useNavigate({ url, query, replace, ...navigateOptions });
7
+ const { children, onClick, url, query, replace, target, navigateOptions, prefetch = true, viewTransition = false, ...otherProps } = props;
8
+ const navigate = useNavigate({ url, query, replace, viewTransition, ...navigateOptions });
9
9
  const [linkElement, setLinkElement] = useState(null);
10
10
  usePrefetch({
11
11
  url,
@@ -27,7 +27,11 @@ function Link(props) {
27
27
  navigate();
28
28
  onClick && onClick(event);
29
29
  }, [navigate, target, onClick]);
30
- const extraProps = { href: url, onClick: handleClick, target };
30
+ const extraProps = {
31
+ href: url,
32
+ onClick: handleClick,
33
+ target,
34
+ };
31
35
  if (isValidElement(children)) {
32
36
  return cloneElement(children, {
33
37
  // @ts-expect-error
@@ -1,16 +1,24 @@
1
- interface Props {
2
- children?: any;
1
+ import type { ReactNode, AnchorHTMLAttributes } from 'react';
2
+ import type { NavigateOptions } from '@tinkoff/router';
3
+ type AnchorLinkProps = Pick<AnchorHTMLAttributes<HTMLAnchorElement>, 'id' | 'className' | 'style'>;
4
+ interface Props extends Partial<AnchorLinkProps> {
5
+ children?: ReactNode;
3
6
  url: string;
4
7
  query?: Record<string, string>;
5
8
  replace?: boolean;
6
9
  target?: string;
7
10
  onClick?: Function;
8
- navigateOptions?: Record<string, any>;
11
+ navigateOptions?: Partial<NavigateOptions>;
9
12
  /**
10
13
  * @description enable or disable target page resources prefetching
11
14
  * @default true
12
15
  */
13
16
  prefetch?: boolean;
17
+ /**
18
+ * @description enable view transition for underlying navigation
19
+ * @default false
20
+ */
21
+ viewTransition?: boolean;
14
22
  }
15
23
  declare function Link(props: Props): import("react/jsx-runtime").JSX.Element;
16
24
  declare namespace Link {
@@ -3,8 +3,8 @@ import { useState, useCallback, isValidElement, cloneElement } from 'react';
3
3
  import { useNavigate } from '@tinkoff/router';
4
4
 
5
5
  function Link(props) {
6
- const { children, onClick, url, query, replace, target, navigateOptions, prefetch = true, ...otherProps } = props;
7
- const navigate = useNavigate({ url, query, replace, ...navigateOptions });
6
+ const { children, onClick, url, query, replace, target, navigateOptions, prefetch = true, viewTransition = false, ...otherProps } = props;
7
+ const navigate = useNavigate({ url, query, replace, viewTransition, ...navigateOptions });
8
8
  const [linkElement, setLinkElement] = useState(null);
9
9
  const handleClick = useCallback((event) => {
10
10
  // ignores the navigation when clicked using right mouse button or
@@ -21,7 +21,11 @@ function Link(props) {
21
21
  navigate();
22
22
  onClick && onClick(event);
23
23
  }, [navigate, target, onClick]);
24
- const extraProps = { href: url, onClick: handleClick, target };
24
+ const extraProps = {
25
+ href: url,
26
+ onClick: handleClick,
27
+ target,
28
+ };
25
29
  if (isValidElement(children)) {
26
30
  return cloneElement(children, {
27
31
  // @ts-expect-error
@@ -7,8 +7,8 @@ var react = require('react');
7
7
  var router = require('@tinkoff/router');
8
8
 
9
9
  function Link(props) {
10
- const { children, onClick, url, query, replace, target, navigateOptions, prefetch = true, ...otherProps } = props;
11
- const navigate = router.useNavigate({ url, query, replace, ...navigateOptions });
10
+ const { children, onClick, url, query, replace, target, navigateOptions, prefetch = true, viewTransition = false, ...otherProps } = props;
11
+ const navigate = router.useNavigate({ url, query, replace, viewTransition, ...navigateOptions });
12
12
  const [linkElement, setLinkElement] = react.useState(null);
13
13
  const handleClick = react.useCallback((event) => {
14
14
  // ignores the navigation when clicked using right mouse button or
@@ -25,7 +25,11 @@ function Link(props) {
25
25
  navigate();
26
26
  onClick && onClick(event);
27
27
  }, [navigate, target, onClick]);
28
- const extraProps = { href: url, onClick: handleClick, target };
28
+ const extraProps = {
29
+ href: url,
30
+ onClick: handleClick,
31
+ target,
32
+ };
29
33
  if (react.isValidElement(children)) {
30
34
  return react.cloneElement(children, {
31
35
  // @ts-expect-error
@@ -1,7 +1,7 @@
1
1
  export { NoSpaRouterModule } from './modules/no-spa.browser.js';
2
2
  export { SpaRouterModule } from './modules/spa.browser.js';
3
3
  export { RouterChildAppModule } from './modules/child-app.browser.js';
4
- export { Provider, useNavigate, useRoute, useRouter, useUrl } from '@tinkoff/router';
4
+ export { Provider, useNavigate, useRoute, useRouter, useUrl, useViewTransition } from '@tinkoff/router';
5
5
  export { Link } from './components/link.browser.js';
6
6
  export * from '@tramvai/tokens-router';
7
7
  export { generateForRoot, routerForRoot } from './modules/utils/forRoot.browser.js';
package/lib/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { NoSpaRouterModule, SpaRouterModule } from './modules/server';
2
2
  export { RouterChildAppModule } from './modules/child-app';
3
- export { Provider, useNavigate, useRoute, useRouter, useUrl } from '@tinkoff/router';
3
+ export { Provider, useNavigate, useRoute, useRouter, useUrl, useViewTransition, } from '@tinkoff/router';
4
4
  export { Link } from './components/link';
5
5
  export * from '@tramvai/tokens-router';
6
6
  export { routerForRoot, generateForRoot } from './modules/utils/forRoot';
package/lib/index.es.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export { NoSpaRouterModule, SpaRouterModule } from './modules/server.es.js';
2
2
  export { RouterChildAppModule } from './modules/child-app.es.js';
3
- export { Provider, useNavigate, useRoute, useRouter, useUrl } from '@tinkoff/router';
3
+ export { Provider, useNavigate, useRoute, useRouter, useUrl, useViewTransition } from '@tinkoff/router';
4
4
  export { Link } from './components/link.es.js';
5
5
  export * from '@tramvai/tokens-router';
6
6
  export { generateForRoot, routerForRoot } from './modules/utils/forRoot.es.js';
package/lib/index.js CHANGED
@@ -42,6 +42,10 @@ Object.defineProperty(exports, 'useUrl', {
42
42
  enumerable: true,
43
43
  get: function () { return router.useUrl; }
44
44
  });
45
+ Object.defineProperty(exports, 'useViewTransition', {
46
+ enumerable: true,
47
+ get: function () { return router.useViewTransition; }
48
+ });
45
49
  exports.Link = link.Link;
46
50
  exports.generateForRoot = forRoot.generateForRoot;
47
51
  exports.routerForRoot = forRoot.routerForRoot;
@@ -3,6 +3,7 @@ import { provide, commandLineListTokens } from '@tramvai/core';
3
3
  import { setLogger } from '@tinkoff/router';
4
4
  import { LOGGER_TOKEN, COMBINE_REDUCERS } from '@tramvai/tokens-common';
5
5
  import { ROUTER_TOKEN, ROUTES_TOKEN, ROUTE_RESOLVE_TOKEN, ROUTER_GUARD_TOKEN, ROUTER_SPA_ACTIONS_RUN_MODE_TOKEN } from '@tramvai/tokens-router';
6
+ import { RENDER_SLOTS, ResourceType, ResourceSlot } from '@tramvai/tokens-render';
6
7
  import { routerClassToken, additionalRouterParameters, routeTransformToken, onChangeHooksToken, beforeResolveHooksToken, beforeNavigateHooksToken, afterNavigateHooksToken, beforeUpdateCurrentHooksToken, afterUpdateCurrentHooksToken } from './tokens.browser.js';
7
8
  import { RouterStore } from '../stores/RouterStore.browser.js';
8
9
  import { commonGuards } from './guards/common/index.browser.js';
@@ -22,6 +23,7 @@ const providers = [
22
23
  ...additionalParameters,
23
24
  trailingSlash: true,
24
25
  mergeSlashes: true,
26
+ enableViewTransitions: process.env.__TRAMVAI_VIEW_TRANSITIONS === 'true',
25
27
  routes: flatten(routes !== null && routes !== void 0 ? routes : []).map(routeTransform),
26
28
  });
27
29
  if (routeResolve) {
@@ -127,6 +129,20 @@ const providers = [
127
129
  multi: true,
128
130
  useValue: RouterStore,
129
131
  }),
132
+ ...(process.env.__TRAMVAI_VIEW_TRANSITIONS === 'true'
133
+ ? [
134
+ provide({
135
+ provide: RENDER_SLOTS,
136
+ useValue: [
137
+ {
138
+ type: ResourceType.inlineStyle,
139
+ slot: ResourceSlot.HEAD_CORE_STYLES,
140
+ payload: '@media (prefers-reduced-motion) { ::view-transition-group(*),::view-transition-old(*),::view-transition-new(*) { animation: none !important; } }',
141
+ },
142
+ ],
143
+ }),
144
+ ]
145
+ : []),
130
146
  ];
131
147
 
132
148
  export { providers };
@@ -3,6 +3,7 @@ import { provide, commandLineListTokens } from '@tramvai/core';
3
3
  import { setLogger } from '@tinkoff/router';
4
4
  import { LOGGER_TOKEN, COMBINE_REDUCERS } from '@tramvai/tokens-common';
5
5
  import { ROUTER_TOKEN, ROUTES_TOKEN, ROUTE_RESOLVE_TOKEN, ROUTER_GUARD_TOKEN, ROUTER_SPA_ACTIONS_RUN_MODE_TOKEN } from '@tramvai/tokens-router';
6
+ import { RENDER_SLOTS, ResourceType, ResourceSlot } from '@tramvai/tokens-render';
6
7
  import { routerClassToken, additionalRouterParameters, routeTransformToken, onChangeHooksToken, beforeResolveHooksToken, beforeNavigateHooksToken, afterNavigateHooksToken, beforeUpdateCurrentHooksToken, afterUpdateCurrentHooksToken } from './tokens.es.js';
7
8
  import { RouterStore } from '../stores/RouterStore.es.js';
8
9
  import { commonGuards } from './guards/common/index.es.js';
@@ -22,6 +23,7 @@ const providers = [
22
23
  ...additionalParameters,
23
24
  trailingSlash: true,
24
25
  mergeSlashes: true,
26
+ enableViewTransitions: process.env.__TRAMVAI_VIEW_TRANSITIONS === 'true',
25
27
  routes: flatten(routes !== null && routes !== void 0 ? routes : []).map(routeTransform),
26
28
  });
27
29
  if (routeResolve) {
@@ -127,6 +129,20 @@ const providers = [
127
129
  multi: true,
128
130
  useValue: RouterStore,
129
131
  }),
132
+ ...(process.env.__TRAMVAI_VIEW_TRANSITIONS === 'true'
133
+ ? [
134
+ provide({
135
+ provide: RENDER_SLOTS,
136
+ useValue: [
137
+ {
138
+ type: ResourceType.inlineStyle,
139
+ slot: ResourceSlot.HEAD_CORE_STYLES,
140
+ payload: '@media (prefers-reduced-motion) { ::view-transition-group(*),::view-transition-old(*),::view-transition-new(*) { animation: none !important; } }',
141
+ },
142
+ ],
143
+ }),
144
+ ]
145
+ : []),
130
146
  ];
131
147
 
132
148
  export { providers };
@@ -7,6 +7,7 @@ var core = require('@tramvai/core');
7
7
  var router = require('@tinkoff/router');
8
8
  var tokensCommon = require('@tramvai/tokens-common');
9
9
  var tokensRouter = require('@tramvai/tokens-router');
10
+ var tokensRender = require('@tramvai/tokens-render');
10
11
  var tokens = require('./tokens.js');
11
12
  var RouterStore = require('../stores/RouterStore.js');
12
13
  var index = require('./guards/common/index.js');
@@ -30,6 +31,7 @@ const providers = [
30
31
  ...additionalParameters,
31
32
  trailingSlash: true,
32
33
  mergeSlashes: true,
34
+ enableViewTransitions: process.env.__TRAMVAI_VIEW_TRANSITIONS === 'true',
33
35
  routes: flatten__default["default"](routes !== null && routes !== void 0 ? routes : []).map(routeTransform),
34
36
  });
35
37
  if (routeResolve) {
@@ -135,6 +137,20 @@ const providers = [
135
137
  multi: true,
136
138
  useValue: RouterStore.RouterStore,
137
139
  }),
140
+ ...(process.env.__TRAMVAI_VIEW_TRANSITIONS === 'true'
141
+ ? [
142
+ core.provide({
143
+ provide: tokensRender.RENDER_SLOTS,
144
+ useValue: [
145
+ {
146
+ type: tokensRender.ResourceType.inlineStyle,
147
+ slot: tokensRender.ResourceSlot.HEAD_CORE_STYLES,
148
+ payload: '@media (prefers-reduced-motion) { ::view-transition-group(*),::view-transition-old(*),::view-transition-new(*) { animation: none !important; } }',
149
+ },
150
+ ],
151
+ }),
152
+ ]
153
+ : []),
138
154
  ];
139
155
 
140
156
  exports.providers = providers;
@@ -3,8 +3,8 @@ import { Provider } from '@tinkoff/router';
3
3
 
4
4
  const provideRouter = ({ router }) => {
5
5
  const serverState = {
6
- currentRoute: router.getCurrentRoute(),
7
- currentUrl: router.getCurrentUrl(),
6
+ route: router.getCurrentRoute(),
7
+ url: router.getCurrentUrl(),
8
8
  };
9
9
  return (render) => {
10
10
  return (jsx(Provider, { router: router, serverState: serverState, children: render }));
@@ -3,8 +3,8 @@ import { Provider } from '@tinkoff/router';
3
3
 
4
4
  const provideRouter = ({ router }) => {
5
5
  const serverState = {
6
- currentRoute: router.getCurrentRoute(),
7
- currentUrl: router.getCurrentUrl(),
6
+ route: router.getCurrentRoute(),
7
+ url: router.getCurrentUrl(),
8
8
  };
9
9
  return (render) => {
10
10
  return (jsx(Provider, { router: router, serverState: serverState, children: render }));
@@ -7,8 +7,8 @@ var router = require('@tinkoff/router');
7
7
 
8
8
  const provideRouter = ({ router: router$1 }) => {
9
9
  const serverState = {
10
- currentRoute: router$1.getCurrentRoute(),
11
- currentUrl: router$1.getCurrentUrl(),
10
+ route: router$1.getCurrentRoute(),
11
+ url: router$1.getCurrentUrl(),
12
12
  };
13
13
  return (render) => {
14
14
  return (jsxRuntime.jsx(router.Provider, { router: router$1, serverState: serverState, children: render }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-router",
3
- "version": "3.5.0",
3
+ "version": "3.9.0",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "browser": {
@@ -26,27 +26,27 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@tinkoff/errors": "0.4.1",
29
- "@tinkoff/router": "0.3.1",
29
+ "@tinkoff/router": "0.3.8",
30
30
  "@tinkoff/url": "0.9.1",
31
- "@tramvai/react": "3.5.0",
31
+ "@tramvai/react": "3.9.0",
32
32
  "@tramvai/safe-strings": "0.6.1",
33
- "@tramvai/tokens-child-app": "3.5.0",
34
- "@tramvai/tokens-render": "3.5.0",
35
- "@tramvai/tokens-router": "3.5.0",
36
- "@tramvai/tokens-server": "3.5.0",
37
- "@tramvai/experiments": "3.5.0"
33
+ "@tramvai/tokens-child-app": "3.9.0",
34
+ "@tramvai/tokens-render": "3.9.0",
35
+ "@tramvai/tokens-router": "3.9.0",
36
+ "@tramvai/tokens-server": "3.9.0",
37
+ "@tramvai/experiments": "3.9.0"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "@tinkoff/utils": "^2.1.2",
41
- "@tramvai/cli": "3.5.0",
42
- "@tramvai/core": "3.5.0",
43
- "@tramvai/module-log": "3.5.0",
44
- "@tramvai/module-server": "3.5.0",
45
- "@tramvai/papi": "3.5.0",
46
- "@tramvai/state": "3.5.0",
47
- "@tramvai/test-helpers": "3.5.0",
48
- "@tramvai/test-mocks": "3.5.0",
49
- "@tramvai/tokens-common": "3.5.0",
41
+ "@tramvai/cli": "3.9.0",
42
+ "@tramvai/core": "3.9.0",
43
+ "@tramvai/module-log": "3.9.0",
44
+ "@tramvai/module-server": "3.9.0",
45
+ "@tramvai/papi": "3.9.0",
46
+ "@tramvai/state": "3.9.0",
47
+ "@tramvai/test-helpers": "3.9.0",
48
+ "@tramvai/test-mocks": "3.9.0",
49
+ "@tramvai/tokens-common": "3.9.0",
50
50
  "@tinkoff/dippy": "0.9.1",
51
51
  "react": "*",
52
52
  "tslib": "^2.4.0"