ios: https://github.com/user-attachments/assets/efdfd3e3-239f-4cbf-be1a-7784d1df1851 android: https://github.com/user-attachments/assets/a8e22a5c-60f3-4fb6-8923-b8a786bceb0c ## Overview This PR introduces native iOS UI components, refactors the profile menu, and simplifies the event type creation flow for a more native iOS experience. ## Key Changes ### iOS Native UI Components - **iOS-specific Event Types Page**: Added native Stack.Header, glass UI, and context menus for iOS - **Platform-specific Profile Sheet**: Created separate implementations for iOS (formSheet) and Android/Web (modal) - **Bottom Glass UI Navbar**: Updated bottom navigation bar with glass UI styling for iOS - **Native iOS Alerts**: Replaced custom modals with native `Alert.prompt` for event types and availability pages ### Profile Menu Refactor - Restructured More page with folder layout and native iOS header support - Added profile button to More page header on iOS with glass UI - Added "Copy public page link" and "Roadmap" options to profile sheet - Refactored Header component: removed inline profile modal, now uses route-based navigation - Updated Availability page with New menu and profile button in header - Fixed "My Settings" URL to use `/general` endpoint - Removed "Profile" item from More section menu - Updated tab layout to support `(more)` folder structure ### Simplified Event Type Creation - Reduced event type creation to only require title input - Auto-generate slug from title using slugify utility - Set default duration to 15 minutes - Leave description empty (users can edit later) - Applied to both iOS and Android/Web platforms ### UI Improvements - Updated login button styling: changed background color to pure black (#000000) with white text for better contrast
76 lines
2.1 KiB
TypeScript
76 lines
2.1 KiB
TypeScript
/**
|
|
* Utils Index
|
|
*
|
|
* Central export point for all utility functions.
|
|
* Import utilities from this file for clean imports:
|
|
*
|
|
* @example
|
|
* ```tsx
|
|
* import { formatDuration, secureStorage, parseBufferTime } from '../utils';
|
|
* ```
|
|
*/
|
|
|
|
// Alert utilities
|
|
export { showErrorAlert } from "./alerts";
|
|
// Browser utilities
|
|
export { openInAppBrowser } from "./browser";
|
|
// Default location utilities
|
|
export {
|
|
type DefaultLocation,
|
|
DefaultLocationType,
|
|
defaultLocations,
|
|
getDefaultLocationIconUrl,
|
|
isDefaultLocation,
|
|
} from "./defaultLocations";
|
|
// Event type parser utilities
|
|
export {
|
|
parseBufferTime,
|
|
parseFrequencyUnit,
|
|
parseMinimumNotice,
|
|
parseSlotInterval,
|
|
} from "./eventTypeParsers";
|
|
// Formatting utilities
|
|
export { formatAppIdToDisplayName, formatDuration, truncateTitle } from "./formatters";
|
|
// App icon utilities
|
|
export { getAppIconUrl } from "./getAppIconUrl";
|
|
// Avatar utilities
|
|
export { getAvatarUrl } from "./getAvatarUrl";
|
|
// Gmail Google Chip parser (for extension)
|
|
export {
|
|
type GoogleTimeSlot,
|
|
type ParsedGoogleChip,
|
|
parseGoogleChip,
|
|
} from "./gmailGoogleChipParser";
|
|
// Location helper utilities
|
|
export {
|
|
buildLocationOptions,
|
|
createLocationItemFromOption,
|
|
displayNameToLocationValue,
|
|
formatAppIdToDisplayName as formatAppId, // Alias for backward compatibility
|
|
generateLocationId,
|
|
getLocationDisplayName,
|
|
getLocationIconUrl,
|
|
getLocationInputLabel,
|
|
getLocationInputPlaceholder,
|
|
getLocationInputType,
|
|
locationRequiresInput,
|
|
mapApiLocationToItem,
|
|
mapItemToApiLocation,
|
|
validateLocationItem,
|
|
} from "./locationHelpers";
|
|
// Network utilities
|
|
export { fetchWithTimeout, isOnline } from "./network";
|
|
// Query persistence utilities
|
|
export { clearQueryCache, createQueryPersister, getCacheMetadata } from "./queryPersister";
|
|
// Safe logging utilities
|
|
export { getSafeErrorMessage, safeLogError, safeLogInfo, safeLogWarn } from "./safeLogger";
|
|
// Slug utilities
|
|
export { slugify } from "./slugify";
|
|
// Storage utilities
|
|
export {
|
|
generalStorage,
|
|
isChromeStorageAvailable,
|
|
type StorageAdapter,
|
|
secureStorage,
|
|
} from "./storage";
|