@entropy-softworks/ui 2026.7.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (590) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/LICENSE +21 -0
  3. package/README.md +115 -0
  4. package/lib/components/auth/LockOverlay.d.ts +22 -0
  5. package/lib/components/auth/LockOverlay.d.ts.map +1 -0
  6. package/lib/components/auth/LockOverlay.jsx +82 -0
  7. package/lib/components/auth/LockOverlay.jsx.map +1 -0
  8. package/lib/components/auth/PasswordStrengthMeter.d.ts +12 -0
  9. package/lib/components/auth/PasswordStrengthMeter.d.ts.map +1 -0
  10. package/lib/components/auth/PasswordStrengthMeter.jsx +81 -0
  11. package/lib/components/auth/PasswordStrengthMeter.jsx.map +1 -0
  12. package/lib/components/auth/ProtectedRoute.d.ts +24 -0
  13. package/lib/components/auth/ProtectedRoute.d.ts.map +1 -0
  14. package/lib/components/auth/ProtectedRoute.jsx +56 -0
  15. package/lib/components/auth/ProtectedRoute.jsx.map +1 -0
  16. package/lib/components/auth/PwnedPasswordWarning.d.ts +13 -0
  17. package/lib/components/auth/PwnedPasswordWarning.d.ts.map +1 -0
  18. package/lib/components/auth/PwnedPasswordWarning.jsx +29 -0
  19. package/lib/components/auth/PwnedPasswordWarning.jsx.map +1 -0
  20. package/lib/components/auth/index.d.ts +5 -0
  21. package/lib/components/auth/index.d.ts.map +1 -0
  22. package/lib/components/auth/index.js +5 -0
  23. package/lib/components/auth/index.js.map +1 -0
  24. package/lib/components/bottom-nav.d.ts +25 -0
  25. package/lib/components/bottom-nav.d.ts.map +1 -0
  26. package/lib/components/bottom-nav.jsx +51 -0
  27. package/lib/components/bottom-nav.jsx.map +1 -0
  28. package/lib/components/button.d.ts +16 -0
  29. package/lib/components/button.d.ts.map +1 -0
  30. package/lib/components/button.jsx +73 -0
  31. package/lib/components/button.jsx.map +1 -0
  32. package/lib/components/card.d.ts +22 -0
  33. package/lib/components/card.d.ts.map +1 -0
  34. package/lib/components/card.jsx +36 -0
  35. package/lib/components/card.jsx.map +1 -0
  36. package/lib/components/checkbox.d.ts +12 -0
  37. package/lib/components/checkbox.d.ts.map +1 -0
  38. package/lib/components/checkbox.jsx +16 -0
  39. package/lib/components/checkbox.jsx.map +1 -0
  40. package/lib/components/connection-settings.d.ts +41 -0
  41. package/lib/components/connection-settings.d.ts.map +1 -0
  42. package/lib/components/connection-settings.jsx +354 -0
  43. package/lib/components/connection-settings.jsx.map +1 -0
  44. package/lib/components/context-menu.d.ts +52 -0
  45. package/lib/components/context-menu.d.ts.map +1 -0
  46. package/lib/components/context-menu.jsx +24 -0
  47. package/lib/components/context-menu.jsx.map +1 -0
  48. package/lib/components/data-table.d.ts +59 -0
  49. package/lib/components/data-table.d.ts.map +1 -0
  50. package/lib/components/data-table.jsx +101 -0
  51. package/lib/components/data-table.jsx.map +1 -0
  52. package/lib/components/dialog.d.ts +58 -0
  53. package/lib/components/dialog.d.ts.map +1 -0
  54. package/lib/components/dialog.jsx +197 -0
  55. package/lib/components/dialog.jsx.map +1 -0
  56. package/lib/components/dropdown-menu.d.ts +55 -0
  57. package/lib/components/dropdown-menu.d.ts.map +1 -0
  58. package/lib/components/dropdown-menu.jsx +38 -0
  59. package/lib/components/dropdown-menu.jsx.map +1 -0
  60. package/lib/components/entropy-boot-splash.d.ts +24 -0
  61. package/lib/components/entropy-boot-splash.d.ts.map +1 -0
  62. package/lib/components/entropy-boot-splash.jsx +83 -0
  63. package/lib/components/entropy-boot-splash.jsx.map +1 -0
  64. package/lib/components/entropy-mark-animated.d.ts +20 -0
  65. package/lib/components/entropy-mark-animated.d.ts.map +1 -0
  66. package/lib/components/entropy-mark-animated.jsx +148 -0
  67. package/lib/components/entropy-mark-animated.jsx.map +1 -0
  68. package/lib/components/entropy-mark-geometry.d.ts +8 -0
  69. package/lib/components/entropy-mark-geometry.d.ts.map +1 -0
  70. package/lib/components/entropy-mark-geometry.js +10 -0
  71. package/lib/components/entropy-mark-geometry.js.map +1 -0
  72. package/lib/components/entropy-mark-sequential.d.ts +12 -0
  73. package/lib/components/entropy-mark-sequential.d.ts.map +1 -0
  74. package/lib/components/entropy-mark-sequential.jsx +53 -0
  75. package/lib/components/entropy-mark-sequential.jsx.map +1 -0
  76. package/lib/components/entropy-mark.d.ts +29 -0
  77. package/lib/components/entropy-mark.d.ts.map +1 -0
  78. package/lib/components/entropy-mark.jsx +66 -0
  79. package/lib/components/entropy-mark.jsx.map +1 -0
  80. package/lib/components/error-boundary.d.ts +31 -0
  81. package/lib/components/error-boundary.d.ts.map +1 -0
  82. package/lib/components/error-boundary.jsx +40 -0
  83. package/lib/components/error-boundary.jsx.map +1 -0
  84. package/lib/components/index.d.ts +41 -0
  85. package/lib/components/index.d.ts.map +1 -0
  86. package/lib/components/index.js +43 -0
  87. package/lib/components/index.js.map +1 -0
  88. package/lib/components/input.d.ts +26 -0
  89. package/lib/components/input.d.ts.map +1 -0
  90. package/lib/components/input.jsx +95 -0
  91. package/lib/components/input.jsx.map +1 -0
  92. package/lib/components/item-icon.d.ts +32 -0
  93. package/lib/components/item-icon.d.ts.map +1 -0
  94. package/lib/components/item-icon.jsx +54 -0
  95. package/lib/components/item-icon.jsx.map +1 -0
  96. package/lib/components/label.d.ts +13 -0
  97. package/lib/components/label.d.ts.map +1 -0
  98. package/lib/components/label.jsx +9 -0
  99. package/lib/components/label.jsx.map +1 -0
  100. package/lib/components/legal-dialog.d.ts +18 -0
  101. package/lib/components/legal-dialog.d.ts.map +1 -0
  102. package/lib/components/legal-dialog.jsx +31 -0
  103. package/lib/components/legal-dialog.jsx.map +1 -0
  104. package/lib/components/license-gate.d.ts +17 -0
  105. package/lib/components/license-gate.d.ts.map +1 -0
  106. package/lib/components/license-gate.jsx +21 -0
  107. package/lib/components/license-gate.jsx.map +1 -0
  108. package/lib/components/logo.d.ts +15 -0
  109. package/lib/components/logo.d.ts.map +1 -0
  110. package/lib/components/logo.jsx +20 -0
  111. package/lib/components/logo.jsx.map +1 -0
  112. package/lib/components/onboarding-wizard.d.ts +89 -0
  113. package/lib/components/onboarding-wizard.d.ts.map +1 -0
  114. package/lib/components/onboarding-wizard.jsx +185 -0
  115. package/lib/components/onboarding-wizard.jsx.map +1 -0
  116. package/lib/components/pagination.d.ts +43 -0
  117. package/lib/components/pagination.d.ts.map +1 -0
  118. package/lib/components/pagination.jsx +72 -0
  119. package/lib/components/pagination.jsx.map +1 -0
  120. package/lib/components/password-generator.d.ts +15 -0
  121. package/lib/components/password-generator.d.ts.map +1 -0
  122. package/lib/components/password-generator.jsx +273 -0
  123. package/lib/components/password-generator.jsx.map +1 -0
  124. package/lib/components/pin-pad.d.ts +20 -0
  125. package/lib/components/pin-pad.d.ts.map +1 -0
  126. package/lib/components/pin-pad.jsx +93 -0
  127. package/lib/components/pin-pad.jsx.map +1 -0
  128. package/lib/components/popover.d.ts +27 -0
  129. package/lib/components/popover.d.ts.map +1 -0
  130. package/lib/components/popover.jsx +18 -0
  131. package/lib/components/popover.jsx.map +1 -0
  132. package/lib/components/profile/ProfileDialog.d.ts +25 -0
  133. package/lib/components/profile/ProfileDialog.d.ts.map +1 -0
  134. package/lib/components/profile/ProfileDialog.jsx +71 -0
  135. package/lib/components/profile/ProfileDialog.jsx.map +1 -0
  136. package/lib/components/profile/ProfileTab.d.ts +12 -0
  137. package/lib/components/profile/ProfileTab.d.ts.map +1 -0
  138. package/lib/components/profile/ProfileTab.jsx +112 -0
  139. package/lib/components/profile/ProfileTab.jsx.map +1 -0
  140. package/lib/components/profile/SecurityTab.d.ts +32 -0
  141. package/lib/components/profile/SecurityTab.d.ts.map +1 -0
  142. package/lib/components/profile/SecurityTab.jsx +145 -0
  143. package/lib/components/profile/SecurityTab.jsx.map +1 -0
  144. package/lib/components/profile/index.d.ts +4 -0
  145. package/lib/components/profile/index.d.ts.map +1 -0
  146. package/lib/components/profile/index.js +4 -0
  147. package/lib/components/profile/index.js.map +1 -0
  148. package/lib/components/segmented-toggle.d.ts +28 -0
  149. package/lib/components/segmented-toggle.d.ts.map +1 -0
  150. package/lib/components/segmented-toggle.jsx +64 -0
  151. package/lib/components/segmented-toggle.jsx.map +1 -0
  152. package/lib/components/separator.d.ts +13 -0
  153. package/lib/components/separator.d.ts.map +1 -0
  154. package/lib/components/separator.jsx +16 -0
  155. package/lib/components/separator.jsx.map +1 -0
  156. package/lib/components/server-settings.d.ts +27 -0
  157. package/lib/components/server-settings.d.ts.map +1 -0
  158. package/lib/components/server-settings.jsx +307 -0
  159. package/lib/components/server-settings.jsx.map +1 -0
  160. package/lib/components/settings/AccountSection.d.ts +26 -0
  161. package/lib/components/settings/AccountSection.d.ts.map +1 -0
  162. package/lib/components/settings/AccountSection.jsx +32 -0
  163. package/lib/components/settings/AccountSection.jsx.map +1 -0
  164. package/lib/components/settings/DangerZoneSection.d.ts +13 -0
  165. package/lib/components/settings/DangerZoneSection.d.ts.map +1 -0
  166. package/lib/components/settings/DangerZoneSection.jsx +16 -0
  167. package/lib/components/settings/DangerZoneSection.jsx.map +1 -0
  168. package/lib/components/settings/GeneralSection.d.ts +11 -0
  169. package/lib/components/settings/GeneralSection.d.ts.map +1 -0
  170. package/lib/components/settings/GeneralSection.jsx +12 -0
  171. package/lib/components/settings/GeneralSection.jsx.map +1 -0
  172. package/lib/components/settings/SupportSection.d.ts +11 -0
  173. package/lib/components/settings/SupportSection.d.ts.map +1 -0
  174. package/lib/components/settings/SupportSection.jsx +22 -0
  175. package/lib/components/settings/SupportSection.jsx.map +1 -0
  176. package/lib/components/settings/index.d.ts +5 -0
  177. package/lib/components/settings/index.d.ts.map +1 -0
  178. package/lib/components/settings/index.js +5 -0
  179. package/lib/components/settings/index.js.map +1 -0
  180. package/lib/components/settings-row.d.ts +28 -0
  181. package/lib/components/settings-row.d.ts.map +1 -0
  182. package/lib/components/settings-row.jsx +68 -0
  183. package/lib/components/settings-row.jsx.map +1 -0
  184. package/lib/components/skeleton.d.ts +8 -0
  185. package/lib/components/skeleton.d.ts.map +1 -0
  186. package/lib/components/skeleton.jsx +24 -0
  187. package/lib/components/skeleton.jsx.map +1 -0
  188. package/lib/components/social-connections.d.ts +15 -0
  189. package/lib/components/social-connections.d.ts.map +1 -0
  190. package/lib/components/social-connections.jsx +31 -0
  191. package/lib/components/social-connections.jsx.map +1 -0
  192. package/lib/components/stat-card.d.ts +29 -0
  193. package/lib/components/stat-card.d.ts.map +1 -0
  194. package/lib/components/stat-card.jsx +36 -0
  195. package/lib/components/stat-card.jsx.map +1 -0
  196. package/lib/components/tag-chip.d.ts +18 -0
  197. package/lib/components/tag-chip.d.ts.map +1 -0
  198. package/lib/components/tag-chip.jsx +54 -0
  199. package/lib/components/tag-chip.jsx.map +1 -0
  200. package/lib/components/tag-multi-select.d.ts +27 -0
  201. package/lib/components/tag-multi-select.d.ts.map +1 -0
  202. package/lib/components/tag-multi-select.jsx +65 -0
  203. package/lib/components/tag-multi-select.jsx.map +1 -0
  204. package/lib/components/text.d.ts +22 -0
  205. package/lib/components/text.d.ts.map +1 -0
  206. package/lib/components/text.jsx +43 -0
  207. package/lib/components/text.jsx.map +1 -0
  208. package/lib/components/toast/ToastPortal.d.ts +11 -0
  209. package/lib/components/toast/ToastPortal.d.ts.map +1 -0
  210. package/lib/components/toast/ToastPortal.jsx +15 -0
  211. package/lib/components/toast/ToastPortal.jsx.map +1 -0
  212. package/lib/components/toast/ToastPortal.web.d.ts +14 -0
  213. package/lib/components/toast/ToastPortal.web.d.ts.map +1 -0
  214. package/lib/components/toast/ToastPortal.web.jsx +39 -0
  215. package/lib/components/toast/ToastPortal.web.jsx.map +1 -0
  216. package/lib/components/toast/index.d.ts +3 -0
  217. package/lib/components/toast/index.d.ts.map +1 -0
  218. package/lib/components/toast/index.js +3 -0
  219. package/lib/components/toast/index.js.map +1 -0
  220. package/lib/components/toast/toast-config.d.ts +14 -0
  221. package/lib/components/toast/toast-config.d.ts.map +1 -0
  222. package/lib/components/toast/toast-config.jsx +24 -0
  223. package/lib/components/toast/toast-config.jsx.map +1 -0
  224. package/lib/components/tooltip.d.ts +30 -0
  225. package/lib/components/tooltip.d.ts.map +1 -0
  226. package/lib/components/tooltip.jsx +14 -0
  227. package/lib/components/tooltip.jsx.map +1 -0
  228. package/lib/components/totp-display.d.ts +23 -0
  229. package/lib/components/totp-display.d.ts.map +1 -0
  230. package/lib/components/totp-display.jsx +132 -0
  231. package/lib/components/totp-display.jsx.map +1 -0
  232. package/lib/components/user-avatar.d.ts +18 -0
  233. package/lib/components/user-avatar.d.ts.map +1 -0
  234. package/lib/components/user-avatar.jsx +25 -0
  235. package/lib/components/user-avatar.jsx.map +1 -0
  236. package/lib/context/AppConfigContext.d.ts +56 -0
  237. package/lib/context/AppConfigContext.d.ts.map +1 -0
  238. package/lib/context/AppConfigContext.jsx +14 -0
  239. package/lib/context/AppConfigContext.jsx.map +1 -0
  240. package/lib/context/NavigationContext.d.ts +42 -0
  241. package/lib/context/NavigationContext.d.ts.map +1 -0
  242. package/lib/context/NavigationContext.jsx +53 -0
  243. package/lib/context/NavigationContext.jsx.map +1 -0
  244. package/lib/context/NotificationContext.d.ts +32 -0
  245. package/lib/context/NotificationContext.d.ts.map +1 -0
  246. package/lib/context/NotificationContext.jsx +49 -0
  247. package/lib/context/NotificationContext.jsx.map +1 -0
  248. package/lib/context/ThemeContext.d.ts +12 -0
  249. package/lib/context/ThemeContext.d.ts.map +1 -0
  250. package/lib/context/ThemeContext.jsx +66 -0
  251. package/lib/context/ThemeContext.jsx.map +1 -0
  252. package/lib/context/index.d.ts +5 -0
  253. package/lib/context/index.d.ts.map +1 -0
  254. package/lib/context/index.js +5 -0
  255. package/lib/context/index.js.map +1 -0
  256. package/lib/flags.d.ts +9 -0
  257. package/lib/flags.d.ts.map +1 -0
  258. package/lib/flags.js +37 -0
  259. package/lib/flags.js.map +1 -0
  260. package/lib/forms/form-error.d.ts +12 -0
  261. package/lib/forms/form-error.d.ts.map +1 -0
  262. package/lib/forms/form-error.jsx +14 -0
  263. package/lib/forms/form-error.jsx.map +1 -0
  264. package/lib/forms/index.d.ts +3 -0
  265. package/lib/forms/index.d.ts.map +1 -0
  266. package/lib/forms/index.js +3 -0
  267. package/lib/forms/index.js.map +1 -0
  268. package/lib/forms/shake-field.d.ts +18 -0
  269. package/lib/forms/shake-field.d.ts.map +1 -0
  270. package/lib/forms/shake-field.jsx +30 -0
  271. package/lib/forms/shake-field.jsx.map +1 -0
  272. package/lib/hooks/index.d.ts +6 -0
  273. package/lib/hooks/index.d.ts.map +1 -0
  274. package/lib/hooks/index.js +6 -0
  275. package/lib/hooks/index.js.map +1 -0
  276. package/lib/hooks/useAuth.d.ts +109 -0
  277. package/lib/hooks/useAuth.d.ts.map +1 -0
  278. package/lib/hooks/useAuth.jsx +404 -0
  279. package/lib/hooks/useAuth.jsx.map +1 -0
  280. package/lib/hooks/useAutoLock.d.ts +22 -0
  281. package/lib/hooks/useAutoLock.d.ts.map +1 -0
  282. package/lib/hooks/useAutoLock.js +85 -0
  283. package/lib/hooks/useAutoLock.js.map +1 -0
  284. package/lib/hooks/useDebouncedValue.d.ts +19 -0
  285. package/lib/hooks/useDebouncedValue.d.ts.map +1 -0
  286. package/lib/hooks/useDebouncedValue.js +29 -0
  287. package/lib/hooks/useDebouncedValue.js.map +1 -0
  288. package/lib/hooks/useShakeAnimation.d.ts +17 -0
  289. package/lib/hooks/useShakeAnimation.d.ts.map +1 -0
  290. package/lib/hooks/useShakeAnimation.js +22 -0
  291. package/lib/hooks/useShakeAnimation.js.map +1 -0
  292. package/lib/hooks/useUploadBlobUrl.d.ts +13 -0
  293. package/lib/hooks/useUploadBlobUrl.d.ts.map +1 -0
  294. package/lib/hooks/useUploadBlobUrl.js +60 -0
  295. package/lib/hooks/useUploadBlobUrl.js.map +1 -0
  296. package/lib/index.d.ts +10 -0
  297. package/lib/index.d.ts.map +1 -0
  298. package/lib/index.js +47 -0
  299. package/lib/index.js.map +1 -0
  300. package/lib/screens/auth/AccountPickerScreen.d.ts +24 -0
  301. package/lib/screens/auth/AccountPickerScreen.d.ts.map +1 -0
  302. package/lib/screens/auth/AccountPickerScreen.jsx +47 -0
  303. package/lib/screens/auth/AccountPickerScreen.jsx.map +1 -0
  304. package/lib/screens/auth/AuthScreen.d.ts +59 -0
  305. package/lib/screens/auth/AuthScreen.d.ts.map +1 -0
  306. package/lib/screens/auth/AuthScreen.jsx +594 -0
  307. package/lib/screens/auth/AuthScreen.jsx.map +1 -0
  308. package/lib/screens/auth/ConsentScreen.d.ts +27 -0
  309. package/lib/screens/auth/ConsentScreen.d.ts.map +1 -0
  310. package/lib/screens/auth/ConsentScreen.jsx +55 -0
  311. package/lib/screens/auth/ConsentScreen.jsx.map +1 -0
  312. package/lib/screens/auth/ErrorScreen.d.ts +20 -0
  313. package/lib/screens/auth/ErrorScreen.d.ts.map +1 -0
  314. package/lib/screens/auth/ErrorScreen.jsx +43 -0
  315. package/lib/screens/auth/ErrorScreen.jsx.map +1 -0
  316. package/lib/screens/auth/ExpiredLinkScreen.d.ts +19 -0
  317. package/lib/screens/auth/ExpiredLinkScreen.d.ts.map +1 -0
  318. package/lib/screens/auth/ExpiredLinkScreen.jsx +38 -0
  319. package/lib/screens/auth/ExpiredLinkScreen.jsx.map +1 -0
  320. package/lib/screens/auth/ForgotPasswordScreen.d.ts +4 -0
  321. package/lib/screens/auth/ForgotPasswordScreen.d.ts.map +1 -0
  322. package/lib/screens/auth/ForgotPasswordScreen.jsx +123 -0
  323. package/lib/screens/auth/ForgotPasswordScreen.jsx.map +1 -0
  324. package/lib/screens/auth/ImportDataScreen.d.ts +17 -0
  325. package/lib/screens/auth/ImportDataScreen.d.ts.map +1 -0
  326. package/lib/screens/auth/ImportDataScreen.jsx +73 -0
  327. package/lib/screens/auth/ImportDataScreen.jsx.map +1 -0
  328. package/lib/screens/auth/LoginScreen.d.ts +38 -0
  329. package/lib/screens/auth/LoginScreen.d.ts.map +1 -0
  330. package/lib/screens/auth/LoginScreen.jsx +326 -0
  331. package/lib/screens/auth/LoginScreen.jsx.map +1 -0
  332. package/lib/screens/auth/MfaChallengeScreen.d.ts +4 -0
  333. package/lib/screens/auth/MfaChallengeScreen.d.ts.map +1 -0
  334. package/lib/screens/auth/MfaChallengeScreen.jsx +139 -0
  335. package/lib/screens/auth/MfaChallengeScreen.jsx.map +1 -0
  336. package/lib/screens/auth/MfaEnrollScreen.d.ts +12 -0
  337. package/lib/screens/auth/MfaEnrollScreen.d.ts.map +1 -0
  338. package/lib/screens/auth/MfaEnrollScreen.jsx +267 -0
  339. package/lib/screens/auth/MfaEnrollScreen.jsx.map +1 -0
  340. package/lib/screens/auth/PasskeyEnrollScreen.d.ts +18 -0
  341. package/lib/screens/auth/PasskeyEnrollScreen.d.ts.map +1 -0
  342. package/lib/screens/auth/PasskeyEnrollScreen.jsx +51 -0
  343. package/lib/screens/auth/PasskeyEnrollScreen.jsx.map +1 -0
  344. package/lib/screens/auth/PrivacyPolicyScreen.d.ts +19 -0
  345. package/lib/screens/auth/PrivacyPolicyScreen.d.ts.map +1 -0
  346. package/lib/screens/auth/PrivacyPolicyScreen.jsx +143 -0
  347. package/lib/screens/auth/PrivacyPolicyScreen.jsx.map +1 -0
  348. package/lib/screens/auth/RegisterScreen.d.ts +14 -0
  349. package/lib/screens/auth/RegisterScreen.d.ts.map +1 -0
  350. package/lib/screens/auth/RegisterScreen.jsx +296 -0
  351. package/lib/screens/auth/RegisterScreen.jsx.map +1 -0
  352. package/lib/screens/auth/ResetPasswordScreen.d.ts +12 -0
  353. package/lib/screens/auth/ResetPasswordScreen.d.ts.map +1 -0
  354. package/lib/screens/auth/ResetPasswordScreen.jsx +276 -0
  355. package/lib/screens/auth/ResetPasswordScreen.jsx.map +1 -0
  356. package/lib/screens/auth/ServerConfigScreen.d.ts +18 -0
  357. package/lib/screens/auth/ServerConfigScreen.d.ts.map +1 -0
  358. package/lib/screens/auth/ServerConfigScreen.jsx +259 -0
  359. package/lib/screens/auth/ServerConfigScreen.jsx.map +1 -0
  360. package/lib/screens/auth/TermsOfServiceScreen.d.ts +30 -0
  361. package/lib/screens/auth/TermsOfServiceScreen.d.ts.map +1 -0
  362. package/lib/screens/auth/TermsOfServiceScreen.jsx +130 -0
  363. package/lib/screens/auth/TermsOfServiceScreen.jsx.map +1 -0
  364. package/lib/screens/auth/VerifyEmailScreen.d.ts +4 -0
  365. package/lib/screens/auth/VerifyEmailScreen.d.ts.map +1 -0
  366. package/lib/screens/auth/VerifyEmailScreen.jsx +249 -0
  367. package/lib/screens/auth/VerifyEmailScreen.jsx.map +1 -0
  368. package/lib/screens/auth/WelcomeScreen.d.ts +17 -0
  369. package/lib/screens/auth/WelcomeScreen.d.ts.map +1 -0
  370. package/lib/screens/auth/WelcomeScreen.jsx +58 -0
  371. package/lib/screens/auth/WelcomeScreen.jsx.map +1 -0
  372. package/lib/screens/auth/index.d.ts +19 -0
  373. package/lib/screens/auth/index.d.ts.map +1 -0
  374. package/lib/screens/auth/index.js +19 -0
  375. package/lib/screens/auth/index.js.map +1 -0
  376. package/lib/screens/index.d.ts +2 -0
  377. package/lib/screens/index.d.ts.map +1 -0
  378. package/lib/screens/index.js +2 -0
  379. package/lib/screens/index.js.map +1 -0
  380. package/lib/services/api-config.d.ts +87 -0
  381. package/lib/services/api-config.d.ts.map +1 -0
  382. package/lib/services/api-config.js +202 -0
  383. package/lib/services/api-config.js.map +1 -0
  384. package/lib/services/auth.service.d.ts +140 -0
  385. package/lib/services/auth.service.d.ts.map +1 -0
  386. package/lib/services/auth.service.js +376 -0
  387. package/lib/services/auth.service.js.map +1 -0
  388. package/lib/services/favicon.d.ts +46 -0
  389. package/lib/services/favicon.d.ts.map +1 -0
  390. package/lib/services/favicon.js +84 -0
  391. package/lib/services/favicon.js.map +1 -0
  392. package/lib/services/hibp-cache.d.ts +23 -0
  393. package/lib/services/hibp-cache.d.ts.map +1 -0
  394. package/lib/services/hibp-cache.js +56 -0
  395. package/lib/services/hibp-cache.js.map +1 -0
  396. package/lib/services/hibp.d.ts +28 -0
  397. package/lib/services/hibp.d.ts.map +1 -0
  398. package/lib/services/hibp.js +92 -0
  399. package/lib/services/hibp.js.map +1 -0
  400. package/lib/services/index.d.ts +8 -0
  401. package/lib/services/index.d.ts.map +1 -0
  402. package/lib/services/index.js +7 -0
  403. package/lib/services/index.js.map +1 -0
  404. package/lib/services/passkey.d.ts +10 -0
  405. package/lib/services/passkey.d.ts.map +1 -0
  406. package/lib/services/passkey.js +192 -0
  407. package/lib/services/passkey.js.map +1 -0
  408. package/lib/utils/api-fetch.d.ts +11 -0
  409. package/lib/utils/api-fetch.d.ts.map +1 -0
  410. package/lib/utils/api-fetch.js +52 -0
  411. package/lib/utils/api-fetch.js.map +1 -0
  412. package/lib/utils/clipboard.d.ts +31 -0
  413. package/lib/utils/clipboard.d.ts.map +1 -0
  414. package/lib/utils/clipboard.js +66 -0
  415. package/lib/utils/clipboard.js.map +1 -0
  416. package/lib/utils/cn.d.ts +9 -0
  417. package/lib/utils/cn.d.ts.map +1 -0
  418. package/lib/utils/cn.js +12 -0
  419. package/lib/utils/cn.js.map +1 -0
  420. package/lib/utils/debounce.d.ts +13 -0
  421. package/lib/utils/debounce.d.ts.map +1 -0
  422. package/lib/utils/debounce.js +28 -0
  423. package/lib/utils/debounce.js.map +1 -0
  424. package/lib/utils/error.d.ts +9 -0
  425. package/lib/utils/error.d.ts.map +1 -0
  426. package/lib/utils/error.js +11 -0
  427. package/lib/utils/error.js.map +1 -0
  428. package/lib/utils/fetch.d.ts +17 -0
  429. package/lib/utils/fetch.d.ts.map +1 -0
  430. package/lib/utils/fetch.js +29 -0
  431. package/lib/utils/fetch.js.map +1 -0
  432. package/lib/utils/http-error.d.ts +41 -0
  433. package/lib/utils/http-error.d.ts.map +1 -0
  434. package/lib/utils/http-error.js +63 -0
  435. package/lib/utils/http-error.js.map +1 -0
  436. package/lib/utils/index.d.ts +11 -0
  437. package/lib/utils/index.d.ts.map +1 -0
  438. package/lib/utils/index.js +11 -0
  439. package/lib/utils/index.js.map +1 -0
  440. package/lib/utils/palette.d.ts +46 -0
  441. package/lib/utils/palette.d.ts.map +1 -0
  442. package/lib/utils/palette.js +75 -0
  443. package/lib/utils/palette.js.map +1 -0
  444. package/lib/utils/password.d.ts +20 -0
  445. package/lib/utils/password.d.ts.map +1 -0
  446. package/lib/utils/password.js +51 -0
  447. package/lib/utils/password.js.map +1 -0
  448. package/lib/utils/settings-storage.d.ts +3 -0
  449. package/lib/utils/settings-storage.d.ts.map +1 -0
  450. package/lib/utils/settings-storage.js +62 -0
  451. package/lib/utils/settings-storage.js.map +1 -0
  452. package/lib/utils/validation.d.ts +29 -0
  453. package/lib/utils/validation.d.ts.map +1 -0
  454. package/lib/utils/validation.js +58 -0
  455. package/lib/utils/validation.js.map +1 -0
  456. package/package.json +204 -0
  457. package/src/components/__tests__/data-table.test.ts +94 -0
  458. package/src/components/__tests__/pagination.test.ts +73 -0
  459. package/src/components/__tests__/stat-card.test.ts +21 -0
  460. package/src/components/auth/LockOverlay.tsx +122 -0
  461. package/src/components/auth/PasswordStrengthMeter.tsx +96 -0
  462. package/src/components/auth/ProtectedRoute.tsx +91 -0
  463. package/src/components/auth/PwnedPasswordWarning.tsx +54 -0
  464. package/src/components/auth/index.ts +10 -0
  465. package/src/components/bottom-nav.tsx +99 -0
  466. package/src/components/button.tsx +144 -0
  467. package/src/components/card.tsx +82 -0
  468. package/src/components/checkbox.tsx +48 -0
  469. package/src/components/connection-settings.tsx +583 -0
  470. package/src/components/context-menu.tsx +95 -0
  471. package/src/components/data-table.tsx +223 -0
  472. package/src/components/dialog.tsx +376 -0
  473. package/src/components/dropdown-menu.tsx +120 -0
  474. package/src/components/entropy-boot-splash.tsx +114 -0
  475. package/src/components/entropy-mark-animated.tsx +260 -0
  476. package/src/components/entropy-mark-geometry.ts +11 -0
  477. package/src/components/entropy-mark-sequential.tsx +132 -0
  478. package/src/components/entropy-mark.tsx +135 -0
  479. package/src/components/error-boundary.tsx +70 -0
  480. package/src/components/index.ts +156 -0
  481. package/src/components/input.tsx +246 -0
  482. package/src/components/item-icon.tsx +111 -0
  483. package/src/components/label.tsx +25 -0
  484. package/src/components/legal-dialog.tsx +47 -0
  485. package/src/components/license-gate.tsx +28 -0
  486. package/src/components/logo.tsx +34 -0
  487. package/src/components/onboarding-wizard.tsx +353 -0
  488. package/src/components/pagination.tsx +154 -0
  489. package/src/components/password-generator.tsx +393 -0
  490. package/src/components/pin-pad.tsx +156 -0
  491. package/src/components/popover.tsx +38 -0
  492. package/src/components/profile/ProfileDialog.tsx +129 -0
  493. package/src/components/profile/ProfileTab.tsx +151 -0
  494. package/src/components/profile/SecurityTab.tsx +229 -0
  495. package/src/components/profile/index.ts +3 -0
  496. package/src/components/segmented-toggle.tsx +119 -0
  497. package/src/components/separator.tsx +41 -0
  498. package/src/components/server-settings.tsx +442 -0
  499. package/src/components/settings/AccountSection.tsx +76 -0
  500. package/src/components/settings/DangerZoneSection.tsx +37 -0
  501. package/src/components/settings/GeneralSection.tsx +39 -0
  502. package/src/components/settings/SupportSection.tsx +53 -0
  503. package/src/components/settings/index.ts +4 -0
  504. package/src/components/settings-row.tsx +126 -0
  505. package/src/components/skeleton.tsx +48 -0
  506. package/src/components/social-connections.tsx +55 -0
  507. package/src/components/stat-card.tsx +64 -0
  508. package/src/components/tag-chip.tsx +78 -0
  509. package/src/components/tag-multi-select.tsx +136 -0
  510. package/src/components/text.tsx +77 -0
  511. package/src/components/toast/ToastPortal.tsx +16 -0
  512. package/src/components/toast/ToastPortal.web.tsx +47 -0
  513. package/src/components/toast/index.ts +2 -0
  514. package/src/components/toast/toast-config.tsx +31 -0
  515. package/src/components/tooltip.tsx +30 -0
  516. package/src/components/totp-display.tsx +207 -0
  517. package/src/components/user-avatar.tsx +46 -0
  518. package/src/context/AppConfigContext.tsx +76 -0
  519. package/src/context/NavigationContext.tsx +75 -0
  520. package/src/context/NotificationContext.tsx +69 -0
  521. package/src/context/ThemeContext.tsx +83 -0
  522. package/src/context/__tests__/NavigationContext.test.tsx +53 -0
  523. package/src/context/index.ts +24 -0
  524. package/src/flags.ts +44 -0
  525. package/src/forms/form-error.tsx +20 -0
  526. package/src/forms/index.ts +2 -0
  527. package/src/forms/shake-field.tsx +52 -0
  528. package/src/hooks/__tests__/useUploadBlobUrl.test.tsx +77 -0
  529. package/src/hooks/index.ts +18 -0
  530. package/src/hooks/useAuth.tsx +567 -0
  531. package/src/hooks/useAutoLock.ts +110 -0
  532. package/src/hooks/useDebouncedValue.ts +32 -0
  533. package/src/hooks/useShakeAnimation.ts +42 -0
  534. package/src/hooks/useUploadBlobUrl.ts +75 -0
  535. package/src/index.ts +48 -0
  536. package/src/screens/auth/AccountPickerScreen.tsx +103 -0
  537. package/src/screens/auth/AuthScreen.tsx +941 -0
  538. package/src/screens/auth/ConsentScreen.tsx +118 -0
  539. package/src/screens/auth/ErrorScreen.tsx +96 -0
  540. package/src/screens/auth/ExpiredLinkScreen.tsx +87 -0
  541. package/src/screens/auth/ForgotPasswordScreen.tsx +182 -0
  542. package/src/screens/auth/ImportDataScreen.tsx +112 -0
  543. package/src/screens/auth/LoginScreen.tsx +484 -0
  544. package/src/screens/auth/MfaChallengeScreen.tsx +216 -0
  545. package/src/screens/auth/MfaEnrollScreen.tsx +388 -0
  546. package/src/screens/auth/PasskeyEnrollScreen.tsx +96 -0
  547. package/src/screens/auth/PrivacyPolicyScreen.tsx +249 -0
  548. package/src/screens/auth/RegisterScreen.tsx +430 -0
  549. package/src/screens/auth/ResetPasswordScreen.tsx +377 -0
  550. package/src/screens/auth/ServerConfigScreen.tsx +388 -0
  551. package/src/screens/auth/TermsOfServiceScreen.tsx +236 -0
  552. package/src/screens/auth/VerifyEmailScreen.tsx +310 -0
  553. package/src/screens/auth/WelcomeScreen.tsx +78 -0
  554. package/src/screens/auth/index.ts +36 -0
  555. package/src/screens/index.ts +1 -0
  556. package/src/services/__tests__/api-config.test.ts +67 -0
  557. package/src/services/__tests__/favicon.test.ts +88 -0
  558. package/src/services/__tests__/hibp-cache.test.ts +37 -0
  559. package/src/services/__tests__/hibp.test.ts +39 -0
  560. package/src/services/api-config.ts +260 -0
  561. package/src/services/auth.service.ts +498 -0
  562. package/src/services/favicon.ts +102 -0
  563. package/src/services/hibp-cache.ts +71 -0
  564. package/src/services/hibp.ts +120 -0
  565. package/src/services/index.ts +52 -0
  566. package/src/services/passkey.ts +213 -0
  567. package/src/types/external.d.ts +24 -0
  568. package/src/utils/__tests__/clipboard.test.ts +59 -0
  569. package/src/utils/__tests__/cn.test.ts +24 -0
  570. package/src/utils/__tests__/debounce.test.ts +42 -0
  571. package/src/utils/__tests__/error.test.ts +18 -0
  572. package/src/utils/__tests__/http-error.test.ts +33 -0
  573. package/src/utils/__tests__/palette.test.ts +22 -0
  574. package/src/utils/__tests__/password.test.ts +55 -0
  575. package/src/utils/__tests__/settings-storage.test.ts +15 -0
  576. package/src/utils/__tests__/validation.test.ts +52 -0
  577. package/src/utils/api-fetch.ts +61 -0
  578. package/src/utils/clipboard.ts +69 -0
  579. package/src/utils/cn.ts +12 -0
  580. package/src/utils/debounce.ts +33 -0
  581. package/src/utils/error.ts +10 -0
  582. package/src/utils/fetch.ts +33 -0
  583. package/src/utils/http-error.ts +81 -0
  584. package/src/utils/index.ts +23 -0
  585. package/src/utils/palette.ts +105 -0
  586. package/src/utils/password.ts +64 -0
  587. package/src/utils/settings-storage.ts +68 -0
  588. package/src/utils/validation.ts +71 -0
  589. package/styles/globals.css +262 -0
  590. package/tailwind-preset.js +163 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.jsx","sourceRoot":"","sources":["../../src/components/data-table.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import React from "react";
2
+ import { type ViewStyle } from "react-native";
3
+ interface DialogProps {
4
+ visible: boolean;
5
+ onClose: () => void;
6
+ title?: string;
7
+ children: React.ReactNode;
8
+ showCloseButton?: boolean;
9
+ draggable?: boolean;
10
+ maxWidth?: number;
11
+ /**
12
+ * When false, clicking the backdrop does NOT dismiss the dialog —
13
+ * required for any dialog that holds an unrecoverable input
14
+ * (master password, step-up confirmation, half-typed import). An
15
+ * accidental drag-then-click on the backdrop otherwise loses the
16
+ * user's typing with no undo. Defaults to true to keep the simple
17
+ * "click outside to cancel" pattern for non-input dialogs.
18
+ */
19
+ dismissOnBackdrop?: boolean;
20
+ }
21
+ export declare function Dialog({ visible, onClose, title, children, showCloseButton, draggable, maxWidth, dismissOnBackdrop, }: DialogProps): React.JSX.Element;
22
+ interface DialogContentProps {
23
+ children: React.ReactNode;
24
+ className?: string;
25
+ }
26
+ export declare function DialogContent({ children, className }: DialogContentProps): React.JSX.Element;
27
+ interface DialogFooterProps {
28
+ children: React.ReactNode;
29
+ className?: string;
30
+ style?: ViewStyle;
31
+ }
32
+ export declare function DialogFooter({ children, className, style }: DialogFooterProps): React.JSX.Element;
33
+ interface DialogButtonProps {
34
+ onPress: () => void;
35
+ variant?: "primary" | "secondary" | "ghost" | "destructive";
36
+ children: React.ReactNode;
37
+ accessibilityLabel?: string;
38
+ accessibilityRole?: "button" | "link" | "none";
39
+ }
40
+ export declare function DialogButton({ onPress, variant, children, accessibilityLabel, accessibilityRole, }: DialogButtonProps): React.JSX.Element;
41
+ interface ConfirmDialogProps {
42
+ visible: boolean;
43
+ title: string;
44
+ message?: string;
45
+ /** Confirm-button label. Defaults to "Confirm". */
46
+ confirmLabel?: string;
47
+ /** Cancel-button label. Defaults to "Cancel". */
48
+ cancelLabel?: string;
49
+ /** Render the confirm button in the destructive (red) style. */
50
+ destructive?: boolean;
51
+ /** Hide the cancel button — useful for one-button info prompts. */
52
+ hideCancel?: boolean;
53
+ onConfirm: () => void;
54
+ onCancel: () => void;
55
+ }
56
+ export declare function ConfirmDialog({ visible, title, message, confirmLabel, cancelLabel, destructive, hideCancel, onConfirm, onCancel, }: ConfirmDialogProps): React.JSX.Element;
57
+ export {};
58
+ //# sourceMappingURL=dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/components/dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAChD,OAAO,EASL,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAQtB,UAAU,WAAW;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,MAAM,CAAC,EACrB,OAAO,EACP,OAAO,EACP,KAAK,EACL,QAAQ,EACR,eAAsB,EACtB,SAAiB,EACjB,QAAc,EACd,iBAAwB,GACzB,EAAE,WAAW,qBA0Lb;AAID,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,kBAAkB,qBAExE;AAED,UAAU,iBAAiB;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,iBAAiB,qBAM7E;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,aAAa,CAAC;IAC5D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;CAChD;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,OAAmB,EACnB,QAAQ,EACR,kBAAkB,EAClB,iBAAiB,GAClB,EAAE,iBAAiB,qBA2CnB;AAQD,UAAU,kBAAkB;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mEAAmE;IACnE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,OAAO,EACP,YAAwB,EACxB,WAAsB,EACtB,WAAmB,EACnB,UAAkB,EAClB,SAAS,EACT,QAAQ,GACT,EAAE,kBAAkB,qBAwBpB"}
@@ -0,0 +1,197 @@
1
+ import React, { useRef, useState } from "react";
2
+ import { PanResponder, Platform, Pressable, Text as RNText, useWindowDimensions, View, } from "react-native";
3
+ import * as DialogPrimitive from "@rn-primitives/dialog";
4
+ import { Ionicons } from "@expo/vector-icons";
5
+ import { useColorScheme } from "nativewind";
6
+ import { cn } from "../utils/cn";
7
+ export function Dialog({ visible, onClose, title, children, showCloseButton = true, draggable = false, maxWidth = 400, dismissOnBackdrop = true, }) {
8
+ const { colorScheme } = useColorScheme();
9
+ const isDark = colorScheme === "dark";
10
+ const { width: winW, height: winH } = useWindowDimensions();
11
+ // Drag state
12
+ const [offset, setOffset] = useState({ x: 0, y: 0 });
13
+ const offsetRef = useRef({ x: 0, y: 0 });
14
+ const dragStart = useRef({ x: 0, y: 0 });
15
+ // Reset position when the dialog opens.
16
+ const prevVisible = useRef(visible);
17
+ if (visible && !prevVisible.current) {
18
+ offsetRef.current = { x: 0, y: 0 };
19
+ setOffset({ x: 0, y: 0 });
20
+ }
21
+ prevVisible.current = visible;
22
+ const winWRef = useRef(winW);
23
+ const winHRef = useRef(winH);
24
+ const maxWidthRef = useRef(maxWidth);
25
+ winWRef.current = winW;
26
+ winHRef.current = winH;
27
+ maxWidthRef.current = maxWidth;
28
+ const dialogLayoutRef = useRef({ width: 0, height: 0 });
29
+ // Measured height also lives in state: the centering transform reads it at
30
+ // render time, and a ref alone never re-renders after onLayout — so tall
31
+ // dialogs (e.g. the legal popup) stayed pinned at the fallback height and
32
+ // rendered vertically off-center until a drag forced a re-render.
33
+ const [dialogH, setDialogH] = useState(0);
34
+ const onDialogLayout = React.useCallback((e) => {
35
+ const { width, height } = e.nativeEvent.layout;
36
+ dialogLayoutRef.current = { width, height };
37
+ if (height > 0) {
38
+ setDialogH(height);
39
+ }
40
+ }, []);
41
+ const clampOffset = (raw) => {
42
+ const w = winWRef.current;
43
+ const h = winHRef.current;
44
+ const dw = dialogLayoutRef.current.width || Math.min(maxWidthRef.current, w * 0.9);
45
+ const dh = dialogLayoutRef.current.height || 200;
46
+ const pad = 0.25;
47
+ const maxX = (w - dw * pad) / 2;
48
+ const maxY = (h - dh * pad) / 2;
49
+ return {
50
+ x: Math.max(-maxX, Math.min(maxX, raw.x)),
51
+ y: Math.max(-maxY, Math.min(maxY, raw.y)),
52
+ };
53
+ };
54
+ const activePanResponder = useRef(PanResponder.create({
55
+ onStartShouldSetPanResponder: (evt) => {
56
+ if (Platform.OS === "web") {
57
+ const webEvent = evt.nativeEvent;
58
+ const target = webEvent.target;
59
+ if (target && typeof target.closest === "function") {
60
+ const interactive = target.closest('input, textarea, select, button, a, label, [role="button"], [role="textbox"], [contenteditable="true"]');
61
+ if (interactive) {
62
+ return false;
63
+ }
64
+ }
65
+ }
66
+ return true;
67
+ },
68
+ onMoveShouldSetPanResponder: (_, gesture) => Math.abs(gesture.dx) > 8 || Math.abs(gesture.dy) > 8,
69
+ onPanResponderGrant: () => {
70
+ dragStart.current = { x: offsetRef.current.x, y: offsetRef.current.y };
71
+ },
72
+ onPanResponderMove: (_, gesture) => {
73
+ const next = {
74
+ x: dragStart.current.x + gesture.dx,
75
+ y: dragStart.current.y + gesture.dy,
76
+ };
77
+ const clamped = clampOffset(next);
78
+ offsetRef.current = clamped;
79
+ setOffset(clamped);
80
+ },
81
+ })).current;
82
+ return (<DialogPrimitive.Root open={visible} onOpenChange={(open) => {
83
+ if (!open) {
84
+ onClose();
85
+ }
86
+ }}>
87
+ <DialogPrimitive.Portal>
88
+ <DialogPrimitive.Overlay className="absolute inset-0 bg-black/50" closeOnPress={dismissOnBackdrop}/>
89
+ <DialogPrimitive.Content onLayout={onDialogLayout} className={cn("absolute self-center rounded-xl p-5", isDark ? "bg-neutral-900" : "bg-white", Platform.OS === "web" && "shadow-lg")} style={{
90
+ width: "90%",
91
+ maxWidth,
92
+ top: "50%",
93
+ left: "50%",
94
+ // Web: center with a CSS percentage translate of the element's
95
+ // OWN size — no height measurement (onLayout doesn't reliably
96
+ // fire for the portaled content, which left tall dialogs like the
97
+ // legal popup pinned to a stale fallback height and off-center).
98
+ // Native: RN has no % translate, so keep the measured math.
99
+ transform: Platform.OS === "web"
100
+ ? `translate(calc(-50% + ${offset.x}px), calc(-50% + ${offset.y}px))`
101
+ : [
102
+ { translateX: -(Math.min(maxWidth, winW * 0.9) / 2) + offset.x },
103
+ { translateY: -(dialogH || 100) / 2 + offset.y },
104
+ ],
105
+ }}>
106
+ {/* Radix accessibility: always render a Title. */}
107
+ {title ? null : (<DialogPrimitive.Title className="absolute h-px w-px overflow-hidden" style={{ clip: "rect(0,0,0,0)" }}>
108
+ Dialog
109
+ </DialogPrimitive.Title>)}
110
+
111
+ {title || showCloseButton ? (<View className="mb-4 flex-row items-center justify-between" {...(draggable ? activePanResponder.panHandlers : {})} {...(draggable && Platform.OS === "web"
112
+ ? {
113
+ draggable: false,
114
+ onDragStart: (e) => {
115
+ e.preventDefault?.();
116
+ },
117
+ }
118
+ : {})} style={draggable
119
+ ? {
120
+ cursor: "grab",
121
+ userSelect: "none",
122
+ WebkitUserDrag: "none",
123
+ userDrag: "none",
124
+ }
125
+ : undefined}>
126
+ {title ? (<DialogPrimitive.Title className="flex-1 text-xl font-bold text-foreground dark:text-white">
127
+ {title}
128
+ </DialogPrimitive.Title>) : null}
129
+ {showCloseButton ? (<DialogPrimitive.Close asChild>
130
+ <Pressable onPress={onClose} hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }} className="rounded p-2 active:opacity-70">
131
+ <Ionicons name="close" size={24} color={isDark ? "#999999" : "#666666"}/>
132
+ </Pressable>
133
+ </DialogPrimitive.Close>) : null}
134
+ </View>) : null}
135
+
136
+ {children}
137
+ </DialogPrimitive.Content>
138
+ </DialogPrimitive.Portal>
139
+ </DialogPrimitive.Root>);
140
+ }
141
+ export function DialogContent({ children, className }) {
142
+ return <View className={cn("py-2", className)}>{children}</View>;
143
+ }
144
+ export function DialogFooter({ children, className, style }) {
145
+ return (<View className={cn("mt-5 flex-row items-center justify-end gap-3", className)} style={style}>
146
+ {children}
147
+ </View>);
148
+ }
149
+ export function DialogButton({ onPress, variant = "primary", children, accessibilityLabel, accessibilityRole, }) {
150
+ const { colorScheme } = useColorScheme();
151
+ const isDark = colorScheme === "dark";
152
+ const base = "rounded-lg px-4 py-2.5 active:opacity-70";
153
+ const variantClass = (() => {
154
+ switch (variant) {
155
+ case "primary":
156
+ return isDark ? "bg-white" : "bg-black";
157
+ case "secondary":
158
+ return cn("border", isDark ? "border-neutral-600" : "border-neutral-300");
159
+ case "ghost":
160
+ return "";
161
+ case "destructive":
162
+ return "bg-destructive";
163
+ }
164
+ })();
165
+ const textColor = (() => {
166
+ switch (variant) {
167
+ case "primary":
168
+ return isDark ? "#000000" : "#FFFFFF";
169
+ case "secondary":
170
+ case "ghost":
171
+ return isDark ? "#FFFFFF" : "#000000";
172
+ case "destructive":
173
+ return "#FFFFFF";
174
+ }
175
+ })();
176
+ return (<Pressable onPress={onPress} className={cn(base, variantClass)} accessibilityLabel={accessibilityLabel} accessibilityRole={accessibilityRole}>
177
+ <RNText style={{ color: textColor, fontSize: 14, fontWeight: "600", textAlign: "center" }}>
178
+ {children}
179
+ </RNText>
180
+ </Pressable>);
181
+ }
182
+ export function ConfirmDialog({ visible, title, message, confirmLabel = "Confirm", cancelLabel = "Cancel", destructive = false, hideCancel = false, onConfirm, onCancel, }) {
183
+ return (<Dialog visible={visible} onClose={onCancel} title={title} maxWidth={400}>
184
+ {message ? (<DialogContent>
185
+ <RNText className="text-sm text-foreground dark:text-white">{message}</RNText>
186
+ </DialogContent>) : null}
187
+ <DialogFooter>
188
+ {!hideCancel && (<DialogButton variant="secondary" onPress={onCancel} accessibilityLabel={cancelLabel}>
189
+ {cancelLabel}
190
+ </DialogButton>)}
191
+ <DialogButton variant={destructive ? "destructive" : "primary"} onPress={onConfirm} accessibilityLabel={confirmLabel}>
192
+ {confirmLabel}
193
+ </DialogButton>
194
+ </DialogFooter>
195
+ </Dialog>);
196
+ }
197
+ //# sourceMappingURL=dialog.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.jsx","sourceRoot":"","sources":["../../src/components/dialog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import React from "react";
2
+ import { View } from "react-native";
3
+ declare const DropdownMenu: {
4
+ ({ asChild, onOpenChange: onOpenChangeProp, ref, ...viewProps }: import("react-native").ViewProps & {
5
+ asChild?: boolean;
6
+ } & {
7
+ onOpenChange?: (open: boolean) => void;
8
+ } & React.RefAttributes<View>): React.JSX.Element;
9
+ displayName: string;
10
+ };
11
+ declare const DropdownMenuTrigger: {
12
+ ({ asChild, onPress: onPressProp, disabled, ref, ...props }: Omit<import("react-native").PressableProps & React.RefAttributes<View>, "ref"> & {
13
+ asChild?: boolean;
14
+ } & {
15
+ onKeyDown?: (ev: React.KeyboardEvent) => void;
16
+ onKeyUp?: (ev: React.KeyboardEvent) => void;
17
+ } & React.RefAttributes<import("@rn-primitives/dropdown-menu").TriggerRef>): React.JSX.Element;
18
+ displayName: string;
19
+ };
20
+ declare const DropdownMenuContent: React.ForwardRefExoticComponent<Omit<Omit<import("react-native").PressableProps & React.RefAttributes<View>, "ref"> & {
21
+ asChild?: boolean;
22
+ } & {
23
+ onKeyDown?: (ev: React.KeyboardEvent) => void;
24
+ onKeyUp?: (ev: React.KeyboardEvent) => void;
25
+ } & import("@rn-primitives/types").PositionedContentProps & React.RefAttributes<View>, "ref"> & React.RefAttributes<View>>;
26
+ declare const DropdownMenuItem: React.ForwardRefExoticComponent<Omit<Omit<import("react-native").PressableProps & React.RefAttributes<View>, "ref"> & {
27
+ asChild?: boolean;
28
+ } & {
29
+ onKeyDown?: (ev: React.KeyboardEvent) => void;
30
+ onKeyUp?: (ev: React.KeyboardEvent) => void;
31
+ } & {
32
+ textValue?: string;
33
+ closeOnPress?: boolean;
34
+ } & React.RefAttributes<View>, "ref"> & React.RefAttributes<View>>;
35
+ declare const DropdownMenuCheckboxItem: React.ForwardRefExoticComponent<Omit<Omit<import("react-native").PressableProps & React.RefAttributes<View>, "ref"> & {
36
+ asChild?: boolean;
37
+ } & {
38
+ onKeyDown?: (ev: React.KeyboardEvent) => void;
39
+ onKeyUp?: (ev: React.KeyboardEvent) => void;
40
+ } & {
41
+ checked: boolean;
42
+ onCheckedChange: (checked: boolean) => void;
43
+ closeOnPress?: boolean;
44
+ textValue?: string;
45
+ } & React.RefAttributes<View>, "ref"> & React.RefAttributes<View>>;
46
+ declare const DropdownMenuLabel: React.ForwardRefExoticComponent<Omit<import("react-native").TextProps & {
47
+ asChild?: boolean;
48
+ } & React.RefAttributes<import("react-native").Text>, "ref"> & React.RefAttributes<import("react-native").Text>>;
49
+ declare const DropdownMenuSeparator: React.ForwardRefExoticComponent<Omit<import("react-native").ViewProps & {
50
+ asChild?: boolean;
51
+ } & {
52
+ decorative?: boolean;
53
+ } & React.RefAttributes<View>, "ref"> & React.RefAttributes<View>>;
54
+ export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuLabel, DropdownMenuSeparator, };
55
+ //# sourceMappingURL=dropdown-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu.d.ts","sourceRoot":"","sources":["../../src/components/dropdown-menu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAY,IAAI,EAAkB,MAAM,cAAc,CAAC;AAE9D,QAAA,MAAM,YAAY;;;;;;;CAA6B,CAAC;AAChD,QAAA,MAAM,mBAAmB;;;;;;;;CAAgC,CAAC;AAE1D,QAAA,MAAM,mBAAmB;;;;;0HAkCvB,CAAC;AAGH,QAAA,MAAM,gBAAgB;;;;;;;;kEAcpB,CAAC;AAGH,QAAA,MAAM,wBAAwB;;;;;;;;;;kEAsB5B,CAAC;AAGH,QAAA,MAAM,iBAAiB;;gHASrB,CAAC;AAGH,QAAA,MAAM,qBAAqB;;;;kEASzB,CAAC;AAGH,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,GACtB,CAAC"}
@@ -0,0 +1,38 @@
1
+ import * as DropdownMenuPrimitive from "@rn-primitives/dropdown-menu";
2
+ import { cn } from "../utils/cn";
3
+ import React from "react";
4
+ import { Platform, View } from "react-native";
5
+ const DropdownMenu = DropdownMenuPrimitive.Root;
6
+ const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
7
+ const DropdownMenuContent = React.forwardRef(({ className, sideOffset = 4, ...props }, ref) => {
8
+ const content = (<DropdownMenuPrimitive.Content ref={ref} sideOffset={sideOffset} className={cn("z-50 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover p-1", className)} style={Platform.OS === "web"
9
+ ? { boxShadow: "0px 4px 12px rgba(0, 0, 0, 0.15)" }
10
+ : undefined} {...props}/>);
11
+ if (Platform.OS === "web") {
12
+ // On web, Portal expects exactly one child — skip the Overlay (Radix
13
+ // handles dismiss-on-click-outside internally).
14
+ return <DropdownMenuPrimitive.Portal>{content}</DropdownMenuPrimitive.Portal>;
15
+ }
16
+ return (<DropdownMenuPrimitive.Portal>
17
+ <DropdownMenuPrimitive.Overlay className="animate-in fade-in-0"/>
18
+ {content}
19
+ </DropdownMenuPrimitive.Portal>);
20
+ });
21
+ DropdownMenuContent.displayName = "DropdownMenuContent";
22
+ const DropdownMenuItem = React.forwardRef(({ className, ...props }, ref) => (<DropdownMenuPrimitive.Item ref={ref} className={cn("relative flex flex-row items-center rounded-sm px-2 py-1.5 web:cursor-pointer web:outline-none active:bg-accent", "web:hover:bg-accent web:focus:bg-accent", props.disabled && "opacity-50 web:pointer-events-none", className)} {...props}/>));
23
+ DropdownMenuItem.displayName = "DropdownMenuItem";
24
+ const DropdownMenuCheckboxItem = React.forwardRef(({ className, children, checked, ...props }, ref) => (<DropdownMenuPrimitive.CheckboxItem ref={ref} className={cn("relative flex flex-row items-center rounded-sm py-1.5 pl-8 pr-2 web:cursor-pointer web:outline-none active:bg-accent", "web:hover:bg-accent web:focus:bg-accent", props.disabled && "opacity-50 web:pointer-events-none", className)} checked={checked} {...props}>
25
+ <View className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
26
+ <DropdownMenuPrimitive.ItemIndicator>
27
+ {/* Checkmark indicator */}
28
+ </DropdownMenuPrimitive.ItemIndicator>
29
+ </View>
30
+ {children}
31
+ </DropdownMenuPrimitive.CheckboxItem>));
32
+ DropdownMenuCheckboxItem.displayName = "DropdownMenuCheckboxItem";
33
+ const DropdownMenuLabel = React.forwardRef(({ className, ...props }, ref) => (<DropdownMenuPrimitive.Label ref={ref} className={cn("px-2 py-1.5 text-sm font-semibold text-foreground", className)} {...props}/>));
34
+ DropdownMenuLabel.displayName = "DropdownMenuLabel";
35
+ const DropdownMenuSeparator = React.forwardRef(({ className, ...props }, ref) => (<DropdownMenuPrimitive.Separator ref={ref} className={cn("-mx-1 my-1 h-px bg-border", className)} {...props}/>));
36
+ DropdownMenuSeparator.displayName = "DropdownMenuSeparator";
37
+ export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuLabel, DropdownMenuSeparator, };
38
+ //# sourceMappingURL=dropdown-menu.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu.jsx","sourceRoot":"","sources":["../../src/components/dropdown-menu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import React from "react";
2
+ export interface EntropyBootSplashProps {
3
+ /** Called once the intro + hold + fade-out finishes. */
4
+ onFinish?: () => void;
5
+ /** Mark height in px. */
6
+ size?: number;
7
+ /** "chroma" (default) shows the faint cyan/red fringe; "mono" is plain. */
8
+ variant?: "mono" | "chroma";
9
+ /** Override background; defaults to themed near-black / white. */
10
+ background?: string;
11
+ /** ms to hold fully-drifted before fading out. Default 550. */
12
+ holdMs?: number;
13
+ }
14
+ /**
15
+ * Company boot splash — the website's logo motion as a launch animation: the
16
+ * mark fades in flat, the three echoes drift apart + breathe (driven by
17
+ * EntropyMarkAnimated's `active` state — the same motion source as the
18
+ * website hover), hold, then the whole thing fades out and calls `onFinish`.
19
+ * Subtle corporate recognition at launch; each product keeps its own
20
+ * icon/splash for the OS-level launch screen — this is an in-app overlay.
21
+ */
22
+ export declare function EntropyBootSplash({ onFinish, size, background, holdMs, }: EntropyBootSplashProps): React.JSX.Element | null;
23
+ export default EntropyBootSplash;
24
+ //# sourceMappingURL=entropy-boot-splash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy-boot-splash.d.ts","sourceRoot":"","sources":["../../src/components/entropy-boot-splash.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAYjD,MAAM,WAAW,sBAAsB;IACrC,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,IAAS,EAGT,UAAU,EACV,MAAY,GACb,EAAE,sBAAsB,4BAuExB;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,83 @@
1
+ import React, { useEffect, useRef } from "react";
2
+ import { Animated, Easing, Platform, StyleSheet, View } from "react-native";
3
+ import { useColorScheme } from "nativewind";
4
+ import Svg, { Path } from "react-native-svg";
5
+ import { ENTROPY_MARK_ASPECT, ENTROPY_MARK_PATH, ENTROPY_MARK_VIEWBOX } from "./entropy-mark";
6
+ import { usePalette } from "../utils/palette";
7
+ import { DISABLE_BRANDING } from "../flags";
8
+ // Web has no native animated module; requesting the native driver there just
9
+ // warns and falls back to JS. Gate it so the console stays clean.
10
+ const USE_NATIVE_DRIVER = Platform.OS !== "web";
11
+ /**
12
+ * Company boot splash — the website's logo motion as a launch animation: the
13
+ * mark fades in flat, the three echoes drift apart + breathe (driven by
14
+ * EntropyMarkAnimated's `active` state — the same motion source as the
15
+ * website hover), hold, then the whole thing fades out and calls `onFinish`.
16
+ * Subtle corporate recognition at launch; each product keeps its own
17
+ * icon/splash for the OS-level launch screen — this is an in-app overlay.
18
+ */
19
+ export function EntropyBootSplash({ onFinish, size = 96,
20
+ // `variant` is retained on the props interface for API compatibility but the
21
+ // current flat-mark splash renders the same regardless, so it isn't read.
22
+ background, holdMs = 550, }) {
23
+ const { colorScheme } = useColorScheme();
24
+ const isDark = colorScheme === "dark";
25
+ const { palette } = usePalette();
26
+ // Match the app's themed background exactly (bg-background) so there's no
27
+ // color seam when the splash dismisses into the screen behind it.
28
+ const bg = background ?? palette.background;
29
+ const fade = useRef(new Animated.Value(0)).current;
30
+ useEffect(() => {
31
+ // Self-host branding opt-out: skip the splash entirely, let the app proceed.
32
+ if (DISABLE_BRANDING) {
33
+ onFinish?.();
34
+ return;
35
+ }
36
+ const anim = Animated.sequence([
37
+ Animated.timing(fade, {
38
+ toValue: 1,
39
+ duration: 320,
40
+ easing: Easing.out(Easing.quad),
41
+ useNativeDriver: USE_NATIVE_DRIVER,
42
+ }),
43
+ // mark's own open-ease (~450ms) + breathing run during the hold
44
+ Animated.delay(900 + holdMs),
45
+ Animated.timing(fade, {
46
+ toValue: 0,
47
+ duration: 420,
48
+ easing: Easing.in(Easing.quad),
49
+ useNativeDriver: USE_NATIVE_DRIVER,
50
+ }),
51
+ ]);
52
+ anim.start(({ finished }) => {
53
+ if (finished) {
54
+ onFinish?.();
55
+ }
56
+ });
57
+ return () => anim.stop();
58
+ // run once on mount
59
+ // eslint-disable-next-line react-hooks/exhaustive-deps
60
+ }, []);
61
+ if (DISABLE_BRANDING) {
62
+ return null;
63
+ }
64
+ return (<View style={[
65
+ StyleSheet.absoluteFill,
66
+ {
67
+ backgroundColor: bg,
68
+ alignItems: "center",
69
+ justifyContent: "center",
70
+ pointerEvents: "none",
71
+ },
72
+ ]}>
73
+ {/* Static flat source mark — the topmost layer only, monochromatic to the
74
+ theme (black in light, white in dark). No echoes, no motion. */}
75
+ <Animated.View style={{ opacity: fade }}>
76
+ <Svg width={Math.round(size * ENTROPY_MARK_ASPECT)} height={size} viewBox={ENTROPY_MARK_VIEWBOX}>
77
+ <Path d={ENTROPY_MARK_PATH} fillRule="evenodd" fill={isDark ? "#ffffff" : "#000000"}/>
78
+ </Svg>
79
+ </Animated.View>
80
+ </View>);
81
+ }
82
+ export default EntropyBootSplash;
83
+ //# sourceMappingURL=entropy-boot-splash.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy-boot-splash.jsx","sourceRoot":"","sources":["../../src/components/entropy-boot-splash.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ export interface EntropyMarkAnimatedProps {
3
+ /** Rendered height in px. Width follows the ~1.63:1 aspect. */
4
+ size?: number;
5
+ /** "mono" = grey echoes only; "chroma" = adds the faint cyan/red fringe. */
6
+ variant?: "mono" | "chroma";
7
+ /** Override the theme; defaults to the active color scheme. */
8
+ scheme?: "light" | "dark";
9
+ /** Force the drifted-apart state (e.g. boot splash drives this). */
10
+ active?: boolean;
11
+ /** Drift apart while touched (default true). */
12
+ animateOnPress?: boolean;
13
+ }
14
+ /**
15
+ * Touch-interactive company `>_` mark — flat at rest, echo-cascade + parallax
16
+ * while pressed, clean collapse on release. The RN twin of the website logo.
17
+ */
18
+ export declare function EntropyMarkAnimated({ size, variant, scheme, active, animateOnPress, }: EntropyMarkAnimatedProps): React.JSX.Element;
19
+ export default EntropyMarkAnimated;
20
+ //# sourceMappingURL=entropy-mark-animated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy-mark-animated.d.ts","sourceRoot":"","sources":["../../src/components/entropy-mark-animated.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AA8DzC,MAAM,WAAW,wBAAwB;IACvC,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA6DD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,IAAS,EACT,OAAgB,EAChB,MAAM,EACN,MAAc,EACd,cAAqB,GACtB,EAAE,wBAAwB,qBAiH1B;AAED,eAAe,mBAAmB,CAAC"}