@adminide-stack/yantra-mobile 12.0.69-alpha.8 → 12.0.69

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 (522) hide show
  1. package/lib/components/GatewayConnector/GatewayConnector.js +2 -2
  2. package/lib/components/GatewayConnector/GatewayConnector.js.map +1 -1
  3. package/lib/components/KeyboardComposerDock.js +8 -1
  4. package/lib/components/KeyboardComposerDock.js.map +1 -1
  5. package/lib/components/NavigationHeader/NavigationHeader.js +2 -2
  6. package/lib/components/NavigationHeader/NavigationHeader.js.map +1 -1
  7. package/lib/config/env-config.js +4 -0
  8. package/lib/config/env-config.js.map +1 -1
  9. package/lib/contexts/ChatLiveStreamContext.js +4 -1
  10. package/lib/contexts/ChatLiveStreamContext.js.map +1 -1
  11. package/lib/features/agent-chat/NativeAgentChat.js +2 -0
  12. package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
  13. package/lib/features/apps/AppsCatalog.js +2 -2
  14. package/lib/features/apps/AppsCatalog.js.map +1 -1
  15. package/lib/features/audio-input/MicErrorBoundary.js +2 -2
  16. package/lib/features/audio-input/MicErrorBoundary.js.map +1 -1
  17. package/lib/features/canvas/AudioEditorExperience.js +308 -0
  18. package/lib/features/canvas/AudioEditorExperience.js.map +1 -0
  19. package/lib/features/canvas/CanvasAgentChatPane.js +310 -0
  20. package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -0
  21. package/lib/features/canvas/CanvasBoardsGrid.js +414 -0
  22. package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -0
  23. package/lib/features/canvas/CanvasChatResultCard.js +113 -0
  24. package/lib/features/canvas/CanvasChatResultCard.js.map +1 -0
  25. package/lib/features/canvas/CanvasEditToolsPanel.js +179 -0
  26. package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -0
  27. package/lib/features/canvas/CanvasExperience.js +859 -0
  28. package/lib/features/canvas/CanvasExperience.js.map +1 -0
  29. package/lib/features/canvas/CanvasGeneratePanel.js +514 -0
  30. package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -0
  31. package/lib/features/canvas/CanvasLibrarySheet.js +355 -0
  32. package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -0
  33. package/lib/features/canvas/CanvasLooksPanel.js +184 -0
  34. package/lib/features/canvas/CanvasLooksPanel.js.map +1 -0
  35. package/lib/features/canvas/CanvasTasksPanel.js +138 -0
  36. package/lib/features/canvas/CanvasTasksPanel.js.map +1 -0
  37. package/lib/features/canvas/CanvasTemplatesPanel.js +226 -0
  38. package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -0
  39. package/lib/features/canvas/CanvasToolDock.js +423 -0
  40. package/lib/features/canvas/CanvasToolDock.js.map +1 -0
  41. package/lib/features/canvas/FrameExtractorExperience.js +242 -0
  42. package/lib/features/canvas/FrameExtractorExperience.js.map +1 -0
  43. package/lib/features/canvas/ImageEditorExperience.js +491 -0
  44. package/lib/features/canvas/ImageEditorExperience.js.map +1 -0
  45. package/lib/features/canvas/InfluencerStudioExperience.js +288 -0
  46. package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -0
  47. package/lib/features/canvas/MoodboardExperience.js +205 -0
  48. package/lib/features/canvas/MoodboardExperience.js.map +1 -0
  49. package/lib/features/canvas/NativeCanvasViewer.js +929 -0
  50. package/lib/features/canvas/NativeCanvasViewer.js.map +1 -0
  51. package/lib/features/canvas/PromoContextFields.js +150 -0
  52. package/lib/features/canvas/PromoContextFields.js.map +1 -0
  53. package/lib/features/canvas/SetStudioExperience.js +323 -0
  54. package/lib/features/canvas/SetStudioExperience.js.map +1 -0
  55. package/lib/features/canvas/VideoClipsExperience.js +175 -0
  56. package/lib/features/canvas/VideoClipsExperience.js.map +1 -0
  57. package/lib/features/canvas/VideoEditExperience.js +824 -0
  58. package/lib/features/canvas/VideoEditExperience.js.map +1 -0
  59. package/lib/features/canvas/VideoEditorExperience.js +3050 -0
  60. package/lib/features/canvas/VideoEditorExperience.js.map +1 -0
  61. package/lib/features/canvas/VideoGeneratorExperience.js +415 -0
  62. package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -0
  63. package/lib/features/canvas/aiEdit.js +53 -0
  64. package/lib/features/canvas/aiEdit.js.map +1 -0
  65. package/lib/features/canvas/canvasAgentChat.js +76 -0
  66. package/lib/features/canvas/canvasAgentChat.js.map +1 -0
  67. package/lib/features/canvas/canvasBoardsCatalog.js +59 -0
  68. package/lib/features/canvas/canvasBoardsCatalog.js.map +1 -0
  69. package/lib/features/canvas/canvasBoardsSnapshot.js +14 -1
  70. package/lib/features/canvas/canvasBoardsSnapshot.js.map +1 -1
  71. package/lib/features/canvas/canvasChatDisplay.js +38 -0
  72. package/lib/features/canvas/canvasChatDisplay.js.map +1 -0
  73. package/lib/features/canvas/canvasChatTemplates.js +219 -0
  74. package/lib/features/canvas/canvasChatTemplates.js.map +1 -0
  75. package/lib/features/canvas/canvasCore.js +138 -1
  76. package/lib/features/canvas/canvasCore.js.map +1 -1
  77. package/lib/features/canvas/canvasEditOps.js +224 -0
  78. package/lib/features/canvas/canvasEditOps.js.map +1 -0
  79. package/lib/features/canvas/canvasTasks.js +187 -0
  80. package/lib/features/canvas/canvasTasks.js.map +1 -0
  81. package/lib/features/canvas/designPromptTemplates.js +3084 -0
  82. package/lib/features/canvas/designPromptTemplates.js.map +1 -0
  83. package/lib/features/canvas/editTools.js +54 -0
  84. package/lib/features/canvas/editTools.js.map +1 -0
  85. package/lib/features/canvas/extendVideo.js +5 -0
  86. package/lib/features/canvas/extendVideo.js.map +1 -0
  87. package/lib/features/canvas/frameExtract.js +33 -0
  88. package/lib/features/canvas/frameExtract.js.map +1 -0
  89. package/lib/features/canvas/generationModels.js +201 -0
  90. package/lib/features/canvas/generationModels.js.map +1 -0
  91. package/lib/features/canvas/influencer/influencerPipeline.js +170 -0
  92. package/lib/features/canvas/influencer/influencerPipeline.js.map +1 -0
  93. package/lib/features/canvas/influencer/productReel.js +72 -0
  94. package/lib/features/canvas/influencer/productReel.js.map +1 -0
  95. package/lib/features/canvas/influencer/reelPlan.js +159 -0
  96. package/lib/features/canvas/influencer/reelPlan.js.map +1 -0
  97. package/lib/features/canvas/moodboardCore.js +13 -0
  98. package/lib/features/canvas/moodboardCore.js.map +1 -0
  99. package/lib/features/canvas/promoProjectImport.js +99 -0
  100. package/lib/features/canvas/promoProjectImport.js.map +1 -0
  101. package/lib/features/canvas/promoVideo.js +312 -0
  102. package/lib/features/canvas/promoVideo.js.map +1 -0
  103. package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -0
  104. package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -0
  105. package/lib/features/canvas/sessionIdentity.js +28 -1
  106. package/lib/features/canvas/sessionIdentity.js.map +1 -1
  107. package/lib/features/canvas/set/SetViewportWebView.js +133 -0
  108. package/lib/features/canvas/set/SetViewportWebView.js.map +1 -0
  109. package/lib/features/canvas/set/cameraPath.js +194 -0
  110. package/lib/features/canvas/set/cameraPath.js.map +1 -0
  111. package/lib/features/canvas/set/setProject.js +24 -0
  112. package/lib/features/canvas/set/setProject.js.map +1 -0
  113. package/lib/features/canvas/storageLibrary.js +184 -0
  114. package/lib/features/canvas/storageLibrary.js.map +1 -0
  115. package/lib/features/canvas/studioCatalog.js +129 -0
  116. package/lib/features/canvas/studioCatalog.js.map +1 -0
  117. package/lib/features/canvas/studioLooks.js +189 -0
  118. package/lib/features/canvas/studioLooks.js.map +1 -0
  119. package/lib/features/canvas/surfaceIndex.js +63 -1
  120. package/lib/features/canvas/surfaceIndex.js.map +1 -1
  121. package/lib/features/canvas/templateImport/invideoNative.js +221 -0
  122. package/lib/features/canvas/templateImport/invideoNative.js.map +1 -0
  123. package/lib/features/canvas/templateImport/loadTemplate.js +43 -0
  124. package/lib/features/canvas/templateImport/loadTemplate.js.map +1 -0
  125. package/lib/features/canvas/templateImport/renderConfig.js +93 -0
  126. package/lib/features/canvas/templateImport/renderConfig.js.map +1 -0
  127. package/lib/features/canvas/useStudioCatalogTemplates.js +134 -0
  128. package/lib/features/canvas/useStudioCatalogTemplates.js.map +1 -0
  129. package/lib/features/canvas/video3d.js +109 -0
  130. package/lib/features/canvas/video3d.js.map +1 -0
  131. package/lib/features/canvas/videoClips.js +42 -0
  132. package/lib/features/canvas/videoClips.js.map +1 -0
  133. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +120 -0
  134. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -0
  135. package/lib/features/canvas/videoEditor/agent/agentLoop.js +69 -0
  136. package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -0
  137. package/lib/features/canvas/videoEditor/agent/brainClient.js +45 -0
  138. package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -0
  139. package/lib/features/canvas/videoEditor/agent/cutTools.js +129 -0
  140. package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -0
  141. package/lib/features/canvas/videoEditor/editorModel.js +346 -0
  142. package/lib/features/canvas/videoEditor/editorModel.js.map +1 -0
  143. package/lib/features/canvas/videoEditor/exportRenderer.js +214 -0
  144. package/lib/features/canvas/videoEditor/exportRenderer.js.map +1 -0
  145. package/lib/features/canvas/videoEditor/filters.js +41 -0
  146. package/lib/features/canvas/videoEditor/filters.js.map +1 -0
  147. package/lib/features/canvas/videoEditor/mediaActions.js +57 -0
  148. package/lib/features/canvas/videoEditor/mediaActions.js.map +1 -0
  149. package/lib/features/canvas/videoEditor/remoteMediaClient.js +129 -0
  150. package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -0
  151. package/lib/features/canvas/videoEditor/solidColorPng.js +115 -0
  152. package/lib/features/canvas/videoEditor/solidColorPng.js.map +1 -0
  153. package/lib/features/canvas/videoEditor/videoEditOps.js +191 -0
  154. package/lib/features/canvas/videoEditor/videoEditOps.js.map +1 -0
  155. package/lib/features/canvas/videoEditor/videoProjectsStore.js +82 -0
  156. package/lib/features/canvas/videoEditor/videoProjectsStore.js.map +1 -0
  157. package/lib/features/canvas/videoRenderer.js +8 -0
  158. package/lib/features/canvas/videoRenderer.js.map +1 -0
  159. package/lib/features/canvas/withRemoteSafeArea.js +2 -2
  160. package/lib/features/canvas/withRemoteSafeArea.js.map +1 -1
  161. package/lib/features/characters/characterStudioProps.js +14 -0
  162. package/lib/features/characters/characterStudioProps.js.map +1 -0
  163. package/lib/features/chat/ChatCodeBlock.js +7 -3
  164. package/lib/features/chat/ChatCodeBlock.js.map +1 -1
  165. package/lib/features/chat/ChatTranscript.js +7 -3
  166. package/lib/features/chat/ChatTranscript.js.map +1 -1
  167. package/lib/features/chat/ChatWidgetCard.js +13 -0
  168. package/lib/features/chat/ChatWidgetCard.js.map +1 -0
  169. package/lib/features/chat/ConnectorConnectCard.js +164 -0
  170. package/lib/features/chat/ConnectorConnectCard.js.map +1 -0
  171. package/lib/features/chat/ConnectorConnectPrompt.js +254 -0
  172. package/lib/features/chat/ConnectorConnectPrompt.js.map +1 -0
  173. package/lib/features/chat/MessageActionBar.js.map +1 -1
  174. package/lib/features/chat/QueuedFollowUps.js +71 -0
  175. package/lib/features/chat/QueuedFollowUps.js.map +1 -0
  176. package/lib/features/chat/chatWidgets.js +37 -0
  177. package/lib/features/chat/chatWidgets.js.map +1 -0
  178. package/lib/features/chat/connectorConnect.js +179 -0
  179. package/lib/features/chat/connectorConnect.js.map +1 -0
  180. package/lib/features/chat/connectorConnectHandbacks.js +55 -0
  181. package/lib/features/chat/connectorConnectHandbacks.js.map +1 -0
  182. package/lib/features/design/DesignEditorExperience.js +643 -0
  183. package/lib/features/design/DesignEditorExperience.js.map +1 -0
  184. package/lib/features/design/DesignExperience.js +444 -0
  185. package/lib/features/design/DesignExperience.js.map +1 -0
  186. package/lib/features/design/designCore.js +298 -0
  187. package/lib/features/design/designCore.js.map +1 -0
  188. package/lib/features/design/designIndex.js +150 -0
  189. package/lib/features/design/designIndex.js.map +1 -0
  190. package/lib/features/design/exportDesign.js +133 -0
  191. package/lib/features/design/exportDesign.js.map +1 -0
  192. package/lib/features/job-search/ApplicationsPanel.js +907 -0
  193. package/lib/features/job-search/ApplicationsPanel.js.map +1 -0
  194. package/lib/features/job-search/ContactsPanel.js +627 -0
  195. package/lib/features/job-search/ContactsPanel.js.map +1 -0
  196. package/lib/features/job-search/InsightsPanel.js +299 -0
  197. package/lib/features/job-search/InsightsPanel.js.map +1 -0
  198. package/lib/features/job-search/InterviewPanel.js +637 -0
  199. package/lib/features/job-search/InterviewPanel.js.map +1 -0
  200. package/lib/features/job-search/JdPastePrompt.js +130 -0
  201. package/lib/features/job-search/JdPastePrompt.js.map +1 -0
  202. package/lib/features/job-search/JobCard.js +199 -0
  203. package/lib/features/job-search/JobCard.js.map +1 -0
  204. package/lib/features/job-search/JobDetailSheet.js +255 -0
  205. package/lib/features/job-search/JobDetailSheet.js.map +1 -0
  206. package/lib/features/job-search/JobSearchAgentChatPane.js +377 -0
  207. package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -0
  208. package/lib/features/job-search/JobSearchExperience.js +1324 -0
  209. package/lib/features/job-search/JobSearchExperience.js.map +1 -0
  210. package/lib/features/job-search/JobSearchLocationField.js +231 -0
  211. package/lib/features/job-search/JobSearchLocationField.js.map +1 -0
  212. package/lib/features/job-search/ProfilePanel.js +679 -0
  213. package/lib/features/job-search/ProfilePanel.js.map +1 -0
  214. package/lib/features/job-search/RepliesPanel.js +344 -0
  215. package/lib/features/job-search/RepliesPanel.js.map +1 -0
  216. package/lib/features/job-search/SavedPanel.js +297 -0
  217. package/lib/features/job-search/SavedPanel.js.map +1 -0
  218. package/lib/features/job-search/chat/widgetContent.js +29 -0
  219. package/lib/features/job-search/chat/widgetContent.js.map +1 -0
  220. package/lib/features/job-search/cvText.js +91 -0
  221. package/lib/features/job-search/cvText.js.map +1 -0
  222. package/lib/features/job-search/jobAgentSwipe.js +7 -0
  223. package/lib/features/job-search/jobAgentSwipe.js.map +1 -0
  224. package/lib/features/job-search/jobSearchClient.js +184 -0
  225. package/lib/features/job-search/jobSearchClient.js.map +1 -0
  226. package/lib/features/job-search/jobSearchExec.js +14 -0
  227. package/lib/features/job-search/jobSearchExec.js.map +1 -0
  228. package/lib/features/job-search/jobSearchRuntime.js +50 -0
  229. package/lib/features/job-search/jobSearchRuntime.js.map +1 -0
  230. package/lib/features/job-search/jobSearchTheme.js +44 -0
  231. package/lib/features/job-search/jobSearchTheme.js.map +1 -0
  232. package/lib/features/job-search/savedJobs.js +85 -0
  233. package/lib/features/job-search/savedJobs.js.map +1 -0
  234. package/lib/features/job-search/searchHistory.js +117 -0
  235. package/lib/features/job-search/searchHistory.js.map +1 -0
  236. package/lib/features/job-search/types.js +36 -0
  237. package/lib/features/job-search/types.js.map +1 -0
  238. package/lib/features/job-search/useJobSearchSession.js +558 -0
  239. package/lib/features/job-search/useJobSearchSession.js.map +1 -0
  240. package/lib/features/messaging/ChatComponents.js +529 -0
  241. package/lib/features/messaging/ChatComponents.js.map +1 -0
  242. package/lib/features/messaging/ChatInviteDeepLink.js +116 -0
  243. package/lib/features/messaging/ChatInviteDeepLink.js.map +1 -0
  244. package/lib/features/messaging/ContactsScreen.js +288 -0
  245. package/lib/features/messaging/ContactsScreen.js.map +1 -0
  246. package/lib/features/messaging/ConversationListScreen.js +147 -0
  247. package/lib/features/messaging/ConversationListScreen.js.map +1 -0
  248. package/lib/features/messaging/MessageActions.js +290 -0
  249. package/lib/features/messaging/MessageActions.js.map +1 -0
  250. package/lib/features/messaging/NativeChatExperience.js +189 -0
  251. package/lib/features/messaging/NativeChatExperience.js.map +1 -0
  252. package/lib/features/messaging/RegistrationScreen.js +11 -14
  253. package/lib/features/messaging/RegistrationScreen.js.map +1 -1
  254. package/lib/features/messaging/ThreadScreen.js +215 -0
  255. package/lib/features/messaging/ThreadScreen.js.map +1 -0
  256. package/lib/features/messaging/chatInviteLink.js +52 -0
  257. package/lib/features/messaging/chatInviteLink.js.map +1 -0
  258. package/lib/features/messaging/chatModel.js +278 -0
  259. package/lib/features/messaging/chatModel.js.map +1 -0
  260. package/lib/features/messaging/chatOperations.js +106 -1
  261. package/lib/features/messaging/chatOperations.js.map +1 -1
  262. package/lib/features/messaging/emojiCatalog.js +60 -0
  263. package/lib/features/messaging/emojiCatalog.js.map +1 -0
  264. package/lib/features/messaging/emojiKeywords.js +1592 -0
  265. package/lib/features/messaging/emojiKeywords.js.map +1 -0
  266. package/lib/features/messaging/nativeChatChannelQuery.js +27 -0
  267. package/lib/features/messaging/nativeChatChannelQuery.js.map +1 -0
  268. package/lib/features/messaging/phoneNumbers.js +52 -1
  269. package/lib/features/messaging/phoneNumbers.js.map +1 -1
  270. package/lib/features/messaging/sha256.js +68 -0
  271. package/lib/features/messaging/sha256.js.map +1 -0
  272. package/lib/features/messaging/useChatData.js +421 -0
  273. package/lib/features/messaging/useChatData.js.map +1 -0
  274. package/lib/features/messaging/useContactMatches.js +191 -0
  275. package/lib/features/messaging/useContactMatches.js.map +1 -0
  276. package/lib/features/messaging/usePhoneVerification.js +12 -12
  277. package/lib/features/messaging/usePhoneVerification.js.map +1 -1
  278. package/lib/features/messaging/yantraChatOrg.js +8 -3
  279. package/lib/features/messaging/yantraChatOrg.js.map +1 -1
  280. package/lib/features/resume/AnnotateModal.js +100 -0
  281. package/lib/features/resume/AnnotateModal.js.map +1 -0
  282. package/lib/features/resume/AnnotationBar.js +69 -0
  283. package/lib/features/resume/AnnotationBar.js.map +1 -0
  284. package/lib/features/resume/ExportSheet.js +105 -0
  285. package/lib/features/resume/ExportSheet.js.map +1 -0
  286. package/lib/features/resume/ResumeAgentChatPane.js +95 -0
  287. package/lib/features/resume/ResumeAgentChatPane.js.map +1 -0
  288. package/lib/features/resume/ResumeEditor.js +676 -0
  289. package/lib/features/resume/ResumeEditor.js.map +1 -0
  290. package/lib/features/resume/ResumeExperience.js +235 -0
  291. package/lib/features/resume/ResumeExperience.js.map +1 -0
  292. package/lib/features/resume/ResumeListPanel.js +262 -0
  293. package/lib/features/resume/ResumeListPanel.js.map +1 -0
  294. package/lib/features/resume/ResumeToolbar.js +236 -0
  295. package/lib/features/resume/ResumeToolbar.js.map +1 -0
  296. package/lib/features/resume/annotations.js +17 -0
  297. package/lib/features/resume/annotations.js.map +1 -0
  298. package/lib/features/resume/documentCss.js +52 -0
  299. package/lib/features/resume/documentCss.js.map +1 -0
  300. package/lib/features/resume/draft.js +89 -0
  301. package/lib/features/resume/draft.js.map +1 -0
  302. package/lib/features/resume/exportResume.js +43 -0
  303. package/lib/features/resume/exportResume.js.map +1 -0
  304. package/lib/features/resume/pickResumePhoto.js +22 -0
  305. package/lib/features/resume/pickResumePhoto.js.map +1 -0
  306. package/lib/features/resume/renderResume.js +121 -0
  307. package/lib/features/resume/renderResume.js.map +1 -0
  308. package/lib/features/resume/resumeClient.js +69 -0
  309. package/lib/features/resume/resumeClient.js.map +1 -0
  310. package/lib/features/resume/resumeExec.js +14 -0
  311. package/lib/features/resume/resumeExec.js.map +1 -0
  312. package/lib/features/resume/resumeIndex.js +244 -0
  313. package/lib/features/resume/resumeIndex.js.map +1 -0
  314. package/lib/features/resume/resumeRuntime.js +50 -0
  315. package/lib/features/resume/resumeRuntime.js.map +1 -0
  316. package/lib/features/resume/resumeTheme.js +34 -0
  317. package/lib/features/resume/resumeTheme.js.map +1 -0
  318. package/lib/features/resume/resumeToolbox.js +49 -0
  319. package/lib/features/resume/resumeToolbox.js.map +1 -0
  320. package/lib/features/resume/templates.js +90 -0
  321. package/lib/features/resume/templates.js.map +1 -0
  322. package/lib/features/resume/types.js +10 -0
  323. package/lib/features/resume/types.js.map +1 -0
  324. package/lib/features/resume/useResumeSession.js +183 -0
  325. package/lib/features/resume/useResumeSession.js.map +1 -0
  326. package/lib/features/shopping/DealsPanel.js +254 -0
  327. package/lib/features/shopping/DealsPanel.js.map +1 -0
  328. package/lib/features/shopping/HistoryPanel.js +147 -0
  329. package/lib/features/shopping/HistoryPanel.js.map +1 -0
  330. package/lib/features/shopping/OrdersPanel.js +157 -0
  331. package/lib/features/shopping/OrdersPanel.js.map +1 -0
  332. package/lib/features/shopping/ProductCard.js +326 -0
  333. package/lib/features/shopping/ProductCard.js.map +1 -0
  334. package/lib/features/shopping/ProductDetailSheet.js +313 -0
  335. package/lib/features/shopping/ProductDetailSheet.js.map +1 -0
  336. package/lib/features/shopping/ProductFilterBar.js +153 -0
  337. package/lib/features/shopping/ProductFilterBar.js.map +1 -0
  338. package/lib/features/shopping/ProductPhoto.js +27 -0
  339. package/lib/features/shopping/ProductPhoto.js.map +1 -0
  340. package/lib/features/shopping/SavedPanel.js +139 -0
  341. package/lib/features/shopping/SavedPanel.js.map +1 -0
  342. package/lib/features/shopping/ShoppingAgentChatPane.js +436 -0
  343. package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -0
  344. package/lib/features/shopping/ShoppingExperience.js +888 -0
  345. package/lib/features/shopping/ShoppingExperience.js.map +1 -0
  346. package/lib/features/shopping/TrendingSections.js +199 -0
  347. package/lib/features/shopping/TrendingSections.js.map +1 -0
  348. package/lib/features/shopping/WatchlistPanel.js +148 -0
  349. package/lib/features/shopping/WatchlistPanel.js.map +1 -0
  350. package/lib/features/shopping/catalog.js +238 -0
  351. package/lib/features/shopping/catalog.js.map +1 -0
  352. package/lib/features/shopping/chat/ShoppingChatResultCard.js +175 -0
  353. package/lib/features/shopping/chat/ShoppingChatResultCard.js.map +1 -0
  354. package/lib/features/shopping/chat/streamAssistantReply.js +34 -0
  355. package/lib/features/shopping/chat/streamAssistantReply.js.map +1 -0
  356. package/lib/features/shopping/chat/widgetContent.js +233 -0
  357. package/lib/features/shopping/chat/widgetContent.js.map +1 -0
  358. package/lib/features/shopping/hooks/useTrendingProducts.js +162 -0
  359. package/lib/features/shopping/hooks/useTrendingProducts.js.map +1 -0
  360. package/lib/features/shopping/productImage.js +42 -0
  361. package/lib/features/shopping/productImage.js.map +1 -0
  362. package/lib/features/shopping/savedProducts.js +84 -0
  363. package/lib/features/shopping/savedProducts.js.map +1 -0
  364. package/lib/features/shopping/services/catalogActions.js +166 -0
  365. package/lib/features/shopping/services/catalogActions.js.map +1 -0
  366. package/lib/features/shopping/services/parsePriceCheckIntent.js +58 -0
  367. package/lib/features/shopping/services/parsePriceCheckIntent.js.map +1 -0
  368. package/lib/features/shopping/services/parseShoppingIntent.js +67 -0
  369. package/lib/features/shopping/services/parseShoppingIntent.js.map +1 -0
  370. package/lib/features/shopping/services/productAvailability.js +25 -0
  371. package/lib/features/shopping/services/productAvailability.js.map +1 -0
  372. package/lib/features/shopping/services/productFilters.js +72 -0
  373. package/lib/features/shopping/services/productFilters.js.map +1 -0
  374. package/lib/features/shopping/services/retailerUrl.js +75 -0
  375. package/lib/features/shopping/services/retailerUrl.js.map +1 -0
  376. package/lib/features/shopping/services/shoppingChatReply.js +46 -0
  377. package/lib/features/shopping/services/shoppingChatReply.js.map +1 -0
  378. package/lib/features/shopping/services/shoppingProductSearch.js +336 -0
  379. package/lib/features/shopping/services/shoppingProductSearch.js.map +1 -0
  380. package/lib/features/shopping/services/shoppingSearchConnectorClient.js +41 -0
  381. package/lib/features/shopping/services/shoppingSearchConnectorClient.js.map +1 -0
  382. package/lib/features/shopping/shopAgentSwipe.js +7 -0
  383. package/lib/features/shopping/shopAgentSwipe.js.map +1 -0
  384. package/lib/features/shopping/shoppingCart.js +116 -0
  385. package/lib/features/shopping/shoppingCart.js.map +1 -0
  386. package/lib/features/shopping/shoppingExec.js +14 -0
  387. package/lib/features/shopping/shoppingExec.js.map +1 -0
  388. package/lib/features/shopping/shoppingHistoryStore.js +176 -0
  389. package/lib/features/shopping/shoppingHistoryStore.js.map +1 -0
  390. package/lib/features/shopping/shoppingRuntime.js +63 -0
  391. package/lib/features/shopping/shoppingRuntime.js.map +1 -0
  392. package/lib/features/shopping/timeAgo.js +14 -0
  393. package/lib/features/shopping/timeAgo.js.map +1 -0
  394. package/lib/features/shopping/useShoppingSearch.js +262 -0
  395. package/lib/features/shopping/useShoppingSearch.js.map +1 -0
  396. package/lib/features/travel/BookHeaderGlow.js +48 -0
  397. package/lib/features/travel/BookHeaderGlow.js.map +1 -0
  398. package/lib/features/travel/BookingsPanel.js +29 -0
  399. package/lib/features/travel/BookingsPanel.js.map +1 -0
  400. package/lib/features/travel/DiscoverPanel.js +155 -0
  401. package/lib/features/travel/DiscoverPanel.js.map +1 -0
  402. package/lib/features/travel/FlightCompareBar.js +86 -0
  403. package/lib/features/travel/FlightCompareBar.js.map +1 -0
  404. package/lib/features/travel/FlightDealsBoard.js +100 -0
  405. package/lib/features/travel/FlightDealsBoard.js.map +1 -0
  406. package/lib/features/travel/HistoryPanel.js +82 -0
  407. package/lib/features/travel/HistoryPanel.js.map +1 -0
  408. package/lib/features/travel/PopularDestinations.js +144 -0
  409. package/lib/features/travel/PopularDestinations.js.map +1 -0
  410. package/lib/features/travel/SavedPanel.js +27 -0
  411. package/lib/features/travel/SavedPanel.js.map +1 -0
  412. package/lib/features/travel/TravelAgentChatPane.js +303 -0
  413. package/lib/features/travel/TravelAgentChatPane.js.map +1 -0
  414. package/lib/features/travel/TravelBookHero.js +425 -0
  415. package/lib/features/travel/TravelBookHero.js.map +1 -0
  416. package/lib/features/travel/TravelDatesField.js +234 -0
  417. package/lib/features/travel/TravelDatesField.js.map +1 -0
  418. package/lib/features/travel/TravelDetailSheet.js +106 -0
  419. package/lib/features/travel/TravelDetailSheet.js.map +1 -0
  420. package/lib/features/travel/TravelExperience.js +624 -0
  421. package/lib/features/travel/TravelExperience.js.map +1 -0
  422. package/lib/features/travel/TravelGuestsField.js +85 -0
  423. package/lib/features/travel/TravelGuestsField.js.map +1 -0
  424. package/lib/features/travel/TravelLanding.js +318 -0
  425. package/lib/features/travel/TravelLanding.js.map +1 -0
  426. package/lib/features/travel/TravelLocationField.js +179 -0
  427. package/lib/features/travel/TravelLocationField.js.map +1 -0
  428. package/lib/features/travel/TravelPropertyCard.js +266 -0
  429. package/lib/features/travel/TravelPropertyCard.js.map +1 -0
  430. package/lib/features/travel/TravelPropertyPhoto.js +22 -0
  431. package/lib/features/travel/TravelPropertyPhoto.js.map +1 -0
  432. package/lib/features/travel/TravelRailFlyout.js +79 -0
  433. package/lib/features/travel/TravelRailFlyout.js.map +1 -0
  434. package/lib/features/travel/TravelResultsMap.js +126 -0
  435. package/lib/features/travel/TravelResultsMap.js.map +1 -0
  436. package/lib/features/travel/WorkspacePanel.js +148 -0
  437. package/lib/features/travel/WorkspacePanel.js.map +1 -0
  438. package/lib/features/travel/appNav.js +244 -0
  439. package/lib/features/travel/appNav.js.map +1 -0
  440. package/lib/features/travel/calendarDays.js +50 -0
  441. package/lib/features/travel/calendarDays.js.map +1 -0
  442. package/lib/features/travel/catalog.js +72 -0
  443. package/lib/features/travel/catalog.js.map +1 -0
  444. package/lib/features/travel/chat/TravelChatResultCard.js +107 -0
  445. package/lib/features/travel/chat/TravelChatResultCard.js.map +1 -0
  446. package/lib/features/travel/chat/widgetContent.js +107 -0
  447. package/lib/features/travel/chat/widgetContent.js.map +1 -0
  448. package/lib/features/travel/flightDeals.js +65 -0
  449. package/lib/features/travel/flightDeals.js.map +1 -0
  450. package/lib/features/travel/mapCoordinates.js +36 -0
  451. package/lib/features/travel/mapCoordinates.js.map +1 -0
  452. package/lib/features/travel/parseTravelIntent.js +303 -0
  453. package/lib/features/travel/parseTravelIntent.js.map +1 -0
  454. package/lib/features/travel/savedStays.js +66 -0
  455. package/lib/features/travel/savedStays.js.map +1 -0
  456. package/lib/features/travel/services/flightDealsBoard.js +111 -0
  457. package/lib/features/travel/services/flightDealsBoard.js.map +1 -0
  458. package/lib/features/travel/services/flightSearchConnectorClient.js +42 -0
  459. package/lib/features/travel/services/flightSearchConnectorClient.js.map +1 -0
  460. package/lib/features/travel/services/geocodeLocation.js +79 -0
  461. package/lib/features/travel/services/geocodeLocation.js.map +1 -0
  462. package/lib/features/travel/services/placePredictions.js +113 -0
  463. package/lib/features/travel/services/placePredictions.js.map +1 -0
  464. package/lib/features/travel/services/resolveOriginCity.js +27 -0
  465. package/lib/features/travel/services/resolveOriginCity.js.map +1 -0
  466. package/lib/features/travel/services/resortifiConnectorClient.js +76 -0
  467. package/lib/features/travel/services/resortifiConnectorClient.js.map +1 -0
  468. package/lib/features/travel/services/travelFlightSearch.js +289 -0
  469. package/lib/features/travel/services/travelFlightSearch.js.map +1 -0
  470. package/lib/features/travel/services/travelPropertySearch.js +377 -0
  471. package/lib/features/travel/services/travelPropertySearch.js.map +1 -0
  472. package/lib/features/travel/travelAgentSwipe.js +7 -0
  473. package/lib/features/travel/travelAgentSwipe.js.map +1 -0
  474. package/lib/features/travel/travelExec.js +14 -0
  475. package/lib/features/travel/travelExec.js.map +1 -0
  476. package/lib/features/travel/travelHistoryStore.js +108 -0
  477. package/lib/features/travel/travelHistoryStore.js.map +1 -0
  478. package/lib/features/travel/travelRuntime.js +62 -0
  479. package/lib/features/travel/travelRuntime.js.map +1 -0
  480. package/lib/features/travel/types.js +9 -0
  481. package/lib/features/travel/types.js.map +1 -0
  482. package/lib/features/travel/useTravelSearch.js +330 -0
  483. package/lib/features/travel/useTravelSearch.js.map +1 -0
  484. package/lib/features/travel/workspaceContent.js +548 -0
  485. package/lib/features/travel/workspaceContent.js.map +1 -0
  486. package/lib/hooks/useCdecliChannel.js +128 -6
  487. package/lib/hooks/useCdecliChannel.js.map +1 -1
  488. package/lib/hooks/useChatApi.js +4 -2
  489. package/lib/hooks/useChatApi.js.map +1 -1
  490. package/lib/hooks/useChatStream.js +77 -63
  491. package/lib/hooks/useChatStream.js.map +1 -1
  492. package/lib/hooks/useHostConnectorCard.js +24 -0
  493. package/lib/hooks/useHostConnectorCard.js.map +1 -0
  494. package/lib/hooks/useObtainSystemToken.js +23 -5
  495. package/lib/hooks/useObtainSystemToken.js.map +1 -1
  496. package/lib/hooks/webViewRetentionPolicy.js +1 -0
  497. package/lib/hooks/webViewRetentionPolicy.js.map +1 -1
  498. package/lib/index.js +1 -1
  499. package/lib/index.js.map +1 -1
  500. package/lib/screens/Chat/index.js +51 -22
  501. package/lib/screens/Chat/index.js.map +1 -1
  502. package/lib/screens/ChatNative/index.js +13 -2
  503. package/lib/screens/ChatNative/index.js.map +1 -1
  504. package/lib/screens/Home/HomeScreen.js +3 -3
  505. package/lib/screens/Home/HomeScreen.js.map +1 -1
  506. package/lib/screens/Home/components/ChatHistoryLanding.js +32 -32
  507. package/lib/screens/Home/components/ChatHistoryLanding.js.map +1 -1
  508. package/lib/screens/JobSearchNative/useJobSearchHostChat.js +12 -6
  509. package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
  510. package/lib/screens/ResumeNative/useResumeHostChat.js +12 -6
  511. package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
  512. package/lib/screens/ShoppingNative/useShoppingHostChat.js +12 -6
  513. package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
  514. package/lib/screens/TravelNative/useTravelHostChat.js +12 -6
  515. package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
  516. package/lib/screens/WebBuilder/WebViewWithNavigation.js +2 -2
  517. package/lib/screens/WebBuilder/WebViewWithNavigation.js.map +1 -1
  518. package/lib/services/brainQuickReply.js +38 -1
  519. package/lib/services/brainQuickReply.js.map +1 -1
  520. package/lib/state/chatThreadMerge.js +6 -1
  521. package/lib/state/chatThreadMerge.js.map +1 -1
  522. package/package.json +6 -4
@@ -0,0 +1,1324 @@
1
+ import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useMemo,useEffect,useState,useRef,useCallback}from'react';import {StyleSheet,PanResponder,View,Text,ActivityIndicator,KeyboardAvoidingView,Pressable,Keyboard,ScrollView,TextInput,Switch,Platform,Modal,Dimensions}from'react-native';import {useFocusEffect}from'@react-navigation/native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {useSafeInsets}from'../canvas/withRemoteSafeArea.js';import {useAppTheme}from'../../theme/AppThemeProvider.js';import {hydrateSavedJobs}from'./savedJobs.js';import {hydrateSearchHistory,useSearchHistory,clearSearches,searchKey,searchChipLabel,removeSearch}from'./searchHistory.js';import {JobSearchLocationField}from'./JobSearchLocationField.js';import {useJobSearchSession}from'./useJobSearchSession.js';import {JobCard}from'./JobCard.js';import {JobDetailSheet}from'./JobDetailSheet.js';import {SavedPanel}from'./SavedPanel.js';import {ApplicationsPanel}from'./ApplicationsPanel.js';import {ProfilePanel}from'./ProfilePanel.js';import {InterviewPanel}from'./InterviewPanel.js';import {InsightsPanel}from'./InsightsPanel.js';import {ContactsPanel}from'./ContactsPanel.js';import {RepliesPanel}from'./RepliesPanel.js';import {JobSearchAgentChatPane}from'./JobSearchAgentChatPane.js';import {JdPastePrompt}from'./JdPastePrompt.js';import {shouldClaimOpenAgentMove,isOpenAgentSwipe}from'./jobAgentSwipe.js';import {jobSearchTheme}from'./jobSearchTheme.js';var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ const AI_STARTERS = [{
21
+ id: "remote-fs",
22
+ label: "Remote full stack",
23
+ prompt: "Find remote full stack engineer roles"
24
+ }, {
25
+ id: "senior-be",
26
+ label: "Senior backend",
27
+ prompt: "Find remote senior backend engineer roles"
28
+ }, {
29
+ id: "research",
30
+ label: "Research a company",
31
+ prompt: "Research a company I name: what they build, verifiable facts I can cite in a cover letter, their live open roles, and salary guidance without inventing numbers.",
32
+ mode: "greet",
33
+ greeting: "Which company should we research, and what role are you targeting? I can cover culture, tech stack, live openings, and verifiable hooks for your outreach."
34
+ }, {
35
+ id: "tailor",
36
+ label: "Tailor an application",
37
+ prompt: "Tailor my full application package for a job posting - ask me for the posting, then produce the resume, cover letter, LinkedIn DM, and why-I-fit bullets for my review. Never invent metrics.",
38
+ mode: "greet",
39
+ greeting: "Which job posting should we tailor for? Paste a JD URL or the company + role and I will build the package."
40
+ }, {
41
+ id: "frontend",
42
+ label: "Frontend react",
43
+ prompt: "Find remote frontend react engineer roles"
44
+ }];
45
+ const REFINE_CHIPS = [{
46
+ id: "remote",
47
+ label: "Remote only",
48
+ apply: (form) => __spreadProps(__spreadValues({}, form), {
49
+ remote: true
50
+ })
51
+ }, {
52
+ id: "anywhere",
53
+ label: "Anywhere",
54
+ apply: (form) => __spreadProps(__spreadValues({}, form), {
55
+ location: "",
56
+ remote: false
57
+ })
58
+ }, {
59
+ id: "senior",
60
+ label: "More senior",
61
+ apply: (form) => __spreadProps(__spreadValues({}, form), {
62
+ query: /\bsenior\b/i.test(form.query) ? form.query : `senior ${form.query}`.trim()
63
+ })
64
+ }];
65
+ const PRIMARY_TABS = [{
66
+ id: "search",
67
+ label: "Jobs",
68
+ icon: "briefcase-outline",
69
+ iconOn: "briefcase"
70
+ }, {
71
+ id: "saved",
72
+ label: "Saved",
73
+ icon: "bookmark-outline",
74
+ iconOn: "bookmark"
75
+ }, {
76
+ id: "applications",
77
+ label: "Applied",
78
+ icon: "clipboard-check-outline",
79
+ iconOn: "clipboard-check"
80
+ }, {
81
+ id: "profile",
82
+ label: "Profile",
83
+ icon: "account-circle-outline",
84
+ iconOn: "account-circle"
85
+ }];
86
+ const TOOLS = [{
87
+ id: "interview",
88
+ label: "Interview prep",
89
+ hint: "Questions and rounds",
90
+ icon: "account-voice"
91
+ }, {
92
+ id: "insights",
93
+ label: "Insights",
94
+ hint: "Pipeline and salary",
95
+ icon: "chart-bar"
96
+ }, {
97
+ id: "replies",
98
+ label: "Replies",
99
+ hint: "Recruiter inbox",
100
+ icon: "email-outline"
101
+ }, {
102
+ id: "contacts",
103
+ label: "Contacts",
104
+ hint: "Networking list",
105
+ icon: "account-group-outline"
106
+ }];
107
+ const PAGE_SIZE = 10;
108
+ function JobSearchExperience({
109
+ token,
110
+ indexUrl,
111
+ sessionError,
112
+ hostChat,
113
+ onAgentVisibleChange,
114
+ initialAgentSeed = null
115
+ }) {
116
+ const {
117
+ isDark
118
+ } = useAppTheme();
119
+ const theme = useMemo(() => jobSearchTheme(isDark), [isDark]);
120
+ const insets = useSafeInsets();
121
+ useEffect(() => {
122
+ void hydrateSavedJobs();
123
+ void hydrateSearchHistory();
124
+ }, []);
125
+ const session = useJobSearchSession(token, indexUrl);
126
+ const history = useSearchHistory();
127
+ const [view, setView] = useState("search");
128
+ const [toolsOpen, setToolsOpen] = useState(false);
129
+ const [editSearch, setEditSearch] = useState(false);
130
+ const [visibleCount, setVisibleCount] = useState(PAGE_SIZE);
131
+ const [aiPrompt, setAiPrompt] = useState("");
132
+ const [agentSeed, setAgentSeed] = useState(initialAgentSeed != null ? initialAgentSeed : null);
133
+ const [detail, setDetail] = useState(null);
134
+ const [jdPrompt, setJdPrompt] = useState(null);
135
+ const [focusAppId, setFocusAppId] = useState(null);
136
+ const [interviewFocusId, setInterviewFocusId] = useState(null);
137
+ const [chatOpen, setChatOpen] = useState(Boolean(initialAgentSeed));
138
+ const landingScrollRef = useRef(null);
139
+ const filtersAnchorRef = useRef(null);
140
+ const landingScrollY = useRef(0);
141
+ const chatOpenRef = useRef(chatOpen);
142
+ const ensureLandingFieldVisible = () => {
143
+ setTimeout(() => {
144
+ var _a;
145
+ (_a = filtersAnchorRef.current) == null ? void 0 : _a.measureInWindow((_x, y, _w, height) => {
146
+ var _a2;
147
+ const winH = Dimensions.get("window").height;
148
+ const keyboardTop = winH - 340;
149
+ const overflow = y + height - keyboardTop;
150
+ if (overflow <= 0) return;
151
+ (_a2 = landingScrollRef.current) == null ? void 0 : _a2.scrollTo({
152
+ y: Math.max(0, landingScrollY.current + overflow + 16),
153
+ animated: true
154
+ });
155
+ });
156
+ }, 100);
157
+ };
158
+ chatOpenRef.current = chatOpen;
159
+ const blockedRef = useRef(false);
160
+ blockedRef.current = Boolean(detail || jdPrompt);
161
+ const swipe = useMemo(() => PanResponder.create({
162
+ onMoveShouldSetPanResponder: (_e, g) => !chatOpenRef.current && !blockedRef.current && shouldClaimOpenAgentMove(g),
163
+ onPanResponderRelease: (_e, g) => {
164
+ if (!chatOpenRef.current && !blockedRef.current && isOpenAgentSwipe(g)) {
165
+ setChatOpen(true);
166
+ }
167
+ }
168
+ }), []);
169
+ useFocusEffect(useCallback(() => {
170
+ return () => {
171
+ setDetail(null);
172
+ setChatOpen(false);
173
+ setToolsOpen(false);
174
+ };
175
+ }, []));
176
+ useEffect(() => {
177
+ onAgentVisibleChange == null ? void 0 : onAgentVisibleChange(chatOpen);
178
+ }, [chatOpen, onAgentVisibleChange]);
179
+ useEffect(() => {
180
+ if (view === "contacts") session.loadContacts();
181
+ if (view === "replies") session.loadReplies();
182
+ }, [view]);
183
+ useEffect(() => {
184
+ setVisibleCount(PAGE_SIZE);
185
+ }, [session.searched, session.jobs]);
186
+ const openJob = useCallback((job) => setDetail(job), []);
187
+ const runTailor = useCallback(async (job, pastedJd) => {
188
+ const outcome = await session.tailor(job, pastedJd);
189
+ if (outcome.status === "needs_jd") {
190
+ setJdPrompt(job);
191
+ return;
192
+ }
193
+ if (outcome.status === "ok") {
194
+ setJdPrompt(null);
195
+ setDetail(null);
196
+ if (outcome.applicationId) setFocusAppId(outcome.applicationId);
197
+ setView("applications");
198
+ }
199
+ }, [session]);
200
+ const activeApplications = useMemo(() => session.applications.filter((a) => !a.archived), [session.applications]);
201
+ const go = (next) => {
202
+ setView(next);
203
+ setToolsOpen(false);
204
+ };
205
+ const submitSearch = () => {
206
+ Keyboard.dismiss();
207
+ setEditSearch(false);
208
+ setVisibleCount(PAGE_SIZE);
209
+ session.runSearch(session.form);
210
+ };
211
+ const replaySearch = (item) => {
212
+ Keyboard.dismiss();
213
+ setEditSearch(false);
214
+ setVisibleCount(PAGE_SIZE);
215
+ session.runSearch(item);
216
+ };
217
+ const resetSearch = () => {
218
+ Keyboard.dismiss();
219
+ setEditSearch(false);
220
+ setVisibleCount(PAGE_SIZE);
221
+ setAiPrompt("");
222
+ session.resetSearch();
223
+ };
224
+ const askAgent = (prompt, opts) => {
225
+ var _a;
226
+ const text = prompt.trim();
227
+ Keyboard.dismiss();
228
+ if (!text && (opts == null ? void 0 : opts.mode) !== "greet") {
229
+ setAgentSeed(null);
230
+ setChatOpen(true);
231
+ return;
232
+ }
233
+ setAiPrompt((opts == null ? void 0 : opts.mode) === "greet" ? "" : text);
234
+ setAgentSeed(__spreadValues(__spreadValues({
235
+ text,
236
+ id: `${Date.now()}-${(text || (opts == null ? void 0 : opts.greeting) || (opts == null ? void 0 : opts.desk) || "greet").slice(0, 24)}`,
237
+ mode: (_a = opts == null ? void 0 : opts.mode) != null ? _a : "send"
238
+ }, (opts == null ? void 0 : opts.greeting) ? {
239
+ greeting: opts.greeting
240
+ } : {}), (opts == null ? void 0 : opts.desk) ? {
241
+ desk: opts.desk
242
+ } : {}));
243
+ setChatOpen(true);
244
+ };
245
+ const runStarter = (starter) => {
246
+ setAiPrompt(starter.label);
247
+ if (starter.mode === "greet") {
248
+ askAgent(starter.prompt, {
249
+ mode: "greet",
250
+ greeting: starter.greeting,
251
+ desk: starter.id === "tailor" ? "tailor" : "research"
252
+ });
253
+ return;
254
+ }
255
+ askAgent(starter.prompt);
256
+ };
257
+ const refineSearch = (chip) => {
258
+ const next = chip.apply(session.form);
259
+ setVisibleCount(PAGE_SIZE);
260
+ setEditSearch(false);
261
+ session.runSearch(next);
262
+ };
263
+ const titleFor = (id) => {
264
+ var _a, _b;
265
+ if (id === "search") return "Jobs";
266
+ if (id === "applications") return "Applied";
267
+ return (_b = (_a = TOOLS.find((t) => t.id === id)) == null ? void 0 : _a.label) != null ? _b : id[0].toUpperCase() + id.slice(1);
268
+ };
269
+ if (sessionError) {
270
+ return /* @__PURE__ */ jsx(View, { style: [styles.fill, {
271
+ backgroundColor: theme.screen
272
+ }], children: /* @__PURE__ */ jsxs(View, { style: styles.center, children: [
273
+ /* @__PURE__ */ jsx(Text, { style: [styles.pageTitle, {
274
+ color: theme.ink
275
+ }], children: "Job Search unavailable" }),
276
+ /* @__PURE__ */ jsx(Text, { style: [styles.copy, {
277
+ color: theme.muted
278
+ }], children: sessionError })
279
+ ] }) });
280
+ }
281
+ if (!token) {
282
+ return /* @__PURE__ */ jsx(View, { style: [styles.fill, {
283
+ backgroundColor: theme.screen,
284
+ alignItems: "center",
285
+ justifyContent: "center"
286
+ }], children: /* @__PURE__ */ jsx(ActivityIndicator, { color: theme.accent }) });
287
+ }
288
+ const panelTheme = {
289
+ ink: theme.ink,
290
+ muted: theme.muted,
291
+ card: theme.card,
292
+ border: theme.border
293
+ };
294
+ const companiesOn = Boolean(session.form.companies.trim());
295
+ const toolSelected = TOOLS.some((tool) => tool.id === view);
296
+ const browsingResults = session.searched;
297
+ const showSearchForm = !browsingResults || editSearch;
298
+ const compactTitle = session.form.query.trim() || session.form.companies.trim() || "Jobs";
299
+ const visibleJobs = session.jobs.slice(0, visibleCount);
300
+ const hasMore = visibleCount < session.jobs.length;
301
+ const rolesLabel = session.jobs.length === 0 ? null : `${session.jobs.length.toLocaleString()}${session.jobs.length >= 250 ? "+" : ""} ${session.jobs.length === 1 ? "role" : "roles"}`;
302
+ const compactSub = [session.form.location.trim() || null, session.form.remote ? "Remote" : null, session.searching && session.jobs.length === 0 ? "Searching\u2026" : rolesLabel].filter(Boolean).join(" \xB7 ");
303
+ const compactMode = view === "search" && browsingResults && !editSearch;
304
+ return /* @__PURE__ */ jsxs(View, { style: [styles.fill, {
305
+ backgroundColor: theme.screen
306
+ }], testID: "job-search-panel", children: [
307
+ /* @__PURE__ */ jsxs(KeyboardAvoidingView, { style: styles.fill, behavior: Platform.OS === "ios" ? "padding" : void 0, enabled: !chatOpen, children: [
308
+ /* @__PURE__ */ jsxs(View, { style: [styles.topBar, {
309
+ backgroundColor: theme.screen
310
+ }], children: [
311
+ compactMode ? /* @__PURE__ */ jsxs(View, { style: [styles.compactBar, {
312
+ backgroundColor: theme.card,
313
+ borderColor: theme.border
314
+ }], children: [
315
+ /* @__PURE__ */ jsxs(Pressable, { onPress: () => setEditSearch(true), style: styles.compactMain, accessibilityRole: "button", accessibilityLabel: "Edit search filters", children: [
316
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "magnify", size: 20, color: theme.accent }),
317
+ /* @__PURE__ */ jsxs(View, { style: {
318
+ flex: 1,
319
+ minWidth: 0
320
+ }, children: [
321
+ /* @__PURE__ */ jsx(Text, { style: [styles.compactTitle, {
322
+ color: theme.ink
323
+ }], numberOfLines: 1, children: compactTitle }),
324
+ compactSub ? /* @__PURE__ */ jsx(Text, { style: [styles.compactSub, {
325
+ color: theme.muted
326
+ }], numberOfLines: 1, children: compactSub }) : null
327
+ ] }),
328
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "tune-variant", size: 18, color: theme.accent })
329
+ ] }),
330
+ /* @__PURE__ */ jsx(Pressable, { onPress: resetSearch, hitSlop: 8, accessibilityRole: "button", accessibilityLabel: "Clear search and start over", style: styles.compactClear, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 18, color: theme.muted }) })
331
+ ] }) : /* @__PURE__ */ jsx(Text, { style: [styles.pageTitle, {
332
+ color: theme.ink
333
+ }], children: titleFor(view) }),
334
+ /* @__PURE__ */ jsxs(View, { style: styles.topActions, children: [
335
+ /* @__PURE__ */ jsx(Pressable, { onPress: () => setToolsOpen(true), accessibilityRole: "button", accessibilityLabel: "More tools", style: [styles.ghostBtn, {
336
+ backgroundColor: toolSelected ? theme.accentSoft : theme.chip
337
+ }], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "dots-horizontal", size: 20, color: toolSelected ? theme.accent : theme.ink }) }),
338
+ /* @__PURE__ */ jsxs(Pressable, { onPress: () => {
339
+ Keyboard.dismiss();
340
+ setChatOpen(true);
341
+ }, accessibilityRole: "button", accessibilityLabel: "Open job agent", style: [browsingResults ? styles.ghostBtn : styles.agentChip, {
342
+ backgroundColor: theme.accentSoft
343
+ }], children: [
344
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "creation", size: 18, color: theme.accent }),
345
+ browsingResults ? null : /* @__PURE__ */ jsx(Text, { style: [styles.agentChipLabel, {
346
+ color: theme.accent
347
+ }], children: "Agent" })
348
+ ] })
349
+ ] })
350
+ ] }),
351
+ /* @__PURE__ */ jsxs(View, { style: styles.body, children: [
352
+ view === "search" ? /* @__PURE__ */ jsx(View, { style: styles.searchPane, children: !browsingResults ? /* @__PURE__ */ jsxs(ScrollView, { ref: landingScrollRef, style: styles.landingFill, contentContainerStyle: styles.landingContent, showsVerticalScrollIndicator: false, keyboardShouldPersistTaps: "handled", keyboardDismissMode: Platform.OS === "ios" ? "interactive" : "on-drag", automaticallyAdjustKeyboardInsets: true, scrollEventThrottle: 16, onScroll: (e) => {
353
+ landingScrollY.current = e.nativeEvent.contentOffset.y;
354
+ }, children: [
355
+ /* @__PURE__ */ jsxs(View, { style: styles.searchBlock, children: [
356
+ /* @__PURE__ */ jsxs(View, { style: [styles.askPanel, {
357
+ backgroundColor: theme.card,
358
+ borderColor: theme.border
359
+ }], children: [
360
+ /* @__PURE__ */ jsxs(View, { style: styles.askPanelHead, children: [
361
+ /* @__PURE__ */ jsx(View, { style: [styles.askBadge, {
362
+ backgroundColor: theme.accent
363
+ }], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "creation", size: 16, color: "#FFFFFF" }) }),
364
+ /* @__PURE__ */ jsxs(View, { style: styles.askHeadCopy, children: [
365
+ /* @__PURE__ */ jsx(Text, { style: [styles.askTitle, {
366
+ color: theme.ink
367
+ }], children: "Ask the agent" }),
368
+ /* @__PURE__ */ jsx(Text, { style: [styles.askHint, {
369
+ color: theme.muted
370
+ }], children: "Describe the role in plain language" })
371
+ ] })
372
+ ] }),
373
+ /* @__PURE__ */ jsxs(View, { style: [styles.askComposer, {
374
+ backgroundColor: theme.screen,
375
+ borderColor: theme.border
376
+ }], children: [
377
+ /* @__PURE__ */ jsx(TextInput, { value: aiPrompt, onChangeText: setAiPrompt, placeholder: "e.g. remote senior full stack roles", placeholderTextColor: theme.muted, returnKeyType: "send", style: [styles.askComposerField, {
378
+ color: theme.ink
379
+ }], accessibilityLabel: "Ask the job agent", onSubmitEditing: () => askAgent(aiPrompt || "Help me find roles that fit my profile") }),
380
+ /* @__PURE__ */ jsxs(Pressable, { onPress: () => askAgent(aiPrompt || "Help me find roles that fit my profile"), style: [styles.askComposerBtn, {
381
+ backgroundColor: theme.accent
382
+ }], accessibilityRole: "button", accessibilityLabel: "Ask the agent", children: [
383
+ /* @__PURE__ */ jsx(Text, { style: styles.askComposerBtnText, children: "Ask" }),
384
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "arrow-right", size: 16, color: "#FFFFFF" })
385
+ ] })
386
+ ] })
387
+ ] }),
388
+ /* @__PURE__ */ jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, contentContainerStyle: styles.aiChipRow, children: AI_STARTERS.map((starter) => /* @__PURE__ */ jsx(Pressable, { onPress: () => runStarter(starter), style: [styles.aiChip, {
389
+ backgroundColor: theme.card,
390
+ borderColor: theme.border
391
+ }], children: /* @__PURE__ */ jsx(Text, { style: [styles.aiChipText, {
392
+ color: theme.ink
393
+ }], children: starter.label }) }, starter.id)) }),
394
+ /* @__PURE__ */ jsxs(View, { style: styles.orRow, children: [
395
+ /* @__PURE__ */ jsx(View, { style: [styles.orLine, {
396
+ backgroundColor: theme.border
397
+ }] }),
398
+ /* @__PURE__ */ jsx(Text, { style: [styles.orText, {
399
+ color: theme.muted
400
+ }], children: "OR SEARCH WITH FILTERS" }),
401
+ /* @__PURE__ */ jsx(View, { style: [styles.orLine, {
402
+ backgroundColor: theme.border
403
+ }] })
404
+ ] }),
405
+ /* @__PURE__ */ jsxs(View, { ref: filtersAnchorRef, collapsable: false, style: styles.filtersStack, children: [
406
+ /* @__PURE__ */ jsxs(View, { style: [styles.searchBar, {
407
+ backgroundColor: theme.card,
408
+ borderColor: theme.border
409
+ }], children: [
410
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "magnify", size: 18, color: theme.muted }),
411
+ /* @__PURE__ */ jsx(TextInput, { value: session.form.query, onChangeText: (query) => session.setForm(__spreadProps(__spreadValues({}, session.form), {
412
+ query
413
+ })), placeholder: "Keywords \u2014 founding engineer typescript", placeholderTextColor: theme.muted, returnKeyType: "next", onFocus: ensureLandingFieldVisible, style: [styles.searchField, {
414
+ color: theme.ink
415
+ }], accessibilityLabel: "Job keywords" }),
416
+ session.form.query ? /* @__PURE__ */ jsx(Pressable, { onPress: () => session.setForm(__spreadProps(__spreadValues({}, session.form), {
417
+ query: ""
418
+ })), accessibilityLabel: "Clear search", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close-circle", size: 16, color: theme.muted }) }) : null
419
+ ] }),
420
+ /* @__PURE__ */ jsxs(View, { style: [styles.searchBar, {
421
+ backgroundColor: theme.card,
422
+ borderColor: theme.border
423
+ }], children: [
424
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "office-building-outline", size: 18, color: theme.muted }),
425
+ /* @__PURE__ */ jsx(TextInput, { value: session.form.companies, onChangeText: (companies) => session.setForm(__spreadProps(__spreadValues({}, session.form), {
426
+ companies
427
+ })), placeholder: "Companies \u2014 stripe, vercel", placeholderTextColor: theme.muted, autoCapitalize: "none", autoCorrect: false, returnKeyType: "next", onFocus: ensureLandingFieldVisible, style: [styles.searchField, {
428
+ color: theme.ink
429
+ }], accessibilityLabel: "Company ATS slugs" }),
430
+ companiesOn ? /* @__PURE__ */ jsx(Pressable, { onPress: () => session.setForm(__spreadProps(__spreadValues({}, session.form), {
431
+ companies: ""
432
+ })), accessibilityLabel: "Clear companies", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close-circle", size: 16, color: theme.muted }) }) : null
433
+ ] }),
434
+ /* @__PURE__ */ jsxs(View, { style: styles.whereRow, children: [
435
+ /* @__PURE__ */ jsx(JobSearchLocationField, { value: session.form.location, theme, onChangeText: (location) => session.setForm(__spreadProps(__spreadValues({}, session.form), {
436
+ location
437
+ })), onSubmitEditing: submitSearch, onFocus: ensureLandingFieldVisible }),
438
+ /* @__PURE__ */ jsx(Pressable, { onPress: submitSearch, style: [styles.searchGo, {
439
+ backgroundColor: theme.accent
440
+ }], accessibilityRole: "button", accessibilityLabel: "Search jobs", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "magnify", size: 18, color: theme.accentInk }) })
441
+ ] }),
442
+ /* @__PURE__ */ jsx(View, { style: styles.remoteRow, children: /* @__PURE__ */ jsxs(View, { style: styles.remoteLeft, children: [
443
+ /* @__PURE__ */ jsx(Text, { style: [styles.remoteLabel, {
444
+ color: theme.ink
445
+ }], children: "Remote" }),
446
+ /* @__PURE__ */ jsx(Switch, { value: session.form.remote, onValueChange: (remote) => session.setForm(__spreadProps(__spreadValues({}, session.form), {
447
+ remote
448
+ })), trackColor: {
449
+ false: theme.chip,
450
+ true: theme.accent
451
+ }, thumbColor: "#ffffff", ios_backgroundColor: theme.chip, accessibilityLabel: "Remote" })
452
+ ] }) })
453
+ ] })
454
+ ] }),
455
+ history.length > 0 ? /* @__PURE__ */ jsxs(View, { style: styles.recentBlock, children: [
456
+ /* @__PURE__ */ jsxs(View, { style: styles.recentHead, children: [
457
+ /* @__PURE__ */ jsxs(View, { style: styles.recentTitleRow, children: [
458
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "clock-outline", size: 14, color: theme.muted }),
459
+ /* @__PURE__ */ jsx(Text, { style: [styles.recentTitle, {
460
+ color: theme.muted
461
+ }], children: "Recent" })
462
+ ] }),
463
+ /* @__PURE__ */ jsx(Pressable, { onPress: () => clearSearches(), accessibilityRole: "button", accessibilityLabel: "Clear all recent searches", children: /* @__PURE__ */ jsx(Text, { style: [styles.recentClear, {
464
+ color: theme.muted
465
+ }], children: "Clear all" }) })
466
+ ] }),
467
+ /* @__PURE__ */ jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles.historyScroll, contentContainerStyle: styles.historyRow, children: history.slice(0, 12).map((item) => {
468
+ const key = searchKey(item);
469
+ return /* @__PURE__ */ jsxs(View, { style: [styles.historyChip, {
470
+ backgroundColor: theme.chip
471
+ }], children: [
472
+ /* @__PURE__ */ jsx(Pressable, { onPress: () => replaySearch(item), style: styles.historyChipMain, accessibilityLabel: `Repeat search ${searchChipLabel(item)}`, children: /* @__PURE__ */ jsxs(Text, { style: [styles.historyText, {
473
+ color: theme.ink
474
+ }], numberOfLines: 1, children: [
475
+ searchChipLabel(item),
476
+ item.hits != null ? ` \xB7 ${item.hits}` : ""
477
+ ] }) }),
478
+ /* @__PURE__ */ jsx(Pressable, { onPress: () => removeSearch(key), hitSlop: 8, accessibilityRole: "button", accessibilityLabel: `Forget search ${searchChipLabel(item)}`, style: styles.historyChipClear, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 14, color: theme.muted }) })
479
+ ] }, key);
480
+ }) })
481
+ ] }) : null,
482
+ /* @__PURE__ */ jsxs(View, { style: styles.tipSection, children: [
483
+ /* @__PURE__ */ jsx(Text, { style: [styles.tipSectionTitle, {
484
+ color: theme.muted
485
+ }], children: "How it works" }),
486
+ [{
487
+ icon: "briefcase-search-outline",
488
+ title: "Search live boards",
489
+ copy: "Keywords and company ATS slugs pull openings from Greenhouse, Lever, Ashby, and more."
490
+ }, {
491
+ icon: "file-document-edit-outline",
492
+ title: "Tailor in one tap",
493
+ copy: "Turn a posting into a resume, cover letter, and LinkedIn DM matched to your profile."
494
+ }, {
495
+ icon: "clipboard-check-outline",
496
+ title: "Track what you apply to",
497
+ copy: "Saved roles and applications stay on the tabs below so follow-ups are easy."
498
+ }].map((tip) => /* @__PURE__ */ jsxs(View, { style: [styles.tipCard, {
499
+ backgroundColor: theme.card,
500
+ borderColor: theme.border
501
+ }], children: [
502
+ /* @__PURE__ */ jsx(View, { style: [styles.tipIcon, {
503
+ backgroundColor: theme.accentSoft
504
+ }], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: tip.icon, size: 20, color: theme.accent }) }),
505
+ /* @__PURE__ */ jsxs(View, { style: {
506
+ flex: 1
507
+ }, children: [
508
+ /* @__PURE__ */ jsx(Text, { style: [styles.tipTitle, {
509
+ color: theme.ink
510
+ }], children: tip.title }),
511
+ /* @__PURE__ */ jsx(Text, { style: [styles.tipCopy, {
512
+ color: theme.muted
513
+ }], children: tip.copy })
514
+ ] })
515
+ ] }, tip.title))
516
+ ] })
517
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
518
+ showSearchForm ? /* @__PURE__ */ jsxs(View, { style: styles.searchBlock, children: [
519
+ /* @__PURE__ */ jsxs(View, { style: [styles.askCompact, {
520
+ backgroundColor: theme.card,
521
+ borderColor: theme.border
522
+ }], children: [
523
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "creation", size: 18, color: theme.accent }),
524
+ /* @__PURE__ */ jsx(TextInput, { value: aiPrompt, onChangeText: setAiPrompt, placeholder: "Ask the agent \u2014 describe the role you want", placeholderTextColor: theme.muted, returnKeyType: "send", style: [styles.askCompactField, {
525
+ color: theme.ink
526
+ }], accessibilityLabel: "Ask the job agent", onSubmitEditing: () => askAgent(aiPrompt || "Help me find roles that fit my profile") }),
527
+ /* @__PURE__ */ jsx(Pressable, { onPress: () => askAgent(aiPrompt || "Help me find roles that fit my profile"), style: [styles.askCompactBtn, {
528
+ backgroundColor: theme.accent
529
+ }], accessibilityRole: "button", accessibilityLabel: "Ask the agent", children: /* @__PURE__ */ jsx(Text, { style: styles.askCompactBtnText, children: "Ask" }) })
530
+ ] }),
531
+ /* @__PURE__ */ jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, contentContainerStyle: styles.aiChipRow, children: AI_STARTERS.map((starter) => /* @__PURE__ */ jsx(Pressable, { onPress: () => runStarter(starter), style: [styles.aiChip, {
532
+ backgroundColor: theme.card,
533
+ borderColor: theme.border
534
+ }], children: /* @__PURE__ */ jsx(Text, { style: [styles.aiChipText, {
535
+ color: theme.ink
536
+ }], children: starter.label }) }, starter.id)) }),
537
+ /* @__PURE__ */ jsxs(View, { style: styles.orRow, children: [
538
+ /* @__PURE__ */ jsx(View, { style: [styles.orLine, {
539
+ backgroundColor: theme.border
540
+ }] }),
541
+ /* @__PURE__ */ jsx(Text, { style: [styles.orText, {
542
+ color: theme.muted
543
+ }], children: "OR SEARCH WITH FILTERS" }),
544
+ /* @__PURE__ */ jsx(View, { style: [styles.orLine, {
545
+ backgroundColor: theme.border
546
+ }] })
547
+ ] }),
548
+ /* @__PURE__ */ jsxs(View, { style: styles.filtersStack, children: [
549
+ /* @__PURE__ */ jsxs(View, { style: [styles.searchBar, {
550
+ backgroundColor: theme.card,
551
+ borderColor: theme.border
552
+ }], children: [
553
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "magnify", size: 18, color: theme.muted }),
554
+ /* @__PURE__ */ jsx(TextInput, { value: session.form.query, onChangeText: (query) => session.setForm(__spreadProps(__spreadValues({}, session.form), {
555
+ query
556
+ })), placeholder: "Keywords \u2014 founding engineer typescript", placeholderTextColor: theme.muted, returnKeyType: "next", style: [styles.searchField, {
557
+ color: theme.ink
558
+ }], accessibilityLabel: "Job keywords" }),
559
+ session.form.query ? /* @__PURE__ */ jsx(Pressable, { onPress: () => session.setForm(__spreadProps(__spreadValues({}, session.form), {
560
+ query: ""
561
+ })), accessibilityLabel: "Clear search", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close-circle", size: 16, color: theme.muted }) }) : null
562
+ ] }),
563
+ /* @__PURE__ */ jsxs(View, { style: [styles.searchBar, {
564
+ backgroundColor: theme.card,
565
+ borderColor: theme.border
566
+ }], children: [
567
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "office-building-outline", size: 18, color: theme.muted }),
568
+ /* @__PURE__ */ jsx(TextInput, { value: session.form.companies, onChangeText: (companies) => session.setForm(__spreadProps(__spreadValues({}, session.form), {
569
+ companies
570
+ })), placeholder: "Companies \u2014 stripe, vercel", placeholderTextColor: theme.muted, autoCapitalize: "none", autoCorrect: false, returnKeyType: "next", onFocus: ensureLandingFieldVisible, style: [styles.searchField, {
571
+ color: theme.ink
572
+ }], accessibilityLabel: "Company ATS slugs" }),
573
+ companiesOn ? /* @__PURE__ */ jsx(Pressable, { onPress: () => session.setForm(__spreadProps(__spreadValues({}, session.form), {
574
+ companies: ""
575
+ })), accessibilityLabel: "Clear companies", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close-circle", size: 16, color: theme.muted }) }) : null
576
+ ] }),
577
+ /* @__PURE__ */ jsxs(View, { style: styles.whereRow, children: [
578
+ /* @__PURE__ */ jsx(JobSearchLocationField, { value: session.form.location, theme, onChangeText: (location) => session.setForm(__spreadProps(__spreadValues({}, session.form), {
579
+ location
580
+ })), onSubmitEditing: submitSearch }),
581
+ /* @__PURE__ */ jsx(Pressable, { onPress: submitSearch, style: [styles.searchGo, {
582
+ backgroundColor: theme.accent
583
+ }], accessibilityRole: "button", accessibilityLabel: "Search jobs", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "magnify", size: 18, color: theme.accentInk }) })
584
+ ] }),
585
+ /* @__PURE__ */ jsxs(View, { style: styles.remoteRow, children: [
586
+ /* @__PURE__ */ jsxs(View, { style: styles.remoteLeft, children: [
587
+ /* @__PURE__ */ jsx(Text, { style: [styles.remoteLabel, {
588
+ color: theme.ink
589
+ }], children: "Remote" }),
590
+ /* @__PURE__ */ jsx(Switch, { value: session.form.remote, onValueChange: (remote) => session.setForm(__spreadProps(__spreadValues({}, session.form), {
591
+ remote
592
+ })), trackColor: {
593
+ false: theme.chip,
594
+ true: theme.accent
595
+ }, thumbColor: "#ffffff", ios_backgroundColor: theme.chip, accessibilityLabel: "Remote" })
596
+ ] }),
597
+ /* @__PURE__ */ jsx(Pressable, { onPress: () => {
598
+ Keyboard.dismiss();
599
+ setEditSearch(false);
600
+ }, style: styles.remoteHide, accessibilityRole: "button", accessibilityLabel: "Hide filters", children: /* @__PURE__ */ jsx(Text, { style: [styles.filterActionText, {
601
+ color: theme.accent
602
+ }], children: "Hide filters" }) })
603
+ ] })
604
+ ] })
605
+ ] }) : null,
606
+ showSearchForm && history.length > 0 ? /* @__PURE__ */ jsxs(View, { style: styles.recentBlock, children: [
607
+ /* @__PURE__ */ jsxs(View, { style: styles.recentHead, children: [
608
+ /* @__PURE__ */ jsxs(View, { style: styles.recentTitleRow, children: [
609
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "clock-outline", size: 14, color: theme.muted }),
610
+ /* @__PURE__ */ jsx(Text, { style: [styles.recentTitle, {
611
+ color: theme.muted
612
+ }], children: "Recent" })
613
+ ] }),
614
+ /* @__PURE__ */ jsx(Pressable, { onPress: () => clearSearches(), accessibilityRole: "button", accessibilityLabel: "Clear all recent searches", children: /* @__PURE__ */ jsx(Text, { style: [styles.recentClear, {
615
+ color: theme.muted
616
+ }], children: "Clear all" }) })
617
+ ] }),
618
+ /* @__PURE__ */ jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles.historyScroll, contentContainerStyle: styles.historyRow, children: history.slice(0, 8).map((item) => {
619
+ const key = searchKey(item);
620
+ return /* @__PURE__ */ jsxs(View, { style: [styles.historyChip, {
621
+ backgroundColor: theme.chip
622
+ }], children: [
623
+ /* @__PURE__ */ jsx(Pressable, { onPress: () => replaySearch(item), style: styles.historyChipMain, accessibilityLabel: `Repeat search ${searchChipLabel(item)}`, children: /* @__PURE__ */ jsxs(Text, { style: [styles.historyText, {
624
+ color: theme.ink
625
+ }], numberOfLines: 1, children: [
626
+ searchChipLabel(item),
627
+ item.hits != null ? ` \xB7 ${item.hits}` : ""
628
+ ] }) }),
629
+ /* @__PURE__ */ jsx(Pressable, { onPress: () => removeSearch(key), hitSlop: 8, accessibilityRole: "button", accessibilityLabel: `Forget search ${searchChipLabel(item)}`, style: styles.historyChipClear, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 14, color: theme.muted }) })
630
+ ] }, key);
631
+ }) })
632
+ ] }) : null,
633
+ /* @__PURE__ */ jsxs(ScrollView, { style: styles.results, contentContainerStyle: styles.list, keyboardShouldPersistTaps: "handled", children: [
634
+ session.searching && session.jobs.length === 0 ? /* @__PURE__ */ jsxs(View, { style: styles.center, children: [
635
+ /* @__PURE__ */ jsx(ActivityIndicator, { color: theme.accent }),
636
+ /* @__PURE__ */ jsx(Text, { style: [styles.copy, {
637
+ color: theme.muted,
638
+ marginTop: 10
639
+ }], children: "Searching live boards\u2026" })
640
+ ] }) : null,
641
+ session.error ? /* @__PURE__ */ jsx(Text, { style: [styles.error, {
642
+ color: theme.danger
643
+ }], children: session.error }) : null,
644
+ session.fallbackNote ? /* @__PURE__ */ jsx(Text, { style: [styles.note, {
645
+ color: theme.muted
646
+ }], children: session.fallbackNote }) : null,
647
+ session.failedProbes.length > 0 ? /* @__PURE__ */ jsxs(Text, { style: [styles.note, {
648
+ color: theme.muted
649
+ }], children: [
650
+ "Some boards failed: ",
651
+ session.failedProbes.map(([k]) => k).join(", ")
652
+ ] }) : null,
653
+ !session.searching && session.searched && session.jobs.length === 0 && !session.error ? /* @__PURE__ */ jsxs(View, { style: styles.center, children: [
654
+ /* @__PURE__ */ jsx(Text, { style: [styles.emptyTitle, {
655
+ color: theme.ink
656
+ }], children: "No matching roles" }),
657
+ /* @__PURE__ */ jsx(Text, { style: [styles.copy, {
658
+ color: theme.muted
659
+ }], children: "Try a broader title, drop the city, or ask the agent to refine." }),
660
+ /* @__PURE__ */ jsxs(Pressable, { onPress: () => askAgent(`No roles matched "${session.form.query}". Suggest a better search.`), style: [styles.aiSecondary, {
661
+ backgroundColor: theme.accentSoft,
662
+ marginTop: 8
663
+ }], children: [
664
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "creation", size: 16, color: theme.accent }),
665
+ /* @__PURE__ */ jsx(Text, { style: [styles.aiSecondaryText, {
666
+ color: theme.accent
667
+ }], children: "Ask agent" })
668
+ ] })
669
+ ] }) : null,
670
+ rolesLabel ? /* @__PURE__ */ jsxs(View, { style: styles.resultMetaRow, children: [
671
+ /* @__PURE__ */ jsxs(Text, { style: [styles.resultMeta, {
672
+ color: theme.muted
673
+ }], children: [
674
+ /* @__PURE__ */ jsxs(Text, { style: {
675
+ color: theme.ink,
676
+ fontWeight: "700"
677
+ }, children: [
678
+ session.jobs.length.toLocaleString(),
679
+ session.jobs.length >= 250 ? "+" : ""
680
+ ] }),
681
+ ` ${session.jobs.length === 1 ? "role" : "roles"}`
682
+ ] }),
683
+ /* @__PURE__ */ jsxs(Pressable, { onPress: resetSearch, style: styles.clearSearchBtn, accessibilityRole: "button", accessibilityLabel: "Clear search and start over", children: [
684
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 16, color: theme.muted }),
685
+ /* @__PURE__ */ jsx(Text, { style: [styles.filterActionText, {
686
+ color: theme.ink
687
+ }], children: "Clear search" })
688
+ ] })
689
+ ] }) : null,
690
+ session.jobs.length > 0 ? /* @__PURE__ */ jsxs(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, contentContainerStyle: styles.refineRow, children: [
691
+ REFINE_CHIPS.map((chip) => /* @__PURE__ */ jsx(Pressable, { onPress: () => refineSearch(chip), style: [styles.aiChip, {
692
+ backgroundColor: theme.chip
693
+ }], children: /* @__PURE__ */ jsx(Text, { style: [styles.aiChipText, {
694
+ color: theme.ink
695
+ }], children: chip.label }) }, chip.id)),
696
+ /* @__PURE__ */ jsxs(Pressable, { onPress: () => askAgent(`Refine my search for "${session.form.query}"${session.form.location ? ` in ${session.form.location}` : ""}${session.form.remote ? " remote" : ""}. Suggest better keywords and update the list.`), style: [styles.aiChip, {
697
+ backgroundColor: theme.accentSoft,
698
+ flexDirection: "row",
699
+ gap: 4
700
+ }], children: [
701
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "creation", size: 13, color: theme.accent }),
702
+ /* @__PURE__ */ jsx(Text, { style: [styles.aiChipText, {
703
+ color: theme.accent
704
+ }], children: "Refine with agent" })
705
+ ] })
706
+ ] }) : null,
707
+ visibleJobs.map((job) => /* @__PURE__ */ jsx(JobCard, { job, theme, onOpen: () => openJob(job), onTailor: () => void runTailor(job), tailoring: session.tailoringId === job.id }, job.id)),
708
+ hasMore ? /* @__PURE__ */ jsx(Pressable, { onPress: () => setVisibleCount((n) => n + PAGE_SIZE), style: [styles.loadMore, {
709
+ backgroundColor: theme.card,
710
+ borderColor: theme.border
711
+ }], accessibilityRole: "button", accessibilityLabel: "Load more roles", children: /* @__PURE__ */ jsx(Text, { style: [styles.loadMoreText, {
712
+ color: theme.accent
713
+ }], children: "Load more" }) }) : null
714
+ ] })
715
+ ] }) }) : null,
716
+ view === "saved" ? /* @__PURE__ */ jsx(SavedPanel, { theme, onOpen: openJob, onTailor: (job) => void runTailor(job), tailoringId: session.tailoringId }) : null,
717
+ view === "applications" ? /* @__PURE__ */ jsx(ApplicationsPanel, __spreadProps(__spreadValues({ applications: activeApplications, loading: session.loadingApps, error: session.error, storageConfigured: session.appsStorageConfigured, focusApplicationId: focusAppId }, panelTheme), { accent: theme.accent, accentInk: theme.accentInk, chip: theme.chip, danger: theme.danger, onRefresh: session.refreshApplications, onStatusChange: (app, status) => session.updateStatus(app.id, status), onOpenResume: session.openApplicationResume, onOutreach: (app) => askAgent(`Write a LinkedIn DM for my ${app.role} application at ${app.company} - open with something specific and verifiable.`), onPrepInterview: (app) => {
718
+ setInterviewFocusId(app.id);
719
+ setView("interview");
720
+ }, onFollowUp: session.draftFollowUp, onNegotiate: session.draftNegotiate, onArchive: session.archiveApplication, onApply: session.startApply, onApplyStatus: session.pollApplyStatus })) : null,
721
+ view === "interview" ? /* @__PURE__ */ jsx(InterviewPanel, __spreadProps(__spreadValues({ applications: activeApplications, error: session.error, focusApplicationId: interviewFocusId }, panelTheme), { accent: theme.accent, accentInk: theme.accentInk, chip: theme.chip, danger: theme.danger, onPrep: session.runInterviewPrep, onPractice: session.runInterviewPractice })) : null,
722
+ view === "insights" ? /* @__PURE__ */ jsx(InsightsPanel, __spreadProps(__spreadValues({ applications: session.applications, insights: session.insights, generating: session.loadingInsights, error: session.error }, panelTheme), { accent: theme.accent, accentInk: theme.accentInk, onGenerate: () => void session.loadInsights() })) : null,
723
+ view === "replies" ? /* @__PURE__ */ jsx(RepliesPanel, __spreadProps(__spreadValues({ replies: session.replies, loading: session.loadingReplies, error: session.error }, panelTheme), { accent: theme.accent, accentInk: theme.accentInk, chip: theme.chip, danger: theme.danger, onPaste: session.pasteReply, onClassify: session.classifyReply, onRefresh: session.loadReplies })) : null,
724
+ view === "contacts" ? /* @__PURE__ */ jsx(ContactsPanel, __spreadProps(__spreadValues({ contacts: session.contacts, loading: session.loadingContacts, storageConfigured: session.contactsStorageConfigured, error: session.error }, panelTheme), { accent: theme.accent, accentInk: theme.accentInk, chip: theme.chip, danger: theme.danger, onSave: session.saveContact, onDelete: session.deleteContact, onRefresh: session.loadContacts })) : null,
725
+ view === "profile" ? /* @__PURE__ */ jsx(ProfilePanel, __spreadProps(__spreadValues({ profile: session.profile, loading: session.loadingProfile, saving: session.savingProfile, error: session.error }, panelTheme), { accent: theme.accent, accentInk: theme.accentInk, accentSoft: theme.accentSoft, chip: theme.chip, danger: theme.danger, warning: theme.warning, onSave: session.saveProfile, onOpenMasterResume: session.openMasterResume, onImportResume: session.importResume })) : null
726
+ ] }),
727
+ /* @__PURE__ */ jsx(View, { style: [styles.tabBar, {
728
+ backgroundColor: theme.card,
729
+ borderTopColor: theme.border,
730
+ paddingBottom: Math.max(insets.bottom, 8)
731
+ }], children: PRIMARY_TABS.map((tab) => {
732
+ const selected = view === tab.id;
733
+ return /* @__PURE__ */ jsxs(Pressable, { onPress: () => go(tab.id), accessibilityRole: "tab", accessibilityState: {
734
+ selected
735
+ }, style: styles.tabItem, children: [
736
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: selected ? tab.iconOn : tab.icon, size: 22, color: selected ? theme.accent : theme.muted }),
737
+ /* @__PURE__ */ jsx(Text, { style: [styles.tabLabel, {
738
+ color: selected ? theme.accent : theme.muted
739
+ }], children: tab.label })
740
+ ] }, tab.id);
741
+ }) })
742
+ ] }),
743
+ /* @__PURE__ */ jsx(Modal, { visible: toolsOpen, animationType: "fade", transparent: true, onRequestClose: () => setToolsOpen(false), children: /* @__PURE__ */ jsx(Pressable, { style: styles.sheetBackdrop, onPress: () => setToolsOpen(false), children: /* @__PURE__ */ jsxs(Pressable, { style: [styles.sheet, {
744
+ backgroundColor: theme.card,
745
+ paddingBottom: Math.max(insets.bottom, 16)
746
+ }], onPress: () => void 0, children: [
747
+ /* @__PURE__ */ jsx(View, { style: [styles.sheetHandle, {
748
+ backgroundColor: theme.border
749
+ }] }),
750
+ /* @__PURE__ */ jsx(Text, { style: [styles.sheetTitle, {
751
+ color: theme.ink
752
+ }], children: "Pipeline tools" }),
753
+ TOOLS.map((tool) => /* @__PURE__ */ jsxs(Pressable, { onPress: () => go(tool.id), style: [styles.toolRow, {
754
+ borderColor: theme.border
755
+ }], children: [
756
+ /* @__PURE__ */ jsx(View, { style: [styles.toolIcon, {
757
+ backgroundColor: theme.accentSoft
758
+ }], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: tool.icon, size: 18, color: theme.accent }) }),
759
+ /* @__PURE__ */ jsxs(View, { style: {
760
+ flex: 1
761
+ }, children: [
762
+ /* @__PURE__ */ jsx(Text, { style: [styles.toolLabel, {
763
+ color: theme.ink
764
+ }], children: tool.label }),
765
+ /* @__PURE__ */ jsx(Text, { style: [styles.toolHint, {
766
+ color: theme.muted
767
+ }], children: tool.hint })
768
+ ] }),
769
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "chevron-right", size: 20, color: theme.muted })
770
+ ] }, tool.id))
771
+ ] }) }) }),
772
+ detail ? /* @__PURE__ */ jsx(JobDetailSheet, { job: detail, onClose: () => setDetail(null), onTailor: () => void runTailor(detail), tailoring: session.tailoringId === detail.id, pkg: session.packageByJob[detail.id], notice: session.notice, theme }) : null,
773
+ jdPrompt ? /* @__PURE__ */ jsx(JdPastePrompt, { job: jdPrompt, theme, onCancel: () => setJdPrompt(null), onSubmit: (jd) => {
774
+ const job = jdPrompt;
775
+ setJdPrompt(null);
776
+ void runTailor(job, jd);
777
+ } }) : null,
778
+ chatOpen || detail ? null : /* @__PURE__ */ jsx(View, __spreadProps(__spreadValues({ style: styles.agentSwipeEdge }, swipe.panHandlers), { accessibilityLabel: "Swipe left from here to open the job agent" })),
779
+ /* @__PURE__ */ jsx(JobSearchAgentChatPane, { visible: chatOpen, onClose: () => {
780
+ setChatOpen(false);
781
+ setAgentSeed(null);
782
+ }, onClearChat: () => {
783
+ resetSearch();
784
+ setAgentSeed(null);
785
+ setAiPrompt("");
786
+ }, hostChat, applyFromChat: session.applyFromChat, jobs: session.jobs, onViewJobs: () => {
787
+ setView("search");
788
+ setEditSearch(false);
789
+ setVisibleCount(PAGE_SIZE);
790
+ setChatOpen(false);
791
+ setAgentSeed(null);
792
+ }, onOpenJob: (job) => {
793
+ setChatOpen(false);
794
+ setAgentSeed(null);
795
+ openJob(job);
796
+ }, seedTurn: agentSeed, isDark, ink: theme.ink, muted: theme.muted, screen: theme.screen, border: theme.border, card: theme.card, accent: theme.accent })
797
+ ] });
798
+ }
799
+ const styles = StyleSheet.create({
800
+ fill: {
801
+ flex: 1
802
+ },
803
+ body: {
804
+ flex: 1,
805
+ minHeight: 0
806
+ },
807
+ searchPane: {
808
+ flex: 1,
809
+ minHeight: 0
810
+ },
811
+ center: {
812
+ alignItems: "center",
813
+ justifyContent: "center",
814
+ padding: 28,
815
+ gap: 8
816
+ },
817
+ copy: {
818
+ fontSize: 14,
819
+ lineHeight: 20,
820
+ textAlign: "center"
821
+ },
822
+ pageTitle: {
823
+ fontSize: 28,
824
+ fontWeight: "800",
825
+ letterSpacing: -0.6
826
+ },
827
+ topBar: {
828
+ flexDirection: "row",
829
+ alignItems: "center",
830
+ justifyContent: "space-between",
831
+ paddingHorizontal: 16,
832
+ paddingTop: 4,
833
+ paddingBottom: 6,
834
+ flexGrow: 0,
835
+ flexShrink: 0
836
+ },
837
+ topActions: {
838
+ flexDirection: "row",
839
+ alignItems: "center",
840
+ gap: 8
841
+ },
842
+ ghostBtn: {
843
+ width: 40,
844
+ height: 40,
845
+ borderRadius: 12,
846
+ alignItems: "center",
847
+ justifyContent: "center"
848
+ },
849
+ agentChip: {
850
+ flexDirection: "row",
851
+ alignItems: "center",
852
+ gap: 6,
853
+ borderRadius: 12,
854
+ paddingHorizontal: 12,
855
+ height: 40
856
+ },
857
+ agentChipLabel: {
858
+ fontSize: 13,
859
+ fontWeight: "700"
860
+ },
861
+ compactBar: {
862
+ flex: 1,
863
+ flexDirection: "row",
864
+ alignItems: "center",
865
+ gap: 4,
866
+ borderWidth: 1,
867
+ borderRadius: 16,
868
+ paddingLeft: 12,
869
+ paddingRight: 6,
870
+ paddingVertical: 8,
871
+ minHeight: 52,
872
+ marginRight: 8
873
+ },
874
+ compactMain: {
875
+ flex: 1,
876
+ flexDirection: "row",
877
+ alignItems: "center",
878
+ gap: 8,
879
+ minWidth: 0
880
+ },
881
+ compactClear: {
882
+ width: 32,
883
+ height: 32,
884
+ alignItems: "center",
885
+ justifyContent: "center"
886
+ },
887
+ compactTitle: {
888
+ fontSize: 15,
889
+ fontWeight: "700",
890
+ letterSpacing: -0.2
891
+ },
892
+ compactSub: {
893
+ fontSize: 11,
894
+ fontWeight: "600",
895
+ marginTop: 1
896
+ },
897
+ filterActionText: {
898
+ fontSize: 13,
899
+ fontWeight: "700"
900
+ },
901
+ clearSearchBtn: {
902
+ flexDirection: "row",
903
+ alignItems: "center",
904
+ gap: 4,
905
+ paddingVertical: 2
906
+ },
907
+ searchBlock: {
908
+ paddingHorizontal: 16,
909
+ paddingBottom: 8,
910
+ gap: 8,
911
+ flexGrow: 0
912
+ },
913
+ filtersStack: {
914
+ gap: 10
915
+ },
916
+ whereRow: {
917
+ flexDirection: "row",
918
+ alignItems: "center",
919
+ gap: 8,
920
+ zIndex: 6
921
+ },
922
+ searchBar: {
923
+ flexDirection: "row",
924
+ alignItems: "center",
925
+ gap: 8,
926
+ borderWidth: StyleSheet.hairlineWidth,
927
+ borderRadius: 12,
928
+ paddingHorizontal: 10,
929
+ height: 40,
930
+ overflow: "hidden"
931
+ },
932
+ searchField: {
933
+ flex: 1,
934
+ fontSize: 14,
935
+ paddingVertical: 0,
936
+ lineHeight: 18,
937
+ height: 40
938
+ },
939
+ searchGo: {
940
+ width: 40,
941
+ height: 40,
942
+ borderRadius: 12,
943
+ alignItems: "center",
944
+ justifyContent: "center",
945
+ alignSelf: "center",
946
+ flexShrink: 0
947
+ },
948
+ remoteRow: {
949
+ flexDirection: "row",
950
+ alignItems: "center",
951
+ justifyContent: "flex-start",
952
+ flexWrap: "wrap",
953
+ paddingHorizontal: 2,
954
+ paddingTop: 4,
955
+ paddingBottom: 2,
956
+ gap: 12
957
+ },
958
+ remoteLeft: {
959
+ flexDirection: "row",
960
+ alignItems: "center",
961
+ gap: 8,
962
+ flexGrow: 0,
963
+ flexShrink: 0
964
+ },
965
+ remoteLabel: {
966
+ fontSize: 14,
967
+ fontWeight: "700"
968
+ },
969
+ remoteHide: {
970
+ marginLeft: "auto"
971
+ },
972
+ historyScroll: {
973
+ flexGrow: 0,
974
+ flexShrink: 0
975
+ },
976
+ recentBlock: {
977
+ paddingBottom: 4
978
+ },
979
+ recentHead: {
980
+ flexDirection: "row",
981
+ alignItems: "center",
982
+ justifyContent: "space-between",
983
+ paddingHorizontal: 16,
984
+ paddingBottom: 6
985
+ },
986
+ recentTitleRow: {
987
+ flexDirection: "row",
988
+ alignItems: "center",
989
+ gap: 6
990
+ },
991
+ recentTitle: {
992
+ fontSize: 11,
993
+ fontWeight: "800",
994
+ letterSpacing: 0.6,
995
+ textTransform: "uppercase"
996
+ },
997
+ recentClear: {
998
+ fontSize: 13,
999
+ fontWeight: "700"
1000
+ },
1001
+ historyRow: {
1002
+ paddingHorizontal: 16,
1003
+ paddingBottom: 8,
1004
+ gap: 8,
1005
+ alignItems: "center"
1006
+ },
1007
+ landingFill: {
1008
+ flex: 1,
1009
+ minHeight: 0
1010
+ },
1011
+ landingContent: {
1012
+ flexGrow: 1,
1013
+ paddingTop: 4,
1014
+ paddingBottom: 32,
1015
+ gap: 12
1016
+ },
1017
+ tipSection: {
1018
+ paddingHorizontal: 16,
1019
+ gap: 10,
1020
+ paddingTop: 4
1021
+ },
1022
+ tipSectionTitle: {
1023
+ fontSize: 11,
1024
+ fontWeight: "800",
1025
+ letterSpacing: 0.6,
1026
+ textTransform: "uppercase",
1027
+ marginBottom: 2
1028
+ },
1029
+ results: {
1030
+ flex: 1,
1031
+ minHeight: 0
1032
+ },
1033
+ askPanel: {
1034
+ borderWidth: 1,
1035
+ borderRadius: 16,
1036
+ padding: 12,
1037
+ gap: 10
1038
+ },
1039
+ askPanelHead: {
1040
+ flexDirection: "row",
1041
+ alignItems: "center",
1042
+ gap: 10
1043
+ },
1044
+ askHeadCopy: {
1045
+ flex: 1,
1046
+ minWidth: 0
1047
+ },
1048
+ askBadge: {
1049
+ width: 34,
1050
+ height: 34,
1051
+ borderRadius: 10,
1052
+ alignItems: "center",
1053
+ justifyContent: "center"
1054
+ },
1055
+ askTitle: {
1056
+ fontSize: 15,
1057
+ fontWeight: "800",
1058
+ letterSpacing: -0.3
1059
+ },
1060
+ askHint: {
1061
+ fontSize: 12,
1062
+ marginTop: 1,
1063
+ lineHeight: 16
1064
+ },
1065
+ askComposer: {
1066
+ flexDirection: "row",
1067
+ alignItems: "center",
1068
+ gap: 8,
1069
+ borderWidth: 1,
1070
+ borderRadius: 12,
1071
+ paddingLeft: 12,
1072
+ paddingRight: 6,
1073
+ height: 44
1074
+ },
1075
+ askComposerField: {
1076
+ flex: 1,
1077
+ fontSize: 14,
1078
+ paddingVertical: 0,
1079
+ lineHeight: 18
1080
+ },
1081
+ askComposerBtn: {
1082
+ flexDirection: "row",
1083
+ alignItems: "center",
1084
+ gap: 4,
1085
+ height: 32,
1086
+ borderRadius: 10,
1087
+ paddingHorizontal: 12
1088
+ },
1089
+ askComposerBtnText: {
1090
+ color: "#FFFFFF",
1091
+ fontSize: 13,
1092
+ fontWeight: "800"
1093
+ },
1094
+ askCompact: {
1095
+ flexDirection: "row",
1096
+ alignItems: "center",
1097
+ gap: 8,
1098
+ borderWidth: 1,
1099
+ borderRadius: 14,
1100
+ paddingLeft: 12,
1101
+ paddingRight: 6,
1102
+ minHeight: 48
1103
+ },
1104
+ askCompactField: {
1105
+ flex: 1,
1106
+ fontSize: 15,
1107
+ paddingVertical: 10
1108
+ },
1109
+ askCompactBtn: {
1110
+ borderRadius: 10,
1111
+ paddingHorizontal: 14,
1112
+ paddingVertical: 10
1113
+ },
1114
+ askCompactBtnText: {
1115
+ color: "#FFFFFF",
1116
+ fontSize: 14,
1117
+ fontWeight: "800"
1118
+ },
1119
+ orRow: {
1120
+ flexDirection: "row",
1121
+ alignItems: "center",
1122
+ gap: 10,
1123
+ paddingVertical: 2
1124
+ },
1125
+ orLine: {
1126
+ flex: 1,
1127
+ height: StyleSheet.hairlineWidth
1128
+ },
1129
+ orText: {
1130
+ fontSize: 10,
1131
+ fontWeight: "800",
1132
+ letterSpacing: 0.7
1133
+ },
1134
+ tipCard: {
1135
+ flexDirection: "row",
1136
+ alignItems: "flex-start",
1137
+ gap: 12,
1138
+ borderWidth: 1,
1139
+ borderRadius: 16,
1140
+ padding: 14
1141
+ },
1142
+ tipIcon: {
1143
+ width: 40,
1144
+ height: 40,
1145
+ borderRadius: 12,
1146
+ alignItems: "center",
1147
+ justifyContent: "center"
1148
+ },
1149
+ tipTitle: {
1150
+ fontSize: 15,
1151
+ fontWeight: "800",
1152
+ letterSpacing: -0.2
1153
+ },
1154
+ tipCopy: {
1155
+ fontSize: 13,
1156
+ lineHeight: 18,
1157
+ marginTop: 3
1158
+ },
1159
+ historyChip: {
1160
+ flexDirection: "row",
1161
+ alignItems: "center",
1162
+ borderRadius: 999,
1163
+ paddingLeft: 10,
1164
+ paddingRight: 4,
1165
+ paddingVertical: 5,
1166
+ maxWidth: 260
1167
+ },
1168
+ historyChipMain: {
1169
+ flexShrink: 1,
1170
+ paddingVertical: 2,
1171
+ paddingRight: 4
1172
+ },
1173
+ historyChipClear: {
1174
+ width: 26,
1175
+ height: 26,
1176
+ alignItems: "center",
1177
+ justifyContent: "center"
1178
+ },
1179
+ historyText: {
1180
+ fontSize: 12,
1181
+ fontWeight: "600"
1182
+ },
1183
+ list: {
1184
+ paddingHorizontal: 16,
1185
+ paddingBottom: 24,
1186
+ gap: 12
1187
+ },
1188
+ resultMetaRow: {
1189
+ flexDirection: "row",
1190
+ alignItems: "center",
1191
+ justifyContent: "space-between",
1192
+ gap: 12,
1193
+ marginBottom: 2
1194
+ },
1195
+ resultMeta: {
1196
+ fontSize: 13,
1197
+ fontWeight: "600",
1198
+ flexShrink: 1
1199
+ },
1200
+ loadMore: {
1201
+ borderWidth: 1,
1202
+ borderRadius: 14,
1203
+ paddingVertical: 12,
1204
+ alignItems: "center",
1205
+ marginTop: 4
1206
+ },
1207
+ loadMoreText: {
1208
+ fontSize: 14,
1209
+ fontWeight: "700"
1210
+ },
1211
+ aiSecondary: {
1212
+ flexDirection: "row",
1213
+ alignItems: "center",
1214
+ justifyContent: "center",
1215
+ gap: 6,
1216
+ borderRadius: 12,
1217
+ paddingHorizontal: 14,
1218
+ paddingVertical: 11
1219
+ },
1220
+ aiSecondaryText: {
1221
+ fontSize: 14,
1222
+ fontWeight: "800"
1223
+ },
1224
+ aiChip: {
1225
+ flexDirection: "row",
1226
+ alignItems: "center",
1227
+ borderRadius: 999,
1228
+ borderWidth: 1,
1229
+ paddingHorizontal: 12,
1230
+ paddingVertical: 8
1231
+ },
1232
+ aiChipText: {
1233
+ fontSize: 12,
1234
+ fontWeight: "700"
1235
+ },
1236
+ aiChipRow: {
1237
+ gap: 8,
1238
+ paddingVertical: 2
1239
+ },
1240
+ refineRow: {
1241
+ gap: 8,
1242
+ paddingBottom: 2
1243
+ },
1244
+ emptyTitle: {
1245
+ fontSize: 17,
1246
+ fontWeight: "700"
1247
+ },
1248
+ error: {
1249
+ fontSize: 13
1250
+ },
1251
+ note: {
1252
+ fontSize: 12
1253
+ },
1254
+ tabBar: {
1255
+ flexDirection: "row",
1256
+ flexGrow: 0,
1257
+ flexShrink: 0,
1258
+ borderTopWidth: StyleSheet.hairlineWidth,
1259
+ paddingTop: 8
1260
+ },
1261
+ tabItem: {
1262
+ flex: 1,
1263
+ alignItems: "center",
1264
+ gap: 3
1265
+ },
1266
+ tabLabel: {
1267
+ fontSize: 11,
1268
+ fontWeight: "700"
1269
+ },
1270
+ sheetBackdrop: {
1271
+ flex: 1,
1272
+ backgroundColor: "rgba(15,23,42,0.4)",
1273
+ justifyContent: "flex-end"
1274
+ },
1275
+ sheet: {
1276
+ borderTopLeftRadius: 22,
1277
+ borderTopRightRadius: 22,
1278
+ paddingHorizontal: 16,
1279
+ paddingTop: 10
1280
+ },
1281
+ sheetHandle: {
1282
+ alignSelf: "center",
1283
+ width: 40,
1284
+ height: 4,
1285
+ borderRadius: 2,
1286
+ marginBottom: 12
1287
+ },
1288
+ sheetTitle: {
1289
+ fontSize: 18,
1290
+ fontWeight: "800",
1291
+ marginBottom: 8,
1292
+ paddingHorizontal: 4
1293
+ },
1294
+ toolRow: {
1295
+ flexDirection: "row",
1296
+ alignItems: "center",
1297
+ gap: 12,
1298
+ paddingVertical: 12,
1299
+ borderBottomWidth: StyleSheet.hairlineWidth
1300
+ },
1301
+ toolIcon: {
1302
+ width: 38,
1303
+ height: 38,
1304
+ borderRadius: 12,
1305
+ alignItems: "center",
1306
+ justifyContent: "center"
1307
+ },
1308
+ toolLabel: {
1309
+ fontSize: 15,
1310
+ fontWeight: "700"
1311
+ },
1312
+ toolHint: {
1313
+ fontSize: 12,
1314
+ marginTop: 1
1315
+ },
1316
+ agentSwipeEdge: {
1317
+ position: "absolute",
1318
+ top: 0,
1319
+ right: 0,
1320
+ bottom: 72,
1321
+ width: 36,
1322
+ zIndex: 9
1323
+ }
1324
+ });export{JobSearchExperience,JobSearchExperience as default};//# sourceMappingURL=JobSearchExperience.js.map