diff --git a/.pnp.cjs b/.pnp.cjs index cebb054a..1261e0a8 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -2865,6 +2865,14 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ + ["npm:7.26.10", {\ + "packageLocation": "./.yarn/cache/@babel-runtime-npm-7.26.10-d01a90d446-6dc6d88c79.zip/node_modules/@babel/runtime/",\ + "packageDependencies": [\ + ["@babel/runtime", "npm:7.26.10"],\ + ["regenerator-runtime", "npm:0.14.1"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:7.26.9", {\ "packageLocation": "./.yarn/cache/@babel-runtime-npm-7.26.9-8369ff039f-e851713111.zip/node_modules/@babel/runtime/",\ "packageDependencies": [\ @@ -3050,6 +3058,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "./packages/ui/",\ "packageDependencies": [\ ["@boolti/ui", "workspace:packages/ui"],\ + ["@boolti/bridge", "workspace:packages/bridge"],\ ["@boolti/eslint-config", "workspace:packages/config-eslint"],\ ["@boolti/icon", "workspace:packages/icon"],\ ["@boolti/typescript-config", "workspace:packages/config-typescript"],\ @@ -3057,6 +3066,7 @@ const RAW_RUNTIME_STATE = ["@emotion/styled", "virtual:85869d3eba7afdb6f94c001c9503942ddc4354e881daf63c24e9d58366ea9f25c6bac2df65ae0f5266c54cd36fe68f0d9568da3a1ab62446405c98ac852f4431#npm:11.11.0"],\ ["@react-spring/web", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:9.7.3"],\ ["@types/mdast", "npm:4.0.4"],\ + ["@types/navermaps", "npm:3.7.9"],\ ["@types/react", "npm:18.2.48"],\ ["@types/react-dom", "npm:18.2.18"],\ ["linkify-react", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:4.1.3"],\ @@ -3068,6 +3078,7 @@ const RAW_RUNTIME_STATE = ["react-dom", "virtual:de80dc576383b2386358abc0e9fe49c00e3397fe355a0337462b73ab3115c2e557eb85784ee0fe776394cc11dd020b4e84dbbd75acf72ee6d54415d82d21f5c5#npm:18.2.0"],\ ["react-hot-toast", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:2.4.1"],\ ["react-markdown", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:10.0.1"],\ + ["react-naver-maps", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:0.1.3"],\ ["rehype-raw", "npm:7.0.0"],\ ["remark-directive", "npm:4.0.0"],\ ["swiper", "npm:11.0.7"],\ @@ -9899,6 +9910,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@types/geojson", [\ + ["npm:7946.0.16", {\ + "packageLocation": "./.yarn/cache/@types-geojson-npm-7946.0.16-7a73d95991-1ff24a288b.zip/node_modules/@types/geojson/",\ + "packageDependencies": [\ + ["@types/geojson", "npm:7946.0.16"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@types/glob", [\ ["npm:7.2.0", {\ "packageLocation": "./.yarn/cache/@types-glob-npm-7.2.0-772334bf9a-a8eb5d5cb5.zip/node_modules/@types/glob/",\ @@ -9969,6 +9989,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@types/js-cookie", [\ + ["npm:2.2.7", {\ + "packageLocation": "./.yarn/cache/@types-js-cookie-npm-2.2.7-025262d629-29196c6829.zip/node_modules/@types/js-cookie/",\ + "packageDependencies": [\ + ["@types/js-cookie", "npm:2.2.7"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:3.0.6", {\ "packageLocation": "./.yarn/cache/@types-js-cookie-npm-3.0.6-c9126e5b48-173afaf5ea.zip/node_modules/@types/js-cookie/",\ "packageDependencies": [\ @@ -10085,6 +10112,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@types/navermaps", [\ + ["npm:3.7.9", {\ + "packageLocation": "./.yarn/cache/@types-navermaps-npm-3.7.9-451740b1b0-f97549153f.zip/node_modules/@types/navermaps/",\ + "packageDependencies": [\ + ["@types/navermaps", "npm:3.7.9"],\ + ["@types/geojson", "npm:7946.0.16"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@types/node", [\ ["npm:18.19.14", {\ "packageLocation": "./.yarn/cache/@types-node-npm-18.19.14-831fffe812-a614e85d3d.zip/node_modules/@types/node/",\ @@ -10702,6 +10739,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@xobotyi/scrollbar-width", [\ + ["npm:1.9.5", {\ + "packageLocation": "./.yarn/cache/@xobotyi-scrollbar-width-npm-1.9.5-00ae5c32d1-4ebc79e4f7.zip/node_modules/@xobotyi/scrollbar-width/",\ + "packageDependencies": [\ + ["@xobotyi/scrollbar-width", "npm:1.9.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@yarnpkg/esbuild-plugin-pnp", [\ ["npm:3.0.0-rc.15", {\ "packageLocation": "./.yarn/cache/@yarnpkg-esbuild-plugin-pnp-npm-3.0.0-rc.15-b916c218b3-5095bc3168.zip/node_modules/@yarnpkg/esbuild-plugin-pnp/",\ @@ -10912,6 +10958,7 @@ const RAW_RUNTIME_STATE = ["@tanstack/react-table", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:8.12.0"],\ ["@types/js-cookie", "npm:3.0.6"],\ ["@types/lodash.debounce", "npm:4.0.9"],\ + ["@types/navermaps", "npm:3.7.9"],\ ["@types/react", "npm:18.2.48"],\ ["@types/react-dom", "npm:18.2.18"],\ ["@vitejs/plugin-react", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:4.2.1"],\ @@ -10930,6 +10977,7 @@ const RAW_RUNTIME_STATE = ["react-hook-form", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:7.50.0"],\ ["react-i18next", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:15.4.1"],\ ["react-intersection-observer", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:9.8.0"],\ + ["react-naver-maps", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:0.1.3"],\ ["react-pdf", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:9.0.0"],\ ["react-router-dom", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:6.21.3"],\ ["react-select", "virtual:9845906954fdbefbb879db24fa8772d77a945dca59f459806df47a5b67245d4bc6502880b373cca7201062c81bea9f13f699f52de2004c037e79dbdbd5d97fb3#npm:5.8.0"],\ @@ -12522,6 +12570,27 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["css-in-js-utils", [\ + ["npm:3.1.0", {\ + "packageLocation": "./.yarn/cache/css-in-js-utils-npm-3.1.0-a94a5fc05c-8bb042e8f7.zip/node_modules/css-in-js-utils/",\ + "packageDependencies": [\ + ["css-in-js-utils", "npm:3.1.0"],\ + ["hyphenate-style-name", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["css-tree", [\ + ["npm:1.1.3", {\ + "packageLocation": "./.yarn/cache/css-tree-npm-1.1.3-9c46f35513-499a507bfa.zip/node_modules/css-tree/",\ + "packageDependencies": [\ + ["css-tree", "npm:1.1.3"],\ + ["mdn-data", "npm:2.0.14"],\ + ["source-map", "npm:0.6.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["css.escape", [\ ["npm:1.5.1", {\ "packageLocation": "./.yarn/cache/css.escape-npm-1.5.1-b24d2ba77a-5e09035e5b.zip/node_modules/css.escape/",\ @@ -13227,6 +13296,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["error-stack-parser", [\ + ["npm:2.1.4", {\ + "packageLocation": "./.yarn/cache/error-stack-parser-npm-2.1.4-5b9f7fc0c2-7679b78004.zip/node_modules/error-stack-parser/",\ + "packageDependencies": [\ + ["error-stack-parser", "npm:2.1.4"],\ + ["stackframe", "npm:1.3.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["es-abstract", [\ ["npm:1.22.3", {\ "packageLocation": "./.yarn/cache/es-abstract-npm-1.22.3-15a58832e5-da31ec43b1.zip/node_modules/es-abstract/",\ @@ -14140,6 +14219,24 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["fast-shallow-equal", [\ + ["npm:1.0.0", {\ + "packageLocation": "./.yarn/cache/fast-shallow-equal-npm-1.0.0-b14ca484b4-526c393c01.zip/node_modules/fast-shallow-equal/",\ + "packageDependencies": [\ + ["fast-shallow-equal", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fastest-stable-stringify", [\ + ["npm:2.0.2", {\ + "packageLocation": "./.yarn/cache/fastest-stable-stringify-npm-2.0.2-f2a059d214-abbe5ff48f.zip/node_modules/fastest-stable-stringify/",\ + "packageDependencies": [\ + ["fastest-stable-stringify", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["fastq", [\ ["npm:1.16.0", {\ "packageLocation": "./.yarn/cache/fastq-npm-1.16.0-88070bb399-38c1b49adb.zip/node_modules/fastq/",\ @@ -15245,6 +15342,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["hyphenate-style-name", [\ + ["npm:1.1.0", {\ + "packageLocation": "./.yarn/cache/hyphenate-style-name-npm-1.1.0-9ef705067a-bfe88deac2.zip/node_modules/hyphenate-style-name/",\ + "packageDependencies": [\ + ["hyphenate-style-name", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["i18next", [\ ["npm:24.2.2", {\ "packageLocation": "./.yarn/cache/i18next-npm-24.2.2-77e939b2d8-df2f08f7e7.zip/node_modules/i18next/",\ @@ -15371,6 +15477,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["inline-style-prefixer", [\ + ["npm:7.0.1", {\ + "packageLocation": "./.yarn/cache/inline-style-prefixer-npm-7.0.1-8ec6009c17-15da5a396b.zip/node_modules/inline-style-prefixer/",\ + "packageDependencies": [\ + ["inline-style-prefixer", "npm:7.0.1"],\ + ["css-in-js-utils", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["internal-slot", [\ ["npm:1.0.6", {\ "packageLocation": "./.yarn/cache/internal-slot-npm-1.0.6-1ed833e09a-aa37cafc8f.zip/node_modules/internal-slot/",\ @@ -16064,6 +16180,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["js-cookie", [\ + ["npm:2.2.1", {\ + "packageLocation": "./.yarn/cache/js-cookie-npm-2.2.1-e879cd2148-ee67fc0f84.zip/node_modules/js-cookie/",\ + "packageDependencies": [\ + ["js-cookie", "npm:2.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["js-tokens", [\ ["npm:4.0.0", {\ "packageLocation": "./.yarn/cache/js-tokens-npm-4.0.0-0ac852e9e2-e248708d37.zip/node_modules/js-tokens/",\ @@ -16355,6 +16480,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["load-script", [\ + ["npm:2.0.0", {\ + "packageLocation": "./.yarn/cache/load-script-npm-2.0.0-005874056f-118bd891f0.zip/node_modules/load-script/",\ + "packageDependencies": [\ + ["load-script", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["locate-path", [\ ["npm:3.0.0", {\ "packageLocation": "./.yarn/cache/locate-path-npm-3.0.0-991671ae9f-3db394b782.zip/node_modules/locate-path/",\ @@ -16400,6 +16534,24 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["lodash.isempty", [\ + ["npm:4.4.0", {\ + "packageLocation": "./.yarn/cache/lodash.isempty-npm-4.4.0-9997a8300c-6c7eaa0802.zip/node_modules/lodash.isempty/",\ + "packageDependencies": [\ + ["lodash.isempty", "npm:4.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.mapkeys", [\ + ["npm:4.6.0", {\ + "packageLocation": "./.yarn/cache/lodash.mapkeys-npm-4.6.0-ddec96aa53-5e7028eb54.zip/node_modules/lodash.mapkeys/",\ + "packageDependencies": [\ + ["lodash.mapkeys", "npm:4.6.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["lodash.merge", [\ ["npm:4.6.2", {\ "packageLocation": "./.yarn/cache/lodash.merge-npm-4.6.2-77cb4416bf-402fa16a1e.zip/node_modules/lodash.merge/",\ @@ -16409,6 +16561,33 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["lodash.omit", [\ + ["npm:4.5.0", {\ + "packageLocation": "./.yarn/cache/lodash.omit-npm-4.5.0-786639f9a0-3808b9b6fa.zip/node_modules/lodash.omit/",\ + "packageDependencies": [\ + ["lodash.omit", "npm:4.5.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.pick", [\ + ["npm:4.4.0", {\ + "packageLocation": "./.yarn/cache/lodash.pick-npm-4.4.0-126deebf95-a04c460b95.zip/node_modules/lodash.pick/",\ + "packageDependencies": [\ + ["lodash.pick", "npm:4.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.upperfirst", [\ + ["npm:4.3.1", {\ + "packageLocation": "./.yarn/cache/lodash.upperfirst-npm-4.3.1-e3b7c364ba-435625da4b.zip/node_modules/lodash.upperfirst/",\ + "packageDependencies": [\ + ["lodash.upperfirst", "npm:4.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["log-symbols", [\ ["npm:4.1.0", {\ "packageLocation": "./.yarn/cache/log-symbols-npm-4.1.0-0a13492d8b-67f445a9ff.zip/node_modules/log-symbols/",\ @@ -16870,6 +17049,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["mdn-data", [\ + ["npm:2.0.14", {\ + "packageLocation": "./.yarn/cache/mdn-data-npm-2.0.14-0acd669f0d-67241f8708.zip/node_modules/mdn-data/",\ + "packageDependencies": [\ + ["mdn-data", "npm:2.0.14"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["media-engine", [\ ["npm:1.0.3", {\ "packageLocation": "./.yarn/cache/media-engine-npm-1.0.3-95c823ed38-60e602ec36.zip/node_modules/media-engine/",\ @@ -17705,6 +17893,40 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["nano-css", [\ + ["npm:5.6.2", {\ + "packageLocation": "./.yarn/cache/nano-css-npm-5.6.2-e9f1e2f295-566fb94038.zip/node_modules/nano-css/",\ + "packageDependencies": [\ + ["nano-css", "npm:5.6.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:d305f667f61b1ecb33d6e55997331cbedfe97145a3533fc5540980e84b903532b1d9c8d36c6fa32d2eb4facefa2a8b12ff677bcf9991cd35b741b57a2a2686bd#npm:5.6.2", {\ + "packageLocation": "./.yarn/__virtual__/nano-css-virtual-439796e3bd/0/cache/nano-css-npm-5.6.2-e9f1e2f295-566fb94038.zip/node_modules/nano-css/",\ + "packageDependencies": [\ + ["nano-css", "virtual:d305f667f61b1ecb33d6e55997331cbedfe97145a3533fc5540980e84b903532b1d9c8d36c6fa32d2eb4facefa2a8b12ff677bcf9991cd35b741b57a2a2686bd#npm:5.6.2"],\ + ["@jridgewell/sourcemap-codec", "npm:1.4.15"],\ + ["@types/react", "npm:18.2.48"],\ + ["@types/react-dom", "npm:18.2.18"],\ + ["css-tree", "npm:1.1.3"],\ + ["csstype", "npm:3.1.3"],\ + ["fastest-stable-stringify", "npm:2.0.2"],\ + ["inline-style-prefixer", "npm:7.0.1"],\ + ["react", "npm:18.2.0"],\ + ["react-dom", "virtual:de80dc576383b2386358abc0e9fe49c00e3397fe355a0337462b73ab3115c2e557eb85784ee0fe776394cc11dd020b4e84dbbd75acf72ee6d54415d82d21f5c5#npm:18.2.0"],\ + ["rtl-css-js", "npm:1.16.1"],\ + ["stacktrace-js", "npm:2.0.2"],\ + ["stylis", "npm:4.3.6"]\ + ],\ + "packagePeers": [\ + "@types/react-dom",\ + "@types/react",\ + "react-dom",\ + "react"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["nanoid", [\ ["npm:3.3.7", {\ "packageLocation": "./.yarn/cache/nanoid-npm-3.3.7-98824ba130-e3fb661aa0.zip/node_modules/nanoid/",\ @@ -18591,6 +18813,7 @@ const RAW_RUNTIME_STATE = ["@emotion/babel-plugin", "npm:11.11.0"],\ ["@emotion/react", "virtual:de80dc576383b2386358abc0e9fe49c00e3397fe355a0337462b73ab3115c2e557eb85784ee0fe776394cc11dd020b4e84dbbd75acf72ee6d54415d82d21f5c5#npm:11.11.3"],\ ["@emotion/styled", "virtual:85869d3eba7afdb6f94c001c9503942ddc4354e881daf63c24e9d58366ea9f25c6bac2df65ae0f5266c54cd36fe68f0d9568da3a1ab62446405c98ac852f4431#npm:11.11.0"],\ + ["@types/navermaps", "npm:3.7.9"],\ ["@types/react", "npm:18.2.48"],\ ["@types/react-dom", "npm:18.2.18"],\ ["@types/react-helmet", "npm:6.1.11"],\ @@ -18600,6 +18823,7 @@ const RAW_RUNTIME_STATE = ["react", "npm:18.2.0"],\ ["react-dom", "virtual:de80dc576383b2386358abc0e9fe49c00e3397fe355a0337462b73ab3115c2e557eb85784ee0fe776394cc11dd020b4e84dbbd75acf72ee6d54415d82d21f5c5#npm:18.2.0"],\ ["react-helmet-async", "virtual:0d9620f91cc1220bb659f4fc4375454dc3f511d634580e77befd72fe2f8a7c5971f905c99a7ff5b46030c3be1a39ff23ffff46b1a61faf7cc00e24d40b49b38f#npm:2.0.5"],\ + ["react-naver-maps", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:0.1.3"],\ ["react-router-dom", "virtual:0d9620f91cc1220bb659f4fc4375454dc3f511d634580e77befd72fe2f8a7c5971f905c99a7ff5b46030c3be1a39ff23ffff46b1a61faf7cc00e24d40b49b38f#npm:6.22.3"],\ ["swiper", "npm:11.1.14"],\ ["the-new-css-reset", "npm:1.11.2"],\ @@ -20552,6 +20776,42 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["react-naver-maps", [\ + ["npm:0.1.3", {\ + "packageLocation": "./.yarn/cache/react-naver-maps-npm-0.1.3-835b7ca050-3d04952fea.zip/node_modules/react-naver-maps/",\ + "packageDependencies": [\ + ["react-naver-maps", "npm:0.1.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:0.1.3", {\ + "packageLocation": "./.yarn/__virtual__/react-naver-maps-virtual-48c781c81c/0/cache/react-naver-maps-npm-0.1.3-835b7ca050-3d04952fea.zip/node_modules/react-naver-maps/",\ + "packageDependencies": [\ + ["react-naver-maps", "virtual:9ef42ff9c873460955cc48cd9b15127324f3d1f83a4bea8e6327df0101bb993bef095b175f8d10a3f0d23ee47f702ca3ef7272cba815f708e8609d03d84b96a2#npm:0.1.3"],\ + ["@types/react", "npm:18.2.48"],\ + ["@types/react-dom", "npm:18.2.18"],\ + ["camelcase", "npm:5.3.1"],\ + ["load-script", "npm:2.0.0"],\ + ["lodash.isempty", "npm:4.4.0"],\ + ["lodash.mapkeys", "npm:4.6.0"],\ + ["lodash.omit", "npm:4.5.0"],\ + ["lodash.pick", "npm:4.4.0"],\ + ["lodash.upperfirst", "npm:4.3.1"],\ + ["prop-types", "npm:15.8.1"],\ + ["react", "npm:18.2.0"],\ + ["react-dom", "virtual:de80dc576383b2386358abc0e9fe49c00e3397fe355a0337462b73ab3115c2e557eb85784ee0fe776394cc11dd020b4e84dbbd75acf72ee6d54415d82d21f5c5#npm:18.2.0"],\ + ["react-use", "virtual:48c781c81c466c8cfd591325ccfdfb0d30e15ee8477554bb6268defd63a30d5d9aaafb9655cc0858269985d1045e61a667f2372126fad0ea46d3fe27ab33b5f3#npm:17.6.0"],\ + ["suspend-react", "virtual:48c781c81c466c8cfd591325ccfdfb0d30e15ee8477554bb6268defd63a30d5d9aaafb9655cc0858269985d1045e61a667f2372126fad0ea46d3fe27ab33b5f3#npm:0.0.8"]\ + ],\ + "packagePeers": [\ + "@types/react-dom",\ + "@types/react",\ + "react-dom",\ + "react"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["react-pdf", [\ ["npm:9.0.0", {\ "packageLocation": "./.yarn/cache/react-pdf-npm-9.0.0-63b907a3eb-c9e5606ee5.zip/node_modules/react-pdf/",\ @@ -20980,6 +21240,72 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["react-universal-interface", [\ + ["npm:0.6.2", {\ + "packageLocation": "./.yarn/cache/react-universal-interface-npm-0.6.2-795659cd0e-97c32ecb7a.zip/node_modules/react-universal-interface/",\ + "packageDependencies": [\ + ["react-universal-interface", "npm:0.6.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:d305f667f61b1ecb33d6e55997331cbedfe97145a3533fc5540980e84b903532b1d9c8d36c6fa32d2eb4facefa2a8b12ff677bcf9991cd35b741b57a2a2686bd#npm:0.6.2", {\ + "packageLocation": "./.yarn/__virtual__/react-universal-interface-virtual-35035b7e35/0/cache/react-universal-interface-npm-0.6.2-795659cd0e-97c32ecb7a.zip/node_modules/react-universal-interface/",\ + "packageDependencies": [\ + ["react-universal-interface", "virtual:d305f667f61b1ecb33d6e55997331cbedfe97145a3533fc5540980e84b903532b1d9c8d36c6fa32d2eb4facefa2a8b12ff677bcf9991cd35b741b57a2a2686bd#npm:0.6.2"],\ + ["@types/react", "npm:18.2.48"],\ + ["@types/tslib", null],\ + ["react", "npm:18.2.0"],\ + ["tslib", "npm:2.6.2"]\ + ],\ + "packagePeers": [\ + "@types/react",\ + "@types/tslib",\ + "react",\ + "tslib"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["react-use", [\ + ["npm:17.6.0", {\ + "packageLocation": "./.yarn/cache/react-use-npm-17.6.0-327459097c-d122199f3e.zip/node_modules/react-use/",\ + "packageDependencies": [\ + ["react-use", "npm:17.6.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:48c781c81c466c8cfd591325ccfdfb0d30e15ee8477554bb6268defd63a30d5d9aaafb9655cc0858269985d1045e61a667f2372126fad0ea46d3fe27ab33b5f3#npm:17.6.0", {\ + "packageLocation": "./.yarn/__virtual__/react-use-virtual-d305f667f6/0/cache/react-use-npm-17.6.0-327459097c-d122199f3e.zip/node_modules/react-use/",\ + "packageDependencies": [\ + ["react-use", "virtual:48c781c81c466c8cfd591325ccfdfb0d30e15ee8477554bb6268defd63a30d5d9aaafb9655cc0858269985d1045e61a667f2372126fad0ea46d3fe27ab33b5f3#npm:17.6.0"],\ + ["@types/js-cookie", "npm:2.2.7"],\ + ["@types/react", "npm:18.2.48"],\ + ["@types/react-dom", "npm:18.2.18"],\ + ["@xobotyi/scrollbar-width", "npm:1.9.5"],\ + ["copy-to-clipboard", "npm:3.3.3"],\ + ["fast-deep-equal", "npm:3.1.3"],\ + ["fast-shallow-equal", "npm:1.0.0"],\ + ["js-cookie", "npm:2.2.1"],\ + ["nano-css", "virtual:d305f667f61b1ecb33d6e55997331cbedfe97145a3533fc5540980e84b903532b1d9c8d36c6fa32d2eb4facefa2a8b12ff677bcf9991cd35b741b57a2a2686bd#npm:5.6.2"],\ + ["react", "npm:18.2.0"],\ + ["react-dom", "virtual:de80dc576383b2386358abc0e9fe49c00e3397fe355a0337462b73ab3115c2e557eb85784ee0fe776394cc11dd020b4e84dbbd75acf72ee6d54415d82d21f5c5#npm:18.2.0"],\ + ["react-universal-interface", "virtual:d305f667f61b1ecb33d6e55997331cbedfe97145a3533fc5540980e84b903532b1d9c8d36c6fa32d2eb4facefa2a8b12ff677bcf9991cd35b741b57a2a2686bd#npm:0.6.2"],\ + ["resize-observer-polyfill", "npm:1.5.1"],\ + ["screenfull", "npm:5.2.0"],\ + ["set-harmonic-interval", "npm:1.0.1"],\ + ["throttle-debounce", "npm:3.0.1"],\ + ["ts-easing", "npm:0.2.0"],\ + ["tslib", "npm:2.6.2"]\ + ],\ + "packagePeers": [\ + "@types/react-dom",\ + "@types/react",\ + "react-dom",\ + "react"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["read-pkg", [\ ["npm:5.2.0", {\ "packageLocation": "./.yarn/cache/read-pkg-npm-5.2.0-50426bd8dc-b51a17d4b5.zip/node_modules/read-pkg/",\ @@ -21407,6 +21733,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["rtl-css-js", [\ + ["npm:1.16.1", {\ + "packageLocation": "./.yarn/cache/rtl-css-js-npm-1.16.1-b3547849c7-4b81ef50e5.zip/node_modules/rtl-css-js/",\ + "packageDependencies": [\ + ["rtl-css-js", "npm:1.16.1"],\ + ["@babel/runtime", "npm:7.26.10"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["run-parallel", [\ ["npm:1.2.0", {\ "packageLocation": "./.yarn/cache/run-parallel-npm-1.2.0-3f47ff2034-200b5ab25b.zip/node_modules/run-parallel/",\ @@ -21486,6 +21822,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["screenfull", [\ + ["npm:5.2.0", {\ + "packageLocation": "./.yarn/cache/screenfull-npm-5.2.0-d920287dd9-86fd49983e.zip/node_modules/screenfull/",\ + "packageDependencies": [\ + ["screenfull", "npm:5.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["scroll-into-view-if-needed", [\ ["npm:3.1.0", {\ "packageLocation": "./.yarn/cache/scroll-into-view-if-needed-npm-3.1.0-2dc60135f0-1f46b090e1.zip/node_modules/scroll-into-view-if-needed/",\ @@ -21590,6 +21935,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["set-harmonic-interval", [\ + ["npm:1.0.1", {\ + "packageLocation": "./.yarn/cache/set-harmonic-interval-npm-1.0.1-2f840592b2-49014d928a.zip/node_modules/set-harmonic-interval/",\ + "packageDependencies": [\ + ["set-harmonic-interval", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["setprototypeof", [\ ["npm:1.2.0", {\ "packageLocation": "./.yarn/cache/setprototypeof-npm-1.2.0-0fedbdcd3a-6873317302.zip/node_modules/setprototypeof/",\ @@ -21747,6 +22101,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["source-map", [\ + ["npm:0.5.6", {\ + "packageLocation": "./.yarn/cache/source-map-npm-0.5.6-ac261b6171-beb2c5974b.zip/node_modules/source-map/",\ + "packageDependencies": [\ + ["source-map", "npm:0.5.6"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:0.5.7", {\ "packageLocation": "./.yarn/cache/source-map-npm-0.5.7-7c3f035429-904e767bb9.zip/node_modules/source-map/",\ "packageDependencies": [\ @@ -21857,6 +22218,48 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["stack-generator", [\ + ["npm:2.0.10", {\ + "packageLocation": "./.yarn/cache/stack-generator-npm-2.0.10-e7aec8545f-c3f6f6c580.zip/node_modules/stack-generator/",\ + "packageDependencies": [\ + ["stack-generator", "npm:2.0.10"],\ + ["stackframe", "npm:1.3.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["stackframe", [\ + ["npm:1.3.4", {\ + "packageLocation": "./.yarn/cache/stackframe-npm-1.3.4-bf4b7cc8fd-18410f7a1e.zip/node_modules/stackframe/",\ + "packageDependencies": [\ + ["stackframe", "npm:1.3.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["stacktrace-gps", [\ + ["npm:3.1.2", {\ + "packageLocation": "./.yarn/cache/stacktrace-gps-npm-3.1.2-8c7130b84d-0dcc1aa46e.zip/node_modules/stacktrace-gps/",\ + "packageDependencies": [\ + ["stacktrace-gps", "npm:3.1.2"],\ + ["source-map", "npm:0.5.6"],\ + ["stackframe", "npm:1.3.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["stacktrace-js", [\ + ["npm:2.0.2", {\ + "packageLocation": "./.yarn/cache/stacktrace-js-npm-2.0.2-f022fac9f9-9a10c22252.zip/node_modules/stacktrace-js/",\ + "packageDependencies": [\ + ["stacktrace-js", "npm:2.0.2"],\ + ["error-stack-parser", "npm:2.1.4"],\ + ["stack-generator", "npm:2.0.10"],\ + ["stacktrace-gps", "npm:3.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["static-browser-server", [\ ["npm:1.0.3", {\ "packageLocation": "./.yarn/cache/static-browser-server-npm-1.0.3-4e0f6e3459-fc82cecdc3.zip/node_modules/static-browser-server/",\ @@ -22204,6 +22607,13 @@ const RAW_RUNTIME_STATE = ["stylis", "npm:4.3.2"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:4.3.6", {\ + "packageLocation": "./.yarn/cache/stylis-npm-4.3.6-e4f9cb4f94-e736d48498.zip/node_modules/stylis/",\ + "packageDependencies": [\ + ["stylis", "npm:4.3.6"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["super-admin", [\ @@ -22272,6 +22682,28 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["suspend-react", [\ + ["npm:0.0.8", {\ + "packageLocation": "./.yarn/cache/suspend-react-npm-0.0.8-1962c8b944-a81221eea8.zip/node_modules/suspend-react/",\ + "packageDependencies": [\ + ["suspend-react", "npm:0.0.8"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:48c781c81c466c8cfd591325ccfdfb0d30e15ee8477554bb6268defd63a30d5d9aaafb9655cc0858269985d1045e61a667f2372126fad0ea46d3fe27ab33b5f3#npm:0.0.8", {\ + "packageLocation": "./.yarn/__virtual__/suspend-react-virtual-005ddc49fc/0/cache/suspend-react-npm-0.0.8-1962c8b944-a81221eea8.zip/node_modules/suspend-react/",\ + "packageDependencies": [\ + ["suspend-react", "virtual:48c781c81c466c8cfd591325ccfdfb0d30e15ee8477554bb6268defd63a30d5d9aaafb9655cc0858269985d1045e61a667f2372126fad0ea46d3fe27ab33b5f3#npm:0.0.8"],\ + ["@types/react", "npm:18.2.48"],\ + ["react", "npm:18.2.0"]\ + ],\ + "packagePeers": [\ + "@types/react",\ + "react"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["svg-arc-to-cubic-bezier", [\ ["npm:3.2.0", {\ "packageLocation": "./.yarn/cache/svg-arc-to-cubic-bezier-npm-3.2.0-06dd5e62ac-6dddbaff9d.zip/node_modules/svg-arc-to-cubic-bezier/",\ @@ -22433,6 +22865,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["throttle-debounce", [\ + ["npm:3.0.1", {\ + "packageLocation": "./.yarn/cache/throttle-debounce-npm-3.0.1-1785e6b767-c8e5584794.zip/node_modules/throttle-debounce/",\ + "packageDependencies": [\ + ["throttle-debounce", "npm:3.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:5.0.0", {\ "packageLocation": "./.yarn/cache/throttle-debounce-npm-5.0.0-f5662f7aca-666d5b73bf.zip/node_modules/throttle-debounce/",\ "packageDependencies": [\ @@ -22612,6 +23051,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["ts-easing", [\ + ["npm:0.2.0", {\ + "packageLocation": "./.yarn/cache/ts-easing-npm-0.2.0-988adf6a8d-84ec201923.zip/node_modules/ts-easing/",\ + "packageDependencies": [\ + ["ts-easing", "npm:0.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["tsconfig-paths", [\ ["npm:3.15.0", {\ "packageLocation": "./.yarn/cache/tsconfig-paths-npm-3.15.0-ff68930e0e-5b4f301a2b.zip/node_modules/tsconfig-paths/",\ diff --git a/apps/admin/package.json b/apps/admin/package.json index 4a7d6fbd..2f82f06f 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -43,6 +43,7 @@ "react-hook-form": "^7.50.0", "react-i18next": "^15.4.1", "react-intersection-observer": "^9.8.0", + "react-naver-maps": "^0.1.3", "react-pdf": "^9.0.0", "react-router-dom": "^6.21.3", "react-select": "^5.8.0", @@ -55,6 +56,7 @@ "@boolti/typescript-config": "*", "@emotion/babel-plugin": "^11.11.0", "@types/js-cookie": "^3.0.6", + "@types/navermaps": "^3.7.9", "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", "@vitejs/plugin-react": "^4.2.1", diff --git a/apps/admin/src/App.tsx b/apps/admin/src/App.tsx index 1ecc0349..758d8f6c 100644 --- a/apps/admin/src/App.tsx +++ b/apps/admin/src/App.tsx @@ -2,7 +2,7 @@ import 'the-new-css-reset/css/reset.css'; import '@mdxeditor/editor/style.css'; import './index.css'; import './i18n'; - +import { NavermapsProvider } from 'react-naver-maps'; import { QueryClientProvider } from '@boolti/api'; import { BooltiUIProvider } from '@boolti/ui'; import { setDefaultOptions } from 'date-fns'; @@ -43,6 +43,7 @@ import ShowSettlementPage from './pages/ShowSettlementPage'; import ShowEnterancePage from './pages/ShowEnterancePage'; import { initVConsole } from './utils/vConsole'; import { checkIsWebView } from '@boolti/bridge'; +import { X_NCP_APIGW_API_KEY_ID } from './constants/ncp'; import { IS_PRODUCTION_PHASE } from './constants/phase'; import WebView from './pages/WebView'; @@ -159,7 +160,9 @@ const routes: RouteObject[] = [ - + + + @@ -176,7 +179,11 @@ const routes: RouteObject[] = [ const router = createBrowserRouter(routes); const App = () => { - return ; + return ( + + + + ); }; export default App; diff --git a/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx b/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx index 2b2e8825..44c3fef4 100644 --- a/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx +++ b/apps/admin/src/components/ShowInfoFormContent/ShowBasicInfoFormContent.tsx @@ -1,10 +1,11 @@ -import { ImageFile } from '@boolti/api'; +import { ImageFile, fetcher } from '@boolti/api'; import { CloseIcon, FileUpIcon } from '@boolti/icon'; import { Button, TextField, TimePicker, useDialog } from '@boolti/ui'; import { add, format } from 'date-fns'; import { useRef } from 'react'; import { useDropzone } from 'react-dropzone'; import { Controller, UseFormReturn } from 'react-hook-form'; +import { useNavermaps } from 'react-naver-maps'; import DaumPostcode from 'react-daum-postcode'; import Styled from './ShowInfoFormContent.styles'; @@ -30,6 +31,7 @@ const ShowBasicInfoFormContent = ({ onDeleteImage, }: ShowBasicInfoFormContentProps) => { const { open, close, isOpen } = useDialog(); + const naverMaps = useNavermaps(); const detailAddressInputRef = useRef(null); const { @@ -56,8 +58,31 @@ const ShowBasicInfoFormContent = ({ content: ( { + onComplete={async (address) => { + const response = await fetcher.get( + 'web/v1/naver-maps/geocoding', + { + searchParams: { + query: address.address, + filter: `BCODE@${address.bcode};`, + }, + }, + ); + + if ( + response.status === naverMaps.Service.GeocodeStatus.OK && + response.meta.totalCount > 0 + ) { + const foundAddress = response.addresses.find(Boolean); + + if (foundAddress) { + setValue('latitude', Number(foundAddress.y)); + setValue('longitude', Number(foundAddress.x)); + } + } + setValue('placeStreetAddress', address.roadAddress); + detailAddressInputRef.current?.focus(); }} onClose={() => { diff --git a/apps/admin/src/components/ShowInfoFormContent/ShowDetailInfoFormContent.tsx b/apps/admin/src/components/ShowInfoFormContent/ShowDetailInfoFormContent.tsx index 17be06c1..9169384f 100644 --- a/apps/admin/src/components/ShowInfoFormContent/ShowDetailInfoFormContent.tsx +++ b/apps/admin/src/components/ShowInfoFormContent/ShowDetailInfoFormContent.tsx @@ -38,9 +38,7 @@ const ShowDetailInfoFormContent = ({ form, disabled }: ShowDetailInfoFormContent rules={{ required: true, }} - render={({ field: { onChange, onBlur, value } }) => { - if (value === undefined) return <>; - + render={({ field: { onChange, onBlur, value = '' } }) => { return ( { images: showImageInfo, date: `${showBasicInfoForm.getValues('date')}T${showBasicInfoForm.getValues('startTime')}:00.000Z`, runningTime: Number(showBasicInfoForm.getValues('runningTime')), + latitude: showBasicInfoForm.getValues('latitude'), + longitude: showBasicInfoForm.getValues('longitude'), place: { name: showBasicInfoForm.getValues('placeName'), streetAddress: showBasicInfoForm.getValues('placeStreetAddress'), diff --git a/apps/admin/src/pages/ShowInfoPage/index.tsx b/apps/admin/src/pages/ShowInfoPage/index.tsx index c5d99e92..33fb7b26 100644 --- a/apps/admin/src/pages/ShowInfoPage/index.tsx +++ b/apps/admin/src/pages/ShowInfoPage/index.tsx @@ -120,6 +120,8 @@ const ShowInfoPage = () => { thumbnailPath: image.thumbnailPath, path: image.path, })), + latitude: showBasicInfoForm.getValues('latitude'), + longitude: showBasicInfoForm.getValues('longitude'), date: `${showBasicInfoFormInputs.date}T${showBasicInfoFormInputs.startTime}:00.000Z`, runningTime: +showBasicInfoFormInputs.runningTime, place: { @@ -163,17 +165,19 @@ const ShowInfoPage = () => { ]); const confirmSaveShowInfo = useCallback(async () => { - const isDirty = Object.values(showBasicInfoForm.formState.dirtyFields).some((value) => value) || + const isDirty = + Object.values(showBasicInfoForm.formState.dirtyFields).some((value) => value) || Object.values(showDetailInfoForm.formState.dirtyFields).some((value) => value) || isImageFilesDirty || - isCastTeamListDraftDirty + isCastTeamListDraftDirty; - if (!isDirty) return true + if (!isDirty) return true; const result = await confirm( - 저장하지 않고 이 페이지를 나가면 작성한 정보가 손실됩니다.
이 페이지를 나갈까요? + 저장하지 않고 이 페이지를 나가면 작성한 정보가 손실됩니다. +
이 페이지를 나갈까요?
*페이지 하단의 [저장하기] 버튼을 눌러 정보를 저장할 수 있습니다. @@ -326,6 +330,8 @@ const ShowInfoPage = () => { : '', startTime: showBasicInfoForm.watch('startTime'), runningTime: showBasicInfoForm.watch('runningTime'), + latitude: showBasicInfoForm.watch('latitude'), + longitude: showBasicInfoForm.watch('longitude'), salesStartTime: showSalesInfo ? format(showSalesInfo.salesStartTime, 'yyyy.MM.dd (E)') : '', @@ -333,8 +339,8 @@ const ShowInfoPage = () => { ? format(showSalesInfo.salesEndTime, 'yyyy.MM.dd (E)') : '', placeName: showBasicInfoForm.watch('placeName'), - placeStreetAddress: showBasicInfoForm.watch('placeStreetAddress'), - placeDetailAddress: showBasicInfoForm.watch('placeDetailAddress'), + streetAddress: showBasicInfoForm.watch('placeStreetAddress'), + detailAddress: showBasicInfoForm.watch('placeDetailAddress'), notice: showDetailInfoForm.watch('notice'), hostName: showDetailInfoForm.watch('hostName'), hostPhoneNumber: showDetailInfoForm.watch('hostPhoneNumber'), @@ -391,8 +397,8 @@ const ShowInfoPage = () => { ? format(showSalesInfo.salesEndTime, 'yyyy.MM.dd (E)') : '', placeName: showBasicInfoForm.watch('placeName'), - placeStreetAddress: showBasicInfoForm.watch('placeStreetAddress'), - placeDetailAddress: showBasicInfoForm.watch('placeDetailAddress'), + streetAddress: showBasicInfoForm.watch('placeStreetAddress'), + detailAddress: showBasicInfoForm.watch('placeDetailAddress'), notice: showDetailInfoForm.watch('notice'), hostName: showDetailInfoForm.watch('hostName'), hostPhoneNumber: showDetailInfoForm.watch('hostPhoneNumber'), @@ -405,7 +411,8 @@ const ShowInfoPage = () => { userNickname: member.userNickname ?? '', userImgPath: member.userImgPath ?? '', })), - })) ?? []} + })) ?? [] + } hasNoticePage containerRef={showPreviewMobileRef} /> diff --git a/apps/preview/package.json b/apps/preview/package.json index a2b993c6..2c74ce85 100644 --- a/apps/preview/package.json +++ b/apps/preview/package.json @@ -22,6 +22,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-helmet-async": "^2.0.5", + "react-naver-maps": "^0.1.3", "react-router-dom": "^6.22.3", "swiper": "^11.1.14", "the-new-css-reset": "^1.11.2" @@ -30,6 +31,7 @@ "@boolti/eslint-config": "*", "@boolti/typescript-config": "*", "@emotion/babel-plugin": "^11.11.0", + "@types/navermaps": "^3.7.9", "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", "@types/react-helmet": "^6.1.11", diff --git a/apps/preview/src/components/NotFound/index.tsx b/apps/preview/src/components/NotFound/index.tsx index f726e191..33b5bf57 100644 --- a/apps/preview/src/components/NotFound/index.tsx +++ b/apps/preview/src/components/NotFound/index.tsx @@ -2,7 +2,7 @@ import { useEffect } from 'react'; export default () => { useEffect(() => { - window.location.href = 'https://boolti.in'; + // window.location.href = 'https://boolti.in'; }, []); return null; }; diff --git a/apps/preview/src/pages/ShowInfoDetailPage/index.tsx b/apps/preview/src/pages/ShowInfoDetailPage/index.tsx index 17e3bd84..ae1887b7 100644 --- a/apps/preview/src/pages/ShowInfoDetailPage/index.tsx +++ b/apps/preview/src/pages/ShowInfoDetailPage/index.tsx @@ -1,11 +1,14 @@ -import { ShowPreviewResponse } from "@boolti/api"; -import { ShowInfoDetail } from "@boolti/ui"; -import { format } from "date-fns"; -import { useLoaderData } from "react-router-dom"; +import { ShowPreviewResponse } from '@boolti/api'; +import { ShowInfoDetail } from '@boolti/ui'; +import { format } from 'date-fns'; +import { useLoaderData } from 'react-router-dom'; import Styled from './ShowInfoDetailPage.styles'; const ShowInfoDetailPage: React.FC = () => { - const [show, { count: soldTicketCount }] = useLoaderData() as [ShowPreviewResponse, { count: number }]; + const [show, { count: soldTicketCount }] = useLoaderData() as [ + ShowPreviewResponse, + { count: number }, + ]; const { date, @@ -13,15 +16,20 @@ const ShowInfoDetailPage: React.FC = () => { salesEndTime, salesStartTime, hostName, + placeName, + streetAddress, + detailAddress, + latitude, + longitude, } = show; const callLinkClickHandler = () => { location.href = `tel:${show.hostPhoneNumber}`; - } + }; const messageLinkClickHandler = () => { location.href = `sms:${show.hostPhoneNumber}`; - } + }; return ( @@ -30,8 +38,13 @@ const ShowInfoDetailPage: React.FC = () => { date, salesStartTime: format(new Date(salesStartTime), 'yyyy.MM.dd (E)'), salesEndTime: format(new Date(salesEndTime), 'yyyy.MM.dd (E)'), + placeName, + streetAddress, + detailAddress, notice, hostName, + latitude, + longitude, }} soldTicketCount={soldTicketCount} onClickCallLink={callLinkClickHandler} @@ -41,6 +54,6 @@ const ShowInfoDetailPage: React.FC = () => { /> ); -} +}; export default ShowInfoDetailPage; diff --git a/apps/preview/src/pages/ShowPreviewPage/index.tsx b/apps/preview/src/pages/ShowPreviewPage/index.tsx index b83fa5e4..2c5de84a 100644 --- a/apps/preview/src/pages/ShowPreviewPage/index.tsx +++ b/apps/preview/src/pages/ShowPreviewPage/index.tsx @@ -8,6 +8,7 @@ import { useLoaderData } from 'react-router-dom'; import Styled from './ShowPreviewPage.styles'; import { Meta } from '../../components/Meta'; import BooltiGrayLogo from '../../components/BooltiGrayLogo'; +import { NavermapsProvider } from 'react-naver-maps'; import useBodyScrollLock from '../../hooks/useBodyScrollLock'; import { useState } from 'react'; @@ -41,6 +42,8 @@ const getShareText = (show: { ); }; +const X_NCP_APIGW_API_KEY_ID = import.meta.env.VITE_X_NCP_APIGW_API_KEY_ID; + const ShowPreviewPage = () => { const [shareDialogOpen, setShareDialogOpen] = useState(false); @@ -72,6 +75,8 @@ const ShowPreviewPage = () => { detailAddress, hostName, hostPhoneNumber, + latitude, + longitude, } = previewData; const shareShowPreviewLink = async () => { @@ -93,7 +98,7 @@ const ShowPreviewPage = () => { placeName, streetAddress, detailAddress, - }) + }); if (navigator.share) { await navigator.share({ text }); @@ -101,7 +106,7 @@ const ShowPreviewPage = () => { await navigator.clipboard.writeText(text); alert('공연 링크가 복사되었어요'); } - } + }; const shareButtonClickHandler = async () => { dialog.open({ @@ -118,11 +123,11 @@ const ShowPreviewPage = () => { isAuto: true, mobileType: 'darkBottomSheet', onClose: () => { - setShareDialogOpen(false) - } - }) + setShareDialogOpen(false); + }, + }); - setShareDialogOpen(true) + setShareDialogOpen(true); }; const reservationButtonClickHandler = () => { @@ -154,7 +159,7 @@ const ShowPreviewPage = () => { }; return ( - <> + @@ -168,8 +173,10 @@ const ShowPreviewPage = () => { salesStartTime: format(new Date(salesStartTime), 'yyyy.MM.dd (E)'), salesEndTime: format(new Date(salesEndTime), 'yyyy.MM.dd (E)'), placeName: placeName, - placeStreetAddress: streetAddress, - placeDetailAddress: detailAddress, + streetAddress, + detailAddress, + latitude, + longitude, notice: text, hostName: hostName, hostPhoneNumber: hostPhoneNumber, @@ -203,7 +210,7 @@ const ShowPreviewPage = () => { - + ); }; diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index 0d61d32d..3150d462 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -5,6 +5,7 @@ export { QueryClientProvider } from './QueryClientProvider'; export * from './constants'; export * from './mutations'; export * from './queries'; +export { fetcher } from './fetcher'; export * from './utils'; export type * from './types'; export { queryKeys } from './queryKey'; diff --git a/packages/api/src/mutations/useEditShowInfo.ts b/packages/api/src/mutations/useEditShowInfo.ts index b85d614f..4c0bb3cf 100644 --- a/packages/api/src/mutations/useEditShowInfo.ts +++ b/packages/api/src/mutations/useEditShowInfo.ts @@ -16,6 +16,8 @@ interface PutShowInfoRequest { streetAddress: string; detailAddress: string; }; + latitude?: number; + longitude?: number; notice: string; host: { name: string; diff --git a/packages/api/src/types/show.ts b/packages/api/src/types/show.ts index 85b11174..666c6806 100644 --- a/packages/api/src/types/show.ts +++ b/packages/api/src/types/show.ts @@ -348,6 +348,10 @@ export interface ShowCreateRequest { }[]; /** 출연진 팀 */ castTeams?: Array; + /** 위도 */ + latitude?: number; + /** 경도 */ + longitude?: number; } export interface SummaryItem { diff --git a/packages/icon/src/components/CurvedArrowRight.tsx b/packages/icon/src/components/CurvedArrowRight.tsx new file mode 100644 index 00000000..6d4da054 --- /dev/null +++ b/packages/icon/src/components/CurvedArrowRight.tsx @@ -0,0 +1,20 @@ +export const CurvedArrowRight = () => { + return ( + + + + + ); +}; diff --git a/packages/icon/src/components/index.ts b/packages/icon/src/components/index.ts index 95cc83a1..11a72b14 100644 --- a/packages/icon/src/components/index.ts +++ b/packages/icon/src/components/index.ts @@ -5,6 +5,7 @@ import { BNK } from './BNK'; import { BNP } from './BNP'; import { BoA } from './BoA'; import { Boolti } from './Boolti'; +import { CurvedArrowRight } from './CurvedArrowRight'; import { BooltiDark } from './BooltiDark'; import { BooltiGrey } from './BooltiGrey'; import { BooltiLightGrey } from './BooltiLightGrey'; @@ -154,4 +155,5 @@ export { YoutubeLink as YoutubeLinkIcon, MapMarker as MapMarkerIcon, ClockMobile as ClockMobileIcon, + CurvedArrowRight as CurvedArrowRightIcon, }; diff --git a/packages/ui/package.json b/packages/ui/package.json index ea9a5ec3..66505cfd 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -11,6 +11,7 @@ "type-check": "tsc --noEmit" }, "dependencies": { + "@boolti/bridge": "*", "@boolti/icon": "*", "@emotion/react": "^11.11.3", "@emotion/styled": "^11.11.0", @@ -24,6 +25,7 @@ "react-dom": "^18.2.0", "react-hot-toast": "^2.4.1", "react-markdown": "^10.0.1", + "react-naver-maps": "^0.1.3", "rehype-raw": "^7.0.0", "remark-directive": "^4.0.0", "swiper": "^11.0.7", @@ -33,6 +35,7 @@ "@boolti/eslint-config": "*", "@boolti/typescript-config": "*", "@types/mdast": "^4.0.4", + "@types/navermaps": "^3.7.9", "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", "typescript": "^5.2.2" diff --git a/packages/ui/src/components/PreviewMap/PreviewMap.styles.ts b/packages/ui/src/components/PreviewMap/PreviewMap.styles.ts new file mode 100644 index 00000000..63193dfe --- /dev/null +++ b/packages/ui/src/components/PreviewMap/PreviewMap.styles.ts @@ -0,0 +1,37 @@ +import styled from '@emotion/styled'; + +const Button = styled.button` + position: absolute; + bottom: 12px; + right: 12px; + cursor: pointer; + width: 32px; + height: 32px; + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + background-color: ${({ theme }) => theme.palette.mobile.grey.g80}; + color: ${({ theme }) => theme.palette.mobile.grey.g10}; +`; + +const ConfirmText = styled.span` + display: flex; + flex-direction: column; + white-space: pre-wrap; + ${({ theme }) => theme.typo.b3}; + color: ${({ theme }) => theme.palette.grey.g90}; +`; + +const ConfirmDescription = styled.span` + display: block; + margin-top: 8px; + ${({ theme }) => theme.typo.b1}; + color: ${({ theme }) => theme.palette.grey.g60}; +`; + +export default { + Button, + ConfirmText, + ConfirmDescription, +}; diff --git a/packages/ui/src/components/PreviewMap/index.tsx b/packages/ui/src/components/PreviewMap/index.tsx new file mode 100644 index 00000000..7092efb8 --- /dev/null +++ b/packages/ui/src/components/PreviewMap/index.tsx @@ -0,0 +1,96 @@ +import { Container, NaverMap, useNavermaps } from 'react-naver-maps'; +import { checkIsAndroid, checkIsIOS, checkIsWebView } from '@boolti/bridge'; + +import Styled from './PreviewMap.styles'; +import { CurvedArrowRightIcon } from '@boolti/icon'; +import { useConfirm } from '../../hooks'; + +interface Props { + latitude: number; + longitude: number; + name: string; +} + +const CONFIRM_LOCAL_STORAGE_KEY = 'BOOLTI_PREVIEW_MAP_OPEN_NAVER_MAP'; + +const PreviewMap = ({ latitude, longitude, name }: Props) => { + const navermaps = useNavermaps(); + const confirm = useConfirm(); + + const openNaverMaps = async () => { + if (!localStorage.getItem(CONFIRM_LOCAL_STORAGE_KEY)) { + const isConfirm = await confirm( + + 길찾기를 위해{'\n'}네이버 지도앱으로 이동합니다. + * 이 안내는 한 번만 표시됩니다. + , + { + cancel: '취소하기', + confirm: '이동하기', + }, + ); + + if (!isConfirm) { + return; + } + + localStorage.setItem(CONFIRM_LOCAL_STORAGE_KEY, new Date().valueOf().toString()); + } + + const clickedAt = +new Date(); + const params = `lat=${latitude}&lng=${longitude}&name=${encodeURIComponent(name)}`; + + if (!checkIsWebView()) { + window.open(`https://map.naver.com?${params}&c=17.86,0,0,0,dh`, '_blank'); + return; + } + + if (checkIsAndroid()) { + `intent://place?${params}&appname=com.nexters.boolti#Intent;scheme=nmap;action=android.intent.action.VIEW;category=android.intent.category.BROWSABLE;package=com.nhn.android.nmap;end`; + } else if (checkIsIOS()) { + location.href = `nmap://place?${params}&appname=com.nexters.boolti`; + + setTimeout(function () { + if (+new Date() - clickedAt < 2000) { + location.href = 'http://itunes.apple.com/app/id311867728?mt=8'; + } + }, 1500); + } + }; + return ( + + + + + + + ); +}; + +export default PreviewMap; diff --git a/packages/ui/src/components/ShowPreview/ShowInfoDetail.tsx b/packages/ui/src/components/ShowPreview/ShowInfoDetail.tsx index 4b18e950..dc68b48c 100644 --- a/packages/ui/src/components/ShowPreview/ShowInfoDetail.tsx +++ b/packages/ui/src/components/ShowPreview/ShowInfoDetail.tsx @@ -1,7 +1,9 @@ import Styled from './ShowPreview.styles'; import { CallIcon, MessageIcon, TicketIcon } from '@boolti/icon'; +import { showToast, checkIsWebView, TOAST_DURATIONS } from '@boolti/bridge'; import ShowInfoDescription from '../ShowContentMarkdown'; +import PreviewMap from '../PreviewMap'; interface Props { show: { @@ -10,6 +12,11 @@ interface Props { salesEndTime: string; notice: string; hostName: string; + placeName: string; + streetAddress: string; + detailAddress: string; + latitude?: number; + longitude?: number; }; soldTicketCount?: number; hasNoticePage?: boolean; @@ -27,6 +34,11 @@ const ShowInfoDetail = ({ salesEndTime, notice, hostName, + latitude, + longitude, + placeName, + streetAddress, + detailAddress, }, soldTicketCount, hasNoticePage, @@ -49,11 +61,37 @@ const ShowInfoDetail = ({ {salesStartTime} - {salesEndTime} + + + + 위치 + + {placeName} + + {`${streetAddress} / ${detailAddress} ・ `} + { + navigator.clipboard.writeText(`${streetAddress} ${detailAddress}`); + if (checkIsWebView()) { + showToast({ message: '주로를 복사했어요.', duration: TOAST_DURATIONS.SHORT }); + } else { + alert('공연장 주소가 복사되었어요'); + } + }} + > + 복사 + + + {latitude && longitude && ( + + )} {isEnded && soldTicketCount !== undefined && ( - {soldTicketCount}매 판매 완료 + {' '} + {soldTicketCount}매 판매 완료 )} diff --git a/packages/ui/src/components/ShowPreview/ShowPreview.styles.ts b/packages/ui/src/components/ShowPreview/ShowPreview.styles.ts index ddc6344e..8d75de90 100644 --- a/packages/ui/src/components/ShowPreview/ShowPreview.styles.ts +++ b/packages/ui/src/components/ShowPreview/ShowPreview.styles.ts @@ -195,16 +195,8 @@ const ShowInfoTitle = styled.h3` `; const ShowInfoTitleButton = styled.button` - padding: 0 12px; - height: 30px; - border-radius: 4px; - ${({ theme }) => theme.typo.c1}; - color: ${({ theme }) => theme.palette.mobile.grey.g05}; - display: inline-flex; - justify-content: center; - align-items: center; - gap: 6px; - background-color: ${({ theme }) => theme.palette.mobile.grey.g85}; + ${({ theme }) => theme.typo.b3}; + color: ${({ theme }) => theme.palette.mobile.status.link}; cursor: pointer; `; @@ -218,7 +210,7 @@ const ShowInfoTitleTextButton = styled.button` const ShowInfoSubtitle = styled.h4` ${({ theme }) => theme.typo.b3}; color: ${({ theme }) => theme.palette.mobile.grey.g10}; - margin-bottom: 8px; + margin-bottom: 4px; `; const ShowInfoDescription = styled.div` @@ -229,6 +221,10 @@ const ShowInfoDescription = styled.div` display: flex; align-items: center; + &:not(:last-child) { + margin-bottom: 12px; + } + ${({ isFullContent }) => isFullContent && ` diff --git a/packages/ui/src/components/ShowPreview/index.tsx b/packages/ui/src/components/ShowPreview/index.tsx index 32f2c307..ea664524 100644 --- a/packages/ui/src/components/ShowPreview/index.tsx +++ b/packages/ui/src/components/ShowPreview/index.tsx @@ -22,11 +22,13 @@ interface ShowPreviewProps { salesStartTime: string; salesEndTime: string; placeName: string; - placeStreetAddress: string; - placeDetailAddress: string; + streetAddress: string; + detailAddress: string; notice: string; hostName: string; hostPhoneNumber: string; + latitude?: number; + longitude?: number; }; showCastTeams: Array<{ name: string; @@ -115,9 +117,7 @@ const ShowPreview = ({ - - {placeName} - + {placeName} diff --git a/packages/ui/src/systems/palette.ts b/packages/ui/src/systems/palette.ts index 14197aa7..0d8b48e3 100644 --- a/packages/ui/src/systems/palette.ts +++ b/packages/ui/src/systems/palette.ts @@ -61,6 +61,7 @@ const palette = { status: { error: '#FF4D4F', success: '#52C41A', + link: '#46A6FF', }, grey: { w: '#FFFFFF', diff --git a/yarn.lock b/yarn.lock index 36bcbc6b..97b556f3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1545,6 +1545,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.1.2": + version: 7.26.10 + resolution: "@babel/runtime@npm:7.26.10" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 10c0/6dc6d88c7908f505c4f7770fb4677dfa61f68f659b943c2be1f2a99cb6680343462867abf2d49822adc435932919b36c77ac60125793e719ea8745f2073d3745 + languageName: node + linkType: hard + "@babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.16.7, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.6, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.4": version: 7.24.4 resolution: "@babel/runtime@npm:7.24.4" @@ -1770,6 +1779,7 @@ __metadata: version: 0.0.0-use.local resolution: "@boolti/ui@workspace:packages/ui" dependencies: + "@boolti/bridge": "npm:*" "@boolti/eslint-config": "npm:*" "@boolti/icon": "npm:*" "@boolti/typescript-config": "npm:*" @@ -1777,6 +1787,7 @@ __metadata: "@emotion/styled": "npm:^11.11.0" "@react-spring/web": "npm:^9.7.3" "@types/mdast": "npm:^4.0.4" + "@types/navermaps": "npm:^3.7.9" "@types/react": "npm:^18.2.43" "@types/react-dom": "npm:^18.2.17" linkify-react: "npm:^4.1.3" @@ -1788,6 +1799,7 @@ __metadata: react-dom: "npm:^18.2.0" react-hot-toast: "npm:^2.4.1" react-markdown: "npm:^10.0.1" + react-naver-maps: "npm:^0.1.3" rehype-raw: "npm:^7.0.0" remark-directive: "npm:^4.0.0" swiper: "npm:^11.0.7" @@ -6535,6 +6547,13 @@ __metadata: languageName: node linkType: hard +"@types/geojson@npm:*": + version: 7946.0.16 + resolution: "@types/geojson@npm:7946.0.16" + checksum: 10c0/1ff24a288bd5860b766b073ead337d31d73bdc715e5b50a2cee5cb0af57a1ed02cc04ef295f5fa68dc40fe3e4f104dd31282b2b818a5ba3231bc1001ba084e3c + languageName: node + linkType: hard + "@types/glob@npm:^7.1.3": version: 7.2.0 resolution: "@types/glob@npm:7.2.0" @@ -6595,6 +6614,13 @@ __metadata: languageName: node linkType: hard +"@types/js-cookie@npm:^2.2.6": + version: 2.2.7 + resolution: "@types/js-cookie@npm:2.2.7" + checksum: 10c0/29196c6829982b5efa79117122a7d62cf4bc2f6397ce8eac1539319ff5dce3b44b2d86f2ac064f2ed3488fb24439358f24af6914fde5c5c4bab9a85728a13a6f + languageName: node + linkType: hard + "@types/js-cookie@npm:^3.0.6": version: 3.0.6 resolution: "@types/js-cookie@npm:3.0.6" @@ -6690,6 +6716,15 @@ __metadata: languageName: node linkType: hard +"@types/navermaps@npm:^3.7.9": + version: 3.7.9 + resolution: "@types/navermaps@npm:3.7.9" + dependencies: + "@types/geojson": "npm:*" + checksum: 10c0/f97549153f8d66d707a242eff198458d6c92813070d44a418d293b401cb3d61a68a8bcf3aee96964ed273b7f88675f6805d65239b9f4ff802bf24c45b26750e0 + languageName: node + linkType: hard + "@types/node-fetch@npm:^2.6.4": version: 2.6.11 resolution: "@types/node-fetch@npm:2.6.11" @@ -7095,6 +7130,13 @@ __metadata: languageName: node linkType: hard +"@xobotyi/scrollbar-width@npm:^1.9.5": + version: 1.9.5 + resolution: "@xobotyi/scrollbar-width@npm:1.9.5" + checksum: 10c0/4ebc79e4f798e2a5e89a5122f8fc4a086f08a92a44ac020599c4fe20d105b7d76ba06c094260b5f386a75e7ce6f6c518d9fc295228b651296b99c4477f986ac4 + languageName: node + linkType: hard + "@yarnpkg/esbuild-plugin-pnp@npm:^3.0.0-rc.10": version: 3.0.0-rc.15 resolution: "@yarnpkg/esbuild-plugin-pnp@npm:3.0.0-rc.15" @@ -7249,6 +7291,7 @@ __metadata: "@tanstack/react-table": "npm:^8.12.0" "@types/js-cookie": "npm:^3.0.6" "@types/lodash.debounce": "npm:^4.0.9" + "@types/navermaps": "npm:^3.7.9" "@types/react": "npm:^18.2.43" "@types/react-dom": "npm:^18.2.17" "@vitejs/plugin-react": "npm:^4.2.1" @@ -7267,6 +7310,7 @@ __metadata: react-hook-form: "npm:^7.50.0" react-i18next: "npm:^15.4.1" react-intersection-observer: "npm:^9.8.0" + react-naver-maps: "npm:^0.1.3" react-pdf: "npm:^9.0.0" react-router-dom: "npm:^6.21.3" react-select: "npm:^5.8.0" @@ -8532,7 +8576,7 @@ __metadata: languageName: node linkType: hard -"copy-to-clipboard@npm:^3.3.3": +"copy-to-clipboard@npm:^3.3.1, copy-to-clipboard@npm:^3.3.3": version: 3.3.3 resolution: "copy-to-clipboard@npm:3.3.3" dependencies: @@ -8618,6 +8662,25 @@ __metadata: languageName: node linkType: hard +"css-in-js-utils@npm:^3.1.0": + version: 3.1.0 + resolution: "css-in-js-utils@npm:3.1.0" + dependencies: + hyphenate-style-name: "npm:^1.0.3" + checksum: 10c0/8bb042e8f7701a7edadc3cce5ce2d5cf41189631d7e2aed194d5a7059b25776dded2a0466cb9da1d1f3fc6c99dcecb51e45671148d073b8a2a71e34755152e52 + languageName: node + linkType: hard + +"css-tree@npm:^1.1.2": + version: 1.1.3 + resolution: "css-tree@npm:1.1.3" + dependencies: + mdn-data: "npm:2.0.14" + source-map: "npm:^0.6.1" + checksum: 10c0/499a507bfa39b8b2128f49736882c0dd636b0cd3370f2c69f4558ec86d269113286b7df469afc955de6a68b0dba00bc533e40022a73698081d600072d5d83c1c + languageName: node + linkType: hard + "css.escape@npm:^1.5.1": version: 1.5.1 resolution: "css.escape@npm:1.5.1" @@ -8625,7 +8688,7 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2, csstype@npm:^3.1.3": +"csstype@npm:^3.0.2, csstype@npm:^3.1.2, csstype@npm:^3.1.3": version: 3.1.3 resolution: "csstype@npm:3.1.3" checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 @@ -9180,6 +9243,15 @@ __metadata: languageName: node linkType: hard +"error-stack-parser@npm:^2.0.6": + version: 2.1.4 + resolution: "error-stack-parser@npm:2.1.4" + dependencies: + stackframe: "npm:^1.3.4" + checksum: 10c0/7679b780043c98b01fc546725484e0cfd3071bf5c906bbe358722972f04abf4fc3f0a77988017665bab367f6ef3fc2d0185f7528f45966b83e7c99c02d5509b9 + languageName: node + linkType: hard + "es-abstract@npm:^1.22.1": version: 1.22.3 resolution: "es-abstract@npm:1.22.3" @@ -10009,6 +10081,20 @@ __metadata: languageName: node linkType: hard +"fast-shallow-equal@npm:^1.0.0": + version: 1.0.0 + resolution: "fast-shallow-equal@npm:1.0.0" + checksum: 10c0/526c393c011ab5a0ca5a36c5ea25c9730acd027503ccbec6c7825397ab9375f51f67f14c8829b4c4b1ccccede695391dd14863a15e40a37fc4af08c1440a1b66 + languageName: node + linkType: hard + +"fastest-stable-stringify@npm:^2.0.2": + version: 2.0.2 + resolution: "fastest-stable-stringify@npm:2.0.2" + checksum: 10c0/abbe5ff48f13f5819e7312dbb38bae5d9960694cffd315b464df9adcd02a8fa7e9eec32c314655674c7134905c544b7a0c14b05bfbe30b3f678609bebc9fecb9 + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.16.0 resolution: "fastq@npm:1.16.0" @@ -10991,6 +11077,13 @@ __metadata: languageName: node linkType: hard +"hyphenate-style-name@npm:^1.0.3": + version: 1.1.0 + resolution: "hyphenate-style-name@npm:1.1.0" + checksum: 10c0/bfe88deac2414a41a0d08811e277c8c098f23993d6a1eb17f14a0f11b54c4d42865a63d3cfe1914668eefb9a188e2de58f38b55a179a238fd1fef606893e194f + languageName: node + linkType: hard + "i18next@npm:^24.2.2": version: 24.2.2 resolution: "i18next@npm:24.2.2" @@ -11092,6 +11185,15 @@ __metadata: languageName: node linkType: hard +"inline-style-prefixer@npm:^7.0.1": + version: 7.0.1 + resolution: "inline-style-prefixer@npm:7.0.1" + dependencies: + css-in-js-utils: "npm:^3.1.0" + checksum: 10c0/15da5a396b7f286b5b6742efe315218cd577bc96b43de08aeb76af7697d9f1ab3bfc66cf19fad2173957dd5d617a790240b9d51898bdcf4c2efb40d3f8bcb370 + languageName: node + linkType: hard + "internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": version: 1.0.6 resolution: "internal-slot@npm:1.0.6" @@ -11693,6 +11795,13 @@ __metadata: languageName: node linkType: hard +"js-cookie@npm:^2.2.1": + version: 2.2.1 + resolution: "js-cookie@npm:2.2.1" + checksum: 10c0/ee67fc0f8495d0800b851910b5eb5bf49d3033adff6493d55b5c097ca6da46f7fe666b10e2ecb13cfcaf5b88d71c205ce00a7e646de791689bfd053bbb36a376 + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -11951,6 +12060,13 @@ __metadata: languageName: node linkType: hard +"load-script@npm:^2.0.0": + version: 2.0.0 + resolution: "load-script@npm:2.0.0" + checksum: 10c0/118bd891f0b3a463e87c774603c32773f56e1ce260245858dd3e7d03ff5fce83acaa5d6c32c66944ed9e91da945ee0150d25730f0346b5768118a76fcf1ef3e9 + languageName: node + linkType: hard + "locate-path@npm:^3.0.0": version: 3.0.0 resolution: "locate-path@npm:3.0.0" @@ -11986,6 +12102,20 @@ __metadata: languageName: node linkType: hard +"lodash.isempty@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.isempty@npm:4.4.0" + checksum: 10c0/6c7eaa0802398736809b9e8aed8b8ac1abca9be71788fd719ba9d7f5b4c23e8dc63b7f049df4131713dda30a2fdedc2f655268e9deb8cd5a985dfc934afca194 + languageName: node + linkType: hard + +"lodash.mapkeys@npm:^4.6.0": + version: 4.6.0 + resolution: "lodash.mapkeys@npm:4.6.0" + checksum: 10c0/5e7028eb5400a34007932cf224b2de1b1e8030e6ce79fe2d43b1e4a7362315270c914d741b13d81eef51529fcb02b6c51bb39fa6fe78a659e138e54e16252883 + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -11993,6 +12123,27 @@ __metadata: languageName: node linkType: hard +"lodash.omit@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.omit@npm:4.5.0" + checksum: 10c0/3808b9b6faae35177174b6ab327f1177e29c91f1e98dcbccf13a72a6767bba337306449d537a4e0d8a33d2673f10d39bc732e30c4b803274ea0c1168ea60e549 + languageName: node + linkType: hard + +"lodash.pick@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.pick@npm:4.4.0" + checksum: 10c0/a04c460b95d1aaa44e9513d1dacf72ea74d838da843e45831de9de64c303f13cdde1859702a6f4dcef417816898ffd47c6ae0614c957ac70245bed2809b8d2e2 + languageName: node + linkType: hard + +"lodash.upperfirst@npm:^4.3.1": + version: 4.3.1 + resolution: "lodash.upperfirst@npm:4.3.1" + checksum: 10c0/435625da4b3ee74e7a1367a780d9107ab0b13ef4359fc074b2a1a40458eb8d91b655af62f6795b7138d493303a98c0285340160341561d6896e4947e077fa975 + languageName: node + linkType: hard + "lodash@npm:^4.17.15, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -12406,6 +12557,13 @@ __metadata: languageName: node linkType: hard +"mdn-data@npm:2.0.14": + version: 2.0.14 + resolution: "mdn-data@npm:2.0.14" + checksum: 10c0/67241f8708c1e665a061d2b042d2d243366e93e5bf1f917693007f6d55111588b952dcbfd3ea9c2d0969fb754aad81b30fdcfdcc24546495fc3b24336b28d4bd + languageName: node + linkType: hard + "media-engine@npm:^1.0.3": version: 1.0.3 resolution: "media-engine@npm:1.0.3" @@ -13165,6 +13323,25 @@ __metadata: languageName: node linkType: hard +"nano-css@npm:^5.6.2": + version: 5.6.2 + resolution: "nano-css@npm:5.6.2" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.4.15" + css-tree: "npm:^1.1.2" + csstype: "npm:^3.1.2" + fastest-stable-stringify: "npm:^2.0.2" + inline-style-prefixer: "npm:^7.0.1" + rtl-css-js: "npm:^1.16.1" + stacktrace-js: "npm:^2.0.2" + stylis: "npm:^4.3.0" + peerDependencies: + react: "*" + react-dom: "*" + checksum: 10c0/566fb9403815d78a110d68f011e1125cbeeb7299e2e6c60700f316ba0c48dc702c039163eae7a8f213a1390e45cedfdeccc203794d61a61116598adbb83029ec + languageName: node + linkType: hard + "nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7" @@ -13963,6 +14140,7 @@ __metadata: "@emotion/babel-plugin": "npm:^11.11.0" "@emotion/react": "npm:^11.11.3" "@emotion/styled": "npm:^11.11.0" + "@types/navermaps": "npm:^3.7.9" "@types/react": "npm:^18.2.43" "@types/react-dom": "npm:^18.2.17" "@types/react-helmet": "npm:^6.1.11" @@ -13972,6 +14150,7 @@ __metadata: react: "npm:^18.2.0" react-dom: "npm:^18.2.0" react-helmet-async: "npm:^2.0.5" + react-naver-maps: "npm:^0.1.3" react-router-dom: "npm:^6.22.3" swiper: "npm:^11.1.14" the-new-css-reset: "npm:^1.11.2" @@ -15083,6 +15262,27 @@ __metadata: languageName: node linkType: hard +"react-naver-maps@npm:^0.1.3": + version: 0.1.3 + resolution: "react-naver-maps@npm:0.1.3" + dependencies: + camelcase: "npm:^5.3.1" + load-script: "npm:^2.0.0" + lodash.isempty: "npm:^4.4.0" + lodash.mapkeys: "npm:^4.6.0" + lodash.omit: "npm:^4.5.0" + lodash.pick: "npm:^4.4.0" + lodash.upperfirst: "npm:^4.3.1" + prop-types: "npm:^15.7.2" + react-use: "npm:^17.3.1" + suspend-react: "npm:^0.0.8" + peerDependencies: + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + checksum: 10c0/3d04952fea01b4bd248320ecbe63fe0235ce911789a714ccc8e1409a288de98a7bc5f832e26659124b3d716133d4db90bc5387491d9a7d5438b3c6ae2cdf7b0c + languageName: node + linkType: hard + "react-pdf@npm:^9.0.0": version: 9.0.0 resolution: "react-pdf@npm:9.0.0" @@ -15312,6 +15512,41 @@ __metadata: languageName: node linkType: hard +"react-universal-interface@npm:^0.6.2": + version: 0.6.2 + resolution: "react-universal-interface@npm:0.6.2" + peerDependencies: + react: "*" + tslib: "*" + checksum: 10c0/97c32ecb7a425c3bcaa92dcf84c46146b49610d928efde9e9ee5518c475a0db942f01634dd490e4f42fcd95cc2f49657c1b96dcef96423c06f077147fe1968ab + languageName: node + linkType: hard + +"react-use@npm:^17.3.1": + version: 17.6.0 + resolution: "react-use@npm:17.6.0" + dependencies: + "@types/js-cookie": "npm:^2.2.6" + "@xobotyi/scrollbar-width": "npm:^1.9.5" + copy-to-clipboard: "npm:^3.3.1" + fast-deep-equal: "npm:^3.1.3" + fast-shallow-equal: "npm:^1.0.0" + js-cookie: "npm:^2.2.1" + nano-css: "npm:^5.6.2" + react-universal-interface: "npm:^0.6.2" + resize-observer-polyfill: "npm:^1.5.1" + screenfull: "npm:^5.1.0" + set-harmonic-interval: "npm:^1.0.1" + throttle-debounce: "npm:^3.0.1" + ts-easing: "npm:^0.2.0" + tslib: "npm:^2.1.0" + peerDependencies: + react: "*" + react-dom: "*" + checksum: 10c0/d122199f3edd056bfd866837b0f19a44366e77c7535c6c2c5eb5f400409eae4c9b1fe73c9d35073c8434080eee388ca8fe49a68d09d6f794ccaa35a4ae2112a9 + languageName: node + linkType: hard + "react@npm:^18.2.0": version: 18.2.0 resolution: "react@npm:18.2.0" @@ -15767,6 +16002,15 @@ __metadata: languageName: node linkType: hard +"rtl-css-js@npm:^1.16.1": + version: 1.16.1 + resolution: "rtl-css-js@npm:1.16.1" + dependencies: + "@babel/runtime": "npm:^7.1.2" + checksum: 10c0/4b81ef50e50c97455d61c9bb576e2892651c79bac5d0c52b4123ebb9d6a2c5144590a79c9db0a3212a81b4eb83bf317e03637220f20b387a37b96cbac324d3d2 + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -15839,6 +16083,13 @@ __metadata: languageName: node linkType: hard +"screenfull@npm:^5.1.0": + version: 5.2.0 + resolution: "screenfull@npm:5.2.0" + checksum: 10c0/86fd49983e2edc153ee2e674a570c711cb0961a9cacca659309f79636ccc8ca8a0b830ea4dacdae7403a8bb7ba6affd5bcdce053aa97782961247a49bfd2ba68 + languageName: node + linkType: hard + "scroll-into-view-if-needed@npm:^3.1.0": version: 3.1.0 resolution: "scroll-into-view-if-needed@npm:3.1.0" @@ -15941,6 +16192,13 @@ __metadata: languageName: node linkType: hard +"set-harmonic-interval@npm:^1.0.1": + version: 1.0.1 + resolution: "set-harmonic-interval@npm:1.0.1" + checksum: 10c0/49014d928a62c8418507bf66ffef7066783e8fb19f76e955318bbae5a8c4b56e1a7176b370f9040ef9de51531aa522a3f96fa5c47b1534635aa577ff7c12f9c6 + languageName: node + linkType: hard + "setprototypeof@npm:1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" @@ -16091,6 +16349,13 @@ __metadata: languageName: node linkType: hard +"source-map@npm:0.5.6": + version: 0.5.6 + resolution: "source-map@npm:0.5.6" + checksum: 10c0/beb2c5974bb58954d75e86249953d47ae16f7df1a8531abb9fcae0cd262d9fa09c2db3a134e20e99358b1adba42b6b054a32c8e16b571b3efcf6af644c329f0d + languageName: node + linkType: hard + "source-map@npm:^0.5.7": version: 0.5.7 resolution: "source-map@npm:0.5.7" @@ -16169,6 +16434,43 @@ __metadata: languageName: node linkType: hard +"stack-generator@npm:^2.0.5": + version: 2.0.10 + resolution: "stack-generator@npm:2.0.10" + dependencies: + stackframe: "npm:^1.3.4" + checksum: 10c0/c3f6f6c580488e65c0fee806a57f6ae4b79e6435f144be471c1f20328a8d9d8492d4f3beed31840f6dae03e2633325e2764fd3aca5c3126a0639e7c9ddfa45ce + languageName: node + linkType: hard + +"stackframe@npm:^1.3.4": + version: 1.3.4 + resolution: "stackframe@npm:1.3.4" + checksum: 10c0/18410f7a1e0c5d211a4effa83bdbf24adbe8faa8c34db52e1cd3e89837518c592be60b60d8b7270ac53eeeb8b807cd11b399a41667f6c9abb41059c3ccc8a989 + languageName: node + linkType: hard + +"stacktrace-gps@npm:^3.0.4": + version: 3.1.2 + resolution: "stacktrace-gps@npm:3.1.2" + dependencies: + source-map: "npm:0.5.6" + stackframe: "npm:^1.3.4" + checksum: 10c0/0dcc1aa46e364a2b4d1eabce4777fecf337576a11ee3cfc92f07b9ec79ccb76810752431eeb9771289d250d0bb58dbe19a178b96bf7b2e9f773334d03aa96bb9 + languageName: node + linkType: hard + +"stacktrace-js@npm:^2.0.2": + version: 2.0.2 + resolution: "stacktrace-js@npm:2.0.2" + dependencies: + error-stack-parser: "npm:^2.0.6" + stack-generator: "npm:^2.0.5" + stacktrace-gps: "npm:^3.0.4" + checksum: 10c0/9a10c222524ca03690bcb27437b39039885223e39320367f2be36e6f750c2d198ae99189869a22c255bf60072631eb609d47e8e33661e95133686904e01121ec + languageName: node + linkType: hard + "static-browser-server@npm:1.0.3": version: 1.0.3 resolution: "static-browser-server@npm:1.0.3" @@ -16480,6 +16782,13 @@ __metadata: languageName: node linkType: hard +"stylis@npm:^4.3.0": + version: 4.3.6 + resolution: "stylis@npm:4.3.6" + checksum: 10c0/e736d484983a34f7c65d362c67dc79b7bce388054b261c2b7b23d02eaaf280617033f65d44b1ea341854f4331a5074b885668ac8741f98c13a6cfd6443ae85d0 + languageName: node + linkType: hard + "super-admin@workspace:apps/super-admin": version: 0.0.0-use.local resolution: "super-admin@workspace:apps/super-admin" @@ -16543,6 +16852,15 @@ __metadata: languageName: node linkType: hard +"suspend-react@npm:^0.0.8": + version: 0.0.8 + resolution: "suspend-react@npm:0.0.8" + peerDependencies: + react: ">=17.0" + checksum: 10c0/a81221eea83a19c2ed2e89ac1f944601b52d116a243a585a6e5cf78e53e133acd764697462028fb574f75f74f53a8a52d4c369747db558e089e4f5d907297642 + languageName: node + linkType: hard + "svg-arc-to-cubic-bezier@npm:^3.0.0, svg-arc-to-cubic-bezier@npm:^3.2.0": version: 3.2.0 resolution: "svg-arc-to-cubic-bezier@npm:3.2.0" @@ -16683,6 +17001,13 @@ __metadata: languageName: node linkType: hard +"throttle-debounce@npm:^3.0.1": + version: 3.0.1 + resolution: "throttle-debounce@npm:3.0.1" + checksum: 10c0/c8e558479463b7ed8bac30d6b10cc87abd1c9fc64edfce2db4109be1a04acaef5d2d0557f49c1a3845ea07d9f79e6e0389b1b60db0a77c44e5b7a1216596f285 + languageName: node + linkType: hard + "throttle-debounce@npm:^5.0.0": version: 5.0.0 resolution: "throttle-debounce@npm:5.0.0" @@ -16809,6 +17134,13 @@ __metadata: languageName: node linkType: hard +"ts-easing@npm:^0.2.0": + version: 0.2.0 + resolution: "ts-easing@npm:0.2.0" + checksum: 10c0/84ec20192310c697ff890ca2e0625e131a32596a7c5956326c9632faca9037abf2dd3de4d81ac358ae9f26a6a2cfe2300f13756b26995f753d882e3d0463e327 + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.15.0": version: 3.15.0 resolution: "tsconfig-paths@npm:3.15.0"