Skip to content

Commit b6b9607

Browse files
committed
Add image gen and video gen options & add relevant react-api hooks
1 parent 83b7d34 commit b6b9607

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+885
-199
lines changed

.changeset/lazy-zebras-mate.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@pulse-editor/shared-utils": patch
3+
"@pulse-editor/react-api": patch
4+
---
5+
6+
Add useLoading, image gen, video gen hooks

.changeset/pre.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"early-pumas-listen",
2323
"hot-symbols-fry",
2424
"large-moose-tap",
25+
"lazy-zebras-mate",
2526
"mighty-ghosts-crash",
2627
"real-knives-rest",
2728
"rude-ducks-design",

npm-packages/react-api/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# @pulse-editor/react-api
22

3+
## 0.1.1-alpha.17
4+
5+
### Patch Changes
6+
7+
- Add useLoading, image gen, video gen hooks
8+
- Updated dependencies
9+
- @pulse-editor/shared-utils@0.1.1-alpha.17
10+
311
## 0.1.1-alpha.16
412

513
### Patch Changes

npm-packages/react-api/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@pulse-editor/react-api",
3-
"version": "0.1.1-alpha.16",
3+
"version": "0.1.1-alpha.17",
44
"main": "dist/main.js",
55
"files": [
66
"dist"
@@ -38,7 +38,7 @@
3838
"typescript-eslint": "^8.30.1"
3939
},
4040
"peerDependencies": {
41-
"@pulse-editor/shared-utils": "0.1.1-alpha.16",
41+
"@pulse-editor/shared-utils": "0.1.1-alpha.17",
4242
"react": "^19.0.0",
4343
"react-dom": "^19.0.0"
4444
}

npm-packages/react-api/src/hooks/editor/use-file-view.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import useIMC from "../../lib/use-imc";
88

99
export default function useFileView() {
1010
const [viewModel, setViewModel] = useState<ViewModel | undefined>(undefined);
11-
const [isLoaded, setIsLoaded] = useState(false);
1211

1312
const receiverHandlerMap = new Map<
1413
IMCMessageTypeEnum,
@@ -25,12 +24,6 @@ export default function useFileView() {
2524
}
2625
}, [isReady]);
2726

28-
useEffect(() => {
29-
if (isLoaded) {
30-
imc?.sendMessage(IMCMessageTypeEnum.Loaded);
31-
}
32-
}, [isLoaded, imc]);
33-
3427
function updateViewModel(viewModel: ViewModel) {
3528
// sender.sendMessage(ViewBoxMessageTypeEnum.ViewFile, JSON.stringify(file));
3629
imc?.sendMessage(IMCMessageTypeEnum.WriteViewFile, viewModel);
@@ -39,6 +32,5 @@ export default function useFileView() {
3932
return {
4033
viewModel,
4134
updateViewModel,
42-
setIsLoaded,
4335
};
4436
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { useEffect, useState } from "react";
2+
import useIMC from "../../lib/use-imc";
3+
import { IMCMessage, IMCMessageTypeEnum } from "@pulse-editor/shared-utils";
4+
5+
export default function useLoading() {
6+
const receiverHandlerMap = new Map<
7+
IMCMessageTypeEnum,
8+
(senderWindow: Window, message: IMCMessage) => Promise<void>
9+
>();
10+
11+
const { imc, isReady } = useIMC(receiverHandlerMap);
12+
const [isLoading, setIsLoading] = useState(true);
13+
14+
useEffect(() => {
15+
if (isReady) {
16+
imc?.sendMessage(IMCMessageTypeEnum.UseLoading, {
17+
isLoading,
18+
});
19+
}
20+
}, [isLoading]);
21+
22+
function toggleLoading(isLoading: boolean) {
23+
setIsLoading((prev) => isLoading);
24+
}
25+
26+
return {
27+
isReady,
28+
toggleLoading,
29+
};
30+
}

npm-packages/react-api/src/hooks/modality/use-diffusion.ts

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import {
2+
ImageModelConfig,
3+
IMCMessage,
4+
IMCMessageTypeEnum,
5+
} from "@pulse-editor/shared-utils";
6+
import useIMC from "../../lib/use-imc";
7+
8+
export default function useImageGen() {
9+
const receiverHandlerMap = new Map<
10+
IMCMessageTypeEnum,
11+
(senderWindow: Window, message: IMCMessage) => Promise<void>
12+
>();
13+
14+
const { imc, isReady } = useIMC(receiverHandlerMap);
15+
16+
/**
17+
*
18+
* @param textPrompt The text prompt to generate the image.
19+
* @param imagePrompt A URL to an image or an image in an ArrayBuffer.
20+
* @param imageModelConfig (optional) The image model config to use.
21+
* @returns The generated image in an ArrayBuffer.
22+
*/
23+
async function runImageGen(
24+
textPrompt?: string,
25+
imagePrompt?: string | ArrayBuffer,
26+
// LLM config is optional, if not provided, the default config will be used.
27+
imageModelConfig?: ImageModelConfig
28+
): Promise<ArrayBuffer> {
29+
if (!imc) {
30+
throw new Error("IMC not initialized.");
31+
}
32+
33+
if (!textPrompt && !imagePrompt) {
34+
throw new Error("At least one of textPrompt or imagePrompt is required.");
35+
}
36+
37+
const result = await imc
38+
.sendMessage(IMCMessageTypeEnum.UseImageGen, {
39+
textPrompt,
40+
imagePrompt,
41+
imageModelConfig,
42+
})
43+
.then((response) => {
44+
return response as ArrayBuffer;
45+
});
46+
47+
return result;
48+
}
49+
50+
return {
51+
runImageGen,
52+
isReady,
53+
};
54+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import {
2+
IMCMessage,
3+
IMCMessageTypeEnum,
4+
VideoModelConfig,
5+
} from "@pulse-editor/shared-utils";
6+
import useIMC from "../../lib/use-imc";
7+
8+
export default function useVideoGen() {
9+
const receiverHandlerMap = new Map<
10+
IMCMessageTypeEnum,
11+
(senderWindow: Window, message: IMCMessage) => Promise<void>
12+
>();
13+
14+
const { imc, isReady } = useIMC(receiverHandlerMap);
15+
16+
/**
17+
*
18+
* @param textPrompt The text prompt to generate the video.
19+
* @param imagePrompt A URL to an image or an image in an ArrayBuffer.
20+
* @param videoModelConfig (optional) The video model config to use.
21+
* @returns The generated video in an ArrayBuffer.
22+
*/
23+
async function runVideoGen(
24+
textPrompt?: string,
25+
imagePrompt?: string | ArrayBuffer,
26+
// LLM config is optional, if not provided, the default config will be used.
27+
videoModelConfig?: VideoModelConfig
28+
): Promise<ArrayBuffer> {
29+
if (!imc) {
30+
throw new Error("IMC not initialized.");
31+
}
32+
33+
if (!textPrompt && !imagePrompt) {
34+
throw new Error("At least one of textPrompt or imagePrompt is required.");
35+
}
36+
37+
const result = await imc
38+
.sendMessage(IMCMessageTypeEnum.UseVideoGen, {
39+
textPrompt,
40+
imagePrompt,
41+
videoModelConfig,
42+
})
43+
.then((response) => {
44+
return response as ArrayBuffer;
45+
});
46+
47+
return result;
48+
}
49+
50+
return {
51+
runVideoGen,
52+
isReady,
53+
};
54+
}

npm-packages/react-api/src/hooks/terminal/use-terminal.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ export default function useTerminal() {
2929

3030
setWebsocketUrl(websocketUrl);
3131
setProjectHomePath(projectHomePath);
32-
33-
imc.sendMessage(IMCMessageTypeEnum.Loaded);
3432
});
3533
}
3634
}, [isReady]);

0 commit comments

Comments
 (0)