diff --git a/web/src/App.tsx b/web/src/App.tsx
index da4dbac..9f18ab5 100644
--- a/web/src/App.tsx
+++ b/web/src/App.tsx
@@ -12,6 +12,7 @@ import ListMenu from './features/menu/list';
import Dev from './features/dev';
import { isEnvBrowser } from './utils/misc';
import SkillCheck from './features/skillcheck';
+import PlanetMenu from './features/menu/planet';
const App: React.FC = () => {
useNuiEvent('setClipboard', (data: string) => {
@@ -30,6 +31,7 @@ const App: React.FC = () => {
+
{isEnvBrowser() && }
>
diff --git a/web/src/features/menu/planet/index.tsx b/web/src/features/menu/planet/index.tsx
new file mode 100644
index 0000000..a767fa0
--- /dev/null
+++ b/web/src/features/menu/planet/index.tsx
@@ -0,0 +1,81 @@
+import { ActionIcon, Box, Tooltip } from '@mantine/core';
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { IconProp } from '@fortawesome/fontawesome-svg-core';
+
+const radius = 60;
+
+// https://codesandbox.io/embed/circular-menu-e94ug
+function getTransform(index: number, totalItems: number) {
+ const value = index / totalItems;
+
+ const x = radius * Math.cos(Math.PI * 2 * (value - 0.25));
+ const y = radius * Math.sin(Math.PI * 2 * (value - 0.25));
+
+ return `translate(${x}px, ${y}px)`;
+}
+
+const items: { icon: IconProp; label: string }[] = [
+ { icon: 'handcuffs', label: 'Arrest' },
+ { icon: 'warehouse', label: 'Garage' },
+ { icon: 'heart', label: 'Info' },
+ { icon: 'handcuffs', label: 'Arrest' },
+ { icon: 'warehouse', label: 'Garage' },
+ { icon: 'heart', label: 'Info' },
+];
+
+const PlanetMenu: React.FC = () => {
+ return (
+
+
+
+
+
+ {items.map((item, index) => (
+ ({
+ transform: getTransform(index, items.length),
+ position: 'absolute',
+ width: 40,
+ height: 40,
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'center',
+ borderRadius: '50%',
+ backgroundColor: theme.colors.dark[6],
+ color: theme.colors.dark[0],
+ boxShadow: theme.shadows.sm,
+ padding: 12,
+ '&:hover': {
+ backgroundColor: theme.colors.dark[5],
+ cursor: 'pointer',
+ },
+ })}
+ >
+
+
+ ))}
+
+
+ );
+};
+
+export default PlanetMenu;