diff --git a/package-lock.json b/package-lock.json index f66b02e..116f429 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,7 +4,6 @@ "requires": true, "packages": { "": { - "name": "memeaigen", "dependencies": { "@headlessui/react": "^2.2.0", "@inertiajs/react": "^2.0.0", @@ -41,7 +40,7 @@ "tailwindcss-animate": "^1.0.7", "typescript": "^5.7.2", "vite": "^6.0", - "zustand": "^5.0.3" + "zustand": "^5.0.5" }, "devDependencies": { "@eslint/js": "^9.19.0", @@ -7809,9 +7808,9 @@ } }, "node_modules/zustand": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.3.tgz", - "integrity": "sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.5.tgz", + "integrity": "sha512-mILtRfKW9xM47hqxGIxCv12gXusoY/xTSHBYApXozR0HmQv299whhBeeAcRy+KrPPybzosvJBCOmVjq6x12fCg==", "license": "MIT", "engines": { "node": ">=12.20.0" diff --git a/package.json b/package.json index 50413d9..7a56f16 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "tailwindcss-animate": "^1.0.7", "typescript": "^5.7.2", "vite": "^6.0", - "zustand": "^5.0.3" + "zustand": "^5.0.5" }, "optionalDependencies": { "@rollup/rollup-linux-x64-gnu": "4.9.5", diff --git a/resources/js/modules/editor/editor.tsx b/resources/js/modules/editor/editor.tsx index 01d2fa5..659838c 100644 --- a/resources/js/modules/editor/editor.tsx +++ b/resources/js/modules/editor/editor.tsx @@ -1,152 +1,201 @@ -import { useState, useEffect, useLayoutEffect } from "react" +import { useEffect, useLayoutEffect, useState } from 'react'; -import EditSidebar from "./partials/edit-sidebar" -import EditorCanvas from "./partials/editor-canvas" -import EditorHeader from "./partials/editor-header" -import EditorControls from "./partials/editor-controls" -import { calculateOptimalMaxWidth, calculateResponsiveWidth } from "./utils/layout-constants" +import useLocalSettingsStore from '@/stores/localSettingsStore'; +import { Volume2Icon, VolumeOffIcon } from 'lucide-react'; +import EditNavSidebar from './partials/edit-nav-sidebar'; +import EditSidebar from './partials/edit-sidebar'; +import EditorCanvas from './partials/editor-canvas'; +import EditorControls from './partials/editor-controls'; +import EditorHeader from './partials/editor-header'; +import { calculateOptimalMaxWidth, calculateResponsiveWidth } from './utils/layout-constants'; // Hook to detect if viewport is below minimum width const useViewportDetection = (minWidth = 320) => { - const [isBelowMinWidth, setIsBelowMinWidth] = useState(false); + const [isBelowMinWidth, setIsBelowMinWidth] = useState(false); - useLayoutEffect(() => { - setIsBelowMinWidth(window.innerWidth < minWidth); - }, [minWidth]); + useLayoutEffect(() => { + setIsBelowMinWidth(window.innerWidth < minWidth); + }, [minWidth]); - useEffect(() => { - const checkViewport = () => { - setIsBelowMinWidth(window.innerWidth < minWidth); - }; + useEffect(() => { + const checkViewport = () => { + setIsBelowMinWidth(window.innerWidth < minWidth); + }; - checkViewport(); - window.addEventListener('resize', checkViewport); - window.addEventListener('orientationchange', checkViewport); + checkViewport(); + window.addEventListener('resize', checkViewport); + window.addEventListener('orientationchange', checkViewport); - let resizeObserver; - if (window.ResizeObserver) { - resizeObserver = new ResizeObserver(checkViewport); - resizeObserver.observe(document.body); - } + let resizeObserver; + if (window.ResizeObserver) { + resizeObserver = new ResizeObserver(checkViewport); + resizeObserver.observe(document.body); + } - return () => { - window.removeEventListener('resize', checkViewport); - window.removeEventListener('orientationchange', checkViewport); - if (resizeObserver) resizeObserver.disconnect(); - }; - }, [minWidth]); + return () => { + window.removeEventListener('resize', checkViewport); + window.removeEventListener('orientationchange', checkViewport); + if (resizeObserver) resizeObserver.disconnect(); + }; + }, [minWidth]); - return isBelowMinWidth; + return isBelowMinWidth; }; // Hook for responsive dimensions const useResponsiveDimensions = () => { - const [dimensions, setDimensions] = useState(() => ({ - maxWidth: calculateOptimalMaxWidth(), - responsiveWidth: calculateResponsiveWidth() - })); + const [dimensions, setDimensions] = useState(() => ({ + maxWidth: calculateOptimalMaxWidth(), + responsiveWidth: calculateResponsiveWidth(), + })); - useLayoutEffect(() => { - const newMaxWidth = calculateOptimalMaxWidth(); - const newResponsiveWidth = calculateResponsiveWidth(); - setDimensions({ - maxWidth: newMaxWidth, - responsiveWidth: newResponsiveWidth - }); - }, []); + useLayoutEffect(() => { + const newMaxWidth = calculateOptimalMaxWidth(); + const newResponsiveWidth = calculateResponsiveWidth(); + setDimensions({ + maxWidth: newMaxWidth, + responsiveWidth: newResponsiveWidth, + }); + }, []); - useEffect(() => { - const handleResize = () => { - const newMaxWidth = calculateOptimalMaxWidth(); - const newResponsiveWidth = calculateResponsiveWidth(); - setDimensions({ - maxWidth: newMaxWidth, - responsiveWidth: newResponsiveWidth - }); - }; + useEffect(() => { + const handleResize = () => { + const newMaxWidth = calculateOptimalMaxWidth(); + const newResponsiveWidth = calculateResponsiveWidth(); + setDimensions({ + maxWidth: newMaxWidth, + responsiveWidth: newResponsiveWidth, + }); + }; - window.addEventListener('resize', handleResize); - window.addEventListener('orientationchange', handleResize); + window.addEventListener('resize', handleResize); + window.addEventListener('orientationchange', handleResize); - let resizeObserver; - if (window.ResizeObserver) { - resizeObserver = new ResizeObserver(handleResize); - resizeObserver.observe(document.body); - } + let resizeObserver; + if (window.ResizeObserver) { + resizeObserver = new ResizeObserver(handleResize); + resizeObserver.observe(document.body); + } - let mutationObserver; - if (window.MutationObserver) { - mutationObserver = new MutationObserver(() => { - setTimeout(handleResize, 50); - }); - mutationObserver.observe(document.documentElement, { - attributes: true, - attributeFilter: ['style'] - }); - } + let mutationObserver; + if (window.MutationObserver) { + mutationObserver = new MutationObserver(() => { + setTimeout(handleResize, 50); + }); + mutationObserver.observe(document.documentElement, { + attributes: true, + attributeFilter: ['style'], + }); + } - return () => { - window.removeEventListener('resize', handleResize); - window.removeEventListener('orientationchange', handleResize); - if (resizeObserver) resizeObserver.disconnect(); - if (mutationObserver) mutationObserver.disconnect(); - }; - }, []); + return () => { + window.removeEventListener('resize', handleResize); + window.removeEventListener('orientationchange', handleResize); + if (resizeObserver) resizeObserver.disconnect(); + if (mutationObserver) mutationObserver.disconnect(); + }; + }, []); - return dimensions; + return dimensions; }; const Editor = () => { - const [isEditSidebarOpen, setIsEditSidebarOpen] = useState(false) - const { maxWidth, responsiveWidth } = useResponsiveDimensions(); - const isBelowMinWidth = useViewportDetection(320); + const { getSetting } = useLocalSettingsStore(); - const handleEditClick = () => { - setIsEditSidebarOpen(!isEditSidebarOpen) - } + const [isEditNavSidebarOpen, setIsEditNavSidebarOpen] = useState(false); + const [isEditSidebarOpen, setIsEditSidebarOpen] = useState(false); + const [isMuted, setIsMuted] = useState(true); // Video starts muted by default + const { maxWidth, responsiveWidth } = useResponsiveDimensions(); + const isBelowMinWidth = useViewportDetection(320); - const handleCloseSidebar = () => { - setIsEditSidebarOpen(false) - } + const handleEditNavClick = () => { + setIsEditNavSidebarOpen(!isEditNavSidebarOpen); + }; - return ( -
- You seem to be using a potato-sized screen. Please continue with desktop for a more refined experience! -
-+ {getSetting('genAlphaSlang') + ? 'Not gonna lie, using on a potato screen is giving L vibes. Desktop hits different - that experience is straight fire, bet!' + : 'You seem to be using a potato-sized screen. Please continue with desktop for a more refined experience!'} +
+Generate a background with AI
-Generate a background with AI
+