@apps-in-toss/web-bridge 0.0.24

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/build/index.js ADDED
@@ -0,0 +1,493 @@
1
+ export * from './bridge.js'
2
+
3
+ // src/index.ts
4
+ export * from "@apps-in-toss/bridge-core";
5
+
6
+ // src/storage.ts
7
+ import { createAsyncBridge } from "@apps-in-toss/bridge-core";
8
+ var Storage = {
9
+ /**
10
+ * @public
11
+ * @category 저장소
12
+ * @name getItem
13
+ * @description 모바일 앱의 로컬 저장소에서 문자열 데이터를 가져와요. 주로 앱이 종료되었다가 다시 시작해도 데이터가 유지되어야 하는 경우에 사용해요.
14
+ * @param {string} key - 가져올 아이템의 키를 입력해요.
15
+ * @returns {Promise<string | null>} 지정한 키에 저장된 문자열 값을 반환해요. 값이 없으면 `null`을 반환해요.
16
+ * @example
17
+ *
18
+ * ### `my-key`에 저장된 아이템 가져오기
19
+ * ```ts
20
+ * const value = await Storage.getItem('my-key');
21
+ * console.log(value); // 'value'
22
+ * ```
23
+ */
24
+ getItem: createAsyncBridge("getStorageItem"),
25
+ /**
26
+ * @public
27
+ * @category 저장소
28
+ * @name setItem
29
+ * @description 모바일 앱의 로컬 저장소에 문자열 데이터를 저장해요. 주로 앱이 종료되었다가 다시 시작해도 데이터가 유지되어야 하는 경우에 사용해요.
30
+ * @param {string} key - 저장할 아이템의 키를 입력해요.
31
+ * @param {string} value - 저장할 아이템의 값을 입력해요.
32
+ * @returns {Promise<void>} 아이템을 성공적으로 저장하면 아무 값도 반환하지 않아요.
33
+ * @example
34
+ *
35
+ * ### `my-key`에 아이템 저장하기
36
+ * ```ts
37
+ * import { Storage } from '@apps-in-toss/framework';
38
+ *
39
+ * await Storage.setItem('my-key', 'value');
40
+ * ```
41
+ */
42
+ setItem: createAsyncBridge("setStorageItem"),
43
+ /**
44
+ * @public
45
+ * @category 저장소
46
+ * @name removeItem
47
+ * @description 모바일 앱의 로컬 저장소에서 특정 키에 해당하는 아이템을 삭제해요.
48
+ * @param {string} key - 삭제할 아이템의 키를 입력해요.
49
+ * @returns {Promise<void>} 아이템을 삭제하면 아무 값도 반환하지 않아요.
50
+ * @example
51
+ *
52
+ * ### `my-key`에 저장된 아이템 삭제하기
53
+ * ```ts
54
+ * import { Storage } from '@apps-in-toss/framework';
55
+ *
56
+ * await Storage.removeItem('my-key');
57
+ * ```
58
+ */
59
+ removeItem: createAsyncBridge("removeStorageItem"),
60
+ /**
61
+ * @public
62
+ * @category 저장소
63
+ * @name clearItems
64
+ * @description 모바일 앱의 로컬 저장소의 모든 아이템을 삭제해요.
65
+ * @returns {Promise<void>} 아이템을 삭제하면 아무 값도 반환하지 않고 저장소가 초기화돼요.
66
+ * @example
67
+ *
68
+ * ### 저장소 초기화하기
69
+ * ```ts
70
+ * import { Storage } from '@apps-in-toss/framework';
71
+ *
72
+ * await Storage.clearItems();
73
+ * ```
74
+ */
75
+ clearItems: createAsyncBridge("clearItems")
76
+ };
77
+
78
+ // src/getSafeAreaInsets.ts
79
+ import { createConstantBridge } from "@apps-in-toss/bridge-core";
80
+ var getSafeAreaBottom = createConstantBridge("getSafeAreaBottom");
81
+ var getSafeAreaTop = createConstantBridge("getSafeAreaTop");
82
+ function getSafeAreaInsets() {
83
+ return { top: getSafeAreaTop(), bottom: getSafeAreaBottom() };
84
+ }
85
+
86
+ // src/googleAdMob.ts
87
+ import { createEventBridge, createConstantBridge as createConstantBridge2 } from "@apps-in-toss/bridge-core";
88
+ var GoogleAdMob = {
89
+ /**
90
+ * @public
91
+ * @category 광고
92
+ * @name loadAdMobInterstitialAd
93
+ * @description 앱 화면 전체를 덮는 전면 광고를 미리 불러와서, 광고가 필요한 시점에 바로 보여줄 수 있도록 준비하는 함수예요.
94
+ * @param {LoadAdMobInterstitialAdParams} params 광고를 불러올 때 사용할 설정 값이에요. 광고 ID와 광고의 동작에 대한 콜백을 설정할 수 있어요.
95
+ * @param {LoadAdMobInterstitialAdOptions} params.options 광고를 불러올 때 전달할 옵션 객체예요.
96
+ * @param {string} params.options.adUnitId 광고 단위 ID예요. 발급받은 전면 광고용 ID를 입력해요.
97
+ * @param {(event: LoadAdMobInterstitialAdEvent) => void} [params.onEvent] 광고 관련 이벤트가 발생했을 때 호출돼요. (예시: 광고가 닫히거나 클릭됐을 때). 자세한 이벤트 타입은 [LoadAdMobInterstitialAdEvent](/react-native/reference/framework/광고/LoadAdMobInterstitialAdEvent.html)를 참고하세요.
98
+ * @param {(reason: unknown) => void} [params.onError] 광고를 불러오지 못했을 때 호출돼요. (예시: 네트워크 오류나 지원하지 않는 환경일 때)
99
+ * @property {() => boolean} [isSupported] 현재 실행 중인 앱(예: 토스 앱, 개발용 샌드박스 앱 등)에서 Google AdMob 광고 기능을 지원하는지 확인하는 함수예요. 기능을 사용하기 전에 지원 여부를 확인해야 해요.
100
+ *
101
+ * @example
102
+ * ### 뷰 진입 시 전면광고 불러오기
103
+ * ```tsx
104
+ * import { GoogleAdMob } from '@apps-in-toss/framework';
105
+ * import { useEffect } from 'react';
106
+ * import { View, Text } from 'react-native';
107
+ *
108
+ * const AD_UNIT_ID = '<YOUR_AD_UNIT_ID>';
109
+ *
110
+ * function Page() {
111
+ * useEffect(() => {
112
+ * if (GoogleAdMob.loadAdMobInterstitialAd.isSupported() !== true) {
113
+ * return;
114
+ * }
115
+ *
116
+ * const cleanup = GoogleAdMob.loadAdMobInterstitialAd({
117
+ * options: {
118
+ * adUnitId: AD_UNIT_ID,
119
+ * },
120
+ * onEvent: (event) => {
121
+ * switch (event.type) {
122
+ * case 'loaded':
123
+ * console.log('광고 로드 성공', event.data);
124
+ * break;
125
+ *
126
+ * case 'clicked':
127
+ * console.log('광고 클릭');
128
+ * break;
129
+ *
130
+ * case 'dismissed':
131
+ * console.log('광고 닫힘');
132
+ * break;
133
+ *
134
+ * case 'failedToShow':
135
+ * console.log('광고 보여주기 실패');
136
+ * break;
137
+ *
138
+ * case 'impression':
139
+ * console.log('광고 노출');
140
+ * break;
141
+ *
142
+ * case 'show':
143
+ * console.log('광고 컨텐츠 보여졌음');
144
+ * break;
145
+ * }
146
+ * },
147
+ * onError: (error) => {
148
+ * console.error('광고 불러오기 실패', error);
149
+ * },
150
+ * });
151
+ *
152
+ * return cleanup;
153
+ * }, []);
154
+ *
155
+ * return (
156
+ * <View>
157
+ * <Text>Page</Text>
158
+ * </View>
159
+ * );
160
+ * }
161
+ * ```
162
+ */
163
+ loadAdMobInterstitialAd: Object.assign(
164
+ createEventBridge("loadAdMobInterstitialAd"),
165
+ {
166
+ isSupported: createConstantBridge2("loadAdMobInterstitialAd_isSupported")
167
+ }
168
+ ),
169
+ /**
170
+ * @public
171
+ * @category 광고
172
+ * @name showAdMobInterstitialAd
173
+ * @description 앱 화면 전체를 덮는 전면 광고를 사용자에게 노출해요. 이 함수는 `loadAdMobInterstitialAd` 로 미리 불러온 광고를 실제로 사용자에게 노출해요.
174
+ * @param {ShowAdMobInterstitialAdParams} params 광고를 보여주기 위해 사용할 설정 값이에요. 광고 ID와과 광고의 동작에 대한 콜백을 설정할 수 있어요.
175
+ * @param {ShowAdMobInterstitialAdOptions} params.options 광고를 보여줄 때 전달할 옵션 객체예요.
176
+ * @param {string} params.options.adUnitId 광고 단위 ID예요. `loadAdMobInterstitialAd` 로 불러온 전면 광고용 ID를 입력해요.
177
+ * @param {(event: ShowAdMobInterstitialAdEvent) => void} [params.onEvent] 광고 관련 이벤트가 발생했을 때 호출돼요. (예시: 광고 노출을 요청했을 때). 자세한 이벤트 타입은 [ShowAdMobInterstitialAdEvent](/react-native/reference/framework/광고/ShowAdMobInterstitialAdEvent.html)를 참고하세요.
178
+ * @param {(reason: unknown) => void} [params.onError] 광고를 노출하지 못했을 때 호출돼요. (예시: 네트워크 오류나 지원하지 않는 환경일 때)
179
+ * @property {() => boolean} [isSupported] 현재 실행 중인 앱(예: 토스 앱, 개발용 샌드박스 앱 등)에서 Google AdMob 광고 기능을 지원하는지 확인하는 함수예요. 기능을 사용하기 전에 지원 여부를 확인해야 해요.
180
+ *
181
+ * @example
182
+ * ### 버튼 눌러 불러온 전면 광고 보여주기
183
+ * ```tsx
184
+ * import { GoogleAdMob } from '@apps-in-toss/framework';
185
+ * import { View, Text, Button } from 'react-native';
186
+ *
187
+ * const AD_UNIT_ID = '<YOUR_AD_UNIT_ID>';
188
+ *
189
+ * function Page() {
190
+ * const handlePress = () => {
191
+ * if (GoogleAdMob.showAdMobInterstitialAd.isSupported() !== true) {
192
+ * return;
193
+ * }
194
+ *
195
+ * GoogleAdMob.showAdMobInterstitialAd({
196
+ * options: {
197
+ * adUnitId: AD_UNIT_ID,
198
+ * },
199
+ * onEvent: (event) => {
200
+ * switch (event.type) {
201
+ * case 'requested':
202
+ * console.log('광고 보여주기 요청 완료');
203
+ * break;
204
+ * }
205
+ * },
206
+ * onError: (error) => {
207
+ * console.error('광고 보여주기 실패', error);
208
+ * },
209
+ * });
210
+ * }
211
+ *
212
+ * return (
213
+ * <Button onPress={handlePress} title="광고 보기" />
214
+ * );
215
+ * }
216
+ * ```
217
+ */
218
+ showAdMobInterstitialAd: Object.assign(
219
+ createEventBridge("showAdMobInterstitialAd"),
220
+ {
221
+ isSupported: createConstantBridge2("showAdMobInterstitialAd_isSupported")
222
+ }
223
+ ),
224
+ /**
225
+ * @public
226
+ * @category 광고
227
+ * @name loadAdMobRewardedAd
228
+ * @description 사용자가 광고를 끝까지 시청하면 리워드를 제공할 수 있는 보상형 광고를 미리 불러와서, 광고가 필요한 시점에 바로 보여줄 수 있도록 준비하는 함수예요.
229
+ * @param {LoadAdMobRewardedAdParams} params 광고를 불러올 때 사용할 설정 값이에요. 광고 ID와 광고의 동작에 대한 콜백을 설정할 수 있어요.
230
+ * @param {LoadAdMobRewardedAdOptions} params.options 광고를 불러올 때 전달할 옵션 객체예요.
231
+ * @param {string} params.options.adUnitId 광고 단위 ID예요. 발급받은 보상형 광고용 ID를 입력해요.
232
+ * @param {(event: LoadAdMobRewardedAdEvent) => void} [params.onEvent] 광고 관련 이벤트가 발생했을 때 호출돼요. (예시: 광고가 닫히거나 클릭됐을 때). 자세한 이벤트 타입은 [LoadAdMobRewardedAdEvent](/react-native/reference/framework/광고/LoadAdMobRewardedAdEvent.html)를 참고하세요.
233
+ * @param {(reason: unknown) => void} [params.onError] 광고를 불러오지 못했을 때 호출돼요. (예시: 네트워크 오류나 지원하지 않는 환경일 때)
234
+ * @property {() => boolean} [isSupported] 현재 실행 중인 앱(예: 토스 앱, 개발용 샌드박스 앱 등)에서 Google AdMob 광고 기능을 지원하는지 확인하는 함수예요. 기능을 사용하기 전에 지원 여부를 확인해야 해요.
235
+ *
236
+ * @example
237
+ * ### 뷰 진입 시 보상형 광고 불러오기
238
+ * ```tsx
239
+ * import { GoogleAdMob } from '@apps-in-toss/framework';
240
+ * import { useEffect } from 'react';
241
+ * import { View, Text } from 'react-native';
242
+ *
243
+ * const AD_UNIT_ID = '<YOUR_AD_UNIT_ID>';
244
+ *
245
+ * function Page() {
246
+ * useEffect(() => {
247
+ * if (GoogleAdMob.loadAdMobRewardedAd.isSupported() !== true) {
248
+ * return;
249
+ * }
250
+ *
251
+ * const cleanup = GoogleAdMob.loadAdMobRewardedAd({
252
+ * options: {
253
+ * adUnitId: AD_UNIT_ID,
254
+ * },
255
+ * onEvent: (event) => {
256
+ * switch (event.type) {
257
+ * case 'loaded':
258
+ * console.log('광고 로드 성공', event.data);
259
+ * break;
260
+ *
261
+ * case 'clicked':
262
+ * console.log('광고 클릭');
263
+ * break;
264
+ *
265
+ * case 'dismissed':
266
+ * console.log('광고 닫힘');
267
+ * break;
268
+ *
269
+ * case 'failedToShow':
270
+ * console.log('광고 보여주기 실패');
271
+ * break;
272
+ *
273
+ * case 'impression':
274
+ * console.log('광고 노출');
275
+ * break;
276
+ *
277
+ * case 'show':
278
+ * console.log('광고 컨텐츠 보여졌음');
279
+ * break;
280
+ *
281
+ * case 'userEarnedReward':
282
+ * console.log('사용자가 광고 시청을 완료했음');
283
+ * break;
284
+ * }
285
+ * },
286
+ * onError: (error) => {
287
+ * console.error('광고 불러오기 실패', error);
288
+ * },
289
+ * });
290
+ *
291
+ * return cleanup;
292
+ * }, []);
293
+ *
294
+ * return (
295
+ * <View>
296
+ * <Text>Page</Text>
297
+ * </View>
298
+ * );
299
+ * }
300
+ * ```
301
+ */
302
+ loadAdMobRewardedAd: Object.assign(createEventBridge("loadAdMobRewardedAd"), {
303
+ isSupported: createConstantBridge2("loadAdMobRewardedAd_isSupported")
304
+ }),
305
+ /**
306
+ * @public
307
+ * @category 광고
308
+ * @name showAdMobRewardedAd
309
+ * @description 사용자가 광고를 끝까지 보면 리워드를 받을 수 있도록, 보상형 광고를 화면에 보여줘요. 이 함수는 `loadAdMobRewardedAd` 로 미리 불러온 광고를 실제로 사용자에게 노출해요.
310
+ * @param {ShowAdMobRewardedAdParams} params 광고를 보여주기 위해 사용할 설정 값이에요. 광고 ID와 광고의 동작에 대한 콜백을 설정할 수 있어요.
311
+ * @param {ShowAdMobRewardedAdOptions} params.options 광고를 보여줄 때 전달할 옵션 객체예요.
312
+ * @param {string} params.options.adUnitId 광고 단위 ID예요. `loadAdMobRewardedAd` 로 불러온 보상형 광고용 ID를 입력해요.
313
+ * @param {(event: ShowAdMobRewardedAdEvent) => void} [params.onEvent] 광고 관련 이벤트가 발생했을 때 호출돼요. (예시: 광고 노출을 요청했을 때). 자세한 이벤트 타입은 [ShowAdMobRewardedAdEvent](/react-native/reference/framework/광고/ShowAdMobRewardedAdEvent.html)를 참고하세요.
314
+ * @param {(reason: unknown) => void} [params.onError] 광고를 불러오지 못했을 때 호출돼요. (예시: 네트워크 오류나 지원하지 않는 환경일 때)
315
+ * @property {() => boolean} [isSupported] 현재 실행 중인 앱(예: 토스 앱, 개발용 샌드박스 앱 등)에서 Google AdMob 광고 기능을 지원하는지 확인하는 함수예요. 기능을 사용하기 전에 지원 여부를 확인해야 해요.
316
+ *
317
+ * @example
318
+ * ### 버튼 눌러 불러온 보상형 광고 보여주기
319
+ * ```tsx
320
+ * import { GoogleAdMob } from '@apps-in-toss/framework';
321
+ * import { View, Text, Button } from 'react-native';
322
+ *
323
+ * const AD_UNIT_ID = '<YOUR_AD_UNIT_ID>';
324
+ *
325
+ * function Page() {
326
+ * const handlePress = () => {
327
+ * if (GoogleAdMob.showAdMobRewardedAd.isSupported() !== true) {
328
+ * return;
329
+ * }
330
+ *
331
+ * GoogleAdMob.showAdMobRewardedAd({
332
+ * options: {
333
+ * adUnitId: AD_UNIT_ID,
334
+ * },
335
+ * onEvent: (event) => {
336
+ * switch (event.type) {
337
+ * case 'requested':
338
+ * console.log('광고 보여주기 요청 완료');
339
+ * break;
340
+ * }
341
+ * },
342
+ * onError: (error) => {
343
+ * console.error('광고 보여주기 실패', error);
344
+ * },
345
+ * });
346
+ * }
347
+ *
348
+ * return (
349
+ * <Button onPress={handlePress} title="광고 보기" />
350
+ * );
351
+ * }
352
+ * ```
353
+ */
354
+ showAdMobRewardedAd: Object.assign(createEventBridge("showAdMobRewardedAd"), {
355
+ isSupported: createConstantBridge2("showAdMobRewardedAd_isSupported")
356
+ })
357
+ };
358
+
359
+ // src/bedrockEvent.ts
360
+ import { createEventBridge as createEventBridge2 } from "@apps-in-toss/bridge-core";
361
+ var bedrockEvent = {
362
+ addEventListener: (event, {
363
+ onEvent,
364
+ onError,
365
+ options
366
+ }) => createEventBridge2(event)({
367
+ onEvent,
368
+ onError: onError ?? (() => {
369
+ }),
370
+ options
371
+ })
372
+ };
373
+
374
+ // src/isMinVersionSupported.ts
375
+ import { createConstantBridge as createConstantBridge3 } from "@apps-in-toss/bridge-core";
376
+
377
+ // src/utils/compareVersion.ts
378
+ var SEMVER_REGEX = /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\\-]+(?:\.[\da-z\\-]+)*))?(?:\+[\da-z\\-]+(?:\.[\da-z\\-]+)*)?)?)?$/i;
379
+ var isWildcard = (val) => ["*", "x", "X"].includes(val);
380
+ var tryParse = (val) => {
381
+ const num = parseInt(val, 10);
382
+ return isNaN(num) ? val : num;
383
+ };
384
+ var coerceTypes = (a, b) => {
385
+ return typeof a === typeof b ? [a, b] : [String(a), String(b)];
386
+ };
387
+ var compareValues = (a, b) => {
388
+ if (isWildcard(a) || isWildcard(b)) {
389
+ return 0;
390
+ }
391
+ const [aVal, bVal] = coerceTypes(tryParse(a), tryParse(b));
392
+ if (aVal > bVal) {
393
+ return 1;
394
+ }
395
+ if (aVal < bVal) {
396
+ return -1;
397
+ }
398
+ return 0;
399
+ };
400
+ var parseVersion = (version) => {
401
+ if (typeof version !== "string") {
402
+ throw new TypeError("Invalid argument: expected a string");
403
+ }
404
+ const match = version.match(SEMVER_REGEX);
405
+ if (!match) {
406
+ throw new Error(`Invalid semver: '${version}'`);
407
+ }
408
+ const [, major, minor, patch, build, preRelease] = match;
409
+ return [major, minor, patch, build, preRelease];
410
+ };
411
+ var compareSegments = (a, b) => {
412
+ const maxLength = Math.max(a.length, b.length);
413
+ for (let i = 0; i < maxLength; i++) {
414
+ const segA = a[i] ?? "0";
415
+ const segB = b[i] ?? "0";
416
+ const result = compareValues(segA, segB);
417
+ if (result !== 0) {
418
+ return result;
419
+ }
420
+ }
421
+ return 0;
422
+ };
423
+ var compareVersions = (v1, v2) => {
424
+ const seg1 = parseVersion(v1);
425
+ const seg2 = parseVersion(v2);
426
+ const preRelease1 = seg1.pop();
427
+ const preRelease2 = seg2.pop();
428
+ const mainCompare = compareSegments(seg1, seg2);
429
+ if (mainCompare !== 0) {
430
+ return mainCompare;
431
+ }
432
+ if (preRelease1 && preRelease2) {
433
+ return compareSegments(preRelease1.split("."), preRelease2.split("."));
434
+ }
435
+ if (preRelease1) {
436
+ return -1;
437
+ }
438
+ if (preRelease2) {
439
+ return 1;
440
+ }
441
+ return 0;
442
+ };
443
+
444
+ // src/isMinVersionSupported.ts
445
+ function isMinVersionSupported(minVersions) {
446
+ const operationalEnvironment = createConstantBridge3("getOperationalEnvironment")();
447
+ if (operationalEnvironment === "sandbox") {
448
+ return true;
449
+ }
450
+ const currentVersion = createConstantBridge3("getTossAppVersion")();
451
+ const isIOS = createConstantBridge3("getPlatformOS")() === "ios";
452
+ const minVersion = isIOS ? minVersions.ios : minVersions.android;
453
+ if (minVersion === void 0) {
454
+ return false;
455
+ }
456
+ if (minVersion === "always") {
457
+ return true;
458
+ }
459
+ if (minVersion === "never") {
460
+ return false;
461
+ }
462
+ return compareVersions(currentVersion, minVersion) >= 0;
463
+ }
464
+
465
+ // src/appsInTossEvent.ts
466
+ import { createEventBridge as createEventBridge3 } from "@apps-in-toss/bridge-core";
467
+ var appsInTossEvent = {
468
+ addEventListener: (event, {
469
+ onEvent,
470
+ onError,
471
+ options
472
+ }) => createEventBridge3(event)({
473
+ onEvent,
474
+ onError: onError ?? (() => {
475
+ }),
476
+ options
477
+ })
478
+ };
479
+
480
+ // src/env.ts
481
+ import { createConstantBridge as createConstantBridge4 } from "@apps-in-toss/bridge-core";
482
+ var env = {
483
+ getDeploymentId: createConstantBridge4("getDeploymentId")
484
+ };
485
+ export {
486
+ GoogleAdMob,
487
+ Storage,
488
+ appsInTossEvent,
489
+ bedrockEvent,
490
+ env,
491
+ getSafeAreaInsets,
492
+ isMinVersionSupported
493
+ };
@@ -0,0 +1,78 @@
1
+ /**
2
+ * 사진 조회 결과를 나타내는 타입이에요.
3
+ */
4
+ export interface ImageResponse {
5
+ /** 가져온 사진의 고유 ID예요. */
6
+ id: string;
7
+ /** 사진의 데이터 URI예요. `base64` 옵션이 `true`인 경우 Base64 문자열로 반환돼요. */
8
+ dataUri: string;
9
+ }
10
+ export interface OpenCameraOptions {
11
+ /**
12
+ * 이미지를 Base64 형식으로 반환할지 여부를 나타내는 불리언 값이에요.
13
+ *
14
+ * 기본값: `false`.
15
+ */
16
+ base64?: boolean;
17
+ /**
18
+ * 이미지의 최대 너비를 나타내는 숫자 값이에요.
19
+ *
20
+ * 기본값: `1024`.
21
+ */
22
+ maxWidth?: number;
23
+ }
24
+ /**
25
+ * @public
26
+ * @category 카메라
27
+ * @name openCamera
28
+ * @description 카메라를 실행해서 촬영된 이미지를 반환하는 함수예요.
29
+ * @param {OpenCameraOptions} options - 카메라 실행 시 사용되는 옵션 객체예요.
30
+ * @param {boolean} [options.base64=false] - 이미지를 Base64 형식으로 반환할지 여부를 나타내는 불리언 값이에요. 기본값은 `false`예요. `true`로 설정하면 `dataUri` 대신 Base64 인코딩된 문자열을 반환해요.
31
+ * @param {number} [options.maxWidth=1024] - 이미지의 최대 너비를 나타내는 숫자 값이에요. 기본값은 `1024`예요.
32
+ * @returns {Promise<ImageResponse>}
33
+ * 촬영된 이미지 정보를 포함한 객체를 반환해요. 반환 객체의 구성은 다음과 같아요:
34
+ * - `id`: 이미지의 고유 식별자예요.
35
+ * - `dataUri`: 이미지 데이터를 표현하는 데이터 URI예요.
36
+ *
37
+ * @example
38
+ * ### 카메라 실행 후 촬영된 사진 가져오기
39
+ *
40
+ * ```tsx
41
+ * import React, { useState } from 'react';
42
+ *
43
+ * import { openCamera } from '@apps-in-toss/web-framework';
44
+ *
45
+ * const base64 = true;
46
+ *
47
+ * // 카메라를 실행하고 촬영된 이미지를 화면에 표시하는 컴포넌트
48
+ * function Camera() {
49
+ * const [image, setImage] = useState(null);
50
+ *
51
+ * const handlePress = async () => {
52
+ * try {
53
+ * const response = await openCamera({ base64 });
54
+ * setImage(response);
55
+ * } catch (error) {
56
+ * console.error('사진을 가져오는 데 실패했어요:', error);
57
+ * }
58
+ * };
59
+ *
60
+ * // base64 형식으로 반환된 이미지를 표시하려면 데이터 URL 스키마 Prefix를 붙여야해요.
61
+ * const imageUri = base64 ? 'data:image/jpeg;base64,' + image.dataUri : image.dataUri;
62
+ *
63
+ * return (
64
+ * <div>
65
+ * {image ? (
66
+ * <Image source={{ uri: imageUri }} style={{ width: 200, height: 200 }} />
67
+ * ) : (
68
+ * <span>사진이 없어요</span>
69
+ * )}
70
+ * <input type="button" value="사진 촬영하기" onClick={handlePress} />
71
+ * </div>
72
+ * );
73
+ * }
74
+ * ```
75
+ */
76
+ export declare function openCamera(options?: OpenCameraOptions): Promise<ImageResponse>;
77
+
78
+ export {};
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @public
3
+ * @kind function
4
+ * @category 화면 이동
5
+ *
6
+ * @name openURL
7
+ * @signature
8
+ * ```typescript
9
+ * function openURL(url: string): Promise<any>;
10
+ * ```
11
+ *
12
+ * @description
13
+ * 지정된 URL을 기기의 기본 브라우저나 관련 앱에서 열어요.
14
+ * 이 함수는 `react-native`의 [`Linking.openURL`](https://reactnative.dev/docs/0.72/linking#openurl) 메서드를 사용하여 URL을 열어요.
15
+ *
16
+ * @param {string} url 열고자 하는 URL 주소
17
+ * @returns {Promise<any>} URL이 성공적으로 열렸을 때 해결되는 Promise
18
+ *
19
+ * @example
20
+ *
21
+ * ### 외부 URL 열기
22
+ *
23
+ * ```tsx
24
+ * import { openURL } from '@apps-in-toss/web-framework';
25
+ *
26
+ *
27
+ * function Page() {
28
+ * const handlePress = () => {
29
+ * openURL('https://google.com');
30
+ * };
31
+ *
32
+ * return <input type="button" value="구글 웹사이트 열기" onClick={handlePress} />;
33
+ * }
34
+ * ```
35
+ */
36
+ export declare function openURL(url: string): Promise<any>;
37
+
38
+ export {};
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @public
3
+ * @category 클립보드
4
+ * @name setClipboardText
5
+ * @description 텍스트를 클립보드에 복사해서 사용자가 다른 곳에 붙여 넣기 할 수 있어요.
6
+ * @param {Promise<void>} text - 클립보드에 복사할 텍스트예요. 문자열 형식으로 입력해요.
7
+ *
8
+ * @example
9
+ * ### 텍스트를 클립보드에 복사하기
10
+ *
11
+ * ```tsx
12
+ *
13
+ * import { setClipboardText } from '@apps-in-toss/web-framework';
14
+ *
15
+ * // '복사' 버튼을 누르면 "복사할 텍스트"가 클립보드에 복사돼요.
16
+ * function CopyButton() {
17
+ * const handleCopy = async () => {
18
+ * try {
19
+ * await setClipboardText('복사할 텍스트');
20
+ * console.log('텍스트가 복사됐어요!');
21
+ * } catch (error) {
22
+ * console.error('텍스트 복사에 실패했어요:', error);
23
+ * }
24
+ * };
25
+ *
26
+ * return <input type="button" value="복사" onClick={handleCopy} />;
27
+ * }
28
+ * ```
29
+ */
30
+ export declare function setClipboardText(text: string): Promise<void>;
31
+
32
+ export {};
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @public
3
+ * @category 화면 제어
4
+ * @name setIosSwipeGestureEnabled
5
+ * @description
6
+ * `setIosSwipeGestureEnabled` 함수는 iOS에서 화면을 스와이프하여 뒤로가기 기능을 활성화하거나 비활성화할 수 있어요.
7
+ *
8
+ * @param {object} options 스와이프하여 뒤로가기 기능을 활성화하거나 비활성화하는 옵션이에요.
9
+ * @param {boolean} options.isEnabled 화면을 스와이프하여 뒤로가기 기능을 활성화하거나 비활성화할 수 있어요. `true`를 설정하면 스와이프로 뒤로갈 수 있고, `false`를 설정하면 스와이프 뒤로가기 기능이 비활성화돼요.
10
+ *
11
+ * @returns {void}
12
+ *
13
+ * @example
14
+ *
15
+ * ### iOS에서 화면 스와이프로 뒤로가기 기능을 활성화하거나 비활성화하기
16
+ *
17
+ * **스와이프 끄기** 버튼을 눌러 화면 스와이프로 뒤로가기 기능을 비활성화하거나, **스와이프 켜기** 버튼을 눌러 화면 스와이프로 뒤로가기 기능을 활성화할 수 있어요.
18
+ *
19
+ *
20
+ * ```tsx
21
+ * import { setIosSwipeGestureEnabled } from '@apps-in-toss/web-framework';
22
+ *
23
+ *
24
+ * function Page() {
25
+ * return (
26
+ * <>
27
+ * <input type="button" value="스와이프 끄기" onClick={() => setIosSwipeGestureEnabled({ isEnabled: false })} />
28
+ * <input type="button" value="스와이프 켜기" onClick={() => setIosSwipeGestureEnabled({ isEnabled: true })} />
29
+ * </>
30
+ * );
31
+ * }
32
+ * ```
33
+ *
34
+ */
35
+ export declare function setIosSwipeGestureEnabled(options: {
36
+ isEnabled: boolean;
37
+ }): Promise<void>;
38
+
39
+ export {};