mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-11-13 15:51:00 +00:00
6835fd7bf3
Page transitions: on the phone, pages move like a native navigation stack, built on the View Transitions API (mobile/routeTransition.ts). A page opened from another slides in from the trailing edge, back slides it away, and switching between the dock's sections cross-fades while the dock stands still. Lazy routes do not flash their skeleton: the swap waits, behind the frozen snapshot, until the new page rendered. The edge-swipe back gesture already moves the page and skips the transition. RTL mirrors the motion, reduced motion and desktop get none. Pull-to-refresh on the mobile dashboard: the page follows the finger with resistance, ticks once past the threshold and re-reads trips and notifications quietly, without a loading state. Share: trip share and invite links and the journey link get a share button next to copy, opening the system share sheet (Capacitor Share in the apps, Web Share in browsers that have it). Haptics: a selection click for switches and segmented controls, a tick when a sheet is flung closed, and a firmer bump for the chat's long press. Theme lint: this branch's new screens use the type and z-index tokens, the Vacay company tint is a token, and the baseline is lowered to the new counts.
34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
import { Share } from '@capacitor/share';
|
|
import { canShareText } from '../utils/fileShare';
|
|
import { isNativeApp } from './platform';
|
|
import { reportNativeFailure } from './reportFailure';
|
|
|
|
/**
|
|
* Handing a link to the system share sheet, the way a native app offers
|
|
* "Share…" next to "Copy": Messages, Mail, AirDrop, WhatsApp. Inside the apps
|
|
* through Capacitor's Share, in a browser through the Web Share API where it
|
|
* exists. Where neither does, `canShareLink` is false and the caller shows
|
|
* only the copy button.
|
|
*/
|
|
export function canShareLink(): boolean {
|
|
return isNativeApp() || canShareText();
|
|
}
|
|
|
|
/** True when a target took the link, false when the sheet was closed or failed. */
|
|
export async function shareLink(url: string, title?: string): Promise<boolean> {
|
|
try {
|
|
if (isNativeApp()) {
|
|
await Share.share({ url, title, dialogTitle: title });
|
|
return true;
|
|
}
|
|
await navigator.share({ url, title });
|
|
return true;
|
|
} catch (err) {
|
|
// Closing the sheet rejects too; only a real failure is worth a report.
|
|
const name = (err as { name?: string; message?: string } | null)?.name ?? '';
|
|
const message = (err as { message?: string } | null)?.message ?? '';
|
|
if (name !== 'AbortError' && !/cancel/i.test(message)) reportNativeFailure(err);
|
|
return false;
|
|
}
|
|
}
|