@apps-in-toss/framework 0.0.29 → 0.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ export { default } from '@apps-in-toss/native-modules/bridges-meta.json';
@@ -0,0 +1,183 @@
1
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/dist/bridges-meta.json
2
+ var bridges_meta_default = [
3
+ {
4
+ identifier: "closeView",
5
+ dts: "/**\n * @public\n * @category \uD654\uBA74 \uC81C\uC5B4\n * @kind function\n * @name closeView\n * @description \uD604\uC7AC \uD654\uBA74\uC744 \uB2EB\uB294 \uD568\uC218\uC5D0\uC694. \uC608\uB97C \uB4E4\uC5B4, \"\uB2EB\uAE30\" \uBC84\uD2BC\uC744 \uB20C\uB7EC\uC11C \uC11C\uBE44\uC2A4\uB97C \uC885\uB8CC\uD560 \uB54C \uC0AC\uC6A9\uD560 \uC218 \uC788\uC5B4\uC694.\n * @returns {Promise<void>}\n *\n * @example\n * ### \uB2EB\uAE30 \uBC84\uD2BC\uC744 \uB20C\uB7EC \uD654\uBA74 \uB2EB\uAE30\n *\n * ```tsx\n * import { Button } from 'react-native';\n * import { closeView } from 'react-native-bedrock';\n *\n * function CloseButton() {\n * return <Button title=\"\uB2EB\uAE30\" onPress={closeView} />;\n * }\n * ```\n */\nexport declare function closeView(): Promise<void>;\n\nexport {};\n"
6
+ },
7
+ {
8
+ identifier: "generateHapticFeedback",
9
+ dts: 'export type HapticFeedbackType = "tickWeak" | "tap" | "tickMedium" | "softMedium" | "basicWeak" | "basicMedium" | "success" | "error" | "wiggle" | "confetti";\n/**\n * @public\n * @category \uC778\uD130\uB809\uC158\n * @name HapticFeedbackOptions\n * @description\n * generateHapticFeedback \uD568\uC218\uC5D0 \uC804\uB2EC\uD560 \uD585\uD2F1\uC9C4\uB3D9\uC758 \uD0C0\uC785\uC744 \uB098\uD0C0\uB0B4\uC694. \uC9C4\uB3D9\uD0C0\uC785\uC758 \uC885\uB958\uB294 \uB2E4\uC74C\uACFC \uAC19\uC544\uC694.\n * ```typescript\n * type HapticFeedbackType =\n * | "tickWeak"\n * | "tap"\n * | "tickMedium"\n * | "softMedium"\n * | "basicWeak"\n * | "basicMedium"\n * | "success"\n * | "error"\n * | "wiggle"\n * | "confetti";\n * ```\n * @typedef { type: HapticFeedbackType } HapticFeedbackOptions\n * @typedef { "tickWeak" | "tap" | "tickMedium" | "softMedium" | "basicWeak" | "basicMedium" | "success" | "error" | "wiggle" | "confetti" } HapticFeedbackType\n *\n */\nexport interface HapticFeedbackOptions {\n type: HapticFeedbackType;\n}\n/**\n * @public\n * @category \uC778\uD130\uB809\uC158\n * @name generateHapticFeedback\n * @description \uB514\uBC14\uC774\uC2A4\uC5D0 \uD585\uD2F1 \uC9C4\uB3D9\uC744 \uC77C\uC73C\uD0A4\uB294 \uD568\uC218\uC608\uC694. \uC608\uB97C \uB4E4\uC5B4, \uBC84\uD2BC \uD130\uCE58\uB098 \uD654\uBA74\uC804\uD658\uC5D0 \uB4DC\uB77C\uB9C8\uD2F1\uD55C \uD6A8\uACFC\uB97C \uC8FC\uACE0 \uC2F6\uC744 \uB54C \uC0AC\uC6A9\uD560 \uC218 \uC788\uC5B4\uC694. [HapticFeedbackOptions](/react-native/reference/native-modules/\uC778\uD130\uB809\uC158/HapticFeedbackOptions.html)\uC5D0\uC11C \uC9C4\uB3D9\uD0C0\uC785\uC744 \uD655\uC778\uD574 \uBCF4\uC138\uC694.\n * @returns {void}\n *\n * @example\n * ### \uBC84\uD2BC\uC744 \uB20C\uB7EC \uD585\uD2F1 \uC77C\uC73C\uD0A4\uAE30\n *\n * ```tsx\n * import { Button } from \'react-native\';\n * import { generateHapticFeedback } from \'react-native-bedrock\';\n *\n * function GenerateHapticFeedback() {\n * return <Button title="\uD585\uD2F1" onPress={() => { generateHapticFeedback( { type: "tickWeak"}) }} />;\n * }\n * ```\n */\nexport declare function generateHapticFeedback(options: HapticFeedbackOptions): Promise<void>;\n\nexport {};\n'
10
+ },
11
+ {
12
+ identifier: "share",
13
+ dts: "/**\n * @public\n * @category \uACF5\uC720\n * @kind function\n * @name share\n * @description\n * \uC0AC\uC6A9\uC790\uAC00 \uCF58\uD150\uCE20\uB97C \uB2E4\uB978 \uC0AC\uB78C\uACFC \uACF5\uC720\uD560 \uC218 \uC788\uB3C4\uB85D \uB124\uC774\uD2F0\uBE0C \uACF5\uC720 \uC2DC\uD2B8\uB97C \uD45C\uC2DC\uD574\uC694.\n * `options.message` \uC18D\uC131\uC5D0 \uACF5\uC720\uD560 \uBA54\uC2DC\uC9C0\uB97C \uC804\uB2EC\uD558\uBA74, \uC0AC\uC6A9\uC790\uAC00 \uC120\uD0DD\uD560 \uC218 \uC788\uB294 \uC571 \uBAA9\uB85D\uC774 \uD45C\uC2DC\uB3FC\uC694.\n * \uC608\uB97C \uB4E4\uC5B4, \uC0AC\uC6A9\uC790\uAC00 \uD14D\uC2A4\uD2B8 \uBA54\uC2DC\uC9C0\uB97C \uACF5\uC720\uD558\uAC70\uB098 \uBA54\uBAA8 \uC571\uC5D0 \uC800\uC7A5\uD558\uB824\uACE0 \uD560 \uB54C \uC720\uC6A9\uD574\uC694.\n * @param {object} options - \uACF5\uC720\uD560 \uBA54\uC2DC\uC9C0\uB97C \uB2F4\uC740 \uAC1D\uCCB4\uC608\uC694.\n * @param {string} options.message - \uACF5\uC720\uD560 \uD14D\uC2A4\uD2B8 \uBB38\uC790\uC5F4\uC774\uC5D0\uC694. \uC608\uB97C \uB4E4\uC5B4, \"\uC548\uB155\uD558\uC138\uC694! \uC774 \uB0B4\uC6A9\uC744 \uACF5\uC720\uD569\uB2C8\uB2E4.\"\n *\n * @example\n * ### \uACF5\uC720\uD558\uAE30 \uAE30\uB2A5 \uAD6C\uD604\uD558\uAE30\n *\n * \uC544\uB798\uB294 \uBC84\uD2BC\uC744 \uD074\uB9AD\uD558\uBA74 \uBA54\uC2DC\uC9C0\uB97C \uACF5\uC720\uD558\uB294 \uAC04\uB2E8\uD55C \uC608\uC81C\uC608\uC694.\n *\n * ```tsx\n * import { share } from 'react-native-bedrock';\n * import { Button } from 'react-native';\n *\n * function MyPage() {\n * return (\n * <Button\n * title=\"\uACF5\uC720\"\n * onPress={() => share({ message: '\uACF5\uC720\uD560 \uBA54\uC2DC\uC9C0\uC785\uB2C8\uB2E4.' })}\n * />\n * );\n * }\n * ```\n */\nexport declare function share(message: {\n message: string;\n}): Promise<void>;\n\nexport {};\n"
14
+ },
15
+ {
16
+ identifier: "setSecureScreen",
17
+ dts: "/**\n * @public\n * @name setSecureScreen\n * @category \uD654\uBA74 \uC81C\uC5B4\n * @kind function\n * @description\n * \uD654\uBA74 \uCEA1\uCCD0\uB97C \uCC28\uB2E8\uD574\uC11C \uBBFC\uAC10\uD55C \uC815\uBCF4\uAC00 \uC720\uCD9C\uB418\uC9C0 \uC54A\uB3C4\uB85D \uBCF4\uD638\uD558\uAC70\uB098, \uD544\uC694\uD560 \uACBD\uC6B0 \uCEA1\uCCD0\uB97C \uD5C8\uC6A9\uD558\uB3C4\uB85D \uC124\uC815\uD574\uC694. \uC608\uB97C \uB4E4\uC5B4 \uBCF4\uC548\uC774 \uC911\uC694\uD55C \uD654\uBA74\uC5D0\uC11C \uC0AC\uC6A9\uD560 \uC218 \uC788\uC5B4\uC694.\n *\n * @param {object} options \uD654\uBA74 \uCEA1\uCCD0 \uC124\uC815 \uC635\uC158\uC774\uC5D0\uC694.\n * @param {boolean} options.enabled \uD654\uBA74 \uCEA1\uCCD0\uB97C \uCC28\uB2E8\uD560\uC9C0 \uC5EC\uBD80\uB97C \uC124\uC815\uD574\uC694. `true`\uBA74 \uCEA1\uCCD0\uB97C \uCC28\uB2E8\uD558\uACE0, `false`\uBA74 \uD5C8\uC6A9\uD574\uC694.\n * @returns {enabled: boolean} \uD604\uC7AC \uC124\uC815\uB41C \uCEA1\uCCD0 \uCC28\uB2E8 \uC0C1\uD0DC\uB97C \uBC18\uD658\uD574\uC694.\n *\n * @example\n * ### \uCEA1\uCCD0 \uD5C8\uC6A9 \uC0C1\uD0DC \uBCC0\uACBD\uD558\uAE30\n *\n * ```tsx\n * import { Button } from 'react-native';\n * import { setSecureScreen } from 'react-native-bedrock';\n *\n * function SetSecureScreen() {\n * return <Button title=\"\uCEA1\uCCD0 \uB9C9\uAE30\" onPress={async () => {\n * await setSecureScreen({ enabled: true });\n * }} />;\n * }\n * ```\n */\nexport declare function setSecureScreen(options: {\n enabled: boolean;\n}): Promise<{\n enabled: boolean;\n}>;\n\nexport {};\n"
18
+ },
19
+ {
20
+ identifier: "setScreenAwakeMode",
21
+ dts: "/**\n * @public\n * @category \uD654\uBA74 \uC81C\uC5B4\n * @kind function\n * @name setScreenAwakeMode\n * @description\n * `setScreenAwakeMode` \uD568\uC218\uB294 \uD654\uBA74\uC774 \uD56D\uC0C1 \uCF1C\uC838 \uC788\uB3C4\uB85D \uC124\uC815\uD558\uAC70\uB098 \uD574\uC81C\uD558\uB294 \uAE30\uB2A5\uC744 \uC81C\uACF5\uD574\uC694.\n * \uC774 \uAE30\uB2A5\uC740 \uC6F9\uD230, \uB3D9\uC601\uC0C1, \uBB38\uC11C \uC77D\uAE30 \uB4F1 \uD654\uBA74\uC744 \uC9C0\uC18D\uD574\uC11C \uCF1C\uB450\uC5B4\uC57C \uD558\uB294 \uC0C1\uD669\uC5D0\uC11C \uC720\uC6A9\uD574\uC694.\n *\n * `enabled` \uC635\uC158\uC744 `true`\uB85C \uC124\uC815\uD558\uBA74 \uD654\uBA74\uC774 \uAEBC\uC9C0\uC9C0 \uC54A\uAC8C \uC720\uC9C0\uD558\uACE0, `false`\uB85C \uC124\uC815\uD558\uBA74 \uAE30\uBCF8 \uD654\uBA74 \uBCF4\uD638\uAE30 \uC2DC\uAC04\uC5D0 \uB530\uB77C \uD654\uBA74\uC774 \uAEBC\uC838\uC694. \uD2B9\uD788, \uC774 \uD568\uC218\uB294 \uC571 \uC804\uCCB4\uC5D0 \uC601\uD5A5\uC744 \uBBF8\uCE58\uBBC0\uB85C \uD2B9\uC815 \uD654\uBA74\uC5D0\uC11C\uB9CC \uC0AC\uC6A9\uD558\uB824\uBA74 \uD654\uBA74\uC744 \uBC97\uC5B4\uB0A0 \uB54C \uC774\uC804 \uC0C1\uD0DC\uB85C \uBCF5\uAD6C\uD558\uB294 \uCD94\uAC00 \uC791\uC5C5\uC774 \uD544\uC694\uD574\uC694.\n *\n * \uC608\uB97C \uB4E4\uC5B4, \uBBF8\uB514\uC5B4 \uCF58\uD150\uCE20 \uAC10\uC0C1 \uD654\uBA74\uC5D0\uC11C\uB294 \uD56D\uC0C1 \uCF1C\uC9D0 \uBAA8\uB4DC\uB97C \uD65C\uC131\uD654\uD558\uACE0, \uD654\uBA74\uC744 \uB5A0\uB0A0 \uB54C \uC124\uC815\uC744 \uBCF5\uAD6C\uD574\uC11C \uBD88\uD544\uC694\uD55C \uBC30\uD130\uB9AC \uC18C\uBAA8\uB97C \uBC29\uC9C0\uD560 \uC218 \uC788\uC5B4\uC694.\n *\n * \uB2E4\uB9CC, \uC571\uC5D0\uC11C \uBC97\uC5B4\uB098\uB294 \uC0C1\uD669\uC5D0\uC11C\uB294 \uD56D\uC0C1 \uCF1C\uC9D0 \uBAA8\uB4DC\uAC00 \uBE44\uD65C\uC131\uD654\uB420 \uC218 \uC788\uC73C\uB2C8 \uC8FC\uC758\uD574\uC57C \uD574\uC694.\n *\n * @param {object} options \uD654\uBA74 \uD56D\uC0C1 \uCF1C\uC9D0 \uBAA8\uB4DC\uC758 \uC124\uC815 \uAC12\uC774\uC5D0\uC694.\n * @param {boolean} options.enabled \uD654\uBA74 \uD56D\uC0C1 \uCF1C\uC9D0 \uBAA8\uB4DC\uB97C \uCF1C\uAC70\uB098 \uB044\uB294 \uC635\uC158\uC774\uC5D0\uC694.\n * `true`\uB85C \uC124\uC815\uD558\uBA74 \uD654\uBA74\uC774 \uD56D\uC0C1 \uCF1C\uC9C0\uACE0, `false`\uB85C \uC124\uC815\uD558\uBA74 \uD654\uBA74 \uBCF4\uD638\uAE30 \uC2DC\uAC04\uC5D0 \uB530\uB77C \uAEBC\uC838\uC694.\n *\n * @returns {object} \uD604\uC7AC \uD654\uBA74 \uD56D\uC0C1 \uCF1C\uC9D0 \uBAA8\uB4DC\uC758 \uC124\uC815 \uC0C1\uD0DC\uB97C \uBC18\uD658\uD574\uC694.\n * @returns {boolean} enabled \uD654\uBA74 \uD56D\uC0C1 \uCF1C\uC9D0 \uBAA8\uB4DC\uAC00 \uCF1C\uC838 \uC788\uB294\uC9C0 \uC5EC\uBD80\uB97C \uB098\uD0C0\uB0B4\uB294 \uAC12\uC774\uC5D0\uC694.\n *\n * @example\n * ### \uD654\uBA74 \uD56D\uC0C1 \uCF1C\uC9D0 \uBAA8\uB4DC \uC124\uC815\uD558\uAE30\n *\n * ```tsx\n * import { Button } from 'react-native';\n * import { setScreenAwakeMode } from 'react-native-bedrock';\n *\n * function SetScreenAwakeMode() {\n * return (\n * <Button\n * title=\"\uD654\uBA74 \uD56D\uC0C1 \uCF1C\uAE30\"\n * onPress={() => {\n * setScreenAwakeMode({ enabled: true });\n * }}\n * />\n * );\n * }\n * ```\n *\n * ### \uD654\uBA74 \uD56D\uC0C1 \uCF1C\uC9D0 \uBAA8\uB4DC \uBCF5\uAD6C\uD558\uAE30\n * \uD2B9\uC815 \uD654\uBA74\uC744 \uBC97\uC5B4\uB0A0 \uB54C \uC774\uC804 \uC0C1\uD0DC\uB85C \uBCF5\uAD6C\uD558\uB824\uBA74 \uB2E4\uC74C\uACFC \uAC19\uC774 `useEffect`\uB97C \uC0AC\uC6A9\uD558\uC138\uC694.\n *\n * ```tsx\n * import { useEffect } from 'react';\n * import { setScreenAwakeMode, cleanUp } from 'react-native-bedrock';\n *\n * function MediaScreen() {\n * useEffect(() => {\n * setScreenAwakeMode({ enabled: true });\n *\n * return () => {\n * setScreenAwakeMode({ enabled: false }); // \uC124\uC815\uC744 \uC774\uC804 \uC0C1\uD0DC\uB85C \uBCF5\uAD6C\uD574\uC694.\n * };\n * }, []);\n *\n * return <Text>\uBBF8\uB514\uC5B4 \uCF58\uD150\uCE20\uB97C \uAC10\uC0C1\uD558\uB294 \uD654\uBA74</Text>;\n * }\n * ```\n */\nexport declare function setScreenAwakeMode(options: {\n enabled: boolean;\n}): Promise<{\n enabled: boolean;\n}>;\n\nexport {};\n"
22
+ },
23
+ {
24
+ identifier: "getNetworkStatus",
25
+ dts: 'export type NetworkStatus = "OFFLINE" | "WIFI" | "2G" | "3G" | "4G" | "5G" | "WWAN" | "UNKNOWN";\n/**\n * @public\n * @category \uB124\uD2B8\uC6CC\uD06C\n * @kind function\n * @name getNetworkStatus\n * @description\n * \uB514\uBC14\uC774\uC2A4\uC758 \uD604\uC7AC \uB124\uD2B8\uC6CC\uD06C \uC5F0\uACB0 \uC0C1\uD0DC\uB97C \uAC00\uC838\uC624\uB294 \uD568\uC218\uC608\uC694.\n * \uBC18\uD658 \uAC12\uC740 `NetworkStatus` \uD0C0\uC785\uC73C\uB85C, \uC778\uD130\uB137 \uC5F0\uACB0 \uC5EC\uBD80\uC640 \uC5F0\uACB0 \uC720\uD615(Wi-Fi, \uBAA8\uBC14\uC77C \uB370\uC774\uD130 \uB4F1)\uC744 \uB098\uD0C0\uB0B4\uC694. \uAC12\uC740 \uB2E4\uC74C \uC911 \uD558\uB098\uC608\uC694.\n *\n * - `OFFLINE`: \uC778\uD130\uB137\uC5D0 \uC5F0\uACB0\uB418\uC9C0 \uC54A\uC740 \uC0C1\uD0DC\uC608\uC694.\n * - `WIFI`: Wi-Fi\uC5D0 \uC5F0\uACB0\uB41C \uC0C1\uD0DC\uC608\uC694.\n * - `2G`: 2G \uB124\uD2B8\uC6CC\uD06C\uC5D0 \uC5F0\uACB0\uB41C \uC0C1\uD0DC\uC608\uC694.\n * - `3G`: 3G \uB124\uD2B8\uC6CC\uD06C\uC5D0 \uC5F0\uACB0\uB41C \uC0C1\uD0DC\uC608\uC694.\n * - `4G`: 4G \uB124\uD2B8\uC6CC\uD06C\uC5D0 \uC5F0\uACB0\uB41C \uC0C1\uD0DC\uC608\uC694.\n * - `5G`: 5G \uB124\uD2B8\uC6CC\uD06C\uC5D0 \uC5F0\uACB0\uB41C \uC0C1\uD0DC\uC608\uC694.\n * - `WWAN`: \uC778\uD130\uB137\uC740 \uC5F0\uACB0\uB418\uC5C8\uC9C0\uB9CC, \uC5F0\uACB0 \uC720\uD615(Wi-Fi, 2G~5G)\uC744 \uC54C \uC218 \uC5C6\uB294 \uC0C1\uD0DC\uC608\uC694. \uC774 \uC0C1\uD0DC\uB294 iOS\uC5D0\uC11C\uB9CC \uD655\uC778\uD560 \uC218 \uC788\uC5B4\uC694.\n * - `UNKNOWN`: \uC778\uD130\uB137 \uC5F0\uACB0 \uC0C1\uD0DC\uB97C \uC54C \uC218 \uC5C6\uB294 \uC0C1\uD0DC\uC608\uC694. \uC774 \uC0C1\uD0DC\uB294 \uC548\uB4DC\uB85C\uC774\uB4DC\uC5D0\uC11C\uB9CC \uD655\uC778\uD560 \uC218 \uC788\uC5B4\uC694.\n *\n * @returns {Promise<NetworkStatus>} \uB124\uD2B8\uC6CC\uD06C \uC0C1\uD0DC\uB97C \uBC18\uD658\uD574\uC694.\n *\n * @example\n * ### \uD604\uC7AC \uB124\uD2B8\uC6CC\uD06C \uC0C1\uD0DC \uAC00\uC838\uC624\uAE30\n *\n * \uB124\uD2B8\uC6CC\uD06C \uC5F0\uACB0 \uC0C1\uD0DC\uB97C \uAC00\uC838\uC640 \uD654\uBA74\uC5D0 \uD45C\uC2DC\uD558\uB294 \uC608\uC81C\uC608\uC694.\n *\n * ```tsx\n * import { useState, useEffect } from \'react\';\n * import { Text, View } from \'react-native\';\n * import { getNetworkStatus, NetworkStatus } from \'react-native-bedrock\';\n *\n * function GetNetworkStatus() {\n * const [status, setStatus] = useState<NetworkStatus | \'\'>(\'\');\n *\n * useEffect(() => {\n * async function fetchStatus() {\n * const networkStatus = await getNetworkStatus();\n * setStatus(networkStatus);\n * }\n *\n * fetchStatus();\n * }, []);\n *\n * return (\n * <View>\n * <Text>\uD604\uC7AC \uB124\uD2B8\uC6CC\uD06C \uC0C1\uD0DC: {status}</Text>\n * </View>\n * );\n * }\n * ```\n */\nexport declare function getNetworkStatus(): Promise<NetworkStatus>;\n\nexport {};\n'
26
+ },
27
+ {
28
+ identifier: "setIosSwipeGestureEnabled",
29
+ dts: "/**\n * @public\n * @category \uD654\uBA74 \uC81C\uC5B4\n * @name setIosSwipeGestureEnabled\n * @description\n * `setIosSwipeGestureEnabled` \uD568\uC218\uB294 iOS\uC5D0\uC11C \uD654\uBA74\uC744 \uC2A4\uC640\uC774\uD504\uD558\uC5EC \uB4A4\uB85C\uAC00\uAE30 \uAE30\uB2A5\uC744 \uD65C\uC131\uD654\uD558\uAC70\uB098 \uBE44\uD65C\uC131\uD654\uD560 \uC218 \uC788\uC5B4\uC694.\n *\n * @param {object} options \uC2A4\uC640\uC774\uD504\uD558\uC5EC \uB4A4\uB85C\uAC00\uAE30 \uAE30\uB2A5\uC744 \uD65C\uC131\uD654\uD558\uAC70\uB098 \uBE44\uD65C\uC131\uD654\uD558\uB294 \uC635\uC158\uC774\uC5D0\uC694.\n * @param {boolean} options.isEnabled \uD654\uBA74\uC744 \uC2A4\uC640\uC774\uD504\uD558\uC5EC \uB4A4\uB85C\uAC00\uAE30 \uAE30\uB2A5\uC744 \uD65C\uC131\uD654\uD558\uAC70\uB098 \uBE44\uD65C\uC131\uD654\uD560 \uC218 \uC788\uC5B4\uC694. `true`\uB97C \uC124\uC815\uD558\uBA74 \uC2A4\uC640\uC774\uD504\uB85C \uB4A4\uB85C\uAC08 \uC218 \uC788\uACE0, `false`\uB97C \uC124\uC815\uD558\uBA74 \uC2A4\uC640\uC774\uD504 \uB4A4\uB85C\uAC00\uAE30 \uAE30\uB2A5\uC774 \uBE44\uD65C\uC131\uD654\uB3FC\uC694.\n *\n * @returns {void}\n *\n * @example\n *\n * ### iOS\uC5D0\uC11C \uD654\uBA74 \uC2A4\uC640\uC774\uD504\uB85C \uB4A4\uB85C\uAC00\uAE30 \uAE30\uB2A5\uC744 \uD65C\uC131\uD654\uD558\uAC70\uB098 \uBE44\uD65C\uC131\uD654\uD558\uAE30\n *\n * **\uC2A4\uC640\uC774\uD504 \uB044\uAE30** \uBC84\uD2BC\uC744 \uB20C\uB7EC \uD654\uBA74 \uC2A4\uC640\uC774\uD504\uB85C \uB4A4\uB85C\uAC00\uAE30 \uAE30\uB2A5\uC744 \uBE44\uD65C\uC131\uD654\uD558\uAC70\uB098, **\uC2A4\uC640\uC774\uD504 \uCF1C\uAE30** \uBC84\uD2BC\uC744 \uB20C\uB7EC \uD654\uBA74 \uC2A4\uC640\uC774\uD504\uB85C \uB4A4\uB85C\uAC00\uAE30 \uAE30\uB2A5\uC744 \uD65C\uC131\uD654\uD560 \uC218 \uC788\uC5B4\uC694.\n *\n *\n * ```tsx\n * import { setIosSwipeGestureEnabled } from 'react-native-bedrock';\n * import { Button } from 'react-native';\n *\n * function Page() {\n * return (\n * <>\n * <Button title=\"\uC2A4\uC640\uC774\uD504 \uB044\uAE30\" onPress={() => setIosSwipeGestureEnabled({ isEnabled: false })} />\n * <Button title=\"\uC2A4\uC640\uC774\uD504 \uCF1C\uAE30\" onPress={() => setIosSwipeGestureEnabled({ isEnabled: true })} />\n * </>\n * );\n * }\n * ```\n *\n */\nexport declare function setIosSwipeGestureEnabled(options: {\n isEnabled: boolean;\n}): Promise<void>;\n\nexport {};\n"
30
+ },
31
+ {
32
+ identifier: "openURL",
33
+ dts: "/**\n * @public\n * @kind function\n * @category \uD654\uBA74 \uC774\uB3D9\n *\n * @name openURL\n * @signature\n * ```typescript\n * function openURL(url: string): Promise<any>;\n * ```\n *\n * @description\n * \uC9C0\uC815\uB41C URL\uC744 \uAE30\uAE30\uC758 \uAE30\uBCF8 \uBE0C\uB77C\uC6B0\uC800\uB098 \uAD00\uB828 \uC571\uC5D0\uC11C \uC5F4\uC5B4\uC694.\n * \uC774 \uD568\uC218\uB294 `react-native`\uC758 [`Linking.openURL`](https://reactnative.dev/docs/0.72/linking#openurl) \uBA54\uC11C\uB4DC\uB97C \uC0AC\uC6A9\uD558\uC5EC URL\uC744 \uC5F4\uC5B4\uC694.\n *\n * @param {string} url \uC5F4\uACE0\uC790 \uD558\uB294 URL \uC8FC\uC18C\n * @returns {Promise<any>} URL\uC774 \uC131\uACF5\uC801\uC73C\uB85C \uC5F4\uB838\uC744 \uB54C \uD574\uACB0\uB418\uB294 Promise\n *\n * @example\n *\n * ### \uC678\uBD80 URL \uC5F4\uAE30\n *\n * ```tsx\n * import { openURL } from 'react-native-bedrock';\n * import { Button } from 'react-native';\n *\n * function Page() {\n * const handlePress = () => {\n * openURL('https://google.com');\n * };\n *\n * return <Button title=\"\uAD6C\uAE00 \uC6F9\uC0AC\uC774\uD2B8 \uC5F4\uAE30\" onPress={handlePress} />;\n * }\n * ```\n */\nexport declare function openURL(url: string): Promise<any>;\n\nexport {};\n"
34
+ },
35
+ {
36
+ identifier: "setClipboardText",
37
+ dts: "/**\n * @public\n * @category \uD074\uB9BD\uBCF4\uB4DC\n * @name setClipboardText\n * @description \uD14D\uC2A4\uD2B8\uB97C \uD074\uB9BD\uBCF4\uB4DC\uC5D0 \uBCF5\uC0AC\uD574\uC11C \uC0AC\uC6A9\uC790\uAC00 \uB2E4\uB978 \uACF3\uC5D0 \uBD99\uC5EC \uB123\uAE30 \uD560 \uC218 \uC788\uC5B4\uC694.\n * @param {Promise<void>} text - \uD074\uB9BD\uBCF4\uB4DC\uC5D0 \uBCF5\uC0AC\uD560 \uD14D\uC2A4\uD2B8\uC608\uC694. \uBB38\uC790\uC5F4 \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD574\uC694.\n *\n * @example\n * ### \uD14D\uC2A4\uD2B8\uB97C \uD074\uB9BD\uBCF4\uB4DC\uC5D0 \uBCF5\uC0AC\uD558\uAE30\n *\n * ```tsx\n * import { Button } from 'react-native';\n * import { setClipboardText } from '@apps-in-toss/framework';\n *\n * // '\uBCF5\uC0AC' \uBC84\uD2BC\uC744 \uB204\uB974\uBA74 \"\uBCF5\uC0AC\uD560 \uD14D\uC2A4\uD2B8\"\uAC00 \uD074\uB9BD\uBCF4\uB4DC\uC5D0 \uBCF5\uC0AC\uB3FC\uC694.\n * function CopyButton() {\n * const handleCopy = async () => {\n * try {\n * await setClipboardText('\uBCF5\uC0AC\uD560 \uD14D\uC2A4\uD2B8');\n * console.log('\uD14D\uC2A4\uD2B8\uAC00 \uBCF5\uC0AC\uB410\uC5B4\uC694!');\n * } catch (error) {\n * console.error('\uD14D\uC2A4\uD2B8 \uBCF5\uC0AC\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:', error);\n * }\n * };\n *\n * return <Button title=\"\uBCF5\uC0AC\" onPress={handleCopy} />;\n * }\n * ```\n */\nexport declare function setClipboardText(text: string): Promise<void>;\n\nexport {};\n"
38
+ },
39
+ {
40
+ identifier: "getClipboardText",
41
+ dts: "/**\n * @public\n * @category \uD074\uB9BD\uBCF4\uB4DC\n * @name getClipboardText\n * @description \uD074\uB9BD\uBCF4\uB4DC\uC5D0 \uC800\uC7A5\uB41C \uD14D\uC2A4\uD2B8\uB97C \uAC00\uC838\uC624\uB294 \uD568\uC218\uC608\uC694. \uBCF5\uC0AC\uB41C \uD14D\uC2A4\uD2B8\uB97C \uC77D\uC5B4\uC11C \uB2E4\uB978 \uC791\uC5C5\uC5D0 \uD65C\uC6A9\uD560 \uC218 \uC788\uC5B4\uC694.\n * @returns {Promise<string>} - \uD074\uB9BD\uBCF4\uB4DC\uC5D0 \uC800\uC7A5\uB41C \uD14D\uC2A4\uD2B8\uB97C \uBC18\uD658\uD574\uC694. \uD074\uB9BD\uBCF4\uB4DC\uC5D0 \uD14D\uC2A4\uD2B8\uAC00 \uC5C6\uC73C\uBA74 \uBE48 \uBB38\uC790\uC5F4\uC744 \uBC18\uD658\uD574\uC694.\n *\n * @example\n * ### \uD074\uB9BD\uBCF4\uB4DC\uC758 \uD14D\uC2A4\uD2B8 \uAC00\uC838\uC624\uAE30\n *\n * ```tsx\n * import React, { useState } from 'react';\n * import { View, Text, Button } from 'react-native';\n * import { getClipboardText } from '@apps-in-toss/framework';\n *\n * // '\uBD99\uC5EC\uB123\uAE30' \uBC84\uD2BC\uC744 \uB204\uB974\uBA74 \uD074\uB9BD\uBCF4\uB4DC\uC5D0 \uC800\uC7A5\uB41C \uD14D\uC2A4\uD2B8\uB97C \uAC00\uC838\uC640 \uD654\uBA74\uC5D0 \uD45C\uC2DC\uD574\uC694.\n * function PasteButton() {\n * const [text, setText] = useState('');\n *\n * const handlePress = async () => {\n * try {\n * const clipboardText = await getClipboardText();\n * setText(clipboardText || '\uD074\uB9BD\uBCF4\uB4DC\uC5D0 \uD14D\uC2A4\uD2B8\uAC00 \uC5C6\uC5B4\uC694.');\n * } catch (error) {\n * console.error('\uD074\uB9BD\uBCF4\uB4DC\uC5D0\uC11C \uD14D\uC2A4\uD2B8\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694:', error);\n * }\n * };\n *\n * return (\n * <View>\n * <Text>{text}</Text>\n * <Button title=\"\uBD99\uC5EC\uB123\uAE30\" onPress={handlePress} />\n * </View>\n * );\n * }\n * ```\n */\nexport declare function getClipboardText(): Promise<string>;\n\nexport {};\n"
42
+ },
43
+ {
44
+ identifier: "fetchContacts",
45
+ dts: "/**\n * \uC5F0\uB77D\uCC98 \uC815\uBCF4\uB97C \uB098\uD0C0\uB0B4\uB294 \uD0C0\uC785\uC774\uC5D0\uC694.\n */\nexport interface ContactEntity {\n /** \uC5F0\uB77D\uCC98 \uC774\uB984\uC774\uC5D0\uC694. */\n name: string;\n /** \uC5F0\uB77D\uCC98 \uC804\uD654\uBC88\uD638\uB85C, \uBB38\uC790\uC5F4 \uD615\uC2DD\uC774\uC5D0\uC694. */\n phoneNumber: string;\n}\nexport interface ContactResult {\n result: ContactEntity[];\n nextOffset: number | null;\n done: boolean;\n}\n/**\n * @public\n * @category \uC5F0\uB77D\uCC98\n * @name fetchContacts\n * @description \uC0AC\uC6A9\uC790\uC758 \uC5F0\uB77D\uCC98 \uBAA9\uB85D\uC744 \uD398\uC774\uC9C0 \uB2E8\uC704\uB85C \uAC00\uC838\uC624\uB294 \uD568\uC218\uC608\uC694.\n * @param options - \uC5F0\uB77D\uCC98\uB97C \uAC00\uC838\uC62C \uB54C \uC9C0\uC815\uD558\uB294 \uC635\uC158 \uAC1D\uCCB4\uC608\uC694.\n * @param options.size - \uD55C \uBC88\uC5D0 \uAC00\uC838\uC62C \uC5F0\uB77D\uCC98 \uAC1C\uC218\uC608\uC694. \uC608\uB97C \uB4E4\uC5B4, 10\uC744 \uC804\uB2EC\uD558\uBA74 \uCD5C\uB300 10\uAC1C\uC758 \uC5F0\uB77D\uCC98\uB97C \uAC00\uC838\uC640\uC694.\n * @param options.offset - \uAC00\uC838\uC62C \uC5F0\uB77D\uCC98\uC758 \uC2DC\uC791 \uC9C0\uC810\uC774\uC5D0\uC694. \uCC98\uC74C \uD638\uCD9C\uD560 \uB54C\uB294 `0`\uC744 \uC804\uB2EC\uD574\uC57C \uD574\uC694. \uC774\uD6C4\uC5D0\uB294 \uC774\uC804 \uD638\uCD9C\uC5D0\uC11C \uBC18\uD658\uB41C `nextOffset` \uAC12\uC744 \uC0AC\uC6A9\uD574\uC694.\n * @param options.query - \uCD94\uAC00\uC801\uC778 \uD544\uD130\uB9C1 \uC635\uC158\uC774\uC5D0\uC694.\n * @param options.query.contains - \uC774\uB984\uC5D0 \uD2B9\uC815 \uBB38\uC790\uC5F4\uC774 \uD3EC\uD568\uB41C \uC5F0\uB77D\uCC98\uB9CC \uAC00\uC838\uC624\uACE0 \uC2F6\uC744 \uB54C \uC0AC\uC6A9\uD574\uC694. \uC774 \uAC12\uC744 \uC804\uB2EC\uD558\uC9C0 \uC54A\uC73C\uBA74 \uBAA8\uB4E0 \uC5F0\uB77D\uCC98\uB97C \uAC00\uC838\uC640\uC694.\n * @returns {Promise<ContactResult>}\n * \uC5F0\uB77D\uCC98 \uBAA9\uB85D\uACFC \uD398\uC774\uC9C0\uB124\uC774\uC158 \uC815\uBCF4\uB97C \uD3EC\uD568\uD55C \uAC1D\uCCB4\uB97C \uBC18\uD658\uD574\uC694.\n * - `result`: \uAC00\uC838\uC628 \uC5F0\uB77D\uCC98 \uBAA9\uB85D\uC774\uC5D0\uC694.\n * - `nextOffset`: \uB2E4\uC74C \uD638\uCD9C\uC5D0 \uC0AC\uC6A9\uD560 \uC624\uD504\uC14B \uAC12\uC774\uC5D0\uC694. \uB354 \uAC00\uC838\uC62C \uC5F0\uB77D\uCC98\uAC00 \uC5C6\uC73C\uBA74 `null`\uC774\uC5D0\uC694.\n * - `done`: \uBAA8\uB4E0 \uC5F0\uB77D\uCC98\uB97C \uB2E4 \uAC00\uC838\uC654\uB294\uC9C0 \uC5EC\uBD80\uB97C \uB098\uD0C0\uB0B4\uC694. \uBAA8\uB450 \uAC00\uC838\uC654\uB2E4\uBA74 `true`\uC608\uC694.\n *\n * @signature\n * ```typescript\n * function fetchContacts(options: {\n * size: number;\n * offset: number;\n * query?: {\n * contains?: string;\n * };\n * }): Promise<ContactResult>;\n * ```\n *\n * @example\n * ### \uD2B9\uC815 \uBB38\uC790\uC5F4\uC774 \uD3EC\uD568\uB41C \uC5F0\uB77D\uCC98 \uBAA9\uB85D \uAC00\uC838\uC624\uAE30\n *\n * ```tsx\n * import React, { useState } from 'react';\n * import { View, Text, Button } from 'react-native';\n * import { fetchContacts, ContactEntity } from '@apps-in-toss/framework';\n *\n * // \uD2B9\uC815 \uBB38\uC790\uC5F4\uC744 \uD3EC\uD568\uD55C \uC5F0\uB77D\uCC98 \uBAA9\uB85D\uC744 \uAC00\uC838\uC640 \uD654\uBA74\uC5D0 \uD45C\uC2DC\uD558\uB294 \uCEF4\uD3EC\uB10C\uD2B8\n * function ContactsList() {\n * const [contacts, setContacts] = useState<{\n * result: ContactEntity[];\n * nextOffset: number | null;\n * done: boolean;\n * }>({\n * result: [],\n * nextOffset: null,\n * done: false,\n * });\n *\n * const handlePress = async () => {\n * try {\n * if (contacts.done) {\n * console.log('\uBAA8\uB4E0 \uC5F0\uB77D\uCC98\uB97C \uAC00\uC838\uC654\uC5B4\uC694.');\n * return;\n * }\n *\n * const response = await fetchContacts({\n * size: 10,\n * offset: contacts.nextOffset ?? 0,\n * query: { contains: '\uAE40' },\n * });\n * setContacts((prev) => ({\n * result: [...prev.result, ...response.result],\n * nextOffset: response.nextOffset,\n * done: response.done,\n * }));\n * } catch (error) {\n * console.error('\uC5F0\uB77D\uCC98\uB97C \uAC00\uC838\uC624\uB294 \uB370 \uC2E4\uD328\uD588\uC5B4\uC694:', error);\n * }\n * };\n *\n * return (\n * <View>\n * {contacts.result.map((contact, index) => (\n * <Text key={index}>{contact.name}: {contact.phoneNumber}</Text>\n * ))}\n * <Button\n * title={contacts.done ? '\uBAA8\uB4E0 \uC5F0\uB77D\uCC98\uB97C \uAC00\uC838\uC654\uC5B4\uC694.' : '\uB2E4\uC74C \uC5F0\uB77D\uCC98 \uAC00\uC838\uC624\uAE30'}\n * disabled={contacts.done}\n * onPress={handlePress}\n * />\n * </View>\n * );\n * }\n * ```\n */\nexport declare function fetchContacts(options: {\n size: number;\n offset: number;\n query?: {\n contains?: string;\n };\n}): Promise<ContactResult>;\n\nexport {};\n"
46
+ },
47
+ {
48
+ identifier: "fetchAlbumPhotos",
49
+ dts: "/**\n * \uC0AC\uC9C4 \uC870\uD68C \uACB0\uACFC\uB97C \uB098\uD0C0\uB0B4\uB294 \uD0C0\uC785\uC774\uC5D0\uC694.\n */\nexport interface ImageResponse {\n /** \uAC00\uC838\uC628 \uC0AC\uC9C4\uC758 \uACE0\uC720 ID\uC608\uC694. */\n id: string;\n /** \uC0AC\uC9C4\uC758 \uB370\uC774\uD130 URI\uC608\uC694. `base64` \uC635\uC158\uC774 `true`\uC778 \uACBD\uC6B0 Base64 \uBB38\uC790\uC5F4\uB85C \uBC18\uD658\uB3FC\uC694. */\n dataUri: string;\n}\n/**\n * \uC568\uBC94 \uC0AC\uC9C4\uC744 \uC870\uD68C\uD560 \uB54C \uC0AC\uC6A9\uD558\uB294 \uC635\uC158 \uD0C0\uC785\uC774\uC5D0\uC694.\n */\nexport interface FetchAlbumPhotosOptions {\n /** \uAC00\uC838\uC62C \uC0AC\uC9C4\uC758 \uCD5C\uB300 \uAC1C\uC218\uB97C \uC124\uC815\uD574\uC694. \uC22B\uC790\uB97C \uC785\uB825\uD558\uACE0 \uAE30\uBCF8\uAC12\uC740 10\uC774\uC5D0\uC694. */\n maxCount?: number;\n /** \uC0AC\uC9C4\uC758 \uCD5C\uB300 \uD3ED\uC744 \uC81C\uD55C\uD574\uC694. \uB2E8\uC704\uB294 \uD53D\uC140\uC774\uACE0 \uAE30\uBCF8\uAC12\uC740 1024\uC774\uC5D0\uC694. */\n maxWidth?: number;\n /** \uC774\uBBF8\uC9C0\uB97C base64 \uD615\uC2DD\uC73C\uB85C \uBC18\uD658\uD560\uC9C0 \uC124\uC815\uD574\uC694. \uAE30\uBCF8\uAC12\uC740 `false`\uC608\uC694. */\n base64?: boolean;\n}\n/**\n * @public\n * @category \uC0AC\uC9C4\n * @name fetchAlbumPhotos\n * @description\n * \uC0AC\uC6A9\uC790\uC758 \uC568\uBC94\uC5D0\uC11C \uC0AC\uC9C4 \uBAA9\uB85D\uC744 \uBD88\uB7EC\uC624\uB294 \uD568\uC218\uC608\uC694.\n * \uCD5C\uB300 \uAC1C\uC218\uC640 \uD574\uC0C1\uB3C4\uB97C \uC124\uC815\uD560 \uC218 \uC788\uACE0 \uAC24\uB7EC\uB9AC \uBBF8\uB9AC\uBCF4\uAE30, \uC774\uBBF8\uC9C0 \uC120\uD0DD \uAE30\uB2A5 \uB4F1\uC5D0 \uD65C\uC6A9\uD560 \uC218 \uC788\uC5B4\uC694.\n *\n * @param options - \uC870\uD68C \uC635\uC158\uC744 \uB2F4\uC740 \uAC1D\uCCB4\uC608\uC694.\n * @param {number} [options.maxCount=10] \uAC00\uC838\uC62C \uC0AC\uC9C4\uC758 \uCD5C\uB300 \uAC1C\uC218\uB97C \uC124\uC815\uD574\uC694. \uC22B\uC790\uB85C \uC785\uB825\uD558\uBA70 \uAE30\uBCF8\uAC12\uC740 10\uC774\uC5D0\uC694.\n * @param {number} [options.maxWidth=1024] \uC0AC\uC9C4\uC758 \uCD5C\uB300 \uD3ED\uC744 \uC81C\uD55C\uD574\uC694. \uB2E8\uC704\uB294 \uD53D\uC140\uC774\uBA70 \uAE30\uBCF8\uAC12\uC740 `1024`\uC774\uC5D0\uC694.\n * @param {boolean} [options.base64=false] \uC774\uBBF8\uC9C0\uB97C base64 \uD615\uC2DD\uC73C\uB85C \uBC18\uD658\uD560\uC9C0 \uC124\uC815\uD574\uC694. \uAE30\uBCF8\uAC12\uC740 `false`\uC608\uC694.\n * @returns {Promise<ImageResponse[]>}\n * \uC568\uBC94 \uC0AC\uC9C4\uC758 \uACE0\uC720 ID\uC640 \uB370\uC774\uD130 URI\uB97C \uD3EC\uD568\uD55C \uBC30\uC5F4\uC744 \uBC18\uD658\uD574\uC694.\n *\n * @example\n * ### \uC0AC\uC9C4\uC758 \uCD5C\uB300 \uD3ED\uC744 360px\uB85C \uC81C\uD55C\uD558\uC5EC \uAC00\uC838\uC624\uAE30\n *\n * ```tsx\n * import React, { useState } from 'react';\n * import { View, Image, Button } from 'react-native';\n * import { fetchAlbumPhotos } from '@apps-in-toss/framework';\n *\n * const base64 = true;\n *\n * // \uC568\uBC94 \uC0AC\uC9C4 \uBAA9\uB85D\uC744 \uAC00\uC838\uC640 \uD654\uBA74\uC5D0 \uD45C\uC2DC\uD558\uB294 \uCEF4\uD3EC\uB10C\uD2B8\n * function AlbumPhotoList() {\n * const [albumPhotos, setAlbumPhotos] = useState([]);\n *\n * const handlePress = async () => {\n * try {\n * const response = await fetchAlbumPhotos({\n * base64,\n * maxWidth: 360,\n * });\n * setAlbumPhotos((prev) => ([...prev, ...response]));\n * } catch (error) {\n * console.error('\uC568\uBC94\uC744 \uAC00\uC838\uC624\uB294 \uB370 \uC2E4\uD328\uD588\uC5B4\uC694:', error);\n * }\n * };\n *\n * return (\n * <View>\n * {albumPhotos.map((image) => {\n * // base64 \uD615\uC2DD\uC73C\uB85C \uBC18\uD658\uB41C \uC774\uBBF8\uC9C0\uB97C \uD45C\uC2DC\uD558\uB824\uBA74 \uB370\uC774\uD130 URL \uC2A4\uD0A4\uB9C8 Prefix\uB97C \uBD99\uC5EC\uC57C\uD574\uC694.\n * const imageUri = base64 ? 'data:image/jpeg;base64,' + image.dataUri : image.dataUri;\n *\n * return <Image source={{ uri: imageUri }} key={image.id} />;\n * })}\n * <Button title=\"\uC568\uBC94 \uAC00\uC838\uC624\uAE30\" onPress={handlePress} />\n * </View>\n * );\n * }\n * ```\n */\nexport declare function fetchAlbumPhotos(options: FetchAlbumPhotosOptions): Promise<ImageResponse[]>;\n\nexport {};\n"
50
+ },
51
+ {
52
+ identifier: "getCurrentLocation",
53
+ dts: "/**\n * @public\n * @category \uC704\uCE58 \uC815\uBCF4\n * @name Accuracy\n * @description \uC704\uCE58 \uC815\uD655\uB3C4 \uC635\uC158\uC774\uC5D0\uC694.\n */\nexport declare enum Accuracy {\n /**\n * \uC624\uCC28\uBC94\uC704 3KM \uC774\uB0B4\n */\n Lowest = 1,\n /**\n * \uC624\uCC28\uBC94\uC704 1KM \uC774\uB0B4\n */\n Low = 2,\n /**\n * \uC624\uCC28\uBC94\uC704 \uBA87 \uBC31\uBBF8\uD130 \uC774\uB0B4\n */\n Balanced = 3,\n /**\n * \uC624\uCC28\uBC94\uC704 10M \uC774\uB0B4\n */\n High = 4,\n /**\n * \uAC00\uC7A5 \uB192\uC740 \uC815\uD655\uB3C4\n */\n Highest = 5,\n /**\n * \uB124\uBE44\uAC8C\uC774\uC158\uC744 \uC704\uD55C \uCD5C\uACE0 \uC815\uD655\uB3C4\n */\n BestForNavigation = 6\n}\ninterface Location$1 {\n /**\n * Android\uC5D0\uC11C\uB9CC \uC9C0\uC6D0\uD558\uB294 \uC635\uC158\uC774\uC5D0\uC694.\n *\n * - `FINE`: \uC815\uD655\uD55C \uC704\uCE58\n * - `COARSE`: \uB300\uB7B5\uC801\uC778 \uC704\uCE58\n *\n * @see https://developer.android.com/codelabs/approximate-location\n */\n accessLocation?: \"FINE\" | \"COARSE\";\n /**\n * \uC704\uCE58\uAC00 \uC5C5\uB370\uC774\uD2B8\uB41C \uC2DC\uC810\uC758 \uC720\uB2C9\uC2A4 \uD0C0\uC784\uC2A4\uD0EC\uD504\uC608\uC694.\n */\n timestamp: number;\n /**\n * @description \uC704\uCE58 \uC815\uBCF4\uB97C \uB098\uD0C0\uB0B4\uB294 \uAC1D\uCCB4\uC608\uC694. \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 [LocationCoords](/react-native/reference/framework/Types/LocationCoords.html)\uC744 \uCC38\uACE0\uD574\uC8FC\uC138\uC694.\n */\n coords: LocationCoords;\n}\n/**\n * @public\n * @category \uC704\uCE58 \uC815\uBCF4\n * @name LocationCoords\n * @description \uC138\uBD80 \uC704\uCE58 \uC815\uBCF4\uB97C \uB098\uD0C0\uB0B4\uB294 \uAC1D\uCCB4\uC608\uC694.\n */\nexport interface LocationCoords {\n /**\n * \uC704\uB3C4\n */\n latitude: number;\n /**\n * \uACBD\uB3C4\n */\n longitude: number;\n /**\n * \uB192\uC774\n */\n altitude: number;\n /**\n * \uC704\uCE58 \uC815\uD655\uB3C4\n */\n accuracy: number;\n /**\n * \uACE0\uB3C4 \uC815\uD655\uB3C4\n */\n altitudeAccuracy: number;\n /**\n * \uBC29\uD5A5\n */\n heading: number;\n}\nexport interface GetCurrentLocationOptions {\n /**\n * \uC704\uCE58 \uC815\uBCF4\uB97C \uAC00\uC838\uC62C \uC815\uD655\uB3C4 \uC218\uC900\uC774\uC5D0\uC694.\n */\n accuracy: Accuracy;\n}\n/**\n * @public\n * @category \uC704\uCE58 \uC815\uBCF4\n * @name getCurrentLocation\n * @description \uB514\uBC14\uC774\uC2A4\uC758 \uD604\uC7AC \uC704\uCE58 \uC815\uBCF4\uB97C \uAC00\uC838\uC624\uB294 \uD568\uC218\uC608\uC694.\n * \uC704\uCE58 \uAE30\uBC18 \uC11C\uBE44\uC2A4\uB97C \uAD6C\uD604\uD560 \uB54C \uC0AC\uC6A9\uB418\uACE0, \uD55C \uBC88\uB9CC \uD638\uCD9C\uB418\uC5B4 \uD604\uC7AC \uC704\uCE58\uB97C \uC989\uC2DC \uBC18\uD658\uD574\uC694.\n * \uC608\uB97C \uB4E4\uC5B4 \uC9C0\uB3C4 \uC571\uC5D0\uC11C \uC0AC\uC6A9\uC790\uC758 \uD604\uC7AC \uC704\uCE58\uB97C \uD55C \uBC88\uB9CC \uAC00\uC838\uC62C \uB54C, \uB0A0\uC528 \uC571\uC5D0\uC11C \uC0AC\uC6A9\uC790\uC758 \uC704\uCE58\uB97C \uAE30\uBC18\uC73C\uB85C \uAE30\uC0C1 \uC815\uBCF4\uB97C \uC81C\uACF5\uD560 \uB54C, \uB9E4\uC7A5 \uCC3E\uAE30 \uAE30\uB2A5\uC5D0\uC11C \uC0AC\uC6A9\uC790\uC758 \uC704\uCE58\uB97C \uAE30\uC900\uC73C\uB85C \uAC00\uAE4C\uC6B4 \uB9E4\uC7A5\uC744 \uAC80\uC0C9\uD560 \uB54C \uC0AC\uC6A9\uD558\uBA74 \uC720\uC6A9\uD574\uC694.\n *\n * @param {GetCurrentLocationOptions} options \uC704\uCE58 \uC815\uBCF4\uB97C \uAC00\uC838\uC62C \uB54C \uC0AC\uC6A9\uD558\uB294 \uC635\uC158 \uAC1D\uCCB4\uC608\uC694.\n * @param {Accuracy} [options.accuracy] \uC704\uCE58 \uC815\uBCF4\uC758 \uC815\uD655\uB3C4 \uC218\uC900\uC774\uC5D0\uC694. \uC815\uD655\uB3C4\uB294 `Accuracy` \uD0C0\uC785\uC73C\uB85C \uC124\uC815\uB3FC\uC694.\n * @returns {Promise<Location>} \uB514\uBC14\uC774\uC2A4\uC758 \uC704\uCE58 \uC815\uBCF4\uAC00 \uB2F4\uAE34 \uAC1D\uCCB4\uB97C \uBC18\uD658\uD574\uC694. \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 [Location](/react-native/reference/framework/Types/Location.html)\uC744 \uCC38\uACE0\uD574\uC8FC\uC138\uC694.\n *\n * @example\n * ### \uB514\uBC14\uC774\uC2A4\uC758 \uD604\uC7AC \uC704\uCE58 \uC815\uBCF4 \uAC00\uC838\uC624\uAE30\n *\n * ```tsx\n * import React, { useState } from 'react';\n * import { View, Text, Button } from 'react-native';\n * import { getCurrentLocation } from '@apps-in-toss/framework';\n *\n * // \uD604\uC7AC \uC704\uCE58 \uC815\uBCF4\uB97C \uAC00\uC838\uC640 \uD654\uBA74\uC5D0 \uD45C\uC2DC\uD558\uB294 \uCEF4\uD3EC\uB10C\uD2B8\n * function CurrentPosition() {\n * const [position, setPosition] = useState(null);\n *\n * const handlePress = async () => {\n * try {\n * const response = await getCurrentLocation({ accuracy: Accuracy.Balanced });\n * setPosition(response);\n * } catch (error) {\n * console.error('\uC704\uCE58 \uC815\uBCF4\uB97C \uAC00\uC838\uC624\uB294 \uB370 \uC2E4\uD328\uD588\uC5B4\uC694:', error);\n * }\n * };\n *\n * return (\n * <View>\n * {position ? (\n * <Text>\uC704\uCE58: {position.coords.latitude}, {position.coords.longitude}</Text>\n * ) : (\n * <Text>\uC704\uCE58 \uC815\uBCF4\uB97C \uC544\uC9C1 \uAC00\uC838\uC624\uC9C0 \uC54A\uC558\uC5B4\uC694</Text>\n * )}\n * <Button title=\"\uD604\uC7AC \uC704\uCE58 \uC815\uBCF4 \uAC00\uC838\uC624\uAE30\" onPress={handlePress} />\n * </View>\n * );\n * }\n * ```\n */\nexport declare function getCurrentLocation(options: GetCurrentLocationOptions): Promise<Location$1>;\n\nexport {};\n"
54
+ },
55
+ {
56
+ identifier: "openCamera",
57
+ dts: "/**\n * \uC0AC\uC9C4 \uC870\uD68C \uACB0\uACFC\uB97C \uB098\uD0C0\uB0B4\uB294 \uD0C0\uC785\uC774\uC5D0\uC694.\n */\nexport interface ImageResponse {\n /** \uAC00\uC838\uC628 \uC0AC\uC9C4\uC758 \uACE0\uC720 ID\uC608\uC694. */\n id: string;\n /** \uC0AC\uC9C4\uC758 \uB370\uC774\uD130 URI\uC608\uC694. `base64` \uC635\uC158\uC774 `true`\uC778 \uACBD\uC6B0 Base64 \uBB38\uC790\uC5F4\uB85C \uBC18\uD658\uB3FC\uC694. */\n dataUri: string;\n}\nexport interface OpenCameraOptions {\n /**\n * \uC774\uBBF8\uC9C0\uB97C Base64 \uD615\uC2DD\uC73C\uB85C \uBC18\uD658\uD560\uC9C0 \uC5EC\uBD80\uB97C \uB098\uD0C0\uB0B4\uB294 \uBD88\uB9AC\uC5B8 \uAC12\uC774\uC5D0\uC694.\n *\n * \uAE30\uBCF8\uAC12: `false`.\n */\n base64?: boolean;\n /**\n * \uC774\uBBF8\uC9C0\uC758 \uCD5C\uB300 \uB108\uBE44\uB97C \uB098\uD0C0\uB0B4\uB294 \uC22B\uC790 \uAC12\uC774\uC5D0\uC694.\n *\n * \uAE30\uBCF8\uAC12: `1024`.\n */\n maxWidth?: number;\n}\n/**\n * @public\n * @category \uCE74\uBA54\uB77C\n * @name openCamera\n * @description \uCE74\uBA54\uB77C\uB97C \uC2E4\uD589\uD574\uC11C \uCD2C\uC601\uB41C \uC774\uBBF8\uC9C0\uB97C \uBC18\uD658\uD558\uB294 \uD568\uC218\uC608\uC694.\n * @param {OpenCameraOptions} options - \uCE74\uBA54\uB77C \uC2E4\uD589 \uC2DC \uC0AC\uC6A9\uB418\uB294 \uC635\uC158 \uAC1D\uCCB4\uC608\uC694.\n * @param {boolean} [options.base64=false] - \uC774\uBBF8\uC9C0\uB97C Base64 \uD615\uC2DD\uC73C\uB85C \uBC18\uD658\uD560\uC9C0 \uC5EC\uBD80\uB97C \uB098\uD0C0\uB0B4\uB294 \uBD88\uB9AC\uC5B8 \uAC12\uC774\uC5D0\uC694. \uAE30\uBCF8\uAC12\uC740 `false`\uC608\uC694. `true`\uB85C \uC124\uC815\uD558\uBA74 `dataUri` \uB300\uC2E0 Base64 \uC778\uCF54\uB529\uB41C \uBB38\uC790\uC5F4\uC744 \uBC18\uD658\uD574\uC694.\n * @param {number} [options.maxWidth=1024] - \uC774\uBBF8\uC9C0\uC758 \uCD5C\uB300 \uB108\uBE44\uB97C \uB098\uD0C0\uB0B4\uB294 \uC22B\uC790 \uAC12\uC774\uC5D0\uC694. \uAE30\uBCF8\uAC12\uC740 `1024`\uC608\uC694.\n * @returns {Promise<ImageResponse>}\n * \uCD2C\uC601\uB41C \uC774\uBBF8\uC9C0 \uC815\uBCF4\uB97C \uD3EC\uD568\uD55C \uAC1D\uCCB4\uB97C \uBC18\uD658\uD574\uC694. \uBC18\uD658 \uAC1D\uCCB4\uC758 \uAD6C\uC131\uC740 \uB2E4\uC74C\uACFC \uAC19\uC544\uC694:\n * - `id`: \uC774\uBBF8\uC9C0\uC758 \uACE0\uC720 \uC2DD\uBCC4\uC790\uC608\uC694.\n * - `dataUri`: \uC774\uBBF8\uC9C0 \uB370\uC774\uD130\uB97C \uD45C\uD604\uD558\uB294 \uB370\uC774\uD130 URI\uC608\uC694.\n *\n * @example\n * ### \uCE74\uBA54\uB77C \uC2E4\uD589 \uD6C4 \uCD2C\uC601\uB41C \uC0AC\uC9C4 \uAC00\uC838\uC624\uAE30\n *\n * ```tsx\n * import React, { useState } from 'react';\n * import { View, Text, Button, Image } from 'react-native';\n * import { openCamera } from '@apps-in-toss/framework';\n *\n * const base64 = true;\n *\n * // \uCE74\uBA54\uB77C\uB97C \uC2E4\uD589\uD558\uACE0 \uCD2C\uC601\uB41C \uC774\uBBF8\uC9C0\uB97C \uD654\uBA74\uC5D0 \uD45C\uC2DC\uD558\uB294 \uCEF4\uD3EC\uB10C\uD2B8\n * function Camera() {\n * const [image, setImage] = useState(null);\n *\n * const handlePress = async () => {\n * try {\n * const response = await openCamera({ base64 });\n * setImage(response);\n * } catch (error) {\n * console.error('\uC0AC\uC9C4\uC744 \uAC00\uC838\uC624\uB294 \uB370 \uC2E4\uD328\uD588\uC5B4\uC694:', error);\n * }\n * };\n *\n * // base64 \uD615\uC2DD\uC73C\uB85C \uBC18\uD658\uB41C \uC774\uBBF8\uC9C0\uB97C \uD45C\uC2DC\uD558\uB824\uBA74 \uB370\uC774\uD130 URL \uC2A4\uD0A4\uB9C8 Prefix\uB97C \uBD99\uC5EC\uC57C\uD574\uC694.\n * const imageUri = base64 ? 'data:image/jpeg;base64,' + image.dataUri : image.dataUri;\n *\n * return (\n * <View>\n * {image ? (\n * <Image source={{ uri: imageUri }} style={{ width: 200, height: 200 }} />\n * ) : (\n * <Text>\uC0AC\uC9C4\uC774 \uC5C6\uC5B4\uC694</Text>\n * )}\n * <Button title=\"\uC0AC\uC9C4 \uCD2C\uC601\uD558\uAE30\" onPress={handlePress} />\n * </View>\n * );\n * }\n * ```\n */\nexport declare function openCamera(options?: OpenCameraOptions): Promise<ImageResponse>;\n\nexport {};\n"
58
+ },
59
+ {
60
+ identifier: "appLogin",
61
+ dts: '/**\n * @public\n * @category \uB85C\uADF8\uC778\n * @name appLogin\n * @description \uD1A0\uC2A4 \uC778\uC99D\uC73C\uB85C \uB85C\uADF8\uC778\uD574\uC694. \uB85C\uADF8\uC778\uC774 \uC644\uB8CC\uB418\uBA74 \uB2E4\uC2DC \uD1A0\uC2A4 \uC571\uC73C\uB85C \uC774\uB3D9\uD574\uC694.\n * @example\n *\n * ### \uD1A0\uC2A4 \uC778\uC99D\uC744 \uD1B5\uD574 \uB85C\uADF8\uC778\uC744 \uD558\uB294 \uC608\uC81C\n *\n * ```tsx\n * import { Button } from \'react-native\';\n * import { appLogin } from \'@apps-in-toss/framework\';\n *\n * function Page() {\n * const handleLogin = async () => {\n * const { authorizationCode, referrer } = await appLogin();\n *\n * // \uD68D\uB4DD\uD55C \uC778\uAC00 \uCF54\uB4DC(`authorizationCode`)\uC640 `referrer`\uB97C \uC11C\uBC84\uB85C \uC804\uB2EC\uD574\uC694.\n * }\n *\n * return <Button title="\uB85C\uADF8\uC778" onPress={handleLogin} />;\n * }\n * ```\n */\nexport declare function appLogin(): Promise<{\n authorizationCode: string;\n referrer: "DEFAULT" | "SANDBOX";\n}>;\n\nexport {};\n'
62
+ },
63
+ {
64
+ identifier: "eventLog",
65
+ dts: `export type Primitive = string | number | boolean | null | undefined | symbol;
66
+ export interface EventLogParams {
67
+ log_name: string;
68
+ log_type: "debug" | "info" | "warn" | "error" | "screen" | "impression" | "click";
69
+ params: Record<string, Primitive>;
70
+ }
71
+ /**
72
+ * @category \uB85C\uAE45
73
+ * @kind function
74
+ * @name eventLog
75
+ * @description
76
+ * \uC774\uBCA4\uD2B8 \uB85C\uADF8\uB97C \uAE30\uB85D\uD558\uB294 \uD568\uC218\uC608\uC694.
77
+ *
78
+ * \uC774 \uD568\uC218\uB294 \uC571 \uB0B4\uC5D0\uC11C \uBC1C\uC0DD\uD558\uB294 \uB2E4\uC591\uD55C \uC774\uBCA4\uD2B8\uB97C \uB85C\uAE45\uD558\uB294 \uB370 \uC0AC\uC6A9\uB3FC\uC694. \uB514\uBC84\uAE45, \uC815\uBCF4 \uC81C\uACF5, \uACBD\uACE0, \uC624\uB958 \uB4F1 \uB2E4\uC591\uD55C \uC720\uD615\uC758 \uB85C\uADF8\uB97C \uAE30\uB85D\uD560 \uC218 \uC788\uC5B4\uC694. \uC0CC\uB4DC\uBC15\uC2A4 \uD658\uACBD\uC5D0\uC11C\uB294 \uCF58\uC194\uC5D0 \uB85C\uADF8\uAC00 \uCD9C\uB825\uB418\uACE0, \uC2E4\uC81C \uD658\uACBD\uC5D0\uC11C\uB294 \uB85C\uADF8 \uC2DC\uC2A4\uD15C\uC5D0 \uAE30\uB85D\uB3FC\uC694.
79
+ *
80
+ * @param {Object} params \uB85C\uADF8 \uAE30\uB85D\uC5D0 \uD544\uC694\uD55C \uB9E4\uAC1C\uBCC0\uC218 \uAC1D\uCCB4\uC608\uC694.
81
+ * @param {string} params.log_name \uB85C\uADF8\uC758 \uC774\uB984\uC774\uC5D0\uC694.
82
+ * @param {'debug' | 'info' | 'warn' | 'error' | 'screen' | 'impression' | 'click'} params.log_type \uB85C\uADF8\uC758 \uC720\uD615\uC774\uC5D0\uC694.
83
+ * @param {Record<string, Primitive>} params.params \uB85C\uADF8\uC5D0 \uD3EC\uD568\uD560 \uCD94\uAC00 \uB9E4\uAC1C\uBCC0\uC218 \uAC1D\uCCB4\uC608\uC694.
84
+ *
85
+ * @returns {Promise<void>} \uB85C\uADF8 \uAE30\uB85D\uC774 \uC644\uB8CC\uB418\uBA74 \uD574\uACB0\uB418\uB294 Promise\uC608\uC694.
86
+ *
87
+ * @example
88
+ * ### \uC774\uBCA4\uD2B8 \uB85C\uADF8 \uAE30\uB85D\uD558\uAE30
89
+ *
90
+ * \`\`\`tsx
91
+ * import { eventLog } from '@apps-in-toss/framework';
92
+ *
93
+ * function logUserAction() {
94
+ * eventLog({
95
+ * log_name: 'user_action',
96
+ * log_type: 'info',
97
+ * params: {
98
+ * action: 'button_click',
99
+ * screen: 'main',
100
+ * userId: 12345
101
+ * }
102
+ * });
103
+ * }
104
+ * \`\`\`
105
+ */
106
+ export declare function eventLog(params: EventLogParams): Promise<void>;
107
+
108
+ export {};
109
+ `
110
+ },
111
+ {
112
+ identifier: "getTossShareLink",
113
+ dts: "/**\n * @public\n * @category \uACF5\uC720\n * @kind function\n * @name getTossShareLink\n * @description\n * `getTossShareLink` \uD568\uC218\uB294 \uC0AC\uC6A9\uC790\uAC00 \uC9C0\uC815\uD55C \uACBD\uB85C\uB97C \uD1A0\uC2A4 \uC571\uC5D0\uC11C \uC5F4 \uC218 \uC788\uB294 \uACF5\uC720 \uB9C1\uD06C\uB97C \uBC18\uD658\uD574\uC694.\n * \uC774 \uB9C1\uD06C\uB97C \uB2E4\uB978 \uC0AC\uB78C\uACFC \uACF5\uC720\uD558\uBA74 \uD1A0\uC2A4 \uC571\uC774 \uC2E4\uD589\uB418\uBA74\uC11C \uC9C0\uC815\uD55C \uACBD\uB85C\uB85C \uC9C4\uC785\uD574\uC694. \uD1A0\uC2A4\uC571\uC774 \uC5C6\uB294 \uC0AC\uB78C\uC740 iOS \uC77C \uB54C\uB294 \uC571\uC2A4\uD1A0\uC5B4\uB85C \uC774\uB3D9\uD558\uACE0, Android \uC77C \uB54C\uB294 \uD50C\uB808\uC774\uC2A4\uD1A0\uC5B4\uB85C \uC774\uB3D9\uD574\uC694.\n *\n * \uACBD\uB85C\uB294 \uD1A0\uC2A4 \uC571 \uB0B4\uBD80 \uD2B9\uC815 \uD654\uBA74\uC744 \uB098\uD0C0\uB0B4\uB294 \uB525\uB9C1\uD06C(deep link) \uD615\uC2DD\uC774\uC5B4\uC57C \uD574\uC694.\n * \uC608\uB97C \uB4E4\uC5B4 `intoss://<\uC571 \uC774\uB984>`\uC774\uB098 `intoss://<\uC571 \uC774\uB984>/about?name=test`\uCC98\uB7FC \uC791\uC131\uD574\uC694.\n *\n * \uC774 \uD568\uC218\uB97C \uC0AC\uC6A9\uD558\uBA74 `deep_link_value`\uB97C \uD3EC\uD568\uD55C \uC644\uC131\uB41C \uACF5\uC720 \uB9C1\uD06C\uB97C \uB9CC\uB4E4 \uC218 \uC788\uC5B4\uC694.\n *\n * @param path - \uB525\uB9C1\uD06C\uB85C \uC5F4\uACE0 \uC2F6\uC740 \uACBD\uB85C\uC608\uC694. `intoss://`\uB85C \uC2DC\uC791\uD558\uB294 \uBB38\uC790\uC5F4\uC774\uC5B4\uC57C \uD574\uC694.\n * @returns {Promise<string>} `deep_link_value`\uAC00 \uD3EC\uD568\uB41C \uD1A0\uC2A4 \uACF5\uC720 \uB9C1\uD06C\uB97C \uBC18\uD658\uD574\uC694.\n *\n * @example\n * ```tsx\n * import { share } from '@granite-js/react-native';\n * import { getTossShareLink } from '@apps-in-toss/framework';\n *\n * // '/' \uACBD\uB85C\uB97C \uB525\uB9C1\uD06C\uB85C \uD3EC\uD568\uD55C \uD1A0\uC2A4 \uACF5\uC720 \uB9C1\uD06C\uB97C \uC0DD\uC131\uD574\uC694.\n * const tossLink = await getTossShareLink('intoss://my-app');\n *\n * // \uC0DD\uC131\uD55C \uB9C1\uD06C\uB97C \uBA54\uC2DC\uC9C0\uB85C \uACF5\uC720\uD574\uC694.\n * await share({ message: tossLink });\n * ```\n */\nexport declare function getTossShareLink(path: string): Promise<string>;\n\nexport {};\n"
114
+ },
115
+ {
116
+ identifier: "setDeviceOrientation",
117
+ dts: "/**\n * @public\n * @category \uD654\uBA74 \uC81C\uC5B4\n * @kind function\n * @name setDeviceOrientation\n * @description\n * `setDeviceOrientation` \uD568\uC218\uB294 \uAE30\uAE30\uC758 \uD654\uBA74 \uBC29\uD5A5\uC744 \uC124\uC815\uD558\uB294 \uAE30\uB2A5\uC744 \uC81C\uACF5\uD574\uC694.\n * \uC774 \uAE30\uB2A5\uC740 \uD2B9\uC815 \uD654\uBA74\uC5D0\uC11C \uAC00\uB85C \uBAA8\uB4DC\uB098 \uC138\uB85C \uBAA8\uB4DC\uB97C \uAC15\uC81C\uB85C \uC9C0\uC815\uD574\uC57C \uD560 \uB54C \uC720\uC6A9\uD574\uC694.\n *\n * `type` \uC635\uC158\uC744 \uD1B5\uD574 \uC6D0\uD558\uB294 \uD654\uBA74 \uBC29\uD5A5\uC744 \uC9C0\uC815\uD560 \uC218 \uC788\uC5B4\uC694. \uD2B9\uD788, \uC774 \uD568\uC218\uB294 \uC571 \uC804\uCCB4\uC5D0 \uC601\uD5A5\uC744 \uBBF8\uCE58\uBBC0\uB85C\n * \uD2B9\uC815 \uD654\uBA74\uC5D0\uC11C\uB9CC \uC0AC\uC6A9\uD558\uB824\uBA74 \uD654\uBA74\uC744 \uBC97\uC5B4\uB0A0 \uB54C \uC774\uC804 \uC0C1\uD0DC\uB85C \uBCF5\uAD6C\uD558\uB294 \uCD94\uAC00 \uC791\uC5C5\uC774 \uD544\uC694\uD574\uC694.\n *\n * \uC608\uB97C \uB4E4\uC5B4, \uB3D9\uC601\uC0C1 \uAC10\uC0C1 \uD654\uBA74\uC5D0\uC11C\uB294 \uAC00\uB85C \uBAA8\uB4DC\uB97C \uAC15\uC81C\uD558\uACE0, \uD654\uBA74\uC744 \uB5A0\uB0A0 \uB54C \uC124\uC815\uC744 \uBCF5\uAD6C\uD574\uC11C\n * \uB2E4\uB978 \uD654\uBA74\uB4E4\uC758 \uBC29\uD5A5 \uC124\uC815\uC5D0 \uC601\uD5A5\uC744 \uC8FC\uC9C0 \uC54A\uB3C4\uB85D \uD560 \uC218 \uC788\uC5B4\uC694.\n *\n * @param {object} options \uD654\uBA74 \uBC29\uD5A5 \uC124\uC815 \uAC12\uC774\uC5D0\uC694.\n * @param {string} options.type \uD654\uBA74 \uBC29\uD5A5\uC744 \uC9C0\uC815\uD558\uB294 \uC635\uC158\uC774\uC5D0\uC694.\n * 'portrait' | 'landscape' \uC911 \uD558\uB098\uB97C \uC120\uD0DD\uD560 \uC218 \uC788\uC5B4\uC694.\n *\n * @returns {Promise<void>} \uD654\uBA74 \uBC29\uD5A5 \uC124\uC815\uC774 \uC644\uB8CC\uB418\uBA74 \uD574\uACB0\uB418\uB294 Promise\uB97C \uBC18\uD658\uD574\uC694.\n *\n * @example\n * ### \uD654\uBA74 \uBC29\uD5A5 \uC124\uC815\uD558\uAE30\n *\n * ```tsx\n * import { Button } from 'react-native';\n * import { setDeviceOrientation } from '@apps-in-toss/framework';\n *\n * function SetDeviceOrientation() {\n * return (\n * <Button\n * title=\"\uAC00\uB85C \uBAA8\uB4DC\uB85C \uBCC0\uACBD\"\n * onPress={() => {\n * setDeviceOrientation({ type: 'landscape' });\n * }}\n * />\n * );\n * }\n * ```\n *\n * ### \uD654\uBA74 \uBC29\uD5A5 \uBCF5\uAD6C\uD558\uAE30\n * \uD2B9\uC815 \uD654\uBA74\uC744 \uBC97\uC5B4\uB0A0 \uB54C \uC774\uC804 \uC0C1\uD0DC\uB85C \uBCF5\uAD6C\uD558\uB824\uBA74 \uB2E4\uC74C\uACFC \uAC19\uC774 `useEffect`\uB97C \uC0AC\uC6A9\uD558\uC138\uC694.\n *\n * ```tsx\n * import { useEffect } from 'react';\n * import { setDeviceOrientation } from '@apps-in-toss/framework';\n *\n * function VideoScreen() {\n * useEffect(() => {\n * setDeviceOrientation({ type: 'landscape' });\n *\n * return () => {\n * setDeviceOrientation({ type: 'portrait' }); // \uC124\uC815\uC744 \uC774\uC804 \uC0C1\uD0DC\uB85C \uBCF5\uAD6C\uD574\uC694.\n * };\n * }, []);\n *\n * return <Text>\uB3D9\uC601\uC0C1\uC744 \uAC10\uC0C1\uD558\uB294 \uD654\uBA74</Text>;\n * }\n * ```\n */\nexport declare function setDeviceOrientation(options: {\n type: \"portrait\" | \"landscape\";\n}): Promise<void>;\n\nexport {};\n"
118
+ },
119
+ {
120
+ identifier: "checkoutPayment",
121
+ dts: "/**\n * @public\n * @category \uD1A0\uC2A4\uD398\uC774\n * @name CheckoutPaymentOptions\n * @description \uD1A0\uC2A4\uD398\uC774 \uACB0\uC81C\uCC3D\uC744 \uB744\uC6B8 \uB54C \uD544\uC694\uD55C \uC635\uC158\uC774\uC5D0\uC694.\n * @property {string} payToken \uACB0\uC81C \uD1A0\uD070\uC774\uC5D0\uC694.\n */\nexport interface CheckoutPaymentOptions {\n /**\n * \uACB0\uC81C \uD1A0\uD070\uC774\uC5D0\uC694.\n */\n payToken: string;\n}\n/**\n * @public\n * @category \uD1A0\uC2A4\uD398\uC774\n * @name CheckoutPaymentResult\n * @description \uD1A0\uC2A4\uD398\uC774 \uACB0\uC81C\uCC3D\uC5D0\uC11C \uC0AC\uC6A9\uC790\uAC00 \uC778\uC99D\uC5D0 \uC131\uACF5\uD588\uB294\uC9C0 \uC5EC\uBD80\uC608\uC694.\n * @property {boolean} success \uC778\uC99D\uC774 \uC131\uACF5\uD588\uB294\uC9C0 \uC5EC\uBD80\uC608\uC694.\n * @property {string} [reason] \uC778\uC99D\uC774 \uC2E4\uD328\uD588\uC744 \uACBD\uC6B0\uC758 \uC774\uC720\uC608\uC694.\n */\nexport interface CheckoutPaymentResult {\n /**\n * \uC778\uC99D\uC774 \uC131\uACF5\uD588\uB294\uC9C0 \uC5EC\uBD80\uC608\uC694.\n */\n success: boolean;\n /**\n * \uC778\uC99D\uC774 \uC2E4\uD328\uD588\uC744 \uACBD\uC6B0\uC758 \uC774\uC720\uC608\uC694.\n */\n reason?: string;\n}\n/**\n * @public\n * @category \uD1A0\uC2A4\uD398\uC774\n * @name checkoutPayment\n * @description \uD1A0\uC2A4\uD398\uC774 \uACB0\uC81C\uCC3D\uC744 \uB744\uC6B0\uACE0, \uC0AC\uC6A9\uC790 \uC778\uC99D\uC744 \uC218\uD589\uD574\uC694. \uC778\uC99D\uC774 \uC644\uB8CC\uB418\uBA74 \uC131\uACF5 \uC5EC\uBD80\uB97C \uBC18\uD658\uD574\uC694.\n *\n * \uC774 \uD568\uC218\uB294 \uACB0\uC81C\uCC3D\uC744 \uD1B5\uD574 \uC0AC\uC6A9\uC790 \uC778\uC99D\uB9CC \uD574\uC694. \uC2E4\uC81C \uACB0\uC81C \uCC98\uB9AC\uB294 \uC778\uC99D \uC131\uACF5 \uD6C4 \uC11C\uBC84\uC5D0\uC11C \uBCC4\uB3C4\uB85C \uD574\uC57C \uD574\uC694.\n *\n * @param {CheckoutPaymentOptions} options \uACB0\uC81C\uCC3D\uC744 \uB744\uC6B8 \uB54C \uD544\uC694\uD55C \uC635\uC158\uC774\uC5D0\uC694.\n * @returns {Promise<CheckoutPaymentResult>} \uC778\uC99D \uC131\uACF5 \uC5EC\uBD80\uB97C \uD3EC\uD568\uD55C \uACB0\uACFC\uB97C \uBC18\uD658\uD574\uC694.\n *\n * @example\n *\n * ### \uD1A0\uC2A4\uD398\uC774 \uACB0\uC81C\uCC3D \uB744\uC6B0\uACE0 \uC778\uC99D \uCC98\uB9AC\uD558\uAE30\n *\n * ```tsx\n * import { TossPay } from '@apps-in-toss/framework';\n *\n * async function handlePayment() {\n * try {\n * // \uC2E4\uC81C \uAD6C\uD604 \uC2DC \uACB0\uC81C \uC0DD\uC131 \uC5ED\uD560\uC744 \uD558\uB294 API \uC5D4\uB4DC\uD3EC\uC778\uD2B8\uB85C \uB300\uCCB4\uD574\uC8FC\uC138\uC694.\n * const { payToken } = await fetch('/my-api/payment/create').then(res => res.json());\n *\n * const { success, reason } = await TossPay.checkoutPayment({ payToken });\n *\n * if (success) {\n * // \uC2E4\uC81C \uAD6C\uD604 \uC2DC \uACB0\uC81C\uB97C \uC2E4\uD589\uD558\uB294 API \uC5D4\uB4DC\uD3EC\uC778\uD2B8\uB85C \uB300\uCCB4\uD574\uC8FC\uC138\uC694.\n * await fetch('/my-api/payment/execute', {\n * method: 'POST',\n * body: JSON.stringify({ payToken }),\n * headers: { 'Content-Type': 'application/json' },\n * });\n * } else {\n * console.log('\uC778\uC99D \uC2E4\uD328:', reason);\n * }\n * } catch (error) {\n * console.error('\uACB0\uC81C \uC778\uC99D \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC5B4\uC694:', error);\n * }\n * }\n * ```\n */\nexport declare function checkoutPayment(options: CheckoutPaymentOptions): Promise<CheckoutPaymentResult>;\n\nexport {};\n"
122
+ },
123
+ {
124
+ identifier: "saveBase64Data",
125
+ dts: "export interface SaveBase64DataParams {\n data: string;\n fileName: string;\n mimeType: string;\n}\n/**\n * @public\n * @category \uB370\uC774\uD130\n * @name saveBase64Data\n * @description \uBB38\uC790\uC5F4\uB85C \uC778\uCF54\uB529\uB41C Base64 \uB370\uC774\uD130\uB97C \uC9C0\uC815\uD55C \uD30C\uC77C \uC774\uB984\uACFC MIME \uD0C0\uC785\uC73C\uB85C \uC0AC\uC6A9\uC790 \uAE30\uAE30\uC5D0 \uC800\uC7A5\uD574\uC694. \uC774\uBBF8\uC9C0, \uD14D\uC2A4\uD2B8, PDF \uB4F1 \uB2E4\uC591\uD55C \uD615\uC2DD\uC758 \uB370\uC774\uD130\uB97C \uC800\uC7A5\uD560 \uC218 \uC788\uC5B4\uC694.\n * @param {SaveBase64DataParams} params - \uC800\uC7A5\uD560 \uB370\uC774\uD130\uC640 \uD30C\uC77C \uC815\uBCF4\uB97C \uB2F4\uC740 \uAC1D\uCCB4\uC608\uC694.\n * @param {string} params.data - Base64 \uD615\uC2DD\uC73C\uB85C \uC778\uCF54\uB529\uB41C \uB370\uC774\uD130 \uBB38\uC790\uC5F4\uC774\uC5D0\uC694.\n * @param {string} params.fileName - \uC800\uC7A5\uD560 \uD30C\uC77C \uC774\uB984\uC774\uC5D0\uC694. \uD655\uC7A5\uC790\uB3C4 \uAC19\uC774 \uBD99\uC5EC\uC918\uC57C\uD574\uC694. \uC608\uB97C \uB4E4\uC5B4, 'example.png'\uB85C \uC800\uC7A5\uD560 \uC218 \uC788\uC5B4\uC694.\n * @param {string} params.mimeType - \uC800\uC7A5\uD560 \uD30C\uC77C\uC758 MIME \uD0C0\uC785\uC774\uC5D0\uC694. \uC608\uB97C \uB4E4\uC5B4 'image/png' \uB85C \uC9C0\uC815\uD558\uBA74 \uC774\uBBF8\uC9C0, 'application/pdf'\uB294 PDF \uD30C\uC77C\uC774\uC5D0\uC694. \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 [MIME \uBB38\uC11C](https://developer.mozilla.org/ko/docs/Web/HTTP/Guides/MIME_types)\uB97C \uCC38\uACE0\uD574\uC8FC\uC138\uC694.\n *\n * @example\n * ### Base64 \uC774\uBBF8\uC9C0 \uB370\uC774\uD130\uB97C \uC0AC\uC6A9\uC790 \uAE30\uAE30\uC5D0 \uC800\uC7A5\uD558\uAE30\n *\n * ```tsx\n * import { Button } from 'react-native';\n * import { saveBase64Data } from '@apps-in-toss/framework';\n *\n * // '\uC800\uC7A5' \uBC84\uD2BC\uC744 \uB204\uB974\uBA74 \uC774\uBBF8\uC9C0\uAC00 \uC0AC\uC6A9\uC790 \uAE30\uAE30\uC5D0 \uC800\uC7A5\uB3FC\uC694.\n * function SaveButton() {\n * const handleSave = async () => {\n * try {\n * await saveBase64Data({\n * data: 'iVBORw0KGgo...',\n * fileName: 'some-photo.png',\n * mimeType: 'image/png',\n * });\n * } catch (error) {\n * console.error('\uB370\uC774\uD130 \uC800\uC7A5\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:', error);\n * }\n * };\n *\n * return <Button title=\"\uC800\uC7A5\" onPress={handleSave} />;\n * }\n * ```\n */\nexport declare function saveBase64Data(params: SaveBase64DataParams): Promise<void>;\n\nexport {};\n"
126
+ },
127
+ {
128
+ identifier: "getLocale",
129
+ dts: "/**\n * @public\n * @category \uC5B8\uC5B4\n * @kind function\n * @name getLocale\n * @description\n * \uC0AC\uC6A9\uC790\uC758 \uB85C\uCF00\uC77C(locale) \uC815\uBCF4\uB97C \uBC18\uD658\uD574\uC694. \uB124\uC774\uD2F0\uBE0C \uBAA8\uB4C8\uC5D0\uC11C \uB85C\uCF00\uC77C \uC815\uBCF4\uB97C \uAC00\uC838\uC62C \uC218 \uC5C6\uC744 \uB54C\uB294 \uAE30\uBCF8\uAC12\uC73C\uB85C 'ko-KR'\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4. \uC571\uC758 \uD604\uC9C0\uD654 \uBC0F \uC5B8\uC5B4 \uC124\uC815\uACFC \uAD00\uB828\uB41C \uAE30\uB2A5\uC744 \uAD6C\uD604\uD560 \uB54C \uC0AC\uC6A9\uD558\uC138\uC694.\n *\n * @returns {string} \uC0AC\uC6A9\uC790\uC758 \uB85C\uCF00\uC77C \uC815\uBCF4\uB97C \uBC18\uD658\uD574\uC694.\n *\n * @example\n * ### \uD604\uC7AC \uC0AC\uC6A9\uC790\uC758 \uB85C\uCF00\uC77C \uC815\uBCF4 \uAC00\uC838\uC624\uAE30\n *\n * ```tsx\n * import { getLocale } from 'react-native-bedrock';\n * import { Text } from 'react-native';\n *\n * function MyPage() {\n * const locale = getLocale();\n *\n * return (\n * <Text>\uC0AC\uC6A9\uC790\uC758 \uB85C\uCF00\uC77C \uC815\uBCF4: {locale}</Text>\n * )\n * }\n *\n * ```\n */\nexport declare function getLocale(): string;\n\nexport {};\n"
130
+ },
131
+ {
132
+ identifier: "getSchemeUri",
133
+ dts: "/**\n * @public\n * @name getSchemeUri\n * @category \uD658\uACBD \uD655\uC778\n * @kind function\n * @description \uCC98\uC74C\uC5D0 \uD654\uBA74\uC5D0 \uC9C4\uC785\uD55C \uC2A4\uD0B4 \uAC12\uC774\uC5D0\uC694. \uD398\uC774\uC9C0 \uC774\uB3D9\uC73C\uB85C \uC778\uD55C URI \uBCC0\uACBD\uC740 \uBC18\uC601\uB418\uC9C0 \uC54A\uC544\uC694.\n * @returns {string} \uCC98\uC74C\uC5D0 \uD654\uBA74\uC5D0 \uC9C4\uC785\uD55C \uC2A4\uD0B4 \uAC12\uC744 \uBC18\uD658\uD574\uC694.\n *\n * @example\n * ### \uCC98\uC74C \uC9C4\uC785\uD55C \uC2A4\uD0B4 \uAC12 \uAC00\uC838\uC624\uAE30\n *\n * ```tsx\n * import { getSchemeUri } from 'react-native-bedrock';\n * import { Text } from 'react-native';\n *\n * function MyPage() {\n * const schemeUri = getSchemeUri();\n *\n * return <Text>\uCC98\uC74C\uC5D0 \uD654\uBA74\uC5D0 \uC9C4\uC785\uD55C \uC2A4\uD0B4 \uAC12: {schemeUri}</Text>\n * }\n * ```\n */\nexport declare function getSchemeUri(): string;\n\nexport {};\n"
134
+ },
135
+ {
136
+ identifier: "getPlatformOS",
137
+ dts: "/**\n * @public\n * @kind function\n * @category \uD658\uACBD \uD655\uC778\n *\n * @name getPlatformOS\n * @signature\n * ```typescript\n * function getPlatformOS(): 'ios' | 'android';\n * ```\n *\n * @description\n * \uD604\uC7AC \uC2E4\uD589 \uC911\uC778 \uD50C\uB7AB\uD3FC\uC744 \uD655\uC778\uD558\uB294 \uD568\uC218\uC608\uC694.\n * \uC774 \uD568\uC218\uB294 `react-native`\uC758 [`Platform.OS`](https://reactnative.dev/docs/0.72/platform#os) \uAC12\uC744 \uAE30\uBC18\uC73C\uB85C \uB3D9\uC791\uD558\uBA70, `ios` \uB610\uB294 `android` \uC911 \uD558\uB098\uC758 \uBB38\uC790\uC5F4\uC744 \uBC18\uD658\uD574\uC694.\n *\n * @returns {'ios' | 'android'} \uD604\uC7AC \uC2E4\uD589 \uC911\uC778 \uD50C\uB7AB\uD3FC\n *\n * @example\n *\n * ### \uD604\uC7AC \uC2E4\uD589\uC911\uC778 OS \uD50C\uB7AB\uD3FC \uD655\uC778\uD558\uAE30\n *\n * ```tsx\n * import { getPlatformOS } from 'react-native-bedrock';\n * import { Text } 'react-native';\n *\n * function Page() {\n * const platform = getPlatformOS();\n *\n * return <Text>\uD604\uC7AC \uD50C\uB7AB\uD3FC: {platform}</Text>;\n * }\n * ```\n */\nexport declare function getPlatformOS(): \"ios\" | \"android\";\n\nexport {};\n"
138
+ },
139
+ {
140
+ identifier: "getOperationalEnvironment",
141
+ dts: "/**\n * @public\n * @category \uD658\uACBD \uD655\uC778\n * @kind function\n * @name getOperationalEnvironment\n * @description\n * \uD604\uC7AC \uC2E4\uD589 \uC911\uC778 \uC571\uC758 \uC6B4\uC601 \uD658\uACBD\uC744 \uD655\uC778\uD574\uC694.\n * \uD1A0\uC2A4 \uC571\uC5D0\uC11C \uC2E4\uD589 \uC911\uC774\uB77C\uBA74 `'toss'`, \uC0CC\uB4DC\uBC15\uC2A4 \uD658\uACBD\uC5D0\uC11C \uC2E4\uD589 \uC911\uC774\uB77C\uBA74 `'sandbox'`\uB97C \uBC18\uD658\uD574\uC694.\n *\n * \uC6B4\uC601 \uD658\uACBD\uC740 \uC571\uC774 \uC2E4\uD589\uB418\uB294 \uCEE8\uD14D\uC2A4\uD2B8\uB97C \uC758\uBBF8\uD558\uBA70, \uD2B9\uC815 \uAE30\uB2A5\uC758 \uC0AC\uC6A9 \uAC00\uB2A5 \uC5EC\uBD80\uB97C \uD310\uB2E8\uD558\uB294 \uB370 \uD65C\uC6A9\uD560 \uC218 \uC788\uC5B4\uC694.\n *\n * @returns {'toss' | 'sandbox'}\n * \uD604\uC7AC \uC6B4\uC601 \uD658\uACBD\uC744 \uB098\uD0C0\uB0B4\uB294 \uBB38\uC790\uC5F4\uC774\uC5D0\uC694.\n * - `'toss'`: \uD1A0\uC2A4 \uC571\uC5D0\uC11C \uC2E4\uD589 \uC911\uC774\uC5D0\uC694.\n * - `'sandbox'`: \uC0CC\uB4DC\uBC15\uC2A4 \uD658\uACBD\uC5D0\uC11C \uC2E4\uD589 \uC911\uC774\uC5D0\uC694.\n *\n * @example\n * ### \uD604\uC7AC \uC6B4\uC601 \uD658\uACBD \uD655\uC778\uD558\uAE30\n *\n * ```tsx\n * import { getOperationalEnvironment } from '@apps-in-toss/framework';\n * import { Text } from 'react-native';\n *\n * function EnvironmentInfo() {\n * const environment = getOperationalEnvironment();\n *\n * return (\n * <Text>\uD604\uC7AC \uC6B4\uC601 \uD658\uACBD: {environment}</Text>\n * );\n * }\n * ```\n */\nexport declare function getOperationalEnvironment(): \"toss\" | \"sandbox\";\n\nexport {};\n"
142
+ },
143
+ {
144
+ identifier: "getTossAppVersion",
145
+ dts: "/**\n * @public\n * @category \uD658\uACBD \uD655\uC778\n * @name getTossAppVersion\n * @description \uD1A0\uC2A4 \uC571 \uBC84\uC804\uC744 \uAC00\uC838\uC635\uB2C8\uB2E4. \uC608\uB97C \uB4E4\uC5B4, `5.206.0`\uACFC \uAC19\uC740 \uD615\uD0DC\uB85C \uBC18\uD658\uB3FC\uC694. \uD1A0\uC2A4 \uC571 \uBC84\uC804\uC744 \uB85C\uADF8\uB85C \uB0A8\uAE30\uAC70\uB098, \uD2B9\uC815 \uAE30\uB2A5\uC774 \uD2B9\uC815 \uBC84\uC804 \uC774\uC0C1\uC5D0\uC11C\uB9CC \uC2E4\uD589\uB420 \uB54C \uC0AC\uC6A9\uB3FC\uC694.\n * @signature\n * ```typescript\n * function getTossAppVersion(): string\n * ```\n *\n * @returns {string} \uD1A0\uC2A4 \uC571 \uBC84\uC804\n *\n * @example\n *\n *\n * ### \uD1A0\uC2A4 \uC571 \uBC84\uC804 \uD655\uC778\uD558\uAE30\n *\n * ```tsx\n * import { getTossAppVersion } from '@apps-in-toss/framework';\n * import { Text } from 'react-native';\n *\n * export function TossAppVersionPage() {\n * return (\n * <Text>{getTossAppVersion()}</Text>\n * )\n * }\n * ```\n */\nexport declare function getTossAppVersion(): string;\n\nexport {};\n"
146
+ },
147
+ {
148
+ identifier: "getDeviceId",
149
+ dts: "/**\n * @public\n * @category \uD658\uACBD \uD655\uC778\n * @kind function\n * @name getDeviceId\n * @description\n * \uC0AC\uC6A9 \uC911\uC778 \uAE30\uAE30\uC758 \uACE0\uC720 \uC2DD\uBCC4\uC790\uB97C \uBB38\uC790\uC5F4\uB85C \uBC18\uD658\uD574\uC694.\n *\n * \uC774 \uD568\uC218\uB294 \uD604\uC7AC \uC0AC\uC6A9 \uC911\uC778 \uAE30\uAE30\uC758 \uACE0\uC720 \uC2DD\uBCC4\uC790\uB97C \uBB38\uC790\uC5F4\uB85C \uBC18\uD658\uD574\uC694. \uAE30\uAE30\uBCC4\uB85C \uC124\uC815\uC774\uB098 \uB370\uC774\uD130\uB97C \uC800\uC7A5\uD558\uAC70\uB098 \uC0AC\uC6A9\uC790\uC758 \uAE30\uAE30\uB97C \uC2DD\uBCC4\uD574\uC11C \uB85C\uADF8\uB97C \uAE30\uB85D\uD558\uACE0 \uBD84\uC11D\uD558\uB294 \uB370 \uC0AC\uC6A9\uD560 \uC218 \uC788\uC5B4\uC694. \uAC19\uC740 \uC0AC\uC6A9\uC790\uC758 \uC5EC\uB7EC \uAE30\uAE30\uB97C \uAD6C\uBD84\uD558\uB294 \uB370\uB3C4 \uC720\uC6A9\uD574\uC694.\n *\n * @returns {string} \uAE30\uAE30\uC758 \uACE0\uC720 \uC2DD\uBCC4\uC790\uB97C \uB098\uD0C0\uB0B4\uB294 \uBB38\uC790\uC5F4\uC774\uC5D0\uC694.\n *\n * @example\n * ### \uAE30\uAE30 \uACE0\uC720 \uC2DD\uBCC4\uC790 \uAC00\uC838\uC624\uAE30\n *\n * ```tsx\n * import { getDeviceId } from '@apps-in-toss/framework';\n * import { Text } from 'react-native';\n *\n * function MyPage() {\n * const id = getDeviceId();\n *\n * return (\n * <Text>\uC0AC\uC6A9\uC790\uC758 \uAE30\uAE30 \uACE0\uC720 \uC2DD\uBCC4\uC790: {id}</Text>\n * );\n * }\n * ```\n */\nexport declare function getDeviceId(): string;\n\nexport {};\n"
150
+ },
151
+ {
152
+ identifier: "startUpdateLocation",
153
+ dts: "import { EmitterSubscription } from 'react-native';\n\nexport interface EventEmitterSchema<K extends string, P extends unknown[]> {\n name: K;\n params: P;\n}\ndeclare enum Accuracy {\n /**\n * \uC624\uCC28\uBC94\uC704 3KM \uC774\uB0B4\n */\n Lowest = 1,\n /**\n * \uC624\uCC28\uBC94\uC704 1KM \uC774\uB0B4\n */\n Low = 2,\n /**\n * \uC624\uCC28\uBC94\uC704 \uBA87 \uBC31\uBBF8\uD130 \uC774\uB0B4\n */\n Balanced = 3,\n /**\n * \uC624\uCC28\uBC94\uC704 10M \uC774\uB0B4\n */\n High = 4,\n /**\n * \uAC00\uC7A5 \uB192\uC740 \uC815\uD655\uB3C4\n */\n Highest = 5,\n /**\n * \uB124\uBE44\uAC8C\uC774\uC158\uC744 \uC704\uD55C \uCD5C\uACE0 \uC815\uD655\uB3C4\n */\n BestForNavigation = 6\n}\ninterface Location$1 {\n /**\n * Android\uC5D0\uC11C\uB9CC \uC9C0\uC6D0\uD558\uB294 \uC635\uC158\uC774\uC5D0\uC694.\n *\n * - `FINE`: \uC815\uD655\uD55C \uC704\uCE58\n * - `COARSE`: \uB300\uB7B5\uC801\uC778 \uC704\uCE58\n *\n * @see https://developer.android.com/codelabs/approximate-location\n */\n accessLocation?: \"FINE\" | \"COARSE\";\n /**\n * \uC704\uCE58\uAC00 \uC5C5\uB370\uC774\uD2B8\uB41C \uC2DC\uC810\uC758 \uC720\uB2C9\uC2A4 \uD0C0\uC784\uC2A4\uD0EC\uD504\uC608\uC694.\n */\n timestamp: number;\n /**\n * @description \uC704\uCE58 \uC815\uBCF4\uB97C \uB098\uD0C0\uB0B4\uB294 \uAC1D\uCCB4\uC608\uC694. \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 [LocationCoords](/react-native/reference/framework/Types/LocationCoords.html)\uC744 \uCC38\uACE0\uD574\uC8FC\uC138\uC694.\n */\n coords: LocationCoords;\n}\n/**\n * @public\n * @category \uC704\uCE58 \uC815\uBCF4\n * @name LocationCoords\n * @description \uC138\uBD80 \uC704\uCE58 \uC815\uBCF4\uB97C \uB098\uD0C0\uB0B4\uB294 \uAC1D\uCCB4\uC608\uC694.\n */\nexport interface LocationCoords {\n /**\n * \uC704\uB3C4\n */\n latitude: number;\n /**\n * \uACBD\uB3C4\n */\n longitude: number;\n /**\n * \uB192\uC774\n */\n altitude: number;\n /**\n * \uC704\uCE58 \uC815\uD655\uB3C4\n */\n accuracy: number;\n /**\n * \uACE0\uB3C4 \uC815\uD655\uB3C4\n */\n altitudeAccuracy: number;\n /**\n * \uBC29\uD5A5\n */\n heading: number;\n}\nexport interface StartUpdateLocationOptions {\n /**\n * \uC704\uCE58 \uC815\uD655\uB3C4\uB97C \uC124\uC815\uD574\uC694.\n */\n accuracy: Accuracy;\n /**\n * \uC704\uCE58 \uC5C5\uB370\uC774\uD2B8 \uC8FC\uAE30\uB97C \uBC00\uB9AC\uCD08(ms) \uB2E8\uC704\uB85C \uC124\uC815\uD574\uC694.\n */\n timeInterval: number;\n /**\n * \uC704\uCE58 \uBCC0\uACBD \uAC70\uB9AC\uB97C \uBBF8\uD130(m) \uB2E8\uC704\uB85C \uC124\uC815\uD574\uC694.\n */\n distanceInterval: number;\n}\nexport interface StartUpdateLocationSubscription extends EmitterSubscription {\n remove: () => Promise<void>;\n}\n/**\n * @name UpdateLocationEventEmitter\n * @kind typedef\n * @description\n * \uB514\uBC14\uC774\uC2A4\uC758 \uC704\uCE58 \uC815\uBCF4 \uBCC0\uACBD\uC744 \uAC10\uC9C0\uD574\uC694\n */\nexport type UpdateLocationEventEmitter = EventEmitterSchema<\"updateLocation\", [\n Location$1\n]>;\n/**\n * @public\n * @category \uC704\uCE58 \uC815\uBCF4\n * @name startUpdateLocation\n * @description \uB514\uBC14\uC774\uC2A4\uC758 \uC704\uCE58 \uC815\uBCF4\uB97C \uC9C0\uC18D\uC801\uC73C\uB85C \uAC10\uC9C0\uD558\uACE0, \uC704\uCE58\uAC00 \uBCC0\uACBD\uB418\uBA74 \uCF5C\uBC31\uC744 \uC2E4\uD589\uD558\uB294 \uD568\uC218\uC608\uC694. \uCF5C\uBC31 \uD568\uC218\uB97C \uB4F1\uB85D\uD558\uBA74 \uC704\uCE58\uAC00 \uBCC0\uACBD\uB420 \uB54C\uB9C8\uB2E4 \uC790\uB3D9\uC73C\uB85C \uD638\uCD9C\uB3FC\uC694.\n * \uC2E4\uC2DC\uAC04 \uC704\uCE58 \uCD94\uC801\uC774 \uD544\uC694\uD55C \uAE30\uB2A5\uC744 \uAD6C\uD604\uD560 \uB54C \uC0AC\uC6A9\uD560 \uC218 \uC788\uC5B4\uC694. \uC608\uB97C \uB4E4\uC5B4 \uC9C0\uB3C4 \uC571\uC5D0\uC11C \uC0AC\uC6A9\uC790\uC758 \uD604\uC7AC \uC704\uCE58\uB97C \uC2E4\uC2DC\uAC04\uC73C\uB85C \uC5C5\uB370\uC774\uD2B8\uD560 \uB54C, \uC6B4\uB3D9 \uC571\uC5D0\uC11C \uC0AC\uC6A9\uC790\uC758 \uC774\uB3D9 \uAC70\uB9AC\uB97C \uAE30\uB85D\uD560 \uB54C \uB4F1\uC774\uC5D0\uC694.\n * \uC704\uCE58 \uC5C5\uB370\uC774\uD2B8 \uC8FC\uAE30\uC640 \uC815\uD655\uB3C4\uB97C \uC870\uC815\uD574 \uBC30\uD130\uB9AC \uC18C\uBAA8\uB97C \uCD5C\uC18C\uD654\uD558\uBA74\uC11C\uB3C4 \uD544\uC694\uD55C \uC815\uBCF4\uB97C \uC5BB\uC744 \uC218 \uC788\uC5B4\uC694.\n *\n * @param {StartUpdateLocationOptions} options - \uC704\uCE58 \uC815\uBCF4 \uAC10\uC9C0\uC5D0 \uD544\uC694\uD55C \uC124\uC815 \uAC1D\uCCB4\uC5D0\uC694.\n * @param {number} [options.accuracy] \uC704\uCE58 \uC815\uD655\uB3C4\uB97C \uC124\uC815\uD574\uC694.\n * @param {number} [options.timeInterval] \uC704\uCE58 \uC815\uBCF4\uB97C \uC5C5\uB370\uC774\uD2B8\uD558\uB294 \uCD5C\uC18C \uC8FC\uAE30\uB85C, \uB2E8\uC704\uB294 \uBC00\uB9AC\uCD08(ms)\uC608\uC694. \uC774 \uAC12\uC740 \uC704\uCE58 \uC5C5\uB370\uC774\uD2B8\uAC00 \uBC1C\uC0DD\uD558\uB294 \uAC00\uC7A5 \uC9E7\uC740 \uAC04\uACA9\uC744 \uC124\uC815\uD558\uC9C0\uB9CC, \uC2DC\uC2A4\uD15C\uC774\uB098 \uD658\uACBD\uC758 \uC601\uD5A5\uC744 \uBC1B\uC544 \uC9C0\uC815\uD55C \uC8FC\uAE30\uBCF4\uB2E4 \uB354 \uAE34 \uAC04\uACA9\uC73C\uB85C \uC5C5\uB370\uC774\uD2B8\uB420 \uC218 \uC788\uC5B4\uC694.\n * @param {number} [options.distanceInterval] \uC704\uCE58 \uBCC0\uACBD \uAC70\uB9AC\uB97C \uBBF8\uD130(m) \uB2E8\uC704\uB85C \uC124\uC815\uD574\uC694.\n * @param {(location: Location) => void} [options.callback] \uC704\uCE58 \uC815\uBCF4\uAC00 \uBCC0\uACBD\uB420 \uB54C \uD638\uCD9C\uB418\uB294 \uCF5C\uBC31 \uD568\uC218\uC608\uC694. \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 [Location](/react-native/reference/framework/Types/Location.html)\uC744 \uCC38\uACE0\uD574\uC8FC\uC138\uC694.\n *\n * @example\n * ### \uC704\uCE58 \uC815\uBCF4 \uBCC0\uACBD \uAC10\uC9C0\uD558\uAE30\n *\n * ```tsx\n * import React, { useState, useEffect } from 'react';\n * import { View, Text, Button } from 'react-native';\n * import { startUpdateLocation } from '@apps-in-toss/framework';\n *\n * // \uC704\uCE58 \uC815\uBCF4 \uBCC0\uACBD \uAC10\uC9C0\uD558\uAE30\n * function LocationWatcher() {\n * const [location, setLocation] = useState(null);\n *\n * useEffect(() => {\n * return startUpdateLocation({\n * options: {\n * accuracy: Accuracy.Balanced,\n * timeInterval: 3000,\n * distanceInterval: 10,\n * },\n * onEvent: (location) => {\n * setLocation(location);\n * },\n * onError: (error) => {\n * console.error('\uC704\uCE58 \uC815\uBCF4\uB97C \uAC00\uC838\uC624\uB294\uB370 \uC2E4\uD328\uD588\uC5B4\uC694:', error);\n * },\n * });\n * }, []);\n *\n * if (location == null) {\n * return <Text>\uC704\uCE58 \uC815\uBCF4\uB97C \uAC00\uC838\uC624\uB294 \uC911\uC774\uC5D0\uC694...</Text>;\n * }\n *\n * return (\n * <View>\n * <Text>\uC704\uB3C4: {location.coords.latitude}</Text>\n * <Text>\uACBD\uB3C4: {location.coords.longitude}</Text>\n * <Text>\uC704\uCE58 \uC815\uD655\uB3C4: {location.coords.accuracy}m</Text>\n * <Text>\uB192\uC774: {location.coords.altitude}m</Text>\n * <Text>\uACE0\uB3C4 \uC815\uD655\uB3C4: {location.coords.altitudeAccuracy}m</Text>\n * <Text>\uBC29\uD5A5: {location.coords.heading}\xB0</Text>\n * </View>\n * );\n * }\n * ```\n */\nexport declare function startUpdateLocation(eventParams: {\n onEvent: (response: Location$1) => void;\n onError: (error: unknown) => void;\n options: StartUpdateLocationOptions;\n}): () => void;\n\nexport {};\n"
154
+ },
155
+ {
156
+ identifier: "onVisibilityChangedByTransparentServiceWeb",
157
+ dts: `import { EmitterSubscription } from 'react-native';
158
+
159
+ export interface EventEmitterSchema<K extends string, P extends unknown[]> {
160
+ name: K;
161
+ params: P;
162
+ }
163
+ export interface OnVisibilityChangedByTransparentServiceWebSubscription extends EmitterSubscription {
164
+ remove: () => void;
165
+ }
166
+ export type OnVisibilityChangedByTransparentServiceWebEventEmitter = EventEmitterSchema<"visibilityChangedByTransparentServiceWeb", [
167
+ boolean
168
+ ]>;
169
+ export declare function onVisibilityChangedByTransparentServiceWeb(eventParams: {
170
+ options: {
171
+ callbackId: string;
172
+ };
173
+ onEvent: (isVisible: boolean) => void;
174
+ onError: (error: unknown) => void;
175
+ }): () => void;
176
+
177
+ export {};
178
+ `
179
+ }
180
+ ];
181
+ export {
182
+ bridges_meta_default as default
183
+ };
package/dist/index.cjs CHANGED
@@ -58,6 +58,7 @@ __export(src_exports, {
58
58
  setClipboardText: () => setClipboardText,
59
59
  setDeviceOrientation: () => setDeviceOrientation,
60
60
  startUpdateLocation: () => startUpdateLocation,
61
+ useCreateUserAgent: () => useCreateUserAgent,
61
62
  useGeolocation: () => useGeolocation
62
63
  });
63
64
  module.exports = __toCommonJS(src_exports);
@@ -882,10 +883,11 @@ var GoogleAdMob = {
882
883
  };
883
884
 
884
885
  // src/components/WebView.tsx
885
- var import_react_native14 = require("@toss-design-system/react-native");
886
+ var import_react_native15 = require("@toss-design-system/react-native");
886
887
  var import_private = require("@toss-design-system/react-native/private");
887
- var import_react6 = require("react");
888
- var import_react_native_bedrock11 = require("react-native-bedrock");
888
+ var import_react7 = require("react");
889
+ var import_react_native16 = require("react-native");
890
+ var import_react_native_bedrock13 = require("react-native-bedrock");
889
891
  var bedrockAsyncBridges = __toESM(require("react-native-bedrock/async-bridges"), 1);
890
892
  var bedrockConstantBridges = __toESM(require("react-native-bedrock/constant-bridges"), 1);
891
893
 
@@ -1175,8 +1177,63 @@ __export(event_bridges_exports, {
1175
1177
  startUpdateLocation: () => startUpdateLocation
1176
1178
  });
1177
1179
 
1178
- // src/utils/log.ts
1180
+ // src/hooks/useCreateUserAgent.ts
1181
+ var import_react_native14 = require("react-native");
1179
1182
  var import_react_native_bedrock10 = require("react-native-bedrock");
1183
+ function useCreateUserAgent({
1184
+ batteryModePreference,
1185
+ colorPreference,
1186
+ fontA11y,
1187
+ locale,
1188
+ navbarPreference,
1189
+ pureSafeArea,
1190
+ safeArea,
1191
+ safeAreaBottomTransparency
1192
+ }) {
1193
+ const platform = (0, import_react_native_bedrock10.getPlatformOS)();
1194
+ const appVersion = getTossAppVersion();
1195
+ const fontScale = (0, import_react_native14.useWindowDimensions)().fontScale;
1196
+ const platformString = platform === "ios" ? "iPhone" : "Android";
1197
+ return [
1198
+ `TossApp/${appVersion}`,
1199
+ batteryModePreference && `TossBatteryModePreference/${batteryModePreference}`,
1200
+ colorPreference && `TossColorPreference/${colorPreference}`,
1201
+ fontA11y && `TossFontAccessibility/${fontA11y}`,
1202
+ fontScale && `TossFontScale/${fontScale}`,
1203
+ locale && `TossLocale/${locale}`,
1204
+ navbarPreference && `TossNavbarPreference/${navbarPreference}`,
1205
+ pureSafeArea && `TossPureSafeArea/${pureSafeArea}`,
1206
+ safeArea && `TossSafeArea/${safeArea}`,
1207
+ safeAreaBottomTransparency && `TossSafeAreaBottomTransparency/${safeAreaBottomTransparency}`,
1208
+ platformString
1209
+ ].filter(Boolean).join(" ");
1210
+ }
1211
+
1212
+ // src/hooks/useGeolocation.ts
1213
+ var import_react6 = require("react");
1214
+ var import_react_native_bedrock11 = require("react-native-bedrock");
1215
+ function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
1216
+ const isVisible = (0, import_react_native_bedrock11.useVisibility)();
1217
+ const [location, setLocation] = (0, import_react6.useState)(null);
1218
+ (0, import_react6.useEffect)(() => {
1219
+ if (!isVisible) {
1220
+ return;
1221
+ }
1222
+ return startUpdateLocation({
1223
+ options: {
1224
+ accuracy,
1225
+ distanceInterval,
1226
+ timeInterval
1227
+ },
1228
+ onEvent: setLocation,
1229
+ onError: console.error
1230
+ });
1231
+ }, [accuracy, distanceInterval, timeInterval, isVisible]);
1232
+ return location;
1233
+ }
1234
+
1235
+ // src/utils/log.ts
1236
+ var import_react_native_bedrock12 = require("react-native-bedrock");
1180
1237
 
1181
1238
  // src/utils/extractDateFromUUIDv7.ts
1182
1239
  var extractDateFromUUIDv7 = (uuid) => {
@@ -1202,7 +1259,7 @@ var getGroupId = (url) => {
1202
1259
  };
1203
1260
  var getReferrer = () => {
1204
1261
  try {
1205
- const referrer = new URL((0, import_react_native_bedrock10.getSchemeUri)());
1262
+ const referrer = new URL((0, import_react_native_bedrock12.getSchemeUri)());
1206
1263
  return referrer.searchParams.get("referrer");
1207
1264
  } catch {
1208
1265
  return "";
@@ -1229,13 +1286,13 @@ var appsInTossGlobals = getAppsInTossGlobals();
1229
1286
  var operationalEnvironment = getOperationalEnvironment();
1230
1287
  var TYPES = ["partner", "external", "game"];
1231
1288
  var WEBVIEW_TYPES = {
1232
- partner: import_react_native14.PartnerWebViewScreen,
1233
- external: import_react_native14.ExternalWebViewScreen,
1289
+ partner: import_react_native15.PartnerWebViewScreen,
1290
+ external: import_react_native15.ExternalWebViewScreen,
1234
1291
  game: GameWebView
1235
1292
  };
1236
1293
  function mergeSchemeQueryParamsInto(url) {
1237
1294
  const baseUrl = new URL(url);
1238
- const schemeUrl = new URL((0, import_react_native_bedrock11.getSchemeUri)());
1295
+ const schemeUrl = new URL((0, import_react_native_bedrock13.getSchemeUri)());
1239
1296
  baseUrl.pathname = schemeUrl.pathname;
1240
1297
  for (const [key, value] of schemeUrl.searchParams.entries()) {
1241
1298
  baseUrl.searchParams.set(key, value);
@@ -1259,10 +1316,11 @@ function WebView({ type, local, onMessage, ...props }) {
1259
1316
  if (!TYPES.includes(type)) {
1260
1317
  throw new Error(`Invalid WebView type: '${type}'`);
1261
1318
  }
1262
- const bedrockEvent = (0, import_react_native_bedrock11.useBedrockEvent)();
1263
- const uri = (0, import_react6.useMemo)(() => getWebViewUri(local), [local]);
1319
+ const bedrockEvent = (0, import_react_native_bedrock13.useBedrockEvent)();
1320
+ const uri = (0, import_react7.useMemo)(() => getWebViewUri(local), [local]);
1264
1321
  const top = (0, import_private.useSafeAreaTop)();
1265
1322
  const bottom = (0, import_private.useSafeAreaBottom)();
1323
+ const global2 = getAppsInTossGlobals();
1266
1324
  const handler = useBridgeHandler({
1267
1325
  onMessage,
1268
1326
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -1284,6 +1342,7 @@ function WebView({ type, local, onMessage, ...props }) {
1284
1342
  ...constant_bridges_exports,
1285
1343
  getSafeAreaTop: () => top,
1286
1344
  getSafeAreaBottom: () => bottom,
1345
+ ...Object.fromEntries(Object.entries(global2).map(([key, value]) => [key, () => value])),
1287
1346
  /** AdMob */
1288
1347
  loadAdMobInterstitialAd_isSupported: GoogleAdMob.loadAdMobInterstitialAd.isSupported,
1289
1348
  showAdMobInterstitialAd_isSupported: GoogleAdMob.showAdMobInterstitialAd.isSupported,
@@ -1307,7 +1366,7 @@ function WebView({ type, local, onMessage, ...props }) {
1307
1366
  iapGetProductItemList: IAP.getProductItemList
1308
1367
  }
1309
1368
  });
1310
- const baseProps = (0, import_react6.useMemo)(() => {
1369
+ const baseProps = (0, import_react7.useMemo)(() => {
1311
1370
  switch (type) {
1312
1371
  case "partner": {
1313
1372
  const headerOnlyProp = {
@@ -1338,18 +1397,28 @@ function WebView({ type, local, onMessage, ...props }) {
1338
1397
  }, [type, props]);
1339
1398
  const BaseWebView = WEBVIEW_TYPES[type];
1340
1399
  const webViewDebuggingEnabled = operationalEnvironment === "sandbox";
1341
- const handleNavigationStateChange = (0, import_react6.useCallback)((event) => {
1400
+ const handleNavigationStateChange = (0, import_react7.useCallback)((event) => {
1342
1401
  if (event.url) {
1343
1402
  trackScreen(event.url);
1344
1403
  }
1345
1404
  }, []);
1405
+ const userAgent = useCreateUserAgent({
1406
+ colorPreference: "light"
1407
+ });
1346
1408
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1347
1409
  BaseWebView,
1348
1410
  {
1349
1411
  ref: handler.ref,
1350
1412
  ...props,
1351
1413
  ...baseProps,
1352
- source: { uri },
1414
+ source: {
1415
+ uri,
1416
+ // NOTE: https://github.com/react-native-webview/react-native-webview/pull/3133
1417
+ headers: {
1418
+ "User-Agent": userAgent
1419
+ }
1420
+ },
1421
+ userAgent: import_react_native16.Platform.OS === "ios" ? userAgent : void 0,
1353
1422
  sharedCookiesEnabled: true,
1354
1423
  webviewDebuggingEnabled: webViewDebuggingEnabled,
1355
1424
  thirdPartyCookiesEnabled: true,
@@ -1367,29 +1436,6 @@ function ensureValue(value, name) {
1367
1436
  return value;
1368
1437
  }
1369
1438
 
1370
- // src/hooks/useGeolocation.ts
1371
- var import_react7 = require("react");
1372
- var import_react_native_bedrock12 = require("react-native-bedrock");
1373
- function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
1374
- const isVisible = (0, import_react_native_bedrock12.useVisibility)();
1375
- const [location, setLocation] = (0, import_react7.useState)(null);
1376
- (0, import_react7.useEffect)(() => {
1377
- if (!isVisible) {
1378
- return;
1379
- }
1380
- return startUpdateLocation({
1381
- options: {
1382
- accuracy,
1383
- distanceInterval,
1384
- timeInterval
1385
- },
1386
- onEvent: setLocation,
1387
- onError: console.error
1388
- });
1389
- }, [accuracy, distanceInterval, timeInterval, isVisible]);
1390
- return location;
1391
- }
1392
-
1393
1439
  // src/types.ts
1394
1440
  var Accuracy2 = /* @__PURE__ */ ((Accuracy3) => {
1395
1441
  Accuracy3[Accuracy3["Lowest"] = 1] = "Lowest";
@@ -1446,6 +1492,7 @@ var Analytics2 = {
1446
1492
  setClipboardText,
1447
1493
  setDeviceOrientation,
1448
1494
  startUpdateLocation,
1495
+ useCreateUserAgent,
1449
1496
  useGeolocation,
1450
1497
  ...require("@apps-in-toss/analytics")
1451
1498
  });
package/dist/index.d.cts CHANGED
@@ -1963,6 +1963,17 @@ interface LocalNetwork {
1963
1963
  type InternalProps = 'source' | 'cacheEnabled' | 'sharedCookiesEnabled' | 'thirdPartyCookiesEnabled' | 'injectedJavaScriptBeforeContentLoaded';
1964
1964
  declare function WebView({ type, local, onMessage, ...props }: WebViewProps): react_jsx_runtime.JSX.Element;
1965
1965
 
1966
+ declare function useCreateUserAgent({ batteryModePreference, colorPreference, fontA11y, locale, navbarPreference, pureSafeArea, safeArea, safeAreaBottomTransparency, }: {
1967
+ batteryModePreference?: string;
1968
+ colorPreference?: string;
1969
+ fontA11y?: string;
1970
+ locale?: string;
1971
+ navbarPreference?: string;
1972
+ pureSafeArea?: string;
1973
+ safeArea?: string;
1974
+ safeAreaBottomTransparency?: string;
1975
+ }): string;
1976
+
1966
1977
  type UseGeolocationOptions = Omit<StartUpdateLocationOptions$1, 'callback'>;
1967
1978
  /**
1968
1979
  * @public
@@ -2085,4 +2096,4 @@ declare const Analytics: {
2085
2096
  Area: ({ children, params: _params, ...props }: _apps_in_toss_analytics.LoggingAreaProps) => react_jsx_runtime.JSX.Element;
2086
2097
  };
2087
2098
 
2088
- export { Accuracy, Analytics, AppsInToss, type ContactEntity, type EventLogParams, type ExternalWebViewProps, type FetchAlbumPhotosOptions, type GameWebViewProps, type GetCurrentLocationOptions, GoogleAdMob, IAP, INTERNAL__onVisibilityChangedByTransparentServiceWeb, type IapCreateOneTimePurchaseOrderOptions, type IapCreateOneTimePurchaseOrderResult, type IapProductListItem, type ImageResponse, type LoadAdMobInterstitialAdEvent, type LoadAdMobInterstitialAdOptions, type LoadAdMobRewardedAdEvent, type LoadAdMobRewardedAdOptions, type Location, type LocationCoords, type OpenCameraOptions, type PartnerWebViewProps, type SaveBase64DataParams, type ShowAdMobInterstitialAdEvent, type ShowAdMobInterstitialAdOptions, type ShowAdMobRewardedAdEvent, type ShowAdMobRewardedAdOptions, type StartUpdateLocationOptions$1 as StartUpdateLocationOptions, type StartUpdateLocationSubscription, Storage, TossPay, type UpdateLocationEventEmitter, type UseGeolocationOptions, WebView, type WebViewProps, appLogin, appsInTossEvent, env, eventLog, fetchAlbumPhotos, fetchContacts, getClipboardText, getCurrentLocation, getDeviceId, getOperationalEnvironment, getTossAppVersion, getTossShareLink, isMinVersionSupported, openCamera, saveBase64Data, setClipboardText, setDeviceOrientation, startUpdateLocation, useGeolocation };
2099
+ export { Accuracy, Analytics, AppsInToss, type ContactEntity, type EventLogParams, type ExternalWebViewProps, type FetchAlbumPhotosOptions, type GameWebViewProps, type GetCurrentLocationOptions, GoogleAdMob, IAP, INTERNAL__onVisibilityChangedByTransparentServiceWeb, type IapCreateOneTimePurchaseOrderOptions, type IapCreateOneTimePurchaseOrderResult, type IapProductListItem, type ImageResponse, type LoadAdMobInterstitialAdEvent, type LoadAdMobInterstitialAdOptions, type LoadAdMobRewardedAdEvent, type LoadAdMobRewardedAdOptions, type Location, type LocationCoords, type OpenCameraOptions, type PartnerWebViewProps, type SaveBase64DataParams, type ShowAdMobInterstitialAdEvent, type ShowAdMobInterstitialAdOptions, type ShowAdMobRewardedAdEvent, type ShowAdMobRewardedAdOptions, type StartUpdateLocationOptions$1 as StartUpdateLocationOptions, type StartUpdateLocationSubscription, Storage, TossPay, type UpdateLocationEventEmitter, type UseGeolocationOptions, WebView, type WebViewProps, appLogin, appsInTossEvent, env, eventLog, fetchAlbumPhotos, fetchContacts, getClipboardText, getCurrentLocation, getDeviceId, getOperationalEnvironment, getTossAppVersion, getTossShareLink, isMinVersionSupported, openCamera, saveBase64Data, setClipboardText, setDeviceOrientation, startUpdateLocation, useCreateUserAgent, useGeolocation };
package/dist/index.d.ts CHANGED
@@ -1963,6 +1963,17 @@ interface LocalNetwork {
1963
1963
  type InternalProps = 'source' | 'cacheEnabled' | 'sharedCookiesEnabled' | 'thirdPartyCookiesEnabled' | 'injectedJavaScriptBeforeContentLoaded';
1964
1964
  declare function WebView({ type, local, onMessage, ...props }: WebViewProps): react_jsx_runtime.JSX.Element;
1965
1965
 
1966
+ declare function useCreateUserAgent({ batteryModePreference, colorPreference, fontA11y, locale, navbarPreference, pureSafeArea, safeArea, safeAreaBottomTransparency, }: {
1967
+ batteryModePreference?: string;
1968
+ colorPreference?: string;
1969
+ fontA11y?: string;
1970
+ locale?: string;
1971
+ navbarPreference?: string;
1972
+ pureSafeArea?: string;
1973
+ safeArea?: string;
1974
+ safeAreaBottomTransparency?: string;
1975
+ }): string;
1976
+
1966
1977
  type UseGeolocationOptions = Omit<StartUpdateLocationOptions$1, 'callback'>;
1967
1978
  /**
1968
1979
  * @public
@@ -2085,4 +2096,4 @@ declare const Analytics: {
2085
2096
  Area: ({ children, params: _params, ...props }: _apps_in_toss_analytics.LoggingAreaProps) => react_jsx_runtime.JSX.Element;
2086
2097
  };
2087
2098
 
2088
- export { Accuracy, Analytics, AppsInToss, type ContactEntity, type EventLogParams, type ExternalWebViewProps, type FetchAlbumPhotosOptions, type GameWebViewProps, type GetCurrentLocationOptions, GoogleAdMob, IAP, INTERNAL__onVisibilityChangedByTransparentServiceWeb, type IapCreateOneTimePurchaseOrderOptions, type IapCreateOneTimePurchaseOrderResult, type IapProductListItem, type ImageResponse, type LoadAdMobInterstitialAdEvent, type LoadAdMobInterstitialAdOptions, type LoadAdMobRewardedAdEvent, type LoadAdMobRewardedAdOptions, type Location, type LocationCoords, type OpenCameraOptions, type PartnerWebViewProps, type SaveBase64DataParams, type ShowAdMobInterstitialAdEvent, type ShowAdMobInterstitialAdOptions, type ShowAdMobRewardedAdEvent, type ShowAdMobRewardedAdOptions, type StartUpdateLocationOptions$1 as StartUpdateLocationOptions, type StartUpdateLocationSubscription, Storage, TossPay, type UpdateLocationEventEmitter, type UseGeolocationOptions, WebView, type WebViewProps, appLogin, appsInTossEvent, env, eventLog, fetchAlbumPhotos, fetchContacts, getClipboardText, getCurrentLocation, getDeviceId, getOperationalEnvironment, getTossAppVersion, getTossShareLink, isMinVersionSupported, openCamera, saveBase64Data, setClipboardText, setDeviceOrientation, startUpdateLocation, useGeolocation };
2099
+ export { Accuracy, Analytics, AppsInToss, type ContactEntity, type EventLogParams, type ExternalWebViewProps, type FetchAlbumPhotosOptions, type GameWebViewProps, type GetCurrentLocationOptions, GoogleAdMob, IAP, INTERNAL__onVisibilityChangedByTransparentServiceWeb, type IapCreateOneTimePurchaseOrderOptions, type IapCreateOneTimePurchaseOrderResult, type IapProductListItem, type ImageResponse, type LoadAdMobInterstitialAdEvent, type LoadAdMobInterstitialAdOptions, type LoadAdMobRewardedAdEvent, type LoadAdMobRewardedAdOptions, type Location, type LocationCoords, type OpenCameraOptions, type PartnerWebViewProps, type SaveBase64DataParams, type ShowAdMobInterstitialAdEvent, type ShowAdMobInterstitialAdOptions, type ShowAdMobRewardedAdEvent, type ShowAdMobRewardedAdOptions, type StartUpdateLocationOptions$1 as StartUpdateLocationOptions, type StartUpdateLocationSubscription, Storage, TossPay, type UpdateLocationEventEmitter, type UseGeolocationOptions, WebView, type WebViewProps, appLogin, appsInTossEvent, env, eventLog, fetchAlbumPhotos, fetchContacts, getClipboardText, getCurrentLocation, getDeviceId, getOperationalEnvironment, getTossAppVersion, getTossShareLink, isMinVersionSupported, openCamera, saveBase64Data, setClipboardText, setDeviceOrientation, startUpdateLocation, useCreateUserAgent, useGeolocation };
package/dist/index.js CHANGED
@@ -827,11 +827,12 @@ var GoogleAdMob = {
827
827
 
828
828
  // src/components/WebView.tsx
829
829
  import {
830
- PartnerWebViewScreen,
831
- ExternalWebViewScreen
830
+ ExternalWebViewScreen,
831
+ PartnerWebViewScreen
832
832
  } from "@toss-design-system/react-native";
833
833
  import { useSafeAreaBottom, useSafeAreaTop as useSafeAreaTop2 } from "@toss-design-system/react-native/private";
834
834
  import { useCallback as useCallback3, useMemo as useMemo3 } from "react";
835
+ import { Platform as Platform6 } from "react-native";
835
836
  import { getSchemeUri as getSchemeUri4, useBedrockEvent } from "react-native-bedrock";
836
837
  import * as bedrockAsyncBridges from "react-native-bedrock/async-bridges";
837
838
  import * as bedrockConstantBridges from "react-native-bedrock/constant-bridges";
@@ -1124,6 +1125,61 @@ __export(event_bridges_exports, {
1124
1125
  startUpdateLocation: () => startUpdateLocation
1125
1126
  });
1126
1127
 
1128
+ // src/hooks/useCreateUserAgent.ts
1129
+ import { useWindowDimensions } from "react-native";
1130
+ import { getPlatformOS } from "react-native-bedrock";
1131
+ function useCreateUserAgent({
1132
+ batteryModePreference,
1133
+ colorPreference,
1134
+ fontA11y,
1135
+ locale,
1136
+ navbarPreference,
1137
+ pureSafeArea,
1138
+ safeArea,
1139
+ safeAreaBottomTransparency
1140
+ }) {
1141
+ const platform = getPlatformOS();
1142
+ const appVersion = getTossAppVersion();
1143
+ const fontScale = useWindowDimensions().fontScale;
1144
+ const platformString = platform === "ios" ? "iPhone" : "Android";
1145
+ return [
1146
+ `TossApp/${appVersion}`,
1147
+ batteryModePreference && `TossBatteryModePreference/${batteryModePreference}`,
1148
+ colorPreference && `TossColorPreference/${colorPreference}`,
1149
+ fontA11y && `TossFontAccessibility/${fontA11y}`,
1150
+ fontScale && `TossFontScale/${fontScale}`,
1151
+ locale && `TossLocale/${locale}`,
1152
+ navbarPreference && `TossNavbarPreference/${navbarPreference}`,
1153
+ pureSafeArea && `TossPureSafeArea/${pureSafeArea}`,
1154
+ safeArea && `TossSafeArea/${safeArea}`,
1155
+ safeAreaBottomTransparency && `TossSafeAreaBottomTransparency/${safeAreaBottomTransparency}`,
1156
+ platformString
1157
+ ].filter(Boolean).join(" ");
1158
+ }
1159
+
1160
+ // src/hooks/useGeolocation.ts
1161
+ import { useState, useEffect as useEffect4 } from "react";
1162
+ import { useVisibility } from "react-native-bedrock";
1163
+ function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
1164
+ const isVisible = useVisibility();
1165
+ const [location, setLocation] = useState(null);
1166
+ useEffect4(() => {
1167
+ if (!isVisible) {
1168
+ return;
1169
+ }
1170
+ return startUpdateLocation({
1171
+ options: {
1172
+ accuracy,
1173
+ distanceInterval,
1174
+ timeInterval
1175
+ },
1176
+ onEvent: setLocation,
1177
+ onError: console.error
1178
+ });
1179
+ }, [accuracy, distanceInterval, timeInterval, isVisible]);
1180
+ return location;
1181
+ }
1182
+
1127
1183
  // src/utils/log.ts
1128
1184
  import { getSchemeUri as getSchemeUri3 } from "react-native-bedrock";
1129
1185
 
@@ -1212,6 +1268,7 @@ function WebView({ type, local, onMessage, ...props }) {
1212
1268
  const uri = useMemo3(() => getWebViewUri(local), [local]);
1213
1269
  const top = useSafeAreaTop2();
1214
1270
  const bottom = useSafeAreaBottom();
1271
+ const global2 = getAppsInTossGlobals();
1215
1272
  const handler = useBridgeHandler({
1216
1273
  onMessage,
1217
1274
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -1233,6 +1290,7 @@ function WebView({ type, local, onMessage, ...props }) {
1233
1290
  ...constant_bridges_exports,
1234
1291
  getSafeAreaTop: () => top,
1235
1292
  getSafeAreaBottom: () => bottom,
1293
+ ...Object.fromEntries(Object.entries(global2).map(([key, value]) => [key, () => value])),
1236
1294
  /** AdMob */
1237
1295
  loadAdMobInterstitialAd_isSupported: GoogleAdMob.loadAdMobInterstitialAd.isSupported,
1238
1296
  showAdMobInterstitialAd_isSupported: GoogleAdMob.showAdMobInterstitialAd.isSupported,
@@ -1292,13 +1350,23 @@ function WebView({ type, local, onMessage, ...props }) {
1292
1350
  trackScreen(event.url);
1293
1351
  }
1294
1352
  }, []);
1353
+ const userAgent = useCreateUserAgent({
1354
+ colorPreference: "light"
1355
+ });
1295
1356
  return /* @__PURE__ */ jsx5(
1296
1357
  BaseWebView,
1297
1358
  {
1298
1359
  ref: handler.ref,
1299
1360
  ...props,
1300
1361
  ...baseProps,
1301
- source: { uri },
1362
+ source: {
1363
+ uri,
1364
+ // NOTE: https://github.com/react-native-webview/react-native-webview/pull/3133
1365
+ headers: {
1366
+ "User-Agent": userAgent
1367
+ }
1368
+ },
1369
+ userAgent: Platform6.OS === "ios" ? userAgent : void 0,
1302
1370
  sharedCookiesEnabled: true,
1303
1371
  webviewDebuggingEnabled: webViewDebuggingEnabled,
1304
1372
  thirdPartyCookiesEnabled: true,
@@ -1316,29 +1384,6 @@ function ensureValue(value, name) {
1316
1384
  return value;
1317
1385
  }
1318
1386
 
1319
- // src/hooks/useGeolocation.ts
1320
- import { useState, useEffect as useEffect4 } from "react";
1321
- import { useVisibility } from "react-native-bedrock";
1322
- function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
1323
- const isVisible = useVisibility();
1324
- const [location, setLocation] = useState(null);
1325
- useEffect4(() => {
1326
- if (!isVisible) {
1327
- return;
1328
- }
1329
- return startUpdateLocation({
1330
- options: {
1331
- accuracy,
1332
- distanceInterval,
1333
- timeInterval
1334
- },
1335
- onEvent: setLocation,
1336
- onError: console.error
1337
- });
1338
- }, [accuracy, distanceInterval, timeInterval, isVisible]);
1339
- return location;
1340
- }
1341
-
1342
1387
  // src/types.ts
1343
1388
  var Accuracy2 = /* @__PURE__ */ ((Accuracy3) => {
1344
1389
  Accuracy3[Accuracy3["Lowest"] = 1] = "Lowest";
@@ -1394,5 +1439,6 @@ export {
1394
1439
  setClipboardText,
1395
1440
  setDeviceOrientation,
1396
1441
  startUpdateLocation,
1442
+ useCreateUserAgent,
1397
1443
  useGeolocation
1398
1444
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@apps-in-toss/framework",
3
3
  "type": "module",
4
- "version": "0.0.29",
4
+ "version": "0.0.30",
5
5
  "description": "The framework for Apps In Toss",
6
6
  "scripts": {
7
7
  "prepack": "yarn build",
@@ -57,9 +57,9 @@
57
57
  "ait": "./bin/ait.js"
58
58
  },
59
59
  "dependencies": {
60
- "@apps-in-toss/analytics": "0.0.29",
61
- "@apps-in-toss/cli": "0.0.29",
62
- "@apps-in-toss/plugins": "0.0.29",
60
+ "@apps-in-toss/analytics": "0.0.30",
61
+ "@apps-in-toss/cli": "0.0.30",
62
+ "@apps-in-toss/plugins": "0.0.30",
63
63
  "es-hangul": "^2.3.2"
64
64
  },
65
65
  "devDependencies": {
@@ -73,6 +73,7 @@
73
73
  "es-toolkit": "^1.34.1",
74
74
  "eslint": "^9.7.0",
75
75
  "execa": "^9.5.2",
76
+ "jsdom": "^25.0.1",
76
77
  "kill-port": "^2.0.1",
77
78
  "react": "18.2.0",
78
79
  "react-native": "0.72.6",
@@ -93,5 +94,5 @@
93
94
  "publishConfig": {
94
95
  "access": "public"
95
96
  },
96
- "gitHead": "d05ff237b358da05d562728d0ac965f00c419d63"
97
+ "gitHead": "7390d4ed0f09dec042523a302bc1aa0d21474512"
97
98
  }