@lichens-innovation/react-native-common 3.10.0 → 3.11.1

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.
Files changed (547) hide show
  1. package/README.md +35 -0
  2. package/dist/index.d.ts +1860 -9
  3. package/dist/index.js +4666 -9
  4. package/dist/index.js.map +1 -1
  5. package/dist/rjsf.d.ts +125 -0
  6. package/dist/rjsf.js +1484 -0
  7. package/dist/rjsf.js.map +1 -0
  8. package/package.json +45 -8
  9. package/dist/components/battery/battery-level.d.ts +0 -9
  10. package/dist/components/battery/battery-level.js +0 -9
  11. package/dist/components/battery/battery-level.js.map +0 -1
  12. package/dist/components/battery/battery.utils.d.ts +0 -2
  13. package/dist/components/battery/battery.utils.js +0 -24
  14. package/dist/components/battery/battery.utils.js.map +0 -1
  15. package/dist/components/battery/index.d.ts +0 -2
  16. package/dist/components/battery/index.js +0 -3
  17. package/dist/components/battery/index.js.map +0 -1
  18. package/dist/components/bottom-sheet/bottom-sheet.constants.d.ts +0 -1
  19. package/dist/components/bottom-sheet/bottom-sheet.constants.js +0 -2
  20. package/dist/components/bottom-sheet/bottom-sheet.constants.js.map +0 -1
  21. package/dist/components/bottom-sheet/default-backdrop.d.ts +0 -3
  22. package/dist/components/bottom-sheet/default-backdrop.js +0 -4
  23. package/dist/components/bottom-sheet/default-backdrop.js.map +0 -1
  24. package/dist/components/bottom-sheet/default-backdrop.windows.d.ts +0 -2
  25. package/dist/components/bottom-sheet/default-backdrop.windows.js +0 -3
  26. package/dist/components/bottom-sheet/default-backdrop.windows.js.map +0 -1
  27. package/dist/components/bottom-sheet/default-sheet-background.d.ts +0 -3
  28. package/dist/components/bottom-sheet/default-sheet-background.js +0 -8
  29. package/dist/components/bottom-sheet/default-sheet-background.js.map +0 -1
  30. package/dist/components/bottom-sheet/index.d.ts +0 -4
  31. package/dist/components/bottom-sheet/index.js +0 -5
  32. package/dist/components/bottom-sheet/index.js.map +0 -1
  33. package/dist/components/bottom-sheet/use-bottom-sheet-toggler.d.ts +0 -7
  34. package/dist/components/bottom-sheet/use-bottom-sheet-toggler.js +0 -39
  35. package/dist/components/bottom-sheet/use-bottom-sheet-toggler.js.map +0 -1
  36. package/dist/components/code-scanner/barcode-scanner-dialog.d.ts +0 -11
  37. package/dist/components/code-scanner/barcode-scanner-dialog.js +0 -32
  38. package/dist/components/code-scanner/barcode-scanner-dialog.js.map +0 -1
  39. package/dist/components/code-scanner/barcode-scanner.d.ts +0 -7
  40. package/dist/components/code-scanner/barcode-scanner.js +0 -34
  41. package/dist/components/code-scanner/barcode-scanner.js.map +0 -1
  42. package/dist/components/code-scanner/barcode-scanner.utils.d.ts +0 -4
  43. package/dist/components/code-scanner/barcode-scanner.utils.js +0 -38
  44. package/dist/components/code-scanner/barcode-scanner.utils.js.map +0 -1
  45. package/dist/components/code-scanner/index.d.ts +0 -3
  46. package/dist/components/code-scanner/index.js +0 -4
  47. package/dist/components/code-scanner/index.js.map +0 -1
  48. package/dist/components/dialogs/dialog-close-only.d.ts +0 -12
  49. package/dist/components/dialogs/dialog-close-only.js +0 -39
  50. package/dist/components/dialogs/dialog-close-only.js.map +0 -1
  51. package/dist/components/dialogs/dialog-ok-cancel.d.ts +0 -13
  52. package/dist/components/dialogs/dialog-ok-cancel.js +0 -44
  53. package/dist/components/dialogs/dialog-ok-cancel.js.map +0 -1
  54. package/dist/components/dialogs/dialog-single-textinput.d.ts +0 -16
  55. package/dist/components/dialogs/dialog-single-textinput.js +0 -59
  56. package/dist/components/dialogs/dialog-single-textinput.js.map +0 -1
  57. package/dist/components/dialogs/dialog-syntax-color-result.d.ts +0 -14
  58. package/dist/components/dialogs/dialog-syntax-color-result.js +0 -47
  59. package/dist/components/dialogs/dialog-syntax-color-result.js.map +0 -1
  60. package/dist/components/dialogs/index.d.ts +0 -5
  61. package/dist/components/dialogs/index.js +0 -6
  62. package/dist/components/dialogs/index.js.map +0 -1
  63. package/dist/components/dialogs/use-dialog-styles.d.ts +0 -4
  64. package/dist/components/dialogs/use-dialog-styles.js +0 -13
  65. package/dist/components/dialogs/use-dialog-styles.js.map +0 -1
  66. package/dist/components/drop-down-selector/drop-down-selector-item.d.ts +0 -8
  67. package/dist/components/drop-down-selector/drop-down-selector-item.js +0 -24
  68. package/dist/components/drop-down-selector/drop-down-selector-item.js.map +0 -1
  69. package/dist/components/drop-down-selector/drop-down-selector-left-icon.d.ts +0 -7
  70. package/dist/components/drop-down-selector/drop-down-selector-left-icon.js +0 -9
  71. package/dist/components/drop-down-selector/drop-down-selector-left-icon.js.map +0 -1
  72. package/dist/components/drop-down-selector/drop-down-selector.d.ts +0 -17
  73. package/dist/components/drop-down-selector/drop-down-selector.js +0 -60
  74. package/dist/components/drop-down-selector/drop-down-selector.js.map +0 -1
  75. package/dist/components/drop-down-selector/drop-down-selector.utils.d.ts +0 -22
  76. package/dist/components/drop-down-selector/drop-down-selector.utils.js +0 -37
  77. package/dist/components/drop-down-selector/drop-down-selector.utils.js.map +0 -1
  78. package/dist/components/drop-down-selector/drop-down-selector.windows.d.ts +0 -2
  79. package/dist/components/drop-down-selector/drop-down-selector.windows.js +0 -3
  80. package/dist/components/drop-down-selector/drop-down-selector.windows.js.map +0 -1
  81. package/dist/components/drop-down-selector/index.d.ts +0 -1
  82. package/dist/components/drop-down-selector/index.js +0 -2
  83. package/dist/components/drop-down-selector/index.js.map +0 -1
  84. package/dist/components/error/error-boundary-screen.d.ts +0 -2
  85. package/dist/components/error/error-boundary-screen.js +0 -35
  86. package/dist/components/error/error-boundary-screen.js.map +0 -1
  87. package/dist/components/error/error-boundary-screen.windows.d.ts +0 -2
  88. package/dist/components/error/error-boundary-screen.windows.js +0 -3
  89. package/dist/components/error/error-boundary-screen.windows.js.map +0 -1
  90. package/dist/components/error/error-boundary.d.ts +0 -3
  91. package/dist/components/error/error-boundary.js +0 -27
  92. package/dist/components/error/error-boundary.js.map +0 -1
  93. package/dist/components/error/error-boundary.windows.d.ts +0 -2
  94. package/dist/components/error/error-boundary.windows.js +0 -3
  95. package/dist/components/error/error-boundary.windows.js.map +0 -1
  96. package/dist/components/error/error-details.d.ts +0 -7
  97. package/dist/components/error/error-details.js +0 -32
  98. package/dist/components/error/error-details.js.map +0 -1
  99. package/dist/components/error/index.d.ts +0 -4
  100. package/dist/components/error/index.js +0 -5
  101. package/dist/components/error/index.js.map +0 -1
  102. package/dist/components/error/use-error-details.d.ts +0 -7
  103. package/dist/components/error/use-error-details.js +0 -19
  104. package/dist/components/error/use-error-details.js.map +0 -1
  105. package/dist/components/event-logs/event-logs-screen.d.ts +0 -2
  106. package/dist/components/event-logs/event-logs-screen.js +0 -63
  107. package/dist/components/event-logs/event-logs-screen.js.map +0 -1
  108. package/dist/components/event-logs/index.d.ts +0 -2
  109. package/dist/components/event-logs/index.js +0 -3
  110. package/dist/components/event-logs/index.js.map +0 -1
  111. package/dist/components/event-logs/live-logs-viewer/index.d.ts +0 -6
  112. package/dist/components/event-logs/live-logs-viewer/index.js +0 -7
  113. package/dist/components/event-logs/live-logs-viewer/index.js.map +0 -1
  114. package/dist/components/event-logs/live-logs-viewer/log-entry-item-suffix.d.ts +0 -7
  115. package/dist/components/event-logs/live-logs-viewer/log-entry-item-suffix.js +0 -6
  116. package/dist/components/event-logs/live-logs-viewer/log-entry-item-suffix.js.map +0 -1
  117. package/dist/components/event-logs/live-logs-viewer/log-entry-item.d.ts +0 -7
  118. package/dist/components/event-logs/live-logs-viewer/log-entry-item.js +0 -35
  119. package/dist/components/event-logs/live-logs-viewer/log-entry-item.js.map +0 -1
  120. package/dist/components/event-logs/live-logs-viewer/logs-viewer.d.ts +0 -7
  121. package/dist/components/event-logs/live-logs-viewer/logs-viewer.js +0 -44
  122. package/dist/components/event-logs/live-logs-viewer/logs-viewer.js.map +0 -1
  123. package/dist/components/event-logs/live-logs-viewer/logs-viewer.utils.d.ts +0 -1
  124. package/dist/components/event-logs/live-logs-viewer/logs-viewer.utils.js +0 -6
  125. package/dist/components/event-logs/live-logs-viewer/logs-viewer.utils.js.map +0 -1
  126. package/dist/components/event-logs/live-logs-viewer/use-auto-scroll.d.ts +0 -7
  127. package/dist/components/event-logs/live-logs-viewer/use-auto-scroll.js +0 -20
  128. package/dist/components/event-logs/live-logs-viewer/use-auto-scroll.js.map +0 -1
  129. package/dist/components/event-logs/live-logs-viewer/use-logs-actions.d.ts +0 -6
  130. package/dist/components/event-logs/live-logs-viewer/use-logs-actions.js +0 -24
  131. package/dist/components/event-logs/live-logs-viewer/use-logs-actions.js.map +0 -1
  132. package/dist/components/header-actions/header-back-button.d.ts +0 -2
  133. package/dist/components/header-actions/header-back-button.js +0 -5
  134. package/dist/components/header-actions/header-back-button.js.map +0 -1
  135. package/dist/components/header-actions/header-back-button.windows.d.ts +0 -2
  136. package/dist/components/header-actions/header-back-button.windows.js +0 -3
  137. package/dist/components/header-actions/header-back-button.windows.js.map +0 -1
  138. package/dist/components/header-actions/header-button.d.ts +0 -7
  139. package/dist/components/header-actions/header-button.js +0 -18
  140. package/dist/components/header-actions/header-button.js.map +0 -1
  141. package/dist/components/header-actions/index.d.ts +0 -2
  142. package/dist/components/header-actions/index.js +0 -3
  143. package/dist/components/header-actions/index.js.map +0 -1
  144. package/dist/components/index.d.ts +0 -19
  145. package/dist/components/index.js +0 -20
  146. package/dist/components/index.js.map +0 -1
  147. package/dist/components/language-selector/index.d.ts +0 -4
  148. package/dist/components/language-selector/index.js +0 -5
  149. package/dist/components/language-selector/index.js.map +0 -1
  150. package/dist/components/language-selector/language-selector-menu.d.ts +0 -3
  151. package/dist/components/language-selector/language-selector-menu.js +0 -13
  152. package/dist/components/language-selector/language-selector-menu.js.map +0 -1
  153. package/dist/components/language-selector/language-selector-segmented.d.ts +0 -3
  154. package/dist/components/language-selector/language-selector-segmented.js +0 -9
  155. package/dist/components/language-selector/language-selector-segmented.js.map +0 -1
  156. package/dist/components/language-selector/language-selector.d.ts +0 -3
  157. package/dist/components/language-selector/language-selector.js +0 -10
  158. package/dist/components/language-selector/language-selector.js.map +0 -1
  159. package/dist/components/language-selector/language-selector.types.d.ts +0 -9
  160. package/dist/components/language-selector/language-selector.types.js +0 -1
  161. package/dist/components/language-selector/language-selector.types.js.map +0 -1
  162. package/dist/components/layout/full-centered.d.ts +0 -7
  163. package/dist/components/layout/full-centered.js +0 -4
  164. package/dist/components/layout/full-centered.js.map +0 -1
  165. package/dist/components/layout/index.d.ts +0 -4
  166. package/dist/components/layout/index.js +0 -5
  167. package/dist/components/layout/index.js.map +0 -1
  168. package/dist/components/layout/orientation-aware-tabs/index.d.ts +0 -2
  169. package/dist/components/layout/orientation-aware-tabs/index.js +0 -3
  170. package/dist/components/layout/orientation-aware-tabs/index.js.map +0 -1
  171. package/dist/components/layout/orientation-aware-tabs/orientation-aware-tab-button.d.ts +0 -9
  172. package/dist/components/layout/orientation-aware-tabs/orientation-aware-tab-button.js +0 -40
  173. package/dist/components/layout/orientation-aware-tabs/orientation-aware-tab-button.js.map +0 -1
  174. package/dist/components/layout/orientation-aware-tabs/orientation-aware-tabs-layout.d.ts +0 -15
  175. package/dist/components/layout/orientation-aware-tabs/orientation-aware-tabs-layout.js +0 -40
  176. package/dist/components/layout/orientation-aware-tabs/orientation-aware-tabs-layout.js.map +0 -1
  177. package/dist/components/layout/resizable/horizontal-resizable-split-view.d.ts +0 -3
  178. package/dist/components/layout/resizable/horizontal-resizable-split-view.js +0 -80
  179. package/dist/components/layout/resizable/horizontal-resizable-split-view.js.map +0 -1
  180. package/dist/components/layout/resizable/horizontal-resizable-split-view.types.d.ts +0 -20
  181. package/dist/components/layout/resizable/horizontal-resizable-split-view.types.js +0 -1
  182. package/dist/components/layout/resizable/horizontal-resizable-split-view.types.js.map +0 -1
  183. package/dist/components/layout/resizable/horizontal-resizable-split-view.utils.d.ts +0 -2
  184. package/dist/components/layout/resizable/horizontal-resizable-split-view.utils.js +0 -23
  185. package/dist/components/layout/resizable/horizontal-resizable-split-view.utils.js.map +0 -1
  186. package/dist/components/layout/resizable/index.d.ts +0 -6
  187. package/dist/components/layout/resizable/index.js +0 -7
  188. package/dist/components/layout/resizable/index.js.map +0 -1
  189. package/dist/components/layout/resizable/resizable-overlay-view.d.ts +0 -3
  190. package/dist/components/layout/resizable/resizable-overlay-view.js +0 -132
  191. package/dist/components/layout/resizable/resizable-overlay-view.js.map +0 -1
  192. package/dist/components/layout/resizable/resizable-overlay-view.utils.d.ts +0 -16
  193. package/dist/components/layout/resizable/resizable-overlay-view.utils.js +0 -19
  194. package/dist/components/layout/resizable/resizable-overlay-view.utils.js.map +0 -1
  195. package/dist/components/layout/resizable/vertical-resizable-overlay-view.types.d.ts +0 -28
  196. package/dist/components/layout/resizable/vertical-resizable-overlay-view.types.js +0 -1
  197. package/dist/components/layout/resizable/vertical-resizable-overlay-view.types.js.map +0 -1
  198. package/dist/components/layout/resizable/vertical-resizable-overlay-view.utils.d.ts +0 -2
  199. package/dist/components/layout/resizable/vertical-resizable-overlay-view.utils.js +0 -31
  200. package/dist/components/layout/resizable/vertical-resizable-overlay-view.utils.js.map +0 -1
  201. package/dist/components/layout/resizable/vertical-resizable-split-view.d.ts +0 -3
  202. package/dist/components/layout/resizable/vertical-resizable-split-view.js +0 -79
  203. package/dist/components/layout/resizable/vertical-resizable-split-view.js.map +0 -1
  204. package/dist/components/layout/resizable/vertical-resizable-split-view.types.d.ts +0 -20
  205. package/dist/components/layout/resizable/vertical-resizable-split-view.types.js +0 -1
  206. package/dist/components/layout/resizable/vertical-resizable-split-view.types.js.map +0 -1
  207. package/dist/components/layout/resizable/vertical-resizable-split-view.utils.d.ts +0 -2
  208. package/dist/components/layout/resizable/vertical-resizable-split-view.utils.js +0 -23
  209. package/dist/components/layout/resizable/vertical-resizable-split-view.utils.js.map +0 -1
  210. package/dist/components/layout/safe-container.d.ts +0 -8
  211. package/dist/components/layout/safe-container.js +0 -18
  212. package/dist/components/layout/safe-container.js.map +0 -1
  213. package/dist/components/layout/safe-container.windows.d.ts +0 -8
  214. package/dist/components/layout/safe-container.windows.js +0 -16
  215. package/dist/components/layout/safe-container.windows.js.map +0 -1
  216. package/dist/components/lists/index.d.ts +0 -2
  217. package/dist/components/lists/index.js +0 -3
  218. package/dist/components/lists/index.js.map +0 -1
  219. package/dist/components/lists/list-header.d.ts +0 -5
  220. package/dist/components/lists/list-header.js +0 -17
  221. package/dist/components/lists/list-header.js.map +0 -1
  222. package/dist/components/lists/list-items-separator.d.ts +0 -2
  223. package/dist/components/lists/list-items-separator.js +0 -17
  224. package/dist/components/lists/list-items-separator.js.map +0 -1
  225. package/dist/components/on-off-toggle/index.d.ts +0 -1
  226. package/dist/components/on-off-toggle/index.js +0 -2
  227. package/dist/components/on-off-toggle/index.js.map +0 -1
  228. package/dist/components/on-off-toggle/on-off-toggle.d.ts +0 -9
  229. package/dist/components/on-off-toggle/on-off-toggle.js +0 -27
  230. package/dist/components/on-off-toggle/on-off-toggle.js.map +0 -1
  231. package/dist/components/password-input/index.d.ts +0 -1
  232. package/dist/components/password-input/index.js +0 -2
  233. package/dist/components/password-input/index.js.map +0 -1
  234. package/dist/components/password-input/password-input.d.ts +0 -4
  235. package/dist/components/password-input/password-input.js +0 -27
  236. package/dist/components/password-input/password-input.js.map +0 -1
  237. package/dist/components/score-indicator/index.d.ts +0 -1
  238. package/dist/components/score-indicator/index.js +0 -2
  239. package/dist/components/score-indicator/index.js.map +0 -1
  240. package/dist/components/score-indicator/score-indicator.d.ts +0 -6
  241. package/dist/components/score-indicator/score-indicator.js +0 -31
  242. package/dist/components/score-indicator/score-indicator.js.map +0 -1
  243. package/dist/components/snack-bar/index.d.ts +0 -2
  244. package/dist/components/snack-bar/index.js +0 -3
  245. package/dist/components/snack-bar/index.js.map +0 -1
  246. package/dist/components/snack-bar/snackbar-provider.d.ts +0 -8
  247. package/dist/components/snack-bar/snackbar-provider.js +0 -31
  248. package/dist/components/snack-bar/snackbar-provider.js.map +0 -1
  249. package/dist/components/snack-bar/snackbar.constants.d.ts +0 -5
  250. package/dist/components/snack-bar/snackbar.constants.js +0 -6
  251. package/dist/components/snack-bar/snackbar.constants.js.map +0 -1
  252. package/dist/components/spinner/activity-progress-bar-stats.d.ts +0 -8
  253. package/dist/components/spinner/activity-progress-bar-stats.js +0 -27
  254. package/dist/components/spinner/activity-progress-bar-stats.js.map +0 -1
  255. package/dist/components/spinner/activity-progress-bar.d.ts +0 -10
  256. package/dist/components/spinner/activity-progress-bar.js +0 -21
  257. package/dist/components/spinner/activity-progress-bar.js.map +0 -1
  258. package/dist/components/spinner/activity-progress.utils.d.ts +0 -10
  259. package/dist/components/spinner/activity-progress.utils.js +0 -20
  260. package/dist/components/spinner/activity-progress.utils.js.map +0 -1
  261. package/dist/components/spinner/full-centered-spinner.d.ts +0 -2
  262. package/dist/components/spinner/full-centered-spinner.js +0 -5
  263. package/dist/components/spinner/full-centered-spinner.js.map +0 -1
  264. package/dist/components/spinner/index.d.ts +0 -5
  265. package/dist/components/spinner/index.js +0 -6
  266. package/dist/components/spinner/index.js.map +0 -1
  267. package/dist/components/spinner/modal-spinner.d.ts +0 -9
  268. package/dist/components/spinner/modal-spinner.js +0 -34
  269. package/dist/components/spinner/modal-spinner.js.map +0 -1
  270. package/dist/components/syntax/index.d.ts +0 -4
  271. package/dist/components/syntax/index.js +0 -5
  272. package/dist/components/syntax/index.js.map +0 -1
  273. package/dist/components/syntax/styles/dark.d.ts +0 -92
  274. package/dist/components/syntax/styles/dark.js +0 -92
  275. package/dist/components/syntax/styles/dark.js.map +0 -1
  276. package/dist/components/syntax/styles/index.d.ts +0 -2
  277. package/dist/components/syntax/styles/index.js +0 -3
  278. package/dist/components/syntax/styles/index.js.map +0 -1
  279. package/dist/components/syntax/styles/light.d.ts +0 -110
  280. package/dist/components/syntax/styles/light.js +0 -110
  281. package/dist/components/syntax/styles/light.js.map +0 -1
  282. package/dist/components/syntax/syntax-coloring-tag-code.d.ts +0 -9
  283. package/dist/components/syntax/syntax-coloring-tag-code.js +0 -27
  284. package/dist/components/syntax/syntax-coloring-tag-code.js.map +0 -1
  285. package/dist/components/syntax/syntax-coloring-tag-pre.d.ts +0 -9
  286. package/dist/components/syntax/syntax-coloring-tag-pre.js +0 -18
  287. package/dist/components/syntax/syntax-coloring-tag-pre.js.map +0 -1
  288. package/dist/components/syntax/syntax-coloring.d.ts +0 -8
  289. package/dist/components/syntax/syntax-coloring.js +0 -25
  290. package/dist/components/syntax/syntax-coloring.js.map +0 -1
  291. package/dist/components/tab-bar-icon.d.ts +0 -14
  292. package/dist/components/tab-bar-icon.js +0 -12
  293. package/dist/components/tab-bar-icon.js.map +0 -1
  294. package/dist/components/voice-recognition/index.d.ts +0 -2
  295. package/dist/components/voice-recognition/index.js +0 -3
  296. package/dist/components/voice-recognition/index.js.map +0 -1
  297. package/dist/components/voice-recognition/voice-recognition-text-input.d.ts +0 -10
  298. package/dist/components/voice-recognition/voice-recognition-text-input.js +0 -104
  299. package/dist/components/voice-recognition/voice-recognition-text-input.js.map +0 -1
  300. package/dist/components/voice-recognition/voice-recognition.utils.d.ts +0 -7
  301. package/dist/components/voice-recognition/voice-recognition.utils.js +0 -24
  302. package/dist/components/voice-recognition/voice-recognition.utils.js.map +0 -1
  303. package/dist/config/env.config.d.ts +0 -2
  304. package/dist/config/env.config.js +0 -4
  305. package/dist/config/env.config.js.map +0 -1
  306. package/dist/config/index.d.ts +0 -1
  307. package/dist/config/index.js +0 -2
  308. package/dist/config/index.js.map +0 -1
  309. package/dist/hooks/camera-image-picker/camera-image-picker.utils.d.ts +0 -4
  310. package/dist/hooks/camera-image-picker/camera-image-picker.utils.js +0 -16
  311. package/dist/hooks/camera-image-picker/camera-image-picker.utils.js.map +0 -1
  312. package/dist/hooks/camera-image-picker/index.d.ts +0 -2
  313. package/dist/hooks/camera-image-picker/index.js +0 -3
  314. package/dist/hooks/camera-image-picker/index.js.map +0 -1
  315. package/dist/hooks/camera-image-picker/use-camera-image-picker.d.ts +0 -5
  316. package/dist/hooks/camera-image-picker/use-camera-image-picker.js +0 -53
  317. package/dist/hooks/camera-image-picker/use-camera-image-picker.js.map +0 -1
  318. package/dist/hooks/index.d.ts +0 -9
  319. package/dist/hooks/index.js +0 -10
  320. package/dist/hooks/index.js.map +0 -1
  321. package/dist/hooks/use-animate-on-focus.windows.d.ts +0 -1
  322. package/dist/hooks/use-animate-on-focus.windows.js +0 -5
  323. package/dist/hooks/use-animate-on-focus.windows.js.map +0 -1
  324. package/dist/hooks/use-image-picker.d.ts +0 -11
  325. package/dist/hooks/use-image-picker.js +0 -35
  326. package/dist/hooks/use-image-picker.js.map +0 -1
  327. package/dist/hooks/use-image-picker.windows.d.ts +0 -1
  328. package/dist/hooks/use-image-picker.windows.js +0 -5
  329. package/dist/hooks/use-image-picker.windows.js.map +0 -1
  330. package/dist/hooks/use-invalidate-queries-on-focus.d.ts +0 -2
  331. package/dist/hooks/use-invalidate-queries-on-focus.js +0 -11
  332. package/dist/hooks/use-invalidate-queries-on-focus.js.map +0 -1
  333. package/dist/hooks/use-on-html-message.d.ts +0 -5
  334. package/dist/hooks/use-on-html-message.js +0 -30
  335. package/dist/hooks/use-on-html-message.js.map +0 -1
  336. package/dist/hooks/use-single-file-selector.d.ts +0 -17
  337. package/dist/hooks/use-single-file-selector.js +0 -32
  338. package/dist/hooks/use-single-file-selector.js.map +0 -1
  339. package/dist/hooks/use-single-file-selector.windows.d.ts +0 -1
  340. package/dist/hooks/use-single-file-selector.windows.js +0 -5
  341. package/dist/hooks/use-single-file-selector.windows.js.map +0 -1
  342. package/dist/hooks/use-timeout-state.d.ts +0 -1
  343. package/dist/hooks/use-timeout-state.js +0 -11
  344. package/dist/hooks/use-timeout-state.js.map +0 -1
  345. package/dist/hooks/use-timeout-toggle.d.ts +0 -1
  346. package/dist/hooks/use-timeout-toggle.js +0 -20
  347. package/dist/hooks/use-timeout-toggle.js.map +0 -1
  348. package/dist/hooks/use-updates.d.ts +0 -8
  349. package/dist/hooks/use-updates.js +0 -68
  350. package/dist/hooks/use-updates.js.map +0 -1
  351. package/dist/hooks/use-updates.windows.d.ts +0 -1
  352. package/dist/hooks/use-updates.windows.js +0 -5
  353. package/dist/hooks/use-updates.windows.js.map +0 -1
  354. package/dist/hooks/use-window-orientation.d.ts +0 -3
  355. package/dist/hooks/use-window-orientation.js +0 -10
  356. package/dist/hooks/use-window-orientation.js.map +0 -1
  357. package/dist/i18n/en/common.json +0 -188
  358. package/dist/i18n/fr/common.json +0 -188
  359. package/dist/i18n/i18n.d.ts +0 -17
  360. package/dist/i18n/i18n.js +0 -47
  361. package/dist/i18n/i18n.js.map +0 -1
  362. package/dist/i18n/i18n.utils.d.ts +0 -1
  363. package/dist/i18n/i18n.utils.js +0 -7
  364. package/dist/i18n/i18n.utils.js.map +0 -1
  365. package/dist/i18n/i18n.utils.windows.d.ts +0 -1
  366. package/dist/i18n/i18n.utils.windows.js +0 -6
  367. package/dist/i18n/i18n.utils.windows.js.map +0 -1
  368. package/dist/i18n/index.d.ts +0 -2
  369. package/dist/i18n/index.js +0 -3
  370. package/dist/i18n/index.js.map +0 -1
  371. package/dist/logger/index.d.ts +0 -4
  372. package/dist/logger/index.js +0 -5
  373. package/dist/logger/index.js.map +0 -1
  374. package/dist/logger/logger.d.ts +0 -17
  375. package/dist/logger/logger.js +0 -163
  376. package/dist/logger/logger.js.map +0 -1
  377. package/dist/logger/logger.types.d.ts +0 -25
  378. package/dist/logger/logger.types.js +0 -8
  379. package/dist/logger/logger.types.js.map +0 -1
  380. package/dist/logger/logger.utils.d.ts +0 -6
  381. package/dist/logger/logger.utils.js +0 -40
  382. package/dist/logger/logger.utils.js.map +0 -1
  383. package/dist/logger/logger.windows.d.ts +0 -18
  384. package/dist/logger/logger.windows.js +0 -65
  385. package/dist/logger/logger.windows.js.map +0 -1
  386. package/dist/logger/use-log-entry-color.d.ts +0 -1
  387. package/dist/logger/use-log-entry-color.js +0 -23
  388. package/dist/logger/use-log-entry-color.js.map +0 -1
  389. package/dist/services/device-finder/device-finder.d.ts +0 -31
  390. package/dist/services/device-finder/device-finder.js +0 -105
  391. package/dist/services/device-finder/device-finder.js.map +0 -1
  392. package/dist/services/device-finder/device-finder.types.d.ts +0 -8
  393. package/dist/services/device-finder/device-finder.types.js +0 -1
  394. package/dist/services/device-finder/device-finder.types.js.map +0 -1
  395. package/dist/services/device-finder/device-finder.windows.d.ts +0 -18
  396. package/dist/services/device-finder/device-finder.windows.js +0 -48
  397. package/dist/services/device-finder/device-finder.windows.js.map +0 -1
  398. package/dist/services/device-finder/index.d.ts +0 -2
  399. package/dist/services/device-finder/index.js +0 -3
  400. package/dist/services/device-finder/index.js.map +0 -1
  401. package/dist/services/files/index.d.ts +0 -2
  402. package/dist/services/files/index.js +0 -3
  403. package/dist/services/files/index.js.map +0 -1
  404. package/dist/services/files/native-file-system.d.ts +0 -15
  405. package/dist/services/files/native-file-system.js +0 -101
  406. package/dist/services/files/native-file-system.js.map +0 -1
  407. package/dist/services/files/native-file-system.types.d.ts +0 -38
  408. package/dist/services/files/native-file-system.types.js +0 -6
  409. package/dist/services/files/native-file-system.types.js.map +0 -1
  410. package/dist/services/files/native-file-system.windows.d.ts +0 -14
  411. package/dist/services/files/native-file-system.windows.js +0 -31
  412. package/dist/services/files/native-file-system.windows.js.map +0 -1
  413. package/dist/services/index.d.ts +0 -3
  414. package/dist/services/index.js +0 -4
  415. package/dist/services/index.js.map +0 -1
  416. package/dist/services/wifi/index.d.ts +0 -6
  417. package/dist/services/wifi/index.js +0 -7
  418. package/dist/services/wifi/index.js.map +0 -1
  419. package/dist/services/wifi/query-keys.d.ts +0 -10
  420. package/dist/services/wifi/query-keys.js +0 -11
  421. package/dist/services/wifi/query-keys.js.map +0 -1
  422. package/dist/services/wifi/use-wifi-info.d.ts +0 -472
  423. package/dist/services/wifi/use-wifi-info.js +0 -95
  424. package/dist/services/wifi/use-wifi-info.js.map +0 -1
  425. package/dist/services/wifi/wifi-info.types.d.ts +0 -22
  426. package/dist/services/wifi/wifi-info.types.js +0 -21
  427. package/dist/services/wifi/wifi-info.types.js.map +0 -1
  428. package/dist/services/wifi/wifi-info.utils.d.ts +0 -15
  429. package/dist/services/wifi/wifi-info.utils.js +0 -114
  430. package/dist/services/wifi/wifi-info.utils.js.map +0 -1
  431. package/dist/services/wifi/wifi-info.utils.simulator.d.ts +0 -3
  432. package/dist/services/wifi/wifi-info.utils.simulator.js +0 -23
  433. package/dist/services/wifi/wifi-info.utils.simulator.js.map +0 -1
  434. package/dist/services/wifi/wifi-info.utils.windows.d.ts +0 -2
  435. package/dist/services/wifi/wifi-info.utils.windows.js +0 -6
  436. package/dist/services/wifi/wifi-info.utils.windows.js.map +0 -1
  437. package/dist/services/wifi/wifi-infos-context.d.ts +0 -170
  438. package/dist/services/wifi/wifi-infos-context.js +0 -34
  439. package/dist/services/wifi/wifi-infos-context.js.map +0 -1
  440. package/dist/store/common-logs.store.d.ts +0 -13
  441. package/dist/store/common-logs.store.js +0 -32
  442. package/dist/store/common-logs.store.js.map +0 -1
  443. package/dist/store/common.store.d.ts +0 -12
  444. package/dist/store/common.store.js +0 -40
  445. package/dist/store/common.store.js.map +0 -1
  446. package/dist/store/index.d.ts +0 -3
  447. package/dist/store/index.js +0 -4
  448. package/dist/store/index.js.map +0 -1
  449. package/dist/store/react-query-provider.d.ts +0 -4
  450. package/dist/store/react-query-provider.js +0 -7
  451. package/dist/store/react-query-provider.js.map +0 -1
  452. package/dist/theme/dark-colors-scheme.d.ts +0 -42
  453. package/dist/theme/dark-colors-scheme.js +0 -44
  454. package/dist/theme/dark-colors-scheme.js.map +0 -1
  455. package/dist/theme/index.d.ts +0 -3
  456. package/dist/theme/index.js +0 -4
  457. package/dist/theme/index.js.map +0 -1
  458. package/dist/theme/light-colors-scheme.d.ts +0 -42
  459. package/dist/theme/light-colors-scheme.js +0 -44
  460. package/dist/theme/light-colors-scheme.js.map +0 -1
  461. package/dist/theme/theme.d.ts +0 -171
  462. package/dist/theme/theme.js +0 -27
  463. package/dist/theme/theme.js.map +0 -1
  464. package/dist/utils/alert.utils.d.ts +0 -1
  465. package/dist/utils/alert.utils.js +0 -12
  466. package/dist/utils/alert.utils.js.map +0 -1
  467. package/dist/utils/axios.config.d.ts +0 -2
  468. package/dist/utils/axios.config.js +0 -15
  469. package/dist/utils/axios.config.js.map +0 -1
  470. package/dist/utils/base64.utils.d.ts +0 -2
  471. package/dist/utils/base64.utils.js +0 -8
  472. package/dist/utils/base64.utils.js.map +0 -1
  473. package/dist/utils/clipboard.utils.d.ts +0 -1
  474. package/dist/utils/clipboard.utils.js +0 -12
  475. package/dist/utils/clipboard.utils.js.map +0 -1
  476. package/dist/utils/date.utils.d.ts +0 -3
  477. package/dist/utils/date.utils.js +0 -15
  478. package/dist/utils/date.utils.js.map +0 -1
  479. package/dist/utils/device.utils.d.ts +0 -4
  480. package/dist/utils/device.utils.js +0 -28
  481. package/dist/utils/device.utils.js.map +0 -1
  482. package/dist/utils/device.utils.windows.d.ts +0 -3
  483. package/dist/utils/device.utils.windows.js +0 -11
  484. package/dist/utils/device.utils.windows.js.map +0 -1
  485. package/dist/utils/digest-auth.d.ts +0 -32
  486. package/dist/utils/digest-auth.js +0 -157
  487. package/dist/utils/digest-auth.js.map +0 -1
  488. package/dist/utils/env.utils.d.ts +0 -5
  489. package/dist/utils/env.utils.js +0 -32
  490. package/dist/utils/env.utils.js.map +0 -1
  491. package/dist/utils/env.utils.windows.d.ts +0 -3
  492. package/dist/utils/env.utils.windows.js +0 -11
  493. package/dist/utils/env.utils.windows.js.map +0 -1
  494. package/dist/utils/errors.utils.d.ts +0 -6
  495. package/dist/utils/errors.utils.js +0 -9
  496. package/dist/utils/errors.utils.js.map +0 -1
  497. package/dist/utils/file-picker.utils.d.ts +0 -30
  498. package/dist/utils/file-picker.utils.js +0 -18
  499. package/dist/utils/file-picker.utils.js.map +0 -1
  500. package/dist/utils/file-picker.utils.windows.d.ts +0 -9
  501. package/dist/utils/file-picker.utils.windows.js +0 -6
  502. package/dist/utils/file-picker.utils.windows.js.map +0 -1
  503. package/dist/utils/file.utils.d.ts +0 -28
  504. package/dist/utils/file.utils.js +0 -105
  505. package/dist/utils/file.utils.js.map +0 -1
  506. package/dist/utils/filename.utils.d.ts +0 -40
  507. package/dist/utils/filename.utils.js +0 -129
  508. package/dist/utils/filename.utils.js.map +0 -1
  509. package/dist/utils/font.utils.d.ts +0 -1
  510. package/dist/utils/font.utils.js +0 -8
  511. package/dist/utils/font.utils.js.map +0 -1
  512. package/dist/utils/image.utils.d.ts +0 -1
  513. package/dist/utils/image.utils.js +0 -16
  514. package/dist/utils/image.utils.js.map +0 -1
  515. package/dist/utils/index.d.ts +0 -22
  516. package/dist/utils/index.js +0 -23
  517. package/dist/utils/index.js.map +0 -1
  518. package/dist/utils/licences.utils.d.ts +0 -16
  519. package/dist/utils/licences.utils.js +0 -19
  520. package/dist/utils/licences.utils.js.map +0 -1
  521. package/dist/utils/linking.utils.d.ts +0 -3
  522. package/dist/utils/linking.utils.js +0 -33
  523. package/dist/utils/linking.utils.js.map +0 -1
  524. package/dist/utils/network.utils.d.ts +0 -4
  525. package/dist/utils/network.utils.js +0 -41
  526. package/dist/utils/network.utils.js.map +0 -1
  527. package/dist/utils/platform.utils.d.ts +0 -1
  528. package/dist/utils/platform.utils.js +0 -6
  529. package/dist/utils/platform.utils.js.map +0 -1
  530. package/dist/utils/sharing.utils.d.ts +0 -9
  531. package/dist/utils/sharing.utils.js +0 -58
  532. package/dist/utils/sharing.utils.js.map +0 -1
  533. package/dist/utils/sharing.utils.windows.d.ts +0 -3
  534. package/dist/utils/sharing.utils.windows.js +0 -11
  535. package/dist/utils/sharing.utils.windows.js.map +0 -1
  536. package/dist/utils/sqlite.utils.d.ts +0 -10
  537. package/dist/utils/sqlite.utils.js +0 -36
  538. package/dist/utils/sqlite.utils.js.map +0 -1
  539. package/dist/utils/storage.d.ts +0 -10
  540. package/dist/utils/storage.js +0 -60
  541. package/dist/utils/storage.js.map +0 -1
  542. package/dist/utils/storage.windows.d.ts +0 -10
  543. package/dist/utils/storage.windows.js +0 -34
  544. package/dist/utils/storage.windows.js.map +0 -1
  545. package/dist/utils/webview.utils.d.ts +0 -9
  546. package/dist/utils/webview.utils.js +0 -18
  547. package/dist/utils/webview.utils.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"sources":["../node_modules/pretty-bytes/index.js","../src/components/battery/battery.utils.ts","../src/components/battery/battery-level.tsx","../src/components/bottom-sheet/bottom-sheet.constants.ts","../src/components/bottom-sheet/default-backdrop.tsx","../src/theme/dark-colors-scheme.ts","../src/theme/light-colors-scheme.ts","../src/theme/theme.ts","../src/components/bottom-sheet/default-sheet-background.tsx","../src/utils/storage.ts","../src/config/env.config.ts","../src/store/common-logs.store.ts","../src/utils/device.utils.ts","../src/utils/env.utils.ts","../src/logger/logger.types.ts","../src/logger/logger.ts","../src/components/bottom-sheet/use-bottom-sheet-toggler.ts","../src/components/dialogs/use-dialog-styles.tsx","../src/components/dialogs/dialog-close-only.tsx","../src/components/code-scanner/barcode-scanner.utils.ts","../src/components/code-scanner/barcode-scanner.tsx","../src/components/code-scanner/barcode-scanner-dialog.tsx","../src/components/dialogs/dialog-ok-cancel.tsx","../src/components/dialogs/dialog-single-textinput.tsx","../src/utils/clipboard.utils.ts","../src/components/snack-bar/snackbar.constants.ts","../src/components/snack-bar/snackbar-provider.tsx","../src/store/common.store.ts","../src/utils/font.utils.ts","../src/components/syntax/styles/dark.ts","../src/components/syntax/styles/light.ts","../src/components/syntax/syntax-coloring-tag-code.tsx","../src/components/syntax/syntax-coloring-tag-pre.tsx","../src/components/syntax/syntax-coloring.tsx","../src/components/dialogs/dialog-syntax-color-result.tsx","../src/components/drop-down-selector/drop-down-selector.utils.ts","../src/components/drop-down-selector/drop-down-selector-left-icon.tsx","../src/components/drop-down-selector/drop-down-selector-item.tsx","../src/components/drop-down-selector/drop-down-selector.tsx","../src/services/files/native-file-system.types.ts","../src/services/files/native-file-system.ts","../src/utils/file.utils.ts","../src/utils/sharing.utils.ts","../src/components/error/error-boundary-screen.tsx","../src/components/error/use-error-details.ts","../src/components/error/error-boundary.tsx","../src/components/error/error-details.tsx","../src/components/event-logs/event-logs-screen.tsx","../src/components/event-logs/live-logs-viewer/log-entry-item-suffix.tsx","../src/logger/use-log-entry-color.ts","../src/components/event-logs/live-logs-viewer/logs-viewer.utils.ts","../src/components/event-logs/live-logs-viewer/log-entry-item.tsx","../src/components/event-logs/live-logs-viewer/use-auto-scroll.ts","../src/components/event-logs/live-logs-viewer/use-logs-actions.ts","../src/components/event-logs/live-logs-viewer/logs-viewer.tsx","../src/components/header-actions/header-button.tsx","../src/components/header-actions/header-back-button.tsx","../src/components/language-selector/language-selector-menu.tsx","../src/components/language-selector/language-selector-segmented.tsx","../src/components/language-selector/language-selector.tsx","../src/components/layout/full-centered.tsx","../src/hooks/use-window-orientation.ts","../src/components/tab-bar-icon.tsx","../src/components/layout/orientation-aware-tabs/orientation-aware-tab-button.tsx","../src/components/layout/orientation-aware-tabs/orientation-aware-tabs-layout.tsx","../src/utils/alert.utils.ts","../src/logger/logger.utils.ts","../src/utils/axios.config.ts","../src/utils/base64.utils.ts","../src/utils/date.utils.ts","../src/utils/digest-auth.ts","../src/utils/errors.utils.ts","../src/utils/file-picker.utils.ts","../src/utils/filename.utils.ts","../src/utils/image.utils.ts","../src/utils/licences.utils.ts","../src/utils/linking.utils.ts","../src/utils/network.utils.ts","../src/utils/platform.utils.ts","../src/utils/sqlite.utils.ts","../src/utils/webview.utils.ts","../src/components/layout/resizable/horizontal-resizable-split-view.utils.ts","../src/components/layout/resizable/horizontal-resizable-split-view.tsx","../src/components/layout/resizable/resizable-overlay-view.utils.ts","../src/components/layout/resizable/vertical-resizable-overlay-view.utils.ts","../src/components/layout/resizable/resizable-overlay-view.tsx","../src/components/layout/resizable/vertical-resizable-split-view.utils.ts","../src/components/layout/resizable/vertical-resizable-split-view.tsx","../src/components/layout/safe-container.tsx","../src/components/lists/list-header.tsx","../src/components/lists/list-items-separator.tsx","../src/components/on-off-toggle/on-off-toggle.tsx","../src/components/password-input/password-input.tsx","../src/components/spinner/activity-progress.utils.ts","../src/components/spinner/activity-progress-bar-stats.tsx","../src/components/spinner/activity-progress-bar.tsx","../src/components/spinner/full-centered-spinner.tsx","../src/components/spinner/modal-spinner.tsx","../src/components/voice-recognition/voice-recognition.utils.ts","../src/components/voice-recognition/voice-recognition-text-input.tsx","../src/hooks/camera-image-picker/camera-image-picker.utils.ts","../src/hooks/camera-image-picker/use-camera-image-picker.ts","../src/hooks/use-image-picker.ts","../src/hooks/use-invalidate-queries-on-focus.ts","../src/hooks/use-on-html-message.ts","../src/hooks/use-single-file-selector.ts","../src/hooks/use-timeout-state.ts","../src/hooks/use-timeout-toggle.ts","../src/utils/env.utils.windows.ts","../src/hooks/use-updates.ts","../src/i18n/en/common.json","../src/i18n/fr/common.json","../src/i18n/i18n.utils.ts","../src/i18n/i18n.ts","../src/services/device-finder/device-finder.ts","../src/services/wifi/query-keys.ts","../src/services/wifi/wifi-info.types.ts","../src/services/wifi/wifi-info.utils.simulator.ts","../src/services/wifi/wifi-info.utils.ts","../src/services/wifi/use-wifi-info.ts","../src/store/react-query-provider.tsx","../src/services/wifi/wifi-infos-context.tsx"],"names":["exports","options","numberString","isNullish","getColorForPercentage","Icon","jsx","BottomSheetBackdrop","MD3DarkTheme","MD3LightTheme","adaptNavigationTheme","LightNavigationTheme","DarkNavigationTheme","useTheme","View","MMKV","makeAutoObservable","Device","Platform","Constants","Updates","LogBox","Paths","RNLogger","fileAsyncTransport","Sentry","sentryTransport","mapConsoleTransport","InteractionManager","FileSystemLegacy","File","Directory","useRef","useState","useEffect","BackHandler","useWindowDimensions","styles","useTranslation","Portal","jsxs","Dialog","Button","StyleSheet","i18next","Camera","useStyles","Fragment","CameraView","Text","TextInput","Clipboard","createContext","useContext","useCallback","duration","Snackbar","makePersistable","AppState","runInAction","ScrollView","observer","SyntaxHighlighter","Dropdown","value","EncodingType","Buffer","info","FileSystemLegacy2","getErrorMessage","hasScheme","SCHEME_PREFIXES","Sharing","useLocalSearchParams","Card","router","uuid","useRouter","Sentry2","useToggle","LegendList","format","filesize","List","props","IconButton","Pressable","useDebounce","Menu","SegmentedButtons","Tabs","TabSlot","TabList","TabTrigger","useSafeAreaInsets","Alert","axios","PeriodsInMS","bytesToHex","md5","utf8ToBytes","produce","DocumentPicker","Handlebars","formatInTimeZone","Linking","addEventListener","isAxiosError","AxiosError","isBlank","REGEX_IPV4","SQLite","nowAsDateTimeForFilename","useSharedValue","Gesture","useAnimatedStyle","withSpring","Animated","GestureDetector","DEFAULT_ANIMATION_CONFIG","validateResizableSplitViewProps","DRAG_HANDLE_HEIGHT","useIsFocused","SafeAreaView","FadeInUp","prettyBytes","stats","percentage","toFixed","ActivityIndicator","ProgressBar","isNotBlank","ExpoSpeechRecognitionModule","Keyboard","useSpeechRecognitionEvent","ImagePicker","DEFAULT_OPTIONS","ImagePicker2","ImagePicker3","Image","queryClient","useQueryClient","useFocusEffect","isProduction","checkForUpdateAsync","Updates2","sleep","useUpdates","nativeApplicationVersion","nativeBuildVersion","common_default","Localization","i18nextDefault","initReactI18next","Zeroconf","toError","WifiManager","Location","useQuery","useMutation","QueryClient","QueryClientProvider"],"mappings":"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","file":"index.js","sourcesContent":["'use strict';\n\nconst BYTE_UNITS = [\n\t'B',\n\t'kB',\n\t'MB',\n\t'GB',\n\t'TB',\n\t'PB',\n\t'EB',\n\t'ZB',\n\t'YB'\n];\n\nconst BIBYTE_UNITS = [\n\t'B',\n\t'kiB',\n\t'MiB',\n\t'GiB',\n\t'TiB',\n\t'PiB',\n\t'EiB',\n\t'ZiB',\n\t'YiB'\n];\n\nconst BIT_UNITS = [\n\t'b',\n\t'kbit',\n\t'Mbit',\n\t'Gbit',\n\t'Tbit',\n\t'Pbit',\n\t'Ebit',\n\t'Zbit',\n\t'Ybit'\n];\n\nconst BIBIT_UNITS = [\n\t'b',\n\t'kibit',\n\t'Mibit',\n\t'Gibit',\n\t'Tibit',\n\t'Pibit',\n\t'Eibit',\n\t'Zibit',\n\t'Yibit'\n];\n\n/*\nFormats the given number using `Number#toLocaleString`.\n- If locale is a string, the value is expected to be a locale-key (for example: `de`).\n- If locale is true, the system default locale is used for translation.\n- If no value for locale is specified, the number is returned unmodified.\n*/\nconst toLocaleString = (number, locale, options) => {\n\tlet result = number;\n\tif (typeof locale === 'string' || Array.isArray(locale)) {\n\t\tresult = number.toLocaleString(locale, options);\n\t} else if (locale === true || options !== undefined) {\n\t\tresult = number.toLocaleString(undefined, options);\n\t}\n\n\treturn result;\n};\n\nmodule.exports = (number, options) => {\n\tif (!Number.isFinite(number)) {\n\t\tthrow new TypeError(`Expected a finite number, got ${typeof number}: ${number}`);\n\t}\n\n\toptions = Object.assign({bits: false, binary: false}, options);\n\n\tconst UNITS = options.bits ?\n\t\t(options.binary ? BIBIT_UNITS : BIT_UNITS) :\n\t\t(options.binary ? BIBYTE_UNITS : BYTE_UNITS);\n\n\tif (options.signed && number === 0) {\n\t\treturn ` 0 ${UNITS[0]}`;\n\t}\n\n\tconst isNegative = number < 0;\n\tconst prefix = isNegative ? '-' : (options.signed ? '+' : '');\n\n\tif (isNegative) {\n\t\tnumber = -number;\n\t}\n\n\tlet localeOptions;\n\n\tif (options.minimumFractionDigits !== undefined) {\n\t\tlocaleOptions = {minimumFractionDigits: options.minimumFractionDigits};\n\t}\n\n\tif (options.maximumFractionDigits !== undefined) {\n\t\tlocaleOptions = Object.assign({maximumFractionDigits: options.maximumFractionDigits}, localeOptions);\n\t}\n\n\tif (number < 1) {\n\t\tconst numberString = toLocaleString(number, options.locale, localeOptions);\n\t\treturn prefix + numberString + ' ' + UNITS[0];\n\t}\n\n\tconst exponent = Math.min(Math.floor(options.binary ? Math.log(number) / Math.log(1024) : Math.log10(number) / 3), UNITS.length - 1);\n\t// eslint-disable-next-line unicorn/prefer-exponentiation-operator\n\tnumber /= Math.pow(options.binary ? 1024 : 1000, exponent);\n\n\tif (!localeOptions) {\n\t\tnumber = number.toPrecision(3);\n\t}\n\n\tconst numberString = toLocaleString(Number(number), options.locale, localeOptions);\n\n\tconst unit = UNITS[exponent];\n\n\treturn prefix + numberString + ' ' + unit;\n};\n","import { getColorForPercentage, isNullish } from '@lichens-innovation/ts-common';\n\nexport const getBatteryIcon = (level?: number | null) => {\n if (isNullish(level)) return 'battery-alert-variant-outline';\n\n if (level >= 90) return 'battery';\n if (level >= 75) return 'battery-60';\n if (level >= 60) return 'battery-50';\n if (level >= 45) return 'battery-40';\n if (level >= 30) return 'battery-30';\n if (level >= 15) return 'battery-20';\n if (level > 0) return 'battery-10';\n\n return 'battery-arrow-down-outline';\n};\n\nexport const getBatteryColor = (batteryLevel?: number | null) => {\n return isNullish(batteryLevel) ? 'gray' : getColorForPercentage(batteryLevel / 100);\n};\n","import React, { FunctionComponent } from 'react';\nimport { StyleProp, TextStyle } from 'react-native';\nimport { Icon } from 'react-native-paper';\nimport { getBatteryColor, getBatteryIcon } from './battery.utils';\n\ninterface BatteryLevelProps {\n batteryLevel?: number | null;\n size?: number;\n style?: StyleProp<TextStyle>;\n}\n\nexport const BatteryLevel: FunctionComponent<BatteryLevelProps> = ({ batteryLevel, size = 32 }) => {\n const batteryColor = getBatteryColor(batteryLevel);\n const batteryIcon = getBatteryIcon(batteryLevel);\n\n return <Icon source={batteryIcon} size={size} color={batteryColor} />;\n};\n","export const DEFAULT_SHEET_SNAP_POINTS = ['55%', '65%', '75%'];\n","import { BottomSheetBackdrop, type BottomSheetBackdropProps } from '@gorhom/bottom-sheet';\nimport { FunctionComponent } from 'react';\n\nexport const DefaultBackdrop: FunctionComponent<BottomSheetBackdropProps> = (props) => (\n <BottomSheetBackdrop disappearsOnIndex={-1} appearsOnIndex={0} {...props} />\n);\n","// Generated colors from https://callstack.github.io/react-native-paper/docs/guides/theming\nexport const DARK_COLORS_SCHEME = {\n primary: 'rgb(170, 212, 114)',\n onPrimary: 'rgb(32, 54, 0)',\n primaryContainer: 'rgb(49, 79, 0)',\n onPrimaryContainer: 'rgb(197, 240, 139)',\n secondary: 'rgb(185, 209, 101)',\n onSecondary: 'rgb(42, 53, 0)',\n secondaryContainer: 'rgb(62, 76, 0)',\n onSecondaryContainer: 'rgb(212, 237, 126)',\n tertiary: 'rgb(167, 212, 116)',\n onTertiary: 'rgb(30, 55, 0)',\n tertiaryContainer: 'rgb(45, 80, 0)',\n onTertiaryContainer: 'rgb(194, 241, 141)',\n error: 'rgb(255, 180, 171)',\n onError: 'rgb(105, 0, 5)',\n errorContainer: 'rgb(147, 0, 10)',\n onErrorContainer: 'rgb(255, 180, 171)',\n background: 'rgb(27, 28, 24)',\n onBackground: 'rgb(227, 227, 219)',\n surface: 'rgb(27, 28, 24)',\n onSurface: 'rgb(227, 227, 219)',\n surfaceVariant: 'rgb(68, 72, 61)',\n onSurfaceVariant: 'rgb(197, 200, 185)',\n outline: 'rgb(143, 146, 133)',\n outlineVariant: 'rgb(68, 72, 61)',\n shadow: 'rgb(0, 0, 0)',\n scrim: 'rgb(0, 0, 0)',\n inverseSurface: 'rgb(227, 227, 219)',\n inverseOnSurface: 'rgb(48, 49, 44)',\n inversePrimary: 'rgb(69, 104, 18)',\n elevation: {\n level0: 'transparent',\n level1: 'rgb(34, 37, 29)',\n level2: 'rgb(38, 43, 31)',\n level3: 'rgb(43, 48, 34)',\n level4: 'rgb(44, 50, 35)',\n level5: 'rgb(47, 54, 37)',\n },\n surfaceDisabled: 'rgba(227, 227, 219, 0.12)',\n onSurfaceDisabled: 'rgba(227, 227, 219, 0.38)',\n backdrop: 'rgba(46, 50, 40, 0.4)',\n};\n","// Generated colors from https://callstack.github.io/react-native-paper/docs/guides/theming\nexport const LIGHT_COLORS_SCHEME = {\n primary: 'rgb(69, 104, 18)',\n onPrimary: 'rgb(255, 255, 255)',\n primaryContainer: 'rgb(197, 240, 139)',\n onPrimaryContainer: 'rgb(17, 32, 0)',\n secondary: 'rgb(83, 102, 0)',\n onSecondary: 'rgb(255, 255, 255)',\n secondaryContainer: 'rgb(212, 237, 126)',\n onSecondaryContainer: 'rgb(23, 30, 0)',\n tertiary: 'rgb(67, 105, 21)',\n onTertiary: 'rgb(255, 255, 255)',\n tertiaryContainer: 'rgb(194, 241, 141)',\n onTertiaryContainer: 'rgb(15, 32, 0)',\n error: 'rgb(186, 26, 26)',\n onError: 'rgb(255, 255, 255)',\n errorContainer: 'rgb(255, 218, 214)',\n onErrorContainer: 'rgb(65, 0, 2)',\n background: 'rgb(253, 252, 245)',\n onBackground: 'rgb(27, 28, 24)',\n surface: 'rgb(253, 252, 245)',\n onSurface: 'rgb(27, 28, 24)',\n surfaceVariant: 'rgb(225, 228, 213)',\n onSurfaceVariant: 'rgb(68, 72, 61)',\n outline: 'rgb(117, 121, 108)',\n outlineVariant: 'rgb(197, 200, 185)',\n shadow: 'rgb(0, 0, 0)',\n scrim: 'rgb(0, 0, 0)',\n inverseSurface: 'rgb(48, 49, 44)',\n inverseOnSurface: 'rgb(242, 241, 233)',\n inversePrimary: 'rgb(170, 212, 114)',\n elevation: {\n level0: 'transparent',\n level1: 'rgb(244, 245, 234)',\n level2: 'rgb(238, 240, 227)',\n level3: 'rgb(233, 236, 220)',\n level4: 'rgb(231, 234, 218)',\n level5: 'rgb(227, 231, 213)',\n },\n surfaceDisabled: 'rgba(27, 28, 24, 0.12)',\n onSurfaceDisabled: 'rgba(27, 28, 24, 0.38)',\n backdrop: 'rgba(46, 50, 40, 0.4)',\n};\n","import { DarkTheme as DarkNavigationTheme, DefaultTheme as LightNavigationTheme } from '@react-navigation/native';\nimport { MD3DarkTheme, MD3LightTheme, adaptNavigationTheme, useTheme } from 'react-native-paper';\nimport { DARK_COLORS_SCHEME } from './dark-colors-scheme';\nimport { LIGHT_COLORS_SCHEME } from './light-colors-scheme';\n\nconst DEFAULT_SPACING: number = 8;\nconst spacing = (units: number = 1): number => units * DEFAULT_SPACING;\n\nconst roundness = 2;\n\nexport const DARK_THEME = {\n ...MD3DarkTheme,\n colors: {\n ...MD3DarkTheme.colors,\n ...DARK_COLORS_SCHEME,\n },\n spacing,\n roundness,\n};\n\nexport const LIGHT_THEME = {\n ...MD3LightTheme,\n colors: {\n ...MD3LightTheme.colors,\n ...LIGHT_COLORS_SCHEME,\n },\n spacing,\n roundness,\n};\n\nexport type AppTheme = typeof DARK_THEME;\n\n// React Navigation themes\nconst navigationAdaptedThemes = adaptNavigationTheme({\n reactNavigationLight: LightNavigationTheme,\n reactNavigationDark: DarkNavigationTheme,\n materialLight: LIGHT_THEME,\n materialDark: DARK_THEME,\n});\n\nconst { DarkTheme, LightTheme } = navigationAdaptedThemes;\nexport const NAVIGATION_DARK = { ...DarkTheme, fonts: { ...DarkNavigationTheme.fonts } };\nexport const NAVIGATION_LIGHT = { ...LightTheme, fonts: { ...LightNavigationTheme.fonts } };\n\nexport const useAppTheme = () => useTheme() as AppTheme;\n\nexport const useIsDarkMode = (): boolean => {\n const theme = useAppTheme();\n return theme.dark;\n};\n","import { BottomSheetBackgroundProps } from '@gorhom/bottom-sheet';\nimport { FunctionComponent } from 'react';\nimport { View } from 'react-native';\n\nimport { useAppTheme } from '../../theme/theme';\n\nexport const DefaultSheetBackground: FunctionComponent<BottomSheetBackgroundProps> = ({ style }) => {\n const { colors } = useAppTheme();\n return <View style={[style, { backgroundColor: colors.background }]} />;\n};\n","import { MMKV } from 'react-native-mmkv';\n\nconst mmkvStorage = new MMKV();\n\nconst setItem = <T>(key: string, data: T) => {\n if (data instanceof ArrayBuffer) {\n mmkvStorage.set(key, data);\n } else if (typeof data === 'boolean' || typeof data === 'number' || typeof data === 'string') {\n mmkvStorage.set(key, data);\n } else {\n mmkvStorage.set(key, JSON.stringify(data));\n }\n};\n\nconst getItem = <T>(key: string, defaultValue: T): T => {\n if (defaultValue instanceof Uint8Array) {\n return (mmkvStorage.getBuffer(key) as T) ?? defaultValue;\n }\n if (typeof defaultValue === 'boolean') {\n return (mmkvStorage.getBoolean(key) as T) ?? defaultValue;\n }\n if (typeof defaultValue === 'number') {\n return (mmkvStorage.getNumber(key) as T) ?? defaultValue;\n }\n\n const stringValue = mmkvStorage.getString(key);\n if (stringValue === undefined || stringValue === null) return defaultValue;\n\n if (typeof defaultValue === 'string') {\n return stringValue as T;\n }\n\n try {\n return JSON.parse(stringValue) as T;\n } catch {\n return stringValue as T;\n }\n};\n\nconst removeItem = (key: string) => {\n mmkvStorage.delete(key);\n};\n\nexport const storage = {\n setItem,\n getItem,\n removeItem,\n};\n\nexport const mmkvStorageForMobxPersist = {\n setItem: (key: string, value: string): Promise<void> => {\n mmkvStorage.set(key, value);\n return Promise.resolve();\n },\n\n getItem: (key: string): Promise<string | null> => {\n const value = mmkvStorage.getString(key);\n return Promise.resolve(value ?? null);\n },\n\n removeItem: (key: string): Promise<void> => {\n mmkvStorage.delete(key);\n return Promise.resolve();\n },\n};\n","import { storage } from '../utils/storage';\n\nexport const isSentryActivated = (): boolean => storage.getItem<string>('SENTRY_ACTIVATED', '') === 'true';\nexport const getSentryDns = (): string => storage.getItem('SENTRY_DNS', '') ?? '';\n","import { makeAutoObservable } from 'mobx';\nimport { transportFunctionType } from 'react-native-logs';\nimport { LogEntry } from '../logger/logger.types';\n\nconst MAX_LOG_ENTRIES = 10 * 1000;\n\nclass CommonLogsStore {\n logEntries: LogEntry[] = [];\n\n constructor() {\n makeAutoObservable(this);\n }\n\n get allLogsAsText(): string {\n return this.logEntries\n .map((log) => log.msg)\n .filter((log) => !!log)\n .join('\\n');\n }\n\n addLog(logEntry: LogEntry): void {\n this.logEntries.push(logEntry);\n\n if (this.logEntries.length > MAX_LOG_ENTRIES) {\n this.logEntries.shift(); // remove the oldest log\n }\n }\n\n clearLogs(): void {\n this.logEntries = [];\n }\n\n filterLogs(filterText: string): LogEntry[] {\n const lowerCaseFilterText = filterText.toLowerCase();\n return this.logEntries.filter((log) => log.msg.toLowerCase().includes(lowerCaseFilterText));\n }\n}\n\nexport const commonLogsStore = new CommonLogsStore();\n\nexport const commonLogsStoreTransport: transportFunctionType<object> = (props: LogEntry) => {\n commonLogsStore.addLog(props);\n};\n","import Constants from 'expo-constants';\nimport * as Device from 'expo-device';\nimport { Platform } from 'react-native';\n\nexport const isRealDevice = (): boolean => {\n return Device.isDevice;\n};\n\nexport const isEmulator = (): boolean => {\n return !Device.isDevice;\n};\n\nexport const getDeviceType = (): string => {\n const isReal = isRealDevice();\n return Platform.select({\n ios: isReal ? 'iOS Device' : 'iOS Simulator',\n android: isReal ? 'Android Device' : 'Android Emulator',\n default: isReal ? `${Platform.OS} Real Device` : `${Platform.OS} Emulator`,\n });\n};\n\nexport const getAppIdentifier = (): string => {\n const bundleId = Platform.select({\n ios: Constants.expoConfig?.ios?.bundleIdentifier,\n android: Constants.expoConfig?.android?.package,\n default: 'Unknown',\n });\n\n const id = bundleId?.split('.').pop();\n return id ?? '';\n};\n","import Constants from 'expo-constants';\nimport * as Updates from 'expo-updates';\nimport { logger } from '../logger/logger';\n\nexport const isProduction = (): boolean => {\n return Updates.channel === 'production';\n};\n\nexport const isPreview = (): boolean => {\n return Updates.channel === 'preview';\n};\n\nexport const isDevelopment = (): boolean => {\n return __DEV__ || !Updates.channel;\n};\n\nexport const getEnvVarsSource = (): string => {\n if (Constants.executionEnvironment === 'storeClient') {\n return 'EAS (Production)';\n }\n\n return 'Local Development';\n};\n\nexport const validateGetRandomValues = (): boolean => {\n if (!crypto?.getRandomValues) {\n logger.error('[validateGetRandomValues] crypto.getRandomValues is not available as a global environment function');\n return false;\n }\n\n const typeOfGetRandomValues = typeof crypto.getRandomValues;\n if (typeOfGetRandomValues !== 'function') {\n logger.error(`[validateGetRandomValues] crypto.getRandomValues is not a function: ${typeOfGetRandomValues}`);\n return false;\n }\n\n logger.debug('[validateGetRandomValues] global crypto getRandomValues is available as a global environment function');\n return true;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface SimpleLogger {\n debug(message: string, ...args: any[]): void;\n log(message: string, ...args: any[]): void;\n info(message: string, ...args: any[]): void;\n warn(message: string, ...args: any[]): void;\n error(message: string, ...args: any[]): void;\n}\n\n// extract names of logger methods as a type\nexport type LoggerMethods = keyof SimpleLogger;\n\nexport const LOG_LEVELS = {\n debug: 0,\n log: 1,\n info: 2,\n warn: 3,\n error: 4,\n} as const;\n\nexport type LogLevelKey = keyof typeof LOG_LEVELS;\n\nexport interface LogLevel {\n severity: number;\n text: string;\n}\n\nexport interface LogEntry {\n msg: string;\n rawMsg: unknown;\n level: LogLevel;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as Sentry from '@sentry/react-native';\nimport { InteractionManager, LogBox } from 'react-native';\nimport {\n fileAsyncTransport,\n mapConsoleTransport,\n logger as RNLogger,\n sentryTransport,\n transportFunctionType,\n} from 'react-native-logs';\n\nimport { Directory, File, Paths } from 'expo-file-system';\nimport * as FileSystemLegacy from 'expo-file-system/legacy';\nimport { getSentryDns, isSentryActivated } from '../config/env.config';\nimport { FileInfo } from '../services/files/native-file-system.types';\nimport { commonLogsStoreTransport } from '../store/common-logs.store';\nimport { getAppIdentifier } from '../utils/device.utils';\nimport { isDevelopment } from '../utils/env.utils';\nimport { LOG_LEVELS, SimpleLogger } from './logger.types';\n\nLogBox.ignoreLogs([/^ErrorBoundary /, /Support for defaultProps will be removed from function components/]);\n\nconst appName = getAppIdentifier();\nconst logFilenamePrefix = `app-logs-${appName}`;\nconst logFilenamePattern = `${logFilenamePrefix}-{date-today}.txt`;\nconst filePath: string = Paths.document.uri;\nif (!filePath) {\n throw new Error('Failed to initialize logger: document directory path is unavailable');\n}\n\nclass LoggerWrapper implements SimpleLogger {\n private _logger: ReturnType<typeof RNLogger.createLogger>;\n\n constructor(config: Parameters<typeof RNLogger.createLogger>[0]) {\n this._logger = RNLogger.createLogger(config);\n }\n\n debug(message: string, ...args: any[]): void {\n this._logger.debug(message, ...args);\n }\n\n log(message: string, ...args: any[]): void {\n this._logger.log(message, ...args);\n }\n\n info(message: string, ...args: any[]): void {\n this._logger.info(message, ...args);\n }\n\n warn(message: string, ...args: any[]): void {\n this._logger.warn(message, ...args);\n }\n\n error(message: string, ...args: any[]): void {\n this._logger.error(message, ...args);\n }\n}\n\nconst getTransports = (): transportFunctionType<any>[] => {\n const transports: transportFunctionType<any>[] = [fileAsyncTransport, commonLogsStoreTransport];\n\n if (!isDevelopment() && isSentryActivated()) {\n Sentry.init({\n dsn: getSentryDns(),\n // We can add more context data to events (IP address, cookies, user, etc.)\n // @see https://docs.sentry.io/platforms/react-native/data-management/data-collected/\n sendDefaultPii: true,\n });\n transports.push(sentryTransport);\n }\n\n if (isDevelopment()) {\n transports.push(mapConsoleTransport);\n }\n\n return transports;\n};\n\nexport const logger = new LoggerWrapper({\n severity: 'debug',\n transport: getTransports(),\n levels: {\n debug: LOG_LEVELS.debug,\n log: LOG_LEVELS.log,\n info: LOG_LEVELS.info,\n warn: LOG_LEVELS.warn,\n error: LOG_LEVELS.error,\n },\n async: true,\n asyncFunc: InteractionManager.runAfterInteractions,\n dateFormat: (date: Date) => `${date.toISOString()} `,\n printLevel: true,\n fixedExtLvlLength: true,\n printDate: true,\n enabled: true,\n transportOptions: {\n // @see https://github.com/mowispace/react-native-logs?tab=readme-ov-file#sentrytransport\n SENTRY: Sentry,\n errorLevels: 'error',\n // @see https://github.com/mowispace/react-native-logs?tab=readme-ov-file#mapconsoletransport\n mapLevels: {\n debug: 'debug',\n log: 'log',\n info: 'info',\n warn: 'warn',\n error: 'error',\n },\n // @see https://github.com/mowispace/react-native-logs?tab=readme-ov-file#fileasynctransport\n FS: FileSystemLegacy,\n fileNameDateType: 'iso',\n fileName: logFilenamePattern,\n filePath,\n },\n});\n\nconst isLogFile = (fileName: string): boolean => {\n return fileName.startsWith(logFilenamePrefix);\n};\n\nconst isLogFileItem = (item: Directory | File): item is File => {\n return item instanceof File && isLogFile(item.name);\n};\n\nconst byMostRecentFirstComparator = (a: FileInfo, b: FileInfo): number => {\n return (b.modificationTime ?? 0) - (a.modificationTime ?? 0);\n};\n\nexport const loadAllLogFilesInfo = async (): Promise<FileInfo[]> => {\n try {\n const pathInfo = Paths.info(filePath);\n if (!pathInfo.exists) {\n return [];\n }\n\n const directory = new Directory(filePath);\n const items = directory.list();\n const logFiles = items.filter(isLogFileItem);\n\n const fileInfos: FileInfo[] = logFiles\n .map((file) => {\n const info = file.info();\n return {\n exists: info.exists,\n isDirectory: false,\n size: info.size ?? 0,\n modificationTime: info.modificationTime ?? 0,\n uri: file.uri,\n };\n })\n .filter((info) => info.exists);\n\n return fileInfos.sort(byMostRecentFirstComparator);\n } catch (e: unknown) {\n logger.error('Error loading files:', e);\n return [];\n }\n};\n\nexport const loadCurrentLogsFileUri = async (): Promise<string> => {\n const fileInfos = await loadAllLogFilesInfo();\n return fileInfos[0]?.uri ?? '';\n};\n\nexport const deleteAllLogFiles = async (): Promise<void> => {\n try {\n const pathInfo = Paths.info(filePath);\n if (!pathInfo.exists) {\n return;\n }\n\n const directory = new Directory(filePath);\n const items = directory.list();\n const logFiles: File[] = items.filter(isLogFileItem);\n\n const errors: Error[] = [];\n for (const file of logFiles) {\n try {\n file.delete();\n } catch (e: unknown) {\n errors.push(e instanceof Error ? e : new Error(String(e)));\n }\n }\n\n if (errors.length > 0) {\n throw new Error(`Failed to delete ${errors.length} log file(s): ${errors.map((e) => e.message).join('; ')}`);\n }\n } catch (e: unknown) {\n logger.error('Error deleting files:', e);\n throw e;\n }\n};\n","import { BottomSheetModal } from '@gorhom/bottom-sheet';\nimport { useEffect, useRef, useState } from 'react';\nimport { BackHandler } from 'react-native';\nimport { logger } from '../../logger/logger';\n\nexport const useBottomSheetToggler = () => {\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n const [isBottomSheetOpen, setIsBottomSheetOpen] = useState(false);\n\n const showBottomSheet = () => {\n setIsBottomSheetOpen(true);\n bottomSheetModalRef.current?.present();\n };\n\n const hideBottomSheet = () => {\n logger.debug('[useBottomSheetToggler] hideBottomSheet');\n setIsBottomSheetOpen(false);\n bottomSheetModalRef.current?.dismiss();\n };\n\n const onBackButtonPress = (): boolean => {\n if (!isBottomSheetOpen || !bottomSheetModalRef.current) {\n return false;\n }\n\n logger.debug('[useBottomSheetToggler] onBackButtonPress: closing bottom sheet');\n hideBottomSheet();\n return true;\n };\n\n useEffect(() => {\n if (!isBottomSheetOpen) return;\n\n const backHandler = BackHandler.addEventListener('hardwareBackPress', onBackButtonPress);\n return () => backHandler.remove();\n }, [isBottomSheetOpen]);\n\n return {\n bottomSheetModalRef,\n showBottomSheet,\n hideBottomSheet,\n isBottomSheetOpen,\n };\n};\n","import { useWindowDimensions, ViewStyle } from 'react-native';\n\nconst LARGE_SCREEN_WIDTH = 600;\nconst MAX_DIALOG_WIDTH = 500;\n\nexport const useDialogStyles = () => {\n const { width: deviceWidth } = useWindowDimensions();\n const width = deviceWidth > LARGE_SCREEN_WIDTH ? MAX_DIALOG_WIDTH : undefined;\n const alignSelf: ViewStyle['alignSelf'] = width ? 'center' : undefined;\n\n return {\n width,\n alignSelf,\n };\n};\n","import { type ComponentProps, type FunctionComponent, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { StyleSheet } from 'react-native';\nimport { Button, Dialog, Portal } from 'react-native-paper';\nimport { useDialogStyles } from './use-dialog-styles';\n\ntype DialogProps = ComponentProps<typeof Dialog>;\n\nexport interface DialogCloseOnlyProps extends Omit<DialogProps, 'children' | 'visible'> {\n icon?: string;\n title?: ReactNode;\n content?: ReactNode;\n onClose: () => void;\n isVisible: boolean;\n}\n\nexport const DialogCloseOnly: FunctionComponent<DialogCloseOnlyProps> = ({\n icon,\n title,\n content,\n onClose,\n isVisible,\n ...rest\n}) => {\n const { style: dialogStyleProp, ...dialogProps } = rest;\n const styles = useStyles();\n const { t } = useTranslation();\n\n const hasIcon = !!icon;\n const hasTitle = !!title;\n const hasContent = !!content;\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <Portal>\n <Dialog style={[styles.dialog, dialogStyleProp]} visible={true} onDismiss={onClose} {...dialogProps}>\n {hasIcon && <Dialog.Icon icon={icon} />}\n {hasTitle && <Dialog.Title>{title}</Dialog.Title>}\n {hasContent && <Dialog.Content>{content}</Dialog.Content>}\n\n <Dialog.Actions>\n <Button mode=\"contained\" onPress={onClose}>\n {t('common:close')}\n </Button>\n </Dialog.Actions>\n </Dialog>\n </Portal>\n );\n};\n\nconst useStyles = () => {\n const { width, alignSelf } = useDialogStyles();\n\n return StyleSheet.create({\n dialog: {\n width,\n alignSelf,\n },\n });\n};\n","import { isNullish } from '@lichens-innovation/ts-common';\nimport { BarcodeType, Camera } from 'expo-camera';\nimport i18next from 'i18next';\n\nimport { logger } from '../../logger/logger';\n\nexport const BARCODE_TYPES: BarcodeType[] = [\n 'aztec',\n 'ean13',\n 'ean8',\n 'qr',\n 'pdf417',\n 'upc_e',\n 'datamatrix',\n 'code39',\n 'code93',\n 'itf14',\n 'codabar',\n 'code128',\n 'upc_a',\n];\n\nexport const getPermissionMessage = (hasPermission?: boolean | null): string => {\n if (isNullish(hasPermission)) {\n return i18next.t('common:barcodeScanner.requestingCameraPermission');\n }\n\n return hasPermission\n ? i18next.t('common:barcodeScanner.cameraAccessGranted')\n : i18next.t('common:barcodeScanner.noCameraAccess');\n};\n\nexport const requestCameraPermissions = async (): Promise<boolean> => {\n try {\n const { status } = await Camera.requestCameraPermissionsAsync();\n return status === 'granted';\n } catch (e: unknown) {\n logger.error('[BarcodeScanner] Failed to request camera permissions', e);\n return false;\n }\n};\n","import { BarcodeScanningResult, CameraView } from 'expo-camera';\nimport React, { FunctionComponent } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { StyleSheet, useWindowDimensions, View } from 'react-native';\nimport { Text } from 'react-native-paper';\nimport { useAppTheme } from '../../theme/theme';\nimport { BARCODE_TYPES } from './barcode-scanner.utils';\n\ninterface BarcodeScannerProps {\n onBarcodeScanned: (result: BarcodeScanningResult) => void;\n}\n\nexport const BarcodeScanner: FunctionComponent<BarcodeScannerProps> = ({ onBarcodeScanned }) => {\n const styles = useStyles();\n const { t } = useTranslation();\n\n return (\n <>\n <View style={styles.cameraContainer}>\n <CameraView\n style={[StyleSheet.absoluteFillObject, styles.camera]}\n onBarcodeScanned={onBarcodeScanned}\n barcodeScannerSettings={{ barcodeTypes: BARCODE_TYPES }}\n facing=\"back\"\n />\n </View>\n\n <Text variant=\"bodySmall\" style={styles.instruction}>\n {t('common:barcodeScanner.scanBarcodeInstruction')}\n </Text>\n </>\n );\n};\n\nconst DIALOG_HEADER_AND_FOOTER_HEIGHT = 200;\nconst MAX_CAMERA_HEIGHT = 560;\n\nconst useStyles = () => {\n const theme = useAppTheme();\n const { height } = useWindowDimensions();\n\n return StyleSheet.create({\n cameraContainer: {\n alignSelf: 'center',\n width: '100%',\n height: Math.min(height - DIALOG_HEADER_AND_FOOTER_HEIGHT, MAX_CAMERA_HEIGHT),\n },\n camera: {\n borderWidth: 2,\n borderColor: theme.colors.primary,\n borderStyle: 'dashed',\n },\n instruction: {\n textAlign: 'center',\n },\n });\n};\n","import { BarcodeScanningResult } from 'expo-camera';\nimport React, { FunctionComponent, useEffect, useState } from 'react';\nimport { DialogCloseOnly, DialogCloseOnlyProps } from '../dialogs/dialog-close-only';\nimport { BarcodeScanner } from './barcode-scanner';\nimport { getPermissionMessage, requestCameraPermissions } from './barcode-scanner.utils';\n\ninterface BarcodeScannerDialogProps extends DialogCloseOnlyProps {\n isVisible: boolean;\n title: string;\n onClose: () => void;\n onBarcodeScanned: (result: BarcodeScanningResult) => void;\n}\n\nexport const BarcodeScannerDialog: FunctionComponent<BarcodeScannerDialogProps> = ({\n isVisible,\n title,\n onClose,\n onBarcodeScanned,\n ...rest\n}) => {\n const [hasPermission, setHasPermission] = useState<boolean>();\n\n useEffect(() => {\n requestCameraPermissions().then(setHasPermission);\n }, []);\n\n if (!isVisible) {\n return null;\n }\n\n if (!hasPermission) {\n const message = getPermissionMessage(hasPermission);\n return <DialogCloseOnly isVisible={true} title={title} onClose={onClose} content={message} {...rest} />;\n }\n\n return (\n <DialogCloseOnly\n isVisible={true}\n title={title}\n onClose={onClose}\n content={<BarcodeScanner onBarcodeScanned={onBarcodeScanned} />}\n {...rest}\n />\n );\n};\n","import { type ComponentProps, type FunctionComponent, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { StyleSheet } from 'react-native';\nimport { Button, Dialog, Portal, Text } from 'react-native-paper';\nimport { useDialogStyles } from './use-dialog-styles';\n\ntype DialogProps = ComponentProps<typeof Dialog>;\n\ninterface DialogOkCancelProps extends Omit<DialogProps, 'children' | 'visible'> {\n icon?: string;\n title?: ReactNode;\n description?: ReactNode;\n onOk: () => void;\n onCancel: () => void;\n isVisible: boolean;\n}\n\nexport const DialogOkCancel: FunctionComponent<DialogOkCancelProps> = ({\n icon,\n title,\n description,\n onOk,\n onCancel,\n isVisible,\n ...rest\n}) => {\n const { style: dialogStyleProp, ...dialogProps } = rest;\n const styles = useStyles();\n const { t } = useTranslation();\n\n const hasIcon = !!icon;\n\n const hasTitle = !!title;\n const hasTitleString = typeof title === 'string';\n\n const hasDescription = !!description;\n const hasDescriptionString = typeof description === 'string';\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <Portal>\n <Dialog style={[styles.dialog, dialogStyleProp]} visible={true} onDismiss={onCancel} {...dialogProps}>\n {hasIcon && <Dialog.Icon icon={icon} />}\n\n {hasTitle && <Dialog.Title>{hasTitleString ? <Text>{title}</Text> : title}</Dialog.Title>}\n\n {hasDescription && (\n <Dialog.Content>{hasDescriptionString ? <Text>{description}</Text> : description}</Dialog.Content>\n )}\n\n <Dialog.Actions>\n <Button onPress={onCancel}>{t('common:cancel')}</Button>\n <Button style={styles.button} mode=\"contained\" onPress={onOk}>\n {t('common:ok')}\n </Button>\n </Dialog.Actions>\n </Dialog>\n </Portal>\n );\n};\n\nconst useStyles = () => {\n const { width, alignSelf } = useDialogStyles();\n\n return StyleSheet.create({\n button: {\n width: 60,\n },\n dialog: {\n width,\n alignSelf,\n },\n });\n};\n","import { type ComponentProps, type FunctionComponent, type ReactNode, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { StyleSheet } from 'react-native';\nimport { Button, Dialog, Portal, Text, TextInput } from 'react-native-paper';\nimport { useAppTheme } from '../../theme/theme';\nimport { useDialogStyles } from './use-dialog-styles';\n\ntype DialogProps = ComponentProps<typeof Dialog>;\n\ntype TextInputSelection = { start: number; end: number };\n\ninterface DialogSingleTextInputProps extends Omit<DialogProps, 'children' | 'visible'> {\n title: ReactNode;\n description?: ReactNode;\n value: string;\n onChange: (value: string) => void;\n errorMessage?: string;\n placeholder?: string;\n onOk: (inputValue: string) => void;\n onCancel: () => void;\n isVisible: boolean;\n}\n\nexport const DialogSingleTextInput: FunctionComponent<DialogSingleTextInputProps> = ({\n title,\n description,\n value,\n onChange,\n errorMessage,\n placeholder,\n onOk,\n onCancel,\n isVisible,\n ...rest\n}) => {\n const { style: dialogStyleProp, ...dialogProps } = rest;\n const styles = useStyles();\n const { t } = useTranslation();\n\n const [selection, setSelection] = useState<TextInputSelection>();\n const [inputValue, setInputValue] = useState(value);\n\n const hasTitle = !!title;\n const hasTitleString = typeof title === 'string';\n\n const hasDescription = !!description;\n const hasDescriptionString = typeof description === 'string';\n\n const hasError = !!errorMessage;\n const isInputPopulated = inputValue.trim().length > 0;\n const isOkEnabled = !hasError && isInputPopulated;\n\n const onChangeText = (text: string) => {\n setInputValue(text);\n onChange(text);\n };\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <Portal>\n <Dialog {...dialogProps} style={[styles.dialog, dialogStyleProp]} visible={true} onDismiss={onCancel}>\n {hasTitle && <Dialog.Title>{hasTitleString ? <Text>{title}</Text> : title}</Dialog.Title>}\n\n {hasDescription && (\n <Dialog.Content>{hasDescriptionString ? <Text>{description}</Text> : description}</Dialog.Content>\n )}\n\n <Dialog.Content>\n <TextInput\n mode=\"outlined\"\n value={inputValue}\n onChangeText={onChangeText}\n selection={selection}\n onSelectionChange={(e) => setSelection(e.nativeEvent.selection)}\n placeholder={placeholder}\n error={hasError}\n />\n\n {hasError && (\n <Text variant=\"bodyMedium\" style={styles.errorText}>\n {errorMessage}\n </Text>\n )}\n </Dialog.Content>\n\n <Dialog.Actions>\n <Button onPress={onCancel}>{t('common:cancel')}</Button>\n <Button style={styles.button} mode=\"contained\" onPress={() => onOk(inputValue)} disabled={!isOkEnabled}>\n {t('common:ok')}\n </Button>\n </Dialog.Actions>\n </Dialog>\n </Portal>\n );\n};\n\nconst useStyles = () => {\n const theme = useAppTheme();\n const { width, alignSelf } = useDialogStyles();\n\n return StyleSheet.create({\n button: {\n width: 60,\n },\n dialog: {\n width,\n alignSelf,\n },\n errorText: {\n marginTop: theme.spacing(1),\n color: theme.colors.error,\n },\n });\n};\n","import Clipboard from '@react-native-clipboard/clipboard';\nimport { logger } from '../logger/logger';\n\nexport const setClipboardTextContent = async (value: string = ''): Promise<void> => {\n try {\n logger.info('[setClipboardTextContent] setting value', `${value.substring(0, 20)}...`);\n Clipboard.setString(value);\n } catch (e: unknown) {\n logger.error('[setClipboardTextContent] error', e);\n }\n};\n","export const SnackbarDurationsMs = {\n SHORT: 2.5 * 1000,\n MEDIUM: 5 * 1000,\n LONG: 10 * 1000,\n} as const;\n","import { JSX, PropsWithChildren, createContext, useCallback, useContext, useEffect, useState } from 'react';\nimport { InteractionManager } from 'react-native';\nimport { Snackbar } from 'react-native-paper';\nimport { SnackbarDurationsMs } from './snackbar.constants';\n\nconst DEFAULT_DURATION = SnackbarDurationsMs.SHORT;\n\nexport const SnackbarContext = createContext({\n showSnackbarMessage: (_msg: string, _duration = DEFAULT_DURATION) => {},\n});\n\nexport const useSnackbar = () => useContext(SnackbarContext);\n\nexport const SnackbarProvider = ({ children }: PropsWithChildren): JSX.Element => {\n const [message, setMessage] = useState('');\n const [duration, setDuration] = useState(DEFAULT_DURATION);\n const [isVisible, setVisibility] = useState(false);\n\n const showSnackbarMessage = useCallback(\n (msg: string, duration = DEFAULT_DURATION) => {\n setVisibility(false); // close the current snackbar (if any)\n\n InteractionManager.runAfterInteractions(() => {\n setMessage(msg);\n setDuration(duration);\n setVisibility(true);\n });\n },\n [setVisibility]\n );\n\n useEffect(() => {\n if (!isVisible) return;\n\n const timeoutId = setTimeout(() => setVisibility(false), duration);\n return () => clearTimeout(timeoutId);\n }, [isVisible, duration, setVisibility]);\n\n return (\n <SnackbarContext.Provider value={{ showSnackbarMessage }}>\n {children}\n\n <Snackbar visible={isVisible} onDismiss={() => setVisibility(false)} duration={Snackbar.DURATION_LONG}>\n {message}\n </Snackbar>\n </SnackbarContext.Provider>\n );\n};\n","import { makeAutoObservable, runInAction } from 'mobx';\nimport { makePersistable } from 'mobx-persist-store';\nimport { AppState, AppStateStatus, NativeEventSubscription } from 'react-native';\nimport { logger } from '../logger/logger';\nimport { mmkvStorageForMobxPersist } from '../utils/storage';\n\nconst DEFAULT_DARK_MODE = true;\n\nclass CommonStore {\n isDarkMode: boolean = DEFAULT_DARK_MODE;\n appStatus: AppStateStatus = 'active';\n appStateSubscription?: NativeEventSubscription;\n\n constructor() {\n makeAutoObservable(this);\n makePersistable(this, {\n name: 'CommonStore',\n properties: ['isDarkMode'],\n storage: mmkvStorageForMobxPersist,\n }).then(() => {\n logger.info('[CommonStore] Hydration complete');\n });\n\n this.appStateSubscription = AppState.addEventListener('change', (nextAppState: AppStateStatus) => {\n if (nextAppState === this.appStatus) return;\n\n runInAction(() => {\n logger.info(`[CommonStore] App state changed to ${nextAppState}`);\n this.appStatus = nextAppState;\n });\n });\n }\n\n toggleDarkMode() {\n this.isDarkMode = !this.isDarkMode;\n }\n\n setIsDarkMode(isDarkMode: boolean) {\n this.isDarkMode = isDarkMode;\n }\n\n dispose() {\n this.appStateSubscription?.remove();\n }\n}\n\nexport const commonStore = new CommonStore();\n","import { Platform } from 'react-native';\n\nexport const getMonospaceFontName = (): string => {\n return Platform.select({\n ios: 'Menlo',\n default: 'monospace',\n });\n};\n","export default {\n hljs: {\n display: 'block',\n overflowX: 'auto',\n padding: '0.5em',\n background: 'black',\n color: '#ddd',\n },\n 'hljs-keyword': {\n color: 'white',\n fontWeight: 'bold',\n },\n 'hljs-selector-tag': {\n color: 'white',\n fontWeight: 'bold',\n },\n 'hljs-literal': {\n color: 'white',\n fontWeight: 'bold',\n },\n 'hljs-section': {\n color: 'white',\n fontWeight: 'bold',\n },\n 'hljs-link': {\n color: 'white',\n },\n 'hljs-subst': {\n color: '#ddd',\n },\n 'hljs-string': {\n color: '#d88',\n },\n 'hljs-title': {\n color: '#d88',\n fontWeight: 'bold',\n },\n 'hljs-name': {\n color: '#d88',\n fontWeight: 'bold',\n },\n 'hljs-type': {\n color: '#d88',\n fontWeight: 'bold',\n },\n 'hljs-attribute': {\n color: '#d88',\n },\n 'hljs-symbol': {\n color: '#d88',\n },\n 'hljs-bullet': {\n color: '#d88',\n },\n 'hljs-built_in': {\n color: '#d88',\n },\n 'hljs-addition': {\n color: '#d88',\n },\n 'hljs-variable': {\n color: '#d88',\n },\n 'hljs-template-tag': {\n color: '#d88',\n },\n 'hljs-template-variable': {\n color: '#d88',\n },\n 'hljs-comment': {\n color: '#777',\n },\n 'hljs-quote': {\n color: '#777',\n },\n 'hljs-deletion': {\n color: '#777',\n },\n 'hljs-meta': {\n color: '#777',\n },\n 'hljs-doctag': {\n fontWeight: 'bold',\n },\n 'hljs-strong': {\n fontWeight: 'bold',\n },\n 'hljs-emphasis': {\n fontStyle: 'italic',\n },\n};\n","export default {\n hljs: {\n display: 'block',\n overflowX: 'auto',\n padding: '0.5em',\n color: '#000',\n background: '#f8f8ff',\n },\n 'hljs-comment': {\n color: '#408080',\n fontStyle: 'italic',\n },\n 'hljs-quote': {\n color: '#408080',\n fontStyle: 'italic',\n },\n 'hljs-keyword': {\n color: '#954121',\n },\n 'hljs-selector-tag': {\n color: '#954121',\n },\n 'hljs-literal': {\n color: '#954121',\n },\n 'hljs-subst': {\n color: '#954121',\n },\n 'hljs-number': {\n color: '#40a070',\n },\n 'hljs-string': {\n color: '#219161',\n },\n 'hljs-doctag': {\n color: '#219161',\n },\n 'hljs-selector-id': {\n color: '#19469d',\n },\n 'hljs-selector-class': {\n color: '#19469d',\n },\n 'hljs-section': {\n color: '#19469d',\n },\n 'hljs-type': {\n color: '#19469d',\n },\n 'hljs-params': {\n color: '#00f',\n },\n 'hljs-title': {\n color: '#458',\n fontWeight: 'bold',\n },\n 'hljs-tag': {\n color: '#000080',\n fontWeight: 'normal',\n },\n 'hljs-name': {\n color: '#000080',\n fontWeight: 'normal',\n },\n 'hljs-attribute': {\n color: '#000080',\n fontWeight: 'normal',\n },\n 'hljs-variable': {\n color: '#008080',\n },\n 'hljs-template-variable': {\n color: '#008080',\n },\n 'hljs-regexp': {\n color: '#b68',\n },\n 'hljs-link': {\n color: '#b68',\n },\n 'hljs-symbol': {\n color: '#990073',\n },\n 'hljs-bullet': {\n color: '#990073',\n },\n 'hljs-built_in': {\n color: '#0086b3',\n },\n 'hljs-builtin-name': {\n color: '#0086b3',\n },\n 'hljs-meta': {\n color: '#999',\n fontWeight: 'bold',\n },\n 'hljs-deletion': {\n background: '#fdd',\n },\n 'hljs-addition': {\n background: '#dfd',\n },\n 'hljs-emphasis': {\n fontStyle: 'italic',\n },\n 'hljs-strong': {\n fontWeight: 'bold',\n },\n};\n","import React, { type FunctionComponent, type ReactNode } from 'react';\nimport { ScrollView, StyleSheet, Text, type TextStyle } from 'react-native';\nimport { getMonospaceFontName } from '../../utils/font.utils';\n\ninterface CodeTagProps {\n children: ReactNode;\n style?: TextStyle;\n [key: string]: unknown;\n}\n\nexport const CodeTag: FunctionComponent<CodeTagProps> = ({ children, style, ...props }) => {\n const styles = useStyles();\n return (\n <ScrollView horizontal={true}>\n <Text style={[styles.codeText, style]} {...props}>\n {children}\n </Text>\n </ScrollView>\n );\n};\n\nconst useStyles = () => {\n return StyleSheet.create({\n codeText: {\n fontFamily: getMonospaceFontName(),\n },\n });\n};\n","import React, { type FunctionComponent, type ReactNode } from 'react';\nimport { ScrollView, type ViewStyle } from 'react-native';\n\ninterface PreTagProps {\n children: ReactNode;\n style?: ViewStyle;\n [key: string]: unknown;\n}\n\nexport const PreTag: FunctionComponent<PreTagProps> = ({ children, style, ...props }) => (\n <ScrollView horizontal={true} style={style} {...props}>\n {children}\n </ScrollView>\n);\n","import { observer } from 'mobx-react-lite';\nimport React, { type FunctionComponent } from 'react';\nimport { ScrollView, StyleSheet } from 'react-native';\nimport { Text } from 'react-native-paper';\nimport SyntaxHighlighter from 'react-native-syntax-highlighter';\nimport { commonStore } from '../../store/common.store';\nimport { getMonospaceFontName } from '../../utils/font.utils';\nimport dark from './styles/dark';\nimport light from './styles/light';\nimport { CodeTag } from './syntax-coloring-tag-code';\nimport { PreTag } from './syntax-coloring-tag-pre';\n\ninterface SyntaxColoringProps {\n code: string;\n language: string;\n maxCodeLength?: number;\n}\n\nexport const SyntaxColoring: FunctionComponent<SyntaxColoringProps> = observer(({ code, language, maxCodeLength }) => {\n const style = commonStore.isDarkMode ? dark : light;\n const isSyntaxHighlightingEnabled = !maxCodeLength || code.length < maxCodeLength;\n\n if (isSyntaxHighlightingEnabled) {\n return (\n <SyntaxHighlighter language={language} style={style} PreTag={PreTag} CodeTag={CodeTag}>\n {code}\n </SyntaxHighlighter>\n );\n }\n\n return (\n <ScrollView horizontal showsHorizontalScrollIndicator={true}>\n <Text style={styles.codeText} numberOfLines={0}>\n {code}\n </Text>\n </ScrollView>\n );\n});\n\nconst styles = StyleSheet.create({\n codeText: {\n fontFamily: getMonospaceFontName(),\n },\n});\n","import { type ComponentProps, type FunctionComponent, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ScrollView, StyleSheet, useWindowDimensions } from 'react-native';\nimport { Button, Dialog, Portal } from 'react-native-paper';\nimport { setClipboardTextContent } from '../../utils/clipboard.utils';\nimport { useSnackbar } from '../snack-bar/snackbar-provider';\nimport { SyntaxColoring } from '../syntax/syntax-coloring';\nimport { useDialogStyles } from './use-dialog-styles';\n\ntype DialogProps = ComponentProps<typeof Dialog>;\n\ninterface DialogSyntaxColorResultProps extends Omit<DialogProps, 'children' | 'visible'> {\n icon?: string;\n title: ReactNode;\n code: string;\n language: string;\n maxCodeLength?: number;\n onClose: () => void;\n isVisible: boolean;\n}\n\nexport const DialogSyntaxColorResult: FunctionComponent<DialogSyntaxColorResultProps> = ({\n icon,\n title,\n code,\n language,\n maxCodeLength,\n onClose,\n isVisible,\n ...dialogProps\n}) => {\n const styles = useStyles();\n const { showSnackbarMessage } = useSnackbar();\n const { t } = useTranslation();\n\n const hasIcon = !!icon;\n const hasTitle = !!title;\n\n const onCopy = () => {\n setClipboardTextContent(code);\n showSnackbarMessage(t('common:copiedToClipboard'));\n };\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <Portal>\n <Dialog visible={true} onDismiss={onClose} style={styles.dialog} {...dialogProps}>\n {hasIcon && <Dialog.Icon icon={icon} />}\n {hasTitle && <Dialog.Title>{title}</Dialog.Title>}\n\n <Dialog.ScrollArea>\n <ScrollView>\n <SyntaxColoring code={code} language={language} maxCodeLength={maxCodeLength} />\n </ScrollView>\n </Dialog.ScrollArea>\n\n <Dialog.Actions>\n <Button mode=\"outlined\" onPress={onCopy} icon=\"content-copy\">\n {t('common:copy')}\n </Button>\n <Button mode=\"contained\" onPress={onClose}>\n {t('common:close')}\n </Button>\n </Dialog.Actions>\n </Dialog>\n </Portal>\n );\n};\n\nconst useStyles = () => {\n const { width, alignSelf } = useDialogStyles();\n const { height } = useWindowDimensions();\n\n return StyleSheet.create({\n dialog: {\n maxHeight: height * 0.8,\n width,\n alignSelf,\n },\n });\n};\n","import { AppTheme } from '~/theme';\n\ninterface GetTextColorArgs {\n theme: AppTheme;\n isFocused: boolean;\n isDisabled: boolean;\n}\nexport const getTextColor = ({ theme, isFocused, isDisabled }: GetTextColorArgs) => {\n const { onSurfaceDisabled, primary, secondary } = theme.colors;\n\n if (isDisabled) {\n return onSurfaceDisabled;\n }\n\n if (isFocused) {\n return primary;\n }\n\n return secondary;\n};\n\ninterface GetLabelColorArgs {\n theme: AppTheme;\n isError: boolean;\n isDisabled: boolean;\n isFocusedAndEnabled: boolean;\n}\nexport const getLabelColor = ({ theme, isError, isDisabled, isFocusedAndEnabled }: GetLabelColorArgs) => {\n const { error, onSurfaceDisabled, primary, onSurface } = theme.colors;\n\n if (isError) {\n return error;\n }\n\n if (isDisabled) {\n return onSurfaceDisabled;\n }\n\n if (isFocusedAndEnabled) {\n return primary;\n }\n\n return onSurface;\n};\n\ninterface GetBorderColorArgs {\n theme: AppTheme;\n isError: boolean;\n isDisabled: boolean;\n isFocused: boolean;\n}\nexport const getBorderColor = ({ theme, isError, isDisabled, isFocused }: GetBorderColorArgs) => {\n const { error, surfaceDisabled, primary, outline } = theme.colors;\n\n if (isError) {\n return error;\n }\n\n if (isDisabled) {\n return surfaceDisabled;\n }\n\n if (isFocused) {\n return primary;\n }\n\n return outline;\n};\n","import { FunctionComponent } from 'react';\nimport { Icon } from 'react-native-paper';\n\nexport type DropDownSelectorLeftIconProps = {\n icon?: string;\n color: string;\n size?: number;\n};\n\nexport const DropDownSelectorLeftIcon: FunctionComponent<DropDownSelectorLeftIconProps> = ({\n icon,\n color,\n size = 20,\n}) => {\n if (!icon) {\n return null;\n }\n\n return <Icon source={icon} size={size} color={color} />;\n};\n","import { FunctionComponent } from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { Text } from 'react-native-paper';\nimport { useAppTheme } from '../../theme/theme';\nimport { SelectOption } from './drop-down-selector';\nimport { DropDownSelectorLeftIcon } from './drop-down-selector-left-icon';\n\nexport type DropDownSelectorItemProps = {\n item: SelectOption;\n selected?: boolean;\n textColor: string;\n};\n\nexport const DropDownSelectorItem: FunctionComponent<DropDownSelectorItemProps> = ({ item, selected, textColor }) => {\n const isSelected = selected === true;\n const styles = useStyles({ isSelected });\n\n return (\n <View style={styles.itemContainer}>\n {item.icon && <DropDownSelectorLeftIcon icon={item.icon} color={textColor} />}\n <Text style={{ color: textColor }}>{item.label}</Text>\n </View>\n );\n};\n\ntype UseStylesProps = {\n isSelected: boolean;\n};\n\nconst useStyles = ({ isSelected }: UseStylesProps) => {\n const theme = useAppTheme();\n\n return StyleSheet.create({\n itemContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: theme.spacing(1),\n paddingHorizontal: theme.spacing(1),\n gap: theme.spacing(1),\n backgroundColor: isSelected ? theme.colors.surfaceVariant : theme.colors.surface,\n },\n });\n};\n","import { FunctionComponent, useState } from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { Dropdown } from 'react-native-element-dropdown';\nimport { Text } from 'react-native-paper';\nimport { useAppTheme } from '../../theme/theme';\nimport { getBorderColor, getLabelColor, getTextColor } from './drop-down-selector.utils';\nimport { DropDownSelectorItem } from './drop-down-selector-item';\nimport { DropDownSelectorLeftIcon } from './drop-down-selector-left-icon';\n\nexport interface SelectOption {\n label: string;\n value: string;\n icon?: string;\n}\n\nexport type DropDownSelectorProps = {\n label?: string;\n value?: string;\n onChange: (code: string) => void;\n isError?: boolean;\n options: SelectOption[];\n placeholder?: string;\n searchPlaceholder?: string;\n disabled?: boolean;\n};\n\nexport const DropDownSelector: FunctionComponent<DropDownSelectorProps> = ({\n label,\n value,\n onChange,\n isError,\n options,\n placeholder,\n searchPlaceholder,\n disabled,\n}) => {\n const [isFocused, setIsFocused] = useState(false);\n const hasLabel = !!label;\n const theme = useAppTheme();\n const isDisabled = disabled === true;\n const textColor = getTextColor({ theme, isFocused, isDisabled });\n const styles = useStyles({ isFocused, disabled, isError, textColor });\n\n const selectedItem = options.find((option) => option.value === value);\n\n return (\n <View>\n {hasLabel && (\n <Text variant=\"bodySmall\" style={styles.dropdownTitle}>\n {label}\n </Text>\n )}\n\n <Dropdown\n style={styles.dropdown}\n autoScroll={false} // @see https://github.com/hoaphantn7604/react-native-element-dropdown/issues/345\n placeholderStyle={styles.placeholderStyle}\n selectedTextStyle={styles.selectedTextStyle}\n data={options}\n search={false}\n searchPlaceholder={searchPlaceholder}\n maxHeight={300}\n labelField=\"label\"\n valueField=\"value\"\n placeholder={isFocused ? '' : placeholder}\n value={value}\n disable={disabled}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onChange={({ value }) => {\n onChange(value);\n setIsFocused(false);\n }}\n renderItem={(item: SelectOption, selected?: boolean) => (\n <DropDownSelectorItem item={item} selected={selected} textColor={textColor} />\n )}\n renderLeftIcon={() => <DropDownSelectorLeftIcon icon={selectedItem?.icon} color={textColor} />}\n />\n </View>\n );\n};\n\ntype UseStylesProps = {\n isFocused: boolean;\n disabled?: boolean;\n isError?: boolean;\n textColor: string;\n};\n\nconst useStyles = ({ isFocused, disabled, isError, textColor }: UseStylesProps) => {\n const theme = useAppTheme();\n const { surface, surfaceDisabled } = theme.colors;\n\n const isDisabled = disabled === true;\n const isFocusedAndEnabled = isFocused && !isDisabled;\n\n // Priority: error > disabled > focus > normal\n const labelColor = getLabelColor({ theme, isError: !!isError, isDisabled, isFocusedAndEnabled });\n const borderColor = getBorderColor({ theme, isError: !!isError, isDisabled, isFocused });\n const borderWidth = isFocusedAndEnabled ? 2 : 1;\n\n const backgroundColor = isDisabled ? surfaceDisabled : 'transparent';\n\n return StyleSheet.create({\n dropdownTitle: {\n position: 'absolute',\n top: -theme.spacing(1),\n left: theme.spacing(1),\n backgroundColor: surface,\n paddingHorizontal: theme.spacing(0.75),\n color: labelColor,\n zIndex: 1,\n },\n dropdown: {\n height: 50,\n borderColor,\n borderWidth,\n borderRadius: theme.roundness,\n paddingHorizontal: theme.spacing(1),\n backgroundColor,\n },\n placeholderStyle: {\n color: textColor,\n },\n selectedTextStyle: {\n color: textColor,\n paddingLeft: theme.spacing(1),\n },\n });\n};\n","export interface FileInfo {\n exists: boolean;\n isDirectory?: boolean;\n size?: number;\n modificationTime?: number;\n uri: string;\n}\n\nexport interface DirectoryInfo {\n exists: boolean;\n isDirectory: boolean;\n uri: string;\n}\n\nexport enum EncodingType {\n UTF8 = 'utf8',\n Base64 = 'base64',\n}\n\nexport interface WriteOptions {\n encoding?: EncodingType;\n}\n\nexport interface ReadOptions {\n encoding?: EncodingType;\n}\n\nexport interface MakeDirectoryOptions {\n intermediates?: boolean;\n}\n\nexport interface DeleteOptions {\n idempotent?: boolean;\n}\n\nexport interface INativeFileSystem {\n readonly documentDirectory: string | null;\n readonly EncodingType: typeof EncodingType;\n\n writeAsStringAsync(fileUri: string, contents: string, options?: WriteOptions): Promise<void>;\n readAsStringAsync(fileUri: string, options?: ReadOptions): Promise<string>;\n\n getInfoAsync(fileUri: string): Promise<FileInfo>;\n\n readDirectoryAsync(fileUri: string): Promise<string[]>;\n makeDirectoryAsync(fileUri: string, options?: MakeDirectoryOptions): Promise<void>;\n\n deleteAsync(fileUri: string, options?: DeleteOptions): Promise<void>;\n}\n","import { getErrorMessage } from '@lichens-innovation/ts-common';\nimport { Buffer } from 'buffer';\nimport { Directory, File, Paths } from 'expo-file-system';\nimport * as FileSystemLegacy from 'expo-file-system/legacy';\n\nimport { logger } from '../../logger/logger';\nimport {\n EncodingType,\n FileInfo,\n INativeFileSystem,\n MakeDirectoryOptions,\n ReadOptions,\n WriteOptions,\n} from './native-file-system.types';\n\nexport class NativeFileSystem implements INativeFileSystem {\n public readonly documentDirectory: string | null = Paths.document.uri;\n public readonly cacheDirectory: string | null = Paths.cache.uri;\n\n public readonly EncodingType = EncodingType;\n\n async writeAsStringAsync(fileUri: string, contents: string, options?: WriteOptions): Promise<void> {\n const file = new File(fileUri);\n\n // for base64 encoding, pass the base64 string directly\n if (options?.encoding === EncodingType.Base64) {\n file.write(contents, { encoding: 'base64' });\n return;\n }\n\n // Default to UTF-8 string\n file.write(contents, { encoding: 'utf8' });\n }\n\n async readAsStringAsync(fileUri: string, options?: ReadOptions): Promise<string> {\n const file = new File(fileUri);\n\n if (options?.encoding === EncodingType.Base64) {\n const bytes = await file.bytes();\n return Buffer.from(bytes).toString('base64');\n }\n\n // default to UTF-8 text\n return file.textSync();\n }\n\n async readAsBase64Async(fileUri: string): Promise<string> {\n return this.readAsStringAsync(fileUri, { encoding: EncodingType.Base64 });\n }\n\n async getInfoAsync(fileUri: string): Promise<FileInfo> {\n const pathInfo = Paths.info(fileUri);\n\n if (pathInfo.isDirectory) {\n const directory = new Directory(fileUri);\n const info = directory.info();\n return {\n exists: info.exists,\n isDirectory: true,\n size: info.size,\n modificationTime: info.modificationTime,\n uri: fileUri,\n };\n }\n\n const file = new File(fileUri);\n const info = file.info();\n return {\n exists: info.exists,\n isDirectory: false,\n size: info.size,\n modificationTime: info.modificationTime,\n uri: fileUri,\n };\n }\n\n async copyContentUriToLocal(contentUri: string, fileName: string): Promise<string> {\n logger.info(`[copyContentUriToLocal] Copying content uri to local file: ${fileName}`);\n\n try {\n const localUri = `${Paths.document.uri}${fileName}`;\n // The new Expo SDK 54 API doesn't support content URIs\n // We need to use the legacy API for copying content URIs correctly\n await FileSystemLegacy.copyAsync({ from: contentUri, to: localUri });\n logger.info(`[copyContentUriToLocal] Copy successful: ${localUri}`);\n return localUri;\n } catch (e: unknown) {\n logger.error(`[copyContentUriToLocal] Copy failed: ${getErrorMessage(e)}`, e);\n throw e;\n }\n }\n\n async readDirectoryAsync(fileUri: string): Promise<string[]> {\n const directory = new Directory(fileUri);\n const contents = directory.list();\n return contents.map((item) => item.name);\n }\n\n async makeDirectoryAsync(fileUri: string, options?: MakeDirectoryOptions): Promise<void> {\n const directory = new Directory(fileUri);\n const intermediates = options?.intermediates ?? false;\n directory.create({ intermediates });\n }\n\n async deleteAsync(fileUri: string): Promise<void> {\n const pathInfo = Paths.info(fileUri);\n\n if (!pathInfo.exists) {\n logger.warn(`[deleteAsync] Path does not exist: ${fileUri}`);\n return;\n }\n\n if (pathInfo.isDirectory) {\n const directory = new Directory(fileUri);\n directory.delete();\n } else {\n const file = new File(fileUri);\n file.delete();\n }\n }\n}\n\nexport const nativeFileSystem = new NativeFileSystem();\n","import { hasScheme, SCHEME_PREFIXES } from '@lichens-innovation/ts-common';\n\nimport { logger } from '../logger/logger';\nimport { nativeFileSystem } from '../services/files/native-file-system';\nimport { EncodingType } from '../services/files/native-file-system.types';\n\nconst DEFAULT_ENCODING = EncodingType.UTF8;\nconst DEFAULT_OPTIONS = { encoding: DEFAULT_ENCODING };\n\nexport const isFileExists = async (fileUri = '') => {\n const { exists } = await nativeFileSystem.getInfoAsync(fileUri);\n return exists;\n};\n\nexport const getDocumentFolderRelativePath = (fileUri = '/') =>\n fileUri.substring(nativeFileSystem.documentDirectory?.length ?? 0);\n\nexport const getDocumentFullFilename = (filename = '') => nativeFileSystem.documentDirectory + filename;\n\nexport const createDirectoryStructure = async (folderUri = '') => {\n const exists = await isFileExists(folderUri);\n\n if (exists) {\n return { exists: true };\n }\n\n try {\n await nativeFileSystem.makeDirectoryAsync(folderUri, { intermediates: true });\n return { exists: true };\n } catch (error: unknown) {\n logger.error('createDirectoryStructure', error);\n return {\n exists: false,\n error,\n };\n }\n};\n\nexport interface FileMutationResult {\n exists: boolean;\n error?: unknown;\n}\n\nexport const saveTextContent = async ({ fileUri = '', text = '' }): Promise<FileMutationResult> => {\n try {\n await nativeFileSystem.writeAsStringAsync(fileUri, text, DEFAULT_OPTIONS);\n const exists = await isFileExists(fileUri);\n return { exists };\n } catch (error: unknown) {\n logger.error('saveTextContent', error);\n return {\n exists: false,\n error,\n };\n }\n};\n\nexport interface LoadTextContentResult {\n exists: boolean;\n content?: string;\n error?: unknown;\n}\n\nexport const loadTextContent = async (fileUri = ''): Promise<LoadTextContentResult> => {\n const exists = await isFileExists(fileUri);\n\n if (!exists) {\n return { exists };\n }\n\n try {\n const content = await nativeFileSystem.readAsStringAsync(fileUri, DEFAULT_OPTIONS);\n\n return {\n exists,\n content,\n };\n } catch (error: unknown) {\n logger.error('loadTextContent', error);\n return { exists, error };\n }\n};\n\nexport const deleteFile = async (fileUri = ''): Promise<FileMutationResult> => {\n const exists = await isFileExists(fileUri);\n\n if (!exists) {\n return { exists };\n }\n\n try {\n await nativeFileSystem.deleteAsync(fileUri);\n return { exists };\n } catch (error: unknown) {\n logger.error('deleteFile', error);\n return { exists, error };\n }\n};\n\nexport const nowAsIsoFilename = () => {\n const isoString = new Date().toISOString();\n\n // '2022-12-28T20:21:40.862Z' ==> '2022-12-28T20_21_40.862Z'\n return isoString.replace(new RegExp(':', 'g'), '_');\n};\n\nexport const isFileUri = (uri: string): boolean => {\n if (!hasScheme(uri)) {\n return false;\n }\n\n try {\n return new URL(uri).protocol === `${SCHEME_PREFIXES.file}:`;\n } catch (e: unknown) {\n logger.debug(`[isFileUri] Invalid URI: [${uri}]`, e);\n return false;\n }\n};\n\nexport const normalizeFileUri = (uri?: string | null): string => {\n if (!uri) {\n return '';\n }\n\n if (isFileUri(uri)) {\n return uri;\n }\n\n if (hasScheme(uri)) {\n logger.debug(`[normalizeFileUri] Non-file URI scheme provided: [${uri}]`);\n return '';\n }\n\n return `${SCHEME_PREFIXES.file}://${uri}`;\n};\n","import * as Sharing from 'expo-sharing';\nimport i18next from 'i18next';\nimport { Platform } from 'react-native';\nimport { loadCurrentLogsFileUri, logger } from '../logger/logger';\nimport { normalizeFileUri } from './file.utils';\n\nconst buildShareOptionsFromMimeType = (mimeType?: string): Sharing.SharingOptions => {\n if (!mimeType) {\n return {};\n }\n\n const dialogTitle = i18next.t('common:share');\n\n if (mimeType === 'text/plain') {\n return Platform.select({\n ios: { mimeType: 'public.plain-text', UTI: 'public.plain-text' },\n default: { dialogTitle, mimeType },\n }) as Sharing.SharingOptions;\n }\n\n if (['application/xml', 'text/xml'].includes(mimeType)) {\n return Platform.select({\n ios: { mimeType: 'application/xml', UTI: 'public.xml' },\n default: { dialogTitle, mimeType },\n }) as Sharing.SharingOptions;\n }\n\n return {};\n};\n\nexport const shareTextFile = async (fileUri?: string) => {\n return shareFile({ fileUri, mimeType: 'text/plain' });\n};\n\nexport const shareXmlFile = async (fileUri?: string) => {\n return shareFile({ fileUri, mimeType: 'application/xml' });\n};\n\ninterface ShareFileArgs {\n fileUri?: string;\n mimeType?: string;\n}\n\nexport const shareFile = async ({ fileUri, mimeType }: ShareFileArgs): Promise<void> => {\n if (!fileUri) {\n return;\n }\n\n const isAvailable = await Sharing.isAvailableAsync();\n if (!isAvailable) {\n logger.warn('Sharing is not available on this device');\n return;\n }\n\n const options = buildShareOptionsFromMimeType(mimeType);\n const normalizedFileUri = normalizeFileUri(fileUri);\n if (!normalizedFileUri) {\n logger.warn(`[shareFile] Invalid file URI: [${fileUri}]`);\n return;\n }\n\n try {\n logger.info(`Sharing file [${normalizedFileUri}] of type ${mimeType}.`);\n await Sharing.shareAsync(normalizedFileUri, options);\n } catch (e: unknown) {\n logger.error(`Error while sharing file [${normalizedFileUri}] of type ${mimeType}`, e);\n }\n};\n\nexport const shareCurrentLogsFile = async (): Promise<void> => {\n const logsFileUri = await loadCurrentLogsFileUri();\n return shareTextFile(logsFileUri);\n};\n","import { router, useLocalSearchParams } from 'expo-router';\nimport React, { type FunctionComponent } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { StyleSheet, View } from 'react-native';\nimport { Button, Card, Text } from 'react-native-paper';\nimport { useAppTheme } from '../../theme/theme';\nimport { shareCurrentLogsFile } from '../../utils/sharing.utils';\n\nexport const ErrorBoundaryScreen: FunctionComponent = () => {\n const styles = useStyles();\n const { t } = useTranslation();\n\n const { title, description, id } = useLocalSearchParams();\n\n return (\n <View style={styles.container}>\n <Card style={styles.card}>\n <Card.Title title={title} titleStyle={styles.errorText} />\n\n <Card.Content>\n <Text variant=\"titleMedium\" style={styles.label}>\n ID:\n </Text>\n <Text variant=\"bodySmall\">{id}</Text>\n\n <Text variant=\"titleMedium\" style={styles.label}>\n Description:\n </Text>\n <Text variant=\"bodySmall\">{description}</Text>\n </Card.Content>\n\n <Card.Actions>\n <Button mode=\"outlined\" onPress={shareCurrentLogsFile}>\n {t('common:errorBoundary.details')}\n </Button>\n <Button mode=\"contained\" onPress={() => router.replace('/')}>\n {t('common:close')}\n </Button>\n </Card.Actions>\n </Card>\n </View>\n );\n};\n\nconst useStyles = () => {\n const theme = useAppTheme();\n\n return StyleSheet.create({\n container: {\n flex: 1,\n marginTop: theme.spacing(2),\n padding: theme.spacing(2),\n },\n card: {\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: theme.colors.error,\n },\n errorText: {\n color: theme.colors.error,\n },\n label: {\n marginTop: theme.spacing(1),\n color: theme.colors.onSurfaceVariant,\n },\n });\n};\n","import { getErrorMessage } from '@lichens-innovation/ts-common';\nimport { useTranslation } from 'react-i18next';\nimport uuid from 'react-native-uuid';\n\nexport const useErrorDetails = (error: unknown) => {\n const { t } = useTranslation();\n\n const id = uuid.v4();\n const title = t('common:error');\n const errorMsg = getErrorMessage(error) || 'Unknown';\n const description = t('common:errorBoundary.error', { id, errorMsg });\n const stack = error instanceof Error ? error.stack : '';\n\n return {\n id,\n title,\n errorMsg,\n description,\n stack,\n };\n};\n","import { ErrorBoundaryProps, useRouter } from 'expo-router';\nimport * as Sentry from '@sentry/react-native';\nimport { FunctionComponent, useEffect } from 'react';\nimport { logger } from '../../logger/logger';\nimport { useErrorDetails } from './use-error-details';\n\nexport const ErrorBoundary: FunctionComponent<ErrorBoundaryProps> = ({ error }) => {\n const router = useRouter();\n const { title, description, errorMsg, id, stack } = useErrorDetails(error);\n\n useEffect(() => {\n logger.error(`ErrorBoundary Unexpected error: ${errorMsg} (ID: ${id}). Stack: ${stack}`, error);\n Sentry.captureException(error, {\n extra: {\n title,\n description,\n errorMsg,\n id,\n stack,\n },\n });\n\n router.replace({\n pathname: '/error',\n params: { title, description, errorMsg, id },\n });\n }, [router, error]);\n\n return null;\n};\n","import React, { FunctionComponent } from 'react';\nimport { Platform, StyleSheet } from 'react-native';\nimport { ScrollView } from 'react-native-gesture-handler';\nimport { Text } from 'react-native-paper';\nimport { useAppTheme } from '../../theme/theme';\n\ninterface ErrorDetailsProps {\n error: Error;\n title?: string;\n}\n\nexport const ErrorDetails: FunctionComponent<ErrorDetailsProps> = ({ error, title = 'Error' }) => {\n const styles = useStyles();\n\n const errorToStringify = {\n ...error,\n stack: undefined,\n };\n\n return (\n <ScrollView style={styles.container}>\n <Text variant=\"bodySmall\" style={styles.errorText}>\n {title}\n </Text>\n <Text style={styles.jsonText}>{JSON.stringify(errorToStringify, null, 2)}</Text>\n </ScrollView>\n );\n};\n\nconst useStyles = () => {\n const theme = useAppTheme();\n\n return StyleSheet.create({\n container: {\n flex: 1,\n padding: theme.spacing(2),\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: theme.colors.error,\n },\n errorText: {\n color: theme.colors.error,\n },\n jsonText: {\n fontSize: 12,\n fontFamily: Platform.select({\n ios: 'Menlo',\n default: 'monospace',\n }),\n },\n });\n};\n","import { LegendList } from '@legendapp/list';\nimport { useToggle } from '@uidotdev/usehooks';\nimport { format } from 'date-fns';\nimport { filesize } from 'filesize';\nimport React, { FunctionComponent, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { StyleSheet, View } from 'react-native';\nimport { Button, Icon, IconButton, List, Text } from 'react-native-paper';\nimport { deleteAllLogFiles, loadAllLogFilesInfo } from '../../logger/logger';\nimport { FileInfo } from '../../services/files/native-file-system.types';\nimport { useAppTheme } from '../../theme/theme';\nimport { shareTextFile } from '../../utils/sharing.utils';\nimport { DialogOkCancel } from '../dialogs/dialog-ok-cancel';\n\nexport const EventLogsScreen: FunctionComponent = () => {\n const styles = useStyles();\n const theme = useAppTheme();\n const { t } = useTranslation();\n const [files, setFiles] = useState<FileInfo[]>([]);\n\n useEffect(() => {\n loadAllLogFilesInfo().then(setFiles);\n }, []);\n\n const [isDeleteDialogVisible, toggleDeleteConfirmVisibility] = useToggle(false);\n const onDeleteConfirmed = () => {\n deleteAllLogFiles()\n .then(() => setFiles([]))\n .finally(() => toggleDeleteConfirmVisibility());\n };\n\n return (\n <View style={styles.container}>\n <Text variant=\"titleMedium\" style={styles.title}>\n {t('common:eventLogs')}\n </Text>\n\n <LegendList\n data={files}\n renderItem={({ item }: { item: FileInfo }) => {\n const title = item.uri.split('/').pop();\n const updatedAt = 'modificationTime' in item ? new Date(item.modificationTime ?? 0) : new Date();\n const formattedUpdatedAt = format(updatedAt, 'yyyy-MM-dd HH:mm:ss');\n const size = 'size' in item ? filesize(item.size ?? 0) : '';\n const description = `${formattedUpdatedAt} [ ${size} ]`;\n\n return (\n <List.Item\n title={title}\n description={description}\n left={(props) => <List.Icon {...props} icon={(props) => <Icon source=\"file-document\" {...props} />} />}\n right={() => (\n <IconButton iconColor={theme.colors.primary} icon=\"share\" onPress={() => shareTextFile(item.uri)} />\n )}\n />\n );\n }}\n estimatedItemSize={30}\n />\n\n <View style={styles.actions}>\n <Button mode=\"outlined\" icon=\"delete\" onPress={() => toggleDeleteConfirmVisibility()}>\n {t('common:delete')}\n </Button>\n </View>\n\n <DialogOkCancel\n icon=\"alert\"\n title={t('common:confirm')}\n description={t('common:deleteAllLogsFilesConfirmation')}\n isVisible={isDeleteDialogVisible}\n onOk={onDeleteConfirmed}\n onCancel={toggleDeleteConfirmVisibility}\n />\n </View>\n );\n};\n\nconst useStyles = () => {\n const theme = useAppTheme();\n\n return StyleSheet.create({\n container: {\n flex: 1,\n padding: theme.spacing(2),\n },\n title: {\n marginBottom: theme.spacing(2),\n },\n fileItem: {\n padding: theme.spacing(2),\n borderBottomWidth: 1,\n borderBottomColor: theme.colors.outline,\n },\n actions: {\n flexDirection: 'row',\n justifyContent: 'center',\n gap: theme.spacing(2),\n },\n sharePressed: {\n opacity: 0.5,\n },\n });\n};\n","import { FunctionComponent } from 'react';\nimport { TextInput } from 'react-native-paper';\n\ninterface LogEntryItemSuffixProps {\n filterText: string;\n onPress: () => void;\n}\n\nexport const LogEntryItemSuffix: FunctionComponent<LogEntryItemSuffixProps> = ({ filterText, onPress }) => {\n return <TextInput.Icon icon={filterText ? 'close' : 'magnify'} onPress={onPress} />;\n};\n","import { useIsDarkMode } from '../theme/theme';\nimport { LOG_LEVELS } from './logger.types';\n\nconst LOG_COLORS_DARK_MODE = new Map<number, string>([\n [LOG_LEVELS.debug, '#9e9e9e'],\n [LOG_LEVELS.log, '#e0e0e0'],\n [LOG_LEVELS.info, '#64b5f6'],\n [LOG_LEVELS.warn, '#ffb74d'],\n [LOG_LEVELS.error, '#ef5350'],\n]);\n\nconst LOG_COLORS_LIGHT_MODE = new Map<number, string>([\n [LOG_LEVELS.debug, '#757575'],\n [LOG_LEVELS.log, '#424242'],\n [LOG_LEVELS.info, '#1976d2'],\n [LOG_LEVELS.warn, '#f57c00'],\n [LOG_LEVELS.error, '#d32f2f'],\n]);\n\nexport const useLogEntryColor = (severity: number) => {\n const isDarkMode = useIsDarkMode();\n const colors = isDarkMode ? LOG_COLORS_DARK_MODE : LOG_COLORS_LIGHT_MODE;\n\n return colors.get(severity) ?? 'orange';\n};\n","export const formatLogMessage = (msg: string): string => {\n // remove the DATE part of the timestamp from the very beginning of the message (ISO 8601 format)\n // this allows to have a more readable log message on small devices\n return msg.substring(11);\n};\n","import React, { type FunctionComponent } from 'react';\nimport { Platform, Pressable, ScrollView, StyleSheet } from 'react-native';\nimport { Text } from 'react-native-paper';\n\nimport { useTranslation } from 'react-i18next';\nimport { LogEntry } from '../../../logger/logger.types';\nimport { useLogEntryColor } from '../../../logger/use-log-entry-color';\nimport { useAppTheme } from '../../../theme/theme';\nimport { setClipboardTextContent } from '../../../utils/clipboard.utils';\nimport { useSnackbar } from '../../snack-bar/snackbar-provider';\nimport { formatLogMessage } from './logs-viewer.utils';\n\ninterface LogEntryItemProps {\n logEntry: LogEntry;\n}\n\nexport const LogEntryItem: FunctionComponent<LogEntryItemProps> = ({ logEntry }) => {\n const styles = useStyles();\n const { showSnackbarMessage } = useSnackbar();\n const { t } = useTranslation();\n\n const color = useLogEntryColor(logEntry.level.severity);\n\n const handleLongPress = async (text: string) => {\n await setClipboardTextContent(text);\n showSnackbarMessage(t('common:copiedToClipboard'));\n };\n\n return (\n <ScrollView horizontal={true} showsHorizontalScrollIndicator={false} contentContainerStyle={styles.logEntry}>\n <Pressable onLongPress={() => handleLongPress(logEntry.msg)}>\n <Text style={[styles.logText, { color }]}>{formatLogMessage(logEntry.msg)}</Text>\n </Pressable>\n </ScrollView>\n );\n};\n\nconst useStyles = () => {\n const theme = useAppTheme();\n\n return StyleSheet.create({\n logEntry: {\n paddingHorizontal: theme.spacing(0.5),\n },\n logText: {\n fontFamily: Platform.select({\n ios: 'Menlo',\n default: 'monospace',\n }),\n },\n });\n};\n","import { LegendListRef } from '@legendapp/list';\nimport { useToggle } from '@uidotdev/usehooks';\nimport { useRef } from 'react';\n\nexport const useAutoScroll = <T>(shouldAutoScroll: boolean = false) => {\n const listRef = useRef<LegendListRef>(null);\n const [isAutoScrollEnabled, toggleAutoScroll] = useToggle(shouldAutoScroll);\n\n const scrollToBottom = (items: T[]) => {\n if (!isAutoScrollEnabled || !listRef.current || !items.length) {\n return;\n }\n\n const lastItemIndex = items.length - 1;\n listRef.current.scrollToIndex({ index: lastItemIndex, animated: false, viewPosition: 1 });\n };\n\n return {\n listRef,\n scrollToBottom,\n isAutoScrollEnabled,\n toggleAutoScroll,\n };\n};\n","import { useDebounce } from '@uidotdev/usehooks';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { commonLogsStore } from '../../../store/common-logs.store';\nimport { setClipboardTextContent } from '../../../utils/clipboard.utils';\nimport { useSnackbar } from '../../snack-bar/snackbar-provider';\n\nexport const useLogsActions = () => {\n const { showSnackbarMessage } = useSnackbar();\n const { t } = useTranslation();\n\n const [filterText, setFilterText] = useState('');\n const debouncedFilterText = useDebounce(filterText, 300);\n const filteredLogs = commonLogsStore.filterLogs(debouncedFilterText);\n\n const handleCopyAllLogs = async () => {\n await setClipboardTextContent(commonLogsStore.allLogsAsText);\n showSnackbarMessage(t('common:copiedToClipboard'));\n };\n\n return {\n filterText,\n setFilterText,\n filteredLogs,\n handleCopyAllLogs,\n };\n};\n","import { LegendList } from '@legendapp/list';\nimport { observer } from 'mobx-react-lite';\nimport { type FunctionComponent, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { LogBox, Platform, StyleSheet, View } from 'react-native';\nimport { IconButton, TextInput } from 'react-native-paper';\n\nimport { LogEntry } from '../../../logger/logger.types';\nimport { commonLogsStore } from '../../../store/common-logs.store';\nimport { useAppTheme } from '../../../theme/theme';\nimport { LogEntryItem } from './log-entry-item';\nimport { LogEntryItemSuffix } from './log-entry-item-suffix';\nimport { useAutoScroll } from './use-auto-scroll';\nimport { useLogsActions } from './use-logs-actions';\n\ninterface LogsViewerProps {\n shouldDisplayToolbar?: boolean;\n shouldAutoScroll?: boolean;\n}\n\nexport const LogsViewer: FunctionComponent<LogsViewerProps> = observer(\n ({ shouldDisplayToolbar = true, shouldAutoScroll = false }) => {\n const styles = useStyles();\n const { t } = useTranslation();\n\n const { filterText, setFilterText, filteredLogs, handleCopyAllLogs } = useLogsActions();\n const { listRef, scrollToBottom, toggleAutoScroll, isAutoScrollEnabled } =\n useAutoScroll<LogEntry>(shouldAutoScroll);\n\n useEffect(() => scrollToBottom(filteredLogs), [filteredLogs, scrollToBottom]);\n useEffect(() => LogBox.ignoreAllLogs(), []);\n\n return (\n <View style={styles.container}>\n {shouldDisplayToolbar && (\n <View style={styles.actionsBar}>\n <TextInput\n mode={Platform.OS === 'windows' ? 'flat' : 'outlined'}\n autoCapitalize=\"none\"\n value={filterText}\n onChangeText={setFilterText}\n placeholder={t('common:logs.filter')}\n style={styles.filterInput}\n right={\n Platform.OS === 'windows' ? undefined : (\n <LogEntryItemSuffix filterText={filterText} onPress={() => setFilterText('')} />\n )\n }\n />\n <IconButton\n icon={isAutoScrollEnabled ? 'arrow-down-bold' : 'arrow-down-bold-outline'}\n mode=\"contained\"\n onPress={() => toggleAutoScroll()}\n style={styles.button}\n accessibilityLabel={t('common:toggleAutoScroll')}\n />\n <IconButton\n icon=\"delete\"\n mode=\"contained\"\n onPress={() => commonLogsStore.clearLogs()}\n style={styles.button}\n accessibilityLabel={t('common:logs.clear')}\n />\n <IconButton\n icon=\"content-copy\"\n mode=\"contained\"\n onPress={handleCopyAllLogs}\n style={styles.button}\n accessibilityLabel={t('common:logs.copyAll')}\n />\n </View>\n )}\n\n <LegendList<LogEntry>\n ref={listRef}\n data={filteredLogs}\n renderItem={({ item }: { item: LogEntry }) => <LogEntryItem logEntry={item} />}\n estimatedItemSize={30}\n keyExtractor={(logEntry, index) => `${logEntry.msg.substring(0, 20)}_${index}`}\n />\n </View>\n );\n }\n);\n\nconst useStyles = () => {\n const theme = useAppTheme();\n\n return StyleSheet.create({\n container: {\n flex: 1,\n },\n actionsBar: {\n flexDirection: 'row',\n padding: theme.spacing(0.5),\n marginBottom: theme.spacing(0.5),\n alignItems: 'center',\n },\n filterInput: {\n flex: 1,\n height: 40,\n },\n button: {\n marginVertical: 0,\n },\n });\n};\n","import { type FunctionComponent } from 'react';\nimport { StyleSheet } from 'react-native';\nimport { IconButton } from 'react-native-paper';\nimport { useAppTheme } from '../../theme/theme';\n\ntype Props = {\n iconName: string;\n onPress?: () => void;\n};\n\nexport const HeaderButton: FunctionComponent<Props> = ({ iconName, onPress }) => {\n const styles = useStyles();\n const theme = useAppTheme();\n\n return (\n <IconButton icon={iconName} size={25} iconColor={theme.colors.primary} style={styles.iconStyle} onPress={onPress} />\n );\n};\n\nconst useStyles = () => {\n const theme = useAppTheme();\n\n return StyleSheet.create({\n iconStyle: {\n marginHorizontal: theme.spacing(2),\n },\n });\n};\n","import React, { FunctionComponent } from 'react';\nimport { router } from 'expo-router';\nimport { HeaderButton } from './header-button';\n\nexport const HeaderBackButton: FunctionComponent = () => (\n <HeaderButton iconName=\"arrow-left\" onPress={() => router.back()} />\n);\n","import { FunctionComponent } from 'react';\n\nimport { useToggle } from '@uidotdev/usehooks';\nimport { Button, Menu } from 'react-native-paper';\nimport { LanguageSelectorProps } from './language-selector.types';\n\nexport const LanguageSelectorMenu: FunctionComponent<LanguageSelectorProps> = ({\n onLanguageChange,\n label,\n currentLanguage,\n supportedLanguages,\n}) => {\n const [isMenuVisible, toggleMenu] = useToggle(false);\n const actionLabel = `${label} (${currentLanguage})`;\n\n const onLanguageSelected = (newCode: string) => {\n onLanguageChange(newCode);\n toggleMenu(false);\n };\n\n return (\n <Menu\n key={String(isMenuVisible)} //Workaround for issue https://github.com/callstack/react-native-paper/issues/4807\n visible={isMenuVisible}\n onDismiss={() => toggleMenu(false)}\n anchorPosition=\"bottom\"\n anchor={\n <Button mode=\"outlined\" onPress={() => toggleMenu(true)} icon=\"translate\">\n {actionLabel}\n </Button>\n }\n >\n {supportedLanguages.map(({ code, selectionLabel }) => (\n <Menu.Item\n key={code}\n title={`${selectionLabel} (${code})`}\n trailingIcon={code === currentLanguage ? 'check' : undefined}\n onPress={() => onLanguageSelected(code)}\n />\n ))}\n </Menu>\n );\n};\n","import { FunctionComponent } from 'react';\n\nimport { SegmentedButtons } from 'react-native-paper';\nimport { LanguageSelectorProps } from './language-selector.types';\n\nexport const LanguageSelectorSegmented: FunctionComponent<LanguageSelectorProps> = ({\n onLanguageChange,\n currentLanguage,\n supportedLanguages,\n}) => {\n return (\n <SegmentedButtons\n value={currentLanguage}\n onValueChange={onLanguageChange}\n style={{ minWidth: supportedLanguages.length * 100 }}\n buttons={supportedLanguages.map(({ code, selectionLabel }) => ({\n value: code,\n label: selectionLabel,\n }))}\n />\n );\n};\n","import { FunctionComponent } from 'react';\n\nimport { DropDownSelector } from '../drop-down-selector/drop-down-selector';\nimport { LanguageSelectorProps } from './language-selector.types';\n\nexport const LanguageSelector: FunctionComponent<LanguageSelectorProps> = ({\n onLanguageChange,\n label,\n currentLanguage,\n supportedLanguages,\n placeholder,\n searchPlaceholder,\n}) => {\n const options = supportedLanguages.map((lang) => ({\n label: lang.selectionLabel,\n value: lang.code,\n }));\n\n return (\n <DropDownSelector\n label={label}\n value={currentLanguage}\n onChange={onLanguageChange}\n options={options}\n placeholder={placeholder}\n searchPlaceholder={searchPlaceholder}\n />\n );\n};\n","import React, { PropsWithChildren, type FunctionComponent } from 'react';\nimport { View, ViewStyle } from 'react-native';\n\ninterface FullCenteredProps extends PropsWithChildren {\n style?: ViewStyle;\n}\n\nexport const FullCentered: FunctionComponent<FullCenteredProps> = ({ children, style }) => (\n <View style={[style, { flex: 1, justifyContent: 'center', alignItems: 'center' }]}>{children}</View>\n);\n","import { useWindowDimensions } from 'react-native';\n\nexport type WindowOrientation = 'portrait' | 'landscape';\n\nexport const useWindowOrientation = (): WindowOrientation => {\n const { width, height } = useWindowDimensions();\n return width > height ? 'landscape' : 'portrait';\n};\n\nexport const useIsLandscape = (): boolean => {\n const orientation = useWindowOrientation();\n return orientation === 'landscape';\n};\n","import { StyleSheet } from 'react-native';\nimport { Icon } from 'react-native-paper';\n\ntype IconLibrary =\n | 'AntDesign'\n | 'Entypo'\n | 'EvilIcons'\n | 'Feather'\n | 'FontAwesome'\n | 'FontAwesome5'\n | 'FontAwesome6'\n | 'Fontisto'\n | 'Foundation'\n | 'Ionicons'\n | 'MaterialCommunityIcons'\n | 'MaterialIcons'\n | 'Octicons'\n | 'SimpleLineIcons'\n | 'Zocial';\n\ntype IconProps = {\n library?: IconLibrary;\n name: string;\n color?: string;\n size?: number;\n};\n\nexport const TabBarIcon = ({ name, color, size = 28 }: IconProps) => {\n return <Icon source={name} size={size} color={color} />;\n};\n\nexport const styles = StyleSheet.create({\n tabBarIcon: {\n marginBottom: 0,\n },\n});\n","import { TabTriggerSlotProps } from 'expo-router/ui';\nimport { FunctionComponent } from 'react';\nimport { Pressable, StyleSheet } from 'react-native';\nimport { Text } from 'react-native-paper';\nimport { useIsLandscape } from '../../../hooks/use-window-orientation';\nimport { useAppTheme } from '../../../theme/theme';\nimport { TabBarIcon } from '../../tab-bar-icon';\n\nexport type OrientationAwareTabButtonProps = TabTriggerSlotProps & {\n icon: string;\n title: string;\n activeColor: string;\n isLabelHidden?: boolean;\n};\n\nexport const OrientationAwareTabButton: FunctionComponent<OrientationAwareTabButtonProps> = ({\n icon,\n title,\n activeColor,\n isFocused,\n isLabelHidden = false,\n ...props\n}) => {\n const theme = useAppTheme();\n const styles = useStyles();\n const isLabelVisible: boolean = !isLabelHidden;\n const color = isFocused ? activeColor : theme.colors.onSurfaceDisabled;\n\n return (\n <Pressable {...props} style={[styles.tabButton]}>\n <TabBarIcon name={icon} color={color} />\n\n {isLabelVisible && (\n <Text variant=\"bodySmall\" style={{ color }}>\n {title}\n </Text>\n )}\n </Pressable>\n );\n};\n\nconst useStyles = () => {\n const theme = useAppTheme();\n const isLandscape = useIsLandscape();\n const padding = theme.spacing(0.5);\n\n return StyleSheet.create({\n tabButton: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingLeft: isLandscape ? padding : 0,\n paddingTop: isLandscape ? 0 : padding,\n },\n });\n};\n","import { TabList, Tabs, TabSlot, TabTrigger } from 'expo-router/ui';\nimport { FunctionComponent } from 'react';\nimport { StyleSheet, ViewStyle } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useIsLandscape } from '../../../hooks/use-window-orientation';\nimport { useAppTheme } from '../../../theme/theme';\nimport { OrientationAwareTabButton } from './orientation-aware-tab-button';\n\nexport type TabItem = {\n name: string;\n href: string;\n title: string;\n icon: string;\n};\n\nexport type OrientationAwareTabsLayoutProps = {\n tabs: TabItem[];\n activeColor?: string;\n containerStyle?: ViewStyle;\n tabListStyle?: ViewStyle;\n};\n\nexport const OrientationAwareTabsLayout: FunctionComponent<OrientationAwareTabsLayoutProps> = ({\n tabs,\n activeColor,\n containerStyle,\n tabListStyle,\n}) => {\n const theme = useAppTheme();\n const styles = useStyles();\n const isLandscape = useIsLandscape();\n\n return (\n <Tabs style={[styles.tabsContainer, containerStyle]}>\n <TabSlot style={styles.tabSlot} />\n\n <TabList style={[styles.tabList, tabListStyle]}>\n {tabs.map((tab) => (\n <TabTrigger key={tab.name} name={tab.name} href={tab.href} asChild>\n <OrientationAwareTabButton\n isLabelHidden={isLandscape}\n icon={tab.icon}\n title={tab.title}\n activeColor={activeColor ?? theme.colors.primary}\n />\n </TabTrigger>\n ))}\n </TabList>\n </Tabs>\n );\n};\n\nconst useStyles = () => {\n const theme = useAppTheme();\n const { bottom, right } = useSafeAreaInsets();\n\n const minPadding = theme.spacing(0.5);\n\n const isLandscape = useIsLandscape();\n\n return StyleSheet.create({\n tabsContainer: {\n flex: 1,\n flexDirection: isLandscape ? 'row' : 'column',\n },\n tabSlot: {\n flex: 1,\n },\n tabList: {\n backgroundColor: theme.colors.elevation.level1,\n justifyContent: 'space-around',\n flexDirection: isLandscape ? 'column' : 'row',\n paddingBottom: isLandscape ? minPadding : bottom,\n paddingRight: isLandscape ? right : minPadding,\n borderTopWidth: isLandscape ? undefined : StyleSheet.hairlineWidth,\n borderTopColor: isLandscape ? undefined : theme.colors.outline,\n borderLeftWidth: isLandscape ? StyleSheet.hairlineWidth : undefined,\n borderLeftColor: isLandscape ? theme.colors.outline : undefined,\n },\n });\n};\n","import { Alert } from 'react-native';\n\nexport const askConfirmation = async (question: string) =>\n new Promise((resolve) => {\n Alert.alert('Confirmation', question, [\n {\n text: 'Cancel',\n onPress: () => resolve(false),\n style: 'cancel',\n },\n { text: 'OK', onPress: () => resolve(true) },\n ]);\n });\n","import { type AxiosResponse, type InternalAxiosRequestConfig } from 'axios';\nimport { logger } from './logger';\nimport { LOG_LEVELS, LogLevel, LogLevelKey } from './logger.types';\n\nconst X_REQUEST_START_TIME = 'x-request-start-time';\n\nexport const toLogLevel = (type: string): LogLevel => {\n const logLevelKey = type.toLowerCase() as LogLevelKey;\n\n return {\n text: type.toUpperCase(),\n severity: LOG_LEVELS[logLevelKey],\n };\n};\n\nexport const logRequestStart = (request: InternalAxiosRequestConfig) => {\n request.headers.set(X_REQUEST_START_TIME, Date.now().toString());\n return request;\n};\n\nexport const sanitizeUrl = (url?: string | null) => {\n if (!url) return url;\n\n // remove any user:password@ from the url\n const regExp = /http:\\/\\/(.*):(.*)@(.*)/;\n const isMatching = url.match(regExp);\n return isMatching ? `http://${isMatching[3]}` : url;\n};\n\nexport const logRequestEnd = (response: AxiosResponse) => {\n const { status, config } = response;\n const { method, baseURL, url } = config;\n\n const startTime = Number(config.headers.get(X_REQUEST_START_TIME) ?? 0);\n const duration = startTime ? `(${Date.now() - startTime}ms)` : '';\n\n const { verb, fullUrl } = buildRequestLogInfos({ baseURL, url, method });\n const sanitizedUrl = sanitizeUrl(fullUrl);\n logger.info(`➡️ Axios ${verb} ${sanitizedUrl} http ${status} ${duration}.`);\n\n return response;\n};\n\ntype BuildRequestLogInfosArgs = {\n baseURL?: string;\n url?: string;\n method?: string;\n};\nconst buildRequestLogInfos = ({ baseURL, url, method }: BuildRequestLogInfosArgs) => {\n const fullUrl = `${baseURL ?? ''}${url ?? ''}`;\n const verb = method?.toUpperCase() ?? '';\n\n return { verb, fullUrl };\n};\n","import { PeriodsInMS } from '@lichens-innovation/ts-common';\nimport axios from 'axios';\n\nimport { logRequestEnd, logRequestStart } from '../logger/logger.utils';\nimport { getAppIdentifier, getDeviceType } from './device.utils';\n\nexport const axiosInstance = axios.create({\n timeout: 10 * PeriodsInMS.oneSecond,\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': `native module ${getAppIdentifier()} - ${getDeviceType()}`,\n },\n});\n\naxiosInstance.interceptors.request.use(logRequestStart);\naxiosInstance.interceptors.response.use(logRequestEnd);\n\nexport default axiosInstance;\n","import { Buffer } from 'buffer';\n\nexport const base64Encode = (text: string): string => {\n return Buffer.from(text).toString('base64');\n};\n\nexport const base64Decode = (base64: string): string => {\n return Buffer.from(base64, 'base64').toString('utf-8');\n};\n","export const dateToISOLikeButLocal = (date: Date): string => {\n const offsetMs = date.getTimezoneOffset() * 60 * 1000;\n const msLocal = date.getTime() - offsetMs;\n const dateLocal = new Date(msLocal);\n const iso = dateLocal.toISOString();\n const isoLocal = iso.slice(0, 19);\n\n return isoLocal;\n};\n\nexport const nowToISOLikeButLocal = (): string => dateToISOLikeButLocal(new Date());\n\nexport const nowToISOLikeButLocalForFilename = (): string => {\n const isoLocal = nowToISOLikeButLocal();\n const isoLocalForFilename = isoLocal.replace(/:/g, '-');\n\n return isoLocalForFilename;\n};\n","import { md5 } from '@noble/hashes/legacy.js';\nimport { bytesToHex, utf8ToBytes } from '@noble/hashes/utils.js';\nimport { AxiosRequestConfig } from 'axios';\nimport { produce } from 'immer';\nimport { logger } from '../logger/logger';\nimport { sanitizeUrl } from '../logger/logger.utils';\nimport axiosInstance from './axios.config';\nimport { validateGetRandomValues } from './env.utils';\n\nexport interface DigestAuthArgs {\n username: string;\n password: string;\n shouldEmit2ndRequest?: boolean;\n}\n\nexport interface ReplyToDigestChallengeArgs {\n config: AxiosRequestConfig;\n authHeaderValue: string;\n}\n\nexport class DigestAuth {\n private username: string;\n private password: string;\n private nonce: string | null = null;\n private realm: string | null = null;\n private qop: string | null = null;\n private opaque: string | null = null;\n private algorithm: string | null = null;\n private nc: number = 0;\n\n private shouldEmit2ndRequest: boolean = true;\n\n constructor({ username, password, shouldEmit2ndRequest = true }: DigestAuthArgs) {\n this.username = username;\n this.password = password;\n this.shouldEmit2ndRequest = shouldEmit2ndRequest;\n }\n\n private md5(str: string): string {\n return bytesToHex(md5(utf8ToBytes(str)));\n }\n\n private getRandomBytes(length: number): Uint8Array {\n const isOK = validateGetRandomValues();\n if (isOK) {\n return crypto.getRandomValues(new Uint8Array(length));\n } else {\n throw new Error('[DigestAuth] crypto.getRandomValues is not available');\n }\n }\n\n private generateCNonce(): string {\n const randomBytes = this.getRandomBytes(8);\n return bytesToHex(randomBytes);\n }\n\n private parseAuthHeader(header: string): void {\n const parts = header.match(/(\\w+)=(\"[^\"]+\"|[^,]+)/g);\n if (!parts) return;\n\n parts.forEach((part) => {\n const [key, value] = part.split('=');\n const cleanValue = value.replace(/^\"|\"$/g, '');\n switch (key.trim()) {\n case 'nonce':\n if (this.nonce !== cleanValue) {\n this.nonce = cleanValue;\n this.nc = 0;\n }\n break;\n case 'realm':\n this.realm = cleanValue;\n break;\n case 'qop':\n this.qop = cleanValue;\n break;\n case 'opaque':\n this.opaque = cleanValue;\n break;\n case 'algorithm':\n this.algorithm = cleanValue;\n break;\n case 'stale':\n if (cleanValue === 'true') {\n this.nonce = null; // force refresh\n this.nc = 0;\n }\n break;\n }\n });\n\n if (!this.nonce || !this.realm) {\n throw new Error('Failed to parse authentication headers');\n }\n }\n\n private extractPathAndQuery(url: string): string {\n try {\n const parsed = new URL(url);\n return parsed.pathname + parsed.search;\n } catch {\n return url;\n }\n }\n\n private generateAuthHeader(config: AxiosRequestConfig): string {\n if (!this.nonce || !this.realm) {\n throw new Error('Missing nonce or realm');\n }\n\n const method = config.method?.toUpperCase() || 'GET';\n const uri = this.extractPathAndQuery(config.url || '');\n const cnonce = this.generateCNonce();\n const ncHex = (++this.nc).toString(16).padStart(8, '0');\n const qop = this.qop || 'auth';\n\n const ha1 = this.md5(`${this.username}:${this.realm}:${this.password}`);\n const ha2 = this.md5(`${method}:${uri}`);\n const response = this.md5(`${ha1}:${this.nonce}:${ncHex}:${cnonce}:${qop}:${ha2}`);\n\n return `Digest username=\"${this.username}\", realm=\"${this.realm}\", nonce=\"${this.nonce}\", uri=\"${uri}\", algorithm=${this.algorithm || 'MD5'}, response=\"${response}\", qop=${qop}, nc=${ncHex}, cnonce=\"${cnonce}\"${this.opaque ? `, opaque=\"${this.opaque}\"` : ''}`;\n }\n\n async request(config: AxiosRequestConfig): Promise<unknown> {\n try {\n const method = config.method?.toUpperCase() ?? 'GET';\n logger.debug(`[DigestAuth] ${method}: ${sanitizeUrl(config.url)}`);\n const response = await axiosInstance(config);\n logger.debug(`[DigestAuth] response status: ${response.status}`);\n\n return response;\n } catch (e: unknown) {\n this.handleNoResponseError(e);\n\n const { authHeader, isDigestChallenge } = this.parseHttpErrorHeaders(e);\n\n if (!isDigestChallenge) {\n const err = e as { code?: string; response?: { status?: number } };\n logger.info(`[DigestAuth] error received. Axios error code: \"${err.code}\" status: \"${err.response?.status}\"`);\n throw e;\n }\n\n logger.debug('[DigestAuth] Received Unauthorized with Digest header challenge.');\n this.parseAuthHeader(authHeader);\n const authHeaderValue = this.generateAuthHeader(config);\n\n if (this.shouldEmit2ndRequest) {\n return this.replyToDigestChallenge({ config, authHeaderValue });\n } else {\n return authHeaderValue;\n }\n }\n }\n\n private handleNoResponseError(e: unknown) {\n if (typeof e !== 'object' || e === null) return;\n if (!('code' in e) || !('response' in e)) return;\n\n const hasReceivedResponse = e.response !== undefined;\n if (!hasReceivedResponse) {\n logger.info(`[DigestAuth] no response. Axios error code: \"${e.code}\"`);\n throw e;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- error object shape from axios is not typed\n private parseHttpErrorHeaders(e: any) {\n const isUnauthorized = e.response?.status === 401;\n const authHeader = e.response?.headers?.['www-authenticate'];\n const hasDigestHeader = authHeader?.startsWith('Digest');\n const isDigestChallenge = isUnauthorized && hasDigestHeader;\n\n return { isUnauthorized, authHeader, hasDigestHeader, isDigestChallenge };\n }\n\n private replyToDigestChallenge({ config, authHeaderValue }: ReplyToDigestChallengeArgs) {\n const newConfig = produce(config, (draft) => {\n const originalHeaders = draft.headers ?? {};\n draft.headers = {\n ...originalHeaders,\n Authorization: authHeaderValue,\n };\n });\n\n logger.debug(`[DigestAuth] emitting 2nd request with new config for url: ${sanitizeUrl(config.url)}`);\n return axiosInstance(newConfig);\n }\n}\n","import { getErrorMessage } from '@lichens-innovation/ts-common';\n\nimport { logger } from '../logger/logger';\n\ninterface ErrorLogHandlerArgs {\n context: string;\n e: unknown;\n}\n\nexport const loggedError = ({ context, e }: ErrorLogHandlerArgs) => {\n const errorMessage = getErrorMessage(e);\n const errorMessageDetails = `${context}: ${errorMessage}`;\n logger.error(errorMessageDetails, e);\n\n return new Error(errorMessageDetails);\n};\n","import * as DocumentPicker from 'expo-document-picker';\nimport { logger } from '../logger/logger';\n\nconst DEFAULT_FILE_PICKER_OPTIONS = { type: ['*/*'], copyToCacheDirectory: true };\n\nexport const pickSingleFile = async (options = DEFAULT_FILE_PICKER_OPTIONS) => {\n try {\n const result = await DocumentPicker.getDocumentAsync(options);\n if (result.canceled) {\n return { exists: false, error: 'canceled', name: '', uri: '', size: 0, mimeType: '', lastModified: 0 };\n }\n\n const singleAsset = result.assets[0];\n return {\n exists: singleAsset.uri && singleAsset.name,\n ...singleAsset,\n };\n } catch (error: unknown) {\n logger.error('pickSingleFile', error);\n return { error, exists: false };\n }\n};\n","import { format } from 'date-fns';\nimport { formatInTimeZone } from 'date-fns-tz';\nimport Handlebars from 'handlebars';\nimport uuid from 'react-native-uuid';\n\nexport const hasFileSeparator = (fileUri = ''): boolean => {\n return fileUri?.includes('/') ?? false;\n};\n\n/**\n * Extracts the filename from a file URI\n * @param fileUri - The file URI (e.g., '/path/to/file.txt')\n * @returns The filename only (e.g., 'file.txt')\n */\nexport const getFilenameOnly = (fileUri = '/') => {\n if (hasFileSeparator(fileUri)) {\n return fileUri.split('/').pop() ?? '';\n } else {\n return fileUri;\n }\n};\n\n/**\n * Checks if a file URI has an extension\n * @param fileUri - The file URI to check\n * @returns true if the file has an extension, false otherwise\n */\nexport const hasExtension = (fileUri = '/'): boolean => {\n const filename = getFilenameOnly(fileUri);\n return filename.includes('.');\n};\n\n/**\n * Extracts the filename without the extension from a file URI\n * @param fileUri - The file URI (e.g., '/path/to/my-file.txt')\n * @returns The filename without the extension (e.g., 'my-file')\n */\nexport const getFilenameWithoutExtension = (fileUri = '/') => {\n const filename = getFilenameOnly(fileUri);\n\n if (hasExtension(fileUri)) {\n return filename.split('.').slice(0, -1).join('.');\n } else {\n return filename;\n }\n};\n\nexport const getFileExtensionOnly = (fileUri = '/') => {\n const filename = getFilenameOnly(fileUri);\n if (hasExtension(fileUri)) {\n return filename.split('.').pop()?.toLowerCase() ?? '';\n } else {\n return '';\n }\n};\n\n/**\n * Extracts the directory path from a file URI\n * @param fileUri - The file URI (e.g., '/path/to/file.txt')\n * @returns The directory path (e.g., '/path/to'), or empty string if no directory\n */\nexport const getDirectoryOnly = (fileUri = '/') => fileUri.substring(0, fileUri.lastIndexOf('/'));\n\nHandlebars.registerHelper('timestampFormat', (timestamp: Date, dateTimeFormatInput: string) => {\n const dateTimeFormat = Handlebars.escapeExpression(dateTimeFormatInput);\n const formattedDateTime = formatInTimeZone(timestamp, 'UTC', dateTimeFormat);\n return new Handlebars.SafeString(formattedDateTime);\n});\n\ntype HandlebarTemplateWithArgs = {\n handlebarTemplate: string;\n} & Record<string, string>;\n\n/**\n * Transforms a pattern string into a handlebars template string\n * Example: from \"MyPrefix_{{{HH:mm:ss}}}\" ===> \"MyPrefix_{{timestampFormat timestamp arg1}}\"\n *\n * @param inputPattern - the pattern string to transform\n * @returns the handlebars template string and the arguments\n */\nconst toHandlebarsTemplate = (inputPattern: string): HandlebarTemplateWithArgs => {\n const cleanedInput = Handlebars.escapeExpression(inputPattern);\n const args: Record<string, string> = {};\n\n let argCounter = 1;\n const handlebarTemplate = cleanedInput.replace(/{{{(.*?)}}}/g, (_match, content: string) => {\n const argName = `arg${argCounter}`;\n args[argName] = content;\n argCounter++;\n return `{{timestampFormat timestamp ${argName}}}`;\n });\n\n return { handlebarTemplate, ...args };\n};\n\nconst normalizeIsoInfo = (input: string) => {\n return input.replace(/[:\\.]/g, '_');\n};\n\n/**\n * Builds additional context data for the handlebars template.\n * Example: { unixTimestamp: \"1234567890\", utcDate: \"2022-01-01\", ... }\n *\n * @returns a record with additional context data\n */\nexport const buildAdditionalContextData = (timestamp = new Date()): Record<string, string> => {\n const infos: Record<string, string> = {};\n\n const isoString = timestamp.toISOString();\n const isoDateStringParts = isoString.split('T');\n\n infos.isoString = normalizeIsoInfo(isoString);\n infos.isoDate = isoDateStringParts[0];\n infos.isoTime = normalizeIsoInfo(isoDateStringParts[1].split('.')[0]);\n\n infos.localDate = format(timestamp, 'yyyy-MM-dd');\n infos.localTime = format(timestamp, 'HH_mm_ss');\n infos.timezoneOffset = timestamp.getTimezoneOffset().toString();\n\n infos.uuid = uuid.v4();\n infos.unixTimestamp = timestamp.getTime().toString();\n\n return infos;\n};\n\ntype ApplyFilenameTemplateArgs = {\n filename?: string;\n pattern?: string;\n timestamp?: Date;\n};\n\nexport const applyFilenameTemplate = ({ filename, pattern, timestamp = new Date() }: ApplyFilenameTemplateArgs) => {\n if (!pattern) {\n return filename;\n }\n\n const { handlebarTemplate, ...args } = toHandlebarsTemplate(pattern);\n const template = Handlebars.compile(handlebarTemplate);\n\n return template({\n ...args,\n ...buildAdditionalContextData(timestamp),\n timestamp,\n filename,\n });\n};\n","import { logger } from '../logger/logger';\nimport { nativeFileSystem } from '../services/files/native-file-system';\nimport { EncodingType } from '../services/files/native-file-system.types';\n\nexport const convertImageToBase64 = async (uri: string) => {\n try {\n const base64String = await nativeFileSystem.readAsStringAsync(uri, {\n encoding: EncodingType.Base64,\n });\n return base64String;\n } catch (error) {\n logger.error('Error converting image to base64:', error);\n return null;\n }\n};\n","const numberRegex = /\\d+(\\.\\d+)*/;\nconst atRegex = /(?:@)/gi;\n\nexport type LicenceEntry = {\n licenses: string;\n repository?: string;\n publisher?: string;\n email?: string;\n path?: string;\n licenseFile?: string;\n};\n\nexport type LicenceDetail = {\n title: string;\n version: string;\n licenceType: string;\n repository: string;\n licenseUrl: string;\n};\n\nexport const parseLicenceData = (entries: Record<string, LicenceEntry>) => {\n const licences: LicenceDetail[] = [];\n\n for (const [id, licence] of Object.entries(entries)) {\n const version = id.match(numberRegex);\n\n // Removes the part after the @\n const nameWithoutVersion = id.replace(atRegex, '').replace(version ? version[0] : '', '');\n\n licences.push({\n title: nameWithoutVersion,\n version: version ? version[0] : '',\n licenceType: licence.licenses,\n repository: licence.repository || '',\n licenseUrl: licence.licenseFile || '',\n });\n }\n\n return licences;\n};\n","import { Linking, Platform } from 'react-native';\nimport { logger } from '../logger/logger';\n\nexport const openWifiSettings = async () => {\n if (Platform.OS === 'ios') {\n return openWifiSettingsIos();\n }\n\n if (Platform.OS === 'android') {\n return openWifiSettingsAndroid();\n }\n\n logger.warn(`[openWifiSettings] is not supported on this platform: ${Platform.OS}`);\n};\n\nexport const openWifiSettingsIos = async () => {\n const url = 'App-Prefs:root=WIFI';\n\n try {\n const canOpen = await Linking.canOpenURL(url);\n if (canOpen) {\n return Linking.openURL(url);\n }\n } catch (e) {\n logger.error('[openWifiSettings] error opening iOS Wi-Fi settings', e);\n }\n\n return Linking.openSettings();\n};\n\nexport const openWifiSettingsAndroid = async () => {\n try {\n await Linking.openURL('android.settings.WIFI_SETTINGS');\n } catch (e) {\n logger.error('[openWifiSettings] Error opening Android Wi-Fi settings:', e);\n }\n};\n","import { isBlank, REGEX_IPV4 } from '@lichens-innovation/ts-common';\nimport { addEventListener, NetInfoState, NetInfoSubscription } from '@react-native-community/netinfo';\nimport { AxiosError, isAxiosError } from 'axios';\n\nimport { logger } from '../logger/logger';\n\nconst extractInfoFromNetInfoState = (netInfoState: NetInfoState) => {\n const { isConnected, type } = netInfoState;\n const details = netInfoState.details ?? {};\n const ipAddress = 'ipAddress' in details ? details.ipAddress : '';\n const ipLabel = ipAddress ? `ip: ${ipAddress}` : '';\n\n return { isConnected, type, ipLabel };\n};\n\nexport const startNetworkStateLogging = (): NetInfoSubscription => {\n return addEventListener((netInfoState: NetInfoState) => {\n const { isConnected, type, ipLabel } = extractInfoFromNetInfoState(netInfoState);\n\n if (isConnected) {\n logger.info(`[startNetworkStateLogging] connected: ${type} ${ipLabel}`);\n } else {\n logger.warn(`[startNetworkStateLogging] disconnected`);\n }\n });\n};\n\nexport const isAxiosNetworkError = (error: unknown): boolean => {\n if (!isAxiosError(error)) {\n return false;\n }\n\n const code = error.code ?? '';\n if (!code) {\n return false;\n }\n\n return AxiosError.ERR_NETWORK === code;\n};\n\nexport const isValidIpAddressV4 = (ip?: string | null): boolean => {\n if (isBlank(ip)) {\n return false;\n }\n\n return REGEX_IPV4.test(ip);\n};\n","import { Platform } from 'react-native';\nimport { logger } from '../logger/logger';\n\nexport const notImplementedYet = (...args: unknown[]) => {\n logger.debug(`Not implemented yet on \"${Platform.OS}\" platform`, args);\n};\n","import { getErrorMessage, nowAsDateTimeForFilename } from '@lichens-innovation/ts-common';\nimport * as SQLite from 'expo-sqlite';\n\nimport { logger } from '../logger/logger';\nimport { createDirectoryStructure, getDocumentFullFilename, isFileExists } from './file.utils';\n\ninterface SQLiteVersionResult {\n version: string;\n}\n\nexport const getSQLiteVersion = async (): Promise<string> => {\n try {\n const db = await SQLite.openDatabaseAsync(':memory:');\n const result = await db.getFirstAsync<SQLiteVersionResult>('SELECT sqlite_version() as version');\n await db.closeAsync();\n\n return result?.version ?? 'Unknown';\n } catch (e: unknown) {\n const message = getErrorMessage(e);\n logger.error(`[getSQLiteVersion] ${message}`, e);\n throw new Error(`[getSQLiteVersion] ${message}`);\n }\n};\n\nexport const createDbFolderUri = async (): Promise<void> => {\n const dbFolderUri = getDocumentFullFilename('SQLite');\n const exists = await isFileExists(dbFolderUri);\n if (!exists) {\n await createDirectoryStructure(dbFolderUri);\n }\n};\n\nexport const getUniqueDbFilename = (prefix: string = ''): string => {\n const nowAsFilename = nowAsDateTimeForFilename();\n return `${prefix}${nowAsFilename}.db`;\n};\n\ninterface DbInstance {\n db: SQLite.SQLiteDatabase;\n dbFilename: string;\n}\n\nexport const createDbInstance = async (existingFilename?: string): Promise<DbInstance> => {\n await createDbFolderUri();\n\n const dbFilename = existingFilename ?? getUniqueDbFilename();\n const db = await SQLite.openDatabaseAsync(dbFilename);\n\n return { db, dbFilename };\n};\n","import { logger } from '../logger/logger';\nimport { LoggerMethods } from '../logger/logger.types';\n\nexport const htmlDocumentMessage = (message = {}) => {\n const jsonMessage = JSON.stringify(message ?? {});\n return `\n window.onReactNativeMessage('${jsonMessage}');\n true;\n `;\n};\n\nexport const htmlDocumentRawMessage = (message = '') => {\n return `\n window.onReactNativeMessage(\"${message}\");\n true;\n `;\n};\n\ninterface LogIncomingHtmlDocMessageArgs {\n type?: LoggerMethods;\n log?: string;\n}\nexport const logIncomingHtmlDocMessage = ({ type = 'log', log = '' }: LogIncomingHtmlDocMessageArgs) => {\n logger[type](`[incoming-html-doc-message] ${log}`);\n};\n","import { isNullish } from '@lichens-innovation/ts-common';\nimport { HorizontalResizableSplitViewProps } from './horizontal-resizable-split-view.types';\n\nexport const validateResizableSplitViewProps = (props: HorizontalResizableSplitViewProps) => {\n const { initialLeftRatio, minLeftRatio, maxLeftRatio } = props;\n\n if (!isNullish(initialLeftRatio)) {\n if (initialLeftRatio < 0 || initialLeftRatio > 1)\n throw new Error(`initialLeftRatio must be between 0 and 1. Provided: ${initialLeftRatio}`);\n }\n\n if (!isNullish(minLeftRatio)) {\n if (minLeftRatio < 0 || minLeftRatio > 1)\n throw new Error(`minLeftRatio must be between 0 and 1. Provided: ${minLeftRatio}`);\n }\n\n if (!isNullish(maxLeftRatio)) {\n if (maxLeftRatio < 0 || maxLeftRatio > 1)\n throw new Error(`maxLeftRatio must be between 0 and 1. Provided: ${maxLeftRatio}`);\n }\n\n if (!isNullish(minLeftRatio) && !isNullish(maxLeftRatio) && minLeftRatio >= maxLeftRatio)\n throw new Error(\n `minLeftRatio must be less than maxLeftRatio. Provided: ${JSON.stringify({ minLeftRatio, maxLeftRatio })}`\n );\n\n if (!isNullish(initialLeftRatio) && !isNullish(minLeftRatio) && initialLeftRatio < minLeftRatio)\n throw new Error(\n `initialLeftRatio must be >= minLeftRatio. Provided: ${JSON.stringify({ initialLeftRatio, minLeftRatio })}`\n );\n\n if (!isNullish(initialLeftRatio) && !isNullish(maxLeftRatio) && initialLeftRatio > maxLeftRatio)\n throw new Error(\n `initialLeftRatio must be <= maxLeftRatio. Provided: ${JSON.stringify({ initialLeftRatio, maxLeftRatio })}`\n );\n};\n","import { useCallback, useState, type FunctionComponent } from 'react';\nimport { LayoutChangeEvent, StyleSheet, View } from 'react-native';\nimport { Gesture, GestureDetector } from 'react-native-gesture-handler';\nimport Animated, { useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated';\nimport { isDevelopment } from '../../../utils';\nimport { HorizontalResizableSplitViewProps } from './horizontal-resizable-split-view.types';\nimport { validateResizableSplitViewProps } from './horizontal-resizable-split-view.utils';\n\nconst DRAG_HANDLE_WIDTH = 20;\nconst DEFAULT_ANIMATION_CONFIG = { damping: 25, stiffness: 300, mass: 0.8 };\n\nexport const HorizontalResizableSplitView: FunctionComponent<HorizontalResizableSplitViewProps> = (props) => {\n if (isDevelopment()) validateResizableSplitViewProps(props);\n\n const {\n leftContent,\n rightContent,\n initialLeftRatio = 0.5,\n minLeftRatio = 0.15,\n maxLeftRatio = 0.85,\n handleContainerStyle,\n handleStyle,\n hideHandle = false,\n } = props;\n\n // Track measured container width\n const [isReady, setIsReady] = useState(false);\n\n // Shared values for animation\n const leftSectionWidth = useSharedValue(0);\n const minWidth = useSharedValue(0);\n const maxWidth = useSharedValue(0);\n const startX = useSharedValue(0);\n const isDragging = useSharedValue(false);\n\n // Handle container layout measurement\n const handleLayout = useCallback(\n (event: LayoutChangeEvent) => {\n const { width } = event.nativeEvent.layout;\n if (width > 0 && !isReady) {\n minWidth.value = width * minLeftRatio;\n maxWidth.value = width * maxLeftRatio;\n leftSectionWidth.value = width * initialLeftRatio;\n setIsReady(true);\n }\n },\n [minLeftRatio, maxLeftRatio, initialLeftRatio, minWidth, maxWidth, leftSectionWidth, isReady]\n );\n\n const panGesture = Gesture.Pan()\n .onStart(() => {\n startX.value = leftSectionWidth.value;\n isDragging.value = true;\n })\n .onUpdate((event) => {\n const newWidth = startX.value + event.translationX;\n leftSectionWidth.value = Math.max(minWidth.value, Math.min(newWidth, maxWidth.value));\n })\n .onEnd(() => {\n isDragging.value = false;\n });\n\n const leftSectionAnimatedStyle = useAnimatedStyle(() => ({ width: leftSectionWidth.value }));\n\n const dragHandleContainerAnimatedStyle = useAnimatedStyle(() => ({\n left: leftSectionWidth.value - DRAG_HANDLE_WIDTH / 2,\n }));\n\n const dragHandleAnimatedStyle = useAnimatedStyle(() => ({\n transform: [{ scale: withSpring(isDragging.value ? 1.2 : 1, DEFAULT_ANIMATION_CONFIG) }],\n }));\n\n return (\n <View style={[styles.container]} onLayout={handleLayout}>\n <Animated.View style={[styles.leftSection, leftSectionAnimatedStyle]}>{leftContent}</Animated.View>\n\n {!hideHandle && (\n <GestureDetector gesture={panGesture}>\n <Animated.View style={[styles.handleContainer, handleContainerStyle, dragHandleContainerAnimatedStyle]}>\n <Animated.View style={[styles.handle, handleStyle, dragHandleAnimatedStyle]} />\n </Animated.View>\n </GestureDetector>\n )}\n\n <View style={[styles.rightSection]}>{rightContent}</View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n flexDirection: 'row',\n },\n leftSection: {\n overflow: 'hidden',\n },\n rightSection: {\n flex: 1,\n overflow: 'hidden',\n },\n handleContainer: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n width: DRAG_HANDLE_WIDTH,\n alignItems: 'center',\n justifyContent: 'center',\n },\n handle: {\n width: 4,\n height: 40,\n backgroundColor: '#888888',\n borderRadius: 2,\n },\n});\n","import type { LayoutChangeEvent } from 'react-native';\n\ninterface ComputeResizableOverlayLayoutValuesArgs {\n event: LayoutChangeEvent;\n initialForegroundRatio: number;\n minForegroundRatio: number;\n maxForegroundRatio: number;\n foregroundContentAspectRatio?: number;\n}\n\nexport const computeResizableOverlayLayoutValues = ({\n event,\n initialForegroundRatio,\n minForegroundRatio,\n maxForegroundRatio,\n foregroundContentAspectRatio,\n}: ComputeResizableOverlayLayoutValuesArgs) => {\n const { height, width } = event.nativeEvent.layout;\n if (height <= 0) return { containerHeight: 0, containerWidth: 0, minHeight: 0, maxHeight: 0, overlayHeight: 0 };\n\n // Always keep container & bounds updated (layout can change over time).\n const computedMinHeight = height * minForegroundRatio;\n const computedMaxHeightFromContainer = height * maxForegroundRatio;\n const computedMaxHeightFromAspectRatio =\n foregroundContentAspectRatio !== undefined ? width / foregroundContentAspectRatio : Number.POSITIVE_INFINITY;\n const computedMaxHeight = Math.max(\n computedMinHeight,\n Math.min(computedMaxHeightFromContainer, computedMaxHeightFromAspectRatio)\n );\n\n const computedOverlayHeight = Math.max(\n computedMinHeight,\n Math.min(height * initialForegroundRatio, computedMaxHeight)\n );\n\n return {\n containerHeight: height,\n containerWidth: width,\n minHeight: computedMinHeight,\n maxHeight: computedMaxHeight,\n overlayHeight: computedOverlayHeight,\n };\n};\n","import { isNullish } from '@lichens-innovation/ts-common';\nimport { VerticalResizableOverlayViewProps } from './vertical-resizable-overlay-view.types';\n\nexport const validateResizableOverlayProps = (props: VerticalResizableOverlayViewProps) => {\n const { foregroundContentAspectRatio, initialForegroundRatio, minForegroundRatio, maxForegroundRatio } = props;\n\n if (!isNullish(foregroundContentAspectRatio)) {\n if (foregroundContentAspectRatio <= 0)\n throw new Error('foregroundContentAspectRatio must be greater than 0. Provided: ' + foregroundContentAspectRatio);\n }\n\n if (!isNullish(initialForegroundRatio)) {\n if (initialForegroundRatio < 0 || initialForegroundRatio > 1)\n throw new Error(`initialForegroundRatio must be between 0 and 1. Provided: ${initialForegroundRatio}`);\n }\n\n if (!isNullish(minForegroundRatio)) {\n if (minForegroundRatio < 0 || minForegroundRatio > 1)\n throw new Error(`minForegroundRatio must be between 0 and 1. Provided: ${minForegroundRatio}`);\n }\n\n if (!isNullish(maxForegroundRatio)) {\n if (maxForegroundRatio < 0 || maxForegroundRatio > 1)\n throw new Error(`maxForegroundRatio must be between 0 and 1. Provided: ${maxForegroundRatio}`);\n }\n\n if (!isNullish(minForegroundRatio) && !isNullish(maxForegroundRatio) && minForegroundRatio >= maxForegroundRatio)\n throw new Error(\n `minForegroundRatio must be less than maxForegroundRatio. Provided: ${JSON.stringify({ minForegroundRatio, maxForegroundRatio })}`\n );\n\n if (\n !isNullish(initialForegroundRatio) &&\n !isNullish(minForegroundRatio) &&\n initialForegroundRatio < minForegroundRatio\n )\n throw new Error(\n `initialForegroundRatio must be >= minForegroundRatio. Provided: ${JSON.stringify({ initialForegroundRatio, minForegroundRatio })}`\n );\n\n if (\n !isNullish(initialForegroundRatio) &&\n !isNullish(maxForegroundRatio) &&\n initialForegroundRatio > maxForegroundRatio\n )\n throw new Error(\n `initialForegroundRatio must be <= maxForegroundRatio. Provided: ${JSON.stringify({ initialForegroundRatio, maxForegroundRatio })}`\n );\n};\n","import { type FunctionComponent } from 'react';\nimport { LayoutChangeEvent, StyleSheet, View, ViewStyle } from 'react-native';\nimport { Gesture, GestureDetector } from 'react-native-gesture-handler';\nimport Animated, { useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated';\nimport { isDevelopment } from '../../../utils';\nimport { computeResizableOverlayLayoutValues } from './resizable-overlay-view.utils';\nimport { VerticalResizableOverlayViewProps } from './vertical-resizable-overlay-view.types';\nimport { validateResizableOverlayProps } from './vertical-resizable-overlay-view.utils';\n\nconst DRAG_HANDLE_HEIGHT = 20;\nconst DEFAULT_ANIMATION_CONFIG = { damping: 25, stiffness: 300, mass: 0.8 };\n\nconst OVERLAY_ANCHOR_STYLES: Record<NonNullable<VerticalResizableOverlayViewProps['anchorType']>, ViewStyle> = {\n topLeft: { top: 0, left: 0 },\n topRight: { top: 0, right: 0 },\n bottomLeft: { bottom: 0, left: 0 },\n bottomRight: { bottom: 0, right: 0 },\n};\n\nexport const ResizableOverlayView: FunctionComponent<VerticalResizableOverlayViewProps> = (props) => {\n if (isDevelopment()) validateResizableOverlayProps(props);\n\n const {\n foregroundContent,\n backgroundContent,\n initialForegroundRatio = 0.5,\n minForegroundRatio = 0.15,\n maxForegroundRatio = 0.85,\n foregroundContentAspectRatio,\n handleContainerStyle,\n handleStyle,\n hideHandle = false,\n anchorType = 'topRight',\n } = props;\n\n // Anchor styles\n const overlayAnchorStyle = OVERLAY_ANCHOR_STYLES[anchorType];\n const isBottomAnchored = ['bottomLeft', 'bottomRight'].includes(anchorType);\n const isLeftAnchored = ['topLeft', 'bottomLeft'].includes(anchorType);\n\n // Shared values for animation\n const overlayHeight = useSharedValue(0);\n const containerHeight = useSharedValue(0);\n const containerWidth = useSharedValue(0);\n const minHeight = useSharedValue(0);\n const maxHeight = useSharedValue(0);\n const startY = useSharedValue(0);\n const isDragging = useSharedValue(false);\n\n // Handle container layout measurement\n const handleLayout = (event: LayoutChangeEvent) => {\n const computedValues = computeResizableOverlayLayoutValues({\n event,\n initialForegroundRatio,\n minForegroundRatio,\n maxForegroundRatio,\n foregroundContentAspectRatio,\n });\n\n containerHeight.value = computedValues.containerHeight;\n containerWidth.value = computedValues.containerWidth;\n minHeight.value = computedValues.minHeight;\n maxHeight.value = computedValues.maxHeight;\n overlayHeight.value = computedValues.overlayHeight;\n };\n\n const panGesture = Gesture.Pan()\n .onStart(() => {\n startY.value = overlayHeight.value;\n isDragging.value = true;\n })\n .onUpdate((event) => {\n // If the overlay is anchored to the bottom, dragging up should INCREASE its height.\n const direction = isBottomAnchored ? -1 : 1;\n const newHeight = startY.value + direction * event.translationY;\n overlayHeight.value = Math.max(minHeight.value, Math.min(newHeight, maxHeight.value));\n })\n .onEnd(() => {\n isDragging.value = false;\n });\n\n const overlayAnimatedStyle = useAnimatedStyle(() => {\n let height = overlayHeight.value;\n let width: number | undefined;\n\n if (foregroundContentAspectRatio !== undefined) {\n const calculatedWidth = height * foregroundContentAspectRatio;\n if (calculatedWidth > containerWidth.value) {\n // Width exceeds container, recalculate height to maintain aspect ratio\n width = containerWidth.value;\n height = Math.max(containerWidth.value / foregroundContentAspectRatio, minHeight.value);\n } else {\n width = calculatedWidth;\n }\n }\n\n return width !== undefined ? { height, width } : { height };\n });\n\n const dragHandleContainerAnimatedStyle = useAnimatedStyle(() => {\n let effectiveHeight = overlayHeight.value;\n let effectiveWidth = containerWidth.value;\n\n if (foregroundContentAspectRatio !== undefined) {\n const calculatedWidth = effectiveHeight * foregroundContentAspectRatio;\n if (calculatedWidth > containerWidth.value) {\n effectiveHeight = Math.max(containerWidth.value / foregroundContentAspectRatio, minHeight.value);\n effectiveWidth = containerWidth.value;\n } else {\n effectiveWidth = calculatedWidth;\n }\n }\n\n // Always compute an explicit `left` to avoid stale left/right values when `anchorType` changes.\n const left = isLeftAnchored ? 0 : Math.max(0, containerWidth.value - effectiveWidth);\n // If anchored at bottom, the handle must attach to the TOP edge of the overlay.\n // Otherwise (top anchor), it attaches to the BOTTOM edge.\n const top = isBottomAnchored\n ? containerHeight.value - effectiveHeight - DRAG_HANDLE_HEIGHT / 2\n : effectiveHeight - DRAG_HANDLE_HEIGHT / 2;\n\n return {\n top,\n width: effectiveWidth,\n left,\n };\n }, [foregroundContentAspectRatio, isBottomAnchored, isLeftAnchored]);\n\n const dragHandleAnimatedStyle = useAnimatedStyle(() => ({\n transform: [{ scale: withSpring(isDragging.value ? 1.2 : 1, DEFAULT_ANIMATION_CONFIG) }],\n }));\n\n return (\n <View style={[styles.container]} onLayout={handleLayout}>\n {/* Background content - fills entire container */}\n <View style={styles.backgroundSection}>{backgroundContent}</View>\n\n {/* Foreground content - positioned absolutely on top */}\n <Animated.View style={[styles.overlaySection, overlayAnchorStyle, overlayAnimatedStyle]}>\n {foregroundContent}\n </Animated.View>\n\n {!hideHandle && (\n <GestureDetector gesture={panGesture}>\n <Animated.View style={[styles.handleContainer, handleContainerStyle, dragHandleContainerAnimatedStyle]}>\n <Animated.View style={[styles.handle, handleStyle, dragHandleAnimatedStyle]} />\n </Animated.View>\n </GestureDetector>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n backgroundSection: {\n flex: 1,\n },\n overlaySection: {\n position: 'absolute',\n overflow: 'hidden',\n },\n handleContainer: {\n position: 'absolute',\n height: DRAG_HANDLE_HEIGHT,\n alignItems: 'center',\n justifyContent: 'center',\n },\n handle: {\n width: 40,\n height: 4,\n backgroundColor: '#888888',\n borderRadius: 4,\n },\n});\n","import { isNullish } from '@lichens-innovation/ts-common';\nimport { VerticalResizableSplitViewProps } from './vertical-resizable-split-view.types';\n\nexport const validateResizableSplitViewProps = (props: VerticalResizableSplitViewProps) => {\n const { initialTopRatio, minTopRatio, maxTopRatio } = props;\n\n if (!isNullish(initialTopRatio)) {\n if (initialTopRatio < 0 || initialTopRatio > 1)\n throw new Error(`initialTopRatio must be between 0 and 1. Provided: ${initialTopRatio}`);\n }\n\n if (!isNullish(minTopRatio)) {\n if (minTopRatio < 0 || minTopRatio > 1)\n throw new Error(`minTopRatio must be between 0 and 1. Provided: ${minTopRatio}`);\n }\n\n if (!isNullish(maxTopRatio)) {\n if (maxTopRatio < 0 || maxTopRatio > 1)\n throw new Error(`maxTopRatio must be between 0 and 1. Provided: ${maxTopRatio}`);\n }\n\n if (!isNullish(minTopRatio) && !isNullish(maxTopRatio) && minTopRatio >= maxTopRatio)\n throw new Error(\n `minTopRatio must be less than maxTopRatio. Provided: ${JSON.stringify({ minTopRatio, maxTopRatio })}`\n );\n\n if (!isNullish(initialTopRatio) && !isNullish(minTopRatio) && initialTopRatio < minTopRatio)\n throw new Error(\n `initialTopRatio must be >= minTopRatio. Provided: ${JSON.stringify({ initialTopRatio, minTopRatio })}`\n );\n\n if (!isNullish(initialTopRatio) && !isNullish(maxTopRatio) && initialTopRatio > maxTopRatio)\n throw new Error(\n `initialTopRatio must be <= maxTopRatio. Provided: ${JSON.stringify({ initialTopRatio, maxTopRatio })}`\n );\n};\n","import { useCallback, useState, type FunctionComponent } from 'react';\nimport { LayoutChangeEvent, StyleSheet, View } from 'react-native';\nimport { Gesture, GestureDetector } from 'react-native-gesture-handler';\nimport Animated, { useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated';\nimport { isDevelopment } from '../../../utils';\nimport { VerticalResizableSplitViewProps } from './vertical-resizable-split-view.types';\nimport { validateResizableSplitViewProps } from './vertical-resizable-split-view.utils';\n\nconst DRAG_HANDLE_HEIGHT = 20;\nconst DEFAULT_ANIMATION_CONFIG = { damping: 25, stiffness: 300, mass: 0.8 };\n\nexport const VerticalResizableSplitView: FunctionComponent<VerticalResizableSplitViewProps> = (props) => {\n if (isDevelopment()) validateResizableSplitViewProps(props);\n\n const {\n topContent,\n bottomContent,\n initialTopRatio = 0.5,\n minTopRatio = 0.15,\n maxTopRatio = 0.85,\n handleContainerStyle,\n handleStyle,\n hideHandle = false,\n } = props;\n\n // Track measured container height\n const [isReady, setIsReady] = useState(false);\n\n // Shared values for animation\n const topSectionHeight = useSharedValue(0);\n const minHeight = useSharedValue(0);\n const maxHeight = useSharedValue(0);\n const startY = useSharedValue(0);\n const isDragging = useSharedValue(false);\n\n // Handle container layout measurement\n const handleLayout = useCallback(\n (event: LayoutChangeEvent) => {\n const { height } = event.nativeEvent.layout;\n if (height > 0 && !isReady) {\n minHeight.value = height * minTopRatio;\n maxHeight.value = height * maxTopRatio;\n topSectionHeight.value = height * initialTopRatio;\n setIsReady(true);\n }\n },\n [minTopRatio, maxTopRatio, initialTopRatio, minHeight, maxHeight, topSectionHeight, isReady]\n );\n\n const panGesture = Gesture.Pan()\n .onStart(() => {\n startY.value = topSectionHeight.value;\n isDragging.value = true;\n })\n .onUpdate((event) => {\n const newHeight = startY.value + event.translationY;\n topSectionHeight.value = Math.max(minHeight.value, Math.min(newHeight, maxHeight.value));\n })\n .onEnd(() => {\n isDragging.value = false;\n });\n\n const topSectionAnimatedStyle = useAnimatedStyle(() => ({ height: topSectionHeight.value }));\n\n const dragHandleContainerAnimatedStyle = useAnimatedStyle(() => ({\n top: topSectionHeight.value - DRAG_HANDLE_HEIGHT / 2,\n }));\n\n const dragHandleAnimatedStyle = useAnimatedStyle(() => ({\n transform: [{ scale: withSpring(isDragging.value ? 1.2 : 1, DEFAULT_ANIMATION_CONFIG) }],\n }));\n\n return (\n <View style={[styles.container]} onLayout={handleLayout}>\n <Animated.View style={[styles.topSection, topSectionAnimatedStyle]}>{topContent}</Animated.View>\n\n {!hideHandle && (\n <GestureDetector gesture={panGesture}>\n <Animated.View style={[styles.handleContainer, handleContainerStyle, dragHandleContainerAnimatedStyle]}>\n <Animated.View style={[styles.handle, handleStyle, dragHandleAnimatedStyle]} />\n </Animated.View>\n </GestureDetector>\n )}\n\n <View style={[styles.bottomSection]}>{bottomContent}</View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n topSection: {\n overflow: 'hidden',\n },\n bottomSection: {\n flex: 1,\n overflow: 'hidden',\n },\n handleContainer: {\n position: 'absolute',\n left: 0,\n right: 0,\n height: DRAG_HANDLE_HEIGHT,\n alignItems: 'center',\n justifyContent: 'center',\n },\n handle: {\n width: 40,\n height: 4,\n backgroundColor: '#888888',\n borderRadius: 2,\n },\n});\n","import { useIsFocused } from '@react-navigation/native';\nimport { FunctionComponent, PropsWithChildren } from 'react';\nimport { StyleSheet, ViewStyle } from 'react-native';\nimport Animated, { FadeInUp } from 'react-native-reanimated';\nimport { SafeAreaView } from 'react-native-safe-area-context';\n\ntype SafeContainerProps = PropsWithChildren<{\n style?: ViewStyle;\n shouldAnimate?: boolean;\n}>;\n\nexport const SafeContainer: FunctionComponent<SafeContainerProps> = ({ children, style, shouldAnimate = false }) => {\n const isScreenFocused = useIsFocused();\n if (!isScreenFocused) {\n return null;\n }\n\n return (\n <SafeAreaView style={[styles.container, style]}>\n <Animated.View style={styles.container} entering={shouldAnimate ? FadeInUp.duration(500) : undefined}>\n {children}\n </Animated.View>\n </SafeAreaView>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n","import { type FunctionComponent } from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { Text } from 'react-native-paper';\nimport { useAppTheme } from '../../theme/theme';\n\nexport interface ListHeaderProps {\n title: string;\n}\n\nexport const ListHeader: FunctionComponent<ListHeaderProps> = ({ title }) => {\n const styles = useStyles();\n\n return (\n <View style={styles.container}>\n <Text variant=\"titleMedium\">{title}</Text>\n </View>\n );\n};\n\nconst useStyles = () => {\n const theme = useAppTheme();\n\n return StyleSheet.create({\n container: {\n paddingHorizontal: theme.spacing(1),\n },\n });\n};\n","import { type FunctionComponent } from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { useAppTheme } from '../../theme/theme';\n\nexport const ListItemsSeparator: FunctionComponent = () => {\n const styles = useStyles();\n return <View style={styles.separator} />;\n};\n\nconst useStyles = () => {\n const theme = useAppTheme();\n\n return StyleSheet.create({\n separator: {\n height: StyleSheet.hairlineWidth,\n backgroundColor: theme.colors.outline,\n },\n });\n};\n","import { type FunctionComponent } from 'react';\nimport { StyleProp, ViewStyle } from 'react-native';\nimport { SegmentedButtons } from 'react-native-paper';\nimport { useAppTheme } from '../../theme';\n\nconst OnOffState = {\n on: 'on',\n off: 'off',\n} as const;\n\ninterface OnOffToggleProps {\n isOn: boolean;\n onValueChange: (isOn: boolean) => void;\n style?: StyleProp<ViewStyle>;\n}\n\nexport const OnOffToggle: FunctionComponent<OnOffToggleProps> = ({ isOn, onValueChange, style }) => {\n const theme = useAppTheme();\n const checkedColor = theme.colors.primary;\n const uncheckedColor = theme.colors.tertiary;\n\n return (\n <SegmentedButtons\n value={isOn ? OnOffState.on : OnOffState.off}\n onValueChange={(value) => onValueChange(value === OnOffState.on)}\n buttons={[\n {\n value: OnOffState.on,\n icon: 'play',\n checkedColor,\n uncheckedColor,\n },\n {\n value: OnOffState.off,\n icon: 'stop',\n checkedColor,\n uncheckedColor,\n },\n ]}\n style={style}\n />\n );\n};\n","import { useToggle } from '@uidotdev/usehooks';\nimport { FunctionComponent } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { TextInput, TextInputProps } from 'react-native-paper';\n\nexport type PasswordInputProps = Omit<TextInputProps, 'secureTextEntry'>;\n\nexport const PasswordInput: FunctionComponent<PasswordInputProps> = ({ label, ...rest }) => {\n const { t } = useTranslation();\n const [isPasswordVisible, toggleShowPassword] = useToggle();\n\n const displayLabel = label ?? t('common:password');\n const icon = isPasswordVisible ? 'eye-off' : 'eye';\n const showA11yLabel = isPasswordVisible\n ? t('common:passwordInput.hidePassword')\n : t('common:passwordInput.showPassword');\n\n return (\n <TextInput\n label={displayLabel}\n secureTextEntry={!isPasswordVisible}\n right={<TextInput.Icon icon={icon} onPress={() => toggleShowPassword()} accessibilityLabel={showA11yLabel} />}\n {...rest}\n />\n );\n};\n","import { toFixed } from '@lichens-innovation/ts-common';\nimport prettyBytes from 'pretty-bytes';\n\nexport interface ActivityProgress {\n loaded: number;\n total?: number;\n isBytes?: boolean;\n decimals?: number;\n}\n\nexport const computeActivityProgress = (progress?: ActivityProgress) => {\n if (!progress) {\n return { percentage: 0, stats: '' };\n }\n\n const { loaded, total, isBytes = true, decimals = 2 } = progress;\n const hasTotal = !!total;\n\n if (isBytes) {\n const loadedLabel = prettyBytes(loaded);\n const totalLabel = hasTotal ? prettyBytes(total) : '';\n const stats = `${loadedLabel} / ${totalLabel}`;\n const percentage = hasTotal ? toFixed((loaded / total) * 100, decimals) : 0;\n return { percentage, stats };\n }\n\n const stats = hasTotal ? `${loaded} / ${total}` : `${loaded}`;\n const percentage = hasTotal ? toFixed((loaded / total) * 100, decimals) : 0;\n return { percentage, stats };\n};\n","import React, { type FunctionComponent } from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { ActivityIndicator, ProgressBar, Text } from 'react-native-paper';\n\nimport { useAppTheme } from '../../theme/theme';\nimport { ActivityProgress, computeActivityProgress } from './activity-progress.utils';\n\ninterface ActivityProgressBarStatsProps {\n progress?: ActivityProgress;\n shouldShowSpinner?: boolean;\n}\n\nexport const ActivityProgressBarStats: FunctionComponent<ActivityProgressBarStatsProps> = ({\n progress,\n shouldShowSpinner = false,\n}) => {\n const styles = useStyles();\n const { percentage, stats } = computeActivityProgress(progress);\n\n if (shouldShowSpinner) {\n return <ActivityIndicator />;\n }\n\n return (\n <>\n <ProgressBar progress={percentage / 100} style={styles.progressBar} />\n\n <View style={styles.statsContainer}>\n <Text variant=\"bodySmall\">{stats}</Text>\n <Text variant=\"bodySmall\">{percentage.toFixed(0)}%</Text>\n </View>\n </>\n );\n};\n\nconst useStyles = () => {\n const theme = useAppTheme();\n\n return StyleSheet.create({\n progressBar: {\n height: 8,\n borderRadius: theme.roundness,\n },\n statsContainer: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n });\n};\n","import React, { type FunctionComponent } from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { Text } from 'react-native-paper';\n\nimport { useAppTheme } from '../../theme/theme';\nimport { ActivityProgressBarStats } from './activity-progress-bar-stats';\nimport { ActivityProgress } from './activity-progress.utils';\n\ninterface ActivityProgressBarProps {\n title: string;\n progress?: ActivityProgress;\n description?: string;\n shouldShowSpinner?: boolean;\n}\n\nexport const ActivityProgressBar: FunctionComponent<ActivityProgressBarProps> = ({\n title,\n progress,\n description = '',\n shouldShowSpinner,\n}) => {\n const styles = useStyles();\n\n return (\n <View style={styles.container}>\n <Text variant=\"bodySmall\" style={styles.label}>\n {title}\n </Text>\n\n <ActivityProgressBarStats progress={progress} shouldShowSpinner={shouldShowSpinner} />\n\n <Text variant=\"bodySmall\" style={styles.label}>\n {description}\n </Text>\n </View>\n );\n};\n\nconst useStyles = () => {\n const theme = useAppTheme();\n\n return StyleSheet.create({\n container: {\n gap: theme.spacing(1),\n },\n label: {\n alignSelf: 'center',\n },\n });\n};\n","import React, { FunctionComponent } from 'react';\nimport { FullCentered } from '../layout/full-centered';\nimport { ActivityIndicator } from 'react-native-paper';\n\nexport const FullCenteredSpinner: FunctionComponent = () => (\n <FullCentered>\n <ActivityIndicator />\n </FullCentered>\n);\n","import React, { FunctionComponent, ReactNode } from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { ActivityIndicator, Button, Dialog, Portal, Text } from 'react-native-paper';\nimport { useAppTheme } from '../../theme/theme';\n\nexport interface ModalSpinnerProps {\n isVisible: boolean;\n title?: ReactNode;\n description?: ReactNode;\n modelLoadingLogs: string[];\n onDismiss: () => void;\n}\n\nexport const ModalSpinner: FunctionComponent<ModalSpinnerProps> = ({\n isVisible,\n title = 'Loading',\n description = 'Please wait...',\n modelLoadingLogs,\n onDismiss,\n}) => {\n const styles = useStyles();\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <Portal>\n <Dialog visible={isVisible} onDismiss={onDismiss}>\n <Dialog.Title style={styles.title}>{title}</Dialog.Title>\n\n <Dialog.Content>\n <ActivityIndicator style={styles.spinner} />\n <Text>{description}</Text>\n\n <View style={styles.progressLogs}>\n {modelLoadingLogs.map((log) => (\n <Text numberOfLines={1} key={log} ellipsizeMode=\"tail\" style={styles.progressLog}>\n {log}\n </Text>\n ))}\n </View>\n </Dialog.Content>\n\n <Dialog.Actions>\n <Button onPress={onDismiss}>Cancel</Button>\n </Dialog.Actions>\n </Dialog>\n </Portal>\n );\n};\n\nconst useStyles = () => {\n const theme = useAppTheme();\n\n return StyleSheet.create({\n title: {\n textAlign: 'center',\n },\n spinner: {\n marginVertical: theme.spacing(3),\n },\n progressLogs: {\n height: 80,\n maxHeight: 80,\n overflow: 'scroll',\n marginVertical: 10,\n width: '100%',\n },\n progressLog: {\n color: theme.colors.secondary,\n width: '100%',\n },\n });\n};\n","import { isNotBlank } from '@lichens-innovation/ts-common';\nimport { ExpoSpeechRecognitionModule } from 'expo-speech-recognition';\nimport { logger } from '../../logger/logger';\n\ninterface BuildFinalValueArgs {\n query: string;\n recordingValue: string;\n}\nexport const buildFinalValue = ({ query, recordingValue }: BuildFinalValueArgs): string => {\n return [query, recordingValue].filter(isNotBlank).join(' ');\n};\n\nexport const ensureVoiceRecognitionPermissions = async (): Promise<boolean> => {\n try {\n const permissions = await ExpoSpeechRecognitionModule.getPermissionsAsync();\n if (!permissions.granted) {\n const result = await ExpoSpeechRecognitionModule.requestPermissionsAsync();\n\n if (!result.granted) {\n logger.info('[ensureVoiceRecognitionPermissions] Permissions not granted', result);\n return false;\n }\n }\n\n return true;\n } catch (e: unknown) {\n logger.error('[ensureVoiceRecognitionPermissions] Error getting permissions', e);\n return false;\n }\n};\n","import { isBlank, isNotBlank } from '@lichens-innovation/ts-common';\nimport { ExpoSpeechRecognitionModule, useSpeechRecognitionEvent } from 'expo-speech-recognition';\nimport { FunctionComponent, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Keyboard, StyleSheet, View } from 'react-native';\nimport { IconButton, TextInput, TextInputProps } from 'react-native-paper';\nimport { logger } from '../../logger/logger';\nimport { useAppTheme } from '../../theme/theme';\nimport { buildFinalValue, ensureVoiceRecognitionPermissions } from './voice-recognition.utils';\n\ninterface VoiceRecognitionTextInputProps extends TextInputProps {\n label: string;\n value: string;\n onValueChange: (value: string) => void;\n onValueSubmit: (value: string) => void;\n}\n\nexport const VoiceRecognitionTextInput: FunctionComponent<VoiceRecognitionTextInputProps> = ({\n label,\n value,\n onValueChange,\n onValueSubmit,\n ...rest\n}) => {\n const styles = useStyles();\n const [isRecording, setIsRecording] = useState(false);\n const [recordingValue, setRecordingValue] = useState('');\n\n const { t } = useTranslation();\n const speechToTextLanguageCode = t('common:speechToTextLanguageCode');\n\n const finalValue = buildFinalValue({ query: value, recordingValue });\n\n const triggerOnSearch = () => {\n Keyboard.dismiss();\n onValueSubmit(finalValue.trim());\n setIsRecording(false);\n setRecordingValue('');\n };\n\n useSpeechRecognitionEvent('result', (event) => {\n if (!isRecording) return;\n\n const transcript = event.results[0].transcript;\n if (isNotBlank(transcript)) {\n setRecordingValue(transcript);\n }\n });\n\n useSpeechRecognitionEvent('error', (event) => {\n const { error, message } = event;\n logger.error(`[useSpeechRecognitionEvent] error: ${error} - ${message}`);\n setIsRecording(false);\n setRecordingValue('');\n });\n\n const handleStartRecording = async () => {\n const hasPermissions = await ensureVoiceRecognitionPermissions();\n if (!hasPermissions) return;\n\n setIsRecording(true);\n setRecordingValue('');\n\n Keyboard.dismiss();\n ExpoSpeechRecognitionModule.start({\n lang: speechToTextLanguageCode,\n interimResults: true,\n continuous: true,\n });\n };\n\n const handleStopRecording = async () => {\n if (!isRecording) return;\n setIsRecording(false);\n ExpoSpeechRecognitionModule.stop();\n\n if (isNotBlank(recordingValue)) {\n onValueChange(buildFinalValue({ query: value, recordingValue }));\n }\n setRecordingValue('');\n };\n\n const toggleRecording = () => {\n if (isRecording) {\n handleStopRecording();\n } else {\n handleStartRecording();\n }\n };\n\n const clearValue = () => {\n onValueChange('');\n setRecordingValue('');\n };\n\n return (\n <View style={styles.container}>\n <TextInput\n {...rest}\n style={styles.textInput}\n label={label}\n value={finalValue}\n readOnly={isRecording}\n onChangeText={onValueChange}\n multiline={true}\n numberOfLines={4}\n left={<TextInput.Icon icon={isRecording ? 'stop' : 'microphone-outline'} onPress={toggleRecording} />}\n right={<TextInput.Icon icon=\"close\" onPress={clearValue} disabled={isBlank(finalValue)} />}\n />\n\n <View style={styles.actionsContainer}>\n <IconButton\n icon=\"send\"\n onPress={triggerOnSearch}\n disabled={isBlank(finalValue)}\n iconColor={styles.sendIcon.color}\n />\n </View>\n </View>\n );\n};\n\nconst useStyles = () => {\n const theme = useAppTheme();\n\n return StyleSheet.create({\n container: {\n flexDirection: 'row',\n },\n textInput: {\n flex: 1,\n },\n actionsContainer: {\n flexDirection: 'row',\n },\n sendIcon: {\n color: theme.colors.primary,\n },\n });\n};\n","import * as ImagePicker from 'expo-image-picker';\n\nexport const toSinglePictureUri = (result: ImagePicker.ImagePickerResult): string | null => {\n if (!result.canceled && result.assets.length > 0) {\n return result.assets[0].uri;\n }\n\n return null;\n};\n\nexport const requestTakePhotoPermissions = async (): Promise<boolean> => {\n const { status } = await ImagePicker.requestCameraPermissionsAsync();\n return status === 'granted';\n};\n\nexport const requestMediaLibPermissions = async (): Promise<boolean> => {\n const { status } = await ImagePicker.requestMediaLibraryPermissionsAsync();\n return status === 'granted';\n};\n","import * as ImagePicker from 'expo-image-picker';\nimport { useTranslation } from 'react-i18next';\nimport { useSnackbar } from '../../components/snack-bar/snackbar-provider';\nimport { logger } from '../../logger/logger';\nimport {\n requestMediaLibPermissions,\n requestTakePhotoPermissions,\n toSinglePictureUri,\n} from './camera-image-picker.utils';\n\nconst DEFAULT_OPTIONS: ImagePicker.ImagePickerOptions = {\n allowsEditing: true,\n aspect: [4, 3],\n quality: 0.7,\n};\n\nexport const useCameraImagePicker = (options = DEFAULT_OPTIONS) => {\n const { t } = useTranslation();\n const { showSnackbarMessage } = useSnackbar();\n\n const handlePermissionDenied = () => {\n showSnackbarMessage(t('common:imagePicker.permissionDenied'));\n return null;\n };\n\n const handleError = (e: unknown) => {\n logger.error('[useCameraImagePicker] Error picking image', e);\n showSnackbarMessage(t('common:imagePicker.error'));\n };\n\n const pickImage = async () => {\n const hasPermission = await requestMediaLibPermissions();\n if (!hasPermission) return handlePermissionDenied();\n\n try {\n const result = await ImagePicker.launchImageLibraryAsync(options);\n return toSinglePictureUri(result);\n } catch (e: unknown) {\n handleError(e);\n }\n\n return null;\n };\n\n const takePhoto = async () => {\n const hasPermission = await requestTakePhotoPermissions();\n if (!hasPermission) return handlePermissionDenied();\n\n try {\n const result = await ImagePicker.launchCameraAsync(options);\n return toSinglePictureUri(result);\n } catch (e: unknown) {\n handleError(e);\n }\n\n return null;\n };\n\n return {\n pickImage,\n takePhoto,\n };\n};\n","import * as ImagePicker from 'expo-image-picker';\nimport { useState } from 'react';\nimport { Image } from 'react-native';\nimport { logger } from '../logger/logger';\n\nconst options = {\n mediaTypes: ['images', 'livePhotos'] as ImagePicker.MediaType[],\n allowsEditing: true,\n quality: 1,\n};\n\nexport interface ImageDimensions {\n width: number;\n height: number;\n aspectRatio: number;\n}\n\nconst DEFAULT_DIMENSIONS: ImageDimensions = {\n width: 0,\n height: 0,\n aspectRatio: 1,\n};\n\nexport const useImagePicker = () => {\n const [selectedImage, setSelectedImage] = useState<string>();\n const [dimensions, setDimensions] = useState<ImageDimensions>(DEFAULT_DIMENSIONS);\n\n const hasSelectedImage: boolean = !!selectedImage;\n\n const pickImage = async () => {\n const result = await ImagePicker.launchImageLibraryAsync(options);\n if (result.canceled) {\n return;\n }\n\n const { uri } = result.assets[0];\n setSelectedImage(uri);\n\n Image.getSize(uri, (width, height) => setDimensions({ width, height, aspectRatio: width / height }), logger.error);\n };\n\n return {\n pickImage,\n hasSelectedImage,\n selectedImage,\n dimensions,\n };\n};\n","import { useFocusEffect } from '@react-navigation/native';\nimport { QueryKey, useQueryClient } from '@tanstack/react-query';\nimport { useCallback } from 'react';\n\nexport const useInvalidateQueriesOnFocus = (queryKeys: QueryKey[]) => {\n const queryClient = useQueryClient();\n\n useFocusEffect(\n useCallback(() => {\n const invalidationPromises = queryKeys.map((queryKey) => queryClient.invalidateQueries({ queryKey }));\n Promise.all(invalidationPromises);\n }, [queryClient])\n );\n};\n","import { useState } from 'react';\nimport { WebViewMessageEvent } from 'react-native-webview';\nimport { logger } from '../logger/logger';\nimport { logIncomingHtmlDocMessage } from '../utils/webview.utils';\n\nexport const useOnHtmlDocMessage = () => {\n const [isDocumentReady, setIsDocumentReady] = useState<boolean>(false);\n\n const onMessage = (payload: WebViewMessageEvent) => {\n const payloadData = payload?.nativeEvent?.data ?? '';\n\n try {\n const { type, data } = JSON.parse(payloadData);\n\n if (type === 'documentReady') {\n setIsDocumentReady(true);\n } else if (type === 'console') {\n logIncomingHtmlDocMessage(data);\n } else {\n logger.warn(`useWebviewDocument onMessage: <${type}> not handled`);\n }\n } catch (e) {\n logger.error('Error in useWebviewDocument onMessage', e, payloadData);\n }\n };\n\n return {\n isDocumentReady,\n onMessage,\n };\n};\n","import { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { useSnackbar } from '../components/snack-bar/snackbar-provider';\nimport { logger } from '../logger/logger';\nimport { pickSingleFile } from '../utils/file-picker.utils';\n\nexport interface SingleFile {\n name: string;\n uri: string;\n size?: number;\n mimeType?: string;\n lastModified?: number;\n}\n\ninterface UseSingleFileSelectorArgs {\n mimeTypes?: string[];\n copyToCacheDirectory?: boolean;\n}\n\nexport const useSingleFileSelector = ({ mimeTypes, copyToCacheDirectory = false }: UseSingleFileSelectorArgs) => {\n const { t } = useTranslation();\n const { showSnackbarMessage } = useSnackbar();\n\n const [selectedFile, setSelectedFile] = useState<SingleFile>();\n\n const handleFileSelection = async () => {\n try {\n const type = mimeTypes ?? ['*/*'];\n const result = await pickSingleFile({ type, copyToCacheDirectory });\n if (!result.exists) return;\n\n const { name, size, uri, mimeType, lastModified } = result;\n if (uri && name) {\n setSelectedFile({ name, size, uri, lastModified, mimeType });\n }\n } catch (e: unknown) {\n logger.error('[handleFileSelection] error selecting file', e);\n showSnackbarMessage(t('common:errorUnexpected'));\n }\n };\n\n return {\n selectedFile,\n handleFileSelection,\n hasSelectedFile: !!selectedFile,\n };\n};\n","import { useToggle } from '@uidotdev/usehooks';\nimport { useEffect } from 'react';\n\nexport const useTimeoutState = (timeoutMs: number) => {\n const [isLoading, toggleLoading] = useToggle(true);\n\n useEffect(() => {\n const timer = setTimeout(toggleLoading, timeoutMs);\n return () => clearTimeout(timer);\n }, []);\n\n return isLoading;\n};\n","import { useToggle } from '@uidotdev/usehooks';\nimport { useCallback, useEffect, useRef } from 'react';\n\nexport const useTimeoutToggle = (timeoutMs: number) => {\n const [isLoading, toggleLoading] = useToggle(false);\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const onStartLoading = useCallback(() => {\n clearTimeout(timeoutRef.current ?? undefined);\n\n toggleLoading();\n\n timeoutRef.current = setTimeout(() => {\n toggleLoading();\n timeoutRef.current = null;\n }, timeoutMs);\n }, [timeoutMs, toggleLoading]);\n\n useEffect(() => {\n return () => clearTimeout(timeoutRef.current ?? undefined);\n }, []);\n\n return [isLoading, onStartLoading] as const;\n};\n","export const isProduction = (): boolean => {\n if (__DEV__) {\n return false;\n }\n\n return true;\n};\n\nexport const isDevelopment = (): boolean => !isProduction();\n\nexport const getEnvVarsSource = (): string => {\n return 'desktop-executable';\n};\n","import { sleep } from '@lichens-innovation/ts-common';\nimport { nativeApplicationVersion, nativeBuildVersion } from 'expo-application';\nimport * as Updates from 'expo-updates';\nimport { useEffect, useState } from 'react';\n\nimport { logger } from '../logger/logger';\nimport { getDeviceType, isRealDevice } from '../utils/device.utils';\nimport { isProduction } from '../utils/env.utils.windows';\n\nconst checkForUpdateAsync = async (): Promise<void> => {\n const deviceType = getDeviceType();\n\n if (isRealDevice() && isProduction()) {\n logger.info(`[checkForUpdateAsync] Checking for update on ${deviceType}`);\n await Updates.checkForUpdateAsync();\n return;\n }\n\n logger.info(`[checkForUpdateAsync] Faking update check on ${deviceType}`);\n await sleep(1000);\n};\n\nexport const useUpdates = () => {\n const [isLoading, setIsLoading] = useState(false);\n const { currentlyRunning, isUpdateAvailable, isUpdatePending } = Updates.useUpdates();\n\n const fetchAndApplyUpdate = async () => {\n setIsLoading(true);\n\n try {\n logger.info('[useUpdates.fetchAndApplyUpdate] Fetching update...');\n await Updates.fetchUpdateAsync();\n logger.info('[useUpdates.fetchAndApplyUpdate] Update fetched successfully');\n } catch (error) {\n logger.error('[useUpdates.fetchAndApplyUpdate] Failed to fetch update:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const checkForUpdates = async () => {\n setIsLoading(true);\n\n try {\n logger.info('[useUpdates.checkForUpdates] Checking for updates...');\n await checkForUpdateAsync();\n logger.info('[useUpdates.checkForUpdates] Updates checked successfully');\n } catch (error) {\n logger.error('[useUpdates.checkForUpdates] Failed to check for updates:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n useEffect(() => {\n if (isUpdatePending) {\n logger.info('[useUpdates.useEffect] Reloading app...');\n Updates.reloadAsync(); // update has successfully downloaded; apply it now\n }\n }, [isUpdatePending]);\n\n const storeVersion = `Store version: ${nativeApplicationVersion} (${nativeBuildVersion})`;\n const runTypeMessage = currentlyRunning.isEmbeddedLaunch\n ? `${storeVersion}: from built-in code (no OTA update yet).`\n : `${storeVersion}: including OTA update.`;\n\n return {\n runTypeMessage,\n isUpdateAvailable,\n isUpdatePending,\n checkForUpdates,\n isLoading,\n fetchAndApplyUpdate,\n };\n};\n","{\n \"common\": {\n \"about\": \"About\",\n \"accept\": \"Accept\",\n \"account\": \"Account\",\n \"actions\": \"Actions\",\n \"add\": \"Add\",\n \"addLink\": \"Add a link\",\n \"addMember\": \"Add a member\",\n \"advanced\": \"Advanced\",\n \"all\": \"All\",\n \"apiCallResult\": \"API Call Result\",\n \"appLoading\": \"Loading Application…\",\n \"appLoadingVersion\": \"Loading version {{version}}…\",\n \"apply\": \"Apply\",\n \"archive\": \"Archive\",\n \"associate\": \"Associate\",\n \"asyncStatus\": {\n \"converting\": \"Converting…\",\n \"deleteFileError\": \"Could not delete file\",\n \"deletingFile\": \"Deleting file...\",\n \"downloadError\": \"Error while downloading\",\n \"downloading\": \"Downloading…\",\n \"loading\": \"Loading…\",\n \"waiting\": \"Waiting…\"\n },\n \"back\": \"Back\",\n \"backup\": \"Backup\",\n \"barcodeScanner\": {\n \"scanBarcodeInstruction\": \"Position the barcode or QR code within the frame\",\n \"requestingCameraPermission\": \"Requesting camera permission...\",\n \"noCameraAccess\": \"No access to camera\"\n },\n \"battery\": {\n \"level\": \"Battery level: {{batteryLevel}}%\"\n },\n \"browse\": \"Browse\",\n \"cancel\": \"Cancel\",\n \"check\": \"Check\",\n \"clear\": \"Clear\",\n \"close\": \"Close\",\n \"complete\": \"Complete\",\n \"configure\": \"Configure\",\n \"confirm\": \"Confirm\",\n \"connect\": \"Connect\",\n \"continue\": \"Continue\",\n \"copiedToClipboard\": \"Text copied to clipboard\",\n \"copy\": \"Copy\",\n \"copyToClipboard\": \"Copy to clipboard\",\n \"create\": \"Create\",\n \"customize\": \"Customize\",\n \"data\": \"Data\",\n \"date\": \"Date\",\n \"default\": \"Default\",\n \"delete\": \"Delete\",\n \"deleteAllLogsFilesConfirmation\": \"Are you sure you want to delete all logs files?\",\n \"description\": \"Description\",\n \"details\": \"Details\",\n \"disable\": \"Disable\",\n \"done\": \"Done\",\n \"download\": \"Download\",\n \"edit\": \"Edit\",\n \"editItem\": \"Edit {{name}}\",\n \"enable\": \"Enable\",\n \"endDate\": \"End Date\",\n \"error\": \"Error\",\n \"errorBoundary\": {\n \"error\": \"An unexpected error occurred: {{errorMsg}} (ID: {{id}})\",\n \"details\": \"Details\"\n },\n \"errorUnexpected\": \"An unexpected error occurred. Consult the logs for more details.\",\n \"errorLoadingFiles\": \"Error loading file tree\",\n \"eventLogs\": \"Event Logs\",\n \"export\": \"Export\",\n \"externalLinks\": \"External Links\",\n \"failed\": \"Failed\",\n \"file\": \"File\",\n \"filter\": \"Filter\",\n \"finish\": \"Finish\",\n \"folder\": \"Folder\",\n \"formValidations\": {\n \"filePathMustNotContainsRelativePath\": \"The file path must not contain a relative path\",\n \"filePathShouldNotContainsSpecialChars\": \"Invalid characters detected in the file path\",\n \"invalidPattern\": \"Verifiy that the opening '{' and closing '}' curly braces are correctly placed. Also ensure that the internal curly braces content is not blank.\",\n \"required\": \"This field is required\",\n \"email\": \"This field must be a valid email address\",\n \"minLength\": \"This field must be at least {{minLength}} characters long\"\n },\n \"fullscreen\": \"Fullscreen\",\n \"help\": \"Help\",\n \"hide\": \"Hide\",\n \"i18nInitialized\": \"i18n 'en' ✅\",\n \"imagePicker\": {\n \"takePhoto\": \"Take a photo\",\n \"chooseFromGallery\": \"Choose from gallery\",\n \"permissionDenied\": \"Permission denied to access gallery\",\n \"cameraPermissionDenied\": \"Permission denied to access camera\",\n \"error\": \"Error accessing image picker\"\n },\n \"import\": \"Import\",\n \"information\": \"Information\",\n \"install\": \"Install\",\n \"item\": \"Item\",\n \"language\": \"Language\",\n \"link\": \"Link\",\n \"list\": \"List\",\n \"lock\": \"Lock\",\n \"logout\": \"Logout\",\n \"logs\": {\n \"filter\": \"Filter logs\",\n \"clear\": \"Clear logs\",\n \"copyAll\": \"Copy all logs\"\n },\n \"manage\": \"Manage\",\n \"menu\": \"Menu\",\n \"more\": \"More\",\n \"move\": \"Move\",\n \"name\": \"Name\",\n \"na\": \"N/A\",\n \"new\": \"New\",\n \"next\": \"Next\",\n \"no\": \"No\",\n \"noCameraAvailable\": \"No camera available\",\n \"noDataFound\": \"No data available\",\n \"notification\": \"Notification\",\n \"nowDateTime\": \"Today's date and time\",\n \"off\": \"Off\",\n \"ok\": \"Ok\",\n \"on\": \"On\",\n \"open\": \"Open\",\n \"options\": \"Options\",\n \"password\": \"Password\",\n \"passwordInput\": {\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\"\n },\n \"paste\": \"Paste\",\n \"preview\": \"Preview\",\n \"previous\": \"Previous\",\n \"print\": \"Print\",\n \"profile\": \"Profile\",\n \"public\": \"Public\",\n \"recent\": \"Recent\",\n \"refresh\": \"Refresh\",\n \"remove\": \"Remove\",\n \"rename\": \"Rename\",\n \"replace\": \"Replace\",\n \"reset\": \"Reset\",\n \"restore\": \"Restore\",\n \"retry\": \"Retry\",\n \"save\": \"Save\",\n \"saved\": \"Data has been saved.\",\n \"savedChanges\": \"Changes saved successfully\",\n \"saving\": \"Data is being modified.\",\n \"scan\": \"Scan\",\n \"search\": \"Search\",\n \"select\": \"Select\",\n \"selectItem\": \"Select item\",\n \"send\": \"Send\",\n \"set\": \"Set\",\n \"settings\": \"Settings\",\n \"share\": \"Share\",\n \"showMore\": \"Show more\",\n \"sort\": \"Sort\",\n \"speechToTextLanguageCode\": \"en-CA\",\n \"start\": \"Start\",\n \"startDate\": \"Start Date\",\n \"status\": \"Status\",\n \"stop\": \"Stop\",\n \"submit\": \"Submit\",\n \"success\": \"Success\",\n \"time\": \"Time\",\n \"title\": \"Title\",\n \"unlock\": \"Unlock\",\n \"update\": \"Update\",\n \"upload\": \"Upload\",\n \"user\": \"User\",\n \"view\": \"View\",\n \"warning\": \"Warning\",\n \"wifi\": {\n \"connectError\": \"Error connecting to WiFi: {{error}}\",\n \"currentNetworkRetrievalError\": \"Error retrieving current WiFi network information\",\n \"availableNetworksRetrievalError\": \"Error retrieving available WiFi networks\"\n },\n \"yes\": \"Yes\",\n \"zoom\": \"Zoom\"\n }\n}\n","{\n \"common\": {\n \"about\": \"À propos\",\n \"accept\": \"Accepter\",\n \"account\": \"Compte\",\n \"actions\": \"Actions\",\n \"add\": \"Ajouter\",\n \"addLink\": \"Ajouter un lien\",\n \"addMember\": \"Ajouter un utilisateur\",\n \"advanced\": \"Avancé\",\n \"all\": \"Tous\",\n \"apiCallResult\": \"Résultat de l'appel API\",\n \"appLoading\": \"Chargement de l'application…\",\n \"appLoadingVersion\": \"Chargement de la version de l'application {{version}}…\",\n \"apply\": \"Appliquer\",\n \"archive\": \"Archiver\",\n \"associate\": \"Associer\",\n \"asyncStatus\": {\n \"converting\": \"Conversion…\",\n \"deleteFileError\": \"Impossible de supprimer le fichier\",\n \"deletingFile\": \"Suppression du fichier…\",\n \"downloadError\": \"Erreur lors du téléchargement\",\n \"downloading\": \"Téléchargement…\",\n \"loading\": \"Chargement…\",\n \"waiting\": \"En attente…\"\n },\n \"back\": \"Retour\",\n \"backup\": \"Sauvegarde\",\n \"barcodeScanner\": {\n \"scanBarcodeInstruction\": \"Positionnez le code barre ou le code QR dans le cadre\",\n \"requestingCameraPermission\": \"Demande de permission de la caméra…\",\n \"noCameraAccess\": \"Aucun accès à la caméra\"\n },\n \"battery\": {\n \"level\": \"Niveau de la pile: {{batteryLevel}}%\"\n },\n \"browse\": \"Parcourir\",\n \"cancel\": \"Annuler\",\n \"check\": \"Vérifier\",\n \"clear\": \"Effacer\",\n \"close\": \"Fermer\",\n \"complete\": \"Terminer\",\n \"configure\": \"Configurer\",\n \"confirm\": \"Confirmer\",\n \"connect\": \"Connecter\",\n \"continue\": \"Continuer\",\n \"copiedToClipboard\": \"Texte copié dans le presse-papiers\",\n \"copy\": \"Copier\",\n \"copyToClipboard\": \"Copier dans le presse-papiers\",\n \"create\": \"Créer\",\n \"customize\": \"Personnaliser\",\n \"data\": \"Données\",\n \"date\": \"Date\",\n \"default\": \"Par défaut\",\n \"delete\": \"Supprimer\",\n \"deleteAllLogsFilesConfirmation\": \"Voulez-vous vraiment supprimer tous les fichiers de logs ?\",\n \"description\": \"Description\",\n \"details\": \"Détails\",\n \"disable\": \"Désactiver\",\n \"done\": \"Terminé\",\n \"download\": \"Télécharger\",\n \"edit\": \"Modifier\",\n \"editItem\": \"Modifier {{name}}\",\n \"enable\": \"Activer\",\n \"endDate\": \"Date de fin\",\n \"error\": \"Erreur\",\n \"errorBoundary\": {\n \"error\": \"Une erreur inattendue est survenue: {{errorMsg}} (ID: {{id}})\",\n \"details\": \"Détails\"\n },\n \"errorUnexpected\": \"Une erreur inattendue est survenue. Consultez les logs pour plus de détails.\",\n \"errorLoadingFiles\": \"Erreur lors du chargement de l'arborescence des fichiers\",\n \"eventLogs\": \"Logs d'événements\",\n \"export\": \"Exporter\",\n \"externalLinks\": \"Liens externes\",\n \"failed\": \"Échec\",\n \"file\": \"Fichier\",\n \"filter\": \"Filtrer\",\n \"finish\": \"Terminer\",\n \"folder\": \"Dossier\",\n \"formValidations\": {\n \"filePathMustNotContainsRelativePath\": \"Le chemin du fichier ne doit pas contenir de chemin relatif\",\n \"filePathShouldNotContainsSpecialChars\": \"Caractères invalides détectés dans le chemin du fichier\",\n \"invalidPattern\": \"Vérifiez que les accolades ouvrantes '{' et fermantes '}' sont correctement placées. Assurez-vous également que le contenu entre les accolades n'est pas vide.\",\n \"required\": \"Ce champ est obligatoire\",\n \"email\": \"Veuillez saisir une adresse de courriel valide\",\n \"minLength\": \"Ce champ doit contenir au moins {{minLength}} caractères\"\n },\n \"fullscreen\": \"Plein écran\",\n \"help\": \"Aide\",\n \"hide\": \"Masquer\",\n \"i18nInitialized\": \"i18n 'fr' ✅\",\n \"imagePicker\": {\n \"takePhoto\": \"Prenndre une photo\",\n \"chooseFromGallery\": \"Choisir depuis la galerie\",\n \"permissionDenied\": \"Permission refusée pour accéder à la galerie\",\n \"cameraPermissionDenied\": \"Permission refusée pour accéder à la caméra\",\n \"error\": \"Erreur lors de l'accès à la sélection d'image\"\n },\n \"import\": \"Importer\",\n \"information\": \"Informations\",\n \"install\": \"Installer\",\n \"item\": \"Élément\",\n \"language\": \"Langue\",\n \"link\": \"Lien\",\n \"list\": \"Liste\",\n \"lock\": \"Verrouiller\",\n \"logout\": \"Déconnexion\",\n \"logs\": {\n \"filter\": \"Filtrer les logs\",\n \"clear\": \"Effacer les logs\",\n \"copyAll\": \"Copier tous les logs\"\n },\n \"manage\": \"Gestion\",\n \"menu\": \"Menu\",\n \"more\": \"Plus\",\n \"move\": \"Déplacer\",\n \"name\": \"Nom\",\n \"na\": \"N.D.\",\n \"new\": \"Nouveau\",\n \"next\": \"Suivant\",\n \"no\": \"Non\",\n \"noCameraAvailable\": \"Aucune caméra disponible\",\n \"noDataFound\": \"Aucune donnée disponible\",\n \"notification\": \"Notification\",\n \"nowDateTime\": \"Date et heure d'aujourd'hui\",\n \"off\": \"Désactivé\",\n \"ok\": \"Ok\",\n \"on\": \"Activé\",\n \"open\": \"Ouvrir\",\n \"options\": \"Options\",\n \"password\": \"Mot de passe\",\n \"passwordInput\": {\n \"showPassword\": \"Afficher le mot de passe\",\n \"hidePassword\": \"Masquer le mot de passe\"\n },\n \"paste\": \"Coller\",\n \"preview\": \"Aperçu\",\n \"previous\": \"Précédent\",\n \"print\": \"Imprimer\",\n \"profile\": \"Profil\",\n \"public\": \"Public\",\n \"recent\": \"Récent\",\n \"refresh\": \"Actualiser\",\n \"remove\": \"Retirer\",\n \"rename\": \"Renommer\",\n \"replace\": \"Remplacer\",\n \"reset\": \"Réinitialiser\",\n \"restore\": \"Restaurer\",\n \"retry\": \"Réessayer\",\n \"save\": \"Sauvegarder\",\n \"saved\": \"Les données ont été sauvegardées.\",\n \"savedChanges\": \"Modifications sauvegardées avec succès\",\n \"saving\": \"Les données sont en cours de modifications.\",\n \"scan\": \"Scanner\",\n \"search\": \"Rechercher\",\n \"select\": \"Sélectionner\",\n \"selectItem\": \"Sélectionner un élément\",\n \"send\": \"Envoyer\",\n \"set\": \"Définir\",\n \"settings\": \"Paramètres\",\n \"share\": \"Partager\",\n \"showMore\": \"Afficher plus\",\n \"sort\": \"Trier\",\n \"speechToTextLanguageCode\": \"fr-CA\",\n \"start\": \"Démarrer\",\n \"startDate\": \"Date de début\",\n \"status\": \"Statut\",\n \"stop\": \"Arrêter\",\n \"submit\": \"Soumettre\",\n \"success\": \"Succès\",\n \"time\": \"Heure\",\n \"title\": \"Titre\",\n \"unlock\": \"Déverrouiller\",\n \"update\": \"Mettre à jour\",\n \"upload\": \"Téléverser\",\n \"user\": \"Utilisateur\",\n \"view\": \"Voir\",\n \"warning\": \"Avertissement\",\n \"wifi\": {\n \"connectError\": \"Erreur de connexion au WiFi : {{error}}\",\n \"currentNetworkRetrievalError\": \"Erreur lors de la récupération des informations du réseau WiFi actuel\",\n \"availableNetworksRetrievalError\": \"Erreur lors de la récupération des réseaux WiFi disponibles\"\n },\n \"yes\": \"Oui\",\n \"zoom\": \"Zoom\"\n }\n}\n","import * as Localization from 'expo-localization';\n\nexport const detectLanguage = () => {\n const deviceLanguage = Localization.getLocales()[0]?.languageTag;\n return deviceLanguage ? deviceLanguage : 'en';\n};\n","import i18nextDefault, { ModuleType, type i18n } from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport { storage } from '../utils/storage';\n\nimport en from './en/common.json';\nimport fr from './fr/common.json';\nimport { detectLanguage } from './i18n.utils';\n\nconst STORAGE_KEY_LANGUAGE = 'appLanguage';\n\nexport interface SupportedLanguage {\n code: string;\n selectionLabel: string;\n}\n\nexport const SUPPORTED_LANGUAGES: SupportedLanguage[] = [\n { code: 'fr', selectionLabel: 'Français' },\n { code: 'en', selectionLabel: 'English' },\n];\n\nexport const DEFAULT_LANGUAGE = 'fr';\n\nexport const storeSelectedLanguage = (newCode: string) => {\n storage.setItem(STORAGE_KEY_LANGUAGE, newCode);\n};\n\nexport const loadSelectedLanguage = (): string => {\n return storage.getItem(STORAGE_KEY_LANGUAGE, DEFAULT_LANGUAGE);\n};\n\nexport const languageDetector = {\n type: 'languageDetector' as ModuleType,\n async: false,\n detect: detectLanguage,\n init: () => {},\n cacheUserLanguage: () => {},\n};\n\nexport const initCommonI18N = (instance?: i18n) => {\n const i18next = instance ?? i18nextDefault;\n\n const savedLanguage = loadSelectedLanguage();\n if (!savedLanguage) {\n storeSelectedLanguage(DEFAULT_LANGUAGE);\n }\n\n i18next\n .use(languageDetector)\n .use(initReactI18next)\n .init({\n resources: { fr, en },\n defaultNS: 'common',\n fallbackLng: DEFAULT_LANGUAGE,\n lng: savedLanguage || DEFAULT_LANGUAGE,\n debug: false,\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n });\n};\n","import { toError } from '@lichens-innovation/ts-common';\nimport Zeroconf from 'react-native-zeroconf';\nimport { logger } from '../../logger/logger';\nimport { DiscoveredDevice } from './device-finder.types';\n\ninterface DeviceFinderScanArgs {\n type: string;\n protocol: string;\n domain?: string;\n\n onError: (error: Error) => void;\n onSuccess: () => void;\n timeoutMs: number;\n}\n\nexport class DeviceFinder {\n private type: string = '';\n private protocol: string = '';\n private domain: string | undefined = undefined;\n\n private zeroConf: Zeroconf | null = null;\n public isScanning: boolean = false;\n private timerID: NodeJS.Timeout | undefined = undefined;\n public discoveredDevices: DiscoveredDevice[] = [];\n\n private onErrorCallback: (error: Error) => void = () => {};\n private onSuccessCallback: () => void = () => {};\n\n public scan(args: DeviceFinderScanArgs) {\n const { type, protocol, domain, onError, onSuccess, timeoutMs } = args;\n\n this.type = type;\n this.protocol = protocol;\n this.domain = domain;\n\n this.onErrorCallback = onError;\n this.onSuccessCallback = onSuccess;\n this.start(timeoutMs);\n }\n\n private setupListeners() {\n this.zeroConf = new Zeroconf();\n\n this.zeroConf.on('start', () => {\n logger.info('[DeviceFinder] Scan started');\n this.isScanning = true;\n });\n\n this.zeroConf.on('stop', () => {\n logger.info('[DeviceFinder] Scan stopped');\n this.isScanning = false;\n });\n\n this.zeroConf.on('resolved', (bonjourDevice: DiscoveredDevice) => this.onScanSuccess(bonjourDevice));\n this.zeroConf.on('error', (err: Error) => this.onScanFailure(err));\n }\n\n private onScanSuccess(bonjourDevice: DiscoveredDevice) {\n this.stop();\n\n logger.info('[DeviceFinder] Resolved bonjour device:', JSON.stringify(bonjourDevice, null, 2));\n if (this.discoveredDevices.some(({ name }) => name === bonjourDevice.name)) {\n logger.debug('[DeviceFinder] Resolved bonjour device already in list, skipping');\n return;\n }\n\n this.discoveredDevices.push(bonjourDevice);\n\n this.onSuccessCallback();\n }\n\n private onScanFailure(e: unknown) {\n this.stop();\n // only log as info because we expect this to happen regularly (wrong network, etc.)\n logger.info('[DeviceFinder] Failed to scan for cameras:', e);\n this.onErrorCallback(toError(e));\n }\n\n private start(timeoutMs: number) {\n this.stop();\n\n try {\n this.setupListeners();\n\n logger.info('[DeviceFinder] Starting scan for ionodes-media');\n this.zeroConf?.scan(this.type, this.protocol, this.domain);\n\n this.timerID = setTimeout(\n () => this.onScanFailure(new Error(`[DeviceFinder] timed out after ${timeoutMs}ms`)),\n timeoutMs\n );\n } catch (e: unknown) {\n this.onScanFailure(e);\n }\n }\n\n private stop() {\n try {\n this.zeroConf?.stop();\n } catch (e) {\n logger.error('[DeviceFinder] Error stopping scan:', e);\n } finally {\n this.reset();\n }\n }\n\n private reset() {\n this.resetZeroConf();\n this.resetTimer();\n this.resetState();\n }\n\n private resetZeroConf() {\n try {\n this.zeroConf?.removeDeviceListeners();\n } catch {\n // ignore (nothing we can do at this point)\n } finally {\n this.zeroConf = null;\n }\n }\n\n private resetTimer() {\n clearTimeout(this.timerID);\n this.timerID = undefined;\n }\n\n private resetState() {\n this.discoveredDevices = [];\n this.isScanning = false;\n }\n}\n","/**\n * The keys defined here are used to identify the queries in the database.\n *\n * @see https://tkdodo.eu/blog/effective-react-query-keys#use-query-key-factories\n */\n\nexport const WifiDiagnoseQueryKey = {\n all: ['wifi-diagnose'] as const,\n list: () => [...WifiDiagnoseQueryKey.all, 'list'] as const,\n details: () => [...WifiDiagnoseQueryKey.all, 'details'] as const,\n} as const;\n","import { PeriodsInMS } from '@lichens-innovation/ts-common';\n\nexport interface WifiInfo {\n signalStrength: number;\n ssid: string;\n bssid?: string;\n capabilities?: string;\n frequency?: number;\n timestamp?: number;\n isHidden?: boolean;\n ip?: string;\n}\n\ninterface WifiEntry {\n SSID: string;\n BSSID: string;\n capabilities: string;\n frequency: number;\n level: number;\n timestamp: number;\n}\n\nexport const DEFAULT_CONNECT_WIFI_TIMEOUT = 10 * PeriodsInMS.oneSecond;\n\nexport const toWifiInfoArray = (networks: WifiEntry[]): WifiInfo[] => {\n if (!Array.isArray(networks)) {\n return [];\n }\n\n return [...networks].map(toWifiInfo);\n};\n\nexport const toWifiInfo = (network: WifiEntry): WifiInfo => {\n const { SSID, BSSID, level, capabilities, frequency, timestamp } = network;\n\n return {\n ssid: SSID,\n bssid: BSSID,\n signalStrength: Math.abs(level),\n capabilities,\n frequency,\n timestamp,\n isHidden: SSID === '(hidden SSID)',\n };\n};\n","import { sleep } from '@lichens-innovation/ts-common';\n\nimport { WifiInfo } from './wifi-info.types';\n\nconst randomIpSegment = () => Math.floor(Math.random() * 255);\nconst randomLanIp = () => `192.168.${randomIpSegment()}.${randomIpSegment()}`;\n\nexport const fetchWifiInfosSimulator = async (): Promise<WifiInfo> => {\n await sleep(Math.random() * 100);\n\n const randomNumber = Math.floor(Math.random() * 100);\n\n return {\n signalStrength: randomNumber,\n ssid: `Simulated WiFi ${randomNumber}`,\n ip: randomLanIp(),\n };\n};\n\nexport const fetchAvailableWifiListSimulator = async (): Promise<WifiInfo[]> => {\n await sleep(Math.random() * 100);\n\n const numberOfNetworks = Math.floor(Math.random() * 30) + 2;\n const networks = Array.from({ length: numberOfNetworks }, (_, index) => ({\n ssid: `Simulated WiFi ${index + 1}`,\n signalStrength: Math.floor(Math.random() * 100),\n ip: randomLanIp(),\n }));\n\n return networks;\n};\n","import * as Location from 'expo-location';\nimport { Platform } from 'react-native';\nimport WifiManager from 'react-native-wifi-reborn';\nimport { logger } from '../../logger/logger';\nimport { isRealDevice } from '../../utils/device.utils';\nimport { DEFAULT_CONNECT_WIFI_TIMEOUT, toWifiInfoArray, WifiInfo } from './wifi-info.types';\nimport { fetchAvailableWifiListSimulator, fetchWifiInfosSimulator } from './wifi-info.utils.simulator';\n\nexport const fetchWifiInfo = async (): Promise<WifiInfo> => {\n if (!isRealDevice()) {\n return fetchWifiInfosSimulator();\n }\n\n try {\n await requestLocationPermission();\n\n logger.info('[fetchWifiInfo] calling WifiManager.getCurrentWifiSSID');\n const [ssid, signalStrength, ip] = await Promise.all([\n WifiManager.getCurrentWifiSSID(),\n // the following methods are not implemented on all platforms:\n WifiManager.getCurrentSignalStrength?.(),\n WifiManager.getIP?.(),\n ]);\n\n return {\n ssid,\n signalStrength: Math.abs(signalStrength ?? 0),\n ip: ip ?? '',\n };\n } catch (e: unknown) {\n if (isDisconnectedOrConnecting(e)) {\n logger.info('[fetchWifiInfo] Cannot fetch WiFi info since state is either disconnected or connecting');\n } else {\n logger.error('[fetchWifiInfo] Error fetching WiFi info', e);\n }\n throw e;\n }\n};\n\nexport const isDisconnectedOrConnecting = (e: unknown): e is Error => {\n return e instanceof Error && e.message.toLowerCase().includes('not connected or connecting');\n};\n\nexport const isUnexpectedWifiConnectionError = (e?: unknown): boolean => {\n return !!e && !isDisconnectedOrConnecting(e);\n};\n\nexport interface ConnectToWiFiArgs {\n ssid: string;\n password: string;\n isWEP?: boolean;\n isHidden?: boolean;\n timeout?: number;\n}\nexport const connectToWiFi = async ({\n ssid,\n password,\n isWEP = false,\n isHidden = false,\n timeout = DEFAULT_CONNECT_WIFI_TIMEOUT,\n}: ConnectToWiFiArgs) => {\n try {\n logger.info(`[connectToWiFi] attempting to connect to WiFi ${ssid}`);\n await WifiManager.connectToProtectedWifiSSID({ ssid, password, isWEP, isHidden, timeout });\n logger.info(`[connectToWiFi] Connected to WiFi ${ssid}`);\n } catch (e: unknown) {\n logger.info(`[connectToWiFi] Unable to connect to WiFi ${ssid}`, e); // perhaps bad password\n throw e;\n }\n};\n\nexport const disconnectFromWiFi = async (): Promise<void> => {\n logger.info('[disconnectFromWiFi]: disconnecting from WiFi');\n\n try {\n const ssid = await WifiManager.getCurrentWifiSSID();\n logger.info(`[disconnectFromWiFi]: Current WiFi SSID: ${ssid}`);\n\n if (Platform.OS === 'ios') {\n await WifiManager.disconnectFromSSID(ssid);\n } else if (Platform.OS === 'android') {\n const result = await WifiManager.disconnect();\n logger.info(`[disconnectFromWiFi]: Disconnected from WiFi result: ${result}`);\n } else {\n logger.info(`[disconnectFromWiFi]: Unsupported platform: ${Platform.OS}`);\n }\n\n logger.info('[disconnectFromWiFi]: Disconnected from WiFi ended.');\n } catch (e: unknown) {\n logger.error('[disconnectFromWiFi]: Error disconnecting from WiFi', e);\n throw e;\n }\n};\n\nexport const fetchAvailableWifiList = async (): Promise<WifiInfo[]> => {\n if (!isRealDevice()) {\n return fetchAvailableWifiListSimulator();\n }\n\n if (Platform.OS === 'ios') {\n // Apple does not allow third-party apps to scan surrounding WiFi networks.\n logger.info('[fetchAvailableWifiList] returning empty array for iOS');\n return [];\n }\n\n try {\n await requestLocationPermission();\n\n logger.info('[fetchAvailableWifiList] calling WifiManager.loadWifiList');\n const networks = await WifiManager.loadWifiList();\n if (Array.isArray(networks)) {\n return toWifiInfoArray(networks);\n }\n\n logger.info('[fetchAvailableWifiList] 2nd try: calling WifiManager.reScanAndLoadWifiList');\n const networks2ndTry = await WifiManager.reScanAndLoadWifiList();\n return toWifiInfoArray(networks2ndTry);\n } catch (e: unknown) {\n logger.error('[fetchAvailableWifiList] Error fetching available WiFi list', e);\n throw e;\n }\n};\n\nexport const requestLocationPermission = async (): Promise<void> => {\n const currentStatus = await Location.getForegroundPermissionsAsync();\n if (currentStatus.status === 'granted') {\n return;\n }\n\n logger.info('[requestLocationPermission] requesting location permission');\n const { status } = await Location.requestForegroundPermissionsAsync();\n logger.info(`[requestLocationPermission] location permission requested, result: ${status}`);\n\n if (status !== 'granted') {\n throw new Error(`Location permission not granted: ${status}`);\n }\n};\n","import { getErrorMessage } from '@lichens-innovation/ts-common';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Alert } from 'react-native';\n\nimport { useSnackbar } from '../../components/snack-bar/snackbar-provider';\nimport { logger } from '../../logger/logger';\nimport { WifiDiagnoseQueryKey } from './query-keys';\nimport {\n connectToWiFi,\n disconnectFromWiFi,\n fetchAvailableWifiList,\n fetchWifiInfo,\n isDisconnectedOrConnecting,\n isUnexpectedWifiConnectionError,\n} from './wifi-info.utils';\n\nconst REFRESH_INTERVAL = 30 * 1000;\n\nconst wifiInfoRetryStrategy = (failureCount: number, error: unknown) => {\n if (isDisconnectedOrConnecting(error) && failureCount < 3) {\n logger.info(`[useWifiInfo]: retrying, failureCount: ${failureCount}`);\n return true;\n }\n\n logger.info(`[useWifiInfo]: not retrying, failureCount: ${failureCount}`);\n return false;\n};\n\nexport const useWifiInfo = () => {\n const { data, isLoading, isFetching, isError, error, ...rest } = useQuery({\n queryKey: WifiDiagnoseQueryKey.details(),\n queryFn: fetchWifiInfo,\n refetchInterval: REFRESH_INTERVAL,\n retry: wifiInfoRetryStrategy,\n retryDelay: (failureCount) => failureCount * 1000,\n });\n\n return {\n wifiInfo: data,\n isLoadingWiFiInfos: isLoading,\n isFetchingWiFiInfos: isFetching,\n isErrorWiFiInfos: isError,\n errorWiFiInfos: error,\n ...rest,\n };\n};\n\nexport const useLoadAvailableWifiList = () => {\n const { data, isLoading, isFetching, isError, error, ...rest } = useQuery({\n queryKey: WifiDiagnoseQueryKey.list(),\n queryFn: fetchAvailableWifiList,\n refetchInterval: REFRESH_INTERVAL,\n retry: false,\n });\n\n return {\n availableNetworks: data ?? [],\n hasAvailableNetworks: !!data?.length,\n isLoadingNetworks: isLoading,\n isFetchingNetworks: isFetching,\n isErrorNetworks: isError,\n errorNetworks: error,\n ...rest,\n };\n};\n\nexport const useConnectToWifiMutation = () => {\n const queryClient = useQueryClient();\n const { t } = useTranslation();\n\n const { mutateAsync, isPending, isError, error, isSuccess, ...rest } = useMutation({\n mutationFn: connectToWiFi,\n onSuccess: () => queryClient.clear(),\n onError: (e: Error) => {\n // Technical debt: investigate why isError and error are not properly set because we should be able to\n // display the error message directly on the component through a classic useEffect on isError and error\n const title = t('common:error');\n const message = t('common:wifi.connectError', { error: e?.message });\n Alert.alert(title, message);\n },\n });\n\n return {\n connectToWiFi: mutateAsync,\n isConnectingToWiFi: isPending,\n isErrorConnectingToWiFi: isError,\n errorConnectingToWiFi: error,\n isSuccessConnectingToWiFi: isSuccess,\n ...rest,\n };\n};\n\nexport const useDisconnectFromWifiMutation = () => {\n const queryClient = useQueryClient();\n\n const { mutateAsync, isPending, isError, error, isSuccess, ...rest } = useMutation({\n mutationFn: disconnectFromWiFi,\n onSuccess: () => queryClient.clear(),\n });\n\n return {\n disconnectFromWiFi: mutateAsync,\n isDisconnectingFromWiFi: isPending,\n isErrorDisconnectingFromWiFi: isError,\n errorDisconnectingFromWiFi: error,\n isSuccessDisconnectingFromWiFi: isSuccess,\n ...rest,\n };\n};\n\nexport const useWifiInfosErrorSnackbar = () => {\n const { t } = useTranslation();\n const { showSnackbarMessage } = useSnackbar();\n\n const { errorWiFiInfos } = useWifiInfo();\n\n useEffect(() => {\n if (isUnexpectedWifiConnectionError(errorWiFiInfos)) {\n const message = t('common:wifi.currentNetworkRetrievalError', { error: getErrorMessage(errorWiFiInfos) });\n showSnackbarMessage(message);\n }\n }, [errorWiFiInfos, t, showSnackbarMessage]);\n};\n\nexport const useLoadAvailableWifiListErrorSnackbar = () => {\n const { t } = useTranslation();\n const { showSnackbarMessage } = useSnackbar();\n\n const { isErrorNetworks, errorNetworks } = useLoadAvailableWifiList();\n\n useEffect(() => {\n if (isErrorNetworks) {\n const message = t('common:wifi.availableNetworksRetrievalError', { error: errorNetworks?.message });\n showSnackbarMessage(message);\n }\n }, [isErrorNetworks, errorNetworks, t, showSnackbarMessage]);\n};\n","import { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { FunctionComponent, PropsWithChildren } from 'react';\n\nexport const queryClient = new QueryClient();\n\nexport const TanstackQueryProvider: FunctionComponent<PropsWithChildren> = ({ children }) => {\n return <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>;\n};\n","import { useQueryClient } from '@tanstack/react-query';\nimport { observer } from 'mobx-react-lite';\nimport { createContext, PropsWithChildren, useContext, useEffect, useRef } from 'react';\nimport { logger } from '../../logger/logger';\nimport { commonStore } from '../../store';\nimport { WifiDiagnoseQueryKey } from './query-keys';\nimport { useWifiInfo, useWifiInfosErrorSnackbar } from './use-wifi-info';\n\nexport type WifiInfosContextType = ReturnType<typeof useWifiInfo>;\n\nexport const WifiInfosContext = createContext<WifiInfosContextType | undefined>(undefined);\n\nexport const WifiInfosProvider = observer(({ children }: PropsWithChildren) => {\n const queryClient = useQueryClient();\n\n const value = useWifiInfo();\n useWifiInfosErrorSnackbar();\n\n const prevAppStatusRef = useRef(commonStore.appStatus);\n\n useEffect(() => {\n const newAppStatus = commonStore.appStatus;\n const prevAppStatus = prevAppStatusRef.current;\n const hasChangedToActive = newAppStatus === 'active' && prevAppStatus !== 'active';\n if (hasChangedToActive) {\n logger.info('[WifiInfosProvider] App status changed to active, invalidating wifi infos queries');\n queryClient.invalidateQueries({ queryKey: WifiDiagnoseQueryKey.details() });\n }\n\n prevAppStatusRef.current = newAppStatus;\n }, [queryClient, commonStore.appStatus]);\n\n return <WifiInfosContext.Provider value={value}>{children}</WifiInfosContext.Provider>;\n});\n\nexport const useWifiInfosContext = (): WifiInfosContextType => {\n const context = useContext(WifiInfosContext);\n\n if (context === undefined) {\n throw new Error('useWifiInfosContext must be used within a WifiInfosProvider');\n }\n\n return context;\n};\n"]}