made system changes
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
html, body, #__next {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Segoe UI Variable', 'Segoe UI', system-ui, -apple-system, sans-serif;
|
||||
background: #f5f5f5;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import type { ReactNode } from 'react';
|
||||
import { Providers } from './providers';
|
||||
import './globals.css';
|
||||
|
||||
export const metadata = {
|
||||
title: 'Originmain',
|
||||
description: 'AI-Native Design Engineering Platform',
|
||||
};
|
||||
|
||||
export default function RootLayout({ children }: { children: ReactNode }) {
|
||||
return (
|
||||
<html lang="en">
|
||||
<body>
|
||||
<Providers>{children}</Providers>
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
export default function Home() {
|
||||
return (
|
||||
<main style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%' }}>
|
||||
<p style={{ fontFamily: 'system-ui, sans-serif', color: '#888', fontSize: '0.875rem' }}>
|
||||
Originmain — coming soon
|
||||
</p>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
'use client';
|
||||
|
||||
import type { ReactNode } from 'react';
|
||||
import { FluentProvider } from '@fluentui/react-components';
|
||||
import { originmainLightTheme } from '@originmain/ui';
|
||||
|
||||
export function Providers({ children }: { children: ReactNode }) {
|
||||
return (
|
||||
<FluentProvider theme={originmainLightTheme} style={{ height: '100%' }}>
|
||||
{children}
|
||||
</FluentProvider>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
export {};
|
||||
@@ -0,0 +1,31 @@
|
||||
import { create } from 'zustand';
|
||||
|
||||
interface ViewportState {
|
||||
panX: number;
|
||||
panY: number;
|
||||
zoom: number;
|
||||
setPan: (x: number, y: number) => void;
|
||||
setZoom: (zoom: number, originX?: number, originY?: number) => void;
|
||||
reset: () => void;
|
||||
}
|
||||
|
||||
export const useViewport = create<ViewportState>((set, get) => ({
|
||||
panX: 0,
|
||||
panY: 0,
|
||||
zoom: 1,
|
||||
|
||||
setPan: (x, y) => set({ panX: x, panY: y }),
|
||||
|
||||
setZoom: (zoom, originX = 0, originY = 0) => {
|
||||
const prev = get();
|
||||
const clampedZoom = Math.min(Math.max(zoom, 0.1), 8);
|
||||
const scale = clampedZoom / prev.zoom;
|
||||
set({
|
||||
zoom: clampedZoom,
|
||||
panX: originX - (originX - prev.panX) * scale,
|
||||
panY: originY - (originY - prev.panY) * scale,
|
||||
});
|
||||
},
|
||||
|
||||
reset: () => set({ panX: 0, panY: 0, zoom: 1 }),
|
||||
}));
|
||||
Reference in New Issue
Block a user