diff --git a/apps/mobile/src/MobileVaultRemotePrompt.tsx b/apps/mobile/src/MobileVaultRemotePrompt.tsx index a92edba2..ae17c08b 100644 --- a/apps/mobile/src/MobileVaultRemotePrompt.tsx +++ b/apps/mobile/src/MobileVaultRemotePrompt.tsx @@ -19,7 +19,7 @@ export function MobileVaultRemotePrompt({ remoteUrl: string }) { return ( - + Git remote {!hasGitHubOAuthClientId ? ( - GitHub login needs EXPO_PUBLIC_GITHUB_OAUTH_CLIENT_ID + GitHub login needs EXPO_PUBLIC_GITHUB_OAUTH_CLIENT_ID ) : null} - {failed ? Enter a valid Git remote URL : null} - + {failed ? Enter a valid Git remote URL : null} + @@ -61,13 +61,13 @@ function PromptButton({ disabled={disabled} onPress={onPress} style={({ pressed }) => [ - styles.createNoteAction, - primary ? styles.createNoteActionPrimary : null, - disabled ? styles.createNoteActionDisabled : null, + styles.remotePromptAction, + primary ? styles.remotePromptActionPrimary : null, + disabled ? styles.remotePromptActionDisabled : null, pressed ? styles.pressed : null, ]} > - {label} + {label} ) } diff --git a/apps/mobile/src/styles.ts b/apps/mobile/src/styles.ts index acb3d532..659f43b6 100644 --- a/apps/mobile/src/styles.ts +++ b/apps/mobile/src/styles.ts @@ -6,6 +6,7 @@ import { noteCreateStyles } from './styles/noteCreateStyles' import { noteListStyles } from './styles/noteListStyles' import { propertiesStyles } from './styles/propertiesStyles' import { propertyChipStyles } from './styles/propertyChipStyles' +import { remotePromptStyles } from './styles/remotePromptStyles' import { sidebarStyles } from './styles/sidebarStyles' import { vaultLoadStyles } from './styles/vaultLoadStyles' @@ -18,6 +19,7 @@ export const styles = { ...noteListStyles, ...propertiesStyles, ...propertyChipStyles, + ...remotePromptStyles, ...sidebarStyles, ...vaultLoadStyles, } diff --git a/apps/mobile/src/styles/noteCreateStyles.ts b/apps/mobile/src/styles/noteCreateStyles.ts index 6b9d4095..7e90e62b 100644 --- a/apps/mobile/src/styles/noteCreateStyles.ts +++ b/apps/mobile/src/styles/noteCreateStyles.ts @@ -61,9 +61,4 @@ export const noteCreateStyles = StyleSheet.create({ padding: spacing.md, backgroundColor: colors.canvas, }, - remotePromptTitle: { - color: colors.text, - fontSize: 15, - fontWeight: '800', - }, }) diff --git a/apps/mobile/src/styles/remotePromptStyles.ts b/apps/mobile/src/styles/remotePromptStyles.ts new file mode 100644 index 00000000..d5faa481 --- /dev/null +++ b/apps/mobile/src/styles/remotePromptStyles.ts @@ -0,0 +1,66 @@ +import { StyleSheet } from 'react-native' +import { colors, spacing } from '../theme' + +export const remotePromptStyles = StyleSheet.create({ + remotePrompt: { + position: 'absolute', + right: spacing.xl, + bottom: spacing.xl + 76, + width: 280, + gap: spacing.sm, + borderColor: colors.border, + borderWidth: StyleSheet.hairlineWidth, + borderRadius: 18, + padding: spacing.md, + backgroundColor: colors.canvas, + }, + remotePromptAction: { + minWidth: 82, + alignItems: 'center', + justifyContent: 'center', + borderRadius: 16, + paddingHorizontal: spacing.md, + paddingVertical: spacing.sm, + backgroundColor: colors.primarySoft, + }, + remotePromptActionDisabled: { + opacity: 0.55, + }, + remotePromptActionPrimary: { + backgroundColor: colors.primary, + }, + remotePromptActionText: { + color: colors.primary, + fontSize: 14, + fontWeight: '700', + }, + remotePromptActionTextPrimary: { + color: colors.canvas, + }, + remotePromptActions: { + flexDirection: 'row', + justifyContent: 'flex-end', + gap: spacing.sm, + }, + remotePromptError: { + color: colors.textSoft, + fontSize: 13, + fontWeight: '600', + }, + remotePromptInput: { + minHeight: 44, + borderColor: colors.border, + borderWidth: StyleSheet.hairlineWidth, + borderRadius: 14, + paddingHorizontal: spacing.md, + color: colors.text, + backgroundColor: colors.canvas, + fontSize: 16, + fontWeight: '600', + }, + remotePromptTitle: { + color: colors.text, + fontSize: 15, + fontWeight: '800', + }, +}) diff --git a/docs/MOBILE_PROGRESS.md b/docs/MOBILE_PROGRESS.md index 257ad514..c18d8683 100644 --- a/docs/MOBILE_PROGRESS.md +++ b/docs/MOBILE_PROGRESS.md @@ -95,12 +95,13 @@ This file is the resumable working log for Tolaria mobile. The strategy and road - Wired remote-backed mobile sync status actions to credential loading and the GitHub OAuth flow, including visible syncing/failed status states when Connect is tapped. - Added a mobile vault remote setup prompt behind the sidebar controls, with persisted remote URL metadata validation and removal by blanking the value. - Exposed the missing `EXPO_PUBLIC_GITHUB_OAUTH_CLIENT_ID` requirement inside the mobile remote setup prompt and split the client-id detector away from native AuthSession imports. +- Separated the mobile Git remote setup prompt styles from note-creation prompt styles so vault-management UI can evolve without coupling to compose UI names. ## Next Action Continue Phase 4 with editor durability: -1. Add a clearer mobile settings/vault-management surface around the remote setup prompt and consider moving the prompt out of the create-note popover styling. +1. Add a clearer mobile settings/vault-management surface around the remote setup prompt. 2. Continue TenTap Markdown serialization coverage for any editor output observed in simulator QA. 3. Retry the iOS development-client build after installing an iOS 26.2 simulator runtime in Xcode. @@ -356,6 +357,10 @@ Continue Phase 4 with editor durability: - `pnpm --filter @tolaria/mobile typecheck` passed after surfacing OAuth client-id state. - CodeScene after surfacing OAuth client-id state: `apps/mobile/src/MobileApp.tsx`, `apps/mobile/src/MobileVaultRemotePrompt.tsx`, `apps/mobile/src/mobileGitHubOAuthClientId.ts`, `apps/mobile/src/mobileGitHubOAuthEnvironment.ts`, and `apps/mobile/src/mobileGitHubOAuthEnvironment.test.ts` scored `10`. - `pnpm --filter @tolaria/mobile exec expo export --platform ios --output-dir /tmp/tolaria-mobile-export` passed after surfacing OAuth client-id state. +- `pnpm --filter @tolaria/mobile test -- src/mobileVaultRemoteSetup.test.ts src/mobileGitHubOAuthEnvironment.test.ts` passed after splitting mobile remote prompt styles: 39 files / 131 tests. +- `pnpm --filter @tolaria/mobile typecheck` passed after splitting mobile remote prompt styles. +- CodeScene after splitting mobile remote prompt styles: `apps/mobile/src/MobileVaultRemotePrompt.tsx`, `apps/mobile/src/styles/remotePromptStyles.ts`, and `apps/mobile/src/styles/noteCreateStyles.ts` scored `10`; `apps/mobile/src/styles.ts` returned no scorable code and no findings. +- `pnpm --filter @tolaria/mobile exec expo export --platform ios --output-dir /tmp/tolaria-mobile-export` passed after splitting mobile remote prompt styles. ## Risks / Watch Items