- {label &&
}
-
-
+
+
+ {label &&
}
+
+ {message &&
{message}
}
- {message && {message}
}
-
+
);
}
\ No newline at end of file
diff --git a/app/components/LoadingDots.tsx b/app/components/LoadingDots.tsx
index 3abfa49eb6..2a1c53e4fa 100644
--- a/app/components/LoadingDots.tsx
+++ b/app/components/LoadingDots.tsx
@@ -1,22 +1,19 @@
import { useState, useEffect } from 'react';
+import { Transition } from '@headlessui/react';
import { twMerge } from 'tailwind-merge';
import { H4 } from '.';
interface LoadingDotsProps {
className?: string;
- show?: boolean;
- transition?: boolean;
- transitionDuration?: number;
+ isShowing?: boolean;
};
interface LoadingDotsInnerProps {
className?: string;
- show?: boolean;
+ isShowing?: boolean;
type?: 'typing'|'bricks';
message?: string;
- transition?: boolean;
- transitionDuration?: number;
};
export const LoadingDotsTyping = (props: LoadingDotsProps)=>{
@@ -32,54 +29,34 @@ export const LoadingDotsBricks = (props: LoadingDotsProps)=>{
export function LoadingDots({
className,
- show=true,
- transition = false,
+ isShowing=true,
type = 'typing',
message,
- transitionDuration = 1000,
}: LoadingDotsInnerProps){
- const [state, setState] = useState<'loading'|'loaded'|'completed'>('loading');
- const transitionClasses =
- (transition ? `transition-opacity duration-${transitionDuration} `: "")
- + (state === 'loading' ? 'opacity-100' : 'opacity-0');
+ const classNames = twMerge("w-full h-full flex flex-col justify-center items-center bg-ui-background gap-6", className);
- const classNames = twMerge("w-full h-full flex flex-col justify-center items-center bg-ui-background gap-6",transitionClasses, className);
- useEffect(()=>{
- if(!show){
- if(transition){
- setState((curr)=>{
- if (curr === 'loading') return 'loaded'
- else return curr;
- });
- setTimeout(()=>setState('completed'), 2000);
- } else {
- setState('completed');
+ return(
+
+ { type==='typing' &&
+
}
- }else{
- setState((curr) => {
- if (curr!=='loading') return 'loading';
- else return curr;
- });
- }
- }, [show, transition]);
-
- if(state!== 'completed'){
- return(
-
- { type==='typing' &&
-
- }
- { type==='bricks' &&
-
- }
- {
- message &&
-
{message}
- }
-
- );
- }else{
- return null;
- }
+ { type==='bricks' &&
+
+ }
+ {
+ message &&
+ {message}
+ }
+
+ );
};
diff --git a/app/components/Typography.tsx b/app/components/Typography.tsx
new file mode 100644
index 0000000000..f2c0bda536
--- /dev/null
+++ b/app/components/Typography.tsx
@@ -0,0 +1,31 @@
+import { twMerge } from "tailwind-merge";
+
+interface TypogProps {
+ className?: string;
+ children: React.ReactNode;
+}
+const baseTypo = "text-white";
+
+export const H1 = ({className,children,}:TypogProps)=>
+
{children}
;
+
+export const H2 = ({className,children,}:TypogProps)=>
+
{children}
;
+
+export const H3 = ({className,children,}:TypogProps)=>
+
{children}
;
+
+export const H4 = ({className,children,}:TypogProps)=>
+
{children}
;
+
+ export const Label = ({className,children,}:TypogProps)=>
+
;
+
+export const H5 = ({className,children,}:TypogProps)=>
+
{children}
;
+
+export const H6 = ({className,children,}:TypogProps)=>
+
{children}
;
+
+export const P = ({className,children,}:TypogProps)=>
+
{children}
;
\ No newline at end of file
diff --git a/app/components/index.tsx b/app/components/index.tsx
index 5dabccba07..323db7b12c 100644
--- a/app/components/index.tsx
+++ b/app/components/index.tsx
@@ -3,7 +3,7 @@ import { ButtonIcon } from "./ButtonIcon";
import { ButtonLink } from "./ButtonLink";
import { ButtonIconSelect } from "./ButtonIconSelect";
import { Input } from "./Input";
-import { H4 } from "./H4";
+import { H1, H2, H3, H4, H5, H6, P, Label} from "./Typography";
import { ItemPicker } from "./ItemPicker";
import { Textarea } from "./Textarea";
import { LoadingBar } from "./LoadingBar";
@@ -14,7 +14,7 @@ export {
ButtonIcon,
ButtonLink,
ButtonIconSelect,
- H4,
+ H1,H2,H3,H4,H5,H6,P,Label,
ItemPicker,
Textarea,
Input,
diff --git a/app/modules/SidePanel/SidePanel.tsx b/app/modules/SidePanel/SidePanel.tsx
index fbb07a8b56..1181302cb7 100644
--- a/app/modules/SidePanel/SidePanel.tsx
+++ b/app/modules/SidePanel/SidePanel.tsx
@@ -1,5 +1,4 @@
import { useState } from "react";
-import { Transition } from "@headlessui/react";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import {
faChevronLeft,
@@ -14,24 +13,20 @@ export const SidePanel = ({ children }: Props) => {
const [isVisible, setIsVisible] = useState(true);
return (
-
+
-
+
{children}
-
+
);
};
diff --git a/app/modules/SidePanelOld/SidePanelInnerOld.tsx b/app/modules/SidePanelOld/SidePanelInnerOld.tsx
deleted file mode 100644
index 3112e81c5d..0000000000
--- a/app/modules/SidePanelOld/SidePanelInnerOld.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import { useCallback, useLayoutEffect, useState } from "react";
-import { Dialog } from "@headlessui/react";
-
-import { faXmark } from "@fortawesome/pro-solid-svg-icons";
-import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-
-import { TOP_BAR_HEIGHT } from "~/constants";
-
-export const SidePanelInner = ({
- title,
- children,
- closeCallback,
-}: {
- title?: string;
- children: React.ReactNode;
- closeCallback: () => void;
-}) => {
- const [height, setHeight] = useState(0);
- const handleWindowResize = useCallback(() => {
- if (window) {
- setHeight(Math.ceil((window.innerHeight * 3) / 4) - TOP_BAR_HEIGHT);
- }
- return 0;
- }, []);
-
- useLayoutEffect(() => {
- handleWindowResize();
- window.addEventListener("resize", handleWindowResize);
- return () => {
- window.removeEventListener("resize", handleWindowResize);
- };
- }, [handleWindowResize]);
-
- return (
-
-
-
- {!title &&
}
- {title && (
-
- {title}
-
- )}
-
-
-
-
-
-
{children}
-
- );
-};
diff --git a/app/modules/SidePanelOld/SidePanelOld.tsx b/app/modules/SidePanelOld/SidePanelOld.tsx
deleted file mode 100644
index b46e9841c7..0000000000
--- a/app/modules/SidePanelOld/SidePanelOld.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import { Fragment, useState } from "react";
-import { Dialog, Transition } from "@headlessui/react";
-import { faGears } from "@fortawesome/pro-solid-svg-icons";
-import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-
-import { Button } from "~/components/Button";
-
-import { SidePanelInner } from "./SidePanelInnerOld";
-
-interface SidePanelPropsI {
- title?: string;
- children: React.ReactNode;
-}
-
-export const SidePanel = ({ title, children }: SidePanelPropsI) => {
- const [open, setOpen] = useState
(false);
- const handleOpen = () => setOpen(true);
- const handleClose = () => setOpen(false);
-
- return (
- <>
-
-
-
-
- >
- );
-};
diff --git a/app/modules/SidePanelOld/index.tsx b/app/modules/SidePanelOld/index.tsx
deleted file mode 100644
index 5f4f8914f6..0000000000
--- a/app/modules/SidePanelOld/index.tsx
+++ /dev/null
@@ -1 +0,0 @@
-export { SidePanel } from "./SidePanelOld";
diff --git a/app/modules/Tabs/Tabs.tsx b/app/modules/Tabs/Tabs.tsx
index 3a83dfbd65..9b32021140 100644
--- a/app/modules/Tabs/Tabs.tsx
+++ b/app/modules/Tabs/Tabs.tsx
@@ -19,7 +19,7 @@ export const Tabs = ({ tabs: tabProps }: { tabs: TabType[] }) => {
);
return (
-
+
{tabs.map((tab, idx) => (
@@ -31,9 +31,9 @@ export const Tabs = ({ tabs: tabProps }: { tabs: TabType[] }) => {
))}
-
+
{tabs.map((tab, idx) => (
-
+
{tab.children}
))}
diff --git a/app/pages/PageCube/PageCube.tsx b/app/pages/PageCube/PageCube.tsx
index 54faf66a60..f6d2062e5a 100644
--- a/app/pages/PageCube/PageCube.tsx
+++ b/app/pages/PageCube/PageCube.tsx
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useEffect, useRef, useState } from "react";
+import { useCallback, useEffect, useRef, useState } from "react";
import { faChevronLeft } from "@fortawesome/pro-solid-svg-icons";
@@ -6,7 +6,7 @@ import { Button } from "~/components/Button";
import { ButtonLink } from "~/components/ButtonLink";
import { TopBarHelmet } from "~/modules/TopBarHelmet";
-import { SidePanel } from "~/modules/SidePanelOld";
+import { SidePanel } from "~/modules/SidePanel";
import { SceneWithCube } from "./SceneWithCube";
export const PageCube = () => {
@@ -64,7 +64,7 @@ export const PageCube = () => {
Ration X: {rotationX ? rotationX : ""}
Ration Y: {rotationY ? rotationY : ""}
-
+
Side Panel Context
diff --git a/app/pages/PageEnigma/PageEnigmaComponent.tsx b/app/pages/PageEnigma/PageEnigmaComponent.tsx
index 7d442cd9d6..0c94744c75 100644
--- a/app/pages/PageEnigma/PageEnigmaComponent.tsx
+++ b/app/pages/PageEnigma/PageEnigmaComponent.tsx
@@ -1,8 +1,8 @@
-import { useEffect, useReducer } from "react";
+import { useReducer, useEffect } from "react";
import { faSparkles } from "@fortawesome/pro-solid-svg-icons";
-import { Button, LoadingDots } from "~/components";
+import { Button, LoadingBar, LoadingDots } from "~/components";
import { TopBarHelmet } from "~/modules/TopBarHelmet/TopBarHelmet";
import { SidePanel } from "~/modules/SidePanel";
import { Controls3D } from "./comps/Controls3D";
@@ -14,8 +14,12 @@ import { SidePanelTabs } from "./comps/SidePanelTabs";
import { EngineProvider } from "./contexts/EngineProvider";
import { AppUIProvider } from "./contexts/AppUiContext";
-import { reducer, initialState, ACTION_TYPES } from "./reducer";
-import { VIEW_MODES } from "./reducer/types";
+import {
+ appUiReducer,
+ appUiInitialStateValues,
+ APPUI_ACTION_TYPES,
+ APPUI_VIEW_MODES,
+} from "./reducers";
import { ViewSideBySide } from "./comps/ViewSideBySide";
import {
canDrop,
@@ -29,19 +33,14 @@ import {
import { useSignals } from "@preact/signals-react/runtime";
export const PageEnigmaComponent = () => {
- const [appUiState, dispatchAppUiState] = useReducer(reducer, initialState);
useSignals();
const { currX, currY } = currPosition.value;
- useEffect(() => {
- setTimeout(
- () =>
- dispatchAppUiState({
- type: ACTION_TYPES.HIDE_EDITOR_LOADER,
- }),
- 500,
- );
- }, []);
+ const [appUiState, dispatchAppUiState] = useReducer(
+ appUiReducer,
+ appUiInitialStateValues,
+ );
+ useSignals();
const lowerHeight = timelineHeight.value;
return (
@@ -62,7 +61,7 @@ export const PageEnigmaComponent = () => {
- {appUiState.viewMode === VIEW_MODES.SIDE_BY_SIDE && (
+ {appUiState.viewMode === APPUI_VIEW_MODES.SIDE_BY_SIDE && (
)}
+
diff --git a/app/pages/PageEnigma/comps/ControlsTopButtons/ControlsTopButtons.tsx b/app/pages/PageEnigma/comps/ControlsTopButtons/ControlsTopButtons.tsx
index 3ed0d03d8d..01670a0220 100644
--- a/app/pages/PageEnigma/comps/ControlsTopButtons/ControlsTopButtons.tsx
+++ b/app/pages/PageEnigma/comps/ControlsTopButtons/ControlsTopButtons.tsx
@@ -1,10 +1,13 @@
import { useContext, useState } from "react";
-import { Button, H4, Input } from "~/components";
+import { Button, Input } from "~/components";
import { ButtonDialogue } from "~/modules/ButtonDialogue";
+import { AppUiContext } from "../../contexts/AppUiContext";
import { EngineContext } from "../../contexts/EngineContext";
+import { APPUI_ACTION_TYPES } from "../../reducers";
export const ControlsTopButtons = () => {
const editorEngine = useContext(EngineContext);
+ const [ appUiState, dispatchAppUiState ] = useContext(AppUiContext);
const [sceneName, setSceneName] = useState
("");
const [sceneToken, setSceneToken] = useState("");
@@ -18,21 +21,74 @@ export const ControlsTopButtons = () => {
editorEngine?.loadScene(sceneToken);
};
+
+ const handleButtonCameraView = () => {
+ editorEngine?.switchCameraView();
+ };
+
+ const handleButtonPlayBack = () => {
+ editorEngine?.startPlayback();
+ };
+
+ const handleButtonTest = () => {
+ if(appUiState?.showEditorLoadingBar.isShowing){
+ //TO GO TO A HUNDRED AND DISAPPER
+ dispatchAppUiState({
+ type: APPUI_ACTION_TYPES.UPDATE_EDITOR_LOADINGBAR,
+ payload:{
+ showEditorLoadingBar: {
+ progress: 100,
+ }
+ }
+ });
+ setTimeout(() => {
+ dispatchAppUiState({
+ type: APPUI_ACTION_TYPES.HIDE_EDITOR_LOADINGBAR,
+ });
+ }, 1000);
+ //END :TO GO TO A HUNDRED AND DISAPPER
+
+ //EAMPLE OF CHANING LOADING MESSAGE
+ // dispatchAppUiState({
+ // type: APPUI_ACTION_TYPES.UPDATE_EDITOR_LOADINGBAR,
+ // payload:{
+ // showEditorLoadingBar: {
+ // message: "new message",
+ // }
+ // }
+ // });
+ }else{
+ dispatchAppUiState({
+ type: APPUI_ACTION_TYPES.SHOW_EDITOR_LOADINGBAR,
+ payload:{
+ showEditorLoadingBar: {
+ message: 'display of LoadingBar triggered by Test Button',
+ progress: 10,
+ }
+ }
+
+ });
+ }
+ };
+
+ //const handleButtonRender = () => {
+ // editorEngine?.take_timeline_cam_clip();
+ //};
+
+ const handleButtonRender = () => {
+ editorEngine?.generateVideo();
+ };
+
+ const handleButtonTakeFrame = () => {
+ editorEngine?.take_timeline_cam_clip();
+ };
+
// const handleButtonCameraView = () => {
// editorEngine?.change_camera_view();
// };
- const handleButtonPlayBack = () => {
- editorEngine?.start_playback();
- };
- const handleButtonLoad = () => {
-
-
- };
- const handleButtonRender = () => {
-
- };
- const handleButtonPlay = () => {};
+ const handleButtonLoad = () => {};
+ // const handleButtonRender = () => {};
return (
@@ -88,14 +144,24 @@ export const ControlsTopButtons = () => {
-
- Load
+
+ Test Button
+ Take Frame
Render
- Play
+ {/* Load
+ Render */}
+
+ Test
+
);
diff --git a/app/pages/PageEnigma/comps/ControlsVideo/ControlsVideo.tsx b/app/pages/PageEnigma/comps/ControlsVideo/ControlsVideo.tsx
index 5b1ad21ffe..07a7fc0eaa 100644
--- a/app/pages/PageEnigma/comps/ControlsVideo/ControlsVideo.tsx
+++ b/app/pages/PageEnigma/comps/ControlsVideo/ControlsVideo.tsx
@@ -1,3 +1,5 @@
+import { useContext } from "react";
+
import {
faBackwardFast,
faBackwardStep,
@@ -5,9 +7,12 @@ import {
faForwardStep,
faPlay,
} from "@fortawesome/pro-solid-svg-icons";
+import { EngineContext } from "../../contexts/EngineContext";
import { ButtonIcon } from "~/components";
export const ControlsVideo = () => {
+ const editorEngine = useContext(EngineContext);
+
const handleBackwardFast = () => {
console.log("Controls Video: Backward-Fast clicked");
};
@@ -16,6 +21,8 @@ export const ControlsVideo = () => {
};
const handlePlay = () => {
console.log("Controls Video: Play clicked");
+ editorEngine?.startPlayback();
+
};
const handleForwardStep = () => {
console.log("Controls Video: Forward-Step clicked");
diff --git a/app/pages/PageEnigma/comps/Helmet.tsx b/app/pages/PageEnigma/comps/Helmet.tsx
new file mode 100644
index 0000000000..a14e44a4de
--- /dev/null
+++ b/app/pages/PageEnigma/comps/Helmet.tsx
@@ -0,0 +1,24 @@
+import { useContext, useEffect, useState } from "react";
+import { faSparkles } from "@fortawesome/pro-solid-svg-icons";
+import { TopBarHelmet } from "~/modules/TopBarHelmet/TopBarHelmet";
+import { Button } from "~/components";
+import { EngineContext } from "../contexts/EngineContext";
+
+export const Helmet = () => {
+ const [helmetKey, setHelmetKey] = useState