@tramvai/module-client-hints 2.160.2 → 2.160.10

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/README.md CHANGED
@@ -92,6 +92,7 @@ const state = {
92
92
  // desktop - false, tablet - true, mobile - true
93
93
  isTouch: false,
94
94
  retina: false,
95
+ displayMode: 'browser',
95
96
  supposed: true,
96
97
  synchronized: false,
97
98
  };
@@ -105,6 +106,7 @@ const state = {
105
106
  height: 1080,
106
107
  isTouch: false,
107
108
  retina: true,
109
+ displayMode: 'browser',
108
110
  supposed: false,
109
111
  synchronized: false,
110
112
  };
@@ -122,6 +124,7 @@ const state = {
122
124
  height: 1080,
123
125
  isTouch: false,
124
126
  retina: true,
127
+ displayMode: 'browser',
125
128
  supposed: false,
126
129
  synchronized: true,
127
130
  };
@@ -157,6 +160,7 @@ type Media = {
157
160
  height: number;
158
161
  isTouch: boolean;
159
162
  retina: boolean;
163
+ displayMode: 'browser' | 'standalone' | 'unknown';
160
164
  supposed?: boolean;
161
165
  synchronized?: boolean;
162
166
  };
@@ -176,6 +180,12 @@ type Media = {
176
180
 
177
181
  `useIsRetina(): boolean` - calculates isRetina
178
182
 
183
+ `useDisplayMode(): boolean` - calculates displayMode. It indicates the mode in which the application is opened. The possible values are:
184
+
185
+ - browser: The application is opened in a browser
186
+ - standalone: The application is opened as a Progressive Web App (PWA)
187
+ - unknown: The application mode could not be determined
188
+
179
189
  ## How to
180
190
 
181
191
  ### Render skeleton only when user loads pages first time
@@ -225,4 +235,4 @@ You can increase it for better cache hit rate and server performance.
225
235
 
226
236
  ## Metrics
227
237
 
228
- - `user_agent_cache_gets` counter - User-Agent header parsing count, with labels `hit` and `miss`
238
+ - `user_agent_cache_gets` counter - User-Agent header parsing count, with labels `hit` and `miss`
@@ -0,0 +1,11 @@
1
+ const getDisplayMode = () => {
2
+ if (window.matchMedia('(display-mode: standalone)').matches) {
3
+ return 'standalone';
4
+ }
5
+ if (window.matchMedia('(display-mode: browser)').matches) {
6
+ return 'browser';
7
+ }
8
+ return 'unknown';
9
+ };
10
+
11
+ export { getDisplayMode };
@@ -0,0 +1,2 @@
1
+ export declare const getDisplayMode: () => "browser" | "standalone" | "unknown";
2
+ //# sourceMappingURL=getDisplayMode.d.ts.map
@@ -2,13 +2,16 @@ import debounce from '@tinkoff/utils/function/debounce';
2
2
  import { setMedia } from '../shared/stores/media.browser.js';
3
3
  import { COOKIE_NAME_MEDIA_INFO } from '../shared/constants.browser.js';
4
4
  import { mediaBreakpoints } from '../shared/mediaBreakpoints.browser.js';
5
+ import { getDisplayMode } from './getDisplayMode.browser.js';
5
6
 
6
7
  const isTouch = !!('ontouchstart' in window ||
7
8
  (window.DocumentTouch && document instanceof window.DocumentTouch));
9
+ const displayMode = getDisplayMode();
8
10
  const getMediaInfo = () => ({
9
11
  width: window.innerWidth,
10
12
  height: window.innerHeight,
11
13
  isTouch,
14
+ displayMode,
12
15
  retina: window.matchMedia(mediaBreakpoints.retina).matches,
13
16
  });
14
17
  const matchMediaCommand = ({ context, cookieManager, }) => {
package/lib/browser.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { declareModule } from '@tramvai/core';
2
2
  import { browserProviders } from './shared/providers.browser.browser.js';
3
3
  export { PARSER_CLIENT_HINTS_ENABLED, USER_AGENT_TOKEN } from './tokens.browser.js';
4
- export { fromClientHints, isRetina, isSupposed } from './shared/stores/mediaCheckers.browser.js';
5
- export { useFromClientHints, useIsRetina, useIsSupposed, useMedia } from './shared/stores/mediaSelectors.browser.js';
4
+ export { displayMode, fromClientHints, isRetina, isSupposed } from './shared/stores/mediaCheckers.browser.js';
5
+ export { useDisplayMode, useFromClientHints, useIsRetina, useIsSupposed, useMedia } from './shared/stores/mediaSelectors.browser.js';
6
6
  export { MediaStore, setMedia } from './shared/stores/media.browser.js';
7
7
  export { UserAgentStore, setUserAgent } from './shared/stores/userAgent.browser.js';
8
8
  export { ClientHintsChildAppModule } from './modules/child-app/module.browser.js';
@@ -10,18 +10,21 @@ const SUPPOSED_MEDIA = {
10
10
  height: 500,
11
11
  isTouch: true,
12
12
  retina: false,
13
+ displayMode: 'browser',
13
14
  },
14
15
  tablet: {
15
16
  width: 600,
16
17
  height: 800,
17
18
  isTouch: true,
18
19
  retina: false,
20
+ displayMode: 'browser',
19
21
  },
20
22
  desktop: {
21
23
  width: 1024,
22
24
  height: 768,
23
25
  isTouch: false,
24
26
  retina: false,
27
+ displayMode: 'browser',
25
28
  },
26
29
  };
27
30
  const readMediaCommand = ({ context, cookieManager, }) => {
@@ -18,18 +18,21 @@ const SUPPOSED_MEDIA = {
18
18
  height: 500,
19
19
  isTouch: true,
20
20
  retina: false,
21
+ displayMode: 'browser',
21
22
  },
22
23
  tablet: {
23
24
  width: 600,
24
25
  height: 800,
25
26
  isTouch: true,
26
27
  retina: false,
28
+ displayMode: 'browser',
27
29
  },
28
30
  desktop: {
29
31
  width: 1024,
30
32
  height: 768,
31
33
  isTouch: false,
32
34
  retina: false,
35
+ displayMode: 'browser',
33
36
  },
34
37
  };
35
38
  const readMediaCommand = ({ context, cookieManager, }) => {
package/lib/server.es.js CHANGED
@@ -3,8 +3,8 @@ import { serverProviders } from './shared/providers.server.es.js';
3
3
  import { serverUserAgentProviders } from './server/userAgent.es.js';
4
4
  import { PARSER_CLIENT_HINTS_ENABLED } from './tokens.es.js';
5
5
  export { PARSER_CLIENT_HINTS_ENABLED, USER_AGENT_TOKEN } from './tokens.es.js';
6
- export { fromClientHints, isRetina, isSupposed } from './shared/stores/mediaCheckers.es.js';
7
- export { useFromClientHints, useIsRetina, useIsSupposed, useMedia } from './shared/stores/mediaSelectors.es.js';
6
+ export { displayMode, fromClientHints, isRetina, isSupposed } from './shared/stores/mediaCheckers.es.js';
7
+ export { useDisplayMode, useFromClientHints, useIsRetina, useIsSupposed, useMedia } from './shared/stores/mediaSelectors.es.js';
8
8
  export { MediaStore, setMedia } from './shared/stores/media.es.js';
9
9
  export { UserAgentStore, setUserAgent } from './shared/stores/userAgent.es.js';
10
10
  export { ClientHintsChildAppModule } from './modules/child-app/module.es.js';
package/lib/server.js CHANGED
@@ -27,9 +27,11 @@ const ClientHintsModule = /* @__PURE__ */ core.declareModule({
27
27
 
28
28
  exports.PARSER_CLIENT_HINTS_ENABLED = tokens.PARSER_CLIENT_HINTS_ENABLED;
29
29
  exports.USER_AGENT_TOKEN = tokens.USER_AGENT_TOKEN;
30
+ exports.displayMode = mediaCheckers.displayMode;
30
31
  exports.fromClientHints = mediaCheckers.fromClientHints;
31
32
  exports.isRetina = mediaCheckers.isRetina;
32
33
  exports.isSupposed = mediaCheckers.isSupposed;
34
+ exports.useDisplayMode = mediaSelectors.useDisplayMode;
33
35
  exports.useFromClientHints = mediaSelectors.useFromClientHints;
34
36
  exports.useIsRetina = mediaSelectors.useIsRetina;
35
37
  exports.useIsSupposed = mediaSelectors.useIsSupposed;
@@ -7,6 +7,7 @@ const initialState = {
7
7
  isTouch: false,
8
8
  retina: false,
9
9
  synchronized: false,
10
+ displayMode: 'unknown',
10
11
  };
11
12
  const MediaStore = createReducer('media', initialState).on(setMedia, (state, media) => {
12
13
  return {
@@ -7,6 +7,7 @@ const initialState = {
7
7
  isTouch: false,
8
8
  retina: false,
9
9
  synchronized: false,
10
+ displayMode: 'unknown',
10
11
  };
11
12
  const MediaStore = createReducer('media', initialState).on(setMedia, (state, media) => {
12
13
  return {
@@ -11,6 +11,7 @@ const initialState = {
11
11
  isTouch: false,
12
12
  retina: false,
13
13
  synchronized: false,
14
+ displayMode: 'unknown',
14
15
  };
15
16
  const MediaStore = state.createReducer('media', initialState).on(setMedia, (state, media) => {
16
17
  return {
@@ -1,6 +1,9 @@
1
1
  function fromClientHints(media) {
2
2
  return !!media.synchronized;
3
3
  }
4
+ function displayMode(media) {
5
+ return media.displayMode;
6
+ }
4
7
  function isSupposed(media) {
5
8
  return !!media.supposed;
6
9
  }
@@ -8,4 +11,4 @@ function isRetina(media) {
8
11
  return !!media.retina;
9
12
  }
10
13
 
11
- export { fromClientHints, isRetina, isSupposed };
14
+ export { displayMode, fromClientHints, isRetina, isSupposed };
@@ -1,5 +1,7 @@
1
+ import type { DisplayMode } from '../../types';
1
2
  import type { Media } from './media';
2
3
  export declare function fromClientHints(media: Media): boolean;
4
+ export declare function displayMode(media: Media): DisplayMode;
3
5
  export declare function isSupposed(media: Media): boolean;
4
6
  export declare function isRetina(media: Media): boolean;
5
7
  //# sourceMappingURL=mediaCheckers.d.ts.map
@@ -1,6 +1,9 @@
1
1
  function fromClientHints(media) {
2
2
  return !!media.synchronized;
3
3
  }
4
+ function displayMode(media) {
5
+ return media.displayMode;
6
+ }
4
7
  function isSupposed(media) {
5
8
  return !!media.supposed;
6
9
  }
@@ -8,4 +11,4 @@ function isRetina(media) {
8
11
  return !!media.retina;
9
12
  }
10
13
 
11
- export { fromClientHints, isRetina, isSupposed };
14
+ export { displayMode, fromClientHints, isRetina, isSupposed };
@@ -5,6 +5,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  function fromClientHints(media) {
6
6
  return !!media.synchronized;
7
7
  }
8
+ function displayMode(media) {
9
+ return media.displayMode;
10
+ }
8
11
  function isSupposed(media) {
9
12
  return !!media.supposed;
10
13
  }
@@ -12,6 +15,7 @@ function isRetina(media) {
12
15
  return !!media.retina;
13
16
  }
14
17
 
18
+ exports.displayMode = displayMode;
15
19
  exports.fromClientHints = fromClientHints;
16
20
  exports.isRetina = isRetina;
17
21
  exports.isSupposed = isSupposed;
@@ -1,5 +1,5 @@
1
1
  import { useSelector } from '@tramvai/state';
2
- import { fromClientHints, isSupposed, isRetina } from './mediaCheckers.browser.js';
2
+ import { fromClientHints, isSupposed, isRetina, displayMode } from './mediaCheckers.browser.js';
3
3
 
4
4
  function useMedia() {
5
5
  return useSelector('media', ({ media }) => media);
@@ -13,5 +13,8 @@ function useIsSupposed() {
13
13
  function useIsRetina() {
14
14
  return isRetina(useMedia());
15
15
  }
16
+ function useDisplayMode() {
17
+ return displayMode(useMedia());
18
+ }
16
19
 
17
- export { useFromClientHints, useIsRetina, useIsSupposed, useMedia };
20
+ export { useDisplayMode, useFromClientHints, useIsRetina, useIsSupposed, useMedia };
@@ -1,6 +1,8 @@
1
1
  import type { Media } from './media';
2
+ import type { DisplayMode } from '../../types';
2
3
  export declare function useMedia(): Media;
3
4
  export declare function useFromClientHints(): boolean;
4
5
  export declare function useIsSupposed(): boolean;
5
6
  export declare function useIsRetina(): boolean;
7
+ export declare function useDisplayMode(): DisplayMode;
6
8
  //# sourceMappingURL=mediaSelectors.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { useSelector } from '@tramvai/state';
2
- import { fromClientHints, isSupposed, isRetina } from './mediaCheckers.es.js';
2
+ import { fromClientHints, isSupposed, isRetina, displayMode } from './mediaCheckers.es.js';
3
3
 
4
4
  function useMedia() {
5
5
  return useSelector('media', ({ media }) => media);
@@ -13,5 +13,8 @@ function useIsSupposed() {
13
13
  function useIsRetina() {
14
14
  return isRetina(useMedia());
15
15
  }
16
+ function useDisplayMode() {
17
+ return displayMode(useMedia());
18
+ }
16
19
 
17
- export { useFromClientHints, useIsRetina, useIsSupposed, useMedia };
20
+ export { useDisplayMode, useFromClientHints, useIsRetina, useIsSupposed, useMedia };
@@ -17,7 +17,11 @@ function useIsSupposed() {
17
17
  function useIsRetina() {
18
18
  return mediaCheckers.isRetina(useMedia());
19
19
  }
20
+ function useDisplayMode() {
21
+ return mediaCheckers.displayMode(useMedia());
22
+ }
20
23
 
24
+ exports.useDisplayMode = useDisplayMode;
21
25
  exports.useFromClientHints = useFromClientHints;
22
26
  exports.useIsRetina = useIsRetina;
23
27
  exports.useIsSupposed = useIsSupposed;
package/lib/types.d.ts CHANGED
@@ -3,5 +3,7 @@ export interface MediaInfo {
3
3
  height: number;
4
4
  isTouch: boolean;
5
5
  retina: boolean;
6
+ displayMode: DisplayMode;
6
7
  }
8
+ export type DisplayMode = 'browser' | 'standalone' | 'unknown';
7
9
  //# sourceMappingURL=types.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-client-hints",
3
- "version": "2.160.2",
3
+ "version": "2.160.10",
4
4
  "description": "",
5
5
  "main": "lib/server.js",
6
6
  "module": "lib/server.es.js",
@@ -19,22 +19,22 @@
19
19
  "watch": "tsc -w"
20
20
  },
21
21
  "dependencies": {
22
- "@tinkoff/user-agent": "0.4.465",
22
+ "@tinkoff/user-agent": "0.4.473",
23
23
  "@tinkoff/utils": "^2.1.2",
24
24
  "@tinkoff/env-validators": "0.1.6",
25
25
  "@tramvai/safe-strings": "0.5.12",
26
- "@tramvai/module-metrics": "2.160.2",
27
- "@tramvai/tokens-child-app": "2.160.2",
28
- "@tramvai/tokens-common": "2.160.2",
29
- "@tramvai/tokens-cookie": "2.160.2",
30
- "@tramvai/tokens-render": "2.160.2",
26
+ "@tramvai/module-metrics": "2.160.10",
27
+ "@tramvai/tokens-child-app": "2.160.10",
28
+ "@tramvai/tokens-common": "2.160.10",
29
+ "@tramvai/tokens-cookie": "2.160.10",
30
+ "@tramvai/tokens-render": "2.160.10",
31
31
  "user-agent-data-types": "^0.3.1"
32
32
  },
33
33
  "peerDependencies": {
34
34
  "@tinkoff/dippy": "0.8.16",
35
35
  "@tinkoff/logger": "0.10.67",
36
- "@tramvai/core": "2.160.2",
37
- "@tramvai/state": "2.160.2",
36
+ "@tramvai/core": "2.160.10",
37
+ "@tramvai/state": "2.160.10",
38
38
  "react": ">=16.14.0",
39
39
  "react-dom": ">=16.14.0",
40
40
  "tslib": "^2.4.0"