-
+
+
+
+
+
+
-
Rotate/Zoom
-
-
-
-
-
-
-
+ {!isPlaying && (
+
+
-
-
+ )}
);
};
diff --git a/app/src/components/footer/shortcutHelper.tsx b/app/src/components/footer/shortcutHelper.tsx
new file mode 100644
index 0000000..8a15b2e
--- /dev/null
+++ b/app/src/components/footer/shortcutHelper.tsx
@@ -0,0 +1,328 @@
+import React from "react";
+
+import {
+ UndoIcon,
+ RedoIcon,
+ ESCIcon,
+ HelpIcon,
+ FindIcon,
+ InfoIcon,
+ CurserIcon,
+ DeleteIcon,
+ FreeHandIcon,
+ MeasurementToolIcon,
+ WallToolIcon,
+ ZoneToolIcon,
+ AisleToolIcon,
+ FloorToolIcon,
+ MoveIcon,
+ RotateIcon,
+ ToogleViewIcon,
+ UIVisiblityIcon,
+ FirstPersonViewIcon,
+ BuilderIcon,
+ SimulationIcon,
+ VisualizationIcon,
+ MarketplaceIcon,
+ CopyIcon,
+ PasteIcon,
+ DublicateIcon,
+ DuplicateInstanceIcon,
+ PlayIcon,
+ BrowserIcon,
+} from "../icons/ShortcutIcons";
+
+interface ShortcutItem {
+ keys: string[];
+ name?: string;
+ description: string;
+ icon: any;
+}
+
+interface ShortcutGroup {
+ category: string;
+ items: ShortcutItem[];
+}
+
+const ShortcutHelper = () => {
+ const shortcuts: ShortcutGroup[] = [
+ {
+ category: "Essential",
+ items: [
+ {
+ keys: ["CTRL", "+", "Z"],
+ name: "Undo",
+ description: "Undo Last action",
+ icon:
,
+ },
+ {
+ keys: ["CTRL", "+", "Y"],
+ name: "Redo",
+ description: "Redo Last action",
+ icon:
,
+ },
+ {
+ keys: ["ESC"],
+ name: "Escape",
+ description: "Reset to Cursor & Stop Playback",
+ icon:
,
+ },
+ {
+ keys: ["CTRL", "+", "H"],
+ name: "Help",
+ description: "Open Help",
+ icon:
,
+ },
+ {
+ keys: ["CTRL", "+", "F"],
+ name: "Find",
+ description: "Find / Search Functionality",
+ icon:
,
+ },
+ {
+ keys: ["CTRL", "+", "?"],
+ name: "Info",
+ description: "Show Shortcut Info",
+ icon:
,
+ },
+ ],
+ },
+ {
+ category: "Tools",
+ items: [
+ {
+ keys: ["V"],
+ name: "Cursor Tool",
+ description: "Activate Cursor tool",
+ icon:
,
+ },
+ {
+ keys: ["X"],
+ name: "Delete Tool",
+ description: "Activate Delete tool",
+ icon:
,
+ },
+ {
+ keys: ["H"],
+ name: "Freehand Tool",
+ description: "Activate Free-Hand tool",
+ icon:
,
+ },
+ {
+ keys: ["M"],
+ name: "Measurement Tool",
+ description: "Activate Measurement tool",
+ icon:
,
+ },
+ {
+ keys: ["Q", "OR", "6"],
+ name: "Wall Tool",
+ description: "Select Wall floor tool (2D)",
+ icon:
,
+ },
+ {
+ keys: ["E", "OR", "8"],
+ name: "Zone Tool",
+ description: "Select Draw zone tool (2D)",
+ icon:
,
+ },
+ {
+ keys: ["R", "OR", "7"],
+ name: "Aisle Tool",
+ description: "Select Aisle floor tool (2D)",
+ icon:
,
+ },
+ {
+ keys: ["T", "OR", "9"],
+ name: "Floor Tool",
+ description: "Select Draw floor tool (2D)",
+ icon:
,
+ },
+ {
+ keys: ["G"],
+ name: "Move Asset",
+ description: "Move Selected Asset",
+ icon:
,
+ },
+ {
+ keys: ["R"],
+ name: "Rotate Asset",
+ description: "Rotate Selected Asset",
+ icon:
,
+ },
+ ],
+ },
+ {
+ category: "View & Navigation",
+ items: [
+ {
+ keys: ["TAB"],
+ name: "Toggle View",
+ description: "Toggle between 2D & 3D views (Builder)",
+ icon:
,
+ },
+ {
+ keys: ["CTRL", "+", "\\"],
+ name: "Toggle UI",
+ description: "Toggle UI Visibility",
+ icon:
,
+ },
+ {
+ keys: ["CTRL", "+", "["],
+ name: "Toggle UI",
+ description: "Left Sidebar Visibility",
+ icon:
,
+ },
+ {
+ keys: ["CTRL", "+", "]"],
+ name: "Toggle UI",
+ description: "Right Sidebar Visibility",
+ icon:
,
+ },
+ {
+ keys: ["/"],
+ name: "First Person View",
+ description: "Switch to First-person View",
+ icon:
,
+ },
+ ],
+ },
+ {
+ category: "Module Switching",
+ items: [
+ {
+ keys: ["1"],
+ name: "Builder",
+ description: "Switch to Builder module",
+ icon:
,
+ },
+ {
+ keys: ["2"],
+ name: "Simulation",
+ description: "Switch to Simulation module",
+ icon:
,
+ },
+ {
+ keys: ["3"],
+ name: "Visualization",
+ description: "Switch to Visualization module",
+ icon:
,
+ },
+ {
+ keys: ["4"],
+ name: "Marketplace",
+ description: "Switch to Marketplace module",
+ icon:
,
+ },
+ ],
+ },
+ {
+ category: "Selection",
+ items: [
+ {
+ keys: ["CTRL", "+", "C"],
+ name: "Copy",
+ description: "Copy an Asset",
+ icon:
,
+ },
+ {
+ keys: ["CTRL", "+", "V"],
+ name: "Paste",
+ description: "Paste an Asset",
+ icon:
,
+ },
+ {
+ keys: ["CTRL", "+", "D"],
+ name: "Duplicate",
+ description: "Duplicate an Asset",
+ icon:
,
+ },
+ {
+ keys: ["ALT", "+", "D"],
+ name: "Duplicate (Instance)",
+ description: "Duplicate an Instanced Asset",
+ icon:
,
+ },
+ ],
+ },
+ {
+ category: "Simulation",
+ items: [
+ {
+ keys: ["CTRL", "+", "P"],
+ name: "Play",
+ description: "Play Simulation",
+ icon:
,
+ },
+ ],
+ },
+ {
+ category: "Miscellaneous",
+ items: [
+ {
+ keys: ["F5", "F11", "F12", "CTRL", "+", "R"],
+ name: "Browser Defaults",
+ description: "Reserved for browser defaults",
+ icon:
,
+ },
+ ],
+ },
+ ];
+
+ const [activeCategory, setActiveCategory] =
+ React.useState
("Essential");
+
+ const activeShortcuts =
+ shortcuts.find((group) => group.category === activeCategory)?.items || [];
+
+ return (
+
+
+
+ {shortcuts.map((group) => (
+
+ ))}
+
+
+
+
+ {activeShortcuts.map((item) => (
+
+
+
{item.icon}
+
+
{item.name}
+
{item.description}
+
+
+
+ {item.keys.map((key, i) => (
+
+ {key}
+
+ ))}
+
+
+ ))}
+
+
+ );
+};
+
+export default ShortcutHelper;
diff --git a/app/src/components/icons/ExportCommonIcons.tsx b/app/src/components/icons/ExportCommonIcons.tsx
index 9b66849..f20db7b 100644
--- a/app/src/components/icons/ExportCommonIcons.tsx
+++ b/app/src/components/icons/ExportCommonIcons.tsx
@@ -947,3 +947,22 @@ export const ErrorIcon = () => {
);
};
+
+export const LocationIcon = () => {
+ return (
+
+ );
+};
diff --git a/app/src/components/icons/RealTimeVisulationIcons.tsx b/app/src/components/icons/RealTimeVisulationIcons.tsx
index 84d8cca..c38560d 100644
--- a/app/src/components/icons/RealTimeVisulationIcons.tsx
+++ b/app/src/components/icons/RealTimeVisulationIcons.tsx
@@ -166,3 +166,6 @@ export function StockIncreseIcon() {
);
}
+
+
+
diff --git a/app/src/components/icons/ShortcutIcons.tsx b/app/src/components/icons/ShortcutIcons.tsx
new file mode 100644
index 0000000..b20948a
--- /dev/null
+++ b/app/src/components/icons/ShortcutIcons.tsx
@@ -0,0 +1,827 @@
+export function UndoIcon() {
+ return (
+
+ );
+}
+
+export function RedoIcon() {
+ return (
+
+ );
+}
+
+export function ESCIcon() {
+ return (
+
+ );
+}
+
+export function HelpIcon() {
+ return (
+
+ );
+}
+
+export function FindIcon() {
+ return (
+
+ );
+}
+
+export function InfoIcon() {
+ return (
+
+ );
+}
+
+export function CurserIcon() {
+ return (
+
+ );
+}
+
+export function DeleteIcon() {
+ return (
+
+ );
+}
+
+export function FreeHandIcon() {
+ return (
+
+ );
+}
+
+export function MeasurementToolIcon() {
+ return (
+
+ );
+}
+
+export function WallToolIcon() {
+ return (
+
+ );
+}
+
+export function ZoneToolIcon() {
+ return (
+
+ );
+}
+
+export function AisleToolIcon() {
+ return (
+
+ );
+}
+
+export function FloorToolIcon() {
+ return (
+
+ );
+}
+
+export function MoveIcon() {
+ return (
+
+ );
+}
+
+export function RotateIcon() {
+ return (
+
+ );
+}
+
+export function ToogleViewIcon() {
+ return (
+
+ );
+}
+
+export function UIVisiblityIcon() {
+ return (
+
+ );
+}
+
+export function FirstPersonViewIcon() {
+ return (
+
+ );
+}
+
+export function BuilderIcon() {
+ return (
+
+ );
+}
+
+export function SimulationIcon() {
+ return (
+
+ );
+}
+
+export function VisualizationIcon() {
+ return (
+
+ );
+}
+
+export function MarketplaceIcon() {
+ return (
+
+ );
+}
+
+export function CopyIcon() {
+ return (
+
+ );
+}
+
+export function PasteIcon() {
+ return (
+
+ );
+}
+
+export function DublicateIcon() {
+ return (
+
+ );
+}
+
+export function DuplicateInstanceIcon() {
+ return (
+
+ );
+}
+
+export function PlayIcon() {
+ return (
+
+ );
+}
+
+export function BrowserIcon() {
+ return (
+
+ );
+}
diff --git a/app/src/components/layout/sidebarLeft/Assets.tsx b/app/src/components/layout/sidebarLeft/Assets.tsx
index b23ce58..391675b 100644
--- a/app/src/components/layout/sidebarLeft/Assets.tsx
+++ b/app/src/components/layout/sidebarLeft/Assets.tsx
@@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react";
import Search from "../../ui/inputs/Search";
import { getCategoryAsset } from "../../../services/factoryBuilder/assest/assets/getCategoryAsset";
import { fetchAssets } from "../../../services/marketplace/fetchAssets";
-import { useSelectedItem } from "../../../store/store";
+import { useSelectedItem } from "../../../store/builder/store";
// images -------------------
import vehicle from "../../../assets/image/categories/vehicles.png";
@@ -139,6 +139,16 @@ const Assets: React.FC = () => {
src={asset?.thumbnail}
alt={asset.filename}
className="asset-image"
+ onPointerDown={() => {
+ setSelectedItem({
+ name: asset.filename,
+ id: asset.AssetID,
+ type:
+ asset.type === "undefined"
+ ? undefined
+ : asset.type
+ });
+ }}
/>
@@ -194,6 +204,8 @@ const Assets: React.FC = () => {
asset.type === "undefined"
? undefined
: asset.type,
+ category: asset.category,
+ subCategory: asset.subCategory
});
}}
/>
diff --git a/app/src/components/layout/sidebarLeft/visualization/widgets/Widgets.tsx b/app/src/components/layout/sidebarLeft/visualization/widgets/Widgets.tsx
index 655e641..89138c1 100644
--- a/app/src/components/layout/sidebarLeft/visualization/widgets/Widgets.tsx
+++ b/app/src/components/layout/sidebarLeft/visualization/widgets/Widgets.tsx
@@ -2,7 +2,7 @@ import ToggleHeader from "../../../../ui/inputs/ToggleHeader";
import Widgets2D from "./Widgets2D";
import Widgets3D from "./Widgets3D";
import WidgetsFloating from "./WidgetsFloating";
-import { useWidgetSubOption } from "../../../../../store/store";
+import { useWidgetSubOption } from "../../../../../store/builder/store";
const Widgets = () => {
const { widgetSubOption, setWidgetSubOption } = useWidgetSubOption();
diff --git a/app/src/components/layout/sidebarLeft/visualization/widgets/Widgets3D.tsx b/app/src/components/layout/sidebarLeft/visualization/widgets/Widgets3D.tsx
index 7457648..f3cf4f1 100644
--- a/app/src/components/layout/sidebarLeft/visualization/widgets/Widgets3D.tsx
+++ b/app/src/components/layout/sidebarLeft/visualization/widgets/Widgets3D.tsx
@@ -2,7 +2,7 @@ import widget1 from "../../../../../assets/image/3D/ProductionCapacity.png";
import widget2 from "../../../../../assets/image/3D/ReturnOfInvestment.png";
import widget3 from "../../../../../assets/image/3D/StateWorking.png";
import widget4 from "../../../../../assets/image/3D/Throughput.png";
-import { useAsset3dWidget } from "../../../../../store/store";
+import { useAsset3dWidget } from "../../../../../store/builder/store";
const Widgets3D = () => {
const widgets = [
{ name: "Widget 1", img: widget1 },
diff --git a/app/src/components/layout/sidebarRight/Header.tsx b/app/src/components/layout/sidebarRight/Header.tsx
index 9bfa4df..f4fa0cf 100644
--- a/app/src/components/layout/sidebarRight/Header.tsx
+++ b/app/src/components/layout/sidebarRight/Header.tsx
@@ -1,6 +1,6 @@
import React, { useState } from "react";
import orgImg from "../../../assets/image/orgTemp.png";
-import { useActiveUsers, useCamMode } from "../../../store/store";
+import { useActiveUsers, useCamMode } from "../../../store/builder/store";
import { ActiveUser } from "../../../types/users";
import CollaborationPopup from "../../templates/CollaborationPopup";
import { getAvatarColor } from "../../../modules/collaboration/functions/getAvatarColor";
diff --git a/app/src/components/layout/sidebarRight/SideBarRight.tsx b/app/src/components/layout/sidebarRight/SideBarRight.tsx
index d643d69..2c54666 100644
--- a/app/src/components/layout/sidebarRight/SideBarRight.tsx
+++ b/app/src/components/layout/sidebarRight/SideBarRight.tsx
@@ -13,7 +13,9 @@ import useToggleStore from "../../../store/useUIToggleStore";
import Visualization from "./visualization/Visualization";
import Analysis from "./analysis/Analysis";
import Simulations from "./simulation/Simulations";
-import { useSelectedFloorItem } from "../../../store/store";
+import useVersionHistoryStore, {
+ useSelectedFloorItem,
+} from "../../../store/builder/store";
import {
useSelectedEventData,
useSelectedEventSphere,
@@ -22,6 +24,7 @@ import GlobalProperties from "./properties/GlobalProperties";
import AsstePropertiies from "./properties/AssetProperties";
import ZoneProperties from "./properties/ZoneProperties";
import EventProperties from "./properties/eventProperties/EventProperties";
+import VersionHistory from "./versionHisory/VersionHistory";
const SideBarRight: React.FC = () => {
const { activeModule } = useModuleStore();
@@ -30,6 +33,7 @@ const SideBarRight: React.FC = () => {
const { selectedFloorItem } = useSelectedFloorItem();
const { selectedEventData } = useSelectedEventData();
const { selectedEventSphere } = useSelectedEventSphere();
+ const { viewVersionHistory, setVersionHistory } = useVersionHistoryStore();
// Reset activeList whenever activeModule changes
useEffect(() => {
@@ -64,7 +68,10 @@ const SideBarRight: React.FC = () => {
className={`sidebar-action-list ${
subModule === "properties" ? "active" : ""
}`}
- onClick={() => setSubModule("properties")}
+ onClick={() => {
+ setSubModule("properties");
+ setVersionHistory(false);
+ }}
>
properties
@@ -76,7 +83,10 @@ const SideBarRight: React.FC = () => {
className={`sidebar-action-list ${
subModule === "simulations" ? "active" : ""
}`}
- onClick={() => setSubModule("simulations")}
+ onClick={() => {
+ setSubModule("simulations");
+ setVersionHistory(false);
+ }}
>
simulations
@@ -85,7 +95,10 @@ const SideBarRight: React.FC = () => {
className={`sidebar-action-list ${
subModule === "mechanics" ? "active" : ""
}`}
- onClick={() => setSubModule("mechanics")}
+ onClick={() => {
+ setSubModule("mechanics");
+ setVersionHistory(false);
+ }}
>
mechanics
@@ -94,7 +107,10 @@ const SideBarRight: React.FC = () => {
className={`sidebar-action-list ${
subModule === "analysis" ? "active" : ""
}`}
- onClick={() => setSubModule("analysis")}
+ onClick={() => {
+ setSubModule("analysis");
+ setVersionHistory(false);
+ }}
>
analysis
@@ -103,8 +119,18 @@ const SideBarRight: React.FC = () => {
)}
)}
+
+ {toggleUIRight && viewVersionHistory && (
+
+ )}
+
{/* process builder */}
{toggleUIRight &&
+ !viewVersionHistory &&
subModule === "properties" &&
activeModule !== "visualization" &&
!selectedFloorItem && (
@@ -115,6 +141,7 @@ const SideBarRight: React.FC = () => {
)}
{toggleUIRight &&
+ !viewVersionHistory &&
subModule === "properties" &&
activeModule !== "visualization" &&
selectedFloorItem && (
@@ -124,7 +151,9 @@ const SideBarRight: React.FC = () => {