tweak demo

This commit is contained in:
barnabasmolnar
2026-06-03 16:04:37 +02:00
parent f472af04a9
commit db73e30eae
@@ -118,8 +118,9 @@ export default function ExampleApp({
{}, {},
); );
const [comment, setComment] = useState<Comment | null>(null); const [comment, setComment] = useState<Comment | null>(null);
const [hideAllForFadeDemo, setHideAllForFadeDemo] = useState(showFadeDemo); const [hideAllForFadeDemo, setHideAllForFadeDemo] = useState(false);
const [fadeDemoNextIndex, setFadeDemoNextIndex] = useState(0); const [fadeDemoNextIndex, setFadeDemoNextIndex] = useState(0);
const [fadeDemoElementIds, setFadeDemoElementIds] = useState<string[]>([]);
const initialStatePromiseRef = useRef<{ const initialStatePromiseRef = useRef<{
promise: ResolvablePromise<ExcalidrawInitialDataState | null>; promise: ResolvablePromise<ExcalidrawInitialDataState | null>;
@@ -213,7 +214,10 @@ export default function ExampleApp({
onPointerDown, onPointerDown,
onScrollChange: rerenderCommentIcons, onScrollChange: rerenderCommentIcons,
validateEmbeddable: true, validateEmbeddable: true,
resolveRenderOpacity: hideAllForFadeDemo ? () => 0 : undefined, resolveRenderOpacity: hideAllForFadeDemo
? (element: NonDeletedExcalidrawElement) =>
fadeDemoElementIds.includes(element.id) ? 0 : undefined
: undefined,
}, },
<> <>
{excalidrawAPI && ( {excalidrawAPI && (
@@ -678,14 +682,30 @@ export default function ExampleApp({
return; return;
} }
const elements = excalidrawAPI.getSceneElements(); setFadeDemoElementIds(
excalidrawAPI.getSceneElements().map((element) => element.id),
);
excalidrawAPI.clearElementOpacityOverrides();
setHideAllForFadeDemo(true);
setFadeDemoNextIndex(0);
}}
>
Hide every element
</button>
<button
onClick={() => {
if (!excalidrawAPI || !hideAllForFadeDemo) {
return;
}
const elements = excalidrawAPI
.getSceneElements()
.filter((element) => fadeDemoElementIds.includes(element.id));
if (!elements.length) { if (!elements.length) {
return; return;
} }
setHideAllForFadeDemo(true);
const nextIndex = const nextIndex =
fadeDemoNextIndex >= elements.length fadeDemoNextIndex >= elements.length
? 0 ? 0
@@ -695,10 +715,6 @@ export default function ExampleApp({
excalidrawAPI.clearElementOpacityOverrides(); excalidrawAPI.clearElementOpacityOverrides();
} }
console.info("Fading in element", {
element: elements[nextIndex],
});
excalidrawAPI.fadeElement({ excalidrawAPI.fadeElement({
id: elements[nextIndex].id, id: elements[nextIndex].id,
from: 0, from: 0,
@@ -713,12 +729,66 @@ export default function ExampleApp({
</button> </button>
<button <button
onClick={() => { onClick={() => {
excalidrawAPI?.clearElementOpacityOverrides(); if (!excalidrawAPI || !hideAllForFadeDemo) {
setHideAllForFadeDemo(true); return;
setFadeDemoNextIndex(0); }
const elements = excalidrawAPI
.getSceneElements()
.filter((element) => fadeDemoElementIds.includes(element.id));
if (!elements.length) {
return;
}
elements.forEach((element) => {
excalidrawAPI.fadeElement({
id: element.id,
from: 0,
to: 100,
duration: 500,
});
});
setFadeDemoNextIndex(elements.length);
}} }}
> >
Reset fade demo Fade in all
</button>
<button
onClick={() => {
if (!excalidrawAPI || !hideAllForFadeDemo) {
return;
}
const elements = excalidrawAPI
.getSceneElements()
.filter((element) => fadeDemoElementIds.includes(element.id));
if (!elements.length) {
return;
}
const prevIndex = Math.min(
fadeDemoNextIndex - 1,
elements.length - 1,
);
if (prevIndex < 0) {
return;
}
excalidrawAPI.fadeElement({
id: elements[prevIndex].id,
from: 100,
to: 0,
duration: 500,
});
setFadeDemoNextIndex(prevIndex);
}}
>
Fade out prev element
</button> </button>
</> </>
)} )}