minip-bridge 1.0.2 → 1.0.4

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/README.md CHANGED
@@ -25,11 +25,9 @@ navigateTo({page: "index.html", title: "title"})
25
25
 
26
26
  ```html
27
27
  <script type="module">
28
- import(
29
- "https://cdn.jsdelivr.net/gh/yosorable/minip-bridge@main/dist/index.mjs"
30
- ).then((minip) => {
31
- console.log(minip);
32
- console.log(minip.navigateTo);
33
- });
28
+ import * as minip from "https://cdn.jsdelivr.net/gh/yosorable/minip-bridge@main/dist/index.mjs";
29
+
30
+ console.log(minip);
31
+ console.log(minip.navigateTo);
34
32
  </script>
35
33
  ```
package/dist/index.d.mts CHANGED
@@ -28,6 +28,23 @@ interface AlertConfig {
28
28
  preferredStyle?: "alert" | "actionSheet";
29
29
  actions: AlertAction[];
30
30
  }
31
+ interface SingleColumnPickerConfig {
32
+ index: number;
33
+ column: string[];
34
+ }
35
+ interface MultipleColumnsPickerConfig {
36
+ index: number[];
37
+ columns: string[][];
38
+ }
39
+ /**
40
+ * @param dateFormat datetime format string, like: "yyyy-MM-dd", "HH:mm"
41
+ */
42
+ interface DateAndTimePickerConfig {
43
+ start?: string;
44
+ end?: string;
45
+ value?: string;
46
+ dateFormat: string;
47
+ }
31
48
 
32
49
  interface MRequestBase {
33
50
  /**
@@ -129,6 +146,9 @@ declare function hideHUD(): Promise<MResponse>;
129
146
  declare function showAlert(config: AlertConfig): Promise<MResponseWithData<string>>;
130
147
  declare function previewImage(url: string): Promise<MResponse>;
131
148
  declare function previewVideo(url: string): Promise<MResponse>;
149
+ declare function showPicker(type: "singleColumn", data: SingleColumnPickerConfig): Promise<MResponseWithData<number | null | undefined>>;
150
+ declare function showPicker(type: "multipleColumns", data: MultipleColumnsPickerConfig): Promise<MResponseWithData<number[] | null | undefined>>;
151
+ declare function showPicker(type: "date" | "time", data: DateAndTimePickerConfig): Promise<MResponseWithData<string | null | undefined>>;
132
152
 
133
153
  declare function getKVStorage(key: string): Promise<MResponseWithData<string>>;
134
154
  declare function setKVStorage(key: string, value: string): Promise<MResponse>;
@@ -160,4 +180,4 @@ declare global {
160
180
  }
161
181
  }
162
182
 
163
- export { type AlertAction, type AlertConfig, type AppInfo, type HUDType, type MRequest, type MRequestBase, type MRequestWithData, type MResponse, MResponseStatusCode, type MResponseWithData, type ShowHUDRequest, clearKVStorage, clearKVStorageSync, closeApp, deleteKVStorage, deleteKVStorageSync, disablePullDownRefresh, enablePullDownRefresh, getClipboardData, getInstalledAppList, getKVStorage, getKVStorageSync, hideHUD, installApp, navigateBack, navigateTo, onPullDownRefresh, openWebsite, previewImage, previewVideo, redirectTo, setClipboardData, setKVStorage, setKVStorageSync, setNavigationBarColor, setNavigationBarTitle, showAlert, showAppDetail, showHUD, startPullDownRefresh, stopPullDownRefresh, vibrate };
183
+ export { type AlertAction, type AlertConfig, type AppInfo, type DateAndTimePickerConfig, type HUDType, type MRequest, type MRequestBase, type MRequestWithData, type MResponse, MResponseStatusCode, type MResponseWithData, type MultipleColumnsPickerConfig, type ShowHUDRequest, type SingleColumnPickerConfig, clearKVStorage, clearKVStorageSync, closeApp, deleteKVStorage, deleteKVStorageSync, disablePullDownRefresh, enablePullDownRefresh, getClipboardData, getInstalledAppList, getKVStorage, getKVStorageSync, hideHUD, installApp, navigateBack, navigateTo, onPullDownRefresh, openWebsite, previewImage, previewVideo, redirectTo, setClipboardData, setKVStorage, setKVStorageSync, setNavigationBarColor, setNavigationBarTitle, showAlert, showAppDetail, showHUD, showPicker, startPullDownRefresh, stopPullDownRefresh, vibrate };
package/dist/index.mjs CHANGED
@@ -171,6 +171,12 @@ function previewVideo(url) {
171
171
  }
172
172
  });
173
173
  }
174
+ function showPicker(type, data) {
175
+ return bridge_default.callNative({
176
+ api: "showPicker",
177
+ data: { type, data }
178
+ });
179
+ }
174
180
 
175
181
  // src/api/kvstorage.ts
176
182
  function getKVStorage(key) {
@@ -272,6 +278,7 @@ export {
272
278
  showAlert,
273
279
  showAppDetail,
274
280
  showHUD,
281
+ showPicker,
275
282
  startPullDownRefresh,
276
283
  stopPullDownRefresh,
277
284
  vibrate
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/model/response/index.ts","../src/bridge/index.ts","../src/api/route.ts","../src/api/app.ts","../src/api/ui.ts","../src/api/kvstorage.ts","../src/api/device.ts"],"sourcesContent":["export enum MResponseStatusCode {\r\n SUCCESS = 0,\r\n FAILED = 7,\r\n}\r\n\r\nexport interface MResponse {\r\n /**\r\n * Integer, 0 for succeeded, other for failed.\r\n * Auto reject in promise when failed.\r\n */\r\n code: MResponseStatusCode;\r\n /**\r\n * Error msg or other info.\r\n */\r\n msg?: string;\r\n}\r\n\r\nexport interface MResponseWithData<T> extends MResponse {\r\n data: T;\r\n}\r\n","import { MResponseStatusCode } from \"../model\";\r\nimport { MRequest } from \"../model/request\";\r\n\r\ninterface Callable {\r\n postMessage: (data: string) => Promise<string>;\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n webkit?: {\r\n messageHandlers?: {\r\n MinipNativeInteraction?: Callable;\r\n };\r\n };\r\n }\r\n}\r\n\r\nlet jsBridge: {\r\n callNative: <T>(req?: MRequest<T>) => Promise<any>;\r\n callNativeSync: <T>(req?: MRequest<T>) => any;\r\n};\r\n\r\n// iOS\r\nif (\r\n window.webkit &&\r\n window.webkit.messageHandlers &&\r\n window.webkit.messageHandlers.MinipNativeInteraction\r\n) {\r\n const _callNative = window.webkit.messageHandlers.MinipNativeInteraction;\r\n jsBridge = {\r\n callNative(req) {\r\n return _callNative\r\n .postMessage(JSON.stringify(req))\r\n .then((res) => JSON.parse(res))\r\n .then((res) => {\r\n if (res.code === MResponseStatusCode.SUCCESS) {\r\n return res;\r\n } else {\r\n throw new Error(res.msg ?? \"Unknown error, res: \");\r\n }\r\n });\r\n },\r\n callNativeSync(req) {\r\n const res = prompt(JSON.stringify(req));\r\n if (res) {\r\n return JSON.parse(res);\r\n }\r\n return {\r\n code: MResponseStatusCode.FAILED,\r\n msg: \"Unknown error\",\r\n };\r\n },\r\n };\r\n} else {\r\n // error\r\n jsBridge = {\r\n callNative() {\r\n return new Promise((_, reject) => {\r\n reject(\"Cannot find JavaScript Bridge!!!\");\r\n });\r\n },\r\n callNativeSync() {\r\n return {\r\n code: MResponseStatusCode.FAILED,\r\n msg: \"Cannot find JavaScript Bridge!!!\",\r\n };\r\n },\r\n };\r\n}\r\n\r\nexport default jsBridge;\r\n","import jsBridge from \"../bridge\";\r\nimport { MResponse } from \"../model\";\r\n\r\nexport function navigateTo(data: {\r\n page: string;\r\n title?: string;\r\n}): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"navigateTo\",\r\n data: data,\r\n });\r\n}\r\n\r\nexport function navigateBack(delta: number = 1): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"navigateBack\",\r\n data: {\r\n delta,\r\n },\r\n });\r\n}\r\n\r\nexport function redirectTo(data: {\r\n page: string;\r\n title?: string;\r\n}): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"redirectTo\",\r\n data: data,\r\n });\r\n}\r\n\r\nexport function openWebsite(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"openWebsite\",\r\n data: { url },\r\n });\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport { AppInfo, MResponse, MResponseWithData } from \"../model\";\r\n\r\nexport function closeApp(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"closeApp\",\r\n });\r\n}\r\n\r\nexport function showAppDetail(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"showAppDetail\",\r\n });\r\n}\r\n\r\nexport function installApp(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"installApp\",\r\n data: {\r\n url,\r\n },\r\n });\r\n}\r\n\r\nexport function getInstalledAppList(): Promise<MResponseWithData<AppInfo[]>> {\r\n return jsBridge.callNative({\r\n api: \"getInstalledAppList\",\r\n });\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport {\r\n AlertConfig,\r\n MResponse,\r\n MResponseWithData,\r\n ShowHUDRequest,\r\n} from \"../model\";\r\n\r\n// navigation bar\r\n\r\nexport function setNavigationBarTitle(title: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"setNavigationBarTitle\",\r\n data: {\r\n title,\r\n },\r\n });\r\n}\r\n\r\nexport function setNavigationBarColor(config: {\r\n foregroundColor: string;\r\n backgroundColor: string;\r\n}): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"setNavigationBarColor\",\r\n data: config,\r\n });\r\n}\r\n\r\n// pulldown refresh\r\n\r\nexport function enablePullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"enablePullDownRefresh\",\r\n });\r\n}\r\n\r\nexport function disablePullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"disablePullDownRefresh\",\r\n });\r\n}\r\n\r\nexport function onPullDownRefresh(callback: (e: Event) => any) {\r\n window.addEventListener(\"pulldownrefresh\", callback);\r\n}\r\n\r\nexport function startPullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"startPullDownRefresh\",\r\n });\r\n}\r\n\r\nexport function stopPullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"stopPullDownRefresh\",\r\n });\r\n}\r\n\r\n// HUD\r\n\r\nexport function showHUD(req: ShowHUDRequest): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"showHUD\",\r\n data: req,\r\n });\r\n}\r\n\r\nexport function hideHUD(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"hideHUD\",\r\n });\r\n}\r\n\r\n// alert\r\nexport function showAlert(\r\n config: AlertConfig,\r\n): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"showAlert\",\r\n data: config,\r\n });\r\n}\r\n\r\n// media\r\nexport function previewImage(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"previewImage\",\r\n data: {\r\n url,\r\n },\r\n });\r\n}\r\n\r\nexport function previewVideo(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"previewVideo\",\r\n data: {\r\n url,\r\n },\r\n });\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport { MResponse, MResponseWithData } from \"../model\";\r\n\r\n// async methods\r\n\r\nexport function getKVStorage(key: string): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"getKVStorage\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function setKVStorage(key: string, value: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"setKVStorage\",\r\n data: { key, value },\r\n });\r\n}\r\n\r\nexport function deleteKVStorage(key: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"deleteKVStorage\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function clearKVStorage(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"clearKVStorage\",\r\n });\r\n}\r\n\r\n// sync methods\r\n\r\nexport function getKVStorageSync(key: string): MResponseWithData<string> {\r\n return jsBridge.callNativeSync({\r\n api: \"getKVStorageSync\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function setKVStorageSync(key: string, value: string): MResponse {\r\n return jsBridge.callNativeSync({\r\n api: \"setKVStorageSync\",\r\n data: { key, value },\r\n });\r\n}\r\n\r\nexport function deleteKVStorageSync(key: string): MResponse {\r\n return jsBridge.callNativeSync({\r\n api: \"deleteKVStorageSync\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function clearKVStorageSync(): MResponse {\r\n return jsBridge.callNativeSync({\r\n api: \"clearKVStorageSync\",\r\n });\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport { MResponse, MResponseWithData } from \"../model\";\r\n\r\n/**\r\n *\r\n * @param type medium as default\r\n */\r\nexport function vibrate(\r\n type?: \"light\" | \"medium\" | \"heavy\",\r\n): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"vibrate\",\r\n data: {\r\n type,\r\n },\r\n });\r\n}\r\n\r\nexport function getClipboardData(): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"getClipboardData\",\r\n });\r\n}\r\n\r\nexport function setClipboardData(\r\n data: string,\r\n): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"setClipboardData\",\r\n data: {\r\n data,\r\n },\r\n });\r\n}\r\n"],"mappings":"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","names":["MResponseStatusCode"]}
1
+ {"version":3,"sources":["../src/model/response/index.ts","../src/bridge/index.ts","../src/api/route.ts","../src/api/app.ts","../src/api/ui.ts","../src/api/kvstorage.ts","../src/api/device.ts"],"sourcesContent":["export enum MResponseStatusCode {\r\n SUCCESS = 0,\r\n FAILED = 7,\r\n}\r\n\r\nexport interface MResponse {\r\n /**\r\n * Integer, 0 for succeeded, other for failed.\r\n * Auto reject in promise when failed.\r\n */\r\n code: MResponseStatusCode;\r\n /**\r\n * Error msg or other info.\r\n */\r\n msg?: string;\r\n}\r\n\r\nexport interface MResponseWithData<T> extends MResponse {\r\n data: T;\r\n}\r\n","import { MResponseStatusCode } from \"../model\";\r\nimport { MRequest } from \"../model/request\";\r\n\r\ninterface Callable {\r\n postMessage: (data: string) => Promise<string>;\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n webkit?: {\r\n messageHandlers?: {\r\n MinipNativeInteraction?: Callable;\r\n };\r\n };\r\n }\r\n}\r\n\r\nlet jsBridge: {\r\n callNative: <T>(req?: MRequest<T>) => Promise<any>;\r\n callNativeSync: <T>(req?: MRequest<T>) => any;\r\n};\r\n\r\n// iOS\r\nif (\r\n window.webkit &&\r\n window.webkit.messageHandlers &&\r\n window.webkit.messageHandlers.MinipNativeInteraction\r\n) {\r\n const _callNative = window.webkit.messageHandlers.MinipNativeInteraction;\r\n jsBridge = {\r\n callNative(req) {\r\n return _callNative\r\n .postMessage(JSON.stringify(req))\r\n .then((res) => JSON.parse(res))\r\n .then((res) => {\r\n if (res.code === MResponseStatusCode.SUCCESS) {\r\n return res;\r\n } else {\r\n throw new Error(res.msg ?? \"Unknown error, res: \");\r\n }\r\n });\r\n },\r\n callNativeSync(req) {\r\n const res = prompt(JSON.stringify(req));\r\n if (res) {\r\n return JSON.parse(res);\r\n }\r\n return {\r\n code: MResponseStatusCode.FAILED,\r\n msg: \"Unknown error\",\r\n };\r\n },\r\n };\r\n} else {\r\n // error\r\n jsBridge = {\r\n callNative() {\r\n return new Promise((_, reject) => {\r\n reject(\"Cannot find JavaScript Bridge!!!\");\r\n });\r\n },\r\n callNativeSync() {\r\n return {\r\n code: MResponseStatusCode.FAILED,\r\n msg: \"Cannot find JavaScript Bridge!!!\",\r\n };\r\n },\r\n };\r\n}\r\n\r\nexport default jsBridge;\r\n","import jsBridge from \"../bridge\";\r\nimport { MResponse } from \"../model\";\r\n\r\nexport function navigateTo(data: {\r\n page: string;\r\n title?: string;\r\n}): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"navigateTo\",\r\n data: data,\r\n });\r\n}\r\n\r\nexport function navigateBack(delta: number = 1): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"navigateBack\",\r\n data: {\r\n delta,\r\n },\r\n });\r\n}\r\n\r\nexport function redirectTo(data: {\r\n page: string;\r\n title?: string;\r\n}): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"redirectTo\",\r\n data: data,\r\n });\r\n}\r\n\r\nexport function openWebsite(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"openWebsite\",\r\n data: { url },\r\n });\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport { AppInfo, MResponse, MResponseWithData } from \"../model\";\r\n\r\nexport function closeApp(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"closeApp\",\r\n });\r\n}\r\n\r\nexport function showAppDetail(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"showAppDetail\",\r\n });\r\n}\r\n\r\nexport function installApp(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"installApp\",\r\n data: {\r\n url,\r\n },\r\n });\r\n}\r\n\r\nexport function getInstalledAppList(): Promise<MResponseWithData<AppInfo[]>> {\r\n return jsBridge.callNative({\r\n api: \"getInstalledAppList\",\r\n });\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport {\r\n AlertConfig,\r\n DateAndTimePickerConfig,\r\n MResponse,\r\n MResponseWithData,\r\n MultipleColumnsPickerConfig,\r\n ShowHUDRequest,\r\n SingleColumnPickerConfig,\r\n} from \"../model\";\r\n\r\n// navigation bar\r\n\r\nexport function setNavigationBarTitle(title: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"setNavigationBarTitle\",\r\n data: {\r\n title,\r\n },\r\n });\r\n}\r\n\r\nexport function setNavigationBarColor(config: {\r\n foregroundColor: string;\r\n backgroundColor: string;\r\n}): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"setNavigationBarColor\",\r\n data: config,\r\n });\r\n}\r\n\r\n// pulldown refresh\r\n\r\nexport function enablePullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"enablePullDownRefresh\",\r\n });\r\n}\r\n\r\nexport function disablePullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"disablePullDownRefresh\",\r\n });\r\n}\r\n\r\nexport function onPullDownRefresh(callback: (e: Event) => any) {\r\n window.addEventListener(\"pulldownrefresh\", callback);\r\n}\r\n\r\nexport function startPullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"startPullDownRefresh\",\r\n });\r\n}\r\n\r\nexport function stopPullDownRefresh(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"stopPullDownRefresh\",\r\n });\r\n}\r\n\r\n// HUD\r\n\r\nexport function showHUD(req: ShowHUDRequest): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"showHUD\",\r\n data: req,\r\n });\r\n}\r\n\r\nexport function hideHUD(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"hideHUD\",\r\n });\r\n}\r\n\r\n// alert\r\nexport function showAlert(\r\n config: AlertConfig,\r\n): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"showAlert\",\r\n data: config,\r\n });\r\n}\r\n\r\n// media\r\nexport function previewImage(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"previewImage\",\r\n data: {\r\n url,\r\n },\r\n });\r\n}\r\n\r\nexport function previewVideo(url: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"previewVideo\",\r\n data: {\r\n url,\r\n },\r\n });\r\n}\r\n\r\n// picker\r\nexport function showPicker(\r\n type: \"singleColumn\",\r\n data: SingleColumnPickerConfig,\r\n): Promise<MResponseWithData<number | null | undefined>>;\r\nexport function showPicker(\r\n type: \"multipleColumns\",\r\n data: MultipleColumnsPickerConfig,\r\n): Promise<MResponseWithData<number[] | null | undefined>>;\r\nexport function showPicker(\r\n type: \"date\" | \"time\",\r\n data: DateAndTimePickerConfig,\r\n): Promise<MResponseWithData<string | null | undefined>>;\r\n\r\nexport function showPicker(\r\n type: \"singleColumn\" | \"multipleColumns\" | \"date\" | \"time\",\r\n data:\r\n | SingleColumnPickerConfig\r\n | MultipleColumnsPickerConfig\r\n | DateAndTimePickerConfig,\r\n): Promise<MResponseWithData<number | number[] | string | null | undefined>> {\r\n return jsBridge.callNative({\r\n api: \"showPicker\",\r\n data: { type, data },\r\n });\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport { MResponse, MResponseWithData } from \"../model\";\r\n\r\n// async methods\r\n\r\nexport function getKVStorage(key: string): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"getKVStorage\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function setKVStorage(key: string, value: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"setKVStorage\",\r\n data: { key, value },\r\n });\r\n}\r\n\r\nexport function deleteKVStorage(key: string): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"deleteKVStorage\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function clearKVStorage(): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"clearKVStorage\",\r\n });\r\n}\r\n\r\n// sync methods\r\n\r\nexport function getKVStorageSync(key: string): MResponseWithData<string> {\r\n return jsBridge.callNativeSync({\r\n api: \"getKVStorageSync\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function setKVStorageSync(key: string, value: string): MResponse {\r\n return jsBridge.callNativeSync({\r\n api: \"setKVStorageSync\",\r\n data: { key, value },\r\n });\r\n}\r\n\r\nexport function deleteKVStorageSync(key: string): MResponse {\r\n return jsBridge.callNativeSync({\r\n api: \"deleteKVStorageSync\",\r\n data: { key },\r\n });\r\n}\r\n\r\nexport function clearKVStorageSync(): MResponse {\r\n return jsBridge.callNativeSync({\r\n api: \"clearKVStorageSync\",\r\n });\r\n}\r\n","import jsBridge from \"../bridge\";\r\nimport { MResponse, MResponseWithData } from \"../model\";\r\n\r\n/**\r\n *\r\n * @param type medium as default\r\n */\r\nexport function vibrate(\r\n type?: \"light\" | \"medium\" | \"heavy\",\r\n): Promise<MResponse> {\r\n return jsBridge.callNative({\r\n api: \"vibrate\",\r\n data: {\r\n type,\r\n },\r\n });\r\n}\r\n\r\nexport function getClipboardData(): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"getClipboardData\",\r\n });\r\n}\r\n\r\nexport function setClipboardData(\r\n data: string,\r\n): Promise<MResponseWithData<string>> {\r\n return jsBridge.callNative({\r\n api: \"setClipboardData\",\r\n data: {\r\n data,\r\n },\r\n });\r\n}\r\n"],"mappings":"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","names":["MResponseStatusCode"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "minip-bridge",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "minip webview bridge",
5
5
  "main": "index.ts",
6
6
  "module": "./dist/index.mjs",
package/src/api/ui.ts CHANGED
@@ -1,9 +1,12 @@
1
1
  import jsBridge from "../bridge";
2
2
  import {
3
3
  AlertConfig,
4
+ DateAndTimePickerConfig,
4
5
  MResponse,
5
6
  MResponseWithData,
7
+ MultipleColumnsPickerConfig,
6
8
  ShowHUDRequest,
9
+ SingleColumnPickerConfig,
7
10
  } from "../model";
8
11
 
9
12
  // navigation bar
@@ -100,3 +103,30 @@ export function previewVideo(url: string): Promise<MResponse> {
100
103
  },
101
104
  });
102
105
  }
106
+
107
+ // picker
108
+ export function showPicker(
109
+ type: "singleColumn",
110
+ data: SingleColumnPickerConfig,
111
+ ): Promise<MResponseWithData<number | null | undefined>>;
112
+ export function showPicker(
113
+ type: "multipleColumns",
114
+ data: MultipleColumnsPickerConfig,
115
+ ): Promise<MResponseWithData<number[] | null | undefined>>;
116
+ export function showPicker(
117
+ type: "date" | "time",
118
+ data: DateAndTimePickerConfig,
119
+ ): Promise<MResponseWithData<string | null | undefined>>;
120
+
121
+ export function showPicker(
122
+ type: "singleColumn" | "multipleColumns" | "date" | "time",
123
+ data:
124
+ | SingleColumnPickerConfig
125
+ | MultipleColumnsPickerConfig
126
+ | DateAndTimePickerConfig,
127
+ ): Promise<MResponseWithData<number | number[] | string | null | undefined>> {
128
+ return jsBridge.callNative({
129
+ api: "showPicker",
130
+ data: { type, data },
131
+ });
132
+ }
@@ -30,3 +30,23 @@ export interface AlertConfig {
30
30
  preferredStyle?: "alert" | "actionSheet";
31
31
  actions: AlertAction[];
32
32
  }
33
+
34
+ export interface SingleColumnPickerConfig {
35
+ index: number;
36
+ column: string[];
37
+ }
38
+
39
+ export interface MultipleColumnsPickerConfig {
40
+ index: number[];
41
+ columns: string[][];
42
+ }
43
+
44
+ /**
45
+ * @param dateFormat datetime format string, like: "yyyy-MM-dd", "HH:mm"
46
+ */
47
+ export interface DateAndTimePickerConfig {
48
+ start?: string;
49
+ end?: string;
50
+ value?: string;
51
+ dateFormat: string;
52
+ }