2023-11-17 14:22:28 +01:00
import { Fragment , useContext , useEffect , useRef , useState } from "react"
import { useRouter } from "next/router"
import { Event , getAllLocalStorageItems , getRefValue , getRefValues , isTrue , preventDefault , refs , spreadArraysOrObjects , uploadFiles , useEventLoop } from "/utils/state"
import { ColorModeContext , EventLoopContext , initialEvents , StateContext } from "/utils/context.js"
import "focus-visible/dist/focus-visible"
import { Box , Heading , HStack , Image , Link , List , ListItem , Menu , MenuButton , MenuDivider , MenuItem , MenuList , Modal , ModalBody , ModalContent , ModalHeader , ModalOverlay , OrderedList , Spacer , Text , VStack } from "@chakra-ui/react"
import { getEventURL } from "/utils/state.js"
import NextLink from "next/link"
import { HamburgerIcon } from "@chakra-ui/icons"
import NextHead from "next/head"
export default function Component ( ) {
const state = useContext ( StateContext )
const router = useRouter ( )
const [ colorMode , toggleColorMode ] = useContext ( ColorModeContext )
const focusRef = useRef ( ) ;
// Main event loop.
const [ addEvents , connectError ] = useContext ( EventLoopContext )
// Set focus to the specified element.
useEffect ( ( ) => {
if ( focusRef . current ) {
focusRef . current . focus ( ) ;
}
} )
// Route after the initial page hydration.
useEffect ( ( ) => {
const change _complete = ( ) => addEvents ( initialEvents ( ) )
router . events . on ( 'routeChangeComplete' , change _complete )
return ( ) => {
router . events . off ( 'routeChangeComplete' , change _complete )
}
} , [ router ] )
return (
< Fragment >
< Fragment >
{ isTrue ( connectError !== null ) ? (
< Fragment >
< Modal isOpen = { connectError !== null } >
< ModalOverlay >
< ModalContent >
< ModalHeader >
{ ` Connection Error ` }
< / M o d a l H e a d e r >
< ModalBody >
< Text >
{ ` Cannot connect to server: ` }
{ ( connectError !== null ) ? connectError . message : '' }
{ ` . Check if server is reachable at ` }
{ getEventURL ( ) . href }
< / T e x t >
< / M o d a l B o d y >
< / M o d a l C o n t e n t >
< / M o d a l O v e r l a y >
< / M o d a l >
< / F r a g m e n t >
) : (
< Fragment / >
) }
< / F r a g m e n t >
< HStack alignItems = { ` flex-start ` } sx = { { "transition" : "left 0.5s, width 0.5s" , "position" : "relative" } } >
< Box sx = { { "display" : [ "none" , "none" , "block" ] , "minWidth" : "20em" , "height" : "100%" , "position" : "sticky" , "top" : "0px" , "borderRight" : "1px solid #F4F3F6" } } >
< VStack sx = { { "height" : "100dvh" } } >
< HStack sx = { { "width" : "100%" , "borderBottom" : "1px solid #F4F3F6" , "padding" : "1em" } } >
< Image src = { ` /icon.png ` } sx = { { "height" : "4.5em" } } / >
< Spacer / >
< / H S t a c k >
< VStack alignItems = { ` flex-start ` } sx = { { "width" : "100%" , "overflowY" : "auto" , "padding" : "1em" } } >
< Link as = { NextLink } href = { ` / ` } sx = { { "width" : "100%" } } >
< HStack sx = { { "bg" : isTrue ( ( state . router . page . path === "/strona g\\u0142\\u00f3wna" ) || ( ( ( state . router . page . path === "/" ) && "Strona g\\u0142\\u00f3wna" ) === "Home" ) ) ? ` #fcd2e7 ` : ` transparent ` , "color" : isTrue ( ( state . router . page . path === "/strona g\\u0142\\u00f3wna" ) || ( ( ( state . router . page . path === "/" ) && "Strona g\\u0142\\u00f3wna" ) === "Home" ) ) ? ` #1A1060 ` : ` black ` , "borderRadius" : "0.375rem" , "boxShadow" : "0px 0px 0px 1px rgba(84, 82, 95, 0.14)" , "width" : "100%" , "paddingX" : "1em" , "height" : "2em" } } >
< Text >
{ ` Strona główna ` }
< / T e x t >
< / H S t a c k >
< / L i n k >
< Link as = { NextLink } href = { ` /dashboard ` } sx = { { "width" : "100%" } } >
< HStack sx = { { "bg" : isTrue ( ( state . router . page . path === "/dashboard" ) || ( ( ( state . router . page . path === "/" ) && "Dashboard" ) === "Home" ) ) ? ` #fcd2e7 ` : ` transparent ` , "color" : isTrue ( ( state . router . page . path === "/dashboard" ) || ( ( ( state . router . page . path === "/" ) && "Dashboard" ) === "Home" ) ) ? ` #1A1060 ` : ` black ` , "borderRadius" : "0.375rem" , "boxShadow" : "0px 0px 0px 1px rgba(84, 82, 95, 0.14)" , "width" : "100%" , "paddingX" : "1em" , "height" : "2em" } } >
< Text >
{ ` Dashboard ` }
< / T e x t >
< / H S t a c k >
< / L i n k >
< Link as = { NextLink } href = { ` /settings ` } sx = { { "width" : "100%" } } >
< HStack sx = { { "bg" : isTrue ( ( state . router . page . path === "/settings" ) || ( ( ( state . router . page . path === "/" ) && "Settings" ) === "Home" ) ) ? ` #fcd2e7 ` : ` transparent ` , "color" : isTrue ( ( state . router . page . path === "/settings" ) || ( ( ( state . router . page . path === "/" ) && "Settings" ) === "Home" ) ) ? ` #1A1060 ` : ` black ` , "borderRadius" : "0.375rem" , "boxShadow" : "0px 0px 0px 1px rgba(84, 82, 95, 0.14)" , "width" : "100%" , "paddingX" : "1em" , "height" : "2em" } } >
< Text >
{ ` Settings ` }
< / T e x t >
< / H S t a c k >
< / L i n k >
< / V S t a c k >
< Spacer / >
< / V S t a c k >
< / B o x >
< Box sx = { { "paddingTop" : "5em" , "paddingX" : [ "auto" , "2em" ] , "flex" : "1" } } >
< Box sx = { { "alignItems" : "flex-start" , "boxShadow" : "0px 0px 0px 1px rgba(84, 82, 95, 0.14)" , "borderRadius" : "0.375rem" , "padding" : "1em" , "marginBottom" : "2em" } } >
< VStack >
< Heading sx = { { "fontSize" : "3em" , "marginBottom" : "25px" , "backgroundImage" : "linear-gradient(271.68deg, #7566fe 0.75%, #f96caf 88.52%)" , "backgroundClip" : "text" , "padding" : "10px" } } >
{ ` Witaj w BlurMe! ` }
< / H e a d i n g >
< Text sx = { { "fontSize" : "1.5em" , "fontWeight" : "bold" , "marginTop" : "10px" , "marginBottom" : "10px" } } >
{ ` Dlaczego Blurme? ` }
< / T e x t >
< List sx = { { "textAlign" : "left" } } >
< ListItem >
< Text as = { ` b ` } >
{ ` Prywatność: ` }
< / T e x t >
{ ` Nasza aplikacja zapewnia pełną ochronę prywatności, eliminując ryzyko identyfikacji osób niezwiązanych z anonimizacją. ` }
< / L i s t I t e m >
< ListItem >
< Text as = { ` b ` } >
{ ` Prost obsługa: ` }
< / T e x t >
{ ` Intuicyjny interfejs użytkownika sprawia, że korzystanie z Blurme jest łatwe dla każdego. ` }
< / L i s t I t e m >
< ListItem >
< Text as = { ` b ` } >
{ ` Elastyczność: ` }
< / T e x t >
2023-11-17 14:55:25 +01:00
{ ` Wybierz, która twarz na zdjęciu ma pozostać niezmieniona, a my zadbamy o resztę. Indywidualizuj swoje zdjęcia zgodnie z własnymi potrzebami. ` }
2023-11-17 14:22:28 +01:00
< / L i s t I t e m >
< / L i s t >
< Text sx = { { "fontSize" : "1.5em" , "fontWeight" : "bold" , "marginTop" : "20px" , "marginBottom" : "10px" } } >
{ ` Jak to działa? ` }
< / T e x t >
< OrderedList >
< ListItem >
< Text as = { ` b ` } >
{ ` Wgraj Zdjęcie: ` }
< / T e x t >
{ ` Prosty proces rozpoczyna się od dodania zdjęcia, które chcesz anonimizować. ` }
< / L i s t I t e m >
< ListItem >
< Text as = { ` b ` } >
{ ` Zaznacz Twarz do Ochrony: ` }
< / T e x t >
{ ` Oznacz twarz, którą chcesz zachować. ` }
< / L i s t I t e m >
< ListItem >
< Text as = { ` b ` } >
{ ` Anonimizuj Resztę: ` }
< / T e x t >
{ ` Naciśnij przycisk, a Blurme automatycznie zastosuje efekt rozmycia do wszystkich obszarów poza zaznaczoną twarzą. ` }
< / L i s t I t e m >
< ListItem >
< Text as = { ` b ` } >
{ ` Pobierz i Podziel Się: ` }
< / T e x t >
{ ` Gotowe! Pobierz anonimizowane zdjęcie i dziel się nim bez obaw o prywatność. ` }
< / L i s t I t e m >
< / O r d e r e d L i s t >
< Text sx = { { "fontSize" : "1.5em" , "fontWeight" : "bold" , "marginTop" : "20px" , "marginBottom" : "10px" } } >
{ ` Do Czego Może Ci Się Przydać? ` }
< / T e x t >
< List >
< ListItem sx = { { "textAlign" : "left" } } >
< Text as = { ` b ` } >
{ ` Ochrona Tożsamości: ` }
< / T e x t >
{ ` Idealne do usuwania twarzy nieznajomych lub przypadkowych przechodniów z tła. ` }
< / L i s t I t e m >
< ListItem sx = { { "textAlign" : "left" } } >
< Text as = { ` b ` } >
{ ` Zachowanie Prywatności: ` }
< / T e x t >
{ ` Przydatne w sytuacjach, gdzie chcesz udostępnić zdjęcia publicznie, ale z zachowaniem prywatności pewnych osób. ` }
< / L i s t I t e m >
< ListItem sx = { { "textAlign" : "left" } } >
< Text as = { ` b ` } >
{ ` Kreatywność: ` }
< / T e x t >
{ ` Wyraź swoją kreatywność, zachowując jednocześnie istotne elementy na zdjęciach. ` }
< / L i s t I t e m >
< / L i s t >
< Text sx = { { "textAlign" : "center" } } >
{ ` Blurme to więcej niż tylko narzędzie - to rozwiązanie, które pozwala Ci kontrolować, jak prezentujesz swoje zdjęcia online, zachowując jednocześnie pełną prywatność. Przekształć swoje obrazy już teraz! ` }
< / T e x t >
< / V S t a c k >
< / B o x >
< / B o x >
< Box sx = { { "position" : "fixed" , "right" : "1.5em" , "top" : "1.5em" , "zIndex" : "500" } } >
< Menu >
< MenuButton sx = { { "width" : "3em" , "height" : "3em" , "backgroundColor" : "white" , "border" : "1px solid #F4F3F6" , "borderRadius" : "0.375rem" } } >
< HamburgerIcon sx = { { "size" : "4em" , "color" : "black" } } / >
< / M e n u B u t t o n >
< MenuList >
< MenuItem sx = { { "_hover" : { "bg" : "#fcd2e7" } } } >
< Link as = { NextLink } href = { ` / ` } sx = { { "width" : "100%" } } >
{ ` Strona główna ` }
< / L i n k >
< / M e n u I t e m >
< MenuItem sx = { { "_hover" : { "bg" : "#fcd2e7" } } } >
< Link as = { NextLink } href = { ` /dashboard ` } sx = { { "width" : "100%" } } >
{ ` Dashboard ` }
< / L i n k >
< / M e n u I t e m >
< MenuItem sx = { { "_hover" : { "bg" : "#fcd2e7" } } } >
< Link as = { NextLink } href = { ` /settings ` } sx = { { "width" : "100%" } } >
{ ` Settings ` }
< / L i n k >
< / M e n u I t e m >
< MenuDivider / >
< MenuItem sx = { { "_hover" : { "bg" : "#fcd2e7" } } } >
< Link as = { NextLink } href = { ` https://github.com/reflex-dev ` } sx = { { "width" : "100%" } } >
{ ` About ` }
< / L i n k >
< / M e n u I t e m >
< MenuItem sx = { { "_hover" : { "bg" : "#fcd2e7" } } } >
< Link as = { NextLink } href = { ` mailto:founders@=reflex.dev ` } sx = { { "width" : "100%" } } >
{ ` Contact ` }
< / L i n k >
< / M e n u I t e m >
< / M e n u L i s t >
< / M e n u >
< / B o x >
< / H S t a c k >
< NextHead >
< title >
{ ` Strona główna ` }
< / t i t l e >
< meta content = { ` A Reflex app. ` } name = { ` description ` } / >
< meta content = { ` /github.svg ` } property = { ` og:image ` } / >
< meta content = { ` width=device-width, shrink-to-fit=no, initial-scale=1 ` } name = { ` viewport ` } / >
< / N e x t H e a d >
< / F r a g m e n t >
)
}