@devvit/client 0.12.1-next-2025-09-22-20-12-49-9b3f04aa9.0 → 0.12.1-next-2025-09-23-19-50-15-c6a0f8346.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/client-meta.min.json +121 -102
- package/client.min.js +1 -1
- package/client.min.js.map +4 -4
- package/effects/web-view-mode.d.ts +66 -0
- package/effects/web-view-mode.d.ts.map +1 -0
- package/effects/web-view-mode.js +101 -0
- package/effects/web-view-mode.test.d.ts.map +1 -0
- package/index.d.ts +1 -1
- package/index.d.ts.map +1 -1
- package/index.js +3 -1
- package/package.json +8 -8
- package/effects/immersive-mode-listeners.test.d.ts.map +0 -1
- package/effects/immersive-mode.d.ts +0 -51
- package/effects/immersive-mode.d.ts.map +0 -1
- package/effects/immersive-mode.js +0 -75
- package/effects/immersive-mode.test.d.ts.map +0 -1
- package/index.test.d.ts.map +0 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The presentation mode of the web view.
|
|
3
|
+
* 'inline' The web view is displayed inline within a feed or post detail page
|
|
4
|
+
* 'expanded' The web view is displayed in a larger modal presentation
|
|
5
|
+
*/
|
|
6
|
+
export type WebViewMode = 'inline' | 'expanded';
|
|
7
|
+
/**
|
|
8
|
+
* A listener that is called when the web view mode changes.
|
|
9
|
+
* @param mode The new mode, either 'inline' or 'expanded'.
|
|
10
|
+
*/
|
|
11
|
+
export type WebViewModeListener = (mode: WebViewMode) => void;
|
|
12
|
+
/**
|
|
13
|
+
* Represents the current web view mode state for the application.
|
|
14
|
+
*
|
|
15
|
+
* @defaultValue 'inline'
|
|
16
|
+
*/
|
|
17
|
+
export declare const getWebViewMode: () => WebViewMode;
|
|
18
|
+
/**
|
|
19
|
+
* Requests expanded mode for the web view.
|
|
20
|
+
* This will display the web view in a larger modal presentation.
|
|
21
|
+
*
|
|
22
|
+
* @param event The event that triggered the request, must be a trusted event.
|
|
23
|
+
* @returns A promise that resolves request has been received.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* button.addEventListener('click', async (event) => {
|
|
28
|
+
* await requestExpandedMode(event);
|
|
29
|
+
* });
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function requestExpandedMode(event: PointerEvent): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Exits expanded mode for the web view.
|
|
35
|
+
* This will display the web view in an inline presentation.
|
|
36
|
+
*
|
|
37
|
+
* @param event The event that triggered the request, must be a trusted event.
|
|
38
|
+
* @returns A promise that resolves request has been received.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* button.addEventListener('click', async (event) => {
|
|
43
|
+
* await exitExpandedMode(event);
|
|
44
|
+
* });
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare function exitExpandedMode(event: PointerEvent): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Adds a listener that is called when the web view mode changes.
|
|
50
|
+
* The listener will be called with the new mode, either 'inline' or 'expanded'.
|
|
51
|
+
*
|
|
52
|
+
* @param callback The callback to be called when the mode changes.
|
|
53
|
+
*/
|
|
54
|
+
export declare function addWebViewModeListener(callback: WebViewModeListener): void;
|
|
55
|
+
/**
|
|
56
|
+
* Removes a listener that was previously added with `addWebViewModeListener`.
|
|
57
|
+
*
|
|
58
|
+
* @param callback The callback to be removed.
|
|
59
|
+
*/
|
|
60
|
+
export declare function removeWebViewModeListener(callback: WebViewModeListener): void;
|
|
61
|
+
/**
|
|
62
|
+
* @internal
|
|
63
|
+
* Handles incoming messages from the client, like when the user closes the immersive modal
|
|
64
|
+
*/
|
|
65
|
+
export declare function registerListener(): void;
|
|
66
|
+
//# sourceMappingURL=web-view-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-view-mode.d.ts","sourceRoot":"","sources":["../../src/effects/web-view-mode.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;AAI9D;;;;GAIG;AACH,eAAO,MAAM,cAAc,QAAO,WAA8C,CAAC;AAEjF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAE7E;AAYD;;;GAGG;AACH,wBAAgB,gBAAgB,SAiB/B"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { WebViewImmersiveMode } from '@devvit/protos/json/devvit/ui/effects/web_view/v1alpha/immersive_mode.js';
|
|
2
|
+
import { emitEffect } from '@devvit/shared-types/client/emit-effect.js';
|
|
3
|
+
const modeListeners = new Set();
|
|
4
|
+
/**
|
|
5
|
+
* Represents the current web view mode state for the application.
|
|
6
|
+
*
|
|
7
|
+
* @defaultValue 'inline'
|
|
8
|
+
*/
|
|
9
|
+
export const getWebViewMode = () => webViewMode(devvit.webViewMode);
|
|
10
|
+
/**
|
|
11
|
+
* Requests expanded mode for the web view.
|
|
12
|
+
* This will display the web view in a larger modal presentation.
|
|
13
|
+
*
|
|
14
|
+
* @param event The event that triggered the request, must be a trusted event.
|
|
15
|
+
* @returns A promise that resolves request has been received.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* button.addEventListener('click', async (event) => {
|
|
20
|
+
* await requestExpandedMode(event);
|
|
21
|
+
* });
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function requestExpandedMode(event) {
|
|
25
|
+
return emitModeEffect(WebViewImmersiveMode.IMMERSIVE_MODE, event);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Exits expanded mode for the web view.
|
|
29
|
+
* This will display the web view in an inline presentation.
|
|
30
|
+
*
|
|
31
|
+
* @param event The event that triggered the request, must be a trusted event.
|
|
32
|
+
* @returns A promise that resolves request has been received.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* button.addEventListener('click', async (event) => {
|
|
37
|
+
* await exitExpandedMode(event);
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export function exitExpandedMode(event) {
|
|
42
|
+
return emitModeEffect(WebViewImmersiveMode.INLINE_MODE, event);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Adds a listener that is called when the web view mode changes.
|
|
46
|
+
* The listener will be called with the new mode, either 'inline' or 'expanded'.
|
|
47
|
+
*
|
|
48
|
+
* @param callback The callback to be called when the mode changes.
|
|
49
|
+
*/
|
|
50
|
+
export function addWebViewModeListener(callback) {
|
|
51
|
+
modeListeners.add(callback);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Removes a listener that was previously added with `addWebViewModeListener`.
|
|
55
|
+
*
|
|
56
|
+
* @param callback The callback to be removed.
|
|
57
|
+
*/
|
|
58
|
+
export function removeWebViewModeListener(callback) {
|
|
59
|
+
modeListeners.delete(callback);
|
|
60
|
+
}
|
|
61
|
+
async function emitModeEffect(mode, event) {
|
|
62
|
+
if (!event.isTrusted || event.type !== 'click') {
|
|
63
|
+
console.error('Expanded mode effect ignored due to untrusted event');
|
|
64
|
+
throw new Error('Untrusted event');
|
|
65
|
+
}
|
|
66
|
+
const type = 9;
|
|
67
|
+
await emitEffect({ type, immersiveMode: { immersiveMode: mode } });
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* @internal
|
|
71
|
+
* Handles incoming messages from the client, like when the user closes the immersive modal
|
|
72
|
+
*/
|
|
73
|
+
export function registerListener() {
|
|
74
|
+
console.log('Registering web view mode listener');
|
|
75
|
+
addEventListener('message', (event) => {
|
|
76
|
+
const { type, data } = event.data;
|
|
77
|
+
if (type !== 'devvit-message') {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (!data?.immersiveModeEvent) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
devvit.webViewMode = data.immersiveModeEvent.immersiveMode;
|
|
84
|
+
const webViewModeString = webViewMode(data.immersiveModeEvent.immersiveMode);
|
|
85
|
+
modeListeners.forEach((listener) => listener(webViewModeString));
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function webViewMode(mode) {
|
|
89
|
+
switch (mode) {
|
|
90
|
+
case WebViewImmersiveMode.IMMERSIVE_MODE:
|
|
91
|
+
return 'expanded';
|
|
92
|
+
case WebViewImmersiveMode.INLINE_MODE:
|
|
93
|
+
case WebViewImmersiveMode.UNRECOGNIZED:
|
|
94
|
+
case WebViewImmersiveMode.UNSPECIFIED:
|
|
95
|
+
case undefined:
|
|
96
|
+
return 'inline';
|
|
97
|
+
default:
|
|
98
|
+
mode;
|
|
99
|
+
throw Error(`${mode} not a WebViewImmersiveMode`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-view-mode.test.d.ts","sourceRoot":"","sources":["../../src/effects/web-view-mode.test.ts"],"names":[],"mappings":""}
|
package/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export { context } from './clientContext.js';
|
|
2
|
-
export { addImmersiveModeChangeEventListener, exitImmersiveMode, removeImmersiveModeChangeEventListener, requestImmersiveMode, } from './effects/immersive-mode.js';
|
|
3
2
|
export { navigateTo } from './effects/navigate-to.js';
|
|
4
3
|
export { canRunAsUser } from './effects/run-as-user.js';
|
|
5
4
|
export { getShareData, type ShareSheetOpts, showShareSheet } from './effects/share.js';
|
|
6
5
|
export { showForm } from './effects/show-form.js';
|
|
7
6
|
export { showToast } from './effects/show-toast.js';
|
|
7
|
+
export { addWebViewModeListener, exitExpandedMode, getWebViewMode, removeWebViewModeListener, requestExpandedMode, } from './effects/web-view-mode.js';
|
|
8
8
|
export type { PostData } from '@devvit/shared-types/PostData.js';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC"}
|
package/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export { context } from './clientContext.js';
|
|
2
|
-
export { addImmersiveModeChangeEventListener, exitImmersiveMode, removeImmersiveModeChangeEventListener, requestImmersiveMode, } from './effects/immersive-mode.js';
|
|
3
2
|
export { navigateTo } from './effects/navigate-to.js';
|
|
4
3
|
export { canRunAsUser } from './effects/run-as-user.js';
|
|
5
4
|
export { getShareData, showShareSheet } from './effects/share.js';
|
|
6
5
|
export { showForm } from './effects/show-form.js';
|
|
7
6
|
export { showToast } from './effects/show-toast.js';
|
|
7
|
+
export { addWebViewModeListener, exitExpandedMode, getWebViewMode, removeWebViewModeListener, requestExpandedMode, } from './effects/web-view-mode.js';
|
|
8
|
+
import { registerListener } from './effects/web-view-mode.js';
|
|
9
|
+
registerListener();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devvit/client",
|
|
3
|
-
"version": "0.12.1-next-2025-09-
|
|
3
|
+
"version": "0.12.1-next-2025-09-23-19-50-15-c6a0f8346.0",
|
|
4
4
|
"license": "BSD-3-Clause",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -33,15 +33,15 @@
|
|
|
33
33
|
"test:unit-with-coverage": "vitest run --coverage"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@devvit/protos": "0.12.1-next-2025-09-
|
|
37
|
-
"@devvit/shared": "0.12.1-next-2025-09-
|
|
38
|
-
"@devvit/shared-types": "0.12.1-next-2025-09-
|
|
39
|
-
"@devvit/web-view-scripts": "0.12.1-next-2025-09-
|
|
36
|
+
"@devvit/protos": "0.12.1-next-2025-09-23-19-50-15-c6a0f8346.0",
|
|
37
|
+
"@devvit/shared": "0.12.1-next-2025-09-23-19-50-15-c6a0f8346.0",
|
|
38
|
+
"@devvit/shared-types": "0.12.1-next-2025-09-23-19-50-15-c6a0f8346.0",
|
|
39
|
+
"@devvit/web-view-scripts": "0.12.1-next-2025-09-23-19-50-15-c6a0f8346.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@ampproject/filesize": "4.3.0",
|
|
43
|
-
"@devvit/repo-tools": "0.12.1-next-2025-09-
|
|
44
|
-
"@devvit/tsconfig": "0.12.1-next-2025-09-
|
|
43
|
+
"@devvit/repo-tools": "0.12.1-next-2025-09-23-19-50-15-c6a0f8346.0",
|
|
44
|
+
"@devvit/tsconfig": "0.12.1-next-2025-09-23-19-50-15-c6a0f8346.0",
|
|
45
45
|
"esbuild": "0.25.9",
|
|
46
46
|
"eslint": "9.11.1",
|
|
47
47
|
"typescript": "5.8.3",
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"none": "105 KB"
|
|
54
54
|
}
|
|
55
55
|
},
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "f58870e7a3c0cde2e845693a14f1b3e48b676c61"
|
|
57
57
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"immersive-mode-listeners.test.d.ts","sourceRoot":"","sources":["../../src/effects/immersive-mode-listeners.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The presentation mode of the web view.
|
|
3
|
-
* 'inline' The web view is displayed inline within a feed or post detail page
|
|
4
|
-
* 'immersive' The web view is displayed in a larger modal presentation
|
|
5
|
-
*/
|
|
6
|
-
export type ImmersiveMode = 'inline' | 'immersive';
|
|
7
|
-
/**
|
|
8
|
-
* A listener that is called when the immersive mode changes.
|
|
9
|
-
* @param immersiveMode The new immersive mode, either 'inline' or 'immersive'.
|
|
10
|
-
*/
|
|
11
|
-
export type ImmersiveListener = (immersiveMode: ImmersiveMode) => void;
|
|
12
|
-
/**
|
|
13
|
-
* Requests immersive mode for the web view.
|
|
14
|
-
* This will display the web view in a larger modal presentation.
|
|
15
|
-
*
|
|
16
|
-
* @param event The event that triggered the request, must be a trusted event.
|
|
17
|
-
* @returns A promise that resolves when the effect is emitted.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* button.addEventListener('click', async (event) => {
|
|
21
|
-
* await requestImmersiveMode(event);
|
|
22
|
-
* });
|
|
23
|
-
*/
|
|
24
|
-
export declare function requestImmersiveMode(event: Event): Promise<void>;
|
|
25
|
-
/**
|
|
26
|
-
* Exits immersive mode for the web view.
|
|
27
|
-
* This will display the web view in an inline presentation.
|
|
28
|
-
*
|
|
29
|
-
* @param event The event that triggered the request, must be a trusted event.
|
|
30
|
-
* @returns A promise that resolves when the effect is emitted.
|
|
31
|
-
*
|
|
32
|
-
* @example
|
|
33
|
-
* button.addEventListener('click', async (event) => {
|
|
34
|
-
* await emitImmersiveModeEffect(event);
|
|
35
|
-
* });
|
|
36
|
-
*/
|
|
37
|
-
export declare function exitImmersiveMode(event: Event): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Adds a listener that is called when the immersive mode changes.
|
|
40
|
-
* The listener will be called with the new immersive mode, either 'inline' or 'immersive'.
|
|
41
|
-
*
|
|
42
|
-
* @param callback The callback to be called when the immersive mode changes.
|
|
43
|
-
*/
|
|
44
|
-
export declare function addImmersiveModeChangeEventListener(callback: ImmersiveListener): void;
|
|
45
|
-
/**
|
|
46
|
-
* Removes a listener that was previously added with `addImmersiveModeChangeEventListener`.
|
|
47
|
-
*
|
|
48
|
-
* @param callback The callback to be removed.
|
|
49
|
-
*/
|
|
50
|
-
export declare function removeImmersiveModeChangeEventListener(callback: ImmersiveListener): void;
|
|
51
|
-
//# sourceMappingURL=immersive-mode.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"immersive-mode.d.ts","sourceRoot":"","sources":["../../src/effects/immersive-mode.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEnD;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,aAAa,EAAE,aAAa,KAAK,IAAI,CAAC;AAIvE;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAErF;AAED;;;;GAIG;AACH,wBAAgB,sCAAsC,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAExF"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { WebViewImmersiveMode } from '@devvit/protos/types/devvit/ui/effects/web_view/v1alpha/immersive_mode.js';
|
|
2
|
-
import { emitEffect } from '@devvit/shared-types/client/emit-effect.js';
|
|
3
|
-
const immersiveListeners = new Set();
|
|
4
|
-
/**
|
|
5
|
-
* Requests immersive mode for the web view.
|
|
6
|
-
* This will display the web view in a larger modal presentation.
|
|
7
|
-
*
|
|
8
|
-
* @param event The event that triggered the request, must be a trusted event.
|
|
9
|
-
* @returns A promise that resolves when the effect is emitted.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* button.addEventListener('click', async (event) => {
|
|
13
|
-
* await requestImmersiveMode(event);
|
|
14
|
-
* });
|
|
15
|
-
*/
|
|
16
|
-
export function requestImmersiveMode(event) {
|
|
17
|
-
return emitImmersiveModeEffect(2, event);
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Exits immersive mode for the web view.
|
|
21
|
-
* This will display the web view in an inline presentation.
|
|
22
|
-
*
|
|
23
|
-
* @param event The event that triggered the request, must be a trusted event.
|
|
24
|
-
* @returns A promise that resolves when the effect is emitted.
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* button.addEventListener('click', async (event) => {
|
|
28
|
-
* await emitImmersiveModeEffect(event);
|
|
29
|
-
* });
|
|
30
|
-
*/
|
|
31
|
-
export function exitImmersiveMode(event) {
|
|
32
|
-
return emitImmersiveModeEffect(1, event);
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Adds a listener that is called when the immersive mode changes.
|
|
36
|
-
* The listener will be called with the new immersive mode, either 'inline' or 'immersive'.
|
|
37
|
-
*
|
|
38
|
-
* @param callback The callback to be called when the immersive mode changes.
|
|
39
|
-
*/
|
|
40
|
-
export function addImmersiveModeChangeEventListener(callback) {
|
|
41
|
-
immersiveListeners.add(callback);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Removes a listener that was previously added with `addImmersiveModeChangeEventListener`.
|
|
45
|
-
*
|
|
46
|
-
* @param callback The callback to be removed.
|
|
47
|
-
*/
|
|
48
|
-
export function removeImmersiveModeChangeEventListener(callback) {
|
|
49
|
-
immersiveListeners.delete(callback);
|
|
50
|
-
}
|
|
51
|
-
async function emitImmersiveModeEffect(mode, event) {
|
|
52
|
-
if (!event.isTrusted) {
|
|
53
|
-
console.error('Immersive mode effect ignored due to untrusted event');
|
|
54
|
-
throw new Error('Untrusted event');
|
|
55
|
-
}
|
|
56
|
-
const type = 9;
|
|
57
|
-
await emitEffect({ type, immersiveMode: { immersiveMode: mode } });
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Handles incoming messages from the client, like when the user closes the immersive modal
|
|
61
|
-
*/
|
|
62
|
-
if (typeof addEventListener === 'function') {
|
|
63
|
-
addEventListener('message', (event) => {
|
|
64
|
-
const { type, data } = event.data;
|
|
65
|
-
if (type !== 'devvit-message') {
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
if (!data?.immersiveModeEvent) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
const immersiveMode = event.data.data?.immersiveModeEvent?.immersiveMode;
|
|
72
|
-
const modeString = immersiveMode === 2 ? 'immersive' : 'inline';
|
|
73
|
-
immersiveListeners.forEach((listener) => listener(modeString));
|
|
74
|
-
});
|
|
75
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"immersive-mode.test.d.ts","sourceRoot":"","sources":["../../src/effects/immersive-mode.test.ts"],"names":[],"mappings":""}
|
package/index.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|