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"