diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml new file mode 100644 index 00000000..de28cbb5 --- /dev/null +++ b/.github/release-drafter.yml @@ -0,0 +1,40 @@ +name-template: "v$RESOLVED_VERSION ๐ŸŒˆ" ## ๋ฆด๋ฆฌ์ฆˆ ์ œ๋ชฉ +tag-template: "v$RESOLVED_VERSION" ## ํƒœ๊ทธ +categories: + - title: "๐Ÿš€ Features" + labels: + - "Bookmark ๐Ÿ”–" + - "โœจ Feat" + - "PoseFeed ๐Ÿงฉ" + - "PosePick ๐Ÿƒ" + - "PoseTalk ๐Ÿ’ฌ" + - "๐Ÿ’„ Style" + - title: "๐Ÿ› Bug Fixes" + labels: + - "๐Ÿ›  Fix" + - title: "๐Ÿงฐ Maintenance" + labels: + - "โ™ป๏ธ Refactor" +change-template: "- $TITLE @$AUTHOR (#$NUMBER)" +change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks. +version-resolver: + major: + labels: + - "major" + minor: + labels: + - "minor" + patch: + labels: + - "patch" + default: patch +template: | # ๋ฆด๋ฆฌ์ฆˆ ๋‚ด์šฉ + ## Changes (v$RESOLVED_VERSION) + + $CHANGES + + ## Previos Tag + $PREVIOUS_TAG + + ## Contributors + $CONTRIBUTORS \ No newline at end of file diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml new file mode 100644 index 00000000..c963dcad --- /dev/null +++ b/.github/workflows/release-drafter.yml @@ -0,0 +1,20 @@ +name: Release Drafter + +on: + push: + branches: + - OZ-80* + +permissions: + contents: read + +jobs: + update_release_draft: + permissions: + contents: write + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: release-drafter/release-drafter@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/public/images/main_star.png b/public/images/main_star.png new file mode 100644 index 00000000..c1677114 Binary files /dev/null and b/public/images/main_star.png differ diff --git a/public/images/main.png b/public/images/main_wand.png similarity index 100% rename from public/images/main.png rename to public/images/main_wand.png diff --git a/public/pwa-icons/icon-128x128.png b/public/pwa-icons/icon-128x128.png index dfb52edf..9a2cc53a 100644 Binary files a/public/pwa-icons/icon-128x128.png and b/public/pwa-icons/icon-128x128.png differ diff --git a/public/pwa-icons/icon-144x144.png b/public/pwa-icons/icon-144x144.png index 2419a2e7..1586d5da 100644 Binary files a/public/pwa-icons/icon-144x144.png and b/public/pwa-icons/icon-144x144.png differ diff --git a/public/pwa-icons/icon-152x152.png b/public/pwa-icons/icon-152x152.png index bff4f63b..849cd901 100644 Binary files a/public/pwa-icons/icon-152x152.png and b/public/pwa-icons/icon-152x152.png differ diff --git a/public/pwa-icons/icon-192x192.png b/public/pwa-icons/icon-192x192.png index 831ba043..85865f8c 100644 Binary files a/public/pwa-icons/icon-192x192.png and b/public/pwa-icons/icon-192x192.png differ diff --git a/public/pwa-icons/icon-384x384.png b/public/pwa-icons/icon-384x384.png index 82c38249..514e900d 100644 Binary files a/public/pwa-icons/icon-384x384.png and b/public/pwa-icons/icon-384x384.png differ diff --git a/public/pwa-icons/icon-48x48.png b/public/pwa-icons/icon-48x48.png index 8eaf9222..ead96f01 100644 Binary files a/public/pwa-icons/icon-48x48.png and b/public/pwa-icons/icon-48x48.png differ diff --git a/public/pwa-icons/icon-512x512.png b/public/pwa-icons/icon-512x512.png index 260e0c5e..a427a4af 100644 Binary files a/public/pwa-icons/icon-512x512.png and b/public/pwa-icons/icon-512x512.png differ diff --git a/public/pwa-icons/icon-72x72.png b/public/pwa-icons/icon-72x72.png index ddeb74c8..a27cae6b 100644 Binary files a/public/pwa-icons/icon-72x72.png and b/public/pwa-icons/icon-72x72.png differ diff --git a/public/pwa-icons/icon-96x96.png b/public/pwa-icons/icon-96x96.png index 08c9422a..3994ff32 100644 Binary files a/public/pwa-icons/icon-96x96.png and b/public/pwa-icons/icon-96x96.png differ diff --git a/public/sw.js.map b/public/sw.js.map index 0d9831a8..1cbbf4b2 100644 --- a/public/sw.js.map +++ b/public/sw.js.map @@ -1 +1 @@ -{"version":3,"file":"sw.js","sources":["../../../../../private/var/folders/1l/gsglnf954_l4kswdj3ck104h0000gn/T/b11c37444b4b79e3f66aa4511719a073/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from '/Users/home/Documents/GitHub/dnd-9th-5-frontend/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkFirst as workbox_strategies_NetworkFirst} from '/Users/home/Documents/GitHub/dnd-9th-5-frontend/node_modules/workbox-strategies/NetworkFirst.mjs';\nimport {NetworkOnly as workbox_strategies_NetworkOnly} from '/Users/home/Documents/GitHub/dnd-9th-5-frontend/node_modules/workbox-strategies/NetworkOnly.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from '/Users/home/Documents/GitHub/dnd-9th-5-frontend/node_modules/workbox-core/clientsClaim.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\nimportScripts(\n \n);\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n\nworkbox_routing_registerRoute(\"/\", new workbox_strategies_NetworkFirst({ \"cacheName\":\"start-url\", plugins: [{ cacheWillUpdate: async ({ request, response, event, state }) => { if (response && response.type === 'opaqueredirect') { return new Response(response.body, { status: 200, statusText: 'OK', headers: response.headers }) } return response } }] }), 'GET');\nworkbox_routing_registerRoute(/.*/i, new workbox_strategies_NetworkOnly({ \"cacheName\":\"dev\", plugins: [] }), 'GET');\n\n\n\n\n"],"names":["importScripts","self","skipWaiting","workbox_core_clientsClaim","workbox_routing_registerRoute","workbox_strategies_NetworkFirst","plugins","cacheWillUpdate","request","response","event","state","type","Response","body","status","statusText","headers","workbox_strategies_NetworkOnly"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"sw.js","sources":["../../../../../private/var/folders/1l/gsglnf954_l4kswdj3ck104h0000gn/T/46fbca9efece3ef9bd8b682e52fcb2be/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from '/Users/home/Documents/GitHub/dnd-9th-5-frontend/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkFirst as workbox_strategies_NetworkFirst} from '/Users/home/Documents/GitHub/dnd-9th-5-frontend/node_modules/workbox-strategies/NetworkFirst.mjs';\nimport {NetworkOnly as workbox_strategies_NetworkOnly} from '/Users/home/Documents/GitHub/dnd-9th-5-frontend/node_modules/workbox-strategies/NetworkOnly.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from '/Users/home/Documents/GitHub/dnd-9th-5-frontend/node_modules/workbox-core/clientsClaim.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\nimportScripts(\n \n);\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n\nworkbox_routing_registerRoute(\"/\", new workbox_strategies_NetworkFirst({ \"cacheName\":\"start-url\", plugins: [{ cacheWillUpdate: async ({ request, response, event, state }) => { if (response && response.type === 'opaqueredirect') { return new Response(response.body, { status: 200, statusText: 'OK', headers: response.headers }) } return response } }] }), 'GET');\nworkbox_routing_registerRoute(/.*/i, new workbox_strategies_NetworkOnly({ \"cacheName\":\"dev\", plugins: [] }), 'GET');\n\n\n\n\n"],"names":["importScripts","self","skipWaiting","workbox_core_clientsClaim","workbox_routing_registerRoute","workbox_strategies_NetworkFirst","plugins","cacheWillUpdate","request","response","event","state","type","Response","body","status","statusText","headers","workbox_strategies_NetworkOnly"],"mappings":"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"} \ No newline at end of file diff --git a/src/app/(Main)/components/MainHeader.tsx b/src/app/(Main)/components/MainHeader.tsx index a6e46f9d..4a049847 100644 --- a/src/app/(Main)/components/MainHeader.tsx +++ b/src/app/(Main)/components/MainHeader.tsx @@ -1,4 +1,5 @@ import Image from 'next/image'; +import Link from 'next/link'; import Tab from './Tab'; import { Header } from '@/components/Header'; @@ -6,7 +7,11 @@ import { Header } from '@/components/Header'; export default function MainHeader() { return (
PosePicker} + leftNode={ + +

PosePicker

+ + } rightNode={24} headerDownNode={} className="px-20" diff --git a/src/app/(Main)/feed/components/Photo.tsx b/src/app/(Main)/feed/components/Photo.tsx index f28d98bf..f050e575 100644 --- a/src/app/(Main)/feed/components/Photo.tsx +++ b/src/app/(Main)/feed/components/Photo.tsx @@ -1,6 +1,9 @@ +'use client'; import Image from 'next/image'; import Link from 'next/link'; +import { Popup } from '@/components/Modal'; +import { useOverlay } from '@/components/Overlay/useOverlay'; import { ICON } from '@/constants/icon'; interface Photo { @@ -10,14 +13,39 @@ interface Photo { } export default function Photo({ imageKey, source, id }: Photo) { + const { open } = useOverlay(); return (
{imageKey && ( <> - {source} + {source
- ๐Ÿ”– + ๐Ÿ”– { + e.preventDefault(); + open(({ exit }) => ( + +

ํ•ด๋‹น ๊ธฐ๋Šฅ์€ ์•„์ง ์ค€๋น„์ค‘์ด์—์š”!

+

์—…๋ฐ์ดํŠธ๋ฅผ ๊ธฐ๋Œ€ํ•ด ์ฃผ์„ธ์š”.

+
+ )); + }} + />
)} diff --git a/src/app/favicon.ico b/src/app/favicon.ico index 3a9855ef..fb7df97f 100644 Binary files a/src/app/favicon.ico and b/src/app/favicon.ico differ diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 94f5ac20..930b8c6c 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -13,7 +13,7 @@ import type { Metadata } from 'next'; const DEFAULT_OG_TITLE = 'PosePicker'; const DEFAULT_OG_DESC = 'ํฌํ† ๋ถ€์Šค์—์„œ ๊ณ ๋ฏผํ•˜๋Š” ๋‹น์‹ ์„ ์œ„ํ•œ ํฌ์ฆˆ ์ถ”์ฒœ'; -const DEFAULT_OG_IMAGE = '/images/main.png'; +const DEFAULT_OG_IMAGE = '/images/main_star.png'; export const metadata: Metadata = { metadataBase: new URL(BASE_SITE_URL), diff --git a/src/components/Modal/Modal.tsx b/src/components/Modal/Modal.tsx index a9d2360a..b993e50d 100644 --- a/src/components/Modal/Modal.tsx +++ b/src/components/Modal/Modal.tsx @@ -1,14 +1,23 @@ import ModalWrapper from './PortalWrapper'; import { StrictPropsWithChildren } from '@/types'; -interface PopupProps { +interface PopupProps extends React.HTMLAttributes { className?: string; + onCloseOutside?: () => void; } -export default function Popup({ className, children }: StrictPropsWithChildren) { +export default function Popup({ + className, + children, + onCloseOutside, + ...props +}: StrictPropsWithChildren) { return ( - -
+ +
{children}
diff --git a/src/components/Modal/PortalWrapper.tsx b/src/components/Modal/PortalWrapper.tsx index 7f603cdf..b75f7232 100644 --- a/src/components/Modal/PortalWrapper.tsx +++ b/src/components/Modal/PortalWrapper.tsx @@ -7,7 +7,7 @@ import { useOnClickOutside } from '@/hooks/useOnClickOutside'; import type { StrictPropsWithChildren } from '@/types'; -interface PortalWrapperProps { +interface PortalWrapperProps extends React.HTMLAttributes { onClose?: () => void; isBackGroundBlur?: boolean; className?: string; @@ -18,6 +18,7 @@ export default function PortalWrapper({ children, isBackGroundBlur = true, className, + ...props }: StrictPropsWithChildren) { const portalRef = useRef(null); @@ -35,6 +36,7 @@ export default function PortalWrapper({ }, className )} + {...props} > {children}
diff --git a/src/components/Overlay/useOverlay.tsx b/src/components/Overlay/useOverlay.tsx index 7ae27156..ee313e31 100644 --- a/src/components/Overlay/useOverlay.tsx +++ b/src/components/Overlay/useOverlay.tsx @@ -8,9 +8,10 @@ let elementId = 1; interface Options { exitOnUnmount?: boolean; + delay?: number; } -export function useOverlay({ exitOnUnmount = true }: Options = {}) { +export function useOverlay({ exitOnUnmount = true, delay }: Options = {}) { const context = useContext(OverlayContext); if (context == null) { @@ -44,6 +45,11 @@ export function useOverlay({ exitOnUnmount = true }: Options = {}) { }} /> ); + if (!delay) return; + const timer = setTimeout(() => { + unmount(id); + }, delay); + return () => clearTimeout(timer); }, close: () => { overlayRef.current?.close(); @@ -52,6 +58,6 @@ export function useOverlay({ exitOnUnmount = true }: Options = {}) { unmount(id); }, }), - [id, mount, unmount] + [delay, id, mount, unmount] ); } diff --git a/src/components/WaitingToast/WaitingToast.tsx b/src/components/WaitingToast/WaitingToast.tsx new file mode 100644 index 00000000..94553165 --- /dev/null +++ b/src/components/WaitingToast/WaitingToast.tsx @@ -0,0 +1,13 @@ +interface WaitingToastProps { + onClose: () => void; +} +export default function WaitingToast({ onClose }: WaitingToastProps) { + return ( +
+ ํ•ด๋‹น ๊ธฐ๋Šฅ์€ ์ค€๋น„ ์ค‘์ž…๋‹ˆ๋‹ค. ์กฐ๊ธˆ๋งŒ ๊ธฐ๋‹ค๋ ค ์ฃผ์„ธ์š”! +
+ ); +} diff --git a/src/components/WaitingToast/index.ts b/src/components/WaitingToast/index.ts new file mode 100644 index 00000000..3618cbab --- /dev/null +++ b/src/components/WaitingToast/index.ts @@ -0,0 +1 @@ +export { default as WaitingToast } from './WaitingToast'; diff --git a/src/hooks/useKakaoShare.ts b/src/hooks/useKakaoShare.ts index 20781369..ef929514 100644 --- a/src/hooks/useKakaoShare.ts +++ b/src/hooks/useKakaoShare.ts @@ -23,8 +23,8 @@ export default function useKakaoShare() { kakao.Link.sendDefault({ objectType: 'feed', content: { - title: 'ํฌ์ฆˆ๋ฅผ ๋ฝ‘์•„๋ด !', - description: '๋‹น์‹ ์—๊ฒŒ ์–ด์šธ๋ฆฌ๋Š” ํฌ์ฆˆ๋ฅผ ์ถ”์ฒœํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค.', + title: 'PosePicker', + description: 'ํฌํ† ๋ถ€์Šค์—์„œ ๊ณ ๋ฏผํ•˜๋Š” ๋‹น์‹ ์„ ์œ„ํ•œ ํฌ์ฆˆ ์ถ”์ฒœ', imageUrl: 'https://github.com/gloddy-dev/gloddy-client/assets/62178788/a145c7ca-b487-4b2a-9913-cc1589e44f91', link: {