@apps-in-toss/framework 0.0.29 → 0.0.31
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.
- package/dist/bridge-meta.d.ts +1 -0
- package/dist/bridge-meta.js +183 -0
- package/dist/index.cjs +207 -36
- package/dist/index.d.cts +11 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +196 -26
- package/package.json +6 -5
|
@@ -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
|
|
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
|
|
888
|
-
var
|
|
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,187 @@ __export(event_bridges_exports, {
|
|
|
1175
1177
|
startUpdateLocation: () => startUpdateLocation
|
|
1176
1178
|
});
|
|
1177
1179
|
|
|
1178
|
-
// src/
|
|
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
|
+
var FontA11yCategory = {
|
|
1184
|
+
Large: "Large",
|
|
1185
|
+
xLarge: "xLarge",
|
|
1186
|
+
xxLarge: "xxLarge",
|
|
1187
|
+
xxxLarge: "xxxLarge",
|
|
1188
|
+
A11y_Medium: "A11y_Medium",
|
|
1189
|
+
A11y_Large: "A11y_Large",
|
|
1190
|
+
A11y_xLarge: "A11y_xLarge",
|
|
1191
|
+
A11y_xxLarge: "A11y_xxLarge",
|
|
1192
|
+
A11y_xxxLarge: "A11y_xxxLarge"
|
|
1193
|
+
};
|
|
1194
|
+
var androidFontScaleMap = {
|
|
1195
|
+
100: FontA11yCategory.Large,
|
|
1196
|
+
110: FontA11yCategory.xLarge,
|
|
1197
|
+
120: FontA11yCategory.xxLarge,
|
|
1198
|
+
135: FontA11yCategory.xxxLarge,
|
|
1199
|
+
160: FontA11yCategory.A11y_Medium,
|
|
1200
|
+
190: FontA11yCategory.A11y_Large,
|
|
1201
|
+
235: FontA11yCategory.A11y_xLarge,
|
|
1202
|
+
275: FontA11yCategory.A11y_xxLarge,
|
|
1203
|
+
310: FontA11yCategory.A11y_xxxLarge
|
|
1204
|
+
};
|
|
1205
|
+
var iosScaleToAndroidScale = {
|
|
1206
|
+
0.823: 100,
|
|
1207
|
+
0.882: 100,
|
|
1208
|
+
0.941: 100,
|
|
1209
|
+
1: 100,
|
|
1210
|
+
1.118: 110,
|
|
1211
|
+
1.235: 120,
|
|
1212
|
+
1.353: 135,
|
|
1213
|
+
1.786: 160,
|
|
1214
|
+
2.143: 190,
|
|
1215
|
+
2.643: 235,
|
|
1216
|
+
3.143: 275,
|
|
1217
|
+
3.571: 310
|
|
1218
|
+
};
|
|
1219
|
+
function convertToAndroidStyleScale(fontScale, platform) {
|
|
1220
|
+
if (platform === "android") {
|
|
1221
|
+
if (fontScale <= 1) {
|
|
1222
|
+
return 100;
|
|
1223
|
+
}
|
|
1224
|
+
const scaledValue = Math.round(fontScale * 100);
|
|
1225
|
+
const keys = Object.keys(androidFontScaleMap).map(Number).sort((a, b) => a - b);
|
|
1226
|
+
let closestKey = keys[0];
|
|
1227
|
+
let minDiff = Math.abs(scaledValue - closestKey);
|
|
1228
|
+
for (const key of keys) {
|
|
1229
|
+
const diff = Math.abs(scaledValue - key);
|
|
1230
|
+
if (diff < minDiff) {
|
|
1231
|
+
minDiff = diff;
|
|
1232
|
+
closestKey = key;
|
|
1233
|
+
}
|
|
1234
|
+
}
|
|
1235
|
+
return closestKey;
|
|
1236
|
+
} else {
|
|
1237
|
+
const iosScales = Object.keys(iosScaleToAndroidScale).map(Number);
|
|
1238
|
+
let closestScale = iosScales[0];
|
|
1239
|
+
let minDiff = Math.abs(fontScale - closestScale);
|
|
1240
|
+
for (const scale of iosScales) {
|
|
1241
|
+
const diff = Math.abs(fontScale - scale);
|
|
1242
|
+
if (diff < minDiff) {
|
|
1243
|
+
minDiff = diff;
|
|
1244
|
+
closestScale = scale;
|
|
1245
|
+
}
|
|
1246
|
+
}
|
|
1247
|
+
return iosScaleToAndroidScale[closestScale];
|
|
1248
|
+
}
|
|
1249
|
+
}
|
|
1250
|
+
function mapIOSFontScaleToCategory(fontScale) {
|
|
1251
|
+
if (fontScale < 1) {
|
|
1252
|
+
return FontA11yCategory.Large;
|
|
1253
|
+
}
|
|
1254
|
+
if (Math.abs(fontScale - 1) < 0.05) {
|
|
1255
|
+
return FontA11yCategory.Large;
|
|
1256
|
+
}
|
|
1257
|
+
if (Math.abs(fontScale - 1.118) < 0.05) {
|
|
1258
|
+
return FontA11yCategory.xLarge;
|
|
1259
|
+
}
|
|
1260
|
+
if (Math.abs(fontScale - 1.235) < 0.05) {
|
|
1261
|
+
return FontA11yCategory.xxLarge;
|
|
1262
|
+
}
|
|
1263
|
+
if (Math.abs(fontScale - 1.353) < 0.05) {
|
|
1264
|
+
return FontA11yCategory.xxxLarge;
|
|
1265
|
+
}
|
|
1266
|
+
if (Math.abs(fontScale - 1.786) < 0.05) {
|
|
1267
|
+
return FontA11yCategory.A11y_Medium;
|
|
1268
|
+
}
|
|
1269
|
+
if (Math.abs(fontScale - 2.143) < 0.05) {
|
|
1270
|
+
return FontA11yCategory.A11y_Large;
|
|
1271
|
+
}
|
|
1272
|
+
if (Math.abs(fontScale - 2.643) < 0.05) {
|
|
1273
|
+
return FontA11yCategory.A11y_xLarge;
|
|
1274
|
+
}
|
|
1275
|
+
if (Math.abs(fontScale - 3.143) < 0.05) {
|
|
1276
|
+
return FontA11yCategory.A11y_xxLarge;
|
|
1277
|
+
}
|
|
1278
|
+
if (Math.abs(fontScale - 3.571) < 0.05) {
|
|
1279
|
+
return FontA11yCategory.A11y_xxxLarge;
|
|
1280
|
+
}
|
|
1281
|
+
return FontA11yCategory.Large;
|
|
1282
|
+
}
|
|
1283
|
+
function mapAndroidFontScaleToCategory(fontScale) {
|
|
1284
|
+
if (fontScale <= 1) {
|
|
1285
|
+
return androidFontScaleMap[100];
|
|
1286
|
+
}
|
|
1287
|
+
const scaledValue = Math.round(fontScale * 100);
|
|
1288
|
+
const keys = Object.keys(androidFontScaleMap).map(Number).sort((a, b) => a - b);
|
|
1289
|
+
if (keys.length === 0) {
|
|
1290
|
+
return androidFontScaleMap[100];
|
|
1291
|
+
}
|
|
1292
|
+
let closestKey = keys[0];
|
|
1293
|
+
let minDiff = Math.abs(scaledValue - closestKey);
|
|
1294
|
+
for (const key of keys) {
|
|
1295
|
+
const diff = Math.abs(scaledValue - key);
|
|
1296
|
+
if (diff < minDiff) {
|
|
1297
|
+
minDiff = diff;
|
|
1298
|
+
closestKey = key;
|
|
1299
|
+
}
|
|
1300
|
+
}
|
|
1301
|
+
return androidFontScaleMap[closestKey];
|
|
1302
|
+
}
|
|
1303
|
+
function mapFontScaleToCategory(fontScale, platform) {
|
|
1304
|
+
return platform === "ios" ? mapIOSFontScaleToCategory(fontScale) : mapAndroidFontScaleToCategory(fontScale);
|
|
1305
|
+
}
|
|
1306
|
+
function useCreateUserAgent({
|
|
1307
|
+
batteryModePreference,
|
|
1308
|
+
colorPreference,
|
|
1309
|
+
locale,
|
|
1310
|
+
navbarPreference,
|
|
1311
|
+
pureSafeArea,
|
|
1312
|
+
safeArea,
|
|
1313
|
+
safeAreaBottomTransparency
|
|
1314
|
+
}) {
|
|
1315
|
+
const platform = (0, import_react_native_bedrock10.getPlatformOS)();
|
|
1316
|
+
const appVersion = getTossAppVersion();
|
|
1317
|
+
const { fontScale } = (0, import_react_native14.useWindowDimensions)();
|
|
1318
|
+
const platformString = platform === "ios" ? "iPhone" : "Android";
|
|
1319
|
+
const fontA11y = mapFontScaleToCategory(fontScale, platform);
|
|
1320
|
+
const normalizedFontScale = convertToAndroidStyleScale(fontScale, platform);
|
|
1321
|
+
return [
|
|
1322
|
+
`TossApp/${appVersion}`,
|
|
1323
|
+
batteryModePreference && `TossBatteryModePreference/${batteryModePreference}`,
|
|
1324
|
+
colorPreference && `TossColorPreference/${colorPreference}`,
|
|
1325
|
+
`TossFontAccessibility/${fontA11y}`,
|
|
1326
|
+
`TossFontScale/${normalizedFontScale}`,
|
|
1327
|
+
locale && `TossLocale/${locale}`,
|
|
1328
|
+
navbarPreference && `TossNavbarPreference/${navbarPreference}`,
|
|
1329
|
+
pureSafeArea && `TossPureSafeArea/${pureSafeArea}`,
|
|
1330
|
+
safeArea && `TossSafeArea/${safeArea}`,
|
|
1331
|
+
safeAreaBottomTransparency && `TossSafeAreaBottomTransparency/${safeAreaBottomTransparency}`,
|
|
1332
|
+
platformString
|
|
1333
|
+
].filter(Boolean).join(" ");
|
|
1334
|
+
}
|
|
1335
|
+
|
|
1336
|
+
// src/hooks/useGeolocation.ts
|
|
1337
|
+
var import_react6 = require("react");
|
|
1338
|
+
var import_react_native_bedrock11 = require("react-native-bedrock");
|
|
1339
|
+
function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
|
|
1340
|
+
const isVisible = (0, import_react_native_bedrock11.useVisibility)();
|
|
1341
|
+
const [location, setLocation] = (0, import_react6.useState)(null);
|
|
1342
|
+
(0, import_react6.useEffect)(() => {
|
|
1343
|
+
if (!isVisible) {
|
|
1344
|
+
return;
|
|
1345
|
+
}
|
|
1346
|
+
return startUpdateLocation({
|
|
1347
|
+
options: {
|
|
1348
|
+
accuracy,
|
|
1349
|
+
distanceInterval,
|
|
1350
|
+
timeInterval
|
|
1351
|
+
},
|
|
1352
|
+
onEvent: setLocation,
|
|
1353
|
+
onError: console.error
|
|
1354
|
+
});
|
|
1355
|
+
}, [accuracy, distanceInterval, timeInterval, isVisible]);
|
|
1356
|
+
return location;
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
// src/utils/log.ts
|
|
1360
|
+
var import_react_native_bedrock12 = require("react-native-bedrock");
|
|
1180
1361
|
|
|
1181
1362
|
// src/utils/extractDateFromUUIDv7.ts
|
|
1182
1363
|
var extractDateFromUUIDv7 = (uuid) => {
|
|
@@ -1202,7 +1383,7 @@ var getGroupId = (url) => {
|
|
|
1202
1383
|
};
|
|
1203
1384
|
var getReferrer = () => {
|
|
1204
1385
|
try {
|
|
1205
|
-
const referrer = new URL((0,
|
|
1386
|
+
const referrer = new URL((0, import_react_native_bedrock12.getSchemeUri)());
|
|
1206
1387
|
return referrer.searchParams.get("referrer");
|
|
1207
1388
|
} catch {
|
|
1208
1389
|
return "";
|
|
@@ -1229,13 +1410,13 @@ var appsInTossGlobals = getAppsInTossGlobals();
|
|
|
1229
1410
|
var operationalEnvironment = getOperationalEnvironment();
|
|
1230
1411
|
var TYPES = ["partner", "external", "game"];
|
|
1231
1412
|
var WEBVIEW_TYPES = {
|
|
1232
|
-
partner:
|
|
1233
|
-
external:
|
|
1413
|
+
partner: import_react_native15.PartnerWebViewScreen,
|
|
1414
|
+
external: import_react_native15.ExternalWebViewScreen,
|
|
1234
1415
|
game: GameWebView
|
|
1235
1416
|
};
|
|
1236
1417
|
function mergeSchemeQueryParamsInto(url) {
|
|
1237
1418
|
const baseUrl = new URL(url);
|
|
1238
|
-
const schemeUrl = new URL((0,
|
|
1419
|
+
const schemeUrl = new URL((0, import_react_native_bedrock13.getSchemeUri)());
|
|
1239
1420
|
baseUrl.pathname = schemeUrl.pathname;
|
|
1240
1421
|
for (const [key, value] of schemeUrl.searchParams.entries()) {
|
|
1241
1422
|
baseUrl.searchParams.set(key, value);
|
|
@@ -1259,10 +1440,11 @@ function WebView({ type, local, onMessage, ...props }) {
|
|
|
1259
1440
|
if (!TYPES.includes(type)) {
|
|
1260
1441
|
throw new Error(`Invalid WebView type: '${type}'`);
|
|
1261
1442
|
}
|
|
1262
|
-
const bedrockEvent = (0,
|
|
1263
|
-
const uri = (0,
|
|
1443
|
+
const bedrockEvent = (0, import_react_native_bedrock13.useBedrockEvent)();
|
|
1444
|
+
const uri = (0, import_react7.useMemo)(() => getWebViewUri(local), [local]);
|
|
1264
1445
|
const top = (0, import_private.useSafeAreaTop)();
|
|
1265
1446
|
const bottom = (0, import_private.useSafeAreaBottom)();
|
|
1447
|
+
const global2 = getAppsInTossGlobals();
|
|
1266
1448
|
const handler = useBridgeHandler({
|
|
1267
1449
|
onMessage,
|
|
1268
1450
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -1284,6 +1466,7 @@ function WebView({ type, local, onMessage, ...props }) {
|
|
|
1284
1466
|
...constant_bridges_exports,
|
|
1285
1467
|
getSafeAreaTop: () => top,
|
|
1286
1468
|
getSafeAreaBottom: () => bottom,
|
|
1469
|
+
...Object.fromEntries(Object.entries(global2).map(([key, value]) => [key, () => value])),
|
|
1287
1470
|
/** AdMob */
|
|
1288
1471
|
loadAdMobInterstitialAd_isSupported: GoogleAdMob.loadAdMobInterstitialAd.isSupported,
|
|
1289
1472
|
showAdMobInterstitialAd_isSupported: GoogleAdMob.showAdMobInterstitialAd.isSupported,
|
|
@@ -1307,7 +1490,7 @@ function WebView({ type, local, onMessage, ...props }) {
|
|
|
1307
1490
|
iapGetProductItemList: IAP.getProductItemList
|
|
1308
1491
|
}
|
|
1309
1492
|
});
|
|
1310
|
-
const baseProps = (0,
|
|
1493
|
+
const baseProps = (0, import_react7.useMemo)(() => {
|
|
1311
1494
|
switch (type) {
|
|
1312
1495
|
case "partner": {
|
|
1313
1496
|
const headerOnlyProp = {
|
|
@@ -1338,18 +1521,28 @@ function WebView({ type, local, onMessage, ...props }) {
|
|
|
1338
1521
|
}, [type, props]);
|
|
1339
1522
|
const BaseWebView = WEBVIEW_TYPES[type];
|
|
1340
1523
|
const webViewDebuggingEnabled = operationalEnvironment === "sandbox";
|
|
1341
|
-
const handleNavigationStateChange = (0,
|
|
1524
|
+
const handleNavigationStateChange = (0, import_react7.useCallback)((event) => {
|
|
1342
1525
|
if (event.url) {
|
|
1343
1526
|
trackScreen(event.url);
|
|
1344
1527
|
}
|
|
1345
1528
|
}, []);
|
|
1529
|
+
const userAgent = useCreateUserAgent({
|
|
1530
|
+
colorPreference: "light"
|
|
1531
|
+
});
|
|
1346
1532
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1347
1533
|
BaseWebView,
|
|
1348
1534
|
{
|
|
1349
1535
|
ref: handler.ref,
|
|
1350
1536
|
...props,
|
|
1351
1537
|
...baseProps,
|
|
1352
|
-
source: {
|
|
1538
|
+
source: {
|
|
1539
|
+
uri,
|
|
1540
|
+
// NOTE: https://github.com/react-native-webview/react-native-webview/pull/3133
|
|
1541
|
+
headers: {
|
|
1542
|
+
"User-Agent": userAgent
|
|
1543
|
+
}
|
|
1544
|
+
},
|
|
1545
|
+
userAgent: import_react_native16.Platform.OS === "ios" ? userAgent : void 0,
|
|
1353
1546
|
sharedCookiesEnabled: true,
|
|
1354
1547
|
webviewDebuggingEnabled: webViewDebuggingEnabled,
|
|
1355
1548
|
thirdPartyCookiesEnabled: true,
|
|
@@ -1367,29 +1560,6 @@ function ensureValue(value, name) {
|
|
|
1367
1560
|
return value;
|
|
1368
1561
|
}
|
|
1369
1562
|
|
|
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
1563
|
// src/types.ts
|
|
1394
1564
|
var Accuracy2 = /* @__PURE__ */ ((Accuracy3) => {
|
|
1395
1565
|
Accuracy3[Accuracy3["Lowest"] = 1] = "Lowest";
|
|
@@ -1446,6 +1616,7 @@ var Analytics2 = {
|
|
|
1446
1616
|
setClipboardText,
|
|
1447
1617
|
setDeviceOrientation,
|
|
1448
1618
|
startUpdateLocation,
|
|
1619
|
+
useCreateUserAgent,
|
|
1449
1620
|
useGeolocation,
|
|
1450
1621
|
...require("@apps-in-toss/analytics")
|
|
1451
1622
|
});
|
package/dist/index.d.cts
CHANGED
|
@@ -1963,6 +1963,16 @@ 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, locale, navbarPreference, pureSafeArea, safeArea, safeAreaBottomTransparency, }: {
|
|
1967
|
+
batteryModePreference?: string;
|
|
1968
|
+
colorPreference?: string;
|
|
1969
|
+
locale?: string;
|
|
1970
|
+
navbarPreference?: string;
|
|
1971
|
+
pureSafeArea?: string;
|
|
1972
|
+
safeArea?: string;
|
|
1973
|
+
safeAreaBottomTransparency?: string;
|
|
1974
|
+
}): string;
|
|
1975
|
+
|
|
1966
1976
|
type UseGeolocationOptions = Omit<StartUpdateLocationOptions$1, 'callback'>;
|
|
1967
1977
|
/**
|
|
1968
1978
|
* @public
|
|
@@ -2085,4 +2095,4 @@ declare const Analytics: {
|
|
|
2085
2095
|
Area: ({ children, params: _params, ...props }: _apps_in_toss_analytics.LoggingAreaProps) => react_jsx_runtime.JSX.Element;
|
|
2086
2096
|
};
|
|
2087
2097
|
|
|
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 };
|
|
2098
|
+
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,16 @@ 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, locale, navbarPreference, pureSafeArea, safeArea, safeAreaBottomTransparency, }: {
|
|
1967
|
+
batteryModePreference?: string;
|
|
1968
|
+
colorPreference?: string;
|
|
1969
|
+
locale?: string;
|
|
1970
|
+
navbarPreference?: string;
|
|
1971
|
+
pureSafeArea?: string;
|
|
1972
|
+
safeArea?: string;
|
|
1973
|
+
safeAreaBottomTransparency?: string;
|
|
1974
|
+
}): string;
|
|
1975
|
+
|
|
1966
1976
|
type UseGeolocationOptions = Omit<StartUpdateLocationOptions$1, 'callback'>;
|
|
1967
1977
|
/**
|
|
1968
1978
|
* @public
|
|
@@ -2085,4 +2095,4 @@ declare const Analytics: {
|
|
|
2085
2095
|
Area: ({ children, params: _params, ...props }: _apps_in_toss_analytics.LoggingAreaProps) => react_jsx_runtime.JSX.Element;
|
|
2086
2096
|
};
|
|
2087
2097
|
|
|
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 };
|
|
2098
|
+
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
|
-
|
|
831
|
-
|
|
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,185 @@ __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
|
+
var FontA11yCategory = {
|
|
1132
|
+
Large: "Large",
|
|
1133
|
+
xLarge: "xLarge",
|
|
1134
|
+
xxLarge: "xxLarge",
|
|
1135
|
+
xxxLarge: "xxxLarge",
|
|
1136
|
+
A11y_Medium: "A11y_Medium",
|
|
1137
|
+
A11y_Large: "A11y_Large",
|
|
1138
|
+
A11y_xLarge: "A11y_xLarge",
|
|
1139
|
+
A11y_xxLarge: "A11y_xxLarge",
|
|
1140
|
+
A11y_xxxLarge: "A11y_xxxLarge"
|
|
1141
|
+
};
|
|
1142
|
+
var androidFontScaleMap = {
|
|
1143
|
+
100: FontA11yCategory.Large,
|
|
1144
|
+
110: FontA11yCategory.xLarge,
|
|
1145
|
+
120: FontA11yCategory.xxLarge,
|
|
1146
|
+
135: FontA11yCategory.xxxLarge,
|
|
1147
|
+
160: FontA11yCategory.A11y_Medium,
|
|
1148
|
+
190: FontA11yCategory.A11y_Large,
|
|
1149
|
+
235: FontA11yCategory.A11y_xLarge,
|
|
1150
|
+
275: FontA11yCategory.A11y_xxLarge,
|
|
1151
|
+
310: FontA11yCategory.A11y_xxxLarge
|
|
1152
|
+
};
|
|
1153
|
+
var iosScaleToAndroidScale = {
|
|
1154
|
+
0.823: 100,
|
|
1155
|
+
0.882: 100,
|
|
1156
|
+
0.941: 100,
|
|
1157
|
+
1: 100,
|
|
1158
|
+
1.118: 110,
|
|
1159
|
+
1.235: 120,
|
|
1160
|
+
1.353: 135,
|
|
1161
|
+
1.786: 160,
|
|
1162
|
+
2.143: 190,
|
|
1163
|
+
2.643: 235,
|
|
1164
|
+
3.143: 275,
|
|
1165
|
+
3.571: 310
|
|
1166
|
+
};
|
|
1167
|
+
function convertToAndroidStyleScale(fontScale, platform) {
|
|
1168
|
+
if (platform === "android") {
|
|
1169
|
+
if (fontScale <= 1) {
|
|
1170
|
+
return 100;
|
|
1171
|
+
}
|
|
1172
|
+
const scaledValue = Math.round(fontScale * 100);
|
|
1173
|
+
const keys = Object.keys(androidFontScaleMap).map(Number).sort((a, b) => a - b);
|
|
1174
|
+
let closestKey = keys[0];
|
|
1175
|
+
let minDiff = Math.abs(scaledValue - closestKey);
|
|
1176
|
+
for (const key of keys) {
|
|
1177
|
+
const diff = Math.abs(scaledValue - key);
|
|
1178
|
+
if (diff < minDiff) {
|
|
1179
|
+
minDiff = diff;
|
|
1180
|
+
closestKey = key;
|
|
1181
|
+
}
|
|
1182
|
+
}
|
|
1183
|
+
return closestKey;
|
|
1184
|
+
} else {
|
|
1185
|
+
const iosScales = Object.keys(iosScaleToAndroidScale).map(Number);
|
|
1186
|
+
let closestScale = iosScales[0];
|
|
1187
|
+
let minDiff = Math.abs(fontScale - closestScale);
|
|
1188
|
+
for (const scale of iosScales) {
|
|
1189
|
+
const diff = Math.abs(fontScale - scale);
|
|
1190
|
+
if (diff < minDiff) {
|
|
1191
|
+
minDiff = diff;
|
|
1192
|
+
closestScale = scale;
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
return iosScaleToAndroidScale[closestScale];
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
function mapIOSFontScaleToCategory(fontScale) {
|
|
1199
|
+
if (fontScale < 1) {
|
|
1200
|
+
return FontA11yCategory.Large;
|
|
1201
|
+
}
|
|
1202
|
+
if (Math.abs(fontScale - 1) < 0.05) {
|
|
1203
|
+
return FontA11yCategory.Large;
|
|
1204
|
+
}
|
|
1205
|
+
if (Math.abs(fontScale - 1.118) < 0.05) {
|
|
1206
|
+
return FontA11yCategory.xLarge;
|
|
1207
|
+
}
|
|
1208
|
+
if (Math.abs(fontScale - 1.235) < 0.05) {
|
|
1209
|
+
return FontA11yCategory.xxLarge;
|
|
1210
|
+
}
|
|
1211
|
+
if (Math.abs(fontScale - 1.353) < 0.05) {
|
|
1212
|
+
return FontA11yCategory.xxxLarge;
|
|
1213
|
+
}
|
|
1214
|
+
if (Math.abs(fontScale - 1.786) < 0.05) {
|
|
1215
|
+
return FontA11yCategory.A11y_Medium;
|
|
1216
|
+
}
|
|
1217
|
+
if (Math.abs(fontScale - 2.143) < 0.05) {
|
|
1218
|
+
return FontA11yCategory.A11y_Large;
|
|
1219
|
+
}
|
|
1220
|
+
if (Math.abs(fontScale - 2.643) < 0.05) {
|
|
1221
|
+
return FontA11yCategory.A11y_xLarge;
|
|
1222
|
+
}
|
|
1223
|
+
if (Math.abs(fontScale - 3.143) < 0.05) {
|
|
1224
|
+
return FontA11yCategory.A11y_xxLarge;
|
|
1225
|
+
}
|
|
1226
|
+
if (Math.abs(fontScale - 3.571) < 0.05) {
|
|
1227
|
+
return FontA11yCategory.A11y_xxxLarge;
|
|
1228
|
+
}
|
|
1229
|
+
return FontA11yCategory.Large;
|
|
1230
|
+
}
|
|
1231
|
+
function mapAndroidFontScaleToCategory(fontScale) {
|
|
1232
|
+
if (fontScale <= 1) {
|
|
1233
|
+
return androidFontScaleMap[100];
|
|
1234
|
+
}
|
|
1235
|
+
const scaledValue = Math.round(fontScale * 100);
|
|
1236
|
+
const keys = Object.keys(androidFontScaleMap).map(Number).sort((a, b) => a - b);
|
|
1237
|
+
if (keys.length === 0) {
|
|
1238
|
+
return androidFontScaleMap[100];
|
|
1239
|
+
}
|
|
1240
|
+
let closestKey = keys[0];
|
|
1241
|
+
let minDiff = Math.abs(scaledValue - closestKey);
|
|
1242
|
+
for (const key of keys) {
|
|
1243
|
+
const diff = Math.abs(scaledValue - key);
|
|
1244
|
+
if (diff < minDiff) {
|
|
1245
|
+
minDiff = diff;
|
|
1246
|
+
closestKey = key;
|
|
1247
|
+
}
|
|
1248
|
+
}
|
|
1249
|
+
return androidFontScaleMap[closestKey];
|
|
1250
|
+
}
|
|
1251
|
+
function mapFontScaleToCategory(fontScale, platform) {
|
|
1252
|
+
return platform === "ios" ? mapIOSFontScaleToCategory(fontScale) : mapAndroidFontScaleToCategory(fontScale);
|
|
1253
|
+
}
|
|
1254
|
+
function useCreateUserAgent({
|
|
1255
|
+
batteryModePreference,
|
|
1256
|
+
colorPreference,
|
|
1257
|
+
locale,
|
|
1258
|
+
navbarPreference,
|
|
1259
|
+
pureSafeArea,
|
|
1260
|
+
safeArea,
|
|
1261
|
+
safeAreaBottomTransparency
|
|
1262
|
+
}) {
|
|
1263
|
+
const platform = getPlatformOS();
|
|
1264
|
+
const appVersion = getTossAppVersion();
|
|
1265
|
+
const { fontScale } = useWindowDimensions();
|
|
1266
|
+
const platformString = platform === "ios" ? "iPhone" : "Android";
|
|
1267
|
+
const fontA11y = mapFontScaleToCategory(fontScale, platform);
|
|
1268
|
+
const normalizedFontScale = convertToAndroidStyleScale(fontScale, platform);
|
|
1269
|
+
return [
|
|
1270
|
+
`TossApp/${appVersion}`,
|
|
1271
|
+
batteryModePreference && `TossBatteryModePreference/${batteryModePreference}`,
|
|
1272
|
+
colorPreference && `TossColorPreference/${colorPreference}`,
|
|
1273
|
+
`TossFontAccessibility/${fontA11y}`,
|
|
1274
|
+
`TossFontScale/${normalizedFontScale}`,
|
|
1275
|
+
locale && `TossLocale/${locale}`,
|
|
1276
|
+
navbarPreference && `TossNavbarPreference/${navbarPreference}`,
|
|
1277
|
+
pureSafeArea && `TossPureSafeArea/${pureSafeArea}`,
|
|
1278
|
+
safeArea && `TossSafeArea/${safeArea}`,
|
|
1279
|
+
safeAreaBottomTransparency && `TossSafeAreaBottomTransparency/${safeAreaBottomTransparency}`,
|
|
1280
|
+
platformString
|
|
1281
|
+
].filter(Boolean).join(" ");
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
// src/hooks/useGeolocation.ts
|
|
1285
|
+
import { useState, useEffect as useEffect4 } from "react";
|
|
1286
|
+
import { useVisibility } from "react-native-bedrock";
|
|
1287
|
+
function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
|
|
1288
|
+
const isVisible = useVisibility();
|
|
1289
|
+
const [location, setLocation] = useState(null);
|
|
1290
|
+
useEffect4(() => {
|
|
1291
|
+
if (!isVisible) {
|
|
1292
|
+
return;
|
|
1293
|
+
}
|
|
1294
|
+
return startUpdateLocation({
|
|
1295
|
+
options: {
|
|
1296
|
+
accuracy,
|
|
1297
|
+
distanceInterval,
|
|
1298
|
+
timeInterval
|
|
1299
|
+
},
|
|
1300
|
+
onEvent: setLocation,
|
|
1301
|
+
onError: console.error
|
|
1302
|
+
});
|
|
1303
|
+
}, [accuracy, distanceInterval, timeInterval, isVisible]);
|
|
1304
|
+
return location;
|
|
1305
|
+
}
|
|
1306
|
+
|
|
1127
1307
|
// src/utils/log.ts
|
|
1128
1308
|
import { getSchemeUri as getSchemeUri3 } from "react-native-bedrock";
|
|
1129
1309
|
|
|
@@ -1212,6 +1392,7 @@ function WebView({ type, local, onMessage, ...props }) {
|
|
|
1212
1392
|
const uri = useMemo3(() => getWebViewUri(local), [local]);
|
|
1213
1393
|
const top = useSafeAreaTop2();
|
|
1214
1394
|
const bottom = useSafeAreaBottom();
|
|
1395
|
+
const global2 = getAppsInTossGlobals();
|
|
1215
1396
|
const handler = useBridgeHandler({
|
|
1216
1397
|
onMessage,
|
|
1217
1398
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -1233,6 +1414,7 @@ function WebView({ type, local, onMessage, ...props }) {
|
|
|
1233
1414
|
...constant_bridges_exports,
|
|
1234
1415
|
getSafeAreaTop: () => top,
|
|
1235
1416
|
getSafeAreaBottom: () => bottom,
|
|
1417
|
+
...Object.fromEntries(Object.entries(global2).map(([key, value]) => [key, () => value])),
|
|
1236
1418
|
/** AdMob */
|
|
1237
1419
|
loadAdMobInterstitialAd_isSupported: GoogleAdMob.loadAdMobInterstitialAd.isSupported,
|
|
1238
1420
|
showAdMobInterstitialAd_isSupported: GoogleAdMob.showAdMobInterstitialAd.isSupported,
|
|
@@ -1292,13 +1474,23 @@ function WebView({ type, local, onMessage, ...props }) {
|
|
|
1292
1474
|
trackScreen(event.url);
|
|
1293
1475
|
}
|
|
1294
1476
|
}, []);
|
|
1477
|
+
const userAgent = useCreateUserAgent({
|
|
1478
|
+
colorPreference: "light"
|
|
1479
|
+
});
|
|
1295
1480
|
return /* @__PURE__ */ jsx5(
|
|
1296
1481
|
BaseWebView,
|
|
1297
1482
|
{
|
|
1298
1483
|
ref: handler.ref,
|
|
1299
1484
|
...props,
|
|
1300
1485
|
...baseProps,
|
|
1301
|
-
source: {
|
|
1486
|
+
source: {
|
|
1487
|
+
uri,
|
|
1488
|
+
// NOTE: https://github.com/react-native-webview/react-native-webview/pull/3133
|
|
1489
|
+
headers: {
|
|
1490
|
+
"User-Agent": userAgent
|
|
1491
|
+
}
|
|
1492
|
+
},
|
|
1493
|
+
userAgent: Platform6.OS === "ios" ? userAgent : void 0,
|
|
1302
1494
|
sharedCookiesEnabled: true,
|
|
1303
1495
|
webviewDebuggingEnabled: webViewDebuggingEnabled,
|
|
1304
1496
|
thirdPartyCookiesEnabled: true,
|
|
@@ -1316,29 +1508,6 @@ function ensureValue(value, name) {
|
|
|
1316
1508
|
return value;
|
|
1317
1509
|
}
|
|
1318
1510
|
|
|
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
1511
|
// src/types.ts
|
|
1343
1512
|
var Accuracy2 = /* @__PURE__ */ ((Accuracy3) => {
|
|
1344
1513
|
Accuracy3[Accuracy3["Lowest"] = 1] = "Lowest";
|
|
@@ -1394,5 +1563,6 @@ export {
|
|
|
1394
1563
|
setClipboardText,
|
|
1395
1564
|
setDeviceOrientation,
|
|
1396
1565
|
startUpdateLocation,
|
|
1566
|
+
useCreateUserAgent,
|
|
1397
1567
|
useGeolocation
|
|
1398
1568
|
};
|
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.
|
|
4
|
+
"version": "0.0.31",
|
|
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.
|
|
61
|
-
"@apps-in-toss/cli": "0.0.
|
|
62
|
-
"@apps-in-toss/plugins": "0.0.
|
|
60
|
+
"@apps-in-toss/analytics": "0.0.31",
|
|
61
|
+
"@apps-in-toss/cli": "0.0.31",
|
|
62
|
+
"@apps-in-toss/plugins": "0.0.31",
|
|
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": "
|
|
97
|
+
"gitHead": "d4fa62f4014162182181b9911e0a2912fdec318d"
|
|
97
98
|
}
|