@tramvai/module-client-hints 2.160.4 → 2.160.12
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 +11 -1
- package/lib/browser/getDisplayMode.browser.js +11 -0
- package/lib/browser/getDisplayMode.d.ts +2 -0
- package/lib/browser/matchMedia.browser.js +3 -0
- package/lib/browser.js +2 -2
- package/lib/server/readMedia.es.js +3 -0
- package/lib/server/readMedia.js +3 -0
- package/lib/server.es.js +2 -2
- package/lib/server.js +2 -0
- package/lib/shared/stores/media.browser.js +1 -0
- package/lib/shared/stores/media.es.js +1 -0
- package/lib/shared/stores/media.js +1 -0
- package/lib/shared/stores/mediaCheckers.browser.js +4 -1
- package/lib/shared/stores/mediaCheckers.d.ts +2 -0
- package/lib/shared/stores/mediaCheckers.es.js +4 -1
- package/lib/shared/stores/mediaCheckers.js +4 -0
- package/lib/shared/stores/mediaSelectors.browser.js +5 -2
- package/lib/shared/stores/mediaSelectors.d.ts +2 -0
- package/lib/shared/stores/mediaSelectors.es.js +5 -2
- package/lib/shared/stores/mediaSelectors.js +4 -0
- package/lib/types.d.ts +2 -0
- package/package.json +9 -9
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 };
|
|
@@ -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, }) => {
|
package/lib/server/readMedia.js
CHANGED
|
@@ -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;
|
|
@@ -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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tramvai/module-client-hints",
|
|
3
|
-
"version": "2.160.
|
|
3
|
+
"version": "2.160.12",
|
|
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.
|
|
22
|
+
"@tinkoff/user-agent": "0.4.475",
|
|
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.
|
|
27
|
-
"@tramvai/tokens-child-app": "2.160.
|
|
28
|
-
"@tramvai/tokens-common": "2.160.
|
|
29
|
-
"@tramvai/tokens-cookie": "2.160.
|
|
30
|
-
"@tramvai/tokens-render": "2.160.
|
|
26
|
+
"@tramvai/module-metrics": "2.160.12",
|
|
27
|
+
"@tramvai/tokens-child-app": "2.160.12",
|
|
28
|
+
"@tramvai/tokens-common": "2.160.12",
|
|
29
|
+
"@tramvai/tokens-cookie": "2.160.12",
|
|
30
|
+
"@tramvai/tokens-render": "2.160.12",
|
|
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.
|
|
37
|
-
"@tramvai/state": "2.160.
|
|
36
|
+
"@tramvai/core": "2.160.12",
|
|
37
|
+
"@tramvai/state": "2.160.12",
|
|
38
38
|
"react": ">=16.14.0",
|
|
39
39
|
"react-dom": ">=16.14.0",
|
|
40
40
|
"tslib": "^2.4.0"
|