ImageUploader

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit cbe076818bf6296546bec8f2c98bdb2b8c1c44fa
parent 5137243fd7f6168821ffafed4be79fb07c15ac36
Author: minerva-jupitr <ryouturn@gmail.com>
Date:   Fri, 12 Jul 2024 12:28:46 +0900

Muiの導入

Diffstat:
Mimage-uploader/bun.lockb | 0
Mimage-uploader/package.json | 5+++++
Mimage-uploader/src/app/fileuploadform.tsx | 9---------
Dimage-uploader/src/app/globals.css | 107-------------------------------------------------------------------------------
Mimage-uploader/src/app/layout.tsx | 10+++++++---
Dimage-uploader/src/app/page.module.css | 231-------------------------------------------------------------------------------
Mimage-uploader/src/app/page.tsx | 73+++++++++++++++++++++++++++++++++++++++++++------------------------------
7 files changed, 55 insertions(+), 380 deletions(-)

diff --git a/image-uploader/bun.lockb b/image-uploader/bun.lockb Binary files differ. diff --git a/image-uploader/package.json b/image-uploader/package.json @@ -9,6 +9,11 @@ "lint": "next lint" }, "dependencies": { + "@emotion/cache": "^11.11.0", + "@emotion/react": "^11.11.4", + "@emotion/styled": "^11.11.5", + "@mui/material": "^5.16.1", + "@mui/material-nextjs": "^5.16.1", "next": "14.2.5", "react": "^18.3.1", "react-dom": "^18.3.1", diff --git a/image-uploader/src/app/fileuploadform.tsx b/image-uploader/src/app/fileuploadform.tsx @@ -93,15 +93,6 @@ const FileUploader: NextPage = () => { }); // ドラッグ中のスタイルを設定 - const setDropZoneStyle = () => { - if (isDragAccept) { - return styles.is_drag_accept; - } else if (isDragReject) { - return styles.is_drag_reject; - } else { - return ""; - } - }; const removeFile = (index: number) => { const filteringFiles = currentShowFiles.filter( diff --git a/image-uploader/src/app/globals.css b/image-uploader/src/app/globals.css @@ -1,107 +0,0 @@ -:root { - --max-width: 1100px; - --border-radius: 12px; - --font-mono: ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono", - "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", - "Fira Mono", "Droid Sans Mono", "Courier New", monospace; - - --foreground-rgb: 0, 0, 0; - --background-start-rgb: 214, 219, 220; - --background-end-rgb: 255, 255, 255; - - --primary-glow: conic-gradient( - from 180deg at 50% 50%, - #16abff33 0deg, - #0885ff33 55deg, - #54d6ff33 120deg, - #0071ff33 160deg, - transparent 360deg - ); - --secondary-glow: radial-gradient( - rgba(255, 255, 255, 1), - rgba(255, 255, 255, 0) - ); - - --tile-start-rgb: 239, 245, 249; - --tile-end-rgb: 228, 232, 233; - --tile-border: conic-gradient( - #00000080, - #00000040, - #00000030, - #00000020, - #00000010, - #00000010, - #00000080 - ); - - --callout-rgb: 238, 240, 241; - --callout-border-rgb: 172, 175, 176; - --card-rgb: 180, 185, 188; - --card-border-rgb: 131, 134, 135; -} - -@media (prefers-color-scheme: dark) { - :root { - --foreground-rgb: 255, 255, 255; - --background-start-rgb: 0, 0, 0; - --background-end-rgb: 0, 0, 0; - - --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); - --secondary-glow: linear-gradient( - to bottom right, - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0.3) - ); - - --tile-start-rgb: 2, 13, 46; - --tile-end-rgb: 2, 5, 19; - --tile-border: conic-gradient( - #ffffff80, - #ffffff40, - #ffffff30, - #ffffff20, - #ffffff10, - #ffffff10, - #ffffff80 - ); - - --callout-rgb: 20, 20, 20; - --callout-border-rgb: 108, 108, 108; - --card-rgb: 100, 100, 100; - --card-border-rgb: 200, 200, 200; - } -} - -* { - box-sizing: border-box; - padding: 0; - margin: 0; -} - -html, -body { - max-width: 100vw; - overflow-x: hidden; -} - -body { - color: rgb(var(--foreground-rgb)); - background: linear-gradient( - to bottom, - transparent, - rgb(var(--background-end-rgb)) - ) - rgb(var(--background-start-rgb)); -} - -a { - color: inherit; - text-decoration: none; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } -} diff --git a/image-uploader/src/app/layout.tsx b/image-uploader/src/app/layout.tsx @@ -1,6 +1,6 @@ import type { Metadata } from "next"; import { Inter } from "next/font/google"; -import "./globals.css"; +import { AppRouterCacheProvider } from '@mui/material-nextjs/v14-appRouter'; const inter = Inter({ subsets: ["latin"] }); @@ -15,8 +15,12 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - <html lang="en"> - <body className={inter.className}>{children}</body> + <html lang="jp"> + <body className={inter.className}> + <AppRouterCacheProvider> + {children} + </AppRouterCacheProvider> + </body> </html> ); } diff --git a/image-uploader/src/app/page.module.css b/image-uploader/src/app/page.module.css @@ -1,231 +0,0 @@ -.main { - display: flex; - flex-direction: column; - justify-content: space-between; - align-items: center; - padding: 6rem; - min-height: 100vh; -} - -.description { - display: inherit; - justify-content: inherit; - align-items: inherit; - font-size: 0.85rem; - max-width: var(--max-width); - width: 100%; - z-index: 2; - font-family: var(--font-mono); -} - -.description a { - display: flex; - justify-content: center; - align-items: center; - gap: 0.5rem; -} - -.description p { - position: relative; - margin: 0; - padding: 1rem; - background-color: rgba(var(--callout-rgb), 0.5); - border: 1px solid rgba(var(--callout-border-rgb), 0.3); - border-radius: var(--border-radius); -} - -.code { - font-weight: 700; - font-family: var(--font-mono); -} - -.grid { - display: grid; - grid-template-columns: repeat(4, minmax(25%, auto)); - max-width: 100%; - width: var(--max-width); -} - -.card { - padding: 1rem 1.2rem; - border-radius: var(--border-radius); - background: rgba(var(--card-rgb), 0); - border: 1px solid rgba(var(--card-border-rgb), 0); - transition: background 200ms, border 200ms; -} - -.card span { - display: inline-block; - transition: transform 200ms; -} - -.card h2 { - font-weight: 600; - margin-bottom: 0.7rem; -} - -.card p { - margin: 0; - opacity: 0.6; - font-size: 0.9rem; - line-height: 1.5; - max-width: 30ch; - text-wrap: balance; -} - -.center { - display: flex; - justify-content: center; - align-items: center; - position: relative; - padding: 4rem 0; -} - -.center::before { - background: var(--secondary-glow); - border-radius: 50%; - width: 480px; - height: 360px; - margin-left: -400px; -} - -.center::after { - background: var(--primary-glow); - width: 240px; - height: 180px; - z-index: -1; -} - -.center::before, -.center::after { - content: ""; - left: 50%; - position: absolute; - filter: blur(45px); - transform: translateZ(0); -} - -.logo { - position: relative; -} - -/* Enable hover only on non-touch devices */ -@media (hover: hover) and (pointer: fine) { - .card:hover { - background: rgba(var(--card-rgb), 0.1); - border: 1px solid rgba(var(--card-border-rgb), 0.15); - } - - .card:hover span { - transform: translateX(4px); - } -} - -@media (prefers-reduced-motion) { - .card:hover span { - transform: none; - } -} - -/* Mobile */ -@media (max-width: 700px) { - .content { - padding: 4rem; - } - - .grid { - grid-template-columns: 1fr; - margin-bottom: 120px; - max-width: 320px; - text-align: center; - } - - .card { - padding: 1rem 2.5rem; - } - - .card h2 { - margin-bottom: 0.5rem; - } - - .center { - padding: 8rem 0 6rem; - } - - .center::before { - transform: none; - height: 300px; - } - - .description { - font-size: 0.8rem; - } - - .description a { - padding: 1rem; - } - - .description p, - .description div { - display: flex; - justify-content: center; - position: fixed; - width: 100%; - } - - .description p { - align-items: center; - inset: 0 0 auto; - padding: 2rem 1rem 1.4rem; - border-radius: 0; - border: none; - border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25); - background: linear-gradient( - to bottom, - rgba(var(--background-start-rgb), 1), - rgba(var(--callout-rgb), 0.5) - ); - background-clip: padding-box; - backdrop-filter: blur(24px); - } - - .description div { - align-items: flex-end; - pointer-events: none; - inset: auto 0 0; - padding: 2rem; - height: 200px; - background: linear-gradient( - to bottom, - transparent 0%, - rgb(var(--background-end-rgb)) 40% - ); - z-index: 1; - } -} - -/* Tablet and Smaller Desktop */ -@media (min-width: 701px) and (max-width: 1120px) { - .grid { - grid-template-columns: repeat(2, 50%); - } -} - -@media (prefers-color-scheme: dark) { - .vercelLogo { - filter: invert(1); - } - - .logo { - filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70); - } -} - -@keyframes rotate { - from { - transform: rotate(360deg); - } - to { - transform: rotate(0deg); - } -} diff --git a/image-uploader/src/app/page.tsx b/image-uploader/src/app/page.tsx @@ -1,39 +1,52 @@ 'use client' -import FileUploader from "./fileuploadform"; -import styles from "./page.module.css"; +import FileUploader from "./fileUploadForm"; import { useDropzone } from "react-dropzone"; +import { ThemeProvider, createTheme } from '@mui/material/styles'; +import CssBaseline from '@mui/material/CssBaseline'; +import Box from '@mui/material/Box'; + +const darkTheme = createTheme({ + palette: { + mode: 'dark', + }, +}); + export default function Home() { const onDrop = (files: File[]) => { console.log(files); - } - const { getRootProps, getInputProps } = useDropzone({ onDrop }); + }; return ( - <main className={styles.main}> - <header> - <h1>Image Uploader</h1> - <p>This app created for uploading image</p> - </header> - <div> - <h3>Attention</h3> - <p>Files posted here will be deleted after a set period of time.</p> - </div> - <div> - <FileUploader/> - </div> - <div> - <h4>URL</h4> - <div> - <h5>Pure URL</h5> - <a href="a">a</a> - <button>Copy Clipboard</button> - </div> - <div> - <h5>MarkDown URL</h5> - <a href="a">a</a> - <button>Copy Clipboard</button> - </div> - </div> - </main> + <ThemeProvider theme={darkTheme}> + <Box sx={{ display: 'flex' }}> + <CssBaseline /> + <main> + <header> + <h1>Image Uploader</h1> + <p>This app created for uploading image</p> + </header> + <div> + <h3>Attention</h3> + <p>Files posted here will be deleted after a set period of time.</p> + </div> + <div> + <FileUploader/> + </div> + <div> + <h4>URL</h4> + <div> + <h5>Pure URL</h5> + <a href="a">a</a> + <button>Copy Clipboard</button> + </div> + <div> + <h5>MarkDown URL</h5> + <a href="a">a</a> + <button>Copy Clipboard</button> + </div> + </div> + </main> + </Box> + </ThemeProvider> ); };